On Tue, May 25, 2010 at 10:06 AM, Ben Dooks <[email protected]> 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 <[email protected]>
> ---
> 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-samsung-soc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html