helper/fileio: Remove nested struct
[fw/openocd] / src / flash / nor / xmc4xxx.c
index d4242a24df20e9312a996bd0663ee47c15d32f4d..f676e8cdeb7fc038ab2254a3f6f4070f06fdfe3b 100644 (file)
 
 /* Flash controller configuration values */
 #define FLASH_ID_XMC4500        0xA2
+#define FLASH_ID_XMC4700_4800   0x92
 #define FLASH_ID_XMC4100_4200   0x9C
 #define FLASH_ID_XMC4400        0x9F
 
@@ -251,6 +252,10 @@ static const unsigned int sector_capacity_12[12] = {
        16, 16, 16, 16, 16, 16, 16, 16, 128, 256, 256, 256
 };
 
+static const unsigned int sector_capacity_16[16] = {
+       16, 16, 16, 16, 16, 16, 16, 16, 128, 256, 256, 256, 256, 256, 256, 256
+};
+
 static int xmc4xxx_write_command_sequence(struct flash_bank *bank,
                                         struct xmc4xxx_command_seq *seq,
                                         int seq_len)
@@ -285,6 +290,9 @@ static int xmc4xxx_load_bank_layout(struct flash_bank *bank)
        case 12:
                capacity = sector_capacity_12;
                break;
+       case 16:
+               capacity = sector_capacity_16;
+               break;
        default:
                LOG_ERROR("Unexpected number of sectors, %d\n",
                          bank->num_sectors);
@@ -373,6 +381,10 @@ static int xmc4xxx_probe(struct flash_bank *bank)
                bank->num_sectors = 12;
                LOG_DEBUG("XMC4xxx: XMC4500 detected.");
                break;
+       case FLASH_ID_XMC4700_4800:
+               bank->num_sectors = 16;
+               LOG_DEBUG("XMC4xxx: XMC4700/4800 detected.");
+               break;
        default:
                LOG_ERROR("XMC4xxx: Unexpected flash ID. got %02" PRIx8,
                          flash_id);
@@ -616,16 +628,8 @@ int xmc4xxx_blank_check_memory(struct target *target,
        struct armv7m_algorithm armv7m_info;
        int retval;
 
-       /* see contrib/loaders/erase_check/armv7m_0_erase_check.s for src */
-
        static const uint8_t erase_check_code[] = {
-               /* loop: */
-               0x03, 0x78,             /* ldrb r3, [r0] */
-               0x01, 0x30,             /* adds r0, #1 */
-               0x1A, 0x43,             /* orrs r2, r2, r3 */
-               0x01, 0x39,             /* subs r1, r1, #1 */
-               0xFA, 0xD1,             /* bne  loop */
-               0x00, 0xBE              /* bkpt #0 */
+#include "../../../contrib/loaders/erase_check/armv7m_0_erase_check.inc"
        };
 
        /* make sure we have a working area */
@@ -971,6 +975,24 @@ static int xmc4xxx_get_info_command(struct flash_bank *bank, char *buf, int buf_
                        break;
                }
                break;
+       case 0x700:
+               dev_str = "XMC4700";
+
+               switch (rev_id) {
+               case 0x1:
+                       rev_str = "EES-AA";
+                       break;
+               }
+               break;
+       case 0x800:
+               dev_str = "XMC4800";
+
+               switch (rev_id) {
+               case 0x1:
+                       rev_str = "EES-AA";
+                       break;
+               }
+               break;
 
        default:
                snprintf(buf, buf_size,