root/include/linux/mtd/onfi.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */