Thread (13 messages) flat view 13 messages, 2 authors, 2016-09-05

[PATCH 4/6] clk: sunxi-ng: Add A33 CCU support

From: Chen-Yu Tsai <hidden>
Date: 2016-09-05 06:35:03
Also in: linux-clk, linux-devicetree, lkml

Hi,

On Thu, Sep 1, 2016 at 10:16 PM, Maxime Ripard
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
This commit introduces the clocks found in the Allwinner A33 CCU.

Since this SoC is very similar to the A23, and we share a significant share
of the DTSI, the clock IDs that are going to be used will also be shared
with the A23, hence the name of the various header files.

Signed-off-by: Maxime Ripard <redacted>
---
 .../devicetree/bindings/clock/sunxi-ccu.txt        |   1 +
 drivers/clk/sunxi-ng/Kconfig                       |  12 +
 drivers/clk/sunxi-ng/Makefile                      |   1 +
 drivers/clk/sunxi-ng/ccu-sun8i-a23-a33.h           |  63 ++
 drivers/clk/sunxi-ng/ccu-sun8i-a33.c               | 772 +++++++++++++++++++++
 include/dt-bindings/clock/sun8i-a23-a33-ccu.h      | 127 ++++
 include/dt-bindings/reset/sun8i-a23-a33-ccu.h      |  87 +++
 7 files changed, 1063 insertions(+)
 create mode 100644 drivers/clk/sunxi-ng/ccu-sun8i-a23-a33.h
 create mode 100644 drivers/clk/sunxi-ng/ccu-sun8i-a33.c
 create mode 100644 include/dt-bindings/clock/sun8i-a23-a33-ccu.h
 create mode 100644 include/dt-bindings/reset/sun8i-a23-a33-ccu.h
diff --git a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
index eac458720b28..8fd765ea3660 100644
--- a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
@@ -4,6 +4,7 @@ Allwinner Clock Control Unit Binding
 Required properties :
 - compatible: must contain one of the following compatibles:
                - "allwinner,sun6i-a31-ccu"
+               - "allwinner,sun8i-a33-ccu"
                - "allwinner,sun8i-h3-ccu"

 - reg: Must contain the registers base address and length
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
index c7258779daa8..dff3feff9c3c 100644
--- a/drivers/clk/sunxi-ng/Kconfig
+++ b/drivers/clk/sunxi-ng/Kconfig
@@ -65,6 +65,18 @@ config SUN6I_A31_CCU
        select SUNXI_CCU_PHASE
        default MACH_SUN6I

+config SUN8I_A33_CCU
+       bool "Support for the Allwinner A33 CCU"
+       select SUNXI_CCU_DIV
+       select SUNXI_CCU_MULT
+       select SUNXI_CCU_NK
+       select SUNXI_CCU_NKM
+       select SUNXI_CCU_NKMP
+       select SUNXI_CCU_NM
+       select SUNXI_CCU_MP
+       select SUNXI_CCU_PHASE
+       default MACH_SUN8I
+
 config SUN8I_H3_CCU
        bool "Support for the Allwinner H3 CCU"
        select SUNXI_CCU_DIV
diff --git a/drivers/clk/sunxi-ng/Makefile b/drivers/clk/sunxi-ng/Makefile
index 462a5f8383ed..4f7e99fb433f 100644
--- a/drivers/clk/sunxi-ng/Makefile
+++ b/drivers/clk/sunxi-ng/Makefile
@@ -19,4 +19,5 @@ obj-$(CONFIG_SUNXI_CCU_MP)    += ccu_mp.o

 # SoC support
 obj-$(CONFIG_SUN6I_A31_CCU)    += ccu-sun6i-a31.o
+obj-$(CONFIG_SUN8I_A33_CCU)    += ccu-sun8i-a33.o
 obj-$(CONFIG_SUN8I_H3_CCU)     += ccu-sun8i-h3.o
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a23-a33.h b/drivers/clk/sunxi-ng/ccu-sun8i-a23-a33.h
new file mode 100644
index 000000000000..62c0f8d49ef8
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-a23-a33.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016 Maxime Ripard
+ *
+ * Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _CCU_SUN8I_A23_A33_H_
+#define _CCU_SUN8I_A23_A33_H_
+
+#include <dt-bindings/clock/sun8i-a23-a33-ccu.h>
+#include <dt-bindings/reset/sun8i-a23-a33-ccu.h>
+
+#define CLK_PLL_CPUX           0
+#define CLK_PLL_AUDIO_BASE     1
+#define CLK_PLL_AUDIO          2
+#define CLK_PLL_AUDIO_2X       3
+#define CLK_PLL_AUDIO_4X       4
+#define CLK_PLL_AUDIO_8X       5
+#define CLK_PLL_VIDEO          6
+#define CLK_PLL_VIDEO_2X       7
+#define CLK_PLL_VE             8
+#define CLK_PLL_DDR0           9
+#define CLK_PLL_PERIPH         10
+#define CLK_PLL_PERIPH_2X      11
+#define CLK_PLL_GPU            12
+#define CLK_PLL_MIPI           13
+#define CLK_PLL_HSIC           14
+#define CLK_PLL_DE             15
+#define CLK_PLL_DDR1           16
+#define CLK_PLL_DDR            17
+
+/* The CPUX clock is exported */
+
+#define CLK_AXI                        19
+#define CLK_AHB1               20
+#define CLK_APB1               21
+#define CLK_APB2               22
+
+/* All the bus gates are exported */
+
+/* The first part of the mod clocks is exported */
+
+#define CLK_DRAM               79
+
+/* Some more module clocks are exported */
+
+#define CLK_MBUS               95
+
+/* And the last module clocks are exported */
+
+#define CLK_NUMBER             (CLK_ATS + 1)
+
+#endif /* _CCU_SUN8I_A23_A33_H_ */
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
new file mode 100644
index 000000000000..420bacb88e6e
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
@@ -0,0 +1,772 @@
+/*
+ * Copyright (c) 2016 Maxime Ripard. All rights reserved.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/of_address.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_mult.h"
+#include "ccu_nk.h"
+#include "ccu_nkm.h"
+#include "ccu_nkmp.h"
+#include "ccu_nm.h"
+#include "ccu_phase.h"
+
+#include "ccu-sun8i-a23-a33.h"
+
+static SUNXI_CCU_NKMP_WITH_GATE_LOCK(pll_cpux_clk, "pll-cpux",
+                                    "osc24M", 0x000,
+                                    8, 5,              /* N */
+                                    4, 2,              /* K */
+                                    0, 2,              /* M */
+                                    16, 2,             /* P */
Manual says there's no divider for P = 0x3.
You'll need a table here.
+                                    BIT(31),           /* gate */
+                                    BIT(28),           /* lock */
+                                    0);
+
+/*
+ * The Audio PLL is supposed to have 4 outputs: 3 fixed factors from
+ * the base (2x, 4x and 8x), and one variable divider (the one true
+ * pll audio).
+ *
+ * We don't have any need for the variable divider for now, so we just
+ * hardcode it to match with the clock names
+ */
+#define SUN8I_A33_PLL_AUDIO_REG        0x008
+
+static SUNXI_CCU_NM_WITH_GATE_LOCK(pll_audio_base_clk, "pll-audio-base",
+                                  "osc24M", 0x008,
+                                  8, 7,                /* N */
+                                  0, 5,                /* M */
+                                  BIT(31),             /* gate */
+                                  BIT(28),             /* lock */
+                                  CLK_SET_RATE_UNGATE);
Are you sure about this? I suspect CLK_SET_RATE_GATE (clk must be
gated before set rate) is what you want, given the non-DVFS
nature of the PLL. Same for the other PLLs.

[...]
+static SUNXI_CCU_GATE(bus_mipi_dsi_clk,        "bus-mipi-dsi", "ahb1",
+                     0x060, BIT(1), 0);
Nit: we know which bus these peripherals are on.
Can we be more explicit with the names?
+static SUNXI_CCU_GATE(bus_ce_clk,      "bus-ce",       "ahb1",
+                     0x060, BIT(5), 0);
Nit: manual says Security System.

(Maybe I should change the name on sun6i to say Crypto Engine
 if that's what we're going with?)

[...]
+static SUNXI_CCU_GATE(usb_hsic_12M_clk,        "usb-hsic-12M", "osc24M",
+                     0x0cc, BIT(11), 0);
A TODO note saying we should have a fixed-factor-gate for this
would be nice.

[...]
quoted hunk ↗ jump to hunk
diff --git a/include/dt-bindings/clock/sun8i-a23-a33-ccu.h b/include/dt-bindings/clock/sun8i-a23-a33-ccu.h
new file mode 100644
index 000000000000..3782e56b84cd
--- /dev/null
+++ b/include/dt-bindings/clock/sun8i-a23-a33-ccu.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2016 Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN8I_A23_A33_H_
+#define _DT_BINDINGS_CLK_SUN8I_A23_A33_H_
+
+#define CLK_CPUX               18
+
+#define CLK_BUS_MIPI_DSI       23
+#define CLK_BUS_CE             24
+#define CLK_BUS_DMA            25
+#define CLK_BUS_MMC0           26
+#define CLK_BUS_MMC1           27
+#define CLK_BUS_MMC2           28
+#define CLK_BUS_NAND           29
+#define CLK_BUS_DRAM           30
+#define CLK_BUS_HSTIMER                31
+#define CLK_BUS_SPI0           32
+#define CLK_BUS_SPI1           33
+#define CLK_BUS_OTG            34
+#define CLK_BUS_EHCI           35
+#define CLK_BUS_OHCI           36
+#define CLK_BUS_VE             37
+#define CLK_BUS_LCD            38
+#define CLK_BUS_CSI            39
+#define CLK_BUS_DE_BE          40
+#define CLK_BUS_DE_FE          41
+#define CLK_BUS_GPU            42
+#define CLK_BUS_MSGBOX         43
+#define CLK_BUS_SPINLOCK       44
+#define CLK_BUS_DRC            45
+#define CLK_BUS_SAT            46
+#define CLK_BUS_CODEC          47
+#define CLK_BUS_PIO            48
+#define CLK_BUS_I2S0           49
+#define CLK_BUS_I2S1           50
+#define CLK_BUS_I2C0           51
+#define CLK_BUS_I2C1           52
+#define CLK_BUS_I2C2           53
+#define CLK_BUS_UART0          54
+#define CLK_BUS_UART1          55
+#define CLK_BUS_UART2          56
+#define CLK_BUS_UART3          57
+#define CLK_BUS_UART4          58
Same with the bus name here.
quoted hunk ↗ jump to hunk
+#define CLK_NAND               59
+#define CLK_MMC0               60
+#define CLK_MMC0_SAMPLE                61
+#define CLK_MMC0_OUTPUT                62
+#define CLK_MMC1               63
+#define CLK_MMC1_SAMPLE                64
+#define CLK_MMC1_OUTPUT                65
+#define CLK_MMC2               66
+#define CLK_MMC2_SAMPLE                67
+#define CLK_MMC2_OUTPUT                68
+#define CLK_CE                 69
+#define CLK_SPI0               70
+#define CLK_SPI1               71
+#define CLK_I2S0               72
+#define CLK_I2S1               73
+#define CLK_USB_PHY0           74
+#define CLK_USB_PHY1           75
+#define CLK_USB_HSIC           76
+#define CLK_USB_HSIC_12M       77
+#define CLK_USB_OHCI           78
+
+#define CLK_DRAM_VE            80
+#define CLK_DRAM_CSI           81
+#define CLK_DRAM_DRC           82
+#define CLK_DRAM_DE_FE         83
+#define CLK_DRAM_DE_BE         84
+#define CLK_DE_BE              85
+#define CLK_DE_FE              86
+#define CLK_LCD_CH0            87
+#define CLK_LCD_CH1            88
+#define CLK_CSI_SCLK           89
+#define CLK_CSI_MCLK           90
+#define CLK_VE                 91
+#define CLK_AC_DIG             92
+#define CLK_AC_DIG_4X          93
+#define CLK_AVS                        94
+
+#define CLK_DSI_SCLK           96
+#define CLK_DSI_DPHY           97
+#define CLK_DRC                        98
+#define CLK_GPU                        99
+#define CLK_ATS                        100
+
+#endif /* _DT_BINDINGS_CLK_SUN8I_A23_A33_H_ */
diff --git a/include/dt-bindings/reset/sun8i-a23-a33-ccu.h b/include/dt-bindings/reset/sun8i-a23-a33-ccu.h
new file mode 100644
index 000000000000..03555a2f4175
--- /dev/null
+++ b/include/dt-bindings/reset/sun8i-a23-a33-ccu.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2016 Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
+ *
+ *     This file is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ *     obtaining a copy of this software and associated documentation
+ *     files (the "Software"), to deal in the Software without
+ *     restriction, including without limitation the rights to use,
+ *     copy, modify, merge, publish, distribute, sublicense, and/or
+ *     sell copies of the Software, and to permit persons to whom the
+ *     Software is furnished to do so, subject to the following
+ *     conditions:
+ *
+ *     The above copyright notice and this permission notice shall be
+ *     included in all copies or substantial portions of the Software.
+ *
+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *     OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_RST_SUN8I_A23_A33_H_
+#define _DT_BINDINGS_RST_SUN8I_A23_A33_H_
+
+#define RST_USB_PHY0           0
+#define RST_USB_PHY1           1
+#define RST_USB_HSIC           2
+#define RST_MBUS               3
+#define RST_BUS_MIPI_DSI       4
+#define RST_BUS_CE             5
+#define RST_BUS_DMA            6
+#define RST_BUS_MMC0           7
+#define RST_BUS_MMC1           8
+#define RST_BUS_MMC2           9
+#define RST_BUS_NAND           10
+#define RST_BUS_DRAM           11
+#define RST_BUS_HSTIMER                12
+#define RST_BUS_SPI0           13
+#define RST_BUS_SPI1           14
+#define RST_BUS_OTG            15
+#define RST_BUS_EHCI           16
+#define RST_BUS_OHCI           17
+#define RST_BUS_VE             18
+#define RST_BUS_LCD            19
+#define RST_BUS_CSI            20
+#define RST_BUS_DE_BE          21
+#define RST_BUS_DE_FE          22
+#define RST_BUS_GPU            23
+#define RST_BUS_MSGBOX         24
+#define RST_BUS_SPINLOCK       25
+#define RST_BUS_DRC            26
+#define RST_BUS_SAT            27
+#define RST_BUS_LVDS           28
+#define RST_BUS_CODEC          29
+#define RST_BUS_I2S0           30
+#define RST_BUS_I2S1           31
+#define RST_BUS_I2C0           32
+#define RST_BUS_I2C1           33
+#define RST_BUS_I2C2           34
+#define RST_BUS_UART0          35
+#define RST_BUS_UART1          36
+#define RST_BUS_UART2          37
+#define RST_BUS_UART3          38
+#define RST_BUS_UART4          39
Same with the bus name here.

Regards
ChenYu
+
+#endif /* _DT_BINDINGS_RST_SUN8I_A23_A33_H_ */
--
2.9.2
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help