Moves the code more in line with QCA code. Also reduces variable to a u16 
instead of s32.

QCA code has the roundup component behind a Makefile config. Not sure if 
enabled by default so I opted to keep current behavior.

Signed-off-by: Rosen Penev <ros...@gmail.com>
---
 .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h   |  6 ++----
 .../drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c |  2 +-
 .../drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c    | 16 ++++++++++++----
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git 
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h 
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
index 39237aa..9964993 100644
--- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
+++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
@@ -90,9 +90,6 @@ struct ag71xx_desc {
        u32     pad;
 } __attribute__((aligned(4)));
 
-#define AG71XX_DESC_SIZE       roundup(sizeof(struct ag71xx_desc), \
-                                       L1_CACHE_BYTES)
-
 struct ag71xx_buf {
        union {
                struct sk_buff  *skb;
@@ -112,6 +109,7 @@ struct ag71xx_ring {
 
        /* "Cold" fields - not used in the data path. */
        struct ag71xx_buf       *buf;
+       u16                     desc_size;
        u8                      *descs_cpu;
        dma_addr_t              descs_dma;
        u16                     desc_split;
@@ -230,7 +228,7 @@ static inline int ag71xx_desc_empty(struct ag71xx_desc 
*desc)
 static inline struct ag71xx_desc *
 ag71xx_ring_desc(struct ag71xx_ring *ring, int idx)
 {
-       return (struct ag71xx_desc *) &ring->descs_cpu[idx * AG71XX_DESC_SIZE];
+       return (struct ag71xx_desc *) &ring->descs_cpu[idx * ring->desc_size];
 }
 
 static inline int
diff --git 
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
 
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
index c86803c..143689b 100644
--- 
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
+++ 
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_debugfs.c
@@ -186,7 +186,7 @@ static ssize_t read_file_ring(struct file *file, char 
__user *user_buf,
        for (i = 0; i < ring_size; i++) {
                struct ag71xx_buf *ab = &ring->buf[i];
                struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
-               u32 desc_dma = ((u32) ring->descs_dma) + i * AG71XX_DESC_SIZE;
+               u32 desc_dma = ((u32) ring->descs_dma) + i * ring->desc_size;
 
                len += snprintf(buf + len, buflen - len,
                        "%3d %c%c%c %08x %08x %08x %08x %c %10lu\n",
diff --git 
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c 
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
index 7518352..c1d754f 100644
--- 
a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
+++ 
b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c
@@ -105,7 +105,7 @@ static void ag71xx_ring_free(struct ag71xx_ring *ring)
        kfree(ring->buf);
 
        if (ring->descs_cpu)
-               dma_free_coherent(NULL, ring_size * AG71XX_DESC_SIZE,
+               dma_free_coherent(NULL, ring_size * ring->desc_size,
                                  ring->descs_cpu, ring->descs_dma);
 }
 
@@ -113,7 +113,15 @@ static int ag71xx_ring_alloc(struct ag71xx_ring *ring)
 {
        int ring_size = BIT(ring->order);
 
-       ring->descs_cpu = dma_alloc_coherent(NULL, ring_size * AG71XX_DESC_SIZE,
+       ring->desc_size = sizeof(struct ag71xx_desc);
+       if (ring->desc_size % cache_line_size()) {
+               DBG("ag71xx: ring %p, desc size %u rounded to %u\n",
+                   ring, ring->desc_size,
+                   roundup(ring->desc_size, cache_line_size()));
+               ring->desc_size = roundup(ring->desc_size, cache_line_size());
+       }
+
+       ring->descs_cpu = dma_alloc_coherent(NULL, ring_size * ring->desc_size,
                                             &ring->descs_dma, GFP_ATOMIC);
        if (!ring->descs_cpu)
                return -ENOMEM;
@@ -168,7 +176,7 @@ static void ag71xx_ring_tx_init(struct ag71xx *ag)
                struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
 
                desc->next = (u32) (ring->descs_dma +
-                       AG71XX_DESC_SIZE * ((i + 1) & ring_mask));
+                       ring->desc_size * ((i + 1) & ring_mask));
 
                desc->ctrl = DESC_EMPTY;
                ring->buf[i].skb = NULL;
@@ -254,7 +262,7 @@ static int ag71xx_ring_rx_init(struct ag71xx *ag)
                struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i);
 
                desc->next = (u32) (ring->descs_dma +
-                       AG71XX_DESC_SIZE * ((i + 1) & ring_mask));
+                       ring->desc_size * ((i + 1) & ring_mask));
 
                DBG("ag71xx: RX desc at %p, next is %08x\n",
                        desc, desc->next);
-- 
2.7.4


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to