cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

onfi.h (4962B)


      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 ONFI related definitions
      8 */
      9
     10#ifndef __LINUX_MTD_ONFI_H
     11#define __LINUX_MTD_ONFI_H
     12
     13#include <linux/types.h>
     14#include <linux/bitfield.h>
     15
     16/* ONFI version bits */
     17#define ONFI_VERSION_1_0		BIT(1)
     18#define ONFI_VERSION_2_0		BIT(2)
     19#define ONFI_VERSION_2_1		BIT(3)
     20#define ONFI_VERSION_2_2		BIT(4)
     21#define ONFI_VERSION_2_3		BIT(5)
     22#define ONFI_VERSION_3_0		BIT(6)
     23#define ONFI_VERSION_3_1		BIT(7)
     24#define ONFI_VERSION_3_2		BIT(8)
     25#define ONFI_VERSION_4_0		BIT(9)
     26
     27/* ONFI features */
     28#define ONFI_FEATURE_16_BIT_BUS		BIT(0)
     29#define ONFI_FEATURE_NV_DDR		BIT(5)
     30#define ONFI_FEATURE_EXT_PARAM_PAGE	BIT(7)
     31
     32/* ONFI timing mode, used in both asynchronous and synchronous mode */
     33#define ONFI_DATA_INTERFACE_SDR		0
     34#define ONFI_DATA_INTERFACE_NVDDR	BIT(4)
     35#define ONFI_DATA_INTERFACE_NVDDR2	BIT(5)
     36#define ONFI_TIMING_MODE_0		BIT(0)
     37#define ONFI_TIMING_MODE_1		BIT(1)
     38#define ONFI_TIMING_MODE_2		BIT(2)
     39#define ONFI_TIMING_MODE_3		BIT(3)
     40#define ONFI_TIMING_MODE_4		BIT(4)
     41#define ONFI_TIMING_MODE_5		BIT(5)
     42#define ONFI_TIMING_MODE_UNKNOWN	BIT(6)
     43#define ONFI_TIMING_MODE_PARAM(x)	FIELD_GET(GENMASK(3, 0), (x))
     44
     45/* ONFI feature number/address */
     46#define ONFI_FEATURE_NUMBER		256
     47#define ONFI_FEATURE_ADDR_TIMING_MODE	0x1
     48
     49/* Vendor-specific feature address (Micron) */
     50#define ONFI_FEATURE_ADDR_READ_RETRY	0x89
     51#define ONFI_FEATURE_ON_DIE_ECC		0x90
     52#define   ONFI_FEATURE_ON_DIE_ECC_EN	BIT(3)
     53
     54/* ONFI subfeature parameters length */
     55#define ONFI_SUBFEATURE_PARAM_LEN	4
     56
     57/* ONFI optional commands SET/GET FEATURES supported? */
     58#define ONFI_OPT_CMD_SET_GET_FEATURES	BIT(2)
     59
     60struct nand_onfi_params {
     61	/* rev info and features block */
     62	/* 'O' 'N' 'F' 'I'  */
     63	u8 sig[4];
     64	__le16 revision;
     65	__le16 features;
     66	__le16 opt_cmd;
     67	u8 reserved0[2];
     68	__le16 ext_param_page_length; /* since ONFI 2.1 */
     69	u8 num_of_param_pages;        /* since ONFI 2.1 */
     70	u8 reserved1[17];
     71
     72	/* manufacturer information block */
     73	char manufacturer[12];
     74	char model[20];
     75	u8 jedec_id;
     76	__le16 date_code;
     77	u8 reserved2[13];
     78
     79	/* memory organization block */
     80	__le32 byte_per_page;
     81	__le16 spare_bytes_per_page;
     82	__le32 data_bytes_per_ppage;
     83	__le16 spare_bytes_per_ppage;
     84	__le32 pages_per_block;
     85	__le32 blocks_per_lun;
     86	u8 lun_count;
     87	u8 addr_cycles;
     88	u8 bits_per_cell;
     89	__le16 bb_per_lun;
     90	__le16 block_endurance;
     91	u8 guaranteed_good_blocks;
     92	__le16 guaranteed_block_endurance;
     93	u8 programs_per_page;
     94	u8 ppage_attr;
     95	u8 ecc_bits;
     96	u8 interleaved_bits;
     97	u8 interleaved_ops;
     98	u8 reserved3[13];
     99
    100	/* electrical parameter block */
    101	u8 io_pin_capacitance_max;
    102	__le16 sdr_timing_modes;
    103	__le16 program_cache_timing_mode;
    104	__le16 t_prog;
    105	__le16 t_bers;
    106	__le16 t_r;
    107	__le16 t_ccs;
    108	u8 nvddr_timing_modes;
    109	u8 nvddr2_timing_modes;
    110	u8 nvddr_nvddr2_features;
    111	__le16 clk_pin_capacitance_typ;
    112	__le16 io_pin_capacitance_typ;
    113	__le16 input_pin_capacitance_typ;
    114	u8 input_pin_capacitance_max;
    115	u8 driver_strength_support;
    116	__le16 t_int_r;
    117	__le16 t_adl;
    118	u8 reserved4[8];
    119
    120	/* vendor */
    121	__le16 vendor_revision;
    122	u8 vendor[88];
    123
    124	__le16 crc;
    125} __packed;
    126
    127#define ONFI_CRC_BASE	0x4F4E
    128
    129/* Extended ECC information Block Definition (since ONFI 2.1) */
    130struct onfi_ext_ecc_info {
    131	u8 ecc_bits;
    132	u8 codeword_size;
    133	__le16 bb_per_lun;
    134	__le16 block_endurance;
    135	u8 reserved[2];
    136} __packed;
    137
    138#define ONFI_SECTION_TYPE_0	0	/* Unused section. */
    139#define ONFI_SECTION_TYPE_1	1	/* for additional sections. */
    140#define ONFI_SECTION_TYPE_2	2	/* for ECC information. */
    141struct onfi_ext_section {
    142	u8 type;
    143	u8 length;
    144} __packed;
    145
    146#define ONFI_EXT_SECTION_MAX 8
    147
    148/* Extended Parameter Page Definition (since ONFI 2.1) */
    149struct onfi_ext_param_page {
    150	__le16 crc;
    151	u8 sig[4];             /* 'E' 'P' 'P' 'S' */
    152	u8 reserved0[10];
    153	struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX];
    154
    155	/*
    156	 * The actual size of the Extended Parameter Page is in
    157	 * @ext_param_page_length of nand_onfi_params{}.
    158	 * The following are the variable length sections.
    159	 * So we do not add any fields below. Please see the ONFI spec.
    160	 */
    161} __packed;
    162
    163/**
    164 * struct onfi_params - ONFI specific parameters that will be reused
    165 * @version: ONFI version (BCD encoded), 0 if ONFI is not supported
    166 * @tPROG: Page program time
    167 * @tBERS: Block erase time
    168 * @tR: Page read time
    169 * @tCCS: Change column setup time
    170 * @fast_tCAD: Command/Address/Data slow or fast delay (NV-DDR only)
    171 * @sdr_timing_modes: Supported asynchronous/SDR timing modes
    172 * @nvddr_timing_modes: Supported source synchronous/NV-DDR timing modes
    173 * @vendor_revision: Vendor specific revision number
    174 * @vendor: Vendor specific data
    175 */
    176struct onfi_params {
    177	int version;
    178	u16 tPROG;
    179	u16 tBERS;
    180	u16 tR;
    181	u16 tCCS;
    182	bool fast_tCAD;
    183	u16 sdr_timing_modes;
    184	u16 nvddr_timing_modes;
    185	u16 vendor_revision;
    186	u8 vendor[88];
    187};
    188
    189#endif /* __LINUX_MTD_ONFI_H */