1. 26 Mar, 2021 5 commits
    • Nishanth Menon's avatar
      plat: ti: k3: board: Let explicitly map our SEC_SRAM_BASE to 0x0 · 3dd87efb
      Nishanth Menon authored
      
      
      ENABLE_PIE (position independent executable) is default on K3
      platform to handle variant RAM configurations in the system. This,
      unfortunately does cause confusion while reading the code, so, lets
      make things explicit by selecting 0x0 as the "SEC_SRAM_BASE" out of
      which we compute the BL31_BASE depending on usage.
      
      Lets also document a warning while at it to help folks copying code
      over to a custom K3 platform and optimizing size by disabling PIE to
      modify the defaults.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I8e67a9210e907e266ff6a78ba4d02e3259bb2b21
      3dd87efb
    • Nishanth Menon's avatar
      plat: ti: k3: board: Lets cast our macros · f5872a00
      Nishanth Menon authored
      
      
      Lets cast our macros to the right types and reduce a few MISRA
      warnings.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I0dc06072713fe7c9440eca0635094c5f3ceb7f1c
      f5872a00
    • Nishanth Menon's avatar
      plat: ti: k3: common: bl31_setup: Use BL31_SIZE instead of computing · a2b56476
      Nishanth Menon authored
      
      
      We compute BL31_END - BL31_START on the fly, which is basically
      BL31_SIZE. Lets just use the BL31_SIZE directly so that we dont
      complicate PIE relocations when actual address is +ve and -ve offsets
      relative to link address.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I5e14906381d2d059163800d39798eb39c42da4ec
      a2b56476
    • Nishanth Menon's avatar
      plat: ti: k3: platform_def.h: Define the correct number of max table entries · c9f887d8
      Nishanth Menon authored
      
      
      Since we are using static xlat tables, we need to account for exact
      count of table entries we are actually using.
      peripherals usart, gic, gtc, sec_proxy_rt, scfg and data account for 6 entries
      and are constant, however, we also need to account for:
      bl31 full range, codebase, ro_data as additional 3 region
      
      With USE_COHERENT_MEM we do add in 1 extra region as well.
      
      This implies that we will have upto 9 or 10 regions based on
      USE_COHERENT_MEM usage. Vs we currently define 8 regions.
      
      This gets exposed with DEBUG=1 and assert checks trigger, which for some
      reason completely escaped testing previously.
      
      ASSERT: lib/xlat_tables_v2/xlat_tables_core.c:97
      BACKTRACE: START: assert
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I962cdfc779b4eb3b914fe1c46023d50bc289e6bc
      c9f887d8
    • Nishanth Menon's avatar
      plat: ti: k3: board: lite: Increase SRAM size to account for additional table · 2fb5312f
      Nishanth Menon authored
      
      
      We actually have additional table entries than what we accounted for in
      our size. MAX_XLAT_TABLES is 8, but really we could be using upto 10
      depending on the platform. So, we need an extra 8K space in.
      
      This gets exposed with DEBUG=1 and assert checks trigger, which for some
      reason completely escaped testing previously.
      
      ASSERT: lib/xlat_tables_v2/xlat_tables_core.c:97
      BACKTRACE: START: assert
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I5c5d04440ef1fccfaf2317066f3abbc0ec645903
      2fb5312f
  2. 23 Dec, 2020 8 commits
    • Andrew F. Davis's avatar
      ti: k3: Introduce lite device board support · 84af8956
      Andrew F. Davis authored
      Add device support for the 'lite' K3 devices. These will use modified
      device addresses and allow for fewer cores to save memory.
      
      Note: This family of devices are characterized by a single cluster
      of ARMv8 processor upto a max of 4 processors and lack of a level 3
      cache.
      
      The first generation of this family is introduced with AM642.
      
      See AM64X Technical Reference Manual (SPRUIM2, Nov 2020)
      for further details: https://www.ti.com/lit/pdf/spruim2
      
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I8cd2c1c9a9434646d0c72fca3162dd5bc9bd692a
      84af8956
    • Nishanth Menon's avatar
      ti: k3: common: sec_proxy: Introduce sec_proxy_lite definition · 7f323eb2
      Nishanth Menon authored
      There are two communication scheme that have been enabled to communicate
      with Secure Proxy in TI.
      a) A full fledged prioritized communication scheme, which involves upto
         5 threads from the perspective of the host software
      b) A much simpler "lite" version which is just a two thread scheme
         involving just a transmit and receive thread scheme.
      
      The (a) system is specifically useful when the SoC is massive
      involving multiple processor systems and where the potential for
      priority inversion is clearly a system usecase killer. However, this
      comes with the baggage of significant die area for larger number of
      instances of secure proxy, ring accelerator and backing memories
      for queued messages. Example SoCs using this scheme would be:
      AM654[1], J721E[2], J7200[3]  etc.
      
      The (b) scheme(aka the lite scheme) is introduced on smaller SoCs
      where memory and area concerns are paramount. The tradeoff of
      priority loss is acceptable given the reduced number of processors
      communicating with the central system controller. This brings about
      a very significant area and memory usage savings while the loss of
      communication priority has no demonstrable impact. Example SoC using
      this scheme would be: AM642[4]
      
      While we can detect using JTAG ID and conceptually handle things
      dynamically, adding such a scheme involves a lot of unused data (cost
      of ATF memory footprint), pointer lookups (performance cost) and still
      due to follow on patches, does'nt negate the need for a different
      build configuration. However, (a) and (b) family of SoCs share the
      same scheme and addresses etc, this helps minimize our churn quite a
      bit
      
      Instead of introducing a complex data structure lookup scheme, lets
      keep things simple by first introducing the pieces necessary for an
      alternate communication scheme, then introduce a second platform
      representing the "lite" family of K3 processors.
      
      NOTE: This is only possible since ATF uses just two (secure) threads
      for actual communication with the central system controller. This is
      sufficient for the function that ATF uses.
      
      The (a) scheme and the (b) scheme also varies w.r.t the base addresses
      used, even though the memory window assigned for them have remained
      consistent. We introduce the delta as part of this change as well.
      This is expected to remain consistent as a standard in TI SoCs.
      
      References:
      [1] See AM65x Technical Reference Manual (SPRUID7, April 2018)
      for further details: https://www.ti.com/lit/pdf/spruid7
      
      [2] See J721E Technical Reference Manual (SPRUIL1, May 2019)
      for further details: https://www.ti.com/lit/pdf/spruil1
      
      [3] See J7200 Technical Reference Manual (SPRUIU1, June 2020)
      for further details: https://www.ti.com/lit/pdf/spruiu1
      
      [4] See AM64X Technical Reference Manual (SPRUIM2, Nov 2020)
      for further details: https://www.ti.com/lit/pdf/spruim2
      
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I697711ee0e6601965015ddf950fdfdec8e759bfc
      7f323eb2
    • Nishanth Menon's avatar
      ti: k3: Move USE_COHERENT_MEM only for the generic board · ff7b75e2
      Nishanth Menon authored
      commit 65f7b817
      
       ("ti: k3: common: Use coherent memory for shared data")
      introduced WARMBOOT_ENABLE_DCACHE_EARLY and USE_COHERENT_MEM to handle
      multiple clusters across L3 cache systems. This is represented by
      "generic" board in k3 platform.
      
      On "lite" platforms, however, system level coherency is lacking since
      we don't have a global monitor or an L3 cache controller. Though, at
      a cluster level, ARM CPU level coherency is very much possible since
      the max number of clusters permitted in lite platform configuration is
      "1".
      
      However, we need to be able to disable USE_COHERENT_MEM for the lite
      configuration due to the lack of system level coherency.
      
      See docs/getting_started/build-options.rst for further information.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I4a0ec150b3f9ea12369254aef834a6cbe82d6be6
      ff7b75e2
    • Suman Anna's avatar
      ti: k3: drivers: ti_sci: Update ti_sci_msg_req_reboot to include domain · 22b7a229
      Suman Anna authored
      
      
      The ti_sci_msg_req_reboot message payload has been extended to include
      a domain field, and this should be zero to reset the entire SoC with
      System Firmwares newer than v2020.04. Add the domain field to the
      ti_sci_msg_req_reboot message structure for completeness. Set it up
      to zero to fix the reboot issues with newer firmwares.
      
      This takes care of the specific ABI that changed and has an impact on
      ATF function.
      Signed-off-by: default avatarSuman Anna <s-anna@ti.com>
      Signed-off-by: default avatarDave Gerlach <d-gerlach@ti.com>
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I4f8064b9d6555687822dc2b2b8ec97609286fa0b
      22b7a229
    • Nishanth Menon's avatar
      ti: k3: common: sec_proxy: Fill non-message data fields with 0x0 · f577388a
      Nishanth Menon authored
      
      
      Sec proxy data buffer is 60 bytes with the last of the registers
      indicating transmission completion. This however poses a bit
      of a challenge.
      
      The backing memory for sec_proxy is regular memory, and all sec proxy
      does is to trigger a burst of all 60 bytes of data over to the target
      thread backing ring accelerator. It doesn't do a memory scrub when
      it moves data out in the burst. When we transmit multiple messages,
      remnants of previous message is also transmitted which results in
      some random data being set in TISCI fields of messages that have been
      expanded forward.
      
      The entire concept of backward compatibility hinges on the fact that
      the unused message fields remain 0x0 allowing for 0x0 value to be
      specially considered when backward compatibility of message extension
      is done.
      
      So, instead of just writing the completion register, we continue
      to fill the message buffer up with 0x0 (note: for partial message
      involving completion, we already do this).
      
      This allows us to scale and introduce ABI changes back into TF-A only
      as needed.
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: Ie22cb2a319f4aa80aef23ffc7e059207e5d4c640
      f577388a
    • Nishanth Menon's avatar
      ti: k3: common: Make plat_get_syscnt_freq2 check CNT_FID0 GTC reg · 6a22d9ea
      Nishanth Menon authored
      ARM's generic timer[1] picks up it's graycode from GTC. However, the
      frequency of the GTC is supposed to be programmed in CNTFID0[2]
      register.
      
      In K3, architecture, GTC provides a central time to many parts of the
      SoC including graycode to the generic timer in the ARMv8 subsystem.
      However, due to the central nature and the need to enable the counter
      early in the boot process, the R5 based bootloader enables GTC and
      programs it's frequency based on central needs of the system. This
      may not be a constant 200MHz based on the system. The bootloader is
      supposed to program the FID0 register with the correct frequency it
      has sourced for GTC from the central system controller, and TF-A is
      supposed to use that as the frequency for it's local timer.
      
      A mismatch in programmed frequency and what we program for generic
      timer will, as we can imagine, all kind of weird mayhem.
      
      So, check the CNTFID0 register, if it is 0, warn and use the default
      frequency to continue the boot process.
      
      While at it, we can also check CNTCR register to provide some basic
      diagnostics to make sure that we don't have OS folks scratch their
      heads. Even though this is used during cpu online operations, the cost
      of this additional check is minimal enough for us not to use #ifdeffery
      with DEBUG flags.
      
      [1] https://developer.arm.com/documentation/100095/0002/generic-timer/generic-timer-register-summary/aarch64-generic-timer-register-summary
      [2] https://developer.arm.com/docs/ddi0595/h/external-system-registers/cntfid0
      [3] https://developer.arm.com/docs/ddi0595/h/external-system-registers/cntcr
      
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: Ib03e06788580f3540dcb1a11677d0d6d398b2c9f
      6a22d9ea
    • Nishanth Menon's avatar
      ti: k3: common: Enable A72 erratum 1319367 · 60fba7c8
      Nishanth Menon authored
      The CatB erratum ARM_ERRATA_A72_1319367 applies to all TI A72
      platforms as well.
      
      See the following for further information:
      https://developer.arm.com/documentation/epm012079/11/
      
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: I80c6262b9cdadcb12f6dfd5a21272989ba257719
      60fba7c8
    • Nishanth Menon's avatar
      ti: k3: common: Enable A53 erratum 1530924 · c3e23332
      Nishanth Menon authored
      The CatB erratum ARM_ERRATA_A53_1530924 applies to all TI A53
      platforms as well.
      
      See the following for further information:
      https://developer.arm.com/documentation/epm048406/2100
      
      Signed-off-by: default avatarNishanth Menon <nm@ti.com>
      Change-Id: Ic095424ce510139e060b38cfb84509d2cc573cad
      c3e23332
  3. 09 Oct, 2020 1 commit
    • Jimmy Brisson's avatar
      Don't return error information from console_flush · 831b0e98
      Jimmy Brisson authored
      
      
      And from crash_console_flush.
      
      We ignore the error information return by console_flush in _every_
      place where we call it, and casting the return type to void does not
      work around the MISRA violation that this causes. Instead, we collect
      the error information from the driver (to avoid changing that API), and
      don't return it to the caller.
      
      Change-Id: I1e35afe01764d5c8f0efd04f8949d333ffb688c1
      Signed-off-by: default avatarJimmy Brisson <jimmy.brisson@arm.com>
      831b0e98
  4. 04 Aug, 2020 1 commit
    • Grant Likely's avatar
      Use abspath to dereference $BUILD_BASE · 29214e95
      Grant Likely authored
      
      
      If the user tries to change BUILD_BASE to put the build products outside
      the build tree the compile will fail due to hard coded assumptions that
      $BUILD_BASE is a relative path. Fix by using $(abspath $(BUILD_BASE))
      to rationalize to an absolute path every time and remove the relative
      path assumptions.
      
      This patch also adds documentation that BUILD_BASE can be specified by
      the user.
      Signed-off-by: default avatarGrant Likely <grant.likely@arm.com>
      Signed-off-by: default avatarManish Pandey <manish.pandey2@arm.com>
      Change-Id: Ib1af874de658484aaffc672f30029b852d2489c8
      29214e95
  5. 01 Jun, 2020 1 commit
  6. 25 May, 2020 1 commit
    • Jan Kiszka's avatar
      ti: k3: common: Implement stub system_off · 42d9b3aa
      Jan Kiszka authored
      
      
      PSCI demands that SYSTEM_OFF must not return. While it seems like a
      generic ATF bug that this is possible when a platform does not Implement
      a corresponding handler, let's do that here until it's addressed
      differently.
      Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
      Change-Id: I4c08948b18bbfdc3a24214f2ae0fbad9e017ada1
      42d9b3aa
  7. 30 Mar, 2020 1 commit
    • Alexei Fedorov's avatar
      TF-A GICv3 driver: Introduce makefile · a6ea06f5
      Alexei Fedorov authored
      
      
      This patch moves all GICv3 driver files into new added
      'gicv3.mk' makefile for the benefit of the generic driver
      which can evolve in the future without affecting platforms.
      The patch adds GICv3 driver configuration flags
      'GICV3_IMPL', 'GICV3_IMPL_GIC600_MULTICHIP' and
      'GICV3_OVERRIDE_DISTIF_PWR_OPS' described in
      'GICv3 driver options' section of 'build-option.rst'
      document.
      
      NOTE: Platforms with GICv3 driver need to be modified to
      include 'drivers/arm/gic/v3/gicv3.mk' in their makefiles.
      
      Change-Id: If055f6770ff20f5dee5a3c99ae7ced7cdcac5c44
      Signed-off-by: default avatarAlexei Fedorov <Alexei.Fedorov@arm.com>
      a6ea06f5
  8. 10 Mar, 2020 1 commit
  9. 25 Feb, 2020 1 commit
  10. 28 Jan, 2020 1 commit
  11. 27 Jan, 2020 4 commits
  12. 24 Jan, 2020 1 commit
  13. 29 Oct, 2019 1 commit
    • Andrew F. Davis's avatar
      ti: k3: common: Add PIE support · ff835a9a
      Andrew F. Davis authored
      
      
      Running TF-A from non-standard location such as DRAM is useful for some
      SRAM heavy use-cases. Allow the TF-A binary to be executed from an
      arbitrary memory location.
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Change-Id: Icd97926e4d97f37d7cde4a92758a52f57d569111
      ff835a9a
  14. 04 Jul, 2019 1 commit
    • Andrew F. Davis's avatar
      ti: k3: common: Trap all asynchronous bus errors to EL3 · 93d5e141
      Andrew F. Davis authored
      
      
      These errors are asynchronous and cannot be directly correlated with the
      exact current running software, so handling them in the same EL is not
      critical. Handling them in TF-A allows for more platform specific
      decoding of the implementation defined exception registers
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Change-Id: Iee7a38c9fc9c698fa0ad42dafa598bcbed6a4fda
      93d5e141
  15. 28 Jun, 2019 1 commit
  16. 06 Jun, 2019 2 commits
    • Andrew F. Davis's avatar
      ti: k3: common: Remove coherency workaround for AM65x · 48d6b264
      Andrew F. Davis authored
      
      
      We previously left our caches on during power-down to prevent any
      non-caching accesses to memory that is cached by other cores. Now with
      the last accessed areas all being marked as non-cached by
      USE_COHERENT_MEM we can rely on that to workaround our interconnect
      issues. Remove the old workaround.
      
      Change-Id: Idadb7696d1449499d1edff4f6f62ab3b99d1efb7
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      48d6b264
    • Andrew F. Davis's avatar
      ti: k3: common: Use coherent memory for shared data · 65f7b817
      Andrew F. Davis authored
      
      
      HW_ASSISTED_COHERENCY implies something stronger than just hardware
      coherent interconnect, specifically a DynamIQ capable ARM core.
      
      For K3, lets use WARMBOOT_ENABLE_DCACHE_EARLY to enable caches early
      and then let the caches get shut off on powerdown, to prevent data
      corruption we also need to USE_COHERENT_MEM so that any accesses to
      shared memory after this point is only to memory that is set as
      non-cached for all cores.
      
      Change-Id: Ib9337f012df0e0388237942607c501b6f3e2a949
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      65f7b817
  17. 22 May, 2019 2 commits
  18. 30 Apr, 2019 1 commit
    • Andrew F. Davis's avatar
      ti: k3: common: Remove MSMC port definitions · a82bf5ad
      Andrew F. Davis authored
      
      
      The MSMC port defines were added to help in the case when some ports
      are not connected and have no cores attached. We can get the same
      functionality by defined the number of cores on that port to zero.
      This simplifies several code paths, do this here.
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Change-Id: I3247fe37af7b86c3227e647b4f617fab70c8ee8a
      a82bf5ad
  19. 26 Apr, 2019 4 commits
  20. 23 Apr, 2019 2 commits
    • Andrew F. Davis's avatar
      ti: k3: drivers: ti_sci: Retry message receive on bad sequence ID · 71a35273
      Andrew F. Davis authored
      
      
      When we get a sequence ID that does not match what we expect then the we
      are looking at is not the one we are expecting and so we error out. We
      can also assume this message is a stale message left in the queue, in
      this case we can read in the next message and check again for our
      message. Switch to doing that here. We only retry a set number of times
      so we don't lock the system if our message is actually lost and will
      never show up.
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Change-Id: I6c8186ccc45e646d3ba9d431f7d4c451dcd70c5c
      71a35273
    • Andrew F. Davis's avatar
      ti: k3: drivers: ti_sci: Cleanup sequence ID usage · 7a469035
      Andrew F. Davis authored
      
      
      The sequence ID can be set with a message to identify it when it is
      responded to in the response queue. We assign each message a number and
      check for this same number to detect response mismatches.
      
      Start this at 0 and increase it by one for each message sent, even ones
      that do not request or wait for a response as one may still be delivered
      in some cases and we want to detect this.
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      Change-Id: I72b4d1ef98bf1c1409d9db9db074af8dfbcd83ea
      7a469035