feat: sync current parallel NAND implementation from templates
This commit is contained in:
@@ -35,7 +35,12 @@ typedef enum {
|
||||
PNAND_ERROR_PORT = -2,
|
||||
PNAND_ERROR_TIMEOUT = -3,
|
||||
PNAND_ERROR_RANGE = -4,
|
||||
PNAND_ERROR_BUFFER = -5
|
||||
PNAND_ERROR_BUFFER = -5,
|
||||
PNAND_ERROR_WRITE_PROTECTED = -6,
|
||||
PNAND_ERROR_PROGRAM_FAILED = -7,
|
||||
PNAND_ERROR_ERASE_FAILED = -8,
|
||||
PNAND_ERROR_BAD_BLOCK = -9,
|
||||
PNAND_ERROR_CONFIRMATION = -10
|
||||
} parallel_nand_result_t;
|
||||
|
||||
typedef struct {
|
||||
@@ -71,6 +76,12 @@ int parallel_nand_read_page(parallel_nand_t *nand, unsigned long page,
|
||||
int parallel_nand_read_page_slice(parallel_nand_t *nand, unsigned long page,
|
||||
unsigned long column, pnand_octet_t *out,
|
||||
unsigned long count);
|
||||
int parallel_nand_program_page(parallel_nand_t *nand, unsigned long page,
|
||||
const pnand_octet_t *main_data,
|
||||
unsigned long main_count,
|
||||
const pnand_octet_t *oob,
|
||||
unsigned long oob_count);
|
||||
int parallel_nand_erase_block(parallel_nand_t *nand, unsigned long block);
|
||||
int parallel_nand_is_bad_block(parallel_nand_t *nand, unsigned long block,
|
||||
int *is_bad);
|
||||
unsigned long parallel_nand_page_count(const parallel_nand_t *nand);
|
||||
|
||||
@@ -30,20 +30,28 @@ enum {
|
||||
PNAND_GAS_REG_DEVICE_ID = 0x000C,
|
||||
PNAND_GAS_REG_BAD_BLOCK = 0x000D,
|
||||
PNAND_GAS_REG_GENERATION_LO = 0x000E,
|
||||
PNAND_GAS_REG_GENERATION_HI = 0x000F
|
||||
PNAND_GAS_REG_GENERATION_HI = 0x000F,
|
||||
PNAND_GAS_REG_CONFIRM = 0x0010
|
||||
};
|
||||
|
||||
enum {
|
||||
PNAND_GAS_CMD_NONE = 0,
|
||||
PNAND_GAS_CMD_RESET = 1,
|
||||
PNAND_GAS_CMD_READ_ID = 2,
|
||||
PNAND_GAS_CMD_READ_PAGE = 3
|
||||
PNAND_GAS_CMD_READ_PAGE = 3,
|
||||
PNAND_GAS_CMD_CLEAR_BUFFER = 4,
|
||||
PNAND_GAS_CMD_PROGRAM_PAGE = 5,
|
||||
PNAND_GAS_CMD_ERASE_BLOCK = 6
|
||||
};
|
||||
|
||||
#define PNAND_GAS_CONFIRM_MAGIC 0xA55AU
|
||||
|
||||
#define PNAND_GAS_STATUS_READY 0x0001U
|
||||
#define PNAND_GAS_STATUS_BUSY 0x0002U
|
||||
#define PNAND_GAS_STATUS_PAGE_VALID 0x0004U
|
||||
#define PNAND_GAS_STATUS_BAD_BLOCK 0x0008U
|
||||
#define PNAND_GAS_STATUS_WRITE_SUPPORTED 0x0010U
|
||||
#define PNAND_GAS_STATUS_BUFFER_DIRTY 0x0020U
|
||||
#define PNAND_GAS_STATUS_ERROR 0x8000U
|
||||
|
||||
typedef struct {
|
||||
@@ -56,6 +64,7 @@ typedef struct {
|
||||
unsigned long cached_block;
|
||||
int cached_bad_block;
|
||||
int block_cache_valid;
|
||||
int destructive_armed;
|
||||
pnand_octet_t id[8];
|
||||
pnand_octet_t main_data[PNAND_MT29F1G08_PAGE_MAIN];
|
||||
pnand_octet_t oob[PNAND_MT29F1G08_PAGE_OOB];
|
||||
|
||||
@@ -19,6 +19,8 @@ typedef struct {
|
||||
int (*is_ready)(void);
|
||||
void (*set_write_protect)(int enabled);
|
||||
void (*delay_us)(unsigned long us);
|
||||
/* Nonzero only when set_write_protect(0) physically releases WP#. */
|
||||
int write_supported;
|
||||
} parallel_nand_port_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user