soc/intel_adsp: Fix region cacheability for MP cores
On MP cores that don't come through the core entry point (e.g. TGL/v2.5) we reach C code with hardware defaults for the RPO/TLB settings. Set these up correctly on entry. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This commit is contained in:
parent
d75bc8c310
commit
5183e5e606
1 changed files with 17 additions and 0 deletions
|
@ -122,6 +122,23 @@ void z_mp_entry(void)
|
|||
volatile int ie;
|
||||
uint32_t idc_reg;
|
||||
|
||||
/* Correct the Region Protection Option cachability settings.
|
||||
* The hardware defaults (everything accessible and uncached)
|
||||
* don't match the design intent. Registers in the first
|
||||
* region are RW but uncached, as is the RAM mapped in the
|
||||
* fifth. The same RAM in the sixth is mapped cached. Note
|
||||
* that there's actually a HAL call to do this by emulating
|
||||
* the older cacheattr feature, but it generates significantly
|
||||
* more code.
|
||||
*/
|
||||
const uint32_t attribs[] = { 2, 15, 15, 15, 2, 4, 15, 15 };
|
||||
|
||||
for (int region = 0; region < 8; region++) {
|
||||
uint32_t addr = 0x20000000 * region;
|
||||
|
||||
__asm__ volatile("wdtlb %0, %1" :: "r"(attribs[region]), "r"(addr));
|
||||
}
|
||||
|
||||
/* We don't know what the boot ROM might have touched and we
|
||||
* don't care. Make sure it's not in our local cache to be
|
||||
* flushed accidentally later.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue