[ARM] 3426/1: ARM: OMAP: 1/8 Update clock framework

Patch from Tony Lindgren

Update OMAP clock framework from linux-omap tree.
The highlights of the patch are:

- Add support for omap730 clocks by Andrzej Zaborowski
- Fix compile warnings by Dirk Behme
- Add support for using dev id by Tony Lindgren and Komal Shah
- Move memory timings and PRCM into separate files by Tony Lindgren

Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Tony Lindgren and committed by
Russell King
b824efae 3267c077

+478 -597
+7 -2
arch/arm/mach-omap1/clock.c
··· 345 */ 346 for (dsor = 2; dsor < 96; ++dsor) { 347 if ((dsor & 1) && dsor > 8) 348 - continue; 349 if (rate >= 96000000 / dsor) 350 break; 351 } ··· 687 clk_register(*clkp); 688 continue; 689 } 690 } 691 692 info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config); ··· 789 clk_enable(&armxor_ck.clk); 790 clk_enable(&armtim_ck.clk); /* This should be done by timer code */ 791 792 - if (cpu_is_omap1510()) 793 clk_enable(&arm_gpio_ck); 794 795 return 0;
··· 345 */ 346 for (dsor = 2; dsor < 96; ++dsor) { 347 if ((dsor & 1) && dsor > 8) 348 + continue; 349 if (rate >= 96000000 / dsor) 350 break; 351 } ··· 687 clk_register(*clkp); 688 continue; 689 } 690 + 691 + if (((*clkp)->flags &CLOCK_IN_OMAP310) && cpu_is_omap310()) { 692 + clk_register(*clkp); 693 + continue; 694 + } 695 } 696 697 info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config); ··· 784 clk_enable(&armxor_ck.clk); 785 clk_enable(&armtim_ck.clk); /* This should be done by timer code */ 786 787 + if (cpu_is_omap15xx()) 788 clk_enable(&arm_gpio_ck); 789 790 return 0;
+59 -32
arch/arm/mach-omap1/clock.h
··· 151 .name = "ck_ref", 152 .rate = 12000000, 153 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 154 - ALWAYS_ENABLED, 155 .enable = &omap1_clk_enable_generic, 156 .disable = &omap1_clk_disable_generic, 157 }; ··· 160 .name = "ck_dpll1", 161 .parent = &ck_ref, 162 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 163 - RATE_PROPAGATES | ALWAYS_ENABLED, 164 .enable = &omap1_clk_enable_generic, 165 .disable = &omap1_clk_disable_generic, 166 }; ··· 183 .name = "arm_ck", 184 .parent = &ck_dpll1, 185 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 186 - RATE_CKCTL | RATE_PROPAGATES | ALWAYS_ENABLED, 187 .rate_offset = CKCTL_ARMDIV_OFFSET, 188 .recalc = &omap1_ckctl_recalc, 189 .enable = &omap1_clk_enable_generic, ··· 196 .name = "armper_ck", 197 .parent = &ck_dpll1, 198 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 199 - RATE_CKCTL | CLOCK_IDLE_CONTROL, 200 .enable_reg = (void __iomem *)ARM_IDLECT2, 201 .enable_bit = EN_PERCK, 202 .rate_offset = CKCTL_PERDIV_OFFSET, ··· 211 static struct clk arm_gpio_ck = { 212 .name = "arm_gpio_ck", 213 .parent = &ck_dpll1, 214 - .flags = CLOCK_IN_OMAP1510, 215 .enable_reg = (void __iomem *)ARM_IDLECT2, 216 .enable_bit = EN_GPIOCK, 217 .recalc = &followparent_recalc, ··· 224 .name = "armxor_ck", 225 .parent = &ck_ref, 226 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 227 - CLOCK_IDLE_CONTROL, 228 .enable_reg = (void __iomem *)ARM_IDLECT2, 229 .enable_bit = EN_XORPCK, 230 .recalc = &followparent_recalc, ··· 239 .name = "armtim_ck", 240 .parent = &ck_ref, 241 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 242 - CLOCK_IDLE_CONTROL, 243 .enable_reg = (void __iomem *)ARM_IDLECT2, 244 .enable_bit = EN_TIMCK, 245 .recalc = &followparent_recalc, ··· 254 .name = "armwdt_ck", 255 .parent = &ck_ref, 256 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 257 - CLOCK_IDLE_CONTROL, 258 .enable_reg = (void __iomem *)ARM_IDLECT2, 259 .enable_bit = EN_WDTCK, 260 .recalc = &omap1_watchdog_recalc, ··· 346 .name = "tc_ck", 347 .parent = &ck_dpll1, 348 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 349 - CLOCK_IN_OMAP730 | RATE_CKCTL | 350 - RATE_PROPAGATES | ALWAYS_ENABLED | 351 - CLOCK_IDLE_CONTROL, 352 .rate_offset = CKCTL_TCDIV_OFFSET, 353 .recalc = &omap1_ckctl_recalc, 354 .enable = &omap1_clk_enable_generic, ··· 360 static struct clk arminth_ck1510 = { 361 .name = "arminth_ck", 362 .parent = &tc_ck.clk, 363 - .flags = CLOCK_IN_OMAP1510 | ALWAYS_ENABLED, 364 .recalc = &followparent_recalc, 365 /* Note: On 1510 the frequency follows TC_CK 366 * ··· 375 /* No-idle controlled by "tc_ck" */ 376 .name = "tibp_ck", 377 .parent = &tc_ck.clk, 378 - .flags = CLOCK_IN_OMAP1510 | ALWAYS_ENABLED, 379 .recalc = &followparent_recalc, 380 .enable = &omap1_clk_enable_generic, 381 .disable = &omap1_clk_disable_generic, ··· 421 .name = "dma_ck", 422 .parent = &tc_ck.clk, 423 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 424 - ALWAYS_ENABLED, 425 .recalc = &followparent_recalc, 426 .enable = &omap1_clk_enable_generic, 427 .disable = &omap1_clk_disable_generic, ··· 441 .name = "api_ck", 442 .parent = &tc_ck.clk, 443 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 444 - CLOCK_IDLE_CONTROL, 445 .enable_reg = (void __iomem *)ARM_IDLECT2, 446 .enable_bit = EN_APICK, 447 .recalc = &followparent_recalc, ··· 455 .clk = { 456 .name = "lb_ck", 457 .parent = &tc_ck.clk, 458 - .flags = CLOCK_IN_OMAP1510 | CLOCK_IDLE_CONTROL, 459 .enable_reg = (void __iomem *)ARM_IDLECT2, 460 .enable_bit = EN_LBCK, 461 .recalc = &followparent_recalc, ··· 500 .clk = { 501 .name = "lcd_ck", 502 .parent = &ck_dpll1, 503 - .flags = CLOCK_IN_OMAP1510 | RATE_CKCTL | 504 - CLOCK_IDLE_CONTROL, 505 .enable_reg = (void __iomem *)ARM_IDLECT2, 506 .enable_bit = EN_LCDCK, 507 .rate_offset = CKCTL_LCDDIV_OFFSET, ··· 517 /* Direct from ULPD, no real parent */ 518 .parent = &armper_ck.clk, 519 .rate = 12000000, 520 - .flags = CLOCK_IN_OMAP1510 | ENABLE_REG_32BIT | 521 - ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 522 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 523 .enable_bit = 29, /* Chooses between 12MHz and 48MHz */ 524 .set_rate = &omap1_set_uart_rate, ··· 550 .parent = &armper_ck.clk, 551 .rate = 12000000, 552 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 553 - ENABLE_REG_32BIT | ALWAYS_ENABLED | 554 - CLOCK_NO_IDLE_PARENT, 555 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 556 .enable_bit = 30, /* Chooses between 12MHz and 48MHz */ 557 .set_rate = &omap1_set_uart_rate, ··· 565 /* Direct from ULPD, no real parent */ 566 .parent = &armper_ck.clk, 567 .rate = 12000000, 568 - .flags = CLOCK_IN_OMAP1510 | ENABLE_REG_32BIT | 569 - ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 570 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 571 .enable_bit = 31, /* Chooses between 12MHz and 48MHz */ 572 .set_rate = &omap1_set_uart_rate, ··· 597 /* Direct from ULPD, no parent */ 598 .rate = 6000000, 599 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 600 - RATE_FIXED | ENABLE_REG_32BIT, 601 .enable_reg = (void __iomem *)ULPD_CLOCK_CTRL, 602 .enable_bit = USB_MCLK_EN_BIT, 603 .enable = &omap1_clk_enable_generic, ··· 608 .name = "usb_hhc_ck", 609 /* Direct from ULPD, no parent */ 610 .rate = 48000000, /* Actually 2 clocks, 12MHz and 48MHz */ 611 - .flags = CLOCK_IN_OMAP1510 | 612 RATE_FIXED | ENABLE_REG_32BIT, 613 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 614 .enable_bit = USB_HOST_HHC_UHOST_EN, ··· 644 .name = "mclk", 645 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 646 .rate = 12000000, 647 - .flags = CLOCK_IN_OMAP1510 | RATE_FIXED, 648 .enable = &omap1_clk_enable_generic, 649 .disable = &omap1_clk_disable_generic, 650 }; ··· 668 .name = "bclk", 669 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 670 .rate = 12000000, 671 - .flags = CLOCK_IN_OMAP1510 | RATE_FIXED, 672 .enable = &omap1_clk_enable_generic, 673 .disable = &omap1_clk_disable_generic, 674 }; ··· 687 }; 688 689 static struct clk mmc1_ck = { 690 - .name = "mmc1_ck", 691 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 692 .parent = &armper_ck.clk, 693 .rate = 48000000, 694 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 695 - RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT, 696 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 697 .enable_bit = 23, 698 .enable = &omap1_clk_enable_generic, ··· 702 }; 703 704 static struct clk mmc2_ck = { 705 - .name = "mmc2_ck", 706 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 707 .parent = &armper_ck.clk, 708 .rate = 48000000, ··· 718 static struct clk virtual_ck_mpu = { 719 .name = "mpu", 720 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 721 - VIRTUAL_CLOCK | ALWAYS_ENABLED, 722 .parent = &arm_ck, /* Is smarter alias for */ 723 .recalc = &followparent_recalc, 724 .set_rate = &omap1_select_table_rate, 725 .round_rate = &omap1_round_to_table_rate, 726 .enable = &omap1_clk_enable_generic, 727 .disable = &omap1_clk_disable_generic, 728 }; ··· 789 &mmc2_ck, 790 /* Virtual clocks */ 791 &virtual_ck_mpu, 792 }; 793 794 #endif
··· 151 .name = "ck_ref", 152 .rate = 12000000, 153 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 154 + CLOCK_IN_OMAP310 | ALWAYS_ENABLED, 155 .enable = &omap1_clk_enable_generic, 156 .disable = &omap1_clk_disable_generic, 157 }; ··· 160 .name = "ck_dpll1", 161 .parent = &ck_ref, 162 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 163 + CLOCK_IN_OMAP310 | RATE_PROPAGATES | ALWAYS_ENABLED, 164 .enable = &omap1_clk_enable_generic, 165 .disable = &omap1_clk_disable_generic, 166 }; ··· 183 .name = "arm_ck", 184 .parent = &ck_dpll1, 185 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 186 + CLOCK_IN_OMAP310 | RATE_CKCTL | RATE_PROPAGATES | 187 + ALWAYS_ENABLED, 188 .rate_offset = CKCTL_ARMDIV_OFFSET, 189 .recalc = &omap1_ckctl_recalc, 190 .enable = &omap1_clk_enable_generic, ··· 195 .name = "armper_ck", 196 .parent = &ck_dpll1, 197 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 198 + CLOCK_IN_OMAP310 | RATE_CKCTL | 199 + CLOCK_IDLE_CONTROL, 200 .enable_reg = (void __iomem *)ARM_IDLECT2, 201 .enable_bit = EN_PERCK, 202 .rate_offset = CKCTL_PERDIV_OFFSET, ··· 209 static struct clk arm_gpio_ck = { 210 .name = "arm_gpio_ck", 211 .parent = &ck_dpll1, 212 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310, 213 .enable_reg = (void __iomem *)ARM_IDLECT2, 214 .enable_bit = EN_GPIOCK, 215 .recalc = &followparent_recalc, ··· 222 .name = "armxor_ck", 223 .parent = &ck_ref, 224 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 225 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 226 .enable_reg = (void __iomem *)ARM_IDLECT2, 227 .enable_bit = EN_XORPCK, 228 .recalc = &followparent_recalc, ··· 237 .name = "armtim_ck", 238 .parent = &ck_ref, 239 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 240 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 241 .enable_reg = (void __iomem *)ARM_IDLECT2, 242 .enable_bit = EN_TIMCK, 243 .recalc = &followparent_recalc, ··· 252 .name = "armwdt_ck", 253 .parent = &ck_ref, 254 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 255 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 256 .enable_reg = (void __iomem *)ARM_IDLECT2, 257 .enable_bit = EN_WDTCK, 258 .recalc = &omap1_watchdog_recalc, ··· 344 .name = "tc_ck", 345 .parent = &ck_dpll1, 346 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 347 + CLOCK_IN_OMAP730 | CLOCK_IN_OMAP310 | 348 + RATE_CKCTL | RATE_PROPAGATES | 349 + ALWAYS_ENABLED | CLOCK_IDLE_CONTROL, 350 .rate_offset = CKCTL_TCDIV_OFFSET, 351 .recalc = &omap1_ckctl_recalc, 352 .enable = &omap1_clk_enable_generic, ··· 358 static struct clk arminth_ck1510 = { 359 .name = "arminth_ck", 360 .parent = &tc_ck.clk, 361 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 362 + ALWAYS_ENABLED, 363 .recalc = &followparent_recalc, 364 /* Note: On 1510 the frequency follows TC_CK 365 * ··· 372 /* No-idle controlled by "tc_ck" */ 373 .name = "tibp_ck", 374 .parent = &tc_ck.clk, 375 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 376 + ALWAYS_ENABLED, 377 .recalc = &followparent_recalc, 378 .enable = &omap1_clk_enable_generic, 379 .disable = &omap1_clk_disable_generic, ··· 417 .name = "dma_ck", 418 .parent = &tc_ck.clk, 419 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 420 + CLOCK_IN_OMAP310 | ALWAYS_ENABLED, 421 .recalc = &followparent_recalc, 422 .enable = &omap1_clk_enable_generic, 423 .disable = &omap1_clk_disable_generic, ··· 437 .name = "api_ck", 438 .parent = &tc_ck.clk, 439 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 440 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 441 .enable_reg = (void __iomem *)ARM_IDLECT2, 442 .enable_bit = EN_APICK, 443 .recalc = &followparent_recalc, ··· 451 .clk = { 452 .name = "lb_ck", 453 .parent = &tc_ck.clk, 454 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 455 + CLOCK_IDLE_CONTROL, 456 .enable_reg = (void __iomem *)ARM_IDLECT2, 457 .enable_bit = EN_LBCK, 458 .recalc = &followparent_recalc, ··· 495 .clk = { 496 .name = "lcd_ck", 497 .parent = &ck_dpll1, 498 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 499 + RATE_CKCTL | CLOCK_IDLE_CONTROL, 500 .enable_reg = (void __iomem *)ARM_IDLECT2, 501 .enable_bit = EN_LCDCK, 502 .rate_offset = CKCTL_LCDDIV_OFFSET, ··· 512 /* Direct from ULPD, no real parent */ 513 .parent = &armper_ck.clk, 514 .rate = 12000000, 515 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 516 + ENABLE_REG_32BIT | ALWAYS_ENABLED | 517 + CLOCK_NO_IDLE_PARENT, 518 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 519 .enable_bit = 29, /* Chooses between 12MHz and 48MHz */ 520 .set_rate = &omap1_set_uart_rate, ··· 544 .parent = &armper_ck.clk, 545 .rate = 12000000, 546 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 547 + CLOCK_IN_OMAP310 | ENABLE_REG_32BIT | 548 + ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 549 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 550 .enable_bit = 30, /* Chooses between 12MHz and 48MHz */ 551 .set_rate = &omap1_set_uart_rate, ··· 559 /* Direct from ULPD, no real parent */ 560 .parent = &armper_ck.clk, 561 .rate = 12000000, 562 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 563 + ENABLE_REG_32BIT | ALWAYS_ENABLED | 564 + CLOCK_NO_IDLE_PARENT, 565 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 566 .enable_bit = 31, /* Chooses between 12MHz and 48MHz */ 567 .set_rate = &omap1_set_uart_rate, ··· 590 /* Direct from ULPD, no parent */ 591 .rate = 6000000, 592 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 593 + CLOCK_IN_OMAP310 | RATE_FIXED | ENABLE_REG_32BIT, 594 .enable_reg = (void __iomem *)ULPD_CLOCK_CTRL, 595 .enable_bit = USB_MCLK_EN_BIT, 596 .enable = &omap1_clk_enable_generic, ··· 601 .name = "usb_hhc_ck", 602 /* Direct from ULPD, no parent */ 603 .rate = 48000000, /* Actually 2 clocks, 12MHz and 48MHz */ 604 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 605 RATE_FIXED | ENABLE_REG_32BIT, 606 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 607 .enable_bit = USB_HOST_HHC_UHOST_EN, ··· 637 .name = "mclk", 638 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 639 .rate = 12000000, 640 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | RATE_FIXED, 641 + .enable_reg = (void __iomem *)SOFT_REQ_REG, 642 + .enable_bit = 6, 643 .enable = &omap1_clk_enable_generic, 644 .disable = &omap1_clk_disable_generic, 645 }; ··· 659 .name = "bclk", 660 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 661 .rate = 12000000, 662 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | RATE_FIXED, 663 .enable = &omap1_clk_enable_generic, 664 .disable = &omap1_clk_disable_generic, 665 }; ··· 678 }; 679 680 static struct clk mmc1_ck = { 681 + .name = "mmc_ck", 682 + .id = 1, 683 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 684 .parent = &armper_ck.clk, 685 .rate = 48000000, 686 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 687 + CLOCK_IN_OMAP310 | RATE_FIXED | ENABLE_REG_32BIT | 688 + CLOCK_NO_IDLE_PARENT, 689 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 690 .enable_bit = 23, 691 .enable = &omap1_clk_enable_generic, ··· 691 }; 692 693 static struct clk mmc2_ck = { 694 + .name = "mmc_ck", 695 + .id = 2, 696 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 697 .parent = &armper_ck.clk, 698 .rate = 48000000, ··· 706 static struct clk virtual_ck_mpu = { 707 .name = "mpu", 708 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 709 + CLOCK_IN_OMAP310 | VIRTUAL_CLOCK | ALWAYS_ENABLED, 710 .parent = &arm_ck, /* Is smarter alias for */ 711 .recalc = &followparent_recalc, 712 .set_rate = &omap1_select_table_rate, 713 .round_rate = &omap1_round_to_table_rate, 714 + .enable = &omap1_clk_enable_generic, 715 + .disable = &omap1_clk_disable_generic, 716 + }; 717 + 718 + /* virtual functional clock domain for I2C. Just for making sure that ARMXOR_CK 719 + remains active during MPU idle whenever this is enabled */ 720 + static struct clk i2c_fck = { 721 + .name = "i2c_fck", 722 + .id = 1, 723 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 724 + VIRTUAL_CLOCK | CLOCK_NO_IDLE_PARENT | 725 + ALWAYS_ENABLED, 726 + .parent = &armxor_ck.clk, 727 + .recalc = &followparent_recalc, 728 .enable = &omap1_clk_enable_generic, 729 .disable = &omap1_clk_disable_generic, 730 }; ··· 763 &mmc2_ck, 764 /* Virtual clocks */ 765 &virtual_ck_mpu, 766 + &i2c_fck, 767 }; 768 769 #endif
+14 -65
arch/arm/mach-omap2/clock.c
··· 28 29 #include <asm/arch/clock.h> 30 #include <asm/arch/sram.h> 31 - #include <asm/arch/prcm.h> 32 33 #include "clock.h" 34 35 //#define DOWN_VARIABLE_DPLL 1 /* Experimental */ 36 37 static struct prcm_config *curr_prcm_set; 38 - static struct memory_timings mem_timings; 39 static u32 curr_perf_level = PRCM_FULL_SPEED; 40 41 /*------------------------------------------------------------------------- ··· 54 55 static u32 omap2_get_dpll_rate(struct clk * tclk) 56 { 57 - int dpll_clk, dpll_mult, dpll_div, amult; 58 59 dpll_mult = (CM_CLKSEL1_PLL >> 12) & 0x03ff; /* 10 bits */ 60 dpll_div = (CM_CLKSEL1_PLL >> 8) & 0x0f; /* 4 bits */ 61 - dpll_clk = (tclk->parent->rate * dpll_mult) / (dpll_div + 1); 62 amult = CM_CLKSEL2_PLL & 0x3; 63 dpll_clk *= amult; 64 ··· 387 return 0; 388 } 389 390 - static void omap2_init_memory_params(u32 force_lock_to_unlock_mode) 391 - { 392 - unsigned long dll_cnt; 393 - u32 fast_dll = 0; 394 - 395 - mem_timings.m_type = !((SDRC_MR_0 & 0x3) == 0x1); /* DDR = 1, SDR = 0 */ 396 - 397 - /* 2422 es2.05 and beyond has a single SIP DDR instead of 2 like others. 398 - * In the case of 2422, its ok to use CS1 instead of CS0. 399 - */ 400 - 401 - #if 0 /* FIXME: Enable after 24xx cpu detection works */ 402 - ctype = get_cpu_type(); 403 - if (cpu_is_omap2422()) 404 - mem_timings.base_cs = 1; 405 - else 406 - #endif 407 - mem_timings.base_cs = 0; 408 - 409 - if (mem_timings.m_type != M_DDR) 410 - return; 411 - 412 - /* With DDR we need to determine the low frequency DLL value */ 413 - if (((mem_timings.fast_dll_ctrl & (1 << 2)) == M_LOCK_CTRL)) 414 - mem_timings.dll_mode = M_UNLOCK; 415 - else 416 - mem_timings.dll_mode = M_LOCK; 417 - 418 - if (mem_timings.base_cs == 0) { 419 - fast_dll = SDRC_DLLA_CTRL; 420 - dll_cnt = SDRC_DLLA_STATUS & 0xff00; 421 - } else { 422 - fast_dll = SDRC_DLLB_CTRL; 423 - dll_cnt = SDRC_DLLB_STATUS & 0xff00; 424 - } 425 - if (force_lock_to_unlock_mode) { 426 - fast_dll &= ~0xff00; 427 - fast_dll |= dll_cnt; /* Current lock mode */ 428 - } 429 - mem_timings.fast_dll_ctrl = fast_dll; 430 - 431 - /* No disruptions, DDR will be offline & C-ABI not followed */ 432 - omap2_sram_ddr_init(&mem_timings.slow_dll_ctrl, 433 - mem_timings.fast_dll_ctrl, 434 - mem_timings.base_cs, 435 - force_lock_to_unlock_mode); 436 - mem_timings.slow_dll_ctrl &= 0xff00; /* Keep lock value */ 437 - 438 - /* Turn status into unlock ctrl */ 439 - mem_timings.slow_dll_ctrl |= 440 - ((mem_timings.fast_dll_ctrl & 0xF) | (1 << 2)); 441 - 442 - /* 90 degree phase for anything below 133Mhz */ 443 - mem_timings.slow_dll_ctrl |= (1 << 1); 444 - } 445 - 446 static u32 omap2_reprogram_sdrc(u32 level, u32 force) 447 { 448 u32 prev = curr_perf_level, flags; 449 450 if ((curr_perf_level == level) && !force) 451 return prev; 452 453 if (level == PRCM_HALF_SPEED) { 454 local_irq_save(flags); 455 PRCM_VOLTSETUP = 0xffff; 456 omap2_sram_reprogram_sdrc(PRCM_HALF_SPEED, 457 - mem_timings.slow_dll_ctrl, 458 - mem_timings.m_type); 459 curr_perf_level = PRCM_HALF_SPEED; 460 local_irq_restore(flags); 461 } ··· 411 local_irq_save(flags); 412 PRCM_VOLTSETUP = 0xffff; 413 omap2_sram_reprogram_sdrc(PRCM_FULL_SPEED, 414 - mem_timings.fast_dll_ctrl, 415 - mem_timings.m_type); 416 curr_perf_level = PRCM_FULL_SPEED; 417 local_irq_restore(flags); 418 } ··· 599 case 13: /* dss2 */ 600 mask = 0x1; break; 601 case 25: /* usb */ 602 - mask = 0xf; break; 603 } 604 } 605
··· 28 29 #include <asm/arch/clock.h> 30 #include <asm/arch/sram.h> 31 32 + #include "prcm-regs.h" 33 + #include "memory.h" 34 #include "clock.h" 35 36 //#define DOWN_VARIABLE_DPLL 1 /* Experimental */ 37 38 static struct prcm_config *curr_prcm_set; 39 static u32 curr_perf_level = PRCM_FULL_SPEED; 40 41 /*------------------------------------------------------------------------- ··· 54 55 static u32 omap2_get_dpll_rate(struct clk * tclk) 56 { 57 + long long dpll_clk; 58 + int dpll_mult, dpll_div, amult; 59 60 dpll_mult = (CM_CLKSEL1_PLL >> 12) & 0x03ff; /* 10 bits */ 61 dpll_div = (CM_CLKSEL1_PLL >> 8) & 0x0f; /* 4 bits */ 62 + dpll_clk = (long long)tclk->parent->rate * dpll_mult; 63 + do_div(dpll_clk, dpll_div + 1); 64 amult = CM_CLKSEL2_PLL & 0x3; 65 dpll_clk *= amult; 66 ··· 385 return 0; 386 } 387 388 static u32 omap2_reprogram_sdrc(u32 level, u32 force) 389 { 390 + u32 slow_dll_ctrl, fast_dll_ctrl, m_type; 391 u32 prev = curr_perf_level, flags; 392 393 if ((curr_perf_level == level) && !force) 394 return prev; 395 396 + m_type = omap2_memory_get_type(); 397 + slow_dll_ctrl = omap2_memory_get_slow_dll_ctrl(); 398 + fast_dll_ctrl = omap2_memory_get_fast_dll_ctrl(); 399 + 400 if (level == PRCM_HALF_SPEED) { 401 local_irq_save(flags); 402 PRCM_VOLTSETUP = 0xffff; 403 omap2_sram_reprogram_sdrc(PRCM_HALF_SPEED, 404 + slow_dll_ctrl, m_type); 405 curr_perf_level = PRCM_HALF_SPEED; 406 local_irq_restore(flags); 407 } ··· 461 local_irq_save(flags); 462 PRCM_VOLTSETUP = 0xffff; 463 omap2_sram_reprogram_sdrc(PRCM_FULL_SPEED, 464 + fast_dll_ctrl, m_type); 465 curr_perf_level = PRCM_FULL_SPEED; 466 local_irq_restore(flags); 467 } ··· 650 case 13: /* dss2 */ 651 mask = 0x1; break; 652 case 25: /* usb */ 653 + mask = 0x7; break; 654 } 655 } 656
+19 -18
arch/arm/mach-omap2/clock.h
··· 33 #define RATE_IN_242X (1 << 0) 34 #define RATE_IN_243X (1 << 1) 35 36 - /* Memory timings */ 37 - #define M_DDR 1 38 - #define M_LOCK_CTRL (1 << 2) 39 - #define M_UNLOCK 0 40 - #define M_LOCK 1 41 - 42 - struct memory_timings { 43 - u32 m_type; /* ddr = 1, sdr = 0 */ 44 - u32 dll_mode; /* use lock mode = 1, unlock mode = 0 */ 45 - u32 slow_dll_ctrl; /* unlock mode, dll value for slow speed */ 46 - u32 fast_dll_ctrl; /* unlock mode, dll value for fast speed */ 47 - u32 base_cs; /* base chip select to use for calculations */ 48 - }; 49 - 50 /* Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. 51 * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,CM_CLKSEL_DSP 52 * CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL CM_CLKSEL2_PLL, CM_CLKSEL_MDM ··· 715 .enable_bit = 15, 716 .rate_offset = 11, 717 .recalc = &omap2_clksel_recalc, 718 }; 719 720 /* ··· 1698 }; 1699 1700 static struct clk i2c2_ick = { 1701 - .name = "i2c2_ick", 1702 .parent = &l4_ck, 1703 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1704 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1708 }; 1709 1710 static struct clk i2c2_fck = { 1711 - .name = "i2c2_fck", 1712 .parent = &func_12m_ck, 1713 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1714 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1727 }; 1728 1729 static struct clk i2c1_ick = { 1730 - .name = "i2c1_ick", 1731 .parent = &l4_ck, 1732 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1733 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1737 }; 1738 1739 static struct clk i2c1_fck = { 1740 - .name = "i2c1_fck", 1741 .parent = &func_12m_ck, 1742 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1743 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1971 &wdt1_osc_ck, 1972 &sys_clkout, 1973 &sys_clkout2, 1974 /* mpu domain clocks */ 1975 &mpu_ck, 1976 /* dsp domain clocks */
··· 33 #define RATE_IN_242X (1 << 0) 34 #define RATE_IN_243X (1 << 1) 35 36 /* Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. 37 * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,CM_CLKSEL_DSP 38 * CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL CM_CLKSEL2_PLL, CM_CLKSEL_MDM ··· 729 .enable_bit = 15, 730 .rate_offset = 11, 731 .recalc = &omap2_clksel_recalc, 732 + }; 733 + 734 + static struct clk emul_ck = { 735 + .name = "emul_ck", 736 + .parent = &func_54m_ck, 737 + .flags = CLOCK_IN_OMAP242X, 738 + .enable_reg = (void __iomem *)&PRCM_CLKEMUL_CTRL, 739 + .enable_bit = 0, 740 + .recalc = &omap2_propagate_rate, 741 + 742 }; 743 744 /* ··· 1702 }; 1703 1704 static struct clk i2c2_ick = { 1705 + .name = "i2c_ick", 1706 + .id = 2, 1707 .parent = &l4_ck, 1708 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1709 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1711 }; 1712 1713 static struct clk i2c2_fck = { 1714 + .name = "i2c_fck", 1715 + .id = 2, 1716 .parent = &func_12m_ck, 1717 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1718 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1729 }; 1730 1731 static struct clk i2c1_ick = { 1732 + .name = "i2c_ick", 1733 + .id = 1, 1734 .parent = &l4_ck, 1735 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1736 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1738 }; 1739 1740 static struct clk i2c1_fck = { 1741 + .name = "i2c_fck", 1742 + .id = 1, 1743 .parent = &func_12m_ck, 1744 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1745 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1971 &wdt1_osc_ck, 1972 &sys_clkout, 1973 &sys_clkout2, 1974 + &emul_ck, 1975 /* mpu domain clocks */ 1976 &mpu_ck, 1977 /* dsp domain clocks */
+102
arch/arm/mach-omap2/memory.c
···
··· 1 + /* 2 + * linux/arch/arm/mach-omap2/memory.c 3 + * 4 + * Memory timing related functions for OMAP24XX 5 + * 6 + * Copyright (C) 2005 Texas Instruments Inc. 7 + * Richard Woodruff <r-woodruff2@ti.com> 8 + * 9 + * Copyright (C) 2005 Nokia Corporation 10 + * Tony Lindgren <tony@atomide.com> 11 + * 12 + * This program is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License version 2 as 14 + * published by the Free Software Foundation. 15 + */ 16 + 17 + #include <linux/config.h> 18 + #include <linux/module.h> 19 + #include <linux/kernel.h> 20 + #include <linux/device.h> 21 + #include <linux/list.h> 22 + #include <linux/errno.h> 23 + #include <linux/delay.h> 24 + #include <linux/clk.h> 25 + 26 + #include <asm/io.h> 27 + 28 + #include <asm/arch/clock.h> 29 + #include <asm/arch/sram.h> 30 + 31 + #include "prcm-regs.h" 32 + #include "memory.h" 33 + 34 + static struct memory_timings mem_timings; 35 + 36 + u32 omap2_memory_get_slow_dll_ctrl(void) 37 + { 38 + return mem_timings.slow_dll_ctrl; 39 + } 40 + 41 + u32 omap2_memory_get_fast_dll_ctrl(void) 42 + { 43 + return mem_timings.fast_dll_ctrl; 44 + } 45 + 46 + u32 omap2_memory_get_type(void) 47 + { 48 + return mem_timings.m_type; 49 + } 50 + 51 + void omap2_init_memory_params(u32 force_lock_to_unlock_mode) 52 + { 53 + unsigned long dll_cnt; 54 + u32 fast_dll = 0; 55 + 56 + mem_timings.m_type = !((SDRC_MR_0 & 0x3) == 0x1); /* DDR = 1, SDR = 0 */ 57 + 58 + /* 2422 es2.05 and beyond has a single SIP DDR instead of 2 like others. 59 + * In the case of 2422, its ok to use CS1 instead of CS0. 60 + */ 61 + if (cpu_is_omap2422()) 62 + mem_timings.base_cs = 1; 63 + else 64 + mem_timings.base_cs = 0; 65 + 66 + if (mem_timings.m_type != M_DDR) 67 + return; 68 + 69 + /* With DDR we need to determine the low frequency DLL value */ 70 + if (((mem_timings.fast_dll_ctrl & (1 << 2)) == M_LOCK_CTRL)) 71 + mem_timings.dll_mode = M_UNLOCK; 72 + else 73 + mem_timings.dll_mode = M_LOCK; 74 + 75 + if (mem_timings.base_cs == 0) { 76 + fast_dll = SDRC_DLLA_CTRL; 77 + dll_cnt = SDRC_DLLA_STATUS & 0xff00; 78 + } else { 79 + fast_dll = SDRC_DLLB_CTRL; 80 + dll_cnt = SDRC_DLLB_STATUS & 0xff00; 81 + } 82 + if (force_lock_to_unlock_mode) { 83 + fast_dll &= ~0xff00; 84 + fast_dll |= dll_cnt; /* Current lock mode */ 85 + } 86 + /* set fast timings with DLL filter disabled */ 87 + mem_timings.fast_dll_ctrl = (fast_dll | (3 << 8)); 88 + 89 + /* No disruptions, DDR will be offline & C-ABI not followed */ 90 + omap2_sram_ddr_init(&mem_timings.slow_dll_ctrl, 91 + mem_timings.fast_dll_ctrl, 92 + mem_timings.base_cs, 93 + force_lock_to_unlock_mode); 94 + mem_timings.slow_dll_ctrl &= 0xff00; /* Keep lock value */ 95 + 96 + /* Turn status into unlock ctrl */ 97 + mem_timings.slow_dll_ctrl |= 98 + ((mem_timings.fast_dll_ctrl & 0xF) | (1 << 2)); 99 + 100 + /* 90 degree phase for anything below 133Mhz + disable DLL filter */ 101 + mem_timings.slow_dll_ctrl |= ((1 << 1) | (3 << 8)); 102 + }
+34
arch/arm/mach-omap2/memory.h
···
··· 1 + /* 2 + * linux/arch/arm/mach-omap2/memory.h 3 + * 4 + * Interface for memory timing related functions for OMAP24XX 5 + * 6 + * Copyright (C) 2005 Texas Instruments Inc. 7 + * Richard Woodruff <r-woodruff2@ti.com> 8 + * 9 + * Copyright (C) 2005 Nokia Corporation 10 + * Tony Lindgren <tony@atomide.com> 11 + * 12 + * This program is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License version 2 as 14 + * published by the Free Software Foundation. 15 + */ 16 + 17 + /* Memory timings */ 18 + #define M_DDR 1 19 + #define M_LOCK_CTRL (1 << 2) 20 + #define M_UNLOCK 0 21 + #define M_LOCK 1 22 + 23 + struct memory_timings { 24 + u32 m_type; /* ddr = 1, sdr = 0 */ 25 + u32 dll_mode; /* use lock mode = 1, unlock mode = 0 */ 26 + u32 slow_dll_ctrl; /* unlock mode, dll value for slow speed */ 27 + u32 fast_dll_ctrl; /* unlock mode, dll value for fast speed */ 28 + u32 base_cs; /* base chip select to use for calculations */ 29 + }; 30 + 31 + extern void omap2_init_memory_params(u32 force_lock_to_unlock_mode); 32 + extern u32 omap2_memory_get_slow_dll_ctrl(void); 33 + extern u32 omap2_memory_get_fast_dll_ctrl(void); 34 + extern u32 omap2_memory_get_type(void);
+40
arch/arm/mach-omap2/prcm.c
···
··· 1 + /* 2 + * linux/arch/arm/mach-omap2/prcm.c 3 + * 4 + * OMAP 24xx Power Reset and Clock Management (PRCM) functions 5 + * 6 + * Copyright (C) 2005 Nokia Corporation 7 + * 8 + * Written by Tony Lindgren <tony.lindgren@nokia.com> 9 + * 10 + * Some pieces of code Copyright (C) 2005 Texas Instruments, Inc. 11 + * 12 + * This program is free software; you can redistribute it and/or modify 13 + * it under the terms of the GNU General Public License version 2 as 14 + * published by the Free Software Foundation. 15 + */ 16 + #include <linux/config.h> 17 + #include <linux/module.h> 18 + #include <linux/init.h> 19 + #include <linux/clk.h> 20 + 21 + #include "prcm-regs.h" 22 + 23 + u32 omap_prcm_get_reset_sources(void) 24 + { 25 + return RM_RSTST_WKUP & 0x7f; 26 + } 27 + EXPORT_SYMBOL(omap_prcm_get_reset_sources); 28 + 29 + /* Resets clock rates and reboots the system. Only called from system.h */ 30 + void omap_prcm_arch_reset(char mode) 31 + { 32 + u32 rate; 33 + struct clk *vclk, *sclk; 34 + 35 + vclk = clk_get(NULL, "virt_prcm_set"); 36 + sclk = clk_get(NULL, "sys_ck"); 37 + rate = clk_get_rate(sclk); 38 + clk_set_rate(vclk, rate); /* go to bypass for OMAP limitation */ 39 + RM_RSTCTRL_WKUP |= 2; 40 + }
+123 -59
arch/arm/mach-omap2/prcm.h arch/arm/mach-omap2/prcm-regs.h
··· 1 /* 2 - * prcm.h - Access definations for use in OMAP24XX clock and power management 3 * 4 * Copyright (C) 2005 Texas Instruments, Inc. 5 * ··· 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 - #ifndef __ASM_ARM_ARCH_DPM_PRCM_H 24 - #define __ASM_ARM_ARCH_DPM_PRCM_H 25 26 /* SET_PERFORMANCE_LEVEL PARAMETERS */ 27 #define PRCM_HALF_SPEED 1 ··· 161 #define CM_FCLKEN_MDM PRCM_REG32(0xC00) 162 #define CM_ICLKEN_MDM PRCM_REG32(0xC10) 163 #define CM_IDLEST_MDM PRCM_REG32(0xC20) 164 #define CM_CLKSEL_MDM PRCM_REG32(0xC40) 165 166 - /* FIXME: Move to header for 2430 */ 167 - #define DISP_BASE (OMAP24XX_L4_IO_BASE+0x50000) 168 #define DISP_REG32(offset) __REG32(DISP_BASE + (offset)) 169 170 - #define GPMC_BASE (OMAP24XX_GPMC_BASE) 171 - #define GPMC_REG32(offset) __REG32(GPMC_BASE + (offset)) 172 173 - #define GPT1_BASE (OMAP24XX_GPT1) 174 #define GPT1_REG32(offset) __REG32(GPT1_BASE + (offset)) 175 176 /* Misc sysconfig */ 177 #define DISPC_SYSCONFIG DISP_REG32(0x410) 178 - #define SPI_BASE (OMAP24XX_L4_IO_BASE+0x98000) 179 #define MCSPI1_SYSCONFIG __REG32(SPI_BASE + 0x10) 180 - #define MCSPI2_SYSCONFIG __REG32(SPI_BASE+0x2000 + 0x10) 181 182 - //#define DSP_MMU_SYSCONFIG 0x5A000010 183 - #define CAMERA_MMU_SYSCONFIG __REG32(DISP_BASE+0x2C10) 184 - //#define IVA_MMU_SYSCONFIG 0x5D000010 185 - //#define DSP_DMA_SYSCONFIG 0x00FCC02C 186 - #define CAMERA_DMA_SYSCONFIG __REG32(DISP_BASE+0x282C) 187 - #define SYSTEM_DMA_SYSCONFIG __REG32(DISP_BASE+0x602C) 188 #define GPMC_SYSCONFIG GPMC_REG32(0x010) 189 - #define MAILBOXES_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x94010) 190 - #define UART1_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6A054) 191 - #define UART2_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6C054) 192 - #define UART3_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6E054) 193 - //#define IVA_SYSCONFIG 0x5C060010 194 - #define SDRC_SYSCONFIG __REG32(OMAP24XX_SDRC_BASE+0x10) 195 - #define SMS_SYSCONFIG __REG32(OMAP24XX_SMS_BASE+0x10) 196 - #define SSI_SYSCONFIG __REG32(DISP_BASE+0x8010) 197 - //#define VLYNQ_SYSCONFIG 0x67FFFE10 198 199 /* rkw - good cannidates for PM_ to start what nm was trying */ 200 - #define OMAP24XX_GPT2 (OMAP24XX_L4_IO_BASE+0x2A000) 201 - #define OMAP24XX_GPT3 (OMAP24XX_L4_IO_BASE+0x78000) 202 - #define OMAP24XX_GPT4 (OMAP24XX_L4_IO_BASE+0x7A000) 203 - #define OMAP24XX_GPT5 (OMAP24XX_L4_IO_BASE+0x7C000) 204 - #define OMAP24XX_GPT6 (OMAP24XX_L4_IO_BASE+0x7E000) 205 - #define OMAP24XX_GPT7 (OMAP24XX_L4_IO_BASE+0x80000) 206 - #define OMAP24XX_GPT8 (OMAP24XX_L4_IO_BASE+0x82000) 207 - #define OMAP24XX_GPT9 (OMAP24XX_L4_IO_BASE+0x84000) 208 - #define OMAP24XX_GPT10 (OMAP24XX_L4_IO_BASE+0x86000) 209 - #define OMAP24XX_GPT11 (OMAP24XX_L4_IO_BASE+0x88000) 210 - #define OMAP24XX_GPT12 (OMAP24XX_L4_IO_BASE+0x8A000) 211 212 #define GPTIMER1_SYSCONFIG GPT1_REG32(0x010) 213 #define GPTIMER2_SYSCONFIG __REG32(OMAP24XX_GPT2 + 0x10) 214 #define GPTIMER3_SYSCONFIG __REG32(OMAP24XX_GPT3 + 0x10) ··· 231 #define GPTIMER11_SYSCONFIG __REG32(OMAP24XX_GPT11 + 0x10) 232 #define GPTIMER12_SYSCONFIG __REG32(OMAP24XX_GPT12 + 0x10) 233 234 - #define GPIOX_BASE(X) (OMAP24XX_GPIO_BASE+(0x2000*((X)-1))) 235 236 - #define GPIO1_SYSCONFIG __REG32((GPIOX_BASE(1)+0x10)) 237 - #define GPIO2_SYSCONFIG __REG32((GPIOX_BASE(2)+0x10)) 238 - #define GPIO3_SYSCONFIG __REG32((GPIOX_BASE(3)+0x10)) 239 - #define GPIO4_SYSCONFIG __REG32((GPIOX_BASE(4)+0x10)) 240 241 /* GP TIMER 1 */ 242 #define GPTIMER1_TISTAT GPT1_REG32(0x014) ··· 260 #define GPTIMER1_TCAR2 GPT1_REG32(0x044) 261 262 /* rkw -- base fix up please... */ 263 - #define GPTIMER3_TISR __REG32(OMAP24XX_L4_IO_BASE+0x78018) 264 265 /* SDRC */ 266 - #define SDRC_DLLA_CTRL __REG32(OMAP24XX_SDRC_BASE+0x060) 267 - #define SDRC_DLLA_STATUS __REG32(OMAP24XX_SDRC_BASE+0x064) 268 - #define SDRC_DLLB_CTRL __REG32(OMAP24XX_SDRC_BASE+0x068) 269 - #define SDRC_DLLB_STATUS __REG32(OMAP24XX_SDRC_BASE+0x06C) 270 - #define SDRC_POWER __REG32(OMAP24XX_SDRC_BASE+0x070) 271 - #define SDRC_MR_0 __REG32(OMAP24XX_SDRC_BASE+0x084) 272 273 /* GPIO 1 */ 274 #define GPIO1_BASE GPIOX_BASE(1) ··· 295 #define GPIO2_DATAIN GPIO2_REG32(0x038) 296 #define GPIO2_OE GPIO2_REG32(0x034) 297 #define GPIO2_DATAOUT GPIO2_REG32(0x03C) 298 299 /* GPIO 3 */ 300 #define GPIO3_BASE GPIOX_BASE(3) ··· 311 #define GPIO3_DATAIN GPIO3_REG32(0x038) 312 #define GPIO3_OE GPIO3_REG32(0x034) 313 #define GPIO3_DATAOUT GPIO3_REG32(0x03C) 314 #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 315 #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 316 ··· 332 #define GPIO4_DEBOUNCENABLE GPIO4_REG32(0x050) 333 #define GPIO4_DEBOUNCINGTIME GPIO4_REG32(0x054) 334 335 336 /* IO CONFIG */ 337 - #define CONTROL_BASE (OMAP24XX_CTRL_BASE) 338 - #define CONTROL_REG32(offset) __REG32(CONTROL_BASE + (offset)) 339 340 #define CONTROL_PADCONF_SPI1_NCS2 CONTROL_REG32(0x104) 341 #define CONTROL_PADCONF_SYS_XTALOUT CONTROL_REG32(0x134) ··· 359 #define CONTROL_PADCONF_MCBSP1_DX CONTROL_REG32(0x10C) 360 #define CONTROL_PADCONF_GPMC_NCS4 CONTROL_REG32(0x090) 361 #define CONTROL_PADCONF_DSS_D5 CONTROL_REG32(0x0B8) 362 - #define CONTROL_PADCONF_DSS_D9 CONTROL_REG32(0x0BC) 363 #define CONTROL_PADCONF_DSS_D13 CONTROL_REG32(0x0C0) 364 #define CONTROL_PADCONF_DSS_VSYNC CONTROL_REG32(0x0CC) 365 366 /* CONTROL */ 367 #define CONTROL_DEVCONF CONTROL_REG32(0x274) 368 369 /* INTERRUPT CONTROLLER */ 370 - #define INTC_BASE (OMAP24XX_L4_IO_BASE+0xfe000) 371 #define INTC_REG32(offset) __REG32(INTC_BASE + (offset)) 372 373 #define INTC1_U_BASE INTC_REG32(0x000) ··· 388 #define INTC_ISR_CLEAR2 INTC_REG32(0x0D4) 389 #define INTC_SIR_IRQ INTC_REG32(0x040) 390 #define INTC_CONTROL INTC_REG32(0x048) 391 - #define INTC_ILR11 INTC_REG32(0x12C) 392 #define INTC_ILR32 INTC_REG32(0x180) 393 - #define INTC_ILR37 INTC_REG32(0x194) 394 - #define INTC_SYSCONFIG INTC_REG32(0x010) 395 396 /* RAM FIREWALL */ 397 #define RAMFW_BASE (0x68005000) ··· 414 #define GPMC_CONFIG5_0 GPMC_REG32(0x070) 415 #define GPMC_CONFIG6_0 GPMC_REG32(0x074) 416 #define GPMC_CONFIG7_0 GPMC_REG32(0x078) 417 418 /* DSS */ 419 #define DSS_CONTROL DISP_REG32(0x040) ··· 465 #define DISPC_DATA_CYCLE2 DISP_REG32(0x5D8) 466 #define DISPC_DATA_CYCLE3 DISP_REG32(0x5DC) 467 468 - /* Wake up define for board */ 469 - #define GPIO97 (1 << 1) 470 - #define GPIO88 (1 << 24) 471 472 - #endif /* __ASSEMBLER__ */ 473 474 #endif 475
··· 1 /* 2 + * linux/arch/arm/mach-omap2/prcm-reg.h 3 + * 4 + * OMAP24XX Power Reset and Clock Management (PRCM) registers 5 * 6 * Copyright (C) 2005 Texas Instruments, Inc. 7 * ··· 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 + #ifndef __ARCH_ARM_MACH_OMAP2_PRCM_H 22 + #define __ARCH_ARM_MACH_OMAP2_PRCM_H 23 24 /* SET_PERFORMANCE_LEVEL PARAMETERS */ 25 #define PRCM_HALF_SPEED 1 ··· 159 #define CM_FCLKEN_MDM PRCM_REG32(0xC00) 160 #define CM_ICLKEN_MDM PRCM_REG32(0xC10) 161 #define CM_IDLEST_MDM PRCM_REG32(0xC20) 162 + #define CM_AUTOIDLE_MDM PRCM_REG32(0xC30) 163 #define CM_CLKSEL_MDM PRCM_REG32(0xC40) 164 + #define CM_CLKSTCTRL_MDM PRCM_REG32(0xC48) 165 + #define RM_RSTCTRL_MDM PRCM_REG32(0xC50) 166 + #define RM_RSTST_MDM PRCM_REG32(0xC58) 167 + #define PM_WKEN_MDM PRCM_REG32(0xCA0) 168 + #define PM_WKST_MDM PRCM_REG32(0xCB0) 169 + #define PM_WKDEP_MDM PRCM_REG32(0xCC8) 170 + #define PM_PWSTCTRL_MDM PRCM_REG32(0xCE0) 171 + #define PM_PWSTST_MDM PRCM_REG32(0xCE4) 172 173 + #define OMAP24XX_L4_IO_BASE 0x48000000 174 + 175 + #define DISP_BASE (OMAP24XX_L4_IO_BASE + 0x50000) 176 #define DISP_REG32(offset) __REG32(DISP_BASE + (offset)) 177 178 + #define OMAP24XX_GPMC_BASE (L3_24XX_BASE + 0xa000) 179 + #define GPMC_REG32(offset) __REG32(OMAP24XX_GPMC_BASE + (offset)) 180 181 + /* FIXME: Move these to timer code */ 182 + #define GPT1_BASE (0x48028000) 183 #define GPT1_REG32(offset) __REG32(GPT1_BASE + (offset)) 184 185 /* Misc sysconfig */ 186 #define DISPC_SYSCONFIG DISP_REG32(0x410) 187 + #define SPI_BASE (OMAP24XX_L4_IO_BASE + 0x98000) 188 #define MCSPI1_SYSCONFIG __REG32(SPI_BASE + 0x10) 189 + #define MCSPI2_SYSCONFIG __REG32(SPI_BASE + 0x2000 + 0x10) 190 + #define MCSPI3_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0xb8010) 191 192 + #define CAMERA_MMU_SYSCONFIG __REG32(DISP_BASE + 0x2C10) 193 + #define CAMERA_DMA_SYSCONFIG __REG32(DISP_BASE + 0x282C) 194 + #define SYSTEM_DMA_SYSCONFIG __REG32(DISP_BASE + 0x602C) 195 #define GPMC_SYSCONFIG GPMC_REG32(0x010) 196 + #define MAILBOXES_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0x94010) 197 + #define UART1_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0x6A054) 198 + #define UART2_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0x6C054) 199 + #define UART3_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0x6E054) 200 + #define SDRC_SYSCONFIG __REG32(OMAP24XX_SDRC_BASE + 0x10) 201 + #define OMAP24XX_SMS_BASE (L3_24XX_BASE + 0x8000) 202 + #define SMS_SYSCONFIG __REG32(OMAP24XX_SMS_BASE + 0x10) 203 + #define SSI_SYSCONFIG __REG32(DISP_BASE + 0x8010) 204 205 /* rkw - good cannidates for PM_ to start what nm was trying */ 206 + #define OMAP24XX_GPT2 (OMAP24XX_L4_IO_BASE + 0x2A000) 207 + #define OMAP24XX_GPT3 (OMAP24XX_L4_IO_BASE + 0x78000) 208 + #define OMAP24XX_GPT4 (OMAP24XX_L4_IO_BASE + 0x7A000) 209 + #define OMAP24XX_GPT5 (OMAP24XX_L4_IO_BASE + 0x7C000) 210 + #define OMAP24XX_GPT6 (OMAP24XX_L4_IO_BASE + 0x7E000) 211 + #define OMAP24XX_GPT7 (OMAP24XX_L4_IO_BASE + 0x80000) 212 + #define OMAP24XX_GPT8 (OMAP24XX_L4_IO_BASE + 0x82000) 213 + #define OMAP24XX_GPT9 (OMAP24XX_L4_IO_BASE + 0x84000) 214 + #define OMAP24XX_GPT10 (OMAP24XX_L4_IO_BASE + 0x86000) 215 + #define OMAP24XX_GPT11 (OMAP24XX_L4_IO_BASE + 0x88000) 216 + #define OMAP24XX_GPT12 (OMAP24XX_L4_IO_BASE + 0x8A000) 217 218 + /* FIXME: Move these to timer code */ 219 #define GPTIMER1_SYSCONFIG GPT1_REG32(0x010) 220 #define GPTIMER2_SYSCONFIG __REG32(OMAP24XX_GPT2 + 0x10) 221 #define GPTIMER3_SYSCONFIG __REG32(OMAP24XX_GPT3 + 0x10) ··· 220 #define GPTIMER11_SYSCONFIG __REG32(OMAP24XX_GPT11 + 0x10) 221 #define GPTIMER12_SYSCONFIG __REG32(OMAP24XX_GPT12 + 0x10) 222 223 + /* FIXME: Move these to gpio code */ 224 + #define OMAP24XX_GPIO_BASE 0x48018000 225 + #define GPIOX_BASE(X) (OMAP24XX_GPIO_BASE + (0x2000 * ((X) - 1))) 226 227 + #define GPIO1_SYSCONFIG __REG32((GPIOX_BASE(1) + 0x10)) 228 + #define GPIO2_SYSCONFIG __REG32((GPIOX_BASE(2) + 0x10)) 229 + #define GPIO3_SYSCONFIG __REG32((GPIOX_BASE(3) + 0x10)) 230 + #define GPIO4_SYSCONFIG __REG32((GPIOX_BASE(4) + 0x10)) 231 + 232 + #if defined(CONFIG_ARCH_OMAP243X) 233 + #define GPIO5_SYSCONFIG __REG32((OMAP24XX_GPIO5_BASE + 0x10)) 234 + #endif 235 236 /* GP TIMER 1 */ 237 #define GPTIMER1_TISTAT GPT1_REG32(0x014) ··· 243 #define GPTIMER1_TCAR2 GPT1_REG32(0x044) 244 245 /* rkw -- base fix up please... */ 246 + #define GPTIMER3_TISR __REG32(OMAP24XX_L4_IO_BASE + 0x78018) 247 248 /* SDRC */ 249 + #define SDRC_DLLA_CTRL __REG32(OMAP24XX_SDRC_BASE + 0x060) 250 + #define SDRC_DLLA_STATUS __REG32(OMAP24XX_SDRC_BASE + 0x064) 251 + #define SDRC_DLLB_CTRL __REG32(OMAP24XX_SDRC_BASE + 0x068) 252 + #define SDRC_DLLB_STATUS __REG32(OMAP24XX_SDRC_BASE + 0x06C) 253 + #define SDRC_POWER __REG32(OMAP24XX_SDRC_BASE + 0x070) 254 + #define SDRC_MR_0 __REG32(OMAP24XX_SDRC_BASE + 0x084) 255 256 /* GPIO 1 */ 257 #define GPIO1_BASE GPIOX_BASE(1) ··· 278 #define GPIO2_DATAIN GPIO2_REG32(0x038) 279 #define GPIO2_OE GPIO2_REG32(0x034) 280 #define GPIO2_DATAOUT GPIO2_REG32(0x03C) 281 + #define GPIO2_DEBOUNCENABLE GPIO2_REG32(0x050) 282 + #define GPIO2_DEBOUNCINGTIME GPIO2_REG32(0x054) 283 284 /* GPIO 3 */ 285 #define GPIO3_BASE GPIOX_BASE(3) ··· 292 #define GPIO3_DATAIN GPIO3_REG32(0x038) 293 #define GPIO3_OE GPIO3_REG32(0x034) 294 #define GPIO3_DATAOUT GPIO3_REG32(0x03C) 295 + #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 296 + #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 297 #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 298 #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 299 ··· 311 #define GPIO4_DEBOUNCENABLE GPIO4_REG32(0x050) 312 #define GPIO4_DEBOUNCINGTIME GPIO4_REG32(0x054) 313 314 + #if defined(CONFIG_ARCH_OMAP243X) 315 + /* GPIO 5 */ 316 + #define GPIO5_REG32(offset) __REG32((OMAP24XX_GPIO5_BASE + (offset))) 317 + #define GPIO5_IRQENABLE1 GPIO5_REG32(0x01C) 318 + #define GPIO5_IRQSTATUS1 GPIO5_REG32(0x018) 319 + #define GPIO5_IRQENABLE2 GPIO5_REG32(0x02C) 320 + #define GPIO5_IRQSTATUS2 GPIO5_REG32(0x028) 321 + #define GPIO5_WAKEUPENABLE GPIO5_REG32(0x020) 322 + #define GPIO5_RISINGDETECT GPIO5_REG32(0x048) 323 + #define GPIO5_FALLINGDETECT GPIO5_REG32(0x04C) 324 + #define GPIO5_DATAIN GPIO5_REG32(0x038) 325 + #define GPIO5_OE GPIO5_REG32(0x034) 326 + #define GPIO5_DATAOUT GPIO5_REG32(0x03C) 327 + #define GPIO5_DEBOUNCENABLE GPIO5_REG32(0x050) 328 + #define GPIO5_DEBOUNCINGTIME GPIO5_REG32(0x054) 329 + #endif 330 331 /* IO CONFIG */ 332 + #define OMAP24XX_CTRL_BASE (L4_24XX_BASE) 333 + #define CONTROL_REG32(offset) __REG32(OMAP24XX_CTRL_BASE + (offset)) 334 335 #define CONTROL_PADCONF_SPI1_NCS2 CONTROL_REG32(0x104) 336 #define CONTROL_PADCONF_SYS_XTALOUT CONTROL_REG32(0x134) ··· 322 #define CONTROL_PADCONF_MCBSP1_DX CONTROL_REG32(0x10C) 323 #define CONTROL_PADCONF_GPMC_NCS4 CONTROL_REG32(0x090) 324 #define CONTROL_PADCONF_DSS_D5 CONTROL_REG32(0x0B8) 325 + #define CONTROL_PADCONF_DSS_D9 CONTROL_REG32(0x0BC) /* 2420 */ 326 #define CONTROL_PADCONF_DSS_D13 CONTROL_REG32(0x0C0) 327 #define CONTROL_PADCONF_DSS_VSYNC CONTROL_REG32(0x0CC) 328 + #define CONTROL_PADCONF_SYS_NIRQW0 CONTROL_REG32(0x0BC) /* 2430 */ 329 + #define CONTROL_PADCONF_SSI1_FLAG_TX CONTROL_REG32(0x108) /* 2430 */ 330 331 /* CONTROL */ 332 #define CONTROL_DEVCONF CONTROL_REG32(0x274) 333 + #define CONTROL_DEVCONF1 CONTROL_REG32(0x2E8) 334 335 /* INTERRUPT CONTROLLER */ 336 + #define INTC_BASE ((L4_24XX_BASE) + 0xfe000) 337 #define INTC_REG32(offset) __REG32(INTC_BASE + (offset)) 338 339 #define INTC1_U_BASE INTC_REG32(0x000) ··· 348 #define INTC_ISR_CLEAR2 INTC_REG32(0x0D4) 349 #define INTC_SIR_IRQ INTC_REG32(0x040) 350 #define INTC_CONTROL INTC_REG32(0x048) 351 + #define INTC_ILR11 INTC_REG32(0x12C) /* PRCM on MPU PIC */ 352 + #define INTC_ILR30 INTC_REG32(0x178) 353 + #define INTC_ILR31 INTC_REG32(0x17C) 354 #define INTC_ILR32 INTC_REG32(0x180) 355 + #define INTC_ILR37 INTC_REG32(0x194) /* GPIO4 on MPU PIC */ 356 + #define INTC_SYSCONFIG INTC_REG32(0x010) /* GPT1 on MPU PIC */ 357 358 /* RAM FIREWALL */ 359 #define RAMFW_BASE (0x68005000) ··· 372 #define GPMC_CONFIG5_0 GPMC_REG32(0x070) 373 #define GPMC_CONFIG6_0 GPMC_REG32(0x074) 374 #define GPMC_CONFIG7_0 GPMC_REG32(0x078) 375 + 376 + /* GPMC CS1 */ 377 + #define GPMC_CONFIG1_1 GPMC_REG32(0x090) 378 + #define GPMC_CONFIG2_1 GPMC_REG32(0x094) 379 + #define GPMC_CONFIG3_1 GPMC_REG32(0x098) 380 + #define GPMC_CONFIG4_1 GPMC_REG32(0x09C) 381 + #define GPMC_CONFIG5_1 GPMC_REG32(0x0a0) 382 + #define GPMC_CONFIG6_1 GPMC_REG32(0x0a4) 383 + #define GPMC_CONFIG7_1 GPMC_REG32(0x0a8) 384 + 385 + /* GPMC CS3 */ 386 + #define GPMC_CONFIG1_3 GPMC_REG32(0x0F0) 387 + #define GPMC_CONFIG2_3 GPMC_REG32(0x0F4) 388 + #define GPMC_CONFIG3_3 GPMC_REG32(0x0F8) 389 + #define GPMC_CONFIG4_3 GPMC_REG32(0x0FC) 390 + #define GPMC_CONFIG5_3 GPMC_REG32(0x100) 391 + #define GPMC_CONFIG6_3 GPMC_REG32(0x104) 392 + #define GPMC_CONFIG7_3 GPMC_REG32(0x108) 393 394 /* DSS */ 395 #define DSS_CONTROL DISP_REG32(0x040) ··· 405 #define DISPC_DATA_CYCLE2 DISP_REG32(0x5D8) 406 #define DISPC_DATA_CYCLE3 DISP_REG32(0x5DC) 407 408 + /* HSUSB Suspend */ 409 + #define HSUSB_CTRL __REG8(0x480AC001) 410 + #define USBOTG_POWER __REG32(0x480AC000) 411 412 + /* HS MMC */ 413 + #define MMCHS1_SYSCONFIG __REG32(0x4809C010) 414 + #define MMCHS2_SYSCONFIG __REG32(0x480b4010) 415 + 416 + #endif /* __ASSEMBLER__ */ 417 418 #endif 419
+65 -2
arch/arm/plat-omap/clock.c
··· 21 #include <linux/string.h> 22 #include <linux/clk.h> 23 #include <linux/mutex.h> 24 25 #include <asm/io.h> 26 #include <asm/semaphore.h> ··· 38 * Standard clock functions defined in include/linux/clk.h 39 *-------------------------------------------------------------------------*/ 40 41 struct clk * clk_get(struct device *dev, const char *id) 42 { 43 struct clk *p, *clk = ERR_PTR(-ENOENT); 44 45 mutex_lock(&clocks_mutex); 46 list_for_each_entry(p, &clocks, node) { 47 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 48 clk = p; 49 break; 50 } 51 } 52 mutex_unlock(&clocks_mutex); 53 54 return clk; ··· 79 { 80 unsigned long flags; 81 int ret = 0; 82 83 spin_lock_irqsave(&clockfw_lock, flags); 84 if (arch_clock->clk_enable) ··· 96 { 97 unsigned long flags; 98 99 spin_lock_irqsave(&clockfw_lock, flags); 100 if (arch_clock->clk_disable) 101 arch_clock->clk_disable(clk); ··· 110 { 111 unsigned long flags; 112 int ret = 0; 113 114 spin_lock_irqsave(&clockfw_lock, flags); 115 ret = clk->usecount; ··· 126 { 127 unsigned long flags; 128 unsigned long ret = 0; 129 130 spin_lock_irqsave(&clockfw_lock, flags); 131 ret = clk->rate; ··· 154 unsigned long flags; 155 long ret = 0; 156 157 spin_lock_irqsave(&clockfw_lock, flags); 158 if (arch_clock->clk_round_rate) 159 ret = arch_clock->clk_round_rate(clk, rate); ··· 169 int clk_set_rate(struct clk *clk, unsigned long rate) 170 { 171 unsigned long flags; 172 - int ret = 0; 173 174 spin_lock_irqsave(&clockfw_lock, flags); 175 if (arch_clock->clk_set_rate) ··· 186 int clk_set_parent(struct clk *clk, struct clk *parent) 187 { 188 unsigned long flags; 189 - int ret = 0; 190 191 spin_lock_irqsave(&clockfw_lock, flags); 192 if (arch_clock->clk_set_parent) ··· 204 { 205 unsigned long flags; 206 struct clk * ret = NULL; 207 208 spin_lock_irqsave(&clockfw_lock, flags); 209 if (arch_clock->clk_get_parent) ··· 244 /* Used for clocks that always have same value as the parent clock */ 245 void followparent_recalc(struct clk *clk) 246 { 247 clk->rate = clk->parent->rate; 248 } 249 ··· 254 void propagate_rate(struct clk * tclk) 255 { 256 struct clk *clkp; 257 258 list_for_each_entry(clkp, &clocks, node) { 259 if (likely(clkp->parent != tclk)) ··· 268 269 int clk_register(struct clk *clk) 270 { 271 mutex_lock(&clocks_mutex); 272 list_add(&clk->node, &clocks); 273 if (clk->init) ··· 283 284 void clk_unregister(struct clk *clk) 285 { 286 mutex_lock(&clocks_mutex); 287 list_del(&clk->node); 288 mutex_unlock(&clocks_mutex); ··· 295 void clk_deny_idle(struct clk *clk) 296 { 297 unsigned long flags; 298 299 spin_lock_irqsave(&clockfw_lock, flags); 300 if (arch_clock->clk_deny_idle) ··· 309 void clk_allow_idle(struct clk *clk) 310 { 311 unsigned long flags; 312 313 spin_lock_irqsave(&clockfw_lock, flags); 314 if (arch_clock->clk_allow_idle)
··· 21 #include <linux/string.h> 22 #include <linux/clk.h> 23 #include <linux/mutex.h> 24 + #include <linux/platform_device.h> 25 26 #include <asm/io.h> 27 #include <asm/semaphore.h> ··· 37 * Standard clock functions defined in include/linux/clk.h 38 *-------------------------------------------------------------------------*/ 39 40 + /* 41 + * Returns a clock. Note that we first try to use device id on the bus 42 + * and clock name. If this fails, we try to use clock name only. 43 + */ 44 struct clk * clk_get(struct device *dev, const char *id) 45 { 46 struct clk *p, *clk = ERR_PTR(-ENOENT); 47 + int idno; 48 + 49 + if (dev == NULL || dev->bus != &platform_bus_type) 50 + idno = -1; 51 + else 52 + idno = to_platform_device(dev)->id; 53 54 mutex_lock(&clocks_mutex); 55 + 56 + list_for_each_entry(p, &clocks, node) { 57 + if (p->id == idno && 58 + strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 59 + clk = p; 60 + break; 61 + } 62 + } 63 + 64 list_for_each_entry(p, &clocks, node) { 65 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 66 clk = p; 67 break; 68 } 69 } 70 + 71 mutex_unlock(&clocks_mutex); 72 73 return clk; ··· 58 { 59 unsigned long flags; 60 int ret = 0; 61 + 62 + if (clk == NULL || IS_ERR(clk)) 63 + return -EINVAL; 64 65 spin_lock_irqsave(&clockfw_lock, flags); 66 if (arch_clock->clk_enable) ··· 72 { 73 unsigned long flags; 74 75 + if (clk == NULL || IS_ERR(clk)) 76 + return; 77 + 78 spin_lock_irqsave(&clockfw_lock, flags); 79 if (arch_clock->clk_disable) 80 arch_clock->clk_disable(clk); ··· 83 { 84 unsigned long flags; 85 int ret = 0; 86 + 87 + if (clk == NULL || IS_ERR(clk)) 88 + return 0; 89 90 spin_lock_irqsave(&clockfw_lock, flags); 91 ret = clk->usecount; ··· 96 { 97 unsigned long flags; 98 unsigned long ret = 0; 99 + 100 + if (clk == NULL || IS_ERR(clk)) 101 + return 0; 102 103 spin_lock_irqsave(&clockfw_lock, flags); 104 ret = clk->rate; ··· 121 unsigned long flags; 122 long ret = 0; 123 124 + if (clk == NULL || IS_ERR(clk)) 125 + return ret; 126 + 127 spin_lock_irqsave(&clockfw_lock, flags); 128 if (arch_clock->clk_round_rate) 129 ret = arch_clock->clk_round_rate(clk, rate); ··· 133 int clk_set_rate(struct clk *clk, unsigned long rate) 134 { 135 unsigned long flags; 136 + int ret = -EINVAL; 137 + 138 + if (clk == NULL || IS_ERR(clk)) 139 + return ret; 140 141 spin_lock_irqsave(&clockfw_lock, flags); 142 if (arch_clock->clk_set_rate) ··· 147 int clk_set_parent(struct clk *clk, struct clk *parent) 148 { 149 unsigned long flags; 150 + int ret = -EINVAL; 151 + 152 + if (clk == NULL || IS_ERR(clk) || parent == NULL || IS_ERR(parent)) 153 + return ret; 154 155 spin_lock_irqsave(&clockfw_lock, flags); 156 if (arch_clock->clk_set_parent) ··· 162 { 163 unsigned long flags; 164 struct clk * ret = NULL; 165 + 166 + if (clk == NULL || IS_ERR(clk)) 167 + return ret; 168 169 spin_lock_irqsave(&clockfw_lock, flags); 170 if (arch_clock->clk_get_parent) ··· 199 /* Used for clocks that always have same value as the parent clock */ 200 void followparent_recalc(struct clk *clk) 201 { 202 + if (clk == NULL || IS_ERR(clk)) 203 + return; 204 + 205 clk->rate = clk->parent->rate; 206 } 207 ··· 206 void propagate_rate(struct clk * tclk) 207 { 208 struct clk *clkp; 209 + 210 + if (tclk == NULL || IS_ERR(tclk)) 211 + return; 212 213 list_for_each_entry(clkp, &clocks, node) { 214 if (likely(clkp->parent != tclk)) ··· 217 218 int clk_register(struct clk *clk) 219 { 220 + if (clk == NULL || IS_ERR(clk)) 221 + return -EINVAL; 222 + 223 mutex_lock(&clocks_mutex); 224 list_add(&clk->node, &clocks); 225 if (clk->init) ··· 229 230 void clk_unregister(struct clk *clk) 231 { 232 + if (clk == NULL || IS_ERR(clk)) 233 + return; 234 + 235 mutex_lock(&clocks_mutex); 236 list_del(&clk->node); 237 mutex_unlock(&clocks_mutex); ··· 238 void clk_deny_idle(struct clk *clk) 239 { 240 unsigned long flags; 241 + 242 + if (clk == NULL || IS_ERR(clk)) 243 + return; 244 245 spin_lock_irqsave(&clockfw_lock, flags); 246 if (arch_clock->clk_deny_idle) ··· 249 void clk_allow_idle(struct clk *clk) 250 { 251 unsigned long flags; 252 + 253 + if (clk == NULL || IS_ERR(clk)) 254 + return; 255 256 spin_lock_irqsave(&clockfw_lock, flags); 257 if (arch_clock->clk_allow_idle)
+8 -5
include/asm-arm/arch-omap/clock.h
··· 19 struct list_head node; 20 struct module *owner; 21 const char *name; 22 struct clk *parent; 23 unsigned long rate; 24 __u32 flags; ··· 58 extern void followparent_recalc(struct clk * clk); 59 extern void clk_allow_idle(struct clk *clk); 60 extern void clk_deny_idle(struct clk *clk); 61 62 /* Clock flags */ 63 #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ ··· 82 #define CM_PLL_SEL1 (1 << 18) 83 #define CM_PLL_SEL2 (1 << 19) 84 #define CM_SYSCLKOUT_SEL1 (1 << 20) 85 - #define CLOCK_IN_OMAP730 (1 << 21) 86 - #define CLOCK_IN_OMAP1510 (1 << 22) 87 - #define CLOCK_IN_OMAP16XX (1 << 23) 88 - #define CLOCK_IN_OMAP242X (1 << 24) 89 - #define CLOCK_IN_OMAP243X (1 << 25) 90 91 #endif
··· 19 struct list_head node; 20 struct module *owner; 21 const char *name; 22 + int id; 23 struct clk *parent; 24 unsigned long rate; 25 __u32 flags; ··· 57 extern void followparent_recalc(struct clk * clk); 58 extern void clk_allow_idle(struct clk *clk); 59 extern void clk_deny_idle(struct clk *clk); 60 + extern int clk_get_usecount(struct clk *clk); 61 62 /* Clock flags */ 63 #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ ··· 80 #define CM_PLL_SEL1 (1 << 18) 81 #define CM_PLL_SEL2 (1 << 19) 82 #define CM_SYSCLKOUT_SEL1 (1 << 20) 83 + #define CLOCK_IN_OMAP310 (1 << 21) 84 + #define CLOCK_IN_OMAP730 (1 << 22) 85 + #define CLOCK_IN_OMAP1510 (1 << 23) 86 + #define CLOCK_IN_OMAP16XX (1 << 24) 87 + #define CLOCK_IN_OMAP242X (1 << 25) 88 + #define CLOCK_IN_OMAP243X (1 << 26) 89 90 #endif
+4 -400
include/asm-arm/arch-omap/prcm.h
··· 1 /* 2 - * prcm.h - Access definations for use in OMAP24XX clock and power management 3 * 4 * Copyright (C) 2005 Texas Instruments, Inc. 5 * ··· 23 #ifndef __ASM_ARM_ARCH_DPM_PRCM_H 24 #define __ASM_ARM_ARCH_DPM_PRCM_H 25 26 - /* SET_PERFORMANCE_LEVEL PARAMETERS */ 27 - #define PRCM_HALF_SPEED 1 28 - #define PRCM_FULL_SPEED 2 29 - 30 - #ifndef __ASSEMBLER__ 31 - 32 - #define PRCM_REG32(offset) __REG32(OMAP24XX_PRCM_BASE + (offset)) 33 - 34 - #define PRCM_REVISION PRCM_REG32(0x000) 35 - #define PRCM_SYSCONFIG PRCM_REG32(0x010) 36 - #define PRCM_IRQSTATUS_MPU PRCM_REG32(0x018) 37 - #define PRCM_IRQENABLE_MPU PRCM_REG32(0x01C) 38 - #define PRCM_VOLTCTRL PRCM_REG32(0x050) 39 - #define PRCM_VOLTST PRCM_REG32(0x054) 40 - #define PRCM_CLKSRC_CTRL PRCM_REG32(0x060) 41 - #define PRCM_CLKOUT_CTRL PRCM_REG32(0x070) 42 - #define PRCM_CLKEMUL_CTRL PRCM_REG32(0x078) 43 - #define PRCM_CLKCFG_CTRL PRCM_REG32(0x080) 44 - #define PRCM_CLKCFG_STATUS PRCM_REG32(0x084) 45 - #define PRCM_VOLTSETUP PRCM_REG32(0x090) 46 - #define PRCM_CLKSSETUP PRCM_REG32(0x094) 47 - #define PRCM_POLCTRL PRCM_REG32(0x098) 48 - 49 - /* GENERAL PURPOSE */ 50 - #define GENERAL_PURPOSE1 PRCM_REG32(0x0B0) 51 - #define GENERAL_PURPOSE2 PRCM_REG32(0x0B4) 52 - #define GENERAL_PURPOSE3 PRCM_REG32(0x0B8) 53 - #define GENERAL_PURPOSE4 PRCM_REG32(0x0BC) 54 - #define GENERAL_PURPOSE5 PRCM_REG32(0x0C0) 55 - #define GENERAL_PURPOSE6 PRCM_REG32(0x0C4) 56 - #define GENERAL_PURPOSE7 PRCM_REG32(0x0C8) 57 - #define GENERAL_PURPOSE8 PRCM_REG32(0x0CC) 58 - #define GENERAL_PURPOSE9 PRCM_REG32(0x0D0) 59 - #define GENERAL_PURPOSE10 PRCM_REG32(0x0D4) 60 - #define GENERAL_PURPOSE11 PRCM_REG32(0x0D8) 61 - #define GENERAL_PURPOSE12 PRCM_REG32(0x0DC) 62 - #define GENERAL_PURPOSE13 PRCM_REG32(0x0E0) 63 - #define GENERAL_PURPOSE14 PRCM_REG32(0x0E4) 64 - #define GENERAL_PURPOSE15 PRCM_REG32(0x0E8) 65 - #define GENERAL_PURPOSE16 PRCM_REG32(0x0EC) 66 - #define GENERAL_PURPOSE17 PRCM_REG32(0x0F0) 67 - #define GENERAL_PURPOSE18 PRCM_REG32(0x0F4) 68 - #define GENERAL_PURPOSE19 PRCM_REG32(0x0F8) 69 - #define GENERAL_PURPOSE20 PRCM_REG32(0x0FC) 70 - 71 - /* MPU */ 72 - #define CM_CLKSEL_MPU PRCM_REG32(0x140) 73 - #define CM_CLKSTCTRL_MPU PRCM_REG32(0x148) 74 - #define RM_RSTST_MPU PRCM_REG32(0x158) 75 - #define PM_WKDEP_MPU PRCM_REG32(0x1C8) 76 - #define PM_EVGENCTRL_MPU PRCM_REG32(0x1D4) 77 - #define PM_EVEGENONTIM_MPU PRCM_REG32(0x1D8) 78 - #define PM_EVEGENOFFTIM_MPU PRCM_REG32(0x1DC) 79 - #define PM_PWSTCTRL_MPU PRCM_REG32(0x1E0) 80 - #define PM_PWSTST_MPU PRCM_REG32(0x1E4) 81 - 82 - /* CORE */ 83 - #define CM_FCLKEN1_CORE PRCM_REG32(0x200) 84 - #define CM_FCLKEN2_CORE PRCM_REG32(0x204) 85 - #define CM_FCLKEN3_CORE PRCM_REG32(0x208) 86 - #define CM_ICLKEN1_CORE PRCM_REG32(0x210) 87 - #define CM_ICLKEN2_CORE PRCM_REG32(0x214) 88 - #define CM_ICLKEN3_CORE PRCM_REG32(0x218) 89 - #define CM_ICLKEN4_CORE PRCM_REG32(0x21C) 90 - #define CM_IDLEST1_CORE PRCM_REG32(0x220) 91 - #define CM_IDLEST2_CORE PRCM_REG32(0x224) 92 - #define CM_IDLEST3_CORE PRCM_REG32(0x228) 93 - #define CM_IDLEST4_CORE PRCM_REG32(0x22C) 94 - #define CM_AUTOIDLE1_CORE PRCM_REG32(0x230) 95 - #define CM_AUTOIDLE2_CORE PRCM_REG32(0x234) 96 - #define CM_AUTOIDLE3_CORE PRCM_REG32(0x238) 97 - #define CM_AUTOIDLE4_CORE PRCM_REG32(0x23C) 98 - #define CM_CLKSEL1_CORE PRCM_REG32(0x240) 99 - #define CM_CLKSEL2_CORE PRCM_REG32(0x244) 100 - #define CM_CLKSTCTRL_CORE PRCM_REG32(0x248) 101 - #define PM_WKEN1_CORE PRCM_REG32(0x2A0) 102 - #define PM_WKEN2_CORE PRCM_REG32(0x2A4) 103 - #define PM_WKST1_CORE PRCM_REG32(0x2B0) 104 - #define PM_WKST2_CORE PRCM_REG32(0x2B4) 105 - #define PM_WKDEP_CORE PRCM_REG32(0x2C8) 106 - #define PM_PWSTCTRL_CORE PRCM_REG32(0x2E0) 107 - #define PM_PWSTST_CORE PRCM_REG32(0x2E4) 108 - 109 - /* GFX */ 110 - #define CM_FCLKEN_GFX PRCM_REG32(0x300) 111 - #define CM_ICLKEN_GFX PRCM_REG32(0x310) 112 - #define CM_IDLEST_GFX PRCM_REG32(0x320) 113 - #define CM_CLKSEL_GFX PRCM_REG32(0x340) 114 - #define CM_CLKSTCTRL_GFX PRCM_REG32(0x348) 115 - #define RM_RSTCTRL_GFX PRCM_REG32(0x350) 116 - #define RM_RSTST_GFX PRCM_REG32(0x358) 117 - #define PM_WKDEP_GFX PRCM_REG32(0x3C8) 118 - #define PM_PWSTCTRL_GFX PRCM_REG32(0x3E0) 119 - #define PM_PWSTST_GFX PRCM_REG32(0x3E4) 120 - 121 - /* WAKE-UP */ 122 - #define CM_FCLKEN_WKUP PRCM_REG32(0x400) 123 - #define CM_ICLKEN_WKUP PRCM_REG32(0x410) 124 - #define CM_IDLEST_WKUP PRCM_REG32(0x420) 125 - #define CM_AUTOIDLE_WKUP PRCM_REG32(0x430) 126 - #define CM_CLKSEL_WKUP PRCM_REG32(0x440) 127 - #define RM_RSTCTRL_WKUP PRCM_REG32(0x450) 128 - #define RM_RSTTIME_WKUP PRCM_REG32(0x454) 129 - #define RM_RSTST_WKUP PRCM_REG32(0x458) 130 - #define PM_WKEN_WKUP PRCM_REG32(0x4A0) 131 - #define PM_WKST_WKUP PRCM_REG32(0x4B0) 132 - 133 - /* CLOCKS */ 134 - #define CM_CLKEN_PLL PRCM_REG32(0x500) 135 - #define CM_IDLEST_CKGEN PRCM_REG32(0x520) 136 - #define CM_AUTOIDLE_PLL PRCM_REG32(0x530) 137 - #define CM_CLKSEL1_PLL PRCM_REG32(0x540) 138 - #define CM_CLKSEL2_PLL PRCM_REG32(0x544) 139 - 140 - /* DSP */ 141 - #define CM_FCLKEN_DSP PRCM_REG32(0x800) 142 - #define CM_ICLKEN_DSP PRCM_REG32(0x810) 143 - #define CM_IDLEST_DSP PRCM_REG32(0x820) 144 - #define CM_AUTOIDLE_DSP PRCM_REG32(0x830) 145 - #define CM_CLKSEL_DSP PRCM_REG32(0x840) 146 - #define CM_CLKSTCTRL_DSP PRCM_REG32(0x848) 147 - #define RM_RSTCTRL_DSP PRCM_REG32(0x850) 148 - #define RM_RSTST_DSP PRCM_REG32(0x858) 149 - #define PM_WKEN_DSP PRCM_REG32(0x8A0) 150 - #define PM_WKDEP_DSP PRCM_REG32(0x8C8) 151 - #define PM_PWSTCTRL_DSP PRCM_REG32(0x8E0) 152 - #define PM_PWSTST_DSP PRCM_REG32(0x8E4) 153 - #define PRCM_IRQSTATUS_DSP PRCM_REG32(0x8F0) 154 - #define PRCM_IRQENABLE_DSP PRCM_REG32(0x8F4) 155 - 156 - /* IVA */ 157 - #define PRCM_IRQSTATUS_IVA PRCM_REG32(0x8F8) 158 - #define PRCM_IRQENABLE_IVA PRCM_REG32(0x8FC) 159 - 160 - /* Modem on 2430 */ 161 - #define CM_FCLKEN_MDM PRCM_REG32(0xC00) 162 - #define CM_ICLKEN_MDM PRCM_REG32(0xC10) 163 - #define CM_IDLEST_MDM PRCM_REG32(0xC20) 164 - #define CM_CLKSEL_MDM PRCM_REG32(0xC40) 165 - 166 - /* FIXME: Move to header for 2430 */ 167 - #define DISP_BASE (OMAP24XX_L4_IO_BASE+0x50000) 168 - #define DISP_REG32(offset) __REG32(DISP_BASE + (offset)) 169 - 170 - #define OMAP24XX_GPMC_BASE (L3_24XX_BASE + 0xa000) 171 - #define GPMC_BASE (OMAP24XX_GPMC_BASE) 172 - #define GPMC_REG32(offset) __REG32(GPMC_BASE + (offset)) 173 - 174 - #define GPT1_BASE (OMAP24XX_GPT1) 175 - #define GPT1_REG32(offset) __REG32(GPT1_BASE + (offset)) 176 - 177 - /* Misc sysconfig */ 178 - #define DISPC_SYSCONFIG DISP_REG32(0x410) 179 - #define SPI_BASE (OMAP24XX_L4_IO_BASE+0x98000) 180 - #define MCSPI1_SYSCONFIG __REG32(SPI_BASE + 0x10) 181 - #define MCSPI2_SYSCONFIG __REG32(SPI_BASE+0x2000 + 0x10) 182 - 183 - //#define DSP_MMU_SYSCONFIG 0x5A000010 184 - #define CAMERA_MMU_SYSCONFIG __REG32(DISP_BASE+0x2C10) 185 - //#define IVA_MMU_SYSCONFIG 0x5D000010 186 - //#define DSP_DMA_SYSCONFIG 0x00FCC02C 187 - #define CAMERA_DMA_SYSCONFIG __REG32(DISP_BASE+0x282C) 188 - #define SYSTEM_DMA_SYSCONFIG __REG32(DISP_BASE+0x602C) 189 - #define GPMC_SYSCONFIG GPMC_REG32(0x010) 190 - #define MAILBOXES_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x94010) 191 - #define UART1_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6A054) 192 - #define UART2_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6C054) 193 - #define UART3_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE+0x6E054) 194 - //#define IVA_SYSCONFIG 0x5C060010 195 - #define SDRC_SYSCONFIG __REG32(OMAP24XX_SDRC_BASE+0x10) 196 - #define SMS_SYSCONFIG __REG32(OMAP24XX_SMS_BASE+0x10) 197 - #define SSI_SYSCONFIG __REG32(DISP_BASE+0x8010) 198 - //#define VLYNQ_SYSCONFIG 0x67FFFE10 199 - 200 - /* rkw - good cannidates for PM_ to start what nm was trying */ 201 - #define OMAP24XX_GPT2 (OMAP24XX_L4_IO_BASE+0x2A000) 202 - #define OMAP24XX_GPT3 (OMAP24XX_L4_IO_BASE+0x78000) 203 - #define OMAP24XX_GPT4 (OMAP24XX_L4_IO_BASE+0x7A000) 204 - #define OMAP24XX_GPT5 (OMAP24XX_L4_IO_BASE+0x7C000) 205 - #define OMAP24XX_GPT6 (OMAP24XX_L4_IO_BASE+0x7E000) 206 - #define OMAP24XX_GPT7 (OMAP24XX_L4_IO_BASE+0x80000) 207 - #define OMAP24XX_GPT8 (OMAP24XX_L4_IO_BASE+0x82000) 208 - #define OMAP24XX_GPT9 (OMAP24XX_L4_IO_BASE+0x84000) 209 - #define OMAP24XX_GPT10 (OMAP24XX_L4_IO_BASE+0x86000) 210 - #define OMAP24XX_GPT11 (OMAP24XX_L4_IO_BASE+0x88000) 211 - #define OMAP24XX_GPT12 (OMAP24XX_L4_IO_BASE+0x8A000) 212 - 213 - #define GPTIMER1_SYSCONFIG GPT1_REG32(0x010) 214 - #define GPTIMER2_SYSCONFIG __REG32(OMAP24XX_GPT2 + 0x10) 215 - #define GPTIMER3_SYSCONFIG __REG32(OMAP24XX_GPT3 + 0x10) 216 - #define GPTIMER4_SYSCONFIG __REG32(OMAP24XX_GPT4 + 0x10) 217 - #define GPTIMER5_SYSCONFIG __REG32(OMAP24XX_GPT5 + 0x10) 218 - #define GPTIMER6_SYSCONFIG __REG32(OMAP24XX_GPT6 + 0x10) 219 - #define GPTIMER7_SYSCONFIG __REG32(OMAP24XX_GPT7 + 0x10) 220 - #define GPTIMER8_SYSCONFIG __REG32(OMAP24XX_GPT8 + 0x10) 221 - #define GPTIMER9_SYSCONFIG __REG32(OMAP24XX_GPT9 + 0x10) 222 - #define GPTIMER10_SYSCONFIG __REG32(OMAP24XX_GPT10 + 0x10) 223 - #define GPTIMER11_SYSCONFIG __REG32(OMAP24XX_GPT11 + 0x10) 224 - #define GPTIMER12_SYSCONFIG __REG32(OMAP24XX_GPT12 + 0x10) 225 - 226 - #define GPIOX_BASE(X) (OMAP24XX_GPIO_BASE+(0x2000*((X)-1))) 227 - 228 - #define GPIO1_SYSCONFIG __REG32((GPIOX_BASE(1)+0x10)) 229 - #define GPIO2_SYSCONFIG __REG32((GPIOX_BASE(2)+0x10)) 230 - #define GPIO3_SYSCONFIG __REG32((GPIOX_BASE(3)+0x10)) 231 - #define GPIO4_SYSCONFIG __REG32((GPIOX_BASE(4)+0x10)) 232 - 233 - /* GP TIMER 1 */ 234 - #define GPTIMER1_TISTAT GPT1_REG32(0x014) 235 - #define GPTIMER1_TISR GPT1_REG32(0x018) 236 - #define GPTIMER1_TIER GPT1_REG32(0x01C) 237 - #define GPTIMER1_TWER GPT1_REG32(0x020) 238 - #define GPTIMER1_TCLR GPT1_REG32(0x024) 239 - #define GPTIMER1_TCRR GPT1_REG32(0x028) 240 - #define GPTIMER1_TLDR GPT1_REG32(0x02C) 241 - #define GPTIMER1_TTGR GPT1_REG32(0x030) 242 - #define GPTIMER1_TWPS GPT1_REG32(0x034) 243 - #define GPTIMER1_TMAR GPT1_REG32(0x038) 244 - #define GPTIMER1_TCAR1 GPT1_REG32(0x03C) 245 - #define GPTIMER1_TSICR GPT1_REG32(0x040) 246 - #define GPTIMER1_TCAR2 GPT1_REG32(0x044) 247 - 248 - /* rkw -- base fix up please... */ 249 - #define GPTIMER3_TISR __REG32(OMAP24XX_L4_IO_BASE+0x78018) 250 - 251 - /* SDRC */ 252 - #define SDRC_DLLA_CTRL __REG32(OMAP24XX_SDRC_BASE+0x060) 253 - #define SDRC_DLLA_STATUS __REG32(OMAP24XX_SDRC_BASE+0x064) 254 - #define SDRC_DLLB_CTRL __REG32(OMAP24XX_SDRC_BASE+0x068) 255 - #define SDRC_DLLB_STATUS __REG32(OMAP24XX_SDRC_BASE+0x06C) 256 - #define SDRC_POWER __REG32(OMAP24XX_SDRC_BASE+0x070) 257 - #define SDRC_MR_0 __REG32(OMAP24XX_SDRC_BASE+0x084) 258 - 259 - /* GPIO 1 */ 260 - #define GPIO1_BASE GPIOX_BASE(1) 261 - #define GPIO1_REG32(offset) __REG32(GPIO1_BASE + (offset)) 262 - #define GPIO1_IRQENABLE1 GPIO1_REG32(0x01C) 263 - #define GPIO1_IRQSTATUS1 GPIO1_REG32(0x018) 264 - #define GPIO1_IRQENABLE2 GPIO1_REG32(0x02C) 265 - #define GPIO1_IRQSTATUS2 GPIO1_REG32(0x028) 266 - #define GPIO1_WAKEUPENABLE GPIO1_REG32(0x020) 267 - #define GPIO1_RISINGDETECT GPIO1_REG32(0x048) 268 - #define GPIO1_DATAIN GPIO1_REG32(0x038) 269 - #define GPIO1_OE GPIO1_REG32(0x034) 270 - #define GPIO1_DATAOUT GPIO1_REG32(0x03C) 271 - 272 - /* GPIO2 */ 273 - #define GPIO2_BASE GPIOX_BASE(2) 274 - #define GPIO2_REG32(offset) __REG32(GPIO2_BASE + (offset)) 275 - #define GPIO2_IRQENABLE1 GPIO2_REG32(0x01C) 276 - #define GPIO2_IRQSTATUS1 GPIO2_REG32(0x018) 277 - #define GPIO2_IRQENABLE2 GPIO2_REG32(0x02C) 278 - #define GPIO2_IRQSTATUS2 GPIO2_REG32(0x028) 279 - #define GPIO2_WAKEUPENABLE GPIO2_REG32(0x020) 280 - #define GPIO2_RISINGDETECT GPIO2_REG32(0x048) 281 - #define GPIO2_DATAIN GPIO2_REG32(0x038) 282 - #define GPIO2_OE GPIO2_REG32(0x034) 283 - #define GPIO2_DATAOUT GPIO2_REG32(0x03C) 284 - 285 - /* GPIO 3 */ 286 - #define GPIO3_BASE GPIOX_BASE(3) 287 - #define GPIO3_REG32(offset) __REG32(GPIO3_BASE + (offset)) 288 - #define GPIO3_IRQENABLE1 GPIO3_REG32(0x01C) 289 - #define GPIO3_IRQSTATUS1 GPIO3_REG32(0x018) 290 - #define GPIO3_IRQENABLE2 GPIO3_REG32(0x02C) 291 - #define GPIO3_IRQSTATUS2 GPIO3_REG32(0x028) 292 - #define GPIO3_WAKEUPENABLE GPIO3_REG32(0x020) 293 - #define GPIO3_RISINGDETECT GPIO3_REG32(0x048) 294 - #define GPIO3_FALLINGDETECT GPIO3_REG32(0x04C) 295 - #define GPIO3_DATAIN GPIO3_REG32(0x038) 296 - #define GPIO3_OE GPIO3_REG32(0x034) 297 - #define GPIO3_DATAOUT GPIO3_REG32(0x03C) 298 - #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 299 - #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 300 - 301 - /* GPIO 4 */ 302 - #define GPIO4_BASE GPIOX_BASE(4) 303 - #define GPIO4_REG32(offset) __REG32(GPIO4_BASE + (offset)) 304 - #define GPIO4_IRQENABLE1 GPIO4_REG32(0x01C) 305 - #define GPIO4_IRQSTATUS1 GPIO4_REG32(0x018) 306 - #define GPIO4_IRQENABLE2 GPIO4_REG32(0x02C) 307 - #define GPIO4_IRQSTATUS2 GPIO4_REG32(0x028) 308 - #define GPIO4_WAKEUPENABLE GPIO4_REG32(0x020) 309 - #define GPIO4_RISINGDETECT GPIO4_REG32(0x048) 310 - #define GPIO4_FALLINGDETECT GPIO4_REG32(0x04C) 311 - #define GPIO4_DATAIN GPIO4_REG32(0x038) 312 - #define GPIO4_OE GPIO4_REG32(0x034) 313 - #define GPIO4_DATAOUT GPIO4_REG32(0x03C) 314 - #define GPIO4_DEBOUNCENABLE GPIO4_REG32(0x050) 315 - #define GPIO4_DEBOUNCINGTIME GPIO4_REG32(0x054) 316 - 317 - 318 - /* IO CONFIG */ 319 - #define CONTROL_BASE (OMAP24XX_CTRL_BASE) 320 - #define CONTROL_REG32(offset) __REG32(CONTROL_BASE + (offset)) 321 - 322 - #define CONTROL_PADCONF_SPI1_NCS2 CONTROL_REG32(0x104) 323 - #define CONTROL_PADCONF_SYS_XTALOUT CONTROL_REG32(0x134) 324 - #define CONTROL_PADCONF_UART1_RX CONTROL_REG32(0x0C8) 325 - #define CONTROL_PADCONF_MCBSP1_DX CONTROL_REG32(0x10C) 326 - #define CONTROL_PADCONF_GPMC_NCS4 CONTROL_REG32(0x090) 327 - #define CONTROL_PADCONF_DSS_D5 CONTROL_REG32(0x0B8) 328 - #define CONTROL_PADCONF_DSS_D9 CONTROL_REG32(0x0BC) 329 - #define CONTROL_PADCONF_DSS_D13 CONTROL_REG32(0x0C0) 330 - #define CONTROL_PADCONF_DSS_VSYNC CONTROL_REG32(0x0CC) 331 - 332 - /* CONTROL */ 333 - #define CONTROL_DEVCONF CONTROL_REG32(0x274) 334 - 335 - /* INTERRUPT CONTROLLER */ 336 - #define INTC_BASE (OMAP24XX_L4_IO_BASE+0xfe000) 337 - #define INTC_REG32(offset) __REG32(INTC_BASE + (offset)) 338 - 339 - #define INTC1_U_BASE INTC_REG32(0x000) 340 - #define INTC_MIR0 INTC_REG32(0x084) 341 - #define INTC_MIR_SET0 INTC_REG32(0x08C) 342 - #define INTC_MIR_CLEAR0 INTC_REG32(0x088) 343 - #define INTC_ISR_CLEAR0 INTC_REG32(0x094) 344 - #define INTC_MIR1 INTC_REG32(0x0A4) 345 - #define INTC_MIR_SET1 INTC_REG32(0x0AC) 346 - #define INTC_MIR_CLEAR1 INTC_REG32(0x0A8) 347 - #define INTC_ISR_CLEAR1 INTC_REG32(0x0B4) 348 - #define INTC_MIR2 INTC_REG32(0x0C4) 349 - #define INTC_MIR_SET2 INTC_REG32(0x0CC) 350 - #define INTC_MIR_CLEAR2 INTC_REG32(0x0C8) 351 - #define INTC_ISR_CLEAR2 INTC_REG32(0x0D4) 352 - #define INTC_SIR_IRQ INTC_REG32(0x040) 353 - #define INTC_CONTROL INTC_REG32(0x048) 354 - #define INTC_ILR11 INTC_REG32(0x12C) 355 - #define INTC_ILR32 INTC_REG32(0x180) 356 - #define INTC_ILR37 INTC_REG32(0x194) 357 - #define INTC_SYSCONFIG INTC_REG32(0x010) 358 - 359 - /* RAM FIREWALL */ 360 - #define RAMFW_BASE (0x68005000) 361 - #define RAMFW_REG32(offset) __REG32(RAMFW_BASE + (offset)) 362 - 363 - #define RAMFW_REQINFOPERM0 RAMFW_REG32(0x048) 364 - #define RAMFW_READPERM0 RAMFW_REG32(0x050) 365 - #define RAMFW_WRITEPERM0 RAMFW_REG32(0x058) 366 - 367 - /* GPMC CS1 FPGA ON USER INTERFACE MODULE */ 368 - //#define DEBUG_BOARD_LED_REGISTER 0x04000014 369 - 370 - /* GPMC CS0 */ 371 - #define GPMC_CONFIG1_0 GPMC_REG32(0x060) 372 - #define GPMC_CONFIG2_0 GPMC_REG32(0x064) 373 - #define GPMC_CONFIG3_0 GPMC_REG32(0x068) 374 - #define GPMC_CONFIG4_0 GPMC_REG32(0x06C) 375 - #define GPMC_CONFIG5_0 GPMC_REG32(0x070) 376 - #define GPMC_CONFIG6_0 GPMC_REG32(0x074) 377 - #define GPMC_CONFIG7_0 GPMC_REG32(0x078) 378 - 379 - /* GPMC CS1 */ 380 - #define GPMC_CONFIG1_1 GPMC_REG32(0x090) 381 - #define GPMC_CONFIG2_1 GPMC_REG32(0x094) 382 - #define GPMC_CONFIG3_1 GPMC_REG32(0x098) 383 - #define GPMC_CONFIG4_1 GPMC_REG32(0x09C) 384 - #define GPMC_CONFIG5_1 GPMC_REG32(0x0a0) 385 - #define GPMC_CONFIG6_1 GPMC_REG32(0x0a4) 386 - #define GPMC_CONFIG7_1 GPMC_REG32(0x0a8) 387 - 388 - /* DSS */ 389 - #define DSS_CONTROL DISP_REG32(0x040) 390 - #define DISPC_CONTROL DISP_REG32(0x440) 391 - #define DISPC_SYSSTATUS DISP_REG32(0x414) 392 - #define DISPC_IRQSTATUS DISP_REG32(0x418) 393 - #define DISPC_IRQENABLE DISP_REG32(0x41C) 394 - #define DISPC_CONFIG DISP_REG32(0x444) 395 - #define DISPC_DEFAULT_COLOR0 DISP_REG32(0x44C) 396 - #define DISPC_DEFAULT_COLOR1 DISP_REG32(0x450) 397 - #define DISPC_TRANS_COLOR0 DISP_REG32(0x454) 398 - #define DISPC_TRANS_COLOR1 DISP_REG32(0x458) 399 - #define DISPC_LINE_NUMBER DISP_REG32(0x460) 400 - #define DISPC_TIMING_H DISP_REG32(0x464) 401 - #define DISPC_TIMING_V DISP_REG32(0x468) 402 - #define DISPC_POL_FREQ DISP_REG32(0x46C) 403 - #define DISPC_DIVISOR DISP_REG32(0x470) 404 - #define DISPC_SIZE_DIG DISP_REG32(0x478) 405 - #define DISPC_SIZE_LCD DISP_REG32(0x47C) 406 - #define DISPC_GFX_BA0 DISP_REG32(0x480) 407 - #define DISPC_GFX_BA1 DISP_REG32(0x484) 408 - #define DISPC_GFX_POSITION DISP_REG32(0x488) 409 - #define DISPC_GFX_SIZE DISP_REG32(0x48C) 410 - #define DISPC_GFX_ATTRIBUTES DISP_REG32(0x4A0) 411 - #define DISPC_GFX_FIFO_THRESHOLD DISP_REG32(0x4A4) 412 - #define DISPC_GFX_ROW_INC DISP_REG32(0x4AC) 413 - #define DISPC_GFX_PIXEL_INC DISP_REG32(0x4B0) 414 - #define DISPC_GFX_WINDOW_SKIP DISP_REG32(0x4B4) 415 - #define DISPC_GFX_TABLE_BA DISP_REG32(0x4B8) 416 - #define DISPC_DATA_CYCLE1 DISP_REG32(0x5D4) 417 - #define DISPC_DATA_CYCLE2 DISP_REG32(0x5D8) 418 - #define DISPC_DATA_CYCLE3 DISP_REG32(0x5DC) 419 - 420 - /* Wake up define for board */ 421 - #define GPIO97 (1 << 1) 422 - #define GPIO88 (1 << 24) 423 - 424 - #endif /* __ASSEMBLER__ */ 425 426 #endif 427
··· 1 /* 2 + * linux/include/asm-arm/arch-omap/prcm.h 3 + * 4 + * Access definations for use in OMAP24XX clock and power management 5 * 6 * Copyright (C) 2005 Texas Instruments, Inc. 7 * ··· 21 #ifndef __ASM_ARM_ARCH_DPM_PRCM_H 22 #define __ASM_ARM_ARCH_DPM_PRCM_H 23 24 + u32 omap_prcm_get_reset_sources(void); 25 26 #endif 27
+3 -14
include/asm-arm/arch-omap/system.h
··· 9 10 #include <asm/mach-types.h> 11 #include <asm/hardware.h> 12 - #include <asm/arch/prcm.h> 13 14 #ifndef CONFIG_MACH_VOICEBLUE 15 #define voiceblue_reset() do {} while (0) 16 #endif 17 18 static inline void arch_idle(void) 19 { ··· 39 omap_writew(1, ARM_RSTCT1); 40 } 41 42 - static inline void omap2_arch_reset(char mode) 43 - { 44 - u32 rate; 45 - struct clk *vclk, *sclk; 46 - 47 - vclk = clk_get(NULL, "virt_prcm_set"); 48 - sclk = clk_get(NULL, "sys_ck"); 49 - rate = clk_get_rate(sclk); 50 - clk_set_rate(vclk, rate); /* go to bypass for OMAP limitation */ 51 - RM_RSTCTRL_WKUP |= 2; 52 - } 53 - 54 static inline void arch_reset(char mode) 55 { 56 if (!cpu_is_omap24xx()) 57 omap1_arch_reset(mode); 58 else 59 - omap2_arch_reset(mode); 60 } 61 62 #endif
··· 9 10 #include <asm/mach-types.h> 11 #include <asm/hardware.h> 12 13 #ifndef CONFIG_MACH_VOICEBLUE 14 #define voiceblue_reset() do {} while (0) 15 #endif 16 + 17 + extern void omap_prcm_arch_reset(char mode); 18 19 static inline void arch_idle(void) 20 { ··· 38 omap_writew(1, ARM_RSTCT1); 39 } 40 41 static inline void arch_reset(char mode) 42 { 43 if (!cpu_is_omap24xx()) 44 omap1_arch_reset(mode); 45 else 46 + omap_prcm_arch_reset(mode); 47 } 48 49 #endif