pm34xx.c (f0611a5c220e50dec65041b10bd2fe9484f061a6) | pm34xx.c (c4d7e58fb52c632d8e33cd23a4917d7a7f8302ac) |
---|---|
1/* 2 * OMAP3 Power Management Routines 3 * 4 * Copyright (C) 2006-2008 Nokia Corporation 5 * Tony Lindgren <tony@atomide.com> 6 * Jouni Hogander 7 * 8 * Copyright (C) 2007 Texas Instruments, Inc. --- 91 unchanged lines hidden (view full) --- 100 omap_gpio_restore_context(); 101} 102 103static void omap3_enable_io_chain(void) 104{ 105 int timeout = 0; 106 107 if (omap_rev() >= OMAP3430_REV_ES3_1) { | 1/* 2 * OMAP3 Power Management Routines 3 * 4 * Copyright (C) 2006-2008 Nokia Corporation 5 * Tony Lindgren <tony@atomide.com> 6 * Jouni Hogander 7 * 8 * Copyright (C) 2007 Texas Instruments, Inc. --- 91 unchanged lines hidden (view full) --- 100 omap_gpio_restore_context(); 101} 102 103static void omap3_enable_io_chain(void) 104{ 105 int timeout = 0; 106 107 if (omap_rev() >= OMAP3430_REV_ES3_1) { |
108 prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | 108 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, |
109 PM_WKEN); 110 /* Do a readback to assure write has been done */ | 109 PM_WKEN); 110 /* Do a readback to assure write has been done */ |
111 prm_read_mod_reg(WKUP_MOD, PM_WKEN); | 111 omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN); |
112 | 112 |
113 while (!(prm_read_mod_reg(WKUP_MOD, PM_WKEN) & | 113 while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) & |
114 OMAP3430_ST_IO_CHAIN_MASK)) { 115 timeout++; 116 if (timeout > 1000) { 117 printk(KERN_ERR "Wake up daisy chain " 118 "activation failed.\n"); 119 return; 120 } | 114 OMAP3430_ST_IO_CHAIN_MASK)) { 115 timeout++; 116 if (timeout > 1000) { 117 printk(KERN_ERR "Wake up daisy chain " 118 "activation failed.\n"); 119 return; 120 } |
121 prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, | 121 omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, |
122 WKUP_MOD, PM_WKEN); 123 } 124 } 125} 126 127static void omap3_disable_io_chain(void) 128{ 129 if (omap_rev() >= OMAP3430_REV_ES3_1) | 122 WKUP_MOD, PM_WKEN); 123 } 124 } 125} 126 127static void omap3_disable_io_chain(void) 128{ 129 if (omap_rev() >= OMAP3430_REV_ES3_1) |
130 prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | 130 omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, |
131 PM_WKEN); 132} 133 134static void omap3_core_save_context(void) 135{ 136 u32 control_padconf_off; 137 138 /* Save the padconf registers */ --- 77 unchanged lines hidden (view full) --- 216 u32 wkst, fclk, iclk, clken; 217 u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1; 218 u16 fclk_off = (regs == 3) ? OMAP3430ES2_CM_FCLKEN3 : CM_FCLKEN1; 219 u16 iclk_off = (regs == 3) ? CM_ICLKEN3 : CM_ICLKEN1; 220 u16 grpsel_off = (regs == 3) ? 221 OMAP3430ES2_PM_MPUGRPSEL3 : OMAP3430_PM_MPUGRPSEL; 222 int c = 0; 223 | 131 PM_WKEN); 132} 133 134static void omap3_core_save_context(void) 135{ 136 u32 control_padconf_off; 137 138 /* Save the padconf registers */ --- 77 unchanged lines hidden (view full) --- 216 u32 wkst, fclk, iclk, clken; 217 u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1; 218 u16 fclk_off = (regs == 3) ? OMAP3430ES2_CM_FCLKEN3 : CM_FCLKEN1; 219 u16 iclk_off = (regs == 3) ? CM_ICLKEN3 : CM_ICLKEN1; 220 u16 grpsel_off = (regs == 3) ? 221 OMAP3430ES2_PM_MPUGRPSEL3 : OMAP3430_PM_MPUGRPSEL; 222 int c = 0; 223 |
224 wkst = prm_read_mod_reg(module, wkst_off); 225 wkst &= prm_read_mod_reg(module, grpsel_off); | 224 wkst = omap2_prm_read_mod_reg(module, wkst_off); 225 wkst &= omap2_prm_read_mod_reg(module, grpsel_off); |
226 if (wkst) { | 226 if (wkst) { |
227 iclk = cm_read_mod_reg(module, iclk_off); 228 fclk = cm_read_mod_reg(module, fclk_off); | 227 iclk = omap2_cm_read_mod_reg(module, iclk_off); 228 fclk = omap2_cm_read_mod_reg(module, fclk_off); |
229 while (wkst) { 230 clken = wkst; | 229 while (wkst) { 230 clken = wkst; |
231 cm_set_mod_reg_bits(clken, module, iclk_off); | 231 omap2_cm_set_mod_reg_bits(clken, module, iclk_off); |
232 /* 233 * For USBHOST, we don't know whether HOST1 or 234 * HOST2 woke us up, so enable both f-clocks 235 */ 236 if (module == OMAP3430ES2_USBHOST_MOD) 237 clken |= 1 << OMAP3430ES2_EN_USBHOST2_SHIFT; | 232 /* 233 * For USBHOST, we don't know whether HOST1 or 234 * HOST2 woke us up, so enable both f-clocks 235 */ 236 if (module == OMAP3430ES2_USBHOST_MOD) 237 clken |= 1 << OMAP3430ES2_EN_USBHOST2_SHIFT; |
238 cm_set_mod_reg_bits(clken, module, fclk_off); 239 prm_write_mod_reg(wkst, module, wkst_off); 240 wkst = prm_read_mod_reg(module, wkst_off); | 238 omap2_cm_set_mod_reg_bits(clken, module, fclk_off); 239 omap2_prm_write_mod_reg(wkst, module, wkst_off); 240 wkst = omap2_prm_read_mod_reg(module, wkst_off); |
241 c++; 242 } | 241 c++; 242 } |
243 cm_write_mod_reg(iclk, module, iclk_off); 244 cm_write_mod_reg(fclk, module, fclk_off); | 243 omap2_cm_write_mod_reg(iclk, module, iclk_off); 244 omap2_cm_write_mod_reg(fclk, module, fclk_off); |
245 } 246 247 return c; 248} 249 250static int _prcm_int_handle_wakeup(void) 251{ 252 int c; --- 26 unchanged lines hidden (view full) --- 279 * preventing us from clearing bit 0 of the PRM_IRQSTATUS_MPU register) 280 * this would be handled. 281 */ 282static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id) 283{ 284 u32 irqenable_mpu, irqstatus_mpu; 285 int c = 0; 286 | 245 } 246 247 return c; 248} 249 250static int _prcm_int_handle_wakeup(void) 251{ 252 int c; --- 26 unchanged lines hidden (view full) --- 279 * preventing us from clearing bit 0 of the PRM_IRQSTATUS_MPU register) 280 * this would be handled. 281 */ 282static irqreturn_t prcm_interrupt_handler (int irq, void *dev_id) 283{ 284 u32 irqenable_mpu, irqstatus_mpu; 285 int c = 0; 286 |
287 irqenable_mpu = prm_read_mod_reg(OCP_MOD, | 287 irqenable_mpu = omap2_prm_read_mod_reg(OCP_MOD, |
288 OMAP3_PRM_IRQENABLE_MPU_OFFSET); | 288 OMAP3_PRM_IRQENABLE_MPU_OFFSET); |
289 irqstatus_mpu = prm_read_mod_reg(OCP_MOD, | 289 irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD, |
290 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 291 irqstatus_mpu &= irqenable_mpu; 292 293 do { 294 if (irqstatus_mpu & (OMAP3430_WKUP_ST_MASK | 295 OMAP3430_IO_ST_MASK)) { 296 c = _prcm_int_handle_wakeup(); 297 --- 4 unchanged lines hidden (view full) --- 302 WARN(c == 0, "prcm: WARNING: PRCM indicated MPU wakeup " 303 "but no wakeup sources are marked\n"); 304 } else { 305 /* XXX we need to expand our PRCM interrupt handler */ 306 WARN(1, "prcm: WARNING: PRCM interrupt received, but " 307 "no code to handle it (%08x)\n", irqstatus_mpu); 308 } 309 | 290 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 291 irqstatus_mpu &= irqenable_mpu; 292 293 do { 294 if (irqstatus_mpu & (OMAP3430_WKUP_ST_MASK | 295 OMAP3430_IO_ST_MASK)) { 296 c = _prcm_int_handle_wakeup(); 297 --- 4 unchanged lines hidden (view full) --- 302 WARN(c == 0, "prcm: WARNING: PRCM indicated MPU wakeup " 303 "but no wakeup sources are marked\n"); 304 } else { 305 /* XXX we need to expand our PRCM interrupt handler */ 306 WARN(1, "prcm: WARNING: PRCM interrupt received, but " 307 "no code to handle it (%08x)\n", irqstatus_mpu); 308 } 309 |
310 prm_write_mod_reg(irqstatus_mpu, OCP_MOD, | 310 omap2_prm_write_mod_reg(irqstatus_mpu, OCP_MOD, |
311 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 312 | 311 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 312 |
313 irqstatus_mpu = prm_read_mod_reg(OCP_MOD, | 313 irqstatus_mpu = omap2_prm_read_mod_reg(OCP_MOD, |
314 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 315 irqstatus_mpu &= irqenable_mpu; 316 317 } while (irqstatus_mpu); 318 319 return IRQ_HANDLED; 320} 321 --- 71 unchanged lines hidden (view full) --- 393 pwrdm_set_next_pwrst(neon_pwrdm, mpu_next_state); 394 395 /* Enable IO-PAD and IO-CHAIN wakeups */ 396 per_next_state = pwrdm_read_next_pwrst(per_pwrdm); 397 core_next_state = pwrdm_read_next_pwrst(core_pwrdm); 398 if (omap3_has_io_wakeup() && 399 (per_next_state < PWRDM_POWER_ON || 400 core_next_state < PWRDM_POWER_ON)) { | 314 OMAP3_PRM_IRQSTATUS_MPU_OFFSET); 315 irqstatus_mpu &= irqenable_mpu; 316 317 } while (irqstatus_mpu); 318 319 return IRQ_HANDLED; 320} 321 --- 71 unchanged lines hidden (view full) --- 393 pwrdm_set_next_pwrst(neon_pwrdm, mpu_next_state); 394 395 /* Enable IO-PAD and IO-CHAIN wakeups */ 396 per_next_state = pwrdm_read_next_pwrst(per_pwrdm); 397 core_next_state = pwrdm_read_next_pwrst(core_pwrdm); 398 if (omap3_has_io_wakeup() && 399 (per_next_state < PWRDM_POWER_ON || 400 core_next_state < PWRDM_POWER_ON)) { |
401 prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); | 401 omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); |
402 omap3_enable_io_chain(); 403 } 404 405 /* Block console output in case it is on one of the OMAP UARTs */ 406 if (!is_suspending()) 407 if (per_next_state < PWRDM_POWER_ON || 408 core_next_state < PWRDM_POWER_ON) 409 if (try_acquire_console_sem()) --- 56 unchanged lines hidden (view full) --- 466 omap3_core_restore_context(); 467 omap3_cm_restore_context(); 468 omap3_sram_restore_context(); 469 omap2_sms_restore_context(); 470 } 471 omap_uart_resume_idle(0); 472 omap_uart_resume_idle(1); 473 if (core_next_state == PWRDM_POWER_OFF) | 402 omap3_enable_io_chain(); 403 } 404 405 /* Block console output in case it is on one of the OMAP UARTs */ 406 if (!is_suspending()) 407 if (per_next_state < PWRDM_POWER_ON || 408 core_next_state < PWRDM_POWER_ON) 409 if (try_acquire_console_sem()) --- 56 unchanged lines hidden (view full) --- 466 omap3_core_restore_context(); 467 omap3_cm_restore_context(); 468 omap3_sram_restore_context(); 469 omap2_sms_restore_context(); 470 } 471 omap_uart_resume_idle(0); 472 omap_uart_resume_idle(1); 473 if (core_next_state == PWRDM_POWER_OFF) |
474 prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, | 474 omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, |
475 OMAP3430_GR_MOD, 476 OMAP3_PRM_VOLTCTRL_OFFSET); 477 } 478 omap3_intc_resume_idle(); 479 480 /* PER */ 481 if (per_next_state < PWRDM_POWER_ON) { 482 per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); --- 7 unchanged lines hidden (view full) --- 490 if (!is_suspending()) 491 release_console_sem(); 492 493console_still_active: 494 /* Disable IO-PAD and IO-CHAIN wakeup */ 495 if (omap3_has_io_wakeup() && 496 (per_next_state < PWRDM_POWER_ON || 497 core_next_state < PWRDM_POWER_ON)) { | 475 OMAP3430_GR_MOD, 476 OMAP3_PRM_VOLTCTRL_OFFSET); 477 } 478 omap3_intc_resume_idle(); 479 480 /* PER */ 481 if (per_next_state < PWRDM_POWER_ON) { 482 per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); --- 7 unchanged lines hidden (view full) --- 490 if (!is_suspending()) 491 release_console_sem(); 492 493console_still_active: 494 /* Disable IO-PAD and IO-CHAIN wakeup */ 495 if (omap3_has_io_wakeup() && 496 (per_next_state < PWRDM_POWER_ON || 497 core_next_state < PWRDM_POWER_ON)) { |
498 prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); | 498 omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, 499 PM_WKEN); |
499 omap3_disable_io_chain(); 500 } 501 502 pwrdm_post_transition(); 503 504 omap2_clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); 505} 506 --- 121 unchanged lines hidden (view full) --- 628 * full-chip retention or off-mode because it is not idle. This 629 * function forces the IVA2 into idle state so it can go 630 * into retention/off and thus allow full-chip retention/off. 631 * 632 **/ 633static void __init omap3_iva_idle(void) 634{ 635 /* ensure IVA2 clock is disabled */ | 500 omap3_disable_io_chain(); 501 } 502 503 pwrdm_post_transition(); 504 505 omap2_clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); 506} 507 --- 121 unchanged lines hidden (view full) --- 629 * full-chip retention or off-mode because it is not idle. This 630 * function forces the IVA2 into idle state so it can go 631 * into retention/off and thus allow full-chip retention/off. 632 * 633 **/ 634static void __init omap3_iva_idle(void) 635{ 636 /* ensure IVA2 clock is disabled */ |
636 cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); | 637 omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); |
637 638 /* if no clock activity, nothing else to do */ | 638 639 /* if no clock activity, nothing else to do */ |
639 if (!(cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) & | 640 if (!(omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSTST) & |
640 OMAP3430_CLKACTIVITY_IVA2_MASK)) 641 return; 642 643 /* Reset IVA2 */ | 641 OMAP3430_CLKACTIVITY_IVA2_MASK)) 642 return; 643 644 /* Reset IVA2 */ |
644 prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | | 645 omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | |
645 OMAP3430_RST2_IVA2_MASK | 646 OMAP3430_RST3_IVA2_MASK, 647 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 648 649 /* Enable IVA2 clock */ | 646 OMAP3430_RST2_IVA2_MASK | 647 OMAP3430_RST3_IVA2_MASK, 648 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 649 650 /* Enable IVA2 clock */ |
650 cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK, | 651 omap2_cm_write_mod_reg(OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_MASK, |
651 OMAP3430_IVA2_MOD, CM_FCLKEN); 652 653 /* Set IVA2 boot mode to 'idle' */ 654 omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE, 655 OMAP343X_CONTROL_IVA2_BOOTMOD); 656 657 /* Un-reset IVA2 */ | 652 OMAP3430_IVA2_MOD, CM_FCLKEN); 653 654 /* Set IVA2 boot mode to 'idle' */ 655 omap_ctrl_writel(OMAP3_IVA2_BOOTMOD_IDLE, 656 OMAP343X_CONTROL_IVA2_BOOTMOD); 657 658 /* Un-reset IVA2 */ |
658 prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); | 659 omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); |
659 660 /* Disable IVA2 clock */ | 660 661 /* Disable IVA2 clock */ |
661 cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); | 662 omap2_cm_write_mod_reg(0, OMAP3430_IVA2_MOD, CM_FCLKEN); |
662 663 /* Reset IVA2 */ | 663 664 /* Reset IVA2 */ |
664 prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | | 665 omap2_prm_write_mod_reg(OMAP3430_RST1_IVA2_MASK | |
665 OMAP3430_RST2_IVA2_MASK | 666 OMAP3430_RST3_IVA2_MASK, 667 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 668} 669 670static void __init omap3_d2d_idle(void) 671{ 672 u16 mask, padconf; --- 7 unchanged lines hidden (view full) --- 680 padconf |= mask; 681 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_MSTANDBY); 682 683 padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_IDLEACK); 684 padconf |= mask; 685 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK); 686 687 /* reset modem */ | 666 OMAP3430_RST2_IVA2_MASK | 667 OMAP3430_RST3_IVA2_MASK, 668 OMAP3430_IVA2_MOD, OMAP2_RM_RSTCTRL); 669} 670 671static void __init omap3_d2d_idle(void) 672{ 673 u16 mask, padconf; --- 7 unchanged lines hidden (view full) --- 681 padconf |= mask; 682 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_MSTANDBY); 683 684 padconf = omap_ctrl_readw(OMAP3_PADCONF_SAD2D_IDLEACK); 685 padconf |= mask; 686 omap_ctrl_writew(padconf, OMAP3_PADCONF_SAD2D_IDLEACK); 687 688 /* reset modem */ |
688 prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK | | 689 omap2_prm_write_mod_reg(OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RSTPWRON_MASK | |
689 OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST_MASK, 690 CORE_MOD, OMAP2_RM_RSTCTRL); | 690 OMAP3430_RM_RSTCTRL_CORE_MODEM_SW_RST_MASK, 691 CORE_MOD, OMAP2_RM_RSTCTRL); |
691 prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL); | 692 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP2_RM_RSTCTRL); |
692} 693 694static void __init prcm_setup_regs(void) 695{ 696 u32 omap3630_auto_uart4_mask = cpu_is_omap3630() ? 697 OMAP3630_AUTO_UART4_MASK : 0; 698 u32 omap3630_en_uart4_mask = cpu_is_omap3630() ? 699 OMAP3630_EN_UART4_MASK : 0; 700 u32 omap3630_grpsel_uart4_mask = cpu_is_omap3630() ? 701 OMAP3630_GRPSEL_UART4_MASK : 0; 702 703 704 /* XXX Reset all wkdeps. This should be done when initializing 705 * powerdomains */ | 693} 694 695static void __init prcm_setup_regs(void) 696{ 697 u32 omap3630_auto_uart4_mask = cpu_is_omap3630() ? 698 OMAP3630_AUTO_UART4_MASK : 0; 699 u32 omap3630_en_uart4_mask = cpu_is_omap3630() ? 700 OMAP3630_EN_UART4_MASK : 0; 701 u32 omap3630_grpsel_uart4_mask = cpu_is_omap3630() ? 702 OMAP3630_GRPSEL_UART4_MASK : 0; 703 704 705 /* XXX Reset all wkdeps. This should be done when initializing 706 * powerdomains */ |
706 prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP); 707 prm_write_mod_reg(0, MPU_MOD, PM_WKDEP); 708 prm_write_mod_reg(0, OMAP3430_DSS_MOD, PM_WKDEP); 709 prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP); 710 prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP); 711 prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP); | 707 omap2_prm_write_mod_reg(0, OMAP3430_IVA2_MOD, PM_WKDEP); 708 omap2_prm_write_mod_reg(0, MPU_MOD, PM_WKDEP); 709 omap2_prm_write_mod_reg(0, OMAP3430_DSS_MOD, PM_WKDEP); 710 omap2_prm_write_mod_reg(0, OMAP3430_NEON_MOD, PM_WKDEP); 711 omap2_prm_write_mod_reg(0, OMAP3430_CAM_MOD, PM_WKDEP); 712 omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, PM_WKDEP); |
712 if (omap_rev() > OMAP3430_REV_ES1_0) { | 713 if (omap_rev() > OMAP3430_REV_ES1_0) { |
713 prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP); 714 prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP); | 714 omap2_prm_write_mod_reg(0, OMAP3430ES2_SGX_MOD, PM_WKDEP); 715 omap2_prm_write_mod_reg(0, OMAP3430ES2_USBHOST_MOD, PM_WKDEP); |
715 } else | 716 } else |
716 prm_write_mod_reg(0, GFX_MOD, PM_WKDEP); | 717 omap2_prm_write_mod_reg(0, GFX_MOD, PM_WKDEP); |
717 718 /* 719 * Enable interface clock autoidle for all modules. 720 * Note that in the long run this should be done by clockfw 721 */ | 718 719 /* 720 * Enable interface clock autoidle for all modules. 721 * Note that in the long run this should be done by clockfw 722 */ |
722 cm_write_mod_reg( | 723 omap2_cm_write_mod_reg( |
723 OMAP3430_AUTO_MODEM_MASK | 724 OMAP3430ES2_AUTO_MMC3_MASK | 725 OMAP3430ES2_AUTO_ICR_MASK | 726 OMAP3430_AUTO_AES2_MASK | 727 OMAP3430_AUTO_SHA12_MASK | 728 OMAP3430_AUTO_DES2_MASK | 729 OMAP3430_AUTO_MMC2_MASK | 730 OMAP3430_AUTO_MMC1_MASK | --- 16 unchanged lines hidden (view full) --- 747 OMAP3430_AUTO_MAILBOXES_MASK | 748 OMAP3430_AUTO_OMAPCTRL_MASK | 749 OMAP3430ES1_AUTO_FSHOSTUSB_MASK | 750 OMAP3430_AUTO_HSOTGUSB_MASK | 751 OMAP3430_AUTO_SAD2D_MASK | 752 OMAP3430_AUTO_SSI_MASK, 753 CORE_MOD, CM_AUTOIDLE1); 754 | 724 OMAP3430_AUTO_MODEM_MASK | 725 OMAP3430ES2_AUTO_MMC3_MASK | 726 OMAP3430ES2_AUTO_ICR_MASK | 727 OMAP3430_AUTO_AES2_MASK | 728 OMAP3430_AUTO_SHA12_MASK | 729 OMAP3430_AUTO_DES2_MASK | 730 OMAP3430_AUTO_MMC2_MASK | 731 OMAP3430_AUTO_MMC1_MASK | --- 16 unchanged lines hidden (view full) --- 748 OMAP3430_AUTO_MAILBOXES_MASK | 749 OMAP3430_AUTO_OMAPCTRL_MASK | 750 OMAP3430ES1_AUTO_FSHOSTUSB_MASK | 751 OMAP3430_AUTO_HSOTGUSB_MASK | 752 OMAP3430_AUTO_SAD2D_MASK | 753 OMAP3430_AUTO_SSI_MASK, 754 CORE_MOD, CM_AUTOIDLE1); 755 |
755 cm_write_mod_reg( | 756 omap2_cm_write_mod_reg( |
756 OMAP3430_AUTO_PKA_MASK | 757 OMAP3430_AUTO_AES1_MASK | 758 OMAP3430_AUTO_RNG_MASK | 759 OMAP3430_AUTO_SHA11_MASK | 760 OMAP3430_AUTO_DES1_MASK, 761 CORE_MOD, CM_AUTOIDLE2); 762 763 if (omap_rev() > OMAP3430_REV_ES1_0) { | 757 OMAP3430_AUTO_PKA_MASK | 758 OMAP3430_AUTO_AES1_MASK | 759 OMAP3430_AUTO_RNG_MASK | 760 OMAP3430_AUTO_SHA11_MASK | 761 OMAP3430_AUTO_DES1_MASK, 762 CORE_MOD, CM_AUTOIDLE2); 763 764 if (omap_rev() > OMAP3430_REV_ES1_0) { |
764 cm_write_mod_reg( | 765 omap2_cm_write_mod_reg( |
765 OMAP3430_AUTO_MAD2D_MASK | 766 OMAP3430ES2_AUTO_USBTLL_MASK, 767 CORE_MOD, CM_AUTOIDLE3); 768 } 769 | 766 OMAP3430_AUTO_MAD2D_MASK | 767 OMAP3430ES2_AUTO_USBTLL_MASK, 768 CORE_MOD, CM_AUTOIDLE3); 769 } 770 |
770 cm_write_mod_reg( | 771 omap2_cm_write_mod_reg( |
771 OMAP3430_AUTO_WDT2_MASK | 772 OMAP3430_AUTO_WDT1_MASK | 773 OMAP3430_AUTO_GPIO1_MASK | 774 OMAP3430_AUTO_32KSYNC_MASK | 775 OMAP3430_AUTO_GPT12_MASK | 776 OMAP3430_AUTO_GPT1_MASK, 777 WKUP_MOD, CM_AUTOIDLE); 778 | 772 OMAP3430_AUTO_WDT2_MASK | 773 OMAP3430_AUTO_WDT1_MASK | 774 OMAP3430_AUTO_GPIO1_MASK | 775 OMAP3430_AUTO_32KSYNC_MASK | 776 OMAP3430_AUTO_GPT12_MASK | 777 OMAP3430_AUTO_GPT1_MASK, 778 WKUP_MOD, CM_AUTOIDLE); 779 |
779 cm_write_mod_reg( | 780 omap2_cm_write_mod_reg( |
780 OMAP3430_AUTO_DSS_MASK, 781 OMAP3430_DSS_MOD, 782 CM_AUTOIDLE); 783 | 781 OMAP3430_AUTO_DSS_MASK, 782 OMAP3430_DSS_MOD, 783 CM_AUTOIDLE); 784 |
784 cm_write_mod_reg( | 785 omap2_cm_write_mod_reg( |
785 OMAP3430_AUTO_CAM_MASK, 786 OMAP3430_CAM_MOD, 787 CM_AUTOIDLE); 788 | 786 OMAP3430_AUTO_CAM_MASK, 787 OMAP3430_CAM_MOD, 788 CM_AUTOIDLE); 789 |
789 cm_write_mod_reg( | 790 omap2_cm_write_mod_reg( |
790 omap3630_auto_uart4_mask | 791 OMAP3430_AUTO_GPIO6_MASK | 792 OMAP3430_AUTO_GPIO5_MASK | 793 OMAP3430_AUTO_GPIO4_MASK | 794 OMAP3430_AUTO_GPIO3_MASK | 795 OMAP3430_AUTO_GPIO2_MASK | 796 OMAP3430_AUTO_WDT3_MASK | 797 OMAP3430_AUTO_UART3_MASK | --- 7 unchanged lines hidden (view full) --- 805 OMAP3430_AUTO_GPT2_MASK | 806 OMAP3430_AUTO_MCBSP4_MASK | 807 OMAP3430_AUTO_MCBSP3_MASK | 808 OMAP3430_AUTO_MCBSP2_MASK, 809 OMAP3430_PER_MOD, 810 CM_AUTOIDLE); 811 812 if (omap_rev() > OMAP3430_REV_ES1_0) { | 791 omap3630_auto_uart4_mask | 792 OMAP3430_AUTO_GPIO6_MASK | 793 OMAP3430_AUTO_GPIO5_MASK | 794 OMAP3430_AUTO_GPIO4_MASK | 795 OMAP3430_AUTO_GPIO3_MASK | 796 OMAP3430_AUTO_GPIO2_MASK | 797 OMAP3430_AUTO_WDT3_MASK | 798 OMAP3430_AUTO_UART3_MASK | --- 7 unchanged lines hidden (view full) --- 806 OMAP3430_AUTO_GPT2_MASK | 807 OMAP3430_AUTO_MCBSP4_MASK | 808 OMAP3430_AUTO_MCBSP3_MASK | 809 OMAP3430_AUTO_MCBSP2_MASK, 810 OMAP3430_PER_MOD, 811 CM_AUTOIDLE); 812 813 if (omap_rev() > OMAP3430_REV_ES1_0) { |
813 cm_write_mod_reg( | 814 omap2_cm_write_mod_reg( |
814 OMAP3430ES2_AUTO_USBHOST_MASK, 815 OMAP3430ES2_USBHOST_MOD, 816 CM_AUTOIDLE); 817 } 818 819 omap_ctrl_writel(OMAP3430_AUTOIDLE_MASK, OMAP2_CONTROL_SYSCONFIG); 820 821 /* 822 * Set all plls to autoidle. This is needed until autoidle is 823 * enabled by clockfw 824 */ | 815 OMAP3430ES2_AUTO_USBHOST_MASK, 816 OMAP3430ES2_USBHOST_MOD, 817 CM_AUTOIDLE); 818 } 819 820 omap_ctrl_writel(OMAP3430_AUTOIDLE_MASK, OMAP2_CONTROL_SYSCONFIG); 821 822 /* 823 * Set all plls to autoidle. This is needed until autoidle is 824 * enabled by clockfw 825 */ |
825 cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT, | 826 omap2_cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT, |
826 OMAP3430_IVA2_MOD, CM_AUTOIDLE2); | 827 OMAP3430_IVA2_MOD, CM_AUTOIDLE2); |
827 cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT, | 828 omap2_cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT, |
828 MPU_MOD, 829 CM_AUTOIDLE2); | 829 MPU_MOD, 830 CM_AUTOIDLE2); |
830 cm_write_mod_reg((1 << OMAP3430_AUTO_PERIPH_DPLL_SHIFT) | | 831 omap2_cm_write_mod_reg((1 << OMAP3430_AUTO_PERIPH_DPLL_SHIFT) | |
831 (1 << OMAP3430_AUTO_CORE_DPLL_SHIFT), 832 PLL_MOD, 833 CM_AUTOIDLE); | 832 (1 << OMAP3430_AUTO_CORE_DPLL_SHIFT), 833 PLL_MOD, 834 CM_AUTOIDLE); |
834 cm_write_mod_reg(1 << OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT, | 835 omap2_cm_write_mod_reg(1 << OMAP3430ES2_AUTO_PERIPH2_DPLL_SHIFT, |
835 PLL_MOD, 836 CM_AUTOIDLE2); 837 838 /* 839 * Enable control of expternal oscillator through 840 * sys_clkreq. In the long run clock framework should 841 * take care of this. 842 */ | 836 PLL_MOD, 837 CM_AUTOIDLE2); 838 839 /* 840 * Enable control of expternal oscillator through 841 * sys_clkreq. In the long run clock framework should 842 * take care of this. 843 */ |
843 prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK, | 844 omap2_prm_rmw_mod_reg_bits(OMAP_AUTOEXTCLKMODE_MASK, |
844 1 << OMAP_AUTOEXTCLKMODE_SHIFT, 845 OMAP3430_GR_MOD, 846 OMAP3_PRM_CLKSRC_CTRL_OFFSET); 847 848 /* setup wakup source */ | 845 1 << OMAP_AUTOEXTCLKMODE_SHIFT, 846 OMAP3430_GR_MOD, 847 OMAP3_PRM_CLKSRC_CTRL_OFFSET); 848 849 /* setup wakup source */ |
849 prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK | | 850 omap2_prm_write_mod_reg(OMAP3430_EN_IO_MASK | OMAP3430_EN_GPIO1_MASK | |
850 OMAP3430_EN_GPT1_MASK | OMAP3430_EN_GPT12_MASK, 851 WKUP_MOD, PM_WKEN); 852 /* No need to write EN_IO, that is always enabled */ | 851 OMAP3430_EN_GPT1_MASK | OMAP3430_EN_GPT12_MASK, 852 WKUP_MOD, PM_WKEN); 853 /* No need to write EN_IO, that is always enabled */ |
853 prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK | | 854 omap2_prm_write_mod_reg(OMAP3430_GRPSEL_GPIO1_MASK | |
854 OMAP3430_GRPSEL_GPT1_MASK | 855 OMAP3430_GRPSEL_GPT12_MASK, 856 WKUP_MOD, OMAP3430_PM_MPUGRPSEL); 857 /* For some reason IO doesn't generate wakeup event even if 858 * it is selected to mpu wakeup goup */ | 855 OMAP3430_GRPSEL_GPT1_MASK | 856 OMAP3430_GRPSEL_GPT12_MASK, 857 WKUP_MOD, OMAP3430_PM_MPUGRPSEL); 858 /* For some reason IO doesn't generate wakeup event even if 859 * it is selected to mpu wakeup goup */ |
859 prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK, | 860 omap2_prm_write_mod_reg(OMAP3430_IO_EN_MASK | OMAP3430_WKUP_EN_MASK, |
860 OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); 861 862 /* Enable PM_WKEN to support DSS LPR */ | 861 OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET); 862 863 /* Enable PM_WKEN to support DSS LPR */ |
863 prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK, | 864 omap2_prm_write_mod_reg(OMAP3430_PM_WKEN_DSS_EN_DSS_MASK, |
864 OMAP3430_DSS_MOD, PM_WKEN); 865 866 /* Enable wakeups in PER */ | 865 OMAP3430_DSS_MOD, PM_WKEN); 866 867 /* Enable wakeups in PER */ |
867 prm_write_mod_reg(omap3630_en_uart4_mask | | 868 omap2_prm_write_mod_reg(omap3630_en_uart4_mask | |
868 OMAP3430_EN_GPIO2_MASK | OMAP3430_EN_GPIO3_MASK | 869 OMAP3430_EN_GPIO4_MASK | OMAP3430_EN_GPIO5_MASK | 870 OMAP3430_EN_GPIO6_MASK | OMAP3430_EN_UART3_MASK | 871 OMAP3430_EN_MCBSP2_MASK | OMAP3430_EN_MCBSP3_MASK | 872 OMAP3430_EN_MCBSP4_MASK, 873 OMAP3430_PER_MOD, PM_WKEN); 874 /* and allow them to wake up MPU */ | 869 OMAP3430_EN_GPIO2_MASK | OMAP3430_EN_GPIO3_MASK | 870 OMAP3430_EN_GPIO4_MASK | OMAP3430_EN_GPIO5_MASK | 871 OMAP3430_EN_GPIO6_MASK | OMAP3430_EN_UART3_MASK | 872 OMAP3430_EN_MCBSP2_MASK | OMAP3430_EN_MCBSP3_MASK | 873 OMAP3430_EN_MCBSP4_MASK, 874 OMAP3430_PER_MOD, PM_WKEN); 875 /* and allow them to wake up MPU */ |
875 prm_write_mod_reg(omap3630_grpsel_uart4_mask | | 876 omap2_prm_write_mod_reg(omap3630_grpsel_uart4_mask | |
876 OMAP3430_GRPSEL_GPIO2_MASK | 877 OMAP3430_GRPSEL_GPIO3_MASK | 878 OMAP3430_GRPSEL_GPIO4_MASK | 879 OMAP3430_GRPSEL_GPIO5_MASK | 880 OMAP3430_GRPSEL_GPIO6_MASK | 881 OMAP3430_GRPSEL_UART3_MASK | 882 OMAP3430_GRPSEL_MCBSP2_MASK | 883 OMAP3430_GRPSEL_MCBSP3_MASK | 884 OMAP3430_GRPSEL_MCBSP4_MASK, 885 OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); 886 887 /* Don't attach IVA interrupts */ | 877 OMAP3430_GRPSEL_GPIO2_MASK | 878 OMAP3430_GRPSEL_GPIO3_MASK | 879 OMAP3430_GRPSEL_GPIO4_MASK | 880 OMAP3430_GRPSEL_GPIO5_MASK | 881 OMAP3430_GRPSEL_GPIO6_MASK | 882 OMAP3430_GRPSEL_UART3_MASK | 883 OMAP3430_GRPSEL_MCBSP2_MASK | 884 OMAP3430_GRPSEL_MCBSP3_MASK | 885 OMAP3430_GRPSEL_MCBSP4_MASK, 886 OMAP3430_PER_MOD, OMAP3430_PM_MPUGRPSEL); 887 888 /* Don't attach IVA interrupts */ |
888 prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); 889 prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); 890 prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); 891 prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); | 889 omap2_prm_write_mod_reg(0, WKUP_MOD, OMAP3430_PM_IVAGRPSEL); 890 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430_PM_IVAGRPSEL1); 891 omap2_prm_write_mod_reg(0, CORE_MOD, OMAP3430ES2_PM_IVAGRPSEL3); 892 omap2_prm_write_mod_reg(0, OMAP3430_PER_MOD, OMAP3430_PM_IVAGRPSEL); |
892 893 /* Clear any pending 'reset' flags */ | 893 894 /* Clear any pending 'reset' flags */ |
894 prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); 895 prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST); 896 prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST); 897 prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST); 898 prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST); 899 prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST); 900 prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST); | 895 omap2_prm_write_mod_reg(0xffffffff, MPU_MOD, OMAP2_RM_RSTST); 896 omap2_prm_write_mod_reg(0xffffffff, CORE_MOD, OMAP2_RM_RSTST); 897 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_PER_MOD, OMAP2_RM_RSTST); 898 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_EMU_MOD, OMAP2_RM_RSTST); 899 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_NEON_MOD, OMAP2_RM_RSTST); 900 omap2_prm_write_mod_reg(0xffffffff, OMAP3430_DSS_MOD, OMAP2_RM_RSTST); 901 omap2_prm_write_mod_reg(0xffffffff, OMAP3430ES2_USBHOST_MOD, OMAP2_RM_RSTST); |
901 902 /* Clear any pending PRCM interrupts */ | 902 903 /* Clear any pending PRCM interrupts */ |
903 prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); | 904 omap2_prm_write_mod_reg(0, OCP_MOD, OMAP3_PRM_IRQSTATUS_MPU_OFFSET); |
904 905 omap3_iva_idle(); 906 omap3_d2d_idle(); 907} 908 909void omap3_pm_off_mode_enable(int enable) 910{ 911 struct power_state *pwrst; --- 211 unchanged lines hidden --- | 905 906 omap3_iva_idle(); 907 omap3_d2d_idle(); 908} 909 910void omap3_pm_off_mode_enable(int enable) 911{ 912 struct power_state *pwrst; --- 211 unchanged lines hidden --- |