hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/arch/mips/bmips/setup.c
....@@ -9,12 +9,12 @@
99
1010 #include <linux/init.h>
1111 #include <linux/bitops.h>
12
-#include <linux/bootmem.h>
13
-#include <linux/clk-provider.h>
12
+#include <linux/memblock.h>
1413 #include <linux/ioport.h>
1514 #include <linux/kernel.h>
1615 #include <linux/io.h>
1716 #include <linux/of.h>
17
+#include <linux/of_clk.h>
1818 #include <linux/of_fdt.h>
1919 #include <linux/of_platform.h>
2020 #include <linux/libfdt.h>
....@@ -33,6 +33,8 @@
3333
3434 #define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))
3535 #define BCM6328_TP1_DISABLED BIT(9)
36
+
37
+extern bool bmips_rac_flush_disable;
3638
3739 static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000;
3840
....@@ -103,6 +105,12 @@
103105 * disable SMP for now
104106 */
105107 bmips_smp_enabled = 0;
108
+
109
+ /*
110
+ * RAC flush causes kernel panics on BCM6358 when booting from TP1
111
+ * because the bootloader is not initializing it properly.
112
+ */
113
+ bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local() & (1 << 31));
106114 }
107115
108116 static void bcm6368_quirks(void)
....@@ -153,8 +161,6 @@
153161 mips_hpt_frequency = freq;
154162 }
155163
156
-extern const char __appended_dtb;
157
-
158164 void __init plat_mem_setup(void)
159165 {
160166 void *dtb;
....@@ -164,17 +170,12 @@
164170 ioport_resource.start = 0;
165171 ioport_resource.end = ~0;
166172
167
-#ifdef CONFIG_MIPS_ELF_APPENDED_DTB
168
- if (!fdt_check_header(&__appended_dtb))
169
- dtb = (void *)&__appended_dtb;
170
- else
171
-#endif
172
- /* intended to somewhat resemble ARM; see Documentation/arm/Booting */
173
+ /* intended to somewhat resemble ARM; see Documentation/arm/booting.rst */
173174 if (fw_arg0 == 0 && fw_arg1 == 0xffffffff)
174175 dtb = phys_to_virt(fw_arg2);
175
- else if (fw_passed_dtb) /* UHI interface */
176
+ else if (fw_passed_dtb) /* UHI interface or appended dtb */
176177 dtb = (void *)fw_passed_dtb;
177
- else if (__dtb_start != __dtb_end)
178
+ else if (&__dtb_start != &__dtb_end)
178179 dtb = (void *)__dtb_start;
179180 else
180181 panic("no dtb found");