@@ -1,3 +1,5 @@
obj-y += clk-uniphier-core.o
+
obj-y += clk-uniphier-sys.o
obj-y += clk-uniphier-mio.o
+obj-y += clk-uniphier-peri.o
@@ -333,6 +333,39 @@ static const struct udevice_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-pxs3-sd-clock",
.data = (ulong)uniphier_mio_clk_data,
},
+ /* Peripheral clock */
+ {
+ .compatible = "socionext,uniphier-ld4-peri-clock",
+ .data = (ulong)uniphier_ld4_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-pro4-peri-clock",
+ .data = (ulong)uniphier_pro4_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-sld8-peri-clock",
+ .data = (ulong)uniphier_sld8_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-pro5-peri-clock",
+ .data = (ulong)uniphier_pro4_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-pxs2-peri-clock",
+ .data = (ulong)uniphier_pxs2_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-ld11-peri-clock",
+ .data = (ulong)uniphier_ld11_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-ld20-peri-clock",
+ .data = (ulong)uniphier_ld11_peri_clk_data,
+ },
+ {
+ .compatible = "socionext,uniphier-pxs3-peri-clock",
+ .data = (ulong)uniphier_ld11_peri_clk_data,
+ },
{ /* sentinel */ }
};
new file mode 100644
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2016-2017 Socionext Inc.
+ * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "clk-uniphier.h"
+
+#define UNIPHIER_PERI_CLK_UART(id, ch) \
+ UNIPHIER_CLK_GATE(id, 128, 0x24, 19 + (ch))
+
+#define UNIPHIER_PERI_CLK_I2C(id, ch) \
+ UNIPHIER_CLK_GATE(id, 129, 0x24, 5 + (ch))
+
+#define UNIPHIER_PERI_CLK_FI2C(id, ch) \
+ UNIPHIER_CLK_GATE(id, 129, 0x24, 24 + (ch))
+
+const struct uniphier_clk_data uniphier_ld4_peri_clk_data[] = {
+#ifdef CONFIG_ARCH_UNIPHIER_LD4
+ UNIPHIER_CLK_RATE(128, 36864000),
+ UNIPHIER_CLK_RATE(129, 99840000),
+ UNIPHIER_PERI_CLK_UART(0, 0),
+ UNIPHIER_PERI_CLK_UART(1, 1),
+ UNIPHIER_PERI_CLK_UART(2, 2),
+ UNIPHIER_PERI_CLK_UART(3, 3),
+ UNIPHIER_PERI_CLK_I2C(4, 0),
+ UNIPHIER_PERI_CLK_I2C(5, 1),
+ UNIPHIER_PERI_CLK_I2C(6, 2),
+ UNIPHIER_PERI_CLK_I2C(7, 3),
+ UNIPHIER_PERI_CLK_I2C(8, 4),
+ UNIPHIER_PERI_CLK_I2C(9, 5),
+ UNIPHIER_PERI_CLK_I2C(10, 6),
+ { /* sentinel */ }
+#endif
+};
+
+const struct uniphier_clk_data uniphier_sld8_peri_clk_data[] = {
+#ifdef CONFIG_ARCH_UNIPHIER_SLD8
+ UNIPHIER_CLK_RATE(128, 80000000),
+ UNIPHIER_CLK_RATE(129, 100000000),
+ UNIPHIER_PERI_CLK_UART(0, 0),
+ UNIPHIER_PERI_CLK_UART(1, 1),
+ UNIPHIER_PERI_CLK_UART(2, 2),
+ UNIPHIER_PERI_CLK_UART(3, 3),
+ UNIPHIER_PERI_CLK_I2C(4, 0),
+ UNIPHIER_PERI_CLK_I2C(5, 1),
+ UNIPHIER_PERI_CLK_I2C(6, 2),
+ UNIPHIER_PERI_CLK_I2C(7, 3),
+ UNIPHIER_PERI_CLK_I2C(8, 4),
+ UNIPHIER_PERI_CLK_I2C(9, 5),
+ UNIPHIER_PERI_CLK_I2C(10, 6),
+ { /* sentinel */ }
+#endif
+};
+
+const struct uniphier_clk_data uniphier_pro4_peri_clk_data[] = {
+#if defined(CONFIG_ARCH_UNIPHIER_PRO4) || defined(CONFIG_ARCH_UNIPHIER_PRO5)
+ UNIPHIER_CLK_RATE(128, 73728000),
+ UNIPHIER_CLK_RATE(129, 50000000),
+ UNIPHIER_PERI_CLK_UART(0, 0),
+ UNIPHIER_PERI_CLK_UART(1, 1),
+ UNIPHIER_PERI_CLK_UART(2, 2),
+ UNIPHIER_PERI_CLK_UART(3, 3),
+ UNIPHIER_PERI_CLK_FI2C(4, 0),
+ UNIPHIER_PERI_CLK_FI2C(5, 1),
+ UNIPHIER_PERI_CLK_FI2C(6, 2),
+ UNIPHIER_PERI_CLK_FI2C(7, 3),
+ UNIPHIER_PERI_CLK_FI2C(8, 4),
+ UNIPHIER_PERI_CLK_FI2C(9, 5),
+ UNIPHIER_PERI_CLK_FI2C(10, 6),
+ { /* sentinel */ }
+#endif
+};
+
+const struct uniphier_clk_data uniphier_pxs2_peri_clk_data[] = {
+#if defined(CONFIG_ARCH_UNIPHIER_PXS2) || defined(CONFIG_ARCH_UNIPHIER_LD6B)
+ UNIPHIER_CLK_RATE(128, 88888889),
+ UNIPHIER_CLK_RATE(129, 50000000),
+ UNIPHIER_PERI_CLK_UART(0, 0),
+ UNIPHIER_PERI_CLK_UART(1, 1),
+ UNIPHIER_PERI_CLK_UART(2, 2),
+ UNIPHIER_PERI_CLK_UART(3, 3),
+ UNIPHIER_PERI_CLK_FI2C(4, 0),
+ UNIPHIER_PERI_CLK_FI2C(5, 1),
+ UNIPHIER_PERI_CLK_FI2C(6, 2),
+ UNIPHIER_PERI_CLK_FI2C(7, 3),
+ UNIPHIER_PERI_CLK_FI2C(8, 4),
+ UNIPHIER_PERI_CLK_FI2C(9, 5),
+ UNIPHIER_PERI_CLK_FI2C(10, 6),
+ { /* sentinel */ }
+#endif
+};
+
+const struct uniphier_clk_data uniphier_ld11_peri_clk_data[] = {
+#if defined(CONFIG_ARCH_UNIPHIER_LD11) || defined(CONFIG_ARCH_UNIPHIER_LD20) ||\
+ defined(CONFIG_ARCH_UNIPHIER_PXS3)
+ UNIPHIER_CLK_RATE(128, 58823529),
+ UNIPHIER_CLK_RATE(129, 50000000),
+ UNIPHIER_PERI_CLK_UART(0, 0),
+ UNIPHIER_PERI_CLK_UART(1, 1),
+ UNIPHIER_PERI_CLK_UART(2, 2),
+ UNIPHIER_PERI_CLK_UART(3, 3),
+ UNIPHIER_PERI_CLK_FI2C(4, 0),
+ UNIPHIER_PERI_CLK_FI2C(5, 1),
+ UNIPHIER_PERI_CLK_FI2C(6, 2),
+ UNIPHIER_PERI_CLK_FI2C(7, 3),
+ UNIPHIER_PERI_CLK_FI2C(8, 4),
+ UNIPHIER_PERI_CLK_FI2C(9, 5),
+ UNIPHIER_PERI_CLK_FI2C(10, 6),
+ { /* sentinel */ }
+#endif
+};
@@ -75,5 +75,10 @@ extern const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_ld20_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_mio_clk_data[];
+extern const struct uniphier_clk_data uniphier_ld4_peri_clk_data[];
+extern const struct uniphier_clk_data uniphier_sld8_peri_clk_data[];
+extern const struct uniphier_clk_data uniphier_pro4_peri_clk_data[];
+extern const struct uniphier_clk_data uniphier_pxs2_peri_clk_data[];
+extern const struct uniphier_clk_data uniphier_ld11_peri_clk_data[];
#endif /* __CLK_UNIPHIER_H__ */
Add peripheral clock data for all SoCs. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- drivers/clk/uniphier/Makefile | 2 + drivers/clk/uniphier/clk-uniphier-core.c | 33 +++++++++ drivers/clk/uniphier/clk-uniphier-peri.c | 113 +++++++++++++++++++++++++++++++ drivers/clk/uniphier/clk-uniphier.h | 5 ++ 4 files changed, 153 insertions(+) create mode 100644 drivers/clk/uniphier/clk-uniphier-peri.c