mirror of https://github.com/thesofproject/sof.git
memory: add timeout into polling loops
This patch adds timeout condition into all loops that monitor power status registers. Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
This commit is contained in:
parent
0d35bf84f3
commit
b604644c65
|
@ -26,6 +26,7 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#define MEMORY_POWER_CHANGE_DELAY 256
|
||||
#define MEMORY_POWER_CHANGE_TIMEOUT (256 * MEMORY_POWER_CHANGE_DELAY)
|
||||
|
||||
#if CAVS_VERSION >= CAVS_VERSION_1_8
|
||||
|
||||
|
@ -69,14 +70,19 @@ static inline void cavs_pm_memory_hp_sram_mask_set(uint32_t mask, int segment,
|
|||
bool enabled)
|
||||
{
|
||||
uint32_t expected = enabled ? 0 : mask;
|
||||
uint32_t delay = 0;
|
||||
|
||||
io_reg_update_bits(SHIM_HSPGCTL(segment), mask, enabled ? 0 : mask);
|
||||
io_reg_update_bits(SHIM_HSRMCTL(segment), mask, enabled ? 0 : mask);
|
||||
|
||||
idelay(MEMORY_POWER_CHANGE_DELAY);
|
||||
|
||||
while ((io_reg_read(SHIM_HSPGISTS(segment)) & mask) != expected)
|
||||
while ((io_reg_read(SHIM_HSPGISTS(segment)) & mask) != expected) {
|
||||
idelay(MEMORY_POWER_CHANGE_DELAY);
|
||||
delay += MEMORY_POWER_CHANGE_DELAY;
|
||||
if (delay >= MEMORY_POWER_CHANGE_TIMEOUT)
|
||||
platform_panic(SOF_IPC_PANIC_MEM);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cavs_pm_memory_hp_sram_banks_power_gate(
|
||||
|
@ -125,6 +131,7 @@ static inline void cavs_pm_memory_lp_sram_banks_power_gate(
|
|||
{
|
||||
uint32_t mask = MASK(ending_bank_id, start_bank_id);
|
||||
uint32_t expected = enabled ? 0 : mask;
|
||||
uint32_t delay = 0;
|
||||
|
||||
shim_write(SHIM_LDOCTL, SHIM_LDOCTL_LPSRAM_LDO_ON);
|
||||
|
||||
|
@ -134,8 +141,12 @@ static inline void cavs_pm_memory_lp_sram_banks_power_gate(
|
|||
|
||||
idelay(MEMORY_POWER_CHANGE_DELAY);
|
||||
|
||||
while ((io_reg_read(LSPGISTS) & mask) != expected)
|
||||
while ((io_reg_read(LSPGISTS) & mask) != expected) {
|
||||
idelay(MEMORY_POWER_CHANGE_DELAY);
|
||||
delay += MEMORY_POWER_CHANGE_DELAY;
|
||||
if (delay >= MEMORY_POWER_CHANGE_TIMEOUT)
|
||||
platform_panic(SOF_IPC_PANIC_MEM);
|
||||
}
|
||||
|
||||
shim_write(SHIM_LDOCTL, SHIM_LDOCTL_HPSRAM_LDO_BYPASS);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue