ARM: tegra12: clock: Add AHB/APB shared buses chain
authorKaz Fukuoka <kfukuoka@nvidia.com>
Sat, 31 Aug 2013 00:53:46 +0000 (17:53 -0700)
committerDan Willemsen <dwillemsen@nvidia.com>
Tue, 17 Sep 2013 00:41:42 +0000 (17:41 -0700)
commit24a06a3769dbe2b8cdf452fe9e783b5962de300c
tree4ee83510193f4fb0269d19a9771439d206d9e43b
parentce8b9234ecce8e499a93ff68af41c5adb53453ec
ARM: tegra12: clock: Add AHB/APB shared buses chain

So far, only top most tegra system bus SBUS was exposed as shared bus
by tegra clock framework. All system, AHB, APB clock users requested
directly SBUS rate, and SCLK:HCLK:PCLK rate ratios were fixed at 1:1:2.

This commit added AHB/APB shared buses chain on Tegra12: AHB shared
bus is a shared user of SBUs, and APB shared bus is a shared user of
AHB, respectively.

USB shared users are moved from SBUS to AHB, and SBC shared users are
moved from SBUS to APB. All other SBUS shared users are still children
of the top most SBUS. All "leaves" users in the chain are protected
with cross-bus mutex to avoid races when different segments of the
chain are updated concurrently.

The bus clocks ratios are now dynamically changed based in the rates
requested by the users of each bus. There are, however, limitations on
scaling SCLK:HCLK:PCLK dividers:
(A) H/w limitation: if SCLK >= 60MHz, must have SCLK:PCLK >= 2
(B) S/w policy limitation, in addition to (A): if any APB bus shared
user request is enabled, set HCLK:PCLK >= 2
Limitation (B) is necessary, since otherwise we can not guarantee safe
transition from HCLK:PCLK = 1:1 below 60MHz to HCLK rate above 60MHz
without under-clocking APB user.

When SBUS is throttled by thermal or EDP manager, AHB and APB buses
will be throttled as well to satisfy limitations (A) and (B).

When SBUS rate is fixed via debugfs override user, bus dividers are
also fixed as SCLK:HCLK:PCLK = 1:1:2

(Note for Tegra12: The limitation descried above may have been relaxed
on Tegra12. This issue has to be visited again once the new limitation
is clarified.)

Ported from Tegra14 Change-Id: I8d2999aa8399f86c592ee9b5ee5c66aa0d036c93

Change-Id: Idab839cd227ff9f97db2471c9168f07b6383f653
Signed-off-by: Kaz Fukuoka <kfukuoka@nvidia.com>
Reviewed-on: http://git-master/r/268796
Reviewed-by: Aleksandr Frid <afrid@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
arch/arm/mach-tegra/tegra12_clocks.c