[PATCH 01/10] pinctrl: imx: Push imx_pinctrl_ops into drivers and staticize

Move imx_pinctrl_ops into drivers and staticize. This is preparatory patch for follow up pinctrl drivers which will not use this variant of imx_pinctrl_ops content. This should not change size, as most of the deployments compiled in one pinctrl driver anyway. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 6 +----- drivers/pinctrl/nxp/pinctrl-imx.h | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx5.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx6.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx7.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx8.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx8m.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imx93.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-imxrt.c | 4 ++++ drivers/pinctrl/nxp/pinctrl-vf610.c | 4 ++++ 12 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 54cec37327c..3f055321c73 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -18,7 +18,7 @@
DECLARE_GLOBAL_DATA_PTR;
-static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) +int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) { struct imx_pinctrl_priv *priv = dev_get_priv(dev); struct imx_pinctrl_soc_info *info = priv->info; @@ -194,10 +194,6 @@ static int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) return 0; }
-const struct pinctrl_ops imx_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, -}; - int imx_pinctrl_probe(struct udevice *dev, struct imx_pinctrl_soc_info *info) { diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index fa4c084e2fc..02f05fdf20e 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -28,8 +28,6 @@ struct imx_pinctrl_priv { struct imx_pinctrl_soc_info *info; };
-extern const struct pinctrl_ops imx_pinctrl_ops; - #define IMX_NO_PAD_CTL 0x80000000 /* no pin config need */ #define IMX_PAD_SION 0x40000000 /* set SION */
@@ -54,6 +52,8 @@ int imx_pinctrl_probe(struct udevice *dev, struct imx_pinctrl_soc_info *info);
int imx_pinctrl_remove(struct udevice *dev);
+int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config); + #ifdef CONFIG_PINCTRL_IMX_SCU int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, u32 *pin_data, int npins); diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index 6b690fdce8f..c17d396d2b2 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -31,6 +31,10 @@ static const struct udevice_id imx5_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx5_pinctrl) = { .name = "imx5-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index 322eec87ff5..2d3d4ceaa2b 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -40,6 +40,10 @@ static const struct udevice_id imx6_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { .name = "fsl_imx6q_iomuxc", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index a8275e26456..2505f5df4a4 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -28,6 +28,10 @@ static const struct udevice_id imx7_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx7_pinctrl) = { .name = "imx7-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 7ea2dbe7d36..7d732f5a505 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -32,6 +32,10 @@ static const struct udevice_id imx7ulp_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx7ulp_pinctrl) = { .name = "imx7ulp-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index 4e9a9ea6808..930de19075a 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -29,6 +29,10 @@ static const struct udevice_id imx8_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx8_pinctrl) = { .name = "imx8_pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index 6ea66a080b2..d30a6eef351 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -26,6 +26,10 @@ static const struct udevice_id imx8m_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx8mq_pinctrl) = { .name = "imx8mq-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index 73d3c009d5b..0fb116a9893 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -31,6 +31,10 @@ static const struct udevice_id imx8ulp_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx8ulp_pinctrl) = { .name = "imx8ulp-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index 8d8ffec6d9a..2d027cd844e 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -26,6 +26,10 @@ static const struct udevice_id imx93_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imx93_pinctrl) = { .name = "imx93-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index 23f07f8d1e0..fdb3cbe8190 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -27,6 +27,10 @@ static const struct udevice_id imxrt_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(imxrt_pinctrl) = { .name = "imxrt-pinctrl", .id = UCLASS_PINCTRL, diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index adf3073f1be..86514ebdb20 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -27,6 +27,10 @@ static const struct udevice_id vf610_pinctrl_match[] = { { /* sentinel */ } };
+static const struct pinctrl_ops imx_pinctrl_ops = { + .set_state = imx_pinctrl_set_state, +}; + U_BOOT_DRIVER(vf610_pinctrl) = { .name = "vf610-pinctrl", .id = UCLASS_PINCTRL,

Rename the structure instances to match driver names, so they can be easily looked up e.g. in objdump and readelf outputs. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx5.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx6.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx7.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx8.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx8m.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imx93.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-imxrt.c | 4 ++-- drivers/pinctrl/nxp/pinctrl-vf610.c | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index c17d396d2b2..56f0e174888 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -31,7 +31,7 @@ static const struct udevice_id imx5_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx5_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -42,6 +42,6 @@ U_BOOT_DRIVER(imx5_pinctrl) = { .probe = imx5_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx5_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index 2d3d4ceaa2b..23b5566d358 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -40,7 +40,7 @@ static const struct udevice_id imx6_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx6_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -51,7 +51,7 @@ U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { .probe = imx6_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx6_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, };
diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index 2505f5df4a4..faccd2ef8aa 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -28,7 +28,7 @@ static const struct udevice_id imx7_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx7_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -39,6 +39,6 @@ U_BOOT_DRIVER(imx7_pinctrl) = { .probe = imx7_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx7_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 7d732f5a505..3288926ad9e 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -32,7 +32,7 @@ static const struct udevice_id imx7ulp_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx7ulp_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -43,6 +43,6 @@ U_BOOT_DRIVER(imx7ulp_pinctrl) = { .probe = imx7ulp_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx7ulp_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index 930de19075a..0afae31eb77 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -29,7 +29,7 @@ static const struct udevice_id imx8_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx8_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -40,6 +40,6 @@ U_BOOT_DRIVER(imx8_pinctrl) = { .probe = imx8_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx8_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index d30a6eef351..661e08cd1b7 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -26,7 +26,7 @@ static const struct udevice_id imx8m_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx8m_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -37,6 +37,6 @@ U_BOOT_DRIVER(imx8mq_pinctrl) = { .probe = imx8mq_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx8m_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index 0fb116a9893..40901f31752 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -31,7 +31,7 @@ static const struct udevice_id imx8ulp_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx8ulp_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -42,6 +42,6 @@ U_BOOT_DRIVER(imx8ulp_pinctrl) = { .probe = imx8ulp_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx8ulp_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index 2d027cd844e..4db224d32a4 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -26,7 +26,7 @@ static const struct udevice_id imx93_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imx93_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -37,6 +37,6 @@ U_BOOT_DRIVER(imx93_pinctrl) = { .probe = imx93_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imx93_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index fdb3cbe8190..4383015fb33 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -27,7 +27,7 @@ static const struct udevice_id imxrt_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops imxrt_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -38,6 +38,6 @@ U_BOOT_DRIVER(imxrt_pinctrl) = { .probe = imxrt_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &imxrt_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, }; diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index 86514ebdb20..0e17b8c9ff9 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -27,7 +27,7 @@ static const struct udevice_id vf610_pinctrl_match[] = { { /* sentinel */ } };
-static const struct pinctrl_ops imx_pinctrl_ops = { +static const struct pinctrl_ops vf610_pinctrl_ops = { .set_state = imx_pinctrl_set_state, };
@@ -38,6 +38,6 @@ U_BOOT_DRIVER(vf610_pinctrl) = { .probe = vf610_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), - .ops = &imx_pinctrl_ops, + .ops = &vf610_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, };

The return callback for SCU variant of the pinctrl drivers does nothing but returns 0. Remove the return callback from the SCU driver itself, that has the same effect. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 3 --- drivers/pinctrl/nxp/pinctrl-imx8.c | 1 - 2 files changed, 4 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 3f055321c73..3443cf459db 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -256,9 +256,6 @@ int imx_pinctrl_remove(struct udevice *dev) struct imx_pinctrl_priv *priv = dev_get_priv(dev); struct imx_pinctrl_soc_info *info = priv->info;
- if (info->flags & IMX8_USE_SCU) - return 0; - if (info->input_sel_base) unmap_sysmem(info->input_sel_base); if (info->base) diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index 0afae31eb77..85e5e5f5237 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -38,7 +38,6 @@ U_BOOT_DRIVER(imx8_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8_pinctrl_match), .probe = imx8_pinctrl_probe, - .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC,

The probe function is identical across all the pinctrl drivers. Inline the imx_pinctrl_soc_info access into imx_pinctrl_probe() and drop all the duplicate probe functions. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 5 +++-- drivers/pinctrl/nxp/pinctrl-imx.h | 2 +- drivers/pinctrl/nxp/pinctrl-imx5.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx6.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx7.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx8.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx8m.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imx93.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-imxrt.c | 10 +--------- drivers/pinctrl/nxp/pinctrl-vf610.c | 10 +--------- 12 files changed, 14 insertions(+), 93 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 3443cf459db..2d142c3a8a9 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -194,9 +194,10 @@ int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) return 0; }
-int imx_pinctrl_probe(struct udevice *dev, - struct imx_pinctrl_soc_info *info) +int imx_pinctrl_probe(struct udevice *dev) { + struct imx_pinctrl_soc_info *info = + (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); struct imx_pinctrl_priv *priv = dev_get_priv(dev); struct ofnode_phandle_args arg; ofnode node = dev_ofnode(dev); diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index 02f05fdf20e..b25f7988f46 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -48,7 +48,7 @@ struct imx_pinctrl_priv {
#define IOMUXC_CONFIG_SION (0x1 << 4)
-int imx_pinctrl_probe(struct udevice *dev, struct imx_pinctrl_soc_info *info); +int imx_pinctrl_probe(struct udevice *dev);
int imx_pinctrl_remove(struct udevice *dev);
diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index 56f0e174888..544c5093336 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -11,14 +11,6 @@
static struct imx_pinctrl_soc_info imx5_pinctrl_soc_info __section(".data");
-static int imx5_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx5_pinctrl_match[] = { { .compatible = "fsl,imx53-iomuxc", @@ -39,7 +31,7 @@ U_BOOT_DRIVER(imx5_pinctrl) = { .name = "imx5-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx5_pinctrl_match), - .probe = imx5_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx5_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index 23b5566d358..ae16ce73755 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -20,14 +20,6 @@ static struct imx_pinctrl_soc_info imx6_snvs_pinctrl_soc_info = { .flags = ZERO_OFFSET_VALID, };
-static int imx6_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx6_pinctrl_match[] = { { .compatible = "fsl,imx6q-iomuxc", .data = (ulong)&imx6_pinctrl_soc_info }, { .compatible = "fsl,imx6dl-iomuxc", .data = (ulong)&imx6_pinctrl_soc_info }, @@ -48,7 +40,7 @@ U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { .name = "fsl_imx6q_iomuxc", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx6_pinctrl_match), - .probe = imx6_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx6_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index faccd2ef8aa..87a35835566 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -14,14 +14,6 @@ static struct imx_pinctrl_soc_info imx7_lpsr_pinctrl_soc_info = { .flags = ZERO_OFFSET_VALID, };
-static int imx7_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx7_pinctrl_match[] = { { .compatible = "fsl,imx7d-iomuxc", .data = (ulong)&imx7_pinctrl_soc_info }, { .compatible = "fsl,imx7d-iomuxc-lpsr", .data = (ulong)&imx7_lpsr_pinctrl_soc_info }, @@ -36,7 +28,7 @@ U_BOOT_DRIVER(imx7_pinctrl) = { .name = "imx7-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7_pinctrl_match), - .probe = imx7_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 3288926ad9e..1f4fce455d6 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -18,14 +18,6 @@ static struct imx_pinctrl_soc_info imx7ulp_pinctrl_soc_info1 = { .flags = ZERO_OFFSET_VALID | SHARE_MUX_CONF_REG | CFG_IBE_OBE, };
-static int imx7ulp_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx7ulp_pinctrl_match[] = { { .compatible = "fsl,imx7ulp-iomuxc-0", .data = (ulong)&imx7ulp_pinctrl_soc_info0 }, { .compatible = "fsl,imx7ulp-iomuxc-1", .data = (ulong)&imx7ulp_pinctrl_soc_info1 }, @@ -40,7 +32,7 @@ U_BOOT_DRIVER(imx7ulp_pinctrl) = { .name = "imx7ulp-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7ulp_pinctrl_match), - .probe = imx7ulp_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7ulp_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index 85e5e5f5237..40976a9b588 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -15,14 +15,6 @@ static struct imx_pinctrl_soc_info imx8_pinctrl_soc_info = { .flags = IMX8_USE_SCU, };
-static int imx8_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx8_pinctrl_match[] = { { .compatible = "fsl,imx8qxp-iomuxc", .data = (ulong)&imx8_pinctrl_soc_info }, { .compatible = "fsl,imx8qm-iomuxc", .data = (ulong)&imx8_pinctrl_soc_info }, @@ -37,7 +29,7 @@ U_BOOT_DRIVER(imx8_pinctrl) = { .name = "imx8_pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8_pinctrl_match), - .probe = imx8_pinctrl_probe, + .probe = imx_pinctrl_probe, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index 661e08cd1b7..b1dabaaae7a 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -10,14 +10,6 @@
static struct imx_pinctrl_soc_info imx8mq_pinctrl_soc_info __section(".data");
-static int imx8mq_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx8m_pinctrl_match[] = { { .compatible = "fsl,imx8mq-iomuxc", .data = (ulong)&imx8mq_pinctrl_soc_info }, { .compatible = "fsl,imx8mm-iomuxc", .data = (ulong)&imx8mq_pinctrl_soc_info }, @@ -34,7 +26,7 @@ U_BOOT_DRIVER(imx8mq_pinctrl) = { .name = "imx8mq-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8m_pinctrl_match), - .probe = imx8mq_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8m_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index 40901f31752..e482ad5536d 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -17,14 +17,6 @@ static struct imx_pinctrl_soc_info imx8ulp_pinctrl_soc_info1 = { .flags = ZERO_OFFSET_VALID | SHARE_MUX_CONF_REG | CFG_IBE_OBE, };
-static int imx8ulp_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx8ulp_pinctrl_match[] = { { .compatible = "fsl,imx8ulp-iomuxc0", .data = (ulong)&imx8ulp_pinctrl_soc_info0 }, { .compatible = "fsl,imx8ulp-iomuxc1", .data = (ulong)&imx8ulp_pinctrl_soc_info1 }, @@ -39,7 +31,7 @@ U_BOOT_DRIVER(imx8ulp_pinctrl) = { .name = "imx8ulp-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8ulp_pinctrl_match), - .probe = imx8ulp_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8ulp_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index 4db224d32a4..d5736e21067 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -12,14 +12,6 @@ static struct imx_pinctrl_soc_info imx93_pinctrl_soc_info __section(".data") = { .flags = ZERO_OFFSET_VALID, };
-static int imx93_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imx93_pinctrl_match[] = { { .compatible = "fsl,imx93-iomuxc", .data = (ulong)&imx93_pinctrl_soc_info }, { .compatible = "fsl,imx91-iomuxc", .data = (ulong)&imx93_pinctrl_soc_info }, @@ -34,7 +26,7 @@ U_BOOT_DRIVER(imx93_pinctrl) = { .name = "imx93-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx93_pinctrl_match), - .probe = imx93_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx93_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index 4383015fb33..db523a9005a 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -13,14 +13,6 @@ static struct imx_pinctrl_soc_info imxrt_pinctrl_soc_info = { .flags = ZERO_OFFSET_VALID, };
-static int imxrt_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id imxrt_pinctrl_match[] = { { .compatible = "fsl,imxrt-iomuxc", .data = (ulong)&imxrt_pinctrl_soc_info }, @@ -35,7 +27,7 @@ U_BOOT_DRIVER(imxrt_pinctrl) = { .name = "imxrt-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imxrt_pinctrl_match), - .probe = imxrt_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imxrt_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index 0e17b8c9ff9..e56df6dde56 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -13,14 +13,6 @@ static struct imx_pinctrl_soc_info vf610_pinctrl_soc_info = { .flags = SHARE_MUX_CONF_REG | ZERO_OFFSET_VALID, };
-static int vf610_pinctrl_probe(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - - return imx_pinctrl_probe(dev, info); -} - static const struct udevice_id vf610_pinctrl_match[] = { { .compatible = "fsl,vf610-iomuxc", .data = (ulong)&vf610_pinctrl_soc_info }, @@ -35,7 +27,7 @@ U_BOOT_DRIVER(vf610_pinctrl) = { .name = "vf610-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(vf610_pinctrl_match), - .probe = vf610_pinctrl_probe, + .probe = imx_pinctrl_probe, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &vf610_pinctrl_ops,

Split imx_pinctrl_probe() into imx_pinctrl_probe_common() and imx_pinctrl_probe_mmio(). The former does the common setup, the later does the common setup and MMIO access configuration. The common setup can be used as-is for SCU based systems, update the pinctrl-imx8 to call only the common setup, update all the other pinctrl drivers to call imx_pinctrl_probe_mmio().
No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 26 ++++++++++++++++++-------- drivers/pinctrl/nxp/pinctrl-imx.h | 3 ++- drivers/pinctrl/nxp/pinctrl-imx5.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx6.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8m.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx93.c | 2 +- drivers/pinctrl/nxp/pinctrl-imxrt.c | 2 +- drivers/pinctrl/nxp/pinctrl-vf610.c | 2 +- 12 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 2d142c3a8a9..e65e069ac54 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -194,16 +194,11 @@ int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) return 0; }
-int imx_pinctrl_probe(struct udevice *dev) +int imx_pinctrl_probe_common(struct udevice *dev) { struct imx_pinctrl_soc_info *info = (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct ofnode_phandle_args arg; - ofnode node = dev_ofnode(dev); - fdt_addr_t addr; - fdt_size_t size; - int ret;
if (!info) { dev_err(dev, "wrong pinctrl info\n"); @@ -213,8 +208,23 @@ int imx_pinctrl_probe(struct udevice *dev) priv->dev = dev; priv->info = info;
- if (info->flags & IMX8_USE_SCU) - return 0; + return 0; +} + +int imx_pinctrl_probe_mmio(struct udevice *dev) +{ + struct imx_pinctrl_soc_info *info = + (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct ofnode_phandle_args arg; + ofnode node = dev_ofnode(dev); + fdt_addr_t addr; + fdt_size_t size; + int ret; + + ret = imx_pinctrl_probe_common(dev); + if (ret) + return ret;
addr = ofnode_get_addr_size_index(node, 0, &size); if (addr == FDT_ADDR_T_NONE) diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index b25f7988f46..b9d50c0542e 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -48,7 +48,8 @@ struct imx_pinctrl_priv {
#define IOMUXC_CONFIG_SION (0x1 << 4)
-int imx_pinctrl_probe(struct udevice *dev); +int imx_pinctrl_probe_common(struct udevice *dev); +int imx_pinctrl_probe_mmio(struct udevice *dev);
int imx_pinctrl_remove(struct udevice *dev);
diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index 544c5093336..814b088bdab 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -31,7 +31,7 @@ U_BOOT_DRIVER(imx5_pinctrl) = { .name = "imx5-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx5_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx5_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index ae16ce73755..495b6af79fb 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -40,7 +40,7 @@ U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { .name = "fsl_imx6q_iomuxc", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx6_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx6_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index 87a35835566..e1fa6d76a13 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -28,7 +28,7 @@ U_BOOT_DRIVER(imx7_pinctrl) = { .name = "imx7-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 1f4fce455d6..9ca8ef2130d 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -32,7 +32,7 @@ U_BOOT_DRIVER(imx7ulp_pinctrl) = { .name = "imx7ulp-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7ulp_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7ulp_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index 40976a9b588..a48e1b56df1 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -29,7 +29,7 @@ U_BOOT_DRIVER(imx8_pinctrl) = { .name = "imx8_pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_common, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index b1dabaaae7a..f69e6d74329 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -26,7 +26,7 @@ U_BOOT_DRIVER(imx8mq_pinctrl) = { .name = "imx8mq-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8m_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8m_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index e482ad5536d..fed16b565a5 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -31,7 +31,7 @@ U_BOOT_DRIVER(imx8ulp_pinctrl) = { .name = "imx8ulp-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8ulp_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8ulp_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index d5736e21067..8a58e586610 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -26,7 +26,7 @@ U_BOOT_DRIVER(imx93_pinctrl) = { .name = "imx93-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx93_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx93_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index db523a9005a..a8db355534c 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -27,7 +27,7 @@ U_BOOT_DRIVER(imxrt_pinctrl) = { .name = "imxrt-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imxrt_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imxrt_pinctrl_ops, diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index e56df6dde56..3c9396cadda 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -27,7 +27,7 @@ U_BOOT_DRIVER(vf610_pinctrl) = { .name = "vf610-pinctrl", .id = UCLASS_PINCTRL, .of_match = of_match_ptr(vf610_pinctrl_match), - .probe = imx_pinctrl_probe, + .probe = imx_pinctrl_probe_mmio, .remove = imx_pinctrl_remove, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &vf610_pinctrl_ops,

The current implementation of imx_pinctrl_remove() is specific to the MMIO accessor implementation, rename the function to imx_pinctrl_remove_mmio() to make this obvious. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx.h | 2 +- drivers/pinctrl/nxp/pinctrl-imx5.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx6.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8m.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx93.c | 2 +- drivers/pinctrl/nxp/pinctrl-imxrt.c | 2 +- drivers/pinctrl/nxp/pinctrl-vf610.c | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index e65e069ac54..26b990e6efd 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -262,7 +262,7 @@ int imx_pinctrl_probe_mmio(struct udevice *dev) return 0; }
-int imx_pinctrl_remove(struct udevice *dev) +int imx_pinctrl_remove_mmio(struct udevice *dev) { struct imx_pinctrl_priv *priv = dev_get_priv(dev); struct imx_pinctrl_soc_info *info = priv->info; diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index b9d50c0542e..e647a135ebd 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -51,7 +51,7 @@ struct imx_pinctrl_priv { int imx_pinctrl_probe_common(struct udevice *dev); int imx_pinctrl_probe_mmio(struct udevice *dev);
-int imx_pinctrl_remove(struct udevice *dev); +int imx_pinctrl_remove_mmio(struct udevice *dev);
int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config);
diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index 814b088bdab..f17fe2d1cc1 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -32,7 +32,7 @@ U_BOOT_DRIVER(imx5_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx5_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx5_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index 495b6af79fb..04ce1b49fe9 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -41,7 +41,7 @@ U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx6_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx6_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index e1fa6d76a13..7287c7f4812 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -29,7 +29,7 @@ U_BOOT_DRIVER(imx7_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 9ca8ef2130d..07bcef071ab 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -33,7 +33,7 @@ U_BOOT_DRIVER(imx7ulp_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx7ulp_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx7ulp_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index f69e6d74329..bfc32223034 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -27,7 +27,7 @@ U_BOOT_DRIVER(imx8mq_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8m_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8m_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index fed16b565a5..590aef8e491 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -32,7 +32,7 @@ U_BOOT_DRIVER(imx8ulp_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx8ulp_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx8ulp_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index 8a58e586610..8d631b4fb35 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -27,7 +27,7 @@ U_BOOT_DRIVER(imx93_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imx93_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imx93_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index a8db355534c..84ca93cb618 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -28,7 +28,7 @@ U_BOOT_DRIVER(imxrt_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(imxrt_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &imxrt_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC, diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index 3c9396cadda..44193ec5021 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -28,7 +28,7 @@ U_BOOT_DRIVER(vf610_pinctrl) = { .id = UCLASS_PINCTRL, .of_match = of_match_ptr(vf610_pinctrl_match), .probe = imx_pinctrl_probe_mmio, - .remove = imx_pinctrl_remove, + .remove = imx_pinctrl_remove_mmio, .priv_auto = sizeof(struct imx_pinctrl_priv), .ops = &vf610_pinctrl_ops, .flags = DM_FLAG_PRE_RELOC,

Split imx_pinctrl_set_state() into imx_pinctrl_set_state_common() and imx_pinctrl_set_state_mmio(). The former does the common configuration parsing, the later does call imx_pinctrl_set_state_common() and then does pin configuration using either SCU or MMIO accesses. The SCU part is going to be moved out in follow up patches.
This is a preparatory patch for follow up pinctrl drivers which do not use the MMIO accessors, but some other means, like SCU or otherwise. Those will call the common imx_pinctrl_set_state_common() function wrapped into some other imx_pinctrl_set_state_*() function, in a way similar to imx_pinctrl_set_state_mmio() does so for MMIO accesses.
Update all imx_pinctrl_set_state_mmio() call sites to call imx_pinctrl_set_state_mmio() instead.
No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 56 ++++++++++++++++----------- drivers/pinctrl/nxp/pinctrl-imx.h | 4 +- drivers/pinctrl/nxp/pinctrl-imx5.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx6.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx7ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8m.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx8ulp.c | 2 +- drivers/pinctrl/nxp/pinctrl-imx93.c | 2 +- drivers/pinctrl/nxp/pinctrl-imxrt.c | 2 +- drivers/pinctrl/nxp/pinctrl-vf610.c | 2 +- 12 files changed, 47 insertions(+), 33 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 26b990e6efd..be68894f749 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -18,28 +18,15 @@
DECLARE_GLOBAL_DATA_PTR;
-int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) +int imx_pinctrl_set_state_common(struct udevice *dev, struct udevice *config, + int pin_size, u32 **pin_data, int *npins) { - struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct imx_pinctrl_soc_info *info = priv->info; ofnode node = dev_ofnode(config); const struct fdt_property *prop; - u32 *pin_data; - int npins, size, pin_size; - int mux_reg, conf_reg, input_reg; - u32 input_val, mux_mode, config_val; - u32 mux_shift = info->mux_mask ? ffs(info->mux_mask) - 1 : 0; - int i, j = 0; + int size;
dev_dbg(dev, "%s: %s\n", __func__, config->name);
- if (info->flags & IMX8_USE_SCU) - pin_size = SHARE_IMX8_PIN_SIZE; - else if (info->flags & SHARE_MUX_CONF_REG) - pin_size = SHARE_FSL_PIN_SIZE; - else - pin_size = FSL_PIN_SIZE; - prop = ofnode_get_property(node, "fsl,pins", &size); if (!prop) { dev_err(dev, "No fsl,pins property in node %s\n", config->name); @@ -52,18 +39,43 @@ int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config) return -EINVAL; }
- pin_data = devm_kzalloc(dev, size, 0); - if (!pin_data) + *pin_data = devm_kzalloc(dev, size, 0); + if (!*pin_data) return -ENOMEM;
- if (ofnode_read_u32_array(node, "fsl,pins", - pin_data, size >> 2)) { + if (ofnode_read_u32_array(node, "fsl,pins", *pin_data, size >> 2)) { dev_err(dev, "Error reading pin data.\n"); - devm_kfree(dev, pin_data); + devm_kfree(dev, *pin_data); return -EINVAL; }
- npins = size / pin_size; + *npins = size / pin_size; + + return 0; +} + +int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config) +{ + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct imx_pinctrl_soc_info *info = priv->info; + u32 mux_shift = info->mux_mask ? ffs(info->mux_mask) - 1 : 0; + u32 input_val, mux_mode, config_val; + int mux_reg, conf_reg, input_reg; + int npins, pin_size; + int i, j = 0, ret; + u32 *pin_data; + + if (info->flags & IMX8_USE_SCU) + pin_size = SHARE_IMX8_PIN_SIZE; + else if (info->flags & SHARE_MUX_CONF_REG) + pin_size = SHARE_FSL_PIN_SIZE; + else + pin_size = FSL_PIN_SIZE; + + ret = imx_pinctrl_set_state_common(dev, config, pin_size, + &pin_data, &npins); + if (ret) + return ret;
if (info->flags & IMX8_USE_SCU) { imx_pinctrl_scu_conf_pins(info, pin_data, npins); diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index e647a135ebd..326d3f720e4 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -53,7 +53,9 @@ int imx_pinctrl_probe_mmio(struct udevice *dev);
int imx_pinctrl_remove_mmio(struct udevice *dev);
-int imx_pinctrl_set_state(struct udevice *dev, struct udevice *config); +int imx_pinctrl_set_state_common(struct udevice *dev, struct udevice *config, + int pin_size, u32 **pin_data, int *npins); +int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config);
#ifdef CONFIG_PINCTRL_IMX_SCU int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, diff --git a/drivers/pinctrl/nxp/pinctrl-imx5.c b/drivers/pinctrl/nxp/pinctrl-imx5.c index f17fe2d1cc1..af853bea180 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx5.c +++ b/drivers/pinctrl/nxp/pinctrl-imx5.c @@ -24,7 +24,7 @@ static const struct udevice_id imx5_pinctrl_match[] = { };
static const struct pinctrl_ops imx5_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx5_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx6.c b/drivers/pinctrl/nxp/pinctrl-imx6.c index 04ce1b49fe9..5c6aac56eb7 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx6.c +++ b/drivers/pinctrl/nxp/pinctrl-imx6.c @@ -33,7 +33,7 @@ static const struct udevice_id imx6_pinctrl_match[] = { };
static const struct pinctrl_ops imx6_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(fsl_imx6q_iomuxc) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx7.c b/drivers/pinctrl/nxp/pinctrl-imx7.c index 7287c7f4812..14c3d4d4e77 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7.c @@ -21,7 +21,7 @@ static const struct udevice_id imx7_pinctrl_match[] = { };
static const struct pinctrl_ops imx7_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx7_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c index 07bcef071ab..400e1266822 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx7ulp.c @@ -25,7 +25,7 @@ static const struct udevice_id imx7ulp_pinctrl_match[] = { };
static const struct pinctrl_ops imx7ulp_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx7ulp_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index a48e1b56df1..b6acc19ef8b 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -22,7 +22,7 @@ static const struct udevice_id imx8_pinctrl_match[] = { };
static const struct pinctrl_ops imx8_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx8_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx8m.c b/drivers/pinctrl/nxp/pinctrl-imx8m.c index bfc32223034..d9c63b3aca6 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8m.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8m.c @@ -19,7 +19,7 @@ static const struct udevice_id imx8m_pinctrl_match[] = { };
static const struct pinctrl_ops imx8m_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx8mq_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c index 590aef8e491..2df63625191 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8ulp.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8ulp.c @@ -24,7 +24,7 @@ static const struct udevice_id imx8ulp_pinctrl_match[] = { };
static const struct pinctrl_ops imx8ulp_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx8ulp_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imx93.c b/drivers/pinctrl/nxp/pinctrl-imx93.c index 8d631b4fb35..5d250db1081 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx93.c +++ b/drivers/pinctrl/nxp/pinctrl-imx93.c @@ -19,7 +19,7 @@ static const struct udevice_id imx93_pinctrl_match[] = { };
static const struct pinctrl_ops imx93_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imx93_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-imxrt.c b/drivers/pinctrl/nxp/pinctrl-imxrt.c index 84ca93cb618..39000ceb923 100644 --- a/drivers/pinctrl/nxp/pinctrl-imxrt.c +++ b/drivers/pinctrl/nxp/pinctrl-imxrt.c @@ -20,7 +20,7 @@ static const struct udevice_id imxrt_pinctrl_match[] = { };
static const struct pinctrl_ops imxrt_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(imxrt_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-vf610.c b/drivers/pinctrl/nxp/pinctrl-vf610.c index 44193ec5021..cbff8dcefd8 100644 --- a/drivers/pinctrl/nxp/pinctrl-vf610.c +++ b/drivers/pinctrl/nxp/pinctrl-vf610.c @@ -20,7 +20,7 @@ static const struct udevice_id vf610_pinctrl_match[] = { };
static const struct pinctrl_ops vf610_pinctrl_ops = { - .set_state = imx_pinctrl_set_state, + .set_state = imx_pinctrl_set_state_mmio, };
U_BOOT_DRIVER(vf610_pinctrl) = {

Call imx_pinctrl_set_state_common() from imx_pinctrl_scu_conf_pins(), rename imx_pinctrl_scu_conf_pins() to imx_pinctrl_set_state_scu(). Get rid of the unnecessary ifdeffery in pinctrl-imx.h in the process. Remove all SCU support from pinctrl-imx.c imx_pinctrl_set_state_mmio() which makes that function a pure MMIO pinctrl configuration accessor. Update pinctrl-imx8.c to call imx_pinctrl_set_state_scu directly.
No functional change.
This patch is best viewed with git show -w due to indent change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/pinctrl-imx.c | 212 ++++++++++++++--------------- drivers/pinctrl/nxp/pinctrl-imx.h | 12 +- drivers/pinctrl/nxp/pinctrl-imx8.c | 2 +- drivers/pinctrl/nxp/pinctrl-scu.c | 13 +- 4 files changed, 115 insertions(+), 124 deletions(-)
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index be68894f749..00637e7f54b 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -65,9 +65,7 @@ int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config) int i, j = 0, ret; u32 *pin_data;
- if (info->flags & IMX8_USE_SCU) - pin_size = SHARE_IMX8_PIN_SIZE; - else if (info->flags & SHARE_MUX_CONF_REG) + if (info->flags & SHARE_MUX_CONF_REG) pin_size = SHARE_FSL_PIN_SIZE; else pin_size = FSL_PIN_SIZE; @@ -77,127 +75,121 @@ int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config) if (ret) return ret;
- if (info->flags & IMX8_USE_SCU) { - imx_pinctrl_scu_conf_pins(info, pin_data, npins); - } else { - /* - * Refer to linux documentation for details: - * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt - */ - for (i = 0; i < npins; i++) { - mux_reg = pin_data[j++]; - - if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) - mux_reg = -1; + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt + */ + for (i = 0; i < npins; i++) { + mux_reg = pin_data[j++]; + + if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) + mux_reg = -1; + + if (info->flags & SHARE_MUX_CONF_REG) { + conf_reg = mux_reg; + } else { + conf_reg = pin_data[j++]; + if (!(info->flags & ZERO_OFFSET_VALID) && + !conf_reg) + conf_reg = -1; + }
- if (info->flags & SHARE_MUX_CONF_REG) { - conf_reg = mux_reg; - } else { - conf_reg = pin_data[j++]; - if (!(info->flags & ZERO_OFFSET_VALID) && - !conf_reg) - conf_reg = -1; - } + if ((mux_reg == -1) || (conf_reg == -1)) { + dev_err(dev, "Error mux_reg or conf_reg\n"); + devm_kfree(dev, pin_data); + return -EINVAL; + }
- if ((mux_reg == -1) || (conf_reg == -1)) { - dev_err(dev, "Error mux_reg or conf_reg\n"); - devm_kfree(dev, pin_data); - return -EINVAL; - } + input_reg = pin_data[j++]; + mux_mode = pin_data[j++]; + input_val = pin_data[j++]; + config_val = pin_data[j++];
- input_reg = pin_data[j++]; - mux_mode = pin_data[j++]; - input_val = pin_data[j++]; - config_val = pin_data[j++]; + dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, input_reg 0x%x, mux_mode 0x%x, input_val 0x%x, config_val 0x%x\n", + mux_reg, conf_reg, input_reg, mux_mode, + input_val, config_val);
- dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, " - "input_reg 0x%x, mux_mode 0x%x, " - "input_val 0x%x, config_val 0x%x\n", - mux_reg, conf_reg, input_reg, mux_mode, - input_val, config_val); + if (config_val & IMX_PAD_SION) + mux_mode |= IOMUXC_CONFIG_SION;
- if (config_val & IMX_PAD_SION) - mux_mode |= IOMUXC_CONFIG_SION; + config_val &= ~IMX_PAD_SION;
- config_val &= ~IMX_PAD_SION; + /* Set Mux */ + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + mux_reg, + info->mux_mask, + mux_mode << mux_shift); + } else { + writel(mux_mode, info->base + mux_reg); + }
- /* Set Mux */ - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + mux_reg, - info->mux_mask, - mux_mode << mux_shift); - } else { - writel(mux_mode, info->base + mux_reg); - } + dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", + mux_reg, mux_mode);
- dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", - mux_reg, mux_mode); + /* + * Set select input + * + * If the select input value begins with 0xff, + * it's a quirky select input and the value should + * be interpreted as below. + * 31 23 15 7 0 + * | 0xff | shift | width | select | + * It's used to work around the problem that the + * select input for some pin is not implemented in + * the select input register but in some general + * purpose register. We encode the select input + * value, width and shift of the bit field into + * input_val cell of pin function ID in device tree, + * and then decode them here for setting up the select + * input bits in general purpose register. + */
+ if (input_val >> 24 == 0xff) { + u32 val = input_val; + u8 select = val & 0xff; + u8 width = (val >> 8) & 0xff; + u8 shift = (val >> 16) & 0xff; + u32 mask = ((1 << width) - 1) << shift; /* - * Set select input - * - * If the select input value begins with 0xff, - * it's a quirky select input and the value should - * be interpreted as below. - * 31 23 15 7 0 - * | 0xff | shift | width | select | - * It's used to work around the problem that the - * select input for some pin is not implemented in - * the select input register but in some general - * purpose register. We encode the select input - * value, width and shift of the bit field into - * input_val cell of pin function ID in device tree, - * and then decode them here for setting up the select - * input bits in general purpose register. + * The input_reg[i] here is actually some + * IOMUXC general purpose register, not + * regular select input register. */ + val = readl(info->base + input_reg); + val &= ~mask; + val |= select << shift; + writel(val, info->base + input_reg); + } else if (input_reg) { + /* + * Regular select input register can never be + * at offset 0, and we only print register + * value for regular case. + */ + if (info->input_sel_base) + writel(input_val, + info->input_sel_base + + input_reg); + else + writel(input_val, + info->base + input_reg); + + dev_dbg(dev, "select_input: offset 0x%x val 0x%x\n", + input_reg, input_val); + }
- if (input_val >> 24 == 0xff) { - u32 val = input_val; - u8 select = val & 0xff; - u8 width = (val >> 8) & 0xff; - u8 shift = (val >> 16) & 0xff; - u32 mask = ((1 << width) - 1) << shift; - /* - * The input_reg[i] here is actually some - * IOMUXC general purpose register, not - * regular select input register. - */ - val = readl(info->base + input_reg); - val &= ~mask; - val |= select << shift; - writel(val, info->base + input_reg); - } else if (input_reg) { - /* - * Regular select input register can never be - * at offset 0, and we only print register - * value for regular case. - */ - if (info->input_sel_base) - writel(input_val, - info->input_sel_base + - input_reg); - else - writel(input_val, - info->base + input_reg); - - dev_dbg(dev, "select_input: offset 0x%x val " - "0x%x\n", input_reg, input_val); + /* Set config */ + if (!(config_val & IMX_NO_PAD_CTL)) { + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + conf_reg, + ~info->mux_mask, + config_val); + } else { + writel(config_val, + info->base + conf_reg); }
- /* Set config */ - if (!(config_val & IMX_NO_PAD_CTL)) { - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + conf_reg, - ~info->mux_mask, - config_val); - } else { - writel(config_val, - info->base + conf_reg); - } - - dev_dbg(dev, "write config: offset 0x%x val " - "0x%x\n", conf_reg, config_val); - } + dev_dbg(dev, "write config: offset 0x%x val 0x%x\n", + conf_reg, config_val); } }
diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index 326d3f720e4..94ecf1ba6b5 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -56,16 +56,6 @@ int imx_pinctrl_remove_mmio(struct udevice *dev); int imx_pinctrl_set_state_common(struct udevice *dev, struct udevice *config, int pin_size, u32 **pin_data, int *npins); int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config); - -#ifdef CONFIG_PINCTRL_IMX_SCU -int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, - u32 *pin_data, int npins); -#else -static inline int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, - u32 *pin_data, int npins) -{ - return 0; -} -#endif +int imx_pinctrl_set_state_scu(struct udevice *dev, struct udevice *config);
#endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index b6acc19ef8b..dcf778d123f 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -22,7 +22,7 @@ static const struct udevice_id imx8_pinctrl_match[] = { };
static const struct pinctrl_ops imx8_pinctrl_ops = { - .set_state = imx_pinctrl_set_state_mmio, + .set_state = imx_pinctrl_set_state_scu, };
U_BOOT_DRIVER(imx8_pinctrl) = { diff --git a/drivers/pinctrl/nxp/pinctrl-scu.c b/drivers/pinctrl/nxp/pinctrl-scu.c index 42d5c96468c..3f47dde7e78 100644 --- a/drivers/pinctrl/nxp/pinctrl-scu.c +++ b/drivers/pinctrl/nxp/pinctrl-scu.c @@ -3,6 +3,7 @@ * Copyright 2018-2019 NXP */
+#include <dm.h> #include <errno.h> #include <linux/bitops.h> #include <asm/io.h> @@ -44,13 +45,21 @@ static int imx_pinconf_scu_set(struct imx_pinctrl_soc_info *info, u32 pad, return 0; }
-int imx_pinctrl_scu_conf_pins(struct imx_pinctrl_soc_info *info, u32 *pin_data, - int npins) +int imx_pinctrl_set_state_scu(struct udevice *dev, struct udevice *config) { + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct imx_pinctrl_soc_info *info = priv->info; int pin_id, mux, config_val; + u32 *pin_data; int i, j = 0; + int npins; int ret;
+ ret = imx_pinctrl_set_state_common(dev, config, SHARE_IMX8_PIN_SIZE, + &pin_data, &npins); + if (ret) + return ret; + /* * Refer to linux documentation for details: * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt

The only user of the SCU pinctrl code is pinctrl-imx8.c , fold the entire pinctrl-scu.c code into pinctrl-imx8.c and remove the matching Kconfig symbols and Makefile entries. No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/Kconfig | 4 -- drivers/pinctrl/nxp/Makefile | 1 - drivers/pinctrl/nxp/pinctrl-imx.h | 1 - drivers/pinctrl/nxp/pinctrl-imx8.c | 71 +++++++++++++++++++++++++++ drivers/pinctrl/nxp/pinctrl-scu.c | 79 ------------------------------ 5 files changed, 71 insertions(+), 85 deletions(-) delete mode 100644 drivers/pinctrl/nxp/pinctrl-scu.c
diff --git a/drivers/pinctrl/nxp/Kconfig b/drivers/pinctrl/nxp/Kconfig index 06c26f156f6..e2fc121ae75 100644 --- a/drivers/pinctrl/nxp/Kconfig +++ b/drivers/pinctrl/nxp/Kconfig @@ -1,9 +1,6 @@ config PINCTRL_IMX bool
-config PINCTRL_IMX_SCU - bool - config PINCTRL_IMX5 bool "IMX5 pinctrl driver" depends on ARCH_MX5 && PINCTRL_FULL @@ -79,7 +76,6 @@ config PINCTRL_IMX8 depends on ARCH_IMX8 && PINCTRL_FULL select DEVRES select PINCTRL_IMX - select PINCTRL_IMX_SCU help Say Y here to enable the imx8 pinctrl driver
diff --git a/drivers/pinctrl/nxp/Makefile b/drivers/pinctrl/nxp/Makefile index f10aa6ef188..c82275a2e93 100644 --- a/drivers/pinctrl/nxp/Makefile +++ b/drivers/pinctrl/nxp/Makefile @@ -4,7 +4,6 @@ obj-$(CONFIG_PINCTRL_IMX6) += pinctrl-imx6.o obj-$(CONFIG_PINCTRL_IMX7) += pinctrl-imx7.o obj-$(CONFIG_PINCTRL_IMX7ULP) += pinctrl-imx7ulp.o obj-$(CONFIG_PINCTRL_IMX8ULP) += pinctrl-imx8ulp.o -obj-$(CONFIG_PINCTRL_IMX_SCU) += pinctrl-scu.o obj-$(CONFIG_PINCTRL_IMX8) += pinctrl-imx8.o obj-$(CONFIG_PINCTRL_IMX8M) += pinctrl-imx8m.o obj-$(CONFIG_PINCTRL_IMX93) += pinctrl-imx93.o diff --git a/drivers/pinctrl/nxp/pinctrl-imx.h b/drivers/pinctrl/nxp/pinctrl-imx.h index 94ecf1ba6b5..9adf999d3bb 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.h +++ b/drivers/pinctrl/nxp/pinctrl-imx.h @@ -56,6 +56,5 @@ int imx_pinctrl_remove_mmio(struct udevice *dev); int imx_pinctrl_set_state_common(struct udevice *dev, struct udevice *config, int pin_size, u32 **pin_data, int *npins); int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config); -int imx_pinctrl_set_state_scu(struct udevice *dev, struct udevice *config);
#endif /* __DRIVERS_PINCTRL_IMX_H */ diff --git a/drivers/pinctrl/nxp/pinctrl-imx8.c b/drivers/pinctrl/nxp/pinctrl-imx8.c index dcf778d123f..9b3b5aec07a 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx8.c +++ b/drivers/pinctrl/nxp/pinctrl-imx8.c @@ -3,6 +3,12 @@ * Copyright 2018 NXP */
+#include <dm.h> +#include <errno.h> +#include <linux/bitops.h> +#include <asm/io.h> +#include <firmware/imx/sci/sci.h> +#include <misc.h> #include <asm/global_data.h> #include <dm/device.h> #include <dm/pinctrl.h> @@ -11,6 +17,71 @@
DECLARE_GLOBAL_DATA_PTR;
+#define PADRING_IFMUX_EN_SHIFT 31 +#define PADRING_IFMUX_EN_MASK BIT(31) +#define PADRING_GP_EN_SHIFT 30 +#define PADRING_GP_EN_MASK BIT(30) +#define PADRING_IFMUX_SHIFT 27 +#define PADRING_IFMUX_MASK GENMASK(29, 27) + +static int imx_pinconf_scu_set(struct imx_pinctrl_soc_info *info, u32 pad, + u32 mux, u32 val) +{ + int ret; + + /* + * Mux should be done in pmx set, but we do not have a good api + * to handle that in scfw, so config it in pad conf func + */ + + if (!sc_rm_is_pad_owned(-1, pad)) { + debug("Pad[%u] is not owned by curr partition\n", pad); + return -EPERM; + } + + val |= PADRING_IFMUX_EN_MASK; + val |= PADRING_GP_EN_MASK; + val |= (mux << PADRING_IFMUX_SHIFT) & PADRING_IFMUX_MASK; + + ret = sc_pad_set(-1, pad, val); + if (ret) + printf("%s %d\n", __func__, ret); + + return 0; +} + +int imx_pinctrl_set_state_scu(struct udevice *dev, struct udevice *config) +{ + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct imx_pinctrl_soc_info *info = priv->info; + int pin_id, mux, config_val; + u32 *pin_data; + int i, j = 0; + int npins; + int ret; + + ret = imx_pinctrl_set_state_common(dev, config, SHARE_IMX8_PIN_SIZE, + &pin_data, &npins); + if (ret) + return ret; + + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt + */ + for (i = 0; i < npins; i++) { + pin_id = pin_data[j++]; + mux = pin_data[j++]; + config_val = pin_data[j++]; + + ret = imx_pinconf_scu_set(info, pin_id, mux, config_val); + if (ret && ret != -EPERM) + printf("Set pin %d, mux %d, val %d, error\n", pin_id, + mux, config_val); + } + + return 0; +} static struct imx_pinctrl_soc_info imx8_pinctrl_soc_info = { .flags = IMX8_USE_SCU, }; diff --git a/drivers/pinctrl/nxp/pinctrl-scu.c b/drivers/pinctrl/nxp/pinctrl-scu.c deleted file mode 100644 index 3f47dde7e78..00000000000 --- a/drivers/pinctrl/nxp/pinctrl-scu.c +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * Copyright 2018-2019 NXP - */ - -#include <dm.h> -#include <errno.h> -#include <linux/bitops.h> -#include <asm/io.h> -#include <firmware/imx/sci/sci.h> -#include <misc.h> - -#include "pinctrl-imx.h" - -#define PADRING_IFMUX_EN_SHIFT 31 -#define PADRING_IFMUX_EN_MASK BIT(31) -#define PADRING_GP_EN_SHIFT 30 -#define PADRING_GP_EN_MASK BIT(30) -#define PADRING_IFMUX_SHIFT 27 -#define PADRING_IFMUX_MASK GENMASK(29, 27) - -static int imx_pinconf_scu_set(struct imx_pinctrl_soc_info *info, u32 pad, - u32 mux, u32 val) -{ - int ret; - - /* - * Mux should be done in pmx set, but we do not have a good api - * to handle that in scfw, so config it in pad conf func - */ - - if (!sc_rm_is_pad_owned(-1, pad)) { - debug("Pad[%u] is not owned by curr partition\n", pad); - return -EPERM; - } - - val |= PADRING_IFMUX_EN_MASK; - val |= PADRING_GP_EN_MASK; - val |= (mux << PADRING_IFMUX_SHIFT) & PADRING_IFMUX_MASK; - - ret = sc_pad_set(-1, pad, val); - if (ret) - printf("%s %d\n", __func__, ret); - - return 0; -} - -int imx_pinctrl_set_state_scu(struct udevice *dev, struct udevice *config) -{ - struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct imx_pinctrl_soc_info *info = priv->info; - int pin_id, mux, config_val; - u32 *pin_data; - int i, j = 0; - int npins; - int ret; - - ret = imx_pinctrl_set_state_common(dev, config, SHARE_IMX8_PIN_SIZE, - &pin_data, &npins); - if (ret) - return ret; - - /* - * Refer to linux documentation for details: - * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt - */ - for (i = 0; i < npins; i++) { - pin_id = pin_data[j++]; - mux = pin_data[j++]; - config_val = pin_data[j++]; - - ret = imx_pinconf_scu_set(info, pin_id, mux, config_val); - if (ret && ret != -EPERM) - printf("Set pin %d, mux %d, val %d, error\n", pin_id, - mux, config_val); - } - - return 0; -}

Split MMIO accessors into pinctrl-imx-mmio.c and build this file only if Kconfig symbol PINCTRL_IMX_MMIO is selected. Select PINCTRL_IMX_MMIO Kconfig symbol for all but pinctrl-imx8.c driver, which does not use the MMIO accessors. This reduces the amount of code compiled on platforms which do not use the code.
No functional change.
Signed-off-by: Marek Vasut marex@denx.de --- Cc: Alice Guo alice.guo@nxp.com Cc: Jesse Taube mr.bossman075@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Peter Robinson pbrobinson@gmail.com Cc: Tim Harvey tharvey@gateworks.com Cc: Tom Rini trini@konsulko.com Cc: u-boot@lists.denx.de --- drivers/pinctrl/nxp/Kconfig | 22 ++- drivers/pinctrl/nxp/Makefile | 1 + drivers/pinctrl/nxp/pinctrl-imx-mmio.c | 228 +++++++++++++++++++++++++ drivers/pinctrl/nxp/pinctrl-imx.c | 208 ---------------------- 4 files changed, 242 insertions(+), 217 deletions(-) create mode 100644 drivers/pinctrl/nxp/pinctrl-imx-mmio.c
diff --git a/drivers/pinctrl/nxp/Kconfig b/drivers/pinctrl/nxp/Kconfig index e2fc121ae75..d13c5f2a6d5 100644 --- a/drivers/pinctrl/nxp/Kconfig +++ b/drivers/pinctrl/nxp/Kconfig @@ -1,11 +1,15 @@ config PINCTRL_IMX bool
+config PINCTRL_IMX_MMIO + bool + select PINCTRL_IMX + config PINCTRL_IMX5 bool "IMX5 pinctrl driver" depends on ARCH_MX5 && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx5 pinctrl driver
@@ -19,7 +23,7 @@ config PINCTRL_IMX6 bool "IMX6 pinctrl driver" depends on ARCH_MX6 && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx6 pinctrl driver
@@ -33,7 +37,7 @@ config PINCTRL_IMX7 bool "IMX7 pinctrl driver" depends on ARCH_MX7 && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx7 pinctrl driver
@@ -47,7 +51,7 @@ config PINCTRL_IMX7ULP bool "IMX7ULP pinctrl driver" depends on ARCH_MX7ULP && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx7ulp pinctrl driver
@@ -61,7 +65,7 @@ config PINCTRL_IMX8ULP bool "IMX8ULP pinctrl driver" depends on ARCH_IMX8ULP && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx8ulp pinctrl driver
@@ -88,7 +92,7 @@ config PINCTRL_IMX8 config PINCTRL_IMX8M bool "IMX8M pinctrl driver" depends on ARCH_IMX8M && PINCTRL_FULL - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx8m pinctrl driver
@@ -101,7 +105,7 @@ config PINCTRL_IMX8M config PINCTRL_IMX93 bool "IMX8M pinctrl driver" depends on ARCH_IMX9 && PINCTRL_FULL - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imx8m pinctrl driver
@@ -125,7 +129,7 @@ config PINCTRL_IMXRT bool "IMXRT pinctrl driver" depends on ARCH_IMXRT && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the imxrt pinctrl driver
@@ -139,7 +143,7 @@ config PINCTRL_VYBRID bool "Vybrid (vf610) pinctrl driver" depends on ARCH_VF610 && PINCTRL_FULL select DEVRES - select PINCTRL_IMX + select PINCTRL_IMX_MMIO help Say Y here to enable the Vybrid (vf610) pinctrl driver
diff --git a/drivers/pinctrl/nxp/Makefile b/drivers/pinctrl/nxp/Makefile index c82275a2e93..44e37c631e5 100644 --- a/drivers/pinctrl/nxp/Makefile +++ b/drivers/pinctrl/nxp/Makefile @@ -1,4 +1,5 @@ obj-$(CONFIG_PINCTRL_IMX) += pinctrl-imx.o +obj-$(CONFIG_PINCTRL_IMX_MMIO) += pinctrl-imx-mmio.o obj-$(CONFIG_PINCTRL_IMX5) += pinctrl-imx5.o obj-$(CONFIG_PINCTRL_IMX6) += pinctrl-imx6.o obj-$(CONFIG_PINCTRL_IMX7) += pinctrl-imx7.o diff --git a/drivers/pinctrl/nxp/pinctrl-imx-mmio.c b/drivers/pinctrl/nxp/pinctrl-imx-mmio.c new file mode 100644 index 00000000000..6ee108a0120 --- /dev/null +++ b/drivers/pinctrl/nxp/pinctrl-imx-mmio.c @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2016 Peng Fan van.freenix@gmail.com + */ + +#include <malloc.h> +#include <mapmem.h> +#include <asm/global_data.h> +#include <dm/device_compat.h> +#include <dm/devres.h> +#include <linux/bitops.h> +#include <linux/io.h> +#include <linux/err.h> +#include <dm.h> +#include <dm/pinctrl.h> + +#include "pinctrl-imx.h" + +DECLARE_GLOBAL_DATA_PTR; + +int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config) +{ + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct imx_pinctrl_soc_info *info = priv->info; + u32 mux_shift = info->mux_mask ? ffs(info->mux_mask) - 1 : 0; + u32 input_val, mux_mode, config_val; + int mux_reg, conf_reg, input_reg; + int npins, pin_size; + int i, j = 0, ret; + u32 *pin_data; + + if (info->flags & SHARE_MUX_CONF_REG) + pin_size = SHARE_FSL_PIN_SIZE; + else + pin_size = FSL_PIN_SIZE; + + ret = imx_pinctrl_set_state_common(dev, config, pin_size, + &pin_data, &npins); + if (ret) + return ret; + + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt + */ + for (i = 0; i < npins; i++) { + mux_reg = pin_data[j++]; + + if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) + mux_reg = -1; + + if (info->flags & SHARE_MUX_CONF_REG) { + conf_reg = mux_reg; + } else { + conf_reg = pin_data[j++]; + if (!(info->flags & ZERO_OFFSET_VALID) && + !conf_reg) + conf_reg = -1; + } + + if ((mux_reg == -1) || (conf_reg == -1)) { + dev_err(dev, "Error mux_reg or conf_reg\n"); + devm_kfree(dev, pin_data); + return -EINVAL; + } + + input_reg = pin_data[j++]; + mux_mode = pin_data[j++]; + input_val = pin_data[j++]; + config_val = pin_data[j++]; + + dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, input_reg 0x%x, mux_mode 0x%x, input_val 0x%x, config_val 0x%x\n", + mux_reg, conf_reg, input_reg, mux_mode, + input_val, config_val); + + if (config_val & IMX_PAD_SION) + mux_mode |= IOMUXC_CONFIG_SION; + + config_val &= ~IMX_PAD_SION; + + /* Set Mux */ + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + mux_reg, + info->mux_mask, + mux_mode << mux_shift); + } else { + writel(mux_mode, info->base + mux_reg); + } + + dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", + mux_reg, mux_mode); + + /* + * Set select input + * + * If the select input value begins with 0xff, + * it's a quirky select input and the value should + * be interpreted as below. + * 31 23 15 7 0 + * | 0xff | shift | width | select | + * It's used to work around the problem that the + * select input for some pin is not implemented in + * the select input register but in some general + * purpose register. We encode the select input + * value, width and shift of the bit field into + * input_val cell of pin function ID in device tree, + * and then decode them here for setting up the select + * input bits in general purpose register. + */ + + if (input_val >> 24 == 0xff) { + u32 val = input_val; + u8 select = val & 0xff; + u8 width = (val >> 8) & 0xff; + u8 shift = (val >> 16) & 0xff; + u32 mask = ((1 << width) - 1) << shift; + /* + * The input_reg[i] here is actually some + * IOMUXC general purpose register, not + * regular select input register. + */ + val = readl(info->base + input_reg); + val &= ~mask; + val |= select << shift; + writel(val, info->base + input_reg); + } else if (input_reg) { + /* + * Regular select input register can never be + * at offset 0, and we only print register + * value for regular case. + */ + if (info->input_sel_base) + writel(input_val, + info->input_sel_base + + input_reg); + else + writel(input_val, + info->base + input_reg); + + dev_dbg(dev, "select_input: offset 0x%x val 0x%x\n", + input_reg, input_val); + } + + /* Set config */ + if (!(config_val & IMX_NO_PAD_CTL)) { + if (info->flags & SHARE_MUX_CONF_REG) { + clrsetbits_le32(info->base + conf_reg, + ~info->mux_mask, + config_val); + } else { + writel(config_val, + info->base + conf_reg); + } + + dev_dbg(dev, "write config: offset 0x%x val 0x%x\n", + conf_reg, config_val); + } + } + + devm_kfree(dev, pin_data); + + return 0; +} + + +int imx_pinctrl_probe_mmio(struct udevice *dev) +{ + struct imx_pinctrl_soc_info *info = + (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct ofnode_phandle_args arg; + ofnode node = dev_ofnode(dev); + fdt_addr_t addr; + fdt_size_t size; + int ret; + + ret = imx_pinctrl_probe_common(dev); + if (ret) + return ret; + + addr = ofnode_get_addr_size_index(node, 0, &size); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + + info->base = map_sysmem(addr, size); + if (!info->base) + return -ENOMEM; + priv->info = info; + + info->mux_mask = ofnode_read_u32_default(node, "fsl,mux_mask", 0); + /* + * Refer to linux documentation for details: + * Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt + */ + if (ofnode_read_bool(node, "fsl,input-sel")) { + ret = ofnode_parse_phandle_with_args(node, "fsl,input-sel", + NULL, 0, 0, &arg); + if (ret) { + dev_err(dev, "iomuxc fsl,input-sel property not found\n"); + return -EINVAL; + } + + addr = ofnode_get_addr_size(arg.node, "reg", &size); + if (addr == FDT_ADDR_T_NONE) + return -EINVAL; + + info->input_sel_base = map_sysmem(addr, size); + if (!info->input_sel_base) + return -ENOMEM; + } + + dev_dbg(dev, "initialized IMX pinctrl driver\n"); + + return 0; +} + +int imx_pinctrl_remove_mmio(struct udevice *dev) +{ + struct imx_pinctrl_priv *priv = dev_get_priv(dev); + struct imx_pinctrl_soc_info *info = priv->info; + + if (info->input_sel_base) + unmap_sysmem(info->input_sel_base); + if (info->base) + unmap_sysmem(info->base); + + return 0; +} diff --git a/drivers/pinctrl/nxp/pinctrl-imx.c b/drivers/pinctrl/nxp/pinctrl-imx.c index 00637e7f54b..7d91ccfb26f 100644 --- a/drivers/pinctrl/nxp/pinctrl-imx.c +++ b/drivers/pinctrl/nxp/pinctrl-imx.c @@ -54,150 +54,6 @@ int imx_pinctrl_set_state_common(struct udevice *dev, struct udevice *config, return 0; }
-int imx_pinctrl_set_state_mmio(struct udevice *dev, struct udevice *config) -{ - struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct imx_pinctrl_soc_info *info = priv->info; - u32 mux_shift = info->mux_mask ? ffs(info->mux_mask) - 1 : 0; - u32 input_val, mux_mode, config_val; - int mux_reg, conf_reg, input_reg; - int npins, pin_size; - int i, j = 0, ret; - u32 *pin_data; - - if (info->flags & SHARE_MUX_CONF_REG) - pin_size = SHARE_FSL_PIN_SIZE; - else - pin_size = FSL_PIN_SIZE; - - ret = imx_pinctrl_set_state_common(dev, config, pin_size, - &pin_data, &npins); - if (ret) - return ret; - - /* - * Refer to linux documentation for details: - * Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt - */ - for (i = 0; i < npins; i++) { - mux_reg = pin_data[j++]; - - if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg) - mux_reg = -1; - - if (info->flags & SHARE_MUX_CONF_REG) { - conf_reg = mux_reg; - } else { - conf_reg = pin_data[j++]; - if (!(info->flags & ZERO_OFFSET_VALID) && - !conf_reg) - conf_reg = -1; - } - - if ((mux_reg == -1) || (conf_reg == -1)) { - dev_err(dev, "Error mux_reg or conf_reg\n"); - devm_kfree(dev, pin_data); - return -EINVAL; - } - - input_reg = pin_data[j++]; - mux_mode = pin_data[j++]; - input_val = pin_data[j++]; - config_val = pin_data[j++]; - - dev_dbg(dev, "mux_reg 0x%x, conf_reg 0x%x, input_reg 0x%x, mux_mode 0x%x, input_val 0x%x, config_val 0x%x\n", - mux_reg, conf_reg, input_reg, mux_mode, - input_val, config_val); - - if (config_val & IMX_PAD_SION) - mux_mode |= IOMUXC_CONFIG_SION; - - config_val &= ~IMX_PAD_SION; - - /* Set Mux */ - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + mux_reg, - info->mux_mask, - mux_mode << mux_shift); - } else { - writel(mux_mode, info->base + mux_reg); - } - - dev_dbg(dev, "write mux: offset 0x%x val 0x%x\n", - mux_reg, mux_mode); - - /* - * Set select input - * - * If the select input value begins with 0xff, - * it's a quirky select input and the value should - * be interpreted as below. - * 31 23 15 7 0 - * | 0xff | shift | width | select | - * It's used to work around the problem that the - * select input for some pin is not implemented in - * the select input register but in some general - * purpose register. We encode the select input - * value, width and shift of the bit field into - * input_val cell of pin function ID in device tree, - * and then decode them here for setting up the select - * input bits in general purpose register. - */ - - if (input_val >> 24 == 0xff) { - u32 val = input_val; - u8 select = val & 0xff; - u8 width = (val >> 8) & 0xff; - u8 shift = (val >> 16) & 0xff; - u32 mask = ((1 << width) - 1) << shift; - /* - * The input_reg[i] here is actually some - * IOMUXC general purpose register, not - * regular select input register. - */ - val = readl(info->base + input_reg); - val &= ~mask; - val |= select << shift; - writel(val, info->base + input_reg); - } else if (input_reg) { - /* - * Regular select input register can never be - * at offset 0, and we only print register - * value for regular case. - */ - if (info->input_sel_base) - writel(input_val, - info->input_sel_base + - input_reg); - else - writel(input_val, - info->base + input_reg); - - dev_dbg(dev, "select_input: offset 0x%x val 0x%x\n", - input_reg, input_val); - } - - /* Set config */ - if (!(config_val & IMX_NO_PAD_CTL)) { - if (info->flags & SHARE_MUX_CONF_REG) { - clrsetbits_le32(info->base + conf_reg, - ~info->mux_mask, - config_val); - } else { - writel(config_val, - info->base + conf_reg); - } - - dev_dbg(dev, "write config: offset 0x%x val 0x%x\n", - conf_reg, config_val); - } - } - - devm_kfree(dev, pin_data); - - return 0; -} - int imx_pinctrl_probe_common(struct udevice *dev) { struct imx_pinctrl_soc_info *info = @@ -214,67 +70,3 @@ int imx_pinctrl_probe_common(struct udevice *dev)
return 0; } - -int imx_pinctrl_probe_mmio(struct udevice *dev) -{ - struct imx_pinctrl_soc_info *info = - (struct imx_pinctrl_soc_info *)dev_get_driver_data(dev); - struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct ofnode_phandle_args arg; - ofnode node = dev_ofnode(dev); - fdt_addr_t addr; - fdt_size_t size; - int ret; - - ret = imx_pinctrl_probe_common(dev); - if (ret) - return ret; - - addr = ofnode_get_addr_size_index(node, 0, &size); - if (addr == FDT_ADDR_T_NONE) - return -EINVAL; - - info->base = map_sysmem(addr, size); - if (!info->base) - return -ENOMEM; - priv->info = info; - - info->mux_mask = ofnode_read_u32_default(node, "fsl,mux_mask", 0); - /* - * Refer to linux documentation for details: - * Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt - */ - if (ofnode_read_bool(node, "fsl,input-sel")) { - ret = ofnode_parse_phandle_with_args(node, "fsl,input-sel", - NULL, 0, 0, &arg); - if (ret) { - dev_err(dev, "iomuxc fsl,input-sel property not found\n"); - return -EINVAL; - } - - addr = ofnode_get_addr_size(arg.node, "reg", &size); - if (addr == FDT_ADDR_T_NONE) - return -EINVAL; - - info->input_sel_base = map_sysmem(addr, size); - if (!info->input_sel_base) - return -ENOMEM; - } - - dev_dbg(dev, "initialized IMX pinctrl driver\n"); - - return 0; -} - -int imx_pinctrl_remove_mmio(struct udevice *dev) -{ - struct imx_pinctrl_priv *priv = dev_get_priv(dev); - struct imx_pinctrl_soc_info *info = priv->info; - - if (info->input_sel_base) - unmap_sysmem(info->input_sel_base); - if (info->base) - unmap_sysmem(info->base); - - return 0; -}

Tom,
On Fri, Jan 24, 2025 at 11:55 AM Marek Vasut marex@denx.de wrote:
Move imx_pinctrl_ops into drivers and staticize. This is preparatory patch for follow up pinctrl drivers which will not use this variant of imx_pinctrl_ops content. This should not change size, as most of the deployments compiled in one pinctrl driver anyway. No functional change.
The u-boot-imx/master-next fails with this series applied:
https://source.denx.de/u-boot/custodians/u-boot-imx/-/jobs/1005082
This is unrelated to this series, though.
Any ideas?

On 1/25/25 4:53 PM, Fabio Estevam wrote:
Tom,
On Fri, Jan 24, 2025 at 11:55 AM Marek Vasut marex@denx.de wrote:
Move imx_pinctrl_ops into drivers and staticize. This is preparatory patch for follow up pinctrl drivers which will not use this variant of imx_pinctrl_ops content. This should not change size, as most of the deployments compiled in one pinctrl driver anyway. No functional change.
The u-boot-imx/master-next fails with this series applied:
https://source.denx.de/u-boot/custodians/u-boot-imx/-/jobs/1005082
This is unrelated to this series, though.
Any ideas?
Does it always fail , i.e. did you try to rerun the pipeline ?
Did you try to rebase on current u-boot/master , does it still fail ?
The link I sent to Alice also has an associated build run, which does pass, but admittedly that has one extra patch on top, which should have no impact:
https://source.denx.de/u-boot/custodians/u-boot-imx/-/jobs/1005082

Hi Marek,
On Sat, Jan 25, 2025 at 1:36 PM Marek Vasut marex@denx.de wrote:
Does it always fail , i.e. did you try to rerun the pipeline ?
I had to retry a few times and then it eventually succeeded.
I will send a PR soon.
Thanks

On Sat, Jan 25, 2025 at 12:53:10PM -0300, Fabio Estevam wrote:
Tom,
On Fri, Jan 24, 2025 at 11:55 AM Marek Vasut marex@denx.de wrote:
Move imx_pinctrl_ops into drivers and staticize. This is preparatory patch for follow up pinctrl drivers which will not use this variant of imx_pinctrl_ops content. This should not change size, as most of the deployments compiled in one pinctrl driver anyway. No functional change.
The u-boot-imx/master-next fails with this series applied:
https://source.denx.de/u-boot/custodians/u-boot-imx/-/jobs/1005082
This is unrelated to this series, though.
Any ideas?
Yeah, sorry, hit retry a few times. I'd like to not have to disable that specific test, but I don't have any better ideas.

On Fri, Jan 24, 2025 at 11:55 AM Marek Vasut marex@denx.de wrote:
Move imx_pinctrl_ops into drivers and staticize. This is preparatory patch for follow up pinctrl drivers which will not use this variant of imx_pinctrl_ops content. This should not change size, as most of the deployments compiled in one pinctrl driver anyway. No functional change.
Signed-off-by: Marek Vasut marex@denx.de
Applied the series, thanks.
participants (3)
-
Fabio Estevam
-
Marek Vasut
-
Tom Rini