|
37 | 37 | #define REG_NP_SCU_SSTR 0x9c
|
38 | 38 | #define REG_PCIE_XSI0_SEL_MASK GENMASK(14, 13)
|
39 | 39 | #define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11)
|
| 40 | +#define REG_CRYPTO_CLKSRC2 0x20c |
40 | 41 |
|
41 | 42 | #define REG_RST_CTRL2 0x00
|
42 | 43 | #define REG_RST_CTRL1 0x04
|
@@ -89,6 +90,10 @@ static const u32 emi_base[] = { 333000000, 400000000 };
|
89 | 90 | static const u32 bus_base[] = { 500000000, 540000000 };
|
90 | 91 | static const u32 slic_base[] = { 100000000, 3125000 };
|
91 | 92 | 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 }; |
92 | 97 |
|
93 | 98 | static const struct en_clk_desc en7523_base_clks[] = {
|
94 | 99 | {
|
@@ -186,6 +191,102 @@ static const struct en_clk_desc en7523_base_clks[] = {
|
186 | 191 | }
|
187 | 192 | };
|
188 | 193 |
|
| 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 | + |
189 | 290 | static const u16 en7581_rst_ofs[] = {
|
190 | 291 | REG_RST_CTRL2,
|
191 | 292 | REG_RST_CTRL1,
|
@@ -457,8 +558,8 @@ static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_dat
|
457 | 558 | u32 rate;
|
458 | 559 | int i;
|
459 | 560 |
|
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]; |
462 | 563 | u32 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg;
|
463 | 564 | int err;
|
464 | 565 |
|
|
0 commit comments