Skip to content

Commit

Permalink
intel_adsp/ace: power: pad the hpsram_mask passed to power_down
Browse files Browse the repository at this point in the history
The power_down() function will lock dcache for the hpsram_mask
array. On some platforms, the dcache lock will fail if the array
is on cache line that can be used for window register context
saves.

Work around this by padding the hssram_mask to a full cacheline.

Link: thesofproject/sof#9268
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
  • Loading branch information
kv2019i committed Jul 1, 2024
1 parent 97a97c7 commit 4958624
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions soc/intel/intel_adsp/ace/power.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,16 +339,16 @@ void pm_state_set(enum pm_state state, uint8_t substate_id)
(void *)rom_entry;
sys_cache_data_flush_range((void *)imr_layout, sizeof(*imr_layout));
#endif /* CONFIG_ADSP_IMR_CONTEXT_SAVE */
uint32_t hpsram_mask = 0;
uint32_t hpsram_mask[CONFIG_DCACHE_LINE_SIZE] = { 0 };
#ifdef CONFIG_ADSP_POWER_DOWN_HPSRAM
/* turn off all HPSRAM banks - get a full bitmap */
uint32_t ebb_banks = ace_hpsram_get_bank_count();
hpsram_mask = (1 << ebb_banks) - 1;
hpsram_mask[0] = (1 << ebb_banks) - 1;
#endif /* CONFIG_ADSP_POWER_DOWN_HPSRAM */
/* do power down - this function won't return */
ret = pm_device_runtime_put(INTEL_ADSP_HST_DOMAIN_DEV);
__ASSERT_NO_MSG(ret == 0);
power_down(true, sys_cache_cached_ptr_get(&hpsram_mask),
/* do power down - this function won't return */
power_down(true, sys_cache_cached_ptr_get(&hpsram_mask[0]),
true);
} else {
power_gate_entry(cpu);
Expand Down

0 comments on commit 4958624

Please sign in to comment.