Thread (9 messages) 9 messages, 4 authors, 2012-03-01
STALE5208d
Revisions (7)
  1. v1 current
  2. v1 [diff vs current]
  3. v1 [diff vs current]
  4. v1 [diff vs current]
  5. v1 [diff vs current]
  6. v1 [diff vs current]
  7. v1 [diff vs current]

[PATCH 1/2] ARM: EXYNOS: Add EHCI AHB burst function

From: Sangwook Lee <hidden>
Date: 2012-02-29 12:41:22
Also in: linux-samsung-soc
Subsystem: arm port, the rest · Maintainers: Russell King, Linus Torvalds

Enable burst transfer from AHB for EHCI.
This fixes data transfer of USB Ethernet with EHCI.
Without this patch, scp hardly works.

Signed-off-by: Sangwook Lee <redacted>
---
 arch/arm/mach-exynos/setup-usb-phy.c      |    6 ++++++
 arch/arm/plat-samsung/devs.c              |    2 ++
 arch/arm/plat-samsung/include/plat/ehci.h |   19 +++++++++++++++++++
 3 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-exynos/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c
index 41743d2..5a20460 100644
--- a/arch/arm/mach-exynos/setup-usb-phy.c
+++ b/arch/arm/mach-exynos/setup-usb-phy.c
@@ -18,6 +18,7 @@
 #include <mach/regs-usb-phy.h>
 #include <plat/cpu.h>
 #include <plat/usb-phy.h>
+#include <plat/ehci.h>
 
 static atomic_t host_usage;
 
@@ -149,3 +150,8 @@ int s5p_usb_phy_exit(struct platform_device *pdev, int type)
 
 	return -EINVAL;
 }
+
+void s5p_ehci_burst_enable(struct platform_device *pdev, void __iomem *base)
+{
+	writel(EHCI_INSNREG00_ENABLE_BURST, base + EHCI_INSNREG00);
+}
diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c
index f10768e..8fd1bd3 100644
--- a/arch/arm/plat-samsung/devs.c
+++ b/arch/arm/plat-samsung/devs.c
@@ -1402,6 +1402,8 @@ void __init s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd)
 		npd->phy_init = s5p_usb_phy_init;
 	if (!npd->phy_exit)
 		npd->phy_exit = s5p_usb_phy_exit;
+	if (!npd->burst_enable)
+		npd->burst_enable = s5p_ehci_burst_enable;
 }
 #endif /* CONFIG_S5P_DEV_USB_EHCI */
 
diff --git a/arch/arm/plat-samsung/include/plat/ehci.h b/arch/arm/plat-samsung/include/plat/ehci.h
index 5f28cae..9c866b7 100644
--- a/arch/arm/plat-samsung/include/plat/ehci.h
+++ b/arch/arm/plat-samsung/include/plat/ehci.h
@@ -14,8 +14,27 @@
 struct s5p_ehci_platdata {
 	int (*phy_init)(struct platform_device *pdev, int type);
 	int (*phy_exit)(struct platform_device *pdev, int type);
+	void (*burst_enable)(struct platform_device *pdev, void __iomem *base);
 };
 
 extern void s5p_ehci_set_platdata(struct s5p_ehci_platdata *pd);
+extern void s5p_ehci_burst_enable(struct platform_device *pdev,
+	void __iomem *base);
+
+/* EHCI EXYNOS specific register */
+#define EHCI_INSNREG00			0x90
+
+/*
+ * EHCI INSNREG00 Specific fields
+ * Enable AHB master to use burst transfer from 4 to 16
+ */
+#define EHCI_INSNREG00_ENABLE_INCR16	(1 << 25)
+#define EHCI_INSNREG00_ENABLE_INCR8	(1 << 24)
+#define EHCI_INSNREG00_ENABLE_INCR4	(1 << 23)
+/* Force AHB master to start burst transfer only for 4,8,16 alignment */
+#define EHCI_INSNREG00_ENABLE_INCRX_ALIGN (1 << 22)
+#define EHCI_INSNREG00_ENABLE_BURST	\
+	(EHCI_INSNREG00_ENABLE_INCR16 | EHCI_INSNREG00_ENABLE_INCR8 |	\
+	EHCI_INSNREG00_ENABLE_INCR4 | EHCI_INSNREG00_ENABLE_INCRX_ALIGN)
 
 #endif /* __PLAT_SAMSUNG_EHCI_H */
-- 
1.7.4.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help