10 Jul, 2019

1 commit

  • Until the last SoC, the register addresses have been hard-coded because
    they are always constant. For a planned new SoC, the register bases
    will be completely changed. I insist on supporting multiple SoCs/boards
    by a single defconfig (uniphier_v8_defconfig) since duplicating similar
    defconfig files is a maintenance burden. The base addresses must be
    fixed-up at run-time somehow.

    Previously, the board init code identified the SoC by reading out the
    SG_REVISION register. This is much easier than parsing DT.

    You cannot do it any more because the base address of SG will be
    changed. The SG_REVISION register exists to read out the SoC ID, but
    you never know its address before identifying the SoC. Oh well.

    So, the possible solution is to parse the DT, and find out the node
    with "*-soc-glue" compatible string. Then, sg_base is set to the value
    of the "reg" property. The sc_base is set up likewise.

    It is worth noting a pit-fall. Having sc_base and sg_base in the global
    scope will make the life easier, but the global variables are poorly
    supported before the relocation. In fact, the .bss section overwraps
    with DT. Allocating them in the .bss section would break DT. So, I gave
    dummy initializers to assign them in the .data section.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada