From: andre.przywara@arm.com (André Przywara)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/5] arm64: dts: sun50i: add MMC nodes
Date: Wed, 4 Jan 2017 00:22:15 +0000 [thread overview]
Message-ID: <6e90ad76-8f25-538a-433e-ab31e8fab526@arm.com> (raw)
In-Reply-To: <CAGb2v65GAvyDn1oMXy2cpOD5PFRoYYOk-VbsMPAX3SNFz2ukLg@mail.gmail.com>
On 03/01/17 13:28, Chen-Yu Tsai wrote:
> On Tue, Jan 3, 2017 at 6:48 PM, Andr? Przywara <andre.przywara@arm.com> wrote:
>> On 03/01/17 02:52, Chen-Yu Tsai wrote:
Hi Chen-Yu,
>>> On Tue, Jan 3, 2017 at 7:03 AM, Andre Przywara <andre.przywara@arm.com> wrote:
>>>
>>> A commit message explaining the mmc controllers would be nice.
>>
>> OK.
>>
>>>> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
>>>> ---
>>>> arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 67 +++++++++++++++++++++++++++
>>>> 1 file changed, 67 insertions(+)
>>>>
>>>> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
>>>> index e0dcab8..c680566 100644
>>>> --- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
>>>> +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
>>>> @@ -150,6 +150,32 @@
>>>> pins = "PB8", "PB9";
>>>> function = "uart0";
>>>> };
>>>> +
>>>> + mmc0_pins: mmc0 at 0 {
>>>> + pins = "PF0", "PF1", "PF2", "PF3", "PF4", "PF5";
>>>> + function = "mmc0";
>>>> + drive-strength = <30>;
>>>> + };
>>>> +
>>>> + mmc0_default_cd_pin: mmc0_cd_pin at 0 {
>>>> + pins = "PF6";
>>>> + function = "gpio_in";
>>>> + bias-pull-up;
>>>> + };
>>>
>>> We are starting to drop pinmux nodes for gpio usage.
>>
>> And replacing them with what?
>> Or do you mean they go in the individual board .dts files?
>> In this case I believe having a default pin defined here would help to
>> define it in every .dts.
>
> Nope. I meant dropping them. Pinmux and gpio are orthogonal. One should not
> need to specify a gpio pinmux to use it as a gpio. We added them because in
> the past nothing was preventing someone from claiming an already muxed pin
> as a gpio. On some platforms this is fine. For sunxi, this breaks the system,
> as the gpio functions are muxed in.
>
> The idea moving forward is that these cases should be guarded in the driver.
Ah, OK, you mean just referencing the pin like:
cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
in the board DT is enough? And the driver claiming it will (eventually?)
prevent users from using them via the sysfs interface then?
> Of course we would have to deal with existing dtbs, but lets not add any more.
>
>>>> +
>>>> + mmc1_pins: mmc1 at 0 {
>>>> + pins = "PG0", "PG1", "PG2", "PG3", "PG4", "PG5";
>>>> + function = "mmc1";
>>>> + drive-strength = <30>;
>>>> + };
>>>> +
>>>> + mmc2_pins: mmc2 at 0 {
>>>> + pins = "PC1", "PC5", "PC6", "PC8", "PC9",
>>>> + "PC10", "PC11", "PC12", "PC13", "PC14",
>>>> + "PC15", "PC16";
>>>> + function = "mmc2";
>>>> + drive-strength = <30>;
>>>> + };
>>>
>>> Moreover I think you should split out the pinmux nodes to a separate patch.
>>
>> I can surely do, just wondering what's the rationale is behind that?
>
> More or less the "do one thing in one patch" rationale. Of course you can
> claim these are the defaults used in the reference design and pretty much
> every board out there. Then it makes sense to do them together. :)
Mmmh, probably a misunderstanding, but:
Those pins are the possible pins that expose the MMC interface. Those
nodes here name them to allow easy and concise reference by a board DT
(as in the following patch).
And in fact in case of the A64 there are _no_ alternative muxes for the
three MMC controllers: SDC0 is only on PF0-5, SDC1 on PG0-PG5 and SDC2
on PC1-PC16.
So it's not a board design question, apart from using a controller or not.
That's why I rather keep them together with the MMC controller nodes.
>>>
>>>> };
>>>>
>>>> uart0: serial at 1c28000 {
>>>> @@ -240,6 +266,47 @@
>>>> #size-cells = <0>;
>>>> };
>>>>
>>>> + mmc0: mmc at 1c0f000 {
>>>> + compatible = "allwinner,sun50i-a64-mmc",
>>>> + "allwinner,sun5i-a13-mmc";
>>>
>>> Given that sun5i doesn't support mmc delay timings, and the A64 has
>>> calibration and delay timings, I wouldn't call them compatible.
>>>
>>> Or are you claiming that for the A64 has a delay of 0 for the
>>> currently supported speeds, so the calibration doesn't really
>>> matter? If so this should be mentioned in the commit message.
>>
>> Yes, that's my observation: Driving it with sun5-a13-mmc just works.
>> This sun5i driver version does not (and will never) support higher
>> transfer modes anyway, so for that subset they are compatible. This
>> opens up the door to other operating systems not having a particular
>> driver for the A64, for instance, also older Linux kernels.
>> I know that sunxi doesn't use this compatible feature much, but IMHO we
>> should really start thinking about the DT not just being Linux specific
>> - or even being specific to a certain Linux version. And this case here
>> is a good example: An A13 MMC driver can drive this device - if there is
>> no better driver (an A64 one) available.
>
> Cool. Please put this in the commit log. :)
Noted for a repost.
>>
>>>
>>>> + reg = <0x01c0f000 0x1000>;
>>>> + clocks = <&ccu 31>, <&ccu 75>;
>>>
>>> The clock / reset index macros are in the tree now.
>>> Please switch to them.
>>
>> The include file is in the tree, but it isn't used in the current HEAD
>> (as in #included and the actual macros being used in the .dtsi).
>> So I was wondering if there is a patch pending for that?
>
> Not yet I think. Perhaps Maxime will do one once he gets back from vacation?
Seems like everybody hopes for it and nobody bothers with this rather
trivial patch ;-)
Frankly I am not overly keen on having all those defines in the DTs,
which rely on a bunch of include files scattered over the Linux include
tree. This makes it unnecessarily complicated to compile this out of
tree or move it over to some other piece of software (other OS, U-Boot).
Also it gives people the impression that it's fine to change the
definition in the include file at will (because it looks like Linux
territory).
Eventually some file has to hold the actual hardware information, I
don't see why this shouldn't be the one .dtsi file. Reading that the
clock for MMC controller 0 is MMC0_CLK isn't very informative.
Cheers,
Andre.
>>>> + clock-names = "ahb", "mmc";
>>>> + resets = <&ccu 8>;
>>>> + reset-names = "ahb";
>>>> + interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
>>>> + status = "disabled";
>>>> + #address-cells = <1>;
>>>> + #size-cells = <0>;
>>>> + };
>>>> +
>>>> + mmc1: mmc at 1c10000 {
>>>> + compatible = "allwinner,sun50i-a64-mmc",
>>>> + "allwinner,sun5i-a13-mmc";
>>>> + reg = <0x01c10000 0x1000>;
>>>> + clocks = <&ccu 32>, <&ccu 76>;
>>>> + clock-names = "ahb", "mmc";
>>>> + resets = <&ccu 9>;
>>>> + reset-names = "ahb";
>>>> + interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
>>>> + status = "disabled";
>>>> + #address-cells = <1>;
>>>> + #size-cells = <0>;
>>>> + };
>>>> +
>>>> + mmc2: mmc at 1c11000 {
>>>> + compatible = "allwinner,sun50i-a64-emmc";
>>>> + reg = <0x01c11000 0x1000>;
>>>> + clocks = <&ccu 33>, <&ccu 77>;
>>>> + clock-names = "ahb", "mmc";
>>>> + resets = <&ccu 10>;
>>>> + reset-names = "ahb";
>>>> + interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
>>>> + status = "disabled";
>>>> + #address-cells = <1>;
>>>> + #size-cells = <0>;
>>>> + };
>>>> +
>>>> gic: interrupt-controller at 1c81000 {
>>>> compatible = "arm,gic-400";
>>>> reg = <0x01c81000 0x1000>,
>>>> --
>>>> 2.8.2
>>>>
>>
next prev parent reply other threads:[~2017-01-04 0:22 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-02 23:03 [PATCH 0/5] arm64: sunxi: A64: enable MMC support Andre Przywara
2017-01-02 23:03 ` [PATCH 1/5] drivers: mmc: sunxi: fix A64 calibration routine Andre Przywara
2017-01-05 17:47 ` Maxime Ripard
2017-01-08 23:56 ` André Przywara
2017-01-02 23:03 ` [PATCH 2/5] drivers: mmc: sunxi: limit A64 MMC2 to 8K DMA buffer Andre Przywara
2017-01-04 14:07 ` Rob Herring
2017-01-05 17:57 ` Maxime Ripard
2017-01-05 23:33 ` André Przywara
2017-01-10 14:06 ` Maxime Ripard
2017-01-02 23:03 ` [PATCH 3/5] arm64: dts: sun50i: add MMC nodes Andre Przywara
2017-01-03 2:52 ` Chen-Yu Tsai
2017-01-03 10:48 ` André Przywara
2017-01-03 13:28 ` Chen-Yu Tsai
2017-01-04 0:22 ` André Przywara [this message]
2017-01-04 2:37 ` Chen-Yu Tsai
2017-01-15 15:59 ` Dropping device tree pinmux nodes for GPIO usage (Was: [PATCH 3/5] arm64: dts: sun50i: add MMC nodes) Rask Ingemann Lambertsen
2017-01-17 8:33 ` Maxime Ripard
2017-01-05 17:50 ` [PATCH 3/5] arm64: dts: sun50i: add MMC nodes Maxime Ripard
2017-01-02 23:03 ` [PATCH 4/5] arm64: dts: Pine64: add MMC support Andre Przywara
2017-01-02 23:03 ` [PATCH 5/5] arm64: dts: add BananaPi-M64 support Andre Przywara
2017-01-05 17:36 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6e90ad76-8f25-538a-433e-ab31e8fab526@arm.com \
--to=andre.przywara@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox