Skip to content

Commit c952ffc

Browse files
committed
Merge branch 'master' into pr-eraseconfig-reset
2 parents 892e6a2 + 65579d2 commit c952ffc

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

cores/esp8266/core_esp8266_features.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ void precache(void *f, uint32_t bytes) {
3838
// page (ie 1 word in 8) for this to work.
3939
#define CACHE_PAGE_SIZE 32
4040

41-
uint32_t a0;
42-
__asm__("mov.n %0, a0" : "=r"(a0));
43-
uint32_t lines = (bytes/CACHE_PAGE_SIZE)+2;
44-
volatile uint32_t *p = (uint32_t*)((f ? (uint32_t)f : a0) & ~0x03);
45-
uint32_t x;
46-
for (uint32_t i=0; i<lines; i++, p+=CACHE_PAGE_SIZE/sizeof(uint32_t)) x=*p;
47-
(void)x;
41+
uint32_t lines = (bytes / CACHE_PAGE_SIZE) + 2;
42+
uint32_t *p = (uint32_t*)((uint32_t)(f ? f : __builtin_return_address(0)) & ~0x03);
43+
do {
44+
__asm__ volatile ("" : : "r"(*p)); // guarantee that the value of *p will be in some register (forced load)
45+
p += CACHE_PAGE_SIZE / sizeof(uint32_t);
46+
} while (--lines);
47+
__sync_synchronize(); // full memory barrier, mapped to MEMW in Xtensa
4848
}
4949

5050
/** based on efuse data, we could determine what type of chip this is

0 commit comments

Comments
 (0)