Skip to content

Commit f98eded

Browse files
LorenzoBianconibebarino
authored andcommitted
clk: en7523: fix estimation of fixed rate for EN7581
Introduce en7581_base_clks array in order to define per-SoC fixed-rate clock parameters and fix wrong parameters for emi, npu and crypto EN7581 clocks Fixes: 66bc473 ("clk: en7523: Add EN7581 support") Signed-off-by: Lorenzo Bianconi <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent f72fc22 commit f98eded

File tree

1 file changed

+103
-2
lines changed

1 file changed

+103
-2
lines changed

drivers/clk/clk-en7523.c

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#define REG_NP_SCU_SSTR 0x9c
3838
#define REG_PCIE_XSI0_SEL_MASK GENMASK(14, 13)
3939
#define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11)
40+
#define REG_CRYPTO_CLKSRC2 0x20c
4041

4142
#define REG_RST_CTRL2 0x00
4243
#define REG_RST_CTRL1 0x04
@@ -89,6 +90,10 @@ static const u32 emi_base[] = { 333000000, 400000000 };
8990
static const u32 bus_base[] = { 500000000, 540000000 };
9091
static const u32 slic_base[] = { 100000000, 3125000 };
9192
static const u32 npu_base[] = { 333000000, 400000000, 500000000 };
93+
/* EN7581 */
94+
static const u32 emi7581_base[] = { 540000000, 480000000, 400000000, 300000000 };
95+
static const u32 npu7581_base[] = { 800000000, 750000000, 720000000, 600000000 };
96+
static const u32 crypto_base[] = { 540000000, 480000000 };
9297

9398
static const struct en_clk_desc en7523_base_clks[] = {
9499
{
@@ -186,6 +191,102 @@ static const struct en_clk_desc en7523_base_clks[] = {
186191
}
187192
};
188193

194+
static const struct en_clk_desc en7581_base_clks[] = {
195+
{
196+
.id = EN7523_CLK_GSW,
197+
.name = "gsw",
198+
199+
.base_reg = REG_GSW_CLK_DIV_SEL,
200+
.base_bits = 1,
201+
.base_shift = 8,
202+
.base_values = gsw_base,
203+
.n_base_values = ARRAY_SIZE(gsw_base),
204+
205+
.div_bits = 3,
206+
.div_shift = 0,
207+
.div_step = 1,
208+
.div_offset = 1,
209+
}, {
210+
.id = EN7523_CLK_EMI,
211+
.name = "emi",
212+
213+
.base_reg = REG_EMI_CLK_DIV_SEL,
214+
.base_bits = 2,
215+
.base_shift = 8,
216+
.base_values = emi7581_base,
217+
.n_base_values = ARRAY_SIZE(emi7581_base),
218+
219+
.div_bits = 3,
220+
.div_shift = 0,
221+
.div_step = 1,
222+
.div_offset = 1,
223+
}, {
224+
.id = EN7523_CLK_BUS,
225+
.name = "bus",
226+
227+
.base_reg = REG_BUS_CLK_DIV_SEL,
228+
.base_bits = 1,
229+
.base_shift = 8,
230+
.base_values = bus_base,
231+
.n_base_values = ARRAY_SIZE(bus_base),
232+
233+
.div_bits = 3,
234+
.div_shift = 0,
235+
.div_step = 1,
236+
.div_offset = 1,
237+
}, {
238+
.id = EN7523_CLK_SLIC,
239+
.name = "slic",
240+
241+
.base_reg = REG_SPI_CLK_FREQ_SEL,
242+
.base_bits = 1,
243+
.base_shift = 0,
244+
.base_values = slic_base,
245+
.n_base_values = ARRAY_SIZE(slic_base),
246+
247+
.div_reg = REG_SPI_CLK_DIV_SEL,
248+
.div_bits = 5,
249+
.div_shift = 24,
250+
.div_val0 = 20,
251+
.div_step = 2,
252+
}, {
253+
.id = EN7523_CLK_SPI,
254+
.name = "spi",
255+
256+
.base_reg = REG_SPI_CLK_DIV_SEL,
257+
258+
.base_value = 400000000,
259+
260+
.div_bits = 5,
261+
.div_shift = 8,
262+
.div_val0 = 40,
263+
.div_step = 2,
264+
}, {
265+
.id = EN7523_CLK_NPU,
266+
.name = "npu",
267+
268+
.base_reg = REG_NPU_CLK_DIV_SEL,
269+
.base_bits = 2,
270+
.base_shift = 8,
271+
.base_values = npu7581_base,
272+
.n_base_values = ARRAY_SIZE(npu7581_base),
273+
274+
.div_bits = 3,
275+
.div_shift = 0,
276+
.div_step = 1,
277+
.div_offset = 1,
278+
}, {
279+
.id = EN7523_CLK_CRYPTO,
280+
.name = "crypto",
281+
282+
.base_reg = REG_CRYPTO_CLKSRC2,
283+
.base_bits = 1,
284+
.base_shift = 0,
285+
.base_values = crypto_base,
286+
.n_base_values = ARRAY_SIZE(crypto_base),
287+
}
288+
};
289+
189290
static const u16 en7581_rst_ofs[] = {
190291
REG_RST_CTRL2,
191292
REG_RST_CTRL1,
@@ -457,8 +558,8 @@ static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_dat
457558
u32 rate;
458559
int i;
459560

460-
for (i = 0; i < ARRAY_SIZE(en7523_base_clks); i++) {
461-
const struct en_clk_desc *desc = &en7523_base_clks[i];
561+
for (i = 0; i < ARRAY_SIZE(en7581_base_clks); i++) {
562+
const struct en_clk_desc *desc = &en7581_base_clks[i];
462563
u32 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg;
463564
int err;
464565

0 commit comments

Comments
 (0)