ppc4xx: Fix problem in 4xx_enet.c driver
authorAnatolij Gustschin <agust@denx.de>
Mon, 25 Feb 2008 19:54:04 +0000 (20:54 +0100)
committerWolfgang Denk <wd@denx.de>
Sun, 2 Mar 2008 20:34:55 +0000 (21:34 +0100)
U-Boot crashes in the net loop if CONFIG_4xx_DCACHE is
enabled. To reproduce the problem ensure that 'ethrotate'
environment variable isn't set to "no" and then run
"tftp 200000 not_existent_file".
This patch tries to fix the issue.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
cpu/ppc4xx/4xx_enet.c

index 44659ffcd9800f1d3d7e856e4c2f5f9bbabe30c2..5ef1005b1f01c0d63edd6619bdb691b9bc5371ec 100644 (file)
@@ -487,6 +487,9 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 #endif
        u32 bd_cached;
        u32 bd_uncached = 0;
+#ifdef CONFIG_4xx_DCACHE
+       static u32 last_used_ea = 0;
+#endif
 
        EMAC_4XX_HW_PST hw_p = dev->priv;
 
@@ -850,7 +853,12 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
 
 #ifdef CONFIG_4xx_DCACHE
                flush_dcache_range(bd_cached, bd_cached + MAL_ALLOC_SIZE);
-               bd_uncached = bis->bi_memsize;
+               if (!last_used_ea)
+                       bd_uncached = bis->bi_memsize;
+               else
+                       bd_uncached = last_used_ea + MAL_ALLOC_SIZE;
+
+               last_used_ea = bd_uncached;
                program_tlb(bd_cached, bd_uncached, MAL_ALLOC_SIZE,
                            TLB_WORD2_I_ENABLE);
 #else