[U-Boot] [PATCH v2 1/3] dfu: unify mmc/nand read/write ops enum

MMC and NAND independently defines same enumerators for read/write. Unify them by defining enum in dfu header. RAM support that is being added newly also can make use of it.
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com ---
v2: new
drivers/dfu/dfu_mmc.c | 9 ++------- drivers/dfu/dfu_nand.c | 7 +------ include/dfu.h | 5 +++++ 3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c index 0871a77..f942758 100644 --- a/drivers/dfu/dfu_mmc.c +++ b/drivers/dfu/dfu_mmc.c @@ -13,16 +13,11 @@ #include <div64.h> #include <dfu.h>
-enum dfu_mmc_op { - DFU_OP_READ = 1, - DFU_OP_WRITE, -}; - static unsigned char __aligned(CONFIG_SYS_CACHELINE_SIZE) dfu_file_buf[CONFIG_SYS_DFU_MAX_FILE_SIZE]; static long dfu_file_buf_len;
-static int mmc_block_op(enum dfu_mmc_op op, struct dfu_entity *dfu, +static int mmc_block_op(enum dfu_op op, struct dfu_entity *dfu, u64 offset, void *buf, long *len) { char cmd_buf[DFU_CMD_BUF_SIZE]; @@ -65,7 +60,7 @@ static int mmc_file_buffer(struct dfu_entity *dfu, void *buf, long *len) return 0; }
-static int mmc_file_op(enum dfu_mmc_op op, struct dfu_entity *dfu, +static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, void *buf, long *len) { char cmd_buf[DFU_CMD_BUF_SIZE]; diff --git a/drivers/dfu/dfu_nand.c b/drivers/dfu/dfu_nand.c index 0ec12cf..edbf5a9 100644 --- a/drivers/dfu/dfu_nand.c +++ b/drivers/dfu/dfu_nand.c @@ -19,12 +19,7 @@ #include <jffs2/load_kernel.h> #include <nand.h>
-enum dfu_nand_op { - DFU_OP_READ = 1, - DFU_OP_WRITE, -}; - -static int nand_block_op(enum dfu_nand_op op, struct dfu_entity *dfu, +static int nand_block_op(enum dfu_op op, struct dfu_entity *dfu, u64 offset, void *buf, long *len) { loff_t start, lim; diff --git a/include/dfu.h b/include/dfu.h index 47b9055..6115d90 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -29,6 +29,11 @@ enum dfu_layout { DFU_FS_EXT4, };
+enum dfu_op { + DFU_OP_READ = 1, + DFU_OP_WRITE, +}; + struct mmc_internal_data { /* RAW programming */ unsigned int lba_start;

DFU spec mentions it as a method to upgrade firmware (software stored in writable non-volatile memory). It also says other potential uses of DFU is beyond scope of the spec.
Here such a beyond the scope use is being attempted - directly pumping binary images from host via USB to RAM. This facility is a developer centric one in that it gives advantage over upgrading non-volatile memory for testing new images every time during development and/or testing.
Directly putting image onto RAM would speed up upgrade process. This and convenience was the initial thoughts that led to doing this, speed improvement over MMC was only 1 second though - 6 sec on RAM as opposed to 7 sec on MMC in beagle bone, perhaps enabling cache and/or optimizing DFU framework to avoid multiple copy for ram (if worth) may help, and on other platforms and other boot media like NAND maybe improvement would be higher.
And for a platform that doesn't yet have proper DFU suppport for non-volatile media's, DFU to RAM can be used.
Another minor advantage would be to increase life of mmc/nand as it would be less used during development/testing.
usage: <image name> ram <start address> <size> eg. kernel ram 0x81000000 0x1000000
Downloading images to RAM using DFU is not something new, this is acheived in openmoko also.
DFU on RAM can be used for extracting RAM contents to host using dfu upload. Perhaps this can be extended to io for squeezing out register dump through usb, if it is worth.
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com ---
v2: remove read/write enumerator define's, instead use new common ones
drivers/dfu/Makefile | 1 + drivers/dfu/dfu.c | 7 +++-- drivers/dfu/dfu_ram.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/dfu.h | 18 ++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 drivers/dfu/dfu_ram.c
diff --git a/drivers/dfu/Makefile b/drivers/dfu/Makefile index fca370a..de9e44e 100644 --- a/drivers/dfu/Makefile +++ b/drivers/dfu/Makefile @@ -12,6 +12,7 @@ LIB = $(obj)libdfu.o COBJS-$(CONFIG_DFU_FUNCTION) += dfu.o COBJS-$(CONFIG_DFU_MMC) += dfu_mmc.o COBJS-$(CONFIG_DFU_NAND) += dfu_nand.o +COBJS-$(CONFIG_DFU_RAM) += dfu_ram.o
SRCS := $(COBJS-y:.o=.c) OBJS := $(addprefix $(obj),$(COBJS-y)) diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index d73d510..7b3d05d 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -325,6 +325,9 @@ static int dfu_fill_entity(struct dfu_entity *dfu, char *s, int alt, } else if (strcmp(interface, "nand") == 0) { if (dfu_fill_entity_nand(dfu, s)) return -1; + } else if (strcmp(interface, "ram") == 0) { + if (dfu_fill_entity_ram(dfu, s)) + return -1; } else { printf("%s: Device %s not (yet) supported!\n", __func__, interface); @@ -374,14 +377,14 @@ int dfu_config_entities(char *env, char *interface, int num)
const char *dfu_get_dev_type(enum dfu_device_type t) { - const char *dev_t[] = {NULL, "eMMC", "OneNAND", "NAND" }; + const char *dev_t[] = {NULL, "eMMC", "OneNAND", "NAND", "RAM" }; return dev_t[t]; }
const char *dfu_get_layout(enum dfu_layout l) { const char *dfu_layout[] = {NULL, "RAW_ADDR", "FAT", "EXT2", - "EXT3", "EXT4" }; + "EXT3", "EXT4", "RAM_ADDR" }; return dfu_layout[l]; }
diff --git a/drivers/dfu/dfu_ram.c b/drivers/dfu/dfu_ram.c new file mode 100644 index 0000000..a603bfb --- /dev/null +++ b/drivers/dfu/dfu_ram.c @@ -0,0 +1,77 @@ +/* + * (C) Copyright 2013 + * Afzal Mohammed afzal.mohd.ma@gmail.com + * + * Reference: dfu_mmc.c + * Copyright (C) 2012 Samsung Electronics + * author: Lukasz Majewski l.majewski@samsung.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <malloc.h> +#include <errno.h> +#include <dfu.h> + +static int dfu_transfer_medium_ram(enum dfu_op op, struct dfu_entity *dfu, + u64 offset, void *buf, long *len) +{ + if (dfu->layout != DFU_RAM_ADDR) { + printf("%s: unsupported layout :%s\n", __func__, + dfu_get_layout(dfu->layout)); + return -EINVAL; + } + + if (offset > dfu->data.ram.size) { + printf("%s: request exceeds allowed area\n", __func__); + return -EINVAL; + } + + if (op == DFU_OP_WRITE) + memcpy(dfu->data.ram.start + offset, buf, *len); + else + memcpy(buf, dfu->data.ram.start + offset, *len); + + return 0; +} + +static int dfu_write_medium_ram(struct dfu_entity *dfu, u64 offset, + void *buf, long *len) +{ + return dfu_transfer_medium_ram(DFU_OP_WRITE, dfu, offset, buf, len); +} + +static int dfu_read_medium_ram(struct dfu_entity *dfu, u64 offset, + void *buf, long *len) +{ + if (!*len) { + *len = dfu->data.ram.size; + return 0; + } + + return dfu_transfer_medium_ram(DFU_OP_READ, dfu, offset, buf, len); +} + +int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s) +{ + char *st; + + dfu->dev_type = DFU_DEV_RAM; + st = strsep(&s, " "); + if (strcmp(st, "ram")) { + printf("%s: unsupported device: %s\n", __func__, st); + return -ENODEV; + } + + dfu->layout = DFU_RAM_ADDR; + dfu->data.ram.start = (void *)simple_strtoul(s, &s, 16); + dfu->data.ram.size = simple_strtoul(++s, &s, 16); + + dfu->write_medium = dfu_write_medium_ram; + dfu->read_medium = dfu_read_medium_ram; + + dfu->inited = 0; + + return 0; +} diff --git a/include/dfu.h b/include/dfu.h index 6115d90..693ecb8 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -19,6 +19,7 @@ enum dfu_device_type { DFU_DEV_MMC = 1, DFU_DEV_ONENAND, DFU_DEV_NAND, + DFU_DEV_RAM, };
enum dfu_layout { @@ -27,6 +28,7 @@ enum dfu_layout { DFU_FS_EXT2, DFU_FS_EXT3, DFU_FS_EXT4, + DFU_RAM_ADDR, };
enum dfu_op { @@ -56,6 +58,11 @@ struct nand_internal_data { unsigned int ubi; };
+struct ram_internal_data { + void *start; + unsigned int size; +}; + static inline unsigned int get_mmc_blk_size(int dev) { return find_mmc_device(dev)->read_bl_len; @@ -81,6 +88,7 @@ struct dfu_entity { union { struct mmc_internal_data mmc; struct nand_internal_data nand; + struct ram_internal_data ram; } data;
int (*read_medium)(struct dfu_entity *dfu, @@ -142,4 +150,14 @@ static inline int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) } #endif
+#ifdef CONFIG_DFU_RAM +extern int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s); +#else +static inline int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s) +{ + puts("RAM support not available!\n"); + return -1; +} +#endif + #endif /* __DFU_ENTITY_H_ */

Hi Afzal,
DFU spec mentions it as a method to upgrade firmware (software stored in writable non-volatile memory). It also says other potential uses of DFU is beyond scope of the spec.
Here such a beyond the scope use is being attempted - directly pumping binary images from host via USB to RAM. This facility is a developer centric one in that it gives advantage over upgrading non-volatile memory for testing new images every time during development and/or testing.
Directly putting image onto RAM would speed up upgrade process. This and convenience was the initial thoughts that led to doing this, speed improvement over MMC was only 1 second though - 6 sec on RAM as opposed to 7 sec on MMC in beagle bone,
Which version of dfu-util do you use? I had slow transmission problem with "ancient" dfu-util version 0.1.
perhaps enabling cache and/or optimizing DFU framework to avoid multiple copy for ram (if worth) may help, and on other platforms and other boot media like NAND maybe improvement would be higher.
And for a platform that doesn't yet have proper DFU suppport for non-volatile media's, DFU to RAM can be used.
Another minor advantage would be to increase life of mmc/nand as it would be less used during development/testing.
usage: <image name> ram <start address> <size> eg. kernel ram 0x81000000 0x1000000
Downloading images to RAM using DFU is not something new, this is acheived in openmoko also.
DFU on RAM can be used for extracting RAM contents to host using dfu upload. Perhaps this can be extended to io for squeezing out register dump through usb, if it is worth.
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com
v2: remove read/write enumerator define's, instead use new common ones
drivers/dfu/Makefile | 1 + drivers/dfu/dfu.c | 7 +++-- drivers/dfu/dfu_ram.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/dfu.h | 18 ++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 drivers/dfu/dfu_ram.c
diff --git a/drivers/dfu/Makefile b/drivers/dfu/Makefile index fca370a..de9e44e 100644 --- a/drivers/dfu/Makefile +++ b/drivers/dfu/Makefile @@ -12,6 +12,7 @@ LIB = $(obj)libdfu.o COBJS-$(CONFIG_DFU_FUNCTION) += dfu.o COBJS-$(CONFIG_DFU_MMC) += dfu_mmc.o COBJS-$(CONFIG_DFU_NAND) += dfu_nand.o +COBJS-$(CONFIG_DFU_RAM) += dfu_ram.o
SRCS := $(COBJS-y:.o=.c) OBJS := $(addprefix $(obj),$(COBJS-y)) diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index d73d510..7b3d05d 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -325,6 +325,9 @@ static int dfu_fill_entity(struct dfu_entity *dfu, char *s, int alt, } else if (strcmp(interface, "nand") == 0) { if (dfu_fill_entity_nand(dfu, s)) return -1;
- } else if (strcmp(interface, "ram") == 0) {
if (dfu_fill_entity_ram(dfu, s))
} else { printf("%s: Device %s not (yet) supported!\n", __func__, interface);return -1;
@@ -374,14 +377,14 @@ int dfu_config_entities(char *env, char *interface, int num) const char *dfu_get_dev_type(enum dfu_device_type t) {
- const char *dev_t[] = {NULL, "eMMC", "OneNAND", "NAND" };
- const char *dev_t[] = {NULL, "eMMC", "OneNAND", "NAND",
"RAM" }; return dev_t[t]; }
const char *dfu_get_layout(enum dfu_layout l) { const char *dfu_layout[] = {NULL, "RAW_ADDR", "FAT", "EXT2",
"EXT3", "EXT4" };
"EXT3", "EXT4",
"RAM_ADDR" }; return dfu_layout[l]; }
diff --git a/drivers/dfu/dfu_ram.c b/drivers/dfu/dfu_ram.c new file mode 100644 index 0000000..a603bfb --- /dev/null +++ b/drivers/dfu/dfu_ram.c @@ -0,0 +1,77 @@ +/*
- (C) Copyright 2013
- Afzal Mohammed afzal.mohd.ma@gmail.com
- Reference: dfu_mmc.c
- Copyright (C) 2012 Samsung Electronics
- author: Lukasz Majewski l.majewski@samsung.com
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <malloc.h> +#include <errno.h> +#include <dfu.h>
+static int dfu_transfer_medium_ram(enum dfu_op op, struct dfu_entity *dfu,
u64 offset, void *buf, long *len)
+{
- if (dfu->layout != DFU_RAM_ADDR) {
printf("%s: unsupported layout :%s\n", __func__,
dfu_get_layout(dfu->layout));
Please use error() from ./include/common.h Frankly, I've overlooked this when I originally developed the code.
return -EINVAL;
- }
- if (offset > dfu->data.ram.size) {
printf("%s: request exceeds allowed area\n",
__func__);
The same here.
return -EINVAL;
- }
- if (op == DFU_OP_WRITE)
memcpy(dfu->data.ram.start + offset, buf, *len);
- else
memcpy(buf, dfu->data.ram.start + offset, *len);
- return 0;
+}
+static int dfu_write_medium_ram(struct dfu_entity *dfu, u64 offset,
void *buf, long *len)
+{
- return dfu_transfer_medium_ram(DFU_OP_WRITE, dfu, offset,
buf, len); +}
+static int dfu_read_medium_ram(struct dfu_entity *dfu, u64 offset,
void *buf, long *len)
+{
- if (!*len) {
*len = dfu->data.ram.size;
return 0;
- }
- return dfu_transfer_medium_ram(DFU_OP_READ, dfu, offset,
buf, len); +}
+int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s) +{
- char *st;
- dfu->dev_type = DFU_DEV_RAM;
- st = strsep(&s, " ");
- if (strcmp(st, "ram")) {
printf("%s: unsupported device: %s\n", __func__, st);
And here
return -ENODEV;
- }
- dfu->layout = DFU_RAM_ADDR;
- dfu->data.ram.start = (void *)simple_strtoul(s, &s, 16);
- dfu->data.ram.size = simple_strtoul(++s, &s, 16);
- dfu->write_medium = dfu_write_medium_ram;
- dfu->read_medium = dfu_read_medium_ram;
- dfu->inited = 0;
- return 0;
+} diff --git a/include/dfu.h b/include/dfu.h index 6115d90..693ecb8 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -19,6 +19,7 @@ enum dfu_device_type { DFU_DEV_MMC = 1, DFU_DEV_ONENAND, DFU_DEV_NAND,
- DFU_DEV_RAM,
};
enum dfu_layout { @@ -27,6 +28,7 @@ enum dfu_layout { DFU_FS_EXT2, DFU_FS_EXT3, DFU_FS_EXT4,
- DFU_RAM_ADDR,
};
enum dfu_op { @@ -56,6 +58,11 @@ struct nand_internal_data { unsigned int ubi; };
+struct ram_internal_data {
- void *start;
- unsigned int size;
+};
static inline unsigned int get_mmc_blk_size(int dev) { return find_mmc_device(dev)->read_bl_len; @@ -81,6 +88,7 @@ struct dfu_entity { union { struct mmc_internal_data mmc; struct nand_internal_data nand;
struct ram_internal_data ram;
} data;
int (*read_medium)(struct dfu_entity *dfu,
@@ -142,4 +150,14 @@ static inline int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) } #endif
+#ifdef CONFIG_DFU_RAM +extern int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s); +#else +static inline int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s) +{
- puts("RAM support not available!\n");
- return -1;
+} +#endif
#endif /* __DFU_ENTITY_H_ */
Only please change the printf() -> error().

Hi Lukasz Majewski,
On Tue, Sep 10, 2013 at 11:21:44AM +0200, Lukasz Majewski wrote:
Directly putting image onto RAM would speed up upgrade process. This and convenience was the initial thoughts that led to doing this, speed improvement over MMC was only 1 second though - 6 sec on RAM as opposed to 7 sec on MMC in beagle bone,
Which version of dfu-util do you use? I had slow transmission problem with "ancient" dfu-util version 0.1.
0.7, there may be chances that USB (HS/FS) is causing the speed difference. Here image size ~4M
printf("%s: unsupported layout :%s\n", __func__,
dfu_get_layout(dfu->layout));
Please use error() from ./include/common.h Frankly, I've overlooked this when I originally developed the code.
Only please change the printf() -> error().
Ok, I will change those.
Regards Afzal

Enable DFU for RAM, provide example dfu_alt_info
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Tom Rini trini@ti.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com ---
v2: new
include/configs/am335x_evm.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index 7969e07..0449a1f 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -100,6 +100,7 @@ "loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ "importbootenv=echo Importing environment from mmc ...; " \ "env import -t $loadaddr $filesize\0" \ + "dfu_alt_info_ram=" DFU_ALT_INFO_RAM "\0" \ "ramargs=setenv bootargs console=${console} " \ "${optargs} " \ "root=${ramroot} " \ @@ -210,6 +211,11 @@ "kernel part 0 8;" \ "rootfs part 0 9" #endif +#define CONFIG_DFU_RAM +#define DFU_ALT_INFO_RAM \ + "kernel ram 0x80200000 0xD80000;" \ + "fdt ram 0x80F80000 0x80000;" \ + "ramdisk ram 0x81000000 0x4000000"
/* NS16550 Configuration */ #define CONFIG_SYS_NS16550_COM1 0x44e09000 /* Base EVM has UART0 */

Hi Afzal,
Enable DFU for RAM, provide example dfu_alt_info
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Tom Rini trini@ti.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com
v2: new
include/configs/am335x_evm.h | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index 7969e07..0449a1f 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -100,6 +100,7 @@ "loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \ "importbootenv=echo Importing environment from mmc ...; " \ "env import -t $loadaddr $filesize\0" \
- "dfu_alt_info_ram=" DFU_ALT_INFO_RAM "\0" \ "ramargs=setenv bootargs console=${console} " \ "${optargs} " \ "root=${ramroot} " \
@@ -210,6 +211,11 @@ "kernel part 0 8;" \ "rootfs part 0 9" #endif +#define CONFIG_DFU_RAM +#define DFU_ALT_INFO_RAM \
- "kernel ram 0x80200000 0xD80000;" \
- "fdt ram 0x80F80000 0x80000;" \
- "ramdisk ram 0x81000000 0x4000000"
/* NS16550 Configuration */ #define CONFIG_SYS_NS16550_COM1 0x44e09000 /* Base EVM has UART0 */
Seems OK for me (but I'm not AM335x maintainer).
Reviewed-by: Lukasz Majewski l.majewski@samsung.com

Hi Afzal,
MMC and NAND independently defines same enumerators for read/write. Unify them by defining enum in dfu header. RAM support that is being added newly also can make use of it.
Signed-off-by: Afzal Mohammed afzal.mohd.ma@gmail.com Cc: Lukasz Majewski l.majewski@samsung.com Cc: Pantelis Antoniou panto@antoniou-consulting.com
v2: new
drivers/dfu/dfu_mmc.c | 9 ++------- drivers/dfu/dfu_nand.c | 7 +------ include/dfu.h | 5 +++++ 3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c index 0871a77..f942758 100644 --- a/drivers/dfu/dfu_mmc.c +++ b/drivers/dfu/dfu_mmc.c @@ -13,16 +13,11 @@ #include <div64.h> #include <dfu.h>
-enum dfu_mmc_op {
- DFU_OP_READ = 1,
- DFU_OP_WRITE,
-};
static unsigned char __aligned(CONFIG_SYS_CACHELINE_SIZE) dfu_file_buf[CONFIG_SYS_DFU_MAX_FILE_SIZE]; static long dfu_file_buf_len;
-static int mmc_block_op(enum dfu_mmc_op op, struct dfu_entity *dfu, +static int mmc_block_op(enum dfu_op op, struct dfu_entity *dfu, u64 offset, void *buf, long *len) { char cmd_buf[DFU_CMD_BUF_SIZE]; @@ -65,7 +60,7 @@ static int mmc_file_buffer(struct dfu_entity *dfu, void *buf, long *len) return 0; }
-static int mmc_file_op(enum dfu_mmc_op op, struct dfu_entity *dfu, +static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, void *buf, long *len) { char cmd_buf[DFU_CMD_BUF_SIZE]; diff --git a/drivers/dfu/dfu_nand.c b/drivers/dfu/dfu_nand.c index 0ec12cf..edbf5a9 100644 --- a/drivers/dfu/dfu_nand.c +++ b/drivers/dfu/dfu_nand.c @@ -19,12 +19,7 @@ #include <jffs2/load_kernel.h> #include <nand.h>
-enum dfu_nand_op {
- DFU_OP_READ = 1,
- DFU_OP_WRITE,
-};
-static int nand_block_op(enum dfu_nand_op op, struct dfu_entity *dfu, +static int nand_block_op(enum dfu_op op, struct dfu_entity *dfu, u64 offset, void *buf, long *len) { loff_t start, lim; diff --git a/include/dfu.h b/include/dfu.h index 47b9055..6115d90 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -29,6 +29,11 @@ enum dfu_layout { DFU_FS_EXT4, };
+enum dfu_op {
- DFU_OP_READ = 1,
- DFU_OP_WRITE,
+};
struct mmc_internal_data { /* RAW programming */ unsigned int lba_start;
Acked-by: Lukasz Majewski l.majewski@samsung.com
participants (2)
-
Afzal Mohammed
-
Lukasz Majewski