This is an automated email from Gerrit.

Tomas Vanek ([email protected]) just uploaded a new patch set to Gerrit, which you 
can find at http://openocd.zylin.com/4324

-- gerrit

commit 33fc1f0be03bae6cbf2214600d00cf18e62eac6f
Author: Tomas Vanek <[email protected]>
Date:   Sat Jan 6 12:10:12 2018 +0100

    flash/nor/psoc4: adjust flash size limited by wounding
    
    All credit goes to Dmitry Grinberg
    http://dmitry.gr/index.php?r=05.Projects&proj=24.%20PSoC4%20confidential
    
    Change-Id: Iae8fd6f11a7f62e8ffe970473688f6fac5a0a261
    Signed-off-by: Tomas Vanek <[email protected]>

diff --git a/src/flash/nor/psoc4.c b/src/flash/nor/psoc4.c
index 1d861ed..d4ce1fb 100644
--- a/src/flash/nor/psoc4.c
+++ b/src/flash/nor/psoc4.c
@@ -78,6 +78,8 @@
 
  CYBL10x6x, CY8C4127_BL, CY8C4247_BL Programming Specifications
        Document No. 001-91508 Rev. *B September 22, 2014
+
+ http://dmitry.gr/index.php?r=05.Projects&proj=24.%20PSoC4%20confidential
 */
 
 /* register locations */
@@ -717,6 +719,22 @@ cleanup:
 }
 
 
+/* Due to Cypress's method of market segmentation some devices
+ * have accessible only 1/2, 1/4 or 1/8 of SPCIF described flash */
+static int psoc4_test_flash_wounding(struct target *target, uint32_t 
flash_size)
+{
+       int retval, i;
+       for (i = 3; i >= 1; i--) {
+               uint32_t addr = flash_size >> i;
+               uint32_t dummy;
+               retval = target_read_u32(target, addr, &dummy);
+               if (retval != ERROR_OK)
+                       return i;
+       }
+       return 0;
+}
+
+
 static int psoc4_probe(struct flash_bank *bank)
 {
        struct psoc4_flash_bank *psoc4_info = bank->driver_priv;
@@ -798,6 +816,15 @@ static int psoc4_probe(struct flash_bank *bank)
        if (num_macros != (num_rows + PSOC4_ROWS_PER_MACRO - 1) / 
PSOC4_ROWS_PER_MACRO)
                LOG_WARNING("Number of macros does not correspond with flash 
size!");
 
+       if (!psoc4_info->legacy_family) {
+               int wounding = psoc4_test_flash_wounding(target, num_rows * 
row_size);
+               if (wounding > 0) {
+                       flash_size_in_kb = flash_size_in_kb >> wounding;
+                       num_rows = num_rows >> wounding;
+                       LOG_INFO("WOUNDING detected: accessible flash size %" 
PRIu32 " kbytes", flash_size_in_kb);
+               }
+       }
+
        if (bank->sectors) {
                free(bank->sectors);
        }

-- 

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to