diff options
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0091-mtd-add-data-structures-for-Extended-Parameter-Page.patch')
-rw-r--r-- | target/linux/mvebu/patches-3.10/0091-mtd-add-data-structures-for-Extended-Parameter-Page.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0091-mtd-add-data-structures-for-Extended-Parameter-Page.patch b/target/linux/mvebu/patches-3.10/0091-mtd-add-data-structures-for-Extended-Parameter-Page.patch new file mode 100644 index 0000000..e772d09 --- /dev/null +++ b/target/linux/mvebu/patches-3.10/0091-mtd-add-data-structures-for-Extended-Parameter-Page.patch @@ -0,0 +1,85 @@ +From 50a7db84f71e7c4779596fb5f8efb579a5d29f97 Mon Sep 17 00:00:00 2001 +From: Huang Shijie <b32955@freescale.com> +Date: Fri, 17 May 2013 11:17:27 +0800 +Subject: [PATCH 091/203] mtd: add data structures for Extended Parameter Page + +Since the ONFI 2.1, the onfi spec adds the Extended Parameter Page +to store the ECC info. + +The onfi spec tells us that if the nand chip's recommended ECC codeword +size is not 512 bytes, then the @ecc_bits is 0xff. The host _SHOULD_ then +read the Extended ECC information that is part of the extended parameter +page to retrieve the ECC requirements for this device. + +This patch adds + [1] the neccessary fields for nand_onfi_params{}, + [2] and adds the onfi_ext_ecc_info{} for Extended ECC information, + [3] adds onfi_ext_section{} for extended sections, + [4] and adds onfi_ext_param_page{} for the Extended Parameter Page. + +Acked-by: Pekon Gupta <pekon@ti.com> +Signed-off-by: Huang Shijie <b32955@freescale.com> +Reviewed-and-tested-by: Brian Norris <computersforpeace@gmail.com> +[Brian: amended for checkpatch.pl] +Signed-off-by: Brian Norris <computersforpeace@gmail.com> + +Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> +--- + include/linux/mtd/nand.h | 39 ++++++++++++++++++++++++++++++++++++++- + 1 file changed, 38 insertions(+), 1 deletion(-) + +--- a/include/linux/mtd/nand.h ++++ b/include/linux/mtd/nand.h +@@ -224,7 +224,10 @@ struct nand_onfi_params { + __le16 revision; + __le16 features; + __le16 opt_cmd; +- u8 reserved[22]; ++ u8 reserved0[2]; ++ __le16 ext_param_page_length; /* since ONFI 2.1 */ ++ u8 num_of_param_pages; /* since ONFI 2.1 */ ++ u8 reserved1[17]; + + /* manufacturer information block */ + char manufacturer[12]; +@@ -281,6 +284,40 @@ struct nand_onfi_params { + + #define ONFI_CRC_BASE 0x4F4E + ++/* Extended ECC information Block Definition (since ONFI 2.1) */ ++struct onfi_ext_ecc_info { ++ u8 ecc_bits; ++ u8 codeword_size; ++ __le16 bb_per_lun; ++ __le16 block_endurance; ++ u8 reserved[2]; ++} __packed; ++ ++#define ONFI_SECTION_TYPE_0 0 /* Unused section. */ ++#define ONFI_SECTION_TYPE_1 1 /* for additional sections. */ ++#define ONFI_SECTION_TYPE_2 2 /* for ECC information. */ ++struct onfi_ext_section { ++ u8 type; ++ u8 length; ++} __packed; ++ ++#define ONFI_EXT_SECTION_MAX 8 ++ ++/* Extended Parameter Page Definition (since ONFI 2.1) */ ++struct onfi_ext_param_page { ++ __le16 crc; ++ u8 sig[4]; /* 'E' 'P' 'P' 'S' */ ++ u8 reserved0[10]; ++ struct onfi_ext_section sections[ONFI_EXT_SECTION_MAX]; ++ ++ /* ++ * The actual size of the Extended Parameter Page is in ++ * @ext_param_page_length of nand_onfi_params{}. ++ * The following are the variable length sections. ++ * So we do not add any fields below. Please see the ONFI spec. ++ */ ++} __packed; ++ + /** + * struct nand_hw_control - Control structure for hardware controller (e.g ECC generator) shared among independent devices + * @lock: protection lock |