Commit cec5dfa4 authored by Stephen Boyd's avatar Stephen Boyd

Merge tag 'sunxi-clk-for-4.19' of...

Merge tag 'sunxi-clk-for-4.19' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux into clk-allwinner

Pull Allwinner clock changes for 4.19 from Maxime Ripard:

Our usual bunch of clock patches, this time to enable the A64 display
engine clocks controller mostly.

* tag 'sunxi-clk-for-4.19' of https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux:
  clk: sunxi-ng: add A64 compatible string
  dt-bindings: add compatible string for the A64 DE2 CCU
  clk: sunxi-ng: r40: Export video PLLs
  clk: sunxi-ng: r40: Allow setting parent rate to display related clocks
  clk: sunxi-ng: r40: Add minimal rate for video PLLs
parents ce397d21 01951563
...@@ -6,6 +6,7 @@ Required properties : ...@@ -6,6 +6,7 @@ Required properties :
- "allwinner,sun8i-a83t-de2-clk" - "allwinner,sun8i-a83t-de2-clk"
- "allwinner,sun8i-h3-de2-clk" - "allwinner,sun8i-h3-de2-clk"
- "allwinner,sun8i-v3s-de2-clk" - "allwinner,sun8i-v3s-de2-clk"
- "allwinner,sun50i-a64-de2-clk"
- "allwinner,sun50i-h5-de2-clk" - "allwinner,sun50i-h5-de2-clk"
- reg: Must contain the registers base address and length - reg: Must contain the registers base address and length
......
...@@ -288,17 +288,14 @@ static const struct of_device_id sunxi_de2_clk_ids[] = { ...@@ -288,17 +288,14 @@ static const struct of_device_id sunxi_de2_clk_ids[] = {
.compatible = "allwinner,sun8i-v3s-de2-clk", .compatible = "allwinner,sun8i-v3s-de2-clk",
.data = &sun8i_v3s_de2_clk_desc, .data = &sun8i_v3s_de2_clk_desc,
}, },
{
.compatible = "allwinner,sun50i-a64-de2-clk",
.data = &sun50i_a64_de2_clk_desc,
},
{ {
.compatible = "allwinner,sun50i-h5-de2-clk", .compatible = "allwinner,sun50i-h5-de2-clk",
.data = &sun50i_a64_de2_clk_desc, .data = &sun50i_a64_de2_clk_desc,
}, },
/*
* The Allwinner A64 SoC needs some bit to be poke in syscon to make
* DE2 really working.
* So there's currently no A64 compatible here.
* H5 shares the same reset line with A64, so here H5 is using the
* clock description of A64.
*/
{ } { }
}; };
......
...@@ -66,17 +66,18 @@ static SUNXI_CCU_NM_WITH_GATE_LOCK(pll_audio_base_clk, "pll-audio-base", ...@@ -66,17 +66,18 @@ static SUNXI_CCU_NM_WITH_GATE_LOCK(pll_audio_base_clk, "pll-audio-base",
CLK_SET_RATE_UNGATE); CLK_SET_RATE_UNGATE);
/* TODO: The result of N/M is required to be in [8, 25] range. */ /* TODO: The result of N/M is required to be in [8, 25] range. */
static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_video0_clk, "pll-video0", static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN(pll_video0_clk, "pll-video0",
"osc24M", 0x0010, "osc24M", 0x0010,
8, 7, /* N */ 192000000, /* Minimum rate */
0, 4, /* M */ 8, 7, /* N */
BIT(24), /* frac enable */ 0, 4, /* M */
BIT(25), /* frac select */ BIT(24), /* frac enable */
270000000, /* frac rate 0 */ BIT(25), /* frac select */
297000000, /* frac rate 1 */ 270000000, /* frac rate 0 */
BIT(31), /* gate */ 297000000, /* frac rate 1 */
BIT(28), /* lock */ BIT(31), /* gate */
CLK_SET_RATE_UNGATE); BIT(28), /* lock */
CLK_SET_RATE_UNGATE);
/* TODO: The result of N/M is required to be in [8, 25] range. */ /* TODO: The result of N/M is required to be in [8, 25] range. */
static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_ve_clk, "pll-ve", static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_ve_clk, "pll-ve",
...@@ -152,17 +153,18 @@ static struct ccu_nk pll_periph1_clk = { ...@@ -152,17 +153,18 @@ static struct ccu_nk pll_periph1_clk = {
}; };
/* TODO: The result of N/M is required to be in [8, 25] range. */ /* TODO: The result of N/M is required to be in [8, 25] range. */
static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_video1_clk, "pll-video1", static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK_MIN(pll_video1_clk, "pll-video1",
"osc24M", 0x030, "osc24M", 0x030,
8, 7, /* N */ 192000000, /* Minimum rate */
0, 4, /* M */ 8, 7, /* N */
BIT(24), /* frac enable */ 0, 4, /* M */
BIT(25), /* frac select */ BIT(24), /* frac enable */
270000000, /* frac rate 0 */ BIT(25), /* frac select */
297000000, /* frac rate 1 */ 270000000, /* frac rate 0 */
BIT(31), /* gate */ 297000000, /* frac rate 1 */
BIT(28), /* lock */ BIT(31), /* gate */
CLK_SET_RATE_UNGATE); BIT(28), /* lock */
CLK_SET_RATE_UNGATE);
static struct ccu_nkm pll_sata_clk = { static struct ccu_nkm pll_sata_clk = {
.enable = BIT(31), .enable = BIT(31),
...@@ -654,7 +656,8 @@ static SUNXI_CCU_GATE(dram_deinterlace_clk, "dram-deinterlace", "dram", ...@@ -654,7 +656,8 @@ static SUNXI_CCU_GATE(dram_deinterlace_clk, "dram-deinterlace", "dram",
static const char * const de_parents[] = { "pll-periph0-2x", "pll-de" }; static const char * const de_parents[] = { "pll-periph0-2x", "pll-de" };
static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de", de_parents, static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de", de_parents,
0x104, 0, 4, 24, 3, BIT(31), 0); 0x104, 0, 4, 24, 3, BIT(31),
CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_MUX_GATE(mp_clk, "mp", de_parents, static SUNXI_CCU_M_WITH_MUX_GATE(mp_clk, "mp", de_parents,
0x108, 0, 4, 24, 3, BIT(31), 0); 0x108, 0, 4, 24, 3, BIT(31), 0);
...@@ -666,9 +669,11 @@ static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd0_clk, "tcon-lcd0", tcon_parents, ...@@ -666,9 +669,11 @@ static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd0_clk, "tcon-lcd0", tcon_parents,
static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd1_clk, "tcon-lcd1", tcon_parents, static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd1_clk, "tcon-lcd1", tcon_parents,
0x114, 24, 3, BIT(31), CLK_SET_RATE_PARENT); 0x114, 24, 3, BIT(31), CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv0_clk, "tcon-tv0", tcon_parents, static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv0_clk, "tcon-tv0", tcon_parents,
0x118, 0, 4, 24, 3, BIT(31), 0); 0x118, 0, 4, 24, 3, BIT(31),
CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv1_clk, "tcon-tv1", tcon_parents, static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv1_clk, "tcon-tv1", tcon_parents,
0x11c, 0, 4, 24, 3, BIT(31), 0); 0x11c, 0, 4, 24, 3, BIT(31),
CLK_SET_RATE_PARENT);
static const char * const deinterlace_parents[] = { "pll-periph0", static const char * const deinterlace_parents[] = { "pll-periph0",
"pll-periph1" }; "pll-periph1" };
...@@ -698,7 +703,8 @@ static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M", ...@@ -698,7 +703,8 @@ static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M",
static const char * const hdmi_parents[] = { "pll-video0", "pll-video1" }; static const char * const hdmi_parents[] = { "pll-video0", "pll-video1" };
static SUNXI_CCU_M_WITH_MUX_GATE(hdmi_clk, "hdmi", hdmi_parents, static SUNXI_CCU_M_WITH_MUX_GATE(hdmi_clk, "hdmi", hdmi_parents,
0x150, 0, 4, 24, 2, BIT(31), 0); 0x150, 0, 4, 24, 2, BIT(31),
CLK_SET_RATE_PARENT);
static SUNXI_CCU_GATE(hdmi_slow_clk, "hdmi-slow", "osc24M", static SUNXI_CCU_GATE(hdmi_slow_clk, "hdmi-slow", "osc24M",
0x154, BIT(31), 0); 0x154, BIT(31), 0);
......
...@@ -25,7 +25,9 @@ ...@@ -25,7 +25,9 @@
#define CLK_PLL_AUDIO_2X 4 #define CLK_PLL_AUDIO_2X 4
#define CLK_PLL_AUDIO_4X 5 #define CLK_PLL_AUDIO_4X 5
#define CLK_PLL_AUDIO_8X 6 #define CLK_PLL_AUDIO_8X 6
#define CLK_PLL_VIDEO0 7
/* PLL_VIDEO0 is exported */
#define CLK_PLL_VIDEO0_2X 8 #define CLK_PLL_VIDEO0_2X 8
#define CLK_PLL_VE 9 #define CLK_PLL_VE 9
#define CLK_PLL_DDR0 10 #define CLK_PLL_DDR0 10
...@@ -34,7 +36,9 @@ ...@@ -34,7 +36,9 @@
#define CLK_PLL_PERIPH0_2X 13 #define CLK_PLL_PERIPH0_2X 13
#define CLK_PLL_PERIPH1 14 #define CLK_PLL_PERIPH1 14
#define CLK_PLL_PERIPH1_2X 15 #define CLK_PLL_PERIPH1_2X 15
#define CLK_PLL_VIDEO1 16
/* PLL_VIDEO1 is exported */
#define CLK_PLL_VIDEO1_2X 17 #define CLK_PLL_VIDEO1_2X 17
#define CLK_PLL_SATA 18 #define CLK_PLL_SATA 18
#define CLK_PLL_SATA_OUT 19 #define CLK_PLL_SATA_OUT 19
......
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
#ifndef _DT_BINDINGS_CLK_SUN8I_R40_H_ #ifndef _DT_BINDINGS_CLK_SUN8I_R40_H_
#define _DT_BINDINGS_CLK_SUN8I_R40_H_ #define _DT_BINDINGS_CLK_SUN8I_R40_H_
#define CLK_PLL_VIDEO0 7
#define CLK_PLL_VIDEO1 16
#define CLK_CPU 24 #define CLK_CPU 24
#define CLK_BUS_MIPI_DSI 29 #define CLK_BUS_MIPI_DSI 29
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment