FAILED: patch "[PATCH] mtd: rawnand: Export nand_read_page_hwecc_oob_first()" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d8466f73010faf71effb21228ae1cbf577dab130 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Sat, 16 Oct 2021 14:22:27 +0100
Subject: [PATCH] mtd: rawnand: Export nand_read_page_hwecc_oob_first()
Move the function nand_read_page_hwecc_oob_first() (previously nand_davinci_read_page_hwecc_oob_first()) to nand_base.c, and export it as a GPL symbol, so that it can be used by more modules.
drivers/mtd/nand/raw/davinci_nand.c +1 -68
@@ -371,73 +371,6 @@ static int nand_davinci_correct_4bit(struct nand_chip *chip, u_char *data,return corrected; } -/** -* nand_davinci_read_page_hwecc_oob_first - Hardware ECC page read with ECC -* data read from OOB area -* @chip: nand chip info structure -* @buf: buffer to store read data -* @oob_required: caller requires OOB data read to chip->oob_poi -* @page: page number to read -* -* Hardware ECC for large page chips, which requires the ECC data to be -* extracted from the OOB before the actual data is read. -*/ -static int nand_davinci_read_page_hwecc_oob_first (struct nand_chip *chip, -uint8_t *buf, -int oob_required,int page) -{ -struct mtd_info *mtd =nand_to_mtd (chip); -int i, eccsize = chip->ecc.size, ret; -int eccbytes = chip->ecc.bytes; -int eccsteps = chip->ecc.steps; -uint8_t *p = buf; -uint8_t *ecc_code = chip->ecc.code_buf; -unsigned int max_bitflips =0 ; - -/* Read the OOB area first */ - ret =nand_read_oob_op (chip, page,0 , chip->oob_poi, mtd->oobsize); -if (ret) -return ret; - -/* Move read cursor to start of page */ - ret =nand_change_read_column_op (chip,0 ,NULL ,0 , false); -if (ret) -return ret; - - ret =mtd_ooblayout_get_eccbytes (mtd, ecc_code, chip->oob_poi,0 , - chip->ecc.total); -if (ret) -return ret; - -for (i =0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { -int stat; - - chip->ecc.hwctl (chip,NAND_ECC_READ ); - - ret =nand_read_data_op (chip, p, eccsize, false, false); -if (ret) -return ret; - - stat = chip->ecc.correct (chip, p, &ecc_code[i],NULL ); -if (stat == -EBADMSG && - (chip->ecc.options &NAND_ECC_GENERIC_ERASED_CHECK )) { -/* check for empty pages with bitflips */ - stat =nand_check_erased_ecc_chunk (p, eccsize, - &ecc_code[i], - eccbytes,NULL ,0 , - chip->ecc.strength); - } - -if (stat <0 ) { - mtd->ecc_stats.failed++; - }else { - mtd->ecc_stats.corrected += stat; - max_bitflips = max_t(unsigned int, max_bitflips, stat); - } - } -return max_bitflips; -} -/*----------------------------------------------------------------------*/ /* An ECC layout for using 4-bit ECC with small-page flash, storing
@@ -647,7 +580,7 @@ static int davinci_nand_attach_chip(struct nand_chip *chip) }else if (chunks ==4 || chunks ==8 ) {mtd_set_ooblayout (mtd,nand_get_large_page_ooblayout ()); - chip->ecc.read_page = nand_davinci_read_page_hwecc_oob_first; + chip->ecc.read_page = nand_read_page_hwecc_oob_first; }else {return -EIO ; }
drivers/mtd/nand/raw/nand_base.c +67 -0
73 lines not on this page · raw message
include/linux/mtd/rawnand.h +2 -0
@@ -1539,6 +1539,8 @@ int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len, bool force_8bit, bool check_only);int nand_write_data_op (struct nand_chip *chip,const void *buf,unsigned int len,bool force_8bit); +int nand_read_page_hwecc_oob_first (struct nand_chip *chip,uint8_t *buf, +int oob_required,int page);/* Scan and identify a NAND device */ int nand_scan_with_ids(struct nand_chip *chip, unsigned int max_chips,