Merged in ziggurat29/nuttx/stm32l4_smartfs_test (pull request #97)

fixes to n25qxxx mtd driver for smartfs support, etc...
This commit is contained in:
Gregory Nutt 2016-07-12 12:16:13 -06:00
commit 74037a7951
2 changed files with 62 additions and 24 deletions

View File

@ -210,22 +210,60 @@ FAR struct mtd_dev_s *mtd_temp;
g_mtd_fs = mtd_temp;
#ifdef CONFIG_MTD_PARTITION
/* Setup a partition of 256KiB for our file system. */
{
FAR struct mtd_geometry_s geo;
off_t nblocks;
#if defined(CONFIG_N25QXXX_SECTOR512)
mtd_temp = mtd_partition(g_mtd_fs, 0, 512);
#else
mtd_temp = mtd_partition(g_mtd_fs, 0, 64);
/* Setup a partition of 256KiB for our file system. */
ret = MTD_IOCTL(g_mtd_fs, MTDIOC_GEOMETRY, (unsigned long)(uintptr_t)&geo);
if (ret < 0)
{
_err("ERROR: MTDIOC_GEOMETRY failed\n");
return ret;
}
nblocks = (256*1024) / geo.blocksize;
mtd_temp = mtd_partition(g_mtd_fs, 0, nblocks);
if (!mtd_temp)
{
_err("ERROR: mtd_partition failed\n");
return ret;
}
g_mtd_fs = mtd_temp;
}
#endif
if (!g_mtd_fs)
#ifdef HAVE_N25QXXX_SMARTFS
/* Configure the device with no partition support */
ret = smart_initialize(N25QXXX_SMART_MINOR, g_mtd_fs, NULL);
if (ret != OK)
{
_err("ERROR: mtd_partition failed\n");
_err("ERROR: Failed to initialize SmartFS: %d\n", ret);
}
#elif defined(HAVE_N25QXXX_NXFFS)
/* Initialize to provide NXFFS on the N25QXXX MTD interface */
ret = nxffs_initialize(g_mtd_fs);
if (ret < 0)
{
_err("ERROR: NXFFS initialization failed: %d\n", ret);
}
/* Mount the file system at /mnt/nxffs */
ret = mount(NULL, "/mnt/nxffs", "nxffs", 0, NULL);
if (ret < 0)
{
_err("ERROR: Failed to mount the NXFFS volume: %d\n", errno);
return ret;
}
g_mtd_fs = mtd_temp;
#endif
#else /* if defined(HAVE_N25QXXX_CHARDEV) */
/* Use the FTL layer to wrap the MTD driver as a block driver */
ret = ftl_initialize(N25QXXX_MTD_MINOR, g_mtd_fs);
@ -256,6 +294,7 @@ FAR struct mtd_dev_s *mtd_temp;
_err("ERROR: bchdev_register %s failed: %d\n", chardev, ret);
return ret;
}
#endif
}
#endif

View File

@ -87,7 +87,6 @@
# define CONFIG_N25QXXX_DUMMIES 6
#endif
/* N25QXXX Commands *****************************************************************/
/* Configuration, Status, Erase, Program Commands ***********************************/
/* Command Value Description: */
@ -98,7 +97,7 @@
* 0x01 | SR */
#define N25QXXX_READ_VOLCFG 0x85 /* Read volatile configuration register: *
* 0x85 | VCR */
#define N25QXXX_WRITE_VOLCFG 0x81 /* Write status register: *
#define N25QXXX_WRITE_VOLCFG 0x81 /* Write svolatile configuration register: *
* 0x81 | VCR */
#define N25QXXX_WRITE_ENABLE 0x06 /* Write enable: *
* 0x06 */
@ -123,7 +122,7 @@
/* Command Value Description: */
/* Data sequence */
/* ID/Security Commands *************************&***********************************/
/* ID/Security Commands *************************************************************/
/* Command Value Description: */
/* Data sequence */
#define N25QXXX_JEDEC_ID 0x9f /* JEDEC ID: *
@ -141,8 +140,8 @@
/* N25QXXX JEDIC IDs */
#define N25QXXX3V_JEDEC_DEVICE_TYPE 0xba /* 3v memory device type */
#define N25QXXX2V_JEDEC_DEVICE_TYPE 0xbb /* 2v memory device type */
#define N25QXXX3V_JEDEC_DEVICE_TYPE 0xba /* 3v memory device type */
#define N25QXXX2V_JEDEC_DEVICE_TYPE 0xbb /* 2v memory device type */
#define N25Q016_JEDEC_CAPACITY 0x15 /* N25Q016 (2 MB) memory capacity */
#define N25Q032_JEDEC_CAPACITY 0x16 /* N25Q032 (4 MB) memory capacity */
@ -168,7 +167,7 @@
#define STATUS_TB_MASK (1 << 5) /* Bit 5: Top / Bottom Protect */
# define STATUS_TB_TOP (0 << 5) /* 0 = BP2-BP0 protect Top down */
# define STATUS_TB_BOTTOM (1 << 5) /* 1 = BP2-BP0 protect Bottom up */
#define STATUS_BP3_MASK (1 << 5) /* Bit 6: BP3 */
#define STATUS_BP3_MASK (1 << 5) /* Bit 6: BP3 */
#define STATUS_SRP0_MASK (1 << 7) /* Bit 7: Status register protect 0 */
# define STATUS_SRP0_UNLOCKED (0 << 7) /* 0 = WP# no effect / PS Lock Down */
# define STATUS_SRP0_LOCKED (1 << 7) /* 1 = WP# protect / OTP Lock Down */
@ -979,7 +978,7 @@ static int n25qxxx_flush_cache(struct n25qxxx_dev_s *priv)
ferr("ERROR: n25qxxx_write_page failed: %d\n", ret);
}
/* The case is no long dirty and the FLASH is no longer erased */
/* The cache is no long dirty and the FLASH is no longer erased */
CLR_DIRTY(priv);
CLR_ERASED(priv);
@ -1002,7 +1001,7 @@ static FAR uint8_t *n25qxxx_read_cache(struct n25qxxx_dev_s *priv, off_t sector)
int ret;
/* Convert from the 512 byte sector to the erase sector size of the device. For
* exmample, if the actual erase sector size if 4Kb (1 << 12), then we first
* example, if the actual erase sector size is 4Kb (1 << 12), then we first
* shift to the right by 3 to get the sector number in 4096 increments.
*/
@ -1218,11 +1217,11 @@ static ssize_t n25qxxx_bread(FAR struct mtd_dev_s *dev, off_t startblock,
nbytes >>= N25QXXX_SECTOR512_SHIFT;
}
#else
nbytes = n25qxxx_read(dev, startblock << priv->sectorshift,
nblocks << priv->sectorshift, buffer);
nbytes = n25qxxx_read(dev, startblock << priv->pageshift,
nblocks << priv->pageshift, buffer);
if (nbytes > 0)
{
nbytes >>= priv->sectorshift;
nbytes >>= priv->pageshift;
}
#endif
@ -1253,8 +1252,8 @@ static ssize_t n25qxxx_bwrite(FAR struct mtd_dev_s *dev, off_t startblock,
}
#else
ret = n25qxxx_write_page(priv, buffer, startblock << priv->sectorshift,
nblocks << priv->sectorshift);
ret = n25qxxx_write_page(priv, buffer, startblock << priv->pageshift,
nblocks << priv->pageshift);
if (ret < 0)
{
ferr("ERROR: n25qxxx_write_page failed: %d\n", ret);
@ -1328,7 +1327,7 @@ static int n25qxxx_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
geo->erasesize = (1 << N25QXXX_SECTOR512_SHIFT);
geo->neraseblocks = priv->nsectors << (priv->sectorshift - N25QXXX_SECTOR512_SHIFT);
#else
geo->blocksize = (1 << priv->sectorshift);
geo->blocksize = (1 << priv->pageshift);
geo->erasesize = (1 << priv->sectorshift);
geo->neraseblocks = priv->nsectors;
#endif