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 struct nand_jedec_params {
25 	/* rev info and features block */
26 	/* 'J' 'E' 'S' 'D'  */
27 	u8 sig[4];
28 	__le16 revision;
29 	__le16 features;
30 	u8 opt_cmd[3];
31 	__le16 sec_cmd;
32 	u8 num_of_param_pages;
33 	u8 reserved0[18];
34 
35 	/* manufacturer information block */
36 	char manufacturer[12];
37 	char model[20];
38 	u8 jedec_id[6];
39 	u8 reserved1[10];
40 
41 	/* memory organization block */
42 	__le32 byte_per_page;
43 	__le16 spare_bytes_per_page;
44 	u8 reserved2[6];
45 	__le32 pages_per_block;
46 	__le32 blocks_per_lun;
47 	u8 lun_count;
48 	u8 addr_cycles;
49 	u8 bits_per_cell;
50 	u8 programs_per_page;
51 	u8 multi_plane_addr;
52 	u8 multi_plane_op_attr;
53 	u8 reserved3[38];
54 
55 	/* electrical parameter block */
56 	__le16 async_sdr_speed_grade;
57 	__le16 toggle_ddr_speed_grade;
58 	__le16 sync_ddr_speed_grade;
59 	u8 async_sdr_features;
60 	u8 toggle_ddr_features;
61 	u8 sync_ddr_features;
62 	__le16 t_prog;
63 	__le16 t_bers;
64 	__le16 t_r;
65 	__le16 t_r_multi_plane;
66 	__le16 t_ccs;
67 	__le16 io_pin_capacitance_typ;
68 	__le16 input_pin_capacitance_typ;
69 	__le16 clk_pin_capacitance_typ;
70 	u8 driver_strength_support;
71 	__le16 t_adl;
72 	u8 reserved4[36];
73 
74 	/* ECC and endurance block */
75 	u8 guaranteed_good_blocks;
76 	__le16 guaranteed_block_endurance;
77 	struct jedec_ecc_info ecc_info[4];
78 	u8 reserved5[29];
79 
80 	/* reserved */
81 	u8 reserved6[148];
82 
83 	/* vendor */
84 	__le16 vendor_rev_num;
85 	u8 reserved7[88];
86 
87 	/* CRC for Parameter Page */
88 	__le16 crc;
89 } __packed;
90 
91 #endif /* __LINUX_MTD_JEDEC_H */
92