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 {
|
struct flash_ops {
|
||||||
void (* release)(struct flash_dev *dev);
|
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_size)(struct flash_dev *dev);
|
||||||
size_t (* get_capacity)(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);
|
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);
|
struct flash_dev *flash_probe(void);
|
||||||
void flash_release(struct flash_dev *dev);
|
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_size(struct flash_dev *dev);
|
||||||
size_t flash_get_capacity(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);
|
size_t flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef STM32F0
|
#if defined(STM32F0) || defined(STM32F1)
|
||||||
#define PRSZu "u"
|
#define PRSZu "u"
|
||||||
#else
|
#else
|
||||||
#define PRSZu "zu"
|
#define PRSZu "zu"
|
||||||
|
|
|
@ -72,6 +72,14 @@ void flash_release(struct flash_dev *dev)
|
||||||
dev->ops->release(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)
|
size_t flash_get_size(struct flash_dev *dev)
|
||||||
{
|
{
|
||||||
if (!dev)
|
if (!dev)
|
||||||
|
|
|
@ -270,10 +270,10 @@ int find_block(struct ftl_map *map, struct ftl_page_group *group,
|
||||||
#ifdef find_block
|
#ifdef find_block
|
||||||
#undef find_block
|
#undef find_block
|
||||||
#define find_block __wrap_find_block
|
#define find_block __wrap_find_block
|
||||||
#endif
|
|
||||||
|
|
||||||
int find_block(struct ftl_map *map, struct ftl_page_group *group,
|
int find_block(struct ftl_map *map, struct ftl_page_group *group,
|
||||||
uint32_t *where, uint32_t block);
|
uint32_t *where, uint32_t block);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Given the block number of the first block, attempts to use binary search to
|
/* Given the block number of the first block, attempts to use binary search to
|
||||||
* find the last block that is in use.
|
* find the last block that is in use.
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#include <spi.h>
|
#include <spi.h>
|
||||||
#include <spi_flash.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_get_size(struct flash_dev *dev);
|
||||||
static size_t spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data,
|
static size_t spi_flash_read(struct flash_dev *dev, uint32_t addr, void *data,
|
||||||
size_t len);
|
size_t len);
|
||||||
|
@ -21,6 +23,7 @@ static struct flash_ops spi_flash_ops = {
|
||||||
.release = spi_flash_release,
|
.release = spi_flash_release,
|
||||||
.get_size = spi_flash_get_size,
|
.get_size = spi_flash_get_size,
|
||||||
.get_capacity = spi_flash_get_size,
|
.get_capacity = spi_flash_get_size,
|
||||||
|
.get_jedec_id = spi_flash_get_jedec_id,
|
||||||
.read = spi_flash_read,
|
.read = spi_flash_read,
|
||||||
.write = spi_flash_write,
|
.write = spi_flash_write,
|
||||||
.copy = default_flash_copy,
|
.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)
|
struct flash_dev *flash_probe(void)
|
||||||
{
|
{
|
||||||
|
char jedec_id[3] = { 0, 0, 0 };
|
||||||
struct flash_dev *dev;
|
struct flash_dev *dev;
|
||||||
|
|
||||||
if (!(dev = malloc(sizeof *dev)))
|
if (!(dev = malloc(sizeof *dev)))
|
||||||
|
@ -178,6 +182,9 @@ struct flash_dev *flash_probe(void)
|
||||||
dev->ops = &spi_flash_ops;
|
dev->ops = &spi_flash_ops;
|
||||||
dev->log2_block_size = ilog2(4 * KIB);
|
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;
|
return dev;
|
||||||
|
|
||||||
err_free_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)
|
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;
|
size_t size, capacity;
|
||||||
|
|
||||||
(void)argv;
|
(void)argv;
|
||||||
|
@ -103,6 +104,11 @@ static int do_flash_info(struct console *con, size_t argc, const char **argv)
|
||||||
return -1;
|
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);
|
size = flash_get_size(flash);
|
||||||
capacity = flash_get_capacity(flash);
|
capacity = flash_get_capacity(flash);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue