1. 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
  2. 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
  3. 10 Dec, 2018 1 commit
  4. 07 Dec, 2018 1 commit
    • Julius Werner's avatar
      drivers/console: Link console framework code by default · 985ee0b7
      Julius Werner authored
      
      
      This patch makes the build system link the console framework code by
      default, like it already does with other common libraries (e.g. cache
      helpers). This should not make a difference in practice since TF is
      linked with --gc-sections, so the linker will garbage collect all
      functions and data that are not referenced by any other code. Thus, if a
      platform doesn't want to include console code for size reasons and
      doesn't make any references to console functions, the code will not be
      included in the final binary.
      
      To avoid compatibility issues with older platform ports, only make this
      change for the MULTI_CONSOLE_API.
      
      Change-Id: I153a9dbe680d57aadb860d1c829759ba701130d3
      Signed-off-by: default avatarJulius Werner <jwerner@chromium.org>
      985ee0b7
  5. 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
  6. 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
  7. 30 Oct, 2018 1 commit
  8. 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
  9. 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
  10. 28 Sep, 2018 2 commits
  11. 04 Sep, 2018 27 commits
    • Bryan O'Donoghue's avatar
      warp7: Add warp7 platform to the build · 172e55be
      Bryan O'Donoghue authored
      
      
      Previous changes in this series made the necessary driver additions and
      updates. With those changes in-place we can add the platform.mk and
      bl2_el3_setup.c to drive the boot process.
      
      After this commit its possible to build a fully-functional TF-A for the
      WaRP7 and boot from the BootROM to the Linux command prompt in secure or
      non-secure mode.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      172e55be
    • Bryan O'Donoghue's avatar
      warp7: panic: hab: Call into BootROM failsafe on panic path · 20c0eca0
      Bryan O'Donoghue authored
      
      
      This patch adds a callback into the BootROM's provided High Assurance Boot
      (HAB) failsafe function when panicking i.e. the call is done without making
      use of stack.
      
      The HAB failsafe function allows a piece of software to call into the
      BootROM and place the processor into failsafe mode.
      
      Failsafe mode is a special mode which presents a serial download protocol
      interface over UART or USB at the time of writing.
      
      If the board has been set into secure mode, then only a signed binary can
      be used to recover the board.
      
      Thus failsafe gives a putatively secure method of performing a secure
      recovery over UART or USB.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarRyan Harkin <ryan.harkin@linaro.org>
      20c0eca0
    • Bryan O'Donoghue's avatar
      warp7: mem_params_desc: Add boot entries to mem params array · a22d06ce
      Bryan O'Donoghue authored
      
      
      This patch adds entries to the mem params array for
      
      - BL32
      - BL32_EXTRA1
      - BL32_EXTRA2
      - BL33
      - HW_CONFIG_ID
      
      BL32 is marked as bootable to indicate that OPTEE is the thing that should
      be booted next.
      
      In our model OPTEE chain-loads onto u-boot so only BL32 is bootable.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Signed-off-by: default avatarRui Miguel Silva <rui.silva@linaro.org>
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      a22d06ce
    • Bryan O'Donoghue's avatar
      warp7: io_storage: Add initial stub warp7_io_storage.c · 5336ebd0
      Bryan O'Donoghue authored
      
      
      This commit adds support for parsing a FIP pre-loaded by a previous
      boot-phase such as u-boot or via ATF reading directly from eMMC.
      
      [bod: squashing several patches from Rui, Jun and bod]
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Signed-off-by: default avatarJun Nie <jun.nie@linaro.org>
      Signed-off-by: default avatarRui Miguel Silva <rui.silva@linaro.org>
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      5336ebd0
    • Bryan O'Donoghue's avatar
      warp7: Define a platform_def.h · c6020248
      Bryan O'Donoghue authored
      
      
      This patch defines a platform_def.h describing
      
      - FIP layout and location
      - eMMC device select
      - UART identity select
      - System clock frequency
      - Operational memory map
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Signed-off-by: default avatarRui Miguel Silva <rui.silva@linaro.org>
      Signed-off-by: default avatarJun Nie <jun.nie@linaro.org>
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      c6020248
    • Bryan O'Donoghue's avatar
      warp7: mem_params_desc: Add a file which exports a REGISTER_BL_IMAGE_DESCS · 1fe21ca6
      Bryan O'Donoghue authored
      
      
      In order to link even a basic image we need to declare
      REGISTER_BL_IMAGE_DESCS. This patch declares an empty structure which is
      passed to REGISTER_BL_IMAGE_DESCS(). Later patches will add in some
      meaningful data.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      1fe21ca6
    • Bryan O'Donoghue's avatar
      warp7: Add a warp7_private.h file · 073c91d0
      Bryan O'Donoghue authored
      
      
      Internal declarations for the WaRP7 port will go here. For now just include
      sys/types.h.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      073c91d0
    • Bryan O'Donoghue's avatar
      warp7: image_load: Add warp7_image_load.c · 82add05b
      Bryan O'Donoghue authored
      
      
      This commit adds warp7_image_load.c with the functions
      
      - plat_flush_next_bl_params()
      - plat_get_bl_image_load_info()
      - plat_get_next_bl_params()
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      82add05b
    • Bryan O'Donoghue's avatar
      warp7: Add initial warp7_helpers.S · 54544c99
      Bryan O'Donoghue authored
      
      
      This commit adds a warp7_helpers.S which contains a implementation of:
      
      - platform_mem_init
      - plat_get_my_entrypoint
      - plat_crash_console_init
      - plat_crash_console_putc
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      54544c99
    • 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
    • Bryan O'Donoghue's avatar
      imx: imx_hab: Define a HAB header file · db05fb77
      Bryan O'Donoghue authored
      
      
      The High Assurance Boot or HAB is an on-chip method of providing a
      root-of-trust from the reset vector to subsequent stages in the bootup
      flow of the Cortex-A7 on the i.MX series of processors.
      
      This patch adds a simple header file with pointer offsets of the provided
      set of HAH API callbacks in the BootROM.
      
      The relative offset of the function pointers is a constant and known
      quantum, a software-contract between NXP and an implementation which is
      defined in the NXP HAB documentation.
      
      All we need is the correct base offset and then we can map the set of
      function pointers relative to that offset.
      
      imx_hab_arch.h provides the correct offset and the imx_hab.h hooks the
      offset to the pre-determined callbacks.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarRyan Harkin <ryan.harkin@linaro.org>
      db05fb77
    • Bryan O'Donoghue's avatar
      imx7: hab_arch: Provide a hab_arch.h file · 58254711
      Bryan O'Donoghue authored
      
      
      In order to enable compile time differences in HAB interaction, we should
      split out the definition of the base address of the HAB API.
      
      Some version of the i.MX series have different offsets from the BootROM
      base for the HAB callback table.
      
      This patch defines the header into which we will define the i.MX7 specific
      offset. The offset of the i.MX7 function-callback table is simultaneously
      defined.
      
      Once done, we can latch a set of common function pointer locations from the
      offset given here and if necessary change the offset for different
      processors without any other code-change.
      
      For now all we support is i.MX7 so the only offset being defined is that
      for the i.MX7.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Reviewed-by: default avatarRyan Harkin <ryan.harkin@linaro.org>
      58254711
    • Bryan O'Donoghue's avatar
      imx: imx_snvs: Add an SNVS core functionality · f7ea6d52
      Bryan O'Donoghue authored
      
      
      This patch adds snvs.c with a imx_snvs_init() function.
      
      imx_snvs_init() sets up permissions of the RTC via the SNVS HPCOMR.
      
      During previous work with OPTEE on the i.MX7 part we discovered that prior
      to switching from secure-world to normal-world it is required to apply more
      permissive permissions than are defaulted to in order for Linux to be able
      to access the RTC and CAAM functionality in general.
      
      This patch pertains to fixing the RTC permissions by way of the
      HPCOMR.NPSWA_EN bit.
      
      Once set non-privileged code aka Linux-kernel code has permissions to
      access the SNVS where the RTC resides.
      
      Perform that permissions fix in imx_snvs_init() now, with a later patch making
      the call from our platform setup code.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      f7ea6d52
    • Bryan O'Donoghue's avatar
      imx: imx_snvs: Define a SNVS header and memory map · a60ca3b4
      Bryan O'Donoghue authored
      
      
      This commit defines two things.
      
      - The basic SNVS memory map. At the moment that is total overkill for the
        permission bits we need to set inside the SNVS but, for the sake of
        completeness define the whole SNVS area as a struct.
      
      - The bits of the HPCOMR register
      
        A permission fix will need to be applied to the SNVS block prior to
        switching on TrustZone. All we need to do is waggle a bit in the HPCOMR
        register. To do that waggle we first need to define the bits of the
        HPCOMR register.
      
      - A imx_snvs_init() function definition
      
        Declare the snvs_init() function so that it can be called from our
        platform setup code.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      a60ca3b4
    • Bryan O'Donoghue's avatar
      imx: imx_csu: Add a simple CSU layer · c3334cb1
      Bryan O'Donoghue authored
      
      
      - Add a header to define imx_csu_init().
      - Defines the Central Security Unit's Config Security Level
        permission bits.
      - Define CSU_CSL_OPEN_ACCESS permission bitmask
      - Run a loop to setup peripheral CSU permissions
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      c3334cb1
    • Bryan O'Donoghue's avatar
      imx: imx_aips: Add initial AIPS support · 49a64134
      Bryan O'Donoghue authored
      
      
      This patch adds an initial AHB-to-IP TrustZone (AIPS-TZ) initialization
      routine. Setting up the AIPSTZ controller is required to inform the SoC
      interconnect fabric which bus-masters can read/write and if the read/writes
      are buffered.
      
      For our purposes the initial configuration is for everything to be open. We
      can lock-down later on as necessary.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      49a64134
    • Bryan O'Donoghue's avatar
      imx: imx_io_mux: Define an IO-mux layer · 965bda4d
      Bryan O'Donoghue authored
      
      
      This patch defines:
      
      - The full range of IO-mux register offsets relative to the base address of
        the IO-mux block base address.
      
      - The bits for muxing the UART1 TX/RX lines.
      
      - The bits for muxing the UART6 TX/RX lines.
      
      - The pad control pad bits for the UART
      
      Two functions are provided to configure pad muxes:
      
      - void io_muxc_set_pad_alt_function(pad_mux_offset, alt_function)
        Takes a pad_mux_offset and sets the alt_function bit-mask supplied.
        This will have the effect of switching the pad into one of its defined
        peripheral functions. These peripheral function modes are defined in the
        NXP documentation and need to be referred to in order to correctly
        configure a new alternative-function.
      
      - void io_muxc_set_pad_features(pad_feature_offset, pad_features)
        Takes a pad_feature_offset and applies a pad_features bit-mask to the
        indicated pad.
        This function allows the setting of PAD drive-strength, pull-up values,
        hysteresis glitch filters and slew-rate settings.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      965bda4d
    • Bryan O'Donoghue's avatar
      imx7: imx7_clock: usb: Initialize the USB core clocks · ddfb773f
      Bryan O'Donoghue authored
      
      
      This patch initializes USB core clocks for the i.MX7.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      ddfb773f
    • Bryan O'Donoghue's avatar
      imx7: imx7_clock: wdog: Initialize the watchdog clocks · 5ff1751d
      Bryan O'Donoghue authored
      
      
      This patch initializes the watchdog clocks for the i.MX7.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      5ff1751d
    • Bryan O'Donoghue's avatar
      imx7: imx7_clock: uart: Add UART clock init logic · 73f432a4
      Bryan O'Donoghue authored
      
      
      This patch adds an internal UART init routine that gets called from the
      external facing clock init function.
      
      In the first pass this call does an explicit disable of all UART
      clock-gates. Later changes will enable only the UART clock-gates we care
      about.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      73f432a4
    • Bryan O'Donoghue's avatar
      imx: imx_clock: usb: Add USB clock API · 6176a4e5
      Bryan O'Donoghue authored
      
      
      This set of patches adds a very minimal layer of USB enabling patches to
      clock.c. Unlike the watchdog or UART blocks the USB clocks pertain to PHYs,
      the main USB clock etc, not to different instances of the same IP block.
      
      As a result this patch-set takes the clock CCGR clock identifier directly
      rather than as an index of an instance of blocks of the same type.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      6176a4e5
    • Bryan O'Donoghue's avatar
      imx: imx_clock: wdog: Add watchdog clock API · bbdcdd04
      Bryan O'Donoghue authored
      
      
      This patch adds a set of functions to enable the clock for each of the
      watchdog IP blocks.
      
      Unlike the MMC and UART blocks, the watchdog blocks operate off of the one
      root clock, only the clock-gates are enable/disabled individually.
      
      As a consequence the function clock_set_wdog_clk_root_bits() is used to set
      the root-slice just once for all of the watchdog blocks.
      
      Future implementations may need to change this model but for now on the one
      supported processor and similar NXP SoCs this model should work fine.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      bbdcdd04
    • Jun Nie's avatar
      imx: imx_clock: mmc: Add USDHC clock API · 14cf32aa
      Jun Nie authored
      
      
      This patch adds an API to configure up the base USDHC clocks, taking a
      bit-mask of silicon specific bits as an input from a higher layer in order
      to direct the necessary clock source.
      Signed-off-by: default avatarJun Nie <jun.nie@linaro.org>
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      14cf32aa
    • Bryan O'Donoghue's avatar
      imx: imx_clock: uart: Add UART clock API · dcd54e9b
      Bryan O'Donoghue authored
      
      
      This patch adds an API to configure up the base UART clocks, taking a
      bit-mask of silicon specific bits as an input from a higher layer in order
      to direct the necessary clock source.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      dcd54e9b
    • Bryan O'Donoghue's avatar
      imx: imx_clock: Add driver and associated clock register definitions · 82e35083
      Bryan O'Donoghue authored
      
      
      This commit:
      
      - Defines a clock stub with a conjoined header defining the clock
        memory map.
      
      - Defines the CCM Clock Gating Register which comes in a quadrumvirate
        register set to read, set, clear and toggle individual clock gates into
        one of four states based bitmask.
      
        00: Domain clocks not needed
        01: Domain clocks needed when in RUN
        10: Domain clocks needed when in RUN and WAIT
        11: Domain clocks needed all the time
      
      - Defines clock control register bits
      
        There are various quadrumvirate register blocks target-root, misc-root,
        post-root, pre-root in the CCM.
      
        The number of registers is huge but the four registers in each
        quadrumvirate block contain the same bits, so the number of bit
        definitions is actually quite low.
      
      - Defines clock identifiers
      
        An array of clock gates is provided in the CCM block. In order to index
        that array and thus enable/disable clock gates for the right components,
        we need to provide meaningful names to the indices.
      
        Section 5.2.5 of the i.MX7 Solo Application Processor Reference Manual
        Rev 0.1 provides the relevant details.
      
      - Defines target mux select bits
        This is a comprehensive definition of the target clock mux select bits.
        These bits are required to correctly select the clock source. Defining
        all of the bits up-front even for unused blocks in ATF means we can
        switch on any block we want at a later date without having to write new
        code in the clock-mux layer.
      
      - Defines identifier indices into root-slice array
        The root-slice array of control registers has a specific set of indices,
        which differ from the clock-gate indices.
      
      - Provides a clock gate enable/disable routine
        Provides a clock-gate enable/disable routine via the set/clr
        registers in a given clock-gate control register block.
      
        This index passed should be one of the enums associated with CCM and
        depending on enable/disable being passed either set or clr will be
        written to.
      
        The Domain0 bits are currently the only bits targeted by this write, more
        work may need to be done on the domain bits in subsequent patches as a
        result.
      
      - imx: Adds set/clr routines to clock layer
      
        Adds a set and clr routine to the clock layer. These routines allow us to
        access the set and clear registers of the "target" block registers. These
        are the registers where we select the clock source from the available list.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      82e35083
    • Bryan O'Donoghue's avatar
      imx7: imx_regs: Add a shared imx-regs.h for i.MX7 ATF platforms · 7d464592
      Bryan O'Donoghue authored
      
      
      In order to have some common code shared between similar SOCs its pretty
      common to have IP blocks reused. In reusing those blocks we frequently need
      to map compatible blocks to different addresses depending on the SOC.
      
      This patch adds a basic memory map of the i.MX7 based on the "Cortex-A7
      Memory Map" section 2.12 of "i.MX7Solo Applications Processor Reference
      Manual, Rev 0.1 08/2016"
      
      In memory map terms the i.MX7S and i.MX7D are identical with the D
      variant containing two Cortex-A7 cores plus a Cortex-M core and the S
      variant containing one Cortex-A7 and one Cortex-M.
      Signed-off-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
      7d464592
  12. 22 Aug, 2018 1 commit