1. 19 Jun, 2018 8 commits
    • Benjamin Fair's avatar
      ti: k3: common: Add platform core management helpers · 89574715
      Benjamin Fair authored
      
      
      The K3 family of SoCs has multiple interconnects. The key interconnect
      for high performance processors is the MSMC3 interconnect. This is
      an io-coherent interconnect which exports multiple ports for each
      processor cluster.
      
      Sometimes, port 0 of the MSMC may not have an ARM cluster OR is isolated
      such that the instance of ATF does not manage it. Define macros
      in platform_def.h to help handle this.
      Signed-off-by: default avatarBenjamin Fair <b-fair@ti.com>
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      89574715
    • Nishanth Menon's avatar
      ti: k3: Setup initial files for platform · 1841c533
      Nishanth Menon authored
      
      
      Create the baseline Makefile, platform definitions file and platform
      specific assembly macros file. This includes first set of constants
      for the platform including cache sizes and linker format and a stub for
      BL31 and the basic memory layout
      
      K3 SoC family of processors do not use require a BL1 or BL2 binary,
      since such functions are provided by an system controller on the SoC.
      This lowers the burden of ATF to purely managing the local ARM cores
      themselves.
      Signed-off-by: default avatarBenjamin Fair <b-fair@ti.com>
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      1841c533
    • Antonio Nino Diaz's avatar
      plat/arm: Migrate AArch64 port to the multi console driver · 88a0523e
      Antonio Nino Diaz authored
      
      
      The old API is deprecated and will eventually be removed.
      
      Arm platforms now use the multi console driver for boot and runtime
      consoles. However, the crash console uses the direct console API because
      it doesn't need any memory access to work. This makes it more robust
      during crashes.
      
      The AArch32 port of the Trusted Firmware doesn't support this new API
      yet, so it is only enabled in AArch64 builds. Because of this, the
      common code must maintain compatibility with both systems. SP_MIN
      doesn't have to be updated because it's only used in AArch32 builds.
      The TSP is only used in AArch64, so it only needs to support the new
      API without keeping support for the old one.
      
      Special care must be taken because of PSCI_SYSTEM_SUSPEND. In Juno, this
      causes the UARTs to reset (except for the one used by the TSP). This
      means that they must be unregistered when suspending and re-registered
      when resuming. This wasn't a problem with the old driver because it just
      restarted the UART, and there were no problems associated with
      registering and unregistering consoles.
      
      The size reserved for BL2 has been increased.
      
      Change-Id: Icefd117dd1eb9c498921181a21318c2d2435c441
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      88a0523e
    • Anson Huang's avatar
      Support for NXP's i.MX8QM SoC · baa7650b
      Anson Huang authored
      NXP's i.MX8QM is an ARMv8 SoC with 2 clusters, 2 Cortex-A72
      cores in one cluster and 4 Cortex-A53 in the other cluster,
      and also has system controller (Cortex-M4) inside, documentation
      can be found in below link:
      
      https://www.nxp.com/products/processors-and-microcontrollers/
      
      
      applications-processors/i.mx-applications-processors/i.mx-8-processors:IMX8-SERIES
      
      This patch adds support for booting up SMP linux kernel (v4.9).
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      baa7650b
    • Anson Huang's avatar
      Support for NXP's i.MX8QX SoC · 0bc18309
      Anson Huang authored
      NXP's i.MX8QX is an ARMv8 SoC with 4 Cortex-A35 cores and
      system controller (Cortex-M4) inside, documentation can
      be found in below link:
      
      https://www.nxp.com/products/processors-and-microcontrollers/
      
      
      applications-processors/i.mx-applications-processors/i.mx-8-processors:IMX8-SERIES
      
      This patch adds support for booting up SMP linux kernel (v4.9).
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      0bc18309
    • Anson Huang's avatar
      Support for NXP's imx SoC common function · bd08def3
      Anson Huang authored
      
      
      This patch adds support for NXP's imx SoC common
      function support like topology, gic implementation.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      bd08def3
    • Anson Huang's avatar
      Support for NXP's imx SoC debug uart · 27b9d5ea
      Anson Huang authored
      
      
      Add NXP's imx SoC debug uart driver.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      27b9d5ea
    • Anson Huang's avatar
      Support for NXP's i.MX8 SoCs IPC · ff2743e5
      Anson Huang authored
      
      
      NXP's i.MX8 SoCs have system controller (M4 core)
      which takes control of clock management, power management,
      partition management, PAD management etc., other
      clusters like Cortex-A35 can send out command via MU
      (Message Unit) to system controller for clock/power
      management etc..
      
      This patch adds basic IPC(inter-processor communication) support.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      ff2743e5
  2. 15 Jun, 2018 6 commits
    • John Tsichritzis's avatar
      Panic in BL1 when TB_FW_CONFIG is invalid · 355e0967
      John Tsichritzis authored
      
      
      In Arm platforms, when using dynamic configuration, the necessary
      parameters are made available as a DTB. The DTB is loaded by BL1 and,
      later on, is parsed by BL1, BL2 or even both, depending on when
      information from the DTB is needed.
      
      When the DTB is going to be parsed, it must be validated first, to
      ensure that it is properly structured. If an invalid DTB is detected
      then:
        - BL1 prints a diagnostic but allows execution to continue,
        - BL2 prints a diagnostic and panics.
      
      Now the behaviour of BL1 is changed so for it also to panic. Thus, the
      behaviour of BL1 and BL2 is now similar.
      
      Keep in mind that if BL1 only loads the DTB but it doesn't need to
      read/write it, then it doesn't validate it. The validation is done only
      when the DTB is actually going to be accessed.
      
      Change-Id: Idcae6092e6dbeab7248dd5e041d6cbb7784fe410
      Signed-off-by: default avatarJohn Tsichritzis <john.tsichritzis@arm.com>
      355e0967
    • Andre Przywara's avatar
      allwinner: Add security setup · acb8b3ca
      Andre Przywara authored
      
      
      Some peripherals are TrustZone aware, so they need to be configured to
      be accessible from non-secure world, as we don't need any of them being
      exclusive to the secure world.
      This affects some clocks, DMA channels and the Secure Peripheral
      Controller (SPC). The latter controls access to most devices, but is not
      active unless booting with the secure boot fuse burnt.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      acb8b3ca
    • Samuel Holland's avatar
      allwinner: Add platform PSCI functions required for SMP · 560581ec
      Samuel Holland authored
      
      
      The reset vector entry point is preserved across CPU resets, so it only
      needs to be set once at boot.
      
      Hotplugged CPUs are not actually powered down, but are put in a wfi with
      the GIC disconnected.
      
      With this commit, Linux is able to enable, hotplug and use all four CPUs.
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      560581ec
    • Samuel Holland's avatar
      allwinner: Add functions to control CPU power/reset · 333d66cf
      Samuel Holland authored
      
      
      sun50i_cpu_on will be used by the PSCI implementation to initialize
      secondary cores for SMP. Unfortunately, sun50i_cpu_off is not usable by
      PSCI directly, because it is not possible for a CPU to use this function
      to power itself down. Power cannot be shut off until the outputs are
      clamped, and MMIO does not work once the outputs are clamped.
      
      But at least CPU0 can shutdown the other cores early in the BL31 boot
      process and before shutting down the system.
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      333d66cf
    • Samuel Holland's avatar
      allwinner: Add Allwinner A64 support · 64b3d9d8
      Samuel Holland authored
      
      
      The Allwinner A64 SoC is quite popular on single board computers.
      It comes with four Cortex-A53 cores in a singe cluster and the usual
      peripherals for set-top box/tablet SoC.
      
      The ATF platform target is called "sun50i_a64".
      
      [Andre: adapted to amended directory layout, removed unneeded definitions ]
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      64b3d9d8
    • Samuel Holland's avatar
      allwinner: Introduce basic platform support · 58032586
      Samuel Holland authored
      
      
      This platform supports Allwinner's SoCs with ARMv8 cores. So far they
      all sport a single cluster of Cortex-A53 cores.
      
      "sunxi" is the original code name used for this platform, and since it
      appears in the Linux kernel and in U-Boot as well, we use it here as a
      short file name prefix and for identifiers.
      
      This port includes BL31 support only. U-Boot's SPL takes the role of the
      primary loader, also doing the DRAM initialization. It then loads the
      rest of the firmware, namely ATF and U-Boot (BL33), then hands execution
      over to ATF.
      
      This commit includes the basic platform code shared across all SoCs.
      There is no platform.mk yet.
      
      [Andre: moved files into proper directories, supported RESET_TO_BL31,
      	various clean ups and simplifications ]
      Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      58032586
  3. 13 Jun, 2018 2 commits
    • Paul Kocialkowski's avatar
      rockchip: Move stdint header to the offending header file · fb83888b
      Paul Kocialkowski authored
      
      
      The stdint header was introduced to rk3399's plat_sip_calls.c in order
      to fix missing stdint definitions. However, ordering headers
      alphabetically caused the fix to be ineffective, as stint was then
      included after the offending header file (dfs.h).
      
      Move the stdint include to that header to properly fix the issue.
      
      Change-Id: Ieaad37a7932786971488ab58fc5b169bfa79e197
      Signed-off-by: default avatarPaul Kocialkowski <contact@paulk.fr>
      fb83888b
    • Sandrine Bailleux's avatar
      SPM: Treat SP xlat tables the same as others · d801a1d0
      Sandrine Bailleux authored
      The translation tables allocated for the Secure Partition do not need
      to be treated as a special case. They can be put amongst the other
      tables mapping BL31's general purpose memory. They will be mapped with
      the same attributes as them, which is fine.
      
      The explicit alignment constraint in BL31's linker script to pad the
      last page of memory allocated to the Secure Partition's translation
      tables is useless too, as page tables are per se pages, thus their
      end address is naturally aligned on a page-boundary.
      
      In fact, this patch does not change the existing behaviour. Since
      patch 22282bb6
      
       ("SPM: Move all SP-related info to SP context
      struct"), the secure_partition.c file has been renamed into sp_xlat.c
      but the linker script has not been properly updated. As a result, the
      SP translation tables are not specifically put at the start of the
      xlat_table linker section, the __SP_IMAGE_XLAT_TABLES_START__/_END__
      symbols have the same value, the size of the resulting mmap_region
      covering these xlat tables is 0 and so it is ignored.
      
      Change-Id: I4cf0a4cc090298811cca53fc9cee74df0f2b1512
      Signed-off-by: default avatarSandrine Bailleux <sandrine.bailleux@arm.com>
      d801a1d0
  4. 12 Jun, 2018 4 commits
    • Antonio Nino Diaz's avatar
      LOAD_IMAGE_V1: Align BL2 memory layout struct to 8 bytes · f13cb561
      Antonio Nino Diaz authored
      
      
      In LOAD_IMAGE_V1 (i.e when LOAD_IMAGE_V2=0) the bl2_tzram_layout is,
      by default, assigned to the bl1_tzram_layout->free_base which is
      dynamically calculated based on the images loaded in memory. There is a
      chance that the bl2_tzram_layout will be assigned a value not aligned to
      8 bytes. This patch rounds up the free_base value for the required
      alignment.
      
      This doesn't happen in LOAD_IMAGE_V2 because the bl2_tzram_layout is
      assigned by default to the bl1_tzram_layout->total_base, which is
      aligned.
      
      Change-Id: Idc583e7dad993d02ac6791797406118c96f83fa1
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      f13cb561
    • Daniel Boulby's avatar
      Fix MISRA Rule 5.7 Part 2 · a138f768
      Daniel Boulby authored
      
      
      Follow convention of shorter names for smaller scope to fix
      violations of MISRA rule 5.7
      
      To prevent violation of directive 4.5 having variable name channel
      in css_pm_scmi.c not being typographically ambiguous change macro
      argument CHANNEL in css_mhu_doorbell.h change argument to _channel
      to fit with our convention which is a permitted exception of
      directive 4.5 for this project
      
      Rule 5.7: A tag name shall be a unique identifier
      
      Fixed for:
          make LOG_LEVEL=50 PLAT=juno
      
      Change-Id: I147cdb13553e83ed7df19149b282706db115d612
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      a138f768
    • Daniel Boulby's avatar
      Fix MISRA Rule 5.3 Part 5 · ff4e86f9
      Daniel Boulby authored
      
      
      Use a _ prefix for macro arguments to prevent that argument from
      hiding variables of the same name in the outer scope
      
      Rule 5.3: An identifier declared in an inner scope shall not
                hide an identifier declared in an outer scope
      
      Fixed For:
          make LOG_LEVEL=50 PLAT=juno
      
      Change-Id: I575fbc96e8267f2b075e88def1f6e3185394613a
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      ff4e86f9
    • Satoshi Ikawa's avatar
      uniphier: fix CCI-500 connection for LD20 · 4fc1a381
      Satoshi Ikawa authored
      
      
      The slave ports of LD20 CCI-500 are connected as follows:
      
        S0: CA53
        S1: CA72
      
      Be careful because the slave interface is not arranged in the
      cluster number order (CA72: cluster 0, CA53: cluster 1).
      Root-caused-by: default avatarTetsuya Yoshizaki <yoshizaki.tetsuya@socionext.com>
      Signed-off-by: default avatarSatoshi Ikawa <ikawa.satoshi@socionext.com>
      4fc1a381
  5. 08 Jun, 2018 4 commits
  6. 07 Jun, 2018 2 commits
    • Soby Mathew's avatar
      Juno: Bump up the BL1-RW size · 2013d8f0
      Soby Mathew authored
      
      
      This patch bumps up the BL1-RW size for Juno and at the same time reduces
      the BL2 size when TBB is enabled, TF_MBEDTLS_KEY_ALG=rsa+ecdsa. The BL2
      size for this config is reduced as it was observed that the peak memory
      usage is only reached when SPD=opteed and the dual rsa+ecdsa support is
      not needed for this case.
      
      Change-Id: Ia9009771b5cfd805e9cc75410aabb7db99fc2fbc
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      2013d8f0
    • Soby Mathew's avatar
      ARM platforms: Move BL31 below BL2 to enable BL2 overlay · c099cd39
      Soby Mathew authored
      
      
      The patch changes the layout of BL images in memory to enable
      more efficient use of available space. Previously BL31 was loaded
      with the expectation that BL2 memory would be reclaimed by BL32
      loaded in SRAM. But with increasing memory requirements in the
      firmware, we can no longer fit BL32 in SRAM anymore which means the
      BL2 memory is not reclaimed by any runtime image. Positioning BL2
      below BL1-RW and above BL31 means that the BL31 NOBITS can be
      overlaid on BL2 and BL1-RW.
      
      This patch also propogates the same memory layout to BL32 for AArch32
      mode. The reset addresses for the following configurations are also
      changed :
         * When RESET_TO_SP_MIN=1 for BL32 in AArch32 mode
         * When BL2_AT_EL3=1 for BL2
      
      The restriction on BL31 to be only in DRAM when SPM is enabled
      is now removed with this change. The update to the firmware design
      guide for the BL memory layout is done in the following patch.
      
      Change-Id: Icca438e257abe3e4f5a8215f945b9c3f9fbf29c9
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      c099cd39
  7. 25 May, 2018 1 commit
    • Daniel Boulby's avatar
      Remove duplicate weak definition · bc325c2c
      Daniel Boulby authored
      
      
      The weak pragma was assigned twice to the bl2_plat_handle_post_image_load
      definition both in plat/common/ and in plat/arm/common/ this was an error as
      it should have only have been defined in plat/common
      
      Change-Id: Id85e14c699cb09ed998d1677f2a172e760911918
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      bc325c2c
  8. 24 May, 2018 1 commit
    • Antonio Nino Diaz's avatar
      plat/arm: SPM: Force BL31 to DRAM when SPM is used · e829a379
      Antonio Nino Diaz authored
      
      
      BL31 is running out of space, and the use-case of SPM doesn't require it
      to be in SRAM. To prevent BL31 from running out of space in the future,
      move BL31 to DRAM if SPM is enabled.
      
      Secure Partition Manager design document updated to reflect the changes.
      
      Increased the size of the stack of BL31 for builds with SPM.
      
      The translation tables used by SPM in Arm platforms have been moved back
      to the 'xlat_tables' region instead of 'arm_el3_tzc_dram'. Everything is
      in DRAM now, so it doesn't make sense to treat them in a different way.
      
      Change-Id: Ia6136c8e108b8da9edd90e9d72763dada5e5e5dc
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      e829a379
  9. 21 May, 2018 1 commit
    • Soby Mathew's avatar
      FVP: Add dummy configs for BL31, BL32 and BL33 · 1d71ba14
      Soby Mathew authored
      
      
      This patch adds soc_fw_config, tos_fw_config and nt_fw_config to the FVP.
      The config files are placeholders and do not have any useful bindings
      defined. The tos_fw_config is packaged in FIP and loaded by BL2 only
      if SPD=tspd. The load address of these configs are specified in tb_fw_config
      via new bindings defined for these configs. Currently, in FVP, the
      soc_fw_config and tos_fw_config is loaded in the page between BL2_BASE
      and ARM_SHARED_RAM. This memory was typically used for BL32 when
      ARM_TSP_RAM_LOCATION=tsram but since we cannot fit BL32 in that
      space anymore, it should be safe to use this memory for these configs.
      There is also a runtime check in arm_bl2_dyn_cfg_init() which ensures
      that this overlap doesn't happen.
      
      The previous arm_dyn_get_hwconfig_info() is modified to accept configs
      other than hw_config and hence renamed to arm_dyn_get_config_load_info().
      The patch also corrects the definition of ARM_TB_FW_CONFIG_LIMIT to be
      BL2_BASE.
      
      Change-Id: I03a137d9fa1f92c862c254be808b8330cfd17a5a
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      1d71ba14
  10. 18 May, 2018 1 commit
    • Soby Mathew's avatar
      FVP: Enable capability to disable auth via dynamic config · 6e79f9fd
      Soby Mathew authored
      
      
      This patch adds capability to FVP to disable authentication dynamically
      via the `disable_auth` property in TB_FW_CONFIG. Both BL1 and BL2 parses
      the TB_FW_CONFIG for the `disable_auth` property and invokes the
      `load_dyn_disable_auth()` API to disable authentication if the
      property is set to 1. The DYN_DISABLE_AUTH is enabled by default for
      FVP as it is a development platform. Note that the TB_FW_CONFIG has to
      be authenticated by BL1 irrespective of these settings.
      
      The arm_bl2_dyn_cfg_init() is now earlier in bl2_plat_preload_setup()
      rather than in bl2_platform_setup() as we need to get the value of
      `disable_auth` property prior to authentication of any image by BL2.
      
      Change-Id: I734acd59572849793e5020ec44c6ac51f654a4d1
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      6e79f9fd
  11. 17 May, 2018 10 commits