nandpsu_v1_0: Modified InitBbtDesc function for OOB and No OOB feature.

Setting BBT option at the beginning and checking afterwards to set
the offset for signature and version.

Signed-off-by: Shakti Bhatnagar <shaktib@xilinx.com>
This commit is contained in:
Shakti Bhatnagar 2015-03-26 12:12:50 +05:30 committed by Nava kishore Manne
parent f22adb128b
commit 23469c67ec

View file

@ -106,16 +106,28 @@ void XNandPsu_InitBbtDesc(XNandPsu *InstancePtr)
/*
* Initialize primary Bad Block Table(BBT)
*/
InstancePtr->BbtDesc.Option = XNANDPSU_BBT_OOB;
for (Index = 0U; Index < XNANDPSU_MAX_TARGETS; Index++) {
InstancePtr->BbtDesc.PageOffset[Index] =
XNANDPSU_BBT_DESC_PAGE_OFFSET;
}
if (InstancePtr->EccMode == XNANDPSU_ONDIE) {
InstancePtr->BbtDesc.SigOffset = XNANDPSU_ONDIE_SIG_OFFSET;
InstancePtr->BbtDesc.VerOffset = XNANDPSU_ONDIE_VER_OFFSET;
if(InstancePtr->BbtDesc.Option == XNANDPSU_BBT_OOB) {
if (InstancePtr->EccMode == XNANDPSU_ONDIE) {
InstancePtr->BbtDesc.SigOffset =
XNANDPSU_ONDIE_SIG_OFFSET;
InstancePtr->BbtDesc.VerOffset =
XNANDPSU_ONDIE_VER_OFFSET;
} else {
InstancePtr->BbtDesc.SigOffset =
XNANDPSU_BBT_DESC_SIG_OFFSET;
InstancePtr->BbtDesc.VerOffset =
XNANDPSU_BBT_DESC_VER_OFFSET;
}
} else {
InstancePtr->BbtDesc.SigOffset = XNANDPSU_BBT_DESC_SIG_OFFSET;
InstancePtr->BbtDesc.VerOffset = XNANDPSU_BBT_DESC_VER_OFFSET;
InstancePtr->BbtDesc.SigOffset =
XNANDPSU_NO_OOB_BBT_DESC_SIG_OFFSET;
InstancePtr->BbtDesc.VerOffset =
XNANDPSU_NO_OOB_BBT_DESC_VER_OFFSET;
}
InstancePtr->BbtDesc.SigLength = XNANDPSU_BBT_DESC_SIG_LEN;
InstancePtr->BbtDesc.MaxBlocks = XNANDPSU_BBT_DESC_MAX_BLOCKS;
@ -124,7 +136,6 @@ void XNandPsu_InitBbtDesc(XNandPsu *InstancePtr)
InstancePtr->BbtDesc.Version[Index] = 0U;
}
InstancePtr->BbtDesc.Valid = 0U;
InstancePtr->BbtDesc.Option = XNANDPSU_BBT_OOB;
/*
* Assuming that the flash device will have at least 4 blocks.
@ -137,20 +148,28 @@ void XNandPsu_InitBbtDesc(XNandPsu *InstancePtr)
/*
* Initialize mirror Bad Block Table(BBT)
*/
InstancePtr->BbtMirrorDesc.Option = XNANDPSU_BBT_OOB;
for (Index = 0U; Index < XNANDPSU_MAX_TARGETS; Index++) {
InstancePtr->BbtMirrorDesc.PageOffset[Index] =
XNANDPSU_BBT_DESC_PAGE_OFFSET;
}
if (InstancePtr->EccMode == XNANDPSU_ONDIE) {
InstancePtr->BbtMirrorDesc.SigOffset =
if(InstancePtr->BbtMirrorDesc.Option == XNANDPSU_BBT_OOB) {
if (InstancePtr->EccMode == XNANDPSU_ONDIE) {
InstancePtr->BbtMirrorDesc.SigOffset =
XNANDPSU_ONDIE_SIG_OFFSET;
InstancePtr->BbtMirrorDesc.VerOffset =
InstancePtr->BbtMirrorDesc.VerOffset =
XNANDPSU_ONDIE_VER_OFFSET;
} else {
InstancePtr->BbtMirrorDesc.SigOffset =
XNANDPSU_BBT_DESC_SIG_OFFSET;
InstancePtr->BbtMirrorDesc.VerOffset =
XNANDPSU_BBT_DESC_VER_OFFSET;
}
} else {
InstancePtr->BbtMirrorDesc.SigOffset =
XNANDPSU_BBT_DESC_SIG_OFFSET;
XNANDPSU_NO_OOB_BBT_DESC_SIG_OFFSET;
InstancePtr->BbtMirrorDesc.VerOffset =
XNANDPSU_BBT_DESC_VER_OFFSET;
XNANDPSU_NO_OOB_BBT_DESC_VER_OFFSET;
}
InstancePtr->BbtMirrorDesc.SigLength = XNANDPSU_BBT_DESC_SIG_LEN;
InstancePtr->BbtMirrorDesc.MaxBlocks = XNANDPSU_BBT_DESC_MAX_BLOCKS;
@ -159,7 +178,6 @@ void XNandPsu_InitBbtDesc(XNandPsu *InstancePtr)
InstancePtr->BbtMirrorDesc.Version[Index] = 0U;
}
InstancePtr->BbtMirrorDesc.Valid = 0U;
InstancePtr->BbtMirrorDesc.Option = XNANDPSU_BBT_OOB;
/*
* Assuming that the flash device will have at least 4 blocks.