1. 21 May, 2021 1 commit
    • Igor Opaniuk's avatar
      feat(plat/imx8m): add SiP call for secondary boot · 9ce232fe
      Igor Opaniuk authored
      In iMX8MM it is possible to have two copies of bootloader in
      SD/eMMC and switch between them. The switch is triggered either
      by the BootROM in case the bootloader image is faulty OR can be
      enforced by the user. To trigger that switch the
      PERSIST_SECONDARY_BOOT bit should be set in GPR10 SRC register.
      As the bit is retained after WARM reset, that permits to control
      BootROM behavior regarding what boot image it will boot after
      reset: primary or secondary.
      
      This is useful for reliable bootloader A/B updates, as it permits
      switching between two copies of bootloader at different offsets of
      the same storage.
      
      If the PERSIST_SECONDARY_BOOT is 0, the boot ROM uses address
      0x8400 for the primary image. If the PERSIST_SECONDARY_BOOT is 1,
      the boot ROM reads that secondary image table from address 0x8200
      on the boot media and uses the address specified in the table for
      the secondary image.
      
      Secondary Image Table contains the sector of secondary bootloader
      image, exluding the offset to that image (explained below in the
      note). To generate the Secondary Image Table, use e.g.:
      $ printf '\x0\x0\x0\x0\x0\x0\x0\x0\x33\x22\x11'
               '\x00\x00\x10\x0\x0\x00\x0\x0\x0'
        > /tmp/sit.bin
      $ hexdump  -vC /tmp/sit.bin
        00000000  00 00 00 00
        00000004  00 00 00 00
        00000008  33 22 11 00 <--- This is the "tag"
        0000000c  00 10 00 00 <--- This is the "firstSectorNumber"
        00000010  00 00 00 00
      
      You can also use NXP script from [1][2] imx-mkimage tool for
      SIT generation. Note that the firstSectorNumber is NOT the offset
      of the IVT, but an offset of the IVT decremented by Image Vector
      Table offset (Table 6-25. Image Vector Table Offset and Initial
      Load Region Size for iMX8MM/MQ), so for secondary SPL copy at
      offset 0x1042 sectors, firstSectorNumber must be 0x1000
      (0x42 sectors * 512 = 0x8400 bytes offset).
      
      In order to test redundant boot board should be closed and
      SD/MMC manufacture mode disabled, as secondary boot is not
      supported in the SD/MMC manufacture mode, which can be disabled
      by blowing DISABLE_SDMMC_MFG (example for iMX8MM):
      > fuse prog -y 2 1 0x00800000
      
      For additional details check i.MX 8M Mini Apllication Processor
      Reference Manual, 6.1.5.4.5 Redundant boot support for
      expansion device chapter.
      
      [1] https://source.codeaurora.org/external/imx/imx-mkimage/
      
      
      [2] scripts/gen_sit.sh
      Change-Id: I0a5cea7295a4197f6c89183d74b4011cada52d4c
      Signed-off-by: default avatarIgor Opaniuk <igor.opaniuk@foundries.io>
      9ce232fe
  2. 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
  3. 06 Aug, 2020 1 commit
  4. 22 Jul, 2020 1 commit
  5. 16 Mar, 2020 1 commit
  6. 05 Mar, 2020 1 commit
  7. 25 Feb, 2020 1 commit
  8. 04 Dec, 2019 2 commits
  9. 06 Nov, 2019 1 commit
  10. 01 Aug, 2019 1 commit
    • Julius Werner's avatar
      Replace __ASSEMBLY__ with compiler-builtin __ASSEMBLER__ · d5dfdeb6
      Julius Werner authored
      
      
      NOTE: __ASSEMBLY__ macro is now deprecated in favor of __ASSEMBLER__.
      
      All common C compilers predefine a macro called __ASSEMBLER__ when
      preprocessing a .S file. There is no reason for TF-A to define it's own
      __ASSEMBLY__ macro for this purpose instead. To unify code with the
      export headers (which use __ASSEMBLER__ to avoid one extra dependency),
      let's deprecate __ASSEMBLY__ and switch the code base over to the
      predefined standard.
      
      Change-Id: Id7d0ec8cf330195da80499c68562b65cb5ab7417
      Signed-off-by: default avatarJulius Werner <jwerner@chromium.org>
      d5dfdeb6
  11. 17 Jul, 2019 2 commits
  12. 12 Jul, 2019 1 commit
  13. 20 May, 2019 2 commits
  14. 09 May, 2019 1 commit
  15. 03 Apr, 2019 2 commits
  16. 01 Mar, 2019 1 commit
    • Anson Huang's avatar
      imx: make sure GIC redistributor is awake before initialization · e655fefc
      Anson Huang authored
      
      
      GICR_WAKER.ProcessorSleep can only be set to zero when:
      — GICR_WAKER.Sleep bit[0] == 0.
      — GICR_WAKER.Quiescent bit[31] == 0.
      
      On some platforms, when system reboot with GIC in sleep
      mode but with power ON, such as on NXP's i.MX8QM, Linux
      kernel enters suspend but could be requested to reboot,
      and GIC is in sleep mode and it is inside a power domain
      which is ON in this scenario, when CPU reset, the GIC
      driver trys to set CORE's redistributor interface to awake,
      with GICR_WAKER.Sleep bit[0] and GICR_WAKER.Quiescent bit[31]
      both set, the ProcessorSleep bit[1] will never be clear
      and cause system hang.
      
      This patch makes sure GICR_WAKER.Sleep bit[0] and
      GICR_WAKER.Quiescent bit[31] are both zeor before clearing
      ProcessorSleep bit[1].
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      e655fefc
  17. 12 Feb, 2019 1 commit
  18. 29 Jan, 2019 1 commit
    • Anson Huang's avatar
      imx: power optimization for i.mx8qm · 3a2b5199
      Anson Huang authored
      
      
      Current implementation of i.MX8QM power management related
      features does NOT optimize power number, all system resources
      like CCI, DDR, and A cluster etc. are kept in STBY mode (powered
      ON) when system suspend or CPU hotplug.
      
      To lower the power number, OFF mode should be adopted for those
      system resources whenever they can be OFF, A cluster will be OFF
      if the CPUs in the cluster are all off line, DDR/MU/DB can be OFF
      if system suspend, IRQ steer can be OFF if the wakeup source is
      belonged to system controller partition, so wakeup source runtime
      check is used to determine if IRQ steer can be OFF before system
      suspend.
      
      If resources are powered off for suspend, they should be restored
      properly after system resume.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      3a2b5199
  19. 18 Jan, 2019 5 commits
  20. 17 Jan, 2019 3 commits
    • Anson Huang's avatar
      imx: add cpu-freq SIP runtime service support · d3996c59
      Anson Huang authored
      
      
      On i.MX8QM/i.MX8QX with system controller inside, the CPU's clock
      rate is managed by SCFW(system controller firmware) and can ONLY be
      changed from secure world, so SIP runtime service is needed for
      setting CPU's clock rate, this patch adds cpu-freq SIP runtime service
      support.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      d3996c59
    • Anson Huang's avatar
      imx: add imx8qm/imx8qx SRTC SIP runtime service support · 025514ba
      Anson Huang authored
      
      
      On i.MX8QM/i.MX8QX with system controller inside, the SRTC is
      managed by SCFW(system controller firmware) and some functions
      like setting SRTC's time etc. can ONLY be requested from secure
      world, so SIP runtime service is needed for such kind of operations,
      this patch adds SRTC SIP runtime service support for i.MX8QM and
      i.MX8QX.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      025514ba
    • Anson Huang's avatar
      Support for NXP's i.MX8 SoCs timer IPC · 1552df5d
      Anson Huang authored
      
      
      NXP's i.MX8 SoCs have system controller (M4 core) which takes
      control of timer management, including watchdog, srtc and system
      counter etc., other clusters like Cortex-A35 can send out command
      via MU (Message Unit) to system controller for timer operation.
      
      This patch adds timer IPC(inter-processor communication) support.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      1552df5d
  21. 15 Jan, 2019 2 commits
    • Anson Huang's avatar
      imx: make imx uart work for debug mode · 2e8ab4f5
      Anson Huang authored
      
      
      With DEBUG_CONSOLE enabled, build will fail for imx8mq platform:
      
      ./build/imx8mq/release/bl31/imx8mq_bl31_setup.o:
      In function `bl31_early_platform_setup2':
      imx8mq_bl31_setup.c:(.text.bl31_early_platform_setup2+0x40):
      	undefined reference to `console_uart_register'
      Makefile:741: recipe for target 'build/imx8mq/release/bl31/bl31.elf' failed
      make: *** [build/imx8mq/release/bl31/bl31.elf] Error 1
      
      Besides, the .console_flush callback needs to be added to avoid
      panic when debug mode is enabled, since the console_flush() will
      call it without checking whether the function callback is valid.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      2e8ab4f5
    • Anson Huang's avatar
      imx: add necessary lpuart console_flush callback for debug · f1ac7964
      Anson Huang authored
      
      
      Current lpuart driver does NOT implement .console_flush callback,
      if debug console is enabled, the console_flush() will call the
      undefined .console_flush callback(NULL) for lpuart and leak to
      panic, this patch adds .console_flush callback to make lpuart work
      for debug mode.
      Signed-off-by: default avatarAnson Huang <Anson.Huang@nxp.com>
      f1ac7964
  22. 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
  23. 05 Dec, 2018 1 commit
    • Bai Ping's avatar
      plat: imx: Add i.MX8MQ basic support · 81136819
      Bai Ping authored
      
      
      i.MX8MQ is new SOC of NXP's i.MX8M family based on
      A53. It can provide industry-leading audio, voice
      and video processing for applications that scale
      from consumer home audio to industrial building
      automation and mobile computers
      
      this patchset add the basic supoort to boot up
      the 4 X A53. more feature will be added later.
      Signed-off-by: default avatarBai Ping <ping.bai@nxp.com>
      81136819
  24. 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
  25. 25 Oct, 2018 1 commit
    • Antonio Nino Diaz's avatar
      Add plat_crash_console_flush to platforms without it · 9c675b37
      Antonio Nino Diaz authored
      
      
      Even though at this point plat_crash_console_flush is optional, it will
      stop being optional in a following patch.
      
      The console driver of warp7 doesn't support flush, so the implementation
      is a placeholder.
      
      TI had ``plat_crash_console_init`` and ``plat_crash_console_putc``, but
      they weren't global so they weren't actually used. Also, they were
      calling the wrong functions.
      
      imx8_helpers.S only has placeholders for all of the functions.
      
      Change-Id: I8d17bbf37c7dad74e134c61ceb92acb9af497718
      Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
      9c675b37
  26. 19 Oct, 2018 1 commit
    • Soby Mathew's avatar
      Multi-console: Deprecate the `finish_console_register` macro · cc5859ca
      Soby Mathew authored
      
      
      The `finish_console_register` macro is used by the multi console
      framework to register the `console_t` driver callbacks. It relied
      on weak references to the `ldr` instruction to populate 0 to the
      callback in case the driver has not defined the appropriate
      function. Use of `ldr` instruction to load absolute address to a
      reference makes the binary position dependant. These instructions
      should be replaced with adrp/adr instruction for position independant
      executable(PIE). But adrp/adr instructions don't work well with weak
      references as described in GNU ld bugzilla issue 22589.
      
      This patch defines a new version of `finish_console_register` macro
      which can spcify which driver callbacks are valid and deprecates the
      old one. If any of the argument is not specified, then the macro
      populates 0 for that callback. Hence the functionality of the previous
      deprecated macro is preserved. The USE_FINISH_CONSOLE_REG_2 define
      is used to select the new variant of the macro and will be removed
      once the deprecated variant is removed.
      
      All the upstream console drivers have been migrated to use the new
      macro in this patch.
      
      NOTE: Platforms be aware that the new variant of the
      `finish_console_register` should be used and the old variant is
      deprecated.
      
      Change-Id: Ia6a67aaf2aa3ba93932992d683587bbd0ad25259
      Signed-off-by: default avatarSoby Mathew <soby.mathew@arm.com>
      cc5859ca
  27. 28 Sep, 2018 1 commit
  28. 04 Sep, 2018 2 commits
    • Bryan O'Donoghue's avatar
      imx: imx_wdog: Add code to initialize the wdog block · b42ceebb
      Bryan O'Donoghue authored
      
      
      The watchdog block on the IMX is mercifully simple. This patch maps the
      various registers and bits associated with the block.
      
      We are mostly only really interested in the power-down-enable (PDE) bits in
      the block for the purposes of ATF.
      
      The i.MX7 Solo Applications Processor Reference Manual details the PDE bit
      as follows:
      
      "Power Down Enable bit. Reset value of this bit is 1, which means the power
      down counter inside the WDOG is enabled after reset. The software must
      write 0 to this bit to disable the counter within 16 seconds of reset
      de-assertion. Once disabled this counter cannot be enabled again. See
      Power-down counter event for operation of this counter."
      
      This patch does that zero write in-lieu of later phases in the boot
      no-longer have the necessary permissions to rewrite the PDE bit directly.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      b42ceebb
    • Bryan O'Donoghue's avatar
      imx: imx_caam: Add code to initialize the CAAM job-rings to NS-world · ca52cbe6
      Bryan O'Donoghue authored
      
      
      This patch defines the most basic part of the CAAM and the only piece of
      the CAAM silicon we are really interested in, in ATF, the CAAM control
      structure.
      
      The CAAM itself is a huge address space of some 32k, way out of scope for
      the purpose we have in ATF.
      
      This patch adds a simple CAAM init function that assigns ownership of the
      CAAM job-rings to the non-secure MID with the ownership bit set to
      non-secure.
      
      This will allow later logic in the boot process such as OPTEE, u-boot and
      Linux to assign job-rings as appropriate, restricting if necessary but
      leaving open the main functionality of the CAAM to the Linux NS runtime.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      ca52cbe6