Linux 6.7-rc7
[linux-modified.git] / include / linux / mtd / jedec.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org>
4  *                       Steven J. Hill <sjhill@realitydiluted.com>
5  *                       Thomas Gleixner <tglx@linutronix.de>
6  *
7  * Contains all JEDEC related definitions
8  */
9
10 #ifndef __LINUX_MTD_JEDEC_H
11 #define __LINUX_MTD_JEDEC_H
12
13 struct jedec_ecc_info {
14         u8 ecc_bits;
15         u8 codeword_size;
16         __le16 bb_per_lun;
17         __le16 block_endurance;
18         u8 reserved[2];
19 } __packed;
20
21 /* JEDEC features */
22 #define JEDEC_FEATURE_16_BIT_BUS        (1 << 0)
23
24 /* JEDEC Optional Commands */
25 #define JEDEC_OPT_CMD_READ_CACHE        BIT(1)
26
27 struct nand_jedec_params {
28         /* rev info and features block */
29         /* 'J' 'E' 'S' 'D'  */
30         u8 sig[4];
31         __le16 revision;
32         __le16 features;
33         u8 opt_cmd[3];
34         __le16 sec_cmd;
35         u8 num_of_param_pages;
36         u8 reserved0[18];
37
38         /* manufacturer information block */
39         char manufacturer[12];
40         char model[20];
41         u8 jedec_id[6];
42         u8 reserved1[10];
43
44         /* memory organization block */
45         __le32 byte_per_page;
46         __le16 spare_bytes_per_page;
47         u8 reserved2[6];
48         __le32 pages_per_block;
49         __le32 blocks_per_lun;
50         u8 lun_count;
51         u8 addr_cycles;
52         u8 bits_per_cell;
53         u8 programs_per_page;
54         u8 multi_plane_addr;
55         u8 multi_plane_op_attr;
56         u8 reserved3[38];
57
58         /* electrical parameter block */
59         __le16 async_sdr_speed_grade;
60         __le16 toggle_ddr_speed_grade;
61         __le16 sync_ddr_speed_grade;
62         u8 async_sdr_features;
63         u8 toggle_ddr_features;
64         u8 sync_ddr_features;
65         __le16 t_prog;
66         __le16 t_bers;
67         __le16 t_r;
68         __le16 t_r_multi_plane;
69         __le16 t_ccs;
70         __le16 io_pin_capacitance_typ;
71         __le16 input_pin_capacitance_typ;
72         __le16 clk_pin_capacitance_typ;
73         u8 driver_strength_support;
74         __le16 t_adl;
75         u8 reserved4[36];
76
77         /* ECC and endurance block */
78         u8 guaranteed_good_blocks;
79         __le16 guaranteed_block_endurance;
80         struct jedec_ecc_info ecc_info[4];
81         u8 reserved5[29];
82
83         /* reserved */
84         u8 reserved6[148];
85
86         /* vendor */
87         __le16 vendor_rev_num;
88         u8 reserved7[88];
89
90         /* CRC for Parameter Page */
91         __le16 crc;
92 } __packed;
93
94 #endif /* __LINUX_MTD_JEDEC_H */