diff --git a/drivers/clk/fujitsu/clk-mb86hxx.c b/drivers/clk/fujitsu/clk-mb86hxx.c index d271340c95063f..39a64f27a6bd02 100644 --- a/drivers/clk/fujitsu/clk-mb86hxx.c +++ b/drivers/clk/fujitsu/clk-mb86hxx.c @@ -1,5 +1,6 @@ #include +#include #include #include @@ -153,6 +154,7 @@ static struct clk_hw *mb86hxx_register_uart_clock(struct device_node *np) static void __init mb86hxx_clk_init(struct device_node *np) { + void __iomem *base; int ret; printk("mb86hxx_clk_init\n"); @@ -165,6 +167,18 @@ static void __init mb86hxx_clk_init(struct device_node *np) clk_hw_data->num = MB86HXX_CLK_END; hws = clk_hw_data->hws; + base = of_iomap(np, 0); + printk("mb86hxx_clk_init: base=0x%x\n", base); + { + /* FREG_CLKPWR_CONFIGDMACAUDIO */ + u32 data = __raw_readl(base + 0x74); + printk("mb86hxx_clk_init: data=0x%x\n", data); + data &= ~((1 << 21) | (1 << 20) | (1 << 14) | (1 << 7)); + __raw_writel(data, base + 0x74); + data |= ((1 << 21) | (1 << 20) | (1 << 14) | (1 << 7)); + __raw_writel(data, base + 0x74); + } + hws[MB86HXX_APB_CLK] = mb86hxx_register_apb_clock(np); hws[MB86HXX_UART_CLK] = mb86hxx_register_uart_clock(np); diff --git a/drivers/usb/musb/mb86hxx.c b/drivers/usb/musb/mb86hxx.c index 7cd1b6166a96bd..4693df0525bffc 100644 --- a/drivers/usb/musb/mb86hxx.c +++ b/drivers/usb/musb/mb86hxx.c @@ -22,59 +22,67 @@ static u8 mb86hxx_musb_readb(void __iomem *addr, u32 offset) { u8 data; -#if 0 +#if 1 usb_mode &= ~MB86HXX_USB_LENGTH_MASK; - __raw_writeb(MB86HXX_USB_1BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); + __raw_writel(MB86HXX_USB_1BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); #endif - data = __raw_readb(addr + (offset<<2)); +// data = __raw_readl(addr + (offset<<2)); + data = ((volatile unsigned*)(addr))[offset]; - printk("mb86hxx_musb_readb: offset=0x%02x, data=0x%02x\n", offset, data); + printk("mb86hxx_musb_readb: addr=0x%x, offset=0x%02x, data=0x%02x\n", + addr, offset, data); return data; } static void mb86hxx_musb_writeb(void __iomem *addr, u32 offset, u8 data) { -#if 0 +#if 1 usb_mode &= ~MB86HXX_USB_LENGTH_MASK; - __raw_writeb(MB86HXX_USB_1BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); + __raw_writel(MB86HXX_USB_1BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); #endif - printk("mb86hxx_musb_writeb: offset=0x%02x, data=0x%02x\n", offset, data); + printk("mb86hxx_musb_writeb: addr=0x%x, offset=0x%02x, data=0x%02x\n", + addr, offset, data); - __raw_writeb(data, addr + (offset<<2)); +// __raw_writel(data, addr + (offset<<2)); + ((volatile unsigned*)(addr))[offset] = data; } static u16 mb86hxx_musb_readw(void __iomem *addr, u32 offset) { u16 data; -#if 0 +#if 1 usb_mode &= ~MB86HXX_USB_LENGTH_MASK; - __raw_writeb(MB86HXX_USB_2BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); + __raw_writel(MB86HXX_USB_2BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); #endif - data = __raw_readw(addr + (offset<<2)); +// data = __raw_readl(addr + (offset<<2)); + data = ((volatile unsigned*)(addr))[offset]; - printk("mb86hxx_musb_readw: offset=0x%02x, data=0x%04x\n", offset, data); + printk("mb86hxx_musb_readw: addr=0x%x, offset=0x%02x, data=0x%04x\n", + addr, offset, data); return data; } static void mb86hxx_musb_writew(void __iomem *addr, u32 offset, u16 data) { -#if 0 +#if 1 usb_mode &= ~MB86HXX_USB_LENGTH_MASK; - __raw_writeb(MB86HXX_USB_2BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); + __raw_writel(MB86HXX_USB_2BYTE_ACCESS<<1 | usb_mode, MB86HXX_USB_MODE); #endif - printk("mb86hxx_musb_writew: offset=0x%02x, data=0x%04x\n", offset, data); + printk("mb86hxx_musb_writew: addr=0x%x, offset=0x%02x, data=0x%04x\n", + addr, offset, data); - __raw_writew(data, addr + (offset<<2)); +// __raw_writel(data, addr + (offset<<2)); + ((volatile unsigned*)(addr))[offset] = data; } -u8 mb86hxx_musb_clearb(void __iomem *addr, u32 offset) +static u8 mb86hxx_musb_clearb(void __iomem *addr, u32 offset) { u8 data; @@ -87,7 +95,7 @@ u8 mb86hxx_musb_clearb(void __iomem *addr, u32 offset) return data; } -u16 mb86hxx_musb_clearw(void __iomem *addr, u32 offset) +static u16 mb86hxx_musb_clearw(void __iomem *addr, u32 offset) { u16 data; @@ -119,31 +127,34 @@ static irqreturn_t mb86hxx_musb_interrupt(int irq, void *__hci) if (musb->int_usb) { - printk("mb86hxx_musb_interrupt: usb=0x%x\n", musb->int_usb); musb_writeb(musb->mregs, MUSB_INTRUSB, musb->int_usb); } if (musb->int_tx) { - printk("mb86hxx_musb_interrupt: tx=0x%x\n", musb->int_tx); musb_writew(musb->mregs, MUSB_INTRTX, musb->int_tx); } if (musb->int_rx) { - printk("mb86hxx_musb_interrupt: rx=0x%x\n", musb->int_rx); musb_writew(musb->mregs, MUSB_INTRRX, musb->int_rx); } +#if 0 if (musb->int_usb || musb->int_tx || musb->int_rx) retval = musb_interrupt(musb); +#endif spin_unlock_irqrestore(&musb->lock, flags); +#if 0 if (retval == IRQ_HANDLED) return IRQ_HANDLED; return IRQ_NONE; +#else + return IRQ_HANDLED; +#endif } static int mb86hxx_musb_init(struct musb *musb) @@ -152,15 +163,18 @@ static int mb86hxx_musb_init(struct musb *musb) struct platform_device *parent = to_platform_device(dev->parent); struct resource *r; - printk("mb86hxx_musb_init\n"); + printk("mb86hxx_musb_init: musb->mregs=0x%x\n", musb->mregs); -#if 0 r = platform_get_resource_byname(parent, IORESOURCE_MEM, "dma"); dma_base = devm_ioremap_resource(dev, r); if (IS_ERR(dma_base)) + { + printk("mb86hxx_musb_init: dma_base=0x%x\n", dma_base); return PTR_ERR(dma_base); + } musb->ctrl_base = dma_base; -#endif + + printk("mb86hxx_musb_init: musb->ctrl_base=0x%x\n", musb->ctrl_base); #if 0 @@ -186,6 +200,18 @@ static int mb86hxx_musb_exit(struct musb *musb) return 0; } +static void mb86hxx_musb_enable(struct musb *musb) +{ + printk("mb86hxx_musb_enable\n"); + +} + +static void mb86hxx_musb_disable(struct musb *musb) +{ + printk("mb86hxx_musb_disable\n"); + +} + static const struct musb_hdrc_config mb86hxx_musb_config = { #if 0 .fifo_cfg = mtk_musb_mode_cfg, @@ -205,6 +231,9 @@ static const struct musb_platform_ops mb86hxx_musb_ops = { .init = mb86hxx_musb_init, .exit = mb86hxx_musb_exit, + .enable = mb86hxx_musb_enable, + .disable = mb86hxx_musb_disable, + .readb = mb86hxx_musb_readb, .writeb = mb86hxx_musb_writeb, .readw = mb86hxx_musb_readw, diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 2a80f28a122811..67f26e76eb4113 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1202,8 +1202,11 @@ void musb_start(struct musb *musb) u8 power; musb_dbg(musb, "<== devctl %02x", devctl); + printk("musb_start: devctl =%02x\n", devctl); +#if 1 musb_enable_interrupts(musb); +#endif musb_writeb(regs, MUSB_TESTMODE, 0); power = MUSB_POWER_ISOUPDATE; @@ -1772,10 +1775,6 @@ irqreturn_t musb_interrupt(struct musb *musb) if (musb->int_usb) retval |= musb_stage0_irq(musb, musb->int_usb, devctl); -#if 1 - musb_disable_interrupts(musb); -#endif - if (musb->int_tx & 1) { if (is_host_active(musb)) retval |= musb_h_ep0_irq(musb); @@ -2534,14 +2533,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) /* be sure interrupts are disabled before connecting ISR */ musb_platform_disable(musb); printk("musb_init_controller(12)\n"); -#if 0 musb_disable_interrupts(musb); printk("musb_init_controller(13)\n"); musb_writeb(musb->mregs, MUSB_DEVCTL, 0); /* MUSB_POWER_SOFTCONN might be already set, JZ4740 does this. */ musb_writeb(musb->mregs, MUSB_POWER, 0); -#endif printk("musb_init_controller(14)\n"); @@ -2552,14 +2549,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) printk("musb_init_controller(15)\n"); -#if 0 /* setup musb parts of the core (especially endpoints) */ status = musb_core_init(plat->config->multipoint ? MUSB_CONTROLLER_MHDRC : MUSB_CONTROLLER_HDRC, musb); if (status < 0) goto fail3; -#endif printk("musb_init_controller(16)\n"); @@ -2567,14 +2562,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) printk("musb_init_controller(17)\n"); -#if 1 /* attach to the IRQ */ if (request_irq(nIrq, musb->isr, IRQF_SHARED/*|IRQF_IRQPOLL*/, dev_name(dev), musb)) { dev_err(dev, "request_irq %d failed!\n", nIrq); status = -ENODEV; goto fail3; } -#endif printk("musb_init_controller(18)\n"); musb->nIrq = nIrq; #if 0