Commit af2a4877 authored by Andre Przywara's avatar Andre Przywara
Browse files

rpi: rpi3_pwr_domain_on(): Use MMIO accessor



When writing to arbitrary locations in memory using a constructed
pointer, there is no guarantee that the compiler does not optimise away
the access, since it cannot detect any dependency.

One typical solution is to use the "volatile" keyword, but using MMIO
accessors in usually the better answer, to avoid torn writes.

Replace the usage of an array with such an MMIO accessor function in
rpi3_pwr_domain_on(), to make sure the write is really happening.

Change-Id: Ia18163c95e92f1557471089fd18abc6dc7fee0c7
Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
parent 07aa0c7e
......@@ -140,11 +140,14 @@ static int rpi3_pwr_domain_on(u_register_t mpidr)
{
int rc = PSCI_E_SUCCESS;
unsigned int pos = plat_core_pos_by_mpidr(mpidr);
uint64_t *hold_base = (uint64_t *)PLAT_RPI3_TM_HOLD_BASE;
uintptr_t hold_base = PLAT_RPI3_TM_HOLD_BASE;
assert(pos < PLATFORM_CORE_COUNT);
hold_base[pos] = PLAT_RPI3_TM_HOLD_STATE_GO;
hold_base += pos * PLAT_RPI3_TM_HOLD_ENTRY_SIZE;
mmio_write_64(hold_base, PLAT_RPI3_TM_HOLD_STATE_GO);
/* No cache maintenance here, hold_base is mapped as device memory. */
/* Make sure that the write has completed */
dsb();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment