blob: 94b85e77c81dc98ffc291a1e8a2644ecc96323ea [file] [log] [blame]
Patrick Georgiac959032020-05-05 22:49:26 +02001/* SPDX-License-Identifier: GPL-2.0-or-later */
Martin Rothbceaf7f2012-09-07 15:02:35 -06002
Elyes HAOUAS361a9352019-12-18 21:26:33 +01003#include <commonlib/helpers.h>
Martin Rothbceaf7f2012-09-07 15:02:35 -06004#include <spi_flash.h>
Furquan Shaikhc28984d2016-11-20 21:04:00 -08005#include <spi-generic.h>
Edward O'Callaghanc4561e22014-06-26 15:02:40 +10006
Martin Rothbceaf7f2012-09-07 15:02:35 -06007#include "spi_flash_internal.h"
8
9/* GD25Pxx-specific commands */
10#define CMD_GD25_WREN 0x06 /* Write Enable */
11#define CMD_GD25_WRDI 0x04 /* Write Disable */
12#define CMD_GD25_RDSR 0x05 /* Read Status Register */
13#define CMD_GD25_WRSR 0x01 /* Write Status Register */
14#define CMD_GD25_READ 0x03 /* Read Data Bytes */
15#define CMD_GD25_FAST_READ 0x0b /* Read Data Bytes at Higher Speed */
16#define CMD_GD25_PP 0x02 /* Page Program */
17#define CMD_GD25_SE 0x20 /* Sector (4K) Erase */
18#define CMD_GD25_BE 0xd8 /* Block (64K) Erase */
19#define CMD_GD25_CE 0xc7 /* Chip Erase */
20#define CMD_GD25_DP 0xb9 /* Deep Power-down */
21#define CMD_GD25_RES 0xab /* Release from DP, and Read Signature */
22
Aaron Durbina6c73c82020-01-11 23:18:51 -070023static const struct spi_flash_part_id flash_table[] = {
Martin Rothbceaf7f2012-09-07 15:02:35 -060024 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070025 /* GD25T80 */
26 .id[0] = 0x3114,
Aaron Durbina6c73c82020-01-11 23:18:51 -070027 .nr_sectors_shift = 8,
Mike Banon2db6e682019-01-12 19:01:10 +030028 },
29 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070030 /* GD25Q80 */
31 .id[0] = 0x4014,
Aaron Durbina6c73c82020-01-11 23:18:51 -070032 .nr_sectors_shift = 8,
Aaron Durbina6c73c82020-01-11 23:18:51 -070033 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070034 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -070035 }, /* also GD25Q80B */
36 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070037 /* GD25Q16 */
38 .id[0] = 0x4015,
Aaron Durbina6c73c82020-01-11 23:18:51 -070039 .nr_sectors_shift = 9,
Aaron Durbina6c73c82020-01-11 23:18:51 -070040 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070041 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -070042 }, /* also GD25Q16B */
43 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070044 /* GD25Q32B */
45 .id[0] = 0x4016,
Aaron Durbina6c73c82020-01-11 23:18:51 -070046 .nr_sectors_shift = 10,
Aaron Durbina6c73c82020-01-11 23:18:51 -070047 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070048 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -070049 }, /* also GD25Q32B */
50 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070051 /* GD25Q64 */
52 .id[0] = 0x4017,
Aaron Durbina6c73c82020-01-11 23:18:51 -070053 .nr_sectors_shift = 11,
Aaron Durbina6c73c82020-01-11 23:18:51 -070054 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070055 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -070056 }, /* also GD25Q64B, GD25B64C */
57 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070058 /* GD25Q128 */
59 .id[0] = 0x4018,
Aaron Durbina6c73c82020-01-11 23:18:51 -070060 .nr_sectors_shift = 12,
Aaron Durbina6c73c82020-01-11 23:18:51 -070061 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070062 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -070063 }, /* also GD25Q128B */
64 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070065 /* GD25VQ80C */
66 .id[0] = 0x4214,
Aaron Durbina6c73c82020-01-11 23:18:51 -070067 .nr_sectors_shift = 8,
Aaron Durbina6c73c82020-01-11 23:18:51 -070068 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070069 .fast_read_dual_io_support = 1,
Martin Rothbceaf7f2012-09-07 15:02:35 -060070 },
71 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070072 /* GD25VQ16C */
73 .id[0] = 0x4215,
Aaron Durbina6c73c82020-01-11 23:18:51 -070074 .nr_sectors_shift = 9,
Aaron Durbina6c73c82020-01-11 23:18:51 -070075 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070076 .fast_read_dual_io_support = 1,
Martin Rothbceaf7f2012-09-07 15:02:35 -060077 },
78 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070079 /* GD25LQ80 */
80 .id[0] = 0x6014,
Aaron Durbina6c73c82020-01-11 23:18:51 -070081 .nr_sectors_shift = 8,
Aaron Durbina6c73c82020-01-11 23:18:51 -070082 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070083 .fast_read_dual_io_support = 1,
Martin Rothbceaf7f2012-09-07 15:02:35 -060084 },
85 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070086 /* GD25LQ16 */
87 .id[0] = 0x6015,
Aaron Durbina6c73c82020-01-11 23:18:51 -070088 .nr_sectors_shift = 9,
Aaron Durbina6c73c82020-01-11 23:18:51 -070089 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070090 .fast_read_dual_io_support = 1,
Mike Banon2db6e682019-01-12 19:01:10 +030091 },
92 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -070093 /* GD25LQ32 */
94 .id[0] = 0x6016,
Aaron Durbina6c73c82020-01-11 23:18:51 -070095 .nr_sectors_shift = 10,
Aaron Durbina6c73c82020-01-11 23:18:51 -070096 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -070097 .fast_read_dual_io_support = 1,
Mike Banon2db6e682019-01-12 19:01:10 +030098 },
99 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -0700100 /* GD25LQ64C */
101 .id[0] = 0x6017,
Aaron Durbina6c73c82020-01-11 23:18:51 -0700102 .nr_sectors_shift = 11,
Aaron Durbina6c73c82020-01-11 23:18:51 -0700103 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -0700104 .fast_read_dual_io_support = 1,
Julius Werner381c35c2019-06-06 22:09:42 -0700105 }, /* also GD25LB64C */
Mike Banon2db6e682019-01-12 19:01:10 +0300106 {
Aaron Durbinfc7b9532020-01-23 11:45:30 -0700107 /* GD25LQ128 */
108 .id[0] = 0x6018,
Aaron Durbina6c73c82020-01-11 23:18:51 -0700109 .nr_sectors_shift = 12,
Aaron Durbina6c73c82020-01-11 23:18:51 -0700110 .fast_read_dual_output_support = 1,
Julius Wernerdf506222021-07-13 15:57:29 -0700111 .fast_read_dual_io_support = 1,
Martin Rothbceaf7f2012-09-07 15:02:35 -0600112 },
Tyler Wangd6353762023-11-16 14:26:14 +0800113 {
114 /* GD25LQ255E */
115 .id[0] = 0x6019,
116 .nr_sectors_shift = 13,
117 .fast_read_dual_output_support = 1,
118 .fast_read_dual_io_support = 1,
119 },
Martin Rothbceaf7f2012-09-07 15:02:35 -0600120};
121
Aaron Durbin5abeb062020-01-12 15:12:18 -0700122const struct spi_flash_vendor_info spi_flash_gigadevice_vi = {
123 .id = VENDOR_ID_GIGADEVICE,
124 .page_size_shift = 8,
125 .sector_size_kib_shift = 2,
Aaron Durbinfc7b9532020-01-23 11:45:30 -0700126 .match_id_mask[0] = 0xffff,
Aaron Durbin5abeb062020-01-12 15:12:18 -0700127 .ids = flash_table,
128 .nr_part_ids = ARRAY_SIZE(flash_table),
129 .desc = &spi_flash_pp_0x20_sector_desc,
Furquan Shaikhe2fc5e22017-05-17 17:26:01 -0700130};