|
@@ -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 */
|
|
|
|
|
|
/* 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--;
|
|
|
+ }
|
|
|
|
|
|
- if (pageSize == NAND_DATA_ACCESS_SIZE) {
|
|
|
- while (numToRead > numEccBytes) {
|
|
|
- /* skip free oob region */
|
|
|
+ while (numToRead > numEccBytes) {
|
|
|
+ /* skip free oob region */
|
|
|
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
|
- *oobp++ = REG_NAND_DATA8;
|
|
|
+ *oobp++ = REG_NAND_DATA8;
|
|
|
#else
|
|
|
- REG_NAND_DATA8;
|
|
|
+ REG_NAND_DATA8;
|
|
|
#endif
|
|
|
- numToRead--;
|
|
|
- }
|
|
|
+ numToRead--;
|
|
|
+ }
|
|
|
|
|
|
+ if (pageSize == NAND_DATA_ACCESS_SIZE) {
|
|
|
/* read ECC bytes before BI */
|
|
|
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
|
|
|
eccCalc[eccPos++] = REG_NAND_DATA8;
|
|
|
#endif
|
|
|
+ numToRead--;
|
|
|
}
|
|
|
|
|
|
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--;
|
|
|
}
|
|
|
|
|
|
- /* 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--;
|
|
|
- }
|
|
|
- } else {
|
|
|
- /* skip BI */
|
|
|
+ }
|
|
|
+ /* read ECC bytes */
|
|
|
+ nand_bcm_umi_bch_resume_read_ecc_calc();
|
|
|
+ while (numToRead) {
|
|
|
#if defined(__KERNEL__) && !defined(STANDALONE)
|
|
|
- *oobp++ = REG_NAND_DATA8;
|
|
|
+ *oobp = REG_NAND_DATA8;
|
|
|
+ eccCalc[eccPos++] = *oobp;
|
|
|
+ oobp++;
|
|
|
#else
|
|
|
- REG_NAND_DATA8;
|
|
|
+ eccCalc[eccPos++] = 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--;
|
|
|
- }
|
|
|
-
|
|
|
- /* 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--;
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|