Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk/ARM: move Ux500 PRCC bases to the device tree

The base addresses for the Ux500 PRCC controllers are hardcoded,
let's move them to the clock node in the device tree and delete
the constants.

Cc: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Olof Johansson <olof@lixom.net>
Acked-by: Michael Turquette <mturquette@baylibre.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

authored by

Linus Walleij and committed by
Michael Turquette
5dc0fe19 c660b2eb

+225 -176
+7
arch/arm/boot/dts/ste-dbx5x0.dtsi
··· 219 219 220 220 clocks { 221 221 compatible = "stericsson,u8500-clks"; 222 + /* 223 + * Registers for the CLKRST block on peripheral 224 + * groups 1, 2, 3, 5, 6, 225 + */ 226 + reg = <0x8012f000 0x1000>, <0x8011f000 0x1000>, 227 + <0x8000f000 0x1000>, <0xa03ff000 0x1000>, 228 + <0xa03cf000 0x1000>; 222 229 223 230 prcmu_clk: prcmu-clock { 224 231 #clock-cells = <1>;
+6 -15
arch/arm/mach-ux500/cpu.c
··· 72 72 * Init clocks here so that they are available for system timer 73 73 * initialization. 74 74 */ 75 - if (cpu_is_u8500_family()) { 76 - u8500_of_clk_init(U8500_CLKRST1_BASE, 77 - U8500_CLKRST2_BASE, 78 - U8500_CLKRST3_BASE, 79 - U8500_CLKRST5_BASE, 80 - U8500_CLKRST6_BASE); 81 - } else if (cpu_is_u9540()) { 82 - u9540_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE, 83 - U8500_CLKRST3_BASE, U8500_CLKRST5_BASE, 84 - U8500_CLKRST6_BASE); 85 - } else if (cpu_is_u8540()) { 86 - u8540_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE, 87 - U8500_CLKRST3_BASE, U8500_CLKRST5_BASE, 88 - U8500_CLKRST6_BASE); 89 - } 75 + if (cpu_is_u8500_family()) 76 + u8500_clk_init(); 77 + else if (cpu_is_u9540()) 78 + u9540_clk_init(); 79 + else if (cpu_is_u8540()) 80 + u8540_clk_init(); 90 81 } 91 82 92 83 static const char * __init ux500_get_machine(void)
+92 -71
drivers/clk/ux500/u8500_of_clk.c
··· 8 8 */ 9 9 10 10 #include <linux/of.h> 11 + #include <linux/of_address.h> 11 12 #include <linux/clk-provider.h> 12 13 #include <linux/mfd/dbx500-prcmu.h> 13 14 #include <linux/platform_data/clk-ux500.h> ··· 53 52 { }, 54 53 }; 55 54 56 - void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 57 - u32 clkrst5_base, u32 clkrst6_base) 55 + /* CLKRST4 is missing making it hard to index things */ 56 + enum clkrst_index { 57 + CLKRST1_INDEX = 0, 58 + CLKRST2_INDEX, 59 + CLKRST3_INDEX, 60 + CLKRST5_INDEX, 61 + CLKRST6_INDEX, 62 + CLKRST_MAX, 63 + }; 64 + 65 + void u8500_clk_init(void) 58 66 { 59 67 struct prcmu_fw_version *fw_version; 60 68 struct device_node *np = NULL; 61 69 struct device_node *child = NULL; 62 70 const char *sgaclk_parent = NULL; 63 71 struct clk *clk, *rtc_clk, *twd_clk; 72 + u32 bases[CLKRST_MAX]; 73 + int i; 64 74 65 75 if (of_have_populated_dt()) 66 76 np = of_find_matching_node(NULL, u8500_clk_of_match); 67 77 if (!np) { 68 78 pr_err("Either DT or U8500 Clock node not found\n"); 69 79 return; 80 + } 81 + for (i = 0; i < ARRAY_SIZE(bases); i++) { 82 + struct resource r; 83 + 84 + if (of_address_to_resource(np, i, &r)) 85 + /* Not much choice but to continue */ 86 + pr_err("failed to get CLKRST %d base address\n", 87 + i + 1); 88 + bases[i] = r.start; 70 89 } 71 90 72 91 /* Clock sources */ ··· 265 244 */ 266 245 267 246 /* PRCC P-clocks */ 268 - clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", clkrst1_base, 247 + clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", bases[CLKRST1_INDEX], 269 248 BIT(0), 0); 270 249 PRCC_PCLK_STORE(clk, 1, 0); 271 250 272 - clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", clkrst1_base, 251 + clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", bases[CLKRST1_INDEX], 273 252 BIT(1), 0); 274 253 PRCC_PCLK_STORE(clk, 1, 1); 275 254 276 - clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", clkrst1_base, 255 + clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", bases[CLKRST1_INDEX], 277 256 BIT(2), 0); 278 257 PRCC_PCLK_STORE(clk, 1, 2); 279 258 280 - clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", clkrst1_base, 259 + clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", bases[CLKRST1_INDEX], 281 260 BIT(3), 0); 282 261 PRCC_PCLK_STORE(clk, 1, 3); 283 262 284 - clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", clkrst1_base, 263 + clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", bases[CLKRST1_INDEX], 285 264 BIT(4), 0); 286 265 PRCC_PCLK_STORE(clk, 1, 4); 287 266 288 - clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", clkrst1_base, 267 + clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", bases[CLKRST1_INDEX], 289 268 BIT(5), 0); 290 269 PRCC_PCLK_STORE(clk, 1, 5); 291 270 292 - clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", clkrst1_base, 271 + clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", bases[CLKRST1_INDEX], 293 272 BIT(6), 0); 294 273 PRCC_PCLK_STORE(clk, 1, 6); 295 274 296 - clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", clkrst1_base, 275 + clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", bases[CLKRST1_INDEX], 297 276 BIT(7), 0); 298 277 PRCC_PCLK_STORE(clk, 1, 7); 299 278 300 - clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", clkrst1_base, 279 + clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", bases[CLKRST1_INDEX], 301 280 BIT(8), 0); 302 281 PRCC_PCLK_STORE(clk, 1, 8); 303 282 304 - clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", clkrst1_base, 283 + clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", bases[CLKRST1_INDEX], 305 284 BIT(9), 0); 306 285 PRCC_PCLK_STORE(clk, 1, 9); 307 286 308 - clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", clkrst1_base, 287 + clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", bases[CLKRST1_INDEX], 309 288 BIT(10), 0); 310 289 PRCC_PCLK_STORE(clk, 1, 10); 311 290 312 - clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", clkrst1_base, 291 + clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", bases[CLKRST1_INDEX], 313 292 BIT(11), 0); 314 293 PRCC_PCLK_STORE(clk, 1, 11); 315 294 316 - clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", clkrst2_base, 295 + clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", bases[CLKRST2_INDEX], 317 296 BIT(0), 0); 318 297 PRCC_PCLK_STORE(clk, 2, 0); 319 298 320 - clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", clkrst2_base, 299 + clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", bases[CLKRST2_INDEX], 321 300 BIT(1), 0); 322 301 PRCC_PCLK_STORE(clk, 2, 1); 323 302 324 - clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", clkrst2_base, 303 + clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", bases[CLKRST2_INDEX], 325 304 BIT(2), 0); 326 305 PRCC_PCLK_STORE(clk, 2, 2); 327 306 328 - clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", clkrst2_base, 307 + clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", bases[CLKRST2_INDEX], 329 308 BIT(3), 0); 330 309 PRCC_PCLK_STORE(clk, 2, 3); 331 310 332 - clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", clkrst2_base, 311 + clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", bases[CLKRST2_INDEX], 333 312 BIT(4), 0); 334 313 PRCC_PCLK_STORE(clk, 2, 4); 335 314 336 - clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", clkrst2_base, 315 + clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", bases[CLKRST2_INDEX], 337 316 BIT(5), 0); 338 317 PRCC_PCLK_STORE(clk, 2, 5); 339 318 340 - clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", clkrst2_base, 319 + clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", bases[CLKRST2_INDEX], 341 320 BIT(6), 0); 342 321 PRCC_PCLK_STORE(clk, 2, 6); 343 322 344 - clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", clkrst2_base, 323 + clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", bases[CLKRST2_INDEX], 345 324 BIT(7), 0); 346 325 PRCC_PCLK_STORE(clk, 2, 7); 347 326 348 - clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", clkrst2_base, 327 + clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", bases[CLKRST2_INDEX], 349 328 BIT(8), 0); 350 329 PRCC_PCLK_STORE(clk, 2, 8); 351 330 352 - clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", clkrst2_base, 331 + clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", bases[CLKRST2_INDEX], 353 332 BIT(9), 0); 354 333 PRCC_PCLK_STORE(clk, 2, 9); 355 334 356 - clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", clkrst2_base, 335 + clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", bases[CLKRST2_INDEX], 357 336 BIT(10), 0); 358 337 PRCC_PCLK_STORE(clk, 2, 10); 359 338 360 - clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", clkrst2_base, 339 + clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", bases[CLKRST2_INDEX], 361 340 BIT(11), 0); 362 341 PRCC_PCLK_STORE(clk, 2, 11); 363 342 364 - clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", clkrst2_base, 343 + clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", bases[CLKRST2_INDEX], 365 344 BIT(12), 0); 366 345 PRCC_PCLK_STORE(clk, 2, 12); 367 346 368 - clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base, 347 + clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", bases[CLKRST3_INDEX], 369 348 BIT(0), 0); 370 349 PRCC_PCLK_STORE(clk, 3, 0); 371 350 372 - clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base, 351 + clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", bases[CLKRST3_INDEX], 373 352 BIT(1), 0); 374 353 PRCC_PCLK_STORE(clk, 3, 1); 375 354 376 - clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", clkrst3_base, 355 + clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", bases[CLKRST3_INDEX], 377 356 BIT(2), 0); 378 357 PRCC_PCLK_STORE(clk, 3, 2); 379 358 380 - clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", clkrst3_base, 359 + clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", bases[CLKRST3_INDEX], 381 360 BIT(3), 0); 382 361 PRCC_PCLK_STORE(clk, 3, 3); 383 362 384 - clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", clkrst3_base, 363 + clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", bases[CLKRST3_INDEX], 385 364 BIT(4), 0); 386 365 PRCC_PCLK_STORE(clk, 3, 4); 387 366 388 - clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", clkrst3_base, 367 + clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", bases[CLKRST3_INDEX], 389 368 BIT(5), 0); 390 369 PRCC_PCLK_STORE(clk, 3, 5); 391 370 392 - clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", clkrst3_base, 371 + clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", bases[CLKRST3_INDEX], 393 372 BIT(6), 0); 394 373 PRCC_PCLK_STORE(clk, 3, 6); 395 374 396 - clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", clkrst3_base, 375 + clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", bases[CLKRST3_INDEX], 397 376 BIT(7), 0); 398 377 PRCC_PCLK_STORE(clk, 3, 7); 399 378 400 - clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", clkrst3_base, 379 + clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", bases[CLKRST3_INDEX], 401 380 BIT(8), 0); 402 381 PRCC_PCLK_STORE(clk, 3, 8); 403 382 404 - clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", clkrst5_base, 383 + clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", bases[CLKRST5_INDEX], 405 384 BIT(0), 0); 406 385 PRCC_PCLK_STORE(clk, 5, 0); 407 386 408 - clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", clkrst5_base, 387 + clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", bases[CLKRST5_INDEX], 409 388 BIT(1), 0); 410 389 PRCC_PCLK_STORE(clk, 5, 1); 411 390 412 - clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", clkrst6_base, 391 + clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", bases[CLKRST6_INDEX], 413 392 BIT(0), 0); 414 393 PRCC_PCLK_STORE(clk, 6, 0); 415 394 416 - clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", clkrst6_base, 395 + clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", bases[CLKRST6_INDEX], 417 396 BIT(1), 0); 418 397 PRCC_PCLK_STORE(clk, 6, 1); 419 398 420 - clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", clkrst6_base, 399 + clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", bases[CLKRST6_INDEX], 421 400 BIT(2), 0); 422 401 PRCC_PCLK_STORE(clk, 6, 2); 423 402 424 - clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", clkrst6_base, 403 + clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", bases[CLKRST6_INDEX], 425 404 BIT(3), 0); 426 405 PRCC_PCLK_STORE(clk, 6, 3); 427 406 428 - clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", clkrst6_base, 407 + clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", bases[CLKRST6_INDEX], 429 408 BIT(4), 0); 430 409 PRCC_PCLK_STORE(clk, 6, 4); 431 410 432 - clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", clkrst6_base, 411 + clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", bases[CLKRST6_INDEX], 433 412 BIT(5), 0); 434 413 PRCC_PCLK_STORE(clk, 6, 5); 435 414 436 - clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", clkrst6_base, 415 + clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", bases[CLKRST6_INDEX], 437 416 BIT(6), 0); 438 417 PRCC_PCLK_STORE(clk, 6, 6); 439 418 440 - clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", clkrst6_base, 419 + clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", bases[CLKRST6_INDEX], 441 420 BIT(7), 0); 442 421 PRCC_PCLK_STORE(clk, 6, 7); 443 422 ··· 451 430 452 431 /* Periph1 */ 453 432 clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk", 454 - clkrst1_base, BIT(0), CLK_SET_RATE_GATE); 433 + bases[CLKRST1_INDEX], BIT(0), CLK_SET_RATE_GATE); 455 434 PRCC_KCLK_STORE(clk, 1, 0); 456 435 457 436 clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk", 458 - clkrst1_base, BIT(1), CLK_SET_RATE_GATE); 437 + bases[CLKRST1_INDEX], BIT(1), CLK_SET_RATE_GATE); 459 438 PRCC_KCLK_STORE(clk, 1, 1); 460 439 461 440 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk", 462 - clkrst1_base, BIT(2), CLK_SET_RATE_GATE); 441 + bases[CLKRST1_INDEX], BIT(2), CLK_SET_RATE_GATE); 463 442 PRCC_KCLK_STORE(clk, 1, 2); 464 443 465 444 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk", 466 - clkrst1_base, BIT(3), CLK_SET_RATE_GATE); 445 + bases[CLKRST1_INDEX], BIT(3), CLK_SET_RATE_GATE); 467 446 PRCC_KCLK_STORE(clk, 1, 3); 468 447 469 448 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk", 470 - clkrst1_base, BIT(4), CLK_SET_RATE_GATE); 449 + bases[CLKRST1_INDEX], BIT(4), CLK_SET_RATE_GATE); 471 450 PRCC_KCLK_STORE(clk, 1, 4); 472 451 473 452 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmcclk", 474 - clkrst1_base, BIT(5), CLK_SET_RATE_GATE); 453 + bases[CLKRST1_INDEX], BIT(5), CLK_SET_RATE_GATE); 475 454 PRCC_KCLK_STORE(clk, 1, 5); 476 455 477 456 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk", 478 - clkrst1_base, BIT(6), CLK_SET_RATE_GATE); 457 + bases[CLKRST1_INDEX], BIT(6), CLK_SET_RATE_GATE); 479 458 PRCC_KCLK_STORE(clk, 1, 6); 480 459 481 460 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk", 482 - clkrst1_base, BIT(8), CLK_SET_RATE_GATE); 461 + bases[CLKRST1_INDEX], BIT(8), CLK_SET_RATE_GATE); 483 462 PRCC_KCLK_STORE(clk, 1, 8); 484 463 485 464 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk", 486 - clkrst1_base, BIT(9), CLK_SET_RATE_GATE); 465 + bases[CLKRST1_INDEX], BIT(9), CLK_SET_RATE_GATE); 487 466 PRCC_KCLK_STORE(clk, 1, 9); 488 467 489 468 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk", 490 - clkrst1_base, BIT(10), CLK_SET_RATE_GATE); 469 + bases[CLKRST1_INDEX], BIT(10), CLK_SET_RATE_GATE); 491 470 PRCC_KCLK_STORE(clk, 1, 10); 492 471 493 472 /* Periph2 */ 494 473 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk", 495 - clkrst2_base, BIT(0), CLK_SET_RATE_GATE); 474 + bases[CLKRST2_INDEX], BIT(0), CLK_SET_RATE_GATE); 496 475 PRCC_KCLK_STORE(clk, 2, 0); 497 476 498 477 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmcclk", 499 - clkrst2_base, BIT(2), CLK_SET_RATE_GATE); 478 + bases[CLKRST2_INDEX], BIT(2), CLK_SET_RATE_GATE); 500 479 PRCC_KCLK_STORE(clk, 2, 2); 501 480 502 481 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk", 503 - clkrst2_base, BIT(3), CLK_SET_RATE_GATE); 482 + bases[CLKRST2_INDEX], BIT(3), CLK_SET_RATE_GATE); 504 483 PRCC_KCLK_STORE(clk, 2, 3); 505 484 506 485 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmcclk", 507 - clkrst2_base, BIT(4), CLK_SET_RATE_GATE); 486 + bases[CLKRST2_INDEX], BIT(4), CLK_SET_RATE_GATE); 508 487 PRCC_KCLK_STORE(clk, 2, 4); 509 488 510 489 clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk", 511 - clkrst2_base, BIT(5), CLK_SET_RATE_GATE); 490 + bases[CLKRST2_INDEX], BIT(5), CLK_SET_RATE_GATE); 512 491 PRCC_KCLK_STORE(clk, 2, 5); 513 492 514 493 /* Note that rate is received from parent. */ 515 494 clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk", 516 - clkrst2_base, BIT(6), 495 + bases[CLKRST2_INDEX], BIT(6), 517 496 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 518 497 PRCC_KCLK_STORE(clk, 2, 6); 519 498 520 499 clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk", 521 - clkrst2_base, BIT(7), 500 + bases[CLKRST2_INDEX], BIT(7), 522 501 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 523 502 PRCC_KCLK_STORE(clk, 2, 7); 524 503 525 504 /* Periph3 */ 526 505 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk", 527 - clkrst3_base, BIT(1), CLK_SET_RATE_GATE); 506 + bases[CLKRST3_INDEX], BIT(1), CLK_SET_RATE_GATE); 528 507 PRCC_KCLK_STORE(clk, 3, 1); 529 508 530 509 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk", 531 - clkrst3_base, BIT(2), CLK_SET_RATE_GATE); 510 + bases[CLKRST3_INDEX], BIT(2), CLK_SET_RATE_GATE); 532 511 PRCC_KCLK_STORE(clk, 3, 2); 533 512 534 513 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk", 535 - clkrst3_base, BIT(3), CLK_SET_RATE_GATE); 514 + bases[CLKRST3_INDEX], BIT(3), CLK_SET_RATE_GATE); 536 515 PRCC_KCLK_STORE(clk, 3, 3); 537 516 538 517 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmcclk", 539 - clkrst3_base, BIT(4), CLK_SET_RATE_GATE); 518 + bases[CLKRST3_INDEX], BIT(4), CLK_SET_RATE_GATE); 540 519 PRCC_KCLK_STORE(clk, 3, 4); 541 520 542 521 clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k", 543 - clkrst3_base, BIT(5), CLK_SET_RATE_GATE); 522 + bases[CLKRST3_INDEX], BIT(5), CLK_SET_RATE_GATE); 544 523 PRCC_KCLK_STORE(clk, 3, 5); 545 524 546 525 clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk", 547 - clkrst3_base, BIT(6), CLK_SET_RATE_GATE); 526 + bases[CLKRST3_INDEX], BIT(6), CLK_SET_RATE_GATE); 548 527 PRCC_KCLK_STORE(clk, 3, 6); 549 528 550 529 clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk", 551 - clkrst3_base, BIT(7), CLK_SET_RATE_GATE); 530 + bases[CLKRST3_INDEX], BIT(7), CLK_SET_RATE_GATE); 552 531 PRCC_KCLK_STORE(clk, 3, 7); 553 532 554 533 /* Periph6 */ 555 534 clk = clk_reg_prcc_kclk("p3_rng_kclk", "rngclk", 556 - clkrst6_base, BIT(0), CLK_SET_RATE_GATE); 535 + bases[CLKRST6_INDEX], BIT(0), CLK_SET_RATE_GATE); 557 536 PRCC_KCLK_STORE(clk, 6, 0); 558 537 559 538 for_each_child_of_node(np, child) {
+116 -81
drivers/clk/ux500/u8540_clk.c
··· 7 7 * License terms: GNU General Public License (GPL) version 2 8 8 */ 9 9 10 + #include <linux/of.h> 11 + #include <linux/of_address.h> 10 12 #include <linux/clkdev.h> 11 13 #include <linux/clk-provider.h> 12 14 #include <linux/mfd/dbx500-prcmu.h> 13 15 #include <linux/platform_data/clk-ux500.h> 14 16 #include "clk.h" 15 17 16 - void u8540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 17 - u32 clkrst5_base, u32 clkrst6_base) 18 + static const struct of_device_id u8540_clk_of_match[] = { 19 + { .compatible = "stericsson,u8540-clks", }, 20 + { } 21 + }; 22 + 23 + /* CLKRST4 is missing making it hard to index things */ 24 + enum clkrst_index { 25 + CLKRST1_INDEX = 0, 26 + CLKRST2_INDEX, 27 + CLKRST3_INDEX, 28 + CLKRST5_INDEX, 29 + CLKRST6_INDEX, 30 + CLKRST_MAX, 31 + }; 32 + 33 + void u8540_clk_init(void) 18 34 { 19 35 struct clk *clk; 36 + struct device_node *np = NULL; 37 + u32 bases[CLKRST_MAX]; 38 + int i; 39 + 40 + if (of_have_populated_dt()) 41 + np = of_find_matching_node(NULL, u8540_clk_of_match); 42 + if (!np) { 43 + pr_err("Either DT or U8540 Clock node not found\n"); 44 + return; 45 + } 46 + for (i = 0; i < ARRAY_SIZE(bases); i++) { 47 + struct resource r; 48 + 49 + if (of_address_to_resource(np, i, &r)) 50 + /* Not much choice but to continue */ 51 + pr_err("failed to get CLKRST %d base address\n", 52 + i + 1); 53 + bases[i] = r.start; 54 + } 20 55 21 56 /* Clock sources. */ 22 57 /* Fixed ClockGen */ ··· 253 218 254 219 /* PRCC P-clocks */ 255 220 /* Peripheral 1 : PRCC P-clocks */ 256 - clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", clkrst1_base, 221 + clk = clk_reg_prcc_pclk("p1_pclk0", "per1clk", bases[CLKRST1_INDEX], 257 222 BIT(0), 0); 258 223 clk_register_clkdev(clk, "apb_pclk", "uart0"); 259 224 260 - clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", clkrst1_base, 225 + clk = clk_reg_prcc_pclk("p1_pclk1", "per1clk", bases[CLKRST1_INDEX], 261 226 BIT(1), 0); 262 227 clk_register_clkdev(clk, "apb_pclk", "uart1"); 263 228 264 - clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", clkrst1_base, 229 + clk = clk_reg_prcc_pclk("p1_pclk2", "per1clk", bases[CLKRST1_INDEX], 265 230 BIT(2), 0); 266 231 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.1"); 267 232 268 - clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", clkrst1_base, 233 + clk = clk_reg_prcc_pclk("p1_pclk3", "per1clk", bases[CLKRST1_INDEX], 269 234 BIT(3), 0); 270 235 clk_register_clkdev(clk, "apb_pclk", "msp0"); 271 236 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.0"); 272 237 273 - clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", clkrst1_base, 238 + clk = clk_reg_prcc_pclk("p1_pclk4", "per1clk", bases[CLKRST1_INDEX], 274 239 BIT(4), 0); 275 240 clk_register_clkdev(clk, "apb_pclk", "msp1"); 276 241 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.1"); 277 242 278 - clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", clkrst1_base, 243 + clk = clk_reg_prcc_pclk("p1_pclk5", "per1clk", bases[CLKRST1_INDEX], 279 244 BIT(5), 0); 280 245 clk_register_clkdev(clk, "apb_pclk", "sdi0"); 281 246 282 - clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", clkrst1_base, 247 + clk = clk_reg_prcc_pclk("p1_pclk6", "per1clk", bases[CLKRST1_INDEX], 283 248 BIT(6), 0); 284 249 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.2"); 285 250 286 - clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", clkrst1_base, 251 + clk = clk_reg_prcc_pclk("p1_pclk7", "per1clk", bases[CLKRST1_INDEX], 287 252 BIT(7), 0); 288 253 clk_register_clkdev(clk, NULL, "spi3"); 289 254 290 - clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", clkrst1_base, 255 + clk = clk_reg_prcc_pclk("p1_pclk8", "per1clk", bases[CLKRST1_INDEX], 291 256 BIT(8), 0); 292 257 clk_register_clkdev(clk, "apb_pclk", "slimbus0"); 293 258 294 - clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", clkrst1_base, 259 + clk = clk_reg_prcc_pclk("p1_pclk9", "per1clk", bases[CLKRST1_INDEX], 295 260 BIT(9), 0); 296 261 clk_register_clkdev(clk, NULL, "gpio.0"); 297 262 clk_register_clkdev(clk, NULL, "gpio.1"); 298 263 clk_register_clkdev(clk, NULL, "gpioblock0"); 299 264 clk_register_clkdev(clk, "apb_pclk", "ab85xx-codec.0"); 300 265 301 - clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", clkrst1_base, 266 + clk = clk_reg_prcc_pclk("p1_pclk10", "per1clk", bases[CLKRST1_INDEX], 302 267 BIT(10), 0); 303 268 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.4"); 304 269 305 - clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", clkrst1_base, 270 + clk = clk_reg_prcc_pclk("p1_pclk11", "per1clk", bases[CLKRST1_INDEX], 306 271 BIT(11), 0); 307 272 clk_register_clkdev(clk, "apb_pclk", "msp3"); 308 273 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.3"); 309 274 310 275 /* Peripheral 2 : PRCC P-clocks */ 311 - clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", clkrst2_base, 276 + clk = clk_reg_prcc_pclk("p2_pclk0", "per2clk", bases[CLKRST2_INDEX], 312 277 BIT(0), 0); 313 278 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.3"); 314 279 315 - clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", clkrst2_base, 280 + clk = clk_reg_prcc_pclk("p2_pclk1", "per2clk", bases[CLKRST2_INDEX], 316 281 BIT(1), 0); 317 282 clk_register_clkdev(clk, NULL, "spi2"); 318 283 319 - clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", clkrst2_base, 284 + clk = clk_reg_prcc_pclk("p2_pclk2", "per2clk", bases[CLKRST2_INDEX], 320 285 BIT(2), 0); 321 286 clk_register_clkdev(clk, NULL, "spi1"); 322 287 323 - clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", clkrst2_base, 288 + clk = clk_reg_prcc_pclk("p2_pclk3", "per2clk", bases[CLKRST2_INDEX], 324 289 BIT(3), 0); 325 290 clk_register_clkdev(clk, NULL, "pwl"); 326 291 327 - clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", clkrst2_base, 292 + clk = clk_reg_prcc_pclk("p2_pclk4", "per2clk", bases[CLKRST2_INDEX], 328 293 BIT(4), 0); 329 294 clk_register_clkdev(clk, "apb_pclk", "sdi4"); 330 295 331 - clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", clkrst2_base, 296 + clk = clk_reg_prcc_pclk("p2_pclk5", "per2clk", bases[CLKRST2_INDEX], 332 297 BIT(5), 0); 333 298 clk_register_clkdev(clk, "apb_pclk", "msp2"); 334 299 clk_register_clkdev(clk, "apb_pclk", "dbx5x0-msp-i2s.2"); 335 300 336 - clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", clkrst2_base, 301 + clk = clk_reg_prcc_pclk("p2_pclk6", "per2clk", bases[CLKRST2_INDEX], 337 302 BIT(6), 0); 338 303 clk_register_clkdev(clk, "apb_pclk", "sdi1"); 339 304 340 - clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", clkrst2_base, 305 + clk = clk_reg_prcc_pclk("p2_pclk7", "per2clk", bases[CLKRST2_INDEX], 341 306 BIT(7), 0); 342 307 clk_register_clkdev(clk, "apb_pclk", "sdi3"); 343 308 344 - clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", clkrst2_base, 309 + clk = clk_reg_prcc_pclk("p2_pclk8", "per2clk", bases[CLKRST2_INDEX], 345 310 BIT(8), 0); 346 311 clk_register_clkdev(clk, NULL, "spi0"); 347 312 348 - clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", clkrst2_base, 313 + clk = clk_reg_prcc_pclk("p2_pclk9", "per2clk", bases[CLKRST2_INDEX], 349 314 BIT(9), 0); 350 315 clk_register_clkdev(clk, "hsir_hclk", "ste_hsi.0"); 351 316 352 - clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", clkrst2_base, 317 + clk = clk_reg_prcc_pclk("p2_pclk10", "per2clk", bases[CLKRST2_INDEX], 353 318 BIT(10), 0); 354 319 clk_register_clkdev(clk, "hsit_hclk", "ste_hsi.0"); 355 320 356 - clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", clkrst2_base, 321 + clk = clk_reg_prcc_pclk("p2_pclk11", "per2clk", bases[CLKRST2_INDEX], 357 322 BIT(11), 0); 358 323 clk_register_clkdev(clk, NULL, "gpio.6"); 359 324 clk_register_clkdev(clk, NULL, "gpio.7"); 360 325 clk_register_clkdev(clk, NULL, "gpioblock1"); 361 326 362 - clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", clkrst2_base, 327 + clk = clk_reg_prcc_pclk("p2_pclk12", "per2clk", bases[CLKRST2_INDEX], 363 328 BIT(12), 0); 364 329 clk_register_clkdev(clk, "msp4-pclk", "ab85xx-codec.0"); 365 330 366 331 /* Peripheral 3 : PRCC P-clocks */ 367 - clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", clkrst3_base, 332 + clk = clk_reg_prcc_pclk("p3_pclk0", "per3clk", bases[CLKRST3_INDEX], 368 333 BIT(0), 0); 369 334 clk_register_clkdev(clk, NULL, "fsmc"); 370 335 371 - clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", clkrst3_base, 336 + clk = clk_reg_prcc_pclk("p3_pclk1", "per3clk", bases[CLKRST3_INDEX], 372 337 BIT(1), 0); 373 338 clk_register_clkdev(clk, "apb_pclk", "ssp0"); 374 339 375 - clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", clkrst3_base, 340 + clk = clk_reg_prcc_pclk("p3_pclk2", "per3clk", bases[CLKRST3_INDEX], 376 341 BIT(2), 0); 377 342 clk_register_clkdev(clk, "apb_pclk", "ssp1"); 378 343 379 - clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", clkrst3_base, 344 + clk = clk_reg_prcc_pclk("p3_pclk3", "per3clk", bases[CLKRST3_INDEX], 380 345 BIT(3), 0); 381 346 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.0"); 382 347 383 - clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", clkrst3_base, 348 + clk = clk_reg_prcc_pclk("p3_pclk4", "per3clk", bases[CLKRST3_INDEX], 384 349 BIT(4), 0); 385 350 clk_register_clkdev(clk, "apb_pclk", "sdi2"); 386 351 387 - clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", clkrst3_base, 352 + clk = clk_reg_prcc_pclk("p3_pclk5", "per3clk", bases[CLKRST3_INDEX], 388 353 BIT(5), 0); 389 354 clk_register_clkdev(clk, "apb_pclk", "ske"); 390 355 clk_register_clkdev(clk, "apb_pclk", "nmk-ske-keypad"); 391 356 392 - clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", clkrst3_base, 357 + clk = clk_reg_prcc_pclk("p3_pclk6", "per3clk", bases[CLKRST3_INDEX], 393 358 BIT(6), 0); 394 359 clk_register_clkdev(clk, "apb_pclk", "uart2"); 395 360 396 - clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", clkrst3_base, 361 + clk = clk_reg_prcc_pclk("p3_pclk7", "per3clk", bases[CLKRST3_INDEX], 397 362 BIT(7), 0); 398 363 clk_register_clkdev(clk, "apb_pclk", "sdi5"); 399 364 400 - clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", clkrst3_base, 365 + clk = clk_reg_prcc_pclk("p3_pclk8", "per3clk", bases[CLKRST3_INDEX], 401 366 BIT(8), 0); 402 367 clk_register_clkdev(clk, NULL, "gpio.2"); 403 368 clk_register_clkdev(clk, NULL, "gpio.3"); ··· 405 370 clk_register_clkdev(clk, NULL, "gpio.5"); 406 371 clk_register_clkdev(clk, NULL, "gpioblock2"); 407 372 408 - clk = clk_reg_prcc_pclk("p3_pclk9", "per3clk", clkrst3_base, 373 + clk = clk_reg_prcc_pclk("p3_pclk9", "per3clk", bases[CLKRST3_INDEX], 409 374 BIT(9), 0); 410 375 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.5"); 411 376 412 - clk = clk_reg_prcc_pclk("p3_pclk10", "per3clk", clkrst3_base, 377 + clk = clk_reg_prcc_pclk("p3_pclk10", "per3clk", bases[CLKRST3_INDEX], 413 378 BIT(10), 0); 414 379 clk_register_clkdev(clk, "apb_pclk", "nmk-i2c.6"); 415 380 416 - clk = clk_reg_prcc_pclk("p3_pclk11", "per3clk", clkrst3_base, 381 + clk = clk_reg_prcc_pclk("p3_pclk11", "per3clk", bases[CLKRST3_INDEX], 417 382 BIT(11), 0); 418 383 clk_register_clkdev(clk, "apb_pclk", "uart3"); 419 384 420 - clk = clk_reg_prcc_pclk("p3_pclk12", "per3clk", clkrst3_base, 385 + clk = clk_reg_prcc_pclk("p3_pclk12", "per3clk", bases[CLKRST3_INDEX], 421 386 BIT(12), 0); 422 387 clk_register_clkdev(clk, "apb_pclk", "uart4"); 423 388 424 389 /* Peripheral 5 : PRCC P-clocks */ 425 - clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", clkrst5_base, 390 + clk = clk_reg_prcc_pclk("p5_pclk0", "per5clk", bases[CLKRST5_INDEX], 426 391 BIT(0), 0); 427 392 clk_register_clkdev(clk, "usb", "musb-ux500.0"); 428 393 clk_register_clkdev(clk, "usbclk", "ab-iddet.0"); 429 394 430 - clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", clkrst5_base, 395 + clk = clk_reg_prcc_pclk("p5_pclk1", "per5clk", bases[CLKRST5_INDEX], 431 396 BIT(1), 0); 432 397 clk_register_clkdev(clk, NULL, "gpio.8"); 433 398 clk_register_clkdev(clk, NULL, "gpioblock3"); 434 399 435 400 /* Peripheral 6 : PRCC P-clocks */ 436 - clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", clkrst6_base, 401 + clk = clk_reg_prcc_pclk("p6_pclk0", "per6clk", bases[CLKRST6_INDEX], 437 402 BIT(0), 0); 438 403 clk_register_clkdev(clk, "apb_pclk", "rng"); 439 404 440 - clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", clkrst6_base, 405 + clk = clk_reg_prcc_pclk("p6_pclk1", "per6clk", bases[CLKRST6_INDEX], 441 406 BIT(1), 0); 442 407 clk_register_clkdev(clk, NULL, "cryp0"); 443 408 clk_register_clkdev(clk, NULL, "cryp1"); 444 409 445 - clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", clkrst6_base, 410 + clk = clk_reg_prcc_pclk("p6_pclk2", "per6clk", bases[CLKRST6_INDEX], 446 411 BIT(2), 0); 447 412 clk_register_clkdev(clk, NULL, "hash0"); 448 413 449 - clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", clkrst6_base, 414 + clk = clk_reg_prcc_pclk("p6_pclk3", "per6clk", bases[CLKRST6_INDEX], 450 415 BIT(3), 0); 451 416 clk_register_clkdev(clk, NULL, "pka"); 452 417 453 - clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", clkrst6_base, 418 + clk = clk_reg_prcc_pclk("p6_pclk4", "per6clk", bases[CLKRST6_INDEX], 454 419 BIT(4), 0); 455 420 clk_register_clkdev(clk, NULL, "db8540-hash1"); 456 421 457 - clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", clkrst6_base, 422 + clk = clk_reg_prcc_pclk("p6_pclk5", "per6clk", bases[CLKRST6_INDEX], 458 423 BIT(5), 0); 459 424 clk_register_clkdev(clk, NULL, "cfgreg"); 460 425 461 - clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", clkrst6_base, 426 + clk = clk_reg_prcc_pclk("p6_pclk6", "per6clk", bases[CLKRST6_INDEX], 462 427 BIT(6), 0); 463 428 clk_register_clkdev(clk, "apb_pclk", "mtu0"); 464 429 465 - clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", clkrst6_base, 430 + clk = clk_reg_prcc_pclk("p6_pclk7", "per6clk", bases[CLKRST6_INDEX], 466 431 BIT(7), 0); 467 432 clk_register_clkdev(clk, "apb_pclk", "mtu1"); 468 433 ··· 476 441 477 442 /* Peripheral 1 : PRCC K-clocks */ 478 443 clk = clk_reg_prcc_kclk("p1_uart0_kclk", "uartclk", 479 - clkrst1_base, BIT(0), CLK_SET_RATE_GATE); 444 + bases[CLKRST1_INDEX], BIT(0), CLK_SET_RATE_GATE); 480 445 clk_register_clkdev(clk, NULL, "uart0"); 481 446 482 447 clk = clk_reg_prcc_kclk("p1_uart1_kclk", "uartclk", 483 - clkrst1_base, BIT(1), CLK_SET_RATE_GATE); 448 + bases[CLKRST1_INDEX], BIT(1), CLK_SET_RATE_GATE); 484 449 clk_register_clkdev(clk, NULL, "uart1"); 485 450 486 451 clk = clk_reg_prcc_kclk("p1_i2c1_kclk", "i2cclk", 487 - clkrst1_base, BIT(2), CLK_SET_RATE_GATE); 452 + bases[CLKRST1_INDEX], BIT(2), CLK_SET_RATE_GATE); 488 453 clk_register_clkdev(clk, NULL, "nmk-i2c.1"); 489 454 490 455 clk = clk_reg_prcc_kclk("p1_msp0_kclk", "msp02clk", 491 - clkrst1_base, BIT(3), CLK_SET_RATE_GATE); 456 + bases[CLKRST1_INDEX], BIT(3), CLK_SET_RATE_GATE); 492 457 clk_register_clkdev(clk, NULL, "msp0"); 493 458 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.0"); 494 459 495 460 clk = clk_reg_prcc_kclk("p1_msp1_kclk", "msp1clk", 496 - clkrst1_base, BIT(4), CLK_SET_RATE_GATE); 461 + bases[CLKRST1_INDEX], BIT(4), CLK_SET_RATE_GATE); 497 462 clk_register_clkdev(clk, NULL, "msp1"); 498 463 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.1"); 499 464 500 465 clk = clk_reg_prcc_kclk("p1_sdi0_kclk", "sdmmchclk", 501 - clkrst1_base, BIT(5), CLK_SET_RATE_GATE); 466 + bases[CLKRST1_INDEX], BIT(5), CLK_SET_RATE_GATE); 502 467 clk_register_clkdev(clk, NULL, "sdi0"); 503 468 504 469 clk = clk_reg_prcc_kclk("p1_i2c2_kclk", "i2cclk", 505 - clkrst1_base, BIT(6), CLK_SET_RATE_GATE); 470 + bases[CLKRST1_INDEX], BIT(6), CLK_SET_RATE_GATE); 506 471 clk_register_clkdev(clk, NULL, "nmk-i2c.2"); 507 472 508 473 clk = clk_reg_prcc_kclk("p1_slimbus0_kclk", "slimclk", 509 - clkrst1_base, BIT(8), CLK_SET_RATE_GATE); 474 + bases[CLKRST1_INDEX], BIT(8), CLK_SET_RATE_GATE); 510 475 clk_register_clkdev(clk, NULL, "slimbus0"); 511 476 512 477 clk = clk_reg_prcc_kclk("p1_i2c4_kclk", "i2cclk", 513 - clkrst1_base, BIT(9), CLK_SET_RATE_GATE); 478 + bases[CLKRST1_INDEX], BIT(9), CLK_SET_RATE_GATE); 514 479 clk_register_clkdev(clk, NULL, "nmk-i2c.4"); 515 480 516 481 clk = clk_reg_prcc_kclk("p1_msp3_kclk", "msp1clk", 517 - clkrst1_base, BIT(10), CLK_SET_RATE_GATE); 482 + bases[CLKRST1_INDEX], BIT(10), CLK_SET_RATE_GATE); 518 483 clk_register_clkdev(clk, NULL, "msp3"); 519 484 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.3"); 520 485 521 486 /* Peripheral 2 : PRCC K-clocks */ 522 487 clk = clk_reg_prcc_kclk("p2_i2c3_kclk", "i2cclk", 523 - clkrst2_base, BIT(0), CLK_SET_RATE_GATE); 488 + bases[CLKRST2_INDEX], BIT(0), CLK_SET_RATE_GATE); 524 489 clk_register_clkdev(clk, NULL, "nmk-i2c.3"); 525 490 526 491 clk = clk_reg_prcc_kclk("p2_pwl_kclk", "rtc32k", 527 - clkrst2_base, BIT(1), CLK_SET_RATE_GATE); 492 + bases[CLKRST2_INDEX], BIT(1), CLK_SET_RATE_GATE); 528 493 clk_register_clkdev(clk, NULL, "pwl"); 529 494 530 495 clk = clk_reg_prcc_kclk("p2_sdi4_kclk", "sdmmchclk", 531 - clkrst2_base, BIT(2), CLK_SET_RATE_GATE); 496 + bases[CLKRST2_INDEX], BIT(2), CLK_SET_RATE_GATE); 532 497 clk_register_clkdev(clk, NULL, "sdi4"); 533 498 534 499 clk = clk_reg_prcc_kclk("p2_msp2_kclk", "msp02clk", 535 - clkrst2_base, BIT(3), CLK_SET_RATE_GATE); 500 + bases[CLKRST2_INDEX], BIT(3), CLK_SET_RATE_GATE); 536 501 clk_register_clkdev(clk, NULL, "msp2"); 537 502 clk_register_clkdev(clk, NULL, "dbx5x0-msp-i2s.2"); 538 503 539 504 clk = clk_reg_prcc_kclk("p2_sdi1_kclk", "sdmmchclk", 540 - clkrst2_base, BIT(4), CLK_SET_RATE_GATE); 505 + bases[CLKRST2_INDEX], BIT(4), CLK_SET_RATE_GATE); 541 506 clk_register_clkdev(clk, NULL, "sdi1"); 542 507 543 508 clk = clk_reg_prcc_kclk("p2_sdi3_kclk", "sdmmcclk", 544 - clkrst2_base, BIT(5), CLK_SET_RATE_GATE); 509 + bases[CLKRST2_INDEX], BIT(5), CLK_SET_RATE_GATE); 545 510 clk_register_clkdev(clk, NULL, "sdi3"); 546 511 547 512 clk = clk_reg_prcc_kclk("p2_ssirx_kclk", "hsirxclk", 548 - clkrst2_base, BIT(6), 513 + bases[CLKRST2_INDEX], BIT(6), 549 514 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 550 515 clk_register_clkdev(clk, "hsir_hsirxclk", "ste_hsi.0"); 551 516 552 517 clk = clk_reg_prcc_kclk("p2_ssitx_kclk", "hsitxclk", 553 - clkrst2_base, BIT(7), 518 + bases[CLKRST2_INDEX], BIT(7), 554 519 CLK_SET_RATE_GATE|CLK_SET_RATE_PARENT); 555 520 clk_register_clkdev(clk, "hsit_hsitxclk", "ste_hsi.0"); 556 521 557 522 /* Should only be 9540, but might be added for 85xx as well */ 558 523 clk = clk_reg_prcc_kclk("p2_msp4_kclk", "msp02clk", 559 - clkrst2_base, BIT(9), CLK_SET_RATE_GATE); 524 + bases[CLKRST2_INDEX], BIT(9), CLK_SET_RATE_GATE); 560 525 clk_register_clkdev(clk, NULL, "msp4"); 561 526 clk_register_clkdev(clk, "msp4", "ab85xx-codec.0"); 562 527 563 528 /* Peripheral 3 : PRCC K-clocks */ 564 529 clk = clk_reg_prcc_kclk("p3_ssp0_kclk", "sspclk", 565 - clkrst3_base, BIT(1), CLK_SET_RATE_GATE); 530 + bases[CLKRST3_INDEX], BIT(1), CLK_SET_RATE_GATE); 566 531 clk_register_clkdev(clk, NULL, "ssp0"); 567 532 568 533 clk = clk_reg_prcc_kclk("p3_ssp1_kclk", "sspclk", 569 - clkrst3_base, BIT(2), CLK_SET_RATE_GATE); 534 + bases[CLKRST3_INDEX], BIT(2), CLK_SET_RATE_GATE); 570 535 clk_register_clkdev(clk, NULL, "ssp1"); 571 536 572 537 clk = clk_reg_prcc_kclk("p3_i2c0_kclk", "i2cclk", 573 - clkrst3_base, BIT(3), CLK_SET_RATE_GATE); 538 + bases[CLKRST3_INDEX], BIT(3), CLK_SET_RATE_GATE); 574 539 clk_register_clkdev(clk, NULL, "nmk-i2c.0"); 575 540 576 541 clk = clk_reg_prcc_kclk("p3_sdi2_kclk", "sdmmchclk", 577 - clkrst3_base, BIT(4), CLK_SET_RATE_GATE); 542 + bases[CLKRST3_INDEX], BIT(4), CLK_SET_RATE_GATE); 578 543 clk_register_clkdev(clk, NULL, "sdi2"); 579 544 580 545 clk = clk_reg_prcc_kclk("p3_ske_kclk", "rtc32k", 581 - clkrst3_base, BIT(5), CLK_SET_RATE_GATE); 546 + bases[CLKRST3_INDEX], BIT(5), CLK_SET_RATE_GATE); 582 547 clk_register_clkdev(clk, NULL, "ske"); 583 548 clk_register_clkdev(clk, NULL, "nmk-ske-keypad"); 584 549 585 550 clk = clk_reg_prcc_kclk("p3_uart2_kclk", "uartclk", 586 - clkrst3_base, BIT(6), CLK_SET_RATE_GATE); 551 + bases[CLKRST3_INDEX], BIT(6), CLK_SET_RATE_GATE); 587 552 clk_register_clkdev(clk, NULL, "uart2"); 588 553 589 554 clk = clk_reg_prcc_kclk("p3_sdi5_kclk", "sdmmcclk", 590 - clkrst3_base, BIT(7), CLK_SET_RATE_GATE); 555 + bases[CLKRST3_INDEX], BIT(7), CLK_SET_RATE_GATE); 591 556 clk_register_clkdev(clk, NULL, "sdi5"); 592 557 593 558 clk = clk_reg_prcc_kclk("p3_i2c5_kclk", "i2cclk", 594 - clkrst3_base, BIT(8), CLK_SET_RATE_GATE); 559 + bases[CLKRST3_INDEX], BIT(8), CLK_SET_RATE_GATE); 595 560 clk_register_clkdev(clk, NULL, "nmk-i2c.5"); 596 561 597 562 clk = clk_reg_prcc_kclk("p3_i2c6_kclk", "i2cclk", 598 - clkrst3_base, BIT(9), CLK_SET_RATE_GATE); 563 + bases[CLKRST3_INDEX], BIT(9), CLK_SET_RATE_GATE); 599 564 clk_register_clkdev(clk, NULL, "nmk-i2c.6"); 600 565 601 566 clk = clk_reg_prcc_kclk("p3_uart3_kclk", "uartclk", 602 - clkrst3_base, BIT(10), CLK_SET_RATE_GATE); 567 + bases[CLKRST3_INDEX], BIT(10), CLK_SET_RATE_GATE); 603 568 clk_register_clkdev(clk, NULL, "uart3"); 604 569 605 570 clk = clk_reg_prcc_kclk("p3_uart4_kclk", "uartclk", 606 - clkrst3_base, BIT(11), CLK_SET_RATE_GATE); 571 + bases[CLKRST3_INDEX], BIT(11), CLK_SET_RATE_GATE); 607 572 clk_register_clkdev(clk, NULL, "uart4"); 608 573 609 574 /* Peripheral 6 : PRCC K-clocks */ 610 575 clk = clk_reg_prcc_kclk("p6_rng_kclk", "rngclk", 611 - clkrst6_base, BIT(0), CLK_SET_RATE_GATE); 576 + bases[CLKRST6_INDEX], BIT(0), CLK_SET_RATE_GATE); 612 577 clk_register_clkdev(clk, NULL, "rng"); 613 578 }
+1 -2
drivers/clk/ux500/u9540_clk.c
··· 12 12 #include <linux/platform_data/clk-ux500.h> 13 13 #include "clk.h" 14 14 15 - void u9540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 16 - u32 clkrst5_base, u32 clkrst6_base) 15 + void u9540_clk_init(void) 17 16 { 18 17 /* register clocks here */ 19 18 }
+3 -7
include/linux/platform_data/clk-ux500.h
··· 10 10 #ifndef __CLK_UX500_H 11 11 #define __CLK_UX500_H 12 12 13 - void u8500_of_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 14 - u32 clkrst5_base, u32 clkrst6_base); 15 - 16 - void u9540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 17 - u32 clkrst5_base, u32 clkrst6_base); 18 - void u8540_clk_init(u32 clkrst1_base, u32 clkrst2_base, u32 clkrst3_base, 19 - u32 clkrst5_base, u32 clkrst6_base); 13 + void u8500_clk_init(void); 14 + void u9540_clk_init(void); 15 + void u8540_clk_init(void); 20 16 21 17 #endif /* __CLK_UX500_H */