1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) STMicroelectronics 2018 - All Rights Reserved 4 * Author: Olivier Bideau <olivier.bideau@st.com> for STMicroelectronics. 5 * Author: Gabriel Fernandez <gabriel.fernandez@st.com> for STMicroelectronics. 6 */ 7 8 #include <linux/clk.h> 9 #include <linux/clk-provider.h> 10 #include <linux/delay.h> 11 #include <linux/err.h> 12 #include <linux/io.h> 13 #include <linux/module.h> 14 #include <linux/of.h> 15 #include <linux/of_address.h> 16 #include <linux/platform_device.h> 17 #include <linux/reset-controller.h> 18 #include <linux/slab.h> 19 #include <linux/spinlock.h> 20 21 #include <dt-bindings/clock/stm32mp1-clks.h> 22 23 static DEFINE_SPINLOCK(rlock); 24 25 #define RCC_OCENSETR 0x0C 26 #define RCC_HSICFGR 0x18 27 #define RCC_RDLSICR 0x144 28 #define RCC_PLL1CR 0x80 29 #define RCC_PLL1CFGR1 0x84 30 #define RCC_PLL1CFGR2 0x88 31 #define RCC_PLL2CR 0x94 32 #define RCC_PLL2CFGR1 0x98 33 #define RCC_PLL2CFGR2 0x9C 34 #define RCC_PLL3CR 0x880 35 #define RCC_PLL3CFGR1 0x884 36 #define RCC_PLL3CFGR2 0x888 37 #define RCC_PLL4CR 0x894 38 #define RCC_PLL4CFGR1 0x898 39 #define RCC_PLL4CFGR2 0x89C 40 #define RCC_APB1ENSETR 0xA00 41 #define RCC_APB2ENSETR 0xA08 42 #define RCC_APB3ENSETR 0xA10 43 #define RCC_APB4ENSETR 0x200 44 #define RCC_APB5ENSETR 0x208 45 #define RCC_AHB2ENSETR 0xA18 46 #define RCC_AHB3ENSETR 0xA20 47 #define RCC_AHB4ENSETR 0xA28 48 #define RCC_AHB5ENSETR 0x210 49 #define RCC_AHB6ENSETR 0x218 50 #define RCC_AHB6LPENSETR 0x318 51 #define RCC_RCK12SELR 0x28 52 #define RCC_RCK3SELR 0x820 53 #define RCC_RCK4SELR 0x824 54 #define RCC_MPCKSELR 0x20 55 #define RCC_ASSCKSELR 0x24 56 #define RCC_MSSCKSELR 0x48 57 #define RCC_SPI6CKSELR 0xC4 58 #define RCC_SDMMC12CKSELR 0x8F4 59 #define RCC_SDMMC3CKSELR 0x8F8 60 #define RCC_FMCCKSELR 0x904 61 #define RCC_I2C46CKSELR 0xC0 62 #define RCC_I2C12CKSELR 0x8C0 63 #define RCC_I2C35CKSELR 0x8C4 64 #define RCC_UART1CKSELR 0xC8 65 #define RCC_QSPICKSELR 0x900 66 #define RCC_ETHCKSELR 0x8FC 67 #define RCC_RNG1CKSELR 0xCC 68 #define RCC_RNG2CKSELR 0x920 69 #define RCC_GPUCKSELR 0x938 70 #define RCC_USBCKSELR 0x91C 71 #define RCC_STGENCKSELR 0xD4 72 #define RCC_SPDIFCKSELR 0x914 73 #define RCC_SPI2S1CKSELR 0x8D8 74 #define RCC_SPI2S23CKSELR 0x8DC 75 #define RCC_SPI2S45CKSELR 0x8E0 76 #define RCC_CECCKSELR 0x918 77 #define RCC_LPTIM1CKSELR 0x934 78 #define RCC_LPTIM23CKSELR 0x930 79 #define RCC_LPTIM45CKSELR 0x92C 80 #define RCC_UART24CKSELR 0x8E8 81 #define RCC_UART35CKSELR 0x8EC 82 #define RCC_UART6CKSELR 0x8E4 83 #define RCC_UART78CKSELR 0x8F0 84 #define RCC_FDCANCKSELR 0x90C 85 #define RCC_SAI1CKSELR 0x8C8 86 #define RCC_SAI2CKSELR 0x8CC 87 #define RCC_SAI3CKSELR 0x8D0 88 #define RCC_SAI4CKSELR 0x8D4 89 #define RCC_ADCCKSELR 0x928 90 #define RCC_MPCKDIVR 0x2C 91 #define RCC_DSICKSELR 0x924 92 #define RCC_CPERCKSELR 0xD0 93 #define RCC_MCO1CFGR 0x800 94 #define RCC_MCO2CFGR 0x804 95 #define RCC_BDCR 0x140 96 #define RCC_AXIDIVR 0x30 97 #define RCC_MCUDIVR 0x830 98 #define RCC_APB1DIVR 0x834 99 #define RCC_APB2DIVR 0x838 100 #define RCC_APB3DIVR 0x83C 101 #define RCC_APB4DIVR 0x3C 102 #define RCC_APB5DIVR 0x40 103 #define RCC_TIMG1PRER 0x828 104 #define RCC_TIMG2PRER 0x82C 105 #define RCC_RTCDIVR 0x44 106 #define RCC_DBGCFGR 0x80C 107 108 #define RCC_CLR 0x4 109 110 static const char * const ref12_parents[] = { 111 "ck_hsi", "ck_hse" 112 }; 113 114 static const char * const ref3_parents[] = { 115 "ck_hsi", "ck_hse", "ck_csi" 116 }; 117 118 static const char * const ref4_parents[] = { 119 "ck_hsi", "ck_hse", "ck_csi" 120 }; 121 122 static const char * const cpu_src[] = { 123 "ck_hsi", "ck_hse", "pll1_p" 124 }; 125 126 static const char * const axi_src[] = { 127 "ck_hsi", "ck_hse", "pll2_p" 128 }; 129 130 static const char * const per_src[] = { 131 "ck_hsi", "ck_csi", "ck_hse" 132 }; 133 134 static const char * const mcu_src[] = { 135 "ck_hsi", "ck_hse", "ck_csi", "pll3_p" 136 }; 137 138 static const char * const sdmmc12_src[] = { 139 "ck_axi", "pll3_r", "pll4_p", "ck_hsi" 140 }; 141 142 static const char * const sdmmc3_src[] = { 143 "ck_mcu", "pll3_r", "pll4_p", "ck_hsi" 144 }; 145 146 static const char * const fmc_src[] = { 147 "ck_axi", "pll3_r", "pll4_p", "ck_per" 148 }; 149 150 static const char * const qspi_src[] = { 151 "ck_axi", "pll3_r", "pll4_p", "ck_per" 152 }; 153 154 static const char * const eth_src[] = { 155 "pll4_p", "pll3_q" 156 }; 157 158 static const char * const rng_src[] = { 159 "ck_csi", "pll4_r", "ck_lse", "ck_lsi" 160 }; 161 162 static const char * const usbphy_src[] = { 163 "ck_hse", "pll4_r", "clk-hse-div2" 164 }; 165 166 static const char * const usbo_src[] = { 167 "pll4_r", "ck_usbo_48m" 168 }; 169 170 static const char * const stgen_src[] = { 171 "ck_hsi", "ck_hse" 172 }; 173 174 static const char * const spdif_src[] = { 175 "pll4_p", "pll3_q", "ck_hsi" 176 }; 177 178 static const char * const spi123_src[] = { 179 "pll4_p", "pll3_q", "i2s_ckin", "ck_per", "pll3_r" 180 }; 181 182 static const char * const spi45_src[] = { 183 "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse" 184 }; 185 186 static const char * const spi6_src[] = { 187 "pclk5", "pll4_q", "ck_hsi", "ck_csi", "ck_hse", "pll3_q" 188 }; 189 190 static const char * const cec_src[] = { 191 "ck_lse", "ck_lsi", "ck_csi" 192 }; 193 194 static const char * const i2c12_src[] = { 195 "pclk1", "pll4_r", "ck_hsi", "ck_csi" 196 }; 197 198 static const char * const i2c35_src[] = { 199 "pclk1", "pll4_r", "ck_hsi", "ck_csi" 200 }; 201 202 static const char * const i2c46_src[] = { 203 "pclk5", "pll3_q", "ck_hsi", "ck_csi" 204 }; 205 206 static const char * const lptim1_src[] = { 207 "pclk1", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per" 208 }; 209 210 static const char * const lptim23_src[] = { 211 "pclk3", "pll4_q", "ck_per", "ck_lse", "ck_lsi" 212 }; 213 214 static const char * const lptim45_src[] = { 215 "pclk3", "pll4_p", "pll3_q", "ck_lse", "ck_lsi", "ck_per" 216 }; 217 218 static const char * const usart1_src[] = { 219 "pclk5", "pll3_q", "ck_hsi", "ck_csi", "pll4_q", "ck_hse" 220 }; 221 222 static const char * const usart234578_src[] = { 223 "pclk1", "pll4_q", "ck_hsi", "ck_csi", "ck_hse" 224 }; 225 226 static const char * const usart6_src[] = { 227 "pclk2", "pll4_q", "ck_hsi", "ck_csi", "ck_hse" 228 }; 229 230 static const char * const fdcan_src[] = { 231 "ck_hse", "pll3_q", "pll4_q", "pll4_r" 232 }; 233 234 static const char * const sai_src[] = { 235 "pll4_q", "pll3_q", "i2s_ckin", "ck_per", "pll3_r" 236 }; 237 238 static const char * const sai2_src[] = { 239 "pll4_q", "pll3_q", "i2s_ckin", "ck_per", "spdif_ck_symb", "pll3_r" 240 }; 241 242 static const char * const adc12_src[] = { 243 "pll4_r", "ck_per", "pll3_q" 244 }; 245 246 static const char * const dsi_src[] = { 247 "ck_dsi_phy", "pll4_p" 248 }; 249 250 static const char * const rtc_src[] = { 251 "off", "ck_lse", "ck_lsi", "ck_hse" 252 }; 253 254 static const char * const mco1_src[] = { 255 "ck_hsi", "ck_hse", "ck_csi", "ck_lsi", "ck_lse" 256 }; 257 258 static const char * const mco2_src[] = { 259 "ck_mpu", "ck_axi", "ck_mcu", "pll4_p", "ck_hse", "ck_hsi" 260 }; 261 262 static const char * const ck_trace_src[] = { 263 "ck_axi" 264 }; 265 266 static const struct clk_div_table axi_div_table[] = { 267 { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, 268 { 4, 4 }, { 5, 4 }, { 6, 4 }, { 7, 4 }, 269 { 0 }, 270 }; 271 272 static const struct clk_div_table mcu_div_table[] = { 273 { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 }, 274 { 4, 16 }, { 5, 32 }, { 6, 64 }, { 7, 128 }, 275 { 8, 256 }, { 9, 512 }, { 10, 512}, { 11, 512 }, 276 { 12, 512 }, { 13, 512 }, { 14, 512}, { 15, 512 }, 277 { 0 }, 278 }; 279 280 static const struct clk_div_table apb_div_table[] = { 281 { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 }, 282 { 4, 16 }, { 5, 16 }, { 6, 16 }, { 7, 16 }, 283 { 0 }, 284 }; 285 286 static const struct clk_div_table ck_trace_div_table[] = { 287 { 0, 1 }, { 1, 2 }, { 2, 4 }, { 3, 8 }, 288 { 4, 16 }, { 5, 16 }, { 6, 16 }, { 7, 16 }, 289 { 0 }, 290 }; 291 292 #define MAX_MUX_CLK 2 293 294 struct stm32_mmux { 295 u8 nbr_clk; 296 struct clk_hw *hws[MAX_MUX_CLK]; 297 }; 298 299 struct stm32_clk_mmux { 300 struct clk_mux mux; 301 struct stm32_mmux *mmux; 302 }; 303 304 struct stm32_mgate { 305 u8 nbr_clk; 306 u32 flag; 307 }; 308 309 struct stm32_clk_mgate { 310 struct clk_gate gate; 311 struct stm32_mgate *mgate; 312 u32 mask; 313 }; 314 315 struct clock_config { 316 u32 id; 317 const char *name; 318 const char *parent_name; 319 const char * const *parent_names; 320 int num_parents; 321 unsigned long flags; 322 void *cfg; 323 struct clk_hw * (*func)(struct device *dev, 324 struct clk_hw_onecell_data *clk_data, 325 void __iomem *base, spinlock_t *lock, 326 const struct clock_config *cfg); 327 }; 328 329 #define NO_ID ~0 330 331 struct gate_cfg { 332 u32 reg_off; 333 u8 bit_idx; 334 u8 gate_flags; 335 }; 336 337 struct fixed_factor_cfg { 338 unsigned int mult; 339 unsigned int div; 340 }; 341 342 struct div_cfg { 343 u32 reg_off; 344 u8 shift; 345 u8 width; 346 u8 div_flags; 347 const struct clk_div_table *table; 348 }; 349 350 struct mux_cfg { 351 u32 reg_off; 352 u8 shift; 353 u8 width; 354 u8 mux_flags; 355 u32 *table; 356 }; 357 358 struct stm32_gate_cfg { 359 struct gate_cfg *gate; 360 struct stm32_mgate *mgate; 361 const struct clk_ops *ops; 362 }; 363 364 struct stm32_div_cfg { 365 struct div_cfg *div; 366 const struct clk_ops *ops; 367 }; 368 369 struct stm32_mux_cfg { 370 struct mux_cfg *mux; 371 struct stm32_mmux *mmux; 372 const struct clk_ops *ops; 373 }; 374 375 /* STM32 Composite clock */ 376 struct stm32_composite_cfg { 377 const struct stm32_gate_cfg *gate; 378 const struct stm32_div_cfg *div; 379 const struct stm32_mux_cfg *mux; 380 }; 381 382 static struct clk_hw * 383 _clk_hw_register_gate(struct device *dev, 384 struct clk_hw_onecell_data *clk_data, 385 void __iomem *base, spinlock_t *lock, 386 const struct clock_config *cfg) 387 { 388 struct gate_cfg *gate_cfg = cfg->cfg; 389 390 return clk_hw_register_gate(dev, 391 cfg->name, 392 cfg->parent_name, 393 cfg->flags, 394 gate_cfg->reg_off + base, 395 gate_cfg->bit_idx, 396 gate_cfg->gate_flags, 397 lock); 398 } 399 400 static struct clk_hw * 401 _clk_hw_register_fixed_factor(struct device *dev, 402 struct clk_hw_onecell_data *clk_data, 403 void __iomem *base, spinlock_t *lock, 404 const struct clock_config *cfg) 405 { 406 struct fixed_factor_cfg *ff_cfg = cfg->cfg; 407 408 return clk_hw_register_fixed_factor(dev, cfg->name, cfg->parent_name, 409 cfg->flags, ff_cfg->mult, 410 ff_cfg->div); 411 } 412 413 static struct clk_hw * 414 _clk_hw_register_divider_table(struct device *dev, 415 struct clk_hw_onecell_data *clk_data, 416 void __iomem *base, spinlock_t *lock, 417 const struct clock_config *cfg) 418 { 419 struct div_cfg *div_cfg = cfg->cfg; 420 421 return clk_hw_register_divider_table(dev, 422 cfg->name, 423 cfg->parent_name, 424 cfg->flags, 425 div_cfg->reg_off + base, 426 div_cfg->shift, 427 div_cfg->width, 428 div_cfg->div_flags, 429 div_cfg->table, 430 lock); 431 } 432 433 static struct clk_hw * 434 _clk_hw_register_mux(struct device *dev, 435 struct clk_hw_onecell_data *clk_data, 436 void __iomem *base, spinlock_t *lock, 437 const struct clock_config *cfg) 438 { 439 struct mux_cfg *mux_cfg = cfg->cfg; 440 441 return clk_hw_register_mux(dev, cfg->name, cfg->parent_names, 442 cfg->num_parents, cfg->flags, 443 mux_cfg->reg_off + base, mux_cfg->shift, 444 mux_cfg->width, mux_cfg->mux_flags, lock); 445 } 446 447 /* MP1 Gate clock with set & clear registers */ 448 449 static int mp1_gate_clk_enable(struct clk_hw *hw) 450 { 451 if (!clk_gate_ops.is_enabled(hw)) 452 clk_gate_ops.enable(hw); 453 454 return 0; 455 } 456 457 static void mp1_gate_clk_disable(struct clk_hw *hw) 458 { 459 struct clk_gate *gate = to_clk_gate(hw); 460 unsigned long flags = 0; 461 462 if (clk_gate_ops.is_enabled(hw)) { 463 spin_lock_irqsave(gate->lock, flags); 464 writel_relaxed(BIT(gate->bit_idx), gate->reg + RCC_CLR); 465 spin_unlock_irqrestore(gate->lock, flags); 466 } 467 } 468 469 static const struct clk_ops mp1_gate_clk_ops = { 470 .enable = mp1_gate_clk_enable, 471 .disable = mp1_gate_clk_disable, 472 .is_enabled = clk_gate_is_enabled, 473 }; 474 475 static struct clk_hw *_get_stm32_mux(struct device *dev, void __iomem *base, 476 const struct stm32_mux_cfg *cfg, 477 spinlock_t *lock) 478 { 479 struct stm32_clk_mmux *mmux; 480 struct clk_mux *mux; 481 struct clk_hw *mux_hw; 482 483 if (cfg->mmux) { 484 mmux = devm_kzalloc(dev, sizeof(*mmux), GFP_KERNEL); 485 if (!mmux) 486 return ERR_PTR(-ENOMEM); 487 488 mmux->mux.reg = cfg->mux->reg_off + base; 489 mmux->mux.shift = cfg->mux->shift; 490 mmux->mux.mask = (1 << cfg->mux->width) - 1; 491 mmux->mux.flags = cfg->mux->mux_flags; 492 mmux->mux.table = cfg->mux->table; 493 mmux->mux.lock = lock; 494 mmux->mmux = cfg->mmux; 495 mux_hw = &mmux->mux.hw; 496 cfg->mmux->hws[cfg->mmux->nbr_clk++] = mux_hw; 497 498 } else { 499 mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL); 500 if (!mux) 501 return ERR_PTR(-ENOMEM); 502 503 mux->reg = cfg->mux->reg_off + base; 504 mux->shift = cfg->mux->shift; 505 mux->mask = (1 << cfg->mux->width) - 1; 506 mux->flags = cfg->mux->mux_flags; 507 mux->table = cfg->mux->table; 508 mux->lock = lock; 509 mux_hw = &mux->hw; 510 } 511 512 return mux_hw; 513 } 514 515 static struct clk_hw *_get_stm32_div(struct device *dev, void __iomem *base, 516 const struct stm32_div_cfg *cfg, 517 spinlock_t *lock) 518 { 519 struct clk_divider *div; 520 521 div = devm_kzalloc(dev, sizeof(*div), GFP_KERNEL); 522 523 if (!div) 524 return ERR_PTR(-ENOMEM); 525 526 div->reg = cfg->div->reg_off + base; 527 div->shift = cfg->div->shift; 528 div->width = cfg->div->width; 529 div->flags = cfg->div->div_flags; 530 div->table = cfg->div->table; 531 div->lock = lock; 532 533 return &div->hw; 534 } 535 536 static struct clk_hw *_get_stm32_gate(struct device *dev, void __iomem *base, 537 const struct stm32_gate_cfg *cfg, 538 spinlock_t *lock) 539 { 540 struct stm32_clk_mgate *mgate; 541 struct clk_gate *gate; 542 struct clk_hw *gate_hw; 543 544 if (cfg->mgate) { 545 mgate = devm_kzalloc(dev, sizeof(*mgate), GFP_KERNEL); 546 if (!mgate) 547 return ERR_PTR(-ENOMEM); 548 549 mgate->gate.reg = cfg->gate->reg_off + base; 550 mgate->gate.bit_idx = cfg->gate->bit_idx; 551 mgate->gate.flags = cfg->gate->gate_flags; 552 mgate->gate.lock = lock; 553 mgate->mask = BIT(cfg->mgate->nbr_clk++); 554 555 mgate->mgate = cfg->mgate; 556 557 gate_hw = &mgate->gate.hw; 558 559 } else { 560 gate = devm_kzalloc(dev, sizeof(*gate), GFP_KERNEL); 561 if (!gate) 562 return ERR_PTR(-ENOMEM); 563 564 gate->reg = cfg->gate->reg_off + base; 565 gate->bit_idx = cfg->gate->bit_idx; 566 gate->flags = cfg->gate->gate_flags; 567 gate->lock = lock; 568 569 gate_hw = &gate->hw; 570 } 571 572 return gate_hw; 573 } 574 575 static struct clk_hw * 576 clk_stm32_register_gate_ops(struct device *dev, 577 const char *name, 578 const char *parent_name, 579 unsigned long flags, 580 void __iomem *base, 581 const struct stm32_gate_cfg *cfg, 582 spinlock_t *lock) 583 { 584 struct clk_init_data init = { NULL }; 585 struct clk_hw *hw; 586 int ret; 587 588 init.name = name; 589 init.parent_names = &parent_name; 590 init.num_parents = 1; 591 init.flags = flags; 592 593 init.ops = &clk_gate_ops; 594 595 if (cfg->ops) 596 init.ops = cfg->ops; 597 598 hw = _get_stm32_gate(dev, base, cfg, lock); 599 if (IS_ERR(hw)) 600 return ERR_PTR(-ENOMEM); 601 602 hw->init = &init; 603 604 ret = clk_hw_register(dev, hw); 605 if (ret) 606 hw = ERR_PTR(ret); 607 608 return hw; 609 } 610 611 static struct clk_hw * 612 clk_stm32_register_composite(struct device *dev, 613 const char *name, const char * const *parent_names, 614 int num_parents, void __iomem *base, 615 const struct stm32_composite_cfg *cfg, 616 unsigned long flags, spinlock_t *lock) 617 { 618 const struct clk_ops *mux_ops, *div_ops, *gate_ops; 619 struct clk_hw *mux_hw, *div_hw, *gate_hw; 620 621 mux_hw = NULL; 622 div_hw = NULL; 623 gate_hw = NULL; 624 mux_ops = NULL; 625 div_ops = NULL; 626 gate_ops = NULL; 627 628 if (cfg->mux) { 629 mux_hw = _get_stm32_mux(dev, base, cfg->mux, lock); 630 631 if (!IS_ERR(mux_hw)) { 632 mux_ops = &clk_mux_ops; 633 634 if (cfg->mux->ops) 635 mux_ops = cfg->mux->ops; 636 } 637 } 638 639 if (cfg->div) { 640 div_hw = _get_stm32_div(dev, base, cfg->div, lock); 641 642 if (!IS_ERR(div_hw)) { 643 div_ops = &clk_divider_ops; 644 645 if (cfg->div->ops) 646 div_ops = cfg->div->ops; 647 } 648 } 649 650 if (cfg->gate) { 651 gate_hw = _get_stm32_gate(dev, base, cfg->gate, lock); 652 653 if (!IS_ERR(gate_hw)) { 654 gate_ops = &clk_gate_ops; 655 656 if (cfg->gate->ops) 657 gate_ops = cfg->gate->ops; 658 } 659 } 660 661 return clk_hw_register_composite(dev, name, parent_names, num_parents, 662 mux_hw, mux_ops, div_hw, div_ops, 663 gate_hw, gate_ops, flags); 664 } 665 666 #define to_clk_mgate(_gate) container_of(_gate, struct stm32_clk_mgate, gate) 667 668 static int mp1_mgate_clk_enable(struct clk_hw *hw) 669 { 670 struct clk_gate *gate = to_clk_gate(hw); 671 struct stm32_clk_mgate *clk_mgate = to_clk_mgate(gate); 672 673 clk_mgate->mgate->flag |= clk_mgate->mask; 674 675 mp1_gate_clk_enable(hw); 676 677 return 0; 678 } 679 680 static void mp1_mgate_clk_disable(struct clk_hw *hw) 681 { 682 struct clk_gate *gate = to_clk_gate(hw); 683 struct stm32_clk_mgate *clk_mgate = to_clk_mgate(gate); 684 685 clk_mgate->mgate->flag &= ~clk_mgate->mask; 686 687 if (clk_mgate->mgate->flag == 0) 688 mp1_gate_clk_disable(hw); 689 } 690 691 static const struct clk_ops mp1_mgate_clk_ops = { 692 .enable = mp1_mgate_clk_enable, 693 .disable = mp1_mgate_clk_disable, 694 .is_enabled = clk_gate_is_enabled, 695 696 }; 697 698 #define to_clk_mmux(_mux) container_of(_mux, struct stm32_clk_mmux, mux) 699 700 static u8 clk_mmux_get_parent(struct clk_hw *hw) 701 { 702 return clk_mux_ops.get_parent(hw); 703 } 704 705 static int clk_mmux_set_parent(struct clk_hw *hw, u8 index) 706 { 707 struct clk_mux *mux = to_clk_mux(hw); 708 struct stm32_clk_mmux *clk_mmux = to_clk_mmux(mux); 709 struct clk_hw *hwp; 710 int ret, n; 711 712 ret = clk_mux_ops.set_parent(hw, index); 713 if (ret) 714 return ret; 715 716 hwp = clk_hw_get_parent(hw); 717 718 for (n = 0; n < clk_mmux->mmux->nbr_clk; n++) 719 if (clk_mmux->mmux->hws[n] != hw) 720 clk_hw_reparent(clk_mmux->mmux->hws[n], hwp); 721 722 return 0; 723 } 724 725 static const struct clk_ops clk_mmux_ops = { 726 .get_parent = clk_mmux_get_parent, 727 .set_parent = clk_mmux_set_parent, 728 .determine_rate = __clk_mux_determine_rate, 729 }; 730 731 /* STM32 PLL */ 732 struct stm32_pll_obj { 733 /* lock pll enable/disable registers */ 734 spinlock_t *lock; 735 void __iomem *reg; 736 struct clk_hw hw; 737 struct clk_mux mux; 738 }; 739 740 #define to_pll(_hw) container_of(_hw, struct stm32_pll_obj, hw) 741 742 #define PLL_ON BIT(0) 743 #define PLL_RDY BIT(1) 744 #define DIVN_MASK 0x1FF 745 #define DIVM_MASK 0x3F 746 #define DIVM_SHIFT 16 747 #define DIVN_SHIFT 0 748 #define FRAC_OFFSET 0xC 749 #define FRAC_MASK 0x1FFF 750 #define FRAC_SHIFT 3 751 #define FRACLE BIT(16) 752 #define PLL_MUX_SHIFT 0 753 #define PLL_MUX_MASK 3 754 755 static int __pll_is_enabled(struct clk_hw *hw) 756 { 757 struct stm32_pll_obj *clk_elem = to_pll(hw); 758 759 return readl_relaxed(clk_elem->reg) & PLL_ON; 760 } 761 762 #define TIMEOUT 5 763 764 static int pll_enable(struct clk_hw *hw) 765 { 766 struct stm32_pll_obj *clk_elem = to_pll(hw); 767 u32 reg; 768 unsigned long flags = 0; 769 unsigned int timeout = TIMEOUT; 770 int bit_status = 0; 771 772 spin_lock_irqsave(clk_elem->lock, flags); 773 774 if (__pll_is_enabled(hw)) 775 goto unlock; 776 777 reg = readl_relaxed(clk_elem->reg); 778 reg |= PLL_ON; 779 writel_relaxed(reg, clk_elem->reg); 780 781 /* We can't use readl_poll_timeout() because we can be blocked if 782 * someone enables this clock before clocksource changes. 783 * Only jiffies counter is available. Jiffies are incremented by 784 * interruptions and enable op does not allow to be interrupted. 785 */ 786 do { 787 bit_status = !(readl_relaxed(clk_elem->reg) & PLL_RDY); 788 789 if (bit_status) 790 udelay(120); 791 792 } while (bit_status && --timeout); 793 794 unlock: 795 spin_unlock_irqrestore(clk_elem->lock, flags); 796 797 return bit_status; 798 } 799 800 static void pll_disable(struct clk_hw *hw) 801 { 802 struct stm32_pll_obj *clk_elem = to_pll(hw); 803 u32 reg; 804 unsigned long flags = 0; 805 806 spin_lock_irqsave(clk_elem->lock, flags); 807 808 reg = readl_relaxed(clk_elem->reg); 809 reg &= ~PLL_ON; 810 writel_relaxed(reg, clk_elem->reg); 811 812 spin_unlock_irqrestore(clk_elem->lock, flags); 813 } 814 815 static u32 pll_frac_val(struct clk_hw *hw) 816 { 817 struct stm32_pll_obj *clk_elem = to_pll(hw); 818 u32 reg, frac = 0; 819 820 reg = readl_relaxed(clk_elem->reg + FRAC_OFFSET); 821 if (reg & FRACLE) 822 frac = (reg >> FRAC_SHIFT) & FRAC_MASK; 823 824 return frac; 825 } 826 827 static unsigned long pll_recalc_rate(struct clk_hw *hw, 828 unsigned long parent_rate) 829 { 830 struct stm32_pll_obj *clk_elem = to_pll(hw); 831 u32 reg; 832 u32 frac, divm, divn; 833 u64 rate, rate_frac = 0; 834 835 reg = readl_relaxed(clk_elem->reg + 4); 836 837 divm = ((reg >> DIVM_SHIFT) & DIVM_MASK) + 1; 838 divn = ((reg >> DIVN_SHIFT) & DIVN_MASK) + 1; 839 rate = (u64)parent_rate * divn; 840 841 do_div(rate, divm); 842 843 frac = pll_frac_val(hw); 844 if (frac) { 845 rate_frac = (u64)parent_rate * (u64)frac; 846 do_div(rate_frac, (divm * 8192)); 847 } 848 849 return rate + rate_frac; 850 } 851 852 static int pll_is_enabled(struct clk_hw *hw) 853 { 854 struct stm32_pll_obj *clk_elem = to_pll(hw); 855 unsigned long flags = 0; 856 int ret; 857 858 spin_lock_irqsave(clk_elem->lock, flags); 859 ret = __pll_is_enabled(hw); 860 spin_unlock_irqrestore(clk_elem->lock, flags); 861 862 return ret; 863 } 864 865 static u8 pll_get_parent(struct clk_hw *hw) 866 { 867 struct stm32_pll_obj *clk_elem = to_pll(hw); 868 struct clk_hw *mux_hw = &clk_elem->mux.hw; 869 870 __clk_hw_set_clk(mux_hw, hw); 871 872 return clk_mux_ops.get_parent(mux_hw); 873 } 874 875 static const struct clk_ops pll_ops = { 876 .enable = pll_enable, 877 .disable = pll_disable, 878 .recalc_rate = pll_recalc_rate, 879 .is_enabled = pll_is_enabled, 880 .get_parent = pll_get_parent, 881 }; 882 883 static struct clk_hw *clk_register_pll(struct device *dev, const char *name, 884 const char * const *parent_names, 885 int num_parents, 886 void __iomem *reg, 887 void __iomem *mux_reg, 888 unsigned long flags, 889 spinlock_t *lock) 890 { 891 struct stm32_pll_obj *element; 892 struct clk_init_data init; 893 struct clk_hw *hw; 894 int err; 895 896 element = devm_kzalloc(dev, sizeof(*element), GFP_KERNEL); 897 if (!element) 898 return ERR_PTR(-ENOMEM); 899 900 init.name = name; 901 init.ops = &pll_ops; 902 init.flags = flags; 903 init.parent_names = parent_names; 904 init.num_parents = num_parents; 905 906 element->mux.lock = lock; 907 element->mux.reg = mux_reg; 908 element->mux.shift = PLL_MUX_SHIFT; 909 element->mux.mask = PLL_MUX_MASK; 910 element->mux.flags = CLK_MUX_READ_ONLY; 911 element->mux.reg = mux_reg; 912 913 element->hw.init = &init; 914 element->reg = reg; 915 element->lock = lock; 916 917 hw = &element->hw; 918 err = clk_hw_register(dev, hw); 919 920 if (err) 921 return ERR_PTR(err); 922 923 return hw; 924 } 925 926 /* Kernel Timer */ 927 struct timer_cker { 928 /* lock the kernel output divider register */ 929 spinlock_t *lock; 930 void __iomem *apbdiv; 931 void __iomem *timpre; 932 struct clk_hw hw; 933 }; 934 935 #define to_timer_cker(_hw) container_of(_hw, struct timer_cker, hw) 936 937 #define APB_DIV_MASK 0x07 938 #define TIM_PRE_MASK 0x01 939 940 static unsigned long __bestmult(struct clk_hw *hw, unsigned long rate, 941 unsigned long parent_rate) 942 { 943 struct timer_cker *tim_ker = to_timer_cker(hw); 944 u32 prescaler; 945 unsigned int mult = 0; 946 947 prescaler = readl_relaxed(tim_ker->apbdiv) & APB_DIV_MASK; 948 if (prescaler < 2) 949 return 1; 950 951 mult = 2; 952 953 if (rate / parent_rate >= 4) 954 mult = 4; 955 956 return mult; 957 } 958 959 static long timer_ker_round_rate(struct clk_hw *hw, unsigned long rate, 960 unsigned long *parent_rate) 961 { 962 unsigned long factor = __bestmult(hw, rate, *parent_rate); 963 964 return *parent_rate * factor; 965 } 966 967 static int timer_ker_set_rate(struct clk_hw *hw, unsigned long rate, 968 unsigned long parent_rate) 969 { 970 struct timer_cker *tim_ker = to_timer_cker(hw); 971 unsigned long flags = 0; 972 unsigned long factor = __bestmult(hw, rate, parent_rate); 973 int ret = 0; 974 975 spin_lock_irqsave(tim_ker->lock, flags); 976 977 switch (factor) { 978 case 1: 979 break; 980 case 2: 981 writel_relaxed(0, tim_ker->timpre); 982 break; 983 case 4: 984 writel_relaxed(1, tim_ker->timpre); 985 break; 986 default: 987 ret = -EINVAL; 988 } 989 spin_unlock_irqrestore(tim_ker->lock, flags); 990 991 return ret; 992 } 993 994 static unsigned long timer_ker_recalc_rate(struct clk_hw *hw, 995 unsigned long parent_rate) 996 { 997 struct timer_cker *tim_ker = to_timer_cker(hw); 998 u32 prescaler, timpre; 999 u32 mul; 1000 1001 prescaler = readl_relaxed(tim_ker->apbdiv) & APB_DIV_MASK; 1002 1003 timpre = readl_relaxed(tim_ker->timpre) & TIM_PRE_MASK; 1004 1005 if (!prescaler) 1006 return parent_rate; 1007 1008 mul = (timpre + 1) * 2; 1009 1010 return parent_rate * mul; 1011 } 1012 1013 static const struct clk_ops timer_ker_ops = { 1014 .recalc_rate = timer_ker_recalc_rate, 1015 .round_rate = timer_ker_round_rate, 1016 .set_rate = timer_ker_set_rate, 1017 1018 }; 1019 1020 static struct clk_hw *clk_register_cktim(struct device *dev, const char *name, 1021 const char *parent_name, 1022 unsigned long flags, 1023 void __iomem *apbdiv, 1024 void __iomem *timpre, 1025 spinlock_t *lock) 1026 { 1027 struct timer_cker *tim_ker; 1028 struct clk_init_data init; 1029 struct clk_hw *hw; 1030 int err; 1031 1032 tim_ker = devm_kzalloc(dev, sizeof(*tim_ker), GFP_KERNEL); 1033 if (!tim_ker) 1034 return ERR_PTR(-ENOMEM); 1035 1036 init.name = name; 1037 init.ops = &timer_ker_ops; 1038 init.flags = flags; 1039 init.parent_names = &parent_name; 1040 init.num_parents = 1; 1041 1042 tim_ker->hw.init = &init; 1043 tim_ker->lock = lock; 1044 tim_ker->apbdiv = apbdiv; 1045 tim_ker->timpre = timpre; 1046 1047 hw = &tim_ker->hw; 1048 err = clk_hw_register(dev, hw); 1049 1050 if (err) 1051 return ERR_PTR(err); 1052 1053 return hw; 1054 } 1055 1056 /* The divider of RTC clock concerns only ck_hse clock */ 1057 #define HSE_RTC 3 1058 1059 static unsigned long clk_divider_rtc_recalc_rate(struct clk_hw *hw, 1060 unsigned long parent_rate) 1061 { 1062 if (clk_hw_get_parent(hw) == clk_hw_get_parent_by_index(hw, HSE_RTC)) 1063 return clk_divider_ops.recalc_rate(hw, parent_rate); 1064 1065 return parent_rate; 1066 } 1067 1068 static int clk_divider_rtc_set_rate(struct clk_hw *hw, unsigned long rate, 1069 unsigned long parent_rate) 1070 { 1071 if (clk_hw_get_parent(hw) == clk_hw_get_parent_by_index(hw, HSE_RTC)) 1072 return clk_divider_ops.set_rate(hw, rate, parent_rate); 1073 1074 return parent_rate; 1075 } 1076 1077 static int clk_divider_rtc_determine_rate(struct clk_hw *hw, struct clk_rate_request *req) 1078 { 1079 if (req->best_parent_hw == clk_hw_get_parent_by_index(hw, HSE_RTC)) 1080 return clk_divider_ops.determine_rate(hw, req); 1081 1082 req->rate = req->best_parent_rate; 1083 1084 return 0; 1085 } 1086 1087 static const struct clk_ops rtc_div_clk_ops = { 1088 .recalc_rate = clk_divider_rtc_recalc_rate, 1089 .set_rate = clk_divider_rtc_set_rate, 1090 .determine_rate = clk_divider_rtc_determine_rate 1091 }; 1092 1093 struct stm32_pll_cfg { 1094 u32 offset; 1095 u32 muxoff; 1096 }; 1097 1098 static struct clk_hw *_clk_register_pll(struct device *dev, 1099 struct clk_hw_onecell_data *clk_data, 1100 void __iomem *base, spinlock_t *lock, 1101 const struct clock_config *cfg) 1102 { 1103 struct stm32_pll_cfg *stm_pll_cfg = cfg->cfg; 1104 1105 return clk_register_pll(dev, cfg->name, cfg->parent_names, 1106 cfg->num_parents, 1107 base + stm_pll_cfg->offset, 1108 base + stm_pll_cfg->muxoff, 1109 cfg->flags, lock); 1110 } 1111 1112 struct stm32_cktim_cfg { 1113 u32 offset_apbdiv; 1114 u32 offset_timpre; 1115 }; 1116 1117 static struct clk_hw *_clk_register_cktim(struct device *dev, 1118 struct clk_hw_onecell_data *clk_data, 1119 void __iomem *base, spinlock_t *lock, 1120 const struct clock_config *cfg) 1121 { 1122 struct stm32_cktim_cfg *cktim_cfg = cfg->cfg; 1123 1124 return clk_register_cktim(dev, cfg->name, cfg->parent_name, cfg->flags, 1125 cktim_cfg->offset_apbdiv + base, 1126 cktim_cfg->offset_timpre + base, lock); 1127 } 1128 1129 static struct clk_hw * 1130 _clk_stm32_register_gate(struct device *dev, 1131 struct clk_hw_onecell_data *clk_data, 1132 void __iomem *base, spinlock_t *lock, 1133 const struct clock_config *cfg) 1134 { 1135 return clk_stm32_register_gate_ops(dev, 1136 cfg->name, 1137 cfg->parent_name, 1138 cfg->flags, 1139 base, 1140 cfg->cfg, 1141 lock); 1142 } 1143 1144 static struct clk_hw * 1145 _clk_stm32_register_composite(struct device *dev, 1146 struct clk_hw_onecell_data *clk_data, 1147 void __iomem *base, spinlock_t *lock, 1148 const struct clock_config *cfg) 1149 { 1150 return clk_stm32_register_composite(dev, cfg->name, cfg->parent_names, 1151 cfg->num_parents, base, cfg->cfg, 1152 cfg->flags, lock); 1153 } 1154 1155 #define GATE(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\ 1156 {\ 1157 .id = _id,\ 1158 .name = _name,\ 1159 .parent_name = _parent,\ 1160 .flags = _flags,\ 1161 .cfg = &(struct gate_cfg) {\ 1162 .reg_off = _offset,\ 1163 .bit_idx = _bit_idx,\ 1164 .gate_flags = _gate_flags,\ 1165 },\ 1166 .func = _clk_hw_register_gate,\ 1167 } 1168 1169 #define FIXED_FACTOR(_id, _name, _parent, _flags, _mult, _div)\ 1170 {\ 1171 .id = _id,\ 1172 .name = _name,\ 1173 .parent_name = _parent,\ 1174 .flags = _flags,\ 1175 .cfg = &(struct fixed_factor_cfg) {\ 1176 .mult = _mult,\ 1177 .div = _div,\ 1178 },\ 1179 .func = _clk_hw_register_fixed_factor,\ 1180 } 1181 1182 #define DIV_TABLE(_id, _name, _parent, _flags, _offset, _shift, _width,\ 1183 _div_flags, _div_table)\ 1184 {\ 1185 .id = _id,\ 1186 .name = _name,\ 1187 .parent_name = _parent,\ 1188 .flags = _flags,\ 1189 .cfg = &(struct div_cfg) {\ 1190 .reg_off = _offset,\ 1191 .shift = _shift,\ 1192 .width = _width,\ 1193 .div_flags = _div_flags,\ 1194 .table = _div_table,\ 1195 },\ 1196 .func = _clk_hw_register_divider_table,\ 1197 } 1198 1199 #define DIV(_id, _name, _parent, _flags, _offset, _shift, _width, _div_flags)\ 1200 DIV_TABLE(_id, _name, _parent, _flags, _offset, _shift, _width,\ 1201 _div_flags, NULL) 1202 1203 #define MUX(_id, _name, _parents, _flags, _offset, _shift, _width, _mux_flags)\ 1204 {\ 1205 .id = _id,\ 1206 .name = _name,\ 1207 .parent_names = _parents,\ 1208 .num_parents = ARRAY_SIZE(_parents),\ 1209 .flags = _flags,\ 1210 .cfg = &(struct mux_cfg) {\ 1211 .reg_off = _offset,\ 1212 .shift = _shift,\ 1213 .width = _width,\ 1214 .mux_flags = _mux_flags,\ 1215 },\ 1216 .func = _clk_hw_register_mux,\ 1217 } 1218 1219 #define PLL(_id, _name, _parents, _flags, _offset_p, _offset_mux)\ 1220 {\ 1221 .id = _id,\ 1222 .name = _name,\ 1223 .parent_names = _parents,\ 1224 .num_parents = ARRAY_SIZE(_parents),\ 1225 .flags = CLK_IGNORE_UNUSED | (_flags),\ 1226 .cfg = &(struct stm32_pll_cfg) {\ 1227 .offset = _offset_p,\ 1228 .muxoff = _offset_mux,\ 1229 },\ 1230 .func = _clk_register_pll,\ 1231 } 1232 1233 #define STM32_CKTIM(_name, _parent, _flags, _offset_apbdiv, _offset_timpre)\ 1234 {\ 1235 .id = NO_ID,\ 1236 .name = _name,\ 1237 .parent_name = _parent,\ 1238 .flags = _flags,\ 1239 .cfg = &(struct stm32_cktim_cfg) {\ 1240 .offset_apbdiv = _offset_apbdiv,\ 1241 .offset_timpre = _offset_timpre,\ 1242 },\ 1243 .func = _clk_register_cktim,\ 1244 } 1245 1246 #define STM32_TIM(_id, _name, _parent, _offset_set, _bit_idx)\ 1247 GATE_MP1(_id, _name, _parent, CLK_SET_RATE_PARENT,\ 1248 _offset_set, _bit_idx, 0) 1249 1250 /* STM32 GATE */ 1251 #define STM32_GATE(_id, _name, _parent, _flags, _gate)\ 1252 {\ 1253 .id = _id,\ 1254 .name = _name,\ 1255 .parent_name = _parent,\ 1256 .flags = _flags,\ 1257 .cfg = (struct stm32_gate_cfg *) {_gate},\ 1258 .func = _clk_stm32_register_gate,\ 1259 } 1260 1261 #define _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags, _mgate, _ops)\ 1262 (&(struct stm32_gate_cfg) {\ 1263 &(struct gate_cfg) {\ 1264 .reg_off = _gate_offset,\ 1265 .bit_idx = _gate_bit_idx,\ 1266 .gate_flags = _gate_flags,\ 1267 },\ 1268 .mgate = _mgate,\ 1269 .ops = _ops,\ 1270 }) 1271 1272 #define _STM32_MGATE(_mgate)\ 1273 (&per_gate_cfg[_mgate]) 1274 1275 #define _GATE(_gate_offset, _gate_bit_idx, _gate_flags)\ 1276 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\ 1277 NULL, NULL)\ 1278 1279 #define _GATE_MP1(_gate_offset, _gate_bit_idx, _gate_flags)\ 1280 _STM32_GATE(_gate_offset, _gate_bit_idx, _gate_flags,\ 1281 NULL, &mp1_gate_clk_ops)\ 1282 1283 #define _MGATE_MP1(_mgate)\ 1284 .gate = &per_gate_cfg[_mgate] 1285 1286 #define GATE_MP1(_id, _name, _parent, _flags, _offset, _bit_idx, _gate_flags)\ 1287 STM32_GATE(_id, _name, _parent, _flags,\ 1288 _GATE_MP1(_offset, _bit_idx, _gate_flags)) 1289 1290 #define MGATE_MP1(_id, _name, _parent, _flags, _mgate)\ 1291 STM32_GATE(_id, _name, _parent, _flags,\ 1292 _STM32_MGATE(_mgate)) 1293 1294 #define _STM32_DIV(_div_offset, _div_shift, _div_width,\ 1295 _div_flags, _div_table, _ops)\ 1296 .div = &(struct stm32_div_cfg) {\ 1297 &(struct div_cfg) {\ 1298 .reg_off = _div_offset,\ 1299 .shift = _div_shift,\ 1300 .width = _div_width,\ 1301 .div_flags = _div_flags,\ 1302 .table = _div_table,\ 1303 },\ 1304 .ops = _ops,\ 1305 } 1306 1307 #define _DIV(_div_offset, _div_shift, _div_width, _div_flags, _div_table)\ 1308 _STM32_DIV(_div_offset, _div_shift, _div_width,\ 1309 _div_flags, _div_table, NULL)\ 1310 1311 #define _DIV_RTC(_div_offset, _div_shift, _div_width, _div_flags, _div_table)\ 1312 _STM32_DIV(_div_offset, _div_shift, _div_width,\ 1313 _div_flags, _div_table, &rtc_div_clk_ops) 1314 1315 #define _STM32_MUX(_offset, _shift, _width, _mux_flags, _mmux, _ops)\ 1316 .mux = &(struct stm32_mux_cfg) {\ 1317 &(struct mux_cfg) {\ 1318 .reg_off = _offset,\ 1319 .shift = _shift,\ 1320 .width = _width,\ 1321 .mux_flags = _mux_flags,\ 1322 .table = NULL,\ 1323 },\ 1324 .mmux = _mmux,\ 1325 .ops = _ops,\ 1326 } 1327 1328 #define _MUX(_offset, _shift, _width, _mux_flags)\ 1329 _STM32_MUX(_offset, _shift, _width, _mux_flags, NULL, NULL)\ 1330 1331 #define _MMUX(_mmux) .mux = &ker_mux_cfg[_mmux] 1332 1333 #define PARENT(_parent) ((const char *[]) { _parent}) 1334 1335 #define _NO_MUX .mux = NULL 1336 #define _NO_DIV .div = NULL 1337 #define _NO_GATE .gate = NULL 1338 1339 #define COMPOSITE(_id, _name, _parents, _flags, _gate, _mux, _div)\ 1340 {\ 1341 .id = _id,\ 1342 .name = _name,\ 1343 .parent_names = _parents,\ 1344 .num_parents = ARRAY_SIZE(_parents),\ 1345 .flags = _flags,\ 1346 .cfg = &(struct stm32_composite_cfg) {\ 1347 _gate,\ 1348 _mux,\ 1349 _div,\ 1350 },\ 1351 .func = _clk_stm32_register_composite,\ 1352 } 1353 1354 #define PCLK(_id, _name, _parent, _flags, _mgate)\ 1355 MGATE_MP1(_id, _name, _parent, _flags, _mgate) 1356 1357 #define KCLK(_id, _name, _parents, _flags, _mgate, _mmux)\ 1358 COMPOSITE(_id, _name, _parents, CLK_OPS_PARENT_ENABLE |\ 1359 CLK_SET_RATE_NO_REPARENT | _flags,\ 1360 _MGATE_MP1(_mgate),\ 1361 _MMUX(_mmux),\ 1362 _NO_DIV) 1363 1364 enum { 1365 G_SAI1, 1366 G_SAI2, 1367 G_SAI3, 1368 G_SAI4, 1369 G_SPI1, 1370 G_SPI2, 1371 G_SPI3, 1372 G_SPI4, 1373 G_SPI5, 1374 G_SPI6, 1375 G_SPDIF, 1376 G_I2C1, 1377 G_I2C2, 1378 G_I2C3, 1379 G_I2C4, 1380 G_I2C5, 1381 G_I2C6, 1382 G_USART2, 1383 G_UART4, 1384 G_USART3, 1385 G_UART5, 1386 G_USART1, 1387 G_USART6, 1388 G_UART7, 1389 G_UART8, 1390 G_LPTIM1, 1391 G_LPTIM2, 1392 G_LPTIM3, 1393 G_LPTIM4, 1394 G_LPTIM5, 1395 G_LTDC, 1396 G_DSI, 1397 G_QSPI, 1398 G_FMC, 1399 G_SDMMC1, 1400 G_SDMMC2, 1401 G_SDMMC3, 1402 G_USBO, 1403 G_USBPHY, 1404 G_RNG1, 1405 G_RNG2, 1406 G_FDCAN, 1407 G_DAC12, 1408 G_CEC, 1409 G_ADC12, 1410 G_GPU, 1411 G_STGEN, 1412 G_DFSDM, 1413 G_ADFSDM, 1414 G_TIM2, 1415 G_TIM3, 1416 G_TIM4, 1417 G_TIM5, 1418 G_TIM6, 1419 G_TIM7, 1420 G_TIM12, 1421 G_TIM13, 1422 G_TIM14, 1423 G_MDIO, 1424 G_TIM1, 1425 G_TIM8, 1426 G_TIM15, 1427 G_TIM16, 1428 G_TIM17, 1429 G_SYSCFG, 1430 G_VREF, 1431 G_TMPSENS, 1432 G_PMBCTRL, 1433 G_HDP, 1434 G_IWDG2, 1435 G_STGENRO, 1436 G_DMA1, 1437 G_DMA2, 1438 G_DMAMUX, 1439 G_DCMI, 1440 G_CRYP2, 1441 G_HASH2, 1442 G_CRC2, 1443 G_HSEM, 1444 G_IPCC, 1445 G_GPIOA, 1446 G_GPIOB, 1447 G_GPIOC, 1448 G_GPIOD, 1449 G_GPIOE, 1450 G_GPIOF, 1451 G_GPIOG, 1452 G_GPIOH, 1453 G_GPIOI, 1454 G_GPIOJ, 1455 G_GPIOK, 1456 G_MDMA, 1457 G_ETHCK, 1458 G_ETHTX, 1459 G_ETHRX, 1460 G_ETHMAC, 1461 G_CRC1, 1462 G_USBH, 1463 G_ETHSTP, 1464 G_RTCAPB, 1465 G_TZC1, 1466 G_TZC2, 1467 G_TZPC, 1468 G_IWDG1, 1469 G_BSEC, 1470 G_GPIOZ, 1471 G_CRYP1, 1472 G_HASH1, 1473 G_BKPSRAM, 1474 G_DDRPERFM, 1475 1476 G_LAST 1477 }; 1478 1479 static struct stm32_mgate mp1_mgate[G_LAST]; 1480 1481 #define _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\ 1482 _mgate, _ops)\ 1483 [_id] = {\ 1484 &(struct gate_cfg) {\ 1485 .reg_off = _gate_offset,\ 1486 .bit_idx = _gate_bit_idx,\ 1487 .gate_flags = _gate_flags,\ 1488 },\ 1489 .mgate = _mgate,\ 1490 .ops = _ops,\ 1491 } 1492 1493 #define K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\ 1494 _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\ 1495 NULL, &mp1_gate_clk_ops) 1496 1497 #define K_MGATE(_id, _gate_offset, _gate_bit_idx, _gate_flags)\ 1498 _K_GATE(_id, _gate_offset, _gate_bit_idx, _gate_flags,\ 1499 &mp1_mgate[_id], &mp1_mgate_clk_ops) 1500 1501 /* Peripheral gates */ 1502 static struct stm32_gate_cfg per_gate_cfg[G_LAST] = { 1503 /* Multi gates */ 1504 K_GATE(G_MDIO, RCC_APB1ENSETR, 31, 0), 1505 K_MGATE(G_DAC12, RCC_APB1ENSETR, 29, 0), 1506 K_MGATE(G_CEC, RCC_APB1ENSETR, 27, 0), 1507 K_MGATE(G_SPDIF, RCC_APB1ENSETR, 26, 0), 1508 K_MGATE(G_I2C5, RCC_APB1ENSETR, 24, 0), 1509 K_MGATE(G_I2C3, RCC_APB1ENSETR, 23, 0), 1510 K_MGATE(G_I2C2, RCC_APB1ENSETR, 22, 0), 1511 K_MGATE(G_I2C1, RCC_APB1ENSETR, 21, 0), 1512 K_MGATE(G_UART8, RCC_APB1ENSETR, 19, 0), 1513 K_MGATE(G_UART7, RCC_APB1ENSETR, 18, 0), 1514 K_MGATE(G_UART5, RCC_APB1ENSETR, 17, 0), 1515 K_MGATE(G_UART4, RCC_APB1ENSETR, 16, 0), 1516 K_MGATE(G_USART3, RCC_APB1ENSETR, 15, 0), 1517 K_MGATE(G_USART2, RCC_APB1ENSETR, 14, 0), 1518 K_MGATE(G_SPI3, RCC_APB1ENSETR, 12, 0), 1519 K_MGATE(G_SPI2, RCC_APB1ENSETR, 11, 0), 1520 K_MGATE(G_LPTIM1, RCC_APB1ENSETR, 9, 0), 1521 K_GATE(G_TIM14, RCC_APB1ENSETR, 8, 0), 1522 K_GATE(G_TIM13, RCC_APB1ENSETR, 7, 0), 1523 K_GATE(G_TIM12, RCC_APB1ENSETR, 6, 0), 1524 K_GATE(G_TIM7, RCC_APB1ENSETR, 5, 0), 1525 K_GATE(G_TIM6, RCC_APB1ENSETR, 4, 0), 1526 K_GATE(G_TIM5, RCC_APB1ENSETR, 3, 0), 1527 K_GATE(G_TIM4, RCC_APB1ENSETR, 2, 0), 1528 K_GATE(G_TIM3, RCC_APB1ENSETR, 1, 0), 1529 K_GATE(G_TIM2, RCC_APB1ENSETR, 0, 0), 1530 1531 K_MGATE(G_FDCAN, RCC_APB2ENSETR, 24, 0), 1532 K_GATE(G_ADFSDM, RCC_APB2ENSETR, 21, 0), 1533 K_GATE(G_DFSDM, RCC_APB2ENSETR, 20, 0), 1534 K_MGATE(G_SAI3, RCC_APB2ENSETR, 18, 0), 1535 K_MGATE(G_SAI2, RCC_APB2ENSETR, 17, 0), 1536 K_MGATE(G_SAI1, RCC_APB2ENSETR, 16, 0), 1537 K_MGATE(G_USART6, RCC_APB2ENSETR, 13, 0), 1538 K_MGATE(G_SPI5, RCC_APB2ENSETR, 10, 0), 1539 K_MGATE(G_SPI4, RCC_APB2ENSETR, 9, 0), 1540 K_MGATE(G_SPI1, RCC_APB2ENSETR, 8, 0), 1541 K_GATE(G_TIM17, RCC_APB2ENSETR, 4, 0), 1542 K_GATE(G_TIM16, RCC_APB2ENSETR, 3, 0), 1543 K_GATE(G_TIM15, RCC_APB2ENSETR, 2, 0), 1544 K_GATE(G_TIM8, RCC_APB2ENSETR, 1, 0), 1545 K_GATE(G_TIM1, RCC_APB2ENSETR, 0, 0), 1546 1547 K_GATE(G_HDP, RCC_APB3ENSETR, 20, 0), 1548 K_GATE(G_PMBCTRL, RCC_APB3ENSETR, 17, 0), 1549 K_GATE(G_TMPSENS, RCC_APB3ENSETR, 16, 0), 1550 K_GATE(G_VREF, RCC_APB3ENSETR, 13, 0), 1551 K_GATE(G_SYSCFG, RCC_APB3ENSETR, 11, 0), 1552 K_MGATE(G_SAI4, RCC_APB3ENSETR, 8, 0), 1553 K_MGATE(G_LPTIM5, RCC_APB3ENSETR, 3, 0), 1554 K_MGATE(G_LPTIM4, RCC_APB3ENSETR, 2, 0), 1555 K_MGATE(G_LPTIM3, RCC_APB3ENSETR, 1, 0), 1556 K_MGATE(G_LPTIM2, RCC_APB3ENSETR, 0, 0), 1557 1558 K_GATE(G_STGENRO, RCC_APB4ENSETR, 20, 0), 1559 K_MGATE(G_USBPHY, RCC_APB4ENSETR, 16, 0), 1560 K_GATE(G_IWDG2, RCC_APB4ENSETR, 15, 0), 1561 K_GATE(G_DDRPERFM, RCC_APB4ENSETR, 8, 0), 1562 K_MGATE(G_DSI, RCC_APB4ENSETR, 4, 0), 1563 K_MGATE(G_LTDC, RCC_APB4ENSETR, 0, 0), 1564 1565 K_GATE(G_STGEN, RCC_APB5ENSETR, 20, 0), 1566 K_GATE(G_BSEC, RCC_APB5ENSETR, 16, 0), 1567 K_GATE(G_IWDG1, RCC_APB5ENSETR, 15, 0), 1568 K_GATE(G_TZPC, RCC_APB5ENSETR, 13, 0), 1569 K_GATE(G_TZC2, RCC_APB5ENSETR, 12, 0), 1570 K_GATE(G_TZC1, RCC_APB5ENSETR, 11, 0), 1571 K_GATE(G_RTCAPB, RCC_APB5ENSETR, 8, 0), 1572 K_MGATE(G_USART1, RCC_APB5ENSETR, 4, 0), 1573 K_MGATE(G_I2C6, RCC_APB5ENSETR, 3, 0), 1574 K_MGATE(G_I2C4, RCC_APB5ENSETR, 2, 0), 1575 K_MGATE(G_SPI6, RCC_APB5ENSETR, 0, 0), 1576 1577 K_MGATE(G_SDMMC3, RCC_AHB2ENSETR, 16, 0), 1578 K_MGATE(G_USBO, RCC_AHB2ENSETR, 8, 0), 1579 K_MGATE(G_ADC12, RCC_AHB2ENSETR, 5, 0), 1580 K_GATE(G_DMAMUX, RCC_AHB2ENSETR, 2, 0), 1581 K_GATE(G_DMA2, RCC_AHB2ENSETR, 1, 0), 1582 K_GATE(G_DMA1, RCC_AHB2ENSETR, 0, 0), 1583 1584 K_GATE(G_IPCC, RCC_AHB3ENSETR, 12, 0), 1585 K_GATE(G_HSEM, RCC_AHB3ENSETR, 11, 0), 1586 K_GATE(G_CRC2, RCC_AHB3ENSETR, 7, 0), 1587 K_MGATE(G_RNG2, RCC_AHB3ENSETR, 6, 0), 1588 K_GATE(G_HASH2, RCC_AHB3ENSETR, 5, 0), 1589 K_GATE(G_CRYP2, RCC_AHB3ENSETR, 4, 0), 1590 K_GATE(G_DCMI, RCC_AHB3ENSETR, 0, 0), 1591 1592 K_GATE(G_GPIOK, RCC_AHB4ENSETR, 10, 0), 1593 K_GATE(G_GPIOJ, RCC_AHB4ENSETR, 9, 0), 1594 K_GATE(G_GPIOI, RCC_AHB4ENSETR, 8, 0), 1595 K_GATE(G_GPIOH, RCC_AHB4ENSETR, 7, 0), 1596 K_GATE(G_GPIOG, RCC_AHB4ENSETR, 6, 0), 1597 K_GATE(G_GPIOF, RCC_AHB4ENSETR, 5, 0), 1598 K_GATE(G_GPIOE, RCC_AHB4ENSETR, 4, 0), 1599 K_GATE(G_GPIOD, RCC_AHB4ENSETR, 3, 0), 1600 K_GATE(G_GPIOC, RCC_AHB4ENSETR, 2, 0), 1601 K_GATE(G_GPIOB, RCC_AHB4ENSETR, 1, 0), 1602 K_GATE(G_GPIOA, RCC_AHB4ENSETR, 0, 0), 1603 1604 K_GATE(G_BKPSRAM, RCC_AHB5ENSETR, 8, 0), 1605 K_MGATE(G_RNG1, RCC_AHB5ENSETR, 6, 0), 1606 K_GATE(G_HASH1, RCC_AHB5ENSETR, 5, 0), 1607 K_GATE(G_CRYP1, RCC_AHB5ENSETR, 4, 0), 1608 K_GATE(G_GPIOZ, RCC_AHB5ENSETR, 0, 0), 1609 1610 K_GATE(G_USBH, RCC_AHB6ENSETR, 24, 0), 1611 K_GATE(G_CRC1, RCC_AHB6ENSETR, 20, 0), 1612 K_MGATE(G_SDMMC2, RCC_AHB6ENSETR, 17, 0), 1613 K_MGATE(G_SDMMC1, RCC_AHB6ENSETR, 16, 0), 1614 K_MGATE(G_QSPI, RCC_AHB6ENSETR, 14, 0), 1615 K_MGATE(G_FMC, RCC_AHB6ENSETR, 12, 0), 1616 K_GATE(G_ETHMAC, RCC_AHB6ENSETR, 10, 0), 1617 K_GATE(G_ETHRX, RCC_AHB6ENSETR, 9, 0), 1618 K_GATE(G_ETHTX, RCC_AHB6ENSETR, 8, 0), 1619 K_GATE(G_ETHCK, RCC_AHB6ENSETR, 7, 0), 1620 K_MGATE(G_GPU, RCC_AHB6ENSETR, 5, 0), 1621 K_GATE(G_MDMA, RCC_AHB6ENSETR, 0, 0), 1622 K_GATE(G_ETHSTP, RCC_AHB6LPENSETR, 11, 0), 1623 }; 1624 1625 enum { 1626 M_SDMMC12, 1627 M_SDMMC3, 1628 M_FMC, 1629 M_QSPI, 1630 M_RNG1, 1631 M_RNG2, 1632 M_USBPHY, 1633 M_USBO, 1634 M_STGEN, 1635 M_SPDIF, 1636 M_SPI1, 1637 M_SPI23, 1638 M_SPI45, 1639 M_SPI6, 1640 M_CEC, 1641 M_I2C12, 1642 M_I2C35, 1643 M_I2C46, 1644 M_LPTIM1, 1645 M_LPTIM23, 1646 M_LPTIM45, 1647 M_USART1, 1648 M_UART24, 1649 M_UART35, 1650 M_USART6, 1651 M_UART78, 1652 M_SAI1, 1653 M_SAI2, 1654 M_SAI3, 1655 M_SAI4, 1656 M_DSI, 1657 M_FDCAN, 1658 M_ADC12, 1659 M_ETHCK, 1660 M_CKPER, 1661 M_LAST 1662 }; 1663 1664 static struct stm32_mmux ker_mux[M_LAST]; 1665 1666 #define _K_MUX(_id, _offset, _shift, _width, _mux_flags, _mmux, _ops)\ 1667 [_id] = {\ 1668 &(struct mux_cfg) {\ 1669 .reg_off = _offset,\ 1670 .shift = _shift,\ 1671 .width = _width,\ 1672 .mux_flags = _mux_flags,\ 1673 .table = NULL,\ 1674 },\ 1675 .mmux = _mmux,\ 1676 .ops = _ops,\ 1677 } 1678 1679 #define K_MUX(_id, _offset, _shift, _width, _mux_flags)\ 1680 _K_MUX(_id, _offset, _shift, _width, _mux_flags,\ 1681 NULL, NULL) 1682 1683 #define K_MMUX(_id, _offset, _shift, _width, _mux_flags)\ 1684 _K_MUX(_id, _offset, _shift, _width, _mux_flags,\ 1685 &ker_mux[_id], &clk_mmux_ops) 1686 1687 static const struct stm32_mux_cfg ker_mux_cfg[M_LAST] = { 1688 /* Kernel multi mux */ 1689 K_MMUX(M_SDMMC12, RCC_SDMMC12CKSELR, 0, 3, 0), 1690 K_MMUX(M_SPI23, RCC_SPI2S23CKSELR, 0, 3, 0), 1691 K_MMUX(M_SPI45, RCC_SPI2S45CKSELR, 0, 3, 0), 1692 K_MMUX(M_I2C12, RCC_I2C12CKSELR, 0, 3, 0), 1693 K_MMUX(M_I2C35, RCC_I2C35CKSELR, 0, 3, 0), 1694 K_MMUX(M_LPTIM23, RCC_LPTIM23CKSELR, 0, 3, 0), 1695 K_MMUX(M_LPTIM45, RCC_LPTIM45CKSELR, 0, 3, 0), 1696 K_MMUX(M_UART24, RCC_UART24CKSELR, 0, 3, 0), 1697 K_MMUX(M_UART35, RCC_UART35CKSELR, 0, 3, 0), 1698 K_MMUX(M_UART78, RCC_UART78CKSELR, 0, 3, 0), 1699 K_MMUX(M_SAI1, RCC_SAI1CKSELR, 0, 3, 0), 1700 K_MMUX(M_ETHCK, RCC_ETHCKSELR, 0, 2, 0), 1701 K_MMUX(M_I2C46, RCC_I2C46CKSELR, 0, 3, 0), 1702 1703 /* Kernel simple mux */ 1704 K_MUX(M_RNG2, RCC_RNG2CKSELR, 0, 2, 0), 1705 K_MUX(M_SDMMC3, RCC_SDMMC3CKSELR, 0, 3, 0), 1706 K_MUX(M_FMC, RCC_FMCCKSELR, 0, 2, 0), 1707 K_MUX(M_QSPI, RCC_QSPICKSELR, 0, 2, 0), 1708 K_MUX(M_USBPHY, RCC_USBCKSELR, 0, 2, 0), 1709 K_MUX(M_USBO, RCC_USBCKSELR, 4, 1, 0), 1710 K_MUX(M_SPDIF, RCC_SPDIFCKSELR, 0, 2, 0), 1711 K_MUX(M_SPI1, RCC_SPI2S1CKSELR, 0, 3, 0), 1712 K_MUX(M_CEC, RCC_CECCKSELR, 0, 2, 0), 1713 K_MUX(M_LPTIM1, RCC_LPTIM1CKSELR, 0, 3, 0), 1714 K_MUX(M_USART6, RCC_UART6CKSELR, 0, 3, 0), 1715 K_MUX(M_FDCAN, RCC_FDCANCKSELR, 0, 2, 0), 1716 K_MUX(M_SAI2, RCC_SAI2CKSELR, 0, 3, 0), 1717 K_MUX(M_SAI3, RCC_SAI3CKSELR, 0, 3, 0), 1718 K_MUX(M_SAI4, RCC_SAI4CKSELR, 0, 3, 0), 1719 K_MUX(M_ADC12, RCC_ADCCKSELR, 0, 2, 0), 1720 K_MUX(M_DSI, RCC_DSICKSELR, 0, 1, 0), 1721 K_MUX(M_CKPER, RCC_CPERCKSELR, 0, 2, 0), 1722 K_MUX(M_RNG1, RCC_RNG1CKSELR, 0, 2, 0), 1723 K_MUX(M_STGEN, RCC_STGENCKSELR, 0, 2, 0), 1724 K_MUX(M_USART1, RCC_UART1CKSELR, 0, 3, 0), 1725 K_MUX(M_SPI6, RCC_SPI6CKSELR, 0, 3, 0), 1726 }; 1727 1728 static const struct clock_config stm32mp1_clock_cfg[] = { 1729 /* External / Internal Oscillators */ 1730 GATE_MP1(CK_HSE, "ck_hse", "clk-hse", 0, RCC_OCENSETR, 8, 0), 1731 /* ck_csi is used by IO compensation and should be critical */ 1732 GATE_MP1(CK_CSI, "ck_csi", "clk-csi", CLK_IS_CRITICAL, 1733 RCC_OCENSETR, 4, 0), 1734 COMPOSITE(CK_HSI, "ck_hsi", PARENT("clk-hsi"), 0, 1735 _GATE_MP1(RCC_OCENSETR, 0, 0), 1736 _NO_MUX, 1737 _DIV(RCC_HSICFGR, 0, 2, CLK_DIVIDER_POWER_OF_TWO | 1738 CLK_DIVIDER_READ_ONLY, NULL)), 1739 GATE(CK_LSI, "ck_lsi", "clk-lsi", 0, RCC_RDLSICR, 0, 0), 1740 GATE(CK_LSE, "ck_lse", "clk-lse", 0, RCC_BDCR, 0, 0), 1741 1742 FIXED_FACTOR(CK_HSE_DIV2, "clk-hse-div2", "ck_hse", 0, 1, 2), 1743 1744 /* PLLs */ 1745 PLL(PLL1, "pll1", ref12_parents, 0, RCC_PLL1CR, RCC_RCK12SELR), 1746 PLL(PLL2, "pll2", ref12_parents, 0, RCC_PLL2CR, RCC_RCK12SELR), 1747 PLL(PLL3, "pll3", ref3_parents, 0, RCC_PLL3CR, RCC_RCK3SELR), 1748 PLL(PLL4, "pll4", ref4_parents, 0, RCC_PLL4CR, RCC_RCK4SELR), 1749 1750 /* ODF */ 1751 COMPOSITE(PLL1_P, "pll1_p", PARENT("pll1"), 0, 1752 _GATE(RCC_PLL1CR, 4, 0), 1753 _NO_MUX, 1754 _DIV(RCC_PLL1CFGR2, 0, 7, 0, NULL)), 1755 1756 COMPOSITE(PLL2_P, "pll2_p", PARENT("pll2"), 0, 1757 _GATE(RCC_PLL2CR, 4, 0), 1758 _NO_MUX, 1759 _DIV(RCC_PLL2CFGR2, 0, 7, 0, NULL)), 1760 1761 COMPOSITE(PLL2_Q, "pll2_q", PARENT("pll2"), 0, 1762 _GATE(RCC_PLL2CR, 5, 0), 1763 _NO_MUX, 1764 _DIV(RCC_PLL2CFGR2, 8, 7, 0, NULL)), 1765 1766 COMPOSITE(PLL2_R, "pll2_r", PARENT("pll2"), CLK_IS_CRITICAL, 1767 _GATE(RCC_PLL2CR, 6, 0), 1768 _NO_MUX, 1769 _DIV(RCC_PLL2CFGR2, 16, 7, 0, NULL)), 1770 1771 COMPOSITE(PLL3_P, "pll3_p", PARENT("pll3"), 0, 1772 _GATE(RCC_PLL3CR, 4, 0), 1773 _NO_MUX, 1774 _DIV(RCC_PLL3CFGR2, 0, 7, 0, NULL)), 1775 1776 COMPOSITE(PLL3_Q, "pll3_q", PARENT("pll3"), 0, 1777 _GATE(RCC_PLL3CR, 5, 0), 1778 _NO_MUX, 1779 _DIV(RCC_PLL3CFGR2, 8, 7, 0, NULL)), 1780 1781 COMPOSITE(PLL3_R, "pll3_r", PARENT("pll3"), 0, 1782 _GATE(RCC_PLL3CR, 6, 0), 1783 _NO_MUX, 1784 _DIV(RCC_PLL3CFGR2, 16, 7, 0, NULL)), 1785 1786 COMPOSITE(PLL4_P, "pll4_p", PARENT("pll4"), 0, 1787 _GATE(RCC_PLL4CR, 4, 0), 1788 _NO_MUX, 1789 _DIV(RCC_PLL4CFGR2, 0, 7, 0, NULL)), 1790 1791 COMPOSITE(PLL4_Q, "pll4_q", PARENT("pll4"), 0, 1792 _GATE(RCC_PLL4CR, 5, 0), 1793 _NO_MUX, 1794 _DIV(RCC_PLL4CFGR2, 8, 7, 0, NULL)), 1795 1796 COMPOSITE(PLL4_R, "pll4_r", PARENT("pll4"), 0, 1797 _GATE(RCC_PLL4CR, 6, 0), 1798 _NO_MUX, 1799 _DIV(RCC_PLL4CFGR2, 16, 7, 0, NULL)), 1800 1801 /* MUX system clocks */ 1802 MUX(CK_PER, "ck_per", per_src, CLK_OPS_PARENT_ENABLE, 1803 RCC_CPERCKSELR, 0, 2, 0), 1804 1805 MUX(CK_MPU, "ck_mpu", cpu_src, CLK_OPS_PARENT_ENABLE | 1806 CLK_IS_CRITICAL, RCC_MPCKSELR, 0, 2, 0), 1807 1808 COMPOSITE(CK_AXI, "ck_axi", axi_src, CLK_IS_CRITICAL | 1809 CLK_OPS_PARENT_ENABLE, 1810 _NO_GATE, 1811 _MUX(RCC_ASSCKSELR, 0, 2, 0), 1812 _DIV(RCC_AXIDIVR, 0, 3, 0, axi_div_table)), 1813 1814 COMPOSITE(CK_MCU, "ck_mcu", mcu_src, CLK_IS_CRITICAL | 1815 CLK_OPS_PARENT_ENABLE, 1816 _NO_GATE, 1817 _MUX(RCC_MSSCKSELR, 0, 2, 0), 1818 _DIV(RCC_MCUDIVR, 0, 4, 0, mcu_div_table)), 1819 1820 DIV_TABLE(NO_ID, "pclk1", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB1DIVR, 0, 1821 3, CLK_DIVIDER_READ_ONLY, apb_div_table), 1822 1823 DIV_TABLE(NO_ID, "pclk2", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB2DIVR, 0, 1824 3, CLK_DIVIDER_READ_ONLY, apb_div_table), 1825 1826 DIV_TABLE(NO_ID, "pclk3", "ck_mcu", CLK_IGNORE_UNUSED, RCC_APB3DIVR, 0, 1827 3, CLK_DIVIDER_READ_ONLY, apb_div_table), 1828 1829 DIV_TABLE(NO_ID, "pclk4", "ck_axi", CLK_IGNORE_UNUSED, RCC_APB4DIVR, 0, 1830 3, CLK_DIVIDER_READ_ONLY, apb_div_table), 1831 1832 DIV_TABLE(NO_ID, "pclk5", "ck_axi", CLK_IGNORE_UNUSED, RCC_APB5DIVR, 0, 1833 3, CLK_DIVIDER_READ_ONLY, apb_div_table), 1834 1835 /* Kernel Timers */ 1836 STM32_CKTIM("ck1_tim", "pclk1", 0, RCC_APB1DIVR, RCC_TIMG1PRER), 1837 STM32_CKTIM("ck2_tim", "pclk2", 0, RCC_APB2DIVR, RCC_TIMG2PRER), 1838 1839 STM32_TIM(TIM2_K, "tim2_k", "ck1_tim", RCC_APB1ENSETR, 0), 1840 STM32_TIM(TIM3_K, "tim3_k", "ck1_tim", RCC_APB1ENSETR, 1), 1841 STM32_TIM(TIM4_K, "tim4_k", "ck1_tim", RCC_APB1ENSETR, 2), 1842 STM32_TIM(TIM5_K, "tim5_k", "ck1_tim", RCC_APB1ENSETR, 3), 1843 STM32_TIM(TIM6_K, "tim6_k", "ck1_tim", RCC_APB1ENSETR, 4), 1844 STM32_TIM(TIM7_K, "tim7_k", "ck1_tim", RCC_APB1ENSETR, 5), 1845 STM32_TIM(TIM12_K, "tim12_k", "ck1_tim", RCC_APB1ENSETR, 6), 1846 STM32_TIM(TIM13_K, "tim13_k", "ck1_tim", RCC_APB1ENSETR, 7), 1847 STM32_TIM(TIM14_K, "tim14_k", "ck1_tim", RCC_APB1ENSETR, 8), 1848 STM32_TIM(TIM1_K, "tim1_k", "ck2_tim", RCC_APB2ENSETR, 0), 1849 STM32_TIM(TIM8_K, "tim8_k", "ck2_tim", RCC_APB2ENSETR, 1), 1850 STM32_TIM(TIM15_K, "tim15_k", "ck2_tim", RCC_APB2ENSETR, 2), 1851 STM32_TIM(TIM16_K, "tim16_k", "ck2_tim", RCC_APB2ENSETR, 3), 1852 STM32_TIM(TIM17_K, "tim17_k", "ck2_tim", RCC_APB2ENSETR, 4), 1853 1854 /* Peripheral clocks */ 1855 PCLK(TIM2, "tim2", "pclk1", CLK_IGNORE_UNUSED, G_TIM2), 1856 PCLK(TIM3, "tim3", "pclk1", CLK_IGNORE_UNUSED, G_TIM3), 1857 PCLK(TIM4, "tim4", "pclk1", CLK_IGNORE_UNUSED, G_TIM4), 1858 PCLK(TIM5, "tim5", "pclk1", CLK_IGNORE_UNUSED, G_TIM5), 1859 PCLK(TIM6, "tim6", "pclk1", CLK_IGNORE_UNUSED, G_TIM6), 1860 PCLK(TIM7, "tim7", "pclk1", CLK_IGNORE_UNUSED, G_TIM7), 1861 PCLK(TIM12, "tim12", "pclk1", CLK_IGNORE_UNUSED, G_TIM12), 1862 PCLK(TIM13, "tim13", "pclk1", CLK_IGNORE_UNUSED, G_TIM13), 1863 PCLK(TIM14, "tim14", "pclk1", CLK_IGNORE_UNUSED, G_TIM14), 1864 PCLK(LPTIM1, "lptim1", "pclk1", 0, G_LPTIM1), 1865 PCLK(SPI2, "spi2", "pclk1", 0, G_SPI2), 1866 PCLK(SPI3, "spi3", "pclk1", 0, G_SPI3), 1867 PCLK(USART2, "usart2", "pclk1", 0, G_USART2), 1868 PCLK(USART3, "usart3", "pclk1", 0, G_USART3), 1869 PCLK(UART4, "uart4", "pclk1", 0, G_UART4), 1870 PCLK(UART5, "uart5", "pclk1", 0, G_UART5), 1871 PCLK(UART7, "uart7", "pclk1", 0, G_UART7), 1872 PCLK(UART8, "uart8", "pclk1", 0, G_UART8), 1873 PCLK(I2C1, "i2c1", "pclk1", 0, G_I2C1), 1874 PCLK(I2C2, "i2c2", "pclk1", 0, G_I2C2), 1875 PCLK(I2C3, "i2c3", "pclk1", 0, G_I2C3), 1876 PCLK(I2C5, "i2c5", "pclk1", 0, G_I2C5), 1877 PCLK(SPDIF, "spdif", "pclk1", 0, G_SPDIF), 1878 PCLK(CEC, "cec", "pclk1", 0, G_CEC), 1879 PCLK(DAC12, "dac12", "pclk1", 0, G_DAC12), 1880 PCLK(MDIO, "mdio", "pclk1", 0, G_MDIO), 1881 PCLK(TIM1, "tim1", "pclk2", CLK_IGNORE_UNUSED, G_TIM1), 1882 PCLK(TIM8, "tim8", "pclk2", CLK_IGNORE_UNUSED, G_TIM8), 1883 PCLK(TIM15, "tim15", "pclk2", CLK_IGNORE_UNUSED, G_TIM15), 1884 PCLK(TIM16, "tim16", "pclk2", CLK_IGNORE_UNUSED, G_TIM16), 1885 PCLK(TIM17, "tim17", "pclk2", CLK_IGNORE_UNUSED, G_TIM17), 1886 PCLK(SPI1, "spi1", "pclk2", 0, G_SPI1), 1887 PCLK(SPI4, "spi4", "pclk2", 0, G_SPI4), 1888 PCLK(SPI5, "spi5", "pclk2", 0, G_SPI5), 1889 PCLK(USART6, "usart6", "pclk2", 0, G_USART6), 1890 PCLK(SAI1, "sai1", "pclk2", 0, G_SAI1), 1891 PCLK(SAI2, "sai2", "pclk2", 0, G_SAI2), 1892 PCLK(SAI3, "sai3", "pclk2", 0, G_SAI3), 1893 PCLK(DFSDM, "dfsdm", "pclk2", 0, G_DFSDM), 1894 PCLK(FDCAN, "fdcan", "pclk2", 0, G_FDCAN), 1895 PCLK(LPTIM2, "lptim2", "pclk3", 0, G_LPTIM2), 1896 PCLK(LPTIM3, "lptim3", "pclk3", 0, G_LPTIM3), 1897 PCLK(LPTIM4, "lptim4", "pclk3", 0, G_LPTIM4), 1898 PCLK(LPTIM5, "lptim5", "pclk3", 0, G_LPTIM5), 1899 PCLK(SAI4, "sai4", "pclk3", 0, G_SAI4), 1900 PCLK(SYSCFG, "syscfg", "pclk3", 0, G_SYSCFG), 1901 PCLK(VREF, "vref", "pclk3", 13, G_VREF), 1902 PCLK(TMPSENS, "tmpsens", "pclk3", 0, G_TMPSENS), 1903 PCLK(PMBCTRL, "pmbctrl", "pclk3", 0, G_PMBCTRL), 1904 PCLK(HDP, "hdp", "pclk3", 0, G_HDP), 1905 PCLK(LTDC, "ltdc", "pclk4", 0, G_LTDC), 1906 PCLK(DSI, "dsi", "pclk4", 0, G_DSI), 1907 PCLK(IWDG2, "iwdg2", "pclk4", 0, G_IWDG2), 1908 PCLK(USBPHY, "usbphy", "pclk4", 0, G_USBPHY), 1909 PCLK(STGENRO, "stgenro", "pclk4", 0, G_STGENRO), 1910 PCLK(SPI6, "spi6", "pclk5", 0, G_SPI6), 1911 PCLK(I2C4, "i2c4", "pclk5", 0, G_I2C4), 1912 PCLK(I2C6, "i2c6", "pclk5", 0, G_I2C6), 1913 PCLK(USART1, "usart1", "pclk5", 0, G_USART1), 1914 PCLK(RTCAPB, "rtcapb", "pclk5", CLK_IGNORE_UNUSED | 1915 CLK_IS_CRITICAL, G_RTCAPB), 1916 PCLK(TZC1, "tzc1", "ck_axi", CLK_IGNORE_UNUSED, G_TZC1), 1917 PCLK(TZC2, "tzc2", "ck_axi", CLK_IGNORE_UNUSED, G_TZC2), 1918 PCLK(TZPC, "tzpc", "pclk5", CLK_IGNORE_UNUSED, G_TZPC), 1919 PCLK(IWDG1, "iwdg1", "pclk5", 0, G_IWDG1), 1920 PCLK(BSEC, "bsec", "pclk5", CLK_IGNORE_UNUSED, G_BSEC), 1921 PCLK(STGEN, "stgen", "pclk5", CLK_IGNORE_UNUSED, G_STGEN), 1922 PCLK(DMA1, "dma1", "ck_mcu", 0, G_DMA1), 1923 PCLK(DMA2, "dma2", "ck_mcu", 0, G_DMA2), 1924 PCLK(DMAMUX, "dmamux", "ck_mcu", 0, G_DMAMUX), 1925 PCLK(ADC12, "adc12", "ck_mcu", 0, G_ADC12), 1926 PCLK(USBO, "usbo", "ck_mcu", 0, G_USBO), 1927 PCLK(SDMMC3, "sdmmc3", "ck_mcu", 0, G_SDMMC3), 1928 PCLK(DCMI, "dcmi", "ck_mcu", 0, G_DCMI), 1929 PCLK(CRYP2, "cryp2", "ck_mcu", 0, G_CRYP2), 1930 PCLK(HASH2, "hash2", "ck_mcu", 0, G_HASH2), 1931 PCLK(RNG2, "rng2", "ck_mcu", 0, G_RNG2), 1932 PCLK(CRC2, "crc2", "ck_mcu", 0, G_CRC2), 1933 PCLK(HSEM, "hsem", "ck_mcu", 0, G_HSEM), 1934 PCLK(IPCC, "ipcc", "ck_mcu", 0, G_IPCC), 1935 PCLK(GPIOA, "gpioa", "ck_mcu", 0, G_GPIOA), 1936 PCLK(GPIOB, "gpiob", "ck_mcu", 0, G_GPIOB), 1937 PCLK(GPIOC, "gpioc", "ck_mcu", 0, G_GPIOC), 1938 PCLK(GPIOD, "gpiod", "ck_mcu", 0, G_GPIOD), 1939 PCLK(GPIOE, "gpioe", "ck_mcu", 0, G_GPIOE), 1940 PCLK(GPIOF, "gpiof", "ck_mcu", 0, G_GPIOF), 1941 PCLK(GPIOG, "gpiog", "ck_mcu", 0, G_GPIOG), 1942 PCLK(GPIOH, "gpioh", "ck_mcu", 0, G_GPIOH), 1943 PCLK(GPIOI, "gpioi", "ck_mcu", 0, G_GPIOI), 1944 PCLK(GPIOJ, "gpioj", "ck_mcu", 0, G_GPIOJ), 1945 PCLK(GPIOK, "gpiok", "ck_mcu", 0, G_GPIOK), 1946 PCLK(GPIOZ, "gpioz", "ck_axi", CLK_IGNORE_UNUSED, G_GPIOZ), 1947 PCLK(CRYP1, "cryp1", "ck_axi", CLK_IGNORE_UNUSED, G_CRYP1), 1948 PCLK(HASH1, "hash1", "ck_axi", CLK_IGNORE_UNUSED, G_HASH1), 1949 PCLK(RNG1, "rng1", "ck_axi", 0, G_RNG1), 1950 PCLK(BKPSRAM, "bkpsram", "ck_axi", CLK_IGNORE_UNUSED, G_BKPSRAM), 1951 PCLK(MDMA, "mdma", "ck_axi", 0, G_MDMA), 1952 PCLK(GPU, "gpu", "ck_axi", 0, G_GPU), 1953 PCLK(ETHTX, "ethtx", "ck_axi", 0, G_ETHTX), 1954 PCLK(ETHRX, "ethrx", "ck_axi", 0, G_ETHRX), 1955 PCLK(ETHMAC, "ethmac", "ck_axi", 0, G_ETHMAC), 1956 PCLK(FMC, "fmc", "ck_axi", CLK_IGNORE_UNUSED, G_FMC), 1957 PCLK(QSPI, "qspi", "ck_axi", CLK_IGNORE_UNUSED, G_QSPI), 1958 PCLK(SDMMC1, "sdmmc1", "ck_axi", 0, G_SDMMC1), 1959 PCLK(SDMMC2, "sdmmc2", "ck_axi", 0, G_SDMMC2), 1960 PCLK(CRC1, "crc1", "ck_axi", 0, G_CRC1), 1961 PCLK(USBH, "usbh", "ck_axi", 0, G_USBH), 1962 PCLK(ETHSTP, "ethstp", "ck_axi", 0, G_ETHSTP), 1963 PCLK(DDRPERFM, "ddrperfm", "pclk4", 0, G_DDRPERFM), 1964 1965 /* Kernel clocks */ 1966 KCLK(SDMMC1_K, "sdmmc1_k", sdmmc12_src, 0, G_SDMMC1, M_SDMMC12), 1967 KCLK(SDMMC2_K, "sdmmc2_k", sdmmc12_src, 0, G_SDMMC2, M_SDMMC12), 1968 KCLK(SDMMC3_K, "sdmmc3_k", sdmmc3_src, 0, G_SDMMC3, M_SDMMC3), 1969 KCLK(FMC_K, "fmc_k", fmc_src, 0, G_FMC, M_FMC), 1970 KCLK(QSPI_K, "qspi_k", qspi_src, 0, G_QSPI, M_QSPI), 1971 KCLK(RNG1_K, "rng1_k", rng_src, 0, G_RNG1, M_RNG1), 1972 KCLK(RNG2_K, "rng2_k", rng_src, 0, G_RNG2, M_RNG2), 1973 KCLK(USBPHY_K, "usbphy_k", usbphy_src, 0, G_USBPHY, M_USBPHY), 1974 KCLK(STGEN_K, "stgen_k", stgen_src, CLK_IS_CRITICAL, G_STGEN, M_STGEN), 1975 KCLK(SPDIF_K, "spdif_k", spdif_src, 0, G_SPDIF, M_SPDIF), 1976 KCLK(SPI1_K, "spi1_k", spi123_src, 0, G_SPI1, M_SPI1), 1977 KCLK(SPI2_K, "spi2_k", spi123_src, 0, G_SPI2, M_SPI23), 1978 KCLK(SPI3_K, "spi3_k", spi123_src, 0, G_SPI3, M_SPI23), 1979 KCLK(SPI4_K, "spi4_k", spi45_src, 0, G_SPI4, M_SPI45), 1980 KCLK(SPI5_K, "spi5_k", spi45_src, 0, G_SPI5, M_SPI45), 1981 KCLK(SPI6_K, "spi6_k", spi6_src, 0, G_SPI6, M_SPI6), 1982 KCLK(CEC_K, "cec_k", cec_src, 0, G_CEC, M_CEC), 1983 KCLK(I2C1_K, "i2c1_k", i2c12_src, 0, G_I2C1, M_I2C12), 1984 KCLK(I2C2_K, "i2c2_k", i2c12_src, 0, G_I2C2, M_I2C12), 1985 KCLK(I2C3_K, "i2c3_k", i2c35_src, 0, G_I2C3, M_I2C35), 1986 KCLK(I2C5_K, "i2c5_k", i2c35_src, 0, G_I2C5, M_I2C35), 1987 KCLK(I2C4_K, "i2c4_k", i2c46_src, 0, G_I2C4, M_I2C46), 1988 KCLK(I2C6_K, "i2c6_k", i2c46_src, 0, G_I2C6, M_I2C46), 1989 KCLK(LPTIM1_K, "lptim1_k", lptim1_src, 0, G_LPTIM1, M_LPTIM1), 1990 KCLK(LPTIM2_K, "lptim2_k", lptim23_src, 0, G_LPTIM2, M_LPTIM23), 1991 KCLK(LPTIM3_K, "lptim3_k", lptim23_src, 0, G_LPTIM3, M_LPTIM23), 1992 KCLK(LPTIM4_K, "lptim4_k", lptim45_src, 0, G_LPTIM4, M_LPTIM45), 1993 KCLK(LPTIM5_K, "lptim5_k", lptim45_src, 0, G_LPTIM5, M_LPTIM45), 1994 KCLK(USART1_K, "usart1_k", usart1_src, 0, G_USART1, M_USART1), 1995 KCLK(USART2_K, "usart2_k", usart234578_src, 0, G_USART2, M_UART24), 1996 KCLK(USART3_K, "usart3_k", usart234578_src, 0, G_USART3, M_UART35), 1997 KCLK(UART4_K, "uart4_k", usart234578_src, 0, G_UART4, M_UART24), 1998 KCLK(UART5_K, "uart5_k", usart234578_src, 0, G_UART5, M_UART35), 1999 KCLK(USART6_K, "uart6_k", usart6_src, 0, G_USART6, M_USART6), 2000 KCLK(UART7_K, "uart7_k", usart234578_src, 0, G_UART7, M_UART78), 2001 KCLK(UART8_K, "uart8_k", usart234578_src, 0, G_UART8, M_UART78), 2002 KCLK(FDCAN_K, "fdcan_k", fdcan_src, 0, G_FDCAN, M_FDCAN), 2003 KCLK(SAI1_K, "sai1_k", sai_src, 0, G_SAI1, M_SAI1), 2004 KCLK(SAI2_K, "sai2_k", sai2_src, 0, G_SAI2, M_SAI2), 2005 KCLK(SAI3_K, "sai3_k", sai_src, 0, G_SAI3, M_SAI3), 2006 KCLK(SAI4_K, "sai4_k", sai_src, 0, G_SAI4, M_SAI4), 2007 KCLK(ADC12_K, "adc12_k", adc12_src, 0, G_ADC12, M_ADC12), 2008 KCLK(DSI_K, "dsi_k", dsi_src, 0, G_DSI, M_DSI), 2009 KCLK(ADFSDM_K, "adfsdm_k", sai_src, 0, G_ADFSDM, M_SAI1), 2010 KCLK(USBO_K, "usbo_k", usbo_src, 0, G_USBO, M_USBO), 2011 KCLK(ETHCK_K, "ethck_k", eth_src, 0, G_ETHCK, M_ETHCK), 2012 2013 /* Particulary Kernel Clocks (no mux or no gate) */ 2014 MGATE_MP1(DFSDM_K, "dfsdm_k", "ck_mcu", 0, G_DFSDM), 2015 MGATE_MP1(DSI_PX, "dsi_px", "pll4_q", CLK_SET_RATE_PARENT, G_DSI), 2016 MGATE_MP1(LTDC_PX, "ltdc_px", "pll4_q", CLK_SET_RATE_PARENT, G_LTDC), 2017 MGATE_MP1(GPU_K, "gpu_k", "pll2_q", 0, G_GPU), 2018 MGATE_MP1(DAC12_K, "dac12_k", "ck_lsi", 0, G_DAC12), 2019 2020 COMPOSITE(ETHPTP_K, "ethptp_k", eth_src, CLK_OPS_PARENT_ENABLE | 2021 CLK_SET_RATE_NO_REPARENT, 2022 _NO_GATE, 2023 _MMUX(M_ETHCK), 2024 _DIV(RCC_ETHCKSELR, 4, 4, 0, NULL)), 2025 2026 /* RTC clock */ 2027 COMPOSITE(RTC, "ck_rtc", rtc_src, CLK_OPS_PARENT_ENABLE, 2028 _GATE(RCC_BDCR, 20, 0), 2029 _MUX(RCC_BDCR, 16, 2, 0), 2030 _DIV_RTC(RCC_RTCDIVR, 0, 6, 0, NULL)), 2031 2032 /* MCO clocks */ 2033 COMPOSITE(CK_MCO1, "ck_mco1", mco1_src, CLK_OPS_PARENT_ENABLE | 2034 CLK_SET_RATE_NO_REPARENT, 2035 _GATE(RCC_MCO1CFGR, 12, 0), 2036 _MUX(RCC_MCO1CFGR, 0, 3, 0), 2037 _DIV(RCC_MCO1CFGR, 4, 4, 0, NULL)), 2038 2039 COMPOSITE(CK_MCO2, "ck_mco2", mco2_src, CLK_OPS_PARENT_ENABLE | 2040 CLK_SET_RATE_NO_REPARENT, 2041 _GATE(RCC_MCO2CFGR, 12, 0), 2042 _MUX(RCC_MCO2CFGR, 0, 3, 0), 2043 _DIV(RCC_MCO2CFGR, 4, 4, 0, NULL)), 2044 2045 /* Debug clocks */ 2046 GATE(CK_DBG, "ck_sys_dbg", "ck_axi", CLK_IGNORE_UNUSED, 2047 RCC_DBGCFGR, 8, 0), 2048 2049 COMPOSITE(CK_TRACE, "ck_trace", ck_trace_src, CLK_OPS_PARENT_ENABLE, 2050 _GATE(RCC_DBGCFGR, 9, 0), 2051 _NO_MUX, 2052 _DIV(RCC_DBGCFGR, 0, 3, 0, ck_trace_div_table)), 2053 }; 2054 2055 static const u32 stm32mp1_clock_secured[] = { 2056 CK_HSE, 2057 CK_HSI, 2058 CK_CSI, 2059 CK_LSI, 2060 CK_LSE, 2061 PLL1, 2062 PLL2, 2063 PLL1_P, 2064 PLL2_P, 2065 PLL2_Q, 2066 PLL2_R, 2067 CK_MPU, 2068 CK_AXI, 2069 SPI6, 2070 I2C4, 2071 I2C6, 2072 USART1, 2073 RTCAPB, 2074 TZC1, 2075 TZC2, 2076 TZPC, 2077 IWDG1, 2078 BSEC, 2079 STGEN, 2080 GPIOZ, 2081 CRYP1, 2082 HASH1, 2083 RNG1, 2084 BKPSRAM, 2085 RNG1_K, 2086 STGEN_K, 2087 SPI6_K, 2088 I2C4_K, 2089 I2C6_K, 2090 USART1_K, 2091 RTC, 2092 }; 2093 2094 static bool stm32_check_security(const struct clock_config *cfg) 2095 { 2096 int i; 2097 2098 for (i = 0; i < ARRAY_SIZE(stm32mp1_clock_secured); i++) 2099 if (cfg->id == stm32mp1_clock_secured[i]) 2100 return true; 2101 return false; 2102 } 2103 2104 struct stm32_rcc_match_data { 2105 const struct clock_config *cfg; 2106 unsigned int num; 2107 unsigned int maxbinding; 2108 u32 clear_offset; 2109 bool (*check_security)(const struct clock_config *cfg); 2110 }; 2111 2112 static struct stm32_rcc_match_data stm32mp1_data = { 2113 .cfg = stm32mp1_clock_cfg, 2114 .num = ARRAY_SIZE(stm32mp1_clock_cfg), 2115 .maxbinding = STM32MP1_LAST_CLK, 2116 .clear_offset = RCC_CLR, 2117 }; 2118 2119 static struct stm32_rcc_match_data stm32mp1_data_secure = { 2120 .cfg = stm32mp1_clock_cfg, 2121 .num = ARRAY_SIZE(stm32mp1_clock_cfg), 2122 .maxbinding = STM32MP1_LAST_CLK, 2123 .clear_offset = RCC_CLR, 2124 .check_security = &stm32_check_security 2125 }; 2126 2127 static const struct of_device_id stm32mp1_match_data[] = { 2128 { 2129 .compatible = "st,stm32mp1-rcc", 2130 .data = &stm32mp1_data, 2131 }, 2132 { 2133 .compatible = "st,stm32mp1-rcc-secure", 2134 .data = &stm32mp1_data_secure, 2135 }, 2136 { } 2137 }; 2138 MODULE_DEVICE_TABLE(of, stm32mp1_match_data); 2139 2140 static int stm32_register_hw_clk(struct device *dev, 2141 struct clk_hw_onecell_data *clk_data, 2142 void __iomem *base, spinlock_t *lock, 2143 const struct clock_config *cfg) 2144 { 2145 struct clk_hw **hws; 2146 struct clk_hw *hw = ERR_PTR(-ENOENT); 2147 2148 hws = clk_data->hws; 2149 2150 if (cfg->func) 2151 hw = (*cfg->func)(dev, clk_data, base, lock, cfg); 2152 2153 if (IS_ERR(hw)) { 2154 pr_err("Unable to register %s\n", cfg->name); 2155 return PTR_ERR(hw); 2156 } 2157 2158 if (cfg->id != NO_ID) 2159 hws[cfg->id] = hw; 2160 2161 return 0; 2162 } 2163 2164 #define STM32_RESET_ID_MASK GENMASK(15, 0) 2165 2166 struct stm32_reset_data { 2167 /* reset lock */ 2168 spinlock_t lock; 2169 struct reset_controller_dev rcdev; 2170 void __iomem *membase; 2171 u32 clear_offset; 2172 }; 2173 2174 static inline struct stm32_reset_data * 2175 to_stm32_reset_data(struct reset_controller_dev *rcdev) 2176 { 2177 return container_of(rcdev, struct stm32_reset_data, rcdev); 2178 } 2179 2180 static int stm32_reset_update(struct reset_controller_dev *rcdev, 2181 unsigned long id, bool assert) 2182 { 2183 struct stm32_reset_data *data = to_stm32_reset_data(rcdev); 2184 int reg_width = sizeof(u32); 2185 int bank = id / (reg_width * BITS_PER_BYTE); 2186 int offset = id % (reg_width * BITS_PER_BYTE); 2187 2188 if (data->clear_offset) { 2189 void __iomem *addr; 2190 2191 addr = data->membase + (bank * reg_width); 2192 if (!assert) 2193 addr += data->clear_offset; 2194 2195 writel(BIT(offset), addr); 2196 2197 } else { 2198 unsigned long flags; 2199 u32 reg; 2200 2201 spin_lock_irqsave(&data->lock, flags); 2202 2203 reg = readl(data->membase + (bank * reg_width)); 2204 2205 if (assert) 2206 reg |= BIT(offset); 2207 else 2208 reg &= ~BIT(offset); 2209 2210 writel(reg, data->membase + (bank * reg_width)); 2211 2212 spin_unlock_irqrestore(&data->lock, flags); 2213 } 2214 2215 return 0; 2216 } 2217 2218 static int stm32_reset_assert(struct reset_controller_dev *rcdev, 2219 unsigned long id) 2220 { 2221 return stm32_reset_update(rcdev, id, true); 2222 } 2223 2224 static int stm32_reset_deassert(struct reset_controller_dev *rcdev, 2225 unsigned long id) 2226 { 2227 return stm32_reset_update(rcdev, id, false); 2228 } 2229 2230 static int stm32_reset_status(struct reset_controller_dev *rcdev, 2231 unsigned long id) 2232 { 2233 struct stm32_reset_data *data = to_stm32_reset_data(rcdev); 2234 int reg_width = sizeof(u32); 2235 int bank = id / (reg_width * BITS_PER_BYTE); 2236 int offset = id % (reg_width * BITS_PER_BYTE); 2237 u32 reg; 2238 2239 reg = readl(data->membase + (bank * reg_width)); 2240 2241 return !!(reg & BIT(offset)); 2242 } 2243 2244 static const struct reset_control_ops stm32_reset_ops = { 2245 .assert = stm32_reset_assert, 2246 .deassert = stm32_reset_deassert, 2247 .status = stm32_reset_status, 2248 }; 2249 2250 static int stm32_rcc_reset_init(struct device *dev, void __iomem *base, 2251 const struct of_device_id *match) 2252 { 2253 const struct stm32_rcc_match_data *data = match->data; 2254 struct stm32_reset_data *reset_data = NULL; 2255 2256 data = match->data; 2257 2258 reset_data = kzalloc(sizeof(*reset_data), GFP_KERNEL); 2259 if (!reset_data) 2260 return -ENOMEM; 2261 2262 spin_lock_init(&reset_data->lock); 2263 reset_data->membase = base; 2264 reset_data->rcdev.owner = THIS_MODULE; 2265 reset_data->rcdev.ops = &stm32_reset_ops; 2266 reset_data->rcdev.of_node = dev_of_node(dev); 2267 reset_data->rcdev.nr_resets = STM32_RESET_ID_MASK; 2268 reset_data->clear_offset = data->clear_offset; 2269 2270 return reset_controller_register(&reset_data->rcdev); 2271 } 2272 2273 static int stm32_rcc_clock_init(struct device *dev, void __iomem *base, 2274 const struct of_device_id *match) 2275 { 2276 const struct stm32_rcc_match_data *data = match->data; 2277 struct clk_hw_onecell_data *clk_data; 2278 struct clk_hw **hws; 2279 int err, n, max_binding; 2280 2281 max_binding = data->maxbinding; 2282 2283 clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, max_binding), 2284 GFP_KERNEL); 2285 if (!clk_data) 2286 return -ENOMEM; 2287 2288 clk_data->num = max_binding; 2289 2290 hws = clk_data->hws; 2291 2292 for (n = 0; n < max_binding; n++) 2293 hws[n] = ERR_PTR(-ENOENT); 2294 2295 for (n = 0; n < data->num; n++) { 2296 if (data->check_security && data->check_security(&data->cfg[n])) 2297 continue; 2298 2299 err = stm32_register_hw_clk(dev, clk_data, base, &rlock, 2300 &data->cfg[n]); 2301 if (err) { 2302 dev_err(dev, "Can't register clk %s: %d\n", 2303 data->cfg[n].name, err); 2304 2305 return err; 2306 } 2307 } 2308 2309 return of_clk_add_hw_provider(dev_of_node(dev), of_clk_hw_onecell_get, clk_data); 2310 } 2311 2312 static int stm32_rcc_init(struct device *dev, void __iomem *base, 2313 const struct of_device_id *match_data) 2314 { 2315 const struct of_device_id *match; 2316 int err; 2317 2318 match = of_match_node(match_data, dev_of_node(dev)); 2319 if (!match) { 2320 dev_err(dev, "match data not found\n"); 2321 return -ENODEV; 2322 } 2323 2324 /* RCC Reset Configuration */ 2325 err = stm32_rcc_reset_init(dev, base, match); 2326 if (err) { 2327 pr_err("stm32mp1 reset failed to initialize\n"); 2328 return err; 2329 } 2330 2331 /* RCC Clock Configuration */ 2332 err = stm32_rcc_clock_init(dev, base, match); 2333 if (err) { 2334 pr_err("stm32mp1 clock failed to initialize\n"); 2335 return err; 2336 } 2337 2338 return 0; 2339 } 2340 2341 static int stm32mp1_rcc_init(struct device *dev) 2342 { 2343 void __iomem *base; 2344 int ret; 2345 2346 base = of_iomap(dev_of_node(dev), 0); 2347 if (!base) { 2348 pr_err("%pOFn: unable to map resource", dev_of_node(dev)); 2349 ret = -ENOMEM; 2350 goto out; 2351 } 2352 2353 ret = stm32_rcc_init(dev, base, stm32mp1_match_data); 2354 2355 out: 2356 if (ret) { 2357 if (base) 2358 iounmap(base); 2359 2360 of_node_put(dev_of_node(dev)); 2361 } 2362 2363 return ret; 2364 } 2365 2366 static int get_clock_deps(struct device *dev) 2367 { 2368 static const char * const clock_deps_name[] = { 2369 "hsi", "hse", "csi", "lsi", "lse", 2370 }; 2371 size_t deps_size = sizeof(struct clk *) * ARRAY_SIZE(clock_deps_name); 2372 struct clk **clk_deps; 2373 int i; 2374 2375 clk_deps = devm_kzalloc(dev, deps_size, GFP_KERNEL); 2376 if (!clk_deps) 2377 return -ENOMEM; 2378 2379 for (i = 0; i < ARRAY_SIZE(clock_deps_name); i++) { 2380 struct clk *clk = of_clk_get_by_name(dev_of_node(dev), 2381 clock_deps_name[i]); 2382 2383 if (IS_ERR(clk)) { 2384 if (PTR_ERR(clk) != -EINVAL && PTR_ERR(clk) != -ENOENT) 2385 return PTR_ERR(clk); 2386 } else { 2387 /* Device gets a reference count on the clock */ 2388 clk_deps[i] = devm_clk_get(dev, __clk_get_name(clk)); 2389 clk_put(clk); 2390 } 2391 } 2392 2393 return 0; 2394 } 2395 2396 static int stm32mp1_rcc_clocks_probe(struct platform_device *pdev) 2397 { 2398 struct device *dev = &pdev->dev; 2399 int ret = get_clock_deps(dev); 2400 2401 if (!ret) 2402 ret = stm32mp1_rcc_init(dev); 2403 2404 return ret; 2405 } 2406 2407 static int stm32mp1_rcc_clocks_remove(struct platform_device *pdev) 2408 { 2409 struct device *dev = &pdev->dev; 2410 struct device_node *child, *np = dev_of_node(dev); 2411 2412 for_each_available_child_of_node(np, child) 2413 of_clk_del_provider(child); 2414 2415 return 0; 2416 } 2417 2418 static struct platform_driver stm32mp1_rcc_clocks_driver = { 2419 .driver = { 2420 .name = "stm32mp1_rcc", 2421 .of_match_table = stm32mp1_match_data, 2422 }, 2423 .probe = stm32mp1_rcc_clocks_probe, 2424 .remove = stm32mp1_rcc_clocks_remove, 2425 }; 2426 2427 static int __init stm32mp1_clocks_init(void) 2428 { 2429 return platform_driver_register(&stm32mp1_rcc_clocks_driver); 2430 } 2431 core_initcall(stm32mp1_clocks_init); 2432