Hi Daniel,
On Tue, Feb 28, 2012 at 10:46:05PM +0100, daniel.lezcano(a)linaro.org wrote:
> From: Daniel Lezcano <daniel.lezcano(a)linaro.org>
>
> I missed in my previous patch the A9_MASK_REQ[_MASK] were
> already defined. Let's remove the duplicate definitions.
>
> The PRCMU_GIC_DELAY macro could be removed as it is not
> really useful here.
This one and the 4 other patches applied. Thanks.
Cheers,
Samuel.
--
Intel Open Source Technology Centre
http://oss.intel.com/
Enable burst transfer from AHB for EHCI.
This fixes data transfer issue of USB Ethernet with EHCI.
Without this patch, ping works and network utilities such as scp hardly works.
It was tested on Origen board with the following configs.
root@linaro-alip:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=s5p-ehci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=vend., Driver=MOSCHIP usb-ethernet driver, 480M
Sangwook Lee (2):
ARM: EXYNOS: Add EHCI AHB burst function
USB: ehci-s5p: add function for burst
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 +++++++++++++++++++
drivers/usb/host/ehci-s5p.c | 3 +++
4 files changed, 30 insertions(+), 0 deletions(-)
--
1.7.4.1
DMA burst support is added to improve performance in EHCI data
transfer. The USB EHCI controller on Exynos SoCs can use INCR16,
INCR8, and INCR4 mode. These modes of INSNREG00 register should
be set in order to enable DMA burst transfer. This feature is
also related to AHB spec.
Signed-off-by: Jingoo Han <jg1.han(a)samsung.com>
Cc: Sangwook Lee <sangwook.lee(a)linaro.org>
---
v2: change the definition name from EHCI_ENA_xxx to EHCI_INSNREG00_ENA_xxx.
drivers/usb/host/ehci-s5p.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
index 293f741..b337f72 100644
--- a/drivers/usb/host/ehci-s5p.c
+++ b/drivers/usb/host/ehci-s5p.c
@@ -16,6 +16,7 @@
#include <linux/platform_device.h>
#include <plat/ehci.h>
#include <plat/usb-phy.h>
+#include <mach/regs-usb-host.h>
struct s5p_ehci_hcd {
struct device *dev;
@@ -128,6 +129,9 @@ static int __devinit s5p_ehci_probe(struct platform_device *pdev)
ehci->regs = hcd->regs +
HC_LENGTH(ehci, readl(&ehci->caps->hc_capbase));
+ /* DMA burst Enable */
+ writel(EHCI_INSNREG00_ENABLE_DMA_BURST, EHCI_INSNREG00(hcd->regs));
+
dbg_hcs_params(ehci, "reset");
dbg_hcc_params(ehci, "reset");
@@ -234,6 +238,9 @@ static int s5p_ehci_resume(struct device *dev)
if (pdata && pdata->phy_init)
pdata->phy_init(pdev, S5P_USB_PHY_HOST);
+ /* DMA burst Enable */
+ writel(EHCI_INSNREG00_ENABLE_DMA_BURST, EHCI_INSNREG00(hcd->regs));
+
if (time_before(jiffies, ehci->next_statechange))
msleep(100);
--
1.7.1