Change M4 loader to use image tags.

Also finish moving HackRF binary to tagged image region.
This commit is contained in:
Jared Boone 2016-07-01 10:37:22 -07:00
parent 0e62876578
commit 97ba19af24
13 changed files with 49 additions and 45 deletions

View file

@ -38,17 +38,27 @@ using namespace lpc43xx;
* I suppose I could force M4MEMMAP to an invalid memory reason which would
* cause an exception and effectively halt the M4. But that feels gross.
*/
void m4_init(const portapack::spi_flash::region_t from, const portapack::memory::region_t to) {
/* Initialize M4 code RAM */
std::memcpy(reinterpret_cast<void*>(to.base()), from.base(), from.size);
void m4_init(const portapack::spi_flash::image_tag_t image_tag, const portapack::memory::region_t to) {
const portapack::spi_flash::chunk_t* chunk = reinterpret_cast<const portapack::spi_flash::chunk_t*>(portapack::spi_flash::images.base());
while(chunk->tag) {
if( chunk->tag == image_tag ) {
/* Initialize M4 code RAM */
std::memcpy(reinterpret_cast<void*>(to.base()), &chunk->data[0], chunk->length);
/* M4 core is assumed to be sleeping with interrupts off, so we can mess
* with its address space and RAM without concern.
*/
LPC_CREG->M4MEMMAP = to.base();
/* M4 core is assumed to be sleeping with interrupts off, so we can mess
* with its address space and RAM without concern.
*/
LPC_CREG->M4MEMMAP = to.base();
/* Reset M4 core */
LPC_RGU->RESET_CTRL[0] = (1 << 13);
/* Reset M4 core */
LPC_RGU->RESET_CTRL[0] = (1 << 13);
return;
}
chunk = chunk->next();
}
chDbgPanic("NoImg");
}
void m4_request_shutdown() {