Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecf157d0 authored by Tero Kristo's avatar Tero Kristo Committed by Kevin Hilman
Browse files

OMAP3: PM: Prevent PER from going OFF when CORE is going INA



OMAP3 can't generate wakeups in this state, thus it is not permitted.

Signed-off-by: default avatarTero Kristo <tero.kristo@nokia.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent 658ce97e
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ static void omap_sram_idle(void)
	int core_next_state = PWRDM_POWER_ON;
	int core_prev_state, per_prev_state;
	u32 sdrc_pwr = 0;
	int per_state_modified = 0;

	if (!_omap_sram_idle)
		return;
@@ -340,15 +341,21 @@ static void omap_sram_idle(void)

	/* PER */
	per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
	core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
	if (per_next_state < PWRDM_POWER_ON) {
		omap2_gpio_prepare_for_retention();
		omap_uart_prepare_idle(2);
		if (per_next_state == PWRDM_POWER_OFF)
		omap2_gpio_prepare_for_retention();
		if (per_next_state == PWRDM_POWER_OFF) {
			if (core_next_state == PWRDM_POWER_ON) {
				per_next_state = PWRDM_POWER_RET;
				pwrdm_set_next_pwrst(per_pwrdm, per_next_state);
				per_state_modified = 1;
			} else
				omap3_per_save_context();
		}
	}

	/* CORE */
	core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
	if (core_next_state < PWRDM_POWER_ON) {
		omap_uart_prepare_idle(0);
		omap_uart_prepare_idle(1);
@@ -413,10 +420,12 @@ static void omap_sram_idle(void)
	/* PER */
	if (per_next_state < PWRDM_POWER_ON) {
		per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm);
		omap_uart_resume_idle(2);
		if (per_prev_state == PWRDM_POWER_OFF)
			omap3_per_restore_context();
		omap2_gpio_resume_after_retention();
		omap_uart_resume_idle(2);
		if (per_state_modified)
			pwrdm_set_next_pwrst(per_pwrdm, PWRDM_POWER_OFF);
	}

	/* Disable IO-PAD wakeup */