[PATCH 3/4] [RFC] ARM: dts: stm32: Rework DDR DT inclusion
Marek Vasut
marex at denx.de
Wed Apr 8 15:53:54 CEST 2020
On 4/8/20 12:09 PM, Patrick DELAUNAY wrote:
> Hi,
Hi,
>> From: Marek Vasut <marex at denx.de>
>> Sent: mardi 7 avril 2020 22:01
>>
>> On 4/7/20 3:00 PM, Patrick DELAUNAY wrote:
>>> Dear Marek,
>>
>> Hi,
>>
>>>> diff --git a/arch/arm/dts/stm32mp15-ddr.dtsi
>>>> b/arch/arm/dts/stm32mp15-ddr.dtsi index 38f29bb789..50ca7092c4 100644
>>>> --- a/arch/arm/dts/stm32mp15-ddr.dtsi
>>>> +++ b/arch/arm/dts/stm32mp15-ddr.dtsi
>>>> @@ -3,152 +3,233 @@
>>>> * Copyright : STMicroelectronics 2018
>>>> */
>>>>
>>>> -/ {
>>>> - soc {
>>>> - ddr: ddr at 5a003000 {
>>>> - u-boot,dm-pre-reloc;
>>>
>>> For information, binding file must be updated also
>>> ./doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt
>>>
>>> This binding and the helper file " stm32mp15-ddr.dtsi" is common with TF-A.
>>>
>>>> +&ddr {
>>>> + config at DDR_MEM_LABEL {
>>>
>>> I think that "config at text"
>>> don't respect the latest device tree rule and a warning is raised with
>>> latest dtc version
>>>
>>> it is now mandatory to value after align @ with reg value
>>>
>>> config@<reg> {
>>> reg = <reg>
>>> }
>>>
>>> It is why I prefer a name without meaning here (as config-1 /
>>> config-2), And selection is done on st,mem-name
>>>
>>> config-1 {
>>> ....
>>> }
>>> config-2 {
>>> ....
>>> }
>>>
>>>
>>> And I want to propose, for DH board with several configuration
>>>
>>> &ddr {
>>> config-1 {
>>> #include "stm32mp15-ddr3-1x4Gb-1066-binG.dtsi"
>>> }
>>> config-2 {
>>> #include "stm32mp15-ddr3-2x4Gb-1066-binG.dtsi"
>>> }
>>> }
>>>
>>>
>>> For ST board with only one configuration (don't change the device
>>> tree, config at the same level) &ddr { #include
>>> "stm32mp15-ddr3-1x4Gb-1066-binG.dtsi"
>>> }
>>>
>>>
>>> NB: I have a other idea, it is to use the "reg" as config identifier to select
>> configuration, as it is done with OTP with "opp-supported-hw"
>>> in linux/Documentation/devicetree/bindings/opp/opp.txt
>>>
>>> And reg can be the identified with your GPIO setting
>>>
>>> &ddr {
>>> config at 2 {
>>> reg = 2;
>>> #include "stm32mp15-ddr3-1x4Gb-1066-binG.dtsi"
>>> }
>>> config at 3 {
>>> reg = 3;
>>> #include "stm32mp15-ddr3-2x4Gb-1066-binG.dtsi"
>>> }
>>> }
>>>
>>> This proposal avoids to compare a hardcoded string in SPL...
>>
>> I would much rather prefer to avoid manually writing the config@<foo> parts, that
>> should be handled by some macro magic instead. With my proposal, it is not
>> necessary at all either.
>
> Ok, but you should keep the support when DDR_MEM_LABEL is not available (the ddr dtsi is generated by ST tools)
>
> I can propose a intermediate solution for the macro :
>
> ./arch/arm/dts/stm32mp15-ddr.dtsi
>
> &ddr {
> #ifdef DDR_MEM_CONFIG
> config at DDR_MEM_CONFIG {
> reg = < DDR_MEM_CONFIG>
> #endif
>
> st,mem-name = DDR_MEM_NAME;
> st,mem-speed = <DDR_MEM_SPEED>;
> st,mem-size = <DDR_MEM_SIZE>;
> [....]
>
> st,phy-cal = <
> DDR_DX0DLLCR
> DDR_DX0DQTR
> DDR_DX0DQSTR
> DDR_DX1DLLCR
> DDR_DX1DQTR
> DDR_DX1DQSTR
> DDR_DX2DLLCR
> DDR_DX2DQTR
> DDR_DX2DQSTR
> DDR_DX3DLLCR
> DDR_DX3DQTR
> DDR_DX3DQSTR
> >;
> #ifdef DDR_MEM_CONFIG
> }
> #endif
> }
>
> #ifdef DDR_MEM_CONFIG
> #undef DDR_MEM_CONFIG
> #endif
>
> #undef DDR_MEM_LABEL
> #undef DDR_MEM_NAME
> #undef DDR_MEM_SPEED
> #undef DDR_MEM_SIZE
> [....]
> #undef DDR_DX3DQTR
> #undef DDR_DX3DQSTR
>
>
> So the file generate by CubeMX don't change = stm32mp15-ddr3-1x4Gb-1066-binG.dtsi and stm32mp15-ddr3-2x4Gb-1066-binG.dtsi.
>
> The ST board devicetree don't change: the DDR configuration is still in ddr node (as in TF-A)
>
> For your board, the device tree /arch/arm/dts/stm32mp15xx-dhcor-u-boot.dtsi
>
> [...]
> #define DDR_MEM_CONFIG 2
> #include "stm32mp15-ddr3-1x4Gb-1066-binG.dtsi"
>
> #define DDR_MEM_CONFIG 3
> #include "stm32mp15-ddr3-2x4Gb-1066-binG.dtsi"
> [...]
>
> And you can directly compare reg value of sub node with ddr3code.
>
> It is more acceptable ?
I wonder, can't we have some sort of macro where you would specify a
compatible string for the DDR config (on which you can match in your
board_stm32mp1_ddr_config_name_match() and the dtsi file to be included,
and the macro would generate the necessary entries in the &ddr {}
controller node ?
E.g. like this:
#include "stm32mp15-ddr.dtsi"
STM32MP15_DDR("vendor,board-1gib", stm32mp15-ddr3-2x4Gb-1066-binG.dtsi);
STM32MP15_DDR("vendor,board-2gib", stm32mp15-ddr3-4x4Gb-1066-binG.dtsi);
and then in board_stm32mp1_ddr_config_name_match()
{
if (!strcmp(..., "vendor,board-1gib"))
return 0;
...
}
More information about the U-Boot
mailing list