From nobody Mon Jun 15 13:56:24 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011015.outbound.protection.outlook.com [52.101.65.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1705C328B61 for ; Fri, 10 Apr 2026 16:47:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.15 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839677; cv=fail; b=R3fjlrDHmEVTHx+PiUKpoNwg9CwXFQWOD23lZhM9D5Rml//KJpU0vmxYs4wT65S4iTzzVt4s2Qk1IWiXY6iZDHRpGSQaxTzAGuqyzVePeYva/8ii9PkHOmK4xyehDo9/0L8niRUVicQn8FwrcFwKbvGzbD4KLlles5YtynLIhD4= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839677; c=relaxed/simple; bh=g7Q119CaqENKjgkNhlg7ggL+C3VL6UXuovB6JLha29c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=odVEe8oPiWXJY4JjBPsVTSeM9I4P6NzwG7OpdlRQRVLdc1AqG7OYDeb6CcXvm0Jg2qn1pgLOr+CS6pksmBjuRaBJTGtt1ZOUERTpyQ1YK3NeurV31BdE/BE0lrmQyWyQryS2ngTP+J5EMWNL8lYXWESVpEyZZWwRMd2EsdgyQOo= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=UTJKbHBH; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=UTJKbHBH; arc=fail smtp.client-ip=52.101.65.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="UTJKbHBH"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="UTJKbHBH" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=FpRfMGntPfehi0L4wbWidbPWeSR53juKP6b5jhtVVa2SFp0SOcpJRcEdPlHlf1PDvHYXWQZ1/k5j9kdIXSMvSYErRPe1Tikilc8sr9c3iERjms5tmR77frqC0JzgoqPb5ZQTuG2LXlTb1h+EsNZczKpuNZumfRHW02du9eNNQ5gtImCMJpYiPSAM4fJwPvZtZKeQ7q9V1E6tM6RUh2LBVvnoaY+2veTyRMuuRk5t/bHoJ3SQ5h74JaM4KHw//ARJmB9Cp2rFGZh7/Lv3C6Vrsqo3rbgBGuiROkzAaXl4MJCsKl8ktQBcrKsqFVz9ojsrfoy9seHAwG03vPHonY03nQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+gwTABRoWIin4lYbqQbj3u1ZQ6L2TUJs9/tRvYfFPJ0=; b=NsTnJxbgZCE/ox3GRh5ScvgG156dqXSueDbds0KPbP2Vvm1k7Ny86qLtfVrprWFIO5jiTECrQdyklcVgmM61hpH+wdPLx0CtVse10E0xAVsC7ItHuWFUfW/3amMeeymCL7BINQiinGX/sxSuGGS8RZ6JMG8qlBQjvXpGWIFURT+rxiKJvV81eDD08vulTaUEtXwGqTiO61tbq+JyVeUue6k1LoVW0aK322py29A6GTP4+0mpwWRpfBHhgL41KhUQfHD3vh9CvqQy+a4f9ROVCV29WvtBn7Xd2Nwa7Vg8Q4cdDjy+sCh/CA9jE7ZUS1YLt0ca74CpMUXKstTUQT6YaQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+gwTABRoWIin4lYbqQbj3u1ZQ6L2TUJs9/tRvYfFPJ0=; b=UTJKbHBHeDusr55RjnpXIzCa5E7Ik3nj8i0JFrl5QgidaH4ijelwY/PN2/ZKb956jlvJdLJvXWnYIr1nD63RpQayfNaZyWmCE9NsCtHeIm6MJiWooVPxp7CfcOdjaYhU5B8E1m9ePn4a3mEAju7J12BHd1/TgOIW8FRMmQ49e1I= Received: from DUZPR01CA0063.eurprd01.prod.exchangelabs.com (2603:10a6:10:3c2::13) by PAXPR08MB6559.eurprd08.prod.outlook.com (2603:10a6:102:df::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:47:45 +0000 Received: from DB5PEPF00014B99.eurprd02.prod.outlook.com (2603:10a6:10:3c2:cafe::1f) by DUZPR01CA0063.outlook.office365.com (2603:10a6:10:3c2::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.42 via Frontend Transport; Fri, 10 Apr 2026 16:47:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DB5PEPF00014B99.mail.protection.outlook.com (10.167.8.166) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gilXGJ5na/HwQK3FNe/XlVfLqNoTfz1aGdfXCXn1HtgMswhl0hGCfyLLZOOdSGlwn1oF3EqbsFKf9e8KKbZmrVeAKGaB1vL0UrM8MmY9oFBqSb+F2/L9UnLtUhsVq4R/C5MXCxz+Lsj0jsqA1eEvR8ZkCM7/EoIrkFtuoGs1QSkQ7ufVJLVs9lKo/y0Br2IL/wvrW7O0x6BcQzgYY4jeeyWybeVmGXAt0K0OV4ZYHufY27EOUXHp/Dt7aDEHfG0oXzg3kv+Hy1nawxxRKPkBr3PqA3ivLtt1QDEioS1GDRNr+U6t/pO3FV4a/v4PHGFDZ/qKvSHTIzhE1/i2PUYL6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+gwTABRoWIin4lYbqQbj3u1ZQ6L2TUJs9/tRvYfFPJ0=; b=w/+L+6UbI8M8DiAie1jYk0do6bUmDFjOzXiBvHR/qroQfcMBV/E+j6Ku6fLC4aNXqQssnezui8ooKhNOwF9ld6i0/DdQFidtjOya4H7LwQFM/dy+yyRZJgrcXaQHgZBpJcCy5oY9lTxdZqsu/QGO/woY7ijgu8nz1gFlNQ8RHhHVpau4R0V0lGADoU0FnJ2uqlpLjaWzOikPgsjjyaQy3Y0KAZhVKR2qEC1kl4C1hH+50S8b5kB1lJ16Q/5HYZk8QE1c+UxPbSMdtmplzBluBMK6lW6nKqylpLVWklpqlp36+e7Y8iPJiZG+jjZQkqr4RX71eJuyugnPXqih5GU6fA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+gwTABRoWIin4lYbqQbj3u1ZQ6L2TUJs9/tRvYfFPJ0=; b=UTJKbHBHeDusr55RjnpXIzCa5E7Ik3nj8i0JFrl5QgidaH4ijelwY/PN2/ZKb956jlvJdLJvXWnYIr1nD63RpQayfNaZyWmCE9NsCtHeIm6MJiWooVPxp7CfcOdjaYhU5B8E1m9ePn4a3mEAju7J12BHd1/TgOIW8FRMmQ49e1I= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:42 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:42 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 1/8] drm/panthor: Pass an iomem pointer to GPU register access helpers Date: Fri, 10 Apr 2026 17:46:30 +0100 Message-ID: <20260410164637.549145-2-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0582.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:276::17) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|DB5PEPF00014B99:EE_|PAXPR08MB6559:EE_ X-MS-Office365-Filtering-Correlation-Id: de6822b6-0f6c-4688-7add-08de9720e3cc X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: sVoWBzUTqkK7m7udAg+khEvSVD3mHRx8GYxpLSB/qxCZrEmmrTwL+ityiNEZPXRVG4H16FlgtKGYPopE0R8QYHcyx7WeD2SUVhUQp7RptnydiB50jSaZf6/EEjOEpEP0wnBUw/oCBW9N6gTfcmBIFBUlKBydMAiVsDxhsr5MCVreXGYzScRwHn1xJ8IcwtPeOmoR+yzDSGJ3AHioBi6dQr/R+aMZcwMqGarkihJsQMdjRgMYGYltzvbzqb8GOBMq44Cx6OAw+jYCf8IporZHaIp1q79VmV1MN4IHzxX+AE6Kqa9y9U1me7CxvKUAcZHDPPkIoic6WfcwI7vFpPHDFLxIHR6AgxOPlCatMPg6oZJU7SrjE9KnusLEq7Zg0TmO9Zvewg8ReNToZQzzWatuiN0TJeivD2wyfQCpVEBMH6CwG9DKrA2jxmdP3qaMPkUIRywY58UVNCWLj7sr/8AMWYBPrWfes8QZ/486BmsGRRUU7CEAG77OtOE8YrhU0jnOV7d/mTv35JcuQVgAeOZdrQHilGovU8RcZiHA9OQZzbuSxOmetLKlivW55dqtXMotKaVT6Febu7S5SxKL6E9k0ZBZQYUg0xn+4+sgJcD1l8sH256pIwwT6sKHC6g5bzUhk8cZ8PCaVPV15snrZ+lzh0MI22hM0eHaJChvB3rSjosPWgQwbkFSfMLgN5LmMPM2YJDr1Ka31Vgru8WspfUkjU0hoc9f6IrcJ+W9Do1aAqI= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: fGgitONBHojMxY0fFlR2rb34HAvXDZO0/vwIvntXP8tLhlSPKj1HmivZEI2tCedsPE/OFnSc5ajWHIXe/zfwgA5FJxzcK1aznZXOeFrqeq7n2JBz7hzQYedU9s94IU55v0kiTvKa0T6Np2l9QBluortJ8E2dq18krJBOzlRRwyl0ezxcfdi1VajIpvbarSU3UsgPL/A9oxWns4UFlyH9FybbL/tplO2bn/mEsMRPv5luIZ69B3syVYiZe+CFFcOy7j705g2m88/72XGw+sy8HyPGJuGhRfw8f4EBeLwdSHoFWLu7ubPADOY3qbpVnaUhUqTC1Lb8nZv0XE27usPLjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B99.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 5b78e3f2-4cb8-454a-2e99-08de9720be6f X-Microsoft-Antispam: BCL:0;ARA:13230040|14060799003|1800799024|35042699022|82310400026|376014|36860700016|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: PsqisbZBOQGq71dKjE+b3IDHlDEUUhZ4AayLLvXa4zLXPhUaTI6nWX1bpNLn0KINJfRPt5Hc3eJxS0ktxmOnRXl3fuqJWFLnBBpx2QJdNmogYyNAq/UXMAknGMSC9kQfNSawol9FCySipbVZoH+hUQClRyRdKZNzhTsClqg6fDfKjqO1a6NB8PqRTv6UdMkf4h+BHBLfvxRWKal4XNgRdrI0KgTQNpqu2tM+E/w5fER3ZNTju4tkm7za74JdYA/vQbJtqRDv/rx471Oyij7rOLe6nHZdjB5WSwemoR1uBevddVHxyA0Yd0UWgfno4ZNl5WWGYFjFNOsHhzqZ3Yu4AebDCOaxnDe98H6mBTTioOgTRNagYeDE6pZi3XXo+jp1kfU0kf19RxNFDsrRIN3LFSWj2upDBDsXlvVrnNLkCoTc3tSR6A/vdCPH8uFRHz/ZcPFMNEnvLBW9+XGibq1GMZG7xN7UeJD93amDp0n3UMrTpWn5bTZhiw2GGS7wbMEaIQ0hjxe1/BRUpl+/8IpEaAu3HwkkiiyoCeKbOhCIPFvALUkwCwVDadhwhoJpl2RAb3rfIYzBpCNUKXtA8gafMN+s/4MEhXHDdeHKTop0VMVAYKH3XeWLzQYapOHs7mBi0aZ8/gJLP/M8vAuuFcDeqkpcjB6szvx7vDm5B3xPL5iQTX2VVkWB5GPpSN8XXjLH6bU4qzOhqhjodvjN8hfyb/Vjn6iPI3ZqZcXeWEzn6DFXbveHDYIgfq+bxl5fWgnf9EtufUZcLdAf/ehWCOaXeg== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(14060799003)(1800799024)(35042699022)(82310400026)(376014)(36860700016)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BS1LJDGjyJPuBQ0JyFHitERjdCXrlgVyyZeAJWXX2gaxezsTr/O/m1IH4ozm8sJMd1UkK7Cqwqq+e2+EIydUSwBAZ7m0VqyIOxIj9cuAKxTd9jIqQ1oUjEpoUqL7SLuF5ZOLjuIeXOw4ZZFor9djwEvUOwbVZCGIZJCt2q9Q1zl4tOxhMYi3QSGiqXIdiv5FpgObI3YXkJH573FIyLvmeTz1hqJDjjqJXgyv7Eyo59+TeJoQnmcPELFmC0b4oNLrGw3LA3MbGzLnRgq6OBeVowlnBdvTb6QZ9odKU3zfp+wvwcK6tGhiQ6OClxB2WkXoclxrUG044NhmSSEcQAWblqw3fpCBE85wsfs6znYj5EtX32hpJugSucxKc04ftF+UxSA1f2bWJVejaeFTn4a2K1jGErfWDWYW+SrCI0XKPziCkk2j5BG5mZmGJlW2Px+Y X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:44.8684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: de6822b6-0f6c-4688-7add-08de9720e3cc X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B99.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6559 Content-Type: text/plain; charset="utf-8" Convert the Panthor register access helpers to take an iomem pointer instead of a panthor_device pointer. This makes the helpers usable with block-local registers instead of routing all accesses to go through ptdev->iomem. It is a preparatory change for splitting the register space by components and for moving callers away from cross-component register accesses. No functional change intended. Signed-off-by: Karunika Choo Acked-by: Boris Brezillon Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_device.c | 2 +- drivers/gpu/drm/panthor/panthor_device.h | 78 ++++++++++++------------ drivers/gpu/drm/panthor/panthor_drv.c | 6 +- drivers/gpu/drm/panthor/panthor_fw.c | 22 +++---- drivers/gpu/drm/panthor/panthor_gpu.c | 42 ++++++------- drivers/gpu/drm/panthor/panthor_hw.c | 47 +++++++------- drivers/gpu/drm/panthor/panthor_mmu.c | 29 +++++---- drivers/gpu/drm/panthor/panthor_pwr.c | 61 +++++++++--------- drivers/gpu/drm/panthor/panthor_sched.c | 2 +- 9 files changed, 146 insertions(+), 143 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/pan= thor/panthor_device.c index bc62a498a8a8..d62017b73409 100644 --- a/drivers/gpu/drm/panthor/panthor_device.c +++ b/drivers/gpu/drm/panthor/panthor_device.c @@ -43,7 +43,7 @@ static int panthor_gpu_coherency_init(struct panthor_devi= ce *ptdev) /* Check if the ACE-Lite coherency protocol is actually supported by the = GPU. * ACE protocol has never been supported for command stream frontend GPUs. */ - if ((gpu_read(ptdev, GPU_COHERENCY_FEATURES) & + if ((gpu_read(ptdev->iomem, GPU_COHERENCY_FEATURES) & GPU_COHERENCY_PROT_BIT(ACE_LITE))) { ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_ACE_LITE; return 0; diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/pan= thor/panthor_device.h index 5cba272f9b4d..285bf7e4439e 100644 --- a/drivers/gpu/drm/panthor/panthor_device.h +++ b/drivers/gpu/drm/panthor/panthor_device.h @@ -505,7 +505,7 @@ static irqreturn_t panthor_ ## __name ## _irq_raw_handl= er(int irq, void *data) struct panthor_device *ptdev =3D pirq->ptdev; \ enum panthor_irq_state old_state; \ \ - if (!gpu_read(ptdev, __reg_prefix ## _INT_STAT)) \ + if (!gpu_read(ptdev->iomem, __reg_prefix ## _INT_STAT)) \ return IRQ_NONE; \ \ guard(spinlock_irqsave)(&pirq->mask_lock); \ @@ -515,7 +515,7 @@ static irqreturn_t panthor_ ## __name ## _irq_raw_handl= er(int irq, void *data) if (old_state !=3D PANTHOR_IRQ_STATE_ACTIVE) \ return IRQ_NONE; \ \ - gpu_write(ptdev, __reg_prefix ## _INT_MASK, 0); \ + gpu_write(ptdev->iomem, __reg_prefix ## _INT_MASK, 0); \ return IRQ_WAKE_THREAD; \ } \ \ @@ -534,7 +534,7 @@ static irqreturn_t panthor_ ## __name ## _irq_threaded_= handler(int irq, void *da * right before the HW event kicks in. TLDR; it's all expected races we'= re \ * covered for. \ */ \ - u32 status =3D gpu_read(ptdev, __reg_prefix ## _INT_RAWSTAT) & pirq->mas= k; \ + u32 status =3D gpu_read(ptdev->iomem, __reg_prefix ## _INT_RAWSTAT) & pi= rq->mask; \ \ if (!status) \ break; \ @@ -550,7 +550,7 @@ static irqreturn_t panthor_ ## __name ## _irq_threaded_= handler(int irq, void *da PANTHOR_IRQ_STATE_PROCESSING, \ PANTHOR_IRQ_STATE_ACTIVE); \ if (old_state =3D=3D PANTHOR_IRQ_STATE_PROCESSING) \ - gpu_write(ptdev, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ } \ \ return ret; \ @@ -560,7 +560,7 @@ static inline void panthor_ ## __name ## _irq_suspend(s= truct panthor_irq *pirq) { \ scoped_guard(spinlock_irqsave, &pirq->mask_lock) { \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_SUSPENDING); \ - gpu_write(pirq->ptdev, __reg_prefix ## _INT_MASK, 0); \ + gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, 0); \ } \ synchronize_irq(pirq->irq); \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_SUSPENDED); \ @@ -571,8 +571,8 @@ static inline void panthor_ ## __name ## _irq_resume(st= ruct panthor_irq *pirq) guard(spinlock_irqsave)(&pirq->mask_lock); \ \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_ACTIVE); \ - gpu_write(pirq->ptdev, __reg_prefix ## _INT_CLEAR, pirq->mask); \ - gpu_write(pirq->ptdev, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_CLEAR, pirq->mask); \ + gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ } \ \ static int panthor_request_ ## __name ## _irq(struct panthor_device *ptdev= , \ @@ -603,7 +603,7 @@ static inline void panthor_ ## __name ## _irq_enable_ev= ents(struct panthor_irq * * If the IRQ is suspended/suspending, the mask is restored at resume tim= e. \ */ \ if (atomic_read(&pirq->state) =3D=3D PANTHOR_IRQ_STATE_ACTIVE) \ - gpu_write(pirq->ptdev, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ } \ \ static inline void panthor_ ## __name ## _irq_disable_events(struct pantho= r_irq *pirq, u32 mask)\ @@ -617,80 +617,80 @@ static inline void panthor_ ## __name ## _irq_disable= _events(struct panthor_irq * If the IRQ is suspended/suspending, the mask is restored at resume tim= e. \ */ \ if (atomic_read(&pirq->state) =3D=3D PANTHOR_IRQ_STATE_ACTIVE) \ - gpu_write(pirq->ptdev, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ } =20 extern struct workqueue_struct *panthor_cleanup_wq; =20 -static inline void gpu_write(struct panthor_device *ptdev, u32 reg, u32 da= ta) +static inline void gpu_write(void __iomem *iomem, u32 reg, u32 data) { - writel(data, ptdev->iomem + reg); + writel(data, iomem + reg); } =20 -static inline u32 gpu_read(struct panthor_device *ptdev, u32 reg) +static inline u32 gpu_read(void __iomem *iomem, u32 reg) { - return readl(ptdev->iomem + reg); + return readl(iomem + reg); } =20 -static inline u32 gpu_read_relaxed(struct panthor_device *ptdev, u32 reg) +static inline u32 gpu_read_relaxed(void __iomem *iomem, u32 reg) { - return readl_relaxed(ptdev->iomem + reg); + return readl_relaxed(iomem + reg); } =20 -static inline void gpu_write64(struct panthor_device *ptdev, u32 reg, u64 = data) +static inline void gpu_write64(void __iomem *iomem, u32 reg, u64 data) { - gpu_write(ptdev, reg, lower_32_bits(data)); - gpu_write(ptdev, reg + 4, upper_32_bits(data)); + gpu_write(iomem, reg, lower_32_bits(data)); + gpu_write(iomem, reg + 4, upper_32_bits(data)); } =20 -static inline u64 gpu_read64(struct panthor_device *ptdev, u32 reg) +static inline u64 gpu_read64(void __iomem *iomem, u32 reg) { - return (gpu_read(ptdev, reg) | ((u64)gpu_read(ptdev, reg + 4) << 32)); + return (gpu_read(iomem, reg) | ((u64)gpu_read(iomem, reg + 4) << 32)); } =20 -static inline u64 gpu_read64_relaxed(struct panthor_device *ptdev, u32 reg) +static inline u64 gpu_read64_relaxed(void __iomem *iomem, u32 reg) { - return (gpu_read_relaxed(ptdev, reg) | - ((u64)gpu_read_relaxed(ptdev, reg + 4) << 32)); + return (gpu_read_relaxed(iomem, reg) | + ((u64)gpu_read_relaxed(iomem, reg + 4) << 32)); } =20 -static inline u64 gpu_read64_counter(struct panthor_device *ptdev, u32 reg) +static inline u64 gpu_read64_counter(void __iomem *iomem, u32 reg) { u32 lo, hi1, hi2; do { - hi1 =3D gpu_read(ptdev, reg + 4); - lo =3D gpu_read(ptdev, reg); - hi2 =3D gpu_read(ptdev, reg + 4); + hi1 =3D gpu_read(iomem, reg + 4); + lo =3D gpu_read(iomem, reg); + hi2 =3D gpu_read(iomem, reg + 4); } while (hi1 !=3D hi2); return lo | ((u64)hi2 << 32); } =20 -#define gpu_read_poll_timeout(dev, reg, val, cond, delay_us, timeout_us) \ +#define gpu_read_poll_timeout(iomem, reg, val, cond, delay_us, timeout_us)= \ read_poll_timeout(gpu_read, val, cond, delay_us, timeout_us, false, \ - dev, reg) + iomem, reg) =20 -#define gpu_read_poll_timeout_atomic(dev, reg, val, cond, delay_us, \ +#define gpu_read_poll_timeout_atomic(iomem, reg, val, cond, delay_us, \ timeout_us) \ read_poll_timeout_atomic(gpu_read, val, cond, delay_us, timeout_us, \ - false, dev, reg) + false, iomem, reg) =20 -#define gpu_read64_poll_timeout(dev, reg, val, cond, delay_us, timeout_us)= \ +#define gpu_read64_poll_timeout(iomem, reg, val, cond, delay_us, timeout_u= s) \ read_poll_timeout(gpu_read64, val, cond, delay_us, timeout_us, false, \ - dev, reg) + iomem, reg) =20 -#define gpu_read64_poll_timeout_atomic(dev, reg, val, cond, delay_us, \ +#define gpu_read64_poll_timeout_atomic(iomem, reg, val, cond, delay_us, \ timeout_us) \ read_poll_timeout_atomic(gpu_read64, val, cond, delay_us, timeout_us, \ - false, dev, reg) + false, iomem, reg) =20 -#define gpu_read_relaxed_poll_timeout_atomic(dev, reg, val, cond, delay_us= , \ +#define gpu_read_relaxed_poll_timeout_atomic(iomem, reg, val, cond, delay_= us, \ timeout_us) \ read_poll_timeout_atomic(gpu_read_relaxed, val, cond, delay_us, \ - timeout_us, false, dev, reg) + timeout_us, false, iomem, reg) =20 -#define gpu_read64_relaxed_poll_timeout(dev, reg, val, cond, delay_us, \ +#define gpu_read64_relaxed_poll_timeout(iomem, reg, val, cond, delay_us, \ timeout_us) \ read_poll_timeout(gpu_read64_relaxed, val, cond, delay_us, timeout_us, \ - false, dev, reg) + false, iomem, reg) =20 #endif diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 73fc983dc9b4..4f926c861fba 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -839,7 +839,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, } =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU_OFFSET) - arg->timestamp_offset =3D gpu_read64(ptdev, GPU_TIMESTAMP_OFFSET); + arg->timestamp_offset =3D gpu_read64(ptdev->iomem, GPU_TIMESTAMP_OFFSET); else arg->timestamp_offset =3D 0; =20 @@ -854,7 +854,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, query_start_time =3D 0; =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU) - arg->current_timestamp =3D gpu_read64_counter(ptdev, GPU_TIMESTAMP); + arg->current_timestamp =3D gpu_read64_counter(ptdev->iomem, GPU_TIMESTAM= P); else arg->current_timestamp =3D 0; =20 @@ -870,7 +870,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, } =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT) - arg->cycle_count =3D gpu_read64_counter(ptdev, GPU_CYCLE_COUNT); + arg->cycle_count =3D gpu_read64_counter(ptdev->iomem, GPU_CYCLE_COUNT); else arg->cycle_count =3D 0; =20 diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor= /panthor_fw.c index be0da5b1f3ab..69a19751a314 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -1054,7 +1054,7 @@ static void panthor_fw_init_global_iface(struct panth= or_device *ptdev) GLB_CFG_POWEROFF_TIMER | GLB_CFG_PROGRESS_TIMER); =20 - gpu_write(ptdev, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); =20 /* Kick the watchdog. */ mod_delayed_work(ptdev->reset.wq, &ptdev->fw->watchdog.ping_work, @@ -1069,7 +1069,7 @@ static void panthor_job_irq_handler(struct panthor_de= vice *ptdev, u32 status) if (tracepoint_enabled(gpu_job_irq)) start =3D ktime_get_ns(); =20 - gpu_write(ptdev, JOB_INT_CLEAR, status); + gpu_write(ptdev->iomem, JOB_INT_CLEAR, status); =20 if (!ptdev->fw->booted && (status & JOB_INT_GLOBAL_IF)) ptdev->fw->booted =3D true; @@ -1097,13 +1097,13 @@ static int panthor_fw_start(struct panthor_device *= ptdev) ptdev->fw->booted =3D false; panthor_job_irq_enable_events(&ptdev->fw->irq, ~0); panthor_job_irq_resume(&ptdev->fw->irq); - gpu_write(ptdev, MCU_CONTROL, MCU_CONTROL_AUTO); + gpu_write(ptdev->iomem, MCU_CONTROL, MCU_CONTROL_AUTO); =20 if (!wait_event_timeout(ptdev->fw->req_waitqueue, ptdev->fw->booted, msecs_to_jiffies(1000))) { if (!ptdev->fw->booted && - !(gpu_read(ptdev, JOB_INT_STAT) & JOB_INT_GLOBAL_IF)) + !(gpu_read(ptdev->iomem, JOB_INT_STAT) & JOB_INT_GLOBAL_IF)) timedout =3D true; } =20 @@ -1114,7 +1114,7 @@ static int panthor_fw_start(struct panthor_device *pt= dev) [MCU_STATUS_HALT] =3D "halt", [MCU_STATUS_FATAL] =3D "fatal", }; - u32 status =3D gpu_read(ptdev, MCU_STATUS); + u32 status =3D gpu_read(ptdev->iomem, MCU_STATUS); =20 drm_err(&ptdev->base, "Failed to boot MCU (status=3D%s)", status < ARRAY_SIZE(status_str) ? status_str[status] : "unknown"); @@ -1128,8 +1128,8 @@ static void panthor_fw_stop(struct panthor_device *pt= dev) { u32 status; =20 - gpu_write(ptdev, MCU_CONTROL, MCU_CONTROL_DISABLE); - if (gpu_read_poll_timeout(ptdev, MCU_STATUS, status, + gpu_write(ptdev->iomem, MCU_CONTROL, MCU_CONTROL_DISABLE); + if (gpu_read_poll_timeout(ptdev->iomem, MCU_STATUS, status, status =3D=3D MCU_STATUS_DISABLED, 10, 100000)) drm_err(&ptdev->base, "Failed to stop MCU"); } @@ -1139,7 +1139,7 @@ static bool panthor_fw_mcu_halted(struct panthor_devi= ce *ptdev) struct panthor_fw_global_iface *glb_iface =3D panthor_fw_get_glb_iface(pt= dev); bool halted; =20 - halted =3D gpu_read(ptdev, MCU_STATUS) =3D=3D MCU_STATUS_HALT; + halted =3D gpu_read(ptdev->iomem, MCU_STATUS) =3D=3D MCU_STATUS_HALT; =20 if (panthor_fw_has_glb_state(ptdev)) halted &=3D (GLB_STATE_GET(glb_iface->output->ack) =3D=3D GLB_STATE_HALT= ); @@ -1156,7 +1156,7 @@ static void panthor_fw_halt_mcu(struct panthor_device= *ptdev) else panthor_fw_update_reqs(glb_iface, req, GLB_HALT, GLB_HALT); =20 - gpu_write(ptdev, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); } =20 static bool panthor_fw_wait_mcu_halted(struct panthor_device *ptdev) @@ -1414,7 +1414,7 @@ void panthor_fw_ring_csg_doorbells(struct panthor_dev= ice *ptdev, u32 csg_mask) struct panthor_fw_global_iface *glb_iface =3D panthor_fw_get_glb_iface(pt= dev); =20 panthor_fw_toggle_reqs(glb_iface, doorbell_req, doorbell_ack, csg_mask); - gpu_write(ptdev, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); } =20 static void panthor_fw_ping_work(struct work_struct *work) @@ -1429,7 +1429,7 @@ static void panthor_fw_ping_work(struct work_struct *= work) return; =20 panthor_fw_toggle_reqs(glb_iface, req, ack, GLB_PING); - gpu_write(ptdev, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); =20 ret =3D panthor_fw_glb_wait_acks(ptdev, GLB_PING, &acked, 100); if (ret) { diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/pantho= r/panthor_gpu.c index 2ab444ee8c71..bdb72cebccb3 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.c +++ b/drivers/gpu/drm/panthor/panthor_gpu.c @@ -56,7 +56,7 @@ struct panthor_gpu { =20 static void panthor_gpu_coherency_set(struct panthor_device *ptdev) { - gpu_write(ptdev, GPU_COHERENCY_PROTOCOL, + gpu_write(ptdev->iomem, GPU_COHERENCY_PROTOCOL, ptdev->gpu_info.selected_coherency); } =20 @@ -75,26 +75,26 @@ static void panthor_gpu_l2_config_set(struct panthor_de= vice *ptdev) } =20 for (i =3D 0; i < ARRAY_SIZE(data->asn_hash); i++) - gpu_write(ptdev, GPU_ASN_HASH(i), data->asn_hash[i]); + gpu_write(ptdev->iomem, GPU_ASN_HASH(i), data->asn_hash[i]); =20 - l2_config =3D gpu_read(ptdev, GPU_L2_CONFIG); + l2_config =3D gpu_read(ptdev->iomem, GPU_L2_CONFIG); l2_config |=3D GPU_L2_CONFIG_ASN_HASH_ENABLE; - gpu_write(ptdev, GPU_L2_CONFIG, l2_config); + gpu_write(ptdev->iomem, GPU_L2_CONFIG, l2_config); } =20 static void panthor_gpu_irq_handler(struct panthor_device *ptdev, u32 stat= us) { - gpu_write(ptdev, GPU_INT_CLEAR, status); + gpu_write(ptdev->iomem, GPU_INT_CLEAR, status); =20 if (tracepoint_enabled(gpu_power_status) && (status & GPU_POWER_INTERRUPT= S_MASK)) trace_gpu_power_status(ptdev->base.dev, - gpu_read64(ptdev, SHADER_READY), - gpu_read64(ptdev, TILER_READY), - gpu_read64(ptdev, L2_READY)); + gpu_read64(ptdev->iomem, SHADER_READY), + gpu_read64(ptdev->iomem, TILER_READY), + gpu_read64(ptdev->iomem, L2_READY)); =20 if (status & GPU_IRQ_FAULT) { - u32 fault_status =3D gpu_read(ptdev, GPU_FAULT_STATUS); - u64 address =3D gpu_read64(ptdev, GPU_FAULT_ADDR); + u32 fault_status =3D gpu_read(ptdev->iomem, GPU_FAULT_STATUS); + u64 address =3D gpu_read64(ptdev->iomem, GPU_FAULT_ADDR); =20 drm_warn(&ptdev->base, "GPU Fault 0x%08x (%s) at 0x%016llx\n", fault_status, panthor_exception_name(ptdev, fault_status & 0xFF), @@ -204,7 +204,7 @@ int panthor_gpu_block_power_off(struct panthor_device *= ptdev, u32 val; int ret; =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -213,9 +213,9 @@ int panthor_gpu_block_power_off(struct panthor_device *= ptdev, return ret; } =20 - gpu_write64(ptdev, pwroff_reg, mask); + gpu_write64(ptdev->iomem, pwroff_reg, mask); =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -247,7 +247,7 @@ int panthor_gpu_block_power_on(struct panthor_device *p= tdev, u32 val; int ret; =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -256,9 +256,9 @@ int panthor_gpu_block_power_on(struct panthor_device *p= tdev, return ret; } =20 - gpu_write64(ptdev, pwron_reg, mask); + gpu_write64(ptdev->iomem, pwron_reg, mask); =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev, rdy_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, rdy_reg, val, (mask & val) =3D=3D val, 100, timeout_us); if (ret) { @@ -326,7 +326,7 @@ int panthor_gpu_flush_caches(struct panthor_device *ptd= ev, spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if (!(ptdev->gpu->pending_reqs & GPU_IRQ_CLEAN_CACHES_COMPLETED)) { ptdev->gpu->pending_reqs |=3D GPU_IRQ_CLEAN_CACHES_COMPLETED; - gpu_write(ptdev, GPU_CMD, GPU_FLUSH_CACHES(l2, lsc, other)); + gpu_write(ptdev->iomem, GPU_CMD, GPU_FLUSH_CACHES(l2, lsc, other)); } else { ret =3D -EIO; } @@ -340,7 +340,7 @@ int panthor_gpu_flush_caches(struct panthor_device *ptd= ev, msecs_to_jiffies(100))) { spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if ((ptdev->gpu->pending_reqs & GPU_IRQ_CLEAN_CACHES_COMPLETED) !=3D 0 && - !(gpu_read(ptdev, GPU_INT_RAWSTAT) & GPU_IRQ_CLEAN_CACHES_COMPLETED)) + !(gpu_read(ptdev->iomem, GPU_INT_RAWSTAT) & GPU_IRQ_CLEAN_CACHES_COM= PLETED)) ret =3D -ETIMEDOUT; else ptdev->gpu->pending_reqs &=3D ~GPU_IRQ_CLEAN_CACHES_COMPLETED; @@ -370,8 +370,8 @@ int panthor_gpu_soft_reset(struct panthor_device *ptdev) if (!drm_WARN_ON(&ptdev->base, ptdev->gpu->pending_reqs & GPU_IRQ_RESET_COMPLETED)) { ptdev->gpu->pending_reqs |=3D GPU_IRQ_RESET_COMPLETED; - gpu_write(ptdev, GPU_INT_CLEAR, GPU_IRQ_RESET_COMPLETED); - gpu_write(ptdev, GPU_CMD, GPU_SOFT_RESET); + gpu_write(ptdev->iomem, GPU_INT_CLEAR, GPU_IRQ_RESET_COMPLETED); + gpu_write(ptdev->iomem, GPU_CMD, GPU_SOFT_RESET); } spin_unlock_irqrestore(&ptdev->gpu->reqs_lock, flags); =20 @@ -380,7 +380,7 @@ int panthor_gpu_soft_reset(struct panthor_device *ptdev) msecs_to_jiffies(100))) { spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if ((ptdev->gpu->pending_reqs & GPU_IRQ_RESET_COMPLETED) !=3D 0 && - !(gpu_read(ptdev, GPU_INT_RAWSTAT) & GPU_IRQ_RESET_COMPLETED)) + !(gpu_read(ptdev->iomem, GPU_INT_RAWSTAT) & GPU_IRQ_RESET_COMPLETED)) timedout =3D true; else ptdev->gpu->pending_reqs &=3D ~GPU_IRQ_RESET_COMPLETED; diff --git a/drivers/gpu/drm/panthor/panthor_hw.c b/drivers/gpu/drm/panthor= /panthor_hw.c index d135aa6724fa..9309d0938212 100644 --- a/drivers/gpu/drm/panthor/panthor_hw.c +++ b/drivers/gpu/drm/panthor/panthor_hw.c @@ -194,35 +194,38 @@ static int panthor_gpu_info_init(struct panthor_devic= e *ptdev) { unsigned int i; =20 - ptdev->gpu_info.csf_id =3D gpu_read(ptdev, GPU_CSF_ID); - ptdev->gpu_info.gpu_rev =3D gpu_read(ptdev, GPU_REVID); - ptdev->gpu_info.core_features =3D gpu_read(ptdev, GPU_CORE_FEATURES); - ptdev->gpu_info.l2_features =3D gpu_read(ptdev, GPU_L2_FEATURES); - ptdev->gpu_info.tiler_features =3D gpu_read(ptdev, GPU_TILER_FEATURES); - ptdev->gpu_info.mem_features =3D gpu_read(ptdev, GPU_MEM_FEATURES); - ptdev->gpu_info.mmu_features =3D gpu_read(ptdev, GPU_MMU_FEATURES); - ptdev->gpu_info.thread_features =3D gpu_read(ptdev, GPU_THREAD_FEATURES); - ptdev->gpu_info.max_threads =3D gpu_read(ptdev, GPU_THREAD_MAX_THREADS); - ptdev->gpu_info.thread_max_workgroup_size =3D gpu_read(ptdev, GPU_THREAD_= MAX_WORKGROUP_SIZE); - ptdev->gpu_info.thread_max_barrier_size =3D gpu_read(ptdev, GPU_THREAD_MA= X_BARRIER_SIZE); - ptdev->gpu_info.coherency_features =3D gpu_read(ptdev, GPU_COHERENCY_FEAT= URES); + ptdev->gpu_info.csf_id =3D gpu_read(ptdev->iomem, GPU_CSF_ID); + ptdev->gpu_info.gpu_rev =3D gpu_read(ptdev->iomem, GPU_REVID); + ptdev->gpu_info.core_features =3D gpu_read(ptdev->iomem, GPU_CORE_FEATURE= S); + ptdev->gpu_info.l2_features =3D gpu_read(ptdev->iomem, GPU_L2_FEATURES); + ptdev->gpu_info.tiler_features =3D gpu_read(ptdev->iomem, GPU_TILER_FEATU= RES); + ptdev->gpu_info.mem_features =3D gpu_read(ptdev->iomem, GPU_MEM_FEATURES); + ptdev->gpu_info.mmu_features =3D gpu_read(ptdev->iomem, GPU_MMU_FEATURES); + ptdev->gpu_info.thread_features =3D gpu_read(ptdev->iomem, GPU_THREAD_FEA= TURES); + ptdev->gpu_info.max_threads =3D gpu_read(ptdev->iomem, GPU_THREAD_MAX_THR= EADS); + ptdev->gpu_info.thread_max_workgroup_size =3D + gpu_read(ptdev->iomem, GPU_THREAD_MAX_WORKGROUP_SIZE); + ptdev->gpu_info.thread_max_barrier_size =3D + gpu_read(ptdev->iomem, GPU_THREAD_MAX_BARRIER_SIZE); + ptdev->gpu_info.coherency_features =3D gpu_read(ptdev->iomem, GPU_COHEREN= CY_FEATURES); for (i =3D 0; i < 4; i++) - ptdev->gpu_info.texture_features[i] =3D gpu_read(ptdev, GPU_TEXTURE_FEAT= URES(i)); + ptdev->gpu_info.texture_features[i] =3D + gpu_read(ptdev->iomem, GPU_TEXTURE_FEATURES(i)); =20 - ptdev->gpu_info.as_present =3D gpu_read(ptdev, GPU_AS_PRESENT); + ptdev->gpu_info.as_present =3D gpu_read(ptdev->iomem, GPU_AS_PRESENT); =20 /* Introduced in arch 11.x */ - ptdev->gpu_info.gpu_features =3D gpu_read64(ptdev, GPU_FEATURES); + ptdev->gpu_info.gpu_features =3D gpu_read64(ptdev->iomem, GPU_FEATURES); =20 if (panthor_hw_has_pwr_ctrl(ptdev)) { /* Introduced in arch 14.x */ - ptdev->gpu_info.l2_present =3D gpu_read64(ptdev, PWR_L2_PRESENT); - ptdev->gpu_info.tiler_present =3D gpu_read64(ptdev, PWR_TILER_PRESENT); - ptdev->gpu_info.shader_present =3D gpu_read64(ptdev, PWR_SHADER_PRESENT); + ptdev->gpu_info.l2_present =3D gpu_read64(ptdev->iomem, PWR_L2_PRESENT); + ptdev->gpu_info.tiler_present =3D gpu_read64(ptdev->iomem, PWR_TILER_PRE= SENT); + ptdev->gpu_info.shader_present =3D gpu_read64(ptdev->iomem, PWR_SHADER_P= RESENT); } else { - ptdev->gpu_info.shader_present =3D gpu_read64(ptdev, GPU_SHADER_PRESENT); - ptdev->gpu_info.tiler_present =3D gpu_read64(ptdev, GPU_TILER_PRESENT); - ptdev->gpu_info.l2_present =3D gpu_read64(ptdev, GPU_L2_PRESENT); + ptdev->gpu_info.shader_present =3D gpu_read64(ptdev->iomem, GPU_SHADER_P= RESENT); + ptdev->gpu_info.tiler_present =3D gpu_read64(ptdev->iomem, GPU_TILER_PRE= SENT); + ptdev->gpu_info.l2_present =3D gpu_read64(ptdev->iomem, GPU_L2_PRESENT); } =20 return overload_shader_present(ptdev); @@ -287,7 +290,7 @@ static int panthor_hw_bind_device(struct panthor_device= *ptdev) =20 static int panthor_hw_gpu_id_init(struct panthor_device *ptdev) { - ptdev->gpu_info.gpu_id =3D gpu_read(ptdev, GPU_ID); + ptdev->gpu_info.gpu_id =3D gpu_read(ptdev->iomem, GPU_ID); if (!ptdev->gpu_info.gpu_id) return -ENXIO; =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index fa8b31df85c9..0bd07a3dd774 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -522,9 +522,8 @@ static int wait_ready(struct panthor_device *ptdev, u32= as_nr) /* Wait for the MMU status to indicate there is no active command, in * case one is pending. */ - ret =3D gpu_read_relaxed_poll_timeout_atomic(ptdev, AS_STATUS(as_nr), val, - !(val & AS_STATUS_AS_ACTIVE), - 10, 100000); + ret =3D gpu_read_relaxed_poll_timeout_atomic(ptdev->iomem, AS_STATUS(as_n= r), val, + !(val & AS_STATUS_AS_ACTIVE), 10, 100000); =20 if (ret) { panthor_device_schedule_reset(ptdev); @@ -541,7 +540,7 @@ static int as_send_cmd_and_wait(struct panthor_device *= ptdev, u32 as_nr, u32 cmd /* write AS_COMMAND when MMU is ready to accept another command */ status =3D wait_ready(ptdev, as_nr); if (!status) { - gpu_write(ptdev, AS_COMMAND(as_nr), cmd); + gpu_write(ptdev->iomem, AS_COMMAND(as_nr), cmd); status =3D wait_ready(ptdev, as_nr); } =20 @@ -592,9 +591,9 @@ static int panthor_mmu_as_enable(struct panthor_device = *ptdev, u32 as_nr, panthor_mmu_irq_enable_events(&ptdev->mmu->irq, panthor_mmu_as_fault_mask(ptdev, as_nr)); =20 - gpu_write64(ptdev, AS_TRANSTAB(as_nr), transtab); - gpu_write64(ptdev, AS_MEMATTR(as_nr), memattr); - gpu_write64(ptdev, AS_TRANSCFG(as_nr), transcfg); + gpu_write64(ptdev->iomem, AS_TRANSTAB(as_nr), transtab); + gpu_write64(ptdev->iomem, AS_MEMATTR(as_nr), memattr); + gpu_write64(ptdev->iomem, AS_TRANSCFG(as_nr), transcfg); =20 return as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_UPDATE); } @@ -629,9 +628,9 @@ static int panthor_mmu_as_disable(struct panthor_device= *ptdev, u32 as_nr, if (recycle_slot) return 0; =20 - gpu_write64(ptdev, AS_TRANSTAB(as_nr), 0); - gpu_write64(ptdev, AS_MEMATTR(as_nr), 0); - gpu_write64(ptdev, AS_TRANSCFG(as_nr), AS_TRANSCFG_ADRMODE_UNMAPPED); + gpu_write64(ptdev->iomem, AS_TRANSTAB(as_nr), 0); + gpu_write64(ptdev->iomem, AS_MEMATTR(as_nr), 0); + gpu_write64(ptdev->iomem, AS_TRANSCFG(as_nr), AS_TRANSCFG_ADRMODE_UNMAPPE= D); =20 return as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_UPDATE); } @@ -784,7 +783,7 @@ int panthor_vm_active(struct panthor_vm *vm) */ fault_mask =3D panthor_mmu_as_fault_mask(ptdev, as); if (ptdev->mmu->as.faulty_mask & fault_mask) { - gpu_write(ptdev, MMU_INT_CLEAR, fault_mask); + gpu_write(ptdev->iomem, MMU_INT_CLEAR, fault_mask); ptdev->mmu->as.faulty_mask &=3D ~fault_mask; } =20 @@ -1712,7 +1711,7 @@ static int panthor_vm_lock_region(struct panthor_vm *= vm, u64 start, u64 size) mutex_lock(&ptdev->mmu->as.slots_lock); if (vm->as.id >=3D 0 && size) { /* Lock the region that needs to be updated */ - gpu_write64(ptdev, AS_LOCKADDR(vm->as.id), + gpu_write64(ptdev->iomem, AS_LOCKADDR(vm->as.id), pack_region_range(ptdev, &start, &size)); =20 /* If the lock succeeded, update the locked_region info. */ @@ -1773,8 +1772,8 @@ static void panthor_mmu_irq_handler(struct panthor_de= vice *ptdev, u32 status) u32 access_type; u32 source_id; =20 - fault_status =3D gpu_read(ptdev, AS_FAULTSTATUS(as)); - addr =3D gpu_read64(ptdev, AS_FAULTADDRESS(as)); + fault_status =3D gpu_read(ptdev->iomem, AS_FAULTSTATUS(as)); + addr =3D gpu_read64(ptdev->iomem, AS_FAULTADDRESS(as)); =20 /* decode the fault status */ exception_type =3D fault_status & 0xFF; @@ -1805,7 +1804,7 @@ static void panthor_mmu_irq_handler(struct panthor_de= vice *ptdev, u32 status) * Note that COMPLETED irqs are never cleared, but this is fine * because they are always masked. */ - gpu_write(ptdev, MMU_INT_CLEAR, mask); + gpu_write(ptdev->iomem, MMU_INT_CLEAR, mask); =20 if (ptdev->mmu->as.slots[as].vm) ptdev->mmu->as.slots[as].vm->unhandled_fault =3D true; diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c b/drivers/gpu/drm/pantho= r/panthor_pwr.c index ed3b2b4479ca..b77c85ad733a 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr.c +++ b/drivers/gpu/drm/panthor/panthor_pwr.c @@ -55,7 +55,7 @@ struct panthor_pwr { static void panthor_pwr_irq_handler(struct panthor_device *ptdev, u32 stat= us) { spin_lock(&ptdev->pwr->reqs_lock); - gpu_write(ptdev, PWR_INT_CLEAR, status); + gpu_write(ptdev->iomem, PWR_INT_CLEAR, status); =20 if (unlikely(status & PWR_IRQ_COMMAND_NOT_ALLOWED)) drm_err(&ptdev->base, "PWR_IRQ: COMMAND_NOT_ALLOWED"); @@ -74,14 +74,14 @@ PANTHOR_IRQ_HANDLER(pwr, PWR, panthor_pwr_irq_handler); static void panthor_pwr_write_command(struct panthor_device *ptdev, u32 co= mmand, u64 args) { if (args) - gpu_write64(ptdev, PWR_CMDARG, args); + gpu_write64(ptdev->iomem, PWR_CMDARG, args); =20 - gpu_write(ptdev, PWR_COMMAND, command); + gpu_write(ptdev->iomem, PWR_COMMAND, command); } =20 static bool reset_irq_raised(struct panthor_device *ptdev) { - return gpu_read(ptdev, PWR_INT_RAWSTAT) & PWR_IRQ_RESET_COMPLETED; + return gpu_read(ptdev->iomem, PWR_INT_RAWSTAT) & PWR_IRQ_RESET_COMPLETED; } =20 static bool reset_pending(struct panthor_device *ptdev) @@ -96,7 +96,7 @@ static int panthor_pwr_reset(struct panthor_device *ptdev= , u32 reset_cmd) drm_WARN(&ptdev->base, 1, "Reset already pending"); } else { ptdev->pwr->pending_reqs |=3D PWR_IRQ_RESET_COMPLETED; - gpu_write(ptdev, PWR_INT_CLEAR, PWR_IRQ_RESET_COMPLETED); + gpu_write(ptdev->iomem, PWR_INT_CLEAR, PWR_IRQ_RESET_COMPLETED); panthor_pwr_write_command(ptdev, reset_cmd, 0); } } @@ -185,7 +185,7 @@ static int panthor_pwr_domain_wait_transition(struct pa= nthor_device *ptdev, u32 u64 val; int ret =3D 0; =20 - ret =3D gpu_read64_poll_timeout(ptdev, pwrtrans_reg, val, !(PWR_ALL_CORES= _MASK & val), 100, + ret =3D gpu_read64_poll_timeout(ptdev->iomem, pwrtrans_reg, val, !(PWR_AL= L_CORES_MASK & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, "%s domain power in transition, pwrtrans(0x%llx)", @@ -198,17 +198,17 @@ static int panthor_pwr_domain_wait_transition(struct = panthor_device *ptdev, u32 =20 static void panthor_pwr_debug_info_show(struct panthor_device *ptdev) { - drm_info(&ptdev->base, "GPU_FEATURES: 0x%016llx", gpu_read64(ptdev, GP= U_FEATURES)); - drm_info(&ptdev->base, "PWR_STATUS: 0x%016llx", gpu_read64(ptdev, PW= R_STATUS)); - drm_info(&ptdev->base, "L2_PRESENT: 0x%016llx", gpu_read64(ptdev, PW= R_L2_PRESENT)); - drm_info(&ptdev->base, "L2_PWRTRANS: 0x%016llx", gpu_read64(ptdev, PW= R_L2_PWRTRANS)); - drm_info(&ptdev->base, "L2_READY: 0x%016llx", gpu_read64(ptdev, PW= R_L2_READY)); - drm_info(&ptdev->base, "TILER_PRESENT: 0x%016llx", gpu_read64(ptdev, PW= R_TILER_PRESENT)); - drm_info(&ptdev->base, "TILER_PWRTRANS: 0x%016llx", gpu_read64(ptdev, PW= R_TILER_PWRTRANS)); - drm_info(&ptdev->base, "TILER_READY: 0x%016llx", gpu_read64(ptdev, PW= R_TILER_READY)); - drm_info(&ptdev->base, "SHADER_PRESENT: 0x%016llx", gpu_read64(ptdev, PW= R_SHADER_PRESENT)); - drm_info(&ptdev->base, "SHADER_PWRTRANS: 0x%016llx", gpu_read64(ptdev, PW= R_SHADER_PWRTRANS)); - drm_info(&ptdev->base, "SHADER_READY: 0x%016llx", gpu_read64(ptdev, PW= R_SHADER_READY)); + drm_info(&ptdev->base, "GPU_FEATURES: 0x%016llx", gpu_read64(ptdev->io= mem, GPU_FEATURES)); + drm_info(&ptdev->base, "PWR_STATUS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_STATUS)); + drm_info(&ptdev->base, "L2_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PRESENT)); + drm_info(&ptdev->base, "L2_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PWRTRANS)); + drm_info(&ptdev->base, "L2_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_READY)); + drm_info(&ptdev->base, "TILER_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_PRESENT)); + drm_info(&ptdev->base, "TILER_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_PWRTRANS)); + drm_info(&ptdev->base, "TILER_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_READY)); + drm_info(&ptdev->base, "SHADER_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_PRESENT)); + drm_info(&ptdev->base, "SHADER_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_PWRTRANS)); + drm_info(&ptdev->base, "SHADER_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_READY)); } =20 static int panthor_pwr_domain_transition(struct panthor_device *ptdev, u32= cmd, u32 domain, @@ -240,13 +240,13 @@ static int panthor_pwr_domain_transition(struct panth= or_device *ptdev, u32 cmd, return ret; =20 /* domain already in target state, return early */ - if ((gpu_read64(ptdev, ready_reg) & mask) =3D=3D expected_val) + if ((gpu_read64(ptdev->iomem, ready_reg) & mask) =3D=3D expected_val) return 0; =20 panthor_pwr_write_command(ptdev, pwr_cmd, mask); =20 - ret =3D gpu_read64_poll_timeout(ptdev, ready_reg, val, (mask & val) =3D= =3D expected_val, 100, - timeout_us); + ret =3D gpu_read64_poll_timeout(ptdev->iomem, ready_reg, val, (mask & val= ) =3D=3D expected_val, + 100, timeout_us); if (ret) { drm_err(&ptdev->base, "timeout waiting on %s power domain transition, cmd(0x%x), arg(0x%llx)", @@ -279,7 +279,7 @@ static int panthor_pwr_domain_transition(struct panthor= _device *ptdev, u32 cmd, static int retract_domain(struct panthor_device *ptdev, u32 domain) { const u32 pwr_cmd =3D PWR_COMMAND_DEF(PWR_COMMAND_RETRACT, domain, 0); - const u64 pwr_status =3D gpu_read64(ptdev, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); const u64 delegated_mask =3D PWR_STATUS_DOMAIN_DELEGATED(domain); const u64 allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(domain); u64 val; @@ -288,8 +288,9 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) if (drm_WARN_ON(&ptdev->base, domain =3D=3D PWR_COMMAND_DOMAIN_L2)) return -EPERM; =20 - ret =3D gpu_read64_poll_timeout(ptdev, PWR_STATUS, val, !(PWR_STATUS_RETR= ACT_PENDING & val), - 0, PWR_RETRACT_TIMEOUT_US); + ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, + !(PWR_STATUS_RETRACT_PENDING & val), 0, + PWR_RETRACT_TIMEOUT_US); if (ret) { drm_err(&ptdev->base, "%s domain retract pending", get_domain_name(domai= n)); return ret; @@ -306,7 +307,7 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) * On successful retraction * allow-flag will be set with delegated-flag being cleared. */ - ret =3D gpu_read64_poll_timeout(ptdev, PWR_STATUS, val, + ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, ((delegated_mask | allow_mask) & val) =3D=3D allow_mask, 10, PWR_TRANSITION_TIMEOUT_US); if (ret) { @@ -333,7 +334,7 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) static int delegate_domain(struct panthor_device *ptdev, u32 domain) { const u32 pwr_cmd =3D PWR_COMMAND_DEF(PWR_COMMAND_DELEGATE, domain, 0); - const u64 pwr_status =3D gpu_read64(ptdev, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); const u64 allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(domain); const u64 delegated_mask =3D PWR_STATUS_DOMAIN_DELEGATED(domain); u64 val; @@ -362,7 +363,7 @@ static int delegate_domain(struct panthor_device *ptdev= , u32 domain) * On successful delegation * allow-flag will be cleared with delegated-flag being set. */ - ret =3D gpu_read64_poll_timeout(ptdev, PWR_STATUS, val, + ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, ((delegated_mask | allow_mask) & val) =3D=3D delegated_mask, 10, PWR_TRANSITION_TIMEOUT_US); if (ret) { @@ -410,7 +411,7 @@ static int panthor_pwr_delegate_domains(struct panthor_= device *ptdev) */ static int panthor_pwr_domain_force_off(struct panthor_device *ptdev, u32 = domain) { - const u64 domain_ready =3D gpu_read64(ptdev, get_domain_ready_reg(domain)= ); + const u64 domain_ready =3D gpu_read64(ptdev->iomem, get_domain_ready_reg(= domain)); int ret; =20 /* Domain already powered down, early exit. */ @@ -471,7 +472,7 @@ int panthor_pwr_init(struct panthor_device *ptdev) =20 int panthor_pwr_reset_soft(struct panthor_device *ptdev) { - if (!(gpu_read64(ptdev, PWR_STATUS) & PWR_STATUS_ALLOW_SOFT_RESET)) { + if (!(gpu_read64(ptdev->iomem, PWR_STATUS) & PWR_STATUS_ALLOW_SOFT_RESET)= ) { drm_err(&ptdev->base, "RESET_SOFT not allowed"); return -EOPNOTSUPP; } @@ -482,7 +483,7 @@ int panthor_pwr_reset_soft(struct panthor_device *ptdev) void panthor_pwr_l2_power_off(struct panthor_device *ptdev) { const u64 l2_allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(PWR_COMMAND_DOMAIN_= L2); - const u64 pwr_status =3D gpu_read64(ptdev, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); =20 /* Abort if L2 power off constraints are not satisfied */ if (!(pwr_status & l2_allow_mask)) { @@ -508,7 +509,7 @@ void panthor_pwr_l2_power_off(struct panthor_device *pt= dev) =20 int panthor_pwr_l2_power_on(struct panthor_device *ptdev) { - const u32 pwr_status =3D gpu_read64(ptdev, PWR_STATUS); + const u32 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); const u32 l2_allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(PWR_COMMAND_DOMAIN_= L2); int ret; =20 diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index a06d91875beb..7c8d350da02f 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3372,7 +3372,7 @@ queue_run_job(struct drm_sched_job *sched_job) if (resume_tick) sched_resume_tick(ptdev); =20 - gpu_write(ptdev, CSF_DOORBELL(queue->doorbell_id), 1); + gpu_write(ptdev->iomem, CSF_DOORBELL(queue->doorbell_id), 1); if (!sched->pm.has_ref && !(group->blocked_queues & BIT(job->queue_idx))) { pm_runtime_get(ptdev->base.dev); --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013050.outbound.protection.outlook.com [40.107.159.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D98873DFC7F for ; Fri, 10 Apr 2026 16:47:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.50 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839681; cv=fail; b=Qx4CcgQF3uQX000CWMg5cMemC5rD17F04vLhQnQrXfVgyrNTm2LIQq/u1mH8h5nUL6bkPNeYqH7uX0be+uS6YEMW3hwRnk/CVB4+Usc76nGni0eWefPKKtaDO15sm9VN4J8QkN7rwYJ+5us9zVG9dzKMBql2Ka8bLj2DVdIeHfE= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839681; c=relaxed/simple; bh=0rD6ukSC3ES4uAa7g+WRyWie5+XyBSrMEIZ8UNiQ5sk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GnsPJC7BtSXZzhHi0T+yLrz3DEW7lsb33yZXNw58s+tDkPbtqSvph+1GBzTvHxDd3fdA8evDSIV6F4inoWAqYOYXz5i+dxU8MSF0b1Xr9bU4UfwbKMdx2+aEm58rV/P+wNkk1PvbPACcnbhNj3d2QxaSim8mfr6VFE7ew71yoG0= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=REPRwB5p; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=REPRwB5p; arc=fail smtp.client-ip=40.107.159.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="REPRwB5p"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="REPRwB5p" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=bVCQK+x2UBdFM7f9CcmPT/EVmDAd+KFSfraKTtM+z3ve9foGXWDpuKf3pn72E28LgrTzulDGXwgimho9Xy5wdagxSIrlFVAx68BCuM7PGuoW5ADNPpLdzwC2FX1+l0/4YrnGbTX/k6IzcXVfiQtJMZCxtidWL0/IU9eBwEbMHuqrKRMJE7CWxJQzS3IOgdqTVx42S9wjs3wJiaPezmLniXMUxODVQMmHCLaifyCEsTXaMqtF+9FLVVoeZXm/g/NyfMznYyRuMwDqDaEppG5/q+NFaGX19aGEhUBJVVnZQlV/1gKGO12zJm8tom4qFOH3Al5TtVDUgXgmn0cMff+5Gg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RlqvhJIjgdmIW5FsHTC+UjQBQ/7XQGlqZ47/uePAvQE=; b=yCiPAJqeSw/SPHAIXIbX4JHGptCpWjAEEPCKobGv7g6P/8X2/kkOWZZE9aFAn2GUG9D+l5IeiJk30oy14T9mM2fImQiTX7iELFLRcRU4lnFdqnJCY5toB0O+2CccqPwb7lkt1GwdAR4DhQJj27bGsLbVKith0su6VaKOZjHZdQhFLTOjw8H+bcYGH+nHjPel/cax6K4+TzqT2DOD6X3IJluPgBC43tYhcxP/43OaiAdr+WmmqQMb5yAKZDpkp9Po/i4PB/jhkZGYIlMCKToJw795BDCiz2MM9WtiSQBY2MinuPe1wCoTecBjyjo0CK+1fnyPggrT2WcSJONFISVvag== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RlqvhJIjgdmIW5FsHTC+UjQBQ/7XQGlqZ47/uePAvQE=; b=REPRwB5pt3JfYnKDDEmwosU5fEHLLDoCuvNvxRkeLeB/lE4CKXwfbhbRw7Y0qi8+QrmKD/4TMs2/N9MyOtG5pm9aFQ9i2Umo7gWI0qBnm9+81lIoOpjZKNIozD6KfOpfbgSWb8FW9QeLtzPwP12uzqCv+YBaWbXLlaZhFeVRh90= Received: from DU7P195CA0020.EURP195.PROD.OUTLOOK.COM (2603:10a6:10:54d::11) by AMBPR08MB11591.eurprd08.prod.outlook.com (2603:10a6:20b:6f0::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.18; Fri, 10 Apr 2026 16:47:47 +0000 Received: from DU2PEPF0001E9C5.eurprd03.prod.outlook.com (2603:10a6:10:54d:cafe::44) by DU7P195CA0020.outlook.office365.com (2603:10a6:10:54d::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.42 via Frontend Transport; Fri, 10 Apr 2026 16:47:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU2PEPF0001E9C5.mail.protection.outlook.com (10.167.8.74) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9745.21 via Frontend Transport; Fri, 10 Apr 2026 16:47:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fCIeogghkh3DP/JAslDmacRrzVUNRMpyEAaxET+K6FnSa6Ja6TwDo0RRr9aVF4NUwMjjgsDPDHCBC/jNZtqaF7n3bJGhsd1ICp1kF9ATaE891JxUnxxdH+HIaj3MGxy8cu7V666+Goyc5VItmEylDh0/oFarWTeaM4trxsgq/ztUBgXxZZfFZo7hX24E1LMw1AKb238vsqVx3hRMJAOt/+BtHyfIE1wqewMW9nDA9j/W4TRNYWLyzRhWM2hyRAtzaRORTtrzi3aIHGEZmHXey5zRDUf0li1uxX/I0NSCMHY/M+F8JTpxYBA9APUXcsOw7uY79+siEGdJN0zickOqRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RlqvhJIjgdmIW5FsHTC+UjQBQ/7XQGlqZ47/uePAvQE=; b=BrfdJrcJOUZMlN9jbOWKE3cClzLhz8yN4uTQPmF0ojdFYXppuNOEQzWhWzysM8r0bVO2gfdXEUcph1JJhN/AA9UUmQongZ42VNlKEPQ0hYKiBlYe/BHRF49dDAthDUVYzoZbKkjsYrPhCmMLe2mbUpPJN1FCgVn2wAKcd+HrGkH7L5HbN6sJO1XHkiqMmNGfJkv8qkQzGtAOoOHuzGNTOLCoAjizuABVlk/coB7vHg5heauWI1QIIjVG2hTEQ8HTbl3bWKEI5c0f9PhQqLw2fZ+UHqFDDnlsQ0rd0gIPOcF6Xz7jWTW9d3ZRVEsbvGABnrWmYJSdbM+hYZdKV1USqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RlqvhJIjgdmIW5FsHTC+UjQBQ/7XQGlqZ47/uePAvQE=; b=REPRwB5pt3JfYnKDDEmwosU5fEHLLDoCuvNvxRkeLeB/lE4CKXwfbhbRw7Y0qi8+QrmKD/4TMs2/N9MyOtG5pm9aFQ9i2Umo7gWI0qBnm9+81lIoOpjZKNIozD6KfOpfbgSWb8FW9QeLtzPwP12uzqCv+YBaWbXLlaZhFeVRh90= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:44 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:44 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 2/8] drm/panthor: Split register definitions by components Date: Fri, 10 Apr 2026 17:46:31 +0100 Message-ID: <20260410164637.549145-3-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LNXP265CA0055.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5d::19) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|DU2PEPF0001E9C5:EE_|AMBPR08MB11591:EE_ X-MS-Office365-Filtering-Correlation-Id: 7076ee0f-c709-4f4f-2c78-08de9720e4f5 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: FyVoFzZ/r8qgzijCf8H5r1m8jqguCCWvJhnB4P3fJtbZ4q4KFyay2XGPktphJ+oL97YgABG/NxrPKx0rGrrZ1XzgVlH5Q1ije4lvhzHkuqjR03JFzuKoOoAa22zxkNWMq71da/p7m6wrnRi2wNyovlyuRGirXTc2nG3RoyrDeb01Yy23OP2Xynhxqmd1gTpiBGw731mmFEcIDHIy/FRr3ElGSO5ma2UBwr0QDt22LBWq6aiQr3Yz5Zs3f5ctt6et6dHzKsUMCyvQrBWlrXx1miZl4eEK+c6Cpzqzo2B0tS5i0g4JKFxJcXiNqbvZsQXNVCIEaZjuxGbGBaIu6f6MbblANiHyO99odLXdSyU+3Ly5wrwPbqY0o4Sn3b9HiyeVrILgwtA5acoXh8tSwaRN4Ya9PXhVJbDBwEDnHJybotxLVf1wR0OQ8soMy8Q5ym+wx12Z/LspGF8aTsVZKdLK3cP6YWMrSN859uvgQY3ewDKbSOSuTA/GBkUxWwJ/eaiZ3yn4EW3fG3nUeyjazIhNia1y0Pb8QsiLcwLXWfpUTJ87gkKa+1t6vT2UddErr9gdrz9pYwyv2bsaF7Say0kZMTy42+rTD3WETHrbsAttfM/lr3yWpulDgO64JZ2dRJDYbBmFsiBUKWuOsvIYrrgmliqYDPbS4bcqOHCBZAl+kNrisXgeg5qo2F+p401InWcJg5Po5X9TbJrQCBlI8MdU2jXOmAaW08ik37NMvXIPUhk= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: KR0iSsgPV1SnGijPdZ4iWohMITtFbwDm40xb+QK6VIN5xlYIWeTZ4Olxb3nJjnqxNu5wIkL/k7fDpJKdmAP8/0FpJ0dIWxU2zU7n9fMpug/yqA33c08YVBP6IRt+ZwVwdWd5cq7i0FmfUVgiyHvgYZpoeh8m04M97Lc9oSlXQf8+8IqYC+hgiE4MWPfYRgmZWKE3jJiRY1I6devY+/puKMpv30bVO9QPFMQvIvMgwqQHdWan41X15+KKDjS9+lw3lMqOSJEanjfG5I3rEucDcAafsgpJGd3bvcFcEGHK0H8DB1S+hBRjrwyMkqbhfR47nuIUpr4GKJd11ku4alNvdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF0001E9C5.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9454c268-9ee6-4092-f1a2-08de9720bf52 X-Microsoft-Antispam: BCL:0;ARA:13230040|35042699022|14060799003|376014|36860700016|1800799024|82310400026|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: SfWLitixTrf9tJsf+zXdsa/DBsG4N1s6C5Si0iZGNsKPzMdxyZ6sVA5y6jrkvszNM3D8vxGTuMPInfz5cbrrLF9YdELfD/CxWIar7UKfonzFfHQ7b8+B9ELTHK07zz+HR3mM+41UB/f+aEkLkFF24qYocmQNs8hkPMcugAA0k47RJ/lPNzwo/M8J99KKSSTBG1cInuc9VAeag/HlEF7gCNwyPoov1/CLvV5S7DoNAzved32GV30E62a2LGhAtNv+y58cNqiiLq01g6iDn32l7Xn3pWrD+pyqTnBies8PqOiQdU9yGjEb/6+x5JZJgFohMUEsrMo51EIQ96xMTbBeg1s9wAgjkynU8ZVTZjn4ynTVj/wH+Ib8HBRn43vdwJQc7ZYfAB6Z6rMTXSi3vdIeJkfa1ET+6RvSEziJXW+WcOXpUYUCeCPRxKYwIjQk79RwzRPGdZUhu27tOHcdbSlrHKhzqDW/MyPBAJog3rPNBLdDN1TlJw9QG3GOi+etdVEjtX4SSxN2MxFXjqdum2LAvtT/Nu03cejRlyH5C/1kh8Pt3vP6anHgVl17JiHH5c9dhl2dU34jlDnLbkA9bqnso+vSgi62zvZP54R4/boJmiBNG3mlotWe5C3SyDsZVNFcCalA9UOkNJofapMfvZw6CtX4TFUbLlxTF2AbyCPaCblLka34A47QpL4LgysKNvWNhhXYjZ3KQG2L6VfVHSEz6vviEX1z85sGUNJuoo/6xUa/2VAfsMNHTX/jqWxcCLcLsS7qDUM2jwHCg/F7mAn0cQ== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(35042699022)(14060799003)(376014)(36860700016)(1800799024)(82310400026)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YWdKv3rhn/Gbf0M2EwXfKKd+NsdXHhM3Dfg+W5J3MxjYNdlGsvv3Ukww9BfwKz5EgLXKbZ66J7XW5h0Fm+8bYlOWeLz8HAOUzcf7TaX96whcKdUhzO9yNjfXTKJDujLNxEK4N8huCPKP/dxoh7c8MqH+oHAdesYqo+NO0WMPZtu88MQZAHxGA5xKkX1p5vXb2cxvOMljdyZRKKX4UeyPASJ1B7y1qD1vHzCuv4VcsFPAB3raOViL4rjfhPYnJB0Yj9MKdXX/N/MSNHJ95SLsWjgAYv95OEnmQYOh3Nk23FNYvbdCp+5E7GK72Re3c68QEx6zWW+ivbcj6OUJfAx8q1SHM5BqA3diOkj74in0+veRC4ZWpCZKJi+skQPut57GusbZRWbNlaD18HhhJyVMKiQzCqUweuZlCqhZLwv4nZZaKP+mdSobwbDtuNJlR5Us X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:46.8135 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7076ee0f-c709-4f4f-2c78-08de9720e4f5 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF0001E9C5.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR08MB11591 Content-Type: text/plain; charset="utf-8" Split the panthor register definitions into per-component headers for the GPU, MMU, firmware, power and generic hardware registers. This makes the register layout easier to follow and prepares the driver for component-local iomem mappings by grouping definitions with the code that owns them. The old monolithic panthor_regs.h header can then be dropped. No functional change intended. Signed-off-by: Karunika Choo Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_device.c | 3 +- drivers/gpu/drm/panthor/panthor_drv.c | 2 +- drivers/gpu/drm/panthor/panthor_fw.c | 2 +- drivers/gpu/drm/panthor/panthor_fw_regs.h | 30 +++ drivers/gpu/drm/panthor/panthor_gpu.c | 2 +- drivers/gpu/drm/panthor/panthor_gpu_regs.h | 111 ++++++++ drivers/gpu/drm/panthor/panthor_heap.c | 2 +- drivers/gpu/drm/panthor/panthor_hw.c | 3 +- drivers/gpu/drm/panthor/panthor_hw.h | 2 +- drivers/gpu/drm/panthor/panthor_hw_regs.h | 16 ++ drivers/gpu/drm/panthor/panthor_mmu.c | 3 +- drivers/gpu/drm/panthor/panthor_mmu_regs.h | 70 +++++ drivers/gpu/drm/panthor/panthor_pwr.c | 3 +- drivers/gpu/drm/panthor/panthor_pwr_regs.h | 83 ++++++ drivers/gpu/drm/panthor/panthor_regs.h | 291 --------------------- drivers/gpu/drm/panthor/panthor_sched.c | 3 +- 16 files changed, 325 insertions(+), 301 deletions(-) create mode 100644 drivers/gpu/drm/panthor/panthor_fw_regs.h create mode 100644 drivers/gpu/drm/panthor/panthor_gpu_regs.h create mode 100644 drivers/gpu/drm/panthor/panthor_hw_regs.h create mode 100644 drivers/gpu/drm/panthor/panthor_mmu_regs.h create mode 100644 drivers/gpu/drm/panthor/panthor_pwr_regs.h delete mode 100644 drivers/gpu/drm/panthor/panthor_regs.h diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/pan= thor/panthor_device.c index d62017b73409..f876b13492ae 100644 --- a/drivers/gpu/drm/panthor/panthor_device.c +++ b/drivers/gpu/drm/panthor/panthor_device.c @@ -19,12 +19,13 @@ #include "panthor_devfreq.h" #include "panthor_device.h" #include "panthor_fw.h" +#include "panthor_fw_regs.h" #include "panthor_gem.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_hw.h" #include "panthor_mmu.h" #include "panthor_pwr.h" -#include "panthor_regs.h" #include "panthor_sched.h" =20 static int panthor_gpu_coherency_init(struct panthor_device *ptdev) diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 4f926c861fba..e63210b01e6e 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -34,9 +34,9 @@ #include "panthor_fw.h" #include "panthor_gem.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_heap.h" #include "panthor_mmu.h" -#include "panthor_regs.h" #include "panthor_sched.h" =20 /** diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor= /panthor_fw.c index 69a19751a314..4704275b9c8f 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -20,11 +20,11 @@ =20 #include "panthor_device.h" #include "panthor_fw.h" +#include "panthor_fw_regs.h" #include "panthor_gem.h" #include "panthor_gpu.h" #include "panthor_hw.h" #include "panthor_mmu.h" -#include "panthor_regs.h" #include "panthor_sched.h" #include "panthor_trace.h" =20 diff --git a/drivers/gpu/drm/panthor/panthor_fw_regs.h b/drivers/gpu/drm/pa= nthor/panthor_fw_regs.h new file mode 100644 index 000000000000..d523d41e18dd --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_fw_regs.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2026 ARM Limited. All rights reserved. */ + +#ifndef __PANTHOR_FW_REGS_H__ +#define __PANTHOR_FW_REGS_H__ + +#define MCU_CONTROL 0x700 +#define MCU_CONTROL_ENABLE 1 +#define MCU_CONTROL_AUTO 2 +#define MCU_CONTROL_DISABLE 0 + +#define MCU_STATUS 0x704 +#define MCU_STATUS_DISABLED 0 +#define MCU_STATUS_ENABLED 1 +#define MCU_STATUS_HALT 2 +#define MCU_STATUS_FATAL 3 + +#define JOB_INT_RAWSTAT 0x1000 +#define JOB_INT_CLEAR 0x1004 +#define JOB_INT_MASK 0x1008 +#define JOB_INT_STAT 0x100c +#define JOB_INT_GLOBAL_IF BIT(31) +#define JOB_INT_CSG_IF(x) BIT(x) + +#define CSF_GPU_LATEST_FLUSH_ID 0x10000 + +#define CSF_DOORBELL(i) (0x80000 + ((i) * 0x10000)) +#define CSF_GLB_DOORBELL_ID 0 + +#endif /* __PANTHOR_FW_REGS_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/pantho= r/panthor_gpu.c index bdb72cebccb3..fecc30747acf 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.c +++ b/drivers/gpu/drm/panthor/panthor_gpu.c @@ -19,8 +19,8 @@ =20 #include "panthor_device.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_hw.h" -#include "panthor_regs.h" =20 #define CREATE_TRACE_POINTS #include "panthor_trace.h" diff --git a/drivers/gpu/drm/panthor/panthor_gpu_regs.h b/drivers/gpu/drm/p= anthor/panthor_gpu_regs.h new file mode 100644 index 000000000000..7303b7f5ee18 --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_gpu_regs.h @@ -0,0 +1,111 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2026 ARM Limited. All rights reserved. */ + +#ifndef __PANTHOR_GPU_REGS_H__ +#define __PANTHOR_GPU_REGS_H__ + +#define GPU_L2_FEATURES 0x4 +#define GPU_L2_FEATURES_LINE_SIZE(x) (1 << ((x) & GENMASK(7, 0))) + +#define GPU_CORE_FEATURES 0x8 + +#define GPU_TILER_FEATURES 0xC +#define GPU_MEM_FEATURES 0x10 +#define GROUPS_L2_COHERENT BIT(0) + +#define GPU_MMU_FEATURES 0x14 +#define GPU_MMU_FEATURES_VA_BITS(x) ((x) & GENMASK(7, 0)) +#define GPU_MMU_FEATURES_PA_BITS(x) (((x) >> 8) & GENMASK(7, 0)) +#define GPU_AS_PRESENT 0x18 +#define GPU_CSF_ID 0x1C + +#define GPU_INT_RAWSTAT 0x20 +#define GPU_INT_CLEAR 0x24 +#define GPU_INT_MASK 0x28 +#define GPU_INT_STAT 0x2c +#define GPU_IRQ_FAULT BIT(0) +#define GPU_IRQ_PROTM_FAULT BIT(1) +#define GPU_IRQ_RESET_COMPLETED BIT(8) +#define GPU_IRQ_POWER_CHANGED BIT(9) +#define GPU_IRQ_POWER_CHANGED_ALL BIT(10) +#define GPU_IRQ_CLEAN_CACHES_COMPLETED BIT(17) +#define GPU_IRQ_DOORBELL_MIRROR BIT(18) +#define GPU_IRQ_MCU_STATUS_CHANGED BIT(19) +#define GPU_CMD 0x30 +#define GPU_CMD_DEF(type, payload) ((type) | ((payload) << 8)) +#define GPU_SOFT_RESET GPU_CMD_DEF(1, 1) +#define GPU_HARD_RESET GPU_CMD_DEF(1, 2) +#define CACHE_CLEAN BIT(0) +#define CACHE_INV BIT(1) +#define GPU_FLUSH_CACHES(l2, lsc, oth) \ + GPU_CMD_DEF(4, ((l2) << 0) | ((lsc) << 4) | ((oth) << 8)) + +#define GPU_STATUS 0x34 +#define GPU_STATUS_ACTIVE BIT(0) +#define GPU_STATUS_PWR_ACTIVE BIT(1) +#define GPU_STATUS_PAGE_FAULT BIT(4) +#define GPU_STATUS_PROTM_ACTIVE BIT(7) +#define GPU_STATUS_DBG_ENABLED BIT(8) + +#define GPU_FAULT_STATUS 0x3C +#define GPU_FAULT_ADDR 0x40 +#define GPU_L2_CONFIG 0x48 +#define GPU_L2_CONFIG_ASN_HASH_ENABLE BIT(24) + +#define GPU_PWR_KEY 0x50 +#define GPU_PWR_KEY_UNLOCK 0x2968A819 +#define GPU_PWR_OVERRIDE0 0x54 +#define GPU_PWR_OVERRIDE1 0x58 + +#define GPU_FEATURES 0x60 +#define GPU_FEATURES_RAY_INTERSECTION BIT(2) +#define GPU_FEATURES_RAY_TRAVERSAL BIT(5) + +#define GPU_TIMESTAMP_OFFSET 0x88 +#define GPU_CYCLE_COUNT 0x90 +#define GPU_TIMESTAMP 0x98 + +#define GPU_THREAD_MAX_THREADS 0xA0 +#define GPU_THREAD_MAX_WORKGROUP_SIZE 0xA4 +#define GPU_THREAD_MAX_BARRIER_SIZE 0xA8 +#define GPU_THREAD_FEATURES 0xAC + +#define GPU_TEXTURE_FEATURES(n) (0xB0 + ((n) * 4)) + +#define GPU_SHADER_PRESENT 0x100 +#define GPU_TILER_PRESENT 0x110 +#define GPU_L2_PRESENT 0x120 + +#define SHADER_READY 0x140 +#define TILER_READY 0x150 +#define L2_READY 0x160 + +#define SHADER_PWRON 0x180 +#define TILER_PWRON 0x190 +#define L2_PWRON 0x1A0 + +#define SHADER_PWROFF 0x1C0 +#define TILER_PWROFF 0x1D0 +#define L2_PWROFF 0x1E0 + +#define SHADER_PWRTRANS 0x200 +#define TILER_PWRTRANS 0x210 +#define L2_PWRTRANS 0x220 + +#define SHADER_PWRACTIVE 0x240 +#define TILER_PWRACTIVE 0x250 +#define L2_PWRACTIVE 0x260 + +#define GPU_REVID 0x280 + +#define GPU_ASN_HASH(n) (0x2C0 + ((n) * 4)) + +#define GPU_COHERENCY_FEATURES 0x300 +#define GPU_COHERENCY_PROT_BIT(name) BIT(GPU_COHERENCY_ ## name) + +#define GPU_COHERENCY_PROTOCOL 0x304 +#define GPU_COHERENCY_ACE_LITE 0 +#define GPU_COHERENCY_ACE 1 +#define GPU_COHERENCY_NONE 31 + +#endif /* __PANTHOR_GPU_REGS_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_heap.c b/drivers/gpu/drm/panth= or/panthor_heap.c index 1ee30dc7066f..99311abdf1e9 100644 --- a/drivers/gpu/drm/panthor/panthor_heap.c +++ b/drivers/gpu/drm/panthor/panthor_heap.c @@ -9,9 +9,9 @@ =20 #include "panthor_device.h" #include "panthor_gem.h" +#include "panthor_gpu_regs.h" #include "panthor_heap.h" #include "panthor_mmu.h" -#include "panthor_regs.h" =20 /* * The GPU heap context is an opaque structure used by the GPU to track the diff --git a/drivers/gpu/drm/panthor/panthor_hw.c b/drivers/gpu/drm/panthor= /panthor_hw.c index 9309d0938212..9431f16d950f 100644 --- a/drivers/gpu/drm/panthor/panthor_hw.c +++ b/drivers/gpu/drm/panthor/panthor_hw.c @@ -8,9 +8,10 @@ =20 #include "panthor_device.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_hw.h" #include "panthor_pwr.h" -#include "panthor_regs.h" +#include "panthor_pwr_regs.h" =20 #define GPU_PROD_ID_MAKE(arch_major, prod_major) \ (((arch_major) << 24) | (prod_major)) diff --git a/drivers/gpu/drm/panthor/panthor_hw.h b/drivers/gpu/drm/panthor= /panthor_hw.h index 2c28aea82841..7f134c4b290f 100644 --- a/drivers/gpu/drm/panthor/panthor_hw.h +++ b/drivers/gpu/drm/panthor/panthor_hw.h @@ -5,7 +5,7 @@ #define __PANTHOR_HW_H__ =20 #include "panthor_device.h" -#include "panthor_regs.h" +#include "panthor_hw_regs.h" =20 /** * struct panthor_hw_ops - HW operations that are specific to a GPU diff --git a/drivers/gpu/drm/panthor/panthor_hw_regs.h b/drivers/gpu/drm/pa= nthor/panthor_hw_regs.h new file mode 100644 index 000000000000..6295374a69ab --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_hw_regs.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2026 ARM Limited. All rights reserved. */ + +#ifndef __PANTHOR_HW_REGS_H__ +#define __PANTHOR_HW_REGS_H__ + +#define GPU_ID 0x0 +#define GPU_ARCH_MAJOR(x) ((x) >> 28) +#define GPU_ARCH_MINOR(x) (((x) & GENMASK(27, 24)) >> 24) +#define GPU_ARCH_REV(x) (((x) & GENMASK(23, 20)) >> 20) +#define GPU_PROD_MAJOR(x) (((x) & GENMASK(19, 16)) >> 16) +#define GPU_VER_MAJOR(x) (((x) & GENMASK(15, 12)) >> 12) +#define GPU_VER_MINOR(x) (((x) & GENMASK(11, 4)) >> 4) +#define GPU_VER_STATUS(x) ((x) & GENMASK(3, 0)) + +#endif /* __PANTHOR_HW_REGS_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index 0bd07a3dd774..b9f6031e24a4 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -33,9 +33,10 @@ #include "panthor_device.h" #include "panthor_gem.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_heap.h" #include "panthor_mmu.h" -#include "panthor_regs.h" +#include "panthor_mmu_regs.h" #include "panthor_sched.h" =20 #define MAX_AS_SLOTS 32 diff --git a/drivers/gpu/drm/panthor/panthor_mmu_regs.h b/drivers/gpu/drm/p= anthor/panthor_mmu_regs.h new file mode 100644 index 000000000000..cc9cf603cec6 --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_mmu_regs.h @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2026 ARM Limited. All rights reserved. */ + +#ifndef __PANTHOR_MMU_REGS_H__ +#define __PANTHOR_MMU_REGS_H__ + +/* MMU regs */ +#define MMU_INT_RAWSTAT 0x2000 +#define MMU_INT_CLEAR 0x2004 +#define MMU_INT_MASK 0x2008 +#define MMU_INT_STAT 0x200c + +/* AS_COMMAND register commands */ + +#define MMU_BASE 0x2400 +#define MMU_AS_SHIFT 6 +#define MMU_AS(as) (MMU_BASE + ((as) << MMU_AS_SHIFT)) + +#define AS_TRANSTAB(as) (MMU_AS(as) + 0x0) +#define AS_MEMATTR(as) (MMU_AS(as) + 0x8) +#define AS_MEMATTR_AARCH64_INNER_ALLOC_IMPL (2 << 2) +#define AS_MEMATTR_AARCH64_INNER_ALLOC_EXPL(w, r) ((3 << 2) | \ + ((w) ? BIT(0) : 0) | \ + ((r) ? BIT(1) : 0)) +#define AS_MEMATTR_AARCH64_SH_MIDGARD_INNER (0 << 4) +#define AS_MEMATTR_AARCH64_SH_CPU_INNER (1 << 4) +#define AS_MEMATTR_AARCH64_SH_CPU_INNER_SHADER_COH (2 << 4) +#define AS_MEMATTR_AARCH64_SHARED (0 << 6) +#define AS_MEMATTR_AARCH64_INNER_OUTER_NC (1 << 6) +#define AS_MEMATTR_AARCH64_INNER_OUTER_WB (2 << 6) +#define AS_MEMATTR_AARCH64_FAULT (3 << 6) +#define AS_LOCKADDR(as) (MMU_AS(as) + 0x10) +#define AS_COMMAND(as) (MMU_AS(as) + 0x18) +#define AS_COMMAND_NOP 0 +#define AS_COMMAND_UPDATE 1 +#define AS_COMMAND_LOCK 2 +#define AS_COMMAND_UNLOCK 3 +#define AS_COMMAND_FLUSH_PT 4 +#define AS_COMMAND_FLUSH_MEM 5 +#define AS_LOCK_REGION_MIN_SIZE (1ULL << 15) +#define AS_FAULTSTATUS(as) (MMU_AS(as) + 0x1C) +#define AS_FAULTSTATUS_ACCESS_TYPE_MASK (0x3 << 8) +#define AS_FAULTSTATUS_ACCESS_TYPE_ATOMIC (0x0 << 8) +#define AS_FAULTSTATUS_ACCESS_TYPE_EX (0x1 << 8) +#define AS_FAULTSTATUS_ACCESS_TYPE_READ (0x2 << 8) +#define AS_FAULTSTATUS_ACCESS_TYPE_WRITE (0x3 << 8) +#define AS_FAULTADDRESS(as) (MMU_AS(as) + 0x20) +#define AS_STATUS(as) (MMU_AS(as) + 0x28) +#define AS_STATUS_AS_ACTIVE BIT(0) +#define AS_TRANSCFG(as) (MMU_AS(as) + 0x30) +#define AS_TRANSCFG_ADRMODE_UNMAPPED (1 << 0) +#define AS_TRANSCFG_ADRMODE_IDENTITY (2 << 0) +#define AS_TRANSCFG_ADRMODE_AARCH64_4K (6 << 0) +#define AS_TRANSCFG_ADRMODE_AARCH64_64K (8 << 0) +#define AS_TRANSCFG_INA_BITS(x) ((x) << 6) +#define AS_TRANSCFG_OUTA_BITS(x) ((x) << 14) +#define AS_TRANSCFG_SL_CONCAT BIT(22) +#define AS_TRANSCFG_PTW_MEMATTR_NC (1 << 24) +#define AS_TRANSCFG_PTW_MEMATTR_WB (2 << 24) +#define AS_TRANSCFG_PTW_SH_NS (0 << 28) +#define AS_TRANSCFG_PTW_SH_OS (2 << 28) +#define AS_TRANSCFG_PTW_SH_IS (3 << 28) +#define AS_TRANSCFG_PTW_RA BIT(30) +#define AS_TRANSCFG_DISABLE_HIER_AP BIT(33) +#define AS_TRANSCFG_DISABLE_AF_FAULT BIT(34) +#define AS_TRANSCFG_WXN BIT(35) +#define AS_TRANSCFG_XREADABLE BIT(36) +#define AS_FAULTEXTRA(as) (MMU_AS(as) + 0x38) + +#endif /* __PANTHOR_MMU_REGS_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c b/drivers/gpu/drm/pantho= r/panthor_pwr.c index b77c85ad733a..306592ff2227 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr.c +++ b/drivers/gpu/drm/panthor/panthor_pwr.c @@ -11,9 +11,10 @@ #include =20 #include "panthor_device.h" +#include "panthor_gpu_regs.h" #include "panthor_hw.h" #include "panthor_pwr.h" -#include "panthor_regs.h" +#include "panthor_pwr_regs.h" =20 #define PWR_INTERRUPTS_MASK \ (PWR_IRQ_POWER_CHANGED_SINGLE | \ diff --git a/drivers/gpu/drm/panthor/panthor_pwr_regs.h b/drivers/gpu/drm/p= anthor/panthor_pwr_regs.h new file mode 100644 index 000000000000..ad3e446971db --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_pwr_regs.h @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2026 ARM Limited. All rights reserved. */ + +#ifndef __PANTHOR_PWR_REGS_H__ +#define __PANTHOR_PWR_REGS_H__ + +#define PWR_CONTROL_BASE 0x800 +#define PWR_CTRL_REG(x) (PWR_CONTROL_BASE + (x)) + +#define PWR_INT_RAWSTAT PWR_CTRL_REG(0x0) +#define PWR_INT_CLEAR PWR_CTRL_REG(0x4) +#define PWR_INT_MASK PWR_CTRL_REG(0x8) +#define PWR_INT_STAT PWR_CTRL_REG(0xc) +#define PWR_IRQ_POWER_CHANGED_SINGLE BIT(0) +#define PWR_IRQ_POWER_CHANGED_ALL BIT(1) +#define PWR_IRQ_DELEGATION_CHANGED BIT(2) +#define PWR_IRQ_RESET_COMPLETED BIT(3) +#define PWR_IRQ_RETRACT_COMPLETED BIT(4) +#define PWR_IRQ_INSPECT_COMPLETED BIT(5) +#define PWR_IRQ_COMMAND_NOT_ALLOWED BIT(30) +#define PWR_IRQ_COMMAND_INVALID BIT(31) + +#define PWR_STATUS PWR_CTRL_REG(0x20) +#define PWR_STATUS_ALLOW_L2 BIT_U64(0) +#define PWR_STATUS_ALLOW_TILER BIT_U64(1) +#define PWR_STATUS_ALLOW_SHADER BIT_U64(8) +#define PWR_STATUS_ALLOW_BASE BIT_U64(14) +#define PWR_STATUS_ALLOW_STACK BIT_U64(15) +#define PWR_STATUS_DOMAIN_ALLOWED(x) BIT_U64(x) +#define PWR_STATUS_DELEGATED_L2 BIT_U64(16) +#define PWR_STATUS_DELEGATED_TILER BIT_U64(17) +#define PWR_STATUS_DELEGATED_SHADER BIT_U64(24) +#define PWR_STATUS_DELEGATED_BASE BIT_U64(30) +#define PWR_STATUS_DELEGATED_STACK BIT_U64(31) +#define PWR_STATUS_DELEGATED_SHIFT 16 +#define PWR_STATUS_DOMAIN_DELEGATED(x) BIT_U64((x) + PWR_STATUS_DELEGAT= ED_SHIFT) +#define PWR_STATUS_ALLOW_SOFT_RESET BIT_U64(33) +#define PWR_STATUS_ALLOW_FAST_RESET BIT_U64(34) +#define PWR_STATUS_POWER_PENDING BIT_U64(41) +#define PWR_STATUS_RESET_PENDING BIT_U64(42) +#define PWR_STATUS_RETRACT_PENDING BIT_U64(43) +#define PWR_STATUS_INSPECT_PENDING BIT_U64(44) + +#define PWR_COMMAND PWR_CTRL_REG(0x28) +#define PWR_COMMAND_POWER_UP 0x10 +#define PWR_COMMAND_POWER_DOWN 0x11 +#define PWR_COMMAND_DELEGATE 0x20 +#define PWR_COMMAND_RETRACT 0x21 +#define PWR_COMMAND_RESET_SOFT 0x31 +#define PWR_COMMAND_RESET_FAST 0x32 +#define PWR_COMMAND_INSPECT 0xF0 +#define PWR_COMMAND_DOMAIN_L2 0 +#define PWR_COMMAND_DOMAIN_TILER 1 +#define PWR_COMMAND_DOMAIN_SHADER 8 +#define PWR_COMMAND_DOMAIN_BASE 14 +#define PWR_COMMAND_DOMAIN_STACK 15 +#define PWR_COMMAND_SUBDOMAIN_RTU BIT(0) +#define PWR_COMMAND_DEF(cmd, domain, subdomain) \ + (((subdomain) << 16) | ((domain) << 8) | (cmd)) + +#define PWR_CMDARG PWR_CTRL_REG(0x30) + +#define PWR_L2_PRESENT PWR_CTRL_REG(0x100) +#define PWR_L2_READY PWR_CTRL_REG(0x108) +#define PWR_L2_PWRTRANS PWR_CTRL_REG(0x110) +#define PWR_L2_PWRACTIVE PWR_CTRL_REG(0x118) +#define PWR_TILER_PRESENT PWR_CTRL_REG(0x140) +#define PWR_TILER_READY PWR_CTRL_REG(0x148) +#define PWR_TILER_PWRTRANS PWR_CTRL_REG(0x150) +#define PWR_TILER_PWRACTIVE PWR_CTRL_REG(0x158) +#define PWR_SHADER_PRESENT PWR_CTRL_REG(0x200) +#define PWR_SHADER_READY PWR_CTRL_REG(0x208) +#define PWR_SHADER_PWRTRANS PWR_CTRL_REG(0x210) +#define PWR_SHADER_PWRACTIVE PWR_CTRL_REG(0x218) +#define PWR_BASE_PRESENT PWR_CTRL_REG(0x380) +#define PWR_BASE_READY PWR_CTRL_REG(0x388) +#define PWR_BASE_PWRTRANS PWR_CTRL_REG(0x390) +#define PWR_BASE_PWRACTIVE PWR_CTRL_REG(0x398) +#define PWR_STACK_PRESENT PWR_CTRL_REG(0x3c0) +#define PWR_STACK_READY PWR_CTRL_REG(0x3c8) +#define PWR_STACK_PWRTRANS PWR_CTRL_REG(0x3d0) + +#endif /* __PANTHOR_PWR_REGS_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_regs.h b/drivers/gpu/drm/panth= or/panthor_regs.h deleted file mode 100644 index 08bf06c452d6..000000000000 --- a/drivers/gpu/drm/panthor/panthor_regs.h +++ /dev/null @@ -1,291 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 or MIT */ -/* Copyright 2018 Marty E. Plummer */ -/* Copyright 2019 Linaro, Ltd, Rob Herring */ -/* Copyright 2023 Collabora ltd. */ -/* - * Register definitions based on mali_kbase_gpu_regmap.h and - * mali_kbase_gpu_regmap_csf.h - * (C) COPYRIGHT 2010-2022 ARM Limited. All rights reserved. - */ -#ifndef __PANTHOR_REGS_H__ -#define __PANTHOR_REGS_H__ - -#define GPU_ID 0x0 -#define GPU_ARCH_MAJOR(x) ((x) >> 28) -#define GPU_ARCH_MINOR(x) (((x) & GENMASK(27, 24)) >> 24) -#define GPU_ARCH_REV(x) (((x) & GENMASK(23, 20)) >> 20) -#define GPU_PROD_MAJOR(x) (((x) & GENMASK(19, 16)) >> 16) -#define GPU_VER_MAJOR(x) (((x) & GENMASK(15, 12)) >> 12) -#define GPU_VER_MINOR(x) (((x) & GENMASK(11, 4)) >> 4) -#define GPU_VER_STATUS(x) ((x) & GENMASK(3, 0)) - -#define GPU_L2_FEATURES 0x4 -#define GPU_L2_FEATURES_LINE_SIZE(x) (1 << ((x) & GENMASK(7, 0))) - -#define GPU_CORE_FEATURES 0x8 - -#define GPU_TILER_FEATURES 0xC -#define GPU_MEM_FEATURES 0x10 -#define GROUPS_L2_COHERENT BIT(0) - -#define GPU_MMU_FEATURES 0x14 -#define GPU_MMU_FEATURES_VA_BITS(x) ((x) & GENMASK(7, 0)) -#define GPU_MMU_FEATURES_PA_BITS(x) (((x) >> 8) & GENMASK(7, 0)) -#define GPU_AS_PRESENT 0x18 -#define GPU_CSF_ID 0x1C - -#define GPU_INT_RAWSTAT 0x20 -#define GPU_INT_CLEAR 0x24 -#define GPU_INT_MASK 0x28 -#define GPU_INT_STAT 0x2c -#define GPU_IRQ_FAULT BIT(0) -#define GPU_IRQ_PROTM_FAULT BIT(1) -#define GPU_IRQ_RESET_COMPLETED BIT(8) -#define GPU_IRQ_POWER_CHANGED BIT(9) -#define GPU_IRQ_POWER_CHANGED_ALL BIT(10) -#define GPU_IRQ_CLEAN_CACHES_COMPLETED BIT(17) -#define GPU_IRQ_DOORBELL_MIRROR BIT(18) -#define GPU_IRQ_MCU_STATUS_CHANGED BIT(19) -#define GPU_CMD 0x30 -#define GPU_CMD_DEF(type, payload) ((type) | ((payload) << 8)) -#define GPU_SOFT_RESET GPU_CMD_DEF(1, 1) -#define GPU_HARD_RESET GPU_CMD_DEF(1, 2) -#define CACHE_CLEAN BIT(0) -#define CACHE_INV BIT(1) -#define GPU_FLUSH_CACHES(l2, lsc, oth) \ - GPU_CMD_DEF(4, ((l2) << 0) | ((lsc) << 4) | ((oth) << 8)) - -#define GPU_STATUS 0x34 -#define GPU_STATUS_ACTIVE BIT(0) -#define GPU_STATUS_PWR_ACTIVE BIT(1) -#define GPU_STATUS_PAGE_FAULT BIT(4) -#define GPU_STATUS_PROTM_ACTIVE BIT(7) -#define GPU_STATUS_DBG_ENABLED BIT(8) - -#define GPU_FAULT_STATUS 0x3C -#define GPU_FAULT_ADDR 0x40 -#define GPU_L2_CONFIG 0x48 -#define GPU_L2_CONFIG_ASN_HASH_ENABLE BIT(24) - -#define GPU_PWR_KEY 0x50 -#define GPU_PWR_KEY_UNLOCK 0x2968A819 -#define GPU_PWR_OVERRIDE0 0x54 -#define GPU_PWR_OVERRIDE1 0x58 - -#define GPU_FEATURES 0x60 -#define GPU_FEATURES_RAY_INTERSECTION BIT(2) -#define GPU_FEATURES_RAY_TRAVERSAL BIT(5) - -#define GPU_TIMESTAMP_OFFSET 0x88 -#define GPU_CYCLE_COUNT 0x90 -#define GPU_TIMESTAMP 0x98 - -#define GPU_THREAD_MAX_THREADS 0xA0 -#define GPU_THREAD_MAX_WORKGROUP_SIZE 0xA4 -#define GPU_THREAD_MAX_BARRIER_SIZE 0xA8 -#define GPU_THREAD_FEATURES 0xAC - -#define GPU_TEXTURE_FEATURES(n) (0xB0 + ((n) * 4)) - -#define GPU_SHADER_PRESENT 0x100 -#define GPU_TILER_PRESENT 0x110 -#define GPU_L2_PRESENT 0x120 - -#define SHADER_READY 0x140 -#define TILER_READY 0x150 -#define L2_READY 0x160 - -#define SHADER_PWRON 0x180 -#define TILER_PWRON 0x190 -#define L2_PWRON 0x1A0 - -#define SHADER_PWROFF 0x1C0 -#define TILER_PWROFF 0x1D0 -#define L2_PWROFF 0x1E0 - -#define SHADER_PWRTRANS 0x200 -#define TILER_PWRTRANS 0x210 -#define L2_PWRTRANS 0x220 - -#define SHADER_PWRACTIVE 0x240 -#define TILER_PWRACTIVE 0x250 -#define L2_PWRACTIVE 0x260 - -#define GPU_REVID 0x280 - -#define GPU_ASN_HASH(n) (0x2C0 + ((n) * 4)) - -#define GPU_COHERENCY_FEATURES 0x300 -#define GPU_COHERENCY_PROT_BIT(name) BIT(GPU_COHERENCY_ ## name) - -#define GPU_COHERENCY_PROTOCOL 0x304 -#define GPU_COHERENCY_ACE_LITE 0 -#define GPU_COHERENCY_ACE 1 -#define GPU_COHERENCY_NONE 31 - -#define MCU_CONTROL 0x700 -#define MCU_CONTROL_ENABLE 1 -#define MCU_CONTROL_AUTO 2 -#define MCU_CONTROL_DISABLE 0 - -#define MCU_STATUS 0x704 -#define MCU_STATUS_DISABLED 0 -#define MCU_STATUS_ENABLED 1 -#define MCU_STATUS_HALT 2 -#define MCU_STATUS_FATAL 3 - -/* Job Control regs */ -#define JOB_INT_RAWSTAT 0x1000 -#define JOB_INT_CLEAR 0x1004 -#define JOB_INT_MASK 0x1008 -#define JOB_INT_STAT 0x100c -#define JOB_INT_GLOBAL_IF BIT(31) -#define JOB_INT_CSG_IF(x) BIT(x) - -/* MMU regs */ -#define MMU_INT_RAWSTAT 0x2000 -#define MMU_INT_CLEAR 0x2004 -#define MMU_INT_MASK 0x2008 -#define MMU_INT_STAT 0x200c - -/* AS_COMMAND register commands */ - -#define MMU_BASE 0x2400 -#define MMU_AS_SHIFT 6 -#define MMU_AS(as) (MMU_BASE + ((as) << MMU_AS_SHIFT)) - -#define AS_TRANSTAB(as) (MMU_AS(as) + 0x0) -#define AS_MEMATTR(as) (MMU_AS(as) + 0x8) -#define AS_MEMATTR_AARCH64_INNER_ALLOC_IMPL (2 << 2) -#define AS_MEMATTR_AARCH64_INNER_ALLOC_EXPL(w, r) ((3 << 2) | \ - ((w) ? BIT(0) : 0) | \ - ((r) ? BIT(1) : 0)) -#define AS_MEMATTR_AARCH64_SH_MIDGARD_INNER (0 << 4) -#define AS_MEMATTR_AARCH64_SH_CPU_INNER (1 << 4) -#define AS_MEMATTR_AARCH64_SH_CPU_INNER_SHADER_COH (2 << 4) -#define AS_MEMATTR_AARCH64_SHARED (0 << 6) -#define AS_MEMATTR_AARCH64_INNER_OUTER_NC (1 << 6) -#define AS_MEMATTR_AARCH64_INNER_OUTER_WB (2 << 6) -#define AS_MEMATTR_AARCH64_FAULT (3 << 6) -#define AS_LOCKADDR(as) (MMU_AS(as) + 0x10) -#define AS_COMMAND(as) (MMU_AS(as) + 0x18) -#define AS_COMMAND_NOP 0 -#define AS_COMMAND_UPDATE 1 -#define AS_COMMAND_LOCK 2 -#define AS_COMMAND_UNLOCK 3 -#define AS_COMMAND_FLUSH_PT 4 -#define AS_COMMAND_FLUSH_MEM 5 -#define AS_LOCK_REGION_MIN_SIZE (1ULL << 15) -#define AS_FAULTSTATUS(as) (MMU_AS(as) + 0x1C) -#define AS_FAULTSTATUS_ACCESS_TYPE_MASK (0x3 << 8) -#define AS_FAULTSTATUS_ACCESS_TYPE_ATOMIC (0x0 << 8) -#define AS_FAULTSTATUS_ACCESS_TYPE_EX (0x1 << 8) -#define AS_FAULTSTATUS_ACCESS_TYPE_READ (0x2 << 8) -#define AS_FAULTSTATUS_ACCESS_TYPE_WRITE (0x3 << 8) -#define AS_FAULTADDRESS(as) (MMU_AS(as) + 0x20) -#define AS_STATUS(as) (MMU_AS(as) + 0x28) -#define AS_STATUS_AS_ACTIVE BIT(0) -#define AS_TRANSCFG(as) (MMU_AS(as) + 0x30) -#define AS_TRANSCFG_ADRMODE_UNMAPPED (1 << 0) -#define AS_TRANSCFG_ADRMODE_IDENTITY (2 << 0) -#define AS_TRANSCFG_ADRMODE_AARCH64_4K (6 << 0) -#define AS_TRANSCFG_ADRMODE_AARCH64_64K (8 << 0) -#define AS_TRANSCFG_INA_BITS(x) ((x) << 6) -#define AS_TRANSCFG_OUTA_BITS(x) ((x) << 14) -#define AS_TRANSCFG_SL_CONCAT BIT(22) -#define AS_TRANSCFG_PTW_MEMATTR_NC (1 << 24) -#define AS_TRANSCFG_PTW_MEMATTR_WB (2 << 24) -#define AS_TRANSCFG_PTW_SH_NS (0 << 28) -#define AS_TRANSCFG_PTW_SH_OS (2 << 28) -#define AS_TRANSCFG_PTW_SH_IS (3 << 28) -#define AS_TRANSCFG_PTW_RA BIT(30) -#define AS_TRANSCFG_DISABLE_HIER_AP BIT(33) -#define AS_TRANSCFG_DISABLE_AF_FAULT BIT(34) -#define AS_TRANSCFG_WXN BIT(35) -#define AS_TRANSCFG_XREADABLE BIT(36) -#define AS_FAULTEXTRA(as) (MMU_AS(as) + 0x38) - -#define CSF_GPU_LATEST_FLUSH_ID 0x10000 - -#define CSF_DOORBELL(i) (0x80000 + ((i) * 0x10000)) -#define CSF_GLB_DOORBELL_ID 0 - -/* PWR Control registers */ - -#define PWR_CONTROL_BASE 0x800 -#define PWR_CTRL_REG(x) (PWR_CONTROL_BASE + (x)) - -#define PWR_INT_RAWSTAT PWR_CTRL_REG(0x0) -#define PWR_INT_CLEAR PWR_CTRL_REG(0x4) -#define PWR_INT_MASK PWR_CTRL_REG(0x8) -#define PWR_INT_STAT PWR_CTRL_REG(0xc) -#define PWR_IRQ_POWER_CHANGED_SINGLE BIT(0) -#define PWR_IRQ_POWER_CHANGED_ALL BIT(1) -#define PWR_IRQ_DELEGATION_CHANGED BIT(2) -#define PWR_IRQ_RESET_COMPLETED BIT(3) -#define PWR_IRQ_RETRACT_COMPLETED BIT(4) -#define PWR_IRQ_INSPECT_COMPLETED BIT(5) -#define PWR_IRQ_COMMAND_NOT_ALLOWED BIT(30) -#define PWR_IRQ_COMMAND_INVALID BIT(31) - -#define PWR_STATUS PWR_CTRL_REG(0x20) -#define PWR_STATUS_ALLOW_L2 BIT_U64(0) -#define PWR_STATUS_ALLOW_TILER BIT_U64(1) -#define PWR_STATUS_ALLOW_SHADER BIT_U64(8) -#define PWR_STATUS_ALLOW_BASE BIT_U64(14) -#define PWR_STATUS_ALLOW_STACK BIT_U64(15) -#define PWR_STATUS_DOMAIN_ALLOWED(x) BIT_U64(x) -#define PWR_STATUS_DELEGATED_L2 BIT_U64(16) -#define PWR_STATUS_DELEGATED_TILER BIT_U64(17) -#define PWR_STATUS_DELEGATED_SHADER BIT_U64(24) -#define PWR_STATUS_DELEGATED_BASE BIT_U64(30) -#define PWR_STATUS_DELEGATED_STACK BIT_U64(31) -#define PWR_STATUS_DELEGATED_SHIFT 16 -#define PWR_STATUS_DOMAIN_DELEGATED(x) BIT_U64((x) + PWR_STATUS_DELEGAT= ED_SHIFT) -#define PWR_STATUS_ALLOW_SOFT_RESET BIT_U64(33) -#define PWR_STATUS_ALLOW_FAST_RESET BIT_U64(34) -#define PWR_STATUS_POWER_PENDING BIT_U64(41) -#define PWR_STATUS_RESET_PENDING BIT_U64(42) -#define PWR_STATUS_RETRACT_PENDING BIT_U64(43) -#define PWR_STATUS_INSPECT_PENDING BIT_U64(44) - -#define PWR_COMMAND PWR_CTRL_REG(0x28) -#define PWR_COMMAND_POWER_UP 0x10 -#define PWR_COMMAND_POWER_DOWN 0x11 -#define PWR_COMMAND_DELEGATE 0x20 -#define PWR_COMMAND_RETRACT 0x21 -#define PWR_COMMAND_RESET_SOFT 0x31 -#define PWR_COMMAND_RESET_FAST 0x32 -#define PWR_COMMAND_INSPECT 0xF0 -#define PWR_COMMAND_DOMAIN_L2 0 -#define PWR_COMMAND_DOMAIN_TILER 1 -#define PWR_COMMAND_DOMAIN_SHADER 8 -#define PWR_COMMAND_DOMAIN_BASE 14 -#define PWR_COMMAND_DOMAIN_STACK 15 -#define PWR_COMMAND_SUBDOMAIN_RTU BIT(0) -#define PWR_COMMAND_DEF(cmd, domain, subdomain) \ - (((subdomain) << 16) | ((domain) << 8) | (cmd)) - -#define PWR_CMDARG PWR_CTRL_REG(0x30) - -#define PWR_L2_PRESENT PWR_CTRL_REG(0x100) -#define PWR_L2_READY PWR_CTRL_REG(0x108) -#define PWR_L2_PWRTRANS PWR_CTRL_REG(0x110) -#define PWR_L2_PWRACTIVE PWR_CTRL_REG(0x118) -#define PWR_TILER_PRESENT PWR_CTRL_REG(0x140) -#define PWR_TILER_READY PWR_CTRL_REG(0x148) -#define PWR_TILER_PWRTRANS PWR_CTRL_REG(0x150) -#define PWR_TILER_PWRACTIVE PWR_CTRL_REG(0x158) -#define PWR_SHADER_PRESENT PWR_CTRL_REG(0x200) -#define PWR_SHADER_READY PWR_CTRL_REG(0x208) -#define PWR_SHADER_PWRTRANS PWR_CTRL_REG(0x210) -#define PWR_SHADER_PWRACTIVE PWR_CTRL_REG(0x218) -#define PWR_BASE_PRESENT PWR_CTRL_REG(0x380) -#define PWR_BASE_READY PWR_CTRL_REG(0x388) -#define PWR_BASE_PWRTRANS PWR_CTRL_REG(0x390) -#define PWR_BASE_PWRACTIVE PWR_CTRL_REG(0x398) -#define PWR_STACK_PRESENT PWR_CTRL_REG(0x3c0) -#define PWR_STACK_READY PWR_CTRL_REG(0x3c8) -#define PWR_STACK_PWRTRANS PWR_CTRL_REG(0x3d0) - -#endif diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index 7c8d350da02f..70b8a22b3ed7 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -28,11 +28,12 @@ #include "panthor_devfreq.h" #include "panthor_device.h" #include "panthor_fw.h" +#include "panthor_fw_regs.h" #include "panthor_gem.h" #include "panthor_gpu.h" +#include "panthor_gpu_regs.h" #include "panthor_heap.h" #include "panthor_mmu.h" -#include "panthor_regs.h" #include "panthor_sched.h" =20 /** --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010047.outbound.protection.outlook.com [52.101.69.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61E9B3A75BD for ; Fri, 10 Apr 2026 16:47:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.47 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839684; cv=fail; b=SW3+BljV4T+M6kBRU+6l2Fm8cvDTzYBRMppUHTDop4FOVFUu54sDjT02oSk326lVxDoRGosBUXDI2O3RXso5WtrSdgMvsWam97FsPsVyrryXMxuMDf3AkiweoV2x/wDpqINFGYcPJWut1mie+GKQjd07266ROKp0hggopJA48D0= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839684; c=relaxed/simple; bh=5oOsOjd5qwdQG/y9rgdEJ09gIs6jD1o9JWI83ZUoxc0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=stG0shGP8W5l/YHHfaKb9DSgZ4UslngS2/CP0s2nq33yCKuVgmLshmt6FdXRjWi8nyEDuK6o59lnhVrvpX4YNEgATr0k5/p0o0WYuY/Ja0EirBFUo/Q2Rkxq9tXqYOod7yeDtLD/aBpsDSV96ihQVaNa+3xafs8+ERzfWbTV5SQ= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=qpSzN/kC; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=qpSzN/kC; arc=fail smtp.client-ip=52.101.69.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="qpSzN/kC"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="qpSzN/kC" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=UswsXsvsbzpiRsiEaplD+bp7yYD8gd1LoOrMJ7uk2DUeBxmlCFaxv849mXDGBagywVxa2XodizThQmwJqPleTjErErlM90/4onHQ09oAO+oet5vQdJqab2/+X+Ad4EYUla4lDFWhQNApE2FViE0JgoFQHtAZtU2aQZQH53dEGJNSLziyr29hB+JrdctGz6U54KnLHRhUve1j29qocCPdGsKoRkuaP7yqvKyix6588xD70uVJACzpAWZFQAyyFFdyJMuLUZmX7nn40HSLc7r9HRP5WtJQw4qPiErZEFoEZ9XURuviW4C8i3PY/SGZ5rZGyXu48y/CXNvlk6UmfspUdQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uYKbVN8JOcWYN1w/OaHBReUT63zAVcD2bLg65yPDNr4=; b=dHX2N7nLrIIMxOxSWtM+n8T8oSMZt/3Lr+wDF3QhuhBDicO6Wze/ym9HKtRZAsXostYvfOY/Qgk1NEwCUwvfe1pg8uC2cvdodsyyTlGBPgTmJ+gr1FujY+lsRBXvsv3tQLelSYym9ZnwRfzEVXDiJ1o5zMgP+IXRYVaJsKAeoMYE9FUSznEyK1Kt87KEI0HB/Ex+SIlwT1zINuZo8CWvZ/A+mn+1hvll+/lu/+LAAIRMevsUVy26nfxvT7EI0lACqsBhY7nrDr/d0jksKq4FGLOJhiSEsEcR+nDt97eQ/Fq0bOKmJ5U/W93blczbItOBN5BsEmUpv6UfifAzfsqhlA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uYKbVN8JOcWYN1w/OaHBReUT63zAVcD2bLg65yPDNr4=; b=qpSzN/kCsEatldSw8tGqqOU4PrAZDjJ3mqDKv7ktvvZ8lBe4kPxrssIurSGtmHxmChTiCXwkxWmzImaqRzfhr7DMuEbK1/opPQt9pK583cTA2o2hZ4FYWuYfPcyZb73mJBA+hrDw50y6PXP2AyC11XDwgFeDLoJtd3bNc0z0wSQ= Received: from DUZPR01CA0113.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bb::6) by DU5PR08MB10551.eurprd08.prod.outlook.com (2603:10a6:10:525::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.46; Fri, 10 Apr 2026 16:47:53 +0000 Received: from DU6PEPF00009527.eurprd02.prod.outlook.com (2603:10a6:10:4bb:cafe::b1) by DUZPR01CA0113.outlook.office365.com (2603:10a6:10:4bb::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.43 via Frontend Transport; Fri, 10 Apr 2026 16:47:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU6PEPF00009527.mail.protection.outlook.com (10.167.8.8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QjFWyzxj/B73BgslbbMevkKFgFxA8ctrAqBpE8NWHBNQh1RYmnkkGewnzRSjqJ0m2l9Kic2NxIqAZW5ZcLb0Bzu117DMTmujzwv7Xj55GwS/yIFSGyq5wkAJxdffitM/YKKqaS/HDWXClMTwMXMta+oqv101JbibM1aQOo5hopz2xo5aaqbJ5gNmtehnBBZGeF074hPp9VWwqb/zw9UsFKnRIcNXMI31Hy8HCXw9hvQxBNFQoEOmkn0uZH8S6LlFIFfEpqmmzDFiB9ZTj96eEmk28pAEDADioQHAZBSSwTa8fjGff4qc0t5W/hHFRneOgRe2ZZuBoyopzHiBwPQDqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uYKbVN8JOcWYN1w/OaHBReUT63zAVcD2bLg65yPDNr4=; b=uuBpqHOR1MXUJIQcaly0p61D73TWblQA8ldZ0+1QKOGxyQKe0d9OEErjDI6eGHJRTbkXBezJE5c9WHzTU6oDAC3SKsQEzu0lLJooeTzNPJ3SYf6waBXREX3xsqkJKwgUqkxbNQuDrsjQJop5U8CRKAzAynRVLuzNXepuKOIEA1AUsBnrG93FkRPGE/SCVLcQZyy7njZNHQutw6+YpLBER1DtLDxsuZq2G6vtySdLjK+6AIs0dLA/NenB0JfBqZGf8tOc7Na1jqfL2IoJq9TgVWc2WL2ouyCUW0sBEl+T8flp0bgRA9p8kFX5iA66E0M5BGPSEbS7QfFjVpuQGDQLXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uYKbVN8JOcWYN1w/OaHBReUT63zAVcD2bLg65yPDNr4=; b=qpSzN/kCsEatldSw8tGqqOU4PrAZDjJ3mqDKv7ktvvZ8lBe4kPxrssIurSGtmHxmChTiCXwkxWmzImaqRzfhr7DMuEbK1/opPQt9pK583cTA2o2hZ4FYWuYfPcyZb73mJBA+hrDw50y6PXP2AyC11XDwgFeDLoJtd3bNc0z0wSQ= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:45 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:45 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 3/8] drm/panthor: Replace cross-component register accesses with helpers Date: Fri, 10 Apr 2026 17:46:32 +0100 Message-ID: <20260410164637.549145-4-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0088.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:190::21) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|DU6PEPF00009527:EE_|DU5PR08MB10551:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d61e2a8-753a-441b-c4b0-08de9720e894 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: 0/X00Ou0dmxPjldfhXjnPUpCsWrHnXvhAK0FdaY3iOO7Wy+K9pZDt784hrCVemPxV9HGs6YOTfnB6FwS1gkgwXWmY3gdgykoVxpgd3F6So+A5+0OmLS8PnYLNO3d4pyPm3QJZNLxc00qg3DPTQ4c1p/ZEdgopTn84z1ycmRS5nklKaxx2N0Vk+qStqaC/RL0ZVD3nP/ELF0UukdcVnnY8u45r7U134Uy0ktFrobYH1/k7907N02ON7V8fbzBuwsweEvctSUi/WDGB2f91rjI0sTE+fTlskI2XBiv7PGhYt7uZcK6td5F/t3W8jerfw0AiMMnrc88tBJbylVL7yiSmEB+Tjl3VI96cdh09BC+jVzud7rKPYIblO/HhcrvRm3MlEn+B0vtsaZXg46+mFbG4ScftsgzBKa0/rr2FRPONckfJl1mDwT2HxUilQg+tR3YOYS9o9b4mhgYfepBsfAyzvDN+brLDi8uhwqgj8uXQH8F8kxO1wRu6DEsuFmpCeFGqwWKDn7Dw6BKs9tfG4rFt7+Cgy1M7OblssXtiTYzcoY2LGvV5AUw4Bdg6+y4V0scRmcIBGREgoujyU5EOoOF11zcKfxurjzwRkkKyDxwhBJY06Agfonq6Du2oTjnbQ5/yylRY4b6L5rbQhFAzUHcY6+5U65RayNG0Hkt1hp31OVqaIydT6EmmGVImQUX8PsZaaRKZOrukfAuaAMWkL090QyEBoSQOEQ4iml5d/8lQXU= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: wnhMo/m2oX8sViPR1szorW71zYfb4WYsynHtotMN78U8qSqSGxL20Z53bb8TjbaHuE8zUuLlYDpLVaX+nV12fCHPnVI+bzvCTLLhDej6RShv7OW4Si3Yita1CVO8Of5VlyJT0Od+i3yfIel03YEv4ohLEFtHr55GQKR4wAAFvBImjrLSgsIrAh7s0EChvLWAiht3dYiyb+42kdROVNCwlDfGqgiw7uXLBqedhV1aTW+ax+6yr/mivKHlT8F86JxSj8TY5k4IewiXz2zBwSxUmyHbBznIjhbnDjelVll7LtOrlj2utVpVKax+b3uFsJbMFlEi/GrgBomkvR5S2hN8Wg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU6PEPF00009527.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 93e0c867-f68b-4574-41b3-08de9720c02e X-Microsoft-Antispam: BCL:0;ARA:13230040|14060799003|376014|1800799024|82310400026|36860700016|35042699022|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: oW42rO7dKI78OA5sluwRNHqFKSBdnIkl/sEqLzEMKLVMsR6Y3ZYJN0lz4Aetn3QOtrppbj0LCYXxQ9DpZZozb8663G0pyHrBDR/TqGBOQQaiSCN6bSPUDYBn5jZMrDNsjtzm1ZbW8NAIgBo5dLY1xsDWEUYC+6J4r9LhFs38/TOtJ7pB5LaD6worN4pPNsn791TrW1sejmvvWpva9E0hU1+ycN/w2Zj7tnsethYvmIvzEHvrrww00H0ob+pgDhvsZQMfuwKzrcB01oL/R8pkWTxhNA7rpuVdeW4Bi4eLS7uawnXf6uiBUhbrUl1HXNHL9uTyKOBDLieegE9TUUQ0mo/eRXA26HKs4JEde5xL9C4uaaX3f2C/0nLoWgiNpmunTwaqs1/xGl72R0uKMZrcleQ2c/KH/V0YOq7KmH3toZw8TriX6As/3JyPfFubeoesOwZZdllccO+L67+OSdB+kePWdtDjYGcTNQnHVi27vvayAiHI+McxcJ8dw4If8Bd7KpQineW4193G8YxXHKOYGThf51YiPoJ9G9r2CjuMG24qvPjKBF5b89MSfewCQ7DB6Pp8ziacXgNDWX0sryzCA0h8+z0txSz+6CLpyKYkh+HBTgFSNZa0VpzPOTiyTXxrAEgMKqZ0CnN2dviFqXr/bQ4Ff0VcsBlR4FbGsjw90gkaACAoIFk6KDUyl6sjdE1x0KyORp2RPtFXJztoYSrTIcKWP5Ek80Qtb6n9zfIbRJfhBJ/r7b0TmuVD96RVl5dOdZI4y1euXLAGZ5p3X5kwBw== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(14060799003)(376014)(1800799024)(82310400026)(36860700016)(35042699022)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DhqdWKamfuzahYHJfROq4E+bGV+WGM+jztxhYvxzjRpJAF0fHOxuH044xjKLI+Mdln2+F9A3V0WLAkkubkcMlGc81xQnhC7bFlwuU6lg6hNyb3Z2lJ3ztavHrSOG3ohA9yKIKIxQh43BSM57OJW5cQ48vMTCrKG1oWlI4NDw8+zTwnOrt569NsvtlH6Z6zvBAswewMak0vS0n0NScEz5g/LqpXU/EyPTJylCWDEGeScZ7+HkHm0uV0bhtD8aHyTs2W/t5SsNoJjG3vojkQuH4e5C4kiANsgprABlo+1hUcgH835e6oN959+d+YMgn9lUtaCORQzGraTqIrgwVMw02bOjGdf6gTI9x6ETp9AImdCZJRhK1cDn0lrvCtSpW8jG4bTrNPGm11HaBSomRw3vraeEKO4b2WnPyHBDWJBv2prsvHEkI7LjDsuYIENcC2gz X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:52.8859 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1d61e2a8-753a-441b-c4b0-08de9720e894 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU6PEPF00009527.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU5PR08MB10551 Content-Type: text/plain; charset="utf-8" Stop reaching into other components' registers directly and route those operations through the component that owns them. Move the timestamp/coherency helpers into panthor_gpu, add a doorbell helper, and update call sites accordingly. This keeps register knowledge local to each block and avoids spreading cross-component register accesses across the driver. This is a preparatory cleanup for using per-component iomem bases. Signed-off-by: Karunika Choo Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_device.c | 27 ---------------- drivers/gpu/drm/panthor/panthor_drv.c | 7 ++--- drivers/gpu/drm/panthor/panthor_fw.c | 15 ++++++--- drivers/gpu/drm/panthor/panthor_fw.h | 1 + drivers/gpu/drm/panthor/panthor_gpu.c | 40 ++++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_gpu.h | 6 ++++ drivers/gpu/drm/panthor/panthor_pwr.c | 2 +- drivers/gpu/drm/panthor/panthor_sched.c | 2 +- 8 files changed, 62 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/pan= thor/panthor_device.c index f876b13492ae..bd417d6ae8c0 100644 --- a/drivers/gpu/drm/panthor/panthor_device.c +++ b/drivers/gpu/drm/panthor/panthor_device.c @@ -22,38 +22,11 @@ #include "panthor_fw_regs.h" #include "panthor_gem.h" #include "panthor_gpu.h" -#include "panthor_gpu_regs.h" #include "panthor_hw.h" #include "panthor_mmu.h" #include "panthor_pwr.h" #include "panthor_sched.h" =20 -static int panthor_gpu_coherency_init(struct panthor_device *ptdev) -{ - BUILD_BUG_ON(GPU_COHERENCY_NONE !=3D DRM_PANTHOR_GPU_COHERENCY_NONE); - BUILD_BUG_ON(GPU_COHERENCY_ACE_LITE !=3D DRM_PANTHOR_GPU_COHERENCY_ACE_LI= TE); - BUILD_BUG_ON(GPU_COHERENCY_ACE !=3D DRM_PANTHOR_GPU_COHERENCY_ACE); - - /* Start with no coherency, and update it if the device is flagged cohere= nt. */ - ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_NONE; - ptdev->coherent =3D device_get_dma_attr(ptdev->base.dev) =3D=3D DEV_DMA_C= OHERENT; - - if (!ptdev->coherent) - return 0; - - /* Check if the ACE-Lite coherency protocol is actually supported by the = GPU. - * ACE protocol has never been supported for command stream frontend GPUs. - */ - if ((gpu_read(ptdev->iomem, GPU_COHERENCY_FEATURES) & - GPU_COHERENCY_PROT_BIT(ACE_LITE))) { - ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_ACE_LITE; - return 0; - } - - drm_err(&ptdev->base, "Coherency not supported by the device"); - return -ENOTSUPP; -} - static int panthor_clk_init(struct panthor_device *ptdev) { ptdev->clks.core =3D devm_clk_get(ptdev->base.dev, NULL); diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index e63210b01e6e..8cd39e6c3f5c 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -34,7 +34,6 @@ #include "panthor_fw.h" #include "panthor_gem.h" #include "panthor_gpu.h" -#include "panthor_gpu_regs.h" #include "panthor_heap.h" #include "panthor_mmu.h" #include "panthor_sched.h" @@ -839,7 +838,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, } =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU_OFFSET) - arg->timestamp_offset =3D gpu_read64(ptdev->iomem, GPU_TIMESTAMP_OFFSET); + arg->timestamp_offset =3D panthor_gpu_get_timestap_offset(ptdev); else arg->timestamp_offset =3D 0; =20 @@ -854,7 +853,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, query_start_time =3D 0; =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU) - arg->current_timestamp =3D gpu_read64_counter(ptdev->iomem, GPU_TIMESTAM= P); + arg->current_timestamp =3D panthor_gpu_get_timestap(ptdev); else arg->current_timestamp =3D 0; =20 @@ -870,7 +869,7 @@ static int panthor_query_timestamp_info(struct panthor_= device *ptdev, } =20 if (flags & DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT) - arg->cycle_count =3D gpu_read64_counter(ptdev->iomem, GPU_CYCLE_COUNT); + arg->cycle_count =3D panthor_gpu_get_cycle_count(ptdev); else arg->cycle_count =3D 0; =20 diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor= /panthor_fw.c index 4704275b9c8f..1c13a4884201 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -1054,7 +1054,7 @@ static void panthor_fw_init_global_iface(struct panth= or_device *ptdev) GLB_CFG_POWEROFF_TIMER | GLB_CFG_PROGRESS_TIMER); =20 - gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + panthor_fw_ring_doorbell(ptdev, CSF_GLB_DOORBELL_ID); =20 /* Kick the watchdog. */ mod_delayed_work(ptdev->reset.wq, &ptdev->fw->watchdog.ping_work, @@ -1156,7 +1156,7 @@ static void panthor_fw_halt_mcu(struct panthor_device= *ptdev) else panthor_fw_update_reqs(glb_iface, req, GLB_HALT, GLB_HALT); =20 - gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + panthor_fw_ring_doorbell(ptdev, CSF_GLB_DOORBELL_ID); } =20 static bool panthor_fw_wait_mcu_halted(struct panthor_device *ptdev) @@ -1400,6 +1400,11 @@ int panthor_fw_csg_wait_acks(struct panthor_device *= ptdev, u32 csg_slot, return ret; } =20 +void panthor_fw_ring_doorbell(struct panthor_device *ptdev, u32 doorbell_i= d) +{ + gpu_write(ptdev->iomem, CSF_DOORBELL(doorbell_id), 1); +} + /** * panthor_fw_ring_csg_doorbells() - Ring command stream group doorbells. * @ptdev: Device. @@ -1413,8 +1418,8 @@ void panthor_fw_ring_csg_doorbells(struct panthor_dev= ice *ptdev, u32 csg_mask) { struct panthor_fw_global_iface *glb_iface =3D panthor_fw_get_glb_iface(pt= dev); =20 - panthor_fw_toggle_reqs(glb_iface, doorbell_req, doorbell_ack, csg_mask); - gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + panthor_fw_toggle_reqs(glb_iface, doorbell_req, doorbell_ack, csg_mask);\ + panthor_fw_ring_doorbell(ptdev, CSF_GLB_DOORBELL_ID); } =20 static void panthor_fw_ping_work(struct work_struct *work) @@ -1429,7 +1434,7 @@ static void panthor_fw_ping_work(struct work_struct *= work) return; =20 panthor_fw_toggle_reqs(glb_iface, req, ack, GLB_PING); - gpu_write(ptdev->iomem, CSF_DOORBELL(CSF_GLB_DOORBELL_ID), 1); + panthor_fw_ring_doorbell(ptdev, CSF_GLB_DOORBELL_ID); =20 ret =3D panthor_fw_glb_wait_acks(ptdev, GLB_PING, &acked, 100); if (ret) { diff --git a/drivers/gpu/drm/panthor/panthor_fw.h b/drivers/gpu/drm/panthor= /panthor_fw.h index fbdc21469ba3..a99a9b6f4825 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.h +++ b/drivers/gpu/drm/panthor/panthor_fw.h @@ -500,6 +500,7 @@ int panthor_fw_csg_wait_acks(struct panthor_device *ptd= ev, u32 csg_id, u32 req_m int panthor_fw_glb_wait_acks(struct panthor_device *ptdev, u32 req_mask, u= 32 *acked, u32 timeout_ms); =20 +void panthor_fw_ring_doorbell(struct panthor_device *ptdev, u32 doorbell_i= d); void panthor_fw_ring_csg_doorbells(struct panthor_device *ptdev, u32 csg_s= lot); =20 struct panthor_kernel_bo * diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/pantho= r/panthor_gpu.c index fecc30747acf..ef0aca2b7532 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.c +++ b/drivers/gpu/drm/panthor/panthor_gpu.c @@ -427,3 +427,43 @@ void panthor_gpu_resume(struct panthor_device *ptdev) panthor_hw_l2_power_on(ptdev); } =20 +u64 panthor_gpu_get_timestap(struct panthor_device *ptdev) +{ + return gpu_read64_counter(ptdev->iomem, GPU_TIMESTAMP); +} + +u64 panthor_gpu_get_timestap_offset(struct panthor_device *ptdev) +{ + return gpu_read64(ptdev->iomem, GPU_TIMESTAMP_OFFSET); +} + +u64 panthor_gpu_get_cycle_count(struct panthor_device *ptdev) +{ + return gpu_read64_counter(ptdev->iomem, GPU_CYCLE_COUNT); +} + +int panthor_gpu_coherency_init(struct panthor_device *ptdev) +{ + BUILD_BUG_ON(GPU_COHERENCY_NONE !=3D DRM_PANTHOR_GPU_COHERENCY_NONE); + BUILD_BUG_ON(GPU_COHERENCY_ACE_LITE !=3D DRM_PANTHOR_GPU_COHERENCY_ACE_LI= TE); + BUILD_BUG_ON(GPU_COHERENCY_ACE !=3D DRM_PANTHOR_GPU_COHERENCY_ACE); + + /* Start with no coherency, and update it if the device is flagged cohere= nt. */ + ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_NONE; + ptdev->coherent =3D device_get_dma_attr(ptdev->base.dev) =3D=3D DEV_DMA_C= OHERENT; + + if (!ptdev->coherent) + return 0; + + /* Check if the ACE-Lite coherency protocol is actually supported by the = GPU. + * ACE protocol has never been supported for command stream frontend GPUs. + */ + if ((gpu_read(ptdev->iomem, GPU_COHERENCY_FEATURES) & + GPU_COHERENCY_PROT_BIT(ACE_LITE))) { + ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_ACE_LITE; + return 0; + } + + drm_err(&ptdev->base, "Coherency not supported by the device"); + return -ENOTSUPP; +} diff --git a/drivers/gpu/drm/panthor/panthor_gpu.h b/drivers/gpu/drm/pantho= r/panthor_gpu.h index 12c263a39928..c22378e5ce48 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.h +++ b/drivers/gpu/drm/panthor/panthor_gpu.h @@ -54,4 +54,10 @@ int panthor_gpu_soft_reset(struct panthor_device *ptdev); void panthor_gpu_power_changed_off(struct panthor_device *ptdev); int panthor_gpu_power_changed_on(struct panthor_device *ptdev); =20 +u64 panthor_gpu_get_timestap(struct panthor_device *ptdev); +u64 panthor_gpu_get_timestap_offset(struct panthor_device *ptdev); +u64 panthor_gpu_get_cycle_count(struct panthor_device *ptdev); + +int panthor_gpu_coherency_init(struct panthor_device *ptdev); + #endif diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c b/drivers/gpu/drm/pantho= r/panthor_pwr.c index 306592ff2227..aafb0c5c7d23 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr.c +++ b/drivers/gpu/drm/panthor/panthor_pwr.c @@ -199,7 +199,7 @@ static int panthor_pwr_domain_wait_transition(struct pa= nthor_device *ptdev, u32 =20 static void panthor_pwr_debug_info_show(struct panthor_device *ptdev) { - drm_info(&ptdev->base, "GPU_FEATURES: 0x%016llx", gpu_read64(ptdev->io= mem, GPU_FEATURES)); + drm_info(&ptdev->base, "GPU_FEATURES: 0x%016llx", ptdev->gpu_info.gpu_= features); drm_info(&ptdev->base, "PWR_STATUS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_STATUS)); drm_info(&ptdev->base, "L2_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PRESENT)); drm_info(&ptdev->base, "L2_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PWRTRANS)); diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index 70b8a22b3ed7..60e7b4e20a13 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3373,7 +3373,7 @@ queue_run_job(struct drm_sched_job *sched_job) if (resume_tick) sched_resume_tick(ptdev); =20 - gpu_write(ptdev->iomem, CSF_DOORBELL(queue->doorbell_id), 1); + panthor_fw_ring_doorbell(ptdev, queue->doorbell_id); if (!sched->pm.has_ref && !(group->blocked_queues & BIT(job->queue_idx))) { pm_runtime_get(ptdev->base.dev); --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013037.outbound.protection.outlook.com [40.107.162.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A4E43E022B for ; Fri, 10 Apr 2026 16:48:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.37 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839687; cv=fail; b=VDDiocP7iDPJJhtqlhq0FsB8ddQEaNtPJrXjTAj0rkdnWJH90mNdjFBbS2UoxcuevDDEgsf5LAheCLrjs74Ip4fufkxXbdNLRYyvVr3scXyxAnsQmOvHp7jhCge6XUMhIDOSMct5xARJCCK6a7Ggozj8+hPuKVEydwlvufkEWZk= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839687; c=relaxed/simple; bh=GL/pLCWVX8zsqZbkpjByvGNpMybUhOTTFEC8lsJ1ikI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GzJJ8YJEAWlq7d1rNIow3Tb7Nn0UCBoPlmoaekGxXA2sBQ9VZceEBKXHZeyhzXhkBqb24p9c/ivdMrR88kwmOy+FSurqOH3IWDmetNoUCCizVrZdi75H/ESgahBinODcGmW0SnW/cAqLWhp2pNntKRm2257I9a7OVkE5BdfXoPo= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=SVn8iDZQ; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=SVn8iDZQ; arc=fail smtp.client-ip=40.107.162.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="SVn8iDZQ"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="SVn8iDZQ" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=ca9jA0qkHoTmgqai4pjdVNH1q+2wP4R00YrIZ31x+NyU1yi16r4bxHB7akBiWiXFUTrPlrGbolr4X1CSjlOSsOCbzt/+ktF4vjx4CWgbzEjoPAg6IraZ/IMIERWUELHZc7AFVPzGzfdP/p0t5j5Vkov1dzaq2BuiVb3qqXQuUkuRiWxjEHTicHKicBYGcPmrEeMvJ/wl7kKB4p7hZxq9fS/yaGqSbqdNgbtDajuNLiBmSOp/Bvd83V7/5yEBfgHMxLVdQjO/AhETnZzKapmEUuPaAgGdTr2ExZ9RdRBKuzFFYI832x1XPHmMT0ZAWDPGuwTYdm5p/ycQMU1X179vlQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=izXcV+hVjtTdiI1kDJMWBsjoe7S+60UQyoFRIDYDlLQ=; b=GJwXpd4YREAA8JscVp5dsjsrBpW1mgLCckpOubiCxIYqa6tQhv46TYYc5j50y2RqkFAdi51reEP4WIJEGdmlo0RLryRxenqdz792Po0yqtjr20MHgH8e3WqAx20dhSD3kr/zGsa+aZscwA+0nHl6xprvQAS/fuAJBKSLDzEpswyei9uesBoNVCSvMicX2km0pqDFBCJ/+w8TBsz/NIopkM7W/oJ6iFiwSbdcymgLcyASJVq/BxfIDdiChcY0eB0Ef1hA3m+rxFbTUK7k6B5HZ5kVUAFXAkMZVchpblWfp4aYVbCvRgGgvc4GQDwclRfpFA7jVaHWQA6W4LkgN2k6wA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=izXcV+hVjtTdiI1kDJMWBsjoe7S+60UQyoFRIDYDlLQ=; b=SVn8iDZQUd5UAVZrU7IARZzzzp11naMJwFIGwWZCXJBsW4F9bGsvQ9v6hFSjyjFWDkwCZMd7l6yPWI/PuEPJQ7gPtnNJC/YgcifWHrWBii9FXRDJts4rWhxyfV0aHkScVz3g6NOmL6lLPiZ9GU1NpRep/OhrbQSEb6vWyGSTTC0= Received: from CWLP123CA0252.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:19e::21) by AS2PR08MB10267.eurprd08.prod.outlook.com (2603:10a6:20b:647::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:47:55 +0000 Received: from AM3PEPF0000A790.eurprd04.prod.outlook.com (2603:10a6:400:19e:cafe::4e) by CWLP123CA0252.outlook.office365.com (2603:10a6:400:19e::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.42 via Frontend Transport; Fri, 10 Apr 2026 16:47:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM3PEPF0000A790.mail.protection.outlook.com (10.167.16.119) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sw4QzdsDneGaXAsrN+zMMcmKr54U37W0yF7Vy4INVuXWzzNtwrwEksJJ0PLNQgNl+Qv31PA7tzqwaqSNLEclOjHY2m9y+4XGGg5qPhBAexlruQL9Z0/XRIN1L3+IFAzm9GZ8/D9YXUF7CwERACejym/EDPGQXhrmWjsY6lhhAtpcnYksXdU1N7MEBBFYELyuEjrrDa4dQgRNwVf4ImG5Ansbko9O/xnTdpLhTCR1+8mANdz4Q049a5EHqKKcSndMeCKRAdO0RB81r92dHzQekIycM/c6RAES9p5UlNJZuMdP8E838TNmYqrGgNfjNRisMxr1jYP96uNSRBdjSSQOJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=izXcV+hVjtTdiI1kDJMWBsjoe7S+60UQyoFRIDYDlLQ=; b=k/yb0fypNHW/i6YU9CzRvun/LX8WZSmh+3NOBuHg33g5ZKnbaeQuZa1hfZG+UXR4nD5qwuxyCR+WRtlihiPDzX9m70ANf4TwmIKIoObxPq5GOtd0klO/t3Tc7s/aUpUXsMxlDU5bUuV/XjDOoltiQqrN3uWomKYlZSJFLTwwhWuwfdnGuE9lHHc+XIPchcfVIznT54RbDd9vHS91tAL67SVkZenM6afCC1m91WyX7d5Llhe3R5hmEdaP10HjzXzQXZqnCRhW1HrLF0wMAHxEcLeXBYs1Qo2U9C6nC3PJj6zkuiW6eylK+Iw6FmSVP8hWNLXkE7vfRJh2tdoiHs7y6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=izXcV+hVjtTdiI1kDJMWBsjoe7S+60UQyoFRIDYDlLQ=; b=SVn8iDZQUd5UAVZrU7IARZzzzp11naMJwFIGwWZCXJBsW4F9bGsvQ9v6hFSjyjFWDkwCZMd7l6yPWI/PuEPJQ7gPtnNJC/YgcifWHrWBii9FXRDJts4rWhxyfV0aHkScVz3g6NOmL6lLPiZ9GU1NpRep/OhrbQSEb6vWyGSTTC0= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:46 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:46 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 4/8] drm/panthor: Store IRQ register base iomem pointer in panthor_irq Date: Fri, 10 Apr 2026 17:46:33 +0100 Message-ID: <20260410164637.549145-5-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0090.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:190::23) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|AM3PEPF0000A790:EE_|AS2PR08MB10267:EE_ X-MS-Office365-Filtering-Correlation-Id: d5984bdb-d6b1-43f8-4f8f-08de9720ea04 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: 6KvOkH9cOpwZjsJxKbReDmPc8tExVEYujt4gBUDO47M4MFYXu2mU5siy/xFn1Xv2Dx+4lTrjdnDHJWyRIc/ttubMnR9MlGcMoRqExdASaLvHfXZ4t6vHnU+l0eqAMZGGCyb+hFz7v34iy4f8d5jRl14WV2/QxObsuFFbjxSmr+gqU6ppkFkKdmpmLtlB0yzAtaUIVAeWMzqyUrN/VCRHAMwBQFmFbZsuZ6L121tfKEbgaebL4P8ya0J48Is9WtmHmUue/uXD7MJ0x2PHq8N1jmCCVcz82I7SCn0On8G45zM8IdR8o1CCXIWqdkcgj6zKzPUlk46fsDn4DaRnbXG74gblkY9ox2LrSvfR5jOLE9mIijBgTZFx3PBo3kcdIQX4RnjXuqOXkQmKuwQSfyiYZqMgKLnbhuGQ42YrfivdmwwylsaH2OGPCia9CkXAcSQY3dff94LcYCwsQnVzNYkoyQUF+Qsdbf4sN7LYw7ZpItURNWA6yTNB5nZzgirszB3prZRAkbsSh5rfcGYEyjcVidaUqccSh1Rn7JhPbxcj7daiwQkwgZPZlj4lt8k/okloylXIypUL0RgXk8Oxx/hoT2Mm302NNLw20BxMstehtPOFcPjMldia6yyFwgJIIG4b9nA57ZpyEFjHRGj56mqw2se3OFNvpUlMvCbVN/vOBPYoibMF5hUtz9b9klMyZRm5iUiZ7uRGWsK9nWQW5MLxVhdssEC/L6IvsqznkTrQMTU= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: YV26m+znATewHzaPeBnd5uppBlPpaQr2lf4q5oOLVczlW8+Rm/d+zPAgjsk8L9ePVQfPCSSCMlA5IZzPHd7n93oehbbvmScUdIf5PK61jHw6X3fdI7I7Ioog0KOGtqFMcRxTubCykubiUFKvUuHkX7TkG/nRE1lFtCr/a71pRIC+xTL0F7Ff7OKBpPEdU22gbu9f5/UAXx656zZK9k8ZgnKeBc2wLBHXP42oc7sjTe1X7NIUFvU2VYXleIQh4uIU2yq7EtdyB/b8N4I3Gzd2ODwyXlJudHL6csyd0A5oczjLnvMMuKlNWspYOc5KQpdYpFY96NjfhbuzP4z+Lu3t6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A790.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 02703918-b701-4f41-cca5-08de9720c106 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700016|82310400026|1800799024|35042699022|14060799003|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: 8I+nsHLzqzj+LPl0jCo0B9Som6iJIUYdqX9PNVU1mEVy2xs1bTfkwZiwOnczwCnHtS6Oif8LoVYmUBseHrKHLNOV07KHMpl3RJoIgjL2op2YrzwoTNo5+U8jy/BMDBhyg2ibAE9C93WryAkOEtr69mKI4fwsZUo7is6ZcbX4b3HuHdWP7g/RmxH1/BiPcgcCXCrlVaylbVY6tAV2PcB4njj0orpuNRA/nwiCMhbvuRKtWbxC+rV4qMUIGTt9ybv2Rqk+WnaWu6cwuPwooTTUvtqqXjZD+mX7TXZGRix3tm51KQFghQTVfw9fEo9EYIsnktGYqQp05gsmxUUjENua4Gz/44iMat0gu2vKox0aNJwenyc/Tq/XmT/7wDeNjXvqrI3zI0ogBtAKaU8Opj8kl2avXQT85T0seWckzgVaRb0VFlrZGaZTR+LTnlLVc+jz9egKzgB6Qy9wTtI6mekhyzp6utFzvemmHQ5fSVH4QWWUp0mkciFiScex6ckTENZrEGdaRd4gk6A7AFrVR/t3M1JwZHakLbeIkXtfdM7sbIqLjOO9wE9E7USPIwl9VEuBx6HG3m0uuvOKhDz4E2NpBp0g+BV+c3y2BV8XoDAaCrknxrX/B5/D+D3ika8ASvlK9qdl/bRPI9kjl+z4jlzuhsfCVmAshFCnafYXQFByEZterNiIkYwqIwLzc7BySjIh7t7WnD9AL0xSrOo7Jtw9AdHlWmFxY4VZYkEizHqpyTsDDJo/2BFY29IuNs9Y6rnHQq0K61RDrfpuu3vz+9efbg== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700016)(82310400026)(1800799024)(35042699022)(14060799003)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OrDCF5/6dDzSL+ihub+PUvemPwNiX+ah0JCgtCrhF3lftm8vKJXAtp1NZ71SflenQ7hw0a+BdwlG15dE5mq1SjNn2BTlE8YwRzt8x6jHZerDjCxxJANXhZIi0VhZ0i/xmGhPyVNskzdSZXnIB+shh+oGvHKvJwCENtDpIDj6sQVZiVuX2WOOkdx1318SEKK9SUJUuee7TaRQOfgpunke7jJfGMU7NhNn7bYRNsSplGjFkG/K0EKQ/8v9ez6QGA9mVIl20cTTnRXokdiNQ5XsccdKlLButFxmqnadddJ7eUUlaofeOTa/OJnlXkztHtYMDbudsCHMAB2mJPhw2YNrHYFtGPRx1MupKBM7+ogwdMCOxhKk5qMjowL2X+6K3L35Z3ZPeCPfX+a4agAD5t2n3xZsBTG6mTpjxitsJhHa8MdOtCmupaundmeX/ROmhhjM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:55.3081 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d5984bdb-d6b1-43f8-4f8f-08de9720ea04 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF0000A790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10267 Content-Type: text/plain; charset="utf-8" Update common IRQ handling code to work from an IRQ-local iomem base instead of referencing block-specific interrupt register offsets. Store the interrupt base address iomem pointer in struct panthor_irq and switch the shared IRQ helpers to use generic INT_* offsets from that local base. This removes the need for each caller to expose absolute IRQ register addresses while keeping the common IRQ flow unchanged. No functional change intended. Signed-off-by: Karunika Choo Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_device.h | 32 ++++++++++++++-------- drivers/gpu/drm/panthor/panthor_fw.c | 4 +-- drivers/gpu/drm/panthor/panthor_fw_regs.h | 2 ++ drivers/gpu/drm/panthor/panthor_gpu.c | 5 ++-- drivers/gpu/drm/panthor/panthor_gpu_regs.h | 1 + drivers/gpu/drm/panthor/panthor_mmu.c | 5 ++-- drivers/gpu/drm/panthor/panthor_mmu_regs.h | 3 ++ drivers/gpu/drm/panthor/panthor_pwr.c | 6 ++-- 8 files changed, 38 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/pan= thor/panthor_device.h index 285bf7e4439e..35a70df4a5da 100644 --- a/drivers/gpu/drm/panthor/panthor_device.h +++ b/drivers/gpu/drm/panthor/panthor_device.h @@ -82,6 +82,9 @@ struct panthor_irq { /** @ptdev: Panthor device */ struct panthor_device *ptdev; =20 + /** @iomem: CPU mapping of IRQ base address */ + void __iomem *iomem; + /** @irq: IRQ number. */ int irq; =20 @@ -488,6 +491,11 @@ panthor_exception_is_fault(u32 exception_code) const char *panthor_exception_name(struct panthor_device *ptdev, u32 exception_code); =20 +#define INT_RAWSTAT 0x0 +#define INT_CLEAR 0x4 +#define INT_MASK 0x8 +#define INT_STAT 0xc + /** * PANTHOR_IRQ_HANDLER() - Define interrupt handlers and the interrupt * registration function. @@ -498,14 +506,13 @@ const char *panthor_exception_name(struct panthor_dev= ice *ptdev, * * void (*handler)(struct panthor_device *, u32 status); */ -#define PANTHOR_IRQ_HANDLER(__name, __reg_prefix, __handler) \ +#define PANTHOR_IRQ_HANDLER(__name, __handler) \ static irqreturn_t panthor_ ## __name ## _irq_raw_handler(int irq, void *d= ata) \ { \ struct panthor_irq *pirq =3D data; \ - struct panthor_device *ptdev =3D pirq->ptdev; \ enum panthor_irq_state old_state; \ \ - if (!gpu_read(ptdev->iomem, __reg_prefix ## _INT_STAT)) \ + if (!gpu_read(pirq->iomem, INT_STAT)) \ return IRQ_NONE; \ \ guard(spinlock_irqsave)(&pirq->mask_lock); \ @@ -515,7 +522,7 @@ static irqreturn_t panthor_ ## __name ## _irq_raw_handl= er(int irq, void *data) if (old_state !=3D PANTHOR_IRQ_STATE_ACTIVE) \ return IRQ_NONE; \ \ - gpu_write(ptdev->iomem, __reg_prefix ## _INT_MASK, 0); \ + gpu_write(pirq->iomem, INT_MASK, 0); \ return IRQ_WAKE_THREAD; \ } \ \ @@ -534,7 +541,7 @@ static irqreturn_t panthor_ ## __name ## _irq_threaded_= handler(int irq, void *da * right before the HW event kicks in. TLDR; it's all expected races we'= re \ * covered for. \ */ \ - u32 status =3D gpu_read(ptdev->iomem, __reg_prefix ## _INT_RAWSTAT) & pi= rq->mask; \ + u32 status =3D gpu_read(pirq->iomem, INT_RAWSTAT) & pirq->mask; \ \ if (!status) \ break; \ @@ -550,7 +557,7 @@ static irqreturn_t panthor_ ## __name ## _irq_threaded_= handler(int irq, void *da PANTHOR_IRQ_STATE_PROCESSING, \ PANTHOR_IRQ_STATE_ACTIVE); \ if (old_state =3D=3D PANTHOR_IRQ_STATE_PROCESSING) \ - gpu_write(ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->iomem, INT_MASK, pirq->mask); \ } \ \ return ret; \ @@ -560,7 +567,7 @@ static inline void panthor_ ## __name ## _irq_suspend(s= truct panthor_irq *pirq) { \ scoped_guard(spinlock_irqsave, &pirq->mask_lock) { \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_SUSPENDING); \ - gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, 0); \ + gpu_write(pirq->iomem, INT_MASK, 0); \ } \ synchronize_irq(pirq->irq); \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_SUSPENDED); \ @@ -571,17 +578,18 @@ static inline void panthor_ ## __name ## _irq_resume(= struct panthor_irq *pirq) guard(spinlock_irqsave)(&pirq->mask_lock); \ \ atomic_set(&pirq->state, PANTHOR_IRQ_STATE_ACTIVE); \ - gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_CLEAR, pirq->mask); \ - gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->iomem, INT_CLEAR, pirq->mask); \ + gpu_write(pirq->iomem, INT_MASK, pirq->mask); \ } \ \ static int panthor_request_ ## __name ## _irq(struct panthor_device *ptdev= , \ struct panthor_irq *pirq, \ - int irq, u32 mask) \ + int irq, u32 mask, u32 irq_baseaddr) \ { \ pirq->ptdev =3D ptdev; \ pirq->irq =3D irq; \ pirq->mask =3D mask; \ + pirq->iomem =3D ptdev->iomem + irq_baseaddr; \ spin_lock_init(&pirq->mask_lock); \ panthor_ ## __name ## _irq_resume(pirq); \ \ @@ -603,7 +611,7 @@ static inline void panthor_ ## __name ## _irq_enable_ev= ents(struct panthor_irq * * If the IRQ is suspended/suspending, the mask is restored at resume tim= e. \ */ \ if (atomic_read(&pirq->state) =3D=3D PANTHOR_IRQ_STATE_ACTIVE) \ - gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->iomem, INT_MASK, pirq->mask); \ } \ \ static inline void panthor_ ## __name ## _irq_disable_events(struct pantho= r_irq *pirq, u32 mask)\ @@ -617,7 +625,7 @@ static inline void panthor_ ## __name ## _irq_disable_e= vents(struct panthor_irq * If the IRQ is suspended/suspending, the mask is restored at resume tim= e. \ */ \ if (atomic_read(&pirq->state) =3D=3D PANTHOR_IRQ_STATE_ACTIVE) \ - gpu_write(pirq->ptdev->iomem, __reg_prefix ## _INT_MASK, pirq->mask); \ + gpu_write(pirq->iomem, INT_MASK, pirq->mask); \ } =20 extern struct workqueue_struct *panthor_cleanup_wq; diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor= /panthor_fw.c index 1c13a4884201..20747f42759f 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -1088,7 +1088,7 @@ static void panthor_job_irq_handler(struct panthor_de= vice *ptdev, u32 status) trace_gpu_job_irq(ptdev->base.dev, status, duration); } } -PANTHOR_IRQ_HANDLER(job, JOB, panthor_job_irq_handler); +PANTHOR_IRQ_HANDLER(job, panthor_job_irq_handler); =20 static int panthor_fw_start(struct panthor_device *ptdev) { @@ -1470,7 +1470,7 @@ int panthor_fw_init(struct panthor_device *ptdev) if (irq <=3D 0) return -ENODEV; =20 - ret =3D panthor_request_job_irq(ptdev, &fw->irq, irq, 0); + ret =3D panthor_request_job_irq(ptdev, &fw->irq, irq, 0, JOB_INT_BASE); if (ret) { drm_err(&ptdev->base, "failed to request job irq"); return ret; diff --git a/drivers/gpu/drm/panthor/panthor_fw_regs.h b/drivers/gpu/drm/pa= nthor/panthor_fw_regs.h index d523d41e18dd..eeb41aff249b 100644 --- a/drivers/gpu/drm/panthor/panthor_fw_regs.h +++ b/drivers/gpu/drm/panthor/panthor_fw_regs.h @@ -15,6 +15,8 @@ #define MCU_STATUS_HALT 2 #define MCU_STATUS_FATAL 3 =20 +#define JOB_INT_BASE 0x1000 + #define JOB_INT_RAWSTAT 0x1000 #define JOB_INT_CLEAR 0x1004 #define JOB_INT_MASK 0x1008 diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/pantho= r/panthor_gpu.c index ef0aca2b7532..3ddce35ed8b5 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.c +++ b/drivers/gpu/drm/panthor/panthor_gpu.c @@ -110,7 +110,7 @@ static void panthor_gpu_irq_handler(struct panthor_devi= ce *ptdev, u32 status) } spin_unlock(&ptdev->gpu->reqs_lock); } -PANTHOR_IRQ_HANDLER(gpu, GPU, panthor_gpu_irq_handler); +PANTHOR_IRQ_HANDLER(gpu, panthor_gpu_irq_handler); =20 /** * panthor_gpu_unplug() - Called when the GPU is unplugged. @@ -162,7 +162,8 @@ int panthor_gpu_init(struct panthor_device *ptdev) if (irq < 0) return irq; =20 - ret =3D panthor_request_gpu_irq(ptdev, &ptdev->gpu->irq, irq, GPU_INTERRU= PTS_MASK); + ret =3D panthor_request_gpu_irq(ptdev, &ptdev->gpu->irq, irq, + GPU_INTERRUPTS_MASK, GPU_INT_BASE); if (ret) return ret; =20 diff --git a/drivers/gpu/drm/panthor/panthor_gpu_regs.h b/drivers/gpu/drm/p= anthor/panthor_gpu_regs.h index 7303b7f5ee18..d7cf5165e987 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu_regs.h +++ b/drivers/gpu/drm/panthor/panthor_gpu_regs.h @@ -19,6 +19,7 @@ #define GPU_AS_PRESENT 0x18 #define GPU_CSF_ID 0x1C =20 +#define GPU_INT_BASE 0x20 #define GPU_INT_RAWSTAT 0x20 #define GPU_INT_CLEAR 0x24 #define GPU_INT_MASK 0x28 diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index b9f6031e24a4..b8665e447d95 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -584,7 +584,7 @@ static u32 panthor_mmu_as_fault_mask(struct panthor_dev= ice *ptdev, u32 as) =20 /* Forward declaration to call helpers within as_enable/disable */ static void panthor_mmu_irq_handler(struct panthor_device *ptdev, u32 stat= us); -PANTHOR_IRQ_HANDLER(mmu, MMU, panthor_mmu_irq_handler); +PANTHOR_IRQ_HANDLER(mmu, panthor_mmu_irq_handler); =20 static int panthor_mmu_as_enable(struct panthor_device *ptdev, u32 as_nr, u64 transtab, u64 transcfg, u64 memattr) @@ -3229,7 +3229,8 @@ int panthor_mmu_init(struct panthor_device *ptdev) return -ENODEV; =20 ret =3D panthor_request_mmu_irq(ptdev, &mmu->irq, irq, - panthor_mmu_fault_mask(ptdev, ~0)); + panthor_mmu_fault_mask(ptdev, ~0), + MMU_INT_BASE); if (ret) return ret; =20 diff --git a/drivers/gpu/drm/panthor/panthor_mmu_regs.h b/drivers/gpu/drm/p= anthor/panthor_mmu_regs.h index cc9cf603cec6..de460042651d 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu_regs.h +++ b/drivers/gpu/drm/panthor/panthor_mmu_regs.h @@ -5,6 +5,9 @@ #define __PANTHOR_MMU_REGS_H__ =20 /* MMU regs */ + +#define MMU_INT_BASE 0x2000 + #define MMU_INT_RAWSTAT 0x2000 #define MMU_INT_CLEAR 0x2004 #define MMU_INT_MASK 0x2008 diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c b/drivers/gpu/drm/pantho= r/panthor_pwr.c index aafb0c5c7d23..4f600a6688f9 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr.c +++ b/drivers/gpu/drm/panthor/panthor_pwr.c @@ -70,7 +70,7 @@ static void panthor_pwr_irq_handler(struct panthor_device= *ptdev, u32 status) } spin_unlock(&ptdev->pwr->reqs_lock); } -PANTHOR_IRQ_HANDLER(pwr, PWR, panthor_pwr_irq_handler); +PANTHOR_IRQ_HANDLER(pwr, panthor_pwr_irq_handler); =20 static void panthor_pwr_write_command(struct panthor_device *ptdev, u32 co= mmand, u64 args) { @@ -464,7 +464,9 @@ int panthor_pwr_init(struct panthor_device *ptdev) if (irq < 0) return irq; =20 - err =3D panthor_request_pwr_irq(ptdev, &pwr->irq, irq, PWR_INTERRUPTS_MAS= K); + err =3D panthor_request_pwr_irq(ptdev, &pwr->irq, irq, + PWR_INTERRUPTS_MASK, + GPU_CONTROL_BASE + PWR_CONTROL_BASE); if (err) return err; =20 --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011005.outbound.protection.outlook.com [40.107.130.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B08B3E0C52 for ; Fri, 10 Apr 2026 16:48:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.5 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839688; cv=fail; b=d2fN7JGtTQXFl0S+ddUCTVmaAdUUeHQyPk5Fy4PeRCUlMwxEmw0M99ebbuFBwOr+MkRC5XsHtQsSPQdLErlfc+2rBBhzhQy/biOFro1A30ZdsS6MQifruwS9bXGCJTszF6eKIvHJwhXfVi6AzmFKrp9Nl0mDjMajYp/anJ/CJZ4= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839688; c=relaxed/simple; bh=ejO2/peLcFAYAI1tKbJ+2j/Etu9+QeEtj/GDtk9ex+U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=MfpRV0QVdqP9HnRaqDoC6oN+bsqvJr7LvuxQXnzjgfRMGocSMuWtznyKvb+TT1m9HGcvCjOYJl9x2+txARomJPVxAdvtQgKVLtCEdUtWIzjW2TrqGiNCb8czE0qznLCMLiKv7/7T6t9mLRcnsmKoeN4fo86lP20tP1ngs1GMa+I= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=MUJe92vL; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=MUJe92vL; arc=fail smtp.client-ip=40.107.130.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="MUJe92vL"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="MUJe92vL" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=mO2kJD4QvFjWBgnYLlW4R//G4ZyySPxEpGs/5X31VRuuaxXA2yppaHBW+O26uz/l0YrD7e2I5o+O8cLfYtdHSwmSHRQ7VloVNn9xo/Er4BZk1ogGF2Ws/nhYnTfWRici0GTaacili4gze/7slq/BDRsqxJ6DblKxWdYWjMM42IJ5U2NJ/S0V07PTKRANE7DT+JyoJ5kAwLAAPoXv0ENuyUkN1Pz43nSXIYjCkbR3Asuo9v7egq/udQVUH/qsYPn+X8AMVLGX3gGNaKv0cDPlRKW4mVCvOGhvAAn2YPUKii/fTW0adgYrz9QC4F3NPs4VDx919fxeQcONZd0KwLKVBg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=umjF7Ghi4oMvidkP76WW3i36pgvl5mDPJN6sO2rpafU=; b=HofjV/Ay2nGavPmbe4H2P+qVvyx4la56XMsuck8vIEZyxN1nrqCAzAWWVAf/tWu0QH6Wm/wTjZDC5zgLwPYRCOIQZjcOrkmSbl/RR0WNipXYIR6JNt7s7R+baRqjUUJo81dv0+LrsULz+4O77ifZG12EBZb7uCdEZS+4hF0WF1ixICZdANKhH9MszHLjwPAmEoUc61HhtBEGLmPJ5KyUAGMHZZxEnsWQiq9GRnKFUwkKRvOrWe9/0JOhRGy3UQv8k1gXHgeXUzL/W0OM6yfyH+gV+2xwHOvOYNJcLnc2TdocY9RTiW52I/LPQXRR4kCTANF0KFhwqPDD2klOHnE8pA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=umjF7Ghi4oMvidkP76WW3i36pgvl5mDPJN6sO2rpafU=; b=MUJe92vLbJ6B2RfmXlg74zymg8t+ulrjvvu18dj6spSt0UQm/8aG9FUI8NDgx8DAFWZHG0vM3eFpe0voe0xFuwVFrYZAgrD2OaWrWnV2AkYfWJpZNrCpC/w5pSJsn3PBsW0pk/t7rpZgO4X/bBXZ05l3HLNeQhY33jhCUlgzKe4= Received: from CWLP265CA0519.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:18c::9) by DB9PR08MB10378.eurprd08.prod.outlook.com (2603:10a6:10:3da::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:47:56 +0000 Received: from AM2PEPF0001C714.eurprd05.prod.outlook.com (2603:10a6:400:18c:cafe::18) by CWLP265CA0519.outlook.office365.com (2603:10a6:400:18c::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.43 via Frontend Transport; Fri, 10 Apr 2026 16:47:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AM2PEPF0001C714.mail.protection.outlook.com (10.167.16.184) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ealeEYqCR0GnoSe+xG+hqHtMOIuGpH1G8xynpF2jpBNHFOS++mwM28NfCP/aZ9fJUbBFiMgGjw/L47COT0D5khuGTBSLIyPlrP972RoVEPqcTlPGKx8d/HCYBak4FRZ6OuViu77RP/+aM+JvWC2roxVYuYdWdsSvJ6MWhsq9NxGsNI6w63GhEbWVrsgPsI3TeniEJqmyJOkTvSs5tY8hFmUw/jRb8wlPIUiqYdDtL1kdyzvO/HYKdkZlJ1sEm6O4nuX5DbwdJNSHN1kBdU0b8GOhWlFjnt72FDZTmrB+3CWImz5rki58fggepeSnyZnH3O8jBNUA1gtftoqJaT0p3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=umjF7Ghi4oMvidkP76WW3i36pgvl5mDPJN6sO2rpafU=; b=DfdbJBfR7lmMi8Sd6ucxn8A2a/f9N3FjyNsF5X//Um8R7RzlAtRD/En3GRkzxRlAEaEvZCHGrzTAVfNBOk5kuqJVfXbsha8YDvUMTipx7BVApMBpUEwt1wwsEsHC4FexnHmpj3cUhw3Ey9tcBdZ1+LN+aJoLVFwZkRcbcsVKcU2qbzriq4D7jjZR/CAVLWu3GF/ZcnI2ldaK3Jamnl2DR1sLKJGfvaeqfoNURWF97OAaR0SSAZYoS4hN/1fEbjOgcm+kIha8hkDkbJm9LsqVwxeKABCyjaUqGG/i7vEWrxtGzHqQWqXCiBQ/aovI5Wrqrgx60XskMcbk97wE/IapUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=umjF7Ghi4oMvidkP76WW3i36pgvl5mDPJN6sO2rpafU=; b=MUJe92vLbJ6B2RfmXlg74zymg8t+ulrjvvu18dj6spSt0UQm/8aG9FUI8NDgx8DAFWZHG0vM3eFpe0voe0xFuwVFrYZAgrD2OaWrWnV2AkYfWJpZNrCpC/w5pSJsn3PBsW0pk/t7rpZgO4X/bBXZ05l3HLNeQhY33jhCUlgzKe4= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:52 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:48 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 5/8] drm/panthor: Use a local iomem base for GPU registers Date: Fri, 10 Apr 2026 17:46:34 +0100 Message-ID: <20260410164637.549145-6-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO6P265CA0005.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:339::13) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|AM2PEPF0001C714:EE_|DB9PR08MB10378:EE_ X-MS-Office365-Filtering-Correlation-Id: 023304c5-990c-4b8e-f62a-08de9720ea4c X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: TkHPQEyRvzgl+fvt5wEufGxdA7b26pjNI+jnVG+mmJ/v9i/JDGUKPjzVYv0sPiYMv20dCCLjhvNc4lfFov/nlbW//IBZA3YtiZ6vSgJy2YCEgF1Dh3h+Q8UO/PUdRrri/iHPBKHIE1CKN5VQOAJvTW2t4ZIyR17KF7NxI8jr1FuvhkNPE3PYRSgbCtXKfw34zW0xmw3spobJ7SjYhl1tfaIBbS4O7cd2omIGp/sJimJrd+Nh0/mYJO7z/BtRHcsaZeV5yZRHz+mRCmUdQgqt6rFfFBF7tr+O6g2uq3CqblnCfQ66wz9aCjIcbyJrsOOjW2JrrSnpdOTFixWhOZYsSMHJCu/aig4d0H6zN1hQyrW+mxi3QjTXfKz+Vx5kvFAr1dkIcS8dAiomJPPRIWzPBgy8sw5mcoDPtawFA3lr0RuCL0t2KgsoqJ+bkYRfS0rUPmzzVfeT3ho503tuMChmK+xyLSw5zTQMmMUWqzS5MoEuJ7oUiWtHoeuL8RccVqdd1ExFdDyPQ+FXiv7pdAZ02d/XPa5RwWJU5+rGDBKG2aQVvtX9mWFZ8bbovYV/WVq9oq4YPEU94tU3T66PPpQqch4u/9GeGdhtX1IadG9uJSBJDV0WdZakVSA0CquHAVdloabj2ZpmcopGYzsbadEBP5KT3Nj4OJAlDcG5k/2BwRacaSYTblkS+1zm2z+0bTo8mnW65+h8+W8963oR31o/0JdtuXmZmHgM6FUhORx1/Tw= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: lzhTxWbVjjRWXdd0SVrd6MOTm2T420Ayj8Kk2a2o1ic1VOw62MDhz7fY99scNQ0+rgE4idYbX5Z86Mi1Ib8FWL/KQuzKUOEVkDEXzkX4w9nRinNXFoo8GBI0BovBxj5VHU+O5HBM0SFW0lpZrbo7KF0/QNL088VKqh8TDlCFNTpuKK9JW6S7dNNqRuQSb/7mF4/EX7YpflNLSUFVF9lTdgB841MGhC0p6dg1uf+JYWUBtD3lbrrLsS3vy8RYlyuTpVI2WHVkkkutO4UMZ20Py4q+4rorKm2JIGhXIPZoo+bbkrBwdJ3/tGJfZ9eYLhap8/D4PeVYQXYa2ae0oOAl2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM2PEPF0001C714.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 0f698002-3318-4e37-4f9a-08de9720c1dd X-Microsoft-Antispam: BCL:0;ARA:13230040|14060799003|1800799024|35042699022|82310400026|376014|36860700016|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: vvDKViLD5JyAJVOMdEMbrMpk0IjeKAgpAC5es6RWDTMmeGPsNGYUTIenPclRVPmaU8ra5pxKSkAFydxgJdUAkeGlaX87QThztJUOT4TlOzIuZdCd+GrOt6YjrPbuDiPR2s9efWYwOPiWrXIee+bajzm/qqvFbx+/Mg4OP6GmGc70c5pcCxBVo2JM/8qvz8CcHIR14IB42GgAXaxJocOYpeuW71JI4STB6qfFxOOF+eZuV731Jd8rp1eAvAVgBSdZ70Im6F3Zr5FzGDTtJE3L6kyXBoPqNRe0Nq8RSkJcv0vu3X99sDMugpOzMbJAiA0/aD36JaovJk9aqECNkAcI6bTYxiPsN+uzeikxZ/jJnZlS11tWQQKt3pzW37eUAt+ACB5Bl1bJDhlQW7XznLVQwGada4Vwl1qtOgvNyOMzvN+xs1X+YRKrZvFi8hWHlH5SuYAF4r7IgRfn7ZKeAawWr3cSVaOhH2SX8jrIGPG5D4gxzV3IJ4KfVk2kt/PjKs1lCCusClSwZuATYsCdh64h1L1FU0Q1wzVhgX9cPdPRRT+i8jyzsyT+w3IVtnr3C38kgBuIbsWm+hjms+QqGH2Qxumx9NCXIlnq0W6yn7BFWItrX6IWrRRMhP0OJEB4RipIt5IGGrSlOSSFjHHxNPuVgDfnZneeybB5n50Vn2OkdxrfGErj4j0ggfbFvjrxAyYkslKvIjQvDzhT0l2/e5sicrgXa5g7LwtaEGSj/CnsvlUhUEq5VtKeWhRR4VSrWwyH74QEMqibFZhqIjNaMz3lqg== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(14060799003)(1800799024)(35042699022)(82310400026)(376014)(36860700016)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: DB3w54y1ZQ0b+rsx/tdXCl7nUQHjESTYjCmmdkqca2Zw8nnLcOYFBC+Tl2R0GHIhMlmgi7BTBBitLVI25Xk51gXZF5MuaGMTit3ouUg6s2RMKsOqgAp6YJUoVKrU+I3KJB6VAyXEjOoUuyWvje1u132LVPjYTKYxMMQUU7FWaFpIB8gWHjESgFs9GhlH+LS75cJAVnnAsHozvGsENCiClaasf6r/9uBFiy8t+xOke6Dx3/+6R+1spbvmyUwVphyyJ7Jhz65WF9PlpuXR25Qc4H0pKuU1DS/ds/1hoKc8V93xx6b+W4lGrX8uDu/mgqNFbOtz6Gb8VEsZYriBOYqgY6CEWn6fCFDXky0vmLniVqELYKNAQ8Fu36QAIbpfiESsfN2lekP7zMXW5H4ZphpcCHo71ZkIa99r3eU5s1uzmw8D4cjzh855ceM2AN/Bwoko X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:55.7820 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 023304c5-990c-4b8e-f62a-08de9720ea4c X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C714.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB10378 Content-Type: text/plain; charset="utf-8" Add a GPU_CONTROL-local iomem pointer to struct panthor_gpu and use it for GPU register accesses. This limits GPU register accesses to the GPU block instead of using the device-wide MMIO mapping directly. Interrupt register accesses continue to use the IRQ-local base provided by the common IRQ helpers. This is a refactoring only and does not change behaviour. Signed-off-by: Karunika Choo Acked-by: Boris Brezillon Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_gpu.c | 61 +++++++++++++--------- drivers/gpu/drm/panthor/panthor_gpu_regs.h | 6 +-- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/pantho= r/panthor_gpu.c index 3ddce35ed8b5..abd94de5d15d 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu.c +++ b/drivers/gpu/drm/panthor/panthor_gpu.c @@ -29,6 +29,9 @@ * struct panthor_gpu - GPU block management data. */ struct panthor_gpu { + /** @iomem: CPU mapping of GPU_CONTROL iomem region */ + void __iomem *iomem; + /** @irq: GPU irq. */ struct panthor_irq irq; =20 @@ -56,12 +59,13 @@ struct panthor_gpu { =20 static void panthor_gpu_coherency_set(struct panthor_device *ptdev) { - gpu_write(ptdev->iomem, GPU_COHERENCY_PROTOCOL, + gpu_write(ptdev->gpu->iomem, GPU_COHERENCY_PROTOCOL, ptdev->gpu_info.selected_coherency); } =20 static void panthor_gpu_l2_config_set(struct panthor_device *ptdev) { + struct panthor_gpu *gpu =3D ptdev->gpu; const struct panthor_soc_data *data =3D ptdev->soc_data; u32 l2_config; u32 i; @@ -75,26 +79,28 @@ static void panthor_gpu_l2_config_set(struct panthor_de= vice *ptdev) } =20 for (i =3D 0; i < ARRAY_SIZE(data->asn_hash); i++) - gpu_write(ptdev->iomem, GPU_ASN_HASH(i), data->asn_hash[i]); + gpu_write(gpu->iomem, GPU_ASN_HASH(i), data->asn_hash[i]); =20 - l2_config =3D gpu_read(ptdev->iomem, GPU_L2_CONFIG); + l2_config =3D gpu_read(gpu->iomem, GPU_L2_CONFIG); l2_config |=3D GPU_L2_CONFIG_ASN_HASH_ENABLE; - gpu_write(ptdev->iomem, GPU_L2_CONFIG, l2_config); + gpu_write(gpu->iomem, GPU_L2_CONFIG, l2_config); } =20 static void panthor_gpu_irq_handler(struct panthor_device *ptdev, u32 stat= us) { - gpu_write(ptdev->iomem, GPU_INT_CLEAR, status); + struct panthor_gpu *gpu =3D ptdev->gpu; + + gpu_write(gpu->irq.iomem, INT_CLEAR, status); =20 if (tracepoint_enabled(gpu_power_status) && (status & GPU_POWER_INTERRUPT= S_MASK)) trace_gpu_power_status(ptdev->base.dev, - gpu_read64(ptdev->iomem, SHADER_READY), - gpu_read64(ptdev->iomem, TILER_READY), - gpu_read64(ptdev->iomem, L2_READY)); + gpu_read64(gpu->iomem, SHADER_READY), + gpu_read64(gpu->iomem, TILER_READY), + gpu_read64(gpu->iomem, L2_READY)); =20 if (status & GPU_IRQ_FAULT) { - u32 fault_status =3D gpu_read(ptdev->iomem, GPU_FAULT_STATUS); - u64 address =3D gpu_read64(ptdev->iomem, GPU_FAULT_ADDR); + u32 fault_status =3D gpu_read(gpu->iomem, GPU_FAULT_STATUS); + u64 address =3D gpu_read64(gpu->iomem, GPU_FAULT_ADDR); =20 drm_warn(&ptdev->base, "GPU Fault 0x%08x (%s) at 0x%016llx\n", fault_status, panthor_exception_name(ptdev, fault_status & 0xFF), @@ -147,6 +153,7 @@ int panthor_gpu_init(struct panthor_device *ptdev) if (!gpu) return -ENOMEM; =20 + gpu->iomem =3D ptdev->iomem + GPU_CONTROL_BASE; spin_lock_init(&gpu->reqs_lock); init_waitqueue_head(&gpu->reqs_acked); mutex_init(&gpu->cache_flush_lock); @@ -202,10 +209,11 @@ int panthor_gpu_block_power_off(struct panthor_device= *ptdev, u32 pwroff_reg, u32 pwrtrans_reg, u64 mask, u32 timeout_us) { + struct panthor_gpu *gpu =3D ptdev->gpu; u32 val; int ret; =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(gpu->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -214,9 +222,9 @@ int panthor_gpu_block_power_off(struct panthor_device *= ptdev, return ret; } =20 - gpu_write64(ptdev->iomem, pwroff_reg, mask); + gpu_write64(gpu->iomem, pwroff_reg, mask); =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(gpu->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -245,10 +253,11 @@ int panthor_gpu_block_power_on(struct panthor_device = *ptdev, u32 pwron_reg, u32 pwrtrans_reg, u32 rdy_reg, u64 mask, u32 timeout_us) { + struct panthor_gpu *gpu =3D ptdev->gpu; u32 val; int ret; =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, pwrtrans_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(gpu->iomem, pwrtrans_reg, val, !(mask & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -257,9 +266,9 @@ int panthor_gpu_block_power_on(struct panthor_device *p= tdev, return ret; } =20 - gpu_write64(ptdev->iomem, pwron_reg, mask); + gpu_write64(gpu->iomem, pwron_reg, mask); =20 - ret =3D gpu_read64_relaxed_poll_timeout(ptdev->iomem, rdy_reg, val, + ret =3D gpu_read64_relaxed_poll_timeout(gpu->iomem, rdy_reg, val, (mask & val) =3D=3D val, 100, timeout_us); if (ret) { @@ -318,6 +327,7 @@ int panthor_gpu_l2_power_on(struct panthor_device *ptde= v) int panthor_gpu_flush_caches(struct panthor_device *ptdev, u32 l2, u32 lsc, u32 other) { + struct panthor_gpu *gpu =3D ptdev->gpu; unsigned long flags; int ret =3D 0; =20 @@ -327,7 +337,7 @@ int panthor_gpu_flush_caches(struct panthor_device *ptd= ev, spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if (!(ptdev->gpu->pending_reqs & GPU_IRQ_CLEAN_CACHES_COMPLETED)) { ptdev->gpu->pending_reqs |=3D GPU_IRQ_CLEAN_CACHES_COMPLETED; - gpu_write(ptdev->iomem, GPU_CMD, GPU_FLUSH_CACHES(l2, lsc, other)); + gpu_write(gpu->iomem, GPU_CMD, GPU_FLUSH_CACHES(l2, lsc, other)); } else { ret =3D -EIO; } @@ -341,7 +351,7 @@ int panthor_gpu_flush_caches(struct panthor_device *ptd= ev, msecs_to_jiffies(100))) { spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if ((ptdev->gpu->pending_reqs & GPU_IRQ_CLEAN_CACHES_COMPLETED) !=3D 0 && - !(gpu_read(ptdev->iomem, GPU_INT_RAWSTAT) & GPU_IRQ_CLEAN_CACHES_COM= PLETED)) + !(gpu_read(gpu->irq.iomem, INT_RAWSTAT) & GPU_IRQ_CLEAN_CACHES_COMPL= ETED)) ret =3D -ETIMEDOUT; else ptdev->gpu->pending_reqs &=3D ~GPU_IRQ_CLEAN_CACHES_COMPLETED; @@ -364,6 +374,7 @@ int panthor_gpu_flush_caches(struct panthor_device *ptd= ev, */ int panthor_gpu_soft_reset(struct panthor_device *ptdev) { + struct panthor_gpu *gpu =3D ptdev->gpu; bool timedout =3D false; unsigned long flags; =20 @@ -371,8 +382,8 @@ int panthor_gpu_soft_reset(struct panthor_device *ptdev) if (!drm_WARN_ON(&ptdev->base, ptdev->gpu->pending_reqs & GPU_IRQ_RESET_COMPLETED)) { ptdev->gpu->pending_reqs |=3D GPU_IRQ_RESET_COMPLETED; - gpu_write(ptdev->iomem, GPU_INT_CLEAR, GPU_IRQ_RESET_COMPLETED); - gpu_write(ptdev->iomem, GPU_CMD, GPU_SOFT_RESET); + gpu_write(gpu->irq.iomem, INT_CLEAR, GPU_IRQ_RESET_COMPLETED); + gpu_write(gpu->iomem, GPU_CMD, GPU_SOFT_RESET); } spin_unlock_irqrestore(&ptdev->gpu->reqs_lock, flags); =20 @@ -381,7 +392,7 @@ int panthor_gpu_soft_reset(struct panthor_device *ptdev) msecs_to_jiffies(100))) { spin_lock_irqsave(&ptdev->gpu->reqs_lock, flags); if ((ptdev->gpu->pending_reqs & GPU_IRQ_RESET_COMPLETED) !=3D 0 && - !(gpu_read(ptdev->iomem, GPU_INT_RAWSTAT) & GPU_IRQ_RESET_COMPLETED)) + !(gpu_read(gpu->irq.iomem, INT_RAWSTAT) & GPU_IRQ_RESET_COMPLETED)) timedout =3D true; else ptdev->gpu->pending_reqs &=3D ~GPU_IRQ_RESET_COMPLETED; @@ -430,17 +441,17 @@ void panthor_gpu_resume(struct panthor_device *ptdev) =20 u64 panthor_gpu_get_timestap(struct panthor_device *ptdev) { - return gpu_read64_counter(ptdev->iomem, GPU_TIMESTAMP); + return gpu_read64_counter(ptdev->gpu->iomem, GPU_TIMESTAMP); } =20 u64 panthor_gpu_get_timestap_offset(struct panthor_device *ptdev) { - return gpu_read64(ptdev->iomem, GPU_TIMESTAMP_OFFSET); + return gpu_read64(ptdev->gpu->iomem, GPU_TIMESTAMP_OFFSET); } =20 u64 panthor_gpu_get_cycle_count(struct panthor_device *ptdev) { - return gpu_read64_counter(ptdev->iomem, GPU_CYCLE_COUNT); + return gpu_read64_counter(ptdev->gpu->iomem, GPU_CYCLE_COUNT); } =20 int panthor_gpu_coherency_init(struct panthor_device *ptdev) @@ -459,7 +470,7 @@ int panthor_gpu_coherency_init(struct panthor_device *p= tdev) /* Check if the ACE-Lite coherency protocol is actually supported by the = GPU. * ACE protocol has never been supported for command stream frontend GPUs. */ - if ((gpu_read(ptdev->iomem, GPU_COHERENCY_FEATURES) & + if ((gpu_read(ptdev->gpu->iomem, GPU_COHERENCY_FEATURES) & GPU_COHERENCY_PROT_BIT(ACE_LITE))) { ptdev->gpu_info.selected_coherency =3D GPU_COHERENCY_ACE_LITE; return 0; diff --git a/drivers/gpu/drm/panthor/panthor_gpu_regs.h b/drivers/gpu/drm/p= anthor/panthor_gpu_regs.h index d7cf5165e987..f64e7661f765 100644 --- a/drivers/gpu/drm/panthor/panthor_gpu_regs.h +++ b/drivers/gpu/drm/panthor/panthor_gpu_regs.h @@ -4,6 +4,8 @@ #ifndef __PANTHOR_GPU_REGS_H__ #define __PANTHOR_GPU_REGS_H__ =20 +#define GPU_CONTROL_BASE 0x0 + #define GPU_L2_FEATURES 0x4 #define GPU_L2_FEATURES_LINE_SIZE(x) (1 << ((x) & GENMASK(7, 0))) =20 @@ -20,10 +22,6 @@ #define GPU_CSF_ID 0x1C =20 #define GPU_INT_BASE 0x20 -#define GPU_INT_RAWSTAT 0x20 -#define GPU_INT_CLEAR 0x24 -#define GPU_INT_MASK 0x28 -#define GPU_INT_STAT 0x2c #define GPU_IRQ_FAULT BIT(0) #define GPU_IRQ_PROTM_FAULT BIT(1) #define GPU_IRQ_RESET_COMPLETED BIT(8) --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010056.outbound.protection.outlook.com [52.101.69.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 468323DA5CF for ; Fri, 10 Apr 2026 16:48:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.56 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839689; cv=fail; b=YW593O0BZZPabEXElE997cRaRODJnDq+7qO1SagUqt1r9tQQGQJm0VsYWk4WNId8w7VMwh9xNnPgqXJLoX46XbLXYOBv+70J8024lme8vAJUQKTMe/O3kmMC3dQOWYK9cQRM/Wq6IlvbR+ccThwbP9z3z0GSZzYwJMDynx6+BLo= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839689; c=relaxed/simple; bh=WRDY93qyu9EoLeYyzl0U6VmfUYU6MJmbr1fr/NjVhOM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=j1u2MtMiYimoy3AVcqpGIuKWUm42XfAom0kQR01UqRW48NKOBnp0QWrFrSukylkvES2hzTcHgOfFWLjgm+iYglkyR9+SjJdeqOjNCXPR9xK5eTmeXUVT6T3T1AC3PmYBCQgNmnpIRVqkPEU9imkn1O6e/6mtkhDBpuSZyjY3ts0= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=jrPtdPq/; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=jrPtdPq/; arc=fail smtp.client-ip=52.101.69.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="jrPtdPq/"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="jrPtdPq/" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=zKJi7nLplsLf2mCpzEN5DImMFMx/aRyLPNiNZn7fOUW58U0DcY/Ut3Nm54Phvwg6i1FUx4Z1PTg9oEEoaZtgzIFF3K5POIdf9BNiSwVZe5sBfIaL0V8hu1LcUA9al155kEsfgbCmuOPPqIJ2Qhn23UgByH1K+9nqqvdBBgUAXt0rPxmENW5FSnWzELoTgWToBBOY49s9190VEyrBuKDpVBNbOssikCex+XWiCVLy01R6U6vjNgBCl0kMNskp2k8bOawfY9HVTZaG966Mwlwm9FWR0WRAVs66cl4V4PAOddjCwQB0Q9nr+p1H5N+ZjdliquJs4gTZOPmd7uMO2ZQd5g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rMOajQJNpIhyiNcCOQQTixpdmESoccBNs5P4xXQ3lFM=; b=hy9FJVMPxF2TNL1ZxHodMkoQoBKJ3FYowdbYzl6+QHbDMA06V+T0wDFV4TL+fSV1/115fTGzX4JhWzYtbdbTPUbngxQQbpRZbqwuop1LypLcebWIFY+HsKjHshEuf8MtlF6NdqrESKAaaxCcs5PH80oU80ecOi5knfMvUkKz95xSOkjgth9BIDbA7ild4ASenwFost+Zb1AvU268pN0vZUJ6GatGzsHIoHfSOSYZBeYL+ent3lBrzjcBRuLO+Id91Q4d66Ssczr7XYlo9p6pvL4avKNtX+rwMfuhC1mQWP9LiyR//Nm6znCO+8lrg3TUZmQI2yMia/nb5Qa+xTijvg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rMOajQJNpIhyiNcCOQQTixpdmESoccBNs5P4xXQ3lFM=; b=jrPtdPq/O+fphV9ApzgF7985V23w5EH1U3M+sYSrCmczu5qpPymZ/uA6MfMLq7CRw8dPJ01JGP+C8JhB9eKdqNo13YsVEQe6JhyjjMP7364ijF/OTHbuulylMRneGlBscPMATnx1qGWqU97NUMEQLOIYFFn2p9gJJ42yAB1q6EU= Received: from DUZPR01CA0058.eurprd01.prod.exchangelabs.com (2603:10a6:10:469::12) by AMDPR08MB11674.eurprd08.prod.outlook.com (2603:10a6:20b:73a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:47:57 +0000 Received: from DU2PEPF00028D07.eurprd03.prod.outlook.com (2603:10a6:10:469:cafe::d6) by DUZPR01CA0058.outlook.office365.com (2603:10a6:10:469::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.43 via Frontend Transport; Fri, 10 Apr 2026 16:47:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU2PEPF00028D07.mail.protection.outlook.com (10.167.242.167) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9745.21 via Frontend Transport; Fri, 10 Apr 2026 16:47:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k9HRhBZSpEqNcDm8b0PiqLdYXeXqrQGpLGWP1JU4EQuO9TYwXA1rBdQ33OPGYRDYLEcFN9h4JcG98HpyFlmI4G5Nb14vJLWCR+wAwmjVxtHz+0MXxXLWis1VPYZmfueSuN4+h04rFV69011HZF9TTFII7WuTY6bgWrhLo+pTrfqxSULNuJcjLepUYhA2KtssQZuK6kgpQqwB7NpQkfILzfhyY7o50mAM3ga6Qmtl2kewKxi6CrIOzgE4/lTgevMKnUg90N0W/ci8A6kxJ6O+6gQCl/W1G64bweTpBdiBmzZOjTkJk53Pa1WULxdu75oeKHRlsNGI2e1f8NVAVxEQ8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rMOajQJNpIhyiNcCOQQTixpdmESoccBNs5P4xXQ3lFM=; b=k2Ft4Nv+8IkjXtxpzVtSjyH2qHKmgnxSoYaqtWjg0gG9EiXx9Io25pVosiYWNuBGJUACLcXz6DeaQYDqEwVC9dt6OF2lO+0Y5ruUe3CsNuga0EH2BwUPZh10NA4ee0rJUFGbpRYnUFjRniiHg4OuJ9Uc5L3mCk9d7j33REp8lehnoUD9V/HFOM4T+bnRndNtjU84EjN7Xy66/jkgXmnDhMPAKLYKa1jIAb5O5lELJVPL9Ug3YTjWz4AfXGE6Y5PdIn02KCRQbwp7HajIdwuHO34jcIxr3YGi1uIM+xHsWMT+B3lcMV2h7ud6u0zByUHZE1I1D466/r94KUSG3LRqGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rMOajQJNpIhyiNcCOQQTixpdmESoccBNs5P4xXQ3lFM=; b=jrPtdPq/O+fphV9ApzgF7985V23w5EH1U3M+sYSrCmczu5qpPymZ/uA6MfMLq7CRw8dPJ01JGP+C8JhB9eKdqNo13YsVEQe6JhyjjMP7364ijF/OTHbuulylMRneGlBscPMATnx1qGWqU97NUMEQLOIYFFn2p9gJJ42yAB1q6EU= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:53 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:53 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 6/8] drm/panthor: Use a local iomem base for PWR registers Date: Fri, 10 Apr 2026 17:46:35 +0100 Message-ID: <20260410164637.549145-7-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0582.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:276::17) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|DU2PEPF00028D07:EE_|AMDPR08MB11674:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a696ac4-8b61-479b-7829-08de9720ea9d X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: gSVfTYRcauEmek7r6AsgLPIz3CgkEtBiHtKDDaJu5pLq/SxUxP50IVYEZt8MCop6PMdSrfT3iYPFf4ggHF6+1E/2P0N1V+2AbSBy+URhpOpmALJcoWowmSyQQRhmGxBMXkyBVxOr0cWITd39A/WFZP5DkV8gCe1na56HBxQUyyhzCpvkA7G2DKeUl3ZQ4Dc9pBXrI4MC/qngYORNSI6x8WwMEP9FDzXqIig/k9rWc6hgAkV/jeNJ2GdKA56cUiGe9P0SLkUzqkNnCpMxtakRuevShvghHByYZwHPtkuJav6iStQ3Pk50XZB01xqxB30o7fg94nwVZJD6VJGl1mzizMxvs1gyjG57ZUnWrUXb0+rdhyT6F6+vLqtzT0wTAzeWBK3tFlpDgopF0yQUzlhsznqOFEC53HFGe7Gocl3dJ417xGqP4fbQES695ZHYYS3MFNgyCQyGhnxN5OsACqXsaj5OxsBJMA4OgxH7+BBO9Z6Z8DxyOwomGMO+fVxpEpB4Y4THaQEjNV+ZyUPzC+QP87tTR6BQcQlDluxmN67MBmq5sSTcGQQpWB4Mb19uW1/rvgUa4Gz3fBeeHgC36N0sg7mkdR2u2v0W1uas1XvGjlIcpXS7hT14mFvk84u24vPKQ8wn9UnGK9j6VoNdJlfq/sJlrd6zd+o1S93jaRrxQ7rZrnx9dZIJWU6HZYcrZd1k+TJ7CtSqpu7EnzvVhn4jcqNuvqa7LC4+44XvV1JxFqg= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: dXkUGEsu/sgLAUW4OVSmWKvmoTQlDzxoR+6EBhUszYFgTWgoJnEU8Kb39NlVsPkPLOgg+zj5OBc4KAR1mZ0wG5aV3XuLv1hegajSeCpct1ojh0GEq/lqJ7y9jlElyposMzUhXk4Sn8IGMynWWDkejY3tBaPMueNAtPmS/w82u4MxfHbw5oZRyxBgPVmOdtpHqshJIjXLPBiDXdyOiZq7keQLh2OnpGj6/hNbzZxMqORNUJPorZmgg7Nk3ZTmt/arN+mLH59Wsx62vI4OBJ5jgk3gvz6jY/GKt7HX74IKkfTyJH4uHFsncPsTv953Ugy0B9V9bCm/zPZRJkjzYpeqMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028D07.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: cba7dedf-6b49-4aa3-2a95-08de9720c2a1 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|14060799003|376014|82310400026|36860700016|35042699022|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: 5oIhulKg6BV9UzosMwBFyTRrQOTGnhSDikDP0BxA97T7WWxTyxm5xVVE661RtUjapolANOgUKx7CEywk3YRrG9Tl5JOYSiQkt2g6q1ZJUPcMLTC6hV55Q3GZG+ovFDtKAygzA84jPNJ4PTas6+yLVMczS8FaYEi4MlYGjaqD76xJ38GlL0kHhiVgdgNc35yovJywKMhbWCEZgnQzU9qZjhSiqB7anjqD72ol3W26d7vVFg+RnTOxwIQVInbUgAAm2dgdUzkiwll5wOsswOL2ig6ivaWPB85R1z6ImOyyk3N0kRGqg8ZS6FGsbvvRqvzKtG0+mg72j8Ua7oQTJSLg89nHHoo81pYjvJT1r0qGPYfMYCXXGFJZBkZp3Rr2AKp8RSpBbkgmVi95b+n0gb9brtDtIW9i06Z6ZyBrEiYa75Dbm7cMXFXtFDTo/3VKLHYYRcqUPA91QaV1T0zru2qZqmmxrCJZDG/8c+wXagtMHKJlmXUVSYzcOiKdngvf651n+c3Ad63PjoaYtosFX9qCr2cqpDy3VV2dEt0TVZ+wG+StsuN+mCLdtmLhggvQxs+RodCJW8k5LYaBLyZNWr1MjIV+behVPVCQIBk1YACsmFi0Vzwwmi/HxIlgPyA9IYBnfs4hJUM3E5vk4ElhjNN00pI9SXUtz0irXlm7C2icLVPSOnjXvWAa9Cle7vgLOVKP+iN8IbQQabSGdhWGt/MuD6mh7/lpHYOG9IZn1M3boG+SYrNh1HxHdbD0JsfvOEFw6FcTWru7E3mBSjJ9kYps1A== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(14060799003)(376014)(82310400026)(36860700016)(35042699022)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LYLi4/g/ceE5cyzVGxz1pOCA6hq/fQPq8mJIJhOqU5VcvCSpwQVe5OUPyIQxFK35Bbx6ewbnJ3fBcCQXOMr+Xq8BUN1JWPS6FHe6PzFEbjPPEZVRZ2nbaq3pw6cLFuT58T0Uqpj4UtwFZLy4e8/rh/BBuvVluA8EBGACFXHI1LkDrdNq+scwdAFFbLSEM3l9qOLVnlmv5rllkGj2lYgl38T9jbHG4X6XV4Abx9mQkGymv1IG12q7edrXRuCMHeUitGl2kKGa9YaKZYIA/QYsWKNCkealRZ6mtFgFz2i6reRBwaZYPGGOCgotSS8p/BIzDnoUfSbT/lytbDT/ktUuUm4A+FXyT4UbQZ4avJfzcAbMgmGvYUpxDsirF+yyPFuDwVwHzmTF2u7Vuca+m3pONUUqQuWgyh7T4i1Wgq331DSBNxaMXEwYAKmiwzm5rZsJ X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:56.2991 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a696ac4-8b61-479b-7829-08de9720ea9d X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D07.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMDPR08MB11674 Content-Type: text/plain; charset="utf-8" Add a PWR_CONTROL-local iomem pointer to struct panthor_pwr and switch power controller register accesses to that base. Keep interrupt register accesses on the IRQ-local iomem base and update the register definitions so the PWR block can be addressed relative to its local base. This removes the remaining dependence on the global device MMIO mapping for PWR register accesses. No functional change intended. Signed-off-by: Karunika Choo Acked-by: Boris Brezillon Reviewed-by: Liviu Dudau --- drivers/gpu/drm/panthor/panthor_pwr.c | 79 ++++++++++++++-------- drivers/gpu/drm/panthor/panthor_pwr_regs.h | 50 +++++++------- 2 files changed, 74 insertions(+), 55 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_pwr.c b/drivers/gpu/drm/pantho= r/panthor_pwr.c index 4f600a6688f9..f7fdbd15abf9 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr.c +++ b/drivers/gpu/drm/panthor/panthor_pwr.c @@ -40,6 +40,9 @@ * struct panthor_pwr - PWR_CONTROL block management data. */ struct panthor_pwr { + /** @iomem: CPU mapping of PWR_CONTROL iomem region */ + void __iomem *iomem; + /** @irq: PWR irq. */ struct panthor_irq irq; =20 @@ -55,8 +58,10 @@ struct panthor_pwr { =20 static void panthor_pwr_irq_handler(struct panthor_device *ptdev, u32 stat= us) { + struct panthor_pwr *pwr =3D ptdev->pwr; + spin_lock(&ptdev->pwr->reqs_lock); - gpu_write(ptdev->iomem, PWR_INT_CLEAR, status); + gpu_write(pwr->irq.iomem, INT_CLEAR, status); =20 if (unlikely(status & PWR_IRQ_COMMAND_NOT_ALLOWED)) drm_err(&ptdev->base, "PWR_IRQ: COMMAND_NOT_ALLOWED"); @@ -74,15 +79,19 @@ PANTHOR_IRQ_HANDLER(pwr, panthor_pwr_irq_handler); =20 static void panthor_pwr_write_command(struct panthor_device *ptdev, u32 co= mmand, u64 args) { + struct panthor_pwr *pwr =3D ptdev->pwr; + if (args) - gpu_write64(ptdev->iomem, PWR_CMDARG, args); + gpu_write64(pwr->iomem, PWR_CMDARG, args); =20 - gpu_write(ptdev->iomem, PWR_COMMAND, command); + gpu_write(pwr->iomem, PWR_COMMAND, command); } =20 static bool reset_irq_raised(struct panthor_device *ptdev) { - return gpu_read(ptdev->iomem, PWR_INT_RAWSTAT) & PWR_IRQ_RESET_COMPLETED; + struct panthor_pwr *pwr =3D ptdev->pwr; + + return gpu_read(pwr->irq.iomem, INT_RAWSTAT) & PWR_IRQ_RESET_COMPLETED; } =20 static bool reset_pending(struct panthor_device *ptdev) @@ -92,12 +101,14 @@ static bool reset_pending(struct panthor_device *ptdev) =20 static int panthor_pwr_reset(struct panthor_device *ptdev, u32 reset_cmd) { + struct panthor_pwr *pwr =3D ptdev->pwr; + scoped_guard(spinlock_irqsave, &ptdev->pwr->reqs_lock) { if (reset_pending(ptdev)) { drm_WARN(&ptdev->base, 1, "Reset already pending"); } else { ptdev->pwr->pending_reqs |=3D PWR_IRQ_RESET_COMPLETED; - gpu_write(ptdev->iomem, PWR_INT_CLEAR, PWR_IRQ_RESET_COMPLETED); + gpu_write(pwr->irq.iomem, INT_CLEAR, PWR_IRQ_RESET_COMPLETED); panthor_pwr_write_command(ptdev, reset_cmd, 0); } } @@ -182,11 +193,12 @@ static u8 get_domain_subdomain(struct panthor_device = *ptdev, u32 domain) static int panthor_pwr_domain_wait_transition(struct panthor_device *ptdev= , u32 domain, u32 timeout_us) { + struct panthor_pwr *pwr =3D ptdev->pwr; u32 pwrtrans_reg =3D get_domain_pwrtrans_reg(domain); u64 val; int ret =3D 0; =20 - ret =3D gpu_read64_poll_timeout(ptdev->iomem, pwrtrans_reg, val, !(PWR_AL= L_CORES_MASK & val), 100, + ret =3D gpu_read64_poll_timeout(pwr->iomem, pwrtrans_reg, val, !(PWR_ALL_= CORES_MASK & val), 100, timeout_us); if (ret) { drm_err(&ptdev->base, "%s domain power in transition, pwrtrans(0x%llx)", @@ -199,22 +211,25 @@ static int panthor_pwr_domain_wait_transition(struct = panthor_device *ptdev, u32 =20 static void panthor_pwr_debug_info_show(struct panthor_device *ptdev) { + struct panthor_pwr *pwr =3D ptdev->pwr; + drm_info(&ptdev->base, "GPU_FEATURES: 0x%016llx", ptdev->gpu_info.gpu_= features); - drm_info(&ptdev->base, "PWR_STATUS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_STATUS)); - drm_info(&ptdev->base, "L2_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PRESENT)); - drm_info(&ptdev->base, "L2_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_PWRTRANS)); - drm_info(&ptdev->base, "L2_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_L2_READY)); - drm_info(&ptdev->base, "TILER_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_PRESENT)); - drm_info(&ptdev->base, "TILER_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_PWRTRANS)); - drm_info(&ptdev->base, "TILER_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_TILER_READY)); - drm_info(&ptdev->base, "SHADER_PRESENT: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_PRESENT)); - drm_info(&ptdev->base, "SHADER_PWRTRANS: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_PWRTRANS)); - drm_info(&ptdev->base, "SHADER_READY: 0x%016llx", gpu_read64(ptdev->io= mem, PWR_SHADER_READY)); + drm_info(&ptdev->base, "PWR_STATUS: 0x%016llx", gpu_read64(pwr->iome= m, PWR_STATUS)); + drm_info(&ptdev->base, "L2_PRESENT: 0x%016llx", gpu_read64(pwr->iome= m, PWR_L2_PRESENT)); + drm_info(&ptdev->base, "L2_PWRTRANS: 0x%016llx", gpu_read64(pwr->iome= m, PWR_L2_PWRTRANS)); + drm_info(&ptdev->base, "L2_READY: 0x%016llx", gpu_read64(pwr->iome= m, PWR_L2_READY)); + drm_info(&ptdev->base, "TILER_PRESENT: 0x%016llx", gpu_read64(pwr->iome= m, PWR_TILER_PRESENT)); + drm_info(&ptdev->base, "TILER_PWRTRANS: 0x%016llx", gpu_read64(pwr->iome= m, PWR_TILER_PWRTRANS)); + drm_info(&ptdev->base, "TILER_READY: 0x%016llx", gpu_read64(pwr->iome= m, PWR_TILER_READY)); + drm_info(&ptdev->base, "SHADER_PRESENT: 0x%016llx", gpu_read64(pwr->iome= m, PWR_SHADER_PRESENT)); + drm_info(&ptdev->base, "SHADER_PWRTRANS: 0x%016llx", gpu_read64(pwr->iome= m, PWR_SHADER_PWRTRANS)); + drm_info(&ptdev->base, "SHADER_READY: 0x%016llx", gpu_read64(pwr->iome= m, PWR_SHADER_READY)); } =20 static int panthor_pwr_domain_transition(struct panthor_device *ptdev, u32= cmd, u32 domain, u64 mask, u32 timeout_us) { + struct panthor_pwr *pwr =3D ptdev->pwr; u32 ready_reg =3D get_domain_ready_reg(domain); u32 pwr_cmd =3D PWR_COMMAND_DEF(cmd, domain, get_domain_subdomain(ptdev, = domain)); u64 expected_val =3D 0; @@ -241,12 +256,12 @@ static int panthor_pwr_domain_transition(struct panth= or_device *ptdev, u32 cmd, return ret; =20 /* domain already in target state, return early */ - if ((gpu_read64(ptdev->iomem, ready_reg) & mask) =3D=3D expected_val) + if ((gpu_read64(pwr->iomem, ready_reg) & mask) =3D=3D expected_val) return 0; =20 panthor_pwr_write_command(ptdev, pwr_cmd, mask); =20 - ret =3D gpu_read64_poll_timeout(ptdev->iomem, ready_reg, val, (mask & val= ) =3D=3D expected_val, + ret =3D gpu_read64_poll_timeout(pwr->iomem, ready_reg, val, (mask & val) = =3D=3D expected_val, 100, timeout_us); if (ret) { drm_err(&ptdev->base, @@ -279,8 +294,9 @@ static int panthor_pwr_domain_transition(struct panthor= _device *ptdev, u32 cmd, */ static int retract_domain(struct panthor_device *ptdev, u32 domain) { + struct panthor_pwr *pwr =3D ptdev->pwr; const u32 pwr_cmd =3D PWR_COMMAND_DEF(PWR_COMMAND_RETRACT, domain, 0); - const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(pwr->iomem, PWR_STATUS); const u64 delegated_mask =3D PWR_STATUS_DOMAIN_DELEGATED(domain); const u64 allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(domain); u64 val; @@ -289,7 +305,7 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) if (drm_WARN_ON(&ptdev->base, domain =3D=3D PWR_COMMAND_DOMAIN_L2)) return -EPERM; =20 - ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, + ret =3D gpu_read64_poll_timeout(pwr->iomem, PWR_STATUS, val, !(PWR_STATUS_RETRACT_PENDING & val), 0, PWR_RETRACT_TIMEOUT_US); if (ret) { @@ -308,7 +324,7 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) * On successful retraction * allow-flag will be set with delegated-flag being cleared. */ - ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, + ret =3D gpu_read64_poll_timeout(pwr->iomem, PWR_STATUS, val, ((delegated_mask | allow_mask) & val) =3D=3D allow_mask, 10, PWR_TRANSITION_TIMEOUT_US); if (ret) { @@ -334,8 +350,9 @@ static int retract_domain(struct panthor_device *ptdev,= u32 domain) */ static int delegate_domain(struct panthor_device *ptdev, u32 domain) { + struct panthor_pwr *pwr =3D ptdev->pwr; const u32 pwr_cmd =3D PWR_COMMAND_DEF(PWR_COMMAND_DELEGATE, domain, 0); - const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(pwr->iomem, PWR_STATUS); const u64 allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(domain); const u64 delegated_mask =3D PWR_STATUS_DOMAIN_DELEGATED(domain); u64 val; @@ -364,7 +381,7 @@ static int delegate_domain(struct panthor_device *ptdev= , u32 domain) * On successful delegation * allow-flag will be cleared with delegated-flag being set. */ - ret =3D gpu_read64_poll_timeout(ptdev->iomem, PWR_STATUS, val, + ret =3D gpu_read64_poll_timeout(pwr->iomem, PWR_STATUS, val, ((delegated_mask | allow_mask) & val) =3D=3D delegated_mask, 10, PWR_TRANSITION_TIMEOUT_US); if (ret) { @@ -412,7 +429,8 @@ static int panthor_pwr_delegate_domains(struct panthor_= device *ptdev) */ static int panthor_pwr_domain_force_off(struct panthor_device *ptdev, u32 = domain) { - const u64 domain_ready =3D gpu_read64(ptdev->iomem, get_domain_ready_reg(= domain)); + struct panthor_pwr *pwr =3D ptdev->pwr; + const u64 domain_ready =3D gpu_read64(pwr->iomem, get_domain_ready_reg(do= main)); int ret; =20 /* Domain already powered down, early exit. */ @@ -456,6 +474,7 @@ int panthor_pwr_init(struct panthor_device *ptdev) if (!pwr) return -ENOMEM; =20 + pwr->iomem =3D ptdev->iomem + GPU_CONTROL_BASE + PWR_CONTROL_BASE; spin_lock_init(&pwr->reqs_lock); init_waitqueue_head(&pwr->reqs_acked); ptdev->pwr =3D pwr; @@ -466,7 +485,7 @@ int panthor_pwr_init(struct panthor_device *ptdev) =20 err =3D panthor_request_pwr_irq(ptdev, &pwr->irq, irq, PWR_INTERRUPTS_MASK, - GPU_CONTROL_BASE + PWR_CONTROL_BASE); + GPU_CONTROL_BASE + PWR_INT_BASE); if (err) return err; =20 @@ -475,7 +494,9 @@ int panthor_pwr_init(struct panthor_device *ptdev) =20 int panthor_pwr_reset_soft(struct panthor_device *ptdev) { - if (!(gpu_read64(ptdev->iomem, PWR_STATUS) & PWR_STATUS_ALLOW_SOFT_RESET)= ) { + struct panthor_pwr *pwr =3D ptdev->pwr; + + if (!(gpu_read64(pwr->iomem, PWR_STATUS) & PWR_STATUS_ALLOW_SOFT_RESET)) { drm_err(&ptdev->base, "RESET_SOFT not allowed"); return -EOPNOTSUPP; } @@ -485,8 +506,9 @@ int panthor_pwr_reset_soft(struct panthor_device *ptdev) =20 void panthor_pwr_l2_power_off(struct panthor_device *ptdev) { + struct panthor_pwr *pwr =3D ptdev->pwr; const u64 l2_allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(PWR_COMMAND_DOMAIN_= L2); - const u64 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); + const u64 pwr_status =3D gpu_read64(pwr->iomem, PWR_STATUS); =20 /* Abort if L2 power off constraints are not satisfied */ if (!(pwr_status & l2_allow_mask)) { @@ -512,7 +534,8 @@ void panthor_pwr_l2_power_off(struct panthor_device *pt= dev) =20 int panthor_pwr_l2_power_on(struct panthor_device *ptdev) { - const u32 pwr_status =3D gpu_read64(ptdev->iomem, PWR_STATUS); + struct panthor_pwr *pwr =3D ptdev->pwr; + const u32 pwr_status =3D gpu_read64(pwr->iomem, PWR_STATUS); const u32 l2_allow_mask =3D PWR_STATUS_DOMAIN_ALLOWED(PWR_COMMAND_DOMAIN_= L2); int ret; =20 diff --git a/drivers/gpu/drm/panthor/panthor_pwr_regs.h b/drivers/gpu/drm/p= anthor/panthor_pwr_regs.h index ad3e446971db..1fce05c3a96e 100644 --- a/drivers/gpu/drm/panthor/panthor_pwr_regs.h +++ b/drivers/gpu/drm/panthor/panthor_pwr_regs.h @@ -5,12 +5,8 @@ #define __PANTHOR_PWR_REGS_H__ =20 #define PWR_CONTROL_BASE 0x800 -#define PWR_CTRL_REG(x) (PWR_CONTROL_BASE + (x)) =20 -#define PWR_INT_RAWSTAT PWR_CTRL_REG(0x0) -#define PWR_INT_CLEAR PWR_CTRL_REG(0x4) -#define PWR_INT_MASK PWR_CTRL_REG(0x8) -#define PWR_INT_STAT PWR_CTRL_REG(0xc) +#define PWR_INT_BASE 0x800 #define PWR_IRQ_POWER_CHANGED_SINGLE BIT(0) #define PWR_IRQ_POWER_CHANGED_ALL BIT(1) #define PWR_IRQ_DELEGATION_CHANGED BIT(2) @@ -20,7 +16,7 @@ #define PWR_IRQ_COMMAND_NOT_ALLOWED BIT(30) #define PWR_IRQ_COMMAND_INVALID BIT(31) =20 -#define PWR_STATUS PWR_CTRL_REG(0x20) +#define PWR_STATUS 0x20 #define PWR_STATUS_ALLOW_L2 BIT_U64(0) #define PWR_STATUS_ALLOW_TILER BIT_U64(1) #define PWR_STATUS_ALLOW_SHADER BIT_U64(8) @@ -41,7 +37,7 @@ #define PWR_STATUS_RETRACT_PENDING BIT_U64(43) #define PWR_STATUS_INSPECT_PENDING BIT_U64(44) =20 -#define PWR_COMMAND PWR_CTRL_REG(0x28) +#define PWR_COMMAND 0x28 #define PWR_COMMAND_POWER_UP 0x10 #define PWR_COMMAND_POWER_DOWN 0x11 #define PWR_COMMAND_DELEGATE 0x20 @@ -58,26 +54,26 @@ #define PWR_COMMAND_DEF(cmd, domain, subdomain) \ (((subdomain) << 16) | ((domain) << 8) | (cmd)) =20 -#define PWR_CMDARG PWR_CTRL_REG(0x30) +#define PWR_CMDARG 0x30 =20 -#define PWR_L2_PRESENT PWR_CTRL_REG(0x100) -#define PWR_L2_READY PWR_CTRL_REG(0x108) -#define PWR_L2_PWRTRANS PWR_CTRL_REG(0x110) -#define PWR_L2_PWRACTIVE PWR_CTRL_REG(0x118) -#define PWR_TILER_PRESENT PWR_CTRL_REG(0x140) -#define PWR_TILER_READY PWR_CTRL_REG(0x148) -#define PWR_TILER_PWRTRANS PWR_CTRL_REG(0x150) -#define PWR_TILER_PWRACTIVE PWR_CTRL_REG(0x158) -#define PWR_SHADER_PRESENT PWR_CTRL_REG(0x200) -#define PWR_SHADER_READY PWR_CTRL_REG(0x208) -#define PWR_SHADER_PWRTRANS PWR_CTRL_REG(0x210) -#define PWR_SHADER_PWRACTIVE PWR_CTRL_REG(0x218) -#define PWR_BASE_PRESENT PWR_CTRL_REG(0x380) -#define PWR_BASE_READY PWR_CTRL_REG(0x388) -#define PWR_BASE_PWRTRANS PWR_CTRL_REG(0x390) -#define PWR_BASE_PWRACTIVE PWR_CTRL_REG(0x398) -#define PWR_STACK_PRESENT PWR_CTRL_REG(0x3c0) -#define PWR_STACK_READY PWR_CTRL_REG(0x3c8) -#define PWR_STACK_PWRTRANS PWR_CTRL_REG(0x3d0) +#define PWR_L2_PRESENT 0x100 +#define PWR_L2_READY 0x108 +#define PWR_L2_PWRTRANS 0x110 +#define PWR_L2_PWRACTIVE 0x118 +#define PWR_TILER_PRESENT 0x140 +#define PWR_TILER_READY 0x148 +#define PWR_TILER_PWRTRANS 0x150 +#define PWR_TILER_PWRACTIVE 0x158 +#define PWR_SHADER_PRESENT 0x200 +#define PWR_SHADER_READY 0x208 +#define PWR_SHADER_PWRTRANS 0x210 +#define PWR_SHADER_PWRACTIVE 0x218 +#define PWR_BASE_PRESENT 0x380 +#define PWR_BASE_READY 0x388 +#define PWR_BASE_PWRTRANS 0x390 +#define PWR_BASE_PWRACTIVE 0x398 +#define PWR_STACK_PRESENT 0x3c0 +#define PWR_STACK_READY 0x3c8 +#define PWR_STACK_PWRTRANS 0x3d0 =20 #endif /* __PANTHOR_PWR_REGS_H__ */ --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013008.outbound.protection.outlook.com [52.101.83.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B29133DE43D for ; Fri, 10 Apr 2026 16:48:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.8 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839686; cv=fail; b=XPUm3xY1sAmoj11/x+CBjTs5pMBa0suhwPbs8E07opsCpL/2wcImVb0a28FMcKbD3dFSNVvpkDrA/2tSN1nTfg2J+T6sAgMWRgMzdsQAO+HOohTFPEr0zX1HoBDI1kNcPP5pgrGvaC3xVwY8qH6fFx17964qMUdlzsur3meMCAY= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839686; c=relaxed/simple; bh=TtZaDFkJH8n14s7mhjyXmHyTv/b+Tqth3aa/YYKecsU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LnEl5ZBMnxSx9Uf89tAMhoYnbOoJwyeiuGcstLSRPWt7vPkHc0Mq+JseEJ43LyN2Nrn8WGFDeyYM6tFauybJ/kqV8xNmcmJxroomjSnFBvIXRYszWbO896I0z+cVb1o4/DJSuKogyhi4LkkKazZwlStvX9t1WeKbTKnebtwThFM= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=rVroaaV3; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=rVroaaV3; arc=fail smtp.client-ip=52.101.83.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="rVroaaV3"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="rVroaaV3" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=PHod9ye0+2F3h4HFGS0iODGChteWaZvZEiICuc+e1sMvKmW0wKx65Ez9FbN+noCh1fy+AAGNZJgBG10ZPJx+OmFem8n8PE6h2PoVHCOMP5Sk+PI856dD4RtkJDlx/X7qEf8HzL5iEmWlBfRrVLZWXBpMJLBNGS/ZGvjtauAriyi+ZQ1QXqPPNRNkC7lwZTHpxWk6cAs04oeOpmxPRmmytKbVJDiNwIe4Coix99x41QZTE9AJJwLL/R2M6IXPRwmyQy/gPmhB7XPvO09khO2CJIZNkGOUxQ8XOAlZCexPZNN5kxfmQWRaXO6S/HSV14VIcwMzfjt33KhUvYchfaow4w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F9Nw3ZEPnE7MPHZvs/68cAR8m2zWNbYyEw0xbO7Zm48=; b=Lbz72s+ckPFs53BvBwguci0/X1XwoJI2JslhNWVQWpxxQrE7XP2DBE8nj77RQamgr7aJGMUkpuTZQnHgv5NM669ZRAWz8ZbK4YKa7yKgSyf5s2Irr8kDCOFhbGUvMgcX4Fga4eCYfkQpKVgWDXlsIlnuzfUPdPRMswIZDHzX2OuQkhQAlGix81qSUTz5u7laT/skBt6YX93t6bJbwotnCYKb3cAne2Eh3WhisJkNdLbmnPpa4+PfzP1acf5p82YeKfh9UfnBvrNNj+TMpmZinrgphspqKj3xxVZ5H7Fi1gWdOMs8tKrLI7SV9lQNx+PXiQHmnTlk7Fu/SHprp9AGSQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F9Nw3ZEPnE7MPHZvs/68cAR8m2zWNbYyEw0xbO7Zm48=; b=rVroaaV34fQXD5u02G0id5kK6BehW80glVt9cSKHykg0AMVeXzUh1GSIEosMHXIbcLlL4GQr4yCYmAzSGU3HPEkLwumEKNfcciMhEjq+voQk5jh/O2K+dLNmHaYJb7+MIu9u62RzyImqbNc6ZuaSKOGaXIF+gjPUJcHDG+/bnQw= Received: from CWLP265CA0505.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:18b::14) by AMBPR08MB11617.eurprd08.prod.outlook.com (2603:10a6:20b:736::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:47:56 +0000 Received: from AMS1EPF0000004A.eurprd04.prod.outlook.com (2603:10a6:400:18b:cafe::18) by CWLP265CA0505.outlook.office365.com (2603:10a6:400:18b::14) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.43 via Frontend Transport; Fri, 10 Apr 2026 16:47:56 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by AMS1EPF0000004A.mail.protection.outlook.com (10.167.16.134) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uXw4pTBCAEgpBnmUpUC1UhZK2xH9jB73Y0ONpIBQSKIAcnluza3DYruB83vzv4TgfWhQTUhpR67ZgafiviZFpmlwePncTxWdO8A2NBRjGAxskHNc8oYm6dFYGXRm9wZX4GAnklwpuEeaaBzrBudjfSNUJWnPVQTYw3ZoOnlrWoJO6kSt7/Jlw5CJCbqOGolvUW6TE1fn33k1n4KohAHBp5djzZPCArPUBo/bZ/5obkP2SYSPQu4kEx+qvVGau4Feq7MKtT/Nzz72Cy5vNmA1IOUmMYPJ9S6MUvMhmYhCMhhOVHtQZ5Xt+GHCvk9oMMEGkBeKkC9caWUK7Mjif0QySg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F9Nw3ZEPnE7MPHZvs/68cAR8m2zWNbYyEw0xbO7Zm48=; b=nUuzlsVOtps8cBHZyd2/otIbPnX/yezk4UEuPRxgjnoNtMculnUtwOgwN/4DxoxEgASv56LNBrotEV/GRJn4RHNdDkabXL0Pwp3z5j3ZxE+OtYSekcxeqHD6q9uLv8sQgIQn/Keit9kjfoJGhoEV8QNq/5FDpGkgvBeYq9YzmD7QR97+HL9KQ/CYC1L1UzYj/14j8n9KYR3V+ZMaHw6FEf8wK65mf7fp3dGauwJo0wu+JsmZM6M0uKl10KterxBf5waUD1AHZIqYTa9MFFTZUTAPYHB7HF8nb/Bfm4vTALx/VuslWTtM3ZEdGQFG3vaq44VPjazOjDQZWVKV+fU1Mg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F9Nw3ZEPnE7MPHZvs/68cAR8m2zWNbYyEw0xbO7Zm48=; b=rVroaaV34fQXD5u02G0id5kK6BehW80glVt9cSKHykg0AMVeXzUh1GSIEosMHXIbcLlL4GQr4yCYmAzSGU3HPEkLwumEKNfcciMhEjq+voQk5jh/O2K+dLNmHaYJb7+MIu9u62RzyImqbNc6ZuaSKOGaXIF+gjPUJcHDG+/bnQw= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Fri, 10 Apr 2026 16:46:53 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:53 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 7/8] drm/panthor: Use a local iomem base for firmware control registers Date: Fri, 10 Apr 2026 17:46:36 +0100 Message-ID: <20260410164637.549145-8-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0053.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ac::19) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB9624:EE_|AMS1EPF0000004A:EE_|AMBPR08MB11617:EE_ X-MS-Office365-Filtering-Correlation-Id: 586bdd8f-5095-4914-094b-08de9720eabb X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|376014|1800799024|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info-Original: hGRmQdyB+A0+/LpGpNMD5hRmQKpf0cI2SU0tIRJD1IOAZ373aCrM+W+RolDBBlbVfvgjUtWuk7+T0KdXHofXyRJoy5WZRseF0exCgA/dZrP/U2AhmjxxnjfiqOc72Ta+rRB3fhARggsMvcaNrffte4CrTyvQGyrE+Rj2sC+5TeKHASaX1UPg3o/ciubot+Pj9SD6ptxZzp+eGuVkgawur4nX4G5C6e6jM4QViC4FCgWDV8c1QxEx+pxvu2eBNeVhZdQNnveps9hDzaBeN6b4lMUnMXLMn8zcTX9epa22ke9RuT0qcW5T8HiIgqUPOy3qPo6/KmZRbzcEh4m09eLzihTlqoPr1AUMyr4itg/vvq9cJBAiJ/hZc2pFmy23YSmW9LJ0qvTZ+P+b8RO1LN7hPGCDXYO4oD/qf0WHO1GqnV+w0LGrwMBpAa0lTVU//bzT7By7ObKAAS/dwkr1rCO+tNpY1q9Tq01KI6YwzJbnm2F00wfv1gWdiOl6tAWSdqXkN5QWweb7Y3T+Y8UCBWDpp6LJB7P+rlHfWeK0lS9WSbZ2My1so0zOpVrRYO8j8d4tn80lX7L6sdSynkJHbEVj+qYgkKwfYqrLyIRJpUsR+hIYrpKCn4cTzOKJM2qic4eiexSyOPJk3RFY+ppVFCqMbp3v524uJugdIzKX2sEWRG0k9V8G6t2NWjdctJ9Fk9yUfMpkPNn8lJFtpPH6s4GaDRxfiZCSwPD0ZSihCRXwXaE= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: W5vk2uLMKYQunjTcgwxlpR6wSWtnrwVUBcRVfe5pLAb5kpWodW7Ljsz3VZbgdQKE5Unrh4Pxc5bxztHax04Z+X77rLF8fLdgtZyWRePii/uQkdIaKNoA2aQW1W9N3wA3CeZamc5ZRZkwuYnWUJZlTMx26jDM13fnF6csLImKGWdzcrGs3L/P7uqn/hUwHGouChmMFjf/maw8Bfdsgavier3HRsIUeHAUxdly7AYsKbtW/U72VrzuQTI9z2KGeHK7cnKecPUuSECoOtxG1Q4e5yHMW6DoRnePnFFLyXDBb+D+BRvIL8VBDDIe6WwkNplAIsQP9ImNL5+5RvuAJDMLXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS1EPF0000004A.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: fb58be57-ee0c-4196-ee58-08de9720c37f X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|1800799024|376014|82310400026|35042699022|14060799003|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: oIfw9mqzGF8CAV8vbjDlQpZc2vysvAtA0eXM80XpftkzcUUXwxOVQ67Mn5TbzAEda3DuGjcuxq7ClfCX85LgqSX/BFksDPzyO1EZU+rjicKNMErZfNsftXyeWdfTFFfMY8XG6BZpjGEShQWH5U3K8HyBciAJ+k0xTc5Ea1s2bcsl3+Pc3cwalWGLhvO9mTMqMcYkclJ6EVw+s8Dn06s09lfZ/I+r42+wB1ysfRzXI9LiA9Pvz1c9ZzVxp+zeKkXZb0+THBDxExzTVbxYPH7yP0JX+zrDh4AifnieSVoa0CW4KlPqVsW4gkMVjrCU9EyG++u2kUm43sn1kjoenngKhOsIX5anLsYEgT73QNdKHKcog9uNPg6gsbgWCSq3ceFrSJi7r/M/pLDZK7lm/y2wr7rPluJ88OJZpHMwrjPWKe6D4YOC6UJOeLTp8d3B7qqLqmlMabsDzsyInLI5S9fS1Eo2o6F8poixwF8FUDP3sMbPA+H15o0wndPa0I5wHGQNThyorfK90WEfhQuJo7nltiWXz2O3Cuj6oG8msqmXDo2uaVcNhIfndrfJxfpkxz+IReI7x8I6XUkkHJ+K3fRxV5f02P8FKEQtKLZnpByVs4qeIiUuC2BQgp/FOr2Sjg2xdTPynyJVJ7tWT86m1bDRoL06rRvqUPRY1GCQuYjWdZlm/h12gC85hlMGENeiqT7k8c2064NBBOSqBhfBWDtyOgubVb+yRjwLQ8iQgQMZJ8a3aomilmggDB+eUkzh16997ha6HcKfI9k8PVSUQH6MJw== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700016)(1800799024)(376014)(82310400026)(35042699022)(14060799003)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: W55h04tdt9oE9IshvPh9mPp1Rmds92sxQR7fkeHYQU4GdoTt1OZioOWmE5uYI8TxV2P0F0IXmfQPY+TMMQPtuuBijrBZ8Aea8cS7cFUPXDGIOn/pgx6NXWaL51MCl7/zp2vIVWgomYsYJWlFIIUc+R9GVNJIOAE26sz9diWEW8jJ8AwUv3q0TxlwiPuXo3ZealQ3BEuE0bOR2R2mhs6du1m1We2GZdp5WKvKQSRm6IxoKez9YTIC4kRp11uBZigDOupd42mC1Khd5M0gHyDuyRd2jqll8fzZ+UFfYB8jt0G9a0QRkDvdAAKRulzZWT2Cd/Cbq+WHbslIqVfUVunDCN+TmgpZ1Ptbbn9O6+7d9F4Ev5r1MmEzOOK1leo58ZifNNuj07cq1VZ0tRyg85Dy/l2tvI0JG7ka34laB85PDMORtUPyppWwwhKOJjGfBkBp X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:56.5174 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 586bdd8f-5095-4914-094b-08de9720eabb X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: AMS1EPF0000004A.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR08MB11617 Content-Type: text/plain; charset="utf-8" Add an MCU_CONTROL-local iomem pointer to struct panthor_fw and use it for firmware control and status register accesses. Job interrupt accesses continue to go through the IRQ-local base, while doorbell writes stay on the device-wide mapping because they live outside the MCU control window. This keeps firmware register accesses scoped to the component that owns them. No functional change intended. Signed-off-by: Karunika Choo Acked-by: Boris Brezillon --- drivers/gpu/drm/panthor/panthor_fw.c | 20 +++++++++++++------- drivers/gpu/drm/panthor/panthor_fw_regs.h | 11 ++++------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor= /panthor_fw.c index 20747f42759f..bf7c2baefb79 100644 --- a/drivers/gpu/drm/panthor/panthor_fw.c +++ b/drivers/gpu/drm/panthor/panthor_fw.c @@ -234,6 +234,9 @@ struct panthor_fw_iface { * struct panthor_fw - Firmware management */ struct panthor_fw { + /** @iomem: CPU mapping of MCU_CONTROL iomem region */ + void __iomem *iomem; + /** @vm: MCU VM. */ struct panthor_vm *vm; =20 @@ -1069,7 +1072,7 @@ static void panthor_job_irq_handler(struct panthor_de= vice *ptdev, u32 status) if (tracepoint_enabled(gpu_job_irq)) start =3D ktime_get_ns(); =20 - gpu_write(ptdev->iomem, JOB_INT_CLEAR, status); + gpu_write(ptdev->fw->irq.iomem, INT_CLEAR, status); =20 if (!ptdev->fw->booted && (status & JOB_INT_GLOBAL_IF)) ptdev->fw->booted =3D true; @@ -1092,18 +1095,19 @@ PANTHOR_IRQ_HANDLER(job, panthor_job_irq_handler); =20 static int panthor_fw_start(struct panthor_device *ptdev) { + struct panthor_fw *fw =3D ptdev->fw; bool timedout =3D false; =20 ptdev->fw->booted =3D false; panthor_job_irq_enable_events(&ptdev->fw->irq, ~0); panthor_job_irq_resume(&ptdev->fw->irq); - gpu_write(ptdev->iomem, MCU_CONTROL, MCU_CONTROL_AUTO); + gpu_write(fw->iomem, MCU_CONTROL, MCU_CONTROL_AUTO); =20 if (!wait_event_timeout(ptdev->fw->req_waitqueue, ptdev->fw->booted, msecs_to_jiffies(1000))) { if (!ptdev->fw->booted && - !(gpu_read(ptdev->iomem, JOB_INT_STAT) & JOB_INT_GLOBAL_IF)) + !(gpu_read(fw->irq.iomem, INT_STAT) & JOB_INT_GLOBAL_IF)) timedout =3D true; } =20 @@ -1114,7 +1118,7 @@ static int panthor_fw_start(struct panthor_device *pt= dev) [MCU_STATUS_HALT] =3D "halt", [MCU_STATUS_FATAL] =3D "fatal", }; - u32 status =3D gpu_read(ptdev->iomem, MCU_STATUS); + u32 status =3D gpu_read(fw->iomem, MCU_STATUS); =20 drm_err(&ptdev->base, "Failed to boot MCU (status=3D%s)", status < ARRAY_SIZE(status_str) ? status_str[status] : "unknown"); @@ -1126,10 +1130,11 @@ static int panthor_fw_start(struct panthor_device *= ptdev) =20 static void panthor_fw_stop(struct panthor_device *ptdev) { + struct panthor_fw *fw =3D ptdev->fw; u32 status; =20 - gpu_write(ptdev->iomem, MCU_CONTROL, MCU_CONTROL_DISABLE); - if (gpu_read_poll_timeout(ptdev->iomem, MCU_STATUS, status, + gpu_write(fw->iomem, MCU_CONTROL, MCU_CONTROL_DISABLE); + if (gpu_read_poll_timeout(fw->iomem, MCU_STATUS, status, status =3D=3D MCU_STATUS_DISABLED, 10, 100000)) drm_err(&ptdev->base, "Failed to stop MCU"); } @@ -1139,7 +1144,7 @@ static bool panthor_fw_mcu_halted(struct panthor_devi= ce *ptdev) struct panthor_fw_global_iface *glb_iface =3D panthor_fw_get_glb_iface(pt= dev); bool halted; =20 - halted =3D gpu_read(ptdev->iomem, MCU_STATUS) =3D=3D MCU_STATUS_HALT; + halted =3D gpu_read(ptdev->fw->iomem, MCU_STATUS) =3D=3D MCU_STATUS_HALT; =20 if (panthor_fw_has_glb_state(ptdev)) halted &=3D (GLB_STATE_GET(glb_iface->output->ack) =3D=3D GLB_STATE_HALT= ); @@ -1461,6 +1466,7 @@ int panthor_fw_init(struct panthor_device *ptdev) if (!fw) return -ENOMEM; =20 + fw->iomem =3D ptdev->iomem + MCU_CONTROL_BASE; ptdev->fw =3D fw; init_waitqueue_head(&fw->req_waitqueue); INIT_LIST_HEAD(&fw->sections); diff --git a/drivers/gpu/drm/panthor/panthor_fw_regs.h b/drivers/gpu/drm/pa= nthor/panthor_fw_regs.h index eeb41aff249b..b2e59cfc22b0 100644 --- a/drivers/gpu/drm/panthor/panthor_fw_regs.h +++ b/drivers/gpu/drm/panthor/panthor_fw_regs.h @@ -4,23 +4,20 @@ #ifndef __PANTHOR_FW_REGS_H__ #define __PANTHOR_FW_REGS_H__ =20 -#define MCU_CONTROL 0x700 +#define MCU_CONTROL_BASE 0x700 + +#define MCU_CONTROL 0x0 #define MCU_CONTROL_ENABLE 1 #define MCU_CONTROL_AUTO 2 #define MCU_CONTROL_DISABLE 0 =20 -#define MCU_STATUS 0x704 +#define MCU_STATUS 0x4 #define MCU_STATUS_DISABLED 0 #define MCU_STATUS_ENABLED 1 #define MCU_STATUS_HALT 2 #define MCU_STATUS_FATAL 3 =20 #define JOB_INT_BASE 0x1000 - -#define JOB_INT_RAWSTAT 0x1000 -#define JOB_INT_CLEAR 0x1004 -#define JOB_INT_MASK 0x1008 -#define JOB_INT_STAT 0x100c #define JOB_INT_GLOBAL_IF BIT(31) #define JOB_INT_CSG_IF(x) BIT(x) =20 --=20 2.43.0 From nobody Mon Jun 15 13:56:24 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013016.outbound.protection.outlook.com [40.107.162.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB32F3E0230 for ; Fri, 10 Apr 2026 16:48:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.16 ARC-Seal: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839692; cv=fail; b=bbVVYAlAwmkEjpF9kYLGyC8Wm6OjMqKf6RhQ777CVTX+QLysOA6wZq/Ir1mVQYIeVdM2E5UqYjjbl50pHz7yn7rpunl4xMBmin6mx56dh83qGQ2kATXJdr6bT0i1glJXvRdcnJtT+YeMkWnx5gB2D2RQXWM3SlFIbfT6o7IyxzU= ARC-Message-Signature: i=3; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775839692; c=relaxed/simple; bh=2zEN+uSEnmyxnnA4A7mdwXbHFhN9g4+peRQIsNZSllE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=RFIHNb/Q/h4myRGxEVIja9PJzVeWx49bk3/x3B9B8uR88yNoKuBBIS86ETN0epfpfFoZLnlA2/v6PVC5lxzcEGn6utC+Yvqx9qjHAeM8X1x/Oz3s1kqnqiINmYgSTzByHSbvhRMgbKwQqfmuRYGOkb2757F58iADwas4gkb6Evw= ARC-Authentication-Results: i=3; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=o6RIitUl; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=o6RIitUl; arc=fail smtp.client-ip=40.107.162.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="o6RIitUl"; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="o6RIitUl" ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=k6DaKOCz3SpzABRN06xteO9ZZEcfoW+Ps6Jv/Au/KKcgBJmejqCBArMZwHLmXsiA720vUhju5ak0oH2+utG5jjYJZILSVMJoNHel25AFcuYsLtV1rZUtvMJpy8xiaTIx3Us0XJ5j2lJsTN8v1+rL3CvKakn73DSYTozUPInCv8+f9UytS0pfoUV5Jh6pmiPqkgqMlBKYt/JFNZ4eCjQyffOcgq4OevXR+0chMdrcnEECPxHAx1xL4XfScBbCvgaPC4lH9gqx1OVy8fmm6ZJTHL7Ix5ASO2m3CXOM7PbJvEjY69AFVmy9c1x2fxblsELQYfy4dP16kAHGuFet7fxgJQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=//HhOCsBUAv83Shtkht7qz9fclG4rEjj8Hv/WhRyewg=; b=bBSCYGumtqhRqfKX8WXTGgiUEXnOGsnIOZN9vqtUOmA0gRsYlKN+ttJJwUKPZAq2HWz4D+JTJ42Gm4+PFBPdLYB//0zvj+nyQH08LtaG8gcFpr5/Qz5Qixc0k0yvTfTw1GdNLGwL3DHF+29UpmwnLb7954TdssLpvmBPKI5A6zqowOCNFVpSSo8eoK8iszDYLmeqAY5fMaYHVumPA7dO/Plwds8lr1vRzceXqbzTdYQC3elMi9mnSAbE7KXBOa1W9+zmwXwnk/B9HbCKnAON3kmBY0zFQSYShRJkq/3q9TofDoKO9JoKw8Nph2bKpK7vYNyHjSGC+TH45DZLBmF5XQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=//HhOCsBUAv83Shtkht7qz9fclG4rEjj8Hv/WhRyewg=; b=o6RIitUl+tbJnOL316ejfTETzYhk0dqIXyycHJYRyI/EmX9S+3bRw6VjDbRzEZy1VEmrzx+rgpR/EwZ8gTe4qBhKd4WF1GLhTjZcuycA2F6KoHoy3G8eUwHVtOlS3RK9w2CPyvhystYGskCykOx/ArFL/H4zbbxcVnK8x611LFo= Received: from DUZP191CA0045.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4f8::12) by AS8PR08MB8039.eurprd08.prod.outlook.com (2603:10a6:20b:549::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.18; Fri, 10 Apr 2026 16:47:57 +0000 Received: from DB1PEPF000509FB.eurprd03.prod.outlook.com (2603:10a6:10:4f8:cafe::55) by DUZP191CA0045.outlook.office365.com (2603:10a6:10:4f8::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.43 via Frontend Transport; Fri, 10 Apr 2026 16:47:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DB1PEPF000509FB.mail.protection.outlook.com (10.167.242.37) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 16:47:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EDCo/sbjxrL95THA1VDg2ZwlwwBRV1HD3t7J6VbjVh8G87hTmt2i96+s6pIEEYIrGhLeymmi3g2xFLZmCpFeXG8JNJvkyVsP2ox2nron/cSqz2nGARlmE1oTjkLzQ42/pdxoOZD2aOOPi7VxEFZmo8Tfovwhw6j9RiYBeY5Cxlg35NUfmjb+29YRGvsEK16Q9YGjrgazGRVIpvh7Ib7z6oaRT7xOC4zE6KqGV1WXAfOFxQL2cJBsjZ/3pRCjY2N338/nL5/mIqEbjqMt5+u8ae4bPcJSV1GajssUtHvGxgLwQK1Nph5LivxK1lLTOYk7RmDOBmAD6b/gyPpzgnYFNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=//HhOCsBUAv83Shtkht7qz9fclG4rEjj8Hv/WhRyewg=; b=uixih+aotcdjYUUIjDgSKDwVu5QDy3RE2BfgkZ8XjpMr4yUD08gWmmjkjYHkhhrCU9am1ZzEyfMM777p8Yz+k1stv4kjb8uDI+BGm4BYN/naKZfu75nG/oOv9byXwjM5wqqIM4jCaE7VXvA4+VAcmAdD9IIydE3h1/SE/mRz3VGllTy+JjSXBrEO5CnzNaTl6ltip9FCPPQOWINemCaZ8itItPZAoplkUfiVT58hnrk7ZSr1QFo+ByewYswtqljPICmbtYoQxvxBu+tK58Ti6WS6nMll6KbPP+8Fyf0VL+E6QVBxkiHAAztji6L7TomWwAKWowChNHkoixLRHraONg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=//HhOCsBUAv83Shtkht7qz9fclG4rEjj8Hv/WhRyewg=; b=o6RIitUl+tbJnOL316ejfTETzYhk0dqIXyycHJYRyI/EmX9S+3bRw6VjDbRzEZy1VEmrzx+rgpR/EwZ8gTe4qBhKd4WF1GLhTjZcuycA2F6KoHoy3G8eUwHVtOlS3RK9w2CPyvhystYGskCykOx/ArFL/H4zbbxcVnK8x611LFo= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) by AS8PR08MB10172.eurprd08.prod.outlook.com (2603:10a6:20b:628::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.44; Fri, 10 Apr 2026 16:46:54 +0000 Received: from VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d]) by VI0PR08MB11200.eurprd08.prod.outlook.com ([fe80::27c:ea0c:e75a:d41d%6]) with mapi id 15.20.9769.016; Fri, 10 Apr 2026 16:46:54 +0000 From: Karunika Choo To: dri-devel@lists.freedesktop.org Cc: nd@arm.com, Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org Subject: [PATCH 8/8] drm/panthor: Use a local iomem base for MMU AS registers Date: Fri, 10 Apr 2026 17:46:37 +0100 Message-ID: <20260410164637.549145-9-karunika.choo@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260410164637.549145-1-karunika.choo@arm.com> References: <20260410164637.549145-1-karunika.choo@arm.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0230.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:315::6) To VI0PR08MB11200.eurprd08.prod.outlook.com (2603:10a6:800:257::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI0PR08MB11200:EE_|AS8PR08MB10172:EE_|DB1PEPF000509FB:EE_|AS8PR08MB8039:EE_ X-MS-Office365-Filtering-Correlation-Id: 5caf022c-042f-44bc-0e2b-08de9720eb11 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|366016|1800799024|376014|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info-Original: RhWewsRTV/B8S4b0aroSIgkTU5zKG6aI2jGPLsb1P8x9RTX7WiV715Ansh2m7KbbQQHeLLw6toJmVkwMyFFkoc/ZI6/4Re/g4GpyoXvwOWPG+INsMM8nuyJPBTtKFNy7aB5UYtfQLPhCf3FtEFd2Xevm/h2ybL25OOWBxFo8GXHktxl3k/ibmStS7flQnFQ18xvzchZdSVhXvmEvtEfrLBZPQ6VN8NbO8l07fqcCNCcG7ZRJR8EIzTW0L0hMNXmndV2HH0lajNd61kaBUZqEhVzFpeoC37rcbf2VXFp4kRezz9vDhaMnC0FAAeeE/GMc8TkzlJ1LgzpGdonyAhmPmtBHFtCWjVCd60GOjRl8Pu4e8nIomxgQGqidKDub1E3S3Ivh1nrWNwMWfCx72MlZYXrQ9QyXP7ik5NevMyFPHWwssVsy9zTIJ6sM06mXN/6lassBLFIgfDmetiTLbj45SqE5uSvl/VztPAVKYL7EzjsGMaD7JN5075hJ/Gh+6sdiD6jgRGo0llX6MDybm4iZfiVN+IRc1GS7LdL347+1K7QCNPyHaeviHButsslhfOk0gRKniVu/oES/lX9ezVssmSJ5Dw0Z90Fa3xQSvFReVPiW9ATWLFmOTg6s/a/EcarNv0gh4lnNkISobfR3lXP6qPvdH9cE+w+X4zyUBLzJ/weCc0OFZhG4GSNqxMnA7aAuX2nu/DAV9xOlYjDSGy0EcRW6rU45poTfLWAKgIVzkpU= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB11200.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-Exchange-RoutingPolicyChecked: PBPzTMNlQ5ecVrXUODy6lghjRUn/XFJa0IerxxssZcyhpNSDuXqMN/1iLnAC9vqkKEkUyNHz/ddW9prPoSIzxNJvhGmKBWcYc4vY98yPULh9Q4C2GunyVH7OWrcRwUku76bFd/VMIBXkyAj8E9P91BpHeRx5DxVJV6ggHBjfeaAQkmdfp2Fgxe1Vqrpq+LZ1gi9mZzS3JMvFAZSKLrA+7vC6WuBoorkjHDOidI1+FBsWshEQCsadWK1asOf8WWUdPrJqeOwNtIkjQRftUsBz06sfnJomwQHGxVa5ESOwGvWKzOFWhxT23aclsXAOhrtjDLT+TPhNMukm9X5+e/sUig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB10172 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509FB.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: aa5a8338-ff75-4df7-43f5-08de9720c455 X-Microsoft-Antispam: BCL:0;ARA:13230040|35042699022|1800799024|82310400026|376014|36860700016|14060799003|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: YfTJoD2tFjcYwn4r9Nk9wv/5CRfEdkIp+AWyj3nL5HAP97BalRspZxR1tdAOsqLn3Et4vOhe0twHKr442zfAF5N2gT/lxt5s0DmRgm48Ryt+PP42o74TrYEdbALXpgvcQAL5QRImiow0A+0SAlw5Eca+UW/FXY70HE12J2YfOVIzh++7Z+QLsRf2w21dAhqnIKdQSHcBF64IagyjFQ0UdVT71ByTCS8gmaKbZ6gJyVfO5UKkjikFacimfUrxYs32xSCLdT2afZ4rAT5szlIZCmUX8pEi9BCg+VBsz0O2eCemkJzIp4Kxhejda1Wl4T0DvJgAhF8ILdSWijoZBGUfPOYM0pU817Lv83DnukpYhXKRdzwpxXMBXkrRjjaL3Q1GB7FYyb3RVXU+jTvSjV7k11f5xNN4yjJydqFTVOSip89WbQedEzxnTf9sxXvRcd13RA2rguH9w6IN+RC/MBc4dqOrcPpI1d1bpqmdR6US3wyrFjM963EPP0SaPjniKxBz2GhtRgNNRmhGQb4o2nfJsnZGuppjaatZ4GI73kd3c5N29pWGPuEOXUjwmwllySy546Bb34Nl6pekq/ymI+WC+CF3UUiA4YgumyqsTVrEj9pDUHS8SSbDJGBVqrNxvrTRyLaDAduqQRc9nToj4ydLv6ECVapEIWcKgVEwRuu7vZ5aa/nDnh/JklfLRhmqPL2C6JYeargv7YPQTHulNyiX7t9wEYMf46Hb/q3kWV1skGX18OwfVcGOEPl42IUI4VyjdSTUoGhwf3/JYEqbrriK1Q== X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(35042699022)(1800799024)(82310400026)(376014)(36860700016)(14060799003)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sK3Y2BV4tmMD2fTDbJaJq/BQxAh9p90LDN53JD1uHGcYlNfsqEnIstoXr3+iw7S61ZXA+kL6r4jnEEhqUeFRSiRWsYwLlm9spB+n6oYKczRkcAFNpAmSKKZ/L5e9xLCQm/0LmEg6Ghk1A0r0tugrDKNzYx61xUXM8mSXgAjAHtelv67URXfcD87cUTSExrFz+M3/q9VoeaVgYqgxa6sGbhHwabuP2wRlxT6jSputBY5VQgpJ9kmE5XLmjfp2v2XbQHmFn1eCaamBa4VVqPtI1FPI0mkSc/ccE0+1zodZYN8HKE+h9LZHHiGeUiZ5zgq91w+V8l6SgMhIMA9LOrP9MDzxGnqMmVPp+dTSGQpbQUbCJ93zQSUzabqPMRVYQHx1yCpcUXpX74KKNvcXmkRrog+BxfK/yNVWZDRo6U/r+XamTerBgG4M4u3blw+x70yU X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Apr 2026 16:47:57.0497 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5caf022c-042f-44bc-0e2b-08de9720eb11 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509FB.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8039 Content-Type: text/plain; charset="utf-8" Add an MMU_AS_CONTROL local iomem pointer to struct panthor_mmu and switch AS register accesses to that base. Interrupt accesses remain routed through the IRQ-local iomem base, while the MMU register definitions are adjusted so AS registers are expressed relative to the local MMU AS window. This completes the conversion away from using the global device mapping for MMU AS register accesses. No functional change intended. Signed-off-by: Karunika Choo Acked-by: Boris Brezillon --- drivers/gpu/drm/panthor/panthor_mmu.c | 35 ++++++++++++++-------- drivers/gpu/drm/panthor/panthor_mmu_regs.h | 10 ++----- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index b8665e447d95..0767e148369d 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -55,6 +55,9 @@ struct panthor_as_slot { * struct panthor_mmu - MMU related data */ struct panthor_mmu { + /** @iomem: CPU mapping of MMU_AS_CONTROL iomem region */ + void __iomem *iomem; + /** @irq: The MMU irq. */ struct panthor_irq irq; =20 @@ -517,13 +520,14 @@ static void free_pt(void *cookie, void *data, size_t = size) =20 static int wait_ready(struct panthor_device *ptdev, u32 as_nr) { + struct panthor_mmu *mmu =3D ptdev->mmu; int ret; u32 val; =20 /* Wait for the MMU status to indicate there is no active command, in * case one is pending. */ - ret =3D gpu_read_relaxed_poll_timeout_atomic(ptdev->iomem, AS_STATUS(as_n= r), val, + ret =3D gpu_read_relaxed_poll_timeout_atomic(mmu->iomem, AS_STATUS(as_nr)= , val, !(val & AS_STATUS_AS_ACTIVE), 10, 100000); =20 if (ret) { @@ -541,7 +545,7 @@ static int as_send_cmd_and_wait(struct panthor_device *= ptdev, u32 as_nr, u32 cmd /* write AS_COMMAND when MMU is ready to accept another command */ status =3D wait_ready(ptdev, as_nr); if (!status) { - gpu_write(ptdev->iomem, AS_COMMAND(as_nr), cmd); + gpu_write(ptdev->mmu->iomem, AS_COMMAND(as_nr), cmd); status =3D wait_ready(ptdev, as_nr); } =20 @@ -589,12 +593,14 @@ PANTHOR_IRQ_HANDLER(mmu, panthor_mmu_irq_handler); static int panthor_mmu_as_enable(struct panthor_device *ptdev, u32 as_nr, u64 transtab, u64 transcfg, u64 memattr) { + struct panthor_mmu *mmu =3D ptdev->mmu; + panthor_mmu_irq_enable_events(&ptdev->mmu->irq, panthor_mmu_as_fault_mask(ptdev, as_nr)); =20 - gpu_write64(ptdev->iomem, AS_TRANSTAB(as_nr), transtab); - gpu_write64(ptdev->iomem, AS_MEMATTR(as_nr), memattr); - gpu_write64(ptdev->iomem, AS_TRANSCFG(as_nr), transcfg); + gpu_write64(mmu->iomem, AS_TRANSTAB(as_nr), transtab); + gpu_write64(mmu->iomem, AS_MEMATTR(as_nr), memattr); + gpu_write64(mmu->iomem, AS_TRANSCFG(as_nr), transcfg); =20 return as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_UPDATE); } @@ -602,6 +608,7 @@ static int panthor_mmu_as_enable(struct panthor_device = *ptdev, u32 as_nr, static int panthor_mmu_as_disable(struct panthor_device *ptdev, u32 as_nr, bool recycle_slot) { + struct panthor_mmu *mmu =3D ptdev->mmu; struct panthor_vm *vm =3D ptdev->mmu->as.slots[as_nr].vm; int ret; =20 @@ -629,9 +636,9 @@ static int panthor_mmu_as_disable(struct panthor_device= *ptdev, u32 as_nr, if (recycle_slot) return 0; =20 - gpu_write64(ptdev->iomem, AS_TRANSTAB(as_nr), 0); - gpu_write64(ptdev->iomem, AS_MEMATTR(as_nr), 0); - gpu_write64(ptdev->iomem, AS_TRANSCFG(as_nr), AS_TRANSCFG_ADRMODE_UNMAPPE= D); + gpu_write64(mmu->iomem, AS_TRANSTAB(as_nr), 0); + gpu_write64(mmu->iomem, AS_MEMATTR(as_nr), 0); + gpu_write64(mmu->iomem, AS_TRANSCFG(as_nr), AS_TRANSCFG_ADRMODE_UNMAPPED); =20 return as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_UPDATE); } @@ -784,7 +791,7 @@ int panthor_vm_active(struct panthor_vm *vm) */ fault_mask =3D panthor_mmu_as_fault_mask(ptdev, as); if (ptdev->mmu->as.faulty_mask & fault_mask) { - gpu_write(ptdev->iomem, MMU_INT_CLEAR, fault_mask); + gpu_write(ptdev->mmu->irq.iomem, INT_CLEAR, fault_mask); ptdev->mmu->as.faulty_mask &=3D ~fault_mask; } =20 @@ -1712,7 +1719,7 @@ static int panthor_vm_lock_region(struct panthor_vm *= vm, u64 start, u64 size) mutex_lock(&ptdev->mmu->as.slots_lock); if (vm->as.id >=3D 0 && size) { /* Lock the region that needs to be updated */ - gpu_write64(ptdev->iomem, AS_LOCKADDR(vm->as.id), + gpu_write64(ptdev->mmu->iomem, AS_LOCKADDR(vm->as.id), pack_region_range(ptdev, &start, &size)); =20 /* If the lock succeeded, update the locked_region info. */ @@ -1761,6 +1768,7 @@ static void panthor_vm_unlock_region(struct panthor_v= m *vm) =20 static void panthor_mmu_irq_handler(struct panthor_device *ptdev, u32 stat= us) { + struct panthor_mmu *mmu =3D ptdev->mmu; bool has_unhandled_faults =3D false; =20 status =3D panthor_mmu_fault_mask(ptdev, status); @@ -1773,8 +1781,8 @@ static void panthor_mmu_irq_handler(struct panthor_de= vice *ptdev, u32 status) u32 access_type; u32 source_id; =20 - fault_status =3D gpu_read(ptdev->iomem, AS_FAULTSTATUS(as)); - addr =3D gpu_read64(ptdev->iomem, AS_FAULTADDRESS(as)); + fault_status =3D gpu_read(mmu->iomem, AS_FAULTSTATUS(as)); + addr =3D gpu_read64(mmu->iomem, AS_FAULTADDRESS(as)); =20 /* decode the fault status */ exception_type =3D fault_status & 0xFF; @@ -1805,7 +1813,7 @@ static void panthor_mmu_irq_handler(struct panthor_de= vice *ptdev, u32 status) * Note that COMPLETED irqs are never cleared, but this is fine * because they are always masked. */ - gpu_write(ptdev->iomem, MMU_INT_CLEAR, mask); + gpu_write(mmu->irq.iomem, INT_CLEAR, mask); =20 if (ptdev->mmu->as.slots[as].vm) ptdev->mmu->as.slots[as].vm->unhandled_fault =3D true; @@ -3222,6 +3230,7 @@ int panthor_mmu_init(struct panthor_device *ptdev) if (ret) return ret; =20 + mmu->iomem =3D ptdev->iomem + MMU_AS_BASE; ptdev->mmu =3D mmu; =20 irq =3D platform_get_irq_byname(to_platform_device(ptdev->base.dev), "mmu= "); diff --git a/drivers/gpu/drm/panthor/panthor_mmu_regs.h b/drivers/gpu/drm/p= anthor/panthor_mmu_regs.h index de460042651d..4e32ab931949 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu_regs.h +++ b/drivers/gpu/drm/panthor/panthor_mmu_regs.h @@ -8,16 +8,12 @@ =20 #define MMU_INT_BASE 0x2000 =20 -#define MMU_INT_RAWSTAT 0x2000 -#define MMU_INT_CLEAR 0x2004 -#define MMU_INT_MASK 0x2008 -#define MMU_INT_STAT 0x200c - /* AS_COMMAND register commands */ =20 -#define MMU_BASE 0x2400 +#define MMU_AS_BASE 0x2400 + #define MMU_AS_SHIFT 6 -#define MMU_AS(as) (MMU_BASE + ((as) << MMU_AS_SHIFT)) +#define MMU_AS(as) ((as) << MMU_AS_SHIFT) =20 #define AS_TRANSTAB(as) (MMU_AS(as) + 0x0) #define AS_MEMATTR(as) (MMU_AS(as) + 0x8) --=20 2.43.0