Our usual PR for the Allwinner SoCs, this time adding support for the
Allwinner H616 SoC, and a few H6 fixes. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQRcEzekXsqa64kGDp7j7w1vZxhRxQUCYBbuKgAKCRDj7w1vZxhR xUVoAQCVfOy30h/9g4D0QdTaJv1glfEWZoY8CH3xrggMUekTOAD+NT6013V2zHf9 tkGInIRtannCc14+/lnlao6qaWPeFA4= =mZh1 -----END PGP SIGNATURE----- Merge tag 'sunxi-clk-for-5.12' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux into clk-allwinner Pull Allwinner clk driver updates from Maxime Ripard: "Our usual PR for the Allwinner SoCs, this time adding support for the Allwinner H616 SoC, and a few H6 fixes." * tag 'sunxi-clk-for-5.12' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux: clk: sunxi-ng: Add support for the Allwinner H616 CCU clk: sunxi-ng: Add support for the Allwinner H616 R-CCU dt-bindings: clk: sunxi-ccu: Add compatible string for Allwinner H616 clk: sunxi-ng: h6: Fix clock divider range on some clocks clk: sunxi: clk-mod0: Demote non-conformant kernel-doc header clk: sunxi: clk-a10-ve: Demote obvious kernel-doc abuse clk: sunxi: clk-sunxi: Demote a bunch of non-conformant kernel-doc headers clk: sunxi-ng: h6: Fix CEC clock clk: sunxi-ng: h6-r: Add R_APB2_RSB clock and reset
This commit is contained in:
commit
6bbea83a66
@ -41,6 +41,8 @@ properties:
|
|||||||
- allwinner,sun50i-h5-ccu
|
- allwinner,sun50i-h5-ccu
|
||||||
- allwinner,sun50i-h6-ccu
|
- allwinner,sun50i-h6-ccu
|
||||||
- allwinner,sun50i-h6-r-ccu
|
- allwinner,sun50i-h6-r-ccu
|
||||||
|
- allwinner,sun50i-h616-ccu
|
||||||
|
- allwinner,sun50i-h616-r-ccu
|
||||||
- allwinner,suniv-f1c100s-ccu
|
- allwinner,suniv-f1c100s-ccu
|
||||||
- nextthing,gr8-ccu
|
- nextthing,gr8-ccu
|
||||||
|
|
||||||
@ -82,6 +84,7 @@ if:
|
|||||||
- allwinner,sun50i-a64-r-ccu
|
- allwinner,sun50i-a64-r-ccu
|
||||||
- allwinner,sun50i-a100-r-ccu
|
- allwinner,sun50i-a100-r-ccu
|
||||||
- allwinner,sun50i-h6-r-ccu
|
- allwinner,sun50i-h6-r-ccu
|
||||||
|
- allwinner,sun50i-h616-r-ccu
|
||||||
|
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
@ -100,6 +103,7 @@ else:
|
|||||||
enum:
|
enum:
|
||||||
- allwinner,sun50i-a100-ccu
|
- allwinner,sun50i-a100-ccu
|
||||||
- allwinner,sun50i-h6-ccu
|
- allwinner,sun50i-h6-ccu
|
||||||
|
- allwinner,sun50i-h616-ccu
|
||||||
|
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
|
@ -32,8 +32,13 @@ config SUN50I_H6_CCU
|
|||||||
default ARM64 && ARCH_SUNXI
|
default ARM64 && ARCH_SUNXI
|
||||||
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
||||||
|
|
||||||
|
config SUN50I_H616_CCU
|
||||||
|
bool "Support for the Allwinner H616 CCU"
|
||||||
|
default ARM64 && ARCH_SUNXI
|
||||||
|
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
||||||
|
|
||||||
config SUN50I_H6_R_CCU
|
config SUN50I_H6_R_CCU
|
||||||
bool "Support for the Allwinner H6 PRCM CCU"
|
bool "Support for the Allwinner H6 and H616 PRCM CCU"
|
||||||
default ARM64 && ARCH_SUNXI
|
default ARM64 && ARCH_SUNXI
|
||||||
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ obj-$(CONFIG_SUN50I_A64_CCU) += ccu-sun50i-a64.o
|
|||||||
obj-$(CONFIG_SUN50I_A100_CCU) += ccu-sun50i-a100.o
|
obj-$(CONFIG_SUN50I_A100_CCU) += ccu-sun50i-a100.o
|
||||||
obj-$(CONFIG_SUN50I_A100_R_CCU) += ccu-sun50i-a100-r.o
|
obj-$(CONFIG_SUN50I_A100_R_CCU) += ccu-sun50i-a100-r.o
|
||||||
obj-$(CONFIG_SUN50I_H6_CCU) += ccu-sun50i-h6.o
|
obj-$(CONFIG_SUN50I_H6_CCU) += ccu-sun50i-h6.o
|
||||||
|
obj-$(CONFIG_SUN50I_H616_CCU) += ccu-sun50i-h616.o
|
||||||
obj-$(CONFIG_SUN50I_H6_R_CCU) += ccu-sun50i-h6-r.o
|
obj-$(CONFIG_SUN50I_H6_R_CCU) += ccu-sun50i-h6-r.o
|
||||||
obj-$(CONFIG_SUN4I_A10_CCU) += ccu-sun4i-a10.o
|
obj-$(CONFIG_SUN4I_A10_CCU) += ccu-sun4i-a10.o
|
||||||
obj-$(CONFIG_SUN5I_CCU) += ccu-sun5i.o
|
obj-$(CONFIG_SUN5I_CCU) += ccu-sun5i.o
|
||||||
|
@ -91,6 +91,8 @@ static SUNXI_CCU_GATE(r_apb2_uart_clk, "r-apb2-uart", "r-apb2",
|
|||||||
0x18c, BIT(0), 0);
|
0x18c, BIT(0), 0);
|
||||||
static SUNXI_CCU_GATE(r_apb2_i2c_clk, "r-apb2-i2c", "r-apb2",
|
static SUNXI_CCU_GATE(r_apb2_i2c_clk, "r-apb2-i2c", "r-apb2",
|
||||||
0x19c, BIT(0), 0);
|
0x19c, BIT(0), 0);
|
||||||
|
static SUNXI_CCU_GATE(r_apb2_rsb_clk, "r-apb2-rsb", "r-apb2",
|
||||||
|
0x1bc, BIT(0), 0);
|
||||||
static SUNXI_CCU_GATE(r_apb1_ir_clk, "r-apb1-ir", "r-apb1",
|
static SUNXI_CCU_GATE(r_apb1_ir_clk, "r-apb1-ir", "r-apb1",
|
||||||
0x1cc, BIT(0), 0);
|
0x1cc, BIT(0), 0);
|
||||||
static SUNXI_CCU_GATE(r_apb1_w1_clk, "r-apb1-w1", "r-apb1",
|
static SUNXI_CCU_GATE(r_apb1_w1_clk, "r-apb1-w1", "r-apb1",
|
||||||
@ -130,12 +132,23 @@ static struct ccu_common *sun50i_h6_r_ccu_clks[] = {
|
|||||||
&r_apb1_pwm_clk.common,
|
&r_apb1_pwm_clk.common,
|
||||||
&r_apb2_uart_clk.common,
|
&r_apb2_uart_clk.common,
|
||||||
&r_apb2_i2c_clk.common,
|
&r_apb2_i2c_clk.common,
|
||||||
|
&r_apb2_rsb_clk.common,
|
||||||
&r_apb1_ir_clk.common,
|
&r_apb1_ir_clk.common,
|
||||||
&r_apb1_w1_clk.common,
|
&r_apb1_w1_clk.common,
|
||||||
&ir_clk.common,
|
&ir_clk.common,
|
||||||
&w1_clk.common,
|
&w1_clk.common,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct ccu_common *sun50i_h616_r_ccu_clks[] = {
|
||||||
|
&r_apb1_clk.common,
|
||||||
|
&r_apb2_clk.common,
|
||||||
|
&r_apb1_twd_clk.common,
|
||||||
|
&r_apb2_i2c_clk.common,
|
||||||
|
&r_apb2_rsb_clk.common,
|
||||||
|
&r_apb1_ir_clk.common,
|
||||||
|
&ir_clk.common,
|
||||||
|
};
|
||||||
|
|
||||||
static struct clk_hw_onecell_data sun50i_h6_r_hw_clks = {
|
static struct clk_hw_onecell_data sun50i_h6_r_hw_clks = {
|
||||||
.hws = {
|
.hws = {
|
||||||
[CLK_AR100] = &ar100_clk.common.hw,
|
[CLK_AR100] = &ar100_clk.common.hw,
|
||||||
@ -147,6 +160,7 @@ static struct clk_hw_onecell_data sun50i_h6_r_hw_clks = {
|
|||||||
[CLK_R_APB1_PWM] = &r_apb1_pwm_clk.common.hw,
|
[CLK_R_APB1_PWM] = &r_apb1_pwm_clk.common.hw,
|
||||||
[CLK_R_APB2_UART] = &r_apb2_uart_clk.common.hw,
|
[CLK_R_APB2_UART] = &r_apb2_uart_clk.common.hw,
|
||||||
[CLK_R_APB2_I2C] = &r_apb2_i2c_clk.common.hw,
|
[CLK_R_APB2_I2C] = &r_apb2_i2c_clk.common.hw,
|
||||||
|
[CLK_R_APB2_RSB] = &r_apb2_rsb_clk.common.hw,
|
||||||
[CLK_R_APB1_IR] = &r_apb1_ir_clk.common.hw,
|
[CLK_R_APB1_IR] = &r_apb1_ir_clk.common.hw,
|
||||||
[CLK_R_APB1_W1] = &r_apb1_w1_clk.common.hw,
|
[CLK_R_APB1_W1] = &r_apb1_w1_clk.common.hw,
|
||||||
[CLK_IR] = &ir_clk.common.hw,
|
[CLK_IR] = &ir_clk.common.hw,
|
||||||
@ -155,16 +169,38 @@ static struct clk_hw_onecell_data sun50i_h6_r_hw_clks = {
|
|||||||
.num = CLK_NUMBER,
|
.num = CLK_NUMBER,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct clk_hw_onecell_data sun50i_h616_r_hw_clks = {
|
||||||
|
.hws = {
|
||||||
|
[CLK_R_AHB] = &r_ahb_clk.hw,
|
||||||
|
[CLK_R_APB1] = &r_apb1_clk.common.hw,
|
||||||
|
[CLK_R_APB2] = &r_apb2_clk.common.hw,
|
||||||
|
[CLK_R_APB1_TWD] = &r_apb1_twd_clk.common.hw,
|
||||||
|
[CLK_R_APB2_I2C] = &r_apb2_i2c_clk.common.hw,
|
||||||
|
[CLK_R_APB2_RSB] = &r_apb2_rsb_clk.common.hw,
|
||||||
|
[CLK_R_APB1_IR] = &r_apb1_ir_clk.common.hw,
|
||||||
|
[CLK_IR] = &ir_clk.common.hw,
|
||||||
|
},
|
||||||
|
.num = CLK_NUMBER,
|
||||||
|
};
|
||||||
|
|
||||||
static struct ccu_reset_map sun50i_h6_r_ccu_resets[] = {
|
static struct ccu_reset_map sun50i_h6_r_ccu_resets[] = {
|
||||||
[RST_R_APB1_TIMER] = { 0x11c, BIT(16) },
|
[RST_R_APB1_TIMER] = { 0x11c, BIT(16) },
|
||||||
[RST_R_APB1_TWD] = { 0x12c, BIT(16) },
|
[RST_R_APB1_TWD] = { 0x12c, BIT(16) },
|
||||||
[RST_R_APB1_PWM] = { 0x13c, BIT(16) },
|
[RST_R_APB1_PWM] = { 0x13c, BIT(16) },
|
||||||
[RST_R_APB2_UART] = { 0x18c, BIT(16) },
|
[RST_R_APB2_UART] = { 0x18c, BIT(16) },
|
||||||
[RST_R_APB2_I2C] = { 0x19c, BIT(16) },
|
[RST_R_APB2_I2C] = { 0x19c, BIT(16) },
|
||||||
|
[RST_R_APB2_RSB] = { 0x1bc, BIT(16) },
|
||||||
[RST_R_APB1_IR] = { 0x1cc, BIT(16) },
|
[RST_R_APB1_IR] = { 0x1cc, BIT(16) },
|
||||||
[RST_R_APB1_W1] = { 0x1ec, BIT(16) },
|
[RST_R_APB1_W1] = { 0x1ec, BIT(16) },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct ccu_reset_map sun50i_h616_r_ccu_resets[] = {
|
||||||
|
[RST_R_APB1_TWD] = { 0x12c, BIT(16) },
|
||||||
|
[RST_R_APB2_I2C] = { 0x19c, BIT(16) },
|
||||||
|
[RST_R_APB2_RSB] = { 0x1bc, BIT(16) },
|
||||||
|
[RST_R_APB1_IR] = { 0x1cc, BIT(16) },
|
||||||
|
};
|
||||||
|
|
||||||
static const struct sunxi_ccu_desc sun50i_h6_r_ccu_desc = {
|
static const struct sunxi_ccu_desc sun50i_h6_r_ccu_desc = {
|
||||||
.ccu_clks = sun50i_h6_r_ccu_clks,
|
.ccu_clks = sun50i_h6_r_ccu_clks,
|
||||||
.num_ccu_clks = ARRAY_SIZE(sun50i_h6_r_ccu_clks),
|
.num_ccu_clks = ARRAY_SIZE(sun50i_h6_r_ccu_clks),
|
||||||
@ -175,6 +211,16 @@ static const struct sunxi_ccu_desc sun50i_h6_r_ccu_desc = {
|
|||||||
.num_resets = ARRAY_SIZE(sun50i_h6_r_ccu_resets),
|
.num_resets = ARRAY_SIZE(sun50i_h6_r_ccu_resets),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct sunxi_ccu_desc sun50i_h616_r_ccu_desc = {
|
||||||
|
.ccu_clks = sun50i_h616_r_ccu_clks,
|
||||||
|
.num_ccu_clks = ARRAY_SIZE(sun50i_h616_r_ccu_clks),
|
||||||
|
|
||||||
|
.hw_clks = &sun50i_h616_r_hw_clks,
|
||||||
|
|
||||||
|
.resets = sun50i_h616_r_ccu_resets,
|
||||||
|
.num_resets = ARRAY_SIZE(sun50i_h616_r_ccu_resets),
|
||||||
|
};
|
||||||
|
|
||||||
static void __init sunxi_r_ccu_init(struct device_node *node,
|
static void __init sunxi_r_ccu_init(struct device_node *node,
|
||||||
const struct sunxi_ccu_desc *desc)
|
const struct sunxi_ccu_desc *desc)
|
||||||
{
|
{
|
||||||
@ -195,3 +241,10 @@ static void __init sun50i_h6_r_ccu_setup(struct device_node *node)
|
|||||||
}
|
}
|
||||||
CLK_OF_DECLARE(sun50i_h6_r_ccu, "allwinner,sun50i-h6-r-ccu",
|
CLK_OF_DECLARE(sun50i_h6_r_ccu, "allwinner,sun50i-h6-r-ccu",
|
||||||
sun50i_h6_r_ccu_setup);
|
sun50i_h6_r_ccu_setup);
|
||||||
|
|
||||||
|
static void __init sun50i_h616_r_ccu_setup(struct device_node *node)
|
||||||
|
{
|
||||||
|
sunxi_r_ccu_init(node, &sun50i_h616_r_ccu_desc);
|
||||||
|
}
|
||||||
|
CLK_OF_DECLARE(sun50i_h616_r_ccu, "allwinner,sun50i-h616-r-ccu",
|
||||||
|
sun50i_h616_r_ccu_setup);
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
|
|
||||||
#define CLK_R_APB2 3
|
#define CLK_R_APB2 3
|
||||||
|
|
||||||
#define CLK_NUMBER (CLK_W1 + 1)
|
#define CLK_NUMBER (CLK_R_APB2_RSB + 1)
|
||||||
|
|
||||||
#endif /* _CCU_SUN50I_H6_R_H */
|
#endif /* _CCU_SUN50I_H6_R_H */
|
||||||
|
@ -237,7 +237,7 @@ static const char * const psi_ahb1_ahb2_parents[] = { "osc24M", "osc32k",
|
|||||||
static SUNXI_CCU_MP_WITH_MUX(psi_ahb1_ahb2_clk, "psi-ahb1-ahb2",
|
static SUNXI_CCU_MP_WITH_MUX(psi_ahb1_ahb2_clk, "psi-ahb1-ahb2",
|
||||||
psi_ahb1_ahb2_parents,
|
psi_ahb1_ahb2_parents,
|
||||||
0x510,
|
0x510,
|
||||||
0, 5, /* M */
|
0, 2, /* M */
|
||||||
8, 2, /* P */
|
8, 2, /* P */
|
||||||
24, 2, /* mux */
|
24, 2, /* mux */
|
||||||
0);
|
0);
|
||||||
@ -246,19 +246,19 @@ static const char * const ahb3_apb1_apb2_parents[] = { "osc24M", "osc32k",
|
|||||||
"psi-ahb1-ahb2",
|
"psi-ahb1-ahb2",
|
||||||
"pll-periph0" };
|
"pll-periph0" };
|
||||||
static SUNXI_CCU_MP_WITH_MUX(ahb3_clk, "ahb3", ahb3_apb1_apb2_parents, 0x51c,
|
static SUNXI_CCU_MP_WITH_MUX(ahb3_clk, "ahb3", ahb3_apb1_apb2_parents, 0x51c,
|
||||||
0, 5, /* M */
|
0, 2, /* M */
|
||||||
8, 2, /* P */
|
8, 2, /* P */
|
||||||
24, 2, /* mux */
|
24, 2, /* mux */
|
||||||
0);
|
0);
|
||||||
|
|
||||||
static SUNXI_CCU_MP_WITH_MUX(apb1_clk, "apb1", ahb3_apb1_apb2_parents, 0x520,
|
static SUNXI_CCU_MP_WITH_MUX(apb1_clk, "apb1", ahb3_apb1_apb2_parents, 0x520,
|
||||||
0, 5, /* M */
|
0, 2, /* M */
|
||||||
8, 2, /* P */
|
8, 2, /* P */
|
||||||
24, 2, /* mux */
|
24, 2, /* mux */
|
||||||
0);
|
0);
|
||||||
|
|
||||||
static SUNXI_CCU_MP_WITH_MUX(apb2_clk, "apb2", ahb3_apb1_apb2_parents, 0x524,
|
static SUNXI_CCU_MP_WITH_MUX(apb2_clk, "apb2", ahb3_apb1_apb2_parents, 0x524,
|
||||||
0, 5, /* M */
|
0, 2, /* M */
|
||||||
8, 2, /* P */
|
8, 2, /* P */
|
||||||
24, 2, /* mux */
|
24, 2, /* mux */
|
||||||
0);
|
0);
|
||||||
@ -682,7 +682,7 @@ static struct ccu_mux hdmi_cec_clk = {
|
|||||||
|
|
||||||
.common = {
|
.common = {
|
||||||
.reg = 0xb10,
|
.reg = 0xb10,
|
||||||
.features = CCU_FEATURE_VARIABLE_PREDIV,
|
.features = CCU_FEATURE_FIXED_PREDIV,
|
||||||
.hw.init = CLK_HW_INIT_PARENTS("hdmi-cec",
|
.hw.init = CLK_HW_INIT_PARENTS("hdmi-cec",
|
||||||
hdmi_cec_parents,
|
hdmi_cec_parents,
|
||||||
&ccu_mux_ops,
|
&ccu_mux_ops,
|
||||||
|
1150
drivers/clk/sunxi-ng/ccu-sun50i-h616.c
Normal file
1150
drivers/clk/sunxi-ng/ccu-sun50i-h616.c
Normal file
File diff suppressed because it is too large
Load Diff
56
drivers/clk/sunxi-ng/ccu-sun50i-h616.h
Normal file
56
drivers/clk/sunxi-ng/ccu-sun50i-h616.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* Copyright 2020 Arm Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CCU_SUN50I_H616_H_
|
||||||
|
#define _CCU_SUN50I_H616_H_
|
||||||
|
|
||||||
|
#include <dt-bindings/clock/sun50i-h616-ccu.h>
|
||||||
|
#include <dt-bindings/reset/sun50i-h616-ccu.h>
|
||||||
|
|
||||||
|
#define CLK_OSC12M 0
|
||||||
|
#define CLK_PLL_CPUX 1
|
||||||
|
#define CLK_PLL_DDR0 2
|
||||||
|
#define CLK_PLL_DDR1 3
|
||||||
|
|
||||||
|
/* PLL_PERIPH0 exported for PRCM */
|
||||||
|
|
||||||
|
#define CLK_PLL_PERIPH0_2X 5
|
||||||
|
#define CLK_PLL_PERIPH1 6
|
||||||
|
#define CLK_PLL_PERIPH1_2X 7
|
||||||
|
#define CLK_PLL_GPU 8
|
||||||
|
#define CLK_PLL_VIDEO0 9
|
||||||
|
#define CLK_PLL_VIDEO0_4X 10
|
||||||
|
#define CLK_PLL_VIDEO1 11
|
||||||
|
#define CLK_PLL_VIDEO1_4X 12
|
||||||
|
#define CLK_PLL_VIDEO2 13
|
||||||
|
#define CLK_PLL_VIDEO2_4X 14
|
||||||
|
#define CLK_PLL_VE 15
|
||||||
|
#define CLK_PLL_DE 16
|
||||||
|
#define CLK_PLL_AUDIO_HS 17
|
||||||
|
#define CLK_PLL_AUDIO_1X 18
|
||||||
|
#define CLK_PLL_AUDIO_2X 19
|
||||||
|
#define CLK_PLL_AUDIO_4X 20
|
||||||
|
|
||||||
|
/* CPUX clock exported for DVFS */
|
||||||
|
|
||||||
|
#define CLK_AXI 22
|
||||||
|
#define CLK_CPUX_APB 23
|
||||||
|
#define CLK_PSI_AHB1_AHB2 24
|
||||||
|
#define CLK_AHB3 25
|
||||||
|
|
||||||
|
/* APB1 clock exported for PIO */
|
||||||
|
|
||||||
|
#define CLK_APB2 27
|
||||||
|
#define CLK_MBUS 28
|
||||||
|
|
||||||
|
/* All module clocks and bus gates are exported except DRAM */
|
||||||
|
|
||||||
|
#define CLK_DRAM 49
|
||||||
|
|
||||||
|
#define CLK_BUS_DRAM 56
|
||||||
|
|
||||||
|
#define CLK_NUMBER (CLK_BUS_HDCP + 1)
|
||||||
|
|
||||||
|
#endif /* _CCU_SUN50I_H616_H_ */
|
@ -20,7 +20,7 @@ static DEFINE_SPINLOCK(ve_lock);
|
|||||||
#define SUN4I_VE_DIVIDER_WIDTH 3
|
#define SUN4I_VE_DIVIDER_WIDTH 3
|
||||||
#define SUN4I_VE_RESET 0
|
#define SUN4I_VE_RESET 0
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_ve_reset... - reset bit in ve clk registers handling
|
* sunxi_ve_reset... - reset bit in ve clk registers handling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "clk-factors.h"
|
#include "clk-factors.h"
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun4i_a10_get_mod0_factors() - calculates m, n factors for MOD0-style clocks
|
* sun4i_a10_get_mod0_factors() - calculates m, n factors for MOD0-style clocks
|
||||||
* MOD0 rate is calculated as follows
|
* MOD0 rate is calculated as follows
|
||||||
* rate = (parent_rate >> p) / (m + 1);
|
* rate = (parent_rate >> p) / (m + 1);
|
||||||
|
@ -23,7 +23,7 @@ static DEFINE_SPINLOCK(clk_lock);
|
|||||||
/* Maximum number of parents our clocks have */
|
/* Maximum number of parents our clocks have */
|
||||||
#define SUNXI_MAX_PARENTS 5
|
#define SUNXI_MAX_PARENTS 5
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun4i_get_pll1_factors() - calculates n, k, m, p factors for PLL1
|
* sun4i_get_pll1_factors() - calculates n, k, m, p factors for PLL1
|
||||||
* PLL1 rate is calculated as follows
|
* PLL1 rate is calculated as follows
|
||||||
* rate = (parent_rate * n * (k + 1) >> p) / (m + 1);
|
* rate = (parent_rate * n * (k + 1) >> p) / (m + 1);
|
||||||
@ -71,7 +71,7 @@ static void sun4i_get_pll1_factors(struct factors_request *req)
|
|||||||
req->n = div / 4;
|
req->n = div / 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun6i_a31_get_pll1_factors() - calculates n, k and m factors for PLL1
|
* sun6i_a31_get_pll1_factors() - calculates n, k and m factors for PLL1
|
||||||
* PLL1 rate is calculated as follows
|
* PLL1 rate is calculated as follows
|
||||||
* rate = parent_rate * (n + 1) * (k + 1) / (m + 1);
|
* rate = parent_rate * (n + 1) * (k + 1) / (m + 1);
|
||||||
@ -147,7 +147,7 @@ static void sun6i_a31_get_pll1_factors(struct factors_request *req)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun8i_a23_get_pll1_factors() - calculates n, k, m, p factors for PLL1
|
* sun8i_a23_get_pll1_factors() - calculates n, k, m, p factors for PLL1
|
||||||
* PLL1 rate is calculated as follows
|
* PLL1 rate is calculated as follows
|
||||||
* rate = (parent_rate * (n + 1) * (k + 1) >> p) / (m + 1);
|
* rate = (parent_rate * (n + 1) * (k + 1) >> p) / (m + 1);
|
||||||
@ -191,7 +191,7 @@ static void sun8i_a23_get_pll1_factors(struct factors_request *req)
|
|||||||
req->n = div / 4 - 1;
|
req->n = div / 4 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun4i_get_pll5_factors() - calculates n, k factors for PLL5
|
* sun4i_get_pll5_factors() - calculates n, k factors for PLL5
|
||||||
* PLL5 rate is calculated as follows
|
* PLL5 rate is calculated as follows
|
||||||
* rate = parent_rate * n * (k + 1)
|
* rate = parent_rate * n * (k + 1)
|
||||||
@ -218,7 +218,7 @@ static void sun4i_get_pll5_factors(struct factors_request *req)
|
|||||||
req->n = DIV_ROUND_UP(div, (req->k + 1));
|
req->n = DIV_ROUND_UP(div, (req->k + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun6i_a31_get_pll6_factors() - calculates n, k factors for A31 PLL6x2
|
* sun6i_a31_get_pll6_factors() - calculates n, k factors for A31 PLL6x2
|
||||||
* PLL6x2 rate is calculated as follows
|
* PLL6x2 rate is calculated as follows
|
||||||
* rate = parent_rate * (n + 1) * (k + 1)
|
* rate = parent_rate * (n + 1) * (k + 1)
|
||||||
@ -240,7 +240,7 @@ static void sun6i_a31_get_pll6_factors(struct factors_request *req)
|
|||||||
req->n = DIV_ROUND_UP(div, (req->k + 1)) - 1;
|
req->n = DIV_ROUND_UP(div, (req->k + 1)) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun5i_a13_get_ahb_factors() - calculates m, p factors for AHB
|
* sun5i_a13_get_ahb_factors() - calculates m, p factors for AHB
|
||||||
* AHB rate is calculated as follows
|
* AHB rate is calculated as follows
|
||||||
* rate = parent_rate >> p
|
* rate = parent_rate >> p
|
||||||
@ -276,7 +276,7 @@ static void sun5i_a13_get_ahb_factors(struct factors_request *req)
|
|||||||
|
|
||||||
#define SUN6I_AHB1_PARENT_PLL6 3
|
#define SUN6I_AHB1_PARENT_PLL6 3
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun6i_a31_get_ahb_factors() - calculates m, p factors for AHB
|
* sun6i_a31_get_ahb_factors() - calculates m, p factors for AHB
|
||||||
* AHB rate is calculated as follows
|
* AHB rate is calculated as follows
|
||||||
* rate = parent_rate >> p
|
* rate = parent_rate >> p
|
||||||
@ -320,7 +320,7 @@ static void sun6i_get_ahb1_factors(struct factors_request *req)
|
|||||||
req->m = calcm - 1;
|
req->m = calcm - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun6i_ahb1_recalc() - calculates AHB clock rate from m, p factors and
|
* sun6i_ahb1_recalc() - calculates AHB clock rate from m, p factors and
|
||||||
* parent index
|
* parent index
|
||||||
*/
|
*/
|
||||||
@ -336,7 +336,7 @@ static void sun6i_ahb1_recalc(struct factors_request *req)
|
|||||||
req->rate >>= req->p;
|
req->rate >>= req->p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun4i_get_apb1_factors() - calculates m, p factors for APB1
|
* sun4i_get_apb1_factors() - calculates m, p factors for APB1
|
||||||
* APB1 rate is calculated as follows
|
* APB1 rate is calculated as follows
|
||||||
* rate = (parent_rate >> p) / (m + 1);
|
* rate = (parent_rate >> p) / (m + 1);
|
||||||
@ -375,7 +375,7 @@ static void sun4i_get_apb1_factors(struct factors_request *req)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sun7i_a20_get_out_factors() - calculates m, p factors for CLK_OUT_A/B
|
* sun7i_a20_get_out_factors() - calculates m, p factors for CLK_OUT_A/B
|
||||||
* CLK_OUT rate is calculated as follows
|
* CLK_OUT rate is calculated as follows
|
||||||
* rate = (parent_rate >> p) / (m + 1);
|
* rate = (parent_rate >> p) / (m + 1);
|
||||||
@ -408,7 +408,7 @@ static void sun7i_a20_get_out_factors(struct factors_request *req)
|
|||||||
req->p = calcp;
|
req->p = calcp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_factors_clk_setup() - Setup function for factor clocks
|
* sunxi_factors_clk_setup() - Setup function for factor clocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -625,7 +625,7 @@ CLK_OF_DECLARE(sun7i_out, "allwinner,sun7i-a20-out-clk",
|
|||||||
sun7i_out_clk_setup);
|
sun7i_out_clk_setup);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_mux_clk_setup() - Setup function for muxes
|
* sunxi_mux_clk_setup() - Setup function for muxes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -717,7 +717,7 @@ CLK_OF_DECLARE(sun8i_ahb2, "allwinner,sun8i-h3-ahb2-clk",
|
|||||||
sun8i_ahb2_clk_setup);
|
sun8i_ahb2_clk_setup);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_divider_clk_setup() - Setup function for simple divider clocks
|
* sunxi_divider_clk_setup() - Setup function for simple divider clocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -853,7 +853,7 @@ CLK_OF_DECLARE(sun8i_axi, "allwinner,sun8i-a23-axi-clk",
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_gates_clk_setup() - Setup function for leaf gates on clocks
|
* sunxi_gates_clk_setup() - Setup function for leaf gates on clocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -863,7 +863,7 @@ struct gates_data {
|
|||||||
DECLARE_BITMAP(mask, SUNXI_GATES_MAX_SIZE);
|
DECLARE_BITMAP(mask, SUNXI_GATES_MAX_SIZE);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_divs_clk_setup() helper data
|
* sunxi_divs_clk_setup() helper data
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -929,7 +929,7 @@ static const struct divs_data sun6i_a31_pll6_divs_data __initconst = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* sunxi_divs_clk_setup() - Setup function for leaf divisors on clocks
|
* sunxi_divs_clk_setup() - Setup function for leaf divisors on clocks
|
||||||
*
|
*
|
||||||
* These clocks look something like this
|
* These clocks look something like this
|
||||||
|
@ -21,4 +21,6 @@
|
|||||||
#define CLK_IR 11
|
#define CLK_IR 11
|
||||||
#define CLK_W1 12
|
#define CLK_W1 12
|
||||||
|
|
||||||
|
#define CLK_R_APB2_RSB 13
|
||||||
|
|
||||||
#endif /* _DT_BINDINGS_CLK_SUN50I_H6_R_CCU_H_ */
|
#endif /* _DT_BINDINGS_CLK_SUN50I_H6_R_CCU_H_ */
|
||||||
|
115
include/dt-bindings/clock/sun50i-h616-ccu.h
Normal file
115
include/dt-bindings/clock/sun50i-h616-ccu.h
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Arm Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_CLK_SUN50I_H616_H_
|
||||||
|
#define _DT_BINDINGS_CLK_SUN50I_H616_H_
|
||||||
|
|
||||||
|
#define CLK_PLL_PERIPH0 4
|
||||||
|
|
||||||
|
#define CLK_CPUX 21
|
||||||
|
|
||||||
|
#define CLK_APB1 26
|
||||||
|
|
||||||
|
#define CLK_DE 29
|
||||||
|
#define CLK_BUS_DE 30
|
||||||
|
#define CLK_DEINTERLACE 31
|
||||||
|
#define CLK_BUS_DEINTERLACE 32
|
||||||
|
#define CLK_G2D 33
|
||||||
|
#define CLK_BUS_G2D 34
|
||||||
|
#define CLK_GPU0 35
|
||||||
|
#define CLK_BUS_GPU 36
|
||||||
|
#define CLK_GPU1 37
|
||||||
|
#define CLK_CE 38
|
||||||
|
#define CLK_BUS_CE 39
|
||||||
|
#define CLK_VE 40
|
||||||
|
#define CLK_BUS_VE 41
|
||||||
|
#define CLK_BUS_DMA 42
|
||||||
|
#define CLK_BUS_HSTIMER 43
|
||||||
|
#define CLK_AVS 44
|
||||||
|
#define CLK_BUS_DBG 45
|
||||||
|
#define CLK_BUS_PSI 46
|
||||||
|
#define CLK_BUS_PWM 47
|
||||||
|
#define CLK_BUS_IOMMU 48
|
||||||
|
|
||||||
|
#define CLK_MBUS_DMA 50
|
||||||
|
#define CLK_MBUS_VE 51
|
||||||
|
#define CLK_MBUS_CE 52
|
||||||
|
#define CLK_MBUS_TS 53
|
||||||
|
#define CLK_MBUS_NAND 54
|
||||||
|
#define CLK_MBUS_G2D 55
|
||||||
|
|
||||||
|
#define CLK_NAND0 57
|
||||||
|
#define CLK_NAND1 58
|
||||||
|
#define CLK_BUS_NAND 59
|
||||||
|
#define CLK_MMC0 60
|
||||||
|
#define CLK_MMC1 61
|
||||||
|
#define CLK_MMC2 62
|
||||||
|
#define CLK_BUS_MMC0 63
|
||||||
|
#define CLK_BUS_MMC1 64
|
||||||
|
#define CLK_BUS_MMC2 65
|
||||||
|
#define CLK_BUS_UART0 66
|
||||||
|
#define CLK_BUS_UART1 67
|
||||||
|
#define CLK_BUS_UART2 68
|
||||||
|
#define CLK_BUS_UART3 69
|
||||||
|
#define CLK_BUS_UART4 70
|
||||||
|
#define CLK_BUS_UART5 71
|
||||||
|
#define CLK_BUS_I2C0 72
|
||||||
|
#define CLK_BUS_I2C1 73
|
||||||
|
#define CLK_BUS_I2C2 74
|
||||||
|
#define CLK_BUS_I2C3 75
|
||||||
|
#define CLK_BUS_I2C4 76
|
||||||
|
#define CLK_SPI0 77
|
||||||
|
#define CLK_SPI1 78
|
||||||
|
#define CLK_BUS_SPI0 79
|
||||||
|
#define CLK_BUS_SPI1 80
|
||||||
|
#define CLK_EMAC_25M 81
|
||||||
|
#define CLK_BUS_EMAC0 82
|
||||||
|
#define CLK_BUS_EMAC1 83
|
||||||
|
#define CLK_TS 84
|
||||||
|
#define CLK_BUS_TS 85
|
||||||
|
#define CLK_BUS_THS 86
|
||||||
|
#define CLK_SPDIF 87
|
||||||
|
#define CLK_BUS_SPDIF 88
|
||||||
|
#define CLK_DMIC 89
|
||||||
|
#define CLK_BUS_DMIC 90
|
||||||
|
#define CLK_AUDIO_CODEC_1X 91
|
||||||
|
#define CLK_AUDIO_CODEC_4X 92
|
||||||
|
#define CLK_BUS_AUDIO_CODEC 93
|
||||||
|
#define CLK_AUDIO_HUB 94
|
||||||
|
#define CLK_BUS_AUDIO_HUB 95
|
||||||
|
#define CLK_USB_OHCI0 96
|
||||||
|
#define CLK_USB_PHY0 97
|
||||||
|
#define CLK_USB_OHCI1 98
|
||||||
|
#define CLK_USB_PHY1 99
|
||||||
|
#define CLK_USB_OHCI2 100
|
||||||
|
#define CLK_USB_PHY2 101
|
||||||
|
#define CLK_USB_OHCI3 102
|
||||||
|
#define CLK_USB_PHY3 103
|
||||||
|
#define CLK_BUS_OHCI0 104
|
||||||
|
#define CLK_BUS_OHCI1 105
|
||||||
|
#define CLK_BUS_OHCI2 106
|
||||||
|
#define CLK_BUS_OHCI3 107
|
||||||
|
#define CLK_BUS_EHCI0 108
|
||||||
|
#define CLK_BUS_EHCI1 109
|
||||||
|
#define CLK_BUS_EHCI2 110
|
||||||
|
#define CLK_BUS_EHCI3 111
|
||||||
|
#define CLK_BUS_OTG 112
|
||||||
|
#define CLK_BUS_KEYADC 113
|
||||||
|
#define CLK_HDMI 114
|
||||||
|
#define CLK_HDMI_SLOW 115
|
||||||
|
#define CLK_HDMI_CEC 116
|
||||||
|
#define CLK_BUS_HDMI 117
|
||||||
|
#define CLK_BUS_TCON_TOP 118
|
||||||
|
#define CLK_TCON_TV0 119
|
||||||
|
#define CLK_TCON_TV1 120
|
||||||
|
#define CLK_BUS_TCON_TV0 121
|
||||||
|
#define CLK_BUS_TCON_TV1 122
|
||||||
|
#define CLK_TVE0 123
|
||||||
|
#define CLK_BUS_TVE_TOP 124
|
||||||
|
#define CLK_BUS_TVE0 125
|
||||||
|
#define CLK_HDCP 126
|
||||||
|
#define CLK_BUS_HDCP 127
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_CLK_SUN50I_H616_H_ */
|
@ -13,5 +13,6 @@
|
|||||||
#define RST_R_APB2_I2C 4
|
#define RST_R_APB2_I2C 4
|
||||||
#define RST_R_APB1_IR 5
|
#define RST_R_APB1_IR 5
|
||||||
#define RST_R_APB1_W1 6
|
#define RST_R_APB1_W1 6
|
||||||
|
#define RST_R_APB2_RSB 7
|
||||||
|
|
||||||
#endif /* _DT_BINDINGS_RST_SUN50I_H6_R_CCU_H_ */
|
#endif /* _DT_BINDINGS_RST_SUN50I_H6_R_CCU_H_ */
|
||||||
|
70
include/dt-bindings/reset/sun50i-h616-ccu.h
Normal file
70
include/dt-bindings/reset/sun50i-h616-ccu.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Arm Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _DT_BINDINGS_RESET_SUN50I_H616_H_
|
||||||
|
#define _DT_BINDINGS_RESET_SUN50I_H616_H_
|
||||||
|
|
||||||
|
#define RST_MBUS 0
|
||||||
|
#define RST_BUS_DE 1
|
||||||
|
#define RST_BUS_DEINTERLACE 2
|
||||||
|
#define RST_BUS_GPU 3
|
||||||
|
#define RST_BUS_CE 4
|
||||||
|
#define RST_BUS_VE 5
|
||||||
|
#define RST_BUS_DMA 6
|
||||||
|
#define RST_BUS_HSTIMER 7
|
||||||
|
#define RST_BUS_DBG 8
|
||||||
|
#define RST_BUS_PSI 9
|
||||||
|
#define RST_BUS_PWM 10
|
||||||
|
#define RST_BUS_IOMMU 11
|
||||||
|
#define RST_BUS_DRAM 12
|
||||||
|
#define RST_BUS_NAND 13
|
||||||
|
#define RST_BUS_MMC0 14
|
||||||
|
#define RST_BUS_MMC1 15
|
||||||
|
#define RST_BUS_MMC2 16
|
||||||
|
#define RST_BUS_UART0 17
|
||||||
|
#define RST_BUS_UART1 18
|
||||||
|
#define RST_BUS_UART2 19
|
||||||
|
#define RST_BUS_UART3 20
|
||||||
|
#define RST_BUS_UART4 21
|
||||||
|
#define RST_BUS_UART5 22
|
||||||
|
#define RST_BUS_I2C0 23
|
||||||
|
#define RST_BUS_I2C1 24
|
||||||
|
#define RST_BUS_I2C2 25
|
||||||
|
#define RST_BUS_I2C3 26
|
||||||
|
#define RST_BUS_I2C4 27
|
||||||
|
#define RST_BUS_SPI0 28
|
||||||
|
#define RST_BUS_SPI1 29
|
||||||
|
#define RST_BUS_EMAC0 30
|
||||||
|
#define RST_BUS_EMAC1 31
|
||||||
|
#define RST_BUS_TS 32
|
||||||
|
#define RST_BUS_THS 33
|
||||||
|
#define RST_BUS_SPDIF 34
|
||||||
|
#define RST_BUS_DMIC 35
|
||||||
|
#define RST_BUS_AUDIO_CODEC 36
|
||||||
|
#define RST_BUS_AUDIO_HUB 37
|
||||||
|
#define RST_USB_PHY0 38
|
||||||
|
#define RST_USB_PHY1 39
|
||||||
|
#define RST_USB_PHY2 40
|
||||||
|
#define RST_USB_PHY3 41
|
||||||
|
#define RST_BUS_OHCI0 42
|
||||||
|
#define RST_BUS_OHCI1 43
|
||||||
|
#define RST_BUS_OHCI2 44
|
||||||
|
#define RST_BUS_OHCI3 45
|
||||||
|
#define RST_BUS_EHCI0 46
|
||||||
|
#define RST_BUS_EHCI1 47
|
||||||
|
#define RST_BUS_EHCI2 48
|
||||||
|
#define RST_BUS_EHCI3 49
|
||||||
|
#define RST_BUS_OTG 50
|
||||||
|
#define RST_BUS_HDMI 51
|
||||||
|
#define RST_BUS_HDMI_SUB 52
|
||||||
|
#define RST_BUS_TCON_TOP 53
|
||||||
|
#define RST_BUS_TCON_TV0 54
|
||||||
|
#define RST_BUS_TCON_TV1 55
|
||||||
|
#define RST_BUS_TVE_TOP 56
|
||||||
|
#define RST_BUS_TVE0 57
|
||||||
|
#define RST_BUS_HDCP 58
|
||||||
|
#define RST_BUS_KEYADC 59
|
||||||
|
|
||||||
|
#endif /* _DT_BINDINGS_RESET_SUN50I_H616_H_ */
|
Loading…
x
Reference in New Issue
Block a user