mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
Amlogic clock changes for 4.15
- Addition of Video Processing Unit VPU and VAPB clocks -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJZ6bW/AAoJEHfc29rIyEnRAvkP+wZhUNg/5s/tj68Qmc34yfRq WKk6Hn4ySOpjQr3DR0LNYevqNhVALFOsMGafIRnFIE89cLyoHqTjBn7K21TctOnj YyPjMx54PP46PjBV0XJ9jk1Km+z/JYa4A79xjW4x2lfaazxZfdXyfvOCHzWsmF6R jyLwsOwNyqpbP7eYqss5qXJeBVQ56VvjL35n3fLbbpTS56RsjXNGUMoS84WNECS4 6ixs/YhpmkgJE+cOY9KaeDXmd8v9IWK4wWjcqty+CMiOZPmxW2LuxisVNEZriGQ4 dmEiD/FSjqL7hNtNco2AHhvq/Erh96S1jf8lj8grHOSSIV+jVnA/zZNGCM4Myi2P lq7qI8EuQLa5PqVdRzG5RoWelbLkvJ351QQZolmLjAVTjAdSiwibFQHqF1Ofwnak CzG3qblgItnXhboreKwvP1VI6qmnGq7m3LWi3FT6Lp3GxUsEYsvT97RMjXpOerZN D7ZGoMKu4Qu2v8i1JWJzfDPuoAg0/+jz6HAx/nKgK6bgbNYjoJ3Llw+8Tf3wPjOm uJrEHKY2WpishRFbHclO9AftBAU4+8UBh9S6Gvz4l9tGeWklHVQh1u2F7jzmNyRT pNjWVEcuiX5ckNaARDqKZu0Lv5FYdTMfQQ6OdLnxTGmWCwB9QFnzIrI2AR/tuESl hfsh89AFS7f5QnzI9P41 =rDVJ -----END PGP SIGNATURE----- Merge tag 'meson-clk-for-4.15' of git://github.com/baylibre/clk-meson into clk-next Pull Amlogic clock driver updates from Neil Armstrong: - Addition of Video Processing Unit VPU and VAPB clocks * tag 'meson-clk-for-4.15' of git://github.com/baylibre/clk-meson: clk: meson: gxbb: Add VPU and VAPB clocks data clk: meson: gxbb: Add VPU and VAPB clockids
This commit is contained in:
commit
319663c7d1
|
|
@ -1131,6 +1131,253 @@ static struct clk_gate gxbb_sd_emmc_c_clk0 = {
|
|||
},
|
||||
};
|
||||
|
||||
/* VPU Clock */
|
||||
|
||||
static u32 mux_table_vpu[] = {0, 1, 2, 3};
|
||||
static const char * const gxbb_vpu_parent_names[] = {
|
||||
"fclk_div4", "fclk_div3", "fclk_div5", "fclk_div7"
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vpu_0_sel = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.mask = 0x3,
|
||||
.shift = 9,
|
||||
.lock = &clk_lock,
|
||||
.table = mux_table_vpu,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vpu_0_sel",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bits 9:10 selects from 4 possible parents:
|
||||
* fclk_div4, fclk_div3, fclk_div5, fclk_div7,
|
||||
*/
|
||||
.parent_names = gxbb_vpu_parent_names,
|
||||
.num_parents = ARRAY_SIZE(gxbb_vpu_parent_names),
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_divider gxbb_vpu_0_div = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.shift = 0,
|
||||
.width = 7,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vpu_0_div",
|
||||
.ops = &clk_divider_ops,
|
||||
.parent_names = (const char *[]){ "vpu_0_sel" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gate gxbb_vpu_0 = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.bit_idx = 8,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "vpu_0",
|
||||
.ops = &clk_gate_ops,
|
||||
.parent_names = (const char *[]){ "vpu_0_div" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vpu_1_sel = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.mask = 0x3,
|
||||
.shift = 25,
|
||||
.lock = &clk_lock,
|
||||
.table = mux_table_vpu,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vpu_1_sel",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bits 25:26 selects from 4 possible parents:
|
||||
* fclk_div4, fclk_div3, fclk_div5, fclk_div7,
|
||||
*/
|
||||
.parent_names = gxbb_vpu_parent_names,
|
||||
.num_parents = ARRAY_SIZE(gxbb_vpu_parent_names),
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_divider gxbb_vpu_1_div = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.shift = 16,
|
||||
.width = 7,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vpu_1_div",
|
||||
.ops = &clk_divider_ops,
|
||||
.parent_names = (const char *[]){ "vpu_1_sel" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gate gxbb_vpu_1 = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.bit_idx = 24,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "vpu_1",
|
||||
.ops = &clk_gate_ops,
|
||||
.parent_names = (const char *[]){ "vpu_1_div" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vpu = {
|
||||
.reg = (void *)HHI_VPU_CLK_CNTL,
|
||||
.mask = 1,
|
||||
.shift = 31,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vpu",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bit 31 selects from 2 possible parents:
|
||||
* vpu_0 or vpu_1
|
||||
*/
|
||||
.parent_names = (const char *[]){ "vpu_0", "vpu_1" },
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
/* VAPB Clock */
|
||||
|
||||
static u32 mux_table_vapb[] = {0, 1, 2, 3};
|
||||
static const char * const gxbb_vapb_parent_names[] = {
|
||||
"fclk_div4", "fclk_div3", "fclk_div5", "fclk_div7"
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vapb_0_sel = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.mask = 0x3,
|
||||
.shift = 9,
|
||||
.lock = &clk_lock,
|
||||
.table = mux_table_vapb,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vapb_0_sel",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bits 9:10 selects from 4 possible parents:
|
||||
* fclk_div4, fclk_div3, fclk_div5, fclk_div7,
|
||||
*/
|
||||
.parent_names = gxbb_vapb_parent_names,
|
||||
.num_parents = ARRAY_SIZE(gxbb_vapb_parent_names),
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_divider gxbb_vapb_0_div = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.shift = 0,
|
||||
.width = 7,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vapb_0_div",
|
||||
.ops = &clk_divider_ops,
|
||||
.parent_names = (const char *[]){ "vapb_0_sel" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gate gxbb_vapb_0 = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.bit_idx = 8,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "vapb_0",
|
||||
.ops = &clk_gate_ops,
|
||||
.parent_names = (const char *[]){ "vapb_0_div" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vapb_1_sel = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.mask = 0x3,
|
||||
.shift = 25,
|
||||
.lock = &clk_lock,
|
||||
.table = mux_table_vapb,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vapb_1_sel",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bits 25:26 selects from 4 possible parents:
|
||||
* fclk_div4, fclk_div3, fclk_div5, fclk_div7,
|
||||
*/
|
||||
.parent_names = gxbb_vapb_parent_names,
|
||||
.num_parents = ARRAY_SIZE(gxbb_vapb_parent_names),
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_divider gxbb_vapb_1_div = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.shift = 16,
|
||||
.width = 7,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vapb_1_div",
|
||||
.ops = &clk_divider_ops,
|
||||
.parent_names = (const char *[]){ "vapb_1_sel" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gate gxbb_vapb_1 = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.bit_idx = 24,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "vapb_1",
|
||||
.ops = &clk_gate_ops,
|
||||
.parent_names = (const char *[]){ "vapb_1_div" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_mux gxbb_vapb_sel = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.mask = 1,
|
||||
.shift = 31,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "vapb_sel",
|
||||
.ops = &clk_mux_ops,
|
||||
/*
|
||||
* bit 31 selects from 2 possible parents:
|
||||
* vapb_0 or vapb_1
|
||||
*/
|
||||
.parent_names = (const char *[]){ "vapb_0", "vapb_1" },
|
||||
.num_parents = 2,
|
||||
.flags = CLK_SET_RATE_NO_REPARENT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_gate gxbb_vapb = {
|
||||
.reg = (void *)HHI_VAPBCLK_CNTL,
|
||||
.bit_idx = 30,
|
||||
.lock = &clk_lock,
|
||||
.hw.init = &(struct clk_init_data) {
|
||||
.name = "vapb",
|
||||
.ops = &clk_gate_ops,
|
||||
.parent_names = (const char *[]){ "vapb_sel" },
|
||||
.num_parents = 1,
|
||||
.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
|
||||
},
|
||||
};
|
||||
|
||||
/* Everything Else (EE) domain gates */
|
||||
static MESON_GATE(gxbb_ddr, HHI_GCLK_MPEG0, 0);
|
||||
static MESON_GATE(gxbb_dos, HHI_GCLK_MPEG0, 1);
|
||||
|
|
@ -1349,6 +1596,21 @@ static struct clk_hw_onecell_data gxbb_hw_onecell_data = {
|
|||
[CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw,
|
||||
[CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw,
|
||||
[CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw,
|
||||
[CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw,
|
||||
[CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw,
|
||||
[CLKID_VPU_0] = &gxbb_vpu_0.hw,
|
||||
[CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw,
|
||||
[CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw,
|
||||
[CLKID_VPU_1] = &gxbb_vpu_1.hw,
|
||||
[CLKID_VPU] = &gxbb_vpu.hw,
|
||||
[CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw,
|
||||
[CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw,
|
||||
[CLKID_VAPB_0] = &gxbb_vapb_0.hw,
|
||||
[CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw,
|
||||
[CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw,
|
||||
[CLKID_VAPB_1] = &gxbb_vapb_1.hw,
|
||||
[CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw,
|
||||
[CLKID_VAPB] = &gxbb_vapb.hw,
|
||||
[NR_CLKS] = NULL,
|
||||
},
|
||||
.num = NR_CLKS,
|
||||
|
|
@ -1481,6 +1743,21 @@ static struct clk_hw_onecell_data gxl_hw_onecell_data = {
|
|||
[CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw,
|
||||
[CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw,
|
||||
[CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw,
|
||||
[CLKID_VPU_0_SEL] = &gxbb_vpu_0_sel.hw,
|
||||
[CLKID_VPU_0_DIV] = &gxbb_vpu_0_div.hw,
|
||||
[CLKID_VPU_0] = &gxbb_vpu_0.hw,
|
||||
[CLKID_VPU_1_SEL] = &gxbb_vpu_1_sel.hw,
|
||||
[CLKID_VPU_1_DIV] = &gxbb_vpu_1_div.hw,
|
||||
[CLKID_VPU_1] = &gxbb_vpu_1.hw,
|
||||
[CLKID_VPU] = &gxbb_vpu.hw,
|
||||
[CLKID_VAPB_0_SEL] = &gxbb_vapb_0_sel.hw,
|
||||
[CLKID_VAPB_0_DIV] = &gxbb_vapb_0_div.hw,
|
||||
[CLKID_VAPB_0] = &gxbb_vapb_0.hw,
|
||||
[CLKID_VAPB_1_SEL] = &gxbb_vapb_1_sel.hw,
|
||||
[CLKID_VAPB_1_DIV] = &gxbb_vapb_1_div.hw,
|
||||
[CLKID_VAPB_1] = &gxbb_vapb_1.hw,
|
||||
[CLKID_VAPB_SEL] = &gxbb_vapb_sel.hw,
|
||||
[CLKID_VAPB] = &gxbb_vapb.hw,
|
||||
[NR_CLKS] = NULL,
|
||||
},
|
||||
.num = NR_CLKS,
|
||||
|
|
@ -1600,6 +1877,11 @@ static struct clk_gate *const gxbb_clk_gates[] = {
|
|||
&gxbb_sd_emmc_a_clk0,
|
||||
&gxbb_sd_emmc_b_clk0,
|
||||
&gxbb_sd_emmc_c_clk0,
|
||||
&gxbb_vpu_0,
|
||||
&gxbb_vpu_1,
|
||||
&gxbb_vapb_0,
|
||||
&gxbb_vapb_1,
|
||||
&gxbb_vapb,
|
||||
};
|
||||
|
||||
static struct clk_mux *const gxbb_clk_muxes[] = {
|
||||
|
|
@ -1615,6 +1897,12 @@ static struct clk_mux *const gxbb_clk_muxes[] = {
|
|||
&gxbb_sd_emmc_a_clk0_sel,
|
||||
&gxbb_sd_emmc_b_clk0_sel,
|
||||
&gxbb_sd_emmc_c_clk0_sel,
|
||||
&gxbb_vpu_0_sel,
|
||||
&gxbb_vpu_1_sel,
|
||||
&gxbb_vpu,
|
||||
&gxbb_vapb_0_sel,
|
||||
&gxbb_vapb_1_sel,
|
||||
&gxbb_vapb_sel,
|
||||
};
|
||||
|
||||
static struct clk_divider *const gxbb_clk_dividers[] = {
|
||||
|
|
@ -1627,6 +1915,10 @@ static struct clk_divider *const gxbb_clk_dividers[] = {
|
|||
&gxbb_sd_emmc_a_clk0_div,
|
||||
&gxbb_sd_emmc_b_clk0_div,
|
||||
&gxbb_sd_emmc_c_clk0_div,
|
||||
&gxbb_vpu_0_div,
|
||||
&gxbb_vpu_1_div,
|
||||
&gxbb_vapb_0_div,
|
||||
&gxbb_vapb_1_div,
|
||||
};
|
||||
|
||||
static struct meson_clk_audio_divider *const gxbb_audio_dividers[] = {
|
||||
|
|
|
|||
|
|
@ -190,8 +190,12 @@
|
|||
#define CLKID_SD_EMMC_B_CLK0_DIV 121
|
||||
#define CLKID_SD_EMMC_C_CLK0_SEL 123
|
||||
#define CLKID_SD_EMMC_C_CLK0_DIV 124
|
||||
#define CLKID_VPU_0_DIV 127
|
||||
#define CLKID_VPU_1_DIV 130
|
||||
#define CLKID_VAPB_0_DIV 134
|
||||
#define CLKID_VAPB_1_DIV 137
|
||||
|
||||
#define NR_CLKS 126
|
||||
#define NR_CLKS 141
|
||||
|
||||
/* include the CLKIDs that have been made part of the DT binding */
|
||||
#include <dt-bindings/clock/gxbb-clkc.h>
|
||||
|
|
|
|||
|
|
@ -113,5 +113,16 @@
|
|||
#define CLKID_SD_EMMC_A_CLK0 119
|
||||
#define CLKID_SD_EMMC_B_CLK0 122
|
||||
#define CLKID_SD_EMMC_C_CLK0 125
|
||||
#define CLKID_VPU_0_SEL 126
|
||||
#define CLKID_VPU_0 128
|
||||
#define CLKID_VPU_1_SEL 129
|
||||
#define CLKID_VPU_1 131
|
||||
#define CLKID_VPU 132
|
||||
#define CLKID_VAPB_0_SEL 133
|
||||
#define CLKID_VAPB_0 135
|
||||
#define CLKID_VAPB_1_SEL 136
|
||||
#define CLKID_VAPB_1 138
|
||||
#define CLKID_VAPB_SEL 139
|
||||
#define CLKID_VAPB 140
|
||||
|
||||
#endif /* __GXBB_CLKC_H */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user