From 76466bd7be58c0059e5d44b31907cd1066b9697b Mon Sep 17 00:00:00 2001
From: Masahiro Yamada <yamada.masahiro@socionext.com>
Date: Thu, 27 Oct 2016 23:47:05 +0900
Subject: [PATCH] ARM: uniphier: enable clocks to MIO/STDMAC on LD11 if USB is
 enabled

At the moment, the clk driver is not clever enough to automatically
enable parent clocks like Linux.  Enable the STDMAC clock explicitly
if USB is enabled.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
 arch/arm/mach-uniphier/clk/clk-ld11.c | 11 +++++++++++
 arch/arm/mach-uniphier/sc64-regs.h    |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/arch/arm/mach-uniphier/clk/clk-ld11.c b/arch/arm/mach-uniphier/clk/clk-ld11.c
index 92a07338a8..ca8737d2ff 100644
--- a/arch/arm/mach-uniphier/clk/clk-ld11.c
+++ b/arch/arm/mach-uniphier/clk/clk-ld11.c
@@ -9,6 +9,7 @@
 #include <linux/io.h>
 
 #include "../init.h"
+#include "../sc64-regs.h"
 #include "../sg-regs.h"
 
 void uniphier_ld11_clk_init(void)
@@ -25,4 +26,14 @@ void uniphier_ld11_clk_init(void)
 		writel(3, SG_ETPHYPSHUT);
 		writel(7, SG_ETPHYCNT);
 	}
+
+#ifdef CONFIG_USB_EHCI
+	{
+		/* FIXME: the current clk driver can not handle parents */
+		u32 tmp;
+		tmp = readl(SC_CLKCTRL4);
+		tmp |= SC_CLKCTRL4_MIO | SC_CLKCTRL4_STDMAC;
+		writel(tmp, SC_CLKCTRL4);
+	}
+#endif
 }
diff --git a/arch/arm/mach-uniphier/sc64-regs.h b/arch/arm/mach-uniphier/sc64-regs.h
index b0a4281f44..d3aa18530d 100644
--- a/arch/arm/mach-uniphier/sc64-regs.h
+++ b/arch/arm/mach-uniphier/sc64-regs.h
@@ -52,6 +52,8 @@
 #define SC_CLKCTRL		(SC_BASE_ADDR | 0x2100)
 #define SC_CLKCTRL3		(SC_BASE_ADDR | 0x2108)
 #define SC_CLKCTRL4		(SC_BASE_ADDR | 0x210c)
+#define   SC_CLKCTRL4_MIO		(1 << 10)
+#define   SC_CLKCTRL4_STDMAC		(1 << 8)
 #define   SC_CLKCTRL4_PERI		(1 << 7)
 #define   SC_CLKCTRL4_ETHER		(1 << 6)
 #define   SC_CLKCTRL4_NAND		(1 << 0)
-- 
2.39.5