Commit 33adfb5f9b06ac1a386dddc222cc50e24a9909e2

Authored by Jagannadha Sutradharudu Teki
1 parent 35ba667df4

sf: Separate the flash params table

Moved the flash params table from sf_probe.c and
placed on to sf_params.c, hence flash params file will
alter based on new addons.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>

Showing 4 changed files with 158 additions and 145 deletions Side-by-side Diff

drivers/mtd/spi/Makefile
... ... @@ -10,8 +10,8 @@
10 10 obj-$(CONFIG_SPL_SPI_BOOT) += fsl_espi_spl.o
11 11 endif
12 12  
13   -obj-$(CONFIG_CMD_SF) += sf.o
14   -obj-$(CONFIG_SPI_FLASH) += sf_probe.o sf_ops.o
  13 +obj-$(CONFIG_CMD_SF) += sf.o
  14 +obj-$(CONFIG_SPI_FLASH) += sf_params.o sf_probe.o sf_ops.o
15 15 obj-$(CONFIG_SPI_FRAM_RAMTRON) += ramtron.o
16 16 obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o
17 17 obj-$(CONFIG_SPI_M95XXX) += eeprom_m95xxx.o
drivers/mtd/spi/sf_params.c
  1 +/*
  2 + * SPI flash Params table
  3 + *
  4 + * Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc.
  5 + *
  6 + * SPDX-License-Identifier: GPL-2.0+
  7 + */
  8 +
  9 +#include <common.h>
  10 +#include <spi_flash.h>
  11 +
  12 +#include "sf_internal.h"
  13 +
  14 +/* SPI/QSPI flash device params structure */
  15 +const struct spi_flash_params spi_flash_params_table[] = {
  16 +#ifdef CONFIG_SPI_FLASH_ATMEL /* ATMEL */
  17 + {"AT45DB011D", 0x1f2200, 0x0, 64 * 1024, 4, 0, SECT_4K},
  18 + {"AT45DB021D", 0x1f2300, 0x0, 64 * 1024, 8, 0, SECT_4K},
  19 + {"AT45DB041D", 0x1f2400, 0x0, 64 * 1024, 8, 0, SECT_4K},
  20 + {"AT45DB081D", 0x1f2500, 0x0, 64 * 1024, 16, 0, SECT_4K},
  21 + {"AT45DB161D", 0x1f2600, 0x0, 64 * 1024, 32, 0, SECT_4K},
  22 + {"AT45DB321D", 0x1f2700, 0x0, 64 * 1024, 64, 0, SECT_4K},
  23 + {"AT45DB641D", 0x1f2800, 0x0, 64 * 1024, 128, 0, SECT_4K},
  24 + {"AT25DF321", 0x1f4701, 0x0, 64 * 1024, 64, 0, SECT_4K},
  25 +#endif
  26 +#ifdef CONFIG_SPI_FLASH_EON /* EON */
  27 + {"EN25Q32B", 0x1c3016, 0x0, 64 * 1024, 64, 0, 0},
  28 + {"EN25Q64", 0x1c3017, 0x0, 64 * 1024, 128, 0, SECT_4K},
  29 + {"EN25Q128B", 0x1c3018, 0x0, 64 * 1024, 256, 0, 0},
  30 + {"EN25S64", 0x1c3817, 0x0, 64 * 1024, 128, 0, 0},
  31 +#endif
  32 +#ifdef CONFIG_SPI_FLASH_GIGADEVICE /* GIGADEVICE */
  33 + {"GD25Q64B", 0xc84017, 0x0, 64 * 1024, 128, 0, SECT_4K},
  34 + {"GD25LQ32", 0xc86016, 0x0, 64 * 1024, 64, 0, SECT_4K},
  35 +#endif
  36 +#ifdef CONFIG_SPI_FLASH_MACRONIX /* MACRONIX */
  37 + {"MX25L2006E", 0xc22012, 0x0, 64 * 1024, 4, 0, 0},
  38 + {"MX25L4005", 0xc22013, 0x0, 64 * 1024, 8, 0, 0},
  39 + {"MX25L8005", 0xc22014, 0x0, 64 * 1024, 16, 0, 0},
  40 + {"MX25L1605D", 0xc22015, 0x0, 64 * 1024, 32, 0, 0},
  41 + {"MX25L3205D", 0xc22016, 0x0, 64 * 1024, 64, 0, 0},
  42 + {"MX25L6405D", 0xc22017, 0x0, 64 * 1024, 128, 0, 0},
  43 + {"MX25L12805", 0xc22018, 0x0, 64 * 1024, 256, 0, 0},
  44 + {"MX25L25635F", 0xc22019, 0x0, 64 * 1024, 512, 0, 0},
  45 + {"MX25L51235F", 0xc2201a, 0x0, 64 * 1024, 1024, 0, 0},
  46 + {"MX25L12855E", 0xc22618, 0x0, 64 * 1024, 256, 0, 0},
  47 +#endif
  48 +#ifdef CONFIG_SPI_FLASH_SPANSION /* SPANSION */
  49 + {"S25FL008A", 0x010213, 0x0, 64 * 1024, 16, 0, 0},
  50 + {"S25FL016A", 0x010214, 0x0, 64 * 1024, 32, 0, 0},
  51 + {"S25FL032A", 0x010215, 0x0, 64 * 1024, 64, 0, 0},
  52 + {"S25FL064A", 0x010216, 0x0, 64 * 1024, 128, 0, 0},
  53 + {"S25FL128P_256K", 0x012018, 0x0300, 256 * 1024, 64, RD_FULL, WR_QPP},
  54 + {"S25FL128P_64K", 0x012018, 0x0301, 64 * 1024, 256, RD_FULL, WR_QPP},
  55 + {"S25FL032P", 0x010215, 0x4d00, 64 * 1024, 64, RD_FULL, WR_QPP},
  56 + {"S25FL064P", 0x010216, 0x4d00, 64 * 1024, 128, RD_FULL, WR_QPP},
  57 + {"S25FL128S_64K", 0x012018, 0x4d01, 64 * 1024, 256, RD_FULL, WR_QPP},
  58 + {"S25FL256S_256K", 0x010219, 0x4d00, 64 * 1024, 512, RD_FULL, WR_QPP},
  59 + {"S25FL256S_64K", 0x010219, 0x4d01, 64 * 1024, 512, RD_FULL, WR_QPP},
  60 + {"S25FL512S_256K", 0x010220, 0x4d00, 64 * 1024, 1024, RD_FULL, WR_QPP},
  61 + {"S25FL512S_64K", 0x010220, 0x4d01, 64 * 1024, 1024, RD_FULL, WR_QPP},
  62 +#endif
  63 +#ifdef CONFIG_SPI_FLASH_STMICRO /* STMICRO */
  64 + {"M25P10", 0x202011, 0x0, 32 * 1024, 4, 0, 0},
  65 + {"M25P20", 0x202012, 0x0, 64 * 1024, 4, 0, 0},
  66 + {"M25P40", 0x202013, 0x0, 64 * 1024, 8, 0, 0},
  67 + {"M25P80", 0x202014, 0x0, 64 * 1024, 16, 0, 0},
  68 + {"M25P16", 0x202015, 0x0, 64 * 1024, 32, 0, 0},
  69 + {"M25P32", 0x202016, 0x0, 64 * 1024, 64, 0, 0},
  70 + {"M25P64", 0x202017, 0x0, 64 * 1024, 128, 0, 0},
  71 + {"M25P128", 0x202018, 0x0, 256 * 1024, 64, 0, 0},
  72 + {"N25Q32", 0x20ba16, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
  73 + {"N25Q32A", 0x20bb16, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
  74 + {"N25Q64", 0x20ba17, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
  75 + {"N25Q64A", 0x20bb17, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
  76 + {"N25Q128", 0x20ba18, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
  77 + {"N25Q128A", 0x20bb18, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
  78 + {"N25Q256", 0x20ba19, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
  79 + {"N25Q256A", 0x20bb19, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
  80 + {"N25Q512", 0x20ba20, 0x0, 64 * 1024, 1024, RD_FULL, WR_QPP | E_FSR | SECT_4K},
  81 + {"N25Q512A", 0x20bb20, 0x0, 64 * 1024, 1024, RD_FULL, WR_QPP | E_FSR | SECT_4K},
  82 + {"N25Q1024", 0x20ba21, 0x0, 64 * 1024, 2048, RD_FULL, WR_QPP | E_FSR | SECT_4K},
  83 + {"N25Q1024A", 0x20bb21, 0x0, 64 * 1024, 2048, RD_FULL, WR_QPP | E_FSR | SECT_4K},
  84 +#endif
  85 +#ifdef CONFIG_SPI_FLASH_SST /* SST */
  86 + {"SST25VF040B", 0xbf258d, 0x0, 64 * 1024, 8, 0, SECT_4K | SST_WP},
  87 + {"SST25VF080B", 0xbf258e, 0x0, 64 * 1024, 16, 0, SECT_4K | SST_WP},
  88 + {"SST25VF016B", 0xbf2541, 0x0, 64 * 1024, 32, 0, SECT_4K | SST_WP},
  89 + {"SST25VF032B", 0xbf254a, 0x0, 64 * 1024, 64, 0, SECT_4K | SST_WP},
  90 + {"SST25VF064C", 0xbf254b, 0x0, 64 * 1024, 128, 0, SECT_4K},
  91 + {"SST25WF512", 0xbf2501, 0x0, 64 * 1024, 1, 0, SECT_4K | SST_WP},
  92 + {"SST25WF010", 0xbf2502, 0x0, 64 * 1024, 2, 0, SECT_4K | SST_WP},
  93 + {"SST25WF020", 0xbf2503, 0x0, 64 * 1024, 4, 0, SECT_4K | SST_WP},
  94 + {"SST25WF040", 0xbf2504, 0x0, 64 * 1024, 8, 0, SECT_4K | SST_WP},
  95 + {"SST25WF080", 0xbf2505, 0x0, 64 * 1024, 16, 0, SECT_4K | SST_WP},
  96 +#endif
  97 +#ifdef CONFIG_SPI_FLASH_WINBOND /* WINBOND */
  98 + {"W25P80", 0xef2014, 0x0, 64 * 1024, 16, 0, 0},
  99 + {"W25P16", 0xef2015, 0x0, 64 * 1024, 32, 0, 0},
  100 + {"W25P32", 0xef2016, 0x0, 64 * 1024, 64, 0, 0},
  101 + {"W25X40", 0xef3013, 0x0, 64 * 1024, 8, 0, SECT_4K},
  102 + {"W25X16", 0xef3015, 0x0, 64 * 1024, 32, 0, SECT_4K},
  103 + {"W25X32", 0xef3016, 0x0, 64 * 1024, 64, 0, SECT_4K},
  104 + {"W25X64", 0xef3017, 0x0, 64 * 1024, 128, 0, SECT_4K},
  105 + {"W25Q80BL", 0xef4014, 0x0, 64 * 1024, 16, RD_FULL, WR_QPP | SECT_4K},
  106 + {"W25Q16CL", 0xef4015, 0x0, 64 * 1024, 32, RD_FULL, WR_QPP | SECT_4K},
  107 + {"W25Q32BV", 0xef4016, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
  108 + {"W25Q64CV", 0xef4017, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
  109 + {"W25Q128BV", 0xef4018, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
  110 + {"W25Q256", 0xef4019, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
  111 + {"W25Q80BW", 0xef5014, 0x0, 64 * 1024, 16, RD_FULL, WR_QPP | SECT_4K},
  112 + {"W25Q16DW", 0xef6015, 0x0, 64 * 1024, 32, RD_FULL, WR_QPP | SECT_4K},
  113 + {"W25Q32DW", 0xef6016, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
  114 + {"W25Q64DW", 0xef6017, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
  115 + {"W25Q128FW", 0xef6018, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
  116 +#endif
  117 + /*
  118 + * Note:
  119 + * Below paired flash devices has similar spi_flash params.
  120 + * (S25FL129P_64K, S25FL128S_64K)
  121 + * (W25Q80BL, W25Q80BV)
  122 + * (W25Q16CL, W25Q16DV)
  123 + * (W25Q32BV, W25Q32FV_SPI)
  124 + * (W25Q64CV, W25Q64FV_SPI)
  125 + * (W25Q128BV, W25Q128FV_SPI)
  126 + * (W25Q32DW, W25Q32FV_QPI)
  127 + * (W25Q64DW, W25Q64FV_QPI)
  128 + * (W25Q128FW, W25Q128FV_QPI)
  129 + */
  130 +};
drivers/mtd/spi/sf_probe.c
... ... @@ -19,144 +19,6 @@
19 19  
20 20 DECLARE_GLOBAL_DATA_PTR;
21 21  
22   -/**
23   - * struct spi_flash_params - SPI/QSPI flash device params structure
24   - *
25   - * @name: Device name ([MANUFLETTER][DEVTYPE][DENSITY][EXTRAINFO])
26   - * @jedec: Device jedec ID (0x[1byte_manuf_id][2byte_dev_id])
27   - * @ext_jedec: Device ext_jedec ID
28   - * @sector_size: Sector size of this device
29   - * @nr_sectors: No.of sectors on this device
30   - * @e_rd_cmd: Enum list for read commands
31   - * @flags: Importent param, for flash specific behaviour
32   - */
33   -struct spi_flash_params {
34   - const char *name;
35   - u32 jedec;
36   - u16 ext_jedec;
37   - u32 sector_size;
38   - u32 nr_sectors;
39   - u8 e_rd_cmd;
40   - u16 flags;
41   -};
42   -
43   -static const struct spi_flash_params spi_flash_params_table[] = {
44   -#ifdef CONFIG_SPI_FLASH_ATMEL /* ATMEL */
45   - {"AT45DB011D", 0x1f2200, 0x0, 64 * 1024, 4, 0, SECT_4K},
46   - {"AT45DB021D", 0x1f2300, 0x0, 64 * 1024, 8, 0, SECT_4K},
47   - {"AT45DB041D", 0x1f2400, 0x0, 64 * 1024, 8, 0, SECT_4K},
48   - {"AT45DB081D", 0x1f2500, 0x0, 64 * 1024, 16, 0, SECT_4K},
49   - {"AT45DB161D", 0x1f2600, 0x0, 64 * 1024, 32, 0, SECT_4K},
50   - {"AT45DB321D", 0x1f2700, 0x0, 64 * 1024, 64, 0, SECT_4K},
51   - {"AT45DB641D", 0x1f2800, 0x0, 64 * 1024, 128, 0, SECT_4K},
52   - {"AT25DF321", 0x1f4701, 0x0, 64 * 1024, 64, 0, SECT_4K},
53   -#endif
54   -#ifdef CONFIG_SPI_FLASH_EON /* EON */
55   - {"EN25Q32B", 0x1c3016, 0x0, 64 * 1024, 64, 0, 0},
56   - {"EN25Q64", 0x1c3017, 0x0, 64 * 1024, 128, 0, SECT_4K},
57   - {"EN25Q128B", 0x1c3018, 0x0, 64 * 1024, 256, 0, 0},
58   - {"EN25S64", 0x1c3817, 0x0, 64 * 1024, 128, 0, 0},
59   -#endif
60   -#ifdef CONFIG_SPI_FLASH_GIGADEVICE /* GIGADEVICE */
61   - {"GD25Q64B", 0xc84017, 0x0, 64 * 1024, 128, 0, SECT_4K},
62   - {"GD25LQ32", 0xc86016, 0x0, 64 * 1024, 64, 0, SECT_4K},
63   -#endif
64   -#ifdef CONFIG_SPI_FLASH_MACRONIX /* MACRONIX */
65   - {"MX25L2006E", 0xc22012, 0x0, 64 * 1024, 4, 0, 0},
66   - {"MX25L4005", 0xc22013, 0x0, 64 * 1024, 8, 0, 0},
67   - {"MX25L8005", 0xc22014, 0x0, 64 * 1024, 16, 0, 0},
68   - {"MX25L1605D", 0xc22015, 0x0, 64 * 1024, 32, 0, 0},
69   - {"MX25L3205D", 0xc22016, 0x0, 64 * 1024, 64, 0, 0},
70   - {"MX25L6405D", 0xc22017, 0x0, 64 * 1024, 128, 0, 0},
71   - {"MX25L12805", 0xc22018, 0x0, 64 * 1024, 256, 0, 0},
72   - {"MX25L25635F", 0xc22019, 0x0, 64 * 1024, 512, 0, 0},
73   - {"MX25L51235F", 0xc2201a, 0x0, 64 * 1024, 1024, 0, 0},
74   - {"MX25L12855E", 0xc22618, 0x0, 64 * 1024, 256, 0, 0},
75   -#endif
76   -#ifdef CONFIG_SPI_FLASH_SPANSION /* SPANSION */
77   - {"S25FL008A", 0x010213, 0x0, 64 * 1024, 16, 0, 0},
78   - {"S25FL016A", 0x010214, 0x0, 64 * 1024, 32, 0, 0},
79   - {"S25FL032A", 0x010215, 0x0, 64 * 1024, 64, 0, 0},
80   - {"S25FL064A", 0x010216, 0x0, 64 * 1024, 128, 0, 0},
81   - {"S25FL128P_256K", 0x012018, 0x0300, 256 * 1024, 64, RD_FULL, WR_QPP},
82   - {"S25FL128P_64K", 0x012018, 0x0301, 64 * 1024, 256, RD_FULL, WR_QPP},
83   - {"S25FL032P", 0x010215, 0x4d00, 64 * 1024, 64, RD_FULL, WR_QPP},
84   - {"S25FL064P", 0x010216, 0x4d00, 64 * 1024, 128, RD_FULL, WR_QPP},
85   - {"S25FL128S_64K", 0x012018, 0x4d01, 64 * 1024, 256, RD_FULL, WR_QPP},
86   - {"S25FL256S_256K", 0x010219, 0x4d00, 64 * 1024, 512, RD_FULL, WR_QPP},
87   - {"S25FL256S_64K", 0x010219, 0x4d01, 64 * 1024, 512, RD_FULL, WR_QPP},
88   - {"S25FL512S_256K", 0x010220, 0x4d00, 64 * 1024, 1024, RD_FULL, WR_QPP},
89   - {"S25FL512S_64K", 0x010220, 0x4d01, 64 * 1024, 1024, RD_FULL, WR_QPP},
90   -#endif
91   -#ifdef CONFIG_SPI_FLASH_STMICRO /* STMICRO */
92   - {"M25P10", 0x202011, 0x0, 32 * 1024, 4, 0, 0},
93   - {"M25P20", 0x202012, 0x0, 64 * 1024, 4, 0, 0},
94   - {"M25P40", 0x202013, 0x0, 64 * 1024, 8, 0, 0},
95   - {"M25P80", 0x202014, 0x0, 64 * 1024, 16, 0, 0},
96   - {"M25P16", 0x202015, 0x0, 64 * 1024, 32, 0, 0},
97   - {"M25P32", 0x202016, 0x0, 64 * 1024, 64, 0, 0},
98   - {"M25P64", 0x202017, 0x0, 64 * 1024, 128, 0, 0},
99   - {"M25P128", 0x202018, 0x0, 256 * 1024, 64, 0, 0},
100   - {"N25Q32", 0x20ba16, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
101   - {"N25Q32A", 0x20bb16, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
102   - {"N25Q64", 0x20ba17, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
103   - {"N25Q64A", 0x20bb17, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
104   - {"N25Q128", 0x20ba18, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
105   - {"N25Q128A", 0x20bb18, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
106   - {"N25Q256", 0x20ba19, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
107   - {"N25Q256A", 0x20bb19, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
108   - {"N25Q512", 0x20ba20, 0x0, 64 * 1024, 1024, RD_FULL, WR_QPP | E_FSR | SECT_4K},
109   - {"N25Q512A", 0x20bb20, 0x0, 64 * 1024, 1024, RD_FULL, WR_QPP | E_FSR | SECT_4K},
110   - {"N25Q1024", 0x20ba21, 0x0, 64 * 1024, 2048, RD_FULL, WR_QPP | E_FSR | SECT_4K},
111   - {"N25Q1024A", 0x20bb21, 0x0, 64 * 1024, 2048, RD_FULL, WR_QPP | E_FSR | SECT_4K},
112   -#endif
113   -#ifdef CONFIG_SPI_FLASH_SST /* SST */
114   - {"SST25VF040B", 0xbf258d, 0x0, 64 * 1024, 8, 0, SECT_4K | SST_WP},
115   - {"SST25VF080B", 0xbf258e, 0x0, 64 * 1024, 16, 0, SECT_4K | SST_WP},
116   - {"SST25VF016B", 0xbf2541, 0x0, 64 * 1024, 32, 0, SECT_4K | SST_WP},
117   - {"SST25VF032B", 0xbf254a, 0x0, 64 * 1024, 64, 0, SECT_4K | SST_WP},
118   - {"SST25VF064C", 0xbf254b, 0x0, 64 * 1024, 128, 0, SECT_4K},
119   - {"SST25WF512", 0xbf2501, 0x0, 64 * 1024, 1, 0, SECT_4K | SST_WP},
120   - {"SST25WF010", 0xbf2502, 0x0, 64 * 1024, 2, 0, SECT_4K | SST_WP},
121   - {"SST25WF020", 0xbf2503, 0x0, 64 * 1024, 4, 0, SECT_4K | SST_WP},
122   - {"SST25WF040", 0xbf2504, 0x0, 64 * 1024, 8, 0, SECT_4K | SST_WP},
123   - {"SST25WF080", 0xbf2505, 0x0, 64 * 1024, 16, 0, SECT_4K | SST_WP},
124   -#endif
125   -#ifdef CONFIG_SPI_FLASH_WINBOND /* WINBOND */
126   - {"W25P80", 0xef2014, 0x0, 64 * 1024, 16, 0, 0},
127   - {"W25P16", 0xef2015, 0x0, 64 * 1024, 32, 0, 0},
128   - {"W25P32", 0xef2016, 0x0, 64 * 1024, 64, 0, 0},
129   - {"W25X40", 0xef3013, 0x0, 64 * 1024, 8, 0, SECT_4K},
130   - {"W25X16", 0xef3015, 0x0, 64 * 1024, 32, 0, SECT_4K},
131   - {"W25X32", 0xef3016, 0x0, 64 * 1024, 64, 0, SECT_4K},
132   - {"W25X64", 0xef3017, 0x0, 64 * 1024, 128, 0, SECT_4K},
133   - {"W25Q80BL", 0xef4014, 0x0, 64 * 1024, 16, RD_FULL, WR_QPP | SECT_4K},
134   - {"W25Q16CL", 0xef4015, 0x0, 64 * 1024, 32, RD_FULL, WR_QPP | SECT_4K},
135   - {"W25Q32BV", 0xef4016, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
136   - {"W25Q64CV", 0xef4017, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
137   - {"W25Q128BV", 0xef4018, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
138   - {"W25Q256", 0xef4019, 0x0, 64 * 1024, 512, RD_FULL, WR_QPP | SECT_4K},
139   - {"W25Q80BW", 0xef5014, 0x0, 64 * 1024, 16, RD_FULL, WR_QPP | SECT_4K},
140   - {"W25Q16DW", 0xef6015, 0x0, 64 * 1024, 32, RD_FULL, WR_QPP | SECT_4K},
141   - {"W25Q32DW", 0xef6016, 0x0, 64 * 1024, 64, RD_FULL, WR_QPP | SECT_4K},
142   - {"W25Q64DW", 0xef6017, 0x0, 64 * 1024, 128, RD_FULL, WR_QPP | SECT_4K},
143   - {"W25Q128FW", 0xef6018, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
144   -#endif
145   - /*
146   - * Note:
147   - * Below paired flash devices has similar spi_flash params.
148   - * (S25FL129P_64K, S25FL128S_64K)
149   - * (W25Q80BL, W25Q80BV)
150   - * (W25Q16CL, W25Q16DV)
151   - * (W25Q32BV, W25Q32FV_SPI)
152   - * (W25Q64CV, W25Q64FV_SPI)
153   - * (W25Q128BV, W25Q128FV_SPI)
154   - * (W25Q32DW, W25Q32FV_QPI)
155   - * (W25Q64DW, W25Q64FV_QPI)
156   - * (W25Q128FW, W25Q128FV_QPI)
157   - */
158   -};
159   -
160 22 /* Read commands array */
161 23 static u8 spi_read_cmds_array[] = {
162 24 CMD_READ_ARRAY_SLOW,
163 25  
... ... @@ -189,14 +51,12 @@
189 51 {
190 52 const struct spi_flash_params *params;
191 53 struct spi_flash *flash;
192   - int i;
193 54 u8 cmd;
194 55 u16 jedec = idcode[1] << 8 | idcode[2];
195 56 u16 ext_jedec = idcode[3] << 8 | idcode[4];
196 57  
197   - /* Get the flash id (jedec = manuf_id + dev_id, ext_jedec) */
198   - for (i = 0; i < ARRAY_SIZE(spi_flash_params_table); i++) {
199   - params = &spi_flash_params_table[i];
  58 + params = spi_flash_params_table;
  59 + for (; params->name != NULL; params++) {
200 60 if ((params->jedec >> 16) == idcode[0]) {
201 61 if ((params->jedec & 0xFFFF) == jedec) {
202 62 if (params->ext_jedec == 0)
... ... @@ -207,7 +67,7 @@
207 67 }
208 68 }
209 69  
210   - if (i == ARRAY_SIZE(spi_flash_params_table)) {
  70 + if (!params->name) {
211 71 printf("SF: Unsupported flash IDs: ");
212 72 printf("manuf %02x, jedec %04x, ext_jedec %04x\n",
213 73 idcode[0], jedec, ext_jedec);
... ... @@ -33,6 +33,29 @@
33 33 #define RD_FULL RD_EXTN | QUAD_OUTPUT_FAST
34 34  
35 35 /**
  36 + * struct spi_flash_params - SPI/QSPI flash device params structure
  37 + *
  38 + * @name: Device name ([MANUFLETTER][DEVTYPE][DENSITY][EXTRAINFO])
  39 + * @jedec: Device jedec ID (0x[1byte_manuf_id][2byte_dev_id])
  40 + * @ext_jedec: Device ext_jedec ID
  41 + * @sector_size: Sector size of this device
  42 + * @nr_sectors: No.of sectors on this device
  43 + * @e_rd_cmd: Enum list for read commands
  44 + * @flags: Importent param, for flash specific behaviour
  45 + */
  46 +struct spi_flash_params {
  47 + const char *name;
  48 + u32 jedec;
  49 + u16 ext_jedec;
  50 + u32 sector_size;
  51 + u32 nr_sectors;
  52 + u8 e_rd_cmd;
  53 + u16 flags;
  54 +};
  55 +
  56 +extern const struct spi_flash_params spi_flash_params_table[];
  57 +
  58 +/**
36 59 * struct spi_flash - SPI flash structure
37 60 *
38 61 * @spi: SPI slave