fix: disable cache

This commit is contained in:
2024-12-14 14:16:25 +06:00
parent a0072d3d3a
commit 8f5085862a
5 changed files with 27 additions and 66 deletions

View File

@@ -17,7 +17,8 @@ CFLAGS = -mcpu=cortex-m4 -mthumb -Os -flto \
-Wl,--defsym=_RAM_ORIGIN=$(FIRMWARE_ADDRESS) \
-Wl,--defsym=_RAM_SIZE=$(RAM_SIZE) \
-Wl,--defsym=_WORK_AREA_START=$(WORK_AREA_START) \
-DBUFFER_ADDRESS=$(BUFFER_ADDRESS)
-DBUFFER_ADDRESS=$(BUFFER_ADDRESS) \
-DFLASH_SECTOR_SIZE=$(FLASH_SECTOR_SIZE)
SRC = rtl8710_flasher.c
TARGET = rtl8710_flasher

View File

@@ -46,7 +46,7 @@ int __attribute__((section(".vectors"))) main(void) {
/* clear block protection */
FLASH_SetStatusBits(0x1c, 0);
printf("[FLASH] Block protection cleared\n");
// uint32_t erase_sector_addr = 0;
Cache_Enable(0);
while (1) {
FLASH_CONTROL->start = 0;
@@ -82,13 +82,6 @@ int __attribute__((section(".vectors"))) main(void) {
for (uint32_t offset = 0; offset < FLASH_CONTROL->len; offset += 4) {
uint32_t write_addr = FLASH_CONTROL->offset + offset;
uint32_t sector_addr1 = write_addr & 0xFFFFF000;
// if (sector_addr1 >=
// erase_sector_addr) { // relate to rtl8710_flasher_auto_erase
// FLASH_Erase(2, sector_addr1);
// erase_sector_addr =
// sector_addr1 + 0x1000; // next sector we should erase
// }
FLASH_TxData12B(write_addr, 4,
(uint8_t *)&FLASH_CONTROL->data[offset]);
}
@@ -97,10 +90,10 @@ int __attribute__((section(".vectors"))) main(void) {
break;
case CMD_VERIFY: {
uint8_t tbuf[4];
printf("Verify: FLASH_CONTROL->data = %p\n", FLASH_CONTROL->data);
printf("Verify: Reading from flash base %p\n", (void *)SPI_FLASH_BASE);
printf("Verify: With offset %x\n", FLASH_CONTROL->offset);
uint8_t tbuf[FLASH_SECTOR_SIZE];
uint32_t start_sector = FLASH_CONTROL->offset / FLASH_SECTOR_SIZE;
uint32_t end_sector = (FLASH_CONTROL->offset + FLASH_CONTROL->len - 1) /
FLASH_SECTOR_SIZE;
for (uint32_t i = 0; i < FLASH_CONTROL->len; i += 4) {
volatile uint32_t *flash_addr =
@@ -109,11 +102,16 @@ int __attribute__((section(".vectors"))) main(void) {
size_t l = MIN(4, FLASH_CONTROL->len - i);
size_t k;
uint32_t current_sector =
(FLASH_CONTROL->offset + i) / FLASH_SECTOR_SIZE;
if (current_sector > end_sector) {
break;
}
for (k = 0; k < l; k++) {
if (tbuf[k] != FLASH_CONTROL->data[i + k]) {
printf("Verify mismatch at offset %x: flash=%02x buf=%02x\n",
printf("[VERIFY] mismatch at offset %x: flash=%02x buf=%02x\n",
i + k, tbuf[k], FLASH_CONTROL->data[i + k]);
break;
}
}

View File

@@ -14,6 +14,9 @@
#define FLASH_WORD_SIZE 4
#define VERIFY_CHUNK_SIZE 4
#define VERIFY_WORDS (VERIFY_CHUNK_SIZE / FLASH_WORD_SIZE)
#ifndef FLASH_SECTOR_SIZE
#define FLASH_SECTOR_SIZE 4096
#endif
#define WRITE_CHUNK_SIZE 256
@@ -110,6 +113,7 @@ typedef struct {
} FLASH_InitTypeDef;
/* external ROM bloat */
__always_long_call void Cache_Enable(uint32_t Enable);
extern FLASH_InitTypeDef flash_init_para;
extern __always_long_call uint32_t DiagPrintf(const char *fmt, ...);

View File

@@ -52,14 +52,10 @@ proc rtl8710_flasher_wait {} {
while {[rtl8710_flasher_mrw $addr]} {}
}
# proc rtl8710_flasher_load_block {local_filename offset length} {
# global rtl8710_flasher_buffer
# set buffer_addr [expr {$rtl8710_flasher_buffer + 0x20}]
# load_image $local_filename [expr {$buffer_addr - $offset}] bin $buffer_addr $length
# }
proc rtl8710_flasher_load_block {local_filename offset len} {
proc rtl8710_flasher_load_block {local_filename offset length} {
global rtl8710_flasher_buffer
load_image $local_filename [expr {$rtl8710_flasher_buffer + 0x20 - $offset}] bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
set buffer_addr [expr {$rtl8710_flasher_buffer + 0x20}]
load_image $local_filename [expr {$buffer_addr - $offset}] bin $buffer_addr $length
}
proc rtl8710_flasher_block {command offset len} {
@@ -99,25 +95,8 @@ proc rtl8710_flasher_write_block {offset len} {
rtl8710_flasher_block "write" $offset $len
}
# proc rtl8710_flasher_verify_block {offset len} {
# rtl8710_flasher_block "verify" $offset $len
# }
proc rtl8710_flasher_verify_block {offset len} {
global rtl8710_flasher_buffer
global rtl8710_flasher_command_verify
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_verify
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
mww [expr {$rtl8710_flasher_buffer + 0x14}] $len
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
rtl8710_flasher_wait
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]]
if {[expr {$status > 0}]} {
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]]
set status [expr {$status + $offset}]
error "verify error, offset $status"
}
rtl8710_flasher_block "verify" $offset $len
}
proc rtl8710_flash_read_id {} {

View File

@@ -46,7 +46,7 @@ set rtl8710_flasher_buffer 0x10008000
set rtl8710_flasher_buffer_size 204800
set rtl8710_flasher_sector_size 4096
set rtl8710_flasher_code [list 0xb673b58f 0x93022300 0x4380f04f 0xf8d34d67 0xf0133210 0xd0010f10 0x47a84865 0x4e664c65 0xf44f2200 0x20107180 0x4b6447a0 0x47982000 0xf44f2201 0x20107180 0x220147a0 0x4b602100 0x200a4c60 0x4b604798 0x47984630 0x20024b5f 0xf8964798 0xaa020049 0x47a02103 0x300af89d 0x2009f89d 0x1008f89d 0x47a84859 0x48596831 0x68b347a8 0x79317972 0x47a84857 0x7f727ff3 0x93007f31 0x7fb34855 0x4b5547a8 0x201c2100 0x48544798 0x46a047a8 0x23004c53 0x68236023 0x6863b193 0xd87e2b05 0xf852a201 0xbf00f023 0x100015cd 0x100015dd 0x100015eb 0x10001611 0x10001615 0x1000163f 0xe7e8bf00 0x0049f896 0x2104aa02 0x9b0247c0 0xe7de60e3 0x46082100 0x47984b42 0x47a84842 0x6921e7d7 0x20024b3f 0xe7d24798 0xf1026922 0x58d16200 0x5280f103 0x4200f502 0x62113304 0x429a6962 0xe7c4d8f2 0xe7f92300 0x48376961 0xf8df6922 0x47a890dc 0x27004b36 0x42ba6962 0x4835d801 0x6920e7db 0x443818fa 0x47c82104 0x4b303704 0x492fe7f2 0x47a84830 0x6100f04f 0x47a8482f 0x482f6921 0x270047a8 0x42bb6963 0x6923d99f 0x6300f103 0x0c0cf10d 0x930359db 0x1bdb6963 0xbf962b04 0x23046963 0x20001bdb 0xd1014298 0xe7e93704 0xeb041839 0xf81c0e01 0xf89e2b01 0x454a9020 0xf89ed007 0x481e3020 0x230147a8 0x60e760a3 0x3001e77b 0x2301e7e8 0xe77660a3 0x000004dd 0x10001714 0x00009b65 0x10000dec 0x00007d15 0x000042fd 0x00007465 0x00007b81 0x00007ca1 0x10001744 0x10001767 0x1000177f 0x100017b2 0x0000784d 0x100017ea 0x10008000 0x00007755 0x1000180c 0x10001831 0x00007661 0x10008020 0x10001868 0x10001890 0x100018b2 0x100018d6 0x100018ee 0x414c465b 0x52454853 0x6c46205d 0x20687361 0x69726570 0x72656870 0x61206c61 0x6165726c 0x65207964 0x6c62616e 0x2e2e6465 0x000a3f2e 0x414c465b 0x205d4853 0x69766544 0x49206563 0x25203a44 0x20583230 0x58323025 0x32302520 0x5b000a58 0x53414c46 0x56205d48 0x6f646e65 0x30203a72 0x38302578 0x5b000a58 0x53414c46 0x43205d48 0x69666e6f 0x4d203a67 0x3d65646f 0x202c6425 0x636f6c43 0x64253d6b 0x6552202c 0x6d436461 0x78303d64 0x58323025 0x465b000a 0x4853414c 0x6954205d 0x676e696d 0x6153203a 0x656c706d 0x616c6544 0x64253d79 0x7544202c 0x43796d6d 0x656c6379 0x255b3d73 0x64252c64 0x5d64252c 0x465b000a 0x4853414c 0x6c42205d 0x206b636f 0x746f7270 0x69746365 0x63206e6f 0x7261656c 0x000a6465 0x414c465b 0x52454853 0x7546205d 0x63206c6c 0x20706968 0x73617265 0x6f632065 0x656c706d 0x0a646574 0x4c465b00 0x45485341 0x53205d52 0x74726174 0x20676e69 0x74697277 0x666f2065 0x20642520 0x65747962 0x74612073 0x66666f20 0x20746573 0x30257830 0x000a5838 0x414c465b 0x52454853 0x7257205d 0x20657469 0x706d6f63 0x6574656c 0x75732064 0x73656363 0x6c756673 0x000a796c 0x69726556 0x203a7966 0x53414c46 0x4f435f48 0x4f52544e 0x643e2d4c 0x20617461 0x7025203d 0x6556000a 0x79666972 0x6552203a 0x6e696461 0x72662067 0x66206d6f 0x6873616c 0x73616220 0x70252065 0x6556000a 0x79666972 0x6957203a 0x6f206874 0x65736666 0x78252074 0x6556000a 0x79666972 0x73696d20 0x6374616d 0x74612068 0x66666f20 0x20746573 0x203a7825 0x73616c66 0x30253d68 0x62207832 0x253d6675 0x0a783230 0x00000000 ]
set rtl8710_flasher_code [list 0x4880e92d 0x5d80f5ad 0xb673b085 0x0810f10d 0xf8482300 0xf04f3c04 0x4e6d4380 0x3210f8d3 0x0f10f013 0x486bd001 0x4c6b47b0 0x22004d6b 0x7180f44f 0x47a02010 0x20004b69 0x22014798 0x7180f44f 0x47a02010 0x21002201 0x4c664b65 0x4798200a 0x46284b65 0x4b654798 0x47982002 0x0049f895 0x2103aa03 0xf81847a0 0xf8183c02 0xf8182c03 0x485f1c04 0x682947b0 0x47b0485e 0x796a68ab 0x485d7929 0x7feb47b0 0x7f297f6a 0x485b9300 0x47b07fab 0x21004b5a 0x4798201c 0x47b04859 0x20004b59 0x46a14798 0x23004c58 0x68236023 0x6863b193 0xf2002b05 0xa2018086 0xf023f852 0x100015e1 0x100015f3 0x10001601 0x10001627 0x1000162b 0x10001659 0xe7e8bf00 0x0049f895 0x2104aa03 0xf85847c8 0x60e33c04 0x2100e7dd 0x4b474608 0x48474798 0xe7d647b0 0x4b446921 0x47982002 0x6922e7d1 0x6200f102 0xf10358d1 0xf5025280 0x33044200 0x69626211 0xd8f2429a 0x2300e7c3 0x6961e7f9 0x6922483b 0xf8df4f3b 0x47b0b0f0 0x0a00f04f 0x45536963 0x4839d801 0x6920e7da 0x0207eb0a 0x21044450 0xf10a47d8 0xe7f10a04 0x69236923 0x44136962 0x0b1b3b01 0x69622700 0xd9a042ba 0xf1026922 0x59d26200 0x2000f8c8 0x1bd26962 0xbf982a04 0x69226960 0xbf94443a 0x20041bc0 0x3f12ebb3 0x46c6d38d 0x0c00f04f 0xd1014584 0xe7e23704 0x010ceb07 0x0a01eb04 0x2b01f81e 0xb020f89a 0xd007455a 0x3020f89a 0x47b0481c 0x60a32301 0xe77460e7 0x0c01f10c 0x2301e7e6 0xe76e60a3 0x000004dd 0x10001730 0x00009b65 0x10000dec 0x00007d15 0x000042fd 0x00007465 0x00007b81 0x00007ca1 0x10001760 0x10001783 0x1000179b 0x100017ce 0x0000784d 0x10001806 0x00005811 0x10008000 0x00007755 0x10001828 0x1000184d 0x10008020 0x00007661 0x10001884 0x100018ac 0x414c465b 0x52454853 0x6c46205d 0x20687361 0x69726570 0x72656870 0x61206c61 0x6165726c 0x65207964 0x6c62616e 0x2e2e6465 0x000a3f2e 0x414c465b 0x205d4853 0x69766544 0x49206563 0x25203a44 0x20583230 0x58323025 0x32302520 0x5b000a58 0x53414c46 0x56205d48 0x6f646e65 0x30203a72 0x38302578 0x5b000a58 0x53414c46 0x43205d48 0x69666e6f 0x4d203a67 0x3d65646f 0x202c6425 0x636f6c43 0x64253d6b 0x6552202c 0x6d436461 0x78303d64 0x58323025 0x465b000a 0x4853414c 0x6954205d 0x676e696d 0x6153203a 0x656c706d 0x616c6544 0x64253d79 0x7544202c 0x43796d6d 0x656c6379 0x255b3d73 0x64252c64 0x5d64252c 0x465b000a 0x4853414c 0x6c42205d 0x206b636f 0x746f7270 0x69746365 0x63206e6f 0x7261656c 0x000a6465 0x414c465b 0x52454853 0x7546205d 0x63206c6c 0x20706968 0x73617265 0x6f632065 0x656c706d 0x0a646574 0x4c465b00 0x45485341 0x53205d52 0x74726174 0x20676e69 0x74697277 0x666f2065 0x20642520 0x65747962 0x74612073 0x66666f20 0x20746573 0x30257830 0x000a5838 0x414c465b 0x52454853 0x7257205d 0x20657469 0x706d6f63 0x6574656c 0x75732064 0x73656363 0x6c756673 0x000a796c 0x5245565b 0x5d594649 0x73696d20 0x6374616d 0x74612068 0x66666f20 0x20746573 0x203a7825 0x73616c66 0x30253d68 0x62207832 0x253d6675 0x0a783230 0x00000000 ]
set rtl8710_flasher_command_read_id 0
set rtl8710_flasher_command_mass_erase 1
@@ -102,14 +102,10 @@ proc rtl8710_flasher_wait {} {
while {[rtl8710_flasher_mrw $addr]} {}
}
# proc rtl8710_flasher_load_block {local_filename offset length} {
# global rtl8710_flasher_buffer
# set buffer_addr [expr {$rtl8710_flasher_buffer + 0x20}]
# load_image $local_filename [expr {$buffer_addr - $offset}] bin $buffer_addr $length
# }
proc rtl8710_flasher_load_block {local_filename offset len} {
proc rtl8710_flasher_load_block {local_filename offset length} {
global rtl8710_flasher_buffer
load_image $local_filename [expr {$rtl8710_flasher_buffer + 0x20 - $offset}] bin [expr {$rtl8710_flasher_buffer + 0x20}] $len
set buffer_addr [expr {$rtl8710_flasher_buffer + 0x20}]
load_image $local_filename [expr {$buffer_addr - $offset}] bin $buffer_addr $length
}
proc rtl8710_flasher_block {command offset len} {
@@ -149,25 +145,8 @@ proc rtl8710_flasher_write_block {offset len} {
rtl8710_flasher_block "write" $offset $len
}
# proc rtl8710_flasher_verify_block {offset len} {
# rtl8710_flasher_block "verify" $offset $len
# }
proc rtl8710_flasher_verify_block {offset len} {
global rtl8710_flasher_buffer
global rtl8710_flasher_command_verify
mww [expr {$rtl8710_flasher_buffer + 0x04}] $rtl8710_flasher_command_verify
mww [expr {$rtl8710_flasher_buffer + 0x08}] 0x00000000
mww [expr {$rtl8710_flasher_buffer + 0x10}] $offset
mww [expr {$rtl8710_flasher_buffer + 0x14}] $len
mww [expr {$rtl8710_flasher_buffer + 0x00}] 0x00000001
rtl8710_flasher_wait
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x08}]]
if {[expr {$status > 0}]} {
set status [rtl8710_flasher_mrw [expr {$rtl8710_flasher_buffer + 0x0C}]]
set status [expr {$status + $offset}]
error "verify error, offset $status"
}
rtl8710_flasher_block "verify" $offset $len
}
proc rtl8710_flash_read_id {} {