brcm47xx: adjust the brcm4710 cache workaround code so that it does not break bcm4716...
[openwrt/svn-archive/archive.git] / target / linux / brcm47xx / patches-2.6.34 / 920-cache-wround.patch
index 3edf04bf05df498a7b6f7fe9f26640ccf8a63a17..6291a222d0349c1906f260688531277416ac7c2c 100644 (file)
@@ -4,11 +4,11 @@
  #ifdef CONFIG_BCM47XX
  #include <asm/paccess.h>
  #include <linux/ssb/ssb.h>
--#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE + SSB_IMSTATE)))
+-#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE)))
 +#define BCM4710_DUMMY_RREG() bcm4710_dummy_rreg()
 +
 +static inline unsigned long bcm4710_dummy_rreg(void) {
-+      return (*(volatile unsigned long *)(KSEG1ADDR(SSB_ENUM_BASE + SSB_IMSTATE)));
++      return (*(volatile unsigned long *)(KSEG1ADDR(SSB_ENUM_BASE)));
 +}
 +
 +#define BCM4710_FILL_TLB(addr) bcm4710_fill_tlb((void*)(addr))
@@ -31,7 +31,7 @@
  
 --- a/arch/mips/mm/tlbex.c
 +++ b/arch/mips/mm/tlbex.c
-@@ -611,6 +611,9 @@ build_get_pgde32(u32 **p, unsigned int t
+@@ -640,6 +640,9 @@ build_get_pgde32(u32 **p, unsigned int t
  #endif
        uasm_i_addu(p, ptr, tmp, ptr);
  #else
@@ -41,7 +41,7 @@
        UASM_i_LA_mostly(p, ptr, pgdc);
  #endif
        uasm_i_mfc0(p, tmp, C0_BADVADDR); /* get faulting address */
-@@ -749,12 +752,12 @@ static void __cpuinit build_r4000_tlb_re
+@@ -801,12 +804,12 @@ static void __cpuinit build_r4000_tlb_re
                /* No need for uasm_i_nop */
        }
  
@@ -57,7 +57,7 @@
        build_get_pgde32(&p, K0, K1); /* get pgd in K1 */
  #endif
  
-@@ -766,6 +769,9 @@ static void __cpuinit build_r4000_tlb_re
+@@ -818,6 +821,9 @@ static void __cpuinit build_r4000_tlb_re
        build_update_entries(&p, K0, K1);
        build_tlb_write_entry(&p, &l, &r, tlb_random);
        uasm_l_leave(&l, p);
@@ -67,7 +67,7 @@
        uasm_i_eret(&p); /* return from trap */
  
  #ifdef CONFIG_HUGETLB_PAGE
-@@ -1206,12 +1212,12 @@ build_r4000_tlbchange_handler_head(u32 *
+@@ -1263,12 +1269,12 @@ build_r4000_tlbchange_handler_head(u32 *
                                   struct uasm_reloc **r, unsigned int pte,
                                   unsigned int ptr)
  {
@@ -83,7 +83,7 @@
        build_get_pgde32(p, pte, ptr); /* get pgd in ptr */
  #endif
  
-@@ -1248,6 +1254,9 @@ build_r4000_tlbchange_handler_tail(u32 *
+@@ -1305,6 +1311,9 @@ build_r4000_tlbchange_handler_tail(u32 *
        build_update_entries(p, tmp, ptr);
        build_tlb_write_entry(p, l, r, tlb_indexed);
        uasm_l_leave(l, *p);