File tree Expand file tree Collapse file tree 2 files changed +13
-0
lines changed Expand file tree Collapse file tree 2 files changed +13
-0
lines changed Original file line number Diff line number Diff line change 5
5
#include <asm/bmips.h>
6
6
#include <asm/io.h>
7
7
8
+ bool bmips_rac_flush_disable ;
9
+
8
10
void arch_sync_dma_for_cpu_all (void )
9
11
{
10
12
void __iomem * cbr = BMIPS_GET_CBR ();
@@ -15,6 +17,9 @@ void arch_sync_dma_for_cpu_all(void)
15
17
boot_cpu_type () != CPU_BMIPS4380 )
16
18
return ;
17
19
20
+ if (unlikely (bmips_rac_flush_disable ))
21
+ return ;
22
+
18
23
/* Flush stale data out of the readahead cache */
19
24
cfg = __raw_readl (cbr + BMIPS_RAC_CONFIG );
20
25
__raw_writel (cfg | 0x100 , cbr + BMIPS_RAC_CONFIG );
Original file line number Diff line number Diff line change 35
35
#define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))
36
36
#define BCM6328_TP1_DISABLED BIT(9)
37
37
38
+ extern bool bmips_rac_flush_disable ;
39
+
38
40
static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000 ;
39
41
40
42
struct bmips_quirk {
@@ -104,6 +106,12 @@ static void bcm6358_quirks(void)
104
106
* disable SMP for now
105
107
*/
106
108
bmips_smp_enabled = 0 ;
109
+
110
+ /*
111
+ * RAC flush causes kernel panics on BCM6358 when booting from TP1
112
+ * because the bootloader is not initializing it properly.
113
+ */
114
+ bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 << 31 ));
107
115
}
108
116
109
117
static void bcm6368_quirks (void )
You can’t perform that action at this time.
0 commit comments