Commit 52f19595 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mips-fixes_6.3_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux

Pull MIPS fix from Thomas Bogendoerfer:
 "Fix to avoid crash on BCM6358 platforms"

* tag 'mips-fixes_6.3_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
  mips: bmips: BCM6358: disable RAC flush for TP1
parents 62bad54b ab327f8a
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include <asm/bmips.h> #include <asm/bmips.h>
#include <asm/io.h> #include <asm/io.h>
bool bmips_rac_flush_disable;
void arch_sync_dma_for_cpu_all(void) void arch_sync_dma_for_cpu_all(void)
{ {
void __iomem *cbr = BMIPS_GET_CBR(); void __iomem *cbr = BMIPS_GET_CBR();
...@@ -15,6 +17,9 @@ void arch_sync_dma_for_cpu_all(void) ...@@ -15,6 +17,9 @@ void arch_sync_dma_for_cpu_all(void)
boot_cpu_type() != CPU_BMIPS4380) boot_cpu_type() != CPU_BMIPS4380)
return; return;
if (unlikely(bmips_rac_flush_disable))
return;
/* Flush stale data out of the readahead cache */ /* Flush stale data out of the readahead cache */
cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG); cfg = __raw_readl(cbr + BMIPS_RAC_CONFIG);
__raw_writel(cfg | 0x100, cbr + BMIPS_RAC_CONFIG); __raw_writel(cfg | 0x100, cbr + BMIPS_RAC_CONFIG);
......
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
#define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c)) #define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))
#define BCM6328_TP1_DISABLED BIT(9) #define BCM6328_TP1_DISABLED BIT(9)
extern bool bmips_rac_flush_disable;
static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000; static const unsigned long kbase = VMLINUX_LOAD_ADDRESS & 0xfff00000;
struct bmips_quirk { struct bmips_quirk {
...@@ -104,6 +106,12 @@ static void bcm6358_quirks(void) ...@@ -104,6 +106,12 @@ static void bcm6358_quirks(void)
* disable SMP for now * disable SMP for now
*/ */
bmips_smp_enabled = 0; bmips_smp_enabled = 0;
/*
* RAC flush causes kernel panics on BCM6358 when booting from TP1
* because the bootloader is not initializing it properly.
*/
bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local() & (1 << 31));
} }
static void bcm6368_quirks(void) static void bcm6368_quirks(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment