summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c')
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/installer-fiiom3k.c58
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
35static 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
53static 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
61static int flash_img_read(uint8_t* buffer) 35static 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
78static int flash_img_write(const uint8_t* buffer) 56static 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