From patchwork Sat May 11 10:43:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662317 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 5B7D554FA1; Sat, 11 May 2024 10:43:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424239; cv=fail; b=FZI86eU+/ICUnIF4xV+P1SxpQ9yMDw+XAa1btY2ECM8Bce1YXGf0wJNBzqOg/2q/TDURWY8ybpCJ5vYLO6DMJ+Ccj75JFPvbXsCuBbmTF2ltV5ieRrnL90V3YeWsYXndgq4jZhFFIi+d/1sgl0zXzKfyiM3vJkAvOq+9xlDqEfM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424239; c=relaxed/simple; bh=X9kGyjX0A023sa1me5ydHQ4kkpSaw1f12Pqld68DG5s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=nwbFGuuIbCmXLhWCEnCjsYZ61/vBNK2tdEghp4xjbqkXiAQgGIq7hQ6fsJMmNhMRYkNRCbHEftpOUjv7QBnNYx7OuKUau8DlLZG2IRRPdrhmZFkxuAbItWngW7KdqjWlDPd3xUo0JfilIRIO8LHKvBtgn3YUY7YsieGiQoyDaOg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=bxHyoLv7; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="bxHyoLv7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YfVSsIGL7xikHvLDkhvPEFz0J9jvqGuE7WoWLtrJubmjNIFZfw5rrg0KdIJr5eiyvM8k4VgDWK1dy25zGVi1eKwnxaYlahh/aYZLfJaiXhrTUoVRN4O87IbgT6TtrudtEIdNrqxrsgEJrkHAt7UmwCWwMqoUgZm2Stx+y7lgQSGGA84TgJpy+cYTGfRriXT++8EKM0V82XdHz191SS8YQmWBVA9nZ20fhm/v8GC5gDRaXaOQnddMPBKinSb3i4TDQzUsBB3hg7U5hUHxQL8o18l+Ajyba2DHJCvSBPiSe3zaSmuc1vjbH/EyhDBihh/EpdG47i+W1eb/zFx7UoZK9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=+MZzWBaZUGJjKQYqoFCtII5h/zY5rCDVY9jpCuKraKk=; b=GchwZr+Iu8bJH6+XgxFlX9MnFPDCoish30W43okEwsU9qUA/Ct73YaJVFrEgziojSceldzaeDOzm6AYxuBgA/NVKd0DA4XX2qfUlhIUCeuB4QZqSyCtEr/+ImnEg+WEVyTtQCOM50O30K8E5FyWsaw73QsrGhjZfn70ZN8fz/Tpg5I0w/8Sec7s3Eq/rouJlg25w+visRtH05LOZTiPuOGuTZhUkWOm2l/PaTY6zHH6dQr8KSLxk5vzylon8uF3M7/kZsv3l+1/++KVMFeRRbCus1OOjGP5OhMic/yDk1mu1GBhT2p27ZtBYGlczF0582vwaRLZSFXEvqKKdSB0KEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+MZzWBaZUGJjKQYqoFCtII5h/zY5rCDVY9jpCuKraKk=; b=bxHyoLv7bXpVnSJ1RV9wP93Jzy1aJTKWeyi/RFn+6dwPAYcK0HOqFHtAq5zds4w4DRcS2waNfpEVpYePWrBZTBgapJiKo+q5kH6Q7wD+UAG+m01pzLggZnpqkp1bNCtr9A+D23/BK4oD4350D5d3WuPB6UZPLjvv6e8uv6ciu0U= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:49 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:49 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 01/14] MIPS: CPS: Add a couple of multi-cluster utility functions Date: Sat, 11 May 2024 12:43:28 +0200 Message-Id: <20240511104341.151550-2-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b1f8ae6-dc69-4f12-de05-08dc71a73de3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: XFNcU5rtWIwo9J+53j09LXrh4P5iE3KMSOIKrwglXaPFIjlyTWlKz0R8l3cSAqp6DpEFLV63AlI7+e8c9To20x4pxVRNbO/ib5e/qu8tuP4NZukEF5wC5T0xRoSq+nVH52Y1XLuMYzHxvE33/T7HcRmGy+yikT7D+4Ji8m/kLbTUrflC3lMu6M/Apni8JONyPg+r7ChwV9OPwvQJLpQj4QZp9pnbtfvyLti9uhikULh8X++E9XEyOv8R0ni3kI4j1OmvYbMqkC7Jf8j1C4YUBu4sSFEdvyaze+4s1PbG37VGKepXLxlArX/quPWZqpxm6iRyGzne2AWj8lMAexVnSva2RNHMTWrZwAz5Y+67TtXRve4DvtzxiKL3yP1CezRHzT31KKDY46myZ+FcvDf6caB+3RuNgm55pwxsh2c4hG/0Kt28vgSJml9UR435wga56HPz7A+4we2LU5/1MkbVm+kUmHGIIb5i/drKO8p03I+jifVX62+zbvu9mbEBgRTFhvpLYdnvD2wUtYj0WsOqGLVXNB9b873HJpUtzkJM4Vw+XdwBQz2D/4yQnSmgXeWQDGn4rVPPZ1ufTdgiHo/cM5Cvwmy5BqDaT3YCsxpVhohWz8e8XwOrkuWLuoSG79qVa3MHQ6G0Hbk2I8468D4BDBgLplhIXsjeeZo1vWX3fu059nylAI8hpgQS+I1G4yB4uLn94dyBmaYuhyZO3lM3QcLSNJkp5ac1ypqYa0V//4Fn5u4DqeMlKUJLFFIh0D+4qLutpY20obanWuJNk2d2QB9Zk6OvJtUCvXljYi14t98+JvAsRzuRoChwQQHzhWtXwv86zRKZnw8POQE21uLcNQqUksSVtvStHsHoiaRMm1PUb+C9RoLQu5zH7oxlDhI2u4LvycleDR9RqJWch3o2XMM4ymj6Z+IH5aWNqPybCBOcMEZAomae/wSa2+c9iDCZbw6AHIVbxjxd+5kJSdLrtNkKsJhJIDyLfUfovAPLT0lLvphKv84ZSOB9SSyWkzduQGe4tVjWfrzb0FHsnq4Fc3D9RQTPZ2fwGo9OLfxQ3tFA5uklN458VgjriLGMpArhsNm+sEGratC5IaEOK84FYc/K9bMX3vhInWb+qDJ69xvOyPnzEo5e/pwvogi91smbgQDWs9YyPXjS5Uvzt9YHnyQf+dl4jnqvQoC6p24Dy45dBVUL7Cpc9ASMwDC2OKRM88P6eYxv1v67gRuFYDTGKM1L7S7RzLYPeUECwBrb9CMnctyVtjs/BpWPaR2TqCPGJ73XbfjRwYR8pzl2m5Q/mGIdyv88gqJoyO0bRguciiFRxYyTM6cn2X4q7gzXYBOQiirhhPrGHp5gi8cjVS2f+A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TbIzEslE5HaXz8OYWX1ZgqIS9Dkqe1Dp5bKrVEjJJYqmPl7OwKxLpiNw22CfcgXCifZQzHXed1XkWcmFgzZzAagVc/l0wWSWaiK2lVNNX+5nbZPDAbduKg1uLbKEiC8j1+U5//9g8ER/G3ZZ2AWzAHX/tWp7T+as/BP8E8DaO9t6neU44ck607vbEDYij8X1dESGNqe728IqEk08KrRMErIAj8g1RLVXPT7cMwfyMVOWXgRGEEmrOIG7nNLSLZVuXlyhvHqyuMyJadvW++mgFWCW3yyoQQ+hP1pD4gjthmZMpNBNvQuKukTvvwkF/bKd7sIgLIZTo1GYyASxMtc218JdHF6Iy5kmT41R09l4KYJtNTMm+OX5fCEk4upPm15FlJwdvS36JLdDuTkTqAx146eCdTMazUrU5qkQUjrQYm0bDLt5RJxQjSQn5NmzBKokK0l88sf7JZa87yHuB6ydAN/tNnlWtIQhVVC/8ccMT2FeRz0GivNtR3Dbce1y2pp9mRLpwAGcAP+3kIQnYowR00yE3xINoiVwvTsVKWSldfDQoi7C87i+XcnR1AveEZOcm67abwpS7Raj8GfPt7QWHrXnMfnUGFQtLFgSjMX6dgqa+11c9EY4hK86YwVM8YgJI8saB3HHHDTvRAciDkawHPcHe4+DdrWjxIGdHAAXRixmHm01QW2BSYFvzgoLkNzJv2B8t7HTDsw6wsKQHMGZFFEiUL3dwPHQieC4DaLsVb2d+xiDq++V7movSMGmaTNLhgsXA94Nx7nnRvQS1kiO4ekBQR/htkxFEkwBH3w7QpGDZ4PJkKvjJabd7G4Z0I+CmFM2FgIdotttbTsc0iOngBXoVVEaxhZu48aFMKcRZC0rv6OcYtC61qePY7XzCQAf+S4S7FxocAEHJ0UvrojtEv3TnpK+tJROmTev5VkDsCfxXJzI8vlS0BOXmK3m2ZtkYK/AJGqt7uJ4GrqsWc5YvWX6ETMV+1Rg3E9G7/YG9U/hef7NzO0kS+xWNriOSEdddiDvQSFA7aUHX64g+7qXliOlC9woaDDMQGTpGqnwY6zkFaKJYBVeGVAFgrEUh+s9wUUg6uCEUcthssPv12tW4VF3cc1unlIg/t1xi2cQJwUOFNol6KWuqPt5uvhpRGszOCjXQr29k4aXMxA3SaPSGfEHYbE3QMT5OnKKXmlFgZqcc8/CbirHRaoLZw3YwTElxxtay51tzVVpJD6xlE9+XyPGWeh3es1mzt7e+ciaLHYmD7Mt5Q3SPit/Rc9/+k9N3IMEACMPDnKboLhawwgukT78RzOaw/hiitrO2LG4WS0k8oi+bNEzOHQh7VKC4zM3/BN5YZdy/6IsRcM+4RvyEyziQ6g+lxJMwrUmlTKJKDvxHvPLaXkxaOSjPE1mmFq0zJv5OsmU7+a0Iq3LA8H+WC4vtmaNkaHMB3GSJG0dMiGN4ML3VymkiYxBOC/0D839LuX4YKJcitfzeAKhJik/vxH8jl8iuj4ivxJWZ7rmJOcCOciQf13w4MB0TC36WhDRWmTggOnoU42XbPocBH/QG3z3C7qjvyYBOT2PfHGQLI9llDPUpZmD6XXVUhdYOW0+s+pro7bkjN0YfVgYFNN5NQ== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b1f8ae6-dc69-4f12-de05-08dc71a73de3 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:49.2340 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sbzPFbYN1x07Xu6VaVie0BPSkctHOd20NmELFXXJqO5RdiZwm5xCmdnEYtUCMB8UmlhsMSC2yJ7miAqVAJvUGygxsvdvZZQUu4WKMFDbi3M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton This patch introduces a couple of utility functions which help later patches with introducing support for multi-cluster systems. - mips_cps_multicluster_cpus() allows its caller to determine whether the system includes CPUs spread across multiple clusters. This is useful because in some cases behaviour can be more optimal taking this knowledge into account. The means by which we check this is dependent upon the way we probe CPUs & assign their numbers, so keeping this knowledge confined here in arch/mips/ seems appropriate. - mips_cps_first_online_in_cluster() allows its caller to determine whether it is running upon the first CPU online within its cluster. This information is useful in cases where some cluster-wide configuration may need to occur, but should not be repeated if another CPU in the cluster is already online. Similarly to the above this is determined based upon knowledge of CPU numbering so it makes sense to keep that knowledge in arch/mips/. The function is defined in mips-cm.c rather than in asm/mips-cps.h in order to allow us to use asm/cpu-info.h & linux/smp.h without encountering an include nightmare. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- arch/mips/include/asm/mips-cps.h | 38 ++++++++++++++++++++++++++++++++ arch/mips/kernel/mips-cm.c | 37 +++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/arch/mips/include/asm/mips-cps.h b/arch/mips/include/asm/mips-cps.h index c077e8d100f5..fa71cf3a25d7 100644 --- a/arch/mips/include/asm/mips-cps.h +++ b/arch/mips/include/asm/mips-cps.h @@ -228,4 +228,42 @@ static inline unsigned int mips_cps_numvps(unsigned int cluster, unsigned int co return FIELD_GET(CM_GCR_Cx_CONFIG_PVPE, cfg + 1); } +/** + * mips_cps_multicluster_cpus() - Detect whether CPUs are in multiple clusters + * + * Determine whether the system includes CPUs in multiple clusters - ie. + * whether we can treat the system as single or multi-cluster as far as CPUs + * are concerned. Note that this is slightly different to simply checking + * whether multiple clusters are present - it is possible for there to be + * clusters which contain no CPUs, which this function will effectively ignore. + * + * Returns true if CPUs are spread across multiple clusters, else false. + */ +static inline bool mips_cps_multicluster_cpus(void) +{ + unsigned int first_cl, last_cl; + + /* + * CPUs are numbered sequentially by cluster - ie. CPUs 0..X will be in + * cluster 0, CPUs X+1..Y in cluster 1, CPUs Y+1..Z in cluster 2 etc. + * + * Thus we can detect multiple clusters trivially by checking whether + * the first & last CPUs belong to the same cluster. + */ + first_cl = cpu_cluster(&boot_cpu_data); + last_cl = cpu_cluster(&cpu_data[nr_cpu_ids - 1]); + return first_cl != last_cl; +} + +/** + * mips_cps_first_online_in_cluster() - Detect if CPU is first online in cluster + * + * Determine whether the local CPU is the first to be brought online in its + * cluster - that is, whether there are any other online CPUs in the local + * cluster. + * + * Returns true if this CPU is first online, else false. + */ +extern unsigned int mips_cps_first_online_in_cluster(void); + #endif /* __MIPS_ASM_MIPS_CPS_H__ */ diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c index 3a115fab5573..3eb2cfb893e1 100644 --- a/arch/mips/kernel/mips-cm.c +++ b/arch/mips/kernel/mips-cm.c @@ -512,3 +512,40 @@ void mips_cm_error_report(void) /* reprime cause register */ write_gcr_error_cause(cm_error); } + +unsigned int mips_cps_first_online_in_cluster(void) +{ + unsigned int local_cl; + int i; + + local_cl = cpu_cluster(¤t_cpu_data); + + /* + * We rely upon knowledge that CPUs are numbered sequentially by + * cluster - ie. CPUs 0..X will be in cluster 0, CPUs X+1..Y in cluster + * 1, CPUs Y+1..Z in cluster 2 etc. This means that CPUs in the same + * cluster will immediately precede or follow one another. + * + * First we scan backwards, until we find an online CPU in the cluster + * or we move on to another cluster. + */ + for (i = smp_processor_id() - 1; i >= 0; i--) { + if (cpu_cluster(&cpu_data[i]) != local_cl) + break; + if (!cpu_online(i)) + continue; + return false; + } + + /* Then do the same for higher numbered CPUs */ + for (i = smp_processor_id() + 1; i < nr_cpu_ids; i++) { + if (cpu_cluster(&cpu_data[i]) != local_cl) + break; + if (!cpu_online(i)) + continue; + return false; + } + + /* We found no online CPUs in the local cluster */ + return true; +} From patchwork Sat May 11 10:43:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662316 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 601265336F; Sat, 11 May 2024 10:43:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424237; cv=fail; b=mPVwM34VpsjDuczHaVX54WDdFUOB2nRKJv66/Z14IJD1oj3TtA7Twj4OpEqszJVJj9cPtO1EQXxfgs7F1jlRFKg2q3ABQB3s4RqiiFKw00XPn7720QjlHSuHs3wSJhbotxENe3zZdcsqV46C228xiB3fXcofF202eYTXEGG+WOY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424237; c=relaxed/simple; bh=l0ulcs+vWTS3DGUrNH5gUx2dGc46FGSqNoEccldSWV4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pJ8Tjz/c7beFtc12/Lk2b0mr3fzgu1ssx5kd1NFrnfvpt20faQj68fWVP6o4W5YWIKOP3aQmEG36FP7+1tmDNEUuWgukJq/MXkwPcBHP5AobIdz4kIoCkAVPN9KogIhL0jH5AeX6hZb80tKu5FoDbsGxaP0eACnDW76qpme4Qqw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=La+Vw3Lw; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="La+Vw3Lw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CIIwT62J1CRTqbHSFO1j2PlVkLX0WAalVIDJHjxHdcqXftKom09JLvw4CEzLj+2VML9JH5cnbEGUp2rnfOVgVVsM0T5MJ8ivSeUrkTh1wBaBw1K7/Sdk65GdYLE8JH5iWd+906CAkcSZMr/9thNkTSckg+Tk8gFo5oZ/JJdsQ/0RpgPygIDhaVX7TA/hCewrqnlDv12259miet0PB8acbWhVeyK/SjLjaRmntDuN4zTIuv+5cInJhXaAKz7AmRo6beC7DgTqlkj5mmf9fWJxCNZLPsv3FbhENaOThBMazcyqKjyh1SgAMc6dr657fxjipVofUr6a+CRi1JN+0rUyBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=J441UACOmM+plHFUNs2UCVgRdvQT0qPnSeGsc/Q08Aw=; b=bF6j3Zeg4J+iefwMGvkvLwwfqsURIywb9lS1ynCIIvgqxxI5vzNEzqWfTcMCq0dvdfdeGWWosKCBroee791/2hOXj+vUnmStl4XUTwS1zl/R9QHJzSxkSkVp73f8J+cg6YWt9+uIsWgZ+rqMuMLwxhbO80O8VOIiC0+Y15PCeVfOCRAb3WSJ9PYIQ7/lkL9jvW6NREP3p2LTIU8VinTFST8IDENVQTZfYnIPLlSuP+vkSvT3tNHIgzMdVe15D8aVp5TBbMu055m8DJqHfws5DY9CTdlYMDoyBtzmj1MlSYXzR6uQrAGFl3C00z5yb6kywhsv6O+qyda0Thba6L3x7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J441UACOmM+plHFUNs2UCVgRdvQT0qPnSeGsc/Q08Aw=; b=La+Vw3Lwdc3gt3j0VZcfkopwxTplGxyLgYi6LL/wF9C0UMqk+/LB3SPNaa6Q1GkrL1jOS1hdWhfOy3PIZTItJqmhUtsIY2CYfeB+AHT8jeYopmvNLiJHIsExIehyNI+Zk+0AnPt+J4aDus71jJp7C64kwPwkDfuqjjOWW5jGu0E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:50 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:50 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 02/14] MIPS: GIC: Generate redirect block accessors Date: Sat, 11 May 2024 12:43:29 +0200 Message-Id: <20240511104341.151550-3-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 51756a92-7ff1-43b3-70a3-08dc71a73e72 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: Z+LkISxbY8VHj6Uk3K1jy15LhUh9hBdmpRY9dJyLVZs2EOq+fJ1k//UyMXyr3958fdWkFACPiyGFDjQVZDnGztoY9kNz4B9MMbJZuVH8VB0P1RzMuR2MbYbo/bmOPKHC6s//A+MimzPjQ7pmjUZx4Y7gdSpTvOpWP7V0icISkKY6xLvCPH8+UY5ZpDOi0EgWVVxqh5pq3wzmkosZuhbPA34OJCQ+inhYjen5EEnMfhvGm/VPLX516hL1kuEM7S9fAIm2f98+3DxPjx2SwTvzLPpiRhkkBWWflTdndrmfT67LGEOYd1h0jCNeTKWkvc/ERuaTHJ3BYzMmLcblqGbRbATPpTjaAcQqyQ6FQcqF0FU+apFwaEuPCXuvLxpkaewIMw4c7bxchXhWX1bYtf0shAVdBD1lwWzJIz8NZfOgqUVQnCv11X+YZn5pqfXKkwniLggggNBXtGm5NA8IuV4sTdX60ICu1ghHc3JPm6C5PXJNe7hVgxLYrygj44ybfSJaY4O0P+qglSkrYfebTA7zcOsseeyt5rh0q3LI+M1E28gdnJHH30eGOfvu3UQjtVpnm824oOUQ1BSYqU3iqPCWvLaR+FiBG6kVH1BZciPDYvzJ1WrGcD8Riob/M4YPJPgaab8EOmOV9OFgXWyGuwsWZ7AM4AemPVdEwEnEx/9A1P01izJYgbjsNZTQPin3eE4J8R/deuzJgxYTcKc8ukvfMG8zl/gIY895W0HrwYDx/mG/+BRHeO2lYbjMnKgfhZzwedcsfoojw8+6pMWlynh6IV4CHGcY6DZ1jvb8rll3HZ+ExgQ6g0XsT3UQnYqL9SfsPavvcWXFaKG8oF2e9EEB1UYA12x06/sIkVcfhMgbT/xk8t1oD7+8D/l5ARNLdDu58XFLD/Fv+2MLYXch6m/J25lcI7VUI2URuOhXq1E+CHbTr60G0223zOnE9L9NR61CG7MRDIMUBX9ewQ2P8DnAWsAtPI/o8LFdxX56rhzTQ5PIFGGCQS976lo2RHKT1ss6Rwog8aY6caqu5Gv7/4yQn0t4CUfOHEUYOqblG576+uXge+44FEWZloQWfIN8Sh0xr5rFn1fN0CC4T4X0lENWu578ukXkGk3Qnlpt+6oyTbvLXo0RyRi1WGLKaVBM3/ZQrHQ+RLVTFfvKulF25GhUHYC3BGxa4BTeNuqkUs06U66ClyPIDPmtkhTlyU76/IurIN+K7x+bs9iTG2sPJpQnlVoj/0tqEAk0zaZnaw1c7/o1/nqkY6O+/rJP7BjRfZJEHAAF26epDzM05gR8tN3ppi0ATPqiIjrmUIDY9ZtOHXvwgIr1MNTCaxg5JptSqmYV9r398lHpe2rAZuWyMCcMaA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UUXb9FGQWhIQUDfma9SZRSIZdEFZ7VmrD52y+Gx7pudZ2T4Sea361k2KgEQJ+w1zRG7UbEYYIuE1sn2hl4SVX93lkv06wg30nCrSiwYwfQrjL4ehOW9oxApFzjwovVVPEch64Spi13t7BJycSFz5ki+0dus/yIM9fM7a0Hc38COwK9H0IDdlLwH3t65ssFHvf7W1f7bqGdL3fjz6ojxvJD5P+BbSYWTK0s+OGyzPdgG2x/r+2hu8KdIZCsSA9P5cexiz8/Tuv8r9llBG3hls7MpUAnmRPkFzbEx1v4G9j2+njV9u0ZxAZdRQylK73wTCKnFJkhi2MnLHAL+zM+d3+RE6ZACY/+CGRu3aAestDbR9/4K75pVU6Vn1JYVTGLqL27XZdXcdGcZST3HPUZRWEOo6cUHjAphJhHY/EId49uQJs+KyaD1gMt4hMwbO1Z9ab1xst/1uktw1350C4AV3WbvYKfrlhI1RhdZNXzWpnKbVrpvHnxTuGjm+OwyfOGQ9mr0olcfMqEK6xQG1gR7fguvLibrTIz7APj6JW5TulR+yurNZ+/Lf/6YRth1LKA1W4yLjOx7c0tlU1FzyCZWK3GlNO5vORZpp0CLqfZnyIyIIhrfyzbquFv+EZWsHUCHDbpd5M6hUYXghqm007bHPcImKWzM8mB48mCNzPUW2bQPqHZRHbkf2wdHWSd2ZuYmcYj3KF2tBlcCimpMx4iWlpptLs4k1km2OzOHez8NP0pe109CENyExTiX+B5qe+gEh4oWmeZJoY9yfIGumpHR8tfGzPL+9hT7KsRsnaAFhuweoS0B4Z1s1WMS9pVdk4Arg7F9yFSp7BM1SW2Umz/LGPitJfV0OLb4nyjRRPIqfKjHSQ1gYEubYnVegO4N3pXbD/bxT4QZucSi1uJq+CO8HOzQG1UB3lP0RiUzkIfcWH88A7pGqUAxKzAWp0h7dpygQTzq+/7JI+bgCos7OxFoDZh37bXowCUoLzwvz57rDb/XtEn8vFmt5YEeplQz34oeu4W0ZvFWhxd5qi27nQbd/QEQtR9cqPXYvBlys6hHXZbAUv+aWiMI13hCRI5c4i37A2ZJmRJTnc3cjSN3QyMUrkw7xmaqz959bRiDfxdj22d19+R1PiZQxU+RhJ5DGfOtTOPurIvVHc/mTK0O6EP8f52hcEK53RYgkpzx5KskXH+MlPsjOEZAg1d68Y1t0QJLAnyG0slwoeC3x6qWT17sFGnRw1rrcweJPte1FxPALHqmZtodtQQ0FocoVkIq3ktiqDJKB6sqt2GMZZcZQTO24zRT7ZO3dsbn+KmN0MxlvWd0vZcHeBRF9s87UiBX+8dyzKi5rxQszTgCa9+0GCsp30PouqievAEsyU397y6Su7sryHBjQ9LEmypYL3CNSvKpHh2ggrm2eU3PchIlnS/Ae5pKvAHXdwjl3DBk4qc35iP8GLpq4LfLoq2/8U7AVuhG2o+tilNWETIYwkgPnb6N56Wjo/meFMdUzqaF6I59TU+FV4Fd5aWIJnbAoInoJ5v4uHPOAWtuEJe0+Yh+vX1yVHwGz5btM7vmLiYt7xg5NEarQdYT8YupZK7PGHVBqUsa+r6irqx5MlmnFv1uaFBjJfA== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 51756a92-7ff1-43b3-70a3-08dc71a73e72 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:50.6741 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Z5xiCgwIGGFM17toWaPWTLwZcKJYJJv2W7rs/Ji/fk/KljKyNIKEkm4jLVRQOIlD8hPBpqi6IF8vgL2u4YVdIJ4bXMOXbtZQ5HzXM94h0lk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton With CM 3.5 the "core-other" register block evolves into the "redirect" register block, which is capable of accessing not only the core local registers of other cores but also the shared/global registers of other clusters. This patch generates accessor functions for shared/global registers accessed via the redirect block, with "redir_" inserted after "gic_" in their names. For example the accessor function: read_gic_config() ...accesses the GIC_CONFIG register of the GIC in the local cluster. With this patch a new function: read_gic_redir_config() ...is added which accesses the GIC_CONFIG register of the GIC in whichever cluster the GCR_CL_REDIRECT register is configured to access. This mirrors the similar redirect block accessors already provided for the CM & CPC. Reviewed-by: Jiaxun Yang Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- arch/mips/include/asm/mips-gic.h | 50 ++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/arch/mips/include/asm/mips-gic.h b/arch/mips/include/asm/mips-gic.h index 084cac1c5ea2..fd9da5e3beaa 100644 --- a/arch/mips/include/asm/mips-gic.h +++ b/arch/mips/include/asm/mips-gic.h @@ -28,11 +28,13 @@ extern void __iomem *mips_gic_base; /* For read-only shared registers */ #define GIC_ACCESSOR_RO(sz, off, name) \ - CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_SHARED_OFS + off, name) + CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_SHARED_OFS + off, name) \ + CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_REDIR_OFS + off, redir_##name) /* For read-write shared registers */ #define GIC_ACCESSOR_RW(sz, off, name) \ - CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_SHARED_OFS + off, name) + CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_SHARED_OFS + off, name) \ + CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_REDIR_OFS + off, redir_##name) /* For read-only local registers */ #define GIC_VX_ACCESSOR_RO(sz, off, name) \ @@ -45,7 +47,7 @@ extern void __iomem *mips_gic_base; CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_REDIR_OFS + off, vo_##name) /* For read-only shared per-interrupt registers */ -#define GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ +#define _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ static inline void __iomem *addr_gic_##name(unsigned int intr) \ { \ return mips_gic_base + (off) + (intr * (stride)); \ @@ -58,8 +60,8 @@ static inline unsigned int read_gic_##name(unsigned int intr) \ } /* For read-write shared per-interrupt registers */ -#define GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ - GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ +#define _GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ + _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ \ static inline void write_gic_##name(unsigned int intr, \ unsigned int val) \ @@ -68,22 +70,30 @@ static inline void write_gic_##name(unsigned int intr, \ __raw_writel(val, addr_gic_##name(intr)); \ } +#define GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ + _GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, stride, redir_##name) + +#define GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ + _GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, stride, redir_##name) + /* For read-only local per-interrupt registers */ #define GIC_VX_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \ - GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ stride, vl_##name) \ - GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ + _GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ stride, vo_##name) /* For read-write local per-interrupt registers */ #define GIC_VX_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \ - GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \ stride, vl_##name) \ - GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ + _GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \ stride, vo_##name) /* For read-only shared bit-per-interrupt registers */ -#define GIC_ACCESSOR_RO_INTR_BIT(off, name) \ +#define _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ static inline void __iomem *addr_gic_##name(void) \ { \ return mips_gic_base + (off); \ @@ -106,8 +116,8 @@ static inline unsigned int read_gic_##name(unsigned int intr) \ } /* For read-write shared bit-per-interrupt registers */ -#define GIC_ACCESSOR_RW_INTR_BIT(off, name) \ - GIC_ACCESSOR_RO_INTR_BIT(off, name) \ +#define _GIC_ACCESSOR_RW_INTR_BIT(off, name) \ + _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ \ static inline void write_gic_##name(unsigned int intr) \ { \ @@ -146,6 +156,14 @@ static inline void change_gic_##name(unsigned int intr, \ } \ } +#define GIC_ACCESSOR_RO_INTR_BIT(off, name) \ + _GIC_ACCESSOR_RO_INTR_BIT(off, name) \ + _GIC_ACCESSOR_RO_INTR_BIT(MIPS_GIC_REDIR_OFS + off, redir_##name) + +#define GIC_ACCESSOR_RW_INTR_BIT(off, name) \ + _GIC_ACCESSOR_RW_INTR_BIT(off, name) \ + _GIC_ACCESSOR_RW_INTR_BIT(MIPS_GIC_REDIR_OFS + off, redir_##name) + /* For read-only local bit-per-interrupt registers */ #define GIC_VX_ACCESSOR_RO_INTR_BIT(sz, off, name) \ GIC_ACCESSOR_RO_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ @@ -155,10 +173,10 @@ static inline void change_gic_##name(unsigned int intr, \ /* For read-write local bit-per-interrupt registers */ #define GIC_VX_ACCESSOR_RW_INTR_BIT(sz, off, name) \ - GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ - vl_##name) \ - GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \ - vo_##name) + _GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \ + vl_##name) \ + _GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \ + vo_##name) /* GIC_SH_CONFIG - Information about the GIC configuration */ GIC_ACCESSOR_RW(32, 0x000, config) From patchwork Sat May 11 10:43:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662318 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 784A854FAE; Sat, 11 May 2024 10:43:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424239; cv=fail; b=j0DYw2s+ltdUp24R/ljKLOZJ5KytVdReuZwNuT7koPbXgA2fi7e/+hPKvCsOuCM2N5q0Gduk2ayZMig66aeydlz8Yc4Snj3dV64beOiKyRe1RWED3VBHDkkga5DerKMs6t+hALYvTJQFSptYthl+4hT9yKpx73n6W5C701WxV1k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424239; c=relaxed/simple; bh=TsoCr+HworydoxYpF2WjRxJ8ajnVwpNPFsc8PMwau6g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=UZoCH4u/ja4vgujccPx3+Dg9plWPvjMwESOsaMvLNUSwr/Sxp9V8Ul8b+58J1YLQmlIz8QhYmnHb0itkjsgrGHgpHPJ1PN98kIyQSLbxJWnemf2snSDiD/EYbthPcgzlxpCAuBwSahN48mDjgLyBUzQffGUbsATMMw2JJI++i1Q= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=dFRthAr3; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="dFRthAr3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=daLjlw1uceMtm4wtVj1ex4/E4ohE0rnO3FHmxLdGaPVFVXLtJDHyhbvwqbSUeubCxh01wIqTMWCLTMXmPjI5VWeA7M7OchAU5dYbMHnChvFrQR/4ASouGloJP6n8cxYNjvpsOSwYH3z0VAB5ePS2UwMz6FPidi6DUWZa0837ExIfTbiR1dpizdYQ8NmKJatOrmP4XYeZkNNorxjMavZApwzV2Uws6L9yFTlRiFnedBNxco9vsRu5yxwWyumiH0ksDTBAdoX8aRtImHscbEA7LB3hrl7Pk7LBjFlZv3YPdqjPYnl1+yKAv2l5HNVfCdfHoC0tpknnsHRj2HEwzh8mgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=6L+xQIcU/M2AFE9gICKDEMemb0+dOzf9wEODUdS5KNo=; b=CDMeQbj0naKbr4ICP1p2EaelK0tJaOwfbOzlF7sic6++soba7uf3wwnhU2891ik6Owxl54hAUaSOqYeZ2ohdR9nAOu2YRz4lhOU28J6EYRykpkXtI/iCWMExTtrfMZtrQeb2HdHiT1XFlIrB+4LKQEA7ejeFfkSCuaTh3MqYX2+C9S9ige4ApGY7G3cBvisbOmHh0ITAH/65fLqdS6fdPT7PuMPqWb+60lVWsmduUttd4PmnSQIqrC2dthZ7NKJK+lMe3aA0ZAf8xaNNaq9O5jQBaD/1ZMSS846m/2bn/OCoQ+kQ0TjEsy+GjwEZYHc29x2G5y2/UgEC9Y5ylHhosQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6L+xQIcU/M2AFE9gICKDEMemb0+dOzf9wEODUdS5KNo=; b=dFRthAr3wBLi/XmUD4s0U3lhOCv4jF7tT5AwRtsl+nv/3O8Pph3iam+y8v4h0URh2rBqjueKkK4jKXE1sYH4cMc5+lGs1DnMDnc4Vka9BZ9QJru9wclTHfPYGX/YZjL4L7bRewTxXykHcjJk+zBflpSN9I7GVfC3SLuv4lIKEKY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:51 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:51 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 03/14] irqchip: mips-gic: Introduce for_each_online_cpu_gic() Date: Sat, 11 May 2024 12:43:30 +0200 Message-Id: <20240511104341.151550-4-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: b356cecf-4f6f-44da-2fa7-08dc71a73f4f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: i1FtTLwbm3FICeSvZ8Ox7HPomZ8xW0tPpmBhLXeAim5o7jlcS/4M9dcnXFHZLfIKSafI810NTmS6lc2z6+KQxZddSL63ZPAZod/HAqwuZtGE0Ps6TTJCRtTi8W8nE4NUb2hqEJ2o2I0yDOATnjgMu0/uonWFlYM4wmxv375OQU3uMD+JRG4OdbSEomZspJzho2CC0ycwmtDHXhRY/BR9n/SJ5qsofKVAyZV6KQdYeQjkrZ3jgxC/g1PJAVj/FCHvjTX3bIQDssrOp5x+T/IkPlg/dzDHf56y75/p2nWc5m7nRdHw5tNddB+/n3xDDNDXht/qrh18CRkgXsy7esqw3a8kdq5zY2ay7BlPEcpVXf8KwmNq5w6tREDHEgHnRUc5amnwJ+w1SQvnav0e66BAXKHgMVBXHa6tp3r2H4m2WCHopdNas13kqGkHzyhVfQPIeF/uXd3u+AnhVjtou5QEYehgISMEWMSPGcCwbun2gGvhLYEgphzq6XFcTH0UOwkazkxqzZ8L8JuOxtX+fVi0MvSD/o5JkyWolr0hHPTmwCGfYT8Rbgh12J+2hDS0GL/0IBufODyiPkciuWPGiwLXLfhH79mocR7fSLuwVkKasKU6WC1WC/9e8wAimmP8lU4AbaKbbsh1UC5Mqb/XAYpMSeHaGApv+K4Pnzoapmnt+iYpT3+grHeSPMScBB1goD/a079Mx5d99RBStC31Fj5q+RKL+PAacjUD2nl6OAhzigQNnZvXMkW51bcZoC2Wfx7KbOEpE+mUGlBGjtQ5g7XVJv7TmeftyXb2cT5duuTlFrbq9IvjDoKJmnGVMGCHksdPk/LjogY2KS8kSFzTrl6YrVc6mpq3qNo+RSs7juwmWHjCn1Q9d3eQzBm4i1WskXfXS9a1g+tYQOrhx1wmm3HWsBb4j5nzqfaQzjy7I1ef6OxmefQpGiYL9GgKBv4dt3Y3SpIP+Dwcr0f2mhVLrvJqFWji51dl+Cedt3nG5tMr2d6V/KfsM3XzT4mPw3KrYD9/1JZn0yGo/Rqlyk6AiLOmFI+6nM63TIyRgNPA99IQCzWgYXyUerH64M9HAwECjp5rFtEoGi/CjywRh+are4WCBJv6mGtwgFrREQ4yiPVuVeJAyGTur1d0Yap+klifuwLDRpoWuVwfml9/8NJM4D+3/4EWM4laIEXk8NNM5gUVk1VGOgWrbNfw6C8T4RlKjbZZrDYErc7/ZjUMFuK3LRDAhni5CuYEFYGzMApS06dmP6cs4/z5QfwpFHTPJ/j62b8xy50tlkK/4I8sjmh33Ubt4Ko6LnSgs4v74h8NtlZxfT/r8Vn8InqU42VI8ENFYZ51sp1dleAoknmMzMkhd7mARQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: p+vjugfid74tt17U7GD562DiD3MnIGzuBUhKD+fWFzRKPJ+PqFR8tvwSivBFBolPbJt55r1riFT80kavFVaKXMN3ZZcVzeHOhCPVf+i4M5rmYxNl5NQAhMtEjdHvTQcRLvMXQU/vsqSlfR4OqdAPoHOFRj/4vipnTiQOR7u31cmdMkxSKh8oCcqWr53sex7dYFuX3QDgi/82DhugSX92zB8ssCEKa+FigFplywnMJ95TYSAzssFwQMqWNMyBGO/e6GM7wkvSAhhHsOR1o2Id4YiTl/DisQgi7OiauMEfVjsIerDigJJBl3gbYK44Fy6kRQRyZU8MVH2mJFppU+hvk8t6GiEOnP7NskNgl9DafbjW1+XSXf2nHZlOaWLw/pz23kvtcb2qCoGFj4teNw3AWKtdhcod85TWuPOhdhu+CERH45uX0VV1/HYAPYmAHxx8TuKhIPBSNZC6acsBoXAMUbSYROgBl7yLQknt/nS+jHrtSw5rpJOun03hFobnI47D19cLJUGam6UkZ1jrAvQOK3slr8NK9SIGdSgGOu6XR+4l4h12R4tUw2zCat1tzdqFHEmQJ+el7QyF9r3S5ykLI3yWY4W4EHkh4HflSM9lCk5AsLedYyLpEQ/IM2xQT25GecwySZWSz1VKjLJRKLZhjdEXCSz9J/59C7RGiqJeQ3qHe1Rgqi18z0dj/ojDjM/m4BVVN2cUl3KBIHbodPaLEaz7Ujvm6au7eLn0QtCLsFOGZ/sz6h0j1cFPMd5jrJVRvUEzXf+eEzxKU0tty9jrh3b5ngHKkAi6E6rM/uQUhvSk5Kenu23ApxHn1RVt7R/BuhIhQS5sEgPbY2wU/5iVw/+kcCrVF++VBlgySmpdTlqpMojCOGy8UV906QFJqI/t3KyI240rmXFFnzG8G2xV8FfUsdLK0ehAY3Hlp8H8VfavJR7wO06aYiw1/Xlys9UuSAoKMRfqJM9R7ihrIGXCW7nq8PINt+aBpHZuDkajIghHcCaG+eiIEa5RUcLjoIYLregC2Q4MJS79+SaZ097JIpH+eUJTwFf4rtSUtPhAj3d+wsRn53L0Oj7tBTC/dxh7nMtRf3mCl4i+be6320+h6/EgVfcgldkT2FuCs8GXyHMf+w9iwy/UDYfdM+WKu9O4a0VFAYzWpL+tzrStKpiWvrIW1x2HevFxLyQN0XLTOP/SNBWf1MjaATrS1yNK18BdAEg2I21cQdTw7g4pLD0R6fG8taD4GtVX94bEbyW4z5Qgem9NnYayLT0QI04uVptggsvVCnFJcC0mJ1e1FaVdB/IUm24HoO2f0ecJ2WaT5WvKwbu1b8mwJjwi+BAgsW+5pbbsAc62fonao32hMlyOaZECv+UVLHuZXymi4AJd4KuXmwu0vNdqt7p0A3WH0v7NjFt1zBLqSZqFH5INTNJX8qnZGD8iLB+mJ+nHiZGd/vfzgzYBWePcldB7W7hIo7zGl7SfBWi3iEXgIzLM4A3lskSwYeyvXv2hZEZgIHl16vJnJjAnFvrgJadMhJGBTgN0swiGWh9wFH6rxI6crR3gbQTmMz3dXlN97ZUK1l+FqB7NBcgYpzc2HtyVSiF9d13CRqUzb2eDCbZIoTTMay0O/w== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b356cecf-4f6f-44da-2fa7-08dc71a73f4f X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:51.6457 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y3/wdf7lmtOmUxS6eBa37jFczauvgzlOlBnBURq+wsnA0SRWGA9kjfmh/Sast3Mzs9ZvByhk1P4mdVaOpcH3px0UF+kBjGs6JcW2gL6vD00= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton A few pieces of code in the MIPS GIC driver operate on the GIC local register block for each online CPU, accessing each via the GIC's other/redirect register block. This patch abstracts the process of iterating over online CPUs & configuring the other/redirect region to access their registers through a new for_each_online_cpu_gic() macro. This simplifies users of the new macro slightly, and more importantly prepares us for handling multi-cluster systems where the register configuration will be done via the CM's GCR_CL_REDIRECT register. By abstracting all other/redirect block configuration through this macro, and the __gic_with_next_online_cpu() function which backs it, users will trivially gain support for multi-cluster when it is implemented in __gic_with_next_online_cpu(). Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- drivers/irqchip/irq-mips-gic.c | 61 +++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 76253e864f23..9e7182150b5c 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -66,6 +66,52 @@ static struct gic_all_vpes_chip_data { bool mask; } gic_all_vpes_chip_data[GIC_NUM_LOCAL_INTRS]; +static int __gic_with_next_online_cpu(int prev) +{ + unsigned int cpu; + + /* Discover the next online CPU */ + cpu = cpumask_next(prev, cpu_online_mask); + + /* If there isn't one, we're done */ + if (cpu >= nr_cpu_ids) + return cpu; + + /* + * Lock access to the next CPU's GIC local register block. + * + * In the single cluster case we simply set GIC_VL_OTHER. The caller + * holds gic_lock so nothing can clobber the value we write. + */ + write_gic_vl_other(mips_cm_vp_id(cpu)); + + return cpu; +} + +static inline void __lockdep_assert_held(raw_spinlock_t *gic_lock) +{ + lockdep_assert_held(gic_lock); +} + +/** + * for_each_online_cpu_gic() - Iterate over online CPUs, access local registers + * @cpu: An integer variable to hold the current CPU number + * @gic_lock: A pointer to raw spin lock used as a guard + * + * Iterate over online CPUs & configure the other/redirect register region to + * access each CPUs GIC local register block, which can be accessed from the + * loop body using read_gic_vo_*() or write_gic_vo_*() accessor functions or + * their derivatives. + * + * The caller must hold gic_lock throughout the loop, such that GIC_VL_OTHER + * cannot be clobbered. + */ +#define for_each_online_cpu_gic(cpu, gic_lock) \ + for (__lockdep_assert_held(gic_lock), \ + (cpu) = __gic_with_next_online_cpu(-1); \ + (cpu) = __gic_with_next_online_cpu(cpu), \ + (cpu) < nr_cpu_ids;) + static void gic_clear_pcpu_masks(unsigned int intr) { unsigned int i; @@ -358,10 +404,9 @@ static void gic_mask_local_irq_all_vpes(struct irq_data *d) cd->mask = false; raw_spin_lock_irqsave(&gic_lock, flags); - for_each_online_cpu(cpu) { - write_gic_vl_other(mips_cm_vp_id(cpu)); + for_each_online_cpu_gic(cpu, &gic_lock) write_gic_vo_rmask(BIT(intr)); - } + raw_spin_unlock_irqrestore(&gic_lock, flags); } @@ -376,10 +421,9 @@ static void gic_unmask_local_irq_all_vpes(struct irq_data *d) cd->mask = true; raw_spin_lock_irqsave(&gic_lock, flags); - for_each_online_cpu(cpu) { - write_gic_vl_other(mips_cm_vp_id(cpu)); + for_each_online_cpu_gic(cpu, &gic_lock) write_gic_vo_smask(BIT(intr)); - } + raw_spin_unlock_irqrestore(&gic_lock, flags); } @@ -534,10 +578,9 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq, return -EPERM; raw_spin_lock_irqsave(&gic_lock, flags); - for_each_online_cpu(cpu) { - write_gic_vl_other(mips_cm_vp_id(cpu)); + for_each_online_cpu_gic(cpu, &gic_lock) write_gic_vo_map(mips_gic_vx_map_reg(intr), map); - } + raw_spin_unlock_irqrestore(&gic_lock, flags); return 0; From patchwork Sat May 11 10:43:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662319 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 4BAA355E43; Sat, 11 May 2024 10:43:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424240; cv=fail; b=DymTDSI66ukrYWa2vGJjJQDpg76NHNZkqQ0Q2nUCibztTPArP9rP9y4CUhX0b40SjnnpHwE1Nb511m9Nig9hh5M1ELfnU13T0t4/D9A/sCz5uVkScQZvSGO4TJMknavEZPOSVSVtciQqG6x8dumlJR8r/FK5TzxpQhnpvtDqAQY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424240; c=relaxed/simple; bh=FSIZpMTbiJtEnIRlB4hA3CTffXKhjxE/vuxsjeCYGDg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=sYHu2t0NgAKBk2DJqj1faa80IiHHiBqlTi5G4U8iUpyhPlaPRPU3q7X37cNCz7gV8Ig7qArcC/Atw2al0sKBxJeAGbndgb+i5mPAjURFgycZo2qfKebqzQmbCwwGAy1qrrmUfv3ZsWULbwuU8I4QFF8RWLsIGOqGhScG7GJtcKI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=tCZgAalp; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="tCZgAalp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JaLh2XFRHVKtFlbL2WbL9h9CnDgAOXhmkH7wjk+Kss/HY3HUYaeH7ljNbjBRpRsJDd6PRCDRSifbbvOTwjdcRyJ7bY4kkOUqsgRNfTYXjC+Yur4mzZvKE598iHQ7A/HELx4Ie8grpsZbEzvLaoFatA5+62FsyW/1PmF/s3+2wGkmPXAbTmdtOi2121qK873NTVhh8TWS/1TFGfiE9RF61tnB4CDSrg9Z34p0jIWWNzgEVCVA8yp67uZf+/ifszwkvlUUM4gYgCmVYUgetJcPI+Nd5KGfX6kpBhYsYzb6u+c+bfTmFGZfQiXmnn+Md5Xj/eJJEIXzCcxIKsnEsAFcxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=zivLEPzK2yPb03tjtLC8DJTk3RiZnwMaBX5KORprkw0=; b=oZmQSJ1PlPsY75AK42f2WlgRlL2ou0cdGlMS7zX8VKLXE+OdUwfEf1SLeDXsoKYBB5ICHXvbob0B7WUo0kEg/3p7hM0ozazbTE/kwMUpwXZnslLUQ+Bx2MnX7mrQw79O3k1xC8qpkihYT21qyBPMNb6d5PKZSrvSJgBIUZ/+qgUj5Q4bvQ0r1BSvjLPalr1noU9iaW3vqLb7ZHvpRiCiaNZ1dh7VEpK/ViCHbPtSWSOSsk4LigBArCCtTiSWsybyxeqpeZWCrdSEA92XnfW06kWZ0FEuLuRLuWBavNtCzb6keg+DJLTFT5brisWVMtJXKjg4853lXa4qHSxbXb27Ow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zivLEPzK2yPb03tjtLC8DJTk3RiZnwMaBX5KORprkw0=; b=tCZgAalpX1OOxb4m54n5EUu63fGrfuaD0l7yqcgd7S14oYkmFvJaS4IpGIm/qoy/OvVkF/YiaqL1/NMtY8Lq3LDKFwM/D/uu17YHy1YUgFc+Kmfvo0LXWDeM/ZOp5t9v2txhFn7QylceTyAMbT8v1KEhi3GoGl4EVuoiM5lhAVE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:52 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:52 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 04/14] irqchip: mips-gic: Support multi-cluster in for_each_online_cpu_gic() Date: Sat, 11 May 2024 12:43:31 +0200 Message-Id: <20240511104341.151550-5-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 13cc836a-64c5-44ec-51b1-08dc71a73fe2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: q6IGOrsl8xLyOnyyE8WWZd0tuzYc+wDqr6tUKnQpu2BAZHyd1VOKrzlknWWj4GTsB2GR5a8T9P67h93UP6TWznRSG0VXdCdfKdVExtiMSbGltS/YjEK1bvW81AZtufc5Twa/YP2R2visBo2Tqb4qIsjcw0z/Mp+MS3rk7c8WWJ5hShlPD9arTDgt/DI3L/RAGrDHVbZnHbZdEQbspBh4fhuijXpW1+CiKWzqQzjWsGwd4MtqJ2zEGLW2XLPOZrwh3NiNcQ/8KvREdW5u+OXe792eQ/rnjSyV3nCRfjergvHqjEsjyqL+ufA+KceJGzr8QpfMegYQ+VtYSKzbHyFNWMJooOTyM100gTYYCnZHxchUUi8e9H7OMR3spzr/z2B7dZZuxR8/h7FTCwrQZMpSd1xnFUWvJ2GdsGqsSjNXqmx0waEP8duYVd5p8cowCuNB80yx9ITFheoxr6NtPqVg/K/kZPoyzffedF4iV67XD0Mq3MNGzOikcCsTqf7SSk6AOl53JSOwVBzw91XiikY3aQWbE3/xuIGPa8kwsPxvd+YH/v9FwdVSV4KkGP8RABPV2p6GflQkgRxSVcpB0n57W9NcVZx1wHsHuS6tg65NCa6WcEHNzcCfQnhop/0eh2aD0wideUxQm8gzTMoSerpIwv4+Y/mz56z7k9ZZLz6T2GfniRW+Oz/y5gT56piKMNfMMxTIfT8pdBS4C+dUpfg1UfhxEm1NAniRQzT2ZjvPRaRdSqqFtxkcDFLrhTGzYHQ52+xuu7bPfem463K4LPeZ3kGiOvLgBYj9V3EYSqfRiC8bw57SFZQ40KDW2qEaMrXsVUZ+ItQI3qWMEqdnnAKdeWDl9tSOeN24UOci7aZ02nfKtu+ve8sfKZFr92+xEYqqk8OWb4RzRBTciLArY4PoH4A+ApopaobC26BCej69Ep74h46sf5f4G0pGzfHcJter+MLq6DvFwU+SkHp/lAVhDX9HEpdyiFb0co7xqPabYLx+T9lTYbUwGM5PM44dLnDzwwW/DGh1AvN49t9nneeVu+SJUv2nzbVPfRVxdrtPx0q6yRCukCcmxKu6O2sUR+t6fpZugbZTn7DmPzhu2AUox+m25AH+/s0vrvWPpKTQ77wMcG9W80PfkiF680HYOETocum5Lx9R56CIpFHKM471/MhYIGz2tL2wzsh7Dujz+X6od5rgQEIz3dTfPqYbVC8WR+3p4ywLG+aYAvzXIHel63Md0c3SwvwBb8XQoPfS21if/Mh3PFzkJ0hQEWvlWyd/B1F5M56tcOZagAOx3kXSCYCvpicM3Bf4bx9JS0KMRwXIKxdfnTee6JCzjysErphlelvCvpv5R3kgYAaLW8fN9g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Ey/OXwESgnjowZ8Dk6HHSE7IPTWJ5C+GRtwsOW7ttgXXfviFJEg8kQF4bfp8Pc8K1oGPdQzE2Z3RPg2aN5Z/PWiDZNPm56S+oeDD1XQHI8c905bmolrTsHpIHf/u2Nev8e3+ixv25NMlda7u8ytxl9u4GG2HgbqbMqE0lsI4J3LiqzTu0Hjhq5JhEUQe1pfi6jQ+4+u4/J1TBgTZCa9Nb4LIRy7T4ISUx+1R4er0YlBfVLMmdsEIX2/0w1qE/lluw8I1fvpR0naTtXXAEWigjJeBCqC3ehBOUh9U8TS+Y0MCEbOMUgplo3cRZhwswf6x4BIVJX1kAm70t6Cqx3mpImfwl75NV3RohfEVR7k2rjPOt6XlULJ6I8TqIOl850zGF01fsxR2gotWVJXXw0gdVn47q+ARM1zidz0x4MGDO31hxCKVXxkw+vRQS3JfV1+kBcsyZdDb7oK3ByFG7vnxEilonpB/Hph8dcs5z1CSUZf0Arb2gokhJxRhaKfRNeC0ZM3QB/cBx2fMwCTl/uKK44VyHhJeAtKuWwFy6YOuS3jyetvR308f2yJ1wY5IVhqwLnfGP+fYthcAx9WuJpITBaY3ryJEa8oMRbCUTYHoTmKuhWGWqBm5MdODFYiSTNU06re8ISN0pTRbmul7Rj1b2Mnfq2kRjAnufKjihbZOeTYHTiyapvdk6adQ8aOBUPoOUqzDbfcKtqxY3gKYhI6J4rmQ3J0v0LLxSVdT5ZoIFSGDJYWYtGXU+92bMxZwr9pdnCTxeJCnL9gySPWbHdakJKW0VN7XOR3N4JZbup2/cZdlyEjEKIcelttQjI0XLw22XbbszUHY7g5xL6Qm286f5NMNuDDUQMHz7S+GlNTf8ousEahzGuLWct3BjBs1j8ArDfTTC36mcESxyf1OA5YIu2G199voiZzNGmDguzeWeZfvdHPRHggzXiIH+mhnT+JG2u4A283zdW9CxOi74h58f0dkPYul9f3hCvUON4yZnM5tkk/IaCUU3Yfq8xvZbfL2kUrdtwEWK1PPgF8ZTUkhoScAlxXg3lyOIemGPx2W2GETvXdbBrAgA3/fmVqepZigU8k3vTjQd18lNoXkRRif8N6UTfwfo8V2RSlFphgjE8f+HIgLn5mMqyFgOnYR8fn0w1zPWD8y8yVLkDrv2/LWu+pm3iNN/+FZ6gvayoE0SiWsWzFx18aKNanR5TNr483eYGn7fctpTwleK5We1Lmq782aTTTwKDdr9oTMbNAbeByu/pzrjBUK4ICxtH1UswF8PgY1tahuJ28b/Hc5nOJvccdakYMriAuciQG5+1YEJc1k/SxzCTWoxn4ZEcSXyC8CyHw4z0HYdbROaQRmEz0KalW2xP8/Do//hJAcWAxP3sMVKXrQ6Xq1Jaa4h6oWDlIUQMH1mT9Bja6Y3SS9M5+kA0I0HxhN/Q2i1TZnGaGlkbK2vgIPgBbZDAl8pgr56IUd+rnkaZlD2AAK7KefA5sfOoKbbYC5oCmjbWSaYELg0sJd36pXNdqaXIOEkCjyIp2VtZSUll68xHOTZtBy+wZLI7hu8TdBk8MoRGkgs82fgDV+JN23rnMLe+y1ICgnUgPig855D/s0d0jGtkAj9QaFtw== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13cc836a-64c5-44ec-51b1-08dc71a73fe2 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:52.5817 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OhI1qYa7YF8aYUrfLTugBbKavtAz9aqI9z6zArGsONiBSTj7y/0qWcCnHRq75IAoASHfJXJyqoBKku7nkQxYriIkXsRvp+PB4m813q0dcgw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton Introduce support for multi-cluster GIC register access in __gic_with_next_online_cpu(), and therefore in its user for_each_online_cpu_gic(). We access registers in remote clusters using the CM's GCR_CL_REDIRECT register, and so here we delegate to mips_cm_lock_other() in order to configure this access. With this done, users of gic_with_each_online_cpu() gain support for multi-cluster with no further changes. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- drivers/irqchip/irq-mips-gic.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 9e7182150b5c..317ccc2593d1 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -70,6 +70,20 @@ static int __gic_with_next_online_cpu(int prev) { unsigned int cpu; + /* + * Unlock access to the previous CPU's GIC local register block. + * + * Delegate to the CM locking code in the multi-cluster case, since + * other clusters can only be accessed using GCR_CL_REDIRECT. + * + * In the single cluster case we don't need to do anything; the caller + * is responsible for maintaining gic_lock & nothing should be + * expecting any particular value of GIC_VL_OTHER so we can leave it + * as-is. + */ + if ((prev != -1) && mips_cps_multicluster_cpus()) + mips_cm_unlock_other(); + /* Discover the next online CPU */ cpu = cpumask_next(prev, cpu_online_mask); @@ -80,10 +94,16 @@ static int __gic_with_next_online_cpu(int prev) /* * Lock access to the next CPU's GIC local register block. * + * Delegate to the CM locking code in the multi-cluster case, since + * other clusters can only be accessed using GCR_CL_REDIRECT. + * * In the single cluster case we simply set GIC_VL_OTHER. The caller * holds gic_lock so nothing can clobber the value we write. */ - write_gic_vl_other(mips_cm_vp_id(cpu)); + if (mips_cps_multicluster_cpus()) + mips_cm_lock_other_cpu(cpu, CM_GCR_Cx_OTHER_BLOCK_LOCAL); + else + write_gic_vl_other(mips_cm_vp_id(cpu)); return cpu; } @@ -105,6 +125,9 @@ static inline void __lockdep_assert_held(raw_spinlock_t *gic_lock) * * The caller must hold gic_lock throughout the loop, such that GIC_VL_OTHER * cannot be clobbered. + * + * Please note that if you start a loop this way, it must be completed to the + * end, otherwise, GIC local register block will remain locked. */ #define for_each_online_cpu_gic(cpu, gic_lock) \ for (__lockdep_assert_held(gic_lock), \ From patchwork Sat May 11 10:43:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662320 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 982C056444; Sat, 11 May 2024 10:43:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424241; cv=fail; b=HD/jEPB73hOfUxnTg+vnMSjS7tr96+Ot6ZIO3BzAVDhgdSYYJ7aXwR2jQax/wR+glV/a5hX4UAnuZV/KBaqpJeDhpdaDmMHRaHhssvO+/ofNVUCPdPHcGG7WOarv/qomn9nTUpMIwpdTLbpp0K8tKd2QkmrF/sxS7csYedz6DoE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424241; c=relaxed/simple; bh=V+up9kRDIyYiKB0Gj4PBrv98qGZNgLPOeQDg0TdoqIY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=kKVVv5HNaWg8f3a+2qDJATje6vSMClWcgyLxFndAdIQE2FKvZCRwugUEDzmHvZpcKprc0tRozur/fsj0ParaJljSjbY9+DQoyqawR4fS2KavJvCcb/m0LoTbjkGCsdtmIR7qB4rJyDWRaNCSEVunTjT+DMU/XtZHj08AwyN+phY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=HaWlBnNi; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="HaWlBnNi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XPWwfgnn5IGEQMfa/qf48B/kxdvryoleuTBr0kbm4FN31s02cSWuzQKF55sWTU/tmQ4rAoNDaKx50Xl7qlBAQ1Z2PBuuA+czQYD6F0GeZNzFG21Gl3EXfr7mFS+65g2m5xbIceamBuuOjUbFVs/SFMrWDAnHX9DpPmtZnU5IamDapPAOZL3SZ3yNMJibxecLHJ02zrLnWXGKtS9q/GNAatZLLm/Rl+q2XRji1vzL8MVJ8u+XaedAs5PkWLccqlH3hSJkaEWPTRZcN1Vo92sPuGeHkc95oUlDcVJEH6wogyYSDSB0PGdFYEqtOn0MJsz419H2vcjB1wQ2Ez5V/88AxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=38E6eM+S/5PuGgIFZvPuBnf0H+1kJD3Y+e8qzqv2r1s=; b=BZWiRYagBMf8aojqv/9w2sr8tkPKExaenaEB3e8EMYh9g6tsjLCABHh8ADmo2BbRL38lwVptKqsRvRYc8H2tEkW4saTTy5p7pciqpfLMsV0f4S5s08766ZhrTpdYpj07teOjS1B4l3s/xmWIDqVsMHmykx4EK+MaZ1NefgqIRuBZYWqK0Y3e5K+EabZwS5LHWbiHrAF3BpdEn5ZaUwVXXvM+LGstaMKut6Xln2rcM37IP8+rRuL9a0PMZQaQEoFTHVNUwkMiGdlIX4/idxj922oJ0duGTkD6C/ILFRHWt9WGGIhqCKAcMsWFsixegbTx/rS6X5FCoDQ8dmobgSe6Og== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=38E6eM+S/5PuGgIFZvPuBnf0H+1kJD3Y+e8qzqv2r1s=; b=HaWlBnNi9ASIb0bYAC52LacOnzcPbk1QcUEL0TXAQ3eUfvlofjr0xzAosYIMt7eytbScw3WGlm1fFPHrA6f+XqjM9edtDe+VuuBhnGKQ56Tbf5h7T/B9YHT8GHjKxLVtlemEa7lyv7RnkpHKJbgkzZRh/pBxjgdPO0Y748kpugw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:53 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:53 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 05/14] irqchip: mips-gic: Setup defaults in each cluster Date: Sat, 11 May 2024 12:43:32 +0200 Message-Id: <20240511104341.151550-6-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 24ecd299-eb87-4122-6ee5-08dc71a74074 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: QgIp444PTTWyQBhuNgVlfULe6nK2Jo45qMR8i2n8d9nPKld2oW1A6kq4YpV2kaAY7M1AI2ZW2NO/LNheKUpkQP6klFpozIrsi7KpTSQ0WrhiR+6oa58/faf05VdXY36xSMcgDQ2EY1s79xNaa3PzWVqfaO07S/8i/TE8v+Sm0BY7SEwebumQY1iDCWCXMJ6hEdRtmZ8xWxy7frpuGLoORTua2XuR7jksfh+LzBXzIbJ76JVOagLNT0hIkLnXaNH/sVXUqaKkAzyUwSooiZHgysVA6CltInZUoJaZjeGu7GcqR6i8YlwkZJxr3XIXs8D+0AnGS4y2AhjXRl8UKVfZVKY9YgZJnI7xrtLlOQUMRygXVLe5wuuNm0LN+4am13ydKqFDfALTPgf6SWgG3cHWXo8Mx0zDPYbHUQJ+DD0hRL/5DvDJoPepol2eZHzEPb6J32e/dNIAoAgerMkB88kY1czFGrTtZv2M8KaurfueSuUyvxEUDNWqHOJey5ra3/zgMJRVECqWRcvmcxWAG3feW09NS3QivNpzBamE0x5jwgJNLbYjJnLMT3uzXQi31Q8y4Nc0qdyFkRQLExnNp7UM2gd3qO4d/LrjXLmRDn+nHFdo7juha968nysMVkG6N8P7nZdOCHN2T+ztAVlds/ZXVwHnwew31qU2rV2sFO/MsFcvHW7A8NXgnXlqCksL3cB1oreqiw84rWrfcK5d3P1WMoIasMw/28lCbXh94o4BsxfXeAK1SOPkSCiL22lDCWHjqszztnyRjBE6GxY6Mn8DK0jKD+amJ1LgO5EDQkqyXfoCto8HJnMnCH6vUaUjtxiBtpWBG9a+DxKyBz3183t3iKFTuBzTNvUnZeErJ1vcMUzDUArUUcEeF43r8QyS0+dNT/+WFmyYupAae4oajmFiDRt5+YP3jIw2LNceD+yebNd6bOxcqT//PR618mfWNgt7vXx+29uBGrJnpMTuh5yLjWo5Hb12sbCJ9f9Wr9t5FuGpGNwCTkqnzNyn3+1a5ewNMzQ4UqehRsA7mtxYHg0WbS6t57CYGdRi0t+i7t0mt/bZ4vIS/LqZQ0U+FhljpbhePuT6h7lInxLdV3VwjYsgf5u/eoX2gkoDDtKMcKUOiiwmdJXZmsUC3paMo6E7T6HSgbRse5GgB6EeGztT0euOxl5Y4mWH9YQ1zf/Nv/dQ//DGmLxwXOHF+sF4VvjrMfqqtelQQuCfj+hZvYRE7loMenfmJIqpklcwmNeKEozHhXqazY0xPozi5I8Yn1tM3N9zf46808d962ods0TN946mIUOjOGRz7PfjQeYF8/8C5h3wxxuF8S65rhK4dP3oO9DWmjcDo43YOf/x8tj+ftqGOw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jSvjFFkB36GxMI+cyPBaMEseydDVphh5JaBLO9XJ7lBxMESV8EN/lLssDkF/3yoH48Q2agWZ6P5ycmuaEnt5Hh1WOD4dLfoWkhRl9Y+M9Nd7r9Sjn6rmT5mVTTtWpyoZfzCY8qB0U6cdmnAkXiFd/vejkw82M8eqOhvj09PyU4lQCtRP9la6GNjAqSCxFMwb7mEZH9GfL1P6/dCv99qdPFEG/0gcy+LHwYllHhjtTu+PjxJtsDPd3yf2Qia3kFeXamNoAv8OAkLKVEBSLKi6hGLkaMCWQff/58UBdm/JB5Yx0sP6kAGlYyVLUB4Kw/EV24HaDSGk8xkSlc9mFN67O6j5IjjjzZ8ahOu9rJO5KE3s9kCktXwBN9zeF2JQsxEV5/Tt07ZoxYy93H2+jNa3KdNgY8JCCAfF+QnJQTbx0C2IVmzm2BQTDqHtwaFF8UIe6KMPLMdEbhBFB0gxqbrMx1rZW0cvXyDv4HAh0P5L4nink7mIGmjir3/uzM0kky6C6ScuHfhkGjK/+L2kHDHBOjJbr9ze2Omqx/aGS1mJFubhAnnILWL0OiJ0+YnAp/t/dvo0tUaTfhPvLfOHmqFELWTZA5PM393upYJ+lpJmQqHWsQ8/Ms0nkUhEVTCbpiXEuOGA5B6+58vO7hagh/fOJuvhJd3vxhT2dWBYE/t0lRU0Zd4zA2jHuN53EEvVIZooqVxBoqc+eSUQKAUQClp/gZ8++eztepA1zZecyVix1caWnwOcvRsjJkEHEEKwIZoIs5+nV9OglRV3erWDq4BJgnB4RZLqBahgJnatT5vURd47kIqPgFS20ORjkBzhAAUCO/sb+bvU7/5EYU2wqs1O+/1fqTZN3m/pySFuB4W84uSK7Bt+glYsOXOF7qnLTV2gRxW+gi9MHD8RbEOYzzo3TWJucO+GDsEpk3F2CYWVUlcxSQXByvcW8w+NWSvN3Y3yub5zDV5kczWl77z2ochGX9fSV1aPNv7FF8St8MpXxolx41K7PeJ2qFdQmYN2ipbMfK01WMTtc0dgwOJOiyLN++fkoXi4mErNw9AK/pwiJed8ACFNlTrPeHcVdm72gv049WI9+uFGSUidYhcSpV5VVKGzb8Uu+RgD0253g1m/qQMRo8WETh6EDqlVnzDZUcjven7v0DLwrOCihmQk8+pBPD+Aqtu/hMevKyv+yMSolP++tbW2YV+o7Jxcd3lwQgcCQkWU3gRaXMCQl01NDctLsx5cXhf4L7srGdAdUt6VuFokGUICM+HLrupcVkpG4XJz66mpyQx5P8c3wN9B4HNmJblk0+ZSruG0dbzXCgl6eeOCtC068NYAUyCns2+q9mVaT/dXxP9shpQFYmLovwVrxSN1RD/cHC80pOCvJdLSjy20hMZ6iKIYcFdxsRaTmwfVOGpkC9z/TAiLIstpdw3vmQv5jCElXrVb9LAMtyKvqXa+6KCpTP6kk4EoI9jBLgza2IjD0jo5TfGjztyiXQ54zm43+UmFnUVwzbQ/6I3V8oJJXuX+13w2gLxUSelGZuFdeDL/+T1stxDINrGgK6hKxzbghNwWCdw8ec84mkIiomvumorxaZdE85ptDf4QJGi3Iw92l/HpHFjdDyhGFNR/4Q== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24ecd299-eb87-4122-6ee5-08dc71a74074 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:53.5451 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: O0qafwxkOLVdF/Bm/QPpZ5moOXJtjV//Vb6v6FRFXiSlCQ92Ood/ZPtCNeMGk3EXcO4uGgqHBYZtSxH6KQX4VdMvZ2d8AOcIcAwdvvU+2cE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Chao-ying Fu In multi-cluster MIPS I6500 systems we have a GIC per cluster. The default shared interrupt setup that we configure in gic_of_init() will only apply to the GIC in the cluster containing the boot CPU, leaving the GICs of other clusters unconfigured. Similarly configure other clusters here. Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- drivers/irqchip/irq-mips-gic.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 317ccc2593d1..cdd8973912a9 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -800,7 +800,7 @@ static int gic_cpu_startup(unsigned int cpu) static int __init gic_of_init(struct device_node *node, struct device_node *parent) { - unsigned int cpu_vec, i, gicconfig; + unsigned int cpu_vec, i, gicconfig, cl, nclusters; unsigned long reserved; phys_addr_t gic_base; struct resource res; @@ -881,11 +881,30 @@ static int __init gic_of_init(struct device_node *node, board_bind_eic_interrupt = &gic_bind_eic_interrupt; - /* Setup defaults */ - for (i = 0; i < gic_shared_intrs; i++) { - change_gic_pol(i, GIC_POL_ACTIVE_HIGH); - change_gic_trig(i, GIC_TRIG_LEVEL); - write_gic_rmask(i); + /* + * Initialise each cluster's GIC shared registers to sane default + * values. + * Otherwise, the IPI set up will be erased if we move code + * to gic_cpu_startup for each cpu. + */ + nclusters = mips_cps_numclusters(); + for (cl = 0; cl < nclusters; cl++) { + if (cl == cpu_cluster(¤t_cpu_data)) { + for (i = 0; i < gic_shared_intrs; i++) { + change_gic_pol(i, GIC_POL_ACTIVE_HIGH); + change_gic_trig(i, GIC_TRIG_LEVEL); + write_gic_rmask(i); + } + } else { + mips_cm_lock_other(cl, 0, 0, + CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + for (i = 0; i < gic_shared_intrs; i++) { + change_gic_redir_pol(i, GIC_POL_ACTIVE_HIGH); + change_gic_redir_trig(i, GIC_TRIG_LEVEL); + write_gic_redir_rmask(i); + } + mips_cm_unlock_other(); + } } return cpuhp_setup_state(CPUHP_AP_IRQ_MIPS_GIC_STARTING, From patchwork Sat May 11 10:43:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662321 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 335E05674B; Sat, 11 May 2024 10:44:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424243; cv=fail; b=UtANokQp3fr+yksustl9iub0plXq0pPpnuaNv20O9ABk1qbbf6+mBxxG0c67/trJ98gaXGzHmKYiE6adumR2bHparCpmy0uG3sk3xIlk4YUaF0ovF2LOqa7ZDaVR1Tt7hebH25IFSqCv/WFvh2RxnQ8ZvruhT3NqIiMP+hSPars= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424243; c=relaxed/simple; bh=wdfBHU+kas5IRcH+QP3mj1eQGTyMR/nNeO+3Vv1mj4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=J3c+vDzbw42krn8INy11nAlylP5z68qnIvglusaBRc53VWNVLKgQjTFO4nI2XWMZkL2YNbkJ9LxI43MOYI88nnwRaYaLxhqbnUvHgK34hhqOvt4sPu7ks/j8WkLr81rNbr5Aqeh5AWeCxSLRRgdgeIIESBBw+Bc69HyHidRWcpg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=bhkzxgKS; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="bhkzxgKS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kFLHSctPKPXRaXlcYeNuCkmjUHV1viEsg1gWhgKCNZ5GmRQSdR1RY1e9PponsFoVFasf9xoervSgua4/Adwm6Q0n8ufkGT2i5Td8+96g1tP0yZWzvKqn4E930rrnSF6a8bkB4Q50uIg1Cimav33KUjz7e/XVUfo7mdkNar7msHmTXB+Py7B5wuYZSrjUPuTcFkPBOfYRhcjgqBNZNFovSjdU0OyCHUnMI92vQG3LQZSOrOYfHeynRK7CfViVjiUlWC7rA7sZuha6dRi0Q0L8AYhkqbiJNcvuTJYW4hMH++GLBly3Gm8R8+RVWNyid4f1rwdLqQgllgzNpyUuP5QAIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=8Z+QxqBZdAG5DlGWpDMtaRHL0+S5xvmq8uvUIrO4CFs=; b=cG2C+KyVkdLWH3iZbxOOBnLRu/q9unkdzTgLOPZYlT827396YurfrDhcoj6Tm5y5myiQphtj5xqCMTDmpMh8eaiLt8ngfV6L95MOhLsHXKF6Cl0w3DMgYU7PnkrHHuTvOPJRnNiITxg50SinY02tci+177G/mtn6Clbdrqt1eY0prvdLhx8RjbrjHh3TTz6UitWUXUraxn3r1jy/J0KbAGPR8QRF8ttMPV9Us8Lu01/B2qSCW0RBPRR1vMQaYL0kOmPS7A3v/btG+Tg6hkHuPC6V/3ZEH0KloOI8yXNqOo5oRaATZdl9p3o0sBml8WLrtpD8/9IeM0ejf4MhbqFcEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8Z+QxqBZdAG5DlGWpDMtaRHL0+S5xvmq8uvUIrO4CFs=; b=bhkzxgKSj+OtTSyqvmzONG18cZTlJ8UvfZ1HroW6EuBvu7ALsX30b0XW90dSbFvclFZ1i+Hw2AibWGQt71S1w9R6lqs/8M0WsBja8DnwzTDesNQU/XsNkmcbsSgTT9QotG8wymkAyPjrSA2ilLhSOfaku71neixa14Au4HK5zw8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:54 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:54 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 06/14] irqchip: mips-gic: Multi-cluster support Date: Sat, 11 May 2024 12:43:33 +0200 Message-Id: <20240511104341.151550-7-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 78f418ab-11c5-435d-f84a-08dc71a74102 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: xpASwHYOl57M3WJrE+4xsPv6ywwN8MsD/l/XYHmGWRMTAkMnkGghk5p1uMaWKjD6SswjRvgg15AHOnLIsmSh+ftPfbQeLSa+e9+vQUteBccaRqQzOy2LBZKnpa+yx5yrkriBjFFcmTLJMJnEfQRM79P0BV6Ch2OncbQ5EqmwHDGa4vxjlPvv0T4ZhDB/xPugYrPrIVu8KoUx/mOXgGPrnCwNQbrRjosOERCVrebfU9Znyuv8LTpcM4evXBOXKdVA1gxgqZASXaReezRS2KOznHKnmge4TqJsVyserxiDGn/A1AXIVq37ENCTGEa79zexY6G3DHIpJ67IfAwJAA9ET+bKMNvCAMMpwT7K4my82pfOKqAwLSne4jbTvVYcMmZ03+SsvrXsZkIgEb+QuCj1jHQ9UrtyAwgVBXXxF90DF4FMY7gY4OiZ7pDhgsyU1u0kHWbvXawkxxZjhRvTrbz6itekEiezCSZL5wVkaeEjrBVvk93g0mQtf13cAwZMNq1FBTGIanQjFSyFRy2w+y8/M2SSo9WndbMrqfST0BSHLYrNB3uElvEnB0i02Dk731ShxuOM/jx7d6BAss572loCv7901vpxPkpQRZxYbAgmgCNEz+JhpM10Aa7X0K2ivMBjXEjdMHA8nv3xMlum752bFGS4ozraA2vp7GN07+xJOZRhFfFhbg0oOn86/phqHRiek0Rdu/o+vdNd89bZKKifuA776M0Ac+mn9Y7E36Xh8Xi+I3IpuYMruqGPRM/xSmMTL11Ndm6qc04pbWdfplCz54PH60SlyHmUFj2Va2CxgDUfkCChmetUDcxK36A4yBDc2TFxdz5Hq2JFjexFu8YIZFzOxvz4pcxCbohl7zIj6aK7OU7hxaWwzW34mrAtdg/PkMY8V0ss8wVtaQDpakBMXI+L7lSGvdE/wL3B53PiqDilv4NatxMtzXs+i3JEXqDMIfQiprNKa7atKCVpR65yEVuukRBKl0AyF1ucBSlHrhTjoDg61tJOlLEL2jx5NNLpGXBa4mjcoN4qQuo7AFLkTkrQFFtJPPAzJI6l3PZ+kDQansK+1jr5X+pbUJ9yIVeogc4PK+/NkHtv7eXHXe1GoSas/LTlGS/7Wp0C0cEQGHu6vOiGhK7+Sm0cyhA5YCriyzXN8BFp4XWJssELabIHtt6Bvu2K/hfs29yJVDizpEwTUoXa46ff7cXhprJ0YIhrMeA9VjWWSdugzpkM68g557JCE/QUMRS1VSqP4RJlsLqXGYwUQxiMIZpfHfIW5w2BpPc7HdkEMbfGeXkez8xoMYB5xWqrleuf2ekOIdcHkb0HlksxYxFXDO4qblVZ/yhniHfH/rgnPQy2QlUlG3MOTw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: iBtXglI5Stw41FGq020VxiH8eD9hP0gPzMqIq1jnJtxzPu6bDpd4GMh8mH+zYCZfZSwQdC5Vo5FkyoN7jy9PwwbA6jHDHVhBXvTSSUYnOZv4Oadj7CA5LQkMzDB3d8PzN6Eqeh87QaVMvd7hzf1MKmggmgF8pGlp+LnSuEYEkvPVGLKPIF7Nxcxwk6oVvcUGuYkSh6kUMge5x1KW10JtOKCyMFtnGg9RnDxidUk7p0eMjCL2C/EUZxc1lFxcaJ1SwGExWlT27bFynb6QZqaFiNAeDl1P2nfaEmoCWr9pmpzvplJjuFbFAPBL1ZwNJiL+5nyWHpyeHgpxtR9XGM9Wi7Vay3JCNbXudqCoksGGcAXpqCEIaFGpfExkP9Umurwhu4J6+59vKF43KaD/KiLuvJRqpSI8Kc+M6EDUeDp32mCG3OY/7iLLcAi6D/SzsAJdUYnw7h1/txLyNrtyK19d09KHUmu/UOpwBtK2rlwnOe6vG7RgtYIGwd3yE9uUDfl4gBDXAasrUWE1ZtOdKU14j1wRUa+OCnFDWI+78CG3LwlZCCJlXn8lACz4mpItH9nSQMKltEqITAh1gsjhv8u8+aE1PaLwxEipAwmKYgcV59Qbr4lgj7gibTarUjf7A2bfZ7TOTPM/PMH/jhe9Isairuyu7v3ICNX8TWb7IW0JD5gvt3/yVlUvA7W6c108OjMugxxiCjOZKDwzmNZb3ze8D42rxHx556Ve7cbOesHASpVQ3iBjVG9ZcMkiNX+dRz6PsR0QoUCmACFcVSy7ftGP/lIfzEp10kLnoRfq6FTkAm6jcIwx74zKjz1Y8DzJjz2jVGYpyw/4YD2RuW5P71ua4JsmBFPgPfqyX0XMPdsLPoYFQuWdQs2zYbsph+m6YGElT7MoD8By6HpwjKW8XZyXN1jNXFiO/OeQm9IS87CV1QHmtiKX5SnXKINeY6WViqzhR9MU8g2oFqZXxfy3kzIurjcgzXO4axxg05ELZ2AJFjYFGWPhMz/23AiNq852plqi6qQjh/HPNxkEaINK9P8EqvKKqYY8/fLupCGe+JZ227SADqBF1UTZHbiAqZu9o8SMV7OVCgwXmC73VevhkavQfJujMaChhVS9Z8IYH0h6kgpGDM8LmyJb9k/Uz8Q2lTP80lo951BZJ8FWl4isRT1cwNalbcweo7GWdG19AdiSy2U3YIjmDqIOayEfnbIO/fWg5nkXb0QWgrY79sTaYXhbu8OBOo70HGSYYwvWo1ZKd7PwuItE1geT5p77YlSwNCHZ5bRvSYoDc93Byc2bKlrXNvHh57KkFheLShN95cLsXKOPkWdlFJNz9SLK+v+SktDJJdSVuNoRRc+IFJTJPFzBL5GMUB2DeoQwbBtj4SgFehfGtT7YpWzcMu2GbYK0WIOl55jK1IVN5rdpmA9nF2kPbPBsHrNO2Ihya9gffFYErp8BBaFEf+9TBKKD9dyJG3U0TKOofUMz9y7A+MEuiqXgpH/Q859S3PUZ2BjVkFJA5HQJeFk6HDrrt7lfGPloalZbXmXwc9cyLKPspeNkV2FbXcrGSbrVXsJ09umwQJc0SfQYc+XCbIxg1PJhqgLykBNvLzLLeO7oNQoLXFLiVsafSg== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78f418ab-11c5-435d-f84a-08dc71a74102 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:54.4697 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8Jn+LGtg4aBtGBfFrXOhsIXedGckIM/cS+dJxer8F/asV8eWWoyDzLIilaDUlxlbYyQRpdSQAh4OIOK9NiiuDxdN9XoEiK1e+mIERN0lIHQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton The MIPS I6500 CPU & CM (Coherence Manager) 3.5 introduce the concept of multiple clusters to the system. In these systems each cluster contains its own GIC, so the GIC isn't truly global any longer. We do have the ability to access registers in the GICs of remote clusters using a redirect register block much like the redirect register blocks provided by the CM & CPC, and configured through the same GCR_REDIRECT register that we our mips_cm_lock_other() abstraction builds upon. It is expected that external interrupts are connected identically to all clusters. That is, if we have a device providing an interrupt connected to GIC interrupt pin 0 then it should be connected to pin 0 of every GIC in the system. This simplifies things somewhat by allowing us for the most part to treat the GIC as though it is still truly global, so long as we take care to configure interrupts in the cluster that we want them affine to. This patch introduces support for such multi-cluster systems in the MIPS GIC irqchip driver. We introduce a new gic_irq_lock_cluster() function which allows us to either: 1) Configure access to a GIC in a remote cluster via the redirect register block, using mips_cm_lock_other(). Or: 2) Detect that the interrupt in question is affine to the local cluster and we should use plain old GIC register access to the GIC in the local cluster. It is possible to access the local cluster's GIC registers via the redirect block, but keeping the special case for them is both good for performance (because we avoid the locking & indirection overhead of using the redirect block) and necessary to maintain compatibility with systems using CM revisions prior to 3.5 which don't support the redirect block. The gic_irq_lock_cluster() function relies upon an IRQs effective affinity in order to discover which cluster the IRQ is affine to. In order to track this & allow it to be updated at an appropriate point during gic_set_affinity() we select the generic support for effective affinity using CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK. gic_set_affinity() is the one function which gains much complexity. It now deconfigures routing to any VP(E), ie. CPU, on the old cluster when moving affinity to a new cluster. Because we only configure an interrupts trigger type in the cluster which it is affine to we call gic_set_type() to configure that in the new cluster, after having updated the effective affinity mask such that gic_irq_lock_cluster() begins operating on the new cluster. Finally we map the interrupt to the appropriate pin & VP(E) in the new cluster. gic_shared_irq_domain_map() moves its update of the IRQs effective affinity to before its use of gic_irq_lock_cluster(), in order to ensure we operate on the cluster the IRQ is affine to. The remaining changes are straightforward use of the gic_irq_lock_cluster() function to select between local cluster & remote cluster code-paths when configuring interrupts. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- drivers/irqchip/Kconfig | 1 + drivers/irqchip/irq-mips-gic.c | 161 +++++++++++++++++++++++++++++---- 2 files changed, 143 insertions(+), 19 deletions(-) diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 72c07a12f5e1..e0e9d32816a3 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -328,6 +328,7 @@ config KEYSTONE_IRQ config MIPS_GIC bool + select GENERIC_IRQ_EFFECTIVE_AFF_MASK select GENERIC_IRQ_IPI if SMP select IRQ_DOMAIN_HIERARCHY select MIPS_CM diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index cdd8973912a9..8e9046516e63 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -135,6 +135,41 @@ static inline void __lockdep_assert_held(raw_spinlock_t *gic_lock) (cpu) = __gic_with_next_online_cpu(cpu), \ (cpu) < nr_cpu_ids;) +/** + * gic_irq_lock_cluster() - Lock redirect block access to IRQ's cluster + * @d: struct irq_data corresponding to the interrupt we're interested in + * + * Locks redirect register block access to the global register block of the GIC + * within the remote cluster that the IRQ corresponding to @d is affine to, + * returning true when this redirect block setup & locking has been performed. + * + * If @d is affine to the local cluster then no locking is performed and this + * function will return false, indicating to the caller that it should access + * the local clusters registers without the overhead of indirection through the + * redirect block. + * + * In summary, if this function returns true then the caller should access GIC + * registers using redirect register block accessors & then call + * mips_cm_unlock_other() when done. If this function returns false then the + * caller should trivially access GIC registers in the local cluster. + * + * Returns true if locking performed, else false. + */ +static bool gic_irq_lock_cluster(struct irq_data *d) +{ + unsigned int cpu, cl; + + cpu = cpumask_first(irq_data_get_effective_affinity_mask(d)); + BUG_ON(cpu >= NR_CPUS); + + cl = cpu_cluster(&cpu_data[cpu]); + if (cl == cpu_cluster(¤t_cpu_data)) + return false; + + mips_cm_lock_other(cl, 0, 0, CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + return true; +} + static void gic_clear_pcpu_masks(unsigned int intr) { unsigned int i; @@ -181,7 +216,12 @@ static void gic_send_ipi(struct irq_data *d, unsigned int cpu) { irq_hw_number_t hwirq = GIC_HWIRQ_TO_SHARED(irqd_to_hwirq(d)); - write_gic_wedge(GIC_WEDGE_RW | hwirq); + if (gic_irq_lock_cluster(d)) { + write_gic_redir_wedge(GIC_WEDGE_RW | hwirq); + mips_cm_unlock_other(); + } else { + write_gic_wedge(GIC_WEDGE_RW | hwirq); + } } int gic_get_c0_compare_int(void) @@ -249,7 +289,13 @@ static void gic_mask_irq(struct irq_data *d) { unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq); - write_gic_rmask(intr); + if (gic_irq_lock_cluster(d)) { + write_gic_redir_rmask(intr); + mips_cm_unlock_other(); + } else { + write_gic_rmask(intr); + } + gic_clear_pcpu_masks(intr); } @@ -258,7 +304,12 @@ static void gic_unmask_irq(struct irq_data *d) unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq); unsigned int cpu; - write_gic_smask(intr); + if (gic_irq_lock_cluster(d)) { + write_gic_redir_smask(intr); + mips_cm_unlock_other(); + } else { + write_gic_smask(intr); + } gic_clear_pcpu_masks(intr); cpu = cpumask_first(irq_data_get_effective_affinity_mask(d)); @@ -269,7 +320,12 @@ static void gic_ack_irq(struct irq_data *d) { unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq); - write_gic_wedge(irq); + if (gic_irq_lock_cluster(d)) { + write_gic_redir_wedge(irq); + mips_cm_unlock_other(); + } else { + write_gic_wedge(irq); + } } static int gic_set_type(struct irq_data *d, unsigned int type) @@ -309,9 +365,16 @@ static int gic_set_type(struct irq_data *d, unsigned int type) break; } - change_gic_pol(irq, pol); - change_gic_trig(irq, trig); - change_gic_dual(irq, dual); + if (gic_irq_lock_cluster(d)) { + change_gic_redir_pol(irq, pol); + change_gic_redir_trig(irq, trig); + change_gic_redir_dual(irq, dual); + mips_cm_unlock_other(); + } else { + change_gic_pol(irq, pol); + change_gic_trig(irq, trig); + change_gic_dual(irq, dual); + } if (trig == GIC_TRIG_EDGE) irq_set_chip_handler_name_locked(d, &gic_edge_irq_controller, @@ -329,25 +392,72 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask, bool force) { unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq); + unsigned int cpu, cl, old_cpu, old_cl; unsigned long flags; - unsigned int cpu; + /* + * The GIC specifies that we can only route an interrupt to one VP(E), + * ie. CPU in Linux parlance, at a time. Therefore we always route to + * the first online CPU in the mask. + */ cpu = cpumask_first_and(cpumask, cpu_online_mask); if (cpu >= NR_CPUS) return -EINVAL; - /* Assumption : cpumask refers to a single CPU */ - raw_spin_lock_irqsave(&gic_lock, flags); + old_cpu = cpumask_first(irq_data_get_effective_affinity_mask(d)); + old_cl = cpu_cluster(&cpu_data[old_cpu]); + cl = cpu_cluster(&cpu_data[cpu]); - /* Re-route this IRQ */ - write_gic_map_vp(irq, BIT(mips_cm_vp_id(cpu))); + raw_spin_lock_irqsave(&gic_lock, flags); - /* Update the pcpu_masks */ - gic_clear_pcpu_masks(irq); - if (read_gic_mask(irq)) - set_bit(irq, per_cpu_ptr(pcpu_masks, cpu)); + /* + * If we're moving affinity between clusters, stop routing the + * interrupt to any VP(E) in the old cluster. + */ + if (cl != old_cl) { + if (gic_irq_lock_cluster(d)) { + write_gic_redir_map_vp(irq, 0); + mips_cm_unlock_other(); + } else { + write_gic_map_vp(irq, 0); + } + } + /* + * Update effective affinity - after this gic_irq_lock_cluster() will + * begin operating on the new cluster. + */ irq_data_update_effective_affinity(d, cpumask_of(cpu)); + + /* + * If we're moving affinity between clusters, configure the interrupt + * trigger type in the new cluster. + */ + if (cl != old_cl) + gic_set_type(d, irqd_get_trigger_type(d)); + + /* Route the interrupt to its new VP(E) */ + if (gic_irq_lock_cluster(d)) { + write_gic_redir_map_pin(irq, + GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin); + write_gic_redir_map_vp(irq, BIT(mips_cm_vp_id(cpu))); + + /* Update the pcpu_masks */ + gic_clear_pcpu_masks(irq); + if (read_gic_redir_mask(irq)) + set_bit(irq, per_cpu_ptr(pcpu_masks, cpu)); + + mips_cm_unlock_other(); + } else { + write_gic_map_pin(irq, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin); + write_gic_map_vp(irq, BIT(mips_cm_vp_id(cpu))); + + /* Update the pcpu_masks */ + gic_clear_pcpu_masks(irq); + if (read_gic_mask(irq)) + set_bit(irq, per_cpu_ptr(pcpu_masks, cpu)); + } + raw_spin_unlock_irqrestore(&gic_lock, flags); return IRQ_SET_MASK_OK; @@ -503,11 +613,21 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq, unsigned long flags; data = irq_get_irq_data(virq); + irq_data_update_effective_affinity(data, cpumask_of(cpu)); raw_spin_lock_irqsave(&gic_lock, flags); - write_gic_map_pin(intr, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin); - write_gic_map_vp(intr, BIT(mips_cm_vp_id(cpu))); - irq_data_update_effective_affinity(data, cpumask_of(cpu)); + + /* Route the interrupt to its VP(E) */ + if (gic_irq_lock_cluster(data)) { + write_gic_redir_map_pin(intr, + GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin); + write_gic_redir_map_vp(intr, BIT(mips_cm_vp_id(cpu))); + mips_cm_unlock_other(); + } else { + write_gic_map_pin(intr, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin); + write_gic_map_vp(intr, BIT(mips_cm_vp_id(cpu))); + } + raw_spin_unlock_irqrestore(&gic_lock, flags); return 0; @@ -687,6 +807,9 @@ static int gic_ipi_domain_alloc(struct irq_domain *d, unsigned int virq, if (ret) goto error; + /* Set affinity to cpu. */ + irq_data_update_effective_affinity(irq_get_irq_data(virq + i), + cpumask_of(cpu)); ret = irq_set_irq_type(virq + i, IRQ_TYPE_EDGE_RISING); if (ret) goto error; From patchwork Sat May 11 10:43:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662322 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 9ED7256B6B; Sat, 11 May 2024 10:44:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424243; cv=fail; b=hCwuM2Pu28InDL7OKcKw6E0AUiiNjx1niqXVkBl/JHw2wg6QKF5f2qtziH7id7YL1Qm/Bd5f1sECt1UpGE8+7PpEoCeZ7XPnOSI5cmQjxKsKmcvq1xm7YcweVXC+5V+oqMiXJGD+sidddVnRLxtfyNDx+e1/dVjbp60q4bCKhs0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424243; c=relaxed/simple; bh=wP4lf4WXSQZDYadQNIiHWIyoFrQJ70a3ASMKKFuF5+c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Kk7mGALbjlndMEQo7Lbz3RmiWi2bukiNWqCOyuWcyQcRSVsMtJESzkXlOE7DPP7EO5dbchZ+3rM00S3AWrCMrmq5/a0AnSUB3ZGT14C5fDxVYCBwcPIAEB+L74LBb5cK2BXRxzB8aMDWeYg8IdXsjOfEE6MFcGWxLzPOHPN4tO8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=TVOqaAjf; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="TVOqaAjf" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e6wbHVc2dnHzlgjf081Uey2jmlV8vJX6Bbo/LmXbBuacfNQsrr2tpL6RCOY/69Z8RW6pBzluw5679pHoDzwRnCMuSqwwiktilJz6BiLdbtlwNCyC92m1qxyUv4Yn+oA163ivAUjo0He+rIAGCrx+Sq0Fbx3ivljlfAnnGnAx6KH4gduFZpacHJ9EWdJWb04R+1J35wFn94NrmPluCxWkKNJFN0QTAUX7EZB4guBOSK04HulF/cA901xNKFis7+jkMoiT4UyZhv4F3T9M9Oj6abr+8Eol+RYYqWqy1/T+ijS1UfN0T6DSy31uKAxnxQPMgvL/iMDjNNLkP0h5pPL4AA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=ycEafZF00N9zzFb7QKUWXvaaWImNBOBHoDnUbB3BRsg=; b=KslxM0wTZMTq9/2PYPiMMkSUb9/gXgQ2K9iFnM33KqcaQXZ9SF6FZL6HURx95ERb7FlbwRiYSDGQhSBa8b+kCoWVHumpMPd/qR6rPGEgkE5HVkkKTY5RcXHGd5ew5kPa+Nnr9zFA2B8P0i3bO3hlSAW1FxTUfhJMmoflDghE9oPPBHsnTRX2VDNflY6t1452Ql4QvMldJUqoUVE0/QS1Yt2j2Qkx3DwYB8gpXi6HrVb9D8U0CdHRxr1M2w/WMXEsiTnMtahRmn7z+LojMdAxWl3iGFL3oBupVOTISPFk/o0gB6HJKW/v+qCUEQIWMjp0RHAr3b6jSW0HNpkz6Ceb/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ycEafZF00N9zzFb7QKUWXvaaWImNBOBHoDnUbB3BRsg=; b=TVOqaAjf7HCM7IkwgVj3x9CN/MWe02ReQ7UGTdvg66sOOkgEI+ixp5H6HkWErJjth6Ghj4qfYeKafboWpH8XeU93OhjAN6Q6jHtJC0h/epxUbHyVv/p2kIfmi+yZsBbc20v4QrZoAeuj9LsBaq2BjruVqWwHvJ0ccrjzzlgcDrs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:55 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:55 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 07/14] clocksource: mips-gic-timer: Always use cluster 0 counter as clocksource Date: Sat, 11 May 2024 12:43:34 +0200 Message-Id: <20240511104341.151550-8-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: d55b0ef7-3ffb-4a2f-60e0-08dc71a74198 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: jXNsPoWWxg/pEc1PBJ5I82IOqCHXGPRrA+KTlUTzNh3xOQhC+VrkxCCEzmf29lr7LIXqLmI4RkmiGb+G97MuMRxzxfpMLwUL27f/zBKT3M8HXU6blos4XyEHs702Vct2eOYIT+B4SLfbenKZusg8ybVQkEdisO2cd521njgnp+qoFVfEZIXP03LGVy0yewktnIhTPCQhF04IURkDZlmO/ZqwRQBAj/oxABRyYpp/RZ9AUDju6sHtd9VVED2XNc5aroXUVlsfhlRyHXL3yE1BXYOJ/qS9lzf+9kTQOt9FRRfulfK5iPCn3sj6V41owqnSh8BL4YrZvOnnOlZEqZ3zF8K+6uQR5LkOtiuTMnmPIYdq4ZWmoRaRnKspQ7vZhYAaxuAInpjZHjdDkiE9DrNeQ+lsIHC/vJ0taIzD5NyBKj4NHmw8KyrKQ3Fyt91NRWWT8cpqz9ZSVzb+HSBE7iGdUTuRZmR+kqvlIh3IOLsLeaI/Cwj56L5vTH6Rm3FB/3kRqFy1eQ+lgqwwGXg00+xEuKuhRbCW/2iHHQVf2M8H9Je06VVNx4t5kBqt9Fhc7VYP1Tz0RnBWyPZCTNGUH4FGJxnH6bkYsnQJeil8jafQ5dOf6/2Wu6uv7bYhuh/LMcTlLhrnqgwC7EwilAd7zFhWud3fx1Cqw9/akchSasAGAtaM3ecmOya7Ys3+N2K+iD8hOr2JNTmUwrmQEnSHzqgs70s3EijQk03vIqN6pGX61bz31NWB3q79O8pDjjzhOUp49mQrM9Dqn6k1Gcm+Xxj0ak+bOb8qwB2Ji8dwC91j6UDKcFrVzTDNyFNzCxKUzK5+NEXGaryL+/MZflN/z0P8hF3m0Fk1C0WmpaaUbxmxfmznYEjyBfrcXsDvlH6KGC00QAbXy4myfV0gEV2qYBeqTEkmfVKmXe8vT4L1JjoyS6F1i0w+7OaPnXRi3ic8RmWir6RsNLc6m5Jk+reuhriow7drNqWzSmETrawzZQbwstfpyQj3bEF5c3oKW+0yF9xlUvQNmqsREEldLs3bojBqfAmyrt7TqYQKe3LKxtwC8xHky+IaGaONn9fha2n0L9raLiZ9jJHYZLb0e0VZ/2fThNpIt/xMy8nqdk8kEvSuSuB7PI1M1tV2RXxPs+/cRy0L3ktgKiNm4Bf8eWFd8mWafldfNbF9pY+xz5UuufLhEd4fjbN6UsAx2USUc+BQ1xfRmYiOSjK+v/KeJC/7UE7wJDPEO6N5ukUtEDtx7GMxpxGtqd5PhoxAqusR/DQkRXzSuk6fDaDymB1tdvoDS39jxCpb/aNPQyS4VR5wl/83mzUrxTXFXiWdO8k84U4NM8z3Bhb1vopzYxGI7ExRk03NQQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cbGggZ9aK08btIPpZWU0HiQHWt/WJCkvTQLa3RES12Q3lljjMWBkZtbD0f6frcElkapgm2lHNOyJzwFLuKuAnK15dE9+8g77wwpRguQ+e7YgZA8eQXIe6RtO7rHqmcViWFa13ArL/a2wu2BMNzVSn/t3cbT6Z6dpNADZ+cMrGS0inu8PZaDV5CkIzcOjnHaTCTY3QGeHBAeTllKMybs5vpLHEjbi75ZSPqNM8DNoOn2E+j5NSHrcwjGeviOUDg6xCKKopmD+kc3iDIx3T/x3zaogwYX5WeTDNWMQBP8rRDAsLENBP1Dt+lNk+YqGtEKCB92sfLnJqlsV4g4UdvEtE8nPodUfCcuOst5MmSBhkBmK4sG/wdG2SMdwoIKI+Dc8B5O9FrC6Vwz9XwJwZmgT7mNoLmK40D7u7A+2bqRqEbhXNGt7TLKZ9ro01m1rAmiLmBnSDMZiykR5C2Tj8RaUj0CFKx0Ut4pAXmuhIqWTU9mPhsV/9nt8lKG+lug3Br3bydRmZE4Tz7t6U8DxhJtZQqcVSxyL3NzWb/YWhBkkxQ+ZzTkSZaOSENn7Gl69USOgC2ZamZUVz85KqWVf/aAhnBL78z2yQq9Re4Ni8m5IICxuIW3kM/TzASfFnhD5B+Y25iKrmG0AhUXMw5ThmY5p7yhv4I3dO2mEayHwf4uXyFRj0E6O0nPhkd2zdLeV1iqEnShcNreqyfyaQsPoV1HzjCq0skol1wnZSJN1w7OYq5nLNCcpb1rNNU5IyF92mSIMCieY0nRud5tz5S4SCxIeMY7Qb8stFxNvm+hng1TEJfDr6e+o9487kGpCaqzjkMqkZBk7dcfte9GEEgbh5pK5augFCKuM0cQ5r8sFHpnhZb0pAcStCT68w9LL4ocs4T2oocww01fqnJa0AZBv3qJDxsZ/SyCDJ0GdNa0K0bbrzMLLnSU/TLmK7Wc3h7YLCwQ9ICt30Xdzb3m0OdkdWinouiUaXxEttzEAmZ1XkG4hfYCROcOPdd6TrkBMonnlgmeJF0K5Ew+NRxALr11vqTHeDpECVQ3Hcf4yrSpw61qszfHmb24dgEDH7nG+ZtzYDczILa45u0RCJM676LcI1MLlpMuwpVmccjXa0/TMGMe6uRkYh4JVvfc5xbVsJnhdSMYteqypkZIcCeRP4gBsiddhYHDQRxefzj99/aZdhuSJgA8hqcf3IqQyzRVoMCwzqP8epyNCaggtU5LZ2zzavZYItYISQHUts/avSJgWEO85BHEWhtP45nlsb+vJ8/SXqPL4N0GUR3Cw4Kv8YG6BlOO+dc/y56+d4eM/fOiCRRZwTbyUohXZRsdXWi4MxpiXtTxHnJpTuzWaVqG/WZYZcKsg49EdPMI41DkHVshQ0pX3Ln9flCNVUwmlz6XRPdSNByuZXKb9djblxJ58kNr41GNNGFIbdKGGMz25m2P42fLHe7PARvGAHPFIjKeuAfJWYCJmUEfWrFsl/1U7tCNOP2K1LMz1DD3SXsXfgUWQCl/26Jgwm1ijNy39Fcd7QkyX/cIX1VjKWOiwgM3UmOuFniaR604ZY0l5ULnyiYaphMB4VrPT3KE9isHjivgXgp6yfS0eLZgvvXMC91EVVpNSpzSlsw== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d55b0ef7-3ffb-4a2f-60e0-08dc71a74198 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:55.4464 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yVyH41qOSyNTqYp56WhW8fi2+iyxT6AN/4CXPdYohk/ZmoTDgBxW88MBBO8GCWNV6u1mlFo6m+LioFYauT6Mc76zOQd63ogGASyHNHFev6E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton In a multi-cluster MIPS system we have multiple GICs - one in each cluster - each of which has its own independent counter. The counters in each GIC are not synchronised in any way, so they can drift relative to one another through the lifetime of the system. This is problematic for a clocksource which ought to be global. Avoid problems by always accessing cluster 0's counter, using cross-cluster register access. This adds overhead so we only do so on systems where we actually have CPUs present in multiple clusters. For now, be extra conservative and don't use gic counter for vdso or sched_clock in this case. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- drivers/clocksource/mips-gic-timer.c | 39 +++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c index b3ae38f36720..ebf308916fb1 100644 --- a/drivers/clocksource/mips-gic-timer.c +++ b/drivers/clocksource/mips-gic-timer.c @@ -165,6 +165,37 @@ static u64 gic_hpt_read(struct clocksource *cs) return gic_read_count(); } +static u64 gic_hpt_read_multicluster(struct clocksource *cs) +{ + unsigned int hi, hi2, lo; + u64 count; + + mips_cm_lock_other(0, 0, 0, CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + + if (mips_cm_is64) { + count = read_gic_redir_counter(); + goto out; + } + + hi = read_gic_redir_counter_32h(); + while (true) { + lo = read_gic_redir_counter_32l(); + + /* If hi didn't change then lo didn't wrap & we're done */ + hi2 = read_gic_redir_counter_32h(); + if (hi2 == hi) + break; + + /* Otherwise, repeat with the latest hi value */ + hi = hi2; + } + + count = (((u64)hi) << 32) + lo; +out: + mips_cm_unlock_other(); + return count; +} + static struct clocksource gic_clocksource = { .name = "GIC", .read = gic_hpt_read, @@ -199,6 +230,11 @@ static int __init __gic_clocksource_init(void) /* Calculate a somewhat reasonable rating value. */ gic_clocksource.rating = 200 + gic_frequency / 10000000; + if (mips_cps_multicluster_cpus()) { + gic_clocksource.read = &gic_hpt_read_multicluster; + gic_clocksource.vdso_clock_mode = VDSO_CLOCKMODE_NONE; + } + ret = clocksource_register_hz(&gic_clocksource, gic_frequency); if (ret < 0) pr_warn("Unable to register clocksource\n"); @@ -257,7 +293,8 @@ static int __init gic_clocksource_of_init(struct device_node *node) * stable CPU frequency or on the platforms with CM3 and CPU frequency * change performed by the CPC core clocks divider. */ - if (mips_cm_revision() >= CM_REV_CM3 || !IS_ENABLED(CONFIG_CPU_FREQ)) { + if ((mips_cm_revision() >= CM_REV_CM3 || !IS_ENABLED(CONFIG_CPU_FREQ)) && + !mips_cps_multicluster_cpus()) { sched_clock_register(mips_cm_is64 ? gic_read_count_64 : gic_read_count_2x32, 64, gic_frequency); From patchwork Sat May 11 10:43:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662323 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 9C0CA57C9E; Sat, 11 May 2024 10:44:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424245; cv=fail; b=XfsrPkgZPN6cx7jnvHPGZws4R6GieZid8EbD0pG+827QtHGvtIInG7DUxzuUR+3cCJhJEfPkm/qbUsMa1fQvyO15S9Rdiws0DJ2runj+xttRzOgSXpSDbnW2hSubJlnVrPYI++4YIBp+jvY6pOBo06JyShXcd3JQtZQf3g1lkCQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424245; c=relaxed/simple; bh=ZqlHejko1LJFqsFSSAVAhkWiVHkuE2P/LOyddFG8zrI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=VpwItEDvRXCWYwn5J2kbtFKxzqb9c+67tIPsYnlJptg02fA0/hCeWtjXbvMtKbo8c1GimTGgS/JaThbqh+EsrKb3DatAwv4o0+Yw7opyP9zvtXf45zQhkYRaXtvdAk/cVbuVw8dUAaU+ErZaII8tn38T8p8WBs8BgMvyLs9L2Xw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=SuhQNGD8; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="SuhQNGD8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qp3JoDEhDNPBZ7E66uDM9GkZFKRJwBO2qgUtyEquCmbmj0BloI2vKMdAbStnjbKvhm1zTx93lM9ICi7AhPlxm4vPfB4I5szlNkniidlHowtMhid9WpPWbkW3RLZ2hbzow2ytukjUkhuNGG+wuGyblsnsmwrXkq/di0wCjZh9GW06SCzPgtFjqGNecyGBYI716jHDl+tmd4c63hQoO50QiptISx9hUIYS+8NGOSQfzuWSQYT1CAeYysJyyuCLrMZ3xVAex74veJ+F76EYqbgugWc0XgTxN2YO6Q6jXfz7wGtQtMoiG+AYKTo9xZKL89DqUraDcYMZzJx0+JOU3VUCuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=iz1LL4xwR1qY+CI3VRAXbhSeafq8ULEMhuPza2lb/BY=; b=VSqujoRi9u2oIBaKjcjVw5m3eBIDOoU7mpZS5bmfJZLmgLgCh+fSgbWvBovaQP4bJN/zilK050VOnMQPms5nevPIlmj5Y2tasgQwTdQRIS2G48JYFJE0mQMslad6+gjs46lAoLrTqQBG5gJQ4451EgPMR5vy+Qvl+x0ER2tLJs/mTfafGA1LqHHOXfs18XxefIh/j10MgS5+0sAnKO1MW9EP4/IaQAUwGDHaAp/0NIyA5WiZ4CKbJlelyqdzDCRo7RMEkW5BilDQOfQkprz5IxTuXD29fUKSpuAQQIX67gVrO9iUC6qcqCeg5oXMGQlO3SJ9OIfFN6TjovuEeGCR4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iz1LL4xwR1qY+CI3VRAXbhSeafq8ULEMhuPza2lb/BY=; b=SuhQNGD8A3lOV0pQmb3Eq9VyWpdMnTLNMNtwyJ5WBHe1r5d08NoDSQgCNjE1mGeVliBypg3TUdu9YJkh0/rCRyQYkAdqKsG1JH9ctQl9iCObNVG9VvXOZWXkHeVA0A+p46oUrnlZM8UwhXq8mXKC9aFlRB/zrxuvv76q4bPr4I8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:56 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:56 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 08/14] clocksource: mips-gic-timer: Enable counter when CPUs start Date: Sat, 11 May 2024 12:43:35 +0200 Message-Id: <20240511104341.151550-9-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d327e19-d0f4-4464-c944-08dc71a74229 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: qUhAEUKXcnkcxm1nwMi369iMT4VK/+YcOHSj09mR5LZ5Nor06lgHBl93FhHSAcBLlGNpVYJ7XcZjprCrNa+XAUBHPcow0PKiDoY1GwU5qDOgMNVUHyEPEHFS81fWMl+sbrndYdRD9NF1uhIIDQLx4F7EyVdP/2LC4vI/LkwqK90YfEfqhxxqDYTlhqe4Nq5RuyeCFJYc361f3brDNRqhwEErRl1nodkOzI0v1mQxhf/i/66bmeR04xDD1f3HH3t0ERdi2lQr2hpvan3Fx6etvw0iEZFuBTIWD4/BaSjlkMbVWylQaXiKXSmKkqpGjH907R2/bge0Wi+wnxbBUDfGWJL6GH7euMsPE92D9e0YYRroR9a4onQ2c6s4n2YV67qCnMpfLBMNd3eyjT0Yke5+aJPtq3Nax3jN9RebDUddTQ+yboBbgEwSnsENTDUUFmdBUi/PLRNvbUAPjUcEVla48ux2mhj81KYZMr79rbGQJvbBOQFIvYkW7N06fQJqYLlwyQcNL3EmcbLm7hqZrevRDTcZO/OFLIW8BQI/dHNiWz6y5KdBSDgJ0TI+hwWlIibeXjM8uMWM7+3Vxb9uWw/AUC8cWsaw/+sKGHzbdZPUN3O0Kgrq2DfsvDuWGVblFZKXHes33cvd62r/WXIrbyx1QG54QkQIBECi4OhSNuJG/u/LGNJI6Z5yqYQBA66jV0bnPNIpTzx5Tl4VQgVTu0Ebi+rbBnLShuaFbNPeZioOaRsfLw3r5rvTD6lEYyt+CK1KV8HpKU/HH83W+mc4S2AMf4OQweAUpRUHqsJ0JQsOB4MKwKkV9H6RMnzg5TT6oVOhmPehQIFLHM9ZwSucNg7LppIE8wAHwqaw+ylkUcb8Bzep5RzP1pzm3PYeQp83HRJ1QBI4JT0GBpb3cUWBADH2/piaVib7LzMistYwE1GlDixfrB9oGrZ5OG2Sj41csiCNPBe5jaIgEWluIOxzDW0WGqcsmxV462OIWN/e5h4cqg7oD1VZmnEECn2V5+BEFWd5PATrCQd9F3Mw3lhSojoP8PWnqNHAE/xlmylm/7bOE+THXQK+rvix4T7PR1KkkpAueoGtoJ95ex/T/tBrLYWnoOSfk2zPOEEA4c1VKucIklGY/vCcHpAgxFqXEQSxQd99HMciuW9dbI1gZO/lDavnq91u8TnpE3JIPrBMiCURBR8ruO10DZoukLmhLK58SFP+hNHVhPc3iqbs333AugeVxqQK3p8l3DDDm6vb034HQXGd28WbwPubEqq+l8mc9hCvJQTbD51lZhFf0OMeMICw1MD3k4gJxZlxCXOKrBuxXSY6mEpC1P4zjMUdqoUp5rwJkMzYzqfmvflTYXRAvZ/hqQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ne0e9sHvlIwq7OmQJSg24/4foc6irr0jMD6n87OqbDY4VNrhnF70MJCkAW/AHex0TTNgxpjlZ8tHVodTUBqLQf2KVNnOUOOuXptJijHgyXvHAM1ncjFbH2WSrUsWOxQkNPqJqZkZIYSuLUi7ud4Gs7DZr36kmEfJfa4HpM3gFNpIkIAFq+/htu6bZp6GDVL8LDZBX4aP7SrUzbz9Q4+HuEpVzVNrQEI2nZSkKvNuj2s4GKV3oN3yUAmV6tgvj7LocvBKep1yZkGbQcIFYthUCPD/MADYcyo5fgdtiA7hYOyAAbWwYpM9g3AgW9sFMFHDfC5Fb+Gj2r1F7DWgfl0KGiBAk1yTUhInDQmED1srrN/J8tOOvOHG68hLSuLTK/zguEyhQrThdBpLGrydN738pMviCO6fnOB/4jGheo2bfAmLtu4ZHovs1jdKCD/N3cW6voRMXQXOcjSewGo7qK/aSMzpvsikjW6spEOsp1AHXV7MqWehA95sLQO24h7Jfcwk/mbvS82O10HMpkfM/g5l8zriLg2TODl3Gv4v1XYnO0s7RFGElocWnzafe0tKRRBVY5BsLF7JM1g7ojWX5f/mdjjldKcA148HB0RlGzXYy0D2bR6wKRWm7TZtHZsPS+yCX+mL4HAnFuSP5YDSJCWibW1mn0XIysY0l9rKQr8TdMwwxiz4vA1ukDZ9ZWZFHvAIsRyp7MUidSnWzaecik35ps8M793hnounv+VUihcZOnVpALh3PtTs6Py7KtX5q8XtY2XGpBx7a2ECT852BEwum+Aet6Gu/62O5+Ewkg19T2BZmX8NGm7SAu5bKeq1sCatnh/y+ia6DySs35fppIHvUmsikr6krMqygLfGkMNHvWvLdXLTgct0NUnpaaPs9BE2eulEHyL1I+ejTzNX9R3kRYjp8kaRnKVY+kmx1diiGHvn8vW9O7mAd2q8UT3yxzYiurcf4BkmN16BZw5L99q5Vq6iVQRgU58BksP7CClD6jxyGVRFzNdFwfJYdO7nF52AQ+5A6hqGOjMyCcnwYlLe5OuPM2j2sWMWLxgJOwWOAJb0pgN48+DuNca2Yv+5VZluFSOVQhuRO+0Yma2wh3rhHhMf6C0AKyypc9SG2un66BKX7eibFo00YbHSldOEt5x64ShYtRcg/G/EjqEABeF8mirPlagP4RirIq11FJZPvl0x1D1ngdnue/gJwruQD4GrPBkCGiYAbFPlutHUkClZ9asgDZwAL55BwW0ac1islzqVc4iN73k4d4RvOIeax0o71hH/u72j1bzchcvG960Sa6ntMcJniMc1B4knN5yWeKi9LVnMHfc5CSOXtonGlQXpLzW2qHWB2Awl3DiSK6As3UWEHPUG86z79cbIM5dzNISfl5slnh64kiXtHf6Kcmy76gsA66uhR9vauPcr044tdqxNKgcdXWHzPHOH9wmbBuV/uqZ/9da56O4ulw2NaIsIxwK8TD/a61nKzjmFG1YVW/xjKr7MJsrKdNXP56MCWOM7h8Z14O/1YUgnmevcUKRF3ebTa+otoCaa2IWgbHuHv/lg6/9LCpJLwlTDgN6tUBwk3AQ4LkMhX4xpLyKXmyXWyIq83oU2LfHtQSJy/gwsqw== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d327e19-d0f4-4464-c944-08dc71a74229 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:56.3987 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lPitt4rsU0l09X7QcscaCQjurfaIqdlOURttv11feJ7lThRB2HgvM1pJPSrPSNR5CCGCCKz1wUE5kXlJ5YYKgxTpg+HHOKKrCO4KiwI4Vog= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton In multi-cluster MIPS I6500 systems we have a GIC in each cluster, each with its own counter. When a cluster powers up the counter will be stopped, with the COUNTSTOP bit set in the GIC_CONFIG register. In single cluster systems it has been fine for us to clear COUNTSTOP once in gic_clocksource_of_init() in order to start the counter, since with only one cluster we know that we won't be resetting that cluster's GIC at any point (ignoring suspend/resume cycles which would need to handle clearing COUNTSTOP in the resume path). Once we support multi-cluster systems this will only have started the counter in the boot cluster, and any CPUs in other clusters will find their counter stopped which will break the GIC clock_event_device. Resolve this by having CPUs clear the COUNTSTOP bit when they come online, using the existing gic_starting_cpu() CPU hotplug callback. This will allow CPUs in secondary clusters to ensure that the cluster's GIC counter is running as expected. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo Reviewed-by: Philippe Mathieu-Daudé --- drivers/clocksource/mips-gic-timer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c index ebf308916fb1..4d7659c119e1 100644 --- a/drivers/clocksource/mips-gic-timer.c +++ b/drivers/clocksource/mips-gic-timer.c @@ -114,6 +114,9 @@ static void gic_update_frequency(void *data) static int gic_starting_cpu(unsigned int cpu) { + /* Ensure the GIC counter is running */ + clear_gic_config(GIC_CONFIG_COUNTSTOP); + gic_clockevent_cpu_init(cpu, this_cpu_ptr(&gic_clockevent_device)); return 0; } @@ -284,9 +287,6 @@ static int __init gic_clocksource_of_init(struct device_node *node) pr_warn("Unable to register clock notifier\n"); } - /* And finally start the counter */ - clear_gic_config(GIC_CONFIG_COUNTSTOP); - /* * It's safe to use the MIPS GIC timer as a sched clock source only if * its ticks are stable, which is true on either the platforms with From patchwork Sat May 11 10:43:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662324 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 B391154278; Sat, 11 May 2024 10:44:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424245; cv=fail; b=Rr8P4tBWV4iX5ndaBXKxV7mJMeQS0uuAdwJShZzLaTFICJz3XatEkEbcw/pDB11FtSDPm2RLKV7l9o37oN6gjsVKcH+zaELZBzNw4TAlYxJo6CRTmm/m2cMfvN1wNErCRRcGdJEOfQvLQw701p17u4QIvx3C60JFqslhAKj/rNM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424245; c=relaxed/simple; bh=0eQ2D7SqI3x3pkcdFxyKDWIBDFaIORLehudZLhTuHek=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=AMcM1ptGzV8O3rmdNbdul3qUku5TnvDlc3iKThvTWnA5vI7OWjq1tV5b9lKbLMS7hQGrDQ6vD1umxB6CxiqU1DaPl5bptGzJPKOFKpoz7tpVTdLKGov+bsI/lVq4QwHRfbSEPaqhTAMKsXO/mKBsdCyqoBU/WAct4go5sKgvs7o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=0WthayAN; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="0WthayAN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a3eO6zxqvLZ3P7NXaCsZDxgTzMBnKszyxvLyAFPxbbXsydz3nv1ET8Pa8v7XlZLxqKNgv4x6nEUrKrkQ57abw+qi63CNNtQm8Evsf9R7Pfzgtss96u59aucYtr/GUNfQ/q5JSIdkxwNoi5/9Khn5qP06rghhlKYsCi/pFCRsf7sO/Ue9hUWM8HJ0STfhKBKP6ji78Z6t+Jsjt5LgN+lovtaQJld+qichHvbSPsYnkBTrODL9V22LcuiV0NdFaENdETvoumfRe3CfuSKjbtos7oD5sDLaH6dILeKdluu8teUjaj2A5BXJUtZF6pWUvIDs6rN6UBielghDuALlbyOvrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Ct2Cg0KG7EH/O+Dk8ak7pvWe7+OldfaueVSVk84gMb8=; b=S8lps4f8/0aZfezqUmBChYv/x1hhVdSK1bPeyBsdopeFKLq3EHChi0vTsO65g3/0PEFS9Imdvx46vANqVRyZx8oz47MJ10373GrBmIQgyGHJi9ddsCUOPk/xSKIbq3hcFkwxNvaNbKKNyLXUem/FJM4cFJwN8frkEFZrzkGAIJmsU+NrQdegdYc+xfqbKGNFa5DQ7nE0ma2i+YUCijqkY3KYndwIq2c5GjVxe8DZFM3umv053eI/tfXl43Rofgj4AFN124kai3SgCp/mCIuNs5hA66q6nIklv+xSfRrXua1FREm/SMQTr3fH7s7n+GVQWMHIY+YYzeI8Q+MYcip3OA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ct2Cg0KG7EH/O+Dk8ak7pvWe7+OldfaueVSVk84gMb8=; b=0WthayANb46Ti2KuJkXxOUm6hV7L394wKnvYrNRhcZRHO1Oru495nRTWzDN5gjloc7a/822Vn6XcB3bs9p0Ruf6OVbdUuLGM+QYpOgoEM75AyNbTe0uA17tD1eka0oDkuYC6s37X8PWRBEe3f7odEJF/bv1BtMNRfSq3+78AkqM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:57 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:57 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 09/14] MIPS: pm-cps: Use per-CPU variables as per-CPU, not per-core Date: Sat, 11 May 2024 12:43:36 +0200 Message-Id: <20240511104341.151550-10-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 7fcdf014-855e-4889-54d9-08dc71a742ba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: iZ91aXeRDOV5zsNyg/eSbz8F2wH3M4if92UhNMw9b5zctsOhzQke/xDW4U3NLhoTmr4NpdR2fX0N+vjdFIZjLSFrKXZm/3PVFGJJHIbA2yFXBS+5riXhO19CY3GKH7tcJwWOiLKuMOorcSut+yPqFby2ue0wKZcFF4xw08lrESkO2rGPRKFpoeRHv11tRbPab9XIGa0c3ctMStdTTl3Vv+6N4TMxVWWJ2Y3MTXwxLBZ056wvzZvPEElh34qutNtZ2TLsKBzS+bCKOMHJDjS70ts61NCpdna+8aRaReBPkpWuySwHJZ0xf3yxZQm6j4gmidz+0kxyekzAr0bWMJ44YrfBseaNWNTovbmvuHONF3ntGSzVaDLVSEQiM1/uqbOT6gC6eheZpWon7gBBuySFADGymC4Qe8/br3D5Ge9p5LJaPqonG8g1u9L0kwHxnit4fU5Wl1Ew0iE2LfuHxvmA245BTEsFTVdXSkDPDZGzJSPZhBwbh4Z9JcwloGuH8ABnEv5FFg6Bi5XtJX7ImKA1/6kRILVcm4jiy3scAr7fqnB6Lc5a/5+FpIxvfTz3nSjaO2V0gHJCoEXj7aNRP5WIrKntSBSvJzm/0fNLAuclMN7vStogMnEO+7ZrYFI6g4uQYeckGocHS1umiH//O+/EfZVqh1bsrfN++cScjwLzYWu1eHtTe3l2d+JgkEIdYXJJsi8+dQERexNpdnPR3j3UUv3q9ba1RcaKKcxVcgqDm+O1Pn/i10+JwmtABl60jtTvVvgJEgGCZB0QV8mjihouwpXme6ASeqzxDQqPG8wlP70JgLVRXUUo+BiYoFalsFbsR5KYRPadP585HcMnxw+KYBtr03JGQe2v7uIJptxMMSC83dlrqGUGVc/8g1uv0MxKEvkExamuz0ls0BbUNTncQMcICeRC7TKuEhFKwWtReO/msvf82vOFrE6Qc+8z47/FF1g4RJGfYHUZC8g+poqjilvKqlCTwIgpGZluviHRFP4lS1gIrSwk9hqRSuLKyIXvwcupo2zI9f9jD889R9aQ1wcjxMkU2XlkdAgAOdj4Rvg/Tso1H6b+eE265s8EE+xBVRVNFIC4zDNta/oxk1cZt7PtHohrk5p+DYa0/JmmV9Ebx/LO8Ldahz1AUxugZkXEaMZO26jmGJYpq2aG2UfuHTlpTxiENALjnvNgL4k2Z3BAXBFJ/0DcIoDZmPHIdZXo5RlCjoALJGEtNtOeaXi5HQgYO2+1TUPJbGzRzeyufnOEXRhYMkwcBP1kBttLWPrzPbbLsD14jsO6mqDUaBxIOO5AYxzAvadwd6NHmU8p+2xXu5fxtwmML3OH6ffpKh/c9LUs+CQ99zR7EUz5xfiARA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6R/4RH6K04L3el6fUGLYv4FYz0wjkOlarP/s1/eVTw90O8BibI5ngJ2IjNHj6wTwjzPdL1QEbku7cSoiPoQ339Evjuy2dvTcpPHWJGqhaN01Bd0lCpWGgosK0STB8QiinrpWyX/z74vl94uRAj/aTLNT9R7vbwDj7fOJl7nHp36CD/Sl0F3mJrjKz6/ElrNs835cPYlO6ZdbRKBc45jm+8S0R4V7VrWf7kxA6BJN4Cjvq/c4IcwqdGp2VryunRmYx6w5FRakHGA4DxDBIb2wzPFtjuqGqT3jC0OmL+QHXH8fwu9rvQWRNMNm1zlDlDiBVkAAhKg5l1R9/akWHfnrvEErCwYVQT7mtBmmg9X0ue6abEKkOKvD5G8tGjeem4kwp2qCFmXcszawa7N+Z9uaS6LzMtFT9C3bdQoo9ZsgWWkV1nnvhAY+x1/azBjUar/fNnZw2b2U7NXz1fLyNzmE+ePKTfp6si175BqlUVpTyVXeZZ7tMM7ubzrcqGQFiyC6weKvSo+jR815L46gq0Kb4o+2HEqcLEbANmKS0ht5/MUI2SZh18r63UF9dJB1waK9hOpg5VXAeJ3naqOq4NhPvi+fzfSLtLWR/Wm952/eJhiujKcJlv6bUAC9pscj+oZ84++B7+BiCdwk+tvwCdYSptY3oqMtcvdlAv0K6RWxyWuwq57qlg2+g708/eYALBHW6AnYFjW5HZnh6GfCUXx+wnsFYZXDUn/4wdcA4x25KICZByqy4cp08ObaKsrzjUli0fd5GQzybWTBrialWO3SY8w9VuW0g6bkYqwuwWMGqwNE6vRZFi2C4ZSEa08K0+qMuk6h8YOgFj9JcqP16HkvHeJtNlfFYvPfPzj3496n5t5KYHqwU8FRAqqCGeftMM3lbW/jwO2K0xR5AYZYmmB8xCuHr8YcJGVVzjuomdPL1qK1D6ni8es0pGZxPH6aLmxKVsNZYUklT+n7OdLHcOLDQNk8C11Y5JmfvOc5uorAThQbAiAZ1BkPtpjQTmngxrypVYR+4Qy1pY6V33Yrm3XEcO/v4FW/rkHw7DEiurMn00/QCzeePEWuQiQnYRab8va43MNkr0JPrNVyY3IMT5I1Zj47zlmL99jz0qKGFu36AOntR2R9wIxzq0t4RvAY4BxDb/t01iIQZn+yymWuN3rBRCkgg6N0ZQLXu97W1eww3hxSbR/EUKAfqJcGtHWArH9t2vya+OcUgj2A5HeCY4GQrVKwmgzqK3U2lhcyLFGSTL9CDUHO0mAv2OO/RftF+93iYwuTWUS8kuDiJabGLmzPoz/jC7NVBzbg2FBnqsPfyTcTSbPy2SmjMwETilT9xENTvIcDU68Wh+EcefMhxzhTNmZPjNJXDekmmGZE3gTPo2B4+I5jnrEe7nhv866MMp5PdLDePkh8iQOvoyzNTQIA9QatweSMbIQPJAYJPQqYwKsgeisF69Qbo3Ohey4aAboGfEVOiP868xThyLv7pVrNdII/2mGDxtKnNgCvdKEyCXmkHhrN/nfc+RWkYxy3eZz5c0PTUzlZAnNs3FmdfFnokzbSXY2O5HQc1zTEBhb0/h72BlJ0adhEXoN81373ll4yvoD7E8Otuafinbc6uMZN7Q== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fcdf014-855e-4889-54d9-08dc71a742ba X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:57.3692 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U+RmZhF1oAPFE70qHiHG80TEm1Kw7eN2DnSJZHQhiKvKqIQXbChsNyx/9V9Q9OcrBGcU5mC8jqtcbJZCjulCcjygt2OGLaQZWWtMfFKGFWM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton The pm-cps code has up until now used per-CPU variables indexed by core, rather than CPU number, in order to share data amongst sibling CPUs (ie. VPs/threads in a core). This works fine for single cluster systems, but with multi-cluster systems a core number is no longer unique in the system, leading to sharing between CPUs that are not actually siblings. Avoid this issue by using per-CPU variables as they are more generally used - ie. access them using CPU numbers rather than core numbers. Sharing between siblings is then accomplished by: - Assigning the same pointer to entries for each sibling CPU for the nc_asm_enter & ready_count variables, which allow this by virtue of being per-CPU pointers. - Indexing by the first CPU set in a CPUs cpu_sibling_map in the case of pm_barrier, for which we can't use the previous approach because the per-CPU variable is not a pointer. Signed-off-by: Paul Burton Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- arch/mips/kernel/pm-cps.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c index d09ca77e624d..9369a8dc385e 100644 --- a/arch/mips/kernel/pm-cps.c +++ b/arch/mips/kernel/pm-cps.c @@ -57,10 +57,7 @@ static DEFINE_PER_CPU_ALIGNED(u32*, ready_count); /* Indicates online CPUs coupled with the current CPU */ static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled); -/* - * Used to synchronize entry to deep idle states. Actually per-core rather - * than per-CPU. - */ +/* Used to synchronize entry to deep idle states */ static DEFINE_PER_CPU_ALIGNED(atomic_t, pm_barrier); /* Saved CPU state across the CPS_PM_POWER_GATED state */ @@ -112,9 +109,10 @@ int cps_pm_enter_state(enum cps_pm_state state) cps_nc_entry_fn entry; struct core_boot_config *core_cfg; struct vpe_boot_config *vpe_cfg; + atomic_t *barrier; /* Check that there is an entry function for this state */ - entry = per_cpu(nc_asm_enter, core)[state]; + entry = per_cpu(nc_asm_enter, cpu)[state]; if (!entry) return -EINVAL; @@ -150,7 +148,7 @@ int cps_pm_enter_state(enum cps_pm_state state) smp_mb__after_atomic(); /* Create a non-coherent mapping of the core ready_count */ - core_ready_count = per_cpu(ready_count, core); + core_ready_count = per_cpu(ready_count, cpu); nc_addr = kmap_noncoherent(virt_to_page(core_ready_count), (unsigned long)core_ready_count); nc_addr += ((unsigned long)core_ready_count & ~PAGE_MASK); @@ -158,7 +156,8 @@ int cps_pm_enter_state(enum cps_pm_state state) /* Ensure ready_count is zero-initialised before the assembly runs */ WRITE_ONCE(*nc_core_ready_count, 0); - coupled_barrier(&per_cpu(pm_barrier, core), online); + barrier = &per_cpu(pm_barrier, cpumask_first(&cpu_sibling_map[cpu])); + coupled_barrier(barrier, online); /* Run the generated entry code */ left = entry(online, nc_core_ready_count); @@ -629,12 +628,14 @@ static void *cps_gen_entry_code(unsigned cpu, enum cps_pm_state state) static int cps_pm_online_cpu(unsigned int cpu) { - enum cps_pm_state state; - unsigned core = cpu_core(&cpu_data[cpu]); + unsigned int sibling, core; void *entry_fn, *core_rc; + enum cps_pm_state state; + + core = cpu_core(&cpu_data[cpu]); for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) { - if (per_cpu(nc_asm_enter, core)[state]) + if (per_cpu(nc_asm_enter, cpu)[state]) continue; if (!test_bit(state, state_support)) continue; @@ -646,16 +647,19 @@ static int cps_pm_online_cpu(unsigned int cpu) clear_bit(state, state_support); } - per_cpu(nc_asm_enter, core)[state] = entry_fn; + for_each_cpu(sibling, &cpu_sibling_map[cpu]) + per_cpu(nc_asm_enter, sibling)[state] = entry_fn; } - if (!per_cpu(ready_count, core)) { + if (!per_cpu(ready_count, cpu)) { core_rc = kmalloc(sizeof(u32), GFP_KERNEL); if (!core_rc) { pr_err("Failed allocate core %u ready_count\n", core); return -ENOMEM; } - per_cpu(ready_count, core) = core_rc; + + for_each_cpu(sibling, &cpu_sibling_map[cpu]) + per_cpu(ready_count, sibling) = core_rc; } return 0; From patchwork Sat May 11 10:43:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662325 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 B4FB45EE82; Sat, 11 May 2024 10:44:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424247; cv=fail; b=SberdTN9JMw/GVj3PhrZEXQzvcl300vkgF0eU9NpxkaOSnM+d48JMZjE7gBAh87GMRB5L1e9PVlJXfgXjCC4DJD3ZLY5mj42F246yHyEIj30d1lZ4IH7mW7H8IqkCQayopnPsuTt7StzQ63HuMA2dV3Mh52H4J+OSesMuxyCz6k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424247; c=relaxed/simple; bh=QuJLKL473VgioPeN/Lb3jpSC2sSOrhHkr48Yw1sQiEw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=suEyoYoqBTKR75m4wTW8mD2eN5yUOxoumKDe+RT2/XcdB19Fc7HTbE8SkpfBkbLLvam8zAkceytg4Tzf+eX/kxuyBNDDcJnZgT6MBP6Tp9ovrj/WJ5h7L4RvHUzm36Y8qX1yD0CN3v1In0uYcnxgPv8guORC1LwMM263hXD99eU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=EPsL7HaY; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="EPsL7HaY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oT5iDceObTb+iIsm51mzjIhEmFucDcjGhtBsCpUAoRAsdusEgjRcvxMQaGOs2ivV7pvELDBS1ZMOQrtzKV9n+oPoU22RiBs3u8KuISFNkrjIVtP8JU8KB5+wffE3ipOtEFhFt0E1M9aqdIwDzzrqCIvAYzxYtE7XvaPRqY6LVofoDz6yRcBmyNRz4vMFd2fVJfoW4sX3wQVJlJC3+18wP2G/Wr7/l/Rnz/X1ACjYADctbRtBKER+p3wYUJ53PY/5ZipogyxkuZgtNLzCshqs98GzEEzpOF88i9XRqC4DiF4UFfTJArQE01RwH6IvjK+zqLrwBleTGgAIJW8WMwcrxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=T5mTArWVuJa9HvUvkDmu0MtWRXf5bLcDyN2lFWbkSrQ=; b=fw8jv7eOgDvVU++o52612QLtBnONNYM3JEuT+/54q00L+t+SFktGgCW1qReDzP1p8X7fR3vR26RONQGWJDUBXEKqCZlTZe67WXzpDrv/HhMrLPw6Ojf7XLP3Fbz6hG6WvW47gpAto9YrYcj3+kv/KlMI6Y9XybIKBDqKWxIzcSrWi9e85tGNzc6o1fYWwsV6Tekmn9qVow3lAwN9GuwJdnwwq2+bayi/FNNle93WU23vvrJhuKUte5yBCKSubnReFW1XvsrYqSJ/WZUjdRF2JntYgbYVjZorbb6laU0XIqgGC9PZ+CArjskgQt3+zEVGE0gRvIcf0ZeLtK8cGxoTZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T5mTArWVuJa9HvUvkDmu0MtWRXf5bLcDyN2lFWbkSrQ=; b=EPsL7HaY28zaQ/gCoNzPDEi340l2zBpxJhI8dTatj6vbBvOAaYKE8Apgv1V4z8QPTiU50eoZTV0b1GWJtQxJpYtdcDXFAcUFsrWm6YcrIQiPWgLlU2lornT45+GzcgeUATozOBz3LZQ7Sh0hq9IThbiJYgPNNUuoz1TPmYi/dHs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:58 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:58 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 10/14] MIPS: CPS: Introduce struct cluster_boot_config Date: Sat, 11 May 2024 12:43:37 +0200 Message-Id: <20240511104341.151550-11-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: ae9950dc-14a5-4627-0d99-08dc71a7434b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: 8p7g20IalRsY47tOEDwIgn9zaQj1pkMQusV9CBsVbJDyCKT2ABwCLA1qg5f8uosaBCDIxdlMHUbnWOF6ZerJB16yiyl/MPwR/pWgoSd8W6toxA/M8TMvOcLlhqGuLF5XNVoPSJDuwJzG3SvZwEeA5ekjVQ2HO4SDBhTAjXA33R9e7oad1Vx32YeELCkEl1GfUq9ON1aFYIxSgrMzwESQSajB/URpcHwMVudRex6C/hAvXA3MZhN+DOBGgf7lCp43Qp5TxSGZA8Fy/Nu6bMCcaamDli7MJ2N8rVwLrcYTMd9Mg7OezMVurJpDoOIL2B2x5pAsxeV/MpfvjHyJFOK6iIzLO/x2iXjTJ4pXalPWf41KrRtGcgtFz9CNbs4Z+wGmk/u3qbSws9D6OfW92rkvUcE3YpF/itVPsGZOCZKwRwMNcJY7F0XYSmixH/e0B2GDGcmRz6fQKh1Cb5C5VWiBsC83GZYfV3Dr7S4Jwrl9F5mkqH6/RR6CQHzjwPolHCKOqsmjQ+iiMA26FzjnQvA9XkXe0qo0XYocoFunQCoMH24ARctogstSHNnCkHwWCnDVxTpsWASfjSEh6Fqt2zmUSWQYAXWddYqva+T2vs8Bhm3zwshlbsiO2ERwj1T9IWgvmb/zHK6LdWRCpRgEo/msmASNZGVeVE7lrUgfGokmgJkuTvEfBXVYpaIsZ3ZZqueIjmsdtT3UsDnQ6NDC3MRDBWhVgwWauov7SQ7efL+MMyfkW2Z4beh7E0R6hcR4iyA/wspQ0aaTvW0Jd6+JHIGUJCk8CCfDlEd15u127N9a9o/GL27Ij7XqL7SVxUHshqkjn0l5VIvHcumIO2g7/mMBwS1I7BUwH2+9ZmJKMqYGzOc5vdrHIoK7TPOHMifBRTWbkYWzO0nFwVAWvmcZ7YsLDX47PoQazrP4AxlavcjKKnatZjV0giUqS3n1OzkkeF+9oAmIqJ6YMBaE6uYePc7pdTd0ZgCjbbfgBFKYW3qbGcIma1n0Ws4ttmidgiXiSxP/fW2Kzl2g2c0q3kPqhZHWClChjkhi5hIcwe5VYt1PCqp0hHpQ6WOrQu59cacNsxHFpYo+1UoiczCAXUXg41WGMLz7hRmaHa/HV9jMUdIiT9hg+qxytYP/T8h3Wr1rl/GYQephoTnu/5206ogf+dZZ5KaNBMwld0sOy20ukixM+aa1l3I/Gg+Amk9iou1H3AJeIf6jz+HHrYj8LPQc4IxIA87k5Aqr0OesHhf+j39oQkk5PgFmJ1Yo3mXV92y4q6dGmeFTbU1S8+4Cz44D5pu3wxUeU5loUEW+iV5r/sWKazgUCKS9otHvP/qG6Cz3bqJCaj+ripEJRbYS3JS/mWd2lA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0rccz3zseV6iCw6uvBqMTmmL0rLTzkMgxWht2cAjBCCWbg4n5rQhsQZ4N7XAhQ8XH/dfaqBwk+A1KI6jpr731Dd5p6bmJt0S9whFR/ix78ir16+9bf/1ci96+8dwpwf2M9cFlUJVShM8apNxtTqXkiNd3NsFS9bxXXUoGe8C0T+93RwBi7LY492GtNS0p2JUB1KajEx3Zn/uO/6cy1cTMq5SG6Z0jQG6IXwgz7VHij4L6StPhr0AW9BGftZMTmwcBDMMwLyj0FXKQuq8CbuTgFYS20nJB3p86McC6IyE7dtX39wKlMilMIbEcW2OP43gxXAdpua4GdDRCcqYxVJlHqfOZDOBUfnbrAO2/r0KQ6plxSSwaV9PJaccWj1lxbW28xTHGy4XGGIbDcl3CzXYiJs1UJlSG44qON8QJjQrIczOliouS564M/CAr1Wcy+nYJBLu2a/jVoS0Sh0tY6MEN1LOZXuBrQOka9AHvtLsq8BipoclnKPiR2w2/Fk9X/QmbGiGJKlfRoDj9NuU8HwNIoqcXDqf9cfDj+i9SjpNdnKAEnmd8a6YGNhf3hxtL+1p7Islt4A+N8oWEtGiXFaJEW90lRNp0KRp2txPFEmdGjH058TsYrqLocEIUeXKg1dAMWr1NFEqGTvIAUlJYpym6ssD71TpB9cJdGmw0DGjFITi+U6fMjNdqRID/9IiOS/frQoFSE0HAJm3jLh2BGw14ZADbrodoxk/eHI3tNeDa/nnrHtvmnOf0l0uftZBM5ryLZ5QGodN9bs8QHrHgKmBzCPtyfkESRTPb+pqRUOr/MUI9GvBBoNhWDKKT5XTSxPW2pHeJ4gTp6h0pi++37t4YL7iHuhifF06YD5mQelgyJ9nHzhj81vuHa4JJ5X3/GjKqSOZC6IU8t6nOHThIwDQdaHUe5su0gZ3WSwIM4t+blhZgTJ4UwMJtOw9Vj/RkN6JWNRkV0qErcTyu4r5S8vTStRvzEUg6bs/1W9lui7g9DdO1/YEZj+vRKzSgteGGQ/dFTwunBf5Xzh3P+oKUo6DLxj49fYuqR8blem4P33K3VHbhrWFvez7B8HVXFq5rTvl+0ycjEC6qZzcyblMldvqFcnDVG3SnvrbPBIj9WPZJiK+SwFTz2P0ptlV/E7nTxRk8sEnJhM8hybmDhWN+wvIlY+VCKIEyQy+duWnRW+Gs3e31TRHpfGkiTvlo/Mlx/DKb+4aO91xLOgd/z6vn1Ji6MGlFszUOqf3gvpW363c/KCEiGFo19rxwUlmmh53TUPmXztOmwdHu/IZRi7wx/KK8HDpySQnk031oJ9gJv5zA8AOdRmbz+IKBjISrHwq1b1Tafyjo0e3jjvPBqVmg08Nz7itPZAHBYOpV20to/FnqDT0cmwTYHUK4ikBdL/jzkKR8i/U59lGa7X4r3X52OT7VoUt2rZ3Wf39TRKGo3yCn2+jRmH00sRvtWxiri+inWKup4gnBxRpRafxtONOl0L3OFc0Q50gxOR8XiCNbID9WymntGyhS1V1/vopZDn6UC3qu/0GwivJArBKdQADZziEI/HUssdsai5iYHSsGQpBh8ThCHXS8ENepScdNCevh6Frotsdl26rP9BZdPN39dat/A== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae9950dc-14a5-4627-0d99-08dc71a7434b X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:58.3052 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IFt/UC70ynLc9FAMFZIKHr9pgNiWoodao7g77kU8z0dK7j2jOcUgUijxfA92G9ofyG25hqffQyJiQ32fHo+jmaz87gVt327OmzCwDED/I5c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton In preparation for supporting multi-cluster systems, introduce a struct cluster_boot_config as an extra layer in the boot configuration maintained by the MIPS Coherent Processing System (CPS) SMP implementation. For now only one struct cluster_boot_config will be allocated & we'll simply defererence its core_config field to find the struct core_boot_config array which we use to boot as usual. Signed-off-by: Paul Burton Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- arch/mips/include/asm/smp-cps.h | 6 ++- arch/mips/kernel/asm-offsets.c | 3 ++ arch/mips/kernel/cps-vec.S | 19 ++++++-- arch/mips/kernel/pm-cps.c | 5 +- arch/mips/kernel/smp-cps.c | 82 +++++++++++++++++++++------------ 5 files changed, 81 insertions(+), 34 deletions(-) diff --git a/arch/mips/include/asm/smp-cps.h b/arch/mips/include/asm/smp-cps.h index ab94e50f62b8..a629e948a6fd 100644 --- a/arch/mips/include/asm/smp-cps.h +++ b/arch/mips/include/asm/smp-cps.h @@ -22,7 +22,11 @@ struct core_boot_config { struct vpe_boot_config *vpe_config; }; -extern struct core_boot_config *mips_cps_core_bootcfg; +struct cluster_boot_config { + struct core_boot_config *core_config; +}; + +extern struct cluster_boot_config *mips_cps_cluster_bootcfg; extern void mips_cps_core_boot(int cca, void __iomem *gcr_base); extern void mips_cps_core_init(void); diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index cb1045ebab06..b29944160b28 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c @@ -404,6 +404,9 @@ void output_cps_defines(void) { COMMENT(" MIPS CPS offsets. "); + OFFSET(CLUSTERBOOTCFG_CORECONFIG, cluster_boot_config, core_config); + DEFINE(CLUSTERBOOTCFG_SIZE, sizeof(struct cluster_boot_config)); + OFFSET(COREBOOTCFG_VPEMASK, core_boot_config, vpe_mask); OFFSET(COREBOOTCFG_VPECONFIG, core_boot_config, vpe_config); DEFINE(COREBOOTCFG_SIZE, sizeof(struct core_boot_config)); diff --git a/arch/mips/kernel/cps-vec.S b/arch/mips/kernel/cps-vec.S index f876309130ad..2ae7034a3d5c 100644 --- a/arch/mips/kernel/cps-vec.S +++ b/arch/mips/kernel/cps-vec.S @@ -19,6 +19,10 @@ #define GCR_CPC_BASE_OFS 0x0088 #define GCR_CL_COHERENCE_OFS 0x2008 #define GCR_CL_ID_OFS 0x2028 +#define CM3_GCR_Cx_ID_CLUSTER_SHF 8 +#define CM3_GCR_Cx_ID_CLUSTER_MSK (0xff << 8) +#define CM3_GCR_Cx_ID_CORENUM_SHF 0 +#define CM3_GCR_Cx_ID_CORENUM_MSK (0xff << 0) #define CPC_CL_VC_STOP_OFS 0x2020 #define CPC_CL_VC_RUN_OFS 0x2028 @@ -271,12 +275,21 @@ LEAF(mips_cps_core_init) */ LEAF(mips_cps_get_bootcfg) /* Calculate a pointer to this cores struct core_boot_config */ + PTR_LA v0, mips_cps_cluster_bootcfg + PTR_L v0, 0(v0) lw t0, GCR_CL_ID_OFS(s1) +#ifdef CONFIG_CPU_MIPSR6 + ext t1, t0, CM3_GCR_Cx_ID_CLUSTER_SHF, 8 + li t2, CLUSTERBOOTCFG_SIZE + mul t1, t1, t2 + PTR_ADDU \ + v0, v0, t1 +#endif + PTR_L v0, CLUSTERBOOTCFG_CORECONFIG(v0) + andi t0, t0, CM3_GCR_Cx_ID_CORENUM_MSK li t1, COREBOOTCFG_SIZE mul t0, t0, t1 - PTR_LA t1, mips_cps_core_bootcfg - PTR_L t1, 0(t1) - PTR_ADDU v0, t0, t1 + PTR_ADDU v0, v0, t0 /* Calculate this VPEs ID. If the core doesn't support MT use 0 */ li t9, 0 diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c index 9369a8dc385e..3de0e05e0511 100644 --- a/arch/mips/kernel/pm-cps.c +++ b/arch/mips/kernel/pm-cps.c @@ -101,12 +101,14 @@ static void coupled_barrier(atomic_t *a, unsigned online) int cps_pm_enter_state(enum cps_pm_state state) { unsigned cpu = smp_processor_id(); + unsigned int cluster = cpu_cluster(¤t_cpu_data); unsigned core = cpu_core(¤t_cpu_data); unsigned online, left; cpumask_t *coupled_mask = this_cpu_ptr(&online_coupled); u32 *core_ready_count, *nc_core_ready_count; void *nc_addr; cps_nc_entry_fn entry; + struct cluster_boot_config *cluster_cfg; struct core_boot_config *core_cfg; struct vpe_boot_config *vpe_cfg; atomic_t *barrier; @@ -136,7 +138,8 @@ int cps_pm_enter_state(enum cps_pm_state state) if (!mips_cps_smp_in_use()) return -EINVAL; - core_cfg = &mips_cps_core_bootcfg[core]; + cluster_cfg = &mips_cps_cluster_bootcfg[cluster]; + core_cfg = &cluster_cfg->core_config[core]; vpe_cfg = &core_cfg->vpe_config[cpu_vpe_id(¤t_cpu_data)]; vpe_cfg->pc = (unsigned long)mips_cps_pm_restore; vpe_cfg->gp = (unsigned long)current_thread_info(); diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c index 9cc087dd1c19..1954c9e912b2 100644 --- a/arch/mips/kernel/smp-cps.c +++ b/arch/mips/kernel/smp-cps.c @@ -40,7 +40,7 @@ static DECLARE_BITMAP(core_power, NR_CPUS); static uint32_t core_entry_reg; static phys_addr_t cps_vec_pa; -struct core_boot_config *mips_cps_core_bootcfg; +struct cluster_boot_config *mips_cps_cluster_bootcfg; static unsigned __init core_vpe_count(unsigned int cluster, unsigned core) { @@ -212,8 +212,10 @@ static void __init cps_smp_setup(void) static void __init cps_prepare_cpus(unsigned int max_cpus) { - unsigned ncores, core_vpes, c, cca; + unsigned int nclusters, ncores, core_vpes, c, cl, cca; bool cca_unsuitable, cores_limited; + struct cluster_boot_config *cluster_bootcfg; + struct core_boot_config *core_bootcfg; mips_mt_set_cpuoptions(); @@ -255,40 +257,54 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) setup_cps_vecs(); - /* Allocate core boot configuration structs */ - ncores = mips_cps_numcores(0); - mips_cps_core_bootcfg = kcalloc(ncores, sizeof(*mips_cps_core_bootcfg), - GFP_KERNEL); - if (!mips_cps_core_bootcfg) { - pr_err("Failed to allocate boot config for %u cores\n", ncores); - goto err_out; - } + /* Allocate cluster boot configuration structs */ + nclusters = mips_cps_numclusters(); + mips_cps_cluster_bootcfg = kcalloc(nclusters, + sizeof(*mips_cps_cluster_bootcfg), + GFP_KERNEL); - /* Allocate VPE boot configuration structs */ - for (c = 0; c < ncores; c++) { - core_vpes = core_vpe_count(0, c); - mips_cps_core_bootcfg[c].vpe_config = kcalloc(core_vpes, - sizeof(*mips_cps_core_bootcfg[c].vpe_config), - GFP_KERNEL); - if (!mips_cps_core_bootcfg[c].vpe_config) { - pr_err("Failed to allocate %u VPE boot configs\n", - core_vpes); + for (cl = 0; cl < nclusters; cl++) { + /* Allocate core boot configuration structs */ + ncores = mips_cps_numcores(cl); + core_bootcfg = kcalloc(ncores, sizeof(*core_bootcfg), + GFP_KERNEL); + if (!core_bootcfg) goto err_out; + mips_cps_cluster_bootcfg[cl].core_config = core_bootcfg; + + /* Allocate VPE boot configuration structs */ + for (c = 0; c < ncores; c++) { + core_vpes = core_vpe_count(cl, c); + core_bootcfg[c].vpe_config = kcalloc(core_vpes, + sizeof(*core_bootcfg[c].vpe_config), + GFP_KERNEL); + if (!core_bootcfg[c].vpe_config) + goto err_out; } } /* Mark this CPU as booted */ - atomic_set(&mips_cps_core_bootcfg[cpu_core(¤t_cpu_data)].vpe_mask, - 1 << cpu_vpe_id(¤t_cpu_data)); + cl = cpu_cluster(¤t_cpu_data); + c = cpu_core(¤t_cpu_data); + cluster_bootcfg = &mips_cps_cluster_bootcfg[cl]; + core_bootcfg = &cluster_bootcfg->core_config[c]; + atomic_set(&core_bootcfg->vpe_mask, 1 << cpu_vpe_id(¤t_cpu_data)); return; err_out: /* Clean up allocations */ - if (mips_cps_core_bootcfg) { - for (c = 0; c < ncores; c++) - kfree(mips_cps_core_bootcfg[c].vpe_config); - kfree(mips_cps_core_bootcfg); - mips_cps_core_bootcfg = NULL; + if (mips_cps_cluster_bootcfg) { + for (cl = 0; cl < nclusters; cl++) { + cluster_bootcfg = &mips_cps_cluster_bootcfg[cl]; + ncores = mips_cps_numcores(cl); + for (c = 0; c < ncores; c++) { + core_bootcfg = &cluster_bootcfg->core_config[c]; + kfree(core_bootcfg->vpe_config); + } + kfree(mips_cps_cluster_bootcfg[c].core_config); + } + kfree(mips_cps_cluster_bootcfg); + mips_cps_cluster_bootcfg = NULL; } /* Effectively disable SMP by declaring CPUs not present */ @@ -373,17 +389,23 @@ static void boot_core(unsigned int core, unsigned int vpe_id) static void remote_vpe_boot(void *dummy) { + unsigned int cluster = cpu_cluster(¤t_cpu_data); unsigned core = cpu_core(¤t_cpu_data); - struct core_boot_config *core_cfg = &mips_cps_core_bootcfg[core]; + struct cluster_boot_config *cluster_cfg = + &mips_cps_cluster_bootcfg[cluster]; + struct core_boot_config *core_cfg = &cluster_cfg->core_config[core]; mips_cps_boot_vpes(core_cfg, cpu_vpe_id(¤t_cpu_data)); } static int cps_boot_secondary(int cpu, struct task_struct *idle) { + unsigned int cluster = cpu_cluster(&cpu_data[cpu]); unsigned core = cpu_core(&cpu_data[cpu]); unsigned vpe_id = cpu_vpe_id(&cpu_data[cpu]); - struct core_boot_config *core_cfg = &mips_cps_core_bootcfg[core]; + struct cluster_boot_config *cluster_cfg = + &mips_cps_cluster_bootcfg[cluster]; + struct core_boot_config *core_cfg = &cluster_cfg->core_config[core]; struct vpe_boot_config *vpe_cfg = &core_cfg->vpe_config[vpe_id]; unsigned int remote; int err; @@ -541,12 +563,14 @@ static void cps_kexec_nonboot_cpu(void) static int cps_cpu_disable(void) { unsigned cpu = smp_processor_id(); + struct cluster_boot_config *cluster_cfg; struct core_boot_config *core_cfg; if (!cps_pm_support_state(CPS_PM_POWER_GATED)) return -EINVAL; - core_cfg = &mips_cps_core_bootcfg[cpu_core(¤t_cpu_data)]; + cluster_cfg = &mips_cps_cluster_bootcfg[cpu_cluster(¤t_cpu_data)]; + core_cfg = &cluster_cfg->core_config[cpu_core(¤t_cpu_data)]; atomic_sub(1 << cpu_vpe_id(¤t_cpu_data), &core_cfg->vpe_mask); smp_mb__after_atomic(); set_cpu_online(cpu, false); From patchwork Sat May 11 10:43:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662326 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 159BA5FBAA; Sat, 11 May 2024 10:44:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424248; cv=fail; b=L6j0M/tI7gW7wPp0uWLEnPz1xH3GwUUrkXnXtBFJi7YiZ1KoauKrDKvuQveoA7Tswir2lBQishS2em6w51LslUY4RcahZ8bZJVsjmGzHt7s7MbC/F9dKJmYzO2JmfpYiBhJpJaFMPO8LkrUJ++TX9hPxuPra9zDNyOjBptCR3R8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424248; c=relaxed/simple; bh=NsWYgxwWADkeUwTDskneezz0oyS7GTeY9YDds2g1o2U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=e7pOaSh/wFIANMZPzXgFJgp/mvTps2LnDMDRIK9JeeygJ1p6QqvrG5qjNlfhdXLOVCbaKb/SAtQ8p5xQTZAxt/jlcw3lNOd/Ag9wtBlcLjGLI91C839XUupO9EN/wwuqogKrzPFliPfbZ8Sa4ZoT94LnUCecqLzP1My5BzyBkwE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=eXHoVtX+; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="eXHoVtX+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XXDIMmGr/l2bBrnNmBk17xdzum5MXBGDdnppymyQgYTW6LUQK80m/ayIxniGsw6ZM829zZbjctjDggGvtuRF7/soNt68ZcZM48205Wh2IEgnUwkzZofZ413bL/MyqqjRpVZY4JMhvERzfcwUYYjWEByOML9WghL+XWT6A1EExqYik5CjGWpzOQPrkVU139stUzQXZCxUZoECF2HyN3OuRRoa79jL1E7gFhhqw+DaTsuHC6rHl/gb+NksmIrT8dxuPSTVtqR6RVUwErIj9ZIFIMBuB+ybC5pL1ZU/emwpW1oJKXLT2k2jVYdSqhqGslGvinVPnBGj7tCTlxdFO9dVsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=PfaWHpbZm4r5fXZyRkA7sVboc5pXftUbrYbuEZf6WhQ=; b=Cyow0I41gNPlywoRagBk2GtYTEhXZCgIhNaS8wcHq65QO1a077RleTI/Eixhcg0tlMBqKNn65x5Uo+KfuQdLiNR6TlMYODABQGw4EjOFO0BS24+rv5Lwz3sRgZtgsJHCsYgnnVV39fELA/l7MkYZRIx6O2n9KXfxgG9C343XtaT5mLwomelb/IAR01ui8HoKSA+4fqpFgl6TLKVIHDdC9Kq5qRQMtNFUof03mtM7B+TO8DhYlMCQ0B0I3ndSAFTLv51K2bSiKd9V9VvcHdJc/LY2cqZWwaJ1yMD+Dt179Xhue+HrbHxIFrVfeMrT5RH6JAE8JAXCLkjVyTfN/8tYBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PfaWHpbZm4r5fXZyRkA7sVboc5pXftUbrYbuEZf6WhQ=; b=eXHoVtX+CbHAiLOnNguxVWnYkmM11ziHLVKL5UoTR4vdLhG7Xqc3YNa7jCNqXji+oQ/CwWN3Mymluq4YTmpI1kXQVvMD7WoareT63oKMNhHnDbLsv27degUNeQyRASlYyJqn1XtgaoQhtJFX0ihQGoo6nYBaDez3FBc4RXqPTXs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:43:59 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:43:59 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 11/14] MIPS: CPS: Boot CPUs in secondary clusters Date: Sat, 11 May 2024 12:43:38 +0200 Message-Id: <20240511104341.151550-12-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: a7ac2151-7c3b-4c54-0ec6-08dc71a7440a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: j73KAsM9F7ihvkjkhqRmwlyZ3Vk1RqkZ/THct5wSshaTghlHfVEyFbvrbvXN9zoCprEKKEg/onGXjGA7h4PzNKpgr1zkX5lKG2oMm+MOdKx1pNFrvcdrI1BRIvkt0l7agTSfIECYLM1/SS85PZFMdwzitdG83/LkvVGWLIpIWaKWDUtEYJX9+qdKNj2IGPjojEjETg5PDzLCfHnbwuEfInXdoqJGbvdjXensQ6iPwXwTAnRH9XWcZgS/UWgCugr+X4n/41GMlF8hXFCV23ehWmYHP13ytbtnf+uQNbJjJBFBH5w0WEY20S01iQUEOV/TQek3e1cIInjWame02GF8g/l5whpf0d9c5YT5kGS6ffJWuZrRCC7qP/8St//vkQzf8SZx9N7HMJM+7wf6Mhdf9iLToiUlb2506nYPN8EIE8mPSr8DWz9czNoNZP/JkadBaA4SaFnHcnLpMwNV/DDFINFpJo1ewb60JeyLlCyDrmqYKqfz870DOphYgwvVcLbL0zfN/A9GaU9yziFGcoXxUEK6O131pEFDG1DqYTLj5KmRdPi4NDZ29ABoyU8V6Gs9wXA0UCzEFuxKpAr6xWdAjDFzEMzmecvef0PXjauANFDTu6GHL/X+EPhdEOXVi5/ZO+pxO/wcYrLApgdc/v8v6Dqgki1a+rCspkvU+FDrCsLfIs2t79YPFl4M3JSblobetCxbziN5kYKZIOFgNwl38mCBv8fW6CErDfcWbtSN7ccgOeMBg2aMcQYGcWWrlcWTskZJgam6jLcXLfJv1GVqbq9MicqU3MIMUMI1RkBkwRGwT3j/gIkH6qW9AQTXnbyuRCHytzpxgmduOvB6awHAVF6XCV29zsPSaG8nPh6yjFZivMb3zGxrMT+BLFCBjcIeN6Yq60ifJHYix2n1DhvmKkgVU8UXTnSYHdgILWjn1XYI30azzpDmFpdt44v4bH5OkecZ0Tg37w9MlpjC/tO1MoUuWmX7JheCL8OLRLwrFCJLysarOU1kZ9f5MKAlDDmDSJ+TzeZgoggkE5twvgxt+iUGNCtdMMSgavvMySYl3TwfQIXgnd0ptRv8ySm9qHnrrRH9Ki1/3YRffx442Xe5lOPbpZe3bfe/cPBUVSWRVSMOhnxmRLabEYY07no1GokhmSPE8QhsDIEb0LXEim9uhlwwIc8lDOFvOO4VFoQd+ajUcw7ynzboQWMPRAfFLSOtrezSAZAtrf1PGLhQF3XQAorSrIER9cMbabSOdgHGH6wEdKNpg1Ui0cve0PpxPcF/hbC1C5sNR3rbpf/BcZBD0E8ij2bLc/SHS9IXf+CS6iWSsK1IjTqGRcUG8gN04XBboJxWTqgSZZJbzXWAgD5ihQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SqNtQRUvMhh+lUINUAkS36r6Sng/OEHBA5N/UnnklQ8WAot/0qv3MTVk9+0TZzdKBxpEJesC4RDsfTaBAoBrvzHl/bERBvne+4gylFQW+iVp21opjZhvWw9gAgVb5N1F1Jo/Ei+xMpzIrhsNyLDZcs0kDDEyjFfau6UH2wANixiC/6xTu2iM3zc05bRc/II99eyXV59mgf7rG9VA2ct4nA2FMdo7iNoeuief5cZdXH25TdYqr9KaD6nM8GBEG8Pzyfww+dt84wYY6DOeiQakm128iEqkW3IqcKrsN+yh2+KEAFa8cQBKqiYq7j/7Ex1qgTnRCyyXnz5mJm+brLAdYIL75xI40uuoRzdSQrDMLu/cqVFz23vEFl2Tpbn0PTqoBPrRx5PQjNLWlMldESTW+R4vTEx6iUOE6+9Xq9sdbDV2dvnA1U/pvBJN7sBbpVFG7NJ7PslELufronCYHDwKheDSs6ZGhL59nXKqKPGiFhQf/4yf0EEOi+gZtJyPXRErC7xIBZ/gH47fgChsqw++sHl54yBLMNP+BQdTfi/AV4vR3azSPvxe1A+AmNTd1VkzAk7HN5GlatQsu7Zm8+TwdtMICNV4JdWxjQGzKPnO7uQyEU1tE+M97nofjlel5x+SqRlX5WUFU+DZCrsLKmPLuGVCUSyxJBPGwCxXZ8iDNV/GUlp6ABb2i53W8F9wLDWOyOZWyDrSR7rB5MqO/HgP1XbF4gJ0zpywBFEgKk3VGTnc8QQfchYnS84BUc7SzD3nOvyApbhypbPhHlqlakT3e9fFpcH9vrWHsAGYAfdlLbRThjfSX8VIetNTfpP7DLBmT3V2OWA5h9ADKhF0Go8e+Iyg0ev3apREirQ+7nyK2qWUcbbsefB+R46RIa+BKOXMEFFRseVMH8/q43VdQ8QL8pvVPZ23/FQ0/3An2DaI9bfXVRnx6Piw//ElxjA9nh2XebRZ6Umvpfvq4xeMYCoXolZ84zddeBgsUaAJMCUSgOs6t/fxsAdvFPLSkbPyjTLFarE5nHXthK9z4SWKwtzpkWyGDsO+8jJEG38PqdbLd0A6gVYwPBvfN2n45SLPQMPUpiyrv4akmDJj1IEKgzEuO5EYWETUzHwIIZ1fY+90giKm4CatS5EYHaUfKXqqreavR0THsJFO+7roZqoQjqeeJhrPLCdLPnt9e5KWa7MEYaGDOQt7UCb04fGwX8kl57V9IHAv82a8fWhhVKUnvTr0GvGID14yp1rUNRyYFQLbjz/nLxSYy1O0YKjkckv4Rr6ukhK8Njalv54Mqxo2aChQEdxc/qZZUeIZaVI++8/iwkIWyT+2LXpURlW+bzpTfQ8ZeJNXQ6U72KJTqEpIuUpvYP2o2Y0aqPeEaIHzY78MIwecDZFjaW6uMJvbdwGJaVJn3/N7+DkQE93mGXLwxWYflvN9ymHUVuwljYJSnRfWvx0MSrk/8dG8eBEr4AOnqa12j3/6VsxZfXl64HR2d93eS3kkVtMzmk6RsY+4/bXdnqGSKJ5qy5TyxU/VBzY7jF3Hnj1Vusc+3MtnwGQUR5WHchYrbZkhJZqugn+BrUijVui40OWVsncbIE347P2cPANp6PCKZYfa2Fz2yY+jDfOdxw== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7ac2151-7c3b-4c54-0ec6-08dc71a7440a X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:43:59.5514 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /2kLKd4NJ/HjlM8G9WXYToH63tg4lOXUBDEZjjK/nT+eppMb/ChEE2CSPPl/v4tmSAI5ySZQq06OqGVTw4/jUPjs51edRSuVerRzny0FYTk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 From: Paul Burton Probe for & boot CPUs (cores & VPs) in secondary clusters (ie. not the cluster that began booting Linux) when they are present in systems with CM 3.5 or higher. Signed-off-by: Paul Burton Signed-off-by: Chao-ying Fu Signed-off-by: Dragan Mladjenovic Signed-off-by: Aleksandar Rikalo --- arch/mips/include/asm/mips-cm.h | 18 +++ arch/mips/include/asm/smp-cps.h | 1 + arch/mips/kernel/mips-cm.c | 4 +- arch/mips/kernel/smp-cps.c | 208 ++++++++++++++++++++++++++++---- 4 files changed, 207 insertions(+), 24 deletions(-) diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h index c2930a75b7e4..65a46b35a218 100644 --- a/arch/mips/include/asm/mips-cm.h +++ b/arch/mips/include/asm/mips-cm.h @@ -251,6 +251,12 @@ GCR_ACCESSOR_RW(32, 0x130, l2_config) GCR_ACCESSOR_RO(32, 0x150, sys_config2) #define CM_GCR_SYS_CONFIG2_MAXVPW GENMASK(3, 0) +/* GCR_L2-RAM_CONFIG - Configuration & status of L2 cache RAMs */ +GCR_ACCESSOR_RW(64, 0x240, l2_ram_config) +#define CM_GCR_L2_RAM_CONFIG_PRESENT BIT(31) +#define CM_GCR_L2_RAM_CONFIG_HCI_DONE BIT(30) +#define CM_GCR_L2_RAM_CONFIG_HCI_SUPPORTED BIT(29) + /* GCR_L2_PFT_CONTROL - Controls hardware L2 prefetching */ GCR_ACCESSOR_RW(32, 0x300, l2_pft_control) #define CM_GCR_L2_PFT_CONTROL_PAGEMASK GENMASK(31, 12) @@ -262,6 +268,18 @@ GCR_ACCESSOR_RW(32, 0x308, l2_pft_control_b) #define CM_GCR_L2_PFT_CONTROL_B_CEN BIT(8) #define CM_GCR_L2_PFT_CONTROL_B_PORTID GENMASK(7, 0) +/* GCR_L2_TAG_ADDR - Access addresses in L2 cache tags */ +GCR_ACCESSOR_RW(64, 0x600, l2_tag_addr) + +/* GCR_L2_TAG_STATE - Access L2 cache tag state */ +GCR_ACCESSOR_RW(64, 0x608, l2_tag_state) + +/* GCR_L2_DATA - Access data in L2 cache lines */ +GCR_ACCESSOR_RW(64, 0x610, l2_data) + +/* GCR_L2_ECC - Access ECC information from L2 cache lines */ +GCR_ACCESSOR_RW(64, 0x618, l2_ecc) + /* GCR_L2SM_COP - L2 cache op state machine control */ GCR_ACCESSOR_RW(32, 0x620, l2sm_cop) #define CM_GCR_L2SM_COP_PRESENT BIT(31) diff --git a/arch/mips/include/asm/smp-cps.h b/arch/mips/include/asm/smp-cps.h index a629e948a6fd..10d3ebd890cb 100644 --- a/arch/mips/include/asm/smp-cps.h +++ b/arch/mips/include/asm/smp-cps.h @@ -23,6 +23,7 @@ struct core_boot_config { }; struct cluster_boot_config { + unsigned long *core_power; struct core_boot_config *core_config; }; diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c index 3eb2cfb893e1..9854bc2b6895 100644 --- a/arch/mips/kernel/mips-cm.c +++ b/arch/mips/kernel/mips-cm.c @@ -308,7 +308,9 @@ void mips_cm_lock_other(unsigned int cluster, unsigned int core, FIELD_PREP(CM3_GCR_Cx_OTHER_VP, vp); if (cm_rev >= CM_REV_CM3_5) { - val |= CM_GCR_Cx_OTHER_CLUSTER_EN; + if (cluster != cpu_cluster(¤t_cpu_data)) + val |= CM_GCR_Cx_OTHER_CLUSTER_EN; + val |= CM_GCR_Cx_OTHER_GIC_EN; val |= FIELD_PREP(CM_GCR_Cx_OTHER_CLUSTER, cluster); val |= FIELD_PREP(CM_GCR_Cx_OTHER_BLOCK, block); } else { diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c index 1954c9e912b2..ae814fdb930c 100644 --- a/arch/mips/kernel/smp-cps.c +++ b/arch/mips/kernel/smp-cps.c @@ -36,12 +36,56 @@ enum label_id { UASM_L_LA(_not_nmi) -static DECLARE_BITMAP(core_power, NR_CPUS); static uint32_t core_entry_reg; static phys_addr_t cps_vec_pa; struct cluster_boot_config *mips_cps_cluster_bootcfg; +static void power_up_other_cluster(unsigned int cluster) +{ + u32 stat, seq_state; + unsigned int timeout; + + mips_cm_lock_other(cluster, CM_GCR_Cx_OTHER_CORE_CM, 0, + CM_GCR_Cx_OTHER_BLOCK_LOCAL); + stat = read_cpc_co_stat_conf(); + mips_cm_unlock_other(); + + seq_state = stat & CPC_Cx_STAT_CONF_SEQSTATE; + seq_state >>= __ffs(CPC_Cx_STAT_CONF_SEQSTATE); + if (seq_state == CPC_Cx_STAT_CONF_SEQSTATE_U5) + return; + + /* Set endianness & power up the CM */ + mips_cm_lock_other(cluster, 0, 0, CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + write_cpc_redir_sys_config(IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)); + write_cpc_redir_pwrup_ctl(1); + mips_cm_unlock_other(); + + /* Wait for the CM to start up */ + timeout = 1000; + mips_cm_lock_other(cluster, CM_GCR_Cx_OTHER_CORE_CM, 0, + CM_GCR_Cx_OTHER_BLOCK_LOCAL); + while (1) { + stat = read_cpc_co_stat_conf(); + seq_state = stat & CPC_Cx_STAT_CONF_SEQSTATE; + seq_state >>= __ffs(CPC_Cx_STAT_CONF_SEQSTATE); + if (seq_state == CPC_Cx_STAT_CONF_SEQSTATE_U5) + break; + + if (timeout) { + mdelay(1); + timeout--; + } else { + pr_warn("Waiting for cluster %u CM to power up... STAT_CONF=0x%x\n", + cluster, stat); + mdelay(1000); + } + } + + mips_cm_unlock_other(); +} + static unsigned __init core_vpe_count(unsigned int cluster, unsigned core) { return min(smp_max_threads, mips_cps_numvps(cluster, core)); @@ -152,6 +196,9 @@ static void __init cps_smp_setup(void) pr_cont(","); pr_cont("{"); + if (mips_cm_revision() >= CM_REV_CM3_5) + power_up_other_cluster(cl); + ncores = mips_cps_numcores(cl); for (c = 0; c < ncores; c++) { core_vpes = core_vpe_count(cl, c); @@ -179,8 +226,8 @@ static void __init cps_smp_setup(void) /* Indicate present CPUs (CPU being synonymous with VPE) */ for (v = 0; v < min_t(unsigned, nvpes, NR_CPUS); v++) { - set_cpu_possible(v, cpu_cluster(&cpu_data[v]) == 0); - set_cpu_present(v, cpu_cluster(&cpu_data[v]) == 0); + set_cpu_possible(v, true); + set_cpu_present(v, true); __cpu_number_map[v] = v; __cpu_logical_map[v] = v; } @@ -188,9 +235,6 @@ static void __init cps_smp_setup(void) /* Set a coherent default CCA (CWB) */ change_c0_config(CONF_CM_CMASK, 0x5); - /* Core 0 is powered up (we're running on it) */ - bitmap_set(core_power, 0, 1); - /* Initialise core 0 */ mips_cps_core_init(); @@ -272,6 +316,10 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) goto err_out; mips_cps_cluster_bootcfg[cl].core_config = core_bootcfg; + mips_cps_cluster_bootcfg[cl].core_power = + kcalloc(BITS_TO_LONGS(ncores), sizeof(unsigned long), + GFP_KERNEL); + /* Allocate VPE boot configuration structs */ for (c = 0; c < ncores; c++) { core_vpes = core_vpe_count(cl, c); @@ -283,11 +331,12 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) } } - /* Mark this CPU as booted */ + /* Mark this CPU as powered up & booted */ cl = cpu_cluster(¤t_cpu_data); c = cpu_core(¤t_cpu_data); cluster_bootcfg = &mips_cps_cluster_bootcfg[cl]; core_bootcfg = &cluster_bootcfg->core_config[c]; + bitmap_set(cluster_bootcfg->core_power, cpu_core(¤t_cpu_data), 1); atomic_set(&core_bootcfg->vpe_mask, 1 << cpu_vpe_id(¤t_cpu_data)); return; @@ -315,13 +364,118 @@ static void __init cps_prepare_cpus(unsigned int max_cpus) } } -static void boot_core(unsigned int core, unsigned int vpe_id) +static void init_cluster_l2(void) { - u32 stat, seq_state; - unsigned timeout; + u32 l2_cfg, l2sm_cop, result; + + while (1) { + l2_cfg = read_gcr_redir_l2_ram_config(); + + /* If HCI is not supported, use the state machine below */ + if (!(l2_cfg & CM_GCR_L2_RAM_CONFIG_PRESENT)) + break; + if (!(l2_cfg & CM_GCR_L2_RAM_CONFIG_HCI_SUPPORTED)) + break; + + /* If the HCI_DONE bit is set, we're finished */ + if (l2_cfg & CM_GCR_L2_RAM_CONFIG_HCI_DONE) + return; + } + + l2sm_cop = read_gcr_redir_l2sm_cop(); + if (WARN(!(l2sm_cop & CM_GCR_L2SM_COP_PRESENT), + "L2 init not supported on this system yet")) + return; + + /* Clear L2 tag registers */ + write_gcr_redir_l2_tag_state(0); + write_gcr_redir_l2_ecc(0); + + /* Ensure the L2 tag writes complete before the state machine starts */ + mb(); + + /* Wait for the L2 state machine to be idle */ + do { + l2sm_cop = read_gcr_redir_l2sm_cop(); + } while (l2sm_cop & CM_GCR_L2SM_COP_RUNNING); + + /* Start a store tag operation */ + l2sm_cop = CM_GCR_L2SM_COP_TYPE_IDX_STORETAG; + l2sm_cop <<= __ffs(CM_GCR_L2SM_COP_TYPE); + l2sm_cop |= CM_GCR_L2SM_COP_CMD_START; + write_gcr_redir_l2sm_cop(l2sm_cop); + + /* Ensure the state machine starts before we poll for completion */ + mb(); + + /* Wait for the operation to be complete */ + do { + l2sm_cop = read_gcr_redir_l2sm_cop(); + result = l2sm_cop & CM_GCR_L2SM_COP_RESULT; + result >>= __ffs(CM_GCR_L2SM_COP_RESULT); + } while (!result); + + WARN(result != CM_GCR_L2SM_COP_RESULT_DONE_OK, + "L2 state machine failed cache init with error %u\n", result); +} + +static void boot_core(unsigned int cluster, unsigned int core, + unsigned int vpe_id) +{ + struct cluster_boot_config *cluster_cfg; + u32 access, stat, seq_state; + unsigned int timeout, ncores; + + cluster_cfg = &mips_cps_cluster_bootcfg[cluster]; + ncores = mips_cps_numcores(cluster); + + if ((cluster != cpu_cluster(¤t_cpu_data)) && + bitmap_empty(cluster_cfg->core_power, ncores)) { + power_up_other_cluster(cluster); + + mips_cm_lock_other(cluster, core, 0, + CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + + /* Ensure cluster GCRs are where we expect */ + write_gcr_redir_base(read_gcr_base()); + write_gcr_redir_cpc_base(read_gcr_cpc_base()); + write_gcr_redir_gic_base(read_gcr_gic_base()); + + init_cluster_l2(); + + /* Mirror L2 configuration */ + write_gcr_redir_l2_only_sync_base(read_gcr_l2_only_sync_base()); + write_gcr_redir_l2_pft_control(read_gcr_l2_pft_control()); + write_gcr_redir_l2_pft_control_b(read_gcr_l2_pft_control_b()); + + /* Mirror ECC/parity setup */ + write_gcr_redir_err_control(read_gcr_err_control()); + + /* Set BEV base */ + write_gcr_redir_bev_base(core_entry_reg); + + mips_cm_unlock_other(); + } + + if (cluster != cpu_cluster(¤t_cpu_data)) { + mips_cm_lock_other(cluster, core, 0, + CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + + /* Ensure the core can access the GCRs */ + access = read_gcr_redir_access(); + access |= BIT(core); + write_gcr_redir_access(access); + + mips_cm_unlock_other(); + } else { + /* Ensure the core can access the GCRs */ + access = read_gcr_access(); + access |= BIT(core); + write_gcr_access(access); + } /* Select the appropriate core */ - mips_cm_lock_other(0, core, 0, CM_GCR_Cx_OTHER_BLOCK_LOCAL); + mips_cm_lock_other(cluster, core, 0, CM_GCR_Cx_OTHER_BLOCK_LOCAL); /* Set its reset vector */ write_gcr_co_reset_base(core_entry_reg); @@ -332,9 +486,6 @@ static void boot_core(unsigned int core, unsigned int vpe_id) /* Start it with the legacy memory map and exception base */ write_gcr_co_reset_ext_base(CM_GCR_Cx_RESET_EXT_BASE_UEB); - /* Ensure the core can access the GCRs */ - set_gcr_access(1 << core); - if (mips_cpc_present()) { /* Reset the core */ mips_cpc_lock_other(core); @@ -384,7 +535,17 @@ static void boot_core(unsigned int core, unsigned int vpe_id) mips_cm_unlock_other(); /* The core is now powered up */ - bitmap_set(core_power, core, 1); + bitmap_set(cluster_cfg->core_power, core, 1); + + /* + * Restore CM_PWRUP=0 so that the CM can power down if all the cores in + * the cluster do (eg. if they're all removed via hotplug. + */ + if (mips_cm_revision() >= CM_REV_CM3_5) { + mips_cm_lock_other(cluster, 0, 0, CM_GCR_Cx_OTHER_BLOCK_GLOBAL); + write_cpc_redir_pwrup_ctl(0); + mips_cm_unlock_other(); + } } static void remote_vpe_boot(void *dummy) @@ -410,10 +571,6 @@ static int cps_boot_secondary(int cpu, struct task_struct *idle) unsigned int remote; int err; - /* We don't yet support booting CPUs in other clusters */ - if (cpu_cluster(&cpu_data[cpu]) != cpu_cluster(&raw_current_cpu_data)) - return -ENOSYS; - vpe_cfg->pc = (unsigned long)&smp_bootstrap; vpe_cfg->sp = __KSTK_TOS(idle); vpe_cfg->gp = (unsigned long)task_thread_info(idle); @@ -422,14 +579,15 @@ static int cps_boot_secondary(int cpu, struct task_struct *idle) preempt_disable(); - if (!test_bit(core, core_power)) { + if (!test_bit(core, cluster_cfg->core_power)) { /* Boot a VPE on a powered down core */ - boot_core(core, vpe_id); + boot_core(cluster, core, vpe_id); goto out; } if (cpu_has_vp) { - mips_cm_lock_other(0, core, vpe_id, CM_GCR_Cx_OTHER_BLOCK_LOCAL); + mips_cm_lock_other(cluster, core, vpe_id, + CM_GCR_Cx_OTHER_BLOCK_LOCAL); write_gcr_co_reset_base(core_entry_reg); mips_cm_unlock_other(); } @@ -636,11 +794,15 @@ static void cps_cpu_die(unsigned int cpu) { } static void cps_cleanup_dead_cpu(unsigned cpu) { + unsigned int cluster = cpu_cluster(&cpu_data[cpu]); unsigned core = cpu_core(&cpu_data[cpu]); unsigned int vpe_id = cpu_vpe_id(&cpu_data[cpu]); ktime_t fail_time; unsigned stat; int err; + struct cluster_boot_config *cluster_cfg; + + cluster_cfg = &mips_cps_cluster_bootcfg[cluster]; /* * Now wait for the CPU to actually offline. Without doing this that @@ -692,7 +854,7 @@ static void cps_cleanup_dead_cpu(unsigned cpu) } while (1); /* Indicate the core is powered off */ - bitmap_clear(core_power, core, 1); + bitmap_clear(cluster_cfg->core_power, core, 1); } else if (cpu_has_mipsmt) { /* * Have a CPU with access to the offlined CPUs registers wait From patchwork Sat May 11 10:43:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662327 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 0AC3760882; Sat, 11 May 2024 10:44:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424249; cv=fail; b=rlWbDIasfH3iDx/ZBRRPXoakSpT8WG/8vh7IExAA6v64X2X4k2M5I++I+FTBIMdBGT1o0dhlfzk9+gVOce/zNkOwfmi0BuzUdUGidiVyb8Arv2FmM5nfF2wJDSqmvsnWSe82wJxyhYsu1XYNiMZjbRmqRw+Z61eVgX76/AgyvII= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424249; c=relaxed/simple; bh=7rhOw+6NYS/Ic4qRd9izx3OWP8tn8OvKYXtXccN4fOA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=GluPyeybQRoI+dsW39k5yaszK4YnfIIs2lpMsMkrzWsruHnysEXnNpHqPIxR6f9ghwN+7VKMDhgFqtxBts/QhPQt8uVqV/9O3cpXvZBxwAP1XeeXVQGUBAswpFu4cgPFOrPlSSMnvVCYxizINzLlR1vbRpkgeIjQmKIddZAR+ks= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=YH6El/uF; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="YH6El/uF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eEnddMI9M9vHIfB1gbmajmlylhU3hh7CitJFcCA683/fQoaofVkLbATQLrmM/0SCI+asd0HnloiZ8P9gtznUuYnBhTw4tNj/xA1Ie7N525uj0Xlkldvp2XqKjwHM75l2V+HP/X0Xy8qyI2rUXaIuqlCsPwBFPYv0S8DXITbTxF5NujSW+Ai2gTYyF0mwnA3uY9P0E8RmyfMoa77VPM61xW78pbRT/9p25+HAK8CqP62TAg5Mh0QFBLh77tFNefuPEsRfXXzLWLCEjIB6iWxSc87FPOIjNx3hUqSNK8iT1PcABZemwHCm22bcEOimPgaPcBOxHoZVyDd8n7r5bCa/gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=kqsl0TELsJDeGTvbGSJviIvo7fQMdHpMDHtiZczHOfo=; b=honeZ77KA8WkqYD5LCejmMvGY5e1CECYpLSa+95QPyn+OUVSja1BM9e649Fz1teCqerBRtZ5rOaFlib+60AgkQcV4ANIJLRWZ5MPWiE04WIEVxDL/hBYpnFDmfmeTzGW8/tnEVZY1QF7pLnIrxbQAb9+WqoScBqlZup+fDybSHuqWkjACicyZl2eAZe5QmAAxGIbLSogujGUQATdVIZlxQFs4GhTJj9E3sJNN0FLyJTfT9HQ1V52P+qJYdMMnkaUgQxahAfgocZ5JBI5RqFi2NP+qbOEf2k3DWOigGpbrQqIeL/Ndj6CH7iWEQ3VfeaKt2Q4vkGc0uKIDhmrEspJwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kqsl0TELsJDeGTvbGSJviIvo7fQMdHpMDHtiZczHOfo=; b=YH6El/uFtc6yUNfm5A7MELwabQm6CorSSxdma8wqiJ2FCMRH/75uAh+kfYSWorvbSGQt0h/OXoRTo47eEfE4c4EIw5SEtDekbEqW33XiTUDclQeS+rc4TrFadiMs9ePkTtMQeIZdK1X0Xc4huv+FqivexsP5ZHMkzKwA2Zp2hlc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:44:00 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:44:00 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 12/14] mips: Enable FDC on MIPS R6 platforms. Date: Sat, 11 May 2024 12:43:39 +0200 Message-Id: <20240511104341.151550-13-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: aeaf5dc9-e844-4ff7-1a09-08dc71a74498 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: +fLYbYJgFEq9jJbCUBB0tIkqZ0beInT2fkyDVbcicPTGgj64htgXOFBGOv+F3vkXnLWcLagZl9goqz9CwVAB1iUvJ7NgO4+/GugUIMEfEsSBWsebk0iNP3vJvl54TadN5pdSuFWD9G9w3Uu7hQ8OjySpfrKeINt9RtMsLaXUbAeUyJDmlvsfYVwCiiFgoMBErVGPzomw/0s1wP7wq3epkBE4wIRirz6Fs2bTZ4Y/8+qz4+AJ3hwFKhuyqojswel9tdKFCJPdzXaNz3Ew9DPvwCV2sq1jokWYcj/fF5X5X0KBniiXhjJIJKTRl2ar9Qgpn/yCg/epmhwB0RqQhFHQVWNlE2NIyBynxxNdzJYsCP7zAPyXahu9aFsA4Kn0c7guLhNKTlks0EVIg8pTtvtAvzPkqylVORGhnXNYdHvXRK8gK06XCK1OHsQnp5eM5jRW2tifMTzD3bsDMgNxBEhzqWAb9lkLbAePrcKHCg5KpkTch8+fvpAXJTXqfNJ27U3VRDdxuwpUhg2DwySCgyYSK+y4UUw0Q7amWf+D3P+F6y+Hr+W2ORKgs2L0bINRYkJRCuhFCaw3Q67CeBEDDeAy43aQSnkviLNAiffh1x6i5g4/AcbuA8cjPNWGiiEAu+tNyQffEB2ZYwIx6UNYxoKukWzdYbYCmaaJDAg6/1asAWvI7Ji1IFLdJ98Z3uXxaqZFQTfVhPy81U+QSLy43sr8c9MPoDc/Y1uK0xWZirmSW6oCWYIubW07kdFhfz5/vfc+gzdR82PeYtQYSKTUF4uCEyRkOaPOtEgziZhLdQ1iCiQfUClAS5xHYjX/svmHC+8RM0q0V1izVaEI2Uxt3ABlFdYjn9mK5NrPjludDKdZ0/HORtbnIs2mgBn6t249YOfK0NVTKpDJqQk/m1W+TNmss9rXljeHb2VZqbrQkk3o04BdWe7hzyghUxuYFSeEt6v/z94dNdBCkT7/IFi2SxdYVgPw6+gWbtAyjHswY7Ddt7pkJQqlGnjQUm22G6UuVWXJ7TenbGbaOI7qdmJL+ljum8mNb1uUHYIMceyBv62TgUQG3NoZfnHeNh4hKwNTiiKXPG0tAryK5eZeNGXgCNh5VlQX6eUrsRPPcjNHdK5bM7jzAZyaqmQQKdYWiINcATukhtt/udHcLFQz2y3HUjVMgUKLLS0AeJrvMu17/U5wOVjpSHZiShcg/ytKV7JpsUENWqhP1C2awj/f9Oab8jRC2xGuk1zPIHHDdSs/TGI9ieHkFWGGTU81nFU0t/4X/lH70taGWeagRpB4n4yZ6VKoNXMfMwGXRTq0T40E8lj5h+f9aAZveKwd6jecn0Pp3iD9YRsu5rgM4Tapr6FDah7Jyg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: raoKKXyWR48u9a+1v3C0bsVbVq3c5PRMUcCy280CIEDMzzoGK7jJTWdc8eVpsiqxLKRe1kLpWgOECSwL0qMjKxcvZMXB67vnuFHXK8/jdC73jhZ/SwZZN+hw1+HxueZ/7STIp/5QLv2x6Id/9crBDDONiSp1/9LLym5Zr5lNbYmxOVwDFBZq2OA1nzYzK2TXEeZA5Z1cSGSqD/xnEOb2zHEBrvwUzUQBulpOCLa8M5ZZVejYbugtxtSsNXg9eESRESOslD2SPt8eDdc9J+wXkNF4716ILHoqMUA90kTGUAHXnqB6MuMp4SCa2M3gUg9ZAiBUKyXppD7cW8MzxbeFvXQWidUV7kP0Crbi7XXoMkWGL0ybcyzr2kttLjkiUiJJXrpfvj8odQh9owc2TJKk/n05/RuNWwlqvbGeG+3pmWjNhoir9aeC3o3oo5+vs6rApC2Gyh0utghwnH3+jX6kLrjZeE/O1otxKzHT005uoH/pGZXjg16i9u/DuPmvOcjaVMFHHlX6Jqms0F5j502vIYnXbN43xb0kHcNEeoRKcILxwwi1QprlaHwkz6qxWu9a8hiTGC9KkggfFdGHJSFNwkJmHTxHP8oDpFcNiM5BcX/CyepSFa17bAUgwU/4gDPR2Wj5HOS6ctvH11tvn7YXUmjEZY3rKeaxjji2LqCizq62tQbMwbAP84q9cS0Gf4nfXAh61z0QXc0XJ2y66ElzwC57d829YPns1x/TnpQl5eMe1AgyWEsoIiOkLvxNh5+yaJcLHtzvzqZHkOzj+m4mDGDMZcoGAN06mKwH959QSJM8837kvTeh4N6bRpEuf3DQn7BiXLVeHnzvmBjKuZex0vJsTSUKj7tqwrsrDV/hLnNHEEz4EehixhosfslLg60QhCVQ+34CaspwYrbxv5hrjyixehGmlsHB1tkF4FniXk2pdw5O3Dp+g5/wiATZZ7RQpjO5U8Hilky4iWpUpV9vAbRujOLIxwc/Cz27laCAiRmkyJNr3XC8S9xaiEwGOAZUv/nn2WW2m8P4glI7yvxKm3a3UNMZsFPE4RWB8Xh1gSkoQehdxKmbnbpnrpnr3CJpBe4I4+dyY24Peyx97FSQoPh/h8zi99o/GmfOpyxfAx+nCSfS3GDl1m4yzoxR3vTlgnbjbzNmUA3F46nYSZURz3vAZ7PaRbhOzZJLVEHu53TDnkUBw1MnFMr3DcCFcqerKB5gPUtVQBpDpr2JiD5ygiM9m1FmAMRTvk+9tzN4qr9aDSE5YEV+ufCxMkVBm7bK9Vjk0QrCHIkGi8DFEl0cwrY7kG4at2ukEhH8o/eeFaUDOWcx5LaNaLFMiTyuWqARDM+/OSzmsDohtyMwuSJ8NewbnZ5Fm5WrfYCcKHebDpuQ//piDh95D/MeUCWaJE+y85xOqt3Q24DIWjNlGU1WGv3Zbhn+mx8nnkCcE7rQEDzQe2O5l7KF9ZedZMCzN7Nbm7i7KQa9XcsaNqNFJMDT8/tHcvW6Rabvh6lYdg3OaO+fGx0KX1uJxPYZGOJpZuwsmK6nOH1WQj+rsLDGrL0YBmy5HmeXwWPRPq9W2anqDDTIYbubab4zalzFMuLRN7JhmJSQ1u1sl78P1BwXZeoeyg== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: aeaf5dc9-e844-4ff7-1a09-08dc71a74498 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:44:00.5244 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5UDFU5llOBkPMbMFodyWvRsTSD25N9TEqtBCbyVgGFNSumYkSo7bz0cv2hl59uJS7ccUrMyRGZplpD8Z12ztWu9Vmeg6x9R6a1/nb3Zvo5c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 Change of the configuration file to enable the build of the FDC driver for MIPS R6 systems. Signed-off-by: Aleksandar Rikalo Signed-off-by: Djordje Todorovic --- drivers/bus/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig index d5e7fa9173a1..17b682f05915 100644 --- a/drivers/bus/Kconfig +++ b/drivers/bus/Kconfig @@ -108,7 +108,7 @@ config INTEL_IXP4XX_EB config MIPS_CDMM bool "MIPS Common Device Memory Map (CDMM) Driver" - depends on CPU_MIPSR2 || CPU_MIPSR5 + depends on CPU_MIPSR2 || CPU_MIPSR5 || CPU_MIPSR6 help Driver needed for the MIPS Common Device Memory Map bus in MIPS cores. This bus is for per-CPU tightly coupled devices such as the From patchwork Sat May 11 10:43:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662328 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2094.outbound.protection.outlook.com [40.107.241.94]) (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 6DF6B612D3; Sat, 11 May 2024 10:44:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.94 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424250; cv=fail; b=c8/TcHCUr84jusf8KHsNWwcfE7xipvKiIRB6PQpIGravU8oaPpOREkhc/qK5AcWYcQfQq5S+x52HIh1Ln2MqVafWdKF4NBiJOt4o4+kBTtSRfJprNOQOMO7KCCKvV1JJoRSiDpZwgDKpWmb75MHuJTZkXDMlDPrSiWU+iTqA/kk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424250; c=relaxed/simple; bh=AjDYcS5XWesU60CUzj2bbQirnHDXd7rG+PPnWlY6UAs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=jhYkBqQIzpj8QiRUlvMiui+4Alt+gmuV7IPMVVU8TZxr55eB6tY0JczPifBtxrMfyF4ajzQhrWvkixShtbsesPsR+PsSnFjstuenq+zAACeUEwEoHvmtG3eB+rWAGSXgS/PMQnwID0xmuWhYnih/irCbfIw/XxREN4N4XP33odc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=b6Ozk9Sq; arc=fail smtp.client-ip=40.107.241.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="b6Ozk9Sq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N6laqh+bgp0fRc4lsU8NZQ8TIXnui0xFC8JYTWErU9cCfu8ap2ZuKfQZF5/dHXTFDqyAZB3lg/M6EU0eItKt2kUL1jaDczcbgik6Um1N0ZPIFoqMYuehV92z6k0x7pkpG+xODwHpdAgkMsm/ZIuxWo/amLR0NdVzvQLFhYpSzO2WWpSs5kQT3MsKYpZUeteW8h6il+hHbbwLPra3pn/i736vXx/qo8dNn0kfZ/dbVVMbjVvTJC5lzs9S2eLHeySkm2ljFo3mWxxn+YVJZNentaXBE53Zn0f8K1Ep5iJPYiavHrPrWZIAFYG37/XrVRiN9Etq+77JIOedotJJYrDvNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=KHW/psxzCaBVsUGXu1idsRWg2soj4NwO+66vDVvz8Hs=; b=nWuDwtDfXaBYd3ccLAsvY+1nC2KkYnF6JroxW3cFLU3yUWKRInVFc5B0seEYWBE0kBM1FHD7kkZKPwnZeXejz1aZjQWduOnIfRnXwXd0UmZxpGqo4dZXork4vVISgIrMKU9Q1aVN88pvjGFsNgwi5kqSs5IC/eAe5YJ51iFlKYl5cxPaUzGvma+wbQUZP7QVpPhOLWlfU3YtxMMU9mmnIja/FY5zIfXPm1mVOj+eTA7R8cyrf9aeWkCJedAJeAzGgANRkLAnoyG8SnJyglLKxPWZWlCdUWyVyVUrJOSGuvSfPo/gy6FOuDo7v/o5H9t015ohiPlkikhfuW9CP6F41w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KHW/psxzCaBVsUGXu1idsRWg2soj4NwO+66vDVvz8Hs=; b=b6Ozk9SqAAZ//G7GV5sFrcB+k/c+JydGDYtPJ5YDE3V2aAoVoINCPt1ZHaT2++PK7KAyT69AIcZOIerF2ERyppMU6OZgy0nlmZEFxEQ6nz4k/z7Tft3Ca1wMT8M3TzhnqfuqGb+8eRBcwaiCqi6kHFbO68/smj6GhKeol4cOATQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:44:01 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:44:01 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 13/14] mips: Move FDC driver to a separate directory Date: Sat, 11 May 2024 12:43:40 +0200 Message-Id: <20240511104341.151550-14-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ed635f1-8dcb-47e8-37db-08dc71a7452c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: B5iKk77CSsOiVr/AmLcUlZu0gvO1AS1OF3+d5GWQitmSIC06dr9x2V8U8kUmexH7Ljj7Dy227P6PKR8CUrzVwgeXo6AdKgPyFSQj/rmCTdjLQvP5w46m94g1im9BL4nycs+fCyYDp03Nl2eQhr5Mrljdi9AQAFzcE5fgtB8S5/ST6Jt5qH8nclRz8A0/Z2dp6g40AdP8WUDcwioxXi3UilbgWt0arChSinivYChpIt10SEi84TKP3QdyG1nBsQCAxaBDtGAGZwD6TGyu7dFP9u68W1uxAexYB7l70AS4Qna5QIN47MavIjQ+Ulvfl2zaieLlRAVRvVLMuurmGvaZQD/xESdFxpo+pu25ipSPDVD8Z0D+9vPgKQxO9uYSHzmrpVQ1rHFJLntj1aQQNDYrtQfois45WTIQyG/+BGvTVd55yTEwuZHYvuXL+Y2yNghYrJQW9GVPlB7ZkRsBD1ckZ+QRg+86FmjtpgjQOiA1DvMwg8w4fP+/fOXB5bc2w2VTR9037oGDP5Fz1EUHuV/b0FlAiQZcOSeMgVsInVADCCWE1fLN6bxdf+Xnzm9+VsGNA0oNW44VxzRYDuQyS45FRBhjxFAJshoRgNFbrPH6L7vLv0hFlFEBCM7ZiwMq3LSwX2Br+zy4rHw9JlsXjBy8p2NftiV1C+lGmlWsFqQf5RGhwJxaYYgAVlu1/6HdPd0XCKZPcZYxTakiyRkYJ6Yrf24Ewut9h0nYEhiB+lcJSOV9kJw9KCaXVNCMVhzufSd3xdwyyNdbE+xVZKU3ncaALbeLM2uf6gPEU5uW2Ly7e4sPgc0B5En/orRFNMavu/PnG9n8vpOEXv+hVnaSApIgbECIFgE5sDQoAeKHqZ6oLw9AYMfwpBsRVA+S+CDK0wuFFrfFNuyc20RQsM79Zlqs3fBrH+nfNQaV+022q22F9skTxVonwxt4OOkwvQzRLnr5vKS5x4UpnkGrNNquaH6mbdRV91vJfVmrQkl+n3aJxKeDgP8DrB6aktowIocu6BIXxtvKWbq8TIoYw4Gr08y8I7BHMH29lUWn7Gqzp3OkBMRW1lJH6GmeMjsC6Nqo1htfp9+AxS+r7iphkw0/bBtThrDkwTElxYHCvb8QCPIydal1GKF1B8Ej5jZnIf83oW+2YoS5xiWEwX9K3f/O2zwtA21cWNXDpjk4RGFVY561Ko52CBM/MqQ9hKSLZGP0ZQua+ZUBR3mcJCOzBeN8F8sHhssorRB1MjnAivYWONw0SOAMilBPJe0jwiLyaRnyX1ypgo7xpgoBou07MEMI0rClRRu0wnUHK84ESCi5ZV+STa9uG5O1Mgfz0zSEX1AkJwUDZsMCwKlx6tvQ9TL0lp+AFw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: debIy35JUIZN27iirqLVRu1EJef6aZyA+s2JXn+69IWH/oP0QllZfR+++sl2dqo+OKR58SaTUFOCN7/kFGPlTEae406QSJ9aFuuECGXMoNr1WBcgqSxjZyQPmFpm7yp50SgXUyt4uUrB4lRbxQDXsam13x7HfLClKrRh33jc45CieRMNuiyopMgu/7G82F8xohR7T9TldA7plU9/mkdNTl+tjrdRWPmT4uZFb05GWDlGhVu+gRlDC4E5J//NzB+BiYQtKcu/0a8837vbn12pZVZ3Sge8WZeQpMMDs/taceSLxrgS8QY15s7waX6TF0sesyQn6kmQp3DWYNi4hnZ24l2s+j6d+pZZ6mlaAAlEpd/ZK/GmVR1pxNKFjD8PGuqua+pSPpIldiq/03drTmq6F2IpZNfath360ZK8mhOevD5osZNnetPbiHbB6bnatIk8DXCmbhKBlZMpsjRIfB4ogmS4rsPJFICAmNGdoGHynxPZs/okLOMMORmLmhBFV/SnZ7HSt/heQtFVqJh7c6GhYCYxSnmCf3H1iKuzXAUkY/UNyIZKTlER0xYoyjfctOWKxAoZFou8JbyDQb0lFTVZ7UVCYlAvNRDyYTdLQkVAVLWq6Sjz/EXEsAOB2EhdkuxV94cnSTgZaHmNRV8ZhDMyqJqjX2iTZzfdxUeylNzCOU908Em6uO8HgWX1JvJ8OsjEZpMP9T9yHQnkKDTuHIsZddhWjbHSvmPDuA5uZFXllaZqyxqEyVM7I7G80CWNTOksfGUZdLDIfHSgD5Kot8qHe/PARXtjFhJ53IwRDgmdvsTShaNqohE7De52qAteoUWDBbE/vuKayk9Z3jtAU8oizIptJmLhpC+Z7lLM7nG0CU7/c1UxufzmNp3u/L7aznCihJ+fhujFHAkQQMkpYpGpjN8GWWE/h0KxYIX7uvDtT7Q9Z8SI8gHa/RQnmSM8e3l9CU4zjRNIX6QnXpc9ENsUqi+UhvyzJAlNrupnRM078eEhvxa9KCLbO8GeHKLcqW4HCtk8q43b4/uHvo4/z2O/n0sg7mDdOKbyi/lwxOyaIn2kWfv4JeWAD96T4HBFCJRwT05cvo3IYQodbB+X+kv6pTMuce+OPWfcZaYfiMw1okPHs/FNxuHw55TfZML8C4ctUlkV45ESaCn5JygYxTGAEKCiunCKb4be5iwTrB24tB3Vut0hGZnq3NfvH2ByQJwpuWC2ubz5MvAYuA0cCBpqWZ1q2ALdcTNEx41oosLX22iF67MfTAatVOSMc3mMU33Z7xAVbDJYZFlG2MKlNjFyJjxbSTmKD5iLUQUb0D98xlzJpRfWyYvCS2ke4G+75p/kM0jmV34I8EFTKiDg1Hr8iDyoVwV6EgdG5TeAnMFRnHwikV0Ka1EAI+KPMSJfKXwj/iabOeJAggqmBrFKQZ7hxMP3KyQ5KxtPTeu7rC89iqSAI9IfQlOY2hlqeP2m1s3HbYnmo/lF+SAsmoU6UJv2w96H0v03d6bcvluiPpdQVV3Kz5ulgQKuesZZ/xlnE9gN6tbdgcNumiVAhbNl5qsqXXNobCWPhZ0KLOAaYoCw6HsanUTpKz7WkcnO3m6kjpUbawT7vEqi8lY7C7R4UVenzw== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ed635f1-8dcb-47e8-37db-08dc71a7452c X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:44:01.4528 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CTZr2SpQu7RbcBzWi3JRnatGdtxM8C2F2si0GmfMTjYIqyA8anGf5FqI34d2PzjJcsXBa6vP52qecLKc390U5gDWmZzbDpe7BZWUryATR38= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 This is in preparation for the further changes that will address FDC multicluster driver support, as well as FDC support for other architectures. No functional impact. Signed-off-by: Aleksandar Rikalo Signed-off-by: Djordje Todorovic --- drivers/tty/Makefile | 2 +- drivers/tty/mips_fdc/Makefile | 2 ++ drivers/tty/{mips_ejtag_fdc.c => mips_fdc/ejtag-fdc.c} | 0 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 drivers/tty/mips_fdc/Makefile rename drivers/tty/{mips_ejtag_fdc.c => mips_fdc/ejtag-fdc.c} (100%) diff --git a/drivers/tty/Makefile b/drivers/tty/Makefile index 07aca5184a55..8846080d91b8 100644 --- a/drivers/tty/Makefile +++ b/drivers/tty/Makefile @@ -24,7 +24,7 @@ obj-$(CONFIG_NULL_TTY) += ttynull.o obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o obj-$(CONFIG_PPC_EPAPR_HV_BYTECHAN) += ehv_bytechan.o obj-$(CONFIG_GOLDFISH_TTY) += goldfish.o -obj-$(CONFIG_MIPS_EJTAG_FDC_TTY) += mips_ejtag_fdc.o +obj-$(CONFIG_MIPS_EJTAG_FDC_TTY) += mips_fdc/ obj-$(CONFIG_VCC) += vcc.o obj-$(CONFIG_RPMSG_TTY) += rpmsg_tty.o diff --git a/drivers/tty/mips_fdc/Makefile b/drivers/tty/mips_fdc/Makefile new file mode 100644 index 000000000000..03b2781e1090 --- /dev/null +++ b/drivers/tty/mips_fdc/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_MIPS_EJTAG_FDC_TTY) += ejtag-fdc.o diff --git a/drivers/tty/mips_ejtag_fdc.c b/drivers/tty/mips_fdc/ejtag-fdc.c similarity index 100% rename from drivers/tty/mips_ejtag_fdc.c rename to drivers/tty/mips_fdc/ejtag-fdc.c From patchwork Sat May 11 10:43:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Rikalo X-Patchwork-Id: 13662329 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2117.outbound.protection.outlook.com [40.107.241.117]) (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 D2F10657AE; Sat, 11 May 2024 10:44:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.241.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424252; cv=fail; b=QjF6ZS0zIEV008zlguHxw209bpkAF7AKtQpFu6VsnRu/ZglOPGrjm7xZgXmI3WJfzkVihhhcaXh4ecHOYBcIDVs7moggNDtd2FItvu4vsBTpGND8oCZxrUdhE7rG/CYgJ3EjpGzyw4SB+CRnIPuM428iKoL6zbZDw7k4Bs74Gzc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715424252; c=relaxed/simple; bh=gbj8niS7B+edIY5VnHb5+l4YnChjOlOZ1glPCTdgYpI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=AhoR7O308/eg+HGLJLmvh5oKEPuM8LkKSv+5DEFyQdMIybh3xcRhAxsqdBxQG0RMlJGXkqIq2kXJp+bFKdFgWWdBMgDG2gd0VZpafeoEpZ35C9ZCM02CJ63g2JeBAIYyaqN5/2Tkv86tBY06a1tKGkJlO+KjYZVNef8VXQK7VVA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com; spf=pass smtp.mailfrom=syrmia.com; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b=FrbKgALj; arc=fail smtp.client-ip=40.107.241.117 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=syrmia.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=syrmia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=syrmia.com header.i=@syrmia.com header.b="FrbKgALj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Yrn4ik+/VwbKb9UAqDCgKeXlLEzdl6uRpfOQt3bt3pRy7SSEwwFvcP8ujDz4yJkDspcSiwkpp7ZICv7Er0V32D+gU5X7ZipK1lf0pMLnH0O4SmuhLj+0wGU1MBa5ZGYtw0uMG/GEg70hA0Y8epAd+6/AGPi8YkxKI4zap1tfVzDIkTHdqFq8kE0Swy7nMEXBkIzUOGfMWpM+VuuwW/LNrKHMSWcd2G3JwgDXjaQcZwWv0wDY82hSXAuFKA0zx8CUkqw33TRI4NgbWg/hcydYpJjzCpEbLm0q/HFQDjNOn3Do8zzreNpff6PfW41wr5QDwT/w9xpmfAKO5Y6ySkkFnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=32lTG3IW2XyUQ2zZD9wBltUg6IOcVvaaih9ITzyiNIg=; b=jjtl/wZEtHRGva/VP3UZpp3kKQS9LVXovqhiBV9usnXtS5dw3pgJ9+tKoDAQn2ZKsHPixz52chAhr7F5bkpt+C5G8mSZcqzEBbKaMrbFdq/5ZcjILqK6N0tC9wQD0E8wiOxNzLpIfmFzu6Uj+sZe2ivAgJc7L3G/5gQULM+f7SQt2T89zwDFXs4FkpmxSZQalA3aYNtFEL4cQBPIwhfXJ74KURwoV0scOZQSfAWGNzgOwE2LDvUwD+KHWEV0ztZLkuh3FzcT63XNrlHjZIOJYt/BMyDsaZcWFm9DxuMJUcIWePojBl8nIEi4Q9J+ztYtxjJIk455mVG8QHnsWWAs6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=syrmia.com; dmarc=pass action=none header.from=syrmia.com; dkim=pass header.d=syrmia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=syrmia.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=32lTG3IW2XyUQ2zZD9wBltUg6IOcVvaaih9ITzyiNIg=; b=FrbKgALjgJKyEOAul3W3CxwrMR8rCEUC5rjmKoT4GjoiDVdvhwm5QKV+MNHB2qJsSuL6/HziIY9DaLrAb6UBjj/uXdlJ1hktaejUR7WEVoIu/Uae28oBGypdkKL0Y0lMokLOEDJI7dYYWAYLPzjHo98CZ3NCblSqwchzEjSWq1A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=syrmia.com; Received: from AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) by GVXPR03MB8449.eurprd03.prod.outlook.com (2603:10a6:150:5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.45; Sat, 11 May 2024 10:44:02 +0000 Received: from AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268]) by AM9PR03MB6916.eurprd03.prod.outlook.com ([fe80::b417:d676:e3ff:9268%3]) with mapi id 15.20.7587.018; Sat, 11 May 2024 10:44:02 +0000 From: Aleksandar Rikalo To: Thomas Bogendoerfer Cc: Aleksandar Rikalo , Chao-ying Fu , Daniel Lezcano , Geert Uytterhoeven , Greg Ungerer , Hauke Mehrtens , Ilya Lipnitskiy , Jiaxun Yang , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Marc Zyngier , Paul Burton , Peter Zijlstra , Serge Semin , Thomas Gleixner , Tiezhu Yang Subject: [PATCH v4 14/14] mips: FDC driver refactor Date: Sat, 11 May 2024 12:43:41 +0200 Message-Id: <20240511104341.151550-15-aleksandar.rikalo@syrmia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> References: <20240511104341.151550-1-aleksandar.rikalo@syrmia.com> X-ClientProxiedBy: VI1PR07CA0235.eurprd07.prod.outlook.com (2603:10a6:802:58::38) To AM9PR03MB6916.eurprd03.prod.outlook.com (2603:10a6:20b:2d7::14) Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR03MB6916:EE_|GVXPR03MB8449:EE_ X-MS-Office365-Filtering-Correlation-Id: 7369d48b-a361-4ef6-341b-08dc71a745bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230031|366007|7416005|52116005|376005|1800799015|38350700005; X-Microsoft-Antispam-Message-Info: bsTABszupbl5lhiUPwMEsyQ9jTrf1O2Hk29xcId8uAAHF8mk6QohucWTVZXQ6njSgY12a6MVcKPfevMEpIHX0+bro51TVracl46TKQWqnXdtG2fxisF8cc42PHcxZ+H8/EDMjb09Ujw5ENCkDmbKJGFeMtbk75ZyghlNywzc/oslxGrGnEZqrn99pO3SGDGxxXAvX1gdnSTIeRKIfEFvSP3Y0/goqWaVzKrspg7xj4+/+PEFek5nE7AVL9XQqPTv+0o2UFwgSg28UwtdEtAs/7Px/Ms+gNvzQEZtPOjxAbY39J8irkmV/tieBh+bA/In0LGhOThyHtAS6g1hcF1lf4p2LAMXz3STgNpAiC4rgG1/BBOnMtlSyyDrYfZ2AAtLPoyYn/tUOETp3RTJPjLeEOmBayMC4+2RtIdwuGtoOW11E0ddfucn7D7E3ni7WcRtDUUZc729AGYHXVsU9kRjMeszDAOarKXWv7QxJbGpQ0Ev4YqdgrR/XgHnfZ5NpfcBfUzixoK7HxNQIpeUmKEYAM1h5q2GDERNUySRHNHKLwKNmsMMxVR5ayDPVmmzTdJlmhg+3DhSBEL0QFbzFTa4BQW4xENOtlPowYAzlcPLUcNJ4ED6gF0BNRplKfc1zXJlEnbWTztlFQtC9eKo5kM3+H1vw6dmcMZVbEMmdsMKfJKsTFiqGvBklOBxxuZMYqbyrE7uvBa+h7Mt/FWUu3H0dPj0hThsytnskPCg4PCVMxmihae51TmpWwR3jPAogXoJAXh3uqisZChus5RmNRbE1gfGqGjVoZiL00x1Hb/klzOfWa0yXRBqwFmlri1CScy3j6ft4gE0d/Wd6LqZPWLm5yVBqMRUaSKHKIjzlbzfbT43MoTQTHJ95W3AEFIi/OLW8IYvwx1n9w9n0hVHncffRh2Vc1DnmSoF1F2VD+rjqSF7aO+0Qa5mibTV7OJKvI1CKTl6mP6x/rvMfetUljRS32yLZw1qzZ8sJqW/2I5nFCTTSFIcXTT78fW/R2Mqpp1V+wP0R1Jsd/rG9rK6fPLZum6QDlXPW+918yX7i5M9jr8Bi6JVGyNlCiNdd94RA3JVbPyvVT1zhEF6SvmQdQ9XA2uBYOu6gWUy3pKMpCfQsdqI7XfnsqonziC3fifqO1j80vkzSHSC3+TyXjPi9ubPU0UDCLTrHtSf4xCZkSLd2fBtzbrR4LC7sDwU/Z7bAudx9choe46vqlBvw/SyhfNZr4VFKur8KL5F6EZADdk5VIaW4fUTZ1fFfhAFR7VSDfM8Dz+r8cxLC4asEW9yfHtiuKHzSF3UVEkzwz+haafjt5uFbjHz4oDtWTREVKJZLnEyS4i0Eox79nQvadncfgEDlw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6916.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(7416005)(52116005)(376005)(1800799015)(38350700005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 296MJIxsWL44eGOjoUazzwEed4RsQ+LHLz4+ABbnJt3WS31Vaf9iJIaHkWTkIaKqMDTOxshU30gLGq5UK65sSBPjsbCB3MZ6UA/ssVFYLXi64+TYa888FYWckf4HkQwi0XJETQGocW4UkL21/Mo81z/YIYFLE9oz0gcnrHV0k8J1OzhlfwvvqsNHIKX4ZeBxMF5VwkiNh9lxyqoOouceQcaDY9biuTOCQ758jetS2mrTHTmdkk+ycknJe7VbrOETOizC03BNfD8DSvNq71w+Eiidk9+eSO2RdJ5nv2ba27/kDGkyfwMcr1RLt5O786OLD6qFTklHJdqG1sKzjTh6wMrbRkr/N3fFIAtjCIaA6gb29liWFv0uGYViH09kGMdJT77xDI+dVwpi9D0mZHvhTTxEZH+FZODUyZOaI+wf3r5p0KGE5tmZ7z4ujrAUqmcaYoZ4zahV7XPUJEhBF547ItQhCLEnmdVoWvlSyrexrG2xigSAFbbyvQ1smLlSI1Sar9hCsCqE88NL0WwEByqsX+EbTt8ZtFPz7gowxj33VMOZijZ3cALN7kyiRG8+B1iQZfRtpEIWbwJwKOL2Kcxe3scKm0b4iZIXKM67pmBRfNjClL7eyyGBy6P/Y26gfSVq1M/0RrCwLTU9vJYSnaB1eAsLlKtqDLFv44rRTtjlm+Ue9F+Dy2wQVx+zjTkgXYwctsJMfqOvOTMpwmbBIeuaqusBE7Wf//74uq2ml/83ZD71daqEGi6MwMzQci6dnIlz7D+WenCg3wV2HMFhegsN9Xaw8ZWQtaGpyEzlUX4/UdWXGKHW7vflN4HBOqcThycnDxdqDFzUFdAIWJOqXCWYlyXsE+2P8QVUKuRpmwmNORQLLB7JlYIZ9eB2p+OSG8hBnqYgc3XcnIPUCa2TZ7ZLIHPjI1Pv8hPC3QCQ5mkvmxdCi7VVs/YqbOB84kabrib+L4dtPM+nh807wDwQqp3juEDNSkP0GB9WKPMsWKwMWbHfgBhksEEiujX/jFdVy5sbIGNgq1lmu8FKWhH+MQm8YPGNcItP6piY2ElRRZp0fTR7l+IUUj/gCf0xchuTlRYNnmC6Nb3c/G93rJ85sZZik6ygJOM+WRyGy+HhKQs6v5f6pmClr18aOoHEERqK6o4y0ZaUKMzr8OnK/wA1gw71WYp+8oUHqGc/Oh+XEp+d01bNjkDh6jYCDALJsuB4NbLWRoKK5bHhZaR3MCnbgHkGfi58BFLBHrTsNg9OU4/e0VPV/By3MoXlyoEzBxaNUT6PzhN5ckcMD69hBZ565/zuh9V4lyPuQHAkfURP3YH6V03PDUCmFZDqAbi/NCvZapf9dPjfTou876ItK9xvXG5PiruTh4adhyutlO2dB9TI5h4jY2Aj/APTZIUUdkUpAukLoFeNFznY8/NlLjQP1+OMgcKfcznsI1/0qo3slMOJgsEf4aoJ57k3xpEoLdWreq6wtcar6zQaUM83hTOdhHwIgjRIaRhDTycJrcoxH9DaqHWDfwgZo2mcU1lCsdKLdUNo3Ttq0tyENj7L60GQFOGyqS/1O1719GeWyQuIXaYIzVGwwQJXJpE4Ux91T4qXTrS/BXSCkGO91VcSGS64aWaCkA== X-OriginatorOrg: syrmia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7369d48b-a361-4ef6-341b-08dc71a745bb X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6916.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2024 10:44:02.3948 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 19214a73-c1ab-4e19-8f59-14bdcb09a66e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6lg9L/eqpxzHbKmem2Xp2UkCenmipqQPVtyEkDCoWdUD8/f4d4Xtz+6Hyoy9O0yShTRTeU8ET7XS9W0RuP2dVDfXNJ+E+FKECVMllhnJg5A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR03MB8449 Separate the FDC driver code into two parts, common and mips-specific. No functional impact. Signed-off-by: Aleksandar Rikalo Signed-off-by: Djordje Todorovic --- drivers/tty/mips_fdc/Makefile | 2 + drivers/tty/mips_fdc/ejtag-fdc-mips.c | 29 ++++++++++++ drivers/tty/mips_fdc/ejtag-fdc.c | 66 +++------------------------ drivers/tty/mips_fdc/ejtag-fdc.h | 55 ++++++++++++++++++++++ 4 files changed, 93 insertions(+), 59 deletions(-) create mode 100644 drivers/tty/mips_fdc/ejtag-fdc-mips.c create mode 100644 drivers/tty/mips_fdc/ejtag-fdc.h diff --git a/drivers/tty/mips_fdc/Makefile b/drivers/tty/mips_fdc/Makefile index 03b2781e1090..9e0894a8b342 100644 --- a/drivers/tty/mips_fdc/Makefile +++ b/drivers/tty/mips_fdc/Makefile @@ -1,2 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_MIPS_EJTAG_FDC_TTY) += ejtag-fdc.o + +obj-$(CONFIG_MIPS) += ejtag-fdc-mips.o diff --git a/drivers/tty/mips_fdc/ejtag-fdc-mips.c b/drivers/tty/mips_fdc/ejtag-fdc-mips.c new file mode 100644 index 000000000000..3942ee818f0b --- /dev/null +++ b/drivers/tty/mips_fdc/ejtag-fdc-mips.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include "ejtag-fdc.h" + +void __iomem *get_fdc_regs(void) +{ + return mips_cdmm_early_probe(0xfd); +} + +int is_fdc_interrupt(void) +{ + return read_c0_cause() & CAUSEF_FDCI; +} + +static const struct mips_cdmm_device_id mips_ejtag_fdc_tty_ids[] = { + { .type = 0xfd }, + { } +}; + +static struct mips_cdmm_driver mips_ejtag_fdc_tty_driver = { + .drv = { + .name = "mips_ejtag_fdc", + }, + .probe = mips_ejtag_fdc_tty_probe, + .cpu_down = mips_ejtag_fdc_tty_cpu_down, + .cpu_up = mips_ejtag_fdc_tty_cpu_up, + .id_table = mips_ejtag_fdc_tty_ids, +}; +builtin_mips_cdmm_driver(mips_ejtag_fdc_tty_driver); diff --git a/drivers/tty/mips_fdc/ejtag-fdc.c b/drivers/tty/mips_fdc/ejtag-fdc.c index afbf7738c7c4..fecd96118019 100644 --- a/drivers/tty/mips_fdc/ejtag-fdc.c +++ b/drivers/tty/mips_fdc/ejtag-fdc.c @@ -28,45 +28,9 @@ #include #include -#include #include -/* Register offsets */ -#define REG_FDACSR 0x00 /* FDC Access Control and Status Register */ -#define REG_FDCFG 0x08 /* FDC Configuration Register */ -#define REG_FDSTAT 0x10 /* FDC Status Register */ -#define REG_FDRX 0x18 /* FDC Receive Register */ -#define REG_FDTX(N) (0x20+0x8*(N)) /* FDC Transmit Register n (0..15) */ - -/* Register fields */ - -#define REG_FDCFG_TXINTTHRES_SHIFT 18 -#define REG_FDCFG_TXINTTHRES (0x3 << REG_FDCFG_TXINTTHRES_SHIFT) -#define REG_FDCFG_TXINTTHRES_DISABLED (0x0 << REG_FDCFG_TXINTTHRES_SHIFT) -#define REG_FDCFG_TXINTTHRES_EMPTY (0x1 << REG_FDCFG_TXINTTHRES_SHIFT) -#define REG_FDCFG_TXINTTHRES_NOTFULL (0x2 << REG_FDCFG_TXINTTHRES_SHIFT) -#define REG_FDCFG_TXINTTHRES_NEAREMPTY (0x3 << REG_FDCFG_TXINTTHRES_SHIFT) -#define REG_FDCFG_RXINTTHRES_SHIFT 16 -#define REG_FDCFG_RXINTTHRES (0x3 << REG_FDCFG_RXINTTHRES_SHIFT) -#define REG_FDCFG_RXINTTHRES_DISABLED (0x0 << REG_FDCFG_RXINTTHRES_SHIFT) -#define REG_FDCFG_RXINTTHRES_FULL (0x1 << REG_FDCFG_RXINTTHRES_SHIFT) -#define REG_FDCFG_RXINTTHRES_NOTEMPTY (0x2 << REG_FDCFG_RXINTTHRES_SHIFT) -#define REG_FDCFG_RXINTTHRES_NEARFULL (0x3 << REG_FDCFG_RXINTTHRES_SHIFT) -#define REG_FDCFG_TXFIFOSIZE_SHIFT 8 -#define REG_FDCFG_TXFIFOSIZE (0xff << REG_FDCFG_TXFIFOSIZE_SHIFT) -#define REG_FDCFG_RXFIFOSIZE_SHIFT 0 -#define REG_FDCFG_RXFIFOSIZE (0xff << REG_FDCFG_RXFIFOSIZE_SHIFT) - -#define REG_FDSTAT_TXCOUNT_SHIFT 24 -#define REG_FDSTAT_TXCOUNT (0xff << REG_FDSTAT_TXCOUNT_SHIFT) -#define REG_FDSTAT_RXCOUNT_SHIFT 16 -#define REG_FDSTAT_RXCOUNT (0xff << REG_FDSTAT_RXCOUNT_SHIFT) -#define REG_FDSTAT_RXCHAN_SHIFT 4 -#define REG_FDSTAT_RXCHAN (0xf << REG_FDSTAT_RXCHAN_SHIFT) -#define REG_FDSTAT_RXE BIT(3) /* Rx Empty */ -#define REG_FDSTAT_RXF BIT(2) /* Rx Full */ -#define REG_FDSTAT_TXE BIT(1) /* Tx Empty */ -#define REG_FDSTAT_TXF BIT(0) /* Tx Full */ +#include "ejtag-fdc.h" /* Default channel for the early console */ #define CONSOLE_CHANNEL 1 @@ -375,7 +339,7 @@ static int __init mips_ejtag_fdc_console_init(struct mips_ejtag_fdc_console *c) if (c->initialised) goto out; /* Look for the FDC device */ - regs = mips_cdmm_early_probe(0xfd); + regs = get_fdc_regs(); if (IS_ERR(regs)) { ret = PTR_ERR(regs); goto out; @@ -664,7 +628,7 @@ static irqreturn_t mips_ejtag_fdc_isr(int irq, void *dev_id) return IRQ_NONE; /* If no FDC interrupt pending, it wasn't for us */ - if (!(read_c0_cause() & CAUSEF_FDCI)) + if (!is_fdc_interrupt()) return IRQ_NONE; mips_ejtag_fdc_handle(priv); @@ -882,7 +846,7 @@ int __weak get_c0_fdc_int(void) return -1; } -static int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev) +int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev) { int ret, nport; struct mips_ejtag_fdc_tty_port *dport; @@ -1045,7 +1009,7 @@ static int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev) return ret; } -static int mips_ejtag_fdc_tty_cpu_down(struct mips_cdmm_device *dev) +int mips_ejtag_fdc_tty_cpu_down(struct mips_cdmm_device *dev) { struct mips_ejtag_fdc_tty *priv = mips_cdmm_get_drvdata(dev); unsigned int cfg; @@ -1068,7 +1032,7 @@ static int mips_ejtag_fdc_tty_cpu_down(struct mips_cdmm_device *dev) return 0; } -static int mips_ejtag_fdc_tty_cpu_up(struct mips_cdmm_device *dev) +int mips_ejtag_fdc_tty_cpu_up(struct mips_cdmm_device *dev) { struct mips_ejtag_fdc_tty *priv = mips_cdmm_get_drvdata(dev); unsigned int cfg; @@ -1106,22 +1070,6 @@ static int mips_ejtag_fdc_tty_cpu_up(struct mips_cdmm_device *dev) return ret; } -static const struct mips_cdmm_device_id mips_ejtag_fdc_tty_ids[] = { - { .type = 0xfd }, - { } -}; - -static struct mips_cdmm_driver mips_ejtag_fdc_tty_driver = { - .drv = { - .name = "mips_ejtag_fdc", - }, - .probe = mips_ejtag_fdc_tty_probe, - .cpu_down = mips_ejtag_fdc_tty_cpu_down, - .cpu_up = mips_ejtag_fdc_tty_cpu_up, - .id_table = mips_ejtag_fdc_tty_ids, -}; -builtin_mips_cdmm_driver(mips_ejtag_fdc_tty_driver); - static int __init mips_ejtag_fdc_init_console(void) { return mips_ejtag_fdc_console_init(&mips_ejtag_fdc_con); @@ -1166,7 +1114,7 @@ static void __iomem *kgdbfdc_setup(void) regs = mips_ejtag_fdc_con.regs[cpu]; /* First console output on this CPU? */ if (!regs) { - regs = mips_cdmm_early_probe(0xfd); + regs = get_fdc_regs(); mips_ejtag_fdc_con.regs[cpu] = regs; } /* Already tried and failed to find FDC on this CPU? */ diff --git a/drivers/tty/mips_fdc/ejtag-fdc.h b/drivers/tty/mips_fdc/ejtag-fdc.h new file mode 100644 index 000000000000..62e8fbe1b614 --- /dev/null +++ b/drivers/tty/mips_fdc/ejtag-fdc.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * TTY driver for MIPS EJTAG Fast Debug Channels. + * + * Copyright (C) 2007-2015 Imagination Technologies Ltd + */ + +#ifndef __EJTAG_FDC_H +#define __EJTAG_FDC_H + +#include + +/* Register offsets */ +#define REG_FDACSR 0x00 /* FDC Access Control and Status Register */ +#define REG_FDCFG 0x08 /* FDC Configuration Register */ +#define REG_FDSTAT 0x10 /* FDC Status Register */ +#define REG_FDRX 0x18 /* FDC Receive Register */ +#define REG_FDTX(N) (0x20+0x8*(N)) /* FDC Transmit Register n (0..15) */ + +/* Register fields */ +#define REG_FDCFG_TXINTTHRES_SHIFT 18 +#define REG_FDCFG_TXINTTHRES (0x3 << REG_FDCFG_TXINTTHRES_SHIFT) +#define REG_FDCFG_TXINTTHRES_DISABLED (0x0 << REG_FDCFG_TXINTTHRES_SHIFT) +#define REG_FDCFG_TXINTTHRES_EMPTY (0x1 << REG_FDCFG_TXINTTHRES_SHIFT) +#define REG_FDCFG_TXINTTHRES_NOTFULL (0x2 << REG_FDCFG_TXINTTHRES_SHIFT) +#define REG_FDCFG_TXINTTHRES_NEAREMPTY (0x3 << REG_FDCFG_TXINTTHRES_SHIFT) +#define REG_FDCFG_RXINTTHRES_SHIFT 16 +#define REG_FDCFG_RXINTTHRES (0x3 << REG_FDCFG_RXINTTHRES_SHIFT) +#define REG_FDCFG_RXINTTHRES_DISABLED (0x0 << REG_FDCFG_RXINTTHRES_SHIFT) +#define REG_FDCFG_RXINTTHRES_FULL (0x1 << REG_FDCFG_RXINTTHRES_SHIFT) +#define REG_FDCFG_RXINTTHRES_NOTEMPTY (0x2 << REG_FDCFG_RXINTTHRES_SHIFT) +#define REG_FDCFG_RXINTTHRES_NEARFULL (0x3 << REG_FDCFG_RXINTTHRES_SHIFT) +#define REG_FDCFG_TXFIFOSIZE_SHIFT 8 +#define REG_FDCFG_TXFIFOSIZE (0xff << REG_FDCFG_TXFIFOSIZE_SHIFT) +#define REG_FDCFG_RXFIFOSIZE_SHIFT 0 +#define REG_FDCFG_RXFIFOSIZE (0xff << REG_FDCFG_RXFIFOSIZE_SHIFT) + +#define REG_FDSTAT_TXCOUNT_SHIFT 24 +#define REG_FDSTAT_TXCOUNT (0xff << REG_FDSTAT_TXCOUNT_SHIFT) +#define REG_FDSTAT_RXCOUNT_SHIFT 16 +#define REG_FDSTAT_RXCOUNT (0xff << REG_FDSTAT_RXCOUNT_SHIFT) +#define REG_FDSTAT_RXCHAN_SHIFT 4 +#define REG_FDSTAT_RXCHAN (0xf << REG_FDSTAT_RXCHAN_SHIFT) +#define REG_FDSTAT_RXE BIT(3) /* Rx Empty */ +#define REG_FDSTAT_RXF BIT(2) /* Rx Full */ +#define REG_FDSTAT_TXE BIT(1) /* Tx Empty */ +#define REG_FDSTAT_TXF BIT(0) /* Tx Full */ + +void __iomem *get_fdc_regs(void); +int is_fdc_interrupt(void); +int mips_ejtag_fdc_tty_probe(struct mips_cdmm_device *dev); +int mips_ejtag_fdc_tty_cpu_down(struct mips_cdmm_device *dev); +int mips_ejtag_fdc_tty_cpu_up(struct mips_cdmm_device *dev); + +#endif /* __EJTAG_FDC_H */