1. 23 Dec, 2020 2 commits
    • 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: 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
  2. 01 Jun, 2020 1 commit
  3. 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
  4. 19 Apr, 2019 3 commits
  5. 22 Jan, 2019 1 commit
    • Andrew F. Davis's avatar
      ti: k3: common: Add support for runtime detection of GICR base address · b5443284
      Andrew F. Davis authored
      
      
      Valid addresses for GICR base are always a set calculable distance from
      the GICD and is based on the number of cores a given instance of GICv3 IP
      can support. The formula for the number of address bits is given by the
      ARM GIC-500 TRM section 3.2 as 2^(18+log2(cores)) with the MSB set to
      one for GICR instances. Holes in the GIC address space are also
      guaranteed to safely return 0 on reads. This allows us to support runtime
      detection of the GICR base address by starting from GIC base address plus
      BIT(18) and walking until the GICR ID register (IIDR) is detected. We
      stop searching after BIT(20) to prevent searching out into space if
      something goes wrong. This can be extended out if we ever have a device
      with 16 or more cores.
      Signed-off-by: default avatarAndrew F. Davis <afd@ti.com>
      b5443284
  6. 21 Jan, 2019 1 commit
  7. 04 Jan, 2019 1 commit
    • Antonio Nino Diaz's avatar
      Sanitise includes across codebase · 09d40e0e
      Antonio Nino Diaz authored
      Enforce full include path for includes. Deprecate old paths.
      
      The following folders inside include/lib have been left unchanged:
      
      - include/lib/cpus/${ARCH}
      - include/lib/el3_runtime/${ARCH}
      
      The reason for this change is that having a global namespace for
      includes isn't a good idea. It defeats one of the advantages of having
      folders and it introduces problems that are sometimes subtle (because
      you may not know the header you are actually including if there are two
      of them).
      
      For example, this patch had to be created because two headers were
      called the same way: e0ea0928 ("Fix gpio includes of mt8173 platform
      to avoid collision."). More recently, this patch has had similar
      problems: 46f9b2c3 ("drivers: add tzc380 support").
      
      This problem was introduced in commit 4ecca339
      
       ("Move include and
      source files to logical locations"). At that time, there weren't too
      many headers so it wasn't a real issue. However, time has shown that
      this creates problems.
      
      Platforms that want to preserve the way they include headers may add the
      removed paths to PLAT_INCLUDES, but this is discouraged.
      
      Change-Id: I39dc53ed98f9e297a5966e723d1936d6ccf2fc8f
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      09d40e0e
  8. 08 Nov, 2018 1 commit
    • Antonio Nino Diaz's avatar
      Standardise header guards across codebase · c3cf06f1
      Antonio Nino Diaz authored
      
      
      All identifiers, regardless of use, that start with two underscores are
      reserved. This means they can't be used in header guards.
      
      The style that this project is now to use the full name of the file in
      capital letters followed by 'H'. For example, for a file called
      "uart_example.h", the header guard is UART_EXAMPLE_H.
      
      The exceptions are files that are imported from other projects:
      
      - CryptoCell driver
      - dt-bindings folders
      - zlib headers
      
      Change-Id: I50561bf6c88b491ec440d0c8385c74650f3c106e
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      c3cf06f1
  9. 22 Aug, 2018 2 commits
  10. 29 Jun, 2018 1 commit
  11. 19 Jun, 2018 6 commits