Patrick Georgi | ac95903 | 2020-05-05 22:49:26 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 2 | |
Elyes HAOUAS | 361a935 | 2019-12-18 21:26:33 +0100 | [diff] [blame] | 3 | #include <commonlib/helpers.h> |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 4 | #include <spi_flash.h> |
Furquan Shaikh | c28984d | 2016-11-20 21:04:00 -0800 | [diff] [blame] | 5 | #include <spi-generic.h> |
Edward O'Callaghan | c4561e2 | 2014-06-26 15:02:40 +1000 | [diff] [blame] | 6 | |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 7 | #include "spi_flash_internal.h" |
| 8 | |
| 9 | /* A25L-specific commands */ |
| 10 | #define CMD_A25_WREN 0x06 /* Write Enable */ |
| 11 | #define CMD_A25_WRDI 0x04 /* Write Disable */ |
| 12 | #define CMD_A25_RDSR 0x05 /* Read Status Register */ |
| 13 | #define CMD_A25_WRSR 0x01 /* Write Status Register */ |
| 14 | #define CMD_A25_READ 0x03 /* Read Data Bytes */ |
| 15 | #define CMD_A25_FAST_READ 0x0b /* Read Data Bytes at Higher Speed */ |
| 16 | #define CMD_A25_PP 0x02 /* Page Program */ |
| 17 | #define CMD_A25_SE 0x20 /* Sector (4K) Erase */ |
| 18 | #define CMD_A25_BE 0xd8 /* Block (64K) Erase */ |
| 19 | #define CMD_A25_CE 0xc7 /* Chip Erase */ |
| 20 | #define CMD_A25_DP 0xb9 /* Deep Power-down */ |
| 21 | #define CMD_A25_RES 0xab /* Release from DP, and Read Signature */ |
| 22 | |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 23 | static const struct spi_flash_part_id flash_table[] = { |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 24 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 25 | /* A25L16PU */ |
| 26 | .id[0] = 0x2015, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 27 | .nr_sectors_shift = 9, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 28 | }, |
| 29 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 30 | /* A25L16PT */ |
| 31 | .id[0] = 0x2025, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 32 | .nr_sectors_shift = 9, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 33 | }, |
| 34 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 35 | /* A25L080 */ |
| 36 | .id[0] = 0x3014, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 37 | .nr_sectors_shift = 8, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 38 | }, |
| 39 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 40 | /* A25L016 */ |
| 41 | .id[0] = 0x3015, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 42 | .nr_sectors_shift = 9, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 43 | }, |
| 44 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 45 | /* A25L032 */ |
| 46 | .id[0] = 0x3016, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 47 | .nr_sectors_shift = 10, |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 48 | }, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 49 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 50 | /* A25LQ080 */ |
| 51 | .id[0] = 0x4014, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 52 | .nr_sectors_shift = 8, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 53 | }, |
| 54 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 55 | /* A25LQ16 */ |
| 56 | .id[0] = 0x4015, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 57 | .nr_sectors_shift = 9, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 58 | }, |
| 59 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 60 | /* A25LQ032 */ |
| 61 | .id[0] = 0x4016, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 62 | .nr_sectors_shift = 10, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 63 | }, |
| 64 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 65 | /* A25LQ64 */ |
| 66 | .id[0] = 0x4017, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 67 | .nr_sectors_shift = 11, |
Mike Banon | d06d525 | 2019-01-12 20:16:38 +0300 | [diff] [blame] | 68 | }, |
Idwer Vollering | 73a1018 | 2014-02-16 00:32:13 +0000 | [diff] [blame] | 69 | }; |
| 70 | |
Aaron Durbin | 5abeb06 | 2020-01-12 15:12:18 -0700 | [diff] [blame] | 71 | const struct spi_flash_vendor_info spi_flash_amic_vi = { |
| 72 | .id = VENDOR_ID_AMIC, |
| 73 | .page_size_shift = 8, |
| 74 | .sector_size_kib_shift = 2, |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 75 | .match_id_mask[0] = 0xffff, |
Aaron Durbin | 5abeb06 | 2020-01-12 15:12:18 -0700 | [diff] [blame] | 76 | .ids = flash_table, |
| 77 | .nr_part_ids = ARRAY_SIZE(flash_table), |
| 78 | .desc = &spi_flash_pp_0x20_sector_desc, |
Furquan Shaikh | e2fc5e2 | 2017-05-17 17:26:01 -0700 | [diff] [blame] | 79 | }; |