mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
SAMA5 NAND: Still debugging
This commit is contained in:
@@ -258,7 +258,7 @@ static void compute256(FAR const uint8_t *data, FAR uint8_t *code)
|
||||
code[1] = (~(uint32_t)code[1]);
|
||||
code[2] = (~(uint32_t)code[2]);
|
||||
|
||||
fvdbg("Computed code = %02X %02X %02X\n", code[0], code[1], code[2]);
|
||||
fvdbg("Computed code: %02x %02x %02x\n", code[0], code[1], code[2]);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
+21
-19
@@ -104,18 +104,18 @@ static uint32_t nand_chipid(struct nand_raw_s *raw);
|
||||
static int nand_eraseblock(FAR struct nand_dev_s *nand,
|
||||
off_t block, bool scrub);
|
||||
static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int page, FAR uint8_t *buf);
|
||||
unsigned int page, FAR uint8_t *data);
|
||||
static int nand_writepage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int page, FAR const void *buf);
|
||||
unsigned int page, FAR const void *data);
|
||||
|
||||
/* MTD driver methods */
|
||||
|
||||
static int nand_erase(struct mtd_dev_s *dev, off_t startblock,
|
||||
size_t nblocks);
|
||||
static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startblock,
|
||||
size_t nblocks, uint8_t *buf);
|
||||
size_t nblocks, uint8_t *buffer);
|
||||
static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startblock,
|
||||
size_t nblocks, const uint8_t *buf);
|
||||
size_t nblocks, const uint8_t *buffer);
|
||||
static int nand_ioctl(struct mtd_dev_s *dev, int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
@@ -450,7 +450,7 @@ static int nand_eraseblock(FAR struct nand_dev_s *nand, off_t block,
|
||||
* nand - Upper-half, NAND FLASH interface
|
||||
* block - Number of the block where the page to read resides.
|
||||
* page - Number of the page to read inside the given block.
|
||||
* buf - Buffer where the data area will be stored.
|
||||
* data - Buffer where the data area will be stored.
|
||||
*
|
||||
* Returned value.
|
||||
* OK is returned in success; a negated errno value is returned on failure.
|
||||
@@ -458,8 +458,10 @@ static int nand_eraseblock(FAR struct nand_dev_s *nand, off_t block,
|
||||
****************************************************************************/
|
||||
|
||||
static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int page, FAR uint8_t *buf)
|
||||
unsigned int page, FAR uint8_t *data)
|
||||
{
|
||||
fvdbg("block=%d page=%d data=%p\n", (int)block, page, data);
|
||||
|
||||
#ifdef CONFIG_MTD_NAND_BLOCKCHECK
|
||||
/* Check that the block is not BAD if data is requested */
|
||||
|
||||
@@ -468,6 +470,7 @@ static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
fdbg("ERROR: Block is BAD\n");
|
||||
return -EAGAIN;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MTD_NAND_SWECC
|
||||
/* nandecc_readpage will handle the software ECC case */
|
||||
@@ -477,7 +480,7 @@ static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
{
|
||||
/* Read data with software ECC verification */
|
||||
|
||||
return nandecc_readpage(nand, block, page, buf, NULL);
|
||||
return nandecc_readpage(nand, block, page, data, NULL);
|
||||
}
|
||||
|
||||
/* The lower half will handle the No ECC and all hardware assisted
|
||||
@@ -485,10 +488,9 @@ static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
*/
|
||||
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
return NAND_READPAGE(nand->raw, block, page, buf, NULL);
|
||||
return NAND_READPAGE(nand->raw, block, page, data, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,7 +505,7 @@ static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
* nand - Upper-half, NAND FLASH interface
|
||||
* block - Number of the block where the page to read resides.
|
||||
* page - Number of the page to read inside the given block.
|
||||
* buf - Buffer where the data area will be stored.
|
||||
* data - Buffer where the data area will be stored.
|
||||
*
|
||||
* Returned value.
|
||||
* OK is returned in success; a negated errno value is returned on failure.
|
||||
@@ -511,7 +513,7 @@ static int nand_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
****************************************************************************/
|
||||
|
||||
static int nand_writepage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int page, FAR const void *buf)
|
||||
unsigned int page, FAR const void *data)
|
||||
{
|
||||
#ifdef CONFIG_MTD_NAND_BLOCKCHECK
|
||||
/* Check that the block is good */
|
||||
@@ -530,7 +532,7 @@ static int nand_writepage(FAR struct nand_dev_s *nand, off_t block,
|
||||
{
|
||||
/* Write data with software ECC calculation */
|
||||
|
||||
return nandecc_writepage(nand, block, page, buf, NULL);
|
||||
return nandecc_writepage(nand, block, page, data, NULL);
|
||||
}
|
||||
|
||||
/* The lower half will handle the No ECC and all hardware assisted
|
||||
@@ -541,7 +543,7 @@ static int nand_writepage(FAR struct nand_dev_s *nand, off_t block,
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
return NAND_WRITEPAGE(nand->raw, block, page, buf, NULL);
|
||||
return NAND_WRITEPAGE(nand->raw, block, page, data, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -594,7 +596,7 @@ static int nand_erase(struct mtd_dev_s *dev, off_t startblock,
|
||||
****************************************************************************/
|
||||
|
||||
static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startpage,
|
||||
size_t npages, FAR uint8_t *buf)
|
||||
size_t npages, FAR uint8_t *buffer)
|
||||
{
|
||||
FAR struct nand_dev_s *nand = (FAR struct nand_dev_s *)dev;
|
||||
FAR struct nand_raw_s *raw;
|
||||
@@ -638,7 +640,7 @@ static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startpage,
|
||||
{
|
||||
/* Read the next page from NAND */
|
||||
|
||||
ret = nand_readpage(nand, block, page, buf);
|
||||
ret = nand_readpage(nand, block, page, buffer);
|
||||
if (ret < 0)
|
||||
{
|
||||
fdbg("ERROR: nand_readpage failed block=%ld page=%d: %d\n",
|
||||
@@ -665,7 +667,7 @@ static ssize_t nand_bread(struct mtd_dev_s *dev, off_t startpage,
|
||||
|
||||
/* Increment the buffer point by the size of one page */
|
||||
|
||||
buf += pagesize;
|
||||
buffer += pagesize;
|
||||
}
|
||||
|
||||
nand_unlock(nand);
|
||||
@@ -685,7 +687,7 @@ errout_with_lock:
|
||||
****************************************************************************/
|
||||
|
||||
static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startpage,
|
||||
size_t npages, const uint8_t *buf)
|
||||
size_t npages, const uint8_t *buffer)
|
||||
{
|
||||
FAR struct nand_dev_s *nand = (FAR struct nand_dev_s *)dev;
|
||||
FAR struct nand_raw_s *raw;
|
||||
@@ -729,7 +731,7 @@ static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startpage,
|
||||
{
|
||||
/* Write the next page into NAND */
|
||||
|
||||
ret = nand_writepage(nand, block, page, buf);
|
||||
ret = nand_writepage(nand, block, page, buffer);
|
||||
if (ret < 0)
|
||||
{
|
||||
fdbg("ERROR: nand_writepage failed block=%ld page=%d: %d\n",
|
||||
@@ -756,7 +758,7 @@ static ssize_t nand_bwrite(struct mtd_dev_s *dev, off_t startpage,
|
||||
|
||||
/* Increment the buffer point by the size of one page */
|
||||
|
||||
buf += pagesize;
|
||||
buffer += pagesize;
|
||||
}
|
||||
|
||||
nand_unlock(nand);
|
||||
|
||||
@@ -97,6 +97,8 @@ int nandecc_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int sparesize;
|
||||
int ret;
|
||||
|
||||
fvdbg("block=%d page=%d data=%p spare=%d\n", (int)block, page, data, spare);
|
||||
|
||||
/* Get convenience pointers */
|
||||
|
||||
DEBUGASSERT(nand && nand->raw);
|
||||
@@ -146,7 +148,7 @@ int nandecc_readpage(FAR struct nand_dev_s *nand, off_t block,
|
||||
ret = hamming_verify256x(data, pagesize, raw->ecc);
|
||||
if (ret && (ret != HAMMING_ERROR_SINGLEBIT))
|
||||
{
|
||||
fdbg("ERROR: Blockd paged Unrecoverable error:d\n",
|
||||
fdbg("ERROR: Block=%d page=%d Unrecoverable error: %d\n",
|
||||
block, page, ret);
|
||||
return -EIO;
|
||||
}
|
||||
@@ -187,6 +189,8 @@ int nandecc_writepage(FAR struct nand_dev_s *nand, off_t block,
|
||||
unsigned int sparesize;
|
||||
int ret;
|
||||
|
||||
fvdbg("block=%d page=%d data=%p spare=%d\n", (int)block, page, data, spare);
|
||||
|
||||
/* Get convenience pointers */
|
||||
|
||||
DEBUGASSERT(nand && nand->raw);
|
||||
|
||||
Reference in New Issue
Block a user