Commit 33adfb5f9b06ac1a386dddc222cc50e24a9909e2
1 parent
35ba667df4
Exists in
master
and in
50 other branches
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); |
include/spi_flash.h
... | ... | @@ -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 |