Skip to content

Commit f1ef163

Browse files
MichaelBellGadgetoid
authored andcommitted
ports/rp2: Better fix to cache cleaning.
Signed-off-by: Mike Bell <[email protected]>
1 parent fc9daef commit f1ef163

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

ports/rp2/rp2_flash.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ static uint32_t begin_critical_flash_section(void) {
129129

130130
#if defined(MICROPY_HW_PSRAM_CS_PIN) && MICROPY_HW_ENABLE_PSRAM
131131
// We're about to invalidate the XIP cache, clean it first to commit any dirty writes to PSRAM
132-
uint8_t *maintenance_ptr = (uint8_t *)XIP_MAINTENANCE_BASE;
132+
// Use the upper 16k of the maintenance space (0x1bffc000 through 0x1bffffff) to workaround
133+
// incorrect behaviour of the XIP clean operation, where it also alters the tag of the associated
134+
// cache line: https://forums.raspberrypi.com/viewtopic.php?t=378249#p2263677
135+
volatile uint8_t *maintenance_ptr = (volatile uint8_t *)(XIP_SRAM_BASE + (XIP_MAINTENANCE_BASE - XIP_BASE));
133136
for (int i = 1; i < 16 * 1024; i += 8) {
134137
maintenance_ptr[i] = 0;
135138
}

0 commit comments

Comments
 (0)