]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: pcnet: Move private data allocation to initialize
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Sun, 17 May 2020 14:26:00 +0000 (16:26 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Thu, 18 Jun 2020 17:34:40 +0000 (19:34 +0200)
The private data allocation does not have to be done every time the
NIC is initialized at run time, move the allocation to initialize
function, which means it will be done only once when the driver
starts.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/pcnet.c

index b670cff2aae03408ee2fc9806881c17d39eb228f..073ffca6b62794760cc9b194a6fc33ca1a49f6b7 100644 (file)
@@ -189,6 +189,20 @@ int pcnet_initialize(bd_t *bis)
                        printf("pcnet: Can not allocate memory\n");
                        break;
                }
+
+               /*
+                * We only maintain one structure because the drivers will
+                * never be used concurrently. In 32bit mode the RX and TX
+                * ring entries must be aligned on 16-byte boundaries.
+                */
+               if (!lp) {
+                       lp = malloc_cache_aligned(sizeof(*lp));
+                       lp->uc = map_physmem((phys_addr_t)&lp->ucp,
+                                            sizeof(lp->ucp), MAP_NOCACHE);
+                       flush_dcache_range((unsigned long)lp,
+                                          (unsigned long)lp + sizeof(*lp));
+               }
+
                dev->priv = (void *)(unsigned long)devbusfn;
                sprintf(dev->name, "pcnet#%d", dev_nr);
 
@@ -330,19 +344,6 @@ static int pcnet_init(struct eth_device *dev, bd_t *bis)
        val |= 0x3 << 10;
        pcnet_write_csr(dev, 80, val);
 
-       /*
-        * We only maintain one structure because the drivers will never
-        * be used concurrently. In 32bit mode the RX and TX ring entries
-        * must be aligned on 16-byte boundaries.
-        */
-       if (lp == NULL) {
-               lp = malloc_cache_aligned(sizeof(*lp));
-               lp->uc = map_physmem((phys_addr_t)&lp->ucp,
-                                    sizeof(lp->ucp), MAP_NOCACHE);
-               flush_dcache_range((unsigned long)lp,
-                                  (unsigned long)lp + sizeof(*lp));
-       }
-
        uc = lp->uc;
 
        uc->init_block.mode = cpu_to_le16(0x0000);