69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
#include "system/includes.h"
|
|
#include "usb/device/msd.h"
|
|
#include "usb/scsi.h"
|
|
#include "usb_config.h"
|
|
#include "app_config.h"
|
|
#include "cpu.h"
|
|
#include "asm/debug.h"
|
|
|
|
#define WRITE_FLASH 0xFB
|
|
#define READ_FLASH 0xFD
|
|
#define OTHER_CMD 0xFC
|
|
typedef enum {
|
|
UPGRADE_NULL = 0,
|
|
UPGRADE_USB_HARD_KEY,
|
|
UPGRADE_USB_SOFT_KEY,
|
|
UPGRADE_UART_KEY,
|
|
} UPGRADE_STATE;
|
|
|
|
extern void nvram_set_boot_state(u32 state);
|
|
extern void hw_mmu_disable(void);
|
|
extern void ram_protect_close(void);
|
|
|
|
AT(.volatile_ram_code)
|
|
void go_mask_usb_updata()
|
|
{
|
|
local_irq_disable();
|
|
ram_protect_close();
|
|
hw_mmu_disable();
|
|
nvram_set_boot_state(UPGRADE_USB_SOFT_KEY);
|
|
|
|
JL_CLOCK->PWR_CON |= (1 << 4);
|
|
/* chip_reset(); */
|
|
/* cpu_reset(); */
|
|
while (1);
|
|
}
|
|
#if TCFG_PC_UPDATE
|
|
|
|
u32 _usb_bulk_rw_test(const struct usb_device_t *usb_device, struct usb_scsi_cbw *cbw);
|
|
|
|
u32 private_scsi_cmd(const struct usb_device_t *usb_device, struct usb_scsi_cbw *cbw)
|
|
{
|
|
/* if (_usb_bulk_rw_test(usb_device, cbw)) { */
|
|
/* return TRUE; */
|
|
/* } */
|
|
|
|
switch (cbw->operationCode) {
|
|
//////////////////////Boot Loader Custom CMD
|
|
case WRITE_FLASH:
|
|
case READ_FLASH:
|
|
case OTHER_CMD:
|
|
log_d("goto mask pc mode\n");
|
|
go_mask_usb_updata();
|
|
break;
|
|
|
|
default:
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
#else
|
|
u32 private_scsi_cmd(const struct usb_device_t *usb_device, struct usb_scsi_cbw *cbw)
|
|
{
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|