Patrick Georgi | ac95903 | 2020-05-05 22:49:26 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 2 | |
Elyes HAOUAS | 361a935 | 2019-12-18 21:26:33 +0100 | [diff] [blame] | 3 | #include <commonlib/helpers.h> |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 4 | #include <spi_flash.h> |
Furquan Shaikh | c28984d | 2016-11-20 21:04:00 -0800 | [diff] [blame] | 5 | #include <spi-generic.h> |
Furquan Shaikh | 810e2cd | 2016-12-05 20:32:24 -0800 | [diff] [blame] | 6 | |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 7 | #include "spi_flash_internal.h" |
| 8 | |
| 9 | /* M25Pxx-specific commands */ |
| 10 | #define CMD_AT25_WREN 0x06 /* Write Enable */ |
| 11 | #define CMD_AT25_WRDI 0x04 /* Write Disable */ |
| 12 | #define CMD_AT25_RDSR 0x05 /* Read Status Register */ |
| 13 | #define CMD_AT25_WRSR 0x01 /* Write Status Register */ |
| 14 | #define CMD_AT25_READ 0x03 /* Read Data Bytes */ |
| 15 | #define CMD_AT25_FAST_READ 0x0b /* Read Data Bytes at Higher Speed */ |
| 16 | #define CMD_AT25_PP 0x02 /* Page Program */ |
| 17 | #define CMD_AT25_SE 0x20 /* Sector (4K) Erase */ |
| 18 | #define CMD_AT25_BE 0xd8 /* Block (64K) Erase */ |
| 19 | #define CMD_AT25_CE 0xc7 /* Chip Erase */ |
| 20 | #define CMD_AT25_DP 0xb9 /* Deep Power-down */ |
| 21 | #define CMD_AT25_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[] = { |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 24 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 25 | /* AT25X16 */ |
| 26 | .id[0] = 0x3015, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 27 | .nr_sectors_shift = 9, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 28 | }, |
| 29 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 30 | /* AT25DF32 */ |
| 31 | .id[0] = 0x47, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 32 | .nr_sectors_shift = 10, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 33 | }, |
| 34 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 35 | /* AT25X64 */ |
| 36 | .id[0] = 0x3017, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 37 | .nr_sectors_shift = 11, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 38 | }, |
| 39 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 40 | /* AT25Q16 */ |
| 41 | .id[0] = 0x4015, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 42 | .nr_sectors_shift = 9, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 43 | }, |
| 44 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 45 | /* AT25Q32 */ |
| 46 | .id[0] = 0x4016, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 47 | .nr_sectors_shift = 10, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 48 | }, |
| 49 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 50 | /* AT25Q64 */ |
| 51 | .id[0] = 0x4017, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 52 | .nr_sectors_shift = 11, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 53 | }, |
| 54 | { |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 55 | /* AT25Q128 */ |
| 56 | .id[0] = 0x4018, |
Aaron Durbin | a6c73c8 | 2020-01-11 23:18:51 -0700 | [diff] [blame] | 57 | .nr_sectors_shift = 12, |
Kyösti Mälkki | 96d9276 | 2014-11-11 15:04:38 +0200 | [diff] [blame] | 58 | }, |
| 59 | }; |
| 60 | |
Aaron Durbin | 5abeb06 | 2020-01-12 15:12:18 -0700 | [diff] [blame] | 61 | const struct spi_flash_vendor_info spi_flash_atmel_vi = { |
| 62 | .id = VENDOR_ID_ATMEL, |
| 63 | .page_size_shift = 8, |
| 64 | .sector_size_kib_shift = 2, |
Aaron Durbin | fc7b953 | 2020-01-23 11:45:30 -0700 | [diff] [blame] | 65 | .match_id_mask[0] = 0xffff, |
Aaron Durbin | 5abeb06 | 2020-01-12 15:12:18 -0700 | [diff] [blame] | 66 | .ids = flash_table, |
| 67 | .nr_part_ids = ARRAY_SIZE(flash_table), |
| 68 | .desc = &spi_flash_pp_0x20_sector_desc, |
Furquan Shaikh | e2fc5e2 | 2017-05-17 17:26:01 -0700 | [diff] [blame] | 69 | }; |