Commit 9b1a6d36 authored by Peter Griffin's avatar Peter Griffin Committed by David S. Miller

stmmac: dwmac-sti: Pass sysconfig register offset via syscon dt property.

Based on Arnds review comments here https://lkml.org/lkml/2014/11/13/161,
we should not be mixing address spaces in the reg property like this driver
currently does. This patch updates the driver, dt docs and also the existing
dt nodes to pass the sysconfig offset in the syscon dt property.

This patch breaks DT compatibility! But this platform is considered WIP,
and is only used by a few developers who are upstreaming support for it.
This change has been done as a single atomic commit to ensure it is
bisectable.
Signed-off-by: default avatarPeter Griffin <peter.griffin@linaro.org>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 304a11e8
...@@ -9,14 +9,10 @@ The device node has following properties. ...@@ -9,14 +9,10 @@ The device node has following properties.
Required properties: Required properties:
- compatible : Can be "st,stih415-dwmac", "st,stih416-dwmac", - compatible : Can be "st,stih415-dwmac", "st,stih416-dwmac",
"st,stih407-dwmac", "st,stid127-dwmac". "st,stih407-dwmac", "st,stid127-dwmac".
- reg : Offset of the glue configuration register map in system - st,syscon : Should be phandle/offset pair. The phandle to the syscon node which
configuration regmap pointed by st,syscon property and size. encompases the glue register, and the offset of the control register.
- st,syscon : Should be phandle to system configuration node which
encompases this glue registers.
- st,gmac_en: this is to enable the gmac into a dedicated sysctl control - st,gmac_en: this is to enable the gmac into a dedicated sysctl control
register available on STiH407 SoC. register available on STiH407 SoC.
- sti-ethconf: this is the gmac glue logic register to enable the GMAC,
select among the different modes and program the clk retiming.
- pinctrl-0: pin-control for all the MII mode supported. - pinctrl-0: pin-control for all the MII mode supported.
Optional properties: Optional properties:
...@@ -40,10 +36,10 @@ ethernet0: dwmac@9630000 { ...@@ -40,10 +36,10 @@ ethernet0: dwmac@9630000 {
device_type = "network"; device_type = "network";
status = "disabled"; status = "disabled";
compatible = "st,stih407-dwmac", "snps,dwmac", "snps,dwmac-3.710"; compatible = "st,stih407-dwmac", "snps,dwmac", "snps,dwmac-3.710";
reg = <0x9630000 0x8000>, <0x80 0x4>; reg = <0x9630000 0x8000>;
reg-names = "stmmaceth", "sti-ethconf"; reg-names = "stmmaceth";
st,syscon = <&syscfg_sbc_reg>; st,syscon = <&syscfg_sbc_reg 0x80>;
st,gmac_en; st,gmac_en;
resets = <&softreset STIH407_ETH1_SOFTRESET>; resets = <&softreset STIH407_ETH1_SOFTRESET>;
reset-names = "stmmaceth"; reset-names = "stmmaceth";
......
...@@ -153,8 +153,8 @@ ethernet0: dwmac@fe810000 { ...@@ -153,8 +153,8 @@ ethernet0: dwmac@fe810000 {
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610"; compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
status = "disabled"; status = "disabled";
reg = <0xfe810000 0x8000>, <0x148 0x4>; reg = <0xfe810000 0x8000>;
reg-names = "stmmaceth", "sti-ethconf"; reg-names = "stmmaceth";
interrupts = <0 147 0>, <0 148 0>, <0 149 0>; interrupts = <0 147 0>, <0 148 0>, <0 149 0>;
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
...@@ -165,7 +165,7 @@ ethernet0: dwmac@fe810000 { ...@@ -165,7 +165,7 @@ ethernet0: dwmac@fe810000 {
snps,mixed-burst; snps,mixed-burst;
snps,force_sf_dma_mode; snps,force_sf_dma_mode;
st,syscon = <&syscfg_rear>; st,syscon = <&syscfg_rear 0x148>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_mii0>; pinctrl-0 = <&pinctrl_mii0>;
...@@ -177,8 +177,8 @@ ethernet1: dwmac@fef08000 { ...@@ -177,8 +177,8 @@ ethernet1: dwmac@fef08000 {
device_type = "network"; device_type = "network";
compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610"; compatible = "st,stih415-dwmac", "snps,dwmac", "snps,dwmac-3.610";
status = "disabled"; status = "disabled";
reg = <0xfef08000 0x8000>, <0x74 0x4>; reg = <0xfef08000 0x8000>;
reg-names = "stmmaceth", "sti-ethconf"; reg-names = "stmmaceth";
interrupts = <0 150 0>, <0 151 0>, <0 152 0>; interrupts = <0 150 0>, <0 151 0>, <0 152 0>;
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
...@@ -186,7 +186,7 @@ ethernet1: dwmac@fef08000 { ...@@ -186,7 +186,7 @@ ethernet1: dwmac@fef08000 {
snps,mixed-burst; snps,mixed-burst;
snps,force_sf_dma_mode; snps,force_sf_dma_mode;
st,syscon = <&syscfg_sbc>; st,syscon = <&syscfg_sbc 0x74>;
resets = <&softreset STIH415_ETH1_SOFTRESET>; resets = <&softreset STIH415_ETH1_SOFTRESET>;
reset-names = "stmmaceth"; reset-names = "stmmaceth";
......
...@@ -163,8 +163,8 @@ ethernet0: dwmac@fe810000 { ...@@ -163,8 +163,8 @@ ethernet0: dwmac@fe810000 {
device_type = "network"; device_type = "network";
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710"; compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
status = "disabled"; status = "disabled";
reg = <0xfe810000 0x8000>, <0x8bc 0x4>; reg = <0xfe810000 0x8000>;
reg-names = "stmmaceth", "sti-ethconf"; reg-names = "stmmaceth";
interrupts = <0 133 0>, <0 134 0>, <0 135 0>; interrupts = <0 133 0>, <0 134 0>, <0 135 0>;
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
...@@ -172,7 +172,7 @@ ethernet0: dwmac@fe810000 { ...@@ -172,7 +172,7 @@ ethernet0: dwmac@fe810000 {
snps,pbl = <32>; snps,pbl = <32>;
snps,mixed-burst; snps,mixed-burst;
st,syscon = <&syscfg_rear>; st,syscon = <&syscfg_rear 0x8bc>;
resets = <&softreset STIH416_ETH0_SOFTRESET>; resets = <&softreset STIH416_ETH0_SOFTRESET>;
reset-names = "stmmaceth"; reset-names = "stmmaceth";
pinctrl-names = "default"; pinctrl-names = "default";
...@@ -185,15 +185,15 @@ ethernet1: dwmac@fef08000 { ...@@ -185,15 +185,15 @@ ethernet1: dwmac@fef08000 {
device_type = "network"; device_type = "network";
compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710"; compatible = "st,stih416-dwmac", "snps,dwmac", "snps,dwmac-3.710";
status = "disabled"; status = "disabled";
reg = <0xfef08000 0x8000>, <0x7f0 0x4>; reg = <0xfef08000 0x8000>;
reg-names = "stmmaceth", "sti-ethconf"; reg-names = "stmmaceth";
interrupts = <0 136 0>, <0 137 0>, <0 138 0>; interrupts = <0 136 0>, <0 137 0>, <0 138 0>;
interrupt-names = "macirq", "eth_wake_irq", "eth_lpi"; interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
snps,pbl = <32>; snps,pbl = <32>;
snps,mixed-burst; snps,mixed-burst;
st,syscon = <&syscfg_sbc>; st,syscon = <&syscfg_sbc 0x7f0>;
resets = <&softreset STIH416_ETH1_SOFTRESET>; resets = <&softreset STIH416_ETH1_SOFTRESET>;
reset-names = "stmmaceth"; reset-names = "stmmaceth";
......
...@@ -122,7 +122,7 @@ struct sti_dwmac { ...@@ -122,7 +122,7 @@ struct sti_dwmac {
bool ext_phyclk; /* Clock from external PHY */ bool ext_phyclk; /* Clock from external PHY */
u32 tx_retime_src; /* TXCLK Retiming*/ u32 tx_retime_src; /* TXCLK Retiming*/
struct clk *clk; /* PHY clock */ struct clk *clk; /* PHY clock */
int ctrl_reg; /* GMAC glue-logic control register */ u32 ctrl_reg; /* GMAC glue-logic control register */
int clk_sel_reg; /* GMAC ext clk selection register */ int clk_sel_reg; /* GMAC ext clk selection register */
struct device *dev; struct device *dev;
struct regmap *regmap; struct regmap *regmap;
...@@ -285,11 +285,6 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac, ...@@ -285,11 +285,6 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
if (!np) if (!np)
return -EINVAL; return -EINVAL;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-ethconf");
if (!res)
return -ENODATA;
dwmac->ctrl_reg = res->start;
/* clk selection from extra syscfg register */ /* clk selection from extra syscfg register */
dwmac->clk_sel_reg = -ENXIO; dwmac->clk_sel_reg = -ENXIO;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-clkconf"); res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sti-clkconf");
...@@ -300,6 +295,12 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac, ...@@ -300,6 +295,12 @@ static int sti_dwmac_parse_data(struct sti_dwmac *dwmac,
if (IS_ERR(regmap)) if (IS_ERR(regmap))
return PTR_ERR(regmap); return PTR_ERR(regmap);
err = of_property_read_u32_index(np, "st,syscon", 1, &dwmac->ctrl_reg);
if (err) {
dev_err(dev, "Can't get sysconfig ctrl offset (%d)\n", err);
return err;
}
dwmac->dev = dev; dwmac->dev = dev;
dwmac->interface = of_get_phy_mode(np); dwmac->interface = of_get_phy_mode(np);
dwmac->regmap = regmap; dwmac->regmap = regmap;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment