On Tue, May 25, 2010 at 10:06 AM, Ben Dooks <ben-linux@xxxxxxxxx> wrote: > According to the design guide, if the FIFO layout is changed, then the > FIFOs must be flushed to ensure all FIFO pointers are correct. > > Signed-off-by: Ben Dooks <ben-linux@xxxxxxxxx> > --- > drivers/usb/gadget/s3c-hsotg.c | 26 ++++++++++++++++++++++++++ > 1 files changed, 26 insertions(+), 0 deletions(-) > > diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c > index 8ed4f8a..0cb0462 100644 > --- a/drivers/usb/gadget/s3c-hsotg.c > +++ b/drivers/usb/gadget/s3c-hsotg.c > @@ -301,6 +301,7 @@ static void s3c_hsotg_init_fifo(struct s3c_hsotg *hsotg) > unsigned int ep; > unsigned int addr; > unsigned int size; > + int timeout; > u32 val; > > /* the ryu 2.6.24 release ahs > @@ -336,6 +337,31 @@ static void s3c_hsotg_init_fifo(struct s3c_hsotg *hsotg) > > writel(val, hsotg->regs + S3C_DPTXFSIZn(ep)); > } > + > + /* according to p428 of the design guide, we need to ensure that > + * all fifos are flushed before continuing */ Please see Documentation/CodingStyle for multi-line comments. > + > + writel(S3C_GRSTCTL_TxFNum(0x10) | S3C_GRSTCTL_TxFFlsh | > + S3C_GRSTCTL_RxFFlsh, hsotg->regs + S3C_GRSTCTL); > + > + /* wait until the fifos are both flushed */ > + timeout = 100; > + while (1) { > + val = readl(hsotg->regs + S3C_GRSTCTL); > + > + if ((val & (S3C_GRSTCTL_TxFFlsh | S3C_GRSTCTL_RxFFlsh)) == 0) > + break; > + > + if (--timeout == 0) { > + dev_err(hsotg->dev, > + "%s: timeout flushing fifos (GRSTCTL=%08x)\n", > + __func__, val); > + } > + > + udelay(1); > + } > + > + dev_dbg(hsotg->dev, "FIFOs reset, timeout at %d\n", timeout); > } Regards, Maulik -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html