Message ID | 1422327292-6039-1-git-send-email-sonic.adi@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | Joe Hershberger |
Headers | show |
On Mon, Jan 26, 2015 at 8:54 PM, <sonic.adi@gmail.com> wrote: > > From: Sonic Zhang <sonic.zhang@analog.com> > > Board can define its own AXI burst length to improve DWMAC DMA performance. > > Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> > --- > > drivers/net/designware.c | 2 ++ > drivers/net/designware.h | 5 +++++ > 2 files changed, 7 insertions(+) > > diff --git a/drivers/net/designware.c b/drivers/net/designware.c > index 9ded895..d8d6792 100644 > --- a/drivers/net/designware.c > +++ b/drivers/net/designware.c > @@ -256,6 +256,8 @@ static int dw_eth_init(struct eth_device *dev, bd_t *bis) > > writel(readl(&dma_p->opmode) | RXSTART | TXSTART, &dma_p->opmode); > This should probably include: +#if CONFIG_DW_AXI_BURST_LEN so that this register is only accessed if configured. > + writel((CONFIG_DW_AXI_BURST_LEN & 0x1FF >> 1), &dma_p->axibus); > + > /* Start up the PHY */ > if (phy_startup(priv->phydev)) { > printf("Could not initialize PHY %s\n", > diff --git a/drivers/net/designware.h b/drivers/net/designware.h > index ce51102..d8bd84d 100644 > --- a/drivers/net/designware.h > +++ b/drivers/net/designware.h > @@ -102,6 +102,11 @@ struct eth_dma_regs { > #define TXSECONDFRAME (1 << 2) > #define RXSTART (1 << 1) > > +/* Default AXI BUS Burst length */ > +#ifndef CONFIG_DW_AXI_BURST_LEN > +#define CONFIG_DW_AXI_BURST_LEN 0 > +#endif > + > /* Descriptior related definitions */ > #define MAC_MAX_FRAME_SZ (1600) > > -- > 1.7.9.5 >
Hi Joe, On Wed, Jan 28, 2015 at 4:43 AM, Joe Hershberger <joe.hershberger@gmail.com> wrote: > On Mon, Jan 26, 2015 at 8:54 PM, <sonic.adi@gmail.com> wrote: >> >> From: Sonic Zhang <sonic.zhang@analog.com> >> >> Board can define its own AXI burst length to improve DWMAC DMA >> performance. >> >> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> >> --- >> >> drivers/net/designware.c | 2 ++ >> drivers/net/designware.h | 5 +++++ >> 2 files changed, 7 insertions(+) >> >> diff --git a/drivers/net/designware.c b/drivers/net/designware.c >> index 9ded895..d8d6792 100644 >> --- a/drivers/net/designware.c >> +++ b/drivers/net/designware.c >> @@ -256,6 +256,8 @@ static int dw_eth_init(struct eth_device *dev, bd_t >> *bis) >> >> writel(readl(&dma_p->opmode) | RXSTART | TXSTART, &dma_p->opmode); >> > This should probably include: > +#if CONFIG_DW_AXI_BURST_LEN > so that this register is only accessed if configured. CONFIG_DW_AXI_BURST_LEN is always defined in designware.h in the same patch. +/* Default AXI BUS Burst length */ +#ifndef CONFIG_DW_AXI_BURST_LEN +#define CONFIG_DW_AXI_BURST_LEN 0 +#endif + Regards, Sonic
On Tue, Jan 27, 2015 at 9:24 PM, Sonic Zhang <sonic.adi@gmail.com> wrote: > > Hi Joe, > > On Wed, Jan 28, 2015 at 4:43 AM, Joe Hershberger > <joe.hershberger@gmail.com> wrote: > > On Mon, Jan 26, 2015 at 8:54 PM, <sonic.adi@gmail.com> wrote: > >> > >> From: Sonic Zhang <sonic.zhang@analog.com> > >> > >> Board can define its own AXI burst length to improve DWMAC DMA > >> performance. > >> > >> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> > >> --- > >> > >> drivers/net/designware.c | 2 ++ > >> drivers/net/designware.h | 5 +++++ > >> 2 files changed, 7 insertions(+) > >> > >> diff --git a/drivers/net/designware.c b/drivers/net/designware.c > >> index 9ded895..d8d6792 100644 > >> --- a/drivers/net/designware.c > >> +++ b/drivers/net/designware.c > >> @@ -256,6 +256,8 @@ static int dw_eth_init(struct eth_device *dev, bd_t > >> *bis) > >> > >> writel(readl(&dma_p->opmode) | RXSTART | TXSTART, &dma_p->opmode); > >> > > This should probably include: > > +#if CONFIG_DW_AXI_BURST_LEN > > so that this register is only accessed if configured. > > CONFIG_DW_AXI_BURST_LEN is always defined in designware.h in the same patch. > > +/* Default AXI BUS Burst length */ > +#ifndef CONFIG_DW_AXI_BURST_LEN > +#define CONFIG_DW_AXI_BURST_LEN 0 > +#endif > + Yes, I saw that... sorry I wasn't clear. I meant don't we want to avoid the write (preserving existing behavior) instead of ensuring that it is set, and still adding a register write that is (presumably) a NOP? -Joe
Hi Joe, On Wed, Jan 28, 2015 at 5:42 PM, Joe Hershberger <joe.hershberger@gmail.com> wrote: > On Tue, Jan 27, 2015 at 9:24 PM, Sonic Zhang <sonic.adi@gmail.com> wrote: >> >> Hi Joe, >> >> On Wed, Jan 28, 2015 at 4:43 AM, Joe Hershberger >> <joe.hershberger@gmail.com> wrote: >> > On Mon, Jan 26, 2015 at 8:54 PM, <sonic.adi@gmail.com> wrote: >> >> >> >> From: Sonic Zhang <sonic.zhang@analog.com> >> >> >> >> Board can define its own AXI burst length to improve DWMAC DMA >> >> performance. >> >> >> >> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> >> >> --- >> >> >> >> drivers/net/designware.c | 2 ++ >> >> drivers/net/designware.h | 5 +++++ >> >> 2 files changed, 7 insertions(+) >> >> >> >> diff --git a/drivers/net/designware.c b/drivers/net/designware.c >> >> index 9ded895..d8d6792 100644 >> >> --- a/drivers/net/designware.c >> >> +++ b/drivers/net/designware.c >> >> @@ -256,6 +256,8 @@ static int dw_eth_init(struct eth_device *dev, bd_t >> >> *bis) >> >> >> >> writel(readl(&dma_p->opmode) | RXSTART | TXSTART, >> >> &dma_p->opmode); >> >> >> > This should probably include: >> > +#if CONFIG_DW_AXI_BURST_LEN >> > so that this register is only accessed if configured. >> >> CONFIG_DW_AXI_BURST_LEN is always defined in designware.h in the same >> patch. >> >> +/* Default AXI BUS Burst length */ >> +#ifndef CONFIG_DW_AXI_BURST_LEN >> +#define CONFIG_DW_AXI_BURST_LEN 0 >> +#endif >> + > > Yes, I saw that... sorry I wasn't clear. I meant don't we want to avoid the > write (preserving existing behavior) instead of ensuring that it is set, and > still adding a register write that is (presumably) a NOP? OK, I will update the patch. Sonic
diff --git a/drivers/net/designware.c b/drivers/net/designware.c index 9ded895..d8d6792 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -256,6 +256,8 @@ static int dw_eth_init(struct eth_device *dev, bd_t *bis) writel(readl(&dma_p->opmode) | RXSTART | TXSTART, &dma_p->opmode); + writel((CONFIG_DW_AXI_BURST_LEN & 0x1FF >> 1), &dma_p->axibus); + /* Start up the PHY */ if (phy_startup(priv->phydev)) { printf("Could not initialize PHY %s\n", diff --git a/drivers/net/designware.h b/drivers/net/designware.h index ce51102..d8bd84d 100644 --- a/drivers/net/designware.h +++ b/drivers/net/designware.h @@ -102,6 +102,11 @@ struct eth_dma_regs { #define TXSECONDFRAME (1 << 2) #define RXSTART (1 << 1) +/* Default AXI BUS Burst length */ +#ifndef CONFIG_DW_AXI_BURST_LEN +#define CONFIG_DW_AXI_BURST_LEN 0 +#endif + /* Descriptior related definitions */ #define MAC_MAX_FRAME_SZ (1600)