diff mbox

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

Message ID 1330519283-4722-2-git-send-email-sangwook.lee@linaro.org
State Accepted
Headers show

Commit Message

Sangwook Feb. 29, 2012, 12:41 p.m. UTC
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 <sangwook.lee@linaro.org>
---
 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(-)

Comments

thomas.abraham@linaro.org Feb. 29, 2012, 1:01 p.m. UTC | #1
Hi Sangwook,

On 29 February 2012 18:11, Sangwook Lee <sangwook.lee@linaro.org> wrote:
> 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 <sangwook.lee@linaro.org>
> ---
>  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);
> +}

This functionality can be added in ehci-s5p itself and avoid adding a
new platform callback in platform data. If this is specific to exynos,
driver data could be added in ehci-s5p to indicate platforms that need
this to be enabled.

Thanks,
Thomas.

[...]
Jingoo Han Feb. 29, 2012, 1:13 p.m. UTC | #2
Hi,
> -----Original Message-----
> From: Thomas Abraham [mailto:thomas.abraham@linaro.org]
> Sent: Wednesday, February 29, 2012 10:02 PM
> To: Sangwook Lee
> Cc: linux-samsung-soc@vger.kernel.org; linux-usb@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> ben-linux@fluff.org; gregkh@suse.de; kgene.kim@samsung.com; stern@rowland.harvard.edu;
> jg1.han@samsung.com; jy0922.shim@samsung.com; patches@linaro.org; linaro-dev@lists.linaro.org;
> linux@arm.linux.org.uk
> Subject: Re: [PATCH 1/2] ARM: EXYNOS: Add EHCI AHB burst function
> 
> Hi Sangwook,
> 
> On 29 February 2012 18:11, Sangwook Lee <sangwook.lee@linaro.org> wrote:
> > 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 <sangwook.lee@linaro.org>
> > ---
> >  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);
> > +}
> 
> This functionality can be added in ehci-s5p itself and avoid adding a
> new platform callback in platform data. If this is specific to exynos,
> driver data could be added in ehci-s5p to indicate platforms that need
> this to be enabled.

I agree with Thomas's opinion.
Sangwook, please don't call s5p_ehci_burst_enable using platform callback.
It can be added to ehci-s5p itself.

> 
> Thanks,
> Thomas.
> 
> [...]
Jingoo Han Feb. 29, 2012, 1:23 p.m. UTC | #3
Hi, Sangwook.

I know what you want to add.
I'll send new patch which can enable EHCI burst mode.
This new patch will not use platform data callback and different machine directory
file to include EHCI INSNREG00 definitions.
Also, comment will be modified properly.


Thank you.

Best regards,
Jingoo Han.

> -----Original Message-----
> From: Sangwook Lee [mailto:sangwook.lee@linaro.org]
> Sent: Wednesday, February 29, 2012 9:41 PM
> To: linux-samsung-soc@vger.kernel.org; linux-usb@vger.kernel.org; linux-arm-kernel@lists.infradead.org
> Cc: ben-linux@fluff.org; gregkh@suse.de; kgene.kim@samsung.com; stern@rowland.harvard.edu;
> jg1.han@samsung.com; jy0922.shim@samsung.com; patches@linaro.org; linaro-dev@lists.linaro.org;
> linux@arm.linux.org.uk; Sangwook Lee
> Subject: [PATCH 1/2] ARM: EXYNOS: Add EHCI AHB burst function
> 
> 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 <sangwook.lee@linaro.org>
> ---
>  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
Sangwook Feb. 29, 2012, 2:21 p.m. UTC | #4
Hi Jingoo

On 29/02/12 13:23, Jingoo Han wrote:
> Hi, Sangwook.
>
> I know what you want to add.
> I'll send new patch which can enable EHCI burst mode.

Great !

Thanks
Sangwook

> This new patch will not use platform data callback and different machine directory
> file to include EHCI INSNREG00 definitions.
> Also, comment will be modified properly.
>
>
> Thank you.
>
> Best regards,
> Jingoo Han.
>
>> -----Original Message-----
>> From: Sangwook Lee [mailto:sangwook.lee@linaro.org]
>> Sent: Wednesday, February 29, 2012 9:41 PM
>> To: linux-samsung-soc@vger.kernel.org; linux-usb@vger.kernel.org; linux-arm-kernel@lists.infradead.org
>> Cc: ben-linux@fluff.org; gregkh@suse.de; kgene.kim@samsung.com; stern@rowland.harvard.edu;
>> jg1.han@samsung.com; jy0922.shim@samsung.com; patches@linaro.org; linaro-dev@lists.linaro.org;
>> linux@arm.linux.org.uk; Sangwook Lee
>> Subject: [PATCH 1/2] ARM: EXYNOS: Add EHCI AHB burst function
>>
>> 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<sangwook.lee@linaro.org>
>> ---
>>   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
>
Sangwook Feb. 29, 2012, 2:27 p.m. UTC | #5
On 29/02/12 13:01, Thomas Abraham wrote:
> Hi Sangwook,
>
> On 29 February 2012 18:11, Sangwook Lee<sangwook.lee@linaro.org>  wrote:
>> 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<sangwook.lee@linaro.org>
>> ---
>>   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);
>> +}
>
> This functionality can be added in ehci-s5p itself and avoid adding a
> new platform callback in platform data. If this is specific to exynos,
> driver data could be added in ehci-s5p to indicate platforms that need
> this to be enabled.

it makes sense.

>
> Thanks,
> Thomas.
>
> [...]
Tushar Behera March 1, 2012, 3:24 a.m. UTC | #6
On 02/29/2012 06:31 PM, Thomas Abraham wrote:
> Hi Sangwook,
> 
> On 29 February 2012 18:11, Sangwook Lee <sangwook.lee@linaro.org> wrote:
>> 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 <sangwook.lee@linaro.org>
>> ---
>>  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);
>> +}
> 
> This functionality can be added in ehci-s5p itself and avoid adding a
> new platform callback in platform data. If this is specific to exynos,
> driver data could be added in ehci-s5p to indicate platforms that need
> this to be enabled.
> 
Am I right in assuming that ehci-s5p driver can also be used for
mach-s5pv210?

The related bit-fields are reserved in S5PV210. So, won't it cause any
side-effects?


> Thanks,
> Thomas.
> 
> [...]
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sangwook March 1, 2012, 9:18 a.m. UTC | #7
On 1 March 2012 03:24, Tushar Behera <tushar.behera@linaro.org> wrote:

> On 02/29/2012 06:31 PM, Thomas Abraham wrote:
> > Hi Sangwook,
> >
> > On 29 February 2012 18:11, Sangwook Lee <sangwook.lee@linaro.org> wrote:
> >> 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 <sangwook.lee@linaro.org>
> >> ---
> >>  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);
> >> +}
> >
> > This functionality can be added in ehci-s5p itself and avoid adding a
> > new platform callback in platform data. If this is specific to exynos,
> > driver data could be added in ehci-s5p to indicate platforms that need
> > this to be enabled.
> >
> Am I right in assuming that ehci-s5p driver can also be used for
> mach-s5pv210?
>
> The related bit-fields are reserved in S5PV210. So, won't it cause any
> side-effects?
>
>
do we use ehci-s5p.c in CPU 64xx series ?

>
> > Thanks,
> > Thomas.
> >
> > [...]
> > --
> > To unsubscribe from this list: send the line "unsubscribe
> linux-samsung-soc" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>
> --
> Tushar Behera
>
diff mbox

Patch

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 */