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 */
95