RE: [PATCH 1/6] [local/generalize] USB: musb: workaround RX DMA hang anomaly by disabling double buffer mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Unfortunately, the HWVERS register is invisible in BLACKFIN's HRM,
And it is read out as 0.0. both on bf527 and bf548.

Cliff  

>-----Original Message-----
>From: Felipe Balbi [mailto:felipe.balbi@xxxxxxxxx] 
>Sent: Wednesday, December 23, 2009 6:46 PM
>To: Cai, Cliff
>Cc: Balbi Felipe (Nokia-D/Helsinki); ext Mike Frysinger; 
>linux-usb@xxxxxxxxxxxxxxx; uclinux-dist-devel@xxxxxxxxxxxxxxxxxxxx
>Subject: Re: [PATCH 1/6] [local/generalize] USB: musb: 
>workaround RX DMA hang anomaly by disabling double buffer mode
>
>Hi,
>
>On Wed, Dec 23, 2009 at 11:01:20AM +0100, ext Cai, Cliff wrote:
>>>this tells me that we really can't trust musb's double buffering at 
>>>all and we can make a check based on the rtl revision. At 
>least until 
>>>rtl1.9 we can't use double buffering, no matter what the 
>fifo table or 
>>>hardware ep configuration says.
>>
>>Exactly,Blackfin doesn't have dynamic fifo sizing,and since 
>the BULK EP 
>>has a 1024 bytes fifo,double buffering is enabled by default.
>
>good, so can you reimplement this with a rtl version check and 
>blacklist double buffering for anything <= rtl1.9 ??
>
>you will need this patch:
>
>commit 32c3b94e2b643bfeca5e48b0f7f0b81812c7a1d3
>Author: Anand Gadiyar <gadiyar@xxxxxx>
>Date:   Mon Nov 16 21:09:21 2009 +0530
>
>     USB: MUSB: save hardware revision at init
>     
>     MUSB: save hardware revision at init
>     
>     This can be used later to flag workarounds for issues affecting
>     particular revisions. Saving this at init avoids having to
>     read the HWVERS register multiple times in code.
>     
>     While at it, use macros to extract the version information
>     instead of using hardcoded values.
>     
>     Signed-off-by: Anand Gadiyar <gadiyar@xxxxxx>
>     Cc: Ajay Kumar Gupta <ajay.gupta@xxxxxx>
>     Acked-by: Felipe Balbi <felipe.balbi@xxxxxxxxx>
>     Cc: David Brownell <dbrownell@xxxxxxxxxxxxxxxxxxxxx>
>     Cc: Sergei Shtylyov <sshtylyov@xxxxxxxxxxxxx>
>     Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
>
>diff --git a/drivers/usb/musb/musb_core.c 
>b/drivers/usb/musb/musb_core.c index 547e0e3..49f2346 100644
>--- a/drivers/usb/musb/musb_core.c
>+++ b/drivers/usb/musb/musb_core.c
>@@ -1319,7 +1319,6 @@ static int __init musb_core_init(u16 
>musb_type, struct musb *musb)
>  #endif
>         u8 reg;
>         char *type;
>-       u16 hwvers, rev_major, rev_minor;
>         char aInfo[78], aRevision[32], aDate[12];
>         void __iomem    *mbase = musb->mregs;
>         int             status = 0;
>@@ -1391,11 +1390,10 @@ static int __init musb_core_init(u16 
>musb_type, struct musb *musb)
>         }
>  
>         /* log release info */
>-       hwvers = musb_read_hwvers(mbase);
>-       rev_major = (hwvers >> 10) & 0x1f;
>-       rev_minor = hwvers & 0x3ff;
>-       snprintf(aRevision, 32, "%d.%d%s", rev_major,
>-               rev_minor, (hwvers & 0x8000) ? "RC" : "");
>+       musb->hwvers = musb_read_hwvers(mbase);
>+       snprintf(aRevision, 32, "%d.%d%s", 
>MUSB_HWVERS_MAJOR(musb->hwvers),
>+               MUSB_HWVERS_MINOR(musb->hwvers),
>+               (musb->hwvers & MUSB_HWVERS_RC) ? "RC" : "");
>         printk(KERN_DEBUG "%s: %sHDRC RTL version %s %s\n",
>                         musb_driver_name, type, aRevision, aDate);
>  
>diff --git a/drivers/usb/musb/musb_core.h 
>b/drivers/usb/musb/musb_core.h index 6aa5f22..03d5090 100644
>--- a/drivers/usb/musb/musb_core.h
>+++ b/drivers/usb/musb/musb_core.h
>@@ -322,6 +322,14 @@ struct musb {
>         struct clk              *clock;
>         irqreturn_t             (*isr)(int, void *);
>         struct work_struct      irq_work;
>+#define MUSB_HWVERS_MAJOR(x)   ((x >> 10) & 0x1f)
>+#define MUSB_HWVERS_MINOR(x)   (x & 0x3ff)
>+#define MUSB_HWVERS_RC         0x8000
>+#define MUSB_HWVERS_1300       0x52C
>+#define MUSB_HWVERS_1400       0x590
>+#define MUSB_HWVERS_1800       0x720
>+#define MUSB_HWVERS_2000       0x800
>+       u16                     hwvers;
>  
>  /* this hub status bit is reserved by USB 2.0 and not seen 
>by usbcore */
>  #define MUSB_PORT_STAT_RESUME  (1 << 31)
>
>--
>balbi
>
--
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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux