diff mbox

clk: tegra210: Add SLCG override gate clocks

Message ID 1457638685-31007-1-git-send-email-rklein@nvidia.com
State Deferred
Delegated to: Jon Hunter
Headers show

Commit Message

Rhyland Klein March 10, 2016, 7:38 p.m. UTC
From: Bill Huang <bilhuang@nvidia.com>

Add some SLCG (Second Level Clock Gating) override clocks to control
gating and un-gating their logics.

Signed-off-by: Bill Huang <bilhuang@nvidia.com>
Signed-off-by: Rhyland Klein <rklein@nvidia.com>
---
 drivers/clk/tegra/clk-id.h               | 16 ++++++
 drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
 include/dt-bindings/clock/tegra210-car.h | 32 +++++------
 3 files changed, 123 insertions(+), 16 deletions(-)

Comments

Thierry Reding March 14, 2016, 4:05 p.m. UTC | #1
On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
> From: Bill Huang <bilhuang@nvidia.com>
> 
> Add some SLCG (Second Level Clock Gating) override clocks to control
> gating and un-gating their logics.
> 
> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> ---
>  drivers/clk/tegra/clk-id.h               | 16 ++++++
>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
>  3 files changed, 123 insertions(+), 16 deletions(-)

There's no rationale given here about why we need this. What will these
second level clock gates be used for? Why do we need these (seemingly)
duplicate clock entries.

Thierry
Rhyland Klein March 14, 2016, 4:08 p.m. UTC | #2
On 3/14/2016 12:05 PM, Thierry Reding wrote:
> * PGP Signed by an unknown key
> 
> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
>> From: Bill Huang <bilhuang@nvidia.com>
>>
>> Add some SLCG (Second Level Clock Gating) override clocks to control
>> gating and un-gating their logics.
>>
>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
>> ---
>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
>>  3 files changed, 123 insertions(+), 16 deletions(-)
> 
> There's no rationale given here about why we need this. What will these
> second level clock gates be used for? Why do we need these (seemingly)
> duplicate clock entries.
> 

These are going to be used in the to-be posted patchset around
powergating. As of now they are unused, which is why I hadn't added them
previously. I just wanted to try to get this dependency in before the
powergate series was posted.

-rhyland
Jon Hunter March 15, 2016, 8:40 a.m. UTC | #3
On 14/03/16 16:08, Rhyland Klein wrote:
> On 3/14/2016 12:05 PM, Thierry Reding wrote:
>> * PGP Signed by an unknown key
>>
>> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
>>> From: Bill Huang <bilhuang@nvidia.com>
>>>
>>> Add some SLCG (Second Level Clock Gating) override clocks to control
>>> gating and un-gating their logics.
>>>
>>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
>>> ---
>>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
>>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
>>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
>>>  3 files changed, 123 insertions(+), 16 deletions(-)
>>
>> There's no rationale given here about why we need this. What will these
>> second level clock gates be used for? Why do we need these (seemingly)
>> duplicate clock entries.
>>
> 
> These are going to be used in the to-be posted patchset around
> powergating. As of now they are unused, which is why I hadn't added them
> previously. I just wanted to try to get this dependency in before the
> powergate series was posted.

Yes we are using these on the Pixel C (aka. Smaug) and I suggested to
Rhyland that we upstream them. Eventually we will use them but only
after the core GenPD changes for Tegra are merged. From my perspective I
was thinking it is better to reduce the changes between the chromeos
3.18 kernel and mainline. However, if you wish to wait until we need
them I guess we can. Otherwise ...

Acked-by: Jon Hunter <jonathanh@nvidia.com>

Cheers
Jon
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rhyland Klein March 25, 2016, 6:21 p.m. UTC | #4
On 3/15/2016 4:40 AM, Jon Hunter wrote:
> 
> On 14/03/16 16:08, Rhyland Klein wrote:
>> On 3/14/2016 12:05 PM, Thierry Reding wrote:
>>> * PGP Signed by an unknown key
>>>
>>> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
>>>> From: Bill Huang <bilhuang@nvidia.com>
>>>>
>>>> Add some SLCG (Second Level Clock Gating) override clocks to control
>>>> gating and un-gating their logics.
>>>>
>>>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
>>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
>>>> ---
>>>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
>>>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
>>>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
>>>>  3 files changed, 123 insertions(+), 16 deletions(-)
>>>
>>> There's no rationale given here about why we need this. What will these
>>> second level clock gates be used for? Why do we need these (seemingly)
>>> duplicate clock entries.
>>>
>>
>> These are going to be used in the to-be posted patchset around
>> powergating. As of now they are unused, which is why I hadn't added them
>> previously. I just wanted to try to get this dependency in before the
>> powergate series was posted.
> 
> Yes we are using these on the Pixel C (aka. Smaug) and I suggested to
> Rhyland that we upstream them. Eventually we will use them but only
> after the core GenPD changes for Tegra are merged. From my perspective I
> was thinking it is better to reduce the changes between the chromeos
> 3.18 kernel and mainline. However, if you wish to wait until we need
> them I guess we can. Otherwise ...
> 
> Acked-by: Jon Hunter <jonathanh@nvidia.com>
> 
> Cheers
> Jon
> 

Thierry do you think we should hold off on this until Jon's patches are
ready or merge this sooner?

-rhyland
Thierry Reding April 12, 2016, 3:20 p.m. UTC | #5
On Fri, Mar 25, 2016 at 02:21:51PM -0400, Rhyland Klein wrote:
> On 3/15/2016 4:40 AM, Jon Hunter wrote:
> > 
> > On 14/03/16 16:08, Rhyland Klein wrote:
> >> On 3/14/2016 12:05 PM, Thierry Reding wrote:
> >>> * PGP Signed by an unknown key
> >>>
> >>> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
> >>>> From: Bill Huang <bilhuang@nvidia.com>
> >>>>
> >>>> Add some SLCG (Second Level Clock Gating) override clocks to control
> >>>> gating and un-gating their logics.
> >>>>
> >>>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
> >>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> >>>> ---
> >>>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
> >>>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
> >>>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
> >>>>  3 files changed, 123 insertions(+), 16 deletions(-)
> >>>
> >>> There's no rationale given here about why we need this. What will these
> >>> second level clock gates be used for? Why do we need these (seemingly)
> >>> duplicate clock entries.
> >>>
> >>
> >> These are going to be used in the to-be posted patchset around
> >> powergating. As of now they are unused, which is why I hadn't added them
> >> previously. I just wanted to try to get this dependency in before the
> >> powergate series was posted.
> > 
> > Yes we are using these on the Pixel C (aka. Smaug) and I suggested to
> > Rhyland that we upstream them. Eventually we will use them but only
> > after the core GenPD changes for Tegra are merged. From my perspective I
> > was thinking it is better to reduce the changes between the chromeos
> > 3.18 kernel and mainline. However, if you wish to wait until we need
> > them I guess we can. Otherwise ...
> > 
> > Acked-by: Jon Hunter <jonathanh@nvidia.com>
> > 
> > Cheers
> > Jon
> > 
> 
> Thierry do you think we should hold off on this until Jon's patches are
> ready or merge this sooner?

Jon, I think it would make sense for you to pick this up into your tree
along with the rest of the patches that make use of them. Even if they
end up being applied to different trees I'd like to see all of the work
as a whole first.

Thierry
Jon Hunter April 12, 2016, 5:41 p.m. UTC | #6
On 12/04/16 16:20, Thierry Reding wrote:
> * PGP Signed by an unknown key
> 
> On Fri, Mar 25, 2016 at 02:21:51PM -0400, Rhyland Klein wrote:
>> On 3/15/2016 4:40 AM, Jon Hunter wrote:
>>>
>>> On 14/03/16 16:08, Rhyland Klein wrote:
>>>> On 3/14/2016 12:05 PM, Thierry Reding wrote:
>>>>>> Old Signed by an unknown key
>>>>>
>>>>> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
>>>>>> From: Bill Huang <bilhuang@nvidia.com>
>>>>>>
>>>>>> Add some SLCG (Second Level Clock Gating) override clocks to control
>>>>>> gating and un-gating their logics.
>>>>>>
>>>>>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
>>>>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
>>>>>> ---
>>>>>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
>>>>>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
>>>>>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
>>>>>>  3 files changed, 123 insertions(+), 16 deletions(-)
>>>>>
>>>>> There's no rationale given here about why we need this. What will these
>>>>> second level clock gates be used for? Why do we need these (seemingly)
>>>>> duplicate clock entries.
>>>>>
>>>>
>>>> These are going to be used in the to-be posted patchset around
>>>> powergating. As of now they are unused, which is why I hadn't added them
>>>> previously. I just wanted to try to get this dependency in before the
>>>> powergate series was posted.
>>>
>>> Yes we are using these on the Pixel C (aka. Smaug) and I suggested to
>>> Rhyland that we upstream them. Eventually we will use them but only
>>> after the core GenPD changes for Tegra are merged. From my perspective I
>>> was thinking it is better to reduce the changes between the chromeos
>>> 3.18 kernel and mainline. However, if you wish to wait until we need
>>> them I guess we can. Otherwise ...
>>>
>>> Acked-by: Jon Hunter <jonathanh@nvidia.com>
>>>
>>> Cheers
>>> Jon
>>>
>>
>> Thierry do you think we should hold off on this until Jon's patches are
>> ready or merge this sooner?
> 
> Jon, I think it would make sense for you to pick this up into your tree
> along with the rest of the patches that make use of them. Even if they
> end up being applied to different trees I'd like to see all of the work
> as a whole first.

Ok. That is fine with me.

Cheers
Jon
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Thierry Reding April 22, 2016, 11:12 a.m. UTC | #7
On Tue, Apr 12, 2016 at 06:41:50PM +0100, Jon Hunter wrote:
> 
> On 12/04/16 16:20, Thierry Reding wrote:
> > * PGP Signed by an unknown key
> > 
> > On Fri, Mar 25, 2016 at 02:21:51PM -0400, Rhyland Klein wrote:
> >> On 3/15/2016 4:40 AM, Jon Hunter wrote:
> >>>
> >>> On 14/03/16 16:08, Rhyland Klein wrote:
> >>>> On 3/14/2016 12:05 PM, Thierry Reding wrote:
> >>>>>> Old Signed by an unknown key
> >>>>>
> >>>>> On Thu, Mar 10, 2016 at 02:38:05PM -0500, Rhyland Klein wrote:
> >>>>>> From: Bill Huang <bilhuang@nvidia.com>
> >>>>>>
> >>>>>> Add some SLCG (Second Level Clock Gating) override clocks to control
> >>>>>> gating and un-gating their logics.
> >>>>>>
> >>>>>> Signed-off-by: Bill Huang <bilhuang@nvidia.com>
> >>>>>> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> >>>>>> ---
> >>>>>>  drivers/clk/tegra/clk-id.h               | 16 ++++++
> >>>>>>  drivers/clk/tegra/clk-tegra210.c         | 91 ++++++++++++++++++++++++++++++++
> >>>>>>  include/dt-bindings/clock/tegra210-car.h | 32 +++++------
> >>>>>>  3 files changed, 123 insertions(+), 16 deletions(-)
> >>>>>
> >>>>> There's no rationale given here about why we need this. What will these
> >>>>> second level clock gates be used for? Why do we need these (seemingly)
> >>>>> duplicate clock entries.
> >>>>>
> >>>>
> >>>> These are going to be used in the to-be posted patchset around
> >>>> powergating. As of now they are unused, which is why I hadn't added them
> >>>> previously. I just wanted to try to get this dependency in before the
> >>>> powergate series was posted.
> >>>
> >>> Yes we are using these on the Pixel C (aka. Smaug) and I suggested to
> >>> Rhyland that we upstream them. Eventually we will use them but only
> >>> after the core GenPD changes for Tegra are merged. From my perspective I
> >>> was thinking it is better to reduce the changes between the chromeos
> >>> 3.18 kernel and mainline. However, if you wish to wait until we need
> >>> them I guess we can. Otherwise ...
> >>>
> >>> Acked-by: Jon Hunter <jonathanh@nvidia.com>
> >>>
> >>> Cheers
> >>> Jon
> >>>
> >>
> >> Thierry do you think we should hold off on this until Jon's patches are
> >> ready or merge this sooner?
> > 
> > Jon, I think it would make sense for you to pick this up into your tree
> > along with the rest of the patches that make use of them. Even if they
> > end up being applied to different trees I'd like to see all of the work
> > as a whole first.
> 
> Ok. That is fine with me.

I've had a brief discussion about this with Peter and it seems like
these are only used to make sure that IP blocks don't hang during reset.
If that's so I'm inclined to request this code to be hidden within the
clock & reset driver to contain the knowledge to that driver where the
workaround can be applied without having to make every driver (or at
least the powergate driver) aware of this need.

Thierry
diff mbox

Patch

diff --git a/drivers/clk/tegra/clk-id.h b/drivers/clk/tegra/clk-id.h
index 62ea38187b71..d0b928d5b183 100644
--- a/drivers/clk/tegra/clk-id.h
+++ b/drivers/clk/tegra/clk-id.h
@@ -306,6 +306,22 @@  enum clk_id {
 	tegra_clk_xusb_ss_div2,
 	tegra_clk_xusb_ssp_src,
 	tegra_clk_sclk_mux,
+	tegra_clk_disp1_slcg_ovr,
+	tegra_clk_disp2_slcg_ovr,
+	tegra_clk_vi_slcg_ovr,
+	tegra_clk_ispa_slcg_ovr,
+	tegra_clk_ispb_slcg_ovr,
+	tegra_clk_nvdec_slcg_ovr,
+	tegra_clk_msenc_slcg_ovr,
+	tegra_clk_nvjpg_slcg_ovr,
+	tegra_clk_vic03_slcg_ovr,
+	tegra_clk_xusb_dev_slcg_ovr,
+	tegra_clk_xusb_host_slcg_ovr,
+	tegra_clk_d_audio_slcg_ovr,
+	tegra_clk_ape_slcg_ovr,
+	tegra_clk_sata_slcg_ovr,
+	tegra_clk_sata_slcg_ovr_ipfs,
+	tegra_clk_sata_slcg_ovr_fpci,
 	tegra_clk_max,
 };
 
diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index 637041fd53ad..bf5c93497ef2 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -151,6 +151,11 @@ 
 #define PLLDP_SS_CTRL1	0x59c
 #define PLLDP_SS_CTRL2	0x5a0
 
+#define LVL2_CLK_GATE_OVRA 0xf8
+#define LVL2_CLK_GATE_OVRC 0x3a0
+#define LVL2_CLK_GATE_OVRD 0x3a4
+#define LVL2_CLK_GATE_OVRE 0x554
+
 #define PMC_PLLM_WB0_OVERRIDE 0x1dc
 #define PMC_PLLM_WB0_OVERRIDE_2 0x2b0
 
@@ -2208,6 +2213,22 @@  static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
 	[tegra_clk_pll_c4_out2] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT2, .present = true },
 	[tegra_clk_pll_c4_out3] = { .dt_id = TEGRA210_CLK_PLL_C4_OUT3, .present = true },
 	[tegra_clk_apb2ape] = { .dt_id = TEGRA210_CLK_APB2APE, .present = true },
+	[tegra_clk_disp1_slcg_ovr] = { .dt_id = TEGRA210_CLK_DISP1_SLCG_OVR, .present = true },
+	[tegra_clk_disp2_slcg_ovr] = { .dt_id = TEGRA210_CLK_DISP2_SLCG_OVR, .present = true },
+	[tegra_clk_vi_slcg_ovr] = { .dt_id = TEGRA210_CLK_VI_SLCG_OVR, .present = true },
+	[tegra_clk_ispa_slcg_ovr] = { .dt_id = TEGRA210_CLK_ISPA_SLCG_OVR, .present = true },
+	[tegra_clk_ispb_slcg_ovr] = { .dt_id = TEGRA210_CLK_ISPB_SLCG_OVR, .present = true },
+	[tegra_clk_nvdec_slcg_ovr] = { .dt_id = TEGRA210_CLK_NVDEC_SLCG_OVR, .present = true },
+	[tegra_clk_msenc_slcg_ovr] = { .dt_id = TEGRA210_CLK_MSENC_SLCG_OVR, .present = true },
+	[tegra_clk_nvjpg_slcg_ovr] = { .dt_id = TEGRA210_CLK_NVJPG_SLCG_OVR, .present = true },
+	[tegra_clk_vic03_slcg_ovr] = { .dt_id = TEGRA210_CLK_VIC03_SLCG_OVR, .present = true },
+	[tegra_clk_xusb_dev_slcg_ovr] = { .dt_id = TEGRA210_CLK_XUSB_DEV_SLCG_OVR, .present = true },
+	[tegra_clk_xusb_host_slcg_ovr] = { .dt_id = TEGRA210_CLK_XUSB_HOST_SLCG_OVR, .present = true },
+	[tegra_clk_d_audio_slcg_ovr] = { .dt_id = TEGRA210_CLK_D_AUDIO_SLCG_OVR, .present = true },
+	[tegra_clk_ape_slcg_ovr] = { .dt_id = TEGRA210_CLK_APE_SLCG_OVR, .present = true },
+	[tegra_clk_sata_slcg_ovr] = { .dt_id = TEGRA210_CLK_SATA_SLCG_OVR, .present = true },
+	[tegra_clk_sata_slcg_ovr_ipfs] = { .dt_id = TEGRA210_CLK_SATA_SLCG_OVR_IPFS, .present = true },
+	[tegra_clk_sata_slcg_ovr_fpci] = { .dt_id = TEGRA210_CLK_SATA_SLCG_OVR_FPCI, .present = true },
 };
 
 static struct tegra_devclk devclks[] __initdata = {
@@ -2768,6 +2789,75 @@  static void __init tegra210_clock_apply_init_table(void)
 	tegra_init_from_table(init_table, clks, TEGRA210_CLK_CLK_MAX);
 }
 
+static void __init tegra210_ovr_clk_init(void __iomem *clk_base)
+{
+	struct clk *clk;
+
+	clk = clk_register_gate(NULL, "disp1_slcg_ovr", "disp1", 0,
+				clk_base + LVL2_CLK_GATE_OVRA, 1, 0, NULL);
+	clks[TEGRA210_CLK_DISP1_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "disp2_slcg_ovr", "disp2", 0,
+				clk_base + LVL2_CLK_GATE_OVRA, 2, 0, NULL);
+	clks[TEGRA210_CLK_DISP2_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "vi_slcg_ovr", "vi", 0,
+				clk_base + LVL2_CLK_GATE_OVRA, 15, 0, NULL);
+	clks[TEGRA210_CLK_VI_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "ispa_slcg_ovr", "isp", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 3, 0, NULL);
+	clks[TEGRA210_CLK_ISPA_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "ispb_slcg_ovr", "ispb", 0,
+				clk_base + LVL2_CLK_GATE_OVRD, 22, 0, NULL);
+	clks[TEGRA210_CLK_ISPB_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "nvdec_slcg_ovr", "nvdec", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 31, 0, NULL);
+	clks[TEGRA210_CLK_NVDEC_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "msenc_slcg_ovr", "msenc", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 29, 0, NULL);
+	clks[TEGRA210_CLK_MSENC_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "nvjpg_slcg_ovr", "nvjpg", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 9, 0, NULL);
+	clks[TEGRA210_CLK_NVJPG_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "vic03_slcg_ovr", "vic03", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 5, 0, NULL);
+	clks[TEGRA210_CLK_VIC03_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "xusb_dev_slcg_ovr", "xusb_dev", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 31, 0, NULL);
+	clks[TEGRA210_CLK_XUSB_DEV_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "xusb_host_slcg_ovr", "xusb_host", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 30, 0, NULL);
+	clks[TEGRA210_CLK_XUSB_HOST_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "d_audio_slcg_ovr", "d_audio", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 1, 0, NULL);
+	clks[TEGRA210_CLK_D_AUDIO_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "ape_slcg_ovr", "ape", 0,
+				clk_base + LVL2_CLK_GATE_OVRE, 10, 0, NULL);
+	clks[TEGRA210_CLK_APE_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "sata_slcg_ovr", "sata", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 0, 0, NULL);
+	clks[TEGRA210_CLK_SATA_SLCG_OVR] = clk;
+
+	clk = clk_register_gate(NULL, "sata_slcg_ovr_ipfs", "sata", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 17, 0, NULL);
+	clks[TEGRA210_CLK_SATA_SLCG_OVR_IPFS] = clk;
+
+	clk = clk_register_gate(NULL, "sata_slcg_ovr_fpci", "sata", 0,
+				clk_base + LVL2_CLK_GATE_OVRC, 19, 0, NULL);
+	clks[TEGRA210_CLK_SATA_SLCG_OVR_FPCI] = clk;
+}
+
 /**
  * tegra210_clock_init - Tegra210-specific clock initialization
  * @np: struct device_node * of the DT node for the SoC CAR IP block
@@ -2818,6 +2908,7 @@  static void __init tegra210_clock_init(struct device_node *np)
 	tegra_fixed_clk_init(tegra210_clks);
 	tegra210_pll_init(clk_base, pmc_base);
 	tegra210_periph_clk_init(clk_base, pmc_base);
+	tegra210_ovr_clk_init(clk_base);
 	tegra_audio_clk_init(clk_base, pmc_base, tegra210_clks,
 			     tegra210_audio_plls,
 			     ARRAY_SIZE(tegra210_audio_plls));
diff --git a/include/dt-bindings/clock/tegra210-car.h b/include/dt-bindings/clock/tegra210-car.h
index 0a05b0d36ae7..299a18537973 100644
--- a/include/dt-bindings/clock/tegra210-car.h
+++ b/include/dt-bindings/clock/tegra210-car.h
@@ -361,22 +361,22 @@ 
 /* 331 */
 /* 332 */
 /* 333 */
-/* 334 */
-/* 335 */
-/* 336 */
-/* 337 */
-/* 338 */
-/* 339 */
-/* 340 */
-/* 341 */
-/* 342 */
-/* 343 */
-/* 344 */
-/* 345 */
-/* 346 */
-/* 347 */
-/* 348 */
-/* 349 */
+#define TEGRA210_CLK_DISP1_SLCG_OVR 334
+#define TEGRA210_CLK_DISP2_SLCG_OVR 335
+#define TEGRA210_CLK_VI_SLCG_OVR 336
+#define TEGRA210_CLK_ISPA_SLCG_OVR 337
+#define TEGRA210_CLK_ISPB_SLCG_OVR 338
+#define TEGRA210_CLK_NVDEC_SLCG_OVR 339
+#define TEGRA210_CLK_MSENC_SLCG_OVR 340
+#define TEGRA210_CLK_NVJPG_SLCG_OVR 341
+#define TEGRA210_CLK_VIC03_SLCG_OVR 342
+#define TEGRA210_CLK_XUSB_DEV_SLCG_OVR 343
+#define TEGRA210_CLK_XUSB_HOST_SLCG_OVR 344
+#define TEGRA210_CLK_D_AUDIO_SLCG_OVR 345
+#define TEGRA210_CLK_APE_SLCG_OVR 346
+#define TEGRA210_CLK_SATA_SLCG_OVR 347
+#define TEGRA210_CLK_SATA_SLCG_OVR_IPFS 348
+#define TEGRA210_CLK_SATA_SLCG_OVR_FPCI 349
 
 #define TEGRA210_CLK_AUDIO0_MUX 350
 #define TEGRA210_CLK_AUDIO1_MUX 351