Missing ETOP initialization

When using brnboot instead of u-boot for booting OpenWRT, no network
initialization is done by the bootloader.  Adapt missing register
writes from uboot-lantiq ifx_etop.c lq_eth_init_chip().
Controversial part, but seems to be required for ethernet to work on
W502V:
+-#define ETOP_MII_NORMAL               0xd
+-#define ETOP_MII_REVERSE      0xe
++#define ETOP_MII_NORMAL               0x8
++#define ETOP_MII_REVERSE      0xa

See lq_eth_init_chip():
#ifdef CONFIG_RMII
        *ETOP_CFG = (*ETOP_CFG & 0xFFFFFFFC) | 0x0000000A;
#else
        *ETOP_CFG = (*ETOP_CFG & 0xFFFFFFFC) | 0x00000008;
#endif

(Which is a bit buggy itself, the mask should be 0xFFFFFFF0 or 0xFFFFFFF4,
it clearly sets bit 3 as well in addition to touching bits 0 and 1)

Note that ETOP_CFG is one of the registers where my previous patch changes the
register offset, so it's likely that the lantiq_etop driver never affected
the reverse/normal mii setting and was relying on uboot to set this.


Signed-off-by: Tobias Diedrich <ranma+open...@tdiedrich.de>


Index: target/linux/lantiq/patches-3.3/0027-etop-without-uboot.patch
===================================================================
--- target/linux/lantiq/patches-3.3/0027-etop-without-uboot.patch       
(revision 0)
+++ target/linux/lantiq/patches-3.3/0027-etop-without-uboot.patch       
(working copy)
@@ -0,0 +1,43 @@
+Index: linux-3.3.8/drivers/net/ethernet/lantiq_etop.c
+===================================================================
+--- linux-3.3.8.orig/drivers/net/ethernet/lantiq_etop.c        2012-08-04 
23:21:41.040574994 +0200
++++ linux-3.3.8/drivers/net/ethernet/lantiq_etop.c     2012-08-04 
23:23:32.557037752 +0200
+@@ -44,6 +44,7 @@
+ #include <xway_dma.h>
+ #include <lantiq_platform.h>
+ 
++#define LTQ_ETOP_MDIO_CFG     0x11800
+ #define LTQ_ETOP_MDIO         0x11804
+ #define MDIO_REQUEST          0x80000000
+ #define MDIO_READ             0x40000000
+@@ -68,8 +69,8 @@
+ 
+ #define ETOP_FTCU             BIT(28)
+ #define ETOP_MII_MASK         0xf
+-#define ETOP_MII_NORMAL               0xd
+-#define ETOP_MII_REVERSE      0xe
++#define ETOP_MII_NORMAL               0x8
++#define ETOP_MII_REVERSE      0xa
+ #define ETOP_PLEN_UNDER               0x40
+ #define ETOP_CFG_MII0         0x01
+ 
+@@ -325,6 +326,10 @@
+ 
+       clk_enable(priv->clk_ppe);
+ 
++      /* From uboot-lantiq ifx_etop.c lq_eth_init_chip() */
++      ltq_etop_w32_mask(0x6, 0, LTQ_ETOP_MDIO_CFG);
++      ltq_etop_w32(0x187, LTQ_ETOP_MAC_CFG);
++
+       if (ltq_has_gbit()) {
+               ltq_etop_gbit_init(dev);
+               /* force the etops link to the gbit to MII */
+@@ -361,7 +366,7 @@
+       }
+ 
+       /* enable crc generation */
+-      ltq_etop_w32(ETOP_CGEN, LTQ_ETOP_MAC_CFG);
++      ltq_etop_w32_mask(ETOP_CGEN, ETOP_CGEN, LTQ_ETOP_MAC_CFG);
+ 
+       return 0;
+ }

-- 
Tobias                                          PGP: http://8ef7ddba.uguu.de
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to