mtd: nand_bcm: fix hot spin and code duplication
In the branch where pagesize equalled NAND_DATA_ACCESS_SIZE, NumToRead wasn't decremented in the `while (numToRead > 11)' loop. Also the first and last while loops were duplicated in both branches. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Acked-by: Leo Chen <leochen@broadcom.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
c3341d0ceb
commit
1385858ee0
|
@ -167,18 +167,27 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
|
||||||
int numToRead = 16; /* There are 16 bytes per sector in the OOB */
|
int numToRead = 16; /* There are 16 bytes per sector in the OOB */
|
||||||
|
|
||||||
/* ECC is already paused when this function is called */
|
/* ECC is already paused when this function is called */
|
||||||
|
if (pageSize != NAND_DATA_ACCESS_SIZE) {
|
||||||
|
/* skip BI */
|
||||||
|
#if defined(__KERNEL__) && !defined(STANDALONE)
|
||||||
|
*oobp++ = REG_NAND_DATA8;
|
||||||
|
#else
|
||||||
|
REG_NAND_DATA8;
|
||||||
|
#endif
|
||||||
|
numToRead--;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (numToRead > numEccBytes) {
|
||||||
|
/* skip free oob region */
|
||||||
|
#if defined(__KERNEL__) && !defined(STANDALONE)
|
||||||
|
*oobp++ = REG_NAND_DATA8;
|
||||||
|
#else
|
||||||
|
REG_NAND_DATA8;
|
||||||
|
#endif
|
||||||
|
numToRead--;
|
||||||
|
}
|
||||||
|
|
||||||
if (pageSize == NAND_DATA_ACCESS_SIZE) {
|
if (pageSize == NAND_DATA_ACCESS_SIZE) {
|
||||||
while (numToRead > numEccBytes) {
|
|
||||||
/* skip free oob region */
|
|
||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
||||||
*oobp++ = REG_NAND_DATA8;
|
|
||||||
#else
|
|
||||||
REG_NAND_DATA8;
|
|
||||||
#endif
|
|
||||||
numToRead--;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* read ECC bytes before BI */
|
/* read ECC bytes before BI */
|
||||||
nand_bcm_umi_bch_resume_read_ecc_calc();
|
nand_bcm_umi_bch_resume_read_ecc_calc();
|
||||||
|
|
||||||
|
@ -190,6 +199,7 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
|
||||||
#else
|
#else
|
||||||
eccCalc[eccPos++] = REG_NAND_DATA8;
|
eccCalc[eccPos++] = REG_NAND_DATA8;
|
||||||
#endif
|
#endif
|
||||||
|
numToRead--;
|
||||||
}
|
}
|
||||||
|
|
||||||
nand_bcm_umi_bch_pause_read_ecc_calc();
|
nand_bcm_umi_bch_pause_read_ecc_calc();
|
||||||
|
@ -204,49 +214,18 @@ static inline void nand_bcm_umi_bch_read_oobEcc(uint32_t pageSize,
|
||||||
numToRead--;
|
numToRead--;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read ECC bytes */
|
}
|
||||||
nand_bcm_umi_bch_resume_read_ecc_calc();
|
/* read ECC bytes */
|
||||||
while (numToRead) {
|
nand_bcm_umi_bch_resume_read_ecc_calc();
|
||||||
|
while (numToRead) {
|
||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
|
#if defined(__KERNEL__) && !defined(STANDALONE)
|
||||||
*oobp = REG_NAND_DATA8;
|
*oobp = REG_NAND_DATA8;
|
||||||
eccCalc[eccPos++] = *oobp;
|
eccCalc[eccPos++] = *oobp;
|
||||||
oobp++;
|
oobp++;
|
||||||
#else
|
#else
|
||||||
eccCalc[eccPos++] = REG_NAND_DATA8;
|
eccCalc[eccPos++] = REG_NAND_DATA8;
|
||||||
#endif
|
|
||||||
numToRead--;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* skip BI */
|
|
||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
||||||
*oobp++ = REG_NAND_DATA8;
|
|
||||||
#else
|
|
||||||
REG_NAND_DATA8;
|
|
||||||
#endif
|
#endif
|
||||||
numToRead--;
|
numToRead--;
|
||||||
|
|
||||||
while (numToRead > numEccBytes) {
|
|
||||||
/* skip free oob region */
|
|
||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
||||||
*oobp++ = REG_NAND_DATA8;
|
|
||||||
#else
|
|
||||||
REG_NAND_DATA8;
|
|
||||||
#endif
|
|
||||||
numToRead--;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* read ECC bytes */
|
|
||||||
nand_bcm_umi_bch_resume_read_ecc_calc();
|
|
||||||
while (numToRead) {
|
|
||||||
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
||||||
*oobp = REG_NAND_DATA8;
|
|
||||||
eccCalc[eccPos++] = *oobp;
|
|
||||||
oobp++;
|
|
||||||
#else
|
|
||||||
eccCalc[eccPos++] = REG_NAND_DATA8;
|
|
||||||
#endif
|
|
||||||
numToRead--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue