This is an automated email from Gerrit.

Roman Dmitrienko (m...@iamroman.org) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/1116

-- gerrit

commit d3d670ad8b4193697ebc0807c88fa8ecba79f927
Author: Roman D <m...@iamroman.org>
Date:   Fri Jan 18 10:53:43 2013 +0400

    flash: EFM32 GG/LG page size detection fix
    
    Fixed flash page size detection according to EFM32 GG/LG errata.
    MEM_INFO_PAGE_SIZE register containts invalid value in devices with
    revision number lower than 18 and should not be used.
    
    Change-Id: Idb2832246efcbbec2fd98a5c458f72a36df386fb
    Signed-off-by: Roman D <m...@iamroman.org>

diff --git a/src/flash/nor/efm32.c b/src/flash/nor/efm32.c
index 5756649..37cb79b 100644
--- a/src/flash/nor/efm32.c
+++ b/src/flash/nor/efm32.c
@@ -169,14 +169,22 @@ static int efm32x_read_info(struct flash_bank *bank,
                efm32_info->page_size = 512;
        else if (EFM_FAMILY_ID_GIANT_GECKO == efm32_info->part_family ||
                        EFM_FAMILY_ID_LEOPARD_GECKO == efm32_info->part_family) 
{
-               uint8_t pg_size = 0;
-
-               ret = target_read_u8(bank->target, EFM32_MSC_DI_PAGE_SIZE,
-                       &pg_size);
-               if (ERROR_OK != ret)
-                       return ret;
-
-               efm32_info->page_size = (1 << ((pg_size+10) & 0xff));
+               if (efm32_info->prod_rev >= 18) {
+                       uint8_t pg_size = 0;
+                       ret = target_read_u8(bank->target, 
EFM32_MSC_DI_PAGE_SIZE,
+                               &pg_size);
+                       if (ERROR_OK != ret)
+                               return ret;
+
+                       efm32_info->page_size = (1 << ((pg_size+10) & 0xff));
+               } else {
+                       /* EFM32 GG/LG errata: MEM_INFO_PAGE_SIZE is invalid
+                          for MCUs with PROD_REV < 18 */
+                       if (efm32_info->flash_sz_kib < 512)
+                               efm32_info->page_size = 2048;
+                       else
+                               efm32_info->page_size = 4096;
+               }
 
                if ((2048 != efm32_info->page_size) &&
                                (4096 != efm32_info->page_size)) {

-- 

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to