+struct mini51_cpu_type {
+ char *name;
+ uint32_t ppid;
+ unsigned n_banks;
+ struct mini51_flash_bank_type bank[MINI51_MAX_FLASH_BANKS];
+};
+
+#define MINI51_BANKS_MINI51(aprom_size) \
+ .n_banks = 3, \
+ { {MINI51_APROM_BASE, (aprom_size)}, {MINI51_LDROM_BASE, 2*1024}, {MINI51_CONFIG_BASE, 512} }
+
+#define MINI51_BANKS_M051(aprom_size) \
+ .n_banks = 4, \
+ { {MINI51_APROM_BASE, (aprom_size)}, {MINI51_DATA_BASE, 4*1024}, {MINI51_LDROM_BASE, 4*1024}, \
+ {MINI51_CONFIG_BASE, 1024} }
+
+static const struct mini51_cpu_type mini51_cpu[] = {
+ { "MINI51LAN", 0x00205100, MINI51_BANKS_MINI51(4*1024) },
+ { "MINI51ZAN", 0x00205103, MINI51_BANKS_MINI51(4*1024) },
+ { "MINI51TAN", 0x00205104, MINI51_BANKS_MINI51(4*1024) },
+ { "MINI52LAN", 0x00205200, MINI51_BANKS_MINI51(8*1024) },
+ { "MINI52ZAN", 0x00205203, MINI51_BANKS_MINI51(8*1024) },
+ { "MINI52TAN", 0x00205204, MINI51_BANKS_MINI51(8*1024) },
+ { "MINI54LAN", 0x00205400, MINI51_BANKS_MINI51(16*1024) },
+ { "MINI54ZAN", 0x00205403, MINI51_BANKS_MINI51(16*1024) },
+ { "MINI54TAN", 0x00205404, MINI51_BANKS_MINI51(16*1024) },
+
+ { "M052LBN", 0x10005200, MINI51_BANKS_M051(8*1024) },
+ { "M054LBN", 0x10005400, MINI51_BANKS_M051(16*1024) },
+ { "M058LBN", 0x10005800, MINI51_BANKS_M051(32*1024) },
+ { "M0516LBN", 0x10005A00, MINI51_BANKS_M051(64*1024) },
+ { "M052ZBN", 0x10005203, MINI51_BANKS_M051(8*1024) },
+ { "M054ZBN", 0x10005403, MINI51_BANKS_M051(16*1024) },
+ { "M058ZBN", 0x10005803, MINI51_BANKS_M051(32*1024) },
+ { "M0516ZBN", 0x10005A03, MINI51_BANKS_M051(64*1024) },
+ { "M052LDN", 0x20005200, MINI51_BANKS_M051(8*1024) },
+ { "M054LDN", 0x20005400, MINI51_BANKS_M051(16*1024) },
+ { "M058LDN", 0x20005800, MINI51_BANKS_M051(32*1024) },
+ { "M0516LDN", 0x20005A00, MINI51_BANKS_M051(64*1024) },
+ { "M052ZDN", 0x20005203, MINI51_BANKS_M051(8*1024) },
+ { "M054ZDN", 0x20005403, MINI51_BANKS_M051(16*1024) },
+ { "M058ZDN", 0x20005803, MINI51_BANKS_M051(32*1024) },
+ { "M0516ZDN", 0x20005A03, MINI51_BANKS_M051(64*1024) },
+ { "M052LDE", 0x30005200, MINI51_BANKS_M051(8*1024) },
+ { "M054LDE", 0x30005400, MINI51_BANKS_M051(16*1024) },
+ { "M058LDE", 0x30005800, MINI51_BANKS_M051(32*1024) },
+ { "M0516LDE", 0x30005A00, MINI51_BANKS_M051(64*1024) },
+ { "M052ZDE", 0x30005203, MINI51_BANKS_M051(8*1024) },
+ { "M054ZDE", 0x30005403, MINI51_BANKS_M051(16*1024) },
+ { "M058ZDE", 0x30005803, MINI51_BANKS_M051(32*1024) },
+ { "M0516ZDE", 0x30005A03, MINI51_BANKS_M051(64*1024) },
+};
+
+struct mini51_flash_bank {
+ bool probed;
+ const struct mini51_cpu_type *cpu;