Flash Headers (#1367)

* Move flash stuff

* format

* Cleanup

* format

* bss names

* Small cleanup

* osFlashGetAddr

* uintptr_t
This commit is contained in:
Derek Hensley
2023-09-15 05:41:51 -07:00
committed by GitHub
parent 57501ed415
commit 626f09266d
7 changed files with 160 additions and 151 deletions
+9 -7
View File
@@ -5,6 +5,8 @@
#include "stackcheck.h"
#include "system_malloc.h"
#include "z64thread.h"
#include "sys_flashrom.h"
#include "PR/os_internal_flash.h"
OSMesgQueue sFlashromMesgQueue;
OSMesg sFlashromMesg[1];
@@ -81,7 +83,7 @@ s32 SysFlashrom_ReadData(void* addr, u32 pageNum, u32 pageCount) {
if (!SysFlashrom_IsInit()) {
return -1;
}
osInvalDCache(addr, pageCount * FLASH_PAGE_SIZE);
osInvalDCache(addr, pageCount * FLASH_BLOCK_SIZE);
osFlashReadArray(&msg, OS_MESG_PRI_NORMAL, pageNum, addr, pageCount, &sFlashromMesgQueue);
osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
return 0;
@@ -103,12 +105,12 @@ s32 SysFlashrom_ExecWrite(void* addr, u32 pageNum, u32 pageCount) {
return -1;
}
// Ensure the page is always aligned to a sector boundary.
if ((pageNum % FLASH_PAGE_SIZE) != 0) {
if ((pageNum % FLASH_BLOCK_SIZE) != 0) {
Fault_AddHungupAndCrash("../sys_flashrom.c", 275);
}
osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE);
for (i = 0; i < pageCount; i++) {
osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_PAGE_SIZE, &sFlashromMesgQueue);
osFlashWriteBuffer(&msg, OS_MESG_PRI_NORMAL, (u8*)addr + i * FLASH_BLOCK_SIZE, &sFlashromMesgQueue);
osRecvMesg(&sFlashromMesgQueue, NULL, OS_MESG_BLOCK);
result = osFlashWriteArray(i + pageNum);
if (result != 0) {
@@ -125,7 +127,7 @@ s32 SysFlashrom_AttemptWrite(void* addr, u32 pageNum, u32 pageCount) {
if (!SysFlashrom_IsInit()) {
return -1;
}
osWritebackDCache(addr, pageCount * FLASH_PAGE_SIZE);
osWritebackDCache(addr, pageCount * FLASH_BLOCK_SIZE);
i = 0;
failRetry:
result = SysFlashrom_EraseSector(pageNum);
@@ -153,7 +155,7 @@ s32 SysFlashrom_NeedsToErase(void* data, void* addr, u32 pageCount) {
u32 size;
u32 i;
for (i = 0; i < pageCount * FLASH_PAGE_SIZE; i += 4) {
for (i = 0; i < pageCount * FLASH_BLOCK_SIZE; i += 4) {
if ((*(s32*)data & *(s32*)addr) != *(s32*)addr) {
return false;
}
@@ -169,7 +171,7 @@ s32 SysFlashrom_WriteData(void* addr, u32 pageNum, u32 pageCount) {
if (!SysFlashrom_IsInit()) {
return -1;
}
size = pageCount * FLASH_PAGE_SIZE;
size = pageCount * FLASH_BLOCK_SIZE;
data = SystemArena_Malloc(size);
if (data == NULL) {
ret = SysFlashrom_AttemptWrite(addr, pageNum, pageCount);