bcm63xx_fixup_cpu1();
 }
 
+static void bcm6358_quirks(void)
+{
+       /*
+        * BCM6358 needs special handling for its shared TLB, so
+        * disable SMP for now
+        */
+       bmips_smp_enabled = 0;
+}
+
 static void bcm6368_quirks(void)
 {
        bcm63xx_fixup_cpu1();
        { "brcm,bcm3384-viper",         &bcm3384_viper_quirks           },
        { "brcm,bcm33843-viper",        &bcm3384_viper_quirks           },
        { "brcm,bcm6328",               &bcm6328_quirks                 },
+       { "brcm,bcm6358",               &bcm6358_quirks                 },
        { "brcm,bcm6368",               &bcm6368_quirks                 },
        { "brcm,bcm63168",              &bcm6368_quirks                 },
        { },
 
--- /dev/null
+#ifndef __ASM_MACH_BMIPS_IOREMAP_H
+#define __ASM_MACH_BMIPS_IOREMAP_H
+
+#include <linux/types.h>
+
+static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size)
+{
+       return phys_addr;
+}
+
+static inline int is_bmips_internal_registers(phys_addr_t offset)
+{
+       if (offset >= 0xfff80000)
+               return 1;
+
+       return 0;
+}
+
+static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size,
+                                        unsigned long flags)
+{
+       if (is_bmips_internal_registers(offset))
+               return (void __iomem *)offset;
+
+       return NULL;
+}
+
+static inline int plat_iounmap(const volatile void __iomem *addr)
+{
+       return is_bmips_internal_registers((unsigned long)addr);
+}
+
+#endif /* __ASM_MACH_BMIPS_IOREMAP_H */