2021-10-08 11:44:54

by Horatiu Vultur

[permalink] [raw]
Subject: [PATCH 0/2] Extend Sparx5 switch reset driver for lan966x

This patch serie extends the Microchip Sparx5 reset driver to support
lan966x

Horatiu Vultur (2):
dt-bindings: reset: Add lan966x support
reset: mchp: sparx5: Extend support for lan966x

.../bindings/reset/microchip,rst.yaml | 10 ++-
drivers/reset/Kconfig | 2 +-
drivers/reset/reset-microchip-sparx5.c | 62 ++++++++++++++++---
3 files changed, 64 insertions(+), 10 deletions(-)

--
2.33.0


2021-10-08 11:45:52

by Horatiu Vultur

[permalink] [raw]
Subject: [PATCH 2/2] reset: mchp: sparx5: Extend support for lan966x

This patch extends sparx5 driver to support also the lan966x. The
process to reset the switch is the same only it has different offsets.
Therefore make the driver more generic and add support for lan966x.

Signed-off-by: Horatiu Vultur <[email protected]>
---
drivers/reset/Kconfig | 2 +-
drivers/reset/reset-microchip-sparx5.c | 62 ++++++++++++++++++++++----
2 files changed, 55 insertions(+), 9 deletions(-)

diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index be799a5abf8a..36ce6c8bcf1e 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -116,7 +116,7 @@ config RESET_LPC18XX

config RESET_MCHP_SPARX5
bool "Microchip Sparx5 reset driver"
- depends on ARCH_SPARX5 || COMPILE_TEST
+ depends on ARCH_SPARX5 || SOC_LAN966 || COMPILE_TEST
default y if SPARX5_SWITCH
select MFD_SYSCON
help
diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
index f01e7db8e83b..61897e23441e 100644
--- a/drivers/reset/reset-microchip-sparx5.c
+++ b/drivers/reset/reset-microchip-sparx5.c
@@ -13,15 +13,21 @@
#include <linux/regmap.h>
#include <linux/reset-controller.h>

-#define PROTECT_REG 0x84
-#define PROTECT_BIT BIT(10)
-#define SOFT_RESET_REG 0x00
-#define SOFT_RESET_BIT BIT(1)
+struct reset_props {
+ u32 protect_reg;
+ u32 protect_bit;
+ u32 reset_reg;
+ u32 reset_bit;
+ u32 cuphy_reg;
+ u32 cuphy_bit;
+};

struct mchp_reset_context {
struct regmap *cpu_ctrl;
struct regmap *gcb_ctrl;
+ struct regmap *cuphy_ctrl;
struct reset_controller_dev rcdev;
+ const struct reset_props *props;
};

static struct regmap_config sparx5_reset_regmap_config = {
@@ -36,17 +42,29 @@ static int sparx5_switch_reset(struct reset_controller_dev *rcdev,
struct mchp_reset_context *ctx =
container_of(rcdev, struct mchp_reset_context, rcdev);
u32 val;
+ int err;

/* Make sure the core is PROTECTED from reset */
- regmap_update_bits(ctx->cpu_ctrl, PROTECT_REG, PROTECT_BIT, PROTECT_BIT);
+ regmap_update_bits(ctx->cpu_ctrl, ctx->props->protect_reg,
+ ctx->props->protect_bit, ctx->props->protect_bit);

/* Start soft reset */
- regmap_write(ctx->gcb_ctrl, SOFT_RESET_REG, SOFT_RESET_BIT);
+ regmap_write(ctx->gcb_ctrl, ctx->props->reset_reg,
+ ctx->props->reset_bit);

/* Wait for soft reset done */
- return regmap_read_poll_timeout(ctx->gcb_ctrl, SOFT_RESET_REG, val,
- (val & SOFT_RESET_BIT) == 0,
+ err = regmap_read_poll_timeout(ctx->gcb_ctrl, ctx->props->reset_reg, val,
+ (val & ctx->props->reset_bit) == 0,
1, 100);
+ if (err)
+ return err;
+
+ if (!ctx->cuphy_ctrl)
+ return 0;
+
+ /* Release the reset of internal PHY */
+ return regmap_update_bits(ctx->cuphy_ctrl, ctx->props->cuphy_reg,
+ ctx->props->cuphy_bit, ctx->props->cuphy_bit);
}

static const struct reset_control_ops sparx5_reset_ops = {
@@ -111,17 +129,45 @@ static int mchp_sparx5_reset_probe(struct platform_device *pdev)
if (err)
return err;

+ /* This resource is required on lan966x, to take the internal PHYs out
+ * of reset
+ */
+ err = mchp_sparx5_map_syscon(pdev, "cuphy-syscon", &ctx->cuphy_ctrl);
+ if (err && err != -ENODEV)
+ return err;
+
ctx->rcdev.owner = THIS_MODULE;
ctx->rcdev.nr_resets = 1;
ctx->rcdev.ops = &sparx5_reset_ops;
ctx->rcdev.of_node = dn;
+ ctx->props = device_get_match_data(&pdev->dev);

return devm_reset_controller_register(&pdev->dev, &ctx->rcdev);
}

+static const struct reset_props reset_props_sparx5 = {
+ .protect_reg = 0x84,
+ .protect_bit = BIT(10),
+ .reset_reg = 0x0,
+ .reset_bit = BIT(1),
+};
+
+static const struct reset_props reset_props_lan966x = {
+ .protect_reg = 0x88,
+ .protect_bit = BIT(5),
+ .reset_reg = 0x0,
+ .reset_bit = BIT(1),
+ .cuphy_reg = 0x10,
+ .cuphy_bit = BIT(0),
+};
+
static const struct of_device_id mchp_sparx5_reset_of_match[] = {
{
.compatible = "microchip,sparx5-switch-reset",
+ .data = &reset_props_sparx5,
+ }, {
+ .compatible = "microchip,lan966x-switch-reset",
+ .data = &reset_props_lan966x,
},
{ }
};
--
2.33.0

2021-10-08 11:46:13

by Horatiu Vultur

[permalink] [raw]
Subject: [PATCH 1/2] dt-bindings: reset: Add lan966x support

This adds support for lan966x.

Signed-off-by: Horatiu Vultur <[email protected]>
---
.../devicetree/bindings/reset/microchip,rst.yaml | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/reset/microchip,rst.yaml b/Documentation/devicetree/bindings/reset/microchip,rst.yaml
index 370579aeeca1..ab7d9cb25b3f 100644
--- a/Documentation/devicetree/bindings/reset/microchip,rst.yaml
+++ b/Documentation/devicetree/bindings/reset/microchip,rst.yaml
@@ -20,7 +20,11 @@ properties:
pattern: "^reset-controller@[0-9a-f]+$"

compatible:
- const: microchip,sparx5-switch-reset
+ oneOf:
+ - items:
+ - const: microchip,sparx5-switch-reset
+ - items:
+ - const: microchip,lan966x-switch-reset

reg:
items:
@@ -37,6 +41,10 @@ properties:
$ref: "/schemas/types.yaml#/definitions/phandle"
description: syscon used to access CPU reset

+ cuphy-syscon:
+ $ref: "/schemas/types.yaml#/definitions/phandle"
+ description: syscon used to access CuPHY
+
required:
- compatible
- reg
--
2.33.0

2021-10-08 20:20:29

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH 2/2] reset: mchp: sparx5: Extend support for lan966x

On Fri, Oct 08, 2021 at 01:43:30PM +0200, Horatiu Vultur wrote:
> This patch extends sparx5 driver to support also the lan966x. The
> process to reset the switch is the same only it has different offsets.
> Therefore make the driver more generic and add support for lan966x.
>
> Signed-off-by: Horatiu Vultur <[email protected]>

Thanks for making it generic.

Reviewed-by: Andrew Lunn <[email protected]>

Andrew