mirror of https://gitee.com/openkylin/linux.git
pinctrl: imx: fix NO_PAD_CTL setting for MMIO pads
After patchb96eea718b
("pinctrl: fsl: add scu based pinctrl support"), NO_PAD_CTL pads map are not skipped anymore which results in a possible memory corruption. As we actually only need to create config maps for SCU pads and MMIO pads which are not using the default config (a.k.a IMX_NO_PAD_CTL), so let's add a proper check before creating the config maps. And during MMIO pads parsing, we also need update the list_p point as SCU case to ensure the pin data next parsed is correct. Cc: Linus Walleij <linus.walleij@linaro.org> Fixes:b96eea718b
("pinctrl: fsl: add scu based pinctrl support") Reported-by: Martin Kaiser <martin@kaiser.cx> Suggested-by: Leonard Crestez <leonard.crestez@nxp.com> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> Reviewed-by: Martin Kaiser <martin@kaiser.cx> Tested-by: Leonard Crestez <leonard.crestez@nxp.com> Tested-by: Kevin Hilman <khilman@baylibre.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
81c9d563cc
commit
571610678b
|
@ -108,6 +108,15 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
|
|||
new_map++;
|
||||
for (i = j = 0; i < grp->num_pins; i++) {
|
||||
pin = &((struct imx_pin *)(grp->data))[i];
|
||||
|
||||
/*
|
||||
* We only create config maps for SCU pads or MMIO pads that
|
||||
* are not using the default config(a.k.a IMX_NO_PAD_CTL)
|
||||
*/
|
||||
if (!(info->flags & IMX_USE_SCU) &&
|
||||
(pin->conf.mmio.config & IMX_NO_PAD_CTL))
|
||||
continue;
|
||||
|
||||
new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN;
|
||||
new_map[j].data.configs.group_or_pin =
|
||||
pin_get_name(pctldev, pin->pin);
|
||||
|
@ -120,7 +129,7 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
|
|||
new_map[j].data.configs.configs =
|
||||
(unsigned long *)&pin->conf.scu;
|
||||
new_map[j].data.configs.num_configs = 2;
|
||||
} else if (!(pin->conf.mmio.config & IMX_NO_PAD_CTL)) {
|
||||
} else {
|
||||
new_map[j].data.configs.configs =
|
||||
&pin->conf.mmio.config;
|
||||
new_map[j].data.configs.num_configs = 1;
|
||||
|
@ -549,6 +558,8 @@ static void imx_pinctrl_parse_pin_mmio(struct imx_pinctrl *ipctl,
|
|||
pin_mmio->config = config & ~IMX_PAD_SION;
|
||||
}
|
||||
|
||||
*list_p = list;
|
||||
|
||||
dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[*pin_id].name,
|
||||
pin_mmio->mux_mode, pin_mmio->config);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue