diff options
author | Ingo Albrecht <prom@berlin.ccc.de> | 2010-04-18 08:29:13 +0200 |
---|---|---|
committer | Ingo Albrecht <prom@berlin.ccc.de> | 2010-07-20 14:41:20 +0200 |
commit | 41137ab3e53594a6542138f7a44e818c132864eb (patch) | |
tree | d074e313f1a59c0c8479efa3ad819913ba4b086e /src/target/firmware/flash | |
parent | 284c89a7f82480e510a5c5995c9035067fce1373 (diff) |
firmware: establish a ramtext section for code that must be in ram
Diffstat (limited to 'src/target/firmware/flash')
-rw-r--r-- | src/target/firmware/flash/cfi_flash.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/target/firmware/flash/cfi_flash.c b/src/target/firmware/flash/cfi_flash.c index 697e11fa..e8081b9f 100644 --- a/src/target/firmware/flash/cfi_flash.c +++ b/src/target/firmware/flash/cfi_flash.c @@ -25,6 +25,7 @@ #include <stdint.h> #include <errno.h> #include <memory.h> +#include <defines.h> #include <cfi_flash.h> /* XXX: memdump_range() */ @@ -122,21 +123,25 @@ enum flash_status { CFI_STATUS_RESERVED = 0x01 }; +__ramtext static inline void flash_write_cmd(const void *base_addr, uint16_t cmd) { writew(cmd, base_addr); } +__ramtext static inline uint16_t flash_read16(const void *base_addr, uint32_t offset) { return readw(base_addr + (offset << 1)); } +__ramtext static char flash_protected(uint32_t block_offset) { return 0; // block_offset < 64*1024; } +__ramtext flash_lock_t flash_block_getlock(flash_t *flash, uint32_t block_offset) { const void *base_addr = flash->f_base; @@ -154,6 +159,7 @@ flash_lock_t flash_block_getlock(flash_t *flash, uint32_t block_offset) { } } +__ramtext int flash_block_unlock(flash_t *flash, uint32_t block_offset) { const void *base_addr = flash->f_base; @@ -174,6 +180,7 @@ int flash_block_unlock(flash_t *flash, uint32_t block_offset) { return 0; } +__ramtext int flash_block_lock(flash_t *flash, uint32_t block_offset) { const void *base_addr = flash->f_base; @@ -190,6 +197,7 @@ int flash_block_lock(flash_t *flash, uint32_t block_offset) { return 0; } +__ramtext int flash_block_lockdown(flash_t *flash, uint32_t block_offset) { const void *base_addr = flash->f_base; @@ -206,6 +214,7 @@ int flash_block_lockdown(flash_t *flash, uint32_t block_offset) { return 0; } +__ramtext int flash_block_erase(flash_t *flash, uint32_t block_offset) { const void *base_addr = flash->f_base; @@ -255,6 +264,7 @@ int flash_block_erase(flash_t *flash, uint32_t block_offset) { } +__ramtext int flash_program(flash_t *flash, uint32_t dst, void *src, uint32_t nbytes) { const void *base_addr = flash->f_base; int res = 0; @@ -351,6 +361,7 @@ int flash_program(flash_t *flash, uint32_t dst, void *src, uint32_t nbytes) { } /* Internal: retrieve manufacturer and device id from id space */ +__ramtext static int get_id(void *base_addr, uint16_t *manufacturer_id, uint16_t *device_id) { flash_write_cmd(base_addr, CFI_CMD_READ_ID); @@ -363,6 +374,7 @@ static int get_id(void *base_addr, uint16_t *manufacturer_id, uint16_t *device_i } /* Internal: retrieve cfi query response data */ +__ramtext static int get_query(void *base_addr, struct cfi_query *query) { int res = 0; int i; @@ -384,6 +396,7 @@ static int get_query(void *base_addr, struct cfi_query *query) { } /* Internal: retrieve intel protection data */ +__ramtext static int get_intel_protection(void *base_addr, uint16_t *lockp, uint8_t protp[8]) { int i; @@ -472,6 +485,7 @@ void flash_dump_info(flash_t *flash) { #endif +__ramtext int flash_init(flash_t *flash, void *base_addr) { int res, i; uint16_t m_id, d_id; |