1941b853cc662e0db3679c147135cc044b0bab28
[openwrt/staging/jow.git] / target / linux / generic / pending-5.15 / 350-mips-bmips-BCM6358-disable-RAC-flush-for-TP1.patch
1 From patchwork Fri Mar 17 10:20:04 2023
2 Content-Type: text/plain; charset="utf-8"
3 MIME-Version: 1.0
4 Content-Transfer-Encoding: 8bit
5 X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?=
6 <noltari@gmail.com>
7 X-Patchwork-Id: 13178815
8 Return-Path: <linux-mips-owner@vger.kernel.org>
9 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
10 aws-us-west-2-korg-lkml-1.web.codeaurora.org
11 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
12 by smtp.lore.kernel.org (Postfix) with ESMTP id 583F3C6FD1D
13 for <linux-mips@archiver.kernel.org>; Fri, 17 Mar 2023 10:20:18 +0000 (UTC)
14 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
15 id S230027AbjCQKUQ (ORCPT <rfc822;linux-mips@archiver.kernel.org>);
16 Fri, 17 Mar 2023 06:20:16 -0400
17 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59114 "EHLO
18 lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
19 with ESMTP id S230044AbjCQKUN (ORCPT
20 <rfc822;linux-mips@vger.kernel.org>); Fri, 17 Mar 2023 06:20:13 -0400
21 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com
22 [IPv6:2a00:1450:4864:20::32f])
23 by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D53A3A8C6D;
24 Fri, 17 Mar 2023 03:20:11 -0700 (PDT)
25 Received: by mail-wm1-x32f.google.com with SMTP id m35so2981539wms.4;
26 Fri, 17 Mar 2023 03:20:11 -0700 (PDT)
27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
28 d=gmail.com; s=20210112; t=1679048410;
29 h=content-transfer-encoding:mime-version:references:in-reply-to
30 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
31 :message-id:reply-to;
32 bh=B2zyx3U3AXPDRFjYOKBt3zCYzGwvMHjuxaFvhcNGMYw=;
33 b=K3QDrLd9/AHTE97KGupZsihjvv1DcPrg2e5kH4N0u/ThdjpSlxk4PJnJ9/W85XPSVY
34 zfpR2A/7EoOEyo9550zL4/vmpfYl5lHM165L/lkqA7Wk5e/nBD9VnONeb+Ez793paFFp
35 RxLrZ8g8vsw5NIz3niUCWkssoP2pnhKziF9soVnCQVqJa9NU+K+eBXiQWjYeXVVpf8Ea
36 AoOekpaWai5FbM4COmKJ/BDQtrJNRfInvBhVWCCkHFy1S5u62UdueveL3+51NeXMtdqz
37 SetdI7WF1tRyDt+Xg/KfChDi8C0UaNruqs4LXxNzfsB61BFNwRFhSKOZM1Upw0RCaBBt
38 0+2Q==
39 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
40 d=1e100.net; s=20210112; t=1679048410;
41 h=content-transfer-encoding:mime-version:references:in-reply-to
42 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
43 :subject:date:message-id:reply-to;
44 bh=B2zyx3U3AXPDRFjYOKBt3zCYzGwvMHjuxaFvhcNGMYw=;
45 b=ssmBiLA9DVCYeyC8re6arEIfPSvf12+ZaR/lSBvPJ7neJBPgX28RJgfWLbi9OusC5u
46 wmSMBZ0qVjMyrcS6sYaOGQ56OxGeHkV1AoCPChp4/4gaWQJmyqY+2oPTGkA2+m0074uL
47 T2+QW0Lur1M2SHucj+0efX80LEnRxP5vm9AM4eyLIlJ2QQxjgZXugBUhCrbZGXiEP9eB
48 SdMQGSWQD8CGXoT5XdlsjsoVz1OD3eTQ473h9hoEzJJHt8iaev/cbakU+sXJp47LAOm+
49 Z9lFp48X9PYKCMLnIpv9R7wDOZEuVUsFbSt+cWYjYhe/2pk81hq/6GoqwRg49d5RCGYg
50 0yJQ==
51 X-Gm-Message-State: AO0yUKXr0uvEyGo9igqtrAKEBKNPRe53kAqRy0B/zeh/7tt0qOu9YtUj
52 YMatgtK4nm//OUHE/4+7hlAo/t4+V2+khw==
53 X-Google-Smtp-Source:
54 AK7set+XbAcnblyGYtZEQ3m/zbT8wd4QB6ZZhQIf//mcWDT47T1rsYpCDodIx9M1dCI0qTfC6sZw7w==
55 X-Received: by 2002:a05:600c:540a:b0:3ea:e582:48dd with SMTP id
56 he10-20020a05600c540a00b003eae58248ddmr24486119wmb.34.1679048409764;
57 Fri, 17 Mar 2023 03:20:09 -0700 (PDT)
58 Received: from atlantis.lan (255.red-79-146-124.dynamicip.rima-tde.net.
59 [79.146.124.255])
60 by smtp.gmail.com with ESMTPSA id
61 1-20020a05600c234100b003e00c453447sm7336512wmq.48.2023.03.17.03.20.08
62 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
63 Fri, 17 Mar 2023 03:20:09 -0700 (PDT)
64 From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= <noltari@gmail.com>
65 To: f.fainelli@gmail.com, jonas.gorski@gmail.com,
66 bcm-kernel-feedback-list@broadcom.com, tsbogend@alpha.franken.de,
67 linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org
68 Cc: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= <noltari@gmail.com>
69 Subject: [PATCH v3] mips: bmips: BCM6358: disable RAC flush for TP1
70 Date: Fri, 17 Mar 2023 11:20:04 +0100
71 Message-Id: <20230317102004.235879-1-noltari@gmail.com>
72 X-Mailer: git-send-email 2.30.2
73 In-Reply-To: <20230316180518.783613-1-noltari@gmail.com>
74 References: <20230316180518.783613-1-noltari@gmail.com>
75 MIME-Version: 1.0
76 Precedence: bulk
77 List-ID: <linux-mips.vger.kernel.org>
78 X-Mailing-List: linux-mips@vger.kernel.org
79
80 RAC flush causes kernel panics on BCM6358 with EHCI/OHCI when booting from TP1:
81 [ 3.881739] usb 1-1: new high-speed USB device number 2 using ehci-platform
82 [ 3.895011] Reserved instruction in kernel code[#1]:
83 [ 3.900113] CPU: 0 PID: 1 Comm: init Not tainted 5.10.16 #0
84 [ 3.905829] $ 0 : 00000000 10008700 00000000 77d94060
85 [ 3.911238] $ 4 : 7fd1f088 00000000 81431cac 81431ca0
86 [ 3.916641] $ 8 : 00000000 ffffefff 8075cd34 00000000
87 [ 3.922043] $12 : 806f8d40 f3e812b7 00000000 000d9aaa
88 [ 3.927446] $16 : 7fd1f068 7fd1f080 7ff559b8 81428470
89 [ 3.932848] $20 : 00000000 00000000 55590000 77d70000
90 [ 3.938251] $24 : 00000018 00000010
91 [ 3.943655] $28 : 81430000 81431e60 81431f28 800157fc
92 [ 3.949058] Hi : 00000000
93 [ 3.952013] Lo : 00000000
94 [ 3.955019] epc : 80015808 setup_sigcontext+0x54/0x24c
95 [ 3.960464] ra : 800157fc setup_sigcontext+0x48/0x24c
96 [ 3.965913] Status: 10008703 KERNEL EXL IE
97 [ 3.970216] Cause : 00800028 (ExcCode 0a)
98 [ 3.974340] PrId : 0002a010 (Broadcom BMIPS4350)
99 [ 3.979170] Modules linked in: ohci_platform ohci_hcd fsl_mph_dr_of ehci_platform ehci_fsl ehci_hcd gpio_button_hotplug usbcore nls_base usb_common
100 [ 3.992907] Process init (pid: 1, threadinfo=(ptrval), task=(ptrval), tls=77e22ec8)
101 [ 4.000776] Stack : 81431ef4 7fd1f080 81431f28 81428470 7fd1f068 81431edc 7ff559b8 81428470
102 [ 4.009467] 81431f28 7fd1f080 55590000 77d70000 77d5498c 80015c70 806f0000 8063ae74
103 [ 4.018149] 08100002 81431f28 0000000a 08100002 81431f28 0000000a 77d6b418 00000003
104 [ 4.026831] ffffffff 80016414 80080734 81431ecc 81431ecc 00000001 00000000 04000000
105 [ 4.035512] 77d54874 00000000 00000000 00000000 00000000 00000012 00000002 00000000
106 [ 4.044196] ...
107 [ 4.046706] Call Trace:
108 [ 4.049238] [<80015808>] setup_sigcontext+0x54/0x24c
109 [ 4.054356] [<80015c70>] setup_frame+0xdc/0x124
110 [ 4.059015] [<80016414>] do_notify_resume+0x1dc/0x288
111 [ 4.064207] [<80011b50>] work_notifysig+0x10/0x18
112 [ 4.069036]
113 [ 4.070538] Code: 8fc300b4 00001025 26240008 <ac820000> ac830004 3c048063 0c0228aa 24846a00 26240010
114 [ 4.080686]
115 [ 4.082517] ---[ end trace 22a8edb41f5f983b ]---
116 [ 4.087374] Kernel panic - not syncing: Fatal exception
117 [ 4.092753] Rebooting in 1 seconds..
118
119 Because the bootloader (CFE) is not initializing the Read-ahead cache properly
120 on the second thread (TP1). Since the RAC was not initialized properly, we
121 should avoid flushing it at the risk of corrupting the instruction stream as
122 seen in the trace above.
123
124 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
125 ---
126 v3: add changes suggested by Florian:
127 - Switch to a bool and remove unneeded initialization.
128 - Remove if from bcm6358_quirks().
129 - Improve commit description and bcm6358_quirks() comment.
130 v2: check if we're running on TP1 and invert logic.
131
132 arch/mips/bmips/dma.c | 5 +++++
133 arch/mips/bmips/setup.c | 8 ++++++++
134 2 files changed, 13 insertions(+)
135
136 --- a/arch/mips/bmips/dma.c
137 +++ b/arch/mips/bmips/dma.c
138 @@ -64,6 +64,8 @@ phys_addr_t dma_to_phys(struct device *d
139 return dma_addr;
140 }
141
142 +bool bmips_rac_flush_disable;
143 +
144 void arch_sync_dma_for_cpu_all(void)
145 {
146 void __iomem *cbr = BMIPS_GET_CBR();
147 @@ -74,6 +76,9 @@ void arch_sync_dma_for_cpu_all(void)
148 boot_cpu_type() != CPU_BMIPS4380)
149 return;
150
151 + if (unlikely(bmips_rac_flush_disable))
152 + return;
153 +
154 /* Flush stale data out of the readahead cache */
155 cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG);
156 __raw_writel(cfg | 0x100, cbr + BMIPS_RAC_CONFIG);
157 --- a/arch/mips/bmips/setup.c
158 +++ b/arch/mips/bmips/setup.c
159 @@ -34,6 +34,8 @@
160 #define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))
161 #define BCM6328_TP1_DISABLED BIT(9)
162
163 +extern bool bmips_rac_flush_disable;
164 +
165 static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000;
166
167 struct bmips_quirk {
168 @@ -103,6 +105,12 @@ static void bcm6358_quirks(void)
169 * disable SMP for now
170 */
171 bmips_smp_enabled = 0;
172 +
173 + /*
174 + * RAC flush causes kernel panics on BCM6358 when booting from TP1
175 + * because the bootloader is not initializing it properly.
176 + */
177 + bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local() & (1 << 31));
178 }
179
180 static void bcm6368_quirks(void)