Commit 739cec8f authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle

MIPS: Alchemy: Default to noncoherent IO on Au1200 AB

CONFIG_DMA_COHERENT is no longer set; default to noncoherent io on
Au1200 revision AB to make USB work.
Signed-off-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
Cc: Linux-MIPS <linux-mips@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/6745/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent d19648d7
...@@ -67,6 +67,12 @@ void __init plat_mem_setup(void) ...@@ -67,6 +67,12 @@ void __init plat_mem_setup(void)
case ALCHEMY_CPU_AU1500: case ALCHEMY_CPU_AU1500:
case ALCHEMY_CPU_AU1100: case ALCHEMY_CPU_AU1100:
coherentio = 0; coherentio = 0;
break;
case ALCHEMY_CPU_AU1200:
/* Au1200 AB USB does not support coherent memory */
if (0 == (read_c0_prid() & PRID_REV_MASK))
coherentio = 0;
break;
} }
board_setup(); /* board specific setup */ board_setup(); /* board specific setup */
......
...@@ -355,47 +355,25 @@ static inline void __au1200_udc_control(void __iomem *base, int enable) ...@@ -355,47 +355,25 @@ static inline void __au1200_udc_control(void __iomem *base, int enable)
} }
} }
static inline int au1200_coherency_bug(void)
{
#if defined(CONFIG_DMA_COHERENT)
/* Au1200 AB USB does not support coherent memory */
if (!(read_c0_prid() & PRID_REV_MASK)) {
printk(KERN_INFO "Au1200 USB: this is chip revision AB !!\n");
printk(KERN_INFO "Au1200 USB: update your board or re-configure"
" the kernel\n");
return -ENODEV;
}
#endif
return 0;
}
static inline int au1200_usb_control(int block, int enable) static inline int au1200_usb_control(int block, int enable)
{ {
void __iomem *base = void __iomem *base =
(void __iomem *)KSEG1ADDR(AU1200_USB_CTL_PHYS_ADDR); (void __iomem *)KSEG1ADDR(AU1200_USB_CTL_PHYS_ADDR);
int ret = 0;
switch (block) { switch (block) {
case ALCHEMY_USB_OHCI0: case ALCHEMY_USB_OHCI0:
ret = au1200_coherency_bug();
if (ret && enable)
goto out;
__au1200_ohci_control(base, enable); __au1200_ohci_control(base, enable);
break; break;
case ALCHEMY_USB_UDC0: case ALCHEMY_USB_UDC0:
__au1200_udc_control(base, enable); __au1200_udc_control(base, enable);
break; break;
case ALCHEMY_USB_EHCI0: case ALCHEMY_USB_EHCI0:
ret = au1200_coherency_bug();
if (ret && enable)
goto out;
__au1200_ehci_control(base, enable); __au1200_ehci_control(base, enable);
break; break;
default: default:
ret = -ENODEV; return -ENODEV;
} }
out: return 0;
return ret;
} }
......
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