1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- From a9a63c1e906eecd9864ce016cdfcf0b867ae451d Mon Sep 17 00:00:00 2001
- From: Ramon Fried <rfried.dev@gmail.com>
- Date: Tue, 11 Jun 2019 18:19:30 +0300
- Subject: [PATCH 07/21] net: macb: apply sane DMA configuration
- DMA configuration was heavily dependent on the HW
- defaults, add function to properly set the required
- fields, including the new dma_burst_length.
- Signed-off-by: Ramon Fried <rfried.dev@gmail.com>
- Upstream-Status: Submitted
- ---
- drivers/net/macb.c | 28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
- diff --git a/drivers/net/macb.c b/drivers/net/macb.c
- index fb42172520..c072f99d8f 100644
- --- a/drivers/net/macb.c
- +++ b/drivers/net/macb.c
- @@ -47,6 +47,7 @@ DECLARE_GLOBAL_DATA_PTR;
-
- #define MACB_RX_BUFFER_SIZE 4096
- #define MACB_RX_RING_SIZE (MACB_RX_BUFFER_SIZE / 128)
- +#define RX_BUFFER_MULTIPLE 64
- #define MACB_TX_RING_SIZE 16
- #define MACB_TX_TIMEOUT 1000
- #define MACB_AUTONEG_TIMEOUT 5000000
- @@ -695,6 +696,31 @@ static int gmac_init_multi_queues(struct macb_device *macb)
- return 0;
- }
-
- +static void gmac_configure_dma(struct macb_device *macb)
- +{
- + u32 buffer_size;
- + u32 dmacfg;
- +
- + buffer_size = 128 / RX_BUFFER_MULTIPLE;
- + dmacfg = gem_readl(macb, DMACFG) & ~GEM_BF(RXBS, -1L);
- + dmacfg |= GEM_BF(RXBS, buffer_size);
- +
- + if (macb->dma_burst_length)
- + dmacfg = GEM_BFINS(FBLDO, macb->dma_burst_length, dmacfg);
- +
- + dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L);
- + dmacfg &= ~GEM_BIT(ENDIA_PKT);
- +
- +#ifdef CONFIG_SYS_LITTLE_ENDIAN
- + dmacfg &= ~GEM_BIT(ENDIA_DESC);
- +#else
- + dmacfg |= GEM_BIT(ENDIA_DESC); /* CPU in big endian */
- +#endif
- +
- + dmacfg &= ~GEM_BIT(ADDR64);
- + gem_writel(macb, DMACFG, dmacfg);
- +}
- +
- #ifdef CONFIG_DM_ETH
- static int _macb_init(struct udevice *dev, const char *name)
- #else
- @@ -748,6 +774,8 @@ static int _macb_init(struct macb_device *macb, const char *name)
- macb_writel(macb, TBQP, macb->tx_ring_dma);
-
- if (macb_is_gem(macb)) {
- + /* Initialize DMA properties */
- + gmac_configure_dma(macb);
- /* Check the multi queue and initialize the queue for tx */
- gmac_init_multi_queues(macb);
-
- --
- 2.22.0
|