[PATCH v6 2/7] reset: mchp: sparx5: Use the second reg item when cpu-syscon is not present

From: Herve Codina
Date: Mon Sep 30 2024 - 08:21:06 EST


In the LAN966x PCI device use case, syscon cannot be used as syscon
devices do not support removal [1]. A syscon device is a core "system"
device and not a device available in some addon boards and so, it is not
supposed to be removed.

In order to remove the syscon usage, use a local mapping of a reg
address range when cpu-syscon is not present.

Link: https://lore.kernel.org/all/20240923100741.11277439@xxxxxxxxxxx/ [1]
Signed-off-by: Herve Codina <herve.codina@xxxxxxxxxxx>
---
drivers/reset/reset-microchip-sparx5.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
index 636e85c388b0..1c095fa41d69 100644
--- a/drivers/reset/reset-microchip-sparx5.c
+++ b/drivers/reset/reset-microchip-sparx5.c
@@ -114,8 +114,22 @@ static int mchp_sparx5_reset_probe(struct platform_device *pdev)
return -ENOMEM;

err = mchp_sparx5_map_syscon(pdev, "cpu-syscon", &ctx->cpu_ctrl);
- if (err)
+ switch (err) {
+ case 0:
+ break;
+ case -ENODEV:
+ /*
+ * The cpu-syscon device is not available.
+ * Fall back with IO mapping (i.e. mapping from reg property).
+ */
+ err = mchp_sparx5_map_io(pdev, 1, &ctx->cpu_ctrl);
+ if (err)
+ return err;
+ break;
+ default:
return err;
+ }
+
err = mchp_sparx5_map_io(pdev, 0, &ctx->gcb_ctrl);
if (err)
return err;
--
2.46.1