1. 04 Jan, 2019 7 commits
    • Jolly Shah's avatar
      zynqmp: pm: Reimplement clock get state (status) EEMI API · bd30503a
      Jolly Shah authored
      
      
      Clock get state EEMI API is reimplemented to use system-level clock
      and pll EEMI APIs rather than direct MMIO read/write accesses to clock
      and pll control registers.
      Since linux is_enabled method for PLLs still uses clock get state API
      get the PLL state, in the implementation of pm_clock_getstate() we need
      to workaround this by distinguishing two cases: 1) if the given clock ID
      corresponds to a PLL output clock ID; or 2) given clock ID is truly an
      on-chip clock whose state of the gate should be returned.
      For case 1) we'll call pm_api_clock_pll_getstate() implemented in
      pm_api_clock.h/c. This function will query the PLL state from PMU using
      the system-level PLL get mode EEMI API.
      For case 2) we'll call the PMU to query the clock gate state using
      system-level clock get status EEMI API.
      Functions that appear to be unused after this change is made are removed.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      bd30503a
    • Jolly Shah's avatar
      zynqmp: pm: Reimplement clock disable EEMI API · d3a78ca4
      Jolly Shah authored
      
      
      Clock disable EEMI API is reimplemented to use system-level clock
      and pll EEMI APIs rather than direct MMIO read/write accesses to clock
      and pll control registers.
      Since linux still uses clock disable API to reset the PLL in the
      implementation of pm_clock_disable() we need to workaround this by
      distinguishing two cases: 1) if the given clock ID corresponds to a PLL
      output clock ID; or 2) given clock ID is truly an on-chip clock that can
      be gated.
      For case 1) we'll call pm_api_clock_pll_disable() implemented in
      pm_api_clock.h/c. This function will reset the PLL using the system-level
      PLL set mode EEMI API with the reset mode argument.
      For case 2) we'll call the PMU to configure the clock gate. This is done
      using system-level clock disable EEMI API.
      Functions that appear to be unused after this change is made are removed.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      d3a78ca4
    • Jolly Shah's avatar
      zynqmp: pm: Reimplement clock enable EEMI API · bd642dde
      Jolly Shah authored
      
      
      Clock enable EEMI API is reimplemented to use system-level clock
      and pll EEMI APIs rather than direct MMIO read/write accesses to clock
      and pll control registers.
      Since linux still uses clock enable API to trigger locking of the PLLs
      in the pm_clock_enable() implementation we need to workaround this by
      distinguishing two cases: 1) if the given clock ID corresponds to a PLL
      output clock ID; or 2) given clock ID is truly an on-chip clock that can
      be gated.
      For case 1) we'll call pm_api_clock_pll_enable() implemented in
      pm_api_clock.h/c. This function checks what is the buffered PLL mode and
      calls the system-level PLL set mode EEMI API with the buffered mode value
      specified as argument. Long term, if linux driver get fixed to use PLL
      EEMI API to control PLLs, this case could be removed from ATF.
      For case 2) we'll call the PMU to configure the clock gate. This is done
      using system-level clock enable EEMI API.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      bd642dde
    • Jolly Shah's avatar
      zynqmp: pm: Return the buffered PLL mode through IOCTL PLL get mode API · a5ae5a72
      Jolly Shah authored
      
      
      When linux calls pm_ioctl_get_pll_frac_mode() it doesn't expect the actual
      mode to be read from hardware, but the value that it is intending to
      program. Therefore, we return the buffered value to linux.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      a5ae5a72
    • Jolly Shah's avatar
      zynqmp: pm: Buffer the PLL mode that is set using IOCTL API · 8975f317
      Jolly Shah authored
      
      
      When linux calls pm_ioctl_set_pll_frac_mode() it doesn't expect the
      fractional mode to be changed in hardware. Furthermore, even before this
      patch setting the mode which is done by writing into register takes
      no effect until the PLL reset is deasserted, i.e. until linux "enables"
      the PLL. To adjust the code to system-level PLL EEMI API and avoid
      unnecessary IPIs that would otherwise be issued, we buffer the mode
      value set via IOCTL until the PLL mode really needs to be set.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      8975f317
    • Jolly Shah's avatar
      zynqmp: pm: Set PLL fractional data using PLL set parameter EEMI API · cf1769b5
      Jolly Shah authored
      
      
      Fractional data should be set using PLL set parameter EEMI API. This
      stands for system-level communication (APU to PMU). Since linux
      already uses a specific IOCTL function to do this and we need to
      keep it that way, the pll clock ID given by linux has to be mapped
      to the pll node ID that is communicated at the system-level (argument
      of PLL set parameter API).
      With this modification the function pm_api_clk_set_pll_frac_data is
      removed from pm_api_clock.c/h because it became unused.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      cf1769b5
    • Jolly Shah's avatar
      zynqmp: pm: Get PLL fractional data using PLL get parameter EEMI API · 1e3fb352
      Jolly Shah authored
      
      
      Fractional data should be get using PLL get parameter EEMI API. This
      stands for system-level communication (APU to PMU). Since linux
      already uses a specific IOCTL function to do this and we need to
      keep it that way, the pll clock ID given by linux has to be mapped
      to the pll node ID that is communicated at the system-level (argument
      of PLL get parameter API).
      With this modification the function pm_api_clk_get_pll_frac_data is
      removed from pm_api_clock.c/h because it became unused.
      The clock enum is defined as 'enum clock_id'.
      Signed-off-by: default avatarMirela Simonovic <mirela.simonovic@aggios.com>
      Acked-by: default avatarWill Wong <WILLW@xilinx.com>
      Signed-off-by: default avatarJolly Shah <jollys@xilinx.com>
      1e3fb352
  2. 04 Sep, 2018 4 commits
  3. 27 Aug, 2018 1 commit
    • Rajan Vaja's avatar
      zynqmp: pm: Add API to get number of clocks · ec9712ce
      Rajan Vaja authored
      
      
      Currently in Linux maximum number of clocks is hard-coded and
      so it needs to allocate static memory. It can get actual clock
      number after querying all clock names by special clock name
      string. Add new query data parameter to get actual number of
      clocks so Linux can get actual clock numbers in advance.
      Signed-off-by: default avatarRajan Vaja <rajan.vaja@xilinx.com>
      ec9712ce
  4. 15 Mar, 2018 3 commits