1. 24 12月, 2019 1 次提交
    • M
      clk: samsung: exynos5420: Keep top G3D clocks enabled · 67f96ff7
      Marek Szyprowski 提交于
      In Exynos542x/5800 SoCs, the G3D leaf clocks are located in the G3D power
      domain. This is similar to the other hardware modules and their power
      domains. However there is one thing specific to G3D clocks hierarchy.
      Unlike other hardware modules, the G3D clocks hierarchy doesn't have any
      gate clock between the TOP part of the hierarchy and the part located in
      the power domain and some SoC internal busses are sourced directly from
      the TOP muxes. The consequence of this design if the fact that the TOP
      part of the hierarchy has to be enabled permanently to ensure proper
      operation of the SoC power related components (G3D power domain and
      Exynos Power Management Unit for system suspend/resume).
      
      This patch adds an explicit call to clk_prepare_enable() on the last MUX
      in the TOP part of G3D clock hierarchy to keep it enabled permanently to
      ensure that the internal busses get their clock regardless of the main
      G3D clock enablement status.
      
      This fixes following imprecise abort issue observed on Odroid XU3/XU4
      after enabling Panfrost driver by commit 1a5a85c5 "ARM: dts: exynos:
      Add Mali/GPU node on Exynos5420 and enable it on Odroid XU3/4"):
      
      panfrost 11800000.gpu: clock rate = 400000000
      panfrost 11800000.gpu: failed to get regulator: -517
      panfrost 11800000.gpu: regulator init failed -517
      Power domain G3D disable failed
      ...
      panfrost 11800000.gpu: clock rate = 400000000
      8<--- cut here ---
      Unhandled fault: imprecise external abort (0x1406) at 0x00000000
      pgd = (ptrval)
      [00000000] *pgd=00000000
      Internal error: : 1406 [#1] PREEMPT SMP ARM
      Modules linked in:
      CPU: 7 PID: 53 Comm: kworker/7:1 Not tainted 5.4.0-rc8-next-20191119-00032-g56f1001191a6 #6923
      Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
      Workqueue: events deferred_probe_work_func
      PC is at panfrost_gpu_soft_reset+0x94/0x110
      LR is at ___might_sleep+0x128/0x2dc
      ...
      [<c05c231c>] (panfrost_gpu_soft_reset) from [<c05c2704>] (panfrost_gpu_init+0x10/0x67c)
      [<c05c2704>] (panfrost_gpu_init) from [<c05c15d0>] (panfrost_device_init+0x158/0x2cc)
      [<c05c15d0>] (panfrost_device_init) from [<c05c0cb0>] (panfrost_probe+0x80/0x178)
      [<c05c0cb0>] (panfrost_probe) from [<c05cfaa0>] (platform_drv_probe+0x48/0x9c)
      [<c05cfaa0>] (platform_drv_probe) from [<c05cd20c>] (really_probe+0x1c4/0x474)
      [<c05cd20c>] (really_probe) from [<c05cd694>] (driver_probe_device+0x78/0x1bc)
      [<c05cd694>] (driver_probe_device) from [<c05cb374>] (bus_for_each_drv+0x74/0xb8)
      [<c05cb374>] (bus_for_each_drv) from [<c05ccfa8>] (__device_attach+0xd4/0x16c)
      [<c05ccfa8>] (__device_attach) from [<c05cc110>] (bus_probe_device+0x88/0x90)
      [<c05cc110>] (bus_probe_device) from [<c05cc634>] (deferred_probe_work_func+0x4c/0xd0)
      [<c05cc634>] (deferred_probe_work_func) from [<c0149df0>] (process_one_work+0x300/0x864)
      [<c0149df0>] (process_one_work) from [<c014a3ac>] (worker_thread+0x58/0x5a0)
      [<c014a3ac>] (worker_thread) from [<c0151174>] (kthread+0x12c/0x160)
      [<c0151174>] (kthread) from [<c01010b4>] (ret_from_fork+0x14/0x20)
      Exception stack(0xee03dfb0 to 0xee03dff8)
      ...
      Code: e594300c e5933020 e3130c01 1a00000f (ebefff50).
      ---[ end trace badde2b74a65a540 ]---
      
      In the above case, the Panfrost driver disables G3D clocks after failure
      of getting the needed regulator and return with -EPROVE_DEFER code. This
      causes G3D power domain disable failure and then, during second probe
      an imprecise abort is triggered due to undefined power domain state.
      
      Fixes: 45f10dab ("clk: samsung: exynos5420: Add SET_RATE_PARENT flag to clocks on G3D path")
      Fixes: c9f7567a ("clk: samsung: exynos542x: Move G3D subsystem clocks to its sub-CMU")
      Signed-off-by: NMarek Szyprowski <m.szyprowski@samsung.com>
      Link: https://lkml.kernel.org/r/20191216131407.17225-1-m.szyprowski@samsung.comAcked-by: NKrzysztof Kozlowski <krzk@kernel.org>
      Acked-by: NChanwoo Choi <cw00.choi@samsung.com>
      Acked-by: NSylwester Nawrocki <s.nawrocki@samsung.com>
      Signed-off-by: NStephen Boyd <sboyd@kernel.org>
      67f96ff7
  2. 29 10月, 2019 3 次提交
  3. 25 10月, 2019 1 次提交
  4. 24 10月, 2019 1 次提交
  5. 09 8月, 2019 3 次提交
  6. 19 6月, 2019 1 次提交
  7. 06 6月, 2019 2 次提交
  8. 05 10月, 2018 3 次提交
  9. 12 3月, 2018 2 次提交
  10. 07 3月, 2018 1 次提交
  11. 23 2月, 2018 1 次提交
  12. 09 10月, 2017 1 次提交
  13. 29 9月, 2017 1 次提交
  14. 10 8月, 2017 1 次提交
  15. 09 8月, 2017 1 次提交
  16. 01 8月, 2017 1 次提交
    • S
      clk: samsung: exynos5420: The EPLL rate table corrections · 5b30850b
      Sylwester Nawrocki 提交于
      This patch fixes values of the EPLL K coefficient and changes
      the EPLL output frequency values to match exactly what is
      possible to achieve with given M, P, S, K coefficients.
      This allows to avoid rounding errors and unexpected frequency
      being set with clk_set_rate(), due to recalc_rate returning
      different values than the PLL rate specified in the
      exynos5420_epll_24mhz_tbl table. E.g. this prevents a case
      where two consecutive clk_set_rate() calls with same argument
      result in different PLL output frequency.
      
      The PLL output frequencies have been calculated with formula:
      
      f = fxtal * (M * 2^16 + K) / (P * 2^S) / 2^16
      
      where fxtal = 24000000.
      
      Fixes: 9842452a ("clk: samsung: exynos542x: Add EPLL rate table")
      Signed-off-by: NSylwester Nawrocki <s.nawrocki@samsung.com>
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      5b30850b
  17. 09 6月, 2017 2 次提交
  18. 10 1月, 2017 1 次提交
  19. 09 9月, 2016 1 次提交
  20. 02 6月, 2016 4 次提交
  21. 16 4月, 2016 1 次提交
  22. 03 3月, 2016 1 次提交
  23. 16 12月, 2015 4 次提交
  24. 21 7月, 2015 1 次提交
    • S
      clk: samsung: Properly include clk.h and clkdev.h · 6f1ed07a
      Stephen Boyd 提交于
      Clock provider drivers generally shouldn't include clk.h because
      it's the consumer API. Only include clk.h in files that are
      using it. The clkdev.h header isn't always used either, so remove
      it and add in slab.h where files were relying on it to include
      slab for them.
      
      Cc: Chanwoo Choi <cw00.choi@samsung.com>
      Cc: Sylwester Nawrocki <s.nawrocki@samsung.com>
      Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
      6f1ed07a
  25. 06 5月, 2015 1 次提交