|
@@ -39,6 +39,9 @@
|
|
|
#include <linux/console.h>
|
|
|
#endif
|
|
|
|
|
|
+#define ROCIT_CONFIG_GEN0 0x1f403000
|
|
|
+#define ROCIT_CONFIG_GEN0_PCI_IOCU BIT(7)
|
|
|
+
|
|
|
extern void malta_be_init(void);
|
|
|
extern int malta_be_handler(struct pt_regs *regs, int is_fixup);
|
|
|
|
|
@@ -107,6 +110,8 @@ static void __init fd_activate(void)
|
|
|
static int __init plat_enable_iocoherency(void)
|
|
|
{
|
|
|
int supported = 0;
|
|
|
+ u32 cfg;
|
|
|
+
|
|
|
if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO) {
|
|
|
if (BONITO_PCICACHECTRL & BONITO_PCICACHECTRL_CPUCOH_PRES) {
|
|
|
BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_CPUCOH_EN;
|
|
@@ -129,7 +134,8 @@ static int __init plat_enable_iocoherency(void)
|
|
|
} else if (mips_cm_numiocu() != 0) {
|
|
|
/* Nothing special needs to be done to enable coherency */
|
|
|
pr_info("CMP IOCU detected\n");
|
|
|
- if ((*(unsigned int *)0xbf403000 & 0x81) != 0x81) {
|
|
|
+ cfg = __raw_readl((u32 *)CKSEG1ADDR(ROCIT_CONFIG_GEN0));
|
|
|
+ if (!(cfg & ROCIT_CONFIG_GEN0_PCI_IOCU)) {
|
|
|
pr_crit("IOCU OPERATION DISABLED BY SWITCH - DEFAULTING TO SW IO COHERENCY\n");
|
|
|
return 0;
|
|
|
}
|