Re: [PATCH v1 1/2] x86: tangier: Enable support for SD/SDIO family in the pinmux driver
On Wed, Oct 27, 2021 at 1:14 PM Bin Meng wrote: > On Wed, Oct 27, 2021 at 4:54 PM Andy Shevchenko > wrote: > > On Wed, Oct 27, 2021 at 5:49 AM Bin Meng wrote: > > > On Sat, Oct 16, 2021 at 1:27 AM Andy Shevchenko > > > wrote: ... > > > This function can be consolidated with mrfld_pinconfig_protected(), > > > ie: updating mrfld_pinconfig_protected() to call mrfld_pinconfig(). > > > > Can it be done in a separate patch? This is a fix related and tested, > > it will take time to retest this by all parties. > > Sure please send a follow-up patch when you are free. I will do it later on. > Reviewed-by: Bin Meng Thanks! -- With Best Regards, Andy Shevchenko
Re: [PATCH v1 1/2] x86: tangier: Enable support for SD/SDIO family in the pinmux driver
On Wed, Oct 27, 2021 at 4:54 PM Andy Shevchenko wrote: > > On Wed, Oct 27, 2021 at 5:49 AM Bin Meng wrote: > > On Sat, Oct 16, 2021 at 1:27 AM Andy Shevchenko > > wrote: > > > > > > We would need to quirk out Card Detect case and for that we allow > > > configuring SD/SDIO family of pins. > > ... > > > > +static int mrfld_pinconfig(unsigned int pin, u32 mask, u32 bits) > > > +{ > > > This function can be consolidated with mrfld_pinconfig_protected(), > > ie: updating mrfld_pinconfig_protected() to call mrfld_pinconfig(). > > Can it be done in a separate patch? This is a fix related and tested, > it will take time to retest this by all parties. > Sure please send a follow-up patch when you are free. Reviewed-by: Bin Meng Regards, Bin
Re: [PATCH v1 1/2] x86: tangier: Enable support for SD/SDIO family in the pinmux driver
On Wed, Oct 27, 2021 at 5:49 AM Bin Meng wrote: > On Sat, Oct 16, 2021 at 1:27 AM Andy Shevchenko > wrote: > > > > We would need to quirk out Card Detect case and for that we allow > > configuring SD/SDIO family of pins. ... > > +static int mrfld_pinconfig(unsigned int pin, u32 mask, u32 bits) > > +{ > This function can be consolidated with mrfld_pinconfig_protected(), > ie: updating mrfld_pinconfig_protected() to call mrfld_pinconfig(). Can it be done in a separate patch? This is a fix related and tested, it will take time to retest this by all parties. > > +} -- With Best Regards, Andy Shevchenko
Re: [PATCH v1 1/2] x86: tangier: Enable support for SD/SDIO family in the pinmux driver
Hi Andy, On Sat, Oct 16, 2021 at 1:27 AM Andy Shevchenko wrote: > > We would need to quirk out Card Detect case and for that we allow > configuring SD/SDIO family of pins. > > Signed-off-by: Andy Shevchenko > --- > arch/x86/cpu/tangier/pinmux.c | 39 ++- > 1 file changed, 34 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/cpu/tangier/pinmux.c b/arch/x86/cpu/tangier/pinmux.c > index acf97e3af51d..8385167b2b6b 100644 > --- a/arch/x86/cpu/tangier/pinmux.c > +++ b/arch/x86/cpu/tangier/pinmux.c > @@ -37,8 +37,9 @@ struct mrfld_family { > .npins = (e) - (s) + 1, \ > } > > -/* Now we only support I2C family of pins */ > +/* Now we only support SD/SDIO and I2C families of pins */ > static struct mrfld_family mrfld_families[] = { > + MRFLD_FAMILY(3, 37, 56), > MRFLD_FAMILY(7, 101, 114), > }; > > @@ -125,6 +126,34 @@ static int mrfld_pinconfig_protected(unsigned int pin, > u32 mask, u32 bits) > return ret; > } > > +static int mrfld_pinconfig(unsigned int pin, u32 mask, u32 bits) > +{ > + struct mrfld_pinctrl *pinctrl; > + struct udevice *dev; > + void __iomem *bufcfg; > + u32 v, value; > + int ret; > + > + ret = syscon_get_by_driver_data(X86_SYSCON_PINCONF, ); > + if (ret) > + return ret; > + > + pinctrl = dev_get_priv(dev); > + > + bufcfg = mrfld_get_bufcfg(pinctrl, pin); > + if (!bufcfg) > + return -EINVAL; > + > + value = readl(bufcfg); > + v = (value & ~mask) | (bits & mask); > + writel(v, bufcfg); > + > + debug("v: 0x%x p: 0x%x bits: %d, mask: %d bufcfg: 0x%p\n", > + v, (u32)bufcfg, bits, mask, bufcfg); > + > + return 0; This function can be consolidated with mrfld_pinconfig_protected(), ie: updating mrfld_pinconfig_protected() to call mrfld_pinconfig(). > +} > + > static int mrfld_pinctrl_cfg_pin(ofnode pin_node) > { > bool is_protected; > @@ -133,10 +162,7 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node) > u32 mask; > int ret; > > - /* For now we only support just protected Family of pins */ > is_protected = ofnode_read_bool(pin_node, "protected"); > - if (!is_protected) > - return -ENOTSUPP; > > pad_offset = ofnode_read_s32_default(pin_node, "pad-offset", -1); > if (pad_offset == -1) > @@ -152,7 +178,10 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node) > if (mode & ~mask) > return -ENOTSUPP; > > - ret = mrfld_pinconfig_protected(pad_offset, mask, mode); > + if (is_protected) > + ret = mrfld_pinconfig_protected(pad_offset, mask, mode); > + else > + ret = mrfld_pinconfig(pad_offset, mask, mode); > > return ret; > } Regards, Bin
[PATCH v1 1/2] x86: tangier: Enable support for SD/SDIO family in the pinmux driver
We would need to quirk out Card Detect case and for that we allow configuring SD/SDIO family of pins. Signed-off-by: Andy Shevchenko --- arch/x86/cpu/tangier/pinmux.c | 39 ++- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/arch/x86/cpu/tangier/pinmux.c b/arch/x86/cpu/tangier/pinmux.c index acf97e3af51d..8385167b2b6b 100644 --- a/arch/x86/cpu/tangier/pinmux.c +++ b/arch/x86/cpu/tangier/pinmux.c @@ -37,8 +37,9 @@ struct mrfld_family { .npins = (e) - (s) + 1, \ } -/* Now we only support I2C family of pins */ +/* Now we only support SD/SDIO and I2C families of pins */ static struct mrfld_family mrfld_families[] = { + MRFLD_FAMILY(3, 37, 56), MRFLD_FAMILY(7, 101, 114), }; @@ -125,6 +126,34 @@ static int mrfld_pinconfig_protected(unsigned int pin, u32 mask, u32 bits) return ret; } +static int mrfld_pinconfig(unsigned int pin, u32 mask, u32 bits) +{ + struct mrfld_pinctrl *pinctrl; + struct udevice *dev; + void __iomem *bufcfg; + u32 v, value; + int ret; + + ret = syscon_get_by_driver_data(X86_SYSCON_PINCONF, ); + if (ret) + return ret; + + pinctrl = dev_get_priv(dev); + + bufcfg = mrfld_get_bufcfg(pinctrl, pin); + if (!bufcfg) + return -EINVAL; + + value = readl(bufcfg); + v = (value & ~mask) | (bits & mask); + writel(v, bufcfg); + + debug("v: 0x%x p: 0x%x bits: %d, mask: %d bufcfg: 0x%p\n", + v, (u32)bufcfg, bits, mask, bufcfg); + + return 0; +} + static int mrfld_pinctrl_cfg_pin(ofnode pin_node) { bool is_protected; @@ -133,10 +162,7 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node) u32 mask; int ret; - /* For now we only support just protected Family of pins */ is_protected = ofnode_read_bool(pin_node, "protected"); - if (!is_protected) - return -ENOTSUPP; pad_offset = ofnode_read_s32_default(pin_node, "pad-offset", -1); if (pad_offset == -1) @@ -152,7 +178,10 @@ static int mrfld_pinctrl_cfg_pin(ofnode pin_node) if (mode & ~mask) return -ENOTSUPP; - ret = mrfld_pinconfig_protected(pad_offset, mask, mode); + if (is_protected) + ret = mrfld_pinconfig_protected(pad_offset, mask, mode); + else + ret = mrfld_pinconfig(pad_offset, mask, mode); return ret; } -- 2.33.0