From 23469c67ec1b4fd4a1cf70f2fc2eb245d0d5e95f Mon Sep 17 00:00:00 2001 From: Shakti Bhatnagar Date: Thu, 26 Mar 2015 12:12:50 +0530 Subject: [PATCH] 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 --- .../drivers/nandpsu/src/xnandpsu_bbm.c | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/XilinxProcessorIPLib/drivers/nandpsu/src/xnandpsu_bbm.c b/XilinxProcessorIPLib/drivers/nandpsu/src/xnandpsu_bbm.c index a0b3b465..26bcd5bc 100644 --- a/XilinxProcessorIPLib/drivers/nandpsu/src/xnandpsu_bbm.c +++ b/XilinxProcessorIPLib/drivers/nandpsu/src/xnandpsu_bbm.c @@ -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.