From 5b69ac973f0327325c400c82fd8c2734bf58a5ab Mon Sep 17 00:00:00 2001 From: R Date: Sun, 14 Apr 2024 14:36:11 +0100 Subject: [PATCH] we inherently cannot implement this auto reboot properly --- bootloader.c | 24 +----------------------- linker.lds | 16 ++++++---------- 2 files changed, 7 insertions(+), 33 deletions(-) diff --git a/bootloader.c b/bootloader.c index 2a20a74..6f84999 100644 --- a/bootloader.c +++ b/bootloader.c @@ -161,14 +161,9 @@ extern volatile uint32_t USB_EP1_IN[32]; extern uint32_t CSWTAG_LO; extern uint32_t CSWTAG_HI; -extern uint32_t BLOCKNUM_LO; -extern uint32_t BLOCKNUM_HI; -extern uint32_t TOTBLOCKS_LO; -extern uint32_t TOTBLOCKS_HI; extern uint32_t ADDRESS_LO; extern uint32_t ADDRESS_HI; extern uint32_t ACTIVE_CONFIG; -extern uint32_t UF2_BLOCKS_LEFT; extern uint32_t CTRL_XFER_STATE; extern uint32_t CTRL_XFER_STATE_X; extern uint32_t CTRL_XFER_DESC_SZ; @@ -376,8 +371,6 @@ __attribute__((naked)) int main(void) { // [15:0] = blocks left uint32_t scsi_xfer_lba_blocks = 0; - UF2_BLOCKS_LEFT = 0; - while (1) { uint32_t usb_int_status = R16_USBD_ISTR; if (usb_int_status & (1 << 10)) { @@ -600,7 +593,6 @@ __attribute__((naked)) int main(void) { CSWTAG_HI = USB_EP1_OUT[3]; uint32_t dCSWTag = CSWTAG_LO | (CSWTAG_HI << 16); uint32_t dCBWDataTransferLength = USB_EP1_OUT[4] | (USB_EP1_OUT[5] << 16); - uint32_t bmCBWFlags = USB_EP1_OUT[6] & 0xff; uint32_t operation_code = USB_EP1_OUT[7] >> 8; switch (operation_code) { @@ -736,10 +728,6 @@ __attribute__((naked)) int main(void) { if (!(flags & 1) && bytes == 256 && (address & 0xff) == 0) { if (flags & (0x2000) && familyid == FAMILY_ID) { // uf2 good so far! - BLOCKNUM_LO = USB_EP1_OUT[10]; - BLOCKNUM_HI = USB_EP1_OUT[11]; - TOTBLOCKS_LO = USB_EP1_OUT[12]; - TOTBLOCKS_HI = USB_EP1_OUT[13]; ADDRESS_LO = USB_EP1_OUT[6]; ADDRESS_HI = USB_EP1_OUT[7]; @@ -766,15 +754,8 @@ __attribute__((naked)) int main(void) { if (msc_state & 0x1000) { if (USB_EP1_OUT[30] == 0x6F30 && USB_EP1_OUT[31] == 0x0AB1) { // uf2 all magics are good! - uint32_t blocknum = BLOCKNUM_LO | (BLOCKNUM_HI << 16); - uint32_t totblocks = TOTBLOCKS_LO | (TOTBLOCKS_HI << 16); uint32_t address = ADDRESS_LO | (ADDRESS_HI << 16); - if (UF2_BLOCKS_LEFT == 0) - UF2_BLOCKS_LEFT = (totblocks - 1) | 0x8000; - else - UF2_BLOCKS_LEFT--; - // todo flash the file // todo ram download mode R32_FLASH_KEYR = 0x45670123; @@ -803,10 +784,7 @@ __attribute__((naked)) int main(void) { if (blocks_left == 0) { uint32_t dCSWTag = CSWTAG_LO | (CSWTAG_HI << 16); make_msc_csw(dCSWTag, 0); - if (UF2_BLOCKS_LEFT == 0x8000) - msc_state = STATE_SENT_CSW_REBOOT; - else - msc_state = STATE_SENT_CSW; + msc_state = STATE_SENT_CSW; } else { scsi_xfer_lba_blocks = blocks_left; set_ep_mode(1, 1, USB_EPTYPE_BULK, USB_STAT_ACK, USB_STAT_STALL, 0, 0); diff --git a/linker.lds b/linker.lds index 898d416..0890ac1 100644 --- a/linker.lds +++ b/linker.lds @@ -42,16 +42,12 @@ SECTIONS PROVIDE( USB_EP0_IN = 0x40006030 ); PROVIDE( USB_EP1_OUT = 0x40006040 ); PROVIDE( USB_EP1_IN = 0x400060c0 ); - PROVIDE( CSWTAG_LO = 0x400061cc ); - PROVIDE( CSWTAG_HI = 0x400061d0 ); - PROVIDE( BLOCKNUM_LO = 0x400061d4 ); - PROVIDE( BLOCKNUM_HI = 0x400061d8 ); - PROVIDE( TOTBLOCKS_LO = 0x400061dc ); - PROVIDE( TOTBLOCKS_HI = 0x400061e0 ); - PROVIDE( ADDRESS_LO = 0x400061e4 ); - PROVIDE( ADDRESS_HI = 0x400061e8 ); - PROVIDE( ACTIVE_CONFIG = 0x400061ec ); - PROVIDE( UF2_BLOCKS_LEFT = 0x400061f0 ); + + PROVIDE( CSWTAG_LO = 0x400061e0 ); + PROVIDE( CSWTAG_HI = 0x400061e4 ); + PROVIDE( ADDRESS_LO = 0x400061e8 ); + PROVIDE( ADDRESS_HI = 0x400061ec ); + PROVIDE( ACTIVE_CONFIG = 0x400061f0 ); PROVIDE( CTRL_XFER_STATE = 0x400061f4 ); PROVIDE( CTRL_XFER_STATE_X = 0x400061f8 ); PROVIDE( CTRL_XFER_DESC_SZ = 0x400061fc );