6dfef76346
Update xflash_layout to include information about the dump, which sits at the end of xflash.
51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
// XFLASH memory layout
|
|
#pragma once
|
|
#include <stdint.h>
|
|
#include "config.h"
|
|
|
|
#define XFLASH_SIZE 0x40000ul // size of XFLASH
|
|
#define SRAM_SIZE 0x2000u // size of SRAM
|
|
#define SRAM_START 0x200u // start of SRAM
|
|
|
|
#define LANG_OFFSET 0x0 // offset for language data
|
|
|
|
#ifndef XFLASH_DUMP
|
|
#define LANG_SIZE XFLASH_SIZE
|
|
#else
|
|
|
|
#define DUMP_MAGIC 0x47555255ul
|
|
|
|
struct dump_header_t
|
|
{
|
|
// start with a magic value to indicate the presence of a dump, so that clearing
|
|
// a single page is sufficient for resetting the state
|
|
uint32_t magic;
|
|
|
|
uint8_t regs_present; // true when the lower segment containing registers is present
|
|
uint8_t crash; // true if triggered by EMERGENCY_DUMP
|
|
};
|
|
|
|
struct dump_data_t
|
|
{
|
|
// contiguous region containing all addressable ranges
|
|
uint8_t regs[SRAM_START];
|
|
uint8_t sram[SRAM_SIZE];
|
|
};
|
|
|
|
struct dump_t
|
|
{
|
|
struct dump_header_t header;
|
|
|
|
// data is page aligned (no real space waste, due to the larger
|
|
// alignment required for the whole dump)
|
|
struct dump_data_t __attribute__((aligned(256))) data;
|
|
};
|
|
|
|
// dump offset must be aligned to lower 4kb sector boundary
|
|
#define DUMP_OFFSET ((XFLASH_SIZE - sizeof(dump_t)) & ~0xFFFul)
|
|
|
|
#define DUMP_SIZE (XFLASH_SIZE - DUMP_OFFSET) // effective dump size area
|
|
#define LANG_SIZE DUMP_OFFSET // available language space
|
|
|
|
#endif
|