On Tue, Apr 4, 2017 at 7:49 AM, Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: > On 04/04/2017 02:26 PM, Rob Herring wrote: >> On Tue, Apr 4, 2017 at 3:51 AM, Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: >>> On 04/03/2017 06:34 PM, Rob Herring wrote: >>>> On Fri, Mar 31, 2017 at 04:10:30PM +0200, Neil Armstrong wrote: >>>>> On 03/31/2017 03:44 PM, Arnd Bergmann wrote: >>>>>> On Fri, Mar 31, 2017 at 10:47 AM, Neil Armstrong >>>>>> <narmstrong@xxxxxxxxxxxx> wrote: >>>>>>> Add bindings for the SoC information register of the Amlogic SoCs. >>>>>>> >>>>>>> Signed-off-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> >>>>>>> --- >>>>>>> Documentation/devicetree/bindings/arm/amlogic.txt | 20 ++++++++++++++++++++ >>>>>>> 1 file changed, 20 insertions(+) >>>>>>> >>>>>>> diff --git a/Documentation/devicetree/bindings/arm/amlogic.txt b/Documentation/devicetree/bindings/arm/amlogic.txt >>>>>>> index bfd5b55..b850985 100644 >>>>>>> --- a/Documentation/devicetree/bindings/arm/amlogic.txt >>>>>>> +++ b/Documentation/devicetree/bindings/arm/amlogic.txt >>>>>>> @@ -52,3 +52,23 @@ Board compatible values: >>>>>>> - "amlogic,q201" (Meson gxm s912) >>>>>>> - "nexbox,a95x" (Meson gxbb or Meson gxl s905x) >>>>>>> - "nexbox,a1" (Meson gxm s912) >>>>>>> + >>>>>>> +Amlogic Meson GX SoCs Information >>>>>>> +---------------------------------- >>>>>>> + >>>>>>> +The Meson SoCs have a Product Register that allows to retrieve SoC type, >>>>>>> +package and revision information. If present, a device node for this register >>>>>>> +should be added. >>>>>>> + >>>>>>> +Required properties: >>>>>>> + - compatible: For Meson GX SoCs, must be "amlogic,meson-gx-socinfo". >>>>>>> + - reg: Base address and length of the register block. >>>>>>> + >>>>>>> +Examples >>>>>>> +-------- >>>>>>> + >>>>>>> + chipid@220 { >>>>>>> + compatible = "amlogic,meson-gx-socinfo"; >>>>>>> + reg = <0x0 0x00220 0x0 0x4>; >>>>>>> + }; >>>>>>> + >>>>>> >>>>>> The register location would hint that this is in the middle of some block of >>>>>> random registers, i.e. a syscon or some unrelated device. >>>>>> >>>>>> Are you sure that "socinfo" is the actual name of the IP block and that >>>>>> it only has a single 32-bit register? >>>>>> >>>>>> Arnd >>>>>> >>>>> >>>>> Hi Arnd, >>>>> >>>>> I'm sorry I did not find any relevant registers in the docs or source code describing >>>>> it in a specific block of registers, and no close enough register definitions either. >>>>> They may be used by the secure firmware I imagine. >>>>> >>>>> For the register name, Amlogic refers it to "cpu_version" in their code, but it really >>>>> gives some details on the whole SoC and package, and socinfo seems better. >>>> >>>> A register at address 0x220 seems a bit strange (unless there's ranges >>>> you're not showing), but ROM code at this address would be fairly >>>> typical. And putting version information into the ROM is also common. >>>> >>>> Rob >>>> >>> >>> Hi Rob. >>> >>> Indeed it's part of a larger range : >>> aobus: aobus@c8100000 { >>> compatible = "simple-bus"; >>> reg = <0x0 0xc8100000 0x0 0x100000>; >>> #address-cells = <2>; >>> #size-cells = <2>; >>> ranges = <0x0 0x0 0x0 0xc8100000 0x0 0x100000>; >>> >>> >>> While scrubbing on the uboot source, I found a sort of block of registers dedicated to communicate with >>> the secure firmware : >>> AO_SEC_REG0 0x140 >>> AO_SEC_REG1 0x144 >>> AO_SEC_REG2 0x148 >>> AO_SEC_TMODE_PWD0 0x160 >>> AO_SEC_TMODE_PWD1 0x164 >>> AO_SEC_TMODE_PWD2 0x168 >>> AO_SEC_TMODE_PWD3 0x16C >>> AO_SEC_SCRATCH 0x17C >>> AO_SEC_JTAG_PWD0 0x180 >>> AO_SEC_JTAG_PWD1 0x184 >>> AO_SEC_JTAG_PWD2 0x188 >>> AO_SEC_JTAG_PWD3 0x18C >>> AO_SEC_JTAG_SEC_CNTL 0x190 >>> AO_SEC_JTAG_PWD_ADDR0 0x194 >>> AO_SEC_JTAG_PWD_ADDR1 0x198 >>> AO_SEC_JTAG_PWD_ADDR2 0x19C >>> AO_SEC_JTAG_PWD_ADDR3 0x1A0 >>> AO_SEC_SHARED_AHB_SRAM_REG0_0 0x1C0 >>> AO_SEC_SHARED_AHB_SRAM_REG0_1 0x1C4 >>> AO_SEC_SHARED_AHB_SRAM_REG0_2 0x1C8 >>> AO_SEC_SHARED_AHB_SRAM_REG1_0 0x1CC >>> AO_SEC_SHARED_AHB_SRAM_REG1_1 0x1D0 >>> AO_SEC_SHARED_AHB_SRAM_REG1_2 0x1D4 >>> AO_SEC_SHARED_AHB_SRAM_REG2_0 0x1D8 >>> AO_SEC_SHARED_AHB_SRAM_REG2_1 0x1DC >>> AO_SEC_SHARED_AHB_SRAM_REG2_2 0x1E0 >>> AO_SEC_SHARED_AHB_SRAM_REG3_0 0x1E4 >>> AO_SEC_SHARED_AHB_SRAM_REG3_1 0x1E8 >>> AO_SEC_SHARED_AHB_SRAM_REG3_2 0x1EC >>> AO_SEC_AO_AHB_SRAM_REG0_0 0x1F0 >>> AO_SEC_AO_AHB_SRAM_REG0_1 0x1F4 >>> AO_SEC_AO_AHB_SRAM_REG1_0 0x1F8 >>> AO_SEC_AO_AHB_SRAM_REG1_1 0x1FC >>> AO_SEC_SD_CFG8 0x220 >>> AO_SEC_SD_CFG9 0x224 >>> AO_SEC_SD_CFG10 0x228 >>> AO_SEC_SD_CFG11 0x22C >>> AO_SEC_SD_CFG12 0x230 >>> AO_SEC_SD_CFG13 0x234 >>> AO_SEC_SD_CFG14 0x238 >>> AO_SEC_SD_CFG15 0x23C >>> AO_SEC_GP_CFG0 0x240 >>> AO_SEC_GP_CFG1 0x244 >>> AO_SEC_GP_CFG2 0x248 >>> AO_SEC_GP_CFG3 0x24C >>> AO_SEC_GP_CFG4 0x250 >>> AO_SEC_GP_CFG5 0x254 >>> AO_SEC_GP_CFG6 0x258 >>> AO_SEC_GP_CFG7 0x25C >>> AO_SEC_GP_CFG8 0x260 >>> AO_SEC_GP_CFG9 0x264 >>> AO_SEC_GP_CFG10 0x268 >>> AO_SEC_GP_CFG11 0x26C >>> AO_SEC_GP_CFG12 0x270 >>> AO_SEC_GP_CFG13 0x274 >>> AO_SEC_GP_CFG14 0x278 >>> AO_SEC_GP_CFG15 0x27C >>> >>> >>> As you see, the register we use here is AO_SEC_SD_CFG8... >>> >>> Should I define all this block as simple-mfd and refer to it as a regmap ? >>> >>> aobus: aobus@c8100000 { >>> compatible = "simple-bus"; >>> reg = <0x0 0xc8100000 0x0 0x100000>; >>> #address-cells = <2>; >>> #size-cells = <2>; >>> ranges = <0x0 0x0 0x0 0xc8100000 0x0 0x100000>; >>> >>> ao_secure: ao-secure@140 { >>> compatible = "amlogic,meson-gx-ao-secure", "simple-mfd"; >>> reg = <0x0 0x140 0x0 0x140>; >>> }; >>> }; >>> >>> chipid { >>> compatible = "amlogic,meson-gx-socinfo"; >>> ao-secure = <&ao_secure>; >>> chip-info-reg = <0xe0>; >> >> Why even divide it up further in DT? IMO, describing single >> registers/address in DT is too fine grained. >> >> Rob >> > > Rob, I don't get it. > > Maybe something like that ? > > aobus: aobus@c8100000 { > compatible = "simple-bus"; > reg = <0x0 0xc8100000 0x0 0x100000>; > #address-cells = <2>; > #size-cells = <2>; > ranges = <0x0 0x0 0x0 0xc8100000 0x0 0x100000>; > > ao_secure: ao-secure@140 { > compatible = "amlogic,meson-gx-ao-secure", "simple-mfd", "simple-bus"; > reg = <0x0 0x140 0x0 0x140>; > #address-cells = <1>; > #size-cells = <1>; > > chipid@e0 { > compatible = "amlogic,meson-gx-socinfo"; > reg = <0xe0 0x4>; > }; > }; > }; That's somewhat better, though your addressing is wrong. > > Concerning the fine graining, I'm sorry but the actual information comes from a single register here... Yes, but the only useful information here is really "0xe0". I imagine you also want "amlogic,meson-gx-socinfo" to instantiate a driver, but that's not a reason to put a node into DT. You can just easily have whatever handles "amlogic,meson-gx-ao-secure" provide the version information out of register 0xe0. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html