From mboxrd@z Thu Jan 1 00:00:00 1970 From: ddaney@caviumnetworks.com (David Daney) Date: Mon, 17 Aug 2015 10:00:53 -0700 Subject: [PATCH v4 2/5] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 In-Reply-To: <1439576885-15621-3-git-send-email-rric@kernel.org> References: <1439576885-15621-1-git-send-email-rric@kernel.org> <1439576885-15621-3-git-send-email-rric@kernel.org> Message-ID: <55D21345.3040903@caviumnetworks.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 08/14/2015 11:28 AM, Robert Richter wrote: > From: Robert Richter > > This patch implements Cavium ThunderX erratum 23154. > > The gicv3 of ThunderX requires a modified version for reading the IAR > status to ensure data synchronization. Since this is in the fast-path > and called with each interrupt, runtime patching is used using jump > label patching for smallest overhead (no-op). This is the same > technique as used for tracepoints. > > v4: > * simplify code to only use cpus_have_cap() in gicv3_enable_quirks() > > v3: > * fix erratum to be dependend from midr > * use arm64 errata framework > > v2: > * implement code in a single asm() to keep instruction sequence > * added comment to the code that explains the erratum > * apply workaround also if running as guest, thus check MIDR > > Signed-off-by: Robert Richter > --- > arch/arm64/Kconfig | 11 ++++++++++ > arch/arm64/include/asm/cpufeature.h | 3 ++- > arch/arm64/include/asm/cputype.h | 18 +++++++++------- > arch/arm64/kernel/cpu_errata.c | 9 ++++++++ > drivers/irqchip/irq-gic-v3.c | 42 ++++++++++++++++++++++++++++++++++++- > 5 files changed, 74 insertions(+), 9 deletions(-) > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 0f6edb14b7e4..4f866a4c6536 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -417,6 +417,17 @@ config ARM64_ERRATUM_845719 > > If unsure, say Y. > > +config CAVIUM_ERRATUM_23154 > + bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed" > + depends on ARCH_THUNDER None of the other errata depend on a specific ARCH_*. I think we should remove this 'depends on', so that a generic kernel can be configured to work on Thunder without having to first select ARCH_THUNDER. David Daney > + default y > + help > + The gicv3 of ThunderX requires a modified version for > + reading the IAR status to ensure data synchronization > + (access to icc_iar1_el1 is not sync'ed before and after). > + > + If unsure, say Y. > + > endmenu > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755509AbbHQRBA (ORCPT ); Mon, 17 Aug 2015 13:01:00 -0400 Received: from mail-bn1bon0075.outbound.protection.outlook.com ([157.56.111.75]:2272 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752555AbbHQRA6 (ORCPT ); Mon, 17 Aug 2015 13:00:58 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=David.Daney@caviumnetworks.com; Message-ID: <55D21345.3040903@caviumnetworks.com> Date: Mon, 17 Aug 2015 10:00:53 -0700 From: David Daney User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 To: Robert Richter CC: Marc Zygnier , Thomas Gleixner , Jason Cooper , Catalin Marinas , Will Deacon , Robert Richter , Tirumalesh Chalamarla , , Subject: Re: [PATCH v4 2/5] irqchip, gicv3: Workaround for Cavium ThunderX erratum 23154 References: <1439576885-15621-1-git-send-email-rric@kernel.org> <1439576885-15621-3-git-send-email-rric@kernel.org> In-Reply-To: <1439576885-15621-3-git-send-email-rric@kernel.org> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [64.2.3.194] X-ClientProxiedBy: BY2PR07CA048.namprd07.prod.outlook.com (10.141.251.23) To BY1PR0701MB1723.namprd07.prod.outlook.com (25.162.111.142) X-Microsoft-Exchange-Diagnostics: 1;BY1PR0701MB1723;2:HrYkQhuVAqu+d2Qr3RBowtOoE8ZqSH3kRUuAvdZQGtMhBCWHXtUIU8rhKOm9iLa81YMvVI0G1GuGFHwq+mO/ELPNwipAAngOk5S+cfsAu1PaB7WMKosvH6pvxbq6240chlqqeLReR0qYWGVwoUxyfVnqgzfetfRxi9R5DFXRPN8=;3:HVsWvfR28vYMTN/e3DpbdX+9pRM66080/YaMfj3RwTuF9XTAUw7Cv9SlrhxJ3fJMdTJfLtA7fD2OC0XcatboMYXhTFws/gMgghLZuv6M5xJBzukaWdqqURPK20NztY1/TPUjBrGfWk1j1u7BVoZoeQ==;25:Oadyt090GmxzpdUb2brlHCWmdHwMg3n5oQlerPFbN9u60wycOEQsREieQijNVb4b6tHXIONC9EQp4F3XguYv2PagG/TcI0zlLOenLgJb14gx1eWcmG5LCXAoY4mdK8fgXklLZzp2JFl769Itc+QuOic1Yqy5TG3pH8Xuart/Au4FFseRAt/RNHczvZ5kUih01HuUbaZWIU6sECEVC9vEDHPgSJrnCntp4T96LqmrvrrrQUNb5zwdALYXwnPiRDjwrH2iu1j2YXdyPcdYYo1mFA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1723; X-Microsoft-Exchange-Diagnostics: 1;BY1PR0701MB1723;20:wdy79Cm2/gCV/aKCaWtniWNyGrNIiK7ew+c1y3sejX82DnBrM2dg6lUD3neSw/PiTH3VEGwsj+kWwqSDMbv+oRdqYr1xz1kW9IrQLDrms8mBwUFvIDYAoDPht7AORkvgOwYD9Rxumht40imcu+crxjpSK1V3SdnJkuCzTuO0NqErQRqF5gKD+Lz/OljYHlkVf/uk6axyNi6B6f29c7oIm6smTAC6UhfdjxB38xXUyfeEBHnOSF+5LuZxdSu4XfOI0HdyP2YXEeC2Ve68hzP6VN4Xg4oX6k3rafIr/OV7pJGXKcSFKSLjqEX+P0zEJGtF0O2ZDWpgk9A6nq/8xh+oMriyOBuG7QYKALewdoF2MKCOkJQAteuDBfQVy8ncWRH7BX16MMa5ZmbUQkPvV4KSO8LGhYr8fXvN9ZjqRgdjswN0fmTdC4OWr5+oKF29BF09pv2UHi+quZZeXdXgYKIUM4myfs+UVUdHb5cJM8aYveIYAArmeKxZ57iFoPUdOMr9mdF8JtvTMplOGZaTLQ3ty1hMvTwQhuieDFwKRocNyC+z1R5srR7uPRzUnu+7l9htX36M9HUH1liAggBzI5iUeLiyOXWBtmc7S7fwFXERv2M=;4:elRbIvGhIcv+x92OGDqFvF0fnKTLf7ibs+6NmrL4RX3vsSpnqWm3F51NxW2SjDQnnw/+ULLkzWAs3/uwyZ9qYiP77LvozFCU5L0/PLgsCWTgFmsoBbLLKqV8o6CAgMg1HonSWLf3XpcFv99LMVKpx5ZIR/FKwDmXdWXsAh1tQJCtrw403Zf+6NADRCPnPua/DnEg6dziszZNeVJTL9vOvAXgbA2VjaT+CfMlfrY1DDnDy+Ryur8O40nEyHzyP/6onr53hSh1gebeYYRfVW1gXf0wNkEEc+u9XKBCAO21EBln/rQijzMlKPAS7zTIwpP7 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(8121501046)(5005006)(3002001);SRVR:BY1PR0701MB1723;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1723; X-Forefront-PRVS: 0671F32598 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(479174004)(199003)(189002)(24454002)(377454003)(19580405001)(64706001)(19580395003)(106356001)(4001350100001)(2950100001)(40100003)(46102003)(80316001)(64126003)(105586002)(23756003)(33656002)(54356999)(50986999)(87266999)(92566002)(65816999)(68736005)(77096005)(76176999)(83506001)(59896002)(87976001)(50466002)(5001920100001)(53416004)(189998001)(101416001)(65956001)(42186005)(66066001)(110136002)(122386002)(36756003)(65806001)(62966003)(77156002)(81156007)(5001830100001)(97736004)(4001540100001)(47776003)(5001960100002)(69596002)(5001860100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR0701MB1723;H:dl.caveonetworks.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;BY1PR0701MB1723;23:QRzcDMRNMrgF/kxbAE8KtxZQX41aYJnDoMKnJ?= =?iso-8859-1?Q?CdkNacu0DOcBkZBtE4MobLU4eJD5hyUm3+ZSqCVJP19YgiCE9sgWcWIRpS?= =?iso-8859-1?Q?ssCH/ptrVOLogVzG+nwZt0uhDmq0VfZJ4FQy1QeP64bcMQ5V2W1h53Ui3f?= =?iso-8859-1?Q?Yfa+r1MVugJJoMYJhGID73FjE0zz/xbnHKnyyLwe7eTxvi4EeLUizz5ZUY?= =?iso-8859-1?Q?emuDIbqm2GOLWWfVVYItdLw4bZqEJQmXZGCXGqpSswd+pVT8JCU9WMyWwU?= =?iso-8859-1?Q?K6LnpqxeK2cdBydNodS1JvGU5B8keuRKWTb5rbVuLUWdGTt4dnOA1D1mIt?= =?iso-8859-1?Q?tanyHZqVNwV0UNQjBTnxyUeJ6bLeWXaIom+JRBFvoI1APGmBYc30FaSnXy?= =?iso-8859-1?Q?+ISQ/lD9rOULNfTiq/slW2vHy/sKDJDq+LsdmXif6D43w+lja6D7xBh6Wg?= =?iso-8859-1?Q?8Knxm/OSdKxnvfF5T74hu0se6gtP05mRVUmkVkKx75MDiR2AqSPzck0Q/z?= =?iso-8859-1?Q?4GDTi2mZ+CDaBxQJdu+7FqhI1eK6MxddvO4JXLGy6r+jD2X1glTa3W4bgy?= =?iso-8859-1?Q?EhyZ7cyfKLCvWU6pkGIMfH7Al1rjExYOilzoMJ0YKLE+p2GyrIjMTqUk+8?= =?iso-8859-1?Q?jq50rl21OYAyJaNiWVB6+tCjoEFuvdS/q4ATsMmLj6KlSkpVczdBPZNvm4?= =?iso-8859-1?Q?SEW9lZduSef8bJA9otwHOltv4DoTM7jrbVAKjoEHgtCFEqibVAQbRHSHNv?= =?iso-8859-1?Q?pt3Bykx9bLSGeeph6f9OeEBeFMTJWffkCgPqgV5eVpyh2hJOEuzW0KR/0m?= =?iso-8859-1?Q?8znWXLpHctZR+4vp81zTEpqQVDMGwA2KQGmDDU88TOrSrNCKqYhzJwOjrS?= =?iso-8859-1?Q?dwP+VUZSG9kwLDcujSSkow1mhZU+qTguH63bycUYvf9VjKTy6R0cNJwCsg?= =?iso-8859-1?Q?T0n2rmC9FHQVyNOry5beqypTYc/iVxAzpMNxFrf/nQIpcWWVEUwBFpXDsC?= =?iso-8859-1?Q?ckgXqnobN+K0PlBCTHzw8VRRIOS7b8Ib5u0gT8eQx5w9hZSRupuHRw3jsM?= =?iso-8859-1?Q?47DcMpOpeKmXo6Jm2ORIwOhzinEsUK+JQw2H3tw39RKGCkjWtjJSy9E5tv?= =?iso-8859-1?Q?GH0fcA61ivyS23aEN6dkEYaJk7qPQAI6/t+ZQjBpB3dWuZFmWPBwDz8+IL?= =?iso-8859-1?Q?px+wPyf3euZnXEDr7oLRh/5kRor/VpMcIISx58pd2ZXIhHzAv4278xhg19?= =?iso-8859-1?Q?hQsd6BaNUqyrP8ZVPKueReVcze31FhLqucxunUn7eqkq9/HcOjo/oqwsLa?= =?iso-8859-1?Q?1TBMMehbL2gDK3S3qB6Ecdf6YWe+VKPkAZqOvCVCTTpaAbo4KU03w/Mabp?= =?iso-8859-1?Q?Uo0z9EULT9fUL8GA3eMaK8lhS3YZYrSeB2WtzUIaqa2IfZYZNYsZg=3D?= =?iso-8859-1?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR0701MB1723;5:MPhMyGix4tQ7pfkCmLQAUZNvO/nNxVF2qzF0mtHsyLAhOhkZV7JIsn+tno/YU9hviq+DHe67YvKlZPXK2zCuQquhoFFXtZsG3K++/4KPQz3I7WT6XLheYaSPkkJLnWTF//h0vI8zdDKlev/us3yKfg==;24:ac5G1mSn98T9cAr3Jpj20RJ7OWPqIZsYqeJtAxUTC2gQS5XvLEbzAqAs2VRjL37FcgHejbJB1WnO/kOI6bBzdpFrHtb8pb+Wpy+qL8c5IOU=;20:8ZfuQyjJdBavAQdDaPRhmZNw9bKOS5qdH6cbnifQTmJHxsHsPteYK4A6hU0n4qcwSl8NSsuAOqCRFgSNncpgew== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2015 17:00:56.1183 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1723 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/14/2015 11:28 AM, Robert Richter wrote: > From: Robert Richter > > This patch implements Cavium ThunderX erratum 23154. > > The gicv3 of ThunderX requires a modified version for reading the IAR > status to ensure data synchronization. Since this is in the fast-path > and called with each interrupt, runtime patching is used using jump > label patching for smallest overhead (no-op). This is the same > technique as used for tracepoints. > > v4: > * simplify code to only use cpus_have_cap() in gicv3_enable_quirks() > > v3: > * fix erratum to be dependend from midr > * use arm64 errata framework > > v2: > * implement code in a single asm() to keep instruction sequence > * added comment to the code that explains the erratum > * apply workaround also if running as guest, thus check MIDR > > Signed-off-by: Robert Richter > --- > arch/arm64/Kconfig | 11 ++++++++++ > arch/arm64/include/asm/cpufeature.h | 3 ++- > arch/arm64/include/asm/cputype.h | 18 +++++++++------- > arch/arm64/kernel/cpu_errata.c | 9 ++++++++ > drivers/irqchip/irq-gic-v3.c | 42 ++++++++++++++++++++++++++++++++++++- > 5 files changed, 74 insertions(+), 9 deletions(-) > > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index 0f6edb14b7e4..4f866a4c6536 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -417,6 +417,17 @@ config ARM64_ERRATUM_845719 > > If unsure, say Y. > > +config CAVIUM_ERRATUM_23154 > + bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed" > + depends on ARCH_THUNDER None of the other errata depend on a specific ARCH_*. I think we should remove this 'depends on', so that a generic kernel can be configured to work on Thunder without having to first select ARCH_THUNDER. David Daney > + default y > + help > + The gicv3 of ThunderX requires a modified version for > + reading the IAR status to ensure data synchronization > + (access to icc_iar1_el1 is not sync'ed before and after). > + > + If unsure, say Y. > + > endmenu > > >