From d970597ddd41f41fa7cb0e68c76b260f2cf70e3e Mon Sep 17 00:00:00 2001 From: andrew Date: Thu, 31 Jan 2019 17:33:32 +0100 Subject: [PATCH] Fix emulator memory access. --- emulator/Makefile | 2 +- emulator/{flash.c => memory.c} | 0 flash.c | 24 ++++++++++++------------ flash.h | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) rename emulator/{flash.c => memory.c} (100%) diff --git a/emulator/Makefile b/emulator/Makefile index 1f2976dd0..1243a7fe5 100644 --- a/emulator/Makefile +++ b/emulator/Makefile @@ -3,7 +3,7 @@ EMULATOR := 1 OBJS += setup.o OBJS += buttons.o -OBJS += flash.o +OBJS += memory.o OBJS += oled.o OBJS += rng.o OBJS += timer.o diff --git a/emulator/flash.c b/emulator/memory.c similarity index 100% rename from emulator/flash.c rename to emulator/memory.c diff --git a/flash.c b/flash.c index 9b9482550..998219c0b 100644 --- a/flash.c +++ b/flash.c @@ -71,7 +71,7 @@ const void *flash_get_address(uint8_t sector, uint32_t offset, uint32_t size) if (addr + size > next) { return NULL; } - return (const void *)addr; + return (const void *) FLASH_PTR(addr); } secbool flash_erase(uint8_t sector) @@ -83,7 +83,7 @@ secbool flash_erase(uint8_t sector) // Check whether the sector was really deleted (contains only 0xFF). const uint32_t addr_start = FLASH_SECTOR_TABLE[sector], addr_end = FLASH_SECTOR_TABLE[sector + 1]; for (uint32_t addr = addr_start; addr < addr_end; addr += 4) { - if (*((const uint32_t *)addr) != 0xFFFFFFFF) { + if (*((const uint32_t *)FLASH_PTR(addr)) != 0xFFFFFFFF) { return secfalse; } } @@ -92,19 +92,19 @@ secbool flash_erase(uint8_t sector) secbool flash_write_byte(uint8_t sector, uint32_t offset, uint8_t data) { - uint32_t address = (uint32_t)flash_get_address(sector, offset, 1); - if (address == 0) { + uint8_t *address = (uint8_t *) flash_get_address(sector, offset, 1); + if (address == NULL) { return secfalse; } - if ((*((uint8_t*)address) & data) != data) { + if ((*address & data) != data) { return secfalse; } svc_flash_program(FLASH_CR_PROGRAM_X8); - flash_write8(address, data); + *(volatile uint8_t *) address = data; - if (*((uint8_t*)address) != data) { + if (*address != data) { return secfalse; } @@ -113,8 +113,8 @@ secbool flash_write_byte(uint8_t sector, uint32_t offset, uint8_t data) secbool flash_write_word(uint8_t sector, uint32_t offset, uint32_t data) { - uint32_t address = (uint32_t)flash_get_address(sector, offset, 4); - if (address == 0) { + uint32_t *address = (uint32_t *) flash_get_address(sector, offset, 4); + if (address == NULL) { return secfalse; } @@ -122,14 +122,14 @@ secbool flash_write_word(uint8_t sector, uint32_t offset, uint32_t data) return secfalse; } - if ((*((uint32_t*)address) & data) != data) { + if ((*address & data) != data) { return secfalse; } svc_flash_program(FLASH_CR_PROGRAM_X32); - flash_write32(address, data); + *(volatile uint32_t *) address = data; - if (*((uint32_t*)address) != data) { + if (*address != data) { return secfalse; } diff --git a/flash.h b/flash.h index f67ea8823..24e1a3ad6 100644 --- a/flash.h +++ b/flash.h @@ -17,8 +17,8 @@ * along with this program. If not, see . */ -#ifndef TREZORHAL_FLASH_H -#define TREZORHAL_FLASH_H +#ifndef FLASH_H +#define FLASH_H #include #include @@ -44,4 +44,4 @@ secbool __wur flash_erase(uint8_t sector); secbool __wur flash_write_byte(uint8_t sector, uint32_t offset, uint8_t data); secbool __wur flash_write_word(uint8_t sector, uint32_t offset, uint32_t data); -#endif // TREZORHAL_FLASH_H +#endif // FLASH_H