diff options
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c | 58 |
1 files changed, 14 insertions, 44 deletions
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c index 10a58ace38..8ce73bf09e 100644 --- a/firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c +++ b/firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c | |||
@@ -32,75 +32,45 @@ | |||
32 | #define IMAGE_SIZE (128 * 1024) | 32 | #define IMAGE_SIZE (128 * 1024) |
33 | #define TAR_SIZE (256 * 1024) | 33 | #define TAR_SIZE (256 * 1024) |
34 | 34 | ||
35 | static int flash_prepare(void) | ||
36 | { | ||
37 | int mf_id, dev_id; | ||
38 | int rc; | ||
39 | |||
40 | rc = nand_open(); | ||
41 | if(rc < 0) | ||
42 | return INSTALL_ERR_FLASH(NAND_OPEN, rc); | ||
43 | |||
44 | rc = nand_identify(&mf_id, &dev_id); | ||
45 | if(rc < 0) { | ||
46 | nand_close(); | ||
47 | return INSTALL_ERR_FLASH(NAND_IDENTIFY, rc); | ||
48 | } | ||
49 | |||
50 | return INSTALL_SUCCESS; | ||
51 | } | ||
52 | |||
53 | static void flash_finish(void) | ||
54 | { | ||
55 | /* Ensure writes are always disabled when we finish. | ||
56 | * Errors are safe to ignore here, there's nothing we could do anyway. */ | ||
57 | nand_enable_writes(false); | ||
58 | nand_close(); | ||
59 | } | ||
60 | |||
61 | static int flash_img_read(uint8_t* buffer) | 35 | static int flash_img_read(uint8_t* buffer) |
62 | { | 36 | { |
63 | int rc = flash_prepare(); | 37 | nand_drv* drv = nand_init(); |
38 | nand_lock(drv); | ||
39 | |||
40 | int rc = nand_open(drv); | ||
64 | if(rc < 0) | 41 | if(rc < 0) |
65 | goto error; | 42 | goto error; |
66 | 43 | ||
67 | rc = nand_read(0, IMAGE_SIZE, buffer); | 44 | rc = nand_read_bytes(drv, 0, IMAGE_SIZE, buffer); |
68 | if(rc < 0) { | 45 | if(rc < 0) { |
69 | rc = INSTALL_ERR_FLASH(NAND_READ, rc); | 46 | rc = INSTALL_ERR_FLASH(NAND_READ, rc); |
70 | goto error; | 47 | goto error; |
71 | } | 48 | } |
72 | 49 | ||
73 | error: | 50 | error: |
74 | flash_finish(); | 51 | nand_close(drv); |
52 | nand_unlock(drv); | ||
75 | return rc; | 53 | return rc; |
76 | } | 54 | } |
77 | 55 | ||
78 | static int flash_img_write(const uint8_t* buffer) | 56 | static int flash_img_write(const uint8_t* buffer) |
79 | { | 57 | { |
80 | int rc = flash_prepare(); | 58 | nand_drv* drv = nand_init(); |
81 | if(rc < 0) | 59 | nand_lock(drv); |
82 | goto error; | ||
83 | |||
84 | rc = nand_enable_writes(true); | ||
85 | if(rc < 0) { | ||
86 | rc = INSTALL_ERR_FLASH(NAND_ENABLE_WRITES, rc); | ||
87 | goto error; | ||
88 | } | ||
89 | 60 | ||
90 | rc = nand_erase(0, IMAGE_SIZE); | 61 | int rc = nand_open(drv); |
91 | if(rc < 0) { | 62 | if(rc < 0) |
92 | rc = INSTALL_ERR_FLASH(NAND_ERASE, rc); | ||
93 | goto error; | 63 | goto error; |
94 | } | ||
95 | 64 | ||
96 | rc = nand_write(0, IMAGE_SIZE, buffer); | 65 | rc = nand_write_bytes(drv, 0, IMAGE_SIZE, buffer); |
97 | if(rc < 0) { | 66 | if(rc < 0) { |
98 | rc = INSTALL_ERR_FLASH(NAND_WRITE, rc); | 67 | rc = INSTALL_ERR_FLASH(NAND_WRITE, rc); |
99 | goto error; | 68 | goto error; |
100 | } | 69 | } |
101 | 70 | ||
102 | error: | 71 | error: |
103 | flash_finish(); | 72 | nand_close(drv); |
73 | nand_unlock(drv); | ||
104 | return rc; | 74 | return rc; |
105 | } | 75 | } |
106 | 76 | ||