All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/5] usb: ehci: add freescale imx28 special write register method
@ 2013-10-25  6:02 Peter Chen
  2013-10-25  6:02 ` [PATCH v3 2/5] usb: chipidea: " Peter Chen
                   ` (4 more replies)
  0 siblings, 5 replies; 21+ messages in thread
From: Peter Chen @ 2013-10-25  6:02 UTC (permalink / raw)
  To: linux-arm-kernel

According to Freescale imx28 Errata, "ENGR119653 USB: ARM to USB
register error issue", All USB register write operations must
use the ARM SWP instruction. So, we implement a special ehci_write
for imx28.

Discussion for it at below:
http://marc.info/?l=linux-usb&m=137996395529294&w=2

Signed-off-by: Peter Chen <peter.chen@freescale.com>
---
 drivers/usb/host/ehci.h |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index e8f41c5..535aa8b 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -225,6 +225,7 @@ struct ehci_hcd {			/* one per controller */
 	unsigned		has_synopsys_hc_bug:1; /* Synopsys HC */
 	unsigned		frame_index_bug:1; /* MosChip (AKA NetMos) */
 	unsigned		need_oc_pp_cycle:1; /* MPC834X port power */
+	unsigned		imx28_write_fix:1; /* For Freescale i.MX28 */
 
 	/* required for usb32 quirk */
 	#define OHCI_CTRL_HCFS          (3 << 6)
@@ -728,6 +729,13 @@ static inline unsigned int ehci_readl(const struct ehci_hcd *ehci,
 #endif
 }
 
+#ifdef CONFIG_SOC_IMX28
+static inline void imx28_ehci_writel(u32 val32, volatile u32 *addr)
+{
+	__asm__ ("swp %0, %0, [%1]" : : "r"(val32), "r"(addr));
+}
+#endif
+
 static inline void ehci_writel(const struct ehci_hcd *ehci,
 		const unsigned int val, __u32 __iomem *regs)
 {
@@ -735,6 +743,11 @@ static inline void ehci_writel(const struct ehci_hcd *ehci,
 	ehci_big_endian_mmio(ehci) ?
 		writel_be(val, regs) :
 		writel(val, regs);
+#elif defined(CONFIG_SOC_IMX28)
+	if (ehci->imx28_write_fix)
+		imx28_ehci_writel(val, regs);
+	else
+		writel(val, regs);
 #else
 	writel(val, regs);
 #endif
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2013-10-30  3:09 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-25  6:02 [PATCH v3 1/5] usb: ehci: add freescale imx28 special write register method Peter Chen
2013-10-25  6:02 ` [PATCH v3 2/5] usb: chipidea: " Peter Chen
2013-10-28 10:36   ` Hector Palacios
2013-10-28 10:47     ` Marek Vasut
2013-10-29 23:54       ` gregkh at linuxfoundation.org
2013-10-30  0:53         ` Peter Chen
2013-10-30  3:09           ` gregkh at linuxfoundation.org
2013-10-25  6:02 ` [PATCH v3 3/5] usb: chipidea: imx: set CI_HDRC_IMX28_WRITE_FIX for imx28 Peter Chen
2013-10-27 16:25   ` Marek Vasut
2013-10-28  2:03     ` Shawn Guo
2013-10-28  7:52       ` Marek Vasut
2013-10-25  6:02 ` [PATCH v3 4/5] usb: doc: chipidea: imx: add compatiable string for imx28 SoC Peter Chen
2013-10-27 16:26   ` Marek Vasut
2013-10-28  2:00     ` Peter Chen
2013-10-25  6:02 ` [PATCH v3 5/5] ARM: dts: imx28: changing usb compatible string as only "fsl, imx28-usb" Peter Chen
2013-10-25  8:23   ` [PATCH v3 5/5] ARM: dts: imx28: changing usb compatible string as only "fsl,imx28-usb" Shawn Guo
2013-10-25  8:14     ` Peter Chen
2013-10-25  8:46       ` Shawn Guo
2013-10-28  1:59         ` Peter Chen
2013-10-28  2:50           ` Shawn Guo
2013-10-28  8:24 ` [PATCH v3 1/5] usb: ehci: add freescale imx28 special write register method Peter Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.