Inconsistent ETOP register offsets

The register offsets the lantiq etop driver is using are
inconsistent.  This is hidden when using uboot as it already sets up
ETOP and PHY once, but becomes an issue when booting using brnboot,
which does no network setup by itself.

The MAC_CFG register is missing the 0x10000 offset from PPE32_BASE.
ETOP_CFG and ETOP_IGPLEN seem to have had 0x602/0x608 shifted by 4 instead of 
multiplied by 4.

The following corrections are made:
LTQ_ETOP_CFG            0x16020 -> 0x11808
LTQ_ETOP_IGPLEN         0x16080 -> 0x11820
LQ_PPE32_ENET_MAC_CFG   0x1840  -> 0x11840

Also I took the liberty of renaming
LQ_PPE32_ENET_MAC_CFG to LTQ_ETOP_MAC_CFG for consistency.
 ^missing T?

The duplicate ETOP_CGEN define replaces PPE32_CGEN.

This patch could unearth further issues in the driver on devices using u-boot
for booting.  For my W502V an additional patch is needed to add initialization
that is normally done by u-boot.

For reference, see package/uboot-lantiq/files/drivers/net/ifx_etop.h (some 
register naming is slightly different, but you can see the off by 4 and missing 
offset of the etop driver compared to this include):

#define DANUBE_PPE32_BASE  0xBE180000
#define DANUBE_PPE32_DATA_MEM_MAP_REG_BASE   (DANUBE_PPE32_BASE + (0x4000 * 4))

#define ETOP_MDIO_CFG           ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0600 * 4)))
#define ETOP_MDIO_ACC           ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0601 * 4)))
#define ETOP_CFG                ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0602 * 4)))
#define ETOP_IG_VLAN_COS        ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0603 * 4)))
#define ETOP_IG_DSCP_COS3       ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0604 * 4)))
#define ETOP_IG_DSCP_COS2       ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0605 * 4)))
#define ETOP_IG_DSCP_COS1       ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0606 * 4)))
#define ETOP_IG_DSCP_COS0       ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0607 * 4)))
#define ETOP_IG_PLEN_CTRL       ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0608 * 4)))
#define ETOP_ISR                ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x060A * 4)))
#define ETOP_IER                ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x060B * 4)))
#define ETOP_VPID               ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x060C * 4)))
#define ENET_MAC_CFG            ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0610 * 4)))
#define ENETS_DBA               ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0612 * 4)))
#define ENETS_CBA               ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0613 * 4)))
#define ENETS_CFG               ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0614 * 4)))
#define ENETS_PGCNT             ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0615 * 4)))
#define ENETS_PKTCNT            ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0616 * 4)))
#define ENETS_BUF_CTRL          ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0617 * 4)))
#define ENETS_COS_CFG           ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0618 * 4)))
#define ENETS_IGDROP            ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x0619 * 4)))
#define ENETS_IGERR             ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x061A * 4)))
#define ENET_MAC_DA0            ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x061B * 4)))
#define ENET_MAC_DA1            ((volatile u32 
*)(DANUBE_PPE32_DATA_MEM_MAP_REG_BASE + (0x061C * 4)))


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


Index: target/linux/lantiq/patches-3.3/0026-etop-register-offsets.patch
===================================================================
--- target/linux/lantiq/patches-3.3/0026-etop-register-offsets.patch    
(revision 0)
+++ target/linux/lantiq/patches-3.3/0026-etop-register-offsets.patch    
(working copy)
@@ -0,0 +1,40 @@
+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 
22:56:06.719593549 +0200
++++ linux-3.3.8/drivers/net/ethernet/lantiq_etop.c     2012-08-04 
22:58:06.135766177 +0200
+@@ -53,14 +53,14 @@
+ #define MDIO_REG_OFFSET               0x10
+ #define MDIO_VAL_MASK         0xffff
+ 
+-#define PPE32_CGEN            0x800
+-#define LQ_PPE32_ENET_MAC_CFG 0x1840
++#define LTQ_ETOP_MAC_CFG      0x11840
++#define ETOP_CGEN             0x800
+ 
+ #define LTQ_ETOP_ENETS0               0x11850
+ #define LTQ_ETOP_MAC_DA0      0x1186C
+ #define LTQ_ETOP_MAC_DA1      0x11870
+-#define LTQ_ETOP_CFG          0x16020
+-#define LTQ_ETOP_IGPLEN               0x16080
++#define LTQ_ETOP_CFG          0x11808
++#define LTQ_ETOP_IGPLEN               0x11820
+ 
+ #define MAX_DMA_CHAN          0x8
+ #define MAX_DMA_CRC_LEN               0x4
+@@ -71,7 +71,6 @@
+ #define ETOP_MII_NORMAL               0xd
+ #define ETOP_MII_REVERSE      0xe
+ #define ETOP_PLEN_UNDER               0x40
+-#define ETOP_CGEN             0x800
+ #define ETOP_CFG_MII0         0x01
+ 
+ #define LTQ_GBIT_MDIO_CTL     0xCC
+@@ -362,7 +361,7 @@
+       }
+ 
+       /* enable crc generation */
+-      ltq_etop_w32(PPE32_CGEN, LQ_PPE32_ENET_MAC_CFG);
++      ltq_etop_w32(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