Aaron Durbin (adurbin@chromium.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14212
-gerrit
commit 7e2b68bed8043ed8e1c7568437e68b1155263662 Author: Aaron Durbin adurbin@chromium.org Date: Thu Mar 31 13:26:46 2016 -0500
soc/intel/apollolake: use arch_segment_loaded() for CAR code coherency
Instead of using platform_prog_run() for flushing programs from L1D to L2 for code coherency purposes use arch_segment_loaded() instead as that it's primary purpose. The arch_segment_loaded() is called within the infrastructure at the appropriate places when loading programs. Therefore use that to perform the L1D flush instead of when something is just about to run.
Change-Id: Ib0a6be6f676dcf2c946ef5702471af65d89133e9 Signed-off-by: Aaron Durbin adurbin@chromium.org --- src/soc/intel/apollolake/car.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/soc/intel/apollolake/car.c b/src/soc/intel/apollolake/car.c index 7646865..c49d7ef 100644 --- a/src/soc/intel/apollolake/car.c +++ b/src/soc/intel/apollolake/car.c @@ -26,8 +26,9 @@ static void flush_l1d_to_l2(void) wrmsr(MSR_POWER_MISC, msr); }
-void platform_prog_run(struct prog *prog) +void arch_segment_loaded(uintptr_t start, size_t size, int flags) { - /* Flush L1D cache to L2 */ - flush_l1d_to_l2(); + /* Flush L1D cache to L2 on final segment loaded */ + if (flags & SEG_FINAL) + flush_l1d_to_l2(); }