diff mbox

[U-Boot,2/2] usb: musb: blackfin: check anomaly workarounds at runtime too

Message ID 1300397701-7162-2-git-send-email-vapier@gentoo.org
State Accepted
Commit 081b59e4536d050ed5dc3c16ec5c65d16c0edc94
Delegated to: Remy Bohmer
Headers show

Commit Message

Mike Frysinger March 17, 2011, 9:35 p.m. UTC
The anomaly workarounds we need for older silicon might break things
if used on newer versions where the anomalies don't exist.  So check
the silicon rev at runtime too.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/usb/musb/blackfin_usb.c |   29 ++++++++++++++++++++++++++---
 1 files changed, 26 insertions(+), 3 deletions(-)

Comments

Remy Bohmer March 25, 2011, 7:15 p.m. UTC | #1
Hi,

2011/3/17 Mike Frysinger <vapier@gentoo.org>:
> The anomaly workarounds we need for older silicon might break things
> if used on newer versions where the anomalies don't exist.  So check
> the silicon rev at runtime too.
>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
>  drivers/usb/musb/blackfin_usb.c |   29 ++++++++++++++++++++++++++---
>  1 files changed, 26 insertions(+), 3 deletions(-)

Applied to u-boot-usb.

Thanks.

Remy
diff mbox

Patch

diff --git a/drivers/usb/musb/blackfin_usb.c b/drivers/usb/musb/blackfin_usb.c
index 0eb19a0..35268ba 100644
--- a/drivers/usb/musb/blackfin_usb.c
+++ b/drivers/usb/musb/blackfin_usb.c
@@ -97,10 +97,25 @@  static void __def_musb_init(void)
 }
 void board_musb_init(void) __attribute__((weak, alias("__def_musb_init")));
 
-int musb_platform_init(void)
+static void bfin_anomaly_init(void)
 {
-	/* board specific initialization */
-	board_musb_init();
+	u32 revid;
+
+	if (!ANOMALY_05000346 && !ANOMALY_05000347)
+		return;
+
+	revid = bfin_revid();
+
+#ifdef __ADSPBF54x__
+	if (revid > 0)
+		return;
+#endif
+#ifdef __ADSPBF52x__
+	if (ANOMALY_BF526 && revid > 0)
+		return;
+	if (ANOMALY_BF527 && revid > 1)
+		return;
+#endif
 
 	if (ANOMALY_05000346) {
 		bfin_write_USB_APHY_CALIB(ANOMALY_05000346_value);
@@ -111,6 +126,14 @@  int musb_platform_init(void)
 		bfin_write_USB_APHY_CNTRL(0x0);
 		SSYNC();
 	}
+}
+
+int musb_platform_init(void)
+{
+	/* board specific initialization */
+	board_musb_init();
+
+	bfin_anomaly_init();
 
 	/* Configure PLL oscillator register */
 	bfin_write_USB_PLLOSC_CTRL(0x3080 |