Compare commits
5 commits
adbd045af5
...
6defd2365c
Author | SHA1 | Date | |
---|---|---|---|
6defd2365c | |||
84454c8054 | |||
81430df971 | |||
238ea35524 | |||
36971300b0 |
6 changed files with 25 additions and 2 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue