Re: [PATCH v2 8/9] DT: stm32f469-disco: add node for SDIO controller

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 13, 2017 at 5:28 PM, Alexandre Torgue
<alexandre.torgue@xxxxxx> wrote:
>
>
> On 01/13/2017 05:12 PM, Andrea Merello wrote:
>>
>> On Fri, Jan 13, 2017 at 4:52 PM, Alexandre Torgue
>> <alexandre.torgue@xxxxxx> wrote:
>>>
>>> Hi Andrea
>>>
>>>
>>> On 01/13/2017 04:01 PM, Andrea Merello wrote:
>>>>
>>>>
>>>> On Tue, Jan 10, 2017 at 10:18 AM, Alexandre Torgue
>>>> <alexandre.torgue@xxxxxx> wrote:
>>>>>
>>>>>
>>>>> Hi Andrea
>>>>>
>>>>> On 01/10/2017 09:42 AM, Andrea Merello wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Signed-off-by: Andrea Merello <andrea.merello@xxxxxxxxx>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Can you please add a commit message.
>>>>> Can you also change commit header like: "ARM: dts: stm32: enable SDIO
>>>>> controller on stm32f469 disco board
>>>>>
>>>>>
>>>>>
>>>>>> ---
>>>>>>  arch/arm/boot/dts/stm32f429.dtsi      |  2 +-
>>>>>>  arch/arm/boot/dts/stm32f469-disco.dts | 29
>>>>>> +++++++++++++++++++++++++++++
>>>>>>  2 files changed, 30 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/arch/arm/boot/dts/stm32f429.dtsi
>>>>>> b/arch/arm/boot/dts/stm32f429.dtsi
>>>>>> index c12a64e..5aba383 100644
>>>>>> --- a/arch/arm/boot/dts/stm32f429.dtsi
>>>>>> +++ b/arch/arm/boot/dts/stm32f429.dtsi
>>>>>> @@ -206,7 +206,7 @@
>>>>>>                         reg = <0x40007000 0x400>;
>>>>>>                 };
>>>>>>
>>>>>> -               pin-controller {
>>>>>> +               pinctrl:pin-controller {
>>>>>>                         #address-cells = <1>;
>>>>>>                         #size-cells = <1>;
>>>>>>                         compatible = "st,stm32f429-pinctrl";
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> diff --git a/arch/arm/boot/dts/stm32f469-disco.dts
>>>>>> b/arch/arm/boot/dts/stm32f469-disco.dts
>>>>>> index 8877c00..7b3458e 100644
>>>>>> --- a/arch/arm/boot/dts/stm32f469-disco.dts
>>>>>> +++ b/arch/arm/boot/dts/stm32f469-disco.dts
>>>>>> @@ -65,6 +65,13 @@
>>>>>>                 serial0 = &usart3;
>>>>>>         };
>>>>>>
>>>>>> +       mmc_vcard: mmc_vcard {
>>>>>> +               compatible = "regulator-fixed";
>>>>>> +               regulator-name = "mmc_vcard";
>>>>>> +               regulator-min-microvolt = <3300000>;
>>>>>> +               regulator-max-microvolt = <3300000>;
>>>>>> +       };
>>>>>> +
>>>>>>         soc {
>>>>>>                 dma-ranges = <0xc0000000 0x0 0x10000000>;
>>>>>>         };
>>>>>> @@ -78,6 +85,28 @@
>>>>>>         clock-frequency = <8000000>;
>>>>>>  };
>>>>>>
>>>>>> +&pinctrl {
>>>>>> +       sdio-cd {
>>>>>> +               sdio_cd: sdio-cd {
>>>>>> +                       pins {
>>>>>> +                               pinmux = <STM32F429_PG2_FUNC_GPIO>;
>>>>>> +                               bias-pull-up;
>>>>>> +                       };
>>>>>> +               };
>>>>>> +       };
>>>>>> +};
>>>>>> +
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> As you only have config for 469-disco, please add this configuration of
>>>>> pinmux directly in stm32f429.dtsi.
>>>>
>>>>
>>>>
>>>> While in the process of moving this, I realized that there is
>>>> something wrong here..
>>>>
>>>> Currently this pinmux config ended up to be not referenced by the SDIO
>>>> DT node at all. This happened in V2; it was intended to fix an
>>>> apparently double-claimed GPIO problem, but now I realized that I
>>>> misunderstood this thing, and it was a bad fix..
>>>>
>>>> So, actually the SD works, but as soon as I reference the CD pinmux
>>>> config in the SDIO node, it fails with the following error:
>>>>
>>>> [    0.980000] stm32f429-pinctrl soc:pin-controller: pin PG2 already
>>>> requested by 40012c00.sdio; cannot claim for GPIOG:98
>>>> [    0.990000] stm32f429-pinctrl soc:pin-controller: pin-98 (GPIOG:98)
>>>> status -22
>>>> [    1.000000] mmci-pl18x: probe of 40012c00.sdio failed with error -22
>>>>
>>>> I've bisected this to happen since the 'strict' flag has been added to
>>>> the stm32 pinctrl driver.
>>>> commit c32c22eea0c47e13cffd6b5f7eedd7a6b6f2c18f
>>>>
>>>> Right now It seems that few pinctrl drivers use the 'strict' flag, so
>>>> maybe it could be a bug in pinctrl-realated code.
>>>
>>>
>>>
>>> It is not a bug but added intentionally.
>>>
>>>>
>>>> I need to look more in detail about this, however as far as I could
>>>> understand:
>>>>
>>>> - when the mmc layer asks for the CD pin, due to the "cd-gpios"
>>>> property,  the owner name for this config request is not the one from
>>>> the OF node, but it is "conjured" - as written in comment - from the
>>>> GPIO number and name (GPIOG:98) in pinmux_request_gpio()
>>>>
>>>> - the pinmux config done in behalf of the 'pinctrl-0' property has the
>>>> OF node name (40012c00.sdio) as owner.
>>>>
>>>
>>> I will look at deeper in the driver but first why you need to control
>>> this
>>> pin by both way (gpio lib through gpio definition and pinctrl framework
>>> through pinctrl definition) ?
>>
>>
>> Hmm, sorry, maybe I'm missing something here.. Please correct me if I'm
>> wrong :)
>>
>> Don't I need to reference the pinmux configuration for CD in my
>> pinctrl configs in the SDIO DT node, in order to have it active? e.g.
>> pinctrl-0 = <&sdio_pins>, <&sdio_cd>;
>>
>> Don't I need to provide "cs-gpios" to the MMC layer as well ? e.g.
>> cd-gpios = <&gpiog 2 0>;
>
>
> Maybe I miss also something but it depends on "how" the driver uses this
> pin. If you want to control the GPIO (change direction or set gpio in input
> or read input ...) you have to use gpiolib and so declare "cd-gpios =
> <&gpiog 2 0>;". By doing that gpiolib will request the gpio to pinctrl for
> you. No need to declare a pinctrl entry for that.

Ah, ok. Thanks for clarifying :) It's my fault then: I've assumed that
for some reason both were needed, just because the DTS files I've
looked at seem to have both. (BTW apparently there are a lot of them
in arch/arm/dts.. are they all broken and working only because they
have not a "strict" pinctrl driver?)..

Anyway, it should be enough to drop completely the pinmux config for
CD. I'll post a new series next week.

>>
>> If I do both, it fails (due to mmc_of_parse() failing). No matter what
>> I do in the driver, I believe.
>
>
> It is normal that both failed; In strict mode you can't request several
> times the same pin (you request pinG2 one time by gpiolib and oneother time
> by pinctrl).
>
>
>>
>>> In strict mode the error you get is "normal". You can't control the same
>>> pin
>>> in the same time by gpiolib and pinctrl.
>>>
>>>
>>>> This owner mismatch causes a check to fail in pin_request(), that
>>>> believes that two different owners try to use the same pin (while in
>>>> true both are in behalf of the same SDIO device).
>>>>
>>>> I don't know when I'll have more time to look into this. If you want I
>>>> can temporary drop the CD pinmux config and post the V3 - that
>>>> nevertheless works - and we can add the CD pinmux cfg later, once it
>>>> has been fixed.
>>>>
>>>> In someone have clues, or want to look into this, he/she would be
>>>> really welcome :)
>>>
>>>
>>>
>>> No problem, we can wait. Let's merge it when it will be fully functional.
>>>
>>> Br
>>> Alex
>>>
>>>
>>>>
>>>>>
>>>>>
>>>>>> +&sdio {
>>>>>> +       status = "okay";
>>>>>> +       vmmc-supply = <&mmc_vcard>;
>>>>>> +       cd-gpios = <&gpiog 2 0>;
>>>>>> +       cd-inverted;
>>>>>> +       pinctrl-names = "default", "opendrain";
>>>>>> +       pinctrl-0 = <&sdio_pins>;
>>>>>> +       pinctrl-1 = <&sdio_pins_od>;
>>>>>> +       bus-width = <4>;
>>>>>> +};
>>>>>> +
>>>>>>  &usart3 {
>>>>>>         status = "okay";
>>>>>>  };
>>>>>>
>>>>>
>>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux