Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753186AbdHJTLM (ORCPT ); Thu, 10 Aug 2017 15:11:12 -0400 Received: from mail-by2nam01on0042.outbound.protection.outlook.com ([104.47.34.42]:1472 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752756AbdHJTK6 (ORCPT ); Thu, 10 Aug 2017 15:10:58 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=alex.g@adaptrum.com; Subject: Re: [PATCH] arc: Mask individual IRQ lines during core INTC init To: Alexey Brodkin , linux-snps-arc@lists.infradead.org References: <1502377656-15678-1-git-send-email-abrodkin@synopsys.com> Cc: linux-kernel@vger.kernel.org, Vineet Gupta , Eugeniy Paltsev From: Alexandru Gagniuc Message-ID: <53761ece-5b0d-74a6-65a6-c28b094d28d7@adaptrum.com> Date: Thu, 10 Aug 2017 12:10:51 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1502377656-15678-1-git-send-email-abrodkin@synopsys.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [198.0.218.81] X-ClientProxiedBy: MWHPR10CA0008.namprd10.prod.outlook.com (10.172.48.18) To BN6PR04MB0835.namprd04.prod.outlook.com (10.172.199.16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 21769962-545b-460b-fc95-08d4e023876f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(2017082002075)(300000503095)(300135400095)(201703131423075)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:BN6PR04MB0835; X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0835;3:DxOIUhR7Tvp9sh4NQZ6KiFgjtNi3BCbagQnyCxKRABON/A0JszqhcYScrgLYb12eh8C+k0hcoDcTYncK51OwDg4qDH5MnEuUAz8ti00qSD2mEaqKduDhmUnWR02Fhg05Oo9epLdA0neh65euXptGf/mTig5mdSf/kEMAjTNG2qD+Yki5lJAQ7MwsGaSK/u+0vfhVDeaCBjsV8fkMAWBVOZ+TMICLbFf99Tdx5BV/4O4UoUFoZvUdqn5NtozJ3QJ5;25:zRHusd/b+GEaUJ+3/JGXMxNvMdnZamBrbSETQfzHaq5IH7rTvjVm5hFykC9YZP8sWzXc0eUnhhzCa6EjWt+iYlQ93DjHsL1LfIMwAyginhJnvRA416sVSE92+XzYv0Q1wRaWGdV/IsnbzIOrzyPRb5LPAmwHYK1EDa8QsbOqAhMyV1XAE1XGwZtVcPGHvXn0WSjC3kAT2w6T3ITFDo2Y3sa8tdMEhkCBi1MzK2VnD16vdeeXg4VQ4FVwgHH+Wrr67+gbE1K1W1g1GDALHc9TCSfXN5HwKqOSvOwIZGEAPKESF0y9d1fYpYfKlRuYFmxmAsnyvPg6ws3rSFQ1M48Xng==;31:0vnPzO8q2ipK2RS6qTbyIROB9W0n34crtppPrtis6yZhXH92y55II0kApPxHt2HRwDZrcqscvQnYbNAx/vIJWsOqyeyYwxb7x0ouTDfZkUGjMa7rQsyVW1saSOpfg/+49BH1zsjBkJYkQ6OvPDuRDjVeDx1Wz+tyKA/UT0pipt0vi/s6FSjRstpGlJaYg/S+Q1ZLdxCDpkjNTGvSmN+ra/FfYWS55vo0KRHVV8gwpdw= X-MS-TrafficTypeDiagnostic: BN6PR04MB0835: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(2016111802025)(20161123564025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(6072148)(6043046)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BN6PR04MB0835;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BN6PR04MB0835; X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0835;4:wkf+5W80orCvK19FyrF7zhuC+FSPCxEIRHtCRkbW/BiiIPs0QqvVoRilBG8X6CdCQP3aE7GYDqdasfFlnMqyk3udETRn2JSP+T+i1KfU/g7opn1W9PfhnJXQZNYbURzVYAJQDD+Wolqy7bgMiN2KkTUa0cKorc1KYs1D0tf3I2hPp5e2UJ8OFY5fAw5oQ+OQCmBKKTUKQ2uxdwGwngLWfRaZf7dHsr3Egw5le1CWSSJ6xwMDIsKS7omSoT1xXbbbUqQjNRLbWRPuW9RPcNix/2VJhVxdpuxsBtcsUBKqgSo= X-Forefront-PRVS: 03950F25EC X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(7370300001)(4630300001)(6009001)(39830400002)(377454003)(199003)(24454002)(189002)(53546010)(8676002)(54356999)(50986999)(50466002)(189998001)(66066001)(65956001)(25786009)(81166006)(81156014)(65806001)(31686004)(31696002)(97736004)(575784001)(47776003)(36756003)(86362001)(2950100002)(68736007)(76176999)(6512007)(53936002)(6666003)(54906002)(2906002)(230700001)(6246003)(64126003)(110136004)(229853002)(6486002)(3846002)(33646002)(6506006)(7736002)(305945005)(83506001)(101416001)(7350300001)(478600001)(6116002)(5660300001)(23746002)(4326008)(106356001)(42186005)(4001350100001)(105586002)(65826007);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR04MB0835;H:dev2.adaptrum;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BN6PR04MB0835;23:phj8pP+Jyo+23QxHkjvNoQqzqg5MthnBVYdpw?= =?Windows-1252?Q?Vg2RpwziQrhQ5me/9ei5d9xXCuM8pkFtzMPYaRFK1yQy7l3yxgJ1MUOx?= =?Windows-1252?Q?jN+oZlweJ82d3wSDdGbnIl/DXGREwX05GytrrVDWRITd0UNhSXsd06PZ?= =?Windows-1252?Q?rVQgLGXVIEn+T2988f3PrVLB04ijsmZB3oaBNETsLb055bYS/G2HhD6C?= =?Windows-1252?Q?cM9JsaS2cNUTtPQaKOpHef1lhACPGP6rbhbw7m5hRUZ7brjM+jkTK/0K?= =?Windows-1252?Q?w0mPbIW2w9JZz8dxGaxCmsgcM5K1Q74LX7/yViPY6ujwOc8zX0kLcmtj?= =?Windows-1252?Q?KE/r9DvBbaev0VmDs+qP8FMVLxqHfG9CC3WgZ7TKhVH+XGn5pNkDnQrD?= =?Windows-1252?Q?URv+cefqOyYqLrZp0neRPiCHfUd5yifJMm/8NvzbdNeil9Fp5voTIDIk?= =?Windows-1252?Q?dhBHqyYTx4IA3FwFJmpIg/v9WOWFtvpyNMI3WF6NZog4tRCRMlMDAnKB?= =?Windows-1252?Q?hPX/pWudLzX/0f8AHCLG8PtrOWLcTUpBRLtVJAB/kMojFgFuriM9Alqy?= =?Windows-1252?Q?pKI6r360TQT9LD4GL8dVZTd0f2MBQx3z03POOzxH9/mG7u9KdaeCq+dy?= =?Windows-1252?Q?e+p5zq350mFfyZSKbxT/rpOai5QmWllxv5Qiwlco3F+t2ud3hP9uZCC6?= =?Windows-1252?Q?NeoEyl+zHQ/9URc7UU8DTcYsXO2KK2a5iP/ggZgJDBB4ZnxGw3KdroFY?= =?Windows-1252?Q?Id1sg6EflK1vLXiVP4X4ufGZ6cgVHK3kvTt6fShIsPktayFNEVItN/oI?= =?Windows-1252?Q?2esNQ2OwnJvOqwiPl7S23pOSrISGhFYfXRHoJfx+YoVFvGmaTO6J5zZn?= =?Windows-1252?Q?gfJ7/91zNHwAgW0Jw7CccJvXsZyDki/CGz1ZgXUUsvXD1xP6rNUVqVlt?= =?Windows-1252?Q?sS6sLWx9oLer1A+2vJW8DF9IAfbBzSquRnZX3Mv75NNKJwwv7HUs4/Rj?= =?Windows-1252?Q?FBWMDwlAZ5HSJXPfMN58y28TBcqZtTML43TIgmaYMavojCgEWcWa40hV?= =?Windows-1252?Q?ELJyL0YAS/TuIoQVFm+ccygiZNtZzT6C+ZFjuWPy2Ub6E9Xz92qV/ZIB?= =?Windows-1252?Q?LyJ22o+j4My0pROm3RzJVDAm74kYDRABwehIIYQMECqZgQOndarllcy5?= =?Windows-1252?Q?7fx1be2BVDfhXT7dXaNosw8okx13Rz8lBRBNY2onfPiIwj2yQEE0z1tI?= =?Windows-1252?Q?FInnvvHBoRDHE6VqCF4sRiIBFlmxJCnZ4STx0pmbCubmnVj+7vaOgtzt?= =?Windows-1252?Q?CkBSI64nSnJh3xgo/MMfA8dB199V2QAWcAFHVPkB+E5M16A0d2/YsqdH?= =?Windows-1252?Q?oxLCustoKxwkInSVQMqaTT8udJZJ8omppZaFx/e9XG3Ck0QGlxSF7lm4?= =?Windows-1252?Q?f/8dz4g0zTwqkVr4xpmMvOpfjsW5zc2lKh6/DaRIZj6sOL/FtiYAZtpD?= =?Windows-1252?Q?JzuIEmX1swZoXCvMetu3eoB2LnN+btvkLAgLunSOZJZEOexeA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0835;6:A7qLv2LzxK+iJKz/gw1e++QQOFWN10Mvie/opihq6vO3TYjDctTwoN0D308vclRGY3MmNCVMjBRVMepHhXmIva8BO3IHFOJdGaSqwtmbcAy3xlO8NTtJl3cLWaDQrYok0KNW+jEjrtNz1H1+U1LCvW6xtXh5ePiuv793vQYAtS6Jt8uvHaBWg4JotbCTVBTRQoaJaWrj5CE7W/xGfu1NwgVh0eRO+l6DudokEYpZv86wi43MZYzte4LTWKLNYsR9GNSBR+GqHTGga3zFrirCy7lMn4bIWIwhMJ/ZVg5DCCOBOTzy0tkICo6SW6xEGjZ/P+60q1vu2IyI/yTO4fEu7A==;5:h/oYQZNIbCs45sR4eh9ZzOfSxTuLBVU/kRNQyZc9vVVhuigOEcKzNGYdDByMUox81G19RqPj5d7Arl6u2TEOvG4Z5QGt5rFSVrYOCBaCfXDKAP1lQyFFqBXC/V23ilOk3dWXJOCP4G9z4h0XxioX2Q==;24:3nIZXnZwE4IdyF79BIU0WCttBmtWRldYekkea8XBmEnv1o0Zd3jFo/j04Bui0VGVfhQdhONZRADJb0WziDrcr5TF+ydnsOKg6iSfrMeVAr0=;7:aDvKjXxmtlRHkrsYk8pcTXhherDYdQrEFNncB85NJxrvKCiK8Z/Td+f4vOwILlJA1wXxv85bHuyUEONiEGBYByhwHY7HAh9Nrk5PBD40/F4be19WnLsdaqPu3ibqpe9VOjfrbZs9Tjh5l951/Es7Ao17HUjM15qyj15o3SN7v4PCxvpD40FJOjhJUMzON+hRy8Hbbs/hBssuIv9nN7/Pqm6HCYpPTbmmXAtIkWy4/Jk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: adaptrum.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2017 19:10:55.8854 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0835 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2934 Lines: 80 On 08/10/2017 08:07 AM, Alexey Brodkin wrote: > ARC cores on reset have all interrupt lines of built-in INTC enabled. > Which means once we globally enable interrupts (very early on boot) > faulty hardware blocks may trigger an interrupt that Linux kernel > cannot handle yet as corresponding handler is not yet installed. > > In that case system falls in "interrupt storm" and basically never > does anything useful except entering and exiting generic IRQ handling > code. > > One real example of that kind of problematic hardware is DW GMAC which > also has interrupts enabled on reset and if Ethernet PHY informs GMAC > about link state, GMAC immediately reports that upstream to ARC core > and here we are. > > Now with that change we mask all individual IRQ lines making entire > system more fool-proof. > > Signed-off-by: Alexey Brodkin > Cc: Eugeniy Paltsev > Cc: Alexandru Gagniuc Tested-by: Alexandru Gagniuc > --- > arch/arc/kernel/intc-arcv2.c | 3 +++ > arch/arc/kernel/intc-compact.c | 14 +++++++++++++- > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c > index f928795fd07a..cf90714a676d 100644 > --- a/arch/arc/kernel/intc-arcv2.c > +++ b/arch/arc/kernel/intc-arcv2.c > @@ -75,10 +75,13 @@ void arc_init_IRQ(void) > * Set a default priority for all available interrupts to prevent > * switching of register banks if Fast IRQ and multiple register banks > * are supported by CPU. > + * Also disable all IRQ lines so faulty external hardware won't > + * trigger interrupt that kernel is not ready to handle. > */ > for (i = NR_EXCEPTIONS; i < irq_bcr.irqs + NR_EXCEPTIONS; i++) { > write_aux_reg(AUX_IRQ_SELECT, i); > write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO); > + write_aux_reg(AUX_IRQ_ENABLE, 0); > } > > /* setup status32, don't enable intr yet as kernel doesn't want */ > diff --git a/arch/arc/kernel/intc-compact.c b/arch/arc/kernel/intc-compact.c > index 7e608c6b0a01..cef388025adf 100644 > --- a/arch/arc/kernel/intc-compact.c > +++ b/arch/arc/kernel/intc-compact.c > @@ -27,7 +27,7 @@ > */ > void arc_init_IRQ(void) > { > - int level_mask = 0; > + int level_mask = 0, i; > > /* Is timer high priority Interrupt (Level2 in ARCompact jargon) */ > level_mask |= IS_ENABLED(CONFIG_ARC_COMPACT_IRQ_LEVELS) << TIMER0_IRQ; > @@ -40,6 +40,18 @@ void arc_init_IRQ(void) > > if (level_mask) > pr_info("Level-2 interrupts bitset %x\n", level_mask); > + > + /* > + * Disable all IRQ lines so faulty external hardware won't > + * trigger interrupt that kernel is not ready to handle. > + */ > + for (i = TIMER0_IRQ; i < NR_CPU_IRQS; i++) { > + unsigned int ienb; > + > + ienb = read_aux_reg(AUX_IENABLE); > + ienb &= ~(1 << i); > + write_aux_reg(AUX_IENABLE, ienb); > + } > } > > /* >