flash: avoid checking for non NULL pointer to free it
[fw/openocd] / src / flash / nor / at91sam4.c
index c5b31e964208d996c30b7bbd2da58a56f2dfd238..3f9ea9bfa1fd228f0d1066265452634d333efc0c 100644 (file)
@@ -22,7 +22,7 @@
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 ****************************************************************************/
 
-/* Some of the the lower level code was based on code supplied by
+/* Some of the lower level code was based on code supplied by
  * ATMEL under this copyright. */
 
 /* BEGIN ATMEL COPYRIGHT */
 #define  offset_EFC_FSR   8
 #define  offset_EFC_FRR   12
 
-extern struct flash_driver at91sam4_flash;
+extern const struct flash_driver at91sam4_flash;
 
 static float _tomhz(uint32_t freq_hz)
 {
@@ -166,7 +166,7 @@ struct sam4_cfg {
 };
 
 struct sam4_bank_private {
-       int probed;
+       bool probed;
        /* DANGER: THERE ARE DRAGONS HERE.. */
        /* NOTE: If you add more 'ghost' pointers */
        /* be aware that you must *manually* update */
@@ -212,7 +212,7 @@ struct sam4_chip_details {
 
 struct sam4_chip {
        struct sam4_chip *next;
-       int probed;
+       bool probed;
 
        /* this is "initialized" from the global const structure */
        struct sam4_chip_details details;
@@ -228,14 +228,14 @@ struct sam4_reg_list {
 
 static struct sam4_chip *all_sam4_chips;
 
-static struct sam4_chip *get_current_sam4(struct command_context *cmd_ctx)
+static struct sam4_chip *get_current_sam4(struct command_invocation *cmd)
 {
        struct target *t;
        static struct sam4_chip *p;
 
-       t = get_current_target(cmd_ctx);
+       t = get_current_target(cmd->ctx);
        if (!t) {
-               command_print(cmd_ctx, "No current target?");
+               command_print(cmd, "No current target?");
                return NULL;
        }
 
@@ -243,7 +243,7 @@ static struct sam4_chip *get_current_sam4(struct command_context *cmd_ctx)
        if (!p) {
                /* this should not happen */
                /* the command is not registered until the chip is created? */
-               command_print(cmd_ctx, "No SAM4 chips exist?");
+               command_print(cmd, "No SAM4 chips exist?");
                return NULL;
        }
 
@@ -252,7 +252,7 @@ static struct sam4_chip *get_current_sam4(struct command_context *cmd_ctx)
                        return p;
                p = p->next;
        }
-       command_print(cmd_ctx, "Cannot find SAM4 chip?");
+       command_print(cmd, "Cannot find SAM4 chip?");
        return NULL;
 }
 
@@ -275,14 +275,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_C32,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -290,14 +290,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                        },
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_C32,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -316,14 +316,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_C32,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -331,14 +331,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                        },
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_C32,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -357,14 +357,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_C,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -372,8 +372,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -390,14 +390,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_C,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -405,8 +405,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -423,14 +423,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_C,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  256 * 1024,
                        .nsectors   =  32,
                        .sector_size = 8192,
@@ -438,8 +438,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -458,14 +458,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -473,8 +473,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -493,14 +493,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -508,8 +508,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -526,14 +526,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -541,8 +541,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -559,14 +559,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -574,8 +574,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -592,14 +592,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -607,8 +607,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -625,14 +625,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -640,8 +640,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -660,14 +660,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -675,8 +675,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -694,14 +694,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -709,8 +709,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -727,14 +727,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -742,8 +742,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -760,14 +760,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -775,8 +775,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -793,14 +793,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  1024 * 1024,
                        .nsectors   =  128,
                        .sector_size = 8192,
@@ -808,8 +808,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -826,14 +826,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -841,8 +841,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -859,14 +859,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -874,8 +874,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -892,14 +892,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  512 * 1024,
                        .nsectors   =  64,
                        .sector_size = 8192,
@@ -907,8 +907,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -926,14 +926,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  256 * 1024,
                        .nsectors   =  32,
                        .sector_size = 8192,
@@ -941,8 +941,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -960,14 +960,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  256 * 1024,
                        .nsectors   =  32,
                        .sector_size = 8192,
@@ -975,8 +975,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -994,14 +994,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  256 * 1024,
                        .nsectors   =  32,
                        .sector_size = 8192,
@@ -1009,8 +1009,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -1028,14 +1028,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  128 * 1024,
                        .nsectors   =  16,
                        .sector_size = 8192,
@@ -1043,8 +1043,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -1062,14 +1062,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  128 * 1024,
                        .nsectors   =  16,
                        .sector_size = 8192,
@@ -1077,8 +1077,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -1096,14 +1096,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*             .bank[0] = {*/
                  {
-                       .probed = 0,
+                       .probed = false,
                        .pChip  = NULL,
                        .pBank  = NULL,
                        .bank_number = 0,
                        .base_address = FLASH_BANK_BASE_S,
                        .controller_address = 0x400e0a00,
                        .flash_wait_states = 5,
-                       .present = 1,
+                       .present = true,
                        .size_bytes =  128 * 1024,
                        .nsectors   =  16,
                        .sector_size = 8192,
@@ -1111,8 +1111,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                  },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -1131,14 +1131,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_SD,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -1147,14 +1147,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_2048K_SD,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -1175,14 +1175,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_SD,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -1191,14 +1191,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_2048K_SD,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  1024 * 1024,
                                .nsectors   =  128,
                                .sector_size = 8192,
@@ -1219,14 +1219,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_SD,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1235,14 +1235,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_1024K_SD,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1263,14 +1263,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = { */
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK0_BASE_SD,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1279,14 +1279,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 
 /*             .bank[1] = { */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 1,
                                .base_address = FLASH_BANK1_BASE_1024K_SD,
                                .controller_address = 0x400e0c00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1307,14 +1307,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
 /*             .bank[0] = {*/
                {
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK_BASE_S,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1322,8 +1322,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                        },
 /*             .bank[1] = {*/
                  {
-                       .present = 0,
-                       .probed = 0,
+                       .present = false,
+                       .probed = false,
                        .bank_number = 1,
 
                  },
@@ -1342,14 +1342,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*                     .bank[0] = */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK_BASE_S,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1357,8 +1357,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                        },
 /*                     .bank[1] = */
                        {
-                               .present = 0,
-                               .probed = 0,
+                               .present = false,
+                               .probed = false,
                                .bank_number = 1,
                        },
                }
@@ -1376,14 +1376,14 @@ static const struct sam4_chip_details all_sam4_details[] = {
                {
 /*                     .bank[0] = */
                        {
-                               .probed = 0,
+                               .probed = false,
                                .pChip  = NULL,
                                .pBank  = NULL,
                                .bank_number = 0,
                                .base_address = FLASH_BANK_BASE_S,
                                .controller_address = 0x400e0a00,
                                .flash_wait_states = 5,
-                               .present = 1,
+                               .present = true,
                                .size_bytes =  512 * 1024,
                                .nsectors   =  64,
                                .sector_size = 8192,
@@ -1391,8 +1391,8 @@ static const struct sam4_chip_details all_sam4_details[] = {
                        },
 /*                     .bank[1] = */
                        {
-                               .present = 0,
-                               .probed = 0,
+                               .present = false,
+                               .probed = false,
                                .bank_number = 1,
                        },
                }
@@ -2376,6 +2376,11 @@ static int sam4_GetInfo(struct sam4_chip *pChip)
 {
        const struct sam4_reg_list *pReg;
        uint32_t regval;
+       int r;
+
+       r = sam4_ReadAllRegs(pChip);
+       if (r != ERROR_OK)
+               return r;
 
        pReg = &(sam4_all_regs[0]);
        while (pReg->name) {
@@ -2467,7 +2472,7 @@ FLASH_BANK_COMMAND_HANDLER(sam4_flash_bank_command)
                pChip->target = bank->target;
                /* assumption is this runs at 32khz */
                pChip->cfg.slow_freq = 32768;
-               pChip->probed = 0;
+               pChip->probed = false;
        }
 
        switch (bank->base) {
@@ -2477,7 +2482,6 @@ FLASH_BANK_COMMAND_HANDLER(sam4_flash_bank_command)
                                ((unsigned int)(bank->base)),
                                ((unsigned int)(FLASH_BANK_BASE_S)));
                        return ERROR_FAIL;
-                       break;
 
                /* at91sam4s series only has bank 0*/
                /* at91sam4sd series has the same address for bank 0 (FLASH_BANK0_BASE_SD)*/
@@ -2505,7 +2509,7 @@ FLASH_BANK_COMMAND_HANDLER(sam4_flash_bank_command)
 }
 
 /**
- * Remove all chips from the internal list without distingushing which one
+ * Remove all chips from the internal list without distinguishing which one
  * is owned by this bank. This simplification works only for one shot
  * deallocation like current flash_free_all_banks()
  */
@@ -2545,7 +2549,7 @@ static int sam4_GetDetails(struct sam4_bank_private *pPrivate)
                sam4_explain_chipid_cidr(pPrivate->pChip);
                return ERROR_FAIL;
        } else {
-               LOG_INFO("SAM4 Found chip %s, CIDR 0x%08x", pDetails->name, pDetails->chipid_cidr);
+               LOG_DEBUG("SAM4 Found chip %s, CIDR 0x%08x", pDetails->name, pDetails->chipid_cidr);
        }
 
        /* DANGER: THERE ARE DRAGONS HERE */
@@ -2581,14 +2585,34 @@ static int sam4_GetDetails(struct sam4_bank_private *pPrivate)
        return ERROR_OK;
 }
 
-static int _sam4_probe(struct flash_bank *bank, int noise)
+static int sam4_info(struct flash_bank *bank, char *buf, int buf_size)
+{
+       struct sam4_bank_private *pPrivate;
+       int k = bank->size / 1024;
+
+       pPrivate = get_sam4_bank_private(bank);
+       if (pPrivate == NULL) {
+               buf[0] = '\0';
+               return ERROR_FAIL;
+       }
+
+       snprintf(buf, buf_size,
+               "%s bank %d: %d kB at " TARGET_ADDR_FMT,
+               pPrivate->pChip->details.name,
+               pPrivate->bank_number,
+               k,
+               bank->base);
+
+       return ERROR_OK;
+}
+
+static int sam4_probe(struct flash_bank *bank)
 {
-       unsigned x;
        int r;
        struct sam4_bank_private *pPrivate;
 
 
-       LOG_DEBUG("Begin: Bank: %d, Noise: %d", bank->bank_number, noise);
+       LOG_DEBUG("Begin: Bank: %u", bank->bank_number);
        if (bank->target->state != TARGET_HALTED) {
                LOG_ERROR("Target not halted");
                return ERROR_TARGET_NOT_HALTED;
@@ -2613,10 +2637,12 @@ static int _sam4_probe(struct flash_bank *bank, int noise)
                return r;
 
        /* update the flash bank size */
-       for (x = 0; x < SAM4_MAX_FLASH_BANKS; x++) {
+       for (unsigned int x = 0; x < SAM4_MAX_FLASH_BANKS; x++) {
                if (bank->base == pPrivate->pChip->details.bank[x].base_address) {
                        bank->size = pPrivate->pChip->details.bank[x].size_bytes;
-                       LOG_INFO("SAM4 Set flash bank to %08X - %08X, idx %d", bank->base, bank->base + bank->size, x);
+                       LOG_DEBUG("SAM4 Set flash bank to " TARGET_ADDR_FMT " - "
+                                       TARGET_ADDR_FMT ", idx %d", bank->base,
+                                       bank->base + bank->size, x);
                        break;
                }
        }
@@ -2629,7 +2655,7 @@ static int _sam4_probe(struct flash_bank *bank, int noise)
                }
                bank->num_sectors = pPrivate->nsectors;
 
-               for (x = 0; ((int)(x)) < bank->num_sectors; x++) {
+               for (unsigned int x = 0; x < bank->num_sectors; x++) {
                        bank->sectors[x].size = pPrivate->sector_size;
                        bank->sectors[x].offset = x * (pPrivate->sector_size);
                        /* mark as unknown */
@@ -2638,7 +2664,7 @@ static int _sam4_probe(struct flash_bank *bank, int noise)
                }
        }
 
-       pPrivate->probed = 1;
+       pPrivate->probed = true;
 
        r = sam4_protect_check(bank);
        if (r != ERROR_OK)
@@ -2655,21 +2681,22 @@ static int _sam4_probe(struct flash_bank *bank, int noise)
        return r;
 }
 
-static int sam4_probe(struct flash_bank *bank)
-{
-       return _sam4_probe(bank, 1);
-}
-
 static int sam4_auto_probe(struct flash_bank *bank)
 {
-       return _sam4_probe(bank, 0);
+       struct sam4_bank_private *pPrivate;
+
+       pPrivate = get_sam4_bank_private(bank);
+       if (pPrivate && pPrivate->probed)
+               return ERROR_OK;
+
+       return sam4_probe(bank);
 }
 
-static int sam4_erase(struct flash_bank *bank, int first, int last)
+static int sam4_erase(struct flash_bank *bank, unsigned int first,
+               unsigned int last)
 {
        struct sam4_bank_private *pPrivate;
        int r;
-       int i;
        int pageCount;
        /*16 pages equals 8KB - Same size as a lock region*/
        pageCount = 16;
@@ -2691,26 +2718,26 @@ static int sam4_erase(struct flash_bank *bank, int first, int last)
        if (!(pPrivate->probed))
                return ERROR_FLASH_BANK_NOT_PROBED;
 
-       if ((first == 0) && ((last + 1) == ((int)(pPrivate->nsectors)))) {
+       if ((first == 0) && ((last + 1) == pPrivate->nsectors)) {
                /* whole chip */
                LOG_DEBUG("Here");
                return FLASHD_EraseEntireBank(pPrivate);
        }
        LOG_INFO("sam4 does not auto-erase while programming (Erasing relevant sectors)");
-       LOG_INFO("sam4 First: 0x%08x Last: 0x%08x", (unsigned int)(first), (unsigned int)(last));
-       for (i = first; i <= last; i++) {
+       LOG_INFO("sam4 First: 0x%08x Last: 0x%08x", first, last);
+       for (unsigned int i = first; i <= last; i++) {
                /*16 pages equals 8KB - Same size as a lock region*/
                r = FLASHD_ErasePages(pPrivate, (i * pageCount), pageCount, &status);
-               LOG_INFO("Erasing sector: 0x%08x", (unsigned int)(i));
+               LOG_INFO("Erasing sector: 0x%08x", i);
                if (r != ERROR_OK)
-                       LOG_ERROR("SAM4: Error performing Erase page @ lock region number %d",
-                               (unsigned int)(i));
+                       LOG_ERROR("SAM4: Error performing Erase page @ lock region number %u",
+                               i);
                if (status & (1 << 2)) {
-                       LOG_ERROR("SAM4: Lock Region %d is locked", (unsigned int)(i));
+                       LOG_ERROR("SAM4: Lock Region %u is locked", i);
                        return ERROR_FAIL;
                }
                if (status & (1 << 1)) {
-                       LOG_ERROR("SAM4: Flash Command error @lock region %d", (unsigned int)(i));
+                       LOG_ERROR("SAM4: Flash Command error @lock region %u", i);
                        return ERROR_FAIL;
                }
        }
@@ -2718,7 +2745,8 @@ static int sam4_erase(struct flash_bank *bank, int first, int last)
        return ERROR_OK;
 }
 
-static int sam4_protect(struct flash_bank *bank, int set, int first, int last)
+static int sam4_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last)
 {
        struct sam4_bank_private *pPrivate;
        int r;
@@ -2734,9 +2762,9 @@ static int sam4_protect(struct flash_bank *bank, int set, int first, int last)
                return ERROR_FLASH_BANK_NOT_PROBED;
 
        if (set)
-               r = FLASHD_Lock(pPrivate, (unsigned)(first), (unsigned)(last));
+               r = FLASHD_Lock(pPrivate, first, last);
        else
-               r = FLASHD_Unlock(pPrivate, (unsigned)(first), (unsigned)(last));
+               r = FLASHD_Unlock(pPrivate, first, last);
        LOG_DEBUG("End: r=%d", r);
 
        return r;
@@ -2762,20 +2790,17 @@ static int sam4_page_read(struct sam4_bank_private *pPrivate, unsigned pagenum,
        return r;
 }
 
-static int sam4_page_write(struct sam4_bank_private *pPrivate, unsigned pagenum, const uint8_t *buf)
+static int sam4_set_wait(struct sam4_bank_private *pPrivate)
 {
-       uint32_t adr;
-       uint32_t status;
        uint32_t fmr;   /* EEFC Flash Mode Register */
        int r;
 
-       adr = pagenum * pPrivate->page_size;
-       adr = (adr + pPrivate->base_address);
-
        /* Get flash mode register value */
        r = target_read_u32(pPrivate->pChip->target, pPrivate->controller_address, &fmr);
-       if (r != ERROR_OK)
-               LOG_DEBUG("Error Read failed: read flash mode register");
+       if (r != ERROR_OK) {
+               LOG_ERROR("Error Read failed: read flash mode register");
+               return r;
+       }
 
        /* Clear flash wait state field */
        fmr &= 0xfffff0ff;
@@ -2786,7 +2811,19 @@ static int sam4_page_write(struct sam4_bank_private *pPrivate, unsigned pagenum,
        LOG_DEBUG("Flash Mode: 0x%08x", ((unsigned int)(fmr)));
        r = target_write_u32(pPrivate->pBank->target, pPrivate->controller_address, fmr);
        if (r != ERROR_OK)
-               LOG_DEBUG("Error Write failed: set flash mode register");
+               LOG_ERROR("Error Write failed: set flash mode register");
+
+       return r;
+}
+
+static int sam4_page_write(struct sam4_bank_private *pPrivate, unsigned pagenum, const uint8_t *buf)
+{
+       uint32_t adr;
+       uint32_t status;
+       int r;
+
+       adr = pagenum * pPrivate->page_size;
+       adr = (adr + pPrivate->base_address);
 
        /* 1st sector 8kBytes - page 0 - 15*/
        /* 2nd sector 8kBytes - page 16 - 30*/
@@ -2836,7 +2873,7 @@ static int sam4_write(struct flash_bank *bank,
        struct sam4_bank_private *pPrivate;
        uint8_t *pagebuffer;
 
-       /* incase we bail further below, set this to null */
+       /* in case we bail further below, set this to null */
        pagebuffer = NULL;
 
        /* ignore dumb requests */
@@ -2874,6 +2911,10 @@ static int sam4_write(struct flash_bank *bank,
                goto done;
        }
 
+       r = sam4_set_wait(pPrivate);
+       if (r != ERROR_OK)
+               goto done;
+
        /* what page do we start & end in? */
        page_cur = offset / pPrivate->page_size;
        page_end = (offset + count - 1) / pPrivate->page_size;
@@ -2968,15 +3009,14 @@ static int sam4_write(struct flash_bank *bank,
        LOG_DEBUG("Done!");
        r = ERROR_OK;
 done:
-       if (pagebuffer)
-               free(pagebuffer);
+       free(pagebuffer);
        return r;
 }
 
 COMMAND_HANDLER(sam4_handle_info_command)
 {
        struct sam4_chip *pChip;
-       pChip = get_current_sam4(CMD_CTX);
+       pChip = get_current_sam4(CMD);
        if (!pChip)
                return ERROR_OK;
 
@@ -2987,7 +3027,7 @@ COMMAND_HANDLER(sam4_handle_info_command)
        if (pChip->details.bank[0].pBank == NULL) {
                x = 0;
 need_define:
-               command_print(CMD_CTX,
+               command_print(CMD,
                        "Please define bank %d via command: flash bank %s ... ",
                        x,
                        at91sam4_flash.name);
@@ -3036,7 +3076,7 @@ COMMAND_HANDLER(sam4_handle_gpnvm_command)
        int r, who;
        struct sam4_chip *pChip;
 
-       pChip = get_current_sam4(CMD_CTX);
+       pChip = get_current_sam4(CMD);
        if (!pChip)
                return ERROR_OK;
 
@@ -3046,7 +3086,7 @@ COMMAND_HANDLER(sam4_handle_gpnvm_command)
        }
 
        if (pChip->details.bank[0].pBank == NULL) {
-               command_print(CMD_CTX, "Bank0 must be defined first via: flash bank %s ...",
+               command_print(CMD, "Bank0 must be defined first via: flash bank %s ...",
                        at91sam4_flash.name);
                return ERROR_FAIL;
        }
@@ -3059,10 +3099,8 @@ COMMAND_HANDLER(sam4_handle_gpnvm_command)
        switch (CMD_ARGC) {
                default:
                        return ERROR_COMMAND_SYNTAX_ERROR;
-                       break;
                case 0:
                        goto showall;
-                       break;
                case 1:
                        who = -1;
                        break;
@@ -3085,22 +3123,23 @@ showall:
                                r = FLASHD_GetGPNVM(&(pChip->details.bank[0]), x, &v);
                                if (r != ERROR_OK)
                                        break;
-                               command_print(CMD_CTX, "sam4-gpnvm%u: %u", x, v);
+                               command_print(CMD, "sam4-gpnvm%u: %u", x, v);
                        }
                        return r;
                }
                if ((who >= 0) && (((unsigned)(who)) < pChip->details.n_gpnvms)) {
                        r = FLASHD_GetGPNVM(&(pChip->details.bank[0]), who, &v);
-                       command_print(CMD_CTX, "sam4-gpnvm%u: %u", who, v);
+                       if (r == ERROR_OK)
+                               command_print(CMD, "sam4-gpnvm%u: %u", who, v);
                        return r;
                } else {
-                       command_print(CMD_CTX, "sam4-gpnvm invalid GPNVM: %u", who);
+                       command_print(CMD, "sam4-gpnvm invalid GPNVM: %u", who);
                        return ERROR_COMMAND_SYNTAX_ERROR;
                }
        }
 
        if (who == -1) {
-               command_print(CMD_CTX, "Missing GPNVM number");
+               command_print(CMD, "Missing GPNVM number");
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
@@ -3110,7 +3149,7 @@ showall:
                 (0 == strcmp("clear", CMD_ARGV[0])))                   /* quietly accept both */
                r = FLASHD_ClrGPNVM(&(pChip->details.bank[0]), who);
        else {
-               command_print(CMD_CTX, "Unknown command: %s", CMD_ARGV[0]);
+               command_print(CMD, "Unknown command: %s", CMD_ARGV[0]);
                r = ERROR_COMMAND_SYNTAX_ERROR;
        }
        return r;
@@ -3120,7 +3159,7 @@ COMMAND_HANDLER(sam4_handle_slowclk_command)
 {
        struct sam4_chip *pChip;
 
-       pChip = get_current_sam4(CMD_CTX);
+       pChip = get_current_sam4(CMD);
        if (!pChip)
                return ERROR_OK;
 
@@ -3135,7 +3174,7 @@ COMMAND_HANDLER(sam4_handle_slowclk_command)
                        COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], v);
                        if (v > 200000) {
                                /* absurd slow clock of 200Khz? */
-                               command_print(CMD_CTX, "Absurd/illegal slow clock freq: %d\n", (int)(v));
+                               command_print(CMD, "Absurd/illegal slow clock freq: %d\n", (int)(v));
                                return ERROR_COMMAND_SYNTAX_ERROR;
                        }
                        pChip->cfg.slow_freq = v;
@@ -3143,11 +3182,10 @@ COMMAND_HANDLER(sam4_handle_slowclk_command)
                }
                default:
                        /* error */
-                       command_print(CMD_CTX, "Too many parameters");
+                       command_print(CMD, "Too many parameters");
                        return ERROR_COMMAND_SYNTAX_ERROR;
-                       break;
        }
-       command_print(CMD_CTX, "Slowclk freq: %d.%03dkhz",
+       command_print(CMD, "Slowclk freq: %d.%03dkhz",
                (int)(pChip->cfg.slow_freq / 1000),
                (int)(pChip->cfg.slow_freq % 1000));
        return ERROR_OK;
@@ -3167,8 +3205,9 @@ static const struct command_registration at91sam4_exec_command_handlers[] = {
                .name = "info",
                .handler = sam4_handle_info_command,
                .mode = COMMAND_EXEC,
-               .help = "Print information about the current at91sam4 chip"
+               .help = "Print information about the current at91sam4 chip "
                        "and its flash configuration.",
+               .usage = "",
        },
        {
                .name = "slowclk",
@@ -3191,7 +3230,7 @@ static const struct command_registration at91sam4_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct flash_driver at91sam4_flash = {
+const struct flash_driver at91sam4_flash = {
        .name = "at91sam4",
        .commands = at91sam4_command_handlers,
        .flash_bank_command = sam4_flash_bank_command,
@@ -3203,5 +3242,6 @@ struct flash_driver at91sam4_flash = {
        .auto_probe = sam4_auto_probe,
        .erase_check = default_flash_blank_check,
        .protect_check = sam4_protect_check,
+       .info = sam4_info,
        .free_driver_priv = sam4_free_driver_priv,
 };