xref: /kernel/linux/linux-6.6/include/linux/mtd/jedec.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright © 2000-2010 David Woodhouse <dwmw2@infradead.org>
462306a36Sopenharmony_ci *			 Steven J. Hill <sjhill@realitydiluted.com>
562306a36Sopenharmony_ci *			 Thomas Gleixner <tglx@linutronix.de>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Contains all JEDEC related definitions
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef __LINUX_MTD_JEDEC_H
1162306a36Sopenharmony_ci#define __LINUX_MTD_JEDEC_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct jedec_ecc_info {
1462306a36Sopenharmony_ci	u8 ecc_bits;
1562306a36Sopenharmony_ci	u8 codeword_size;
1662306a36Sopenharmony_ci	__le16 bb_per_lun;
1762306a36Sopenharmony_ci	__le16 block_endurance;
1862306a36Sopenharmony_ci	u8 reserved[2];
1962306a36Sopenharmony_ci} __packed;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* JEDEC features */
2262306a36Sopenharmony_ci#define JEDEC_FEATURE_16_BIT_BUS	(1 << 0)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/* JEDEC Optional Commands */
2562306a36Sopenharmony_ci#define JEDEC_OPT_CMD_READ_CACHE	BIT(1)
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct nand_jedec_params {
2862306a36Sopenharmony_ci	/* rev info and features block */
2962306a36Sopenharmony_ci	/* 'J' 'E' 'S' 'D'  */
3062306a36Sopenharmony_ci	u8 sig[4];
3162306a36Sopenharmony_ci	__le16 revision;
3262306a36Sopenharmony_ci	__le16 features;
3362306a36Sopenharmony_ci	u8 opt_cmd[3];
3462306a36Sopenharmony_ci	__le16 sec_cmd;
3562306a36Sopenharmony_ci	u8 num_of_param_pages;
3662306a36Sopenharmony_ci	u8 reserved0[18];
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	/* manufacturer information block */
3962306a36Sopenharmony_ci	char manufacturer[12];
4062306a36Sopenharmony_ci	char model[20];
4162306a36Sopenharmony_ci	u8 jedec_id[6];
4262306a36Sopenharmony_ci	u8 reserved1[10];
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	/* memory organization block */
4562306a36Sopenharmony_ci	__le32 byte_per_page;
4662306a36Sopenharmony_ci	__le16 spare_bytes_per_page;
4762306a36Sopenharmony_ci	u8 reserved2[6];
4862306a36Sopenharmony_ci	__le32 pages_per_block;
4962306a36Sopenharmony_ci	__le32 blocks_per_lun;
5062306a36Sopenharmony_ci	u8 lun_count;
5162306a36Sopenharmony_ci	u8 addr_cycles;
5262306a36Sopenharmony_ci	u8 bits_per_cell;
5362306a36Sopenharmony_ci	u8 programs_per_page;
5462306a36Sopenharmony_ci	u8 multi_plane_addr;
5562306a36Sopenharmony_ci	u8 multi_plane_op_attr;
5662306a36Sopenharmony_ci	u8 reserved3[38];
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci	/* electrical parameter block */
5962306a36Sopenharmony_ci	__le16 async_sdr_speed_grade;
6062306a36Sopenharmony_ci	__le16 toggle_ddr_speed_grade;
6162306a36Sopenharmony_ci	__le16 sync_ddr_speed_grade;
6262306a36Sopenharmony_ci	u8 async_sdr_features;
6362306a36Sopenharmony_ci	u8 toggle_ddr_features;
6462306a36Sopenharmony_ci	u8 sync_ddr_features;
6562306a36Sopenharmony_ci	__le16 t_prog;
6662306a36Sopenharmony_ci	__le16 t_bers;
6762306a36Sopenharmony_ci	__le16 t_r;
6862306a36Sopenharmony_ci	__le16 t_r_multi_plane;
6962306a36Sopenharmony_ci	__le16 t_ccs;
7062306a36Sopenharmony_ci	__le16 io_pin_capacitance_typ;
7162306a36Sopenharmony_ci	__le16 input_pin_capacitance_typ;
7262306a36Sopenharmony_ci	__le16 clk_pin_capacitance_typ;
7362306a36Sopenharmony_ci	u8 driver_strength_support;
7462306a36Sopenharmony_ci	__le16 t_adl;
7562306a36Sopenharmony_ci	u8 reserved4[36];
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	/* ECC and endurance block */
7862306a36Sopenharmony_ci	u8 guaranteed_good_blocks;
7962306a36Sopenharmony_ci	__le16 guaranteed_block_endurance;
8062306a36Sopenharmony_ci	struct jedec_ecc_info ecc_info[4];
8162306a36Sopenharmony_ci	u8 reserved5[29];
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	/* reserved */
8462306a36Sopenharmony_ci	u8 reserved6[148];
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci	/* vendor */
8762306a36Sopenharmony_ci	__le16 vendor_rev_num;
8862306a36Sopenharmony_ci	u8 reserved7[88];
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	/* CRC for Parameter Page */
9162306a36Sopenharmony_ci	__le16 crc;
9262306a36Sopenharmony_ci} __packed;
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci#endif /* __LINUX_MTD_JEDEC_H */
95