From 1b8542490da3283dfa0ce0f3363f16eab0609815 Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Wed, 7 Apr 2021 22:11:01 +0100 Subject: x1000: Redesign SPL, and allow it to flash the bootloader SPL is now designed so core X1000 code is in control of the boot, under the reasonable assumption that the device boots from flash. It should not be too hard to adapt to other X1000 ports. The biggest functional change is that the SPL can now read/write the flash, under the control of a host computer. The SPL relies on the boot ROM for USB communication, so the host has to execute the SPL multiple times following a protocol. Change-Id: I3ffaa00e4bf191e043c9df0e2e64d15193ff42c9 --- firmware/target/mips/ingenic_x1000/spl-x1000.h | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 firmware/target/mips/ingenic_x1000/spl-x1000.h (limited to 'firmware/target/mips/ingenic_x1000/spl-x1000.h') diff --git a/firmware/target/mips/ingenic_x1000/spl-x1000.h b/firmware/target/mips/ingenic_x1000/spl-x1000.h new file mode 100644 index 0000000000..44601438f3 --- /dev/null +++ b/firmware/target/mips/ingenic_x1000/spl-x1000.h @@ -0,0 +1,49 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2021 Aidan MacDonald + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef __SPL_X1000_H__ +#define __SPL_X1000_H__ + +#include "spl-x1000-defs.h" + +#define SPL_ARGUMENTS ((struct x1000_spl_arguments*)SPL_ARGUMENTS_ADDRESS) +#define SPL_STATUS ((struct x1000_spl_status*)SPL_STATUS_ADDRESS) + +struct spl_boot_option { + uint32_t nand_addr; + uint32_t nand_size; + uint32_t load_addr; + uint32_t exec_addr; + const char* cmdline; /* for Linux */ +}; + +/* Defined by target, indices are 0 = ROCKBOX, 1 = ORIG_FW, etc... */ +extern const struct spl_boot_option spl_boot_options[]; + +/* Called on a fatal error */ +void spl_error(void) __attribute__((noreturn)); + +/* When SPL boots with SPL_BOOTOPTION_CHOOSE, this function is invoked + * to let the target figure out the boot option based on buttons the + * user is pressing */ +extern int spl_get_boot_option(void); + +#endif /* __SPL_X1000_H__ */ -- cgit v1.2.3