FLASH/STMSMI: fix clang "dead store" warning
[fw/openocd] / src / flash / nor / lpc2900.c
index e17823ec2dee513eb63c29de21022960d7b84fa9..7bb9f141b28a9310b327b180ae13ca5b0a72753a 100644 (file)
  */
 struct lpc2900_flash_bank
 {
+       /**
+        * This flag is set when the device has been successfully probed.
+        */
+       bool is_probed;
+
        /**
         * Holds the value read from CHIPID register.
         * The driver will not load if the chipid doesn't match the expected
@@ -179,7 +184,7 @@ static uint32_t lpc2900_run_bist128(struct flash_bank *bank,
                                     uint32_t addr_from, uint32_t addr_to,
                                     uint32_t (*signature)[4] );
 static uint32_t lpc2900_address2sector(struct flash_bank *bank, uint32_t offset);
-static uint32_t lpc2900_calc_tr( uint32_t clock, uint32_t time );
+static uint32_t lpc2900_calc_tr(uint32_t clock_var, uint32_t time_var);
 
 
 /***********************  Helper functions  **************************/
@@ -255,7 +260,7 @@ static uint32_t lpc2900_is_ready( struct flash_bank *bank )
 {
        struct lpc2900_flash_bank *lpc2900_info = bank->driver_priv;
 
-       if( lpc2900_info->chipid != EXPECTED_CHIPID )
+       if( !lpc2900_info->is_probed )
        {
                return ERROR_FLASH_BANK_NOT_PROBED;
        }
@@ -512,8 +517,6 @@ static uint32_t lpc2900_calc_tr( uint32_t clock_var, uint32_t time_var )
        /*           ((time[µs]/1e6) * f[Hz]) + 511
         * FPTR.TR = -------------------------------
         *                         512
-        *
-        * The result is the
         */
 
        uint32_t tr_val = (uint32_t)((((time_var / 1e6) * clock_var) + 511.0) / 512.0);
@@ -1050,6 +1053,7 @@ FLASH_BANK_COMMAND_HANDLER(lpc2900_flash_bank_command)
 
        /* Chip ID will be obtained by probing the device later */
        lpc2900_info->chipid = 0;
+       lpc2900_info->is_probed = false;
 
        return ERROR_OK;
 }
@@ -1554,10 +1558,8 @@ static int lpc2900_probe(struct flash_bank *bank)
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       /* We want to do this only once. Check if we already have a valid CHIPID,
-        * because then we will have already successfully probed the device.
-        */
-       if (lpc2900_info->chipid == EXPECTED_CHIPID)
+       /* We want to do this only once. */
+       if (lpc2900_info->is_probed)
        {
                return ERROR_OK;
        }
@@ -1636,7 +1638,11 @@ static int lpc2900_probe(struct flash_bank *bank)
                else if ( package_code == 4 )
                {
                        /* 144-pin package */
-                       if ( (bank->size == 512*KiB) && (feat3 == 0xFFFFFCF0) )
+                       if ( (bank->size == 256*KiB) && (feat3 == 0xFFFFFFE9) )
+                       {
+                               lpc2900_info->target_name = "LPC2926";
+                       }
+                       else if ( (bank->size == 512*KiB) && (feat3 == 0xFFFFFCF0) )
                        {
                                lpc2900_info->target_name = "LPC2917/01";
                        }
@@ -1670,7 +1676,11 @@ static int lpc2900_probe(struct flash_bank *bank)
 
        if ( !found )
        {
-               LOG_WARNING("Unknown LPC29xx derivative");
+               LOG_WARNING("Unknown LPC29xx derivative"
+                           " (FEATx="
+                           "%08" PRIx32 ":%08" PRIx32 ":%08" PRIx32 ":%08" PRIx32 ")",
+                                       feat0, feat1, feat2, feat3
+                                       );
                return ERROR_FLASH_OPERATION_FAILED;
        }
 
@@ -1723,6 +1733,8 @@ static int lpc2900_probe(struct flash_bank *bank)
                offset += bank->sectors[i].size;
        }
 
+       lpc2900_info->is_probed = true;
+
        /* Read sector security status */
        if ( lpc2900_read_security_status(bank) != ERROR_OK )
        {