Compare commits

...

5 Commits

  1. 2
      include/flash.h
  2. 2
      include/macros.h
  3. 8
      source/core/flash.c
  4. 2
      source/ftl/map.c
  5. 7
      source/platform/spi_flash.c
  6. 6
      source/shell/flash.c

@ -7,6 +7,7 @@ struct flash_dev;
struct flash_ops {
void (* release)(struct flash_dev *dev);
size_t (* get_jedec_id)(struct flash_dev *dev, char *jedec_id, size_t len);
size_t (* get_size)(struct flash_dev *dev);
size_t (* get_capacity)(struct flash_dev *dev);
size_t (* read)(struct flash_dev *dev, uint32_t addr, void *data, size_t len);
@ -31,6 +32,7 @@ size_t default_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src,
struct flash_dev *flash_probe(void);
void flash_release(struct flash_dev *dev);
size_t flash_get_jedec_id(struct flash_dev *dev, char *jedec_id, size_t len);
size_t flash_get_size(struct flash_dev *dev);
size_t flash_get_capacity(struct flash_dev *dev);
size_t flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len);

@ -1,6 +1,6 @@
#pragma once
#ifdef STM32F0
#if defined(STM32F0) || defined(STM32F1)
#define PRSZu "u"
#else
#define PRSZu "zu"

@ -72,6 +72,14 @@ void flash_release(struct flash_dev *dev)
dev->ops->release(dev);
}
size_t flash_get_jedec_id(struct flash_dev *dev, char *jedec_id, size_t len)
{
if (!dev || !dev->ops->get_jedec_id)
return 0;
return dev->ops->get_jedec_id(dev, jedec_id, len);
}
size_t flash_get_size(struct flash_dev *dev)
{
if (!dev)

@ -270,10 +270,10 @@ int find_block(struct ftl_map *map, struct ftl_page_group *group,
#ifdef find_block
#undef find_block
#define find_block __wrap_find_block
#endif
int find_block(struct ftl_map *map, struct ftl_page_group *group,
uint32_t *where, uint32_t block);
#endif
/* Given the block number of the first block, attempts to use binary search to
* find the last block that is in use.

@ -9,6 +9,8 @@
#include <spi.h>
#include <spi_flash.h>
static size_t spi_flash_get_jedec_id(struct flash_dev *dev, char *jedec_id,
size_t len);
static size_t spi_flash_get_size(struct flash_dev *dev);
static size_t spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data,
size_t len);
@ -21,6 +23,7 @@ static struct flash_ops spi_flash_ops = {
.release = spi_flash_release,
.get_size = spi_flash_get_size,
.get_capacity = spi_flash_get_size,
.get_jedec_id = spi_flash_get_jedec_id,
.read = spi_flash_read,
.write = spi_flash_write,
.copy = default_flash_copy,
@ -167,6 +170,7 @@ static int spi_flash_erase(struct flash_dev *dev, uint32_t addr)
struct flash_dev *flash_probe(void)
{
char jedec_id[3] = { 0, 0, 0 };
struct flash_dev *dev;
if (!(dev = malloc(sizeof *dev)))
@ -178,6 +182,9 @@ struct flash_dev *flash_probe(void)
dev->ops = &spi_flash_ops;
dev->log2_block_size = ilog2(4 * KIB);
if (!spi_flash_get_jedec_id(dev, jedec_id, 3) || !jedec_id[0])
goto err_free_dev;
return dev;
err_free_dev:

@ -93,6 +93,7 @@ static int do_flash_release(struct console *con, size_t argc, const char **argv)
static int do_flash_info(struct console *con, size_t argc, const char **argv)
{
char jedec_id[3] = { 0, 0, 0 };
size_t size, capacity;
(void)argv;
@ -103,6 +104,11 @@ static int do_flash_info(struct console *con, size_t argc, const char **argv)
return -1;
}
if (flash_get_jedec_id(flash, jedec_id, 3)) {
fprintf(con->fp, " JEDEC ID: %02x%02x%02x\n",
jedec_id[0], jedec_id[1], jedec_id[2]);
}
size = flash_get_size(flash);
capacity = flash_get_capacity(flash);

Loading…
Cancel
Save