mirror of
https://github.com/apache/nuttx.git
synced 2026-06-05 15:58:59 +08:00
risc-v/esp32-c3: Enable the allocation of multiple MTD SPI Flash partitions
This commit is contained in:
@@ -77,9 +77,6 @@
|
|||||||
#define SPI_FLASH_ERASED_STATE (0xff)
|
#define SPI_FLASH_ERASED_STATE (0xff)
|
||||||
#define SPI_FLASH_SIZE (4 * 1024 * 1024)
|
#define SPI_FLASH_SIZE (4 * 1024 * 1024)
|
||||||
|
|
||||||
#define ESP32C3_MTD_OFFSET CONFIG_ESP32C3_MTD_OFFSET
|
|
||||||
#define ESP32C3_MTD_SIZE CONFIG_ESP32C3_MTD_SIZE
|
|
||||||
|
|
||||||
#define MTD2PRIV(_dev) ((FAR struct esp32c3_spiflash_s *)_dev)
|
#define MTD2PRIV(_dev) ((FAR struct esp32c3_spiflash_s *)_dev)
|
||||||
#define MTD_SIZE(_priv) ((*(_priv)->data)->chip.chip_size)
|
#define MTD_SIZE(_priv) ((*(_priv)->data)->chip.chip_size)
|
||||||
#define MTD_BLKSIZE(_priv) ((*(_priv)->data)->chip.page_size)
|
#define MTD_BLKSIZE(_priv) ((*(_priv)->data)->chip.page_size)
|
||||||
@@ -914,17 +911,19 @@ static int esp32c3_ioctl(struct mtd_dev_s *dev, int cmd,
|
|||||||
* Name: esp32c3_spiflash_alloc_mtdpart
|
* Name: esp32c3_spiflash_alloc_mtdpart
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Allocate SPI Flash MTD.
|
* Allocate an MTD partition from the ESP32-C3 SPI Flash.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* None
|
* mtd_offset - MTD Partition offset from the base address in SPI Flash.
|
||||||
|
* mtd_size - Size for the MTD partition.
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* SPI Flash MTD data pointer if success or NULL if fail.
|
* SPI Flash MTD data pointer if success or NULL if fail.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(void)
|
FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(uint32_t mtd_offset,
|
||||||
|
uint32_t mtd_size)
|
||||||
{
|
{
|
||||||
struct esp32c3_spiflash_s *priv = &g_esp32c3_spiflash;
|
struct esp32c3_spiflash_s *priv = &g_esp32c3_spiflash;
|
||||||
const esp32c3_spiflash_chip_t *chip = &(*priv->data)->chip;
|
const esp32c3_spiflash_chip_t *chip = &(*priv->data)->chip;
|
||||||
@@ -933,9 +932,9 @@ FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(void)
|
|||||||
uint32_t startblock;
|
uint32_t startblock;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
|
||||||
ASSERT((ESP32C3_MTD_OFFSET + ESP32C3_MTD_SIZE) <= chip->chip_size);
|
ASSERT((mtd_offset + mtd_size) <= chip->chip_size);
|
||||||
ASSERT((ESP32C3_MTD_OFFSET % chip->sector_size) == 0);
|
ASSERT((mtd_offset % chip->sector_size) == 0);
|
||||||
ASSERT((ESP32C3_MTD_SIZE % chip->sector_size) == 0);
|
ASSERT((mtd_size % chip->sector_size) == 0);
|
||||||
|
|
||||||
finfo("ESP32-C3 SPI Flash information:\n");
|
finfo("ESP32-C3 SPI Flash information:\n");
|
||||||
finfo("\tID = 0x%" PRIx32 "\n", chip->device_id);
|
finfo("\tID = 0x%" PRIx32 "\n", chip->device_id);
|
||||||
@@ -945,16 +944,19 @@ FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(void)
|
|||||||
finfo("\tSector size = %" PRId32 " KB\n", chip->sector_size / 1024);
|
finfo("\tSector size = %" PRId32 " KB\n", chip->sector_size / 1024);
|
||||||
finfo("\tBlock size = %" PRId32 " KB\n", chip->block_size / 1024);
|
finfo("\tBlock size = %" PRId32 " KB\n", chip->block_size / 1024);
|
||||||
|
|
||||||
#if ESP32C3_MTD_SIZE == 0
|
if (mtd_size == 0)
|
||||||
size = chip->chip_size - ESP32C3_MTD_OFFSET;
|
{
|
||||||
#else
|
size = chip->chip_size - mtd_offset;
|
||||||
size = ESP32C3_MTD_SIZE;
|
}
|
||||||
#endif
|
else
|
||||||
|
{
|
||||||
|
size = mtd_size;
|
||||||
|
}
|
||||||
|
|
||||||
finfo("\tMTD offset = 0x%x\n", ESP32C3_MTD_OFFSET);
|
finfo("\tMTD offset = 0x%x\n", mtd_offset);
|
||||||
finfo("\tMTD size = 0x%" PRIx32 "\n", size);
|
finfo("\tMTD size = 0x%" PRIx32 "\n", size);
|
||||||
|
|
||||||
startblock = MTD_SIZE2BLK(priv, ESP32C3_MTD_OFFSET);
|
startblock = MTD_SIZE2BLK(priv, mtd_offset);
|
||||||
blocks = MTD_SIZE2BLK(priv, size);
|
blocks = MTD_SIZE2BLK(priv, size);
|
||||||
|
|
||||||
mtd_part = mtd_partition(&priv->mtd, startblock, blocks);
|
mtd_part = mtd_partition(&priv->mtd, startblock, blocks);
|
||||||
|
|||||||
@@ -66,17 +66,19 @@ struct mtd_dev_s *esp32c3_spiflash_mtd(void);
|
|||||||
* Name: esp32c3_spiflash_alloc_mtdpart
|
* Name: esp32c3_spiflash_alloc_mtdpart
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* Alloc ESP32-C3 SPI Flash MTD
|
* Allocate an MTD partition from the ESP32-C3 SPI Flash.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* None
|
* mtd_offset - MTD Partition offset from the base address in SPI Flash.
|
||||||
|
* mtd_size - Size for the MTD partition.
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* ESP32-C3 SPI Flash MTD data pointer if success or NULL if fail
|
* ESP32-C3 SPI Flash MTD data pointer if success or NULL if fail
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(void);
|
FAR struct mtd_dev_s *esp32c3_spiflash_alloc_mtdpart(uint32_t mtd_offset,
|
||||||
|
uint32_t mtd_size);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: esp32c3_spiflash_encrypt_mtd
|
* Name: esp32c3_spiflash_encrypt_mtd
|
||||||
|
|||||||
@@ -75,6 +75,9 @@
|
|||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define ESP32C3_MTD_OFFSET CONFIG_ESP32C3_MTD_OFFSET
|
||||||
|
#define ESP32C3_MTD_SIZE CONFIG_ESP32C3_MTD_SIZE
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -94,7 +97,8 @@ static int esp32c3_init_wifi_storage(void)
|
|||||||
const char *path = "/dev/mtdblock1";
|
const char *path = "/dev/mtdblock1";
|
||||||
FAR struct mtd_dev_s *mtd_part;
|
FAR struct mtd_dev_s *mtd_part;
|
||||||
|
|
||||||
mtd_part = esp32c3_spiflash_alloc_mtdpart();
|
mtd_part = esp32c3_spiflash_alloc_mtdpart(ESP32C3_MTD_OFFSET,
|
||||||
|
ESP32C3_MTD_SIZE);
|
||||||
if (!mtd_part)
|
if (!mtd_part)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, "ERROR: Failed to alloc MTD partition of SPI Flash\n");
|
syslog(LOG_ERR, "ERROR: Failed to alloc MTD partition of SPI Flash\n");
|
||||||
|
|||||||
@@ -50,6 +50,9 @@
|
|||||||
|
|
||||||
#define ESP32C3_FS_MOUNT_PT CONFIG_ESP32C3_SPIFLASH_FS_MOUNT_PT
|
#define ESP32C3_FS_MOUNT_PT CONFIG_ESP32C3_SPIFLASH_FS_MOUNT_PT
|
||||||
|
|
||||||
|
#define ESP32C3_MTD_OFFSET CONFIG_ESP32C3_MTD_OFFSET
|
||||||
|
#define ESP32C3_MTD_SIZE CONFIG_ESP32C3_MTD_SIZE
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -66,7 +69,8 @@ int esp32c3_spiflash_init(void)
|
|||||||
FAR struct mtd_dev_s *mtd;
|
FAR struct mtd_dev_s *mtd;
|
||||||
int ret = ERROR;
|
int ret = ERROR;
|
||||||
|
|
||||||
mtd = esp32c3_spiflash_alloc_mtdpart();
|
mtd = esp32c3_spiflash_alloc_mtdpart(ESP32C3_MTD_OFFSET,
|
||||||
|
ESP32C3_MTD_SIZE);
|
||||||
|
|
||||||
#if defined (CONFIG_ESP32C3_SPIFLASH_SMARTFS)
|
#if defined (CONFIG_ESP32C3_SPIFLASH_SMARTFS)
|
||||||
ret = smart_initialize(0, mtd, NULL);
|
ret = smart_initialize(0, mtd, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user