This is an automated email from Gerrit.

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

-- gerrit

commit 1933669f3c182c0899871adfde5ea94bc49cc5a7
Author: George Harris <[email protected]>
Date:   Thu Aug 16 17:35:39 2012 -0700

    SPI nor drivers refactor
    
    Moved common SPI flash driver code (device table,
    common commands) into flash/nor/spi.c and spi.h.
    Updated flash/nor/stmsmi.c to reflect this refactor.
    
    Change-Id: I141644b0af71d3835f29f06dd15b505a00e5b6ec
    Signed-off-by: George Harris <[email protected]>

diff --git a/src/flash/nor/Makefile.am b/src/flash/nor/Makefile.am
index fc64602..d26aa20 100644
--- a/src/flash/nor/Makefile.am
+++ b/src/flash/nor/Makefile.am
@@ -22,6 +22,7 @@ NOR_DRIVERS = \
        non_cfi.c \
        ocl.c \
        pic32mx.c \
+       spi.c \
        stmsmi.c \
        stellaris.c \
        stm32f1x.c \
@@ -42,6 +43,7 @@ noinst_HEADERS = \
        driver.h \
        imp.h \
        non_cfi.h \
-       ocl.h
+       ocl.h \
+       spi.h
 
 MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
diff --git a/src/flash/nor/spi.c b/src/flash/nor/spi.c
new file mode 100644
index 0000000..7046edd
--- /dev/null
+++ b/src/flash/nor/spi.c
@@ -0,0 +1,70 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by George Harris                                   *
+ *   [email protected]                                            *
+ *                                                                         *
+ *   Copyright (C) 2010 by Antonio Borneo                                  *
+ *   [email protected]                                              *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "imp.h"
+#include "spi.h"
+#include <jtag/jtag.h>
+
+ /* Shared table of known SPI flash devices for SPI-based flash drivers. Taken
+  * from device datasheets and Linux SPI flash drivers. */
+struct flash_device flash_devices[] = {
+       /* name, erase_cmd, chip_erase_cmd, device_id, pagesize, sectorsize, 
size_in_bytes */
+       FLASH_ID("st m25p05",      0xd8, 0xC7, 0x00102020, 0x80,  0x8000,  
0x10000),
+       FLASH_ID("st m25p10",      0xd8, 0xC7, 0x00112020, 0x80,  0x8000,  
0x20000),
+       FLASH_ID("st m25p20",      0xd8, 0xC7, 0x00122020, 0x100, 0x10000, 
0x40000),
+       FLASH_ID("st m25p40",      0xd8, 0xC7, 0x00132020, 0x100, 0x10000, 
0x80000),
+       FLASH_ID("st m25p80",      0xd8, 0xC7, 0x00142020, 0x100, 0x10000, 
0x100000),
+       FLASH_ID("st m25p16",      0xd8, 0xC7, 0x00152020, 0x100, 0x10000, 
0x200000),
+       FLASH_ID("st m25p32",      0xd8, 0xC7, 0x00162020, 0x100, 0x10000, 
0x400000),
+       FLASH_ID("st m25p64",      0xd8, 0xC7, 0x00172020, 0x100, 0x10000, 
0x800000),
+       FLASH_ID("st m25p128",     0xd8, 0xC7, 0x00182020, 0x100, 0x40000, 
0x1000000),
+       FLASH_ID("st m45pe10",     0xd8, 0xd8, 0x00114020, 0x100, 0x10000, 
0x20000),
+       FLASH_ID("st m45pe20",     0xd8, 0xd8, 0x00124020, 0x100, 0x10000, 
0x40000),
+       FLASH_ID("st m45pe40",     0xd8, 0xd8, 0x00134020, 0x100, 0x10000, 
0x80000),
+       FLASH_ID("st m45pe80",     0xd8, 0xd8, 0x00144020, 0x100, 0x10000, 
0x100000),
+       FLASH_ID("sp s25fl004",    0xd8, 0xC7, 0x00120201, 0x100, 0x10000, 
0x80000),
+       FLASH_ID("sp s25fl008",    0xd8, 0xC7, 0x00130201, 0x100, 0x10000, 
0x100000),
+       FLASH_ID("sp s25fl016",    0xd8, 0xC7, 0x00140201, 0x100, 0x10000, 
0x200000),
+       FLASH_ID("sp s25fl032",    0xd8, 0xC7, 0x00150201, 0x100, 0x10000, 
0x400000),
+       FLASH_ID("sp s25fl064",    0xd8, 0xC7, 0x00160201, 0x100, 0x10000, 
0x800000),
+       FLASH_ID("atmel 25f512",   0x52, 0xC7, 0x0065001f, 0x80,  0x8000,  
0x10000),
+       FLASH_ID("atmel 25f1024",  0x52, 0x62, 0x0060001f, 0x100, 0x8000,  
0x20000),
+       FLASH_ID("atmel 25f2048",  0x52, 0x62, 0x0063001f, 0x100, 0x10000, 
0x40000),
+       FLASH_ID("atmel 25f4096",  0x52, 0x62, 0x0064001f, 0x100, 0x10000, 
0x80000),
+       FLASH_ID("atmel 25fs040",  0xd7, 0xC7, 0x0004661f, 0x100, 0x10000, 
0x80000),
+       FLASH_ID("mac 25l512",     0xd8, 0xC7, 0x001020c2, 0x010, 0x10000, 
0x10000),
+       FLASH_ID("mac 25l1005",    0xd8, 0xd8, 0x001120c2, 0x010, 0x10000, 
0x20000),
+       FLASH_ID("mac 25l2005",    0xd8, 0xC7, 0x001220c2, 0x010, 0x10000, 
0x40000),
+       FLASH_ID("mac 25l4005",    0xd8, 0xC7, 0x001320c2, 0x010, 0x10000, 
0x80000),
+       FLASH_ID("mac 25l8005",    0xd8, 0xC7, 0x001420c2, 0x010, 0x10000, 
0x100000),
+       FLASH_ID("mac 25l1605",    0xd8, 0xC7, 0x001520c2, 0x100, 0x10000, 
0x200000),
+       FLASH_ID("mac 25l3205",    0xd8, 0xC7, 0x001620c2, 0x100, 0x10000, 
0x400000),
+       FLASH_ID("mac 25l6405",    0xd8, 0xC7, 0x001720c2, 0x100, 0x10000, 
0x800000),
+       FLASH_ID("win w25q32dw",   0xd8, 0xC7, 0x001660ef, 0x100, 0x10000, 
0x400000),
+       FLASH_ID(NULL,             0,    0,        0,          0,     0,       
0)
+};
diff --git a/src/flash/nor/spi.h b/src/flash/nor/spi.h
new file mode 100644
index 0000000..a75fea1
--- /dev/null
+++ b/src/flash/nor/spi.h
@@ -0,0 +1,58 @@
+/***************************************************************************
+ *   Copyright (C) 2012 by George Harris                                   *
+ *   [email protected]                                            *
+ *                                                                         *
+ *   Copyright (C) 2010 by Antonio Borneo                                  *
+ *   [email protected]                                              *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+/* data structure to maintain flash ids from different vendors */
+struct flash_device {
+       char *name;
+       uint8_t erase_cmd;
+       uint8_t chip_erase_cmd;
+       uint32_t device_id;
+       uint32_t pagesize;
+       unsigned long sectorsize;
+       unsigned long size_in_bytes;
+};
+
+#define FLASH_ID(n, es, ces, id, psize, ssize, size) \
+{                              \
+       .name = n,              \
+       .erase_cmd = es,        \
+       .chip_erase_cmd = ces,  \
+       .device_id = id,        \
+       .pagesize = psize,      \
+       .sectorsize = ssize,    \
+       .size_in_bytes = size   \
+}
+
+extern struct flash_device flash_devices[];
+
+/* fields in SPI flash status register */
+#define SPIFLASH_BSY_BIT               0x00000001 /* WIP Bit of SPI SR on SMI 
SR */
+#define SPIFLASH_WE_BIT                        0x00000002 /* WEL Bit of SPI SR 
on SMI SR */
+
+/* SPI Flash Commands */
+#define SPIFLASH_READ_ID           0x9F /* Read Flash Identification */
+#define SPIFLASH_READ_STATUS   0x05 /* Read Status Register */
+#define SPIFLASH_WRITE_ENABLE  0x06 /* Write Enable */
+#define SPIFLASH_PAGE_PROGRAM  0x02 /* Page Program */
+#define SPIFLASH_FAST_READ             0x0B /* Fast Read */
+#define SPIFLASH_READ                  0x03 /* Normal Read */
diff --git a/src/flash/nor/stmsmi.c b/src/flash/nor/stmsmi.c
index bf26a8e..dffc9cd 100644
--- a/src/flash/nor/stmsmi.c
+++ b/src/flash/nor/stmsmi.c
@@ -39,6 +39,7 @@
 #endif
 
 #include "imp.h"
+#include "spi.h"
 #include <jtag/jtag.h>
 #include <helper/time_support.h>
 
@@ -105,8 +106,6 @@
 #define SMI_SEL_BANK3     0x00003000 /* Select Bank3 */
 
 /* fields in SMI_SR */
-#define SMI_WIP_BIT       0x00000001 /* WIP Bit of SPI SR on SMI SR */
-#define SMI_WEL_BIT       0x00000002 /* WEL Bit of SPI SR on SMI SR */
 #define SMI_TFF           0x00000100 /* Transfer Finished Flag */
 
 /* Commands */
@@ -124,65 +123,6 @@ struct stmsmi_flash_bank {
        struct flash_device *dev;
 };
 
-/* data structure to maintain flash ids from different vendors */
-struct flash_device {
-       char *name;
-       uint8_t erase_cmd;
-       uint32_t device_id;
-       uint32_t pagesize;
-       unsigned long sectorsize;
-       unsigned long size_in_bytes;
-};
-
-#define FLASH_ID(n, es, id, psize, ssize, size) \
-{                              \
-       .name = n,              \
-       .erase_cmd = es,        \
-       .device_id = id,        \
-       .pagesize = psize,      \
-       .sectorsize = ssize,    \
-       .size_in_bytes = size   \
-}
-
-/* List below is taken from Linux driver. It is not exhaustive of all the
- * possible SPI memories, nor exclusive for SMI. Could be shared with
- * other SPI drivers. */
-static struct flash_device flash_devices[] = {
-       /* name, erase_cmd, device_id, pagesize, sectorsize, size_in_bytes */
-       FLASH_ID("st m25p05",      0xd8, 0x00102020, 0x80,  0x8000,  0x10000),
-       FLASH_ID("st m25p10",      0xd8, 0x00112020, 0x80,  0x8000,  0x20000),
-       FLASH_ID("st m25p20",      0xd8, 0x00122020, 0x100, 0x10000, 0x40000),
-       FLASH_ID("st m25p40",      0xd8, 0x00132020, 0x100, 0x10000, 0x80000),
-       FLASH_ID("st m25p80",      0xd8, 0x00142020, 0x100, 0x10000, 0x100000),
-       FLASH_ID("st m25p16",      0xd8, 0x00152020, 0x100, 0x10000, 0x200000),
-       FLASH_ID("st m25p32",      0xd8, 0x00162020, 0x100, 0x10000, 0x400000),
-       FLASH_ID("st m25p64",      0xd8, 0x00172020, 0x100, 0x10000, 0x800000),
-       FLASH_ID("st m25p128",     0xd8, 0x00182020, 0x100, 0x40000, 0x1000000),
-       FLASH_ID("st m45pe10",     0xd8, 0x00114020, 0x100, 0x10000, 0x20000),
-       FLASH_ID("st m45pe20",     0xd8, 0x00124020, 0x100, 0x10000, 0x40000),
-       FLASH_ID("st m45pe40",     0xd8, 0x00134020, 0x100, 0x10000, 0x80000),
-       FLASH_ID("st m45pe80",     0xd8, 0x00144020, 0x100, 0x10000, 0x100000),
-       FLASH_ID("sp s25fl004",    0xd8, 0x00120201, 0x100, 0x10000, 0x80000),
-       FLASH_ID("sp s25fl008",    0xd8, 0x00130201, 0x100, 0x10000, 0x100000),
-       FLASH_ID("sp s25fl016",    0xd8, 0x00140201, 0x100, 0x10000, 0x200000),
-       FLASH_ID("sp s25fl032",    0xd8, 0x00150201, 0x100, 0x10000, 0x400000),
-       FLASH_ID("sp s25fl064",    0xd8, 0x00160201, 0x100, 0x10000, 0x800000),
-       FLASH_ID("atmel 25f512",   0x52, 0x0065001f, 0x80,  0x8000,  0x10000),
-       FLASH_ID("atmel 25f1024",  0x52, 0x0060001f, 0x100, 0x8000,  0x20000),
-       FLASH_ID("atmel 25f2048",  0x52, 0x0063001f, 0x100, 0x10000, 0x40000),
-       FLASH_ID("atmel 25f4096",  0x52, 0x0064001f, 0x100, 0x10000, 0x80000),
-       FLASH_ID("atmel 25fs040",  0xd7, 0x0004661f, 0x100, 0x10000, 0x80000),
-       FLASH_ID("mac 25l512",     0xd8, 0x001020c2, 0x010, 0x10000, 0x10000),
-       FLASH_ID("mac 25l1005",    0xd8, 0x001120c2, 0x010, 0x10000, 0x20000),
-       FLASH_ID("mac 25l2005",    0xd8, 0x001220c2, 0x010, 0x10000, 0x40000),
-       FLASH_ID("mac 25l4005",    0xd8, 0x001320c2, 0x010, 0x10000, 0x80000),
-       FLASH_ID("mac 25l8005",    0xd8, 0x001420c2, 0x010, 0x10000, 0x100000),
-       FLASH_ID("mac 25l1605",    0xd8, 0x001520c2, 0x100, 0x10000, 0x200000),
-       FLASH_ID("mac 25l3205",    0xd8, 0x001620c2, 0x100, 0x10000, 0x400000),
-       FLASH_ID("mac 25l6405",    0xd8, 0x001720c2, 0x100, 0x10000, 0x800000),
-       FLASH_ID(NULL,             0,    0,          0,     0,       0)
-};
-
 struct stmsmi_target {
        char *name;
        uint32_t tap_idcode;
@@ -282,7 +222,7 @@ static int wait_till_ready(struct flash_bank *bank, int 
timeout)
                if (retval != ERROR_OK)
                        return retval;
 
-               if ((status & SMI_WIP_BIT) == 0)
+               if ((status & SPIFLASH_BSY_BIT) == 0)
                        return ERROR_OK;
                alive_sleep(1);
        } while (timeval_ms() < endtime);
@@ -320,7 +260,7 @@ static int smi_write_enable(struct flash_bank *bank)
                return retval;
 
        /* Check write enabled */
-       if ((status & SMI_WEL_BIT) == 0) {
+       if ((status & SPIFLASH_WE_BIT) == 0) {
                LOG_ERROR("Cannot enable write to flash. Status=0x%08" PRIx32, 
status);
                return ERROR_FAIL;
        }

-- 

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to