• 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
imx_clock.h 41.5 KB