* [PATCH v3 0/3] Add reset deassertion for Aspeed MDIO
@ 2022-04-07 7:57 Dylan Hung
2022-04-07 7:57 ` [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Dylan Hung @ 2022-04-07 7:57 UTC (permalink / raw)
To: linux-aspeed
Add missing reset deassertion for Aspeed MDIO bus controller. The reset
is asserted by the hardware when power-on so the driver only needs to
deassert it. To be able to work with the old DT blobs, the reset is
optional since it may be deasserted by the bootloader or the previous
kernel.
V3:
- remove reset property from the required list of the device tree
bindings
- remove "Cc: stable at vger.kernel.org" from the commit messages
- add more description in the commit message of the dt-binding
V2:
- add reset property in the device tree bindings
- add reset assertion in the error path and driver remove
Dylan Hung (3):
dt-bindings: net: add reset property for aspeed, ast2600-mdio binding
net: mdio: add reset control for Aspeed MDIO
ARM: dts: aspeed: add reset properties into MDIO nodes
.../bindings/net/aspeed,ast2600-mdio.yaml | 5 +++++
arch/arm/boot/dts/aspeed-g6.dtsi | 4 ++++
drivers/net/mdio/mdio-aspeed.c | 15 ++++++++++++++-
3 files changed, 23 insertions(+), 1 deletion(-)
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding 2022-04-07 7:57 [PATCH v3 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung @ 2022-04-07 7:57 ` Dylan Hung 2022-04-11 0:15 ` Andrew Jeffery 2022-04-07 7:57 ` [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung 2022-04-07 7:57 ` [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung 2 siblings, 1 reply; 8+ messages in thread From: Dylan Hung @ 2022-04-07 7:57 UTC (permalink / raw) To: linux-aspeed The AST2600 MDIO bus controller has a reset control bit and must be deasserted before manipulating the MDIO controller. By default, the hardware asserts the reset so the driver only need to deassert it. Regarding to the old DT blobs which don't have reset property in them, the reset deassertion is usually done by the bootloader so the reset property is optional to work with them. Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> --- .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml index 1c88820cbcdf..7f43b4fe86a3 100644 --- a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml +++ b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml @@ -20,10 +20,14 @@ allOf: properties: compatible: const: aspeed,ast2600-mdio + reg: maxItems: 1 description: The register range of the MDIO controller instance + resets: + maxItems: 1 + required: - compatible - reg @@ -39,6 +43,7 @@ examples: reg = <0x1e650000 0x8>; #address-cells = <1>; #size-cells = <0>; + resets = <&syscon 35>; ethphy0: ethernet-phy at 0 { compatible = "ethernet-phy-ieee802.3-c22"; -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding 2022-04-07 7:57 ` [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung @ 2022-04-11 0:15 ` Andrew Jeffery 0 siblings, 0 replies; 8+ messages in thread From: Andrew Jeffery @ 2022-04-11 0:15 UTC (permalink / raw) To: linux-aspeed Hi Dylan, On Thu, 7 Apr 2022, at 17:27, Dylan Hung wrote: > The AST2600 MDIO bus controller has a reset control bit and must be > deasserted before manipulating the MDIO controller. By default, the > hardware asserts the reset so the driver only need to deassert it. > > Regarding to the old DT blobs which don't have reset property in them, > the reset deassertion is usually done by the bootloader so the reset > property is optional to work with them. > > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> > Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> > --- > .../devicetree/bindings/net/aspeed,ast2600-mdio.yaml | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git > a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml > b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml > index 1c88820cbcdf..7f43b4fe86a3 100644 > --- a/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml > +++ b/Documentation/devicetree/bindings/net/aspeed,ast2600-mdio.yaml > @@ -20,10 +20,14 @@ allOf: > properties: > compatible: > const: aspeed,ast2600-mdio > + > reg: > maxItems: 1 > description: The register range of the MDIO controller instance > > + resets: > + maxItems: 1 > + > required: > - compatible > - reg > @@ -39,6 +43,7 @@ examples: > reg = <0x1e650000 0x8>; > #address-cells = <1>; > #size-cells = <0>; > + resets = <&syscon 35>; This is just the example but we should probably have it do the canonical thing and use ASPEED_RESET_MII from include/dt-bindings/clock/ast2600-clock.h Andrew ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO 2022-04-07 7:57 [PATCH v3 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung 2022-04-07 7:57 ` [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung @ 2022-04-07 7:57 ` Dylan Hung 2022-04-11 0:20 ` Andrew Jeffery 2022-04-07 7:57 ` [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung 2 siblings, 1 reply; 8+ messages in thread From: Dylan Hung @ 2022-04-07 7:57 UTC (permalink / raw) To: linux-aspeed Add reset assertion/deassertion for Aspeed MDIO. There are 4 MDIO controllers embedded in Aspeed AST2600 SOC and share one reset control register SCU50[3]. To work with old DT blobs which don't have the reset property, devm_reset_control_get_optional_shared is used in this change. Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> --- drivers/net/mdio/mdio-aspeed.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio-aspeed.c index e2273588c75b..1afb58ccc524 100644 --- a/drivers/net/mdio/mdio-aspeed.c +++ b/drivers/net/mdio/mdio-aspeed.c @@ -3,6 +3,7 @@ #include <linux/bitfield.h> #include <linux/delay.h> +#include <linux/reset.h> #include <linux/iopoll.h> #include <linux/mdio.h> #include <linux/module.h> @@ -37,6 +38,7 @@ struct aspeed_mdio { void __iomem *base; + struct reset_control *reset; }; static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum) @@ -120,6 +122,12 @@ static int aspeed_mdio_probe(struct platform_device *pdev) if (IS_ERR(ctx->base)) return PTR_ERR(ctx->base); + ctx->reset = devm_reset_control_get_optional_shared(&pdev->dev, NULL); + if (IS_ERR(ctx->reset)) + return PTR_ERR(ctx->reset); + + reset_control_deassert(ctx->reset); + bus->name = DRV_NAME; snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id); bus->parent = &pdev->dev; @@ -129,6 +137,7 @@ static int aspeed_mdio_probe(struct platform_device *pdev) rc = of_mdiobus_register(bus, pdev->dev.of_node); if (rc) { dev_err(&pdev->dev, "Cannot register MDIO bus!\n"); + reset_control_assert(ctx->reset); return rc; } @@ -139,7 +148,11 @@ static int aspeed_mdio_probe(struct platform_device *pdev) static int aspeed_mdio_remove(struct platform_device *pdev) { - mdiobus_unregister(platform_get_drvdata(pdev)); + struct mii_bus *bus = (struct mii_bus *)platform_get_drvdata(pdev); + struct aspeed_mdio *ctx = bus->priv; + + reset_control_assert(ctx->reset); + mdiobus_unregister(bus); return 0; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO 2022-04-07 7:57 ` [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung @ 2022-04-11 0:20 ` Andrew Jeffery 2022-04-11 9:19 ` Philipp Zabel 0 siblings, 1 reply; 8+ messages in thread From: Andrew Jeffery @ 2022-04-11 0:20 UTC (permalink / raw) To: linux-aspeed On Thu, 7 Apr 2022, at 17:27, Dylan Hung wrote: > Add reset assertion/deassertion for Aspeed MDIO. There are 4 MDIO > controllers embedded in Aspeed AST2600 SOC and share one reset control > register SCU50[3]. To work with old DT blobs which don't have the reset > property, devm_reset_control_get_optional_shared is used in this change. > > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> > Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> > --- > drivers/net/mdio/mdio-aspeed.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio-aspeed.c > index e2273588c75b..1afb58ccc524 100644 > --- a/drivers/net/mdio/mdio-aspeed.c > +++ b/drivers/net/mdio/mdio-aspeed.c > @@ -3,6 +3,7 @@ > > #include <linux/bitfield.h> > #include <linux/delay.h> > +#include <linux/reset.h> > #include <linux/iopoll.h> > #include <linux/mdio.h> > #include <linux/module.h> > @@ -37,6 +38,7 @@ > > struct aspeed_mdio { > void __iomem *base; > + struct reset_control *reset; > }; > > static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum) > @@ -120,6 +122,12 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > if (IS_ERR(ctx->base)) > return PTR_ERR(ctx->base); > > + ctx->reset = devm_reset_control_get_optional_shared(&pdev->dev, NULL); > + if (IS_ERR(ctx->reset)) > + return PTR_ERR(ctx->reset); > + > + reset_control_deassert(ctx->reset); > + > bus->name = DRV_NAME; > snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id); > bus->parent = &pdev->dev; > @@ -129,6 +137,7 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > rc = of_mdiobus_register(bus, pdev->dev.of_node); > if (rc) { > dev_err(&pdev->dev, "Cannot register MDIO bus!\n"); > + reset_control_assert(ctx->reset); > return rc; > } > > @@ -139,7 +148,11 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > > static int aspeed_mdio_remove(struct platform_device *pdev) > { > - mdiobus_unregister(platform_get_drvdata(pdev)); > + struct mii_bus *bus = (struct mii_bus *)platform_get_drvdata(pdev); > + struct aspeed_mdio *ctx = bus->priv; > + > + reset_control_assert(ctx->reset); Isn't this unnecessary because you've used the devm_ variant to acquire the reset? Andrew ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO 2022-04-11 0:20 ` Andrew Jeffery @ 2022-04-11 9:19 ` Philipp Zabel 0 siblings, 0 replies; 8+ messages in thread From: Philipp Zabel @ 2022-04-11 9:19 UTC (permalink / raw) To: linux-aspeed On Mo, 2022-04-11 at 09:50 +0930, Andrew Jeffery wrote: > > On Thu, 7 Apr 2022, at 17:27, Dylan Hung wrote: > > Add reset assertion/deassertion for Aspeed MDIO. There are 4 MDIO > > controllers embedded in Aspeed AST2600 SOC and share one reset control > > register SCU50[3]. To work with old DT blobs which don't have the reset > > property, devm_reset_control_get_optional_shared is used in this change. > > > > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> > > Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> > > --- > > ?drivers/net/mdio/mdio-aspeed.c | 15 ++++++++++++++- > > ?1 file changed, 14 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/mdio/mdio-aspeed.c b/drivers/net/mdio/mdio-aspeed.c > > index e2273588c75b..1afb58ccc524 100644 > > --- a/drivers/net/mdio/mdio-aspeed.c > > +++ b/drivers/net/mdio/mdio-aspeed.c > > @@ -3,6 +3,7 @@ > > > > ?#include <linux/bitfield.h> > > ?#include <linux/delay.h> > > +#include <linux/reset.h> > > ?#include <linux/iopoll.h> > > ?#include <linux/mdio.h> > > ?#include <linux/module.h> > > @@ -37,6 +38,7 @@ > > > > ?struct aspeed_mdio { > > ? void __iomem *base; > > + struct reset_control *reset; > > ?}; > > > > ?static int aspeed_mdio_read(struct mii_bus *bus, int addr, int regnum) > > @@ -120,6 +122,12 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > > ? if (IS_ERR(ctx->base)) > > ? return PTR_ERR(ctx->base); > > > > + ctx->reset = devm_reset_control_get_optional_shared(&pdev->dev, NULL); > > + if (IS_ERR(ctx->reset)) > > + return PTR_ERR(ctx->reset); > > + > > + reset_control_deassert(ctx->reset); > > + > > ? bus->name = DRV_NAME; > > ? snprintf(bus->id, MII_BUS_ID_SIZE, "%s%d", pdev->name, pdev->id); > > ? bus->parent = &pdev->dev; > > @@ -129,6 +137,7 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > > ? rc = of_mdiobus_register(bus, pdev->dev.of_node); > > ? if (rc) { > > ? dev_err(&pdev->dev, "Cannot register MDIO bus!\n"); > > + reset_control_assert(ctx->reset); > > ? return rc; > > ? } > > > > @@ -139,7 +148,11 @@ static int aspeed_mdio_probe(struct platform_device *pdev) > > > > ?static int aspeed_mdio_remove(struct platform_device *pdev) > > ?{ > > - mdiobus_unregister(platform_get_drvdata(pdev)); > > + struct mii_bus *bus = (struct mii_bus *)platform_get_drvdata(pdev); > > + struct aspeed_mdio *ctx = bus->priv; > > + > > + reset_control_assert(ctx->reset); > > Isn't this unnecessary because you've used the devm_ variant to acquire > the reset? No, this is correct. deassert/assert needs to be balanced, and the reset_control_deassert() call in aspeed_mdio_probe() is not devres managed. regards Philipp ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes 2022-04-07 7:57 [PATCH v3 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung 2022-04-07 7:57 ` [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung 2022-04-07 7:57 ` [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung @ 2022-04-07 7:57 ` Dylan Hung 2022-04-11 0:20 ` Andrew Jeffery 2 siblings, 1 reply; 8+ messages in thread From: Dylan Hung @ 2022-04-07 7:57 UTC (permalink / raw) To: linux-aspeed Add reset control properties into MDIO nodes. The 4 MDIO controllers in AST2600 SOC share one reset control bit SCU50[3]. Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> --- arch/arm/boot/dts/aspeed-g6.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/boot/dts/aspeed-g6.dtsi b/arch/arm/boot/dts/aspeed-g6.dtsi index c32e87fad4dc..ab20ea8d829d 100644 --- a/arch/arm/boot/dts/aspeed-g6.dtsi +++ b/arch/arm/boot/dts/aspeed-g6.dtsi @@ -181,6 +181,7 @@ mdio0: mdio at 1e650000 { status = "disabled"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mdio1_default>; + resets = <&syscon ASPEED_RESET_MII>; }; mdio1: mdio at 1e650008 { @@ -191,6 +192,7 @@ mdio1: mdio at 1e650008 { status = "disabled"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mdio2_default>; + resets = <&syscon ASPEED_RESET_MII>; }; mdio2: mdio at 1e650010 { @@ -201,6 +203,7 @@ mdio2: mdio at 1e650010 { status = "disabled"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mdio3_default>; + resets = <&syscon ASPEED_RESET_MII>; }; mdio3: mdio at 1e650018 { @@ -211,6 +214,7 @@ mdio3: mdio at 1e650018 { status = "disabled"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mdio4_default>; + resets = <&syscon ASPEED_RESET_MII>; }; mac0: ftgmac at 1e660000 { -- 2.25.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes 2022-04-07 7:57 ` [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung @ 2022-04-11 0:20 ` Andrew Jeffery 0 siblings, 0 replies; 8+ messages in thread From: Andrew Jeffery @ 2022-04-11 0:20 UTC (permalink / raw) To: linux-aspeed On Thu, 7 Apr 2022, at 17:27, Dylan Hung wrote: > Add reset control properties into MDIO nodes. The 4 MDIO controllers in > AST2600 SOC share one reset control bit SCU50[3]. > > Signed-off-by: Dylan Hung <dylan_hung@aspeedtech.com> Reviewed-by: Andrew Jeffery <andrew@aj.id.au> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-04-11 9:19 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-07 7:57 [PATCH v3 0/3] Add reset deassertion for Aspeed MDIO Dylan Hung 2022-04-07 7:57 ` [PATCH RESEND v3 1/3] dt-bindings: net: add reset property for aspeed, ast2600-mdio binding Dylan Hung 2022-04-11 0:15 ` Andrew Jeffery 2022-04-07 7:57 ` [PATCH RESEND v3 2/3] net: mdio: add reset control for Aspeed MDIO Dylan Hung 2022-04-11 0:20 ` Andrew Jeffery 2022-04-11 9:19 ` Philipp Zabel 2022-04-07 7:57 ` [PATCH RESEND v3 3/3] ARM: dts: aspeed: add reset properties into MDIO nodes Dylan Hung 2022-04-11 0:20 ` Andrew Jeffery
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).