usb: musb: be careful when using different fifo_modes
authorFelipe Balbi <balbi@ti.com>
Mon, 27 Jun 2011 12:57:46 +0000 (15:57 +0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 1 Jul 2011 21:31:09 +0000 (14:31 -0700)
if we have more endpoints configured than
enabled on fifo_mode, then we need to be
careful on save/restore context operations,
otherwise we will try to access uninitialized
__iomem pointer.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/musb/musb_core.c

index c71b0372786e00482bf2f9fadf4bf6293721d27f..b1faed7806f5e13a73692af36fcfc7ccfaaf9bc2 100644 (file)
@@ -2214,7 +2214,16 @@ static void musb_save_context(struct musb *musb)
        musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
 
        for (i = 0; i < musb->config->num_eps; ++i) {
-               epio = musb->endpoints[i].regs;
+               struct musb_hw_ep       *hw_ep;
+
+               hw_ep = &musb->endpoints[i];
+               if (!hw_ep)
+                       continue;
+
+               epio = hw_ep->regs;
+               if (!epio)
+                       continue;
+
                musb->context.index_regs[i].txmaxp =
                        musb_readw(epio, MUSB_TXMAXP);
                musb->context.index_regs[i].txcsr =
@@ -2280,7 +2289,16 @@ static void musb_restore_context(struct musb *musb)
        musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl);
 
        for (i = 0; i < musb->config->num_eps; ++i) {
-               epio = musb->endpoints[i].regs;
+               struct musb_hw_ep       *hw_ep;
+
+               hw_ep = &musb->endpoints[i];
+               if (!hw_ep)
+                       continue;
+
+               epio = hw_ep->regs;
+               if (!epio)
+                       continue;
+
                musb_writew(epio, MUSB_TXMAXP,
                        musb->context.index_regs[i].txmaxp);
                musb_writew(epio, MUSB_TXCSR,