[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 345 */ 346 346 for (dsor = 2; dsor < 96; ++dsor) { 347 347 if ((dsor & 1) && dsor > 8) 348 - continue; 348 + continue; 349 349 if (rate >= 96000000 / dsor) 350 350 break; 351 351 } ··· 687 687 clk_register(*clkp); 688 688 continue; 689 689 } 690 + 691 + if (((*clkp)->flags &CLOCK_IN_OMAP310) && cpu_is_omap310()) { 692 + clk_register(*clkp); 693 + continue; 694 + } 690 695 } 691 696 692 697 info = omap_get_config(OMAP_TAG_CLOCK, struct omap_clock_config); ··· 789 784 clk_enable(&armxor_ck.clk); 790 785 clk_enable(&armtim_ck.clk); /* This should be done by timer code */ 791 786 792 - if (cpu_is_omap1510()) 787 + if (cpu_is_omap15xx()) 793 788 clk_enable(&arm_gpio_ck); 794 789 795 790 return 0;
+59 -32
arch/arm/mach-omap1/clock.h
··· 151 151 .name = "ck_ref", 152 152 .rate = 12000000, 153 153 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 154 - ALWAYS_ENABLED, 154 + CLOCK_IN_OMAP310 | ALWAYS_ENABLED, 155 155 .enable = &omap1_clk_enable_generic, 156 156 .disable = &omap1_clk_disable_generic, 157 157 }; ··· 160 160 .name = "ck_dpll1", 161 161 .parent = &ck_ref, 162 162 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 163 - RATE_PROPAGATES | ALWAYS_ENABLED, 163 + CLOCK_IN_OMAP310 | RATE_PROPAGATES | ALWAYS_ENABLED, 164 164 .enable = &omap1_clk_enable_generic, 165 165 .disable = &omap1_clk_disable_generic, 166 166 }; ··· 183 183 .name = "arm_ck", 184 184 .parent = &ck_dpll1, 185 185 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 186 - RATE_CKCTL | RATE_PROPAGATES | ALWAYS_ENABLED, 186 + CLOCK_IN_OMAP310 | RATE_CKCTL | RATE_PROPAGATES | 187 + ALWAYS_ENABLED, 187 188 .rate_offset = CKCTL_ARMDIV_OFFSET, 188 189 .recalc = &omap1_ckctl_recalc, 189 190 .enable = &omap1_clk_enable_generic, ··· 196 195 .name = "armper_ck", 197 196 .parent = &ck_dpll1, 198 197 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 199 - RATE_CKCTL | CLOCK_IDLE_CONTROL, 198 + CLOCK_IN_OMAP310 | RATE_CKCTL | 199 + CLOCK_IDLE_CONTROL, 200 200 .enable_reg = (void __iomem *)ARM_IDLECT2, 201 201 .enable_bit = EN_PERCK, 202 202 .rate_offset = CKCTL_PERDIV_OFFSET, ··· 211 209 static struct clk arm_gpio_ck = { 212 210 .name = "arm_gpio_ck", 213 211 .parent = &ck_dpll1, 214 - .flags = CLOCK_IN_OMAP1510, 212 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310, 215 213 .enable_reg = (void __iomem *)ARM_IDLECT2, 216 214 .enable_bit = EN_GPIOCK, 217 215 .recalc = &followparent_recalc, ··· 224 222 .name = "armxor_ck", 225 223 .parent = &ck_ref, 226 224 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 227 - CLOCK_IDLE_CONTROL, 225 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 228 226 .enable_reg = (void __iomem *)ARM_IDLECT2, 229 227 .enable_bit = EN_XORPCK, 230 228 .recalc = &followparent_recalc, ··· 239 237 .name = "armtim_ck", 240 238 .parent = &ck_ref, 241 239 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 242 - CLOCK_IDLE_CONTROL, 240 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 243 241 .enable_reg = (void __iomem *)ARM_IDLECT2, 244 242 .enable_bit = EN_TIMCK, 245 243 .recalc = &followparent_recalc, ··· 254 252 .name = "armwdt_ck", 255 253 .parent = &ck_ref, 256 254 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 257 - CLOCK_IDLE_CONTROL, 255 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 258 256 .enable_reg = (void __iomem *)ARM_IDLECT2, 259 257 .enable_bit = EN_WDTCK, 260 258 .recalc = &omap1_watchdog_recalc, ··· 346 344 .name = "tc_ck", 347 345 .parent = &ck_dpll1, 348 346 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 349 - CLOCK_IN_OMAP730 | RATE_CKCTL | 350 - RATE_PROPAGATES | ALWAYS_ENABLED | 351 - CLOCK_IDLE_CONTROL, 347 + CLOCK_IN_OMAP730 | CLOCK_IN_OMAP310 | 348 + RATE_CKCTL | RATE_PROPAGATES | 349 + ALWAYS_ENABLED | CLOCK_IDLE_CONTROL, 352 350 .rate_offset = CKCTL_TCDIV_OFFSET, 353 351 .recalc = &omap1_ckctl_recalc, 354 352 .enable = &omap1_clk_enable_generic, ··· 360 358 static struct clk arminth_ck1510 = { 361 359 .name = "arminth_ck", 362 360 .parent = &tc_ck.clk, 363 - .flags = CLOCK_IN_OMAP1510 | ALWAYS_ENABLED, 361 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 362 + ALWAYS_ENABLED, 364 363 .recalc = &followparent_recalc, 365 364 /* Note: On 1510 the frequency follows TC_CK 366 365 * ··· 375 372 /* No-idle controlled by "tc_ck" */ 376 373 .name = "tibp_ck", 377 374 .parent = &tc_ck.clk, 378 - .flags = CLOCK_IN_OMAP1510 | ALWAYS_ENABLED, 375 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 376 + ALWAYS_ENABLED, 379 377 .recalc = &followparent_recalc, 380 378 .enable = &omap1_clk_enable_generic, 381 379 .disable = &omap1_clk_disable_generic, ··· 421 417 .name = "dma_ck", 422 418 .parent = &tc_ck.clk, 423 419 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 424 - ALWAYS_ENABLED, 420 + CLOCK_IN_OMAP310 | ALWAYS_ENABLED, 425 421 .recalc = &followparent_recalc, 426 422 .enable = &omap1_clk_enable_generic, 427 423 .disable = &omap1_clk_disable_generic, ··· 441 437 .name = "api_ck", 442 438 .parent = &tc_ck.clk, 443 439 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 444 - CLOCK_IDLE_CONTROL, 440 + CLOCK_IN_OMAP310 | CLOCK_IDLE_CONTROL, 445 441 .enable_reg = (void __iomem *)ARM_IDLECT2, 446 442 .enable_bit = EN_APICK, 447 443 .recalc = &followparent_recalc, ··· 455 451 .clk = { 456 452 .name = "lb_ck", 457 453 .parent = &tc_ck.clk, 458 - .flags = CLOCK_IN_OMAP1510 | CLOCK_IDLE_CONTROL, 454 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 455 + CLOCK_IDLE_CONTROL, 459 456 .enable_reg = (void __iomem *)ARM_IDLECT2, 460 457 .enable_bit = EN_LBCK, 461 458 .recalc = &followparent_recalc, ··· 500 495 .clk = { 501 496 .name = "lcd_ck", 502 497 .parent = &ck_dpll1, 503 - .flags = CLOCK_IN_OMAP1510 | RATE_CKCTL | 504 - CLOCK_IDLE_CONTROL, 498 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 499 + RATE_CKCTL | CLOCK_IDLE_CONTROL, 505 500 .enable_reg = (void __iomem *)ARM_IDLECT2, 506 501 .enable_bit = EN_LCDCK, 507 502 .rate_offset = CKCTL_LCDDIV_OFFSET, ··· 517 512 /* Direct from ULPD, no real parent */ 518 513 .parent = &armper_ck.clk, 519 514 .rate = 12000000, 520 - .flags = CLOCK_IN_OMAP1510 | ENABLE_REG_32BIT | 521 - ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 515 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 516 + ENABLE_REG_32BIT | ALWAYS_ENABLED | 517 + CLOCK_NO_IDLE_PARENT, 522 518 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 523 519 .enable_bit = 29, /* Chooses between 12MHz and 48MHz */ 524 520 .set_rate = &omap1_set_uart_rate, ··· 550 544 .parent = &armper_ck.clk, 551 545 .rate = 12000000, 552 546 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 553 - ENABLE_REG_32BIT | ALWAYS_ENABLED | 554 - CLOCK_NO_IDLE_PARENT, 547 + CLOCK_IN_OMAP310 | ENABLE_REG_32BIT | 548 + ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 555 549 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 556 550 .enable_bit = 30, /* Chooses between 12MHz and 48MHz */ 557 551 .set_rate = &omap1_set_uart_rate, ··· 565 559 /* Direct from ULPD, no real parent */ 566 560 .parent = &armper_ck.clk, 567 561 .rate = 12000000, 568 - .flags = CLOCK_IN_OMAP1510 | ENABLE_REG_32BIT | 569 - ALWAYS_ENABLED | CLOCK_NO_IDLE_PARENT, 562 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 563 + ENABLE_REG_32BIT | ALWAYS_ENABLED | 564 + CLOCK_NO_IDLE_PARENT, 570 565 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 571 566 .enable_bit = 31, /* Chooses between 12MHz and 48MHz */ 572 567 .set_rate = &omap1_set_uart_rate, ··· 597 590 /* Direct from ULPD, no parent */ 598 591 .rate = 6000000, 599 592 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 600 - RATE_FIXED | ENABLE_REG_32BIT, 593 + CLOCK_IN_OMAP310 | RATE_FIXED | ENABLE_REG_32BIT, 601 594 .enable_reg = (void __iomem *)ULPD_CLOCK_CTRL, 602 595 .enable_bit = USB_MCLK_EN_BIT, 603 596 .enable = &omap1_clk_enable_generic, ··· 608 601 .name = "usb_hhc_ck", 609 602 /* Direct from ULPD, no parent */ 610 603 .rate = 48000000, /* Actually 2 clocks, 12MHz and 48MHz */ 611 - .flags = CLOCK_IN_OMAP1510 | 604 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | 612 605 RATE_FIXED | ENABLE_REG_32BIT, 613 606 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 614 607 .enable_bit = USB_HOST_HHC_UHOST_EN, ··· 644 637 .name = "mclk", 645 638 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 646 639 .rate = 12000000, 647 - .flags = CLOCK_IN_OMAP1510 | RATE_FIXED, 640 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | RATE_FIXED, 641 + .enable_reg = (void __iomem *)SOFT_REQ_REG, 642 + .enable_bit = 6, 648 643 .enable = &omap1_clk_enable_generic, 649 644 .disable = &omap1_clk_disable_generic, 650 645 }; ··· 668 659 .name = "bclk", 669 660 /* Direct from ULPD, no parent. May be enabled by ext hardware. */ 670 661 .rate = 12000000, 671 - .flags = CLOCK_IN_OMAP1510 | RATE_FIXED, 662 + .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP310 | RATE_FIXED, 672 663 .enable = &omap1_clk_enable_generic, 673 664 .disable = &omap1_clk_disable_generic, 674 665 }; ··· 687 678 }; 688 679 689 680 static struct clk mmc1_ck = { 690 - .name = "mmc1_ck", 681 + .name = "mmc_ck", 682 + .id = 1, 691 683 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 692 684 .parent = &armper_ck.clk, 693 685 .rate = 48000000, 694 686 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 695 - RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT, 687 + CLOCK_IN_OMAP310 | RATE_FIXED | ENABLE_REG_32BIT | 688 + CLOCK_NO_IDLE_PARENT, 696 689 .enable_reg = (void __iomem *)MOD_CONF_CTRL_0, 697 690 .enable_bit = 23, 698 691 .enable = &omap1_clk_enable_generic, ··· 702 691 }; 703 692 704 693 static struct clk mmc2_ck = { 705 - .name = "mmc2_ck", 694 + .name = "mmc_ck", 695 + .id = 2, 706 696 /* Functional clock is direct from ULPD, interface clock is ARMPER */ 707 697 .parent = &armper_ck.clk, 708 698 .rate = 48000000, ··· 718 706 static struct clk virtual_ck_mpu = { 719 707 .name = "mpu", 720 708 .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | 721 - VIRTUAL_CLOCK | ALWAYS_ENABLED, 709 + CLOCK_IN_OMAP310 | VIRTUAL_CLOCK | ALWAYS_ENABLED, 722 710 .parent = &arm_ck, /* Is smarter alias for */ 723 711 .recalc = &followparent_recalc, 724 712 .set_rate = &omap1_select_table_rate, 725 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, 726 728 .enable = &omap1_clk_enable_generic, 727 729 .disable = &omap1_clk_disable_generic, 728 730 }; ··· 789 763 &mmc2_ck, 790 764 /* Virtual clocks */ 791 765 &virtual_ck_mpu, 766 + &i2c_fck, 792 767 }; 793 768 794 769 #endif
+14 -65
arch/arm/mach-omap2/clock.c
··· 28 28 29 29 #include <asm/arch/clock.h> 30 30 #include <asm/arch/sram.h> 31 - #include <asm/arch/prcm.h> 32 31 32 + #include "prcm-regs.h" 33 + #include "memory.h" 33 34 #include "clock.h" 34 35 35 36 //#define DOWN_VARIABLE_DPLL 1 /* Experimental */ 36 37 37 38 static struct prcm_config *curr_prcm_set; 38 - static struct memory_timings mem_timings; 39 39 static u32 curr_perf_level = PRCM_FULL_SPEED; 40 40 41 41 /*------------------------------------------------------------------------- ··· 54 54 55 55 static u32 omap2_get_dpll_rate(struct clk * tclk) 56 56 { 57 - int dpll_clk, dpll_mult, dpll_div, amult; 57 + long long dpll_clk; 58 + int dpll_mult, dpll_div, amult; 58 59 59 60 dpll_mult = (CM_CLKSEL1_PLL >> 12) & 0x03ff; /* 10 bits */ 60 61 dpll_div = (CM_CLKSEL1_PLL >> 8) & 0x0f; /* 4 bits */ 61 - dpll_clk = (tclk->parent->rate * dpll_mult) / (dpll_div + 1); 62 + dpll_clk = (long long)tclk->parent->rate * dpll_mult; 63 + do_div(dpll_clk, dpll_div + 1); 62 64 amult = CM_CLKSEL2_PLL & 0x3; 63 65 dpll_clk *= amult; 64 66 ··· 387 385 return 0; 388 386 } 389 387 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 388 static u32 omap2_reprogram_sdrc(u32 level, u32 force) 447 389 { 390 + u32 slow_dll_ctrl, fast_dll_ctrl, m_type; 448 391 u32 prev = curr_perf_level, flags; 449 392 450 393 if ((curr_perf_level == level) && !force) 451 394 return prev; 452 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 + 453 400 if (level == PRCM_HALF_SPEED) { 454 401 local_irq_save(flags); 455 402 PRCM_VOLTSETUP = 0xffff; 456 403 omap2_sram_reprogram_sdrc(PRCM_HALF_SPEED, 457 - mem_timings.slow_dll_ctrl, 458 - mem_timings.m_type); 404 + slow_dll_ctrl, m_type); 459 405 curr_perf_level = PRCM_HALF_SPEED; 460 406 local_irq_restore(flags); 461 407 } ··· 411 461 local_irq_save(flags); 412 462 PRCM_VOLTSETUP = 0xffff; 413 463 omap2_sram_reprogram_sdrc(PRCM_FULL_SPEED, 414 - mem_timings.fast_dll_ctrl, 415 - mem_timings.m_type); 464 + fast_dll_ctrl, m_type); 416 465 curr_perf_level = PRCM_FULL_SPEED; 417 466 local_irq_restore(flags); 418 467 } ··· 599 650 case 13: /* dss2 */ 600 651 mask = 0x1; break; 601 652 case 25: /* usb */ 602 - mask = 0xf; break; 653 + mask = 0x7; break; 603 654 } 604 655 } 605 656
+19 -18
arch/arm/mach-omap2/clock.h
··· 33 33 #define RATE_IN_242X (1 << 0) 34 34 #define RATE_IN_243X (1 << 1) 35 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 36 /* Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. 51 37 * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,CM_CLKSEL_DSP 52 38 * CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL CM_CLKSEL2_PLL, CM_CLKSEL_MDM ··· 715 729 .enable_bit = 15, 716 730 .rate_offset = 11, 717 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 + 718 742 }; 719 743 720 744 /* ··· 1698 1702 }; 1699 1703 1700 1704 static struct clk i2c2_ick = { 1701 - .name = "i2c2_ick", 1705 + .name = "i2c_ick", 1706 + .id = 2, 1702 1707 .parent = &l4_ck, 1703 1708 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1704 1709 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1708 1711 }; 1709 1712 1710 1713 static struct clk i2c2_fck = { 1711 - .name = "i2c2_fck", 1714 + .name = "i2c_fck", 1715 + .id = 2, 1712 1716 .parent = &func_12m_ck, 1713 1717 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1714 1718 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1727 1729 }; 1728 1730 1729 1731 static struct clk i2c1_ick = { 1730 - .name = "i2c1_ick", 1732 + .name = "i2c_ick", 1733 + .id = 1, 1731 1734 .parent = &l4_ck, 1732 1735 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1733 1736 .enable_reg = (void __iomem *)&CM_ICLKEN1_CORE, ··· 1737 1738 }; 1738 1739 1739 1740 static struct clk i2c1_fck = { 1740 - .name = "i2c1_fck", 1741 + .name = "i2c_fck", 1742 + .id = 1, 1741 1743 .parent = &func_12m_ck, 1742 1744 .flags = CLOCK_IN_OMAP242X | CLOCK_IN_OMAP243X, 1743 1745 .enable_reg = (void __iomem *)&CM_FCLKEN1_CORE, ··· 1971 1971 &wdt1_osc_ck, 1972 1972 &sys_clkout, 1973 1973 &sys_clkout2, 1974 + &emul_ck, 1974 1975 /* mpu domain clocks */ 1975 1976 &mpu_ck, 1976 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 1 /* 2 - * prcm.h - Access definations for use in OMAP24XX clock and power management 2 + * linux/arch/arm/mach-omap2/prcm-reg.h 3 + * 4 + * OMAP24XX Power Reset and Clock Management (PRCM) registers 3 5 * 4 6 * Copyright (C) 2005 Texas Instruments, Inc. 5 7 * ··· 20 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 19 */ 22 20 23 - #ifndef __ASM_ARM_ARCH_DPM_PRCM_H 24 - #define __ASM_ARM_ARCH_DPM_PRCM_H 21 + #ifndef __ARCH_ARM_MACH_OMAP2_PRCM_H 22 + #define __ARCH_ARM_MACH_OMAP2_PRCM_H 25 23 26 24 /* SET_PERFORMANCE_LEVEL PARAMETERS */ 27 25 #define PRCM_HALF_SPEED 1 ··· 161 159 #define CM_FCLKEN_MDM PRCM_REG32(0xC00) 162 160 #define CM_ICLKEN_MDM PRCM_REG32(0xC10) 163 161 #define CM_IDLEST_MDM PRCM_REG32(0xC20) 162 + #define CM_AUTOIDLE_MDM PRCM_REG32(0xC30) 164 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) 165 172 166 - /* FIXME: Move to header for 2430 */ 167 - #define DISP_BASE (OMAP24XX_L4_IO_BASE+0x50000) 173 + #define OMAP24XX_L4_IO_BASE 0x48000000 174 + 175 + #define DISP_BASE (OMAP24XX_L4_IO_BASE + 0x50000) 168 176 #define DISP_REG32(offset) __REG32(DISP_BASE + (offset)) 169 177 170 - #define GPMC_BASE (OMAP24XX_GPMC_BASE) 171 - #define GPMC_REG32(offset) __REG32(GPMC_BASE + (offset)) 178 + #define OMAP24XX_GPMC_BASE (L3_24XX_BASE + 0xa000) 179 + #define GPMC_REG32(offset) __REG32(OMAP24XX_GPMC_BASE + (offset)) 172 180 173 - #define GPT1_BASE (OMAP24XX_GPT1) 181 + /* FIXME: Move these to timer code */ 182 + #define GPT1_BASE (0x48028000) 174 183 #define GPT1_REG32(offset) __REG32(GPT1_BASE + (offset)) 175 184 176 185 /* Misc sysconfig */ 177 186 #define DISPC_SYSCONFIG DISP_REG32(0x410) 178 - #define SPI_BASE (OMAP24XX_L4_IO_BASE+0x98000) 187 + #define SPI_BASE (OMAP24XX_L4_IO_BASE + 0x98000) 179 188 #define MCSPI1_SYSCONFIG __REG32(SPI_BASE + 0x10) 180 - #define MCSPI2_SYSCONFIG __REG32(SPI_BASE+0x2000 + 0x10) 189 + #define MCSPI2_SYSCONFIG __REG32(SPI_BASE + 0x2000 + 0x10) 190 + #define MCSPI3_SYSCONFIG __REG32(OMAP24XX_L4_IO_BASE + 0xb8010) 181 191 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) 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) 188 195 #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 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) 198 204 199 205 /* 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) 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) 211 217 218 + /* FIXME: Move these to timer code */ 212 219 #define GPTIMER1_SYSCONFIG GPT1_REG32(0x010) 213 220 #define GPTIMER2_SYSCONFIG __REG32(OMAP24XX_GPT2 + 0x10) 214 221 #define GPTIMER3_SYSCONFIG __REG32(OMAP24XX_GPT3 + 0x10) ··· 231 220 #define GPTIMER11_SYSCONFIG __REG32(OMAP24XX_GPT11 + 0x10) 232 221 #define GPTIMER12_SYSCONFIG __REG32(OMAP24XX_GPT12 + 0x10) 233 222 234 - #define GPIOX_BASE(X) (OMAP24XX_GPIO_BASE+(0x2000*((X)-1))) 223 + /* FIXME: Move these to gpio code */ 224 + #define OMAP24XX_GPIO_BASE 0x48018000 225 + #define GPIOX_BASE(X) (OMAP24XX_GPIO_BASE + (0x2000 * ((X) - 1))) 235 226 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)) 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 240 235 241 236 /* GP TIMER 1 */ 242 237 #define GPTIMER1_TISTAT GPT1_REG32(0x014) ··· 260 243 #define GPTIMER1_TCAR2 GPT1_REG32(0x044) 261 244 262 245 /* rkw -- base fix up please... */ 263 - #define GPTIMER3_TISR __REG32(OMAP24XX_L4_IO_BASE+0x78018) 246 + #define GPTIMER3_TISR __REG32(OMAP24XX_L4_IO_BASE + 0x78018) 264 247 265 248 /* 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) 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) 272 255 273 256 /* GPIO 1 */ 274 257 #define GPIO1_BASE GPIOX_BASE(1) ··· 295 278 #define GPIO2_DATAIN GPIO2_REG32(0x038) 296 279 #define GPIO2_OE GPIO2_REG32(0x034) 297 280 #define GPIO2_DATAOUT GPIO2_REG32(0x03C) 281 + #define GPIO2_DEBOUNCENABLE GPIO2_REG32(0x050) 282 + #define GPIO2_DEBOUNCINGTIME GPIO2_REG32(0x054) 298 283 299 284 /* GPIO 3 */ 300 285 #define GPIO3_BASE GPIOX_BASE(3) ··· 311 292 #define GPIO3_DATAIN GPIO3_REG32(0x038) 312 293 #define GPIO3_OE GPIO3_REG32(0x034) 313 294 #define GPIO3_DATAOUT GPIO3_REG32(0x03C) 295 + #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 296 + #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 314 297 #define GPIO3_DEBOUNCENABLE GPIO3_REG32(0x050) 315 298 #define GPIO3_DEBOUNCINGTIME GPIO3_REG32(0x054) 316 299 ··· 332 311 #define GPIO4_DEBOUNCENABLE GPIO4_REG32(0x050) 333 312 #define GPIO4_DEBOUNCINGTIME GPIO4_REG32(0x054) 334 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 335 330 336 331 /* IO CONFIG */ 337 - #define CONTROL_BASE (OMAP24XX_CTRL_BASE) 338 - #define CONTROL_REG32(offset) __REG32(CONTROL_BASE + (offset)) 332 + #define OMAP24XX_CTRL_BASE (L4_24XX_BASE) 333 + #define CONTROL_REG32(offset) __REG32(OMAP24XX_CTRL_BASE + (offset)) 339 334 340 335 #define CONTROL_PADCONF_SPI1_NCS2 CONTROL_REG32(0x104) 341 336 #define CONTROL_PADCONF_SYS_XTALOUT CONTROL_REG32(0x134) ··· 359 322 #define CONTROL_PADCONF_MCBSP1_DX CONTROL_REG32(0x10C) 360 323 #define CONTROL_PADCONF_GPMC_NCS4 CONTROL_REG32(0x090) 361 324 #define CONTROL_PADCONF_DSS_D5 CONTROL_REG32(0x0B8) 362 - #define CONTROL_PADCONF_DSS_D9 CONTROL_REG32(0x0BC) 325 + #define CONTROL_PADCONF_DSS_D9 CONTROL_REG32(0x0BC) /* 2420 */ 363 326 #define CONTROL_PADCONF_DSS_D13 CONTROL_REG32(0x0C0) 364 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 */ 365 330 366 331 /* CONTROL */ 367 332 #define CONTROL_DEVCONF CONTROL_REG32(0x274) 333 + #define CONTROL_DEVCONF1 CONTROL_REG32(0x2E8) 368 334 369 335 /* INTERRUPT CONTROLLER */ 370 - #define INTC_BASE (OMAP24XX_L4_IO_BASE+0xfe000) 336 + #define INTC_BASE ((L4_24XX_BASE) + 0xfe000) 371 337 #define INTC_REG32(offset) __REG32(INTC_BASE + (offset)) 372 338 373 339 #define INTC1_U_BASE INTC_REG32(0x000) ··· 388 348 #define INTC_ISR_CLEAR2 INTC_REG32(0x0D4) 389 349 #define INTC_SIR_IRQ INTC_REG32(0x040) 390 350 #define INTC_CONTROL INTC_REG32(0x048) 391 - #define INTC_ILR11 INTC_REG32(0x12C) 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) 392 354 #define INTC_ILR32 INTC_REG32(0x180) 393 - #define INTC_ILR37 INTC_REG32(0x194) 394 - #define INTC_SYSCONFIG INTC_REG32(0x010) 355 + #define INTC_ILR37 INTC_REG32(0x194) /* GPIO4 on MPU PIC */ 356 + #define INTC_SYSCONFIG INTC_REG32(0x010) /* GPT1 on MPU PIC */ 395 357 396 358 /* RAM FIREWALL */ 397 359 #define RAMFW_BASE (0x68005000) ··· 414 372 #define GPMC_CONFIG5_0 GPMC_REG32(0x070) 415 373 #define GPMC_CONFIG6_0 GPMC_REG32(0x074) 416 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) 417 393 418 394 /* DSS */ 419 395 #define DSS_CONTROL DISP_REG32(0x040) ··· 465 405 #define DISPC_DATA_CYCLE2 DISP_REG32(0x5D8) 466 406 #define DISPC_DATA_CYCLE3 DISP_REG32(0x5DC) 467 407 468 - /* Wake up define for board */ 469 - #define GPIO97 (1 << 1) 470 - #define GPIO88 (1 << 24) 408 + /* HSUSB Suspend */ 409 + #define HSUSB_CTRL __REG8(0x480AC001) 410 + #define USBOTG_POWER __REG32(0x480AC000) 471 411 472 - #endif /* __ASSEMBLER__ */ 412 + /* HS MMC */ 413 + #define MMCHS1_SYSCONFIG __REG32(0x4809C010) 414 + #define MMCHS2_SYSCONFIG __REG32(0x480b4010) 415 + 416 + #endif /* __ASSEMBLER__ */ 473 417 474 418 #endif 475 419
+65 -2
arch/arm/plat-omap/clock.c
··· 21 21 #include <linux/string.h> 22 22 #include <linux/clk.h> 23 23 #include <linux/mutex.h> 24 + #include <linux/platform_device.h> 24 25 25 26 #include <asm/io.h> 26 27 #include <asm/semaphore.h> ··· 38 37 * Standard clock functions defined in include/linux/clk.h 39 38 *-------------------------------------------------------------------------*/ 40 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 + */ 41 44 struct clk * clk_get(struct device *dev, const char *id) 42 45 { 43 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; 44 53 45 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 + 46 64 list_for_each_entry(p, &clocks, node) { 47 65 if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) { 48 66 clk = p; 49 67 break; 50 68 } 51 69 } 70 + 52 71 mutex_unlock(&clocks_mutex); 53 72 54 73 return clk; ··· 79 58 { 80 59 unsigned long flags; 81 60 int ret = 0; 61 + 62 + if (clk == NULL || IS_ERR(clk)) 63 + return -EINVAL; 82 64 83 65 spin_lock_irqsave(&clockfw_lock, flags); 84 66 if (arch_clock->clk_enable) ··· 96 72 { 97 73 unsigned long flags; 98 74 75 + if (clk == NULL || IS_ERR(clk)) 76 + return; 77 + 99 78 spin_lock_irqsave(&clockfw_lock, flags); 100 79 if (arch_clock->clk_disable) 101 80 arch_clock->clk_disable(clk); ··· 110 83 { 111 84 unsigned long flags; 112 85 int ret = 0; 86 + 87 + if (clk == NULL || IS_ERR(clk)) 88 + return 0; 113 89 114 90 spin_lock_irqsave(&clockfw_lock, flags); 115 91 ret = clk->usecount; ··· 126 96 { 127 97 unsigned long flags; 128 98 unsigned long ret = 0; 99 + 100 + if (clk == NULL || IS_ERR(clk)) 101 + return 0; 129 102 130 103 spin_lock_irqsave(&clockfw_lock, flags); 131 104 ret = clk->rate; ··· 154 121 unsigned long flags; 155 122 long ret = 0; 156 123 124 + if (clk == NULL || IS_ERR(clk)) 125 + return ret; 126 + 157 127 spin_lock_irqsave(&clockfw_lock, flags); 158 128 if (arch_clock->clk_round_rate) 159 129 ret = arch_clock->clk_round_rate(clk, rate); ··· 169 133 int clk_set_rate(struct clk *clk, unsigned long rate) 170 134 { 171 135 unsigned long flags; 172 - int ret = 0; 136 + int ret = -EINVAL; 137 + 138 + if (clk == NULL || IS_ERR(clk)) 139 + return ret; 173 140 174 141 spin_lock_irqsave(&clockfw_lock, flags); 175 142 if (arch_clock->clk_set_rate) ··· 186 147 int clk_set_parent(struct clk *clk, struct clk *parent) 187 148 { 188 149 unsigned long flags; 189 - int ret = 0; 150 + int ret = -EINVAL; 151 + 152 + if (clk == NULL || IS_ERR(clk) || parent == NULL || IS_ERR(parent)) 153 + return ret; 190 154 191 155 spin_lock_irqsave(&clockfw_lock, flags); 192 156 if (arch_clock->clk_set_parent) ··· 204 162 { 205 163 unsigned long flags; 206 164 struct clk * ret = NULL; 165 + 166 + if (clk == NULL || IS_ERR(clk)) 167 + return ret; 207 168 208 169 spin_lock_irqsave(&clockfw_lock, flags); 209 170 if (arch_clock->clk_get_parent) ··· 244 199 /* Used for clocks that always have same value as the parent clock */ 245 200 void followparent_recalc(struct clk *clk) 246 201 { 202 + if (clk == NULL || IS_ERR(clk)) 203 + return; 204 + 247 205 clk->rate = clk->parent->rate; 248 206 } 249 207 ··· 254 206 void propagate_rate(struct clk * tclk) 255 207 { 256 208 struct clk *clkp; 209 + 210 + if (tclk == NULL || IS_ERR(tclk)) 211 + return; 257 212 258 213 list_for_each_entry(clkp, &clocks, node) { 259 214 if (likely(clkp->parent != tclk)) ··· 268 217 269 218 int clk_register(struct clk *clk) 270 219 { 220 + if (clk == NULL || IS_ERR(clk)) 221 + return -EINVAL; 222 + 271 223 mutex_lock(&clocks_mutex); 272 224 list_add(&clk->node, &clocks); 273 225 if (clk->init) ··· 283 229 284 230 void clk_unregister(struct clk *clk) 285 231 { 232 + if (clk == NULL || IS_ERR(clk)) 233 + return; 234 + 286 235 mutex_lock(&clocks_mutex); 287 236 list_del(&clk->node); 288 237 mutex_unlock(&clocks_mutex); ··· 295 238 void clk_deny_idle(struct clk *clk) 296 239 { 297 240 unsigned long flags; 241 + 242 + if (clk == NULL || IS_ERR(clk)) 243 + return; 298 244 299 245 spin_lock_irqsave(&clockfw_lock, flags); 300 246 if (arch_clock->clk_deny_idle) ··· 309 249 void clk_allow_idle(struct clk *clk) 310 250 { 311 251 unsigned long flags; 252 + 253 + if (clk == NULL || IS_ERR(clk)) 254 + return; 312 255 313 256 spin_lock_irqsave(&clockfw_lock, flags); 314 257 if (arch_clock->clk_allow_idle)
+8 -5
include/asm-arm/arch-omap/clock.h
··· 19 19 struct list_head node; 20 20 struct module *owner; 21 21 const char *name; 22 + int id; 22 23 struct clk *parent; 23 24 unsigned long rate; 24 25 __u32 flags; ··· 58 57 extern void followparent_recalc(struct clk * clk); 59 58 extern void clk_allow_idle(struct clk *clk); 60 59 extern void clk_deny_idle(struct clk *clk); 60 + extern int clk_get_usecount(struct clk *clk); 61 61 62 62 /* Clock flags */ 63 63 #define RATE_CKCTL (1 << 0) /* Main fixed ratio clocks */ ··· 82 80 #define CM_PLL_SEL1 (1 << 18) 83 81 #define CM_PLL_SEL2 (1 << 19) 84 82 #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) 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) 90 89 91 90 #endif
+4 -400
include/asm-arm/arch-omap/prcm.h
··· 1 1 /* 2 - * prcm.h - Access definations for use in OMAP24XX clock and power management 2 + * linux/include/asm-arm/arch-omap/prcm.h 3 + * 4 + * Access definations for use in OMAP24XX clock and power management 3 5 * 4 6 * Copyright (C) 2005 Texas Instruments, Inc. 5 7 * ··· 23 21 #ifndef __ASM_ARM_ARCH_DPM_PRCM_H 24 22 #define __ASM_ARM_ARCH_DPM_PRCM_H 25 23 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__ */ 24 + u32 omap_prcm_get_reset_sources(void); 425 25 426 26 #endif 427 27
+3 -14
include/asm-arm/arch-omap/system.h
··· 9 9 10 10 #include <asm/mach-types.h> 11 11 #include <asm/hardware.h> 12 - #include <asm/arch/prcm.h> 13 12 14 13 #ifndef CONFIG_MACH_VOICEBLUE 15 14 #define voiceblue_reset() do {} while (0) 16 15 #endif 16 + 17 + extern void omap_prcm_arch_reset(char mode); 17 18 18 19 static inline void arch_idle(void) 19 20 { ··· 39 38 omap_writew(1, ARM_RSTCT1); 40 39 } 41 40 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 41 static inline void arch_reset(char mode) 55 42 { 56 43 if (!cpu_is_omap24xx()) 57 44 omap1_arch_reset(mode); 58 45 else 59 - omap2_arch_reset(mode); 46 + omap_prcm_arch_reset(mode); 60 47 } 61 48 62 49 #endif