40
40
#define GBE_MODULE_NAME "netcp-gbe"
41
41
#define GBE_SS_VERSION_14 0x4ed21104
42
42
43
+ #define GBE_SS_REG_INDEX 0
44
+ #define GBE_SGMII34_REG_INDEX 1
45
+ #define GBE_SM_REG_INDEX 2
46
+ /* offset relative to base of GBE_SS_REG_INDEX */
43
47
#define GBE13_SGMII_MODULE_OFFSET 0x100
44
- #define GBE13_SGMII34_MODULE_OFFSET 0x400
45
- #define GBE13_SWITCH_MODULE_OFFSET 0x800
46
- #define GBE13_HOST_PORT_OFFSET 0x834
47
- #define GBE13_SLAVE_PORT_OFFSET 0x860
48
- #define GBE13_EMAC_OFFSET 0x900
49
- #define GBE13_SLAVE_PORT2_OFFSET 0xa00
50
- #define GBE13_HW_STATS_OFFSET 0xb00
51
- #define GBE13_ALE_OFFSET 0xe00
48
+ /* offset relative to base of GBE_SM_REG_INDEX */
49
+ #define GBE13_HOST_PORT_OFFSET 0x34
50
+ #define GBE13_SLAVE_PORT_OFFSET 0x60
51
+ #define GBE13_EMAC_OFFSET 0x100
52
+ #define GBE13_SLAVE_PORT2_OFFSET 0x200
53
+ #define GBE13_HW_STATS_OFFSET 0x300
54
+ #define GBE13_ALE_OFFSET 0x600
52
55
#define GBE13_HOST_PORT_NUM 0
53
56
#define GBE13_NUM_SLAVES 4
54
57
#define GBE13_NUM_ALE_PORTS (GBE13_NUM_SLAVES + 1)
58
61
#define XGBE_MODULE_NAME "netcp-xgbe"
59
62
#define XGBE_SS_VERSION_10 0x4ee42100
60
63
61
- #define XGBE_SERDES_REG_INDEX 1
64
+ #define XGBE_SS_REG_INDEX 0
65
+ #define XGBE_SM_REG_INDEX 1
66
+ #define XGBE_SERDES_REG_INDEX 2
67
+
68
+ /* offset relative to base of XGBE_SS_REG_INDEX */
62
69
#define XGBE10_SGMII_MODULE_OFFSET 0x100
63
- #define XGBE10_SWITCH_MODULE_OFFSET 0x1000
64
- #define XGBE10_HOST_PORT_OFFSET 0x1034
65
- #define XGBE10_SLAVE_PORT_OFFSET 0x1064
66
- #define XGBE10_EMAC_OFFSET 0x1400
67
- #define XGBE10_ALE_OFFSET 0x1700
68
- #define XGBE10_HW_STATS_OFFSET 0x1800
70
+ /* offset relative to base of XGBE_SM_REG_INDEX */
71
+ #define XGBE10_HOST_PORT_OFFSET 0x34
72
+ #define XGBE10_SLAVE_PORT_OFFSET 0x64
73
+ #define XGBE10_EMAC_OFFSET 0x400
74
+ #define XGBE10_ALE_OFFSET 0x700
75
+ #define XGBE10_HW_STATS_OFFSET 0x800
69
76
#define XGBE10_HOST_PORT_NUM 0
70
77
#define XGBE10_NUM_SLAVES 2
71
78
#define XGBE10_NUM_ALE_PORTS (XGBE10_NUM_SLAVES + 1)
@@ -1579,9 +1586,9 @@ static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave,
1579
1586
else if (gbe_dev -> ss_version == XGBE_SS_VERSION_10 )
1580
1587
emac_reg_ofs = XGBE10_EMAC_OFFSET ;
1581
1588
1582
- slave -> port_regs = gbe_dev -> ss_regs + port_reg_ofs +
1589
+ slave -> port_regs = gbe_dev -> switch_regs + port_reg_ofs +
1583
1590
(0x30 * port_reg_num );
1584
- slave -> emac_regs = gbe_dev -> ss_regs + emac_reg_ofs +
1591
+ slave -> emac_regs = gbe_dev -> switch_regs + emac_reg_ofs +
1585
1592
(0x40 * slave -> slave_num );
1586
1593
1587
1594
if (gbe_dev -> ss_version == GBE_SS_VERSION_14 ) {
@@ -1732,22 +1739,39 @@ static int set_xgbe_ethss10_priv(struct gbe_priv *gbe_dev,
1732
1739
1733
1740
ret = of_address_to_resource (node , 0 , & res );
1734
1741
if (ret ) {
1735
- dev_err (gbe_dev -> dev , "Can't translate of node(%s) address for xgbe subsystem regs\n" ,
1736
- node -> name );
1742
+ dev_err (gbe_dev -> dev ,
1743
+ "Can't xlate xgbe of node(%s) ss address at %d\n" ,
1744
+ node -> name , XGBE_SS_REG_INDEX );
1737
1745
return ret ;
1738
1746
}
1739
1747
1740
1748
regs = devm_ioremap_resource (gbe_dev -> dev , & res );
1741
1749
if (IS_ERR (regs )) {
1742
- dev_err (gbe_dev -> dev , "Failed to map xgbe register base\n" );
1750
+ dev_err (gbe_dev -> dev , "Failed to map xgbe ss register base\n" );
1743
1751
return PTR_ERR (regs );
1744
1752
}
1745
1753
gbe_dev -> ss_regs = regs ;
1746
1754
1755
+ ret = of_address_to_resource (node , XGBE_SM_REG_INDEX , & res );
1756
+ if (ret ) {
1757
+ dev_err (gbe_dev -> dev ,
1758
+ "Can't xlate xgbe of node(%s) sm address at %d\n" ,
1759
+ node -> name , XGBE_SM_REG_INDEX );
1760
+ return ret ;
1761
+ }
1762
+
1763
+ regs = devm_ioremap_resource (gbe_dev -> dev , & res );
1764
+ if (IS_ERR (regs )) {
1765
+ dev_err (gbe_dev -> dev , "Failed to map xgbe sm register base\n" );
1766
+ return PTR_ERR (regs );
1767
+ }
1768
+ gbe_dev -> switch_regs = regs ;
1769
+
1747
1770
ret = of_address_to_resource (node , XGBE_SERDES_REG_INDEX , & res );
1748
1771
if (ret ) {
1749
- dev_err (gbe_dev -> dev , "Can't translate of node(%s) address for xgbe serdes regs\n" ,
1750
- node -> name );
1772
+ dev_err (gbe_dev -> dev ,
1773
+ "Can't xlate xgbe serdes of node(%s) address at %d\n" ,
1774
+ node -> name , XGBE_SERDES_REG_INDEX );
1751
1775
return ret ;
1752
1776
}
1753
1777
@@ -1770,11 +1794,10 @@ static int set_xgbe_ethss10_priv(struct gbe_priv *gbe_dev,
1770
1794
gbe_dev -> ss_version = XGBE_SS_VERSION_10 ;
1771
1795
gbe_dev -> sgmii_port_regs = gbe_dev -> ss_regs +
1772
1796
XGBE10_SGMII_MODULE_OFFSET ;
1773
- gbe_dev -> switch_regs = gbe_dev -> ss_regs + XGBE10_SWITCH_MODULE_OFFSET ;
1774
1797
gbe_dev -> host_port_regs = gbe_dev -> ss_regs + XGBE10_HOST_PORT_OFFSET ;
1775
1798
1776
1799
for (i = 0 ; i < XGBE10_NUM_HW_STATS_MOD ; i ++ )
1777
- gbe_dev -> hw_stats_regs [i ] = gbe_dev -> ss_regs +
1800
+ gbe_dev -> hw_stats_regs [i ] = gbe_dev -> switch_regs +
1778
1801
XGBE10_HW_STATS_OFFSET + (GBE_HW_STATS_REG_MAP_SZ * i );
1779
1802
1780
1803
gbe_dev -> ale_reg = gbe_dev -> ss_regs + XGBE10_ALE_OFFSET ;
@@ -1809,10 +1832,11 @@ static int get_gbe_resource_version(struct gbe_priv *gbe_dev,
1809
1832
void __iomem * regs ;
1810
1833
int ret ;
1811
1834
1812
- ret = of_address_to_resource (node , 0 , & res );
1835
+ ret = of_address_to_resource (node , GBE_SS_REG_INDEX , & res );
1813
1836
if (ret ) {
1814
- dev_err (gbe_dev -> dev , "Can't translate of node(%s) address\n" ,
1815
- node -> name );
1837
+ dev_err (gbe_dev -> dev ,
1838
+ "Can't translate of node(%s) of gbe ss address at %d\n" ,
1839
+ node -> name , GBE_SS_REG_INDEX );
1816
1840
return ret ;
1817
1841
}
1818
1842
@@ -1829,8 +1853,41 @@ static int get_gbe_resource_version(struct gbe_priv *gbe_dev,
1829
1853
static int set_gbe_ethss14_priv (struct gbe_priv * gbe_dev ,
1830
1854
struct device_node * node )
1831
1855
{
1856
+ struct resource res ;
1832
1857
void __iomem * regs ;
1833
- int i ;
1858
+ int i , ret ;
1859
+
1860
+ ret = of_address_to_resource (node , GBE_SGMII34_REG_INDEX , & res );
1861
+ if (ret ) {
1862
+ dev_err (gbe_dev -> dev ,
1863
+ "Can't translate of gbe node(%s) address at index %d\n" ,
1864
+ node -> name , GBE_SGMII34_REG_INDEX );
1865
+ return ret ;
1866
+ }
1867
+
1868
+ regs = devm_ioremap_resource (gbe_dev -> dev , & res );
1869
+ if (IS_ERR (regs )) {
1870
+ dev_err (gbe_dev -> dev ,
1871
+ "Failed to map gbe sgmii port34 register base\n" );
1872
+ return PTR_ERR (regs );
1873
+ }
1874
+ gbe_dev -> sgmii_port34_regs = regs ;
1875
+
1876
+ ret = of_address_to_resource (node , GBE_SM_REG_INDEX , & res );
1877
+ if (ret ) {
1878
+ dev_err (gbe_dev -> dev ,
1879
+ "Can't translate of gbe node(%s) address at index %d\n" ,
1880
+ node -> name , GBE_SM_REG_INDEX );
1881
+ return ret ;
1882
+ }
1883
+
1884
+ regs = devm_ioremap_resource (gbe_dev -> dev , & res );
1885
+ if (IS_ERR (regs )) {
1886
+ dev_err (gbe_dev -> dev ,
1887
+ "Failed to map gbe switch module register base\n" );
1888
+ return PTR_ERR (regs );
1889
+ }
1890
+ gbe_dev -> switch_regs = regs ;
1834
1891
1835
1892
gbe_dev -> hw_stats = devm_kzalloc (gbe_dev -> dev ,
1836
1893
GBE13_NUM_HW_STAT_ENTRIES *
@@ -1841,17 +1898,16 @@ static int set_gbe_ethss14_priv(struct gbe_priv *gbe_dev,
1841
1898
return - ENOMEM ;
1842
1899
}
1843
1900
1844
- regs = gbe_dev -> ss_regs ;
1845
- gbe_dev -> sgmii_port_regs = regs + GBE13_SGMII_MODULE_OFFSET ;
1846
- gbe_dev -> sgmii_port34_regs = regs + GBE13_SGMII34_MODULE_OFFSET ;
1847
- gbe_dev -> switch_regs = regs + GBE13_SWITCH_MODULE_OFFSET ;
1848
- gbe_dev -> host_port_regs = regs + GBE13_HOST_PORT_OFFSET ;
1901
+ gbe_dev -> sgmii_port_regs = gbe_dev -> ss_regs + GBE13_SGMII_MODULE_OFFSET ;
1902
+ gbe_dev -> host_port_regs = gbe_dev -> switch_regs + GBE13_HOST_PORT_OFFSET ;
1849
1903
1850
- for (i = 0 ; i < GBE13_NUM_HW_STATS_MOD ; i ++ )
1851
- gbe_dev -> hw_stats_regs [i ] = regs + GBE13_HW_STATS_OFFSET +
1852
- (GBE_HW_STATS_REG_MAP_SZ * i );
1904
+ for (i = 0 ; i < GBE13_NUM_HW_STATS_MOD ; i ++ ) {
1905
+ gbe_dev -> hw_stats_regs [i ] =
1906
+ gbe_dev -> switch_regs + GBE13_HW_STATS_OFFSET +
1907
+ (GBE_HW_STATS_REG_MAP_SZ * i );
1908
+ }
1853
1909
1854
- gbe_dev -> ale_reg = regs + GBE13_ALE_OFFSET ;
1910
+ gbe_dev -> ale_reg = gbe_dev -> switch_regs + GBE13_ALE_OFFSET ;
1855
1911
gbe_dev -> ale_ports = GBE13_NUM_ALE_PORTS ;
1856
1912
gbe_dev -> host_port = GBE13_HOST_PORT_NUM ;
1857
1913
gbe_dev -> ale_entries = GBE13_NUM_ALE_ENTRIES ;
0 commit comments