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