* [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement
@ 2013-10-16 13:21 Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
` (4 more replies)
0 siblings, 5 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-16 13:21 UTC (permalink / raw)
To: u-boot
Hello,
Please look at my little ums refactor.
Quick summary:
- move ums initialization code to Samsung common
- introduce board definable parameters: UMS_START_BLOCK and UMS_PART_SIZE
- remove ums unnecessary code
- move ums structures to just one generic ums structure
- fix ums capacity miscalculation
- add function usb_cable_connected() which depends on CONFIG_USB_CABLE_CHECK
- add ums exit feature by ctrl+c or cable detachment
Thank you,
Przemyslaw Marczak
Przemyslaw Marczak (4):
usb: ums: move ums code from trats to Samsung common directory
usb: ums: code refactoring to improve reusability at other boards.
usb: ums: fix bug in partition capacity computation.
usb: ums: add ums exit feature by ctrl+c or by detach usb cable
board/samsung/common/Makefile | 1 +
board/samsung/common/ums.c | 75 +++++++++++++++++++++++++++++++++++
board/samsung/trats/trats.c | 62 -----------------------------
common/cmd_usb_mass_storage.c | 48 +++++++++++-----------
drivers/usb/gadget/f_mass_storage.c | 50 +++++++++++++++--------
drivers/usb/gadget/storage_common.c | 3 +-
include/configs/trats.h | 2 -
include/usb.h | 10 +++++
include/usb_mass_storage.h | 33 ++++++++-------
9 files changed, 163 insertions(+), 121 deletions(-)
create mode 100644 board/samsung/common/ums.c
--
1.7.9.5
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
@ 2013-10-16 13:21 ` Przemyslaw Marczak
2013-10-17 17:39 ` Marek Vasut
2013-10-16 13:21 ` [U-Boot] [PATCH 2/4] usb: ums: code refactoring to improve reusability at other boards Przemyslaw Marczak
` (3 subsequent siblings)
4 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-16 13:21 UTC (permalink / raw)
To: u-boot
UMS init was implemented in trats board file but mostly it comprises
common code. Due to that it has been moved to common/ums.c to avoid
code duplication in the future.
Changes:
- move ums initialization code from trats to common/ums.c
- remove unused CONFIG_USB_GADGET_MASS_STORAGE from trats.h
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Minkyu Kang <mk7.kang@samsung.com>
Cc: Lukasz Majewski <l.majewski@samsung.com>
---
board/samsung/common/Makefile | 1 +
board/samsung/common/ums.c | 66 +++++++++++++++++++++++++++++++++++++++++
board/samsung/trats/trats.c | 62 --------------------------------------
include/configs/trats.h | 2 --
4 files changed, 67 insertions(+), 64 deletions(-)
create mode 100644 board/samsung/common/ums.c
diff --git a/board/samsung/common/Makefile b/board/samsung/common/Makefile
index ad7564c..d122169 100644
--- a/board/samsung/common/Makefile
+++ b/board/samsung/common/Makefile
@@ -11,6 +11,7 @@ LIB = $(obj)libsamsung.o
COBJS-$(CONFIG_SOFT_I2C_MULTI_BUS) += multi_i2c.o
COBJS-$(CONFIG_THOR_FUNCTION) += thor.o
+COBJS-$(CONFIG_CMD_USB_MASS_STORAGE) += ums.o
SRCS := $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
new file mode 100644
index 0000000..506f4b5
--- /dev/null
+++ b/board/samsung/common/ums.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <usb_mass_storage.h>
+#include <part.h>
+
+static int ums_read_sector(struct ums_device *ums_dev,
+ ulong start, lbaint_t blkcnt, void *buf)
+{
+ if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
+ start + ums_dev->offset, blkcnt,
+ buf) != blkcnt)
+ return -1;
+
+ return 0;
+}
+
+static int ums_write_sector(struct ums_device *ums_dev,
+ ulong start, lbaint_t blkcnt, const void *buf)
+{
+ if (ums_dev->mmc->block_dev.block_write(ums_dev->dev_num,
+ start + ums_dev->offset, blkcnt,
+ buf) != blkcnt)
+ return -1;
+
+ return 0;
+}
+
+static void ums_get_capacity(struct ums_device *ums_dev,
+ long long int *capacity)
+{
+ long long int tmp_capacity;
+
+ tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
+ * SECTOR_SIZE);
+ *capacity = ums_dev->mmc->capacity - tmp_capacity;
+}
+
+static struct ums_board_info ums_board = {
+ .read_sector = ums_read_sector,
+ .write_sector = ums_write_sector,
+ .get_capacity = ums_get_capacity,
+ .name = "UMS disk",
+};
+
+struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
+ unsigned int part_size)
+{
+ struct mmc *mmc = NULL;
+
+ mmc = find_mmc_device(dev_num);
+ if (!mmc)
+ return NULL;
+
+ ums_board.ums_dev.mmc = mmc;
+ ums_board.ums_dev.dev_num = dev_num;
+ ums_board.ums_dev.offset = offset;
+ ums_board.ums_dev.part_size = part_size;
+
+ return &ums_board;
+}
diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
index 58d925f..db5828d 100644
--- a/board/samsung/trats/trats.c
+++ b/board/samsung/trats/trats.c
@@ -772,65 +772,3 @@ void init_panel_info(vidinfo_t *vid)
setenv("lcdinfo", "lcd=s6e8ax0");
}
-
-#ifdef CONFIG_USB_GADGET_MASS_STORAGE
-static int ums_read_sector(struct ums_device *ums_dev,
- ulong start, lbaint_t blkcnt, void *buf)
-{
- if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt, buf) != blkcnt)
- return -1;
-
- return 0;
-}
-
-static int ums_write_sector(struct ums_device *ums_dev,
- ulong start, lbaint_t blkcnt, const void *buf)
-{
- if (ums_dev->mmc->block_dev.block_write(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt, buf) != blkcnt)
- return -1;
-
- return 0;
-}
-
-static void ums_get_capacity(struct ums_device *ums_dev,
- long long int *capacity)
-{
- long long int tmp_capacity;
-
- tmp_capacity = (long long int) ((ums_dev->offset + ums_dev->part_size)
- * SECTOR_SIZE);
- *capacity = ums_dev->mmc->capacity - tmp_capacity;
-}
-
-static struct ums_board_info ums_board = {
- .read_sector = ums_read_sector,
- .write_sector = ums_write_sector,
- .get_capacity = ums_get_capacity,
- .name = "TRATS UMS disk",
- .ums_dev = {
- .mmc = NULL,
- .dev_num = 0,
- .offset = 0,
- .part_size = 0.
- },
-};
-
-struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
- unsigned int part_size)
-{
- struct mmc *mmc;
-
- mmc = find_mmc_device(dev_num);
- if (!mmc)
- return NULL;
-
- ums_board.ums_dev.mmc = mmc;
- ums_board.ums_dev.dev_num = dev_num;
- ums_board.ums_dev.offset = offset;
- ums_board.ums_dev.part_size = part_size;
-
- return &ums_board;
-}
-#endif
diff --git a/include/configs/trats.h b/include/configs/trats.h
index f5bb6aa..3e67229 100644
--- a/include/configs/trats.h
+++ b/include/configs/trats.h
@@ -323,9 +323,7 @@
#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 120 * 4) + (1 << 12))
#define CONFIG_CMD_USB_MASS_STORAGE
-#if defined(CONFIG_CMD_USB_MASS_STORAGE)
#define CONFIG_USB_GADGET_MASS_STORAGE
-#endif
/* Pass open firmware flat tree */
#define CONFIG_OF_LIBFDT 1
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 2/4] usb: ums: code refactoring to improve reusability at other boards.
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
@ 2013-10-16 13:21 ` Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation Przemyslaw Marczak
` (2 subsequent siblings)
4 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-16 13:21 UTC (permalink / raw)
To: u-boot
This patch introduces some cleanups to ums code. Changes:
ums common:
- introduce UMS_START_BLOCK and UMS_PART_SIZE as defined in usb_mass_storage.h
both default values as 0 if board config do not define them
common cleanup changes:
- change name of struct "ums_board_info" to "ums"
- "ums_device" fields are moved to struct ums and "dev_num" is removed
- change function name: board_ums_init to ums_init
- remove "extern" prefixes from usb_mass_storage.h
cmd_usb_mass_storage:
- change error() to printf() if need to print info message
- change return values to command_ret_t type at ums command code
- add command usage string
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marek.vasut@gmail.com>
---
board/samsung/common/ums.c | 37 ++++++++++++++++++-----------------
common/cmd_usb_mass_storage.c | 27 +++++++++++--------------
drivers/usb/gadget/f_mass_storage.c | 26 ++++++++++++------------
drivers/usb/gadget/storage_common.c | 3 +--
include/usb_mass_storage.h | 33 +++++++++++++++++--------------
5 files changed, 62 insertions(+), 64 deletions(-)
diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
index 506f4b5..1f28590 100644
--- a/board/samsung/common/ums.c
+++ b/board/samsung/common/ums.c
@@ -9,30 +9,33 @@
#include <usb_mass_storage.h>
#include <part.h>
-static int ums_read_sector(struct ums_device *ums_dev,
+static int ums_read_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, void *buf)
{
- if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt,
- buf) != blkcnt)
+ int dev_num = ums_dev->mmc->block_dev.dev;
+
+ if (ums_dev->mmc->block_dev.block_read(dev_num,
+ start + ums_dev->offset,
+ blkcnt, buf) != blkcnt)
return -1;
return 0;
}
-static int ums_write_sector(struct ums_device *ums_dev,
+static int ums_write_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf)
{
- if (ums_dev->mmc->block_dev.block_write(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt,
- buf) != blkcnt)
+ int dev_num = ums_dev->mmc->block_dev.dev;
+
+ if (ums_dev->mmc->block_dev.block_write(dev_num,
+ start + ums_dev->offset,
+ blkcnt, buf) != blkcnt)
return -1;
return 0;
}
-static void ums_get_capacity(struct ums_device *ums_dev,
- long long int *capacity)
+static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
{
long long int tmp_capacity;
@@ -41,15 +44,16 @@ static void ums_get_capacity(struct ums_device *ums_dev,
*capacity = ums_dev->mmc->capacity - tmp_capacity;
}
-static struct ums_board_info ums_board = {
+static struct ums ums_dev = {
.read_sector = ums_read_sector,
.write_sector = ums_write_sector,
.get_capacity = ums_get_capacity,
.name = "UMS disk",
+ .offset = UMS_START_BLOCK,
+ .part_size = UMS_PART_SIZE,
};
-struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
- unsigned int part_size)
+struct ums *ums_init(unsigned int dev_num)
{
struct mmc *mmc = NULL;
@@ -57,10 +61,7 @@ struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
if (!mmc)
return NULL;
- ums_board.ums_dev.mmc = mmc;
- ums_board.ums_dev.dev_num = dev_num;
- ums_board.ums_dev.offset = offset;
- ums_board.ums_dev.part_size = part_size;
+ ums_dev.mmc = mmc;
- return &ums_board;
+ return &ums_dev;
}
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index f583caf..f6ceba7 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -22,28 +22,26 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
NULL, 0));
- if (dev_num) {
- error("Set eMMC device to 0! - e.g. ums 0");
- goto fail;
- }
+ if (dev_num)
+ return CMD_RET_USAGE;
unsigned int controller_index = (unsigned int)(simple_strtoul(
usb_controller, NULL, 0));
if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
error("Couldn't init USB controller.");
- goto fail;
+ return CMD_RET_FAILURE;
}
- struct ums_board_info *ums_info = board_ums_init(dev_num, 0, 0);
- if (!ums_info) {
- error("MMC: %d -> NOT available", dev_num);
- goto fail;
+ struct ums *ums = ums_init(dev_num);
+ if (!ums) {
+ printf("MMC: %u no such device\n", dev_num);
+ return CMD_RET_FAILURE;
}
- int rc = fsg_init(ums_info);
+ int rc = fsg_init(ums);
if (rc) {
error("fsg_init failed");
- goto fail;
+ return CMD_RET_FAILURE;
}
g_dnl_register("ums");
@@ -62,13 +60,10 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
}
exit:
g_dnl_unregister();
- return 0;
-
-fail:
- return -1;
+ return CMD_RET_SUCCESS;
}
U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
"Use the UMS [User Mass Storage]",
- "<USB_controller> <mmc_dev>"
+ "ums <USB_controller> <mmc_dev> e.g. ums 0 0"
);
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index b34068a..9560deb 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -444,7 +444,7 @@ static void set_bulk_out_req_length(struct fsg_common *common,
/*-------------------------------------------------------------------------*/
-struct ums_board_info *ums_info;
+struct ums *ums;
struct fsg_common *the_fsg_common;
static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
@@ -761,10 +761,10 @@ static int do_read(struct fsg_common *common)
/* Perform the read */
nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
if (rc)
return -EIO;
nread = amount;
@@ -934,7 +934,7 @@ static int do_write(struct fsg_common *common)
amount = bh->outreq->actual;
/* Perform the write */
- rc = ums_info->write_sector(&(ums_info->ums_dev),
+ rc = ums->write_sector(ums,
file_offset / SECTOR_SIZE,
amount / SECTOR_SIZE,
(char __user *)bh->buf);
@@ -1049,10 +1049,10 @@ static int do_verify(struct fsg_common *common)
/* Perform the read */
nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
if (rc)
return -EIO;
nread = amount;
@@ -1103,7 +1103,7 @@ static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
buf[4] = 31; /* Additional length */
/* No special options */
sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
- ums_info->name, (u16) 0xffff);
+ ums->name, (u16) 0xffff);
return 36;
}
@@ -2758,9 +2758,9 @@ int fsg_add(struct usb_configuration *c)
return fsg_bind_config(c->cdev, c, fsg_common);
}
-int fsg_init(struct ums_board_info *ums)
+int fsg_init(struct ums *ums_dev)
{
- ums_info = ums;
+ ums = ums_dev;
return 0;
}
diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
index 866e7c7..c2c5424 100644
--- a/drivers/usb/gadget/storage_common.c
+++ b/drivers/usb/gadget/storage_common.c
@@ -275,7 +275,6 @@ struct rw_semaphore { int i; };
#define ETOOSMALL 525
#include <usb_mass_storage.h>
-extern struct ums_board_info *ums_info;
/*-------------------------------------------------------------------------*/
@@ -581,7 +580,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
/* R/W if we can, R/O if we must */
ro = curlun->initially_ro;
- ums_info->get_capacity(&(ums_info->ums_dev), &size);
+ ums->get_capacity(ums, &size);
if (size < 0) {
printf("unable to find file size: %s\n", filename);
rc = (int) size;
diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h
index 13f535c..292e471 100644
--- a/include/usb_mass_storage.h
+++ b/include/usb_mass_storage.h
@@ -9,32 +9,35 @@
#define __USB_MASS_STORAGE_H__
#define SECTOR_SIZE 0x200
-
#include <mmc.h>
#include <linux/usb/composite.h>
-struct ums_device {
- struct mmc *mmc;
- int dev_num;
- int offset;
- int part_size;
-};
+#ifndef UMS_START_BLOCK
+#define UMS_START_BLOCK 0
+#endif
-struct ums_board_info {
- int (*read_sector)(struct ums_device *ums_dev,
+#ifndef UMS_PART_SIZE
+#define UMS_PART_SIZE 0
+#endif
+
+struct ums {
+ int (*read_sector)(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, void *buf);
- int (*write_sector)(struct ums_device *ums_dev,
+ int (*write_sector)(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf);
- void (*get_capacity)(struct ums_device *ums_dev,
+ void (*get_capacity)(struct ums *ums_dev,
long long int *capacity);
const char *name;
- struct ums_device ums_dev;
+ struct mmc *mmc;
+ int offset;
+ int part_size;
};
-int fsg_init(struct ums_board_info *);
+extern struct ums *ums;
+
+int fsg_init(struct ums *);
void fsg_cleanup(void);
-struct ums_board_info *board_ums_init(unsigned int, unsigned int,
- unsigned int);
+struct ums *ums_init(unsigned int);
int fsg_main_thread(void *);
#ifdef CONFIG_USB_GADGET_MASS_STORAGE
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation.
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 2/4] usb: ums: code refactoring to improve reusability at other boards Przemyslaw Marczak
@ 2013-10-16 13:21 ` Przemyslaw Marczak
2013-10-17 17:41 ` Marek Vasut
2013-10-16 13:21 ` [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
4 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-16 13:21 UTC (permalink / raw)
To: u-boot
Before this change ums disk capacity was miscalculated because
of integer overflow.
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
---
board/samsung/common/ums.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
index 1f28590..6c4e6c4 100644
--- a/board/samsung/common/ums.c
+++ b/board/samsung/common/ums.c
@@ -37,11 +37,19 @@ static int ums_write_sector(struct ums *ums_dev,
static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
{
- long long int tmp_capacity;
+ int64_t mmc_capacity = (int64_t)ums_dev->mmc->capacity;
+ int64_t ums_capacity = (int64_t)ums_dev->part_size * SECTOR_SIZE;
+ int64_t ums_offset = (int64_t)ums_dev->offset * SECTOR_SIZE;
- tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
- * SECTOR_SIZE);
- *capacity = ums_dev->mmc->capacity - tmp_capacity;
+ if (ums_capacity && ((ums_capacity + ums_offset) < mmc_capacity))
+ *capacity = ums_capacity;
+ else
+ *capacity = mmc_capacity - ums_offset;
+
+ printf("UMS: partition capacity: %#llx blocks\n"
+ "UMS: partition start block: %#x\n",
+ *capacity / SECTOR_SIZE,
+ ums_dev->offset);
}
static struct ums ums_dev = {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
` (2 preceding siblings ...)
2013-10-16 13:21 ` [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation Przemyslaw Marczak
@ 2013-10-16 13:21 ` Przemyslaw Marczak
2013-10-17 17:43 ` Marek Vasut
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
4 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-16 13:21 UTC (permalink / raw)
To: u-boot
This patch allows exiting from UMS mode to u-boot prompt
by detaching usb cable or by pressing ctrl+c.
Add new config: CONFIG_USB_CABLE_CHECK. If defined then board
file should provide function: usb_cable_connected() (include/usb.h)
that return 1 if cable is connected and 0 otherwise.
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
---
common/cmd_usb_mass_storage.c | 21 +++++++++++++--------
drivers/usb/gadget/f_mass_storage.c | 24 +++++++++++++++++++++---
include/usb.h | 10 ++++++++++
3 files changed, 44 insertions(+), 11 deletions(-)
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index f6ceba7..9224d3c 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -5,6 +5,7 @@
* SPDX-License-Identifier: GPL-2.0+
*/
+#include <errno.h>
#include <common.h>
#include <command.h>
#include <g_dnl.h>
@@ -47,16 +48,20 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
g_dnl_register("ums");
while (1) {
- /* Handle control-c and timeouts */
- if (ctrlc()) {
- error("The remote end did not respond in time.");
- goto exit;
- }
-
usb_gadget_handle_interrupts();
- /* Check if USB cable has been detached */
- if (fsg_main_thread(NULL) == EIO)
+
+ rc = fsg_main_thread(NULL);
+ if (rc) {
+ /* Check I/O error */
+ if (rc == -EIO)
+ printf("\rCheck USB cable connection\n");
+
+ /* Check CTRL+C */
+ if (rc == -EPIPE)
+ printf("\rCTRL+C - Operation aborted\n");
+
goto exit;
+ }
}
exit:
g_dnl_unregister();
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 9560deb..a49572d 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -245,6 +245,7 @@
#include <config.h>
#include <malloc.h>
#include <common.h>
+#include <usb.h>
#include <linux/err.h>
#include <linux/usb/ch9.h>
@@ -678,6 +679,18 @@ static int sleep_thread(struct fsg_common *common)
k++;
}
+ if (k == 10) {
+ /* Handle CTRL+C */
+ if (ctrlc())
+ return -EPIPE;
+#ifdef CONFIG_USB_CABLE_CHECK
+ /* Check cable connection */
+ if (!usb_cable_connected())
+ return -EIO;
+#endif
+ k = 0;
+ }
+
usb_gadget_handle_interrupts();
}
common->thread_wakeup_needed = 0;
@@ -2389,6 +2402,7 @@ static void handle_exception(struct fsg_common *common)
int fsg_main_thread(void *common_)
{
+ int ret;
struct fsg_common *common = the_fsg_common;
/* The main loop */
do {
@@ -2398,12 +2412,16 @@ int fsg_main_thread(void *common_)
}
if (!common->running) {
- sleep_thread(common);
+ ret = sleep_thread(common);
+ if (ret)
+ return ret;
+
continue;
}
- if (get_next_command(common))
- continue;
+ ret = get_next_command(common);
+ if (ret)
+ return ret;
if (!exception_in_progress(common))
common->state = FSG_STATE_DATA_PHASE;
diff --git a/include/usb.h b/include/usb.h
index 17fb68c..8c1789f 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -197,6 +197,16 @@ int board_usb_init(int index, enum board_usb_init_type init);
*/
int board_usb_cleanup(int index, enum board_usb_init_type init);
+/*
+ * If CONFIG_USB_CABLE_CHECK is set then this function
+ * should be defined in board file.
+ *
+ * @return 1 if cable is connected and 0 otherwise.
+ */
+#ifdef CONFIG_USB_CABLE_CHECK
+int usb_cable_connected(void);
+#endif
+
#ifdef CONFIG_USB_STORAGE
#define USB_MAX_STOR_DEV 5
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory
2013-10-16 13:21 ` [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
@ 2013-10-17 17:39 ` Marek Vasut
2013-10-18 11:38 ` Przemyslaw Marczak
0 siblings, 1 reply; 22+ messages in thread
From: Marek Vasut @ 2013-10-17 17:39 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> UMS init was implemented in trats board file but mostly it comprises
> common code. Due to that it has been moved to common/ums.c to avoid
> code duplication in the future.
>
> Changes:
> - move ums initialization code from trats to common/ums.c
> - remove unused CONFIG_USB_GADGET_MASS_STORAGE from trats.h
>
> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Minkyu Kang <mk7.kang@samsung.com>
> Cc: Lukasz Majewski <l.majewski@samsung.com>
> ---
> board/samsung/common/Makefile | 1 +
> board/samsung/common/ums.c | 66
> +++++++++++++++++++++++++++++++++++++++++ board/samsung/trats/trats.c |
> 62 -------------------------------------- include/configs/trats.h |
> 2 --
> 4 files changed, 67 insertions(+), 64 deletions(-)
> create mode 100644 board/samsung/common/ums.c
>
> diff --git a/board/samsung/common/Makefile b/board/samsung/common/Makefile
> index ad7564c..d122169 100644
> --- a/board/samsung/common/Makefile
> +++ b/board/samsung/common/Makefile
> @@ -11,6 +11,7 @@ LIB = $(obj)libsamsung.o
>
> COBJS-$(CONFIG_SOFT_I2C_MULTI_BUS) += multi_i2c.o
> COBJS-$(CONFIG_THOR_FUNCTION) += thor.o
> +COBJS-$(CONFIG_CMD_USB_MASS_STORAGE) += ums.o
>
> SRCS := $(COBJS-y:.o=.c)
> OBJS := $(addprefix $(obj),$(COBJS-y))
> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
> new file mode 100644
> index 0000000..506f4b5
> --- /dev/null
> +++ b/board/samsung/common/ums.c
> @@ -0,0 +1,66 @@
> +/*
> + * Copyright (C) 2013 Samsung Electronics
> + * Lukasz Majewski <l.majewski@samsung.com>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <usb_mass_storage.h>
> +#include <part.h>
> +
> +static int ums_read_sector(struct ums_device *ums_dev,
> + ulong start, lbaint_t blkcnt, void *buf)
> +{
> + if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
> + start + ums_dev->offset, blkcnt,
> + buf) != blkcnt)
This looks like hell.
typeT block_dev = ums_dev->mmc;
int ret;
ret = block_dev->block_read(....);
return ret;
Is it necessary to return -1? Why ?
Please fix the whole thing in-place first, then rebase this migration patch on
top of the fix.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation.
2013-10-16 13:21 ` [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation Przemyslaw Marczak
@ 2013-10-17 17:41 ` Marek Vasut
2013-10-18 15:05 ` Przemyslaw Marczak
0 siblings, 1 reply; 22+ messages in thread
From: Marek Vasut @ 2013-10-17 17:41 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> Before this change ums disk capacity was miscalculated because
> of integer overflow.
>
> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
> Cc: Marek Vasut <marex@denx.de>
> ---
> board/samsung/common/ums.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
> index 1f28590..6c4e6c4 100644
> --- a/board/samsung/common/ums.c
> +++ b/board/samsung/common/ums.c
> @@ -37,11 +37,19 @@ static int ums_write_sector(struct ums *ums_dev,
>
> static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
> {
> - long long int tmp_capacity;
> + int64_t mmc_capacity = (int64_t)ums_dev->mmc->capacity;
Why are these casts here?
> + int64_t ums_capacity = (int64_t)ums_dev->part_size * SECTOR_SIZE;
> + int64_t ums_offset = (int64_t)ums_dev->offset * SECTOR_SIZE;
And here all around? And why are these values signed, can there ever be negative
value in them?
> - tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
> - * SECTOR_SIZE);
> - *capacity = ums_dev->mmc->capacity - tmp_capacity;
> + if (ums_capacity && ((ums_capacity + ums_offset) < mmc_capacity))
> + *capacity = ums_capacity;
> + else
> + *capacity = mmc_capacity - ums_offset;
Urgh, what exactly does this code achieve again?
> + printf("UMS: partition capacity: %#llx blocks\n"
> + "UMS: partition start block: %#x\n",
> + *capacity / SECTOR_SIZE,
> + ums_dev->offset);
> }
>
> static struct ums ums_dev = {
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable
2013-10-16 13:21 ` [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
@ 2013-10-17 17:43 ` Marek Vasut
0 siblings, 0 replies; 22+ messages in thread
From: Marek Vasut @ 2013-10-17 17:43 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> This patch allows exiting from UMS mode to u-boot prompt
> by detaching usb cable or by pressing ctrl+c.
>
> Add new config: CONFIG_USB_CABLE_CHECK. If defined then board
> file should provide function: usb_cable_connected() (include/usb.h)
> that return 1 if cable is connected and 0 otherwise.
>
> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
> Cc: Marek Vasut <marex@denx.de>
> ---
[...]
> @@ -678,6 +679,18 @@ static int sleep_thread(struct fsg_common *common)
> k++;
> }
>
> + if (k == 10) {
> + /* Handle CTRL+C */
> + if (ctrlc())
> + return -EPIPE;
> +#ifdef CONFIG_USB_CABLE_CHECK
Please document this newly added option in README.
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory
2013-10-17 17:39 ` Marek Vasut
@ 2013-10-18 11:38 ` Przemyslaw Marczak
2013-10-18 13:58 ` Marek Vasut
0 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-18 11:38 UTC (permalink / raw)
To: u-boot
Hello Marek,
Thank you for fast reply.
On 10/17/2013 07:39 PM, Marek Vasut wrote:
> Dear Przemyslaw Marczak,
>
>> UMS init was implemented in trats board file but mostly it comprises
>> common code. Due to that it has been moved to common/ums.c to avoid
>> code duplication in the future.
>>
>> Changes:
>> - move ums initialization code from trats to common/ums.c
>> - remove unused CONFIG_USB_GADGET_MASS_STORAGE from trats.h
>>
>> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
>> Cc: Marek Vasut <marex@denx.de>
>> Cc: Minkyu Kang <mk7.kang@samsung.com>
>> Cc: Lukasz Majewski <l.majewski@samsung.com>
>> ---
>> board/samsung/common/Makefile | 1 +
>> board/samsung/common/ums.c | 66
>> +++++++++++++++++++++++++++++++++++++++++ board/samsung/trats/trats.c |
>> 62 -------------------------------------- include/configs/trats.h |
>> 2 --
>> 4 files changed, 67 insertions(+), 64 deletions(-)
>> create mode 100644 board/samsung/common/ums.c
>>
>> diff --git a/board/samsung/common/Makefile b/board/samsung/common/Makefile
>> index ad7564c..d122169 100644
>> --- a/board/samsung/common/Makefile
>> +++ b/board/samsung/common/Makefile
>> @@ -11,6 +11,7 @@ LIB = $(obj)libsamsung.o
>>
>> COBJS-$(CONFIG_SOFT_I2C_MULTI_BUS) += multi_i2c.o
>> COBJS-$(CONFIG_THOR_FUNCTION) += thor.o
>> +COBJS-$(CONFIG_CMD_USB_MASS_STORAGE) += ums.o
>>
>> SRCS := $(COBJS-y:.o=.c)
>> OBJS := $(addprefix $(obj),$(COBJS-y))
>> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
>> new file mode 100644
>> index 0000000..506f4b5
>> --- /dev/null
>> +++ b/board/samsung/common/ums.c
>> @@ -0,0 +1,66 @@
>> +/*
>> + * Copyright (C) 2013 Samsung Electronics
>> + * Lukasz Majewski <l.majewski@samsung.com>
>> + *
>> + * SPDX-License-Identifier: GPL-2.0+
>> + */
>> +
>> +#include <common.h>
>> +#include <usb_mass_storage.h>
>> +#include <part.h>
>> +
>> +static int ums_read_sector(struct ums_device *ums_dev,
>> + ulong start, lbaint_t blkcnt, void *buf)
>> +{
>> + if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
>> + start + ums_dev->offset, blkcnt,
>> + buf) != blkcnt)
>
> This looks like hell.
>
> typeT block_dev = ums_dev->mmc;
> int ret;
>
> ret = block_dev->block_read(....);
>
> return ret;
Ok, you're right - I will fix it in next patch set.
>
> Is it necessary to return -1? Why ?
>
It's only because of ums gadged driver design but it is easy to simplify.
> Please fix the whole thing in-place first, then rebase this migration patch on
> top of the fix.
>
OK, migration patch will be at the top.
And one more. Do you want me to make it applicable to usb-next or
usb-master tree?
Thank you for comments.
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory
2013-10-18 11:38 ` Przemyslaw Marczak
@ 2013-10-18 13:58 ` Marek Vasut
0 siblings, 0 replies; 22+ messages in thread
From: Marek Vasut @ 2013-10-18 13:58 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> Hello Marek,
> Thank you for fast reply.
>
> On 10/17/2013 07:39 PM, Marek Vasut wrote:
> > Dear Przemyslaw Marczak,
> >
> >> UMS init was implemented in trats board file but mostly it comprises
> >> common code. Due to that it has been moved to common/ums.c to avoid
> >> code duplication in the future.
> >>
> >> Changes:
> >> - move ums initialization code from trats to common/ums.c
> >> - remove unused CONFIG_USB_GADGET_MASS_STORAGE from trats.h
> >>
> >> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
> >> Cc: Marek Vasut <marex@denx.de>
> >> Cc: Minkyu Kang <mk7.kang@samsung.com>
> >> Cc: Lukasz Majewski <l.majewski@samsung.com>
> >> ---
> >>
> >> board/samsung/common/Makefile | 1 +
> >> board/samsung/common/ums.c | 66
> >>
> >> +++++++++++++++++++++++++++++++++++++++++ board/samsung/trats/trats.c
> >> |
> >>
> >> 62 -------------------------------------- include/configs/trats.h
> >> |
> >>
> >> 2 --
> >>
> >> 4 files changed, 67 insertions(+), 64 deletions(-)
> >> create mode 100644 board/samsung/common/ums.c
> >>
> >> diff --git a/board/samsung/common/Makefile
> >> b/board/samsung/common/Makefile index ad7564c..d122169 100644
> >> --- a/board/samsung/common/Makefile
> >> +++ b/board/samsung/common/Makefile
> >> @@ -11,6 +11,7 @@ LIB = $(obj)libsamsung.o
> >>
> >> COBJS-$(CONFIG_SOFT_I2C_MULTI_BUS) += multi_i2c.o
> >> COBJS-$(CONFIG_THOR_FUNCTION) += thor.o
> >>
> >> +COBJS-$(CONFIG_CMD_USB_MASS_STORAGE) += ums.o
> >>
> >> SRCS := $(COBJS-y:.o=.c)
> >> OBJS := $(addprefix $(obj),$(COBJS-y))
> >>
> >> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
> >> new file mode 100644
> >> index 0000000..506f4b5
> >> --- /dev/null
> >> +++ b/board/samsung/common/ums.c
> >> @@ -0,0 +1,66 @@
> >> +/*
> >> + * Copyright (C) 2013 Samsung Electronics
> >> + * Lukasz Majewski <l.majewski@samsung.com>
> >> + *
> >> + * SPDX-License-Identifier: GPL-2.0+
> >> + */
> >> +
> >> +#include <common.h>
> >> +#include <usb_mass_storage.h>
> >> +#include <part.h>
> >> +
> >> +static int ums_read_sector(struct ums_device *ums_dev,
> >> + ulong start, lbaint_t blkcnt, void *buf)
> >> +{
> >> + if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
> >> + start + ums_dev->offset, blkcnt,
> >> + buf) != blkcnt)
> >
> > This looks like hell.
> >
> > typeT block_dev = ums_dev->mmc;
> > int ret;
> >
> > ret = block_dev->block_read(....);
> >
> > return ret;
>
> Ok, you're right - I will fix it in next patch set.
>
> > Is it necessary to return -1? Why ?
>
> It's only because of ums gadged driver design but it is easy to simplify.
A proper errno.h patch would be good here.
> > Please fix the whole thing in-place first, then rebase this migration
> > patch on top of the fix.
>
> OK, migration patch will be at the top.
>
> And one more. Do you want me to make it applicable to usb-next or
> usb-master tree?
-next please.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation.
2013-10-17 17:41 ` Marek Vasut
@ 2013-10-18 15:05 ` Przemyslaw Marczak
2013-10-19 0:57 ` Marek Vasut
0 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-18 15:05 UTC (permalink / raw)
To: u-boot
Hi Marek,
On 10/17/2013 07:41 PM, Marek Vasut wrote:
> Dear Przemyslaw Marczak,
>
>> Before this change ums disk capacity was miscalculated because
>> of integer overflow.
>>
>> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
>> Cc: Marek Vasut <marex@denx.de>
>> ---
>> board/samsung/common/ums.c | 16 ++++++++++++----
>> 1 file changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
>> index 1f28590..6c4e6c4 100644
>> --- a/board/samsung/common/ums.c
>> +++ b/board/samsung/common/ums.c
>> @@ -37,11 +37,19 @@ static int ums_write_sector(struct ums *ums_dev,
>>
>> static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
>> {
>> - long long int tmp_capacity;
>> + int64_t mmc_capacity = (int64_t)ums_dev->mmc->capacity;
>
> Why are these casts here?
>
>> + int64_t ums_capacity = (int64_t)ums_dev->part_size * SECTOR_SIZE;
>> + int64_t ums_offset = (int64_t)ums_dev->offset * SECTOR_SIZE;
>
> And here all around? And why are these values signed, can there ever be negative
> value in them?
>
I tried to fix it without changes in ums driver because it works fine.
Of course capacity can't be a negative value.
When we set some offset and some part size we have an integer overflow
at this line, just before cast to long long int:
>> - tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
>> - * SECTOR_SIZE);
>> - *capacity = ums_dev->mmc->capacity - tmp_capacity;
In the best case of overflow - ums partition capacity will have the same
value as mmc cap, but if offset was set, then the partition size will be
exceeded.
>> + if (ums_capacity && ((ums_capacity + ums_offset) < mmc_capacity))
>> + *capacity = ums_capacity;
>> + else
>> + *capacity = mmc_capacity - ums_offset;
>
> Urgh, what exactly does this code achieve again?
This code above avoids situation when tmp_capacity value is bigger than
real mmc capacity. I don't check next the offset but this is also the
reason why I put printf here. I assume that developer should know how to
define UMS_START_BLOCK and UMS_PART_SIZE if no, some information will be
printed.
>
>> + printf("UMS: partition capacity: %#llx blocks\n"
>> + "UMS: partition start block: %#x\n",
>> + *capacity / SECTOR_SIZE,
>> + ums_dev->offset);
>> }
>>
>> static struct ums ums_dev = {
>
> Best regards,
> Marek Vasut
>
In summary I will change signed variables to unsigned here and few in
the ums gadget driver.
Moreover now I think that it will be better to replace part_size from
the struct ums_dev with part_blk_num and compute its value at ums_init
function. And then pointer to ums_get_capacity is not needed in ums
structure.
What do you think about this?
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation.
2013-10-18 15:05 ` Przemyslaw Marczak
@ 2013-10-19 0:57 ` Marek Vasut
2013-10-22 11:04 ` Przemyslaw Marczak
0 siblings, 1 reply; 22+ messages in thread
From: Marek Vasut @ 2013-10-19 0:57 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> Hi Marek,
>
> On 10/17/2013 07:41 PM, Marek Vasut wrote:
> > Dear Przemyslaw Marczak,
> >
> >> Before this change ums disk capacity was miscalculated because
> >> of integer overflow.
> >>
> >> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
> >> Cc: Marek Vasut <marex@denx.de>
> >> ---
> >>
> >> board/samsung/common/ums.c | 16 ++++++++++++----
> >> 1 file changed, 12 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
> >> index 1f28590..6c4e6c4 100644
> >> --- a/board/samsung/common/ums.c
> >> +++ b/board/samsung/common/ums.c
> >> @@ -37,11 +37,19 @@ static int ums_write_sector(struct ums *ums_dev,
> >>
> >> static void ums_get_capacity(struct ums *ums_dev, long long int
> >> *capacity) {
> >>
> >> - long long int tmp_capacity;
> >> + int64_t mmc_capacity = (int64_t)ums_dev->mmc->capacity;
> >
> > Why are these casts here?
> >
> >> + int64_t ums_capacity = (int64_t)ums_dev->part_size * SECTOR_SIZE;
> >> + int64_t ums_offset = (int64_t)ums_dev->offset * SECTOR_SIZE;
> >
> > And here all around? And why are these values signed, can there ever be
> > negative value in them?
>
> I tried to fix it without changes in ums driver because it works fine.
> Of course capacity can't be a negative value.
>
> When we set some offset and some part size we have an integer overflow
>
> at this line, just before cast to long long int:
> >> - tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
> >> - * SECTOR_SIZE);
> >> - *capacity = ums_dev->mmc->capacity - tmp_capacity;
>
> In the best case of overflow - ums partition capacity will have the same
> value as mmc cap, but if offset was set, then the partition size will be
> exceeded.
>
> >> + if (ums_capacity && ((ums_capacity + ums_offset) < mmc_capacity))
> >> + *capacity = ums_capacity;
> >> + else
> >> + *capacity = mmc_capacity - ums_offset;
> >
> > Urgh, what exactly does this code achieve again?
>
> This code above avoids situation when tmp_capacity value is bigger than
> real mmc capacity. I don't check next the offset but this is also the
> reason why I put printf here. I assume that developer should know how to
> define UMS_START_BLOCK and UMS_PART_SIZE if no, some information will be
> printed.
>
> >> + printf("UMS: partition capacity: %#llx blocks\n"
> >> + "UMS: partition start block: %#x\n",
> >> + *capacity / SECTOR_SIZE,
> >> + ums_dev->offset);
> >>
> >> }
> >>
> >> static struct ums ums_dev = {
> >
> > Best regards,
> > Marek Vasut
>
> In summary I will change signed variables to unsigned here and few in
> the ums gadget driver.
> Moreover now I think that it will be better to replace part_size from
> the struct ums_dev with part_blk_num and compute its value at ums_init
> function. And then pointer to ums_get_capacity is not needed in ums
> structure.
>
> What do you think about this?
I think the first screaming thing here is ... why is this all multiplied by
SECTOR_SIZE before doing the comparisons and stuffs ? You can do that later
(that does mean do it later, yes).
Try this:
u64 mmc_cap = ums_dev->mmc->capacity / SECTOR_SIZE;
u64 ums_start = ums_dev->offset;
u64 ums_end = ums_start + ums_dev->part_size;
/* Start past MMC size. */
if (ums_start >= mmc_cap)
return -EINVAL;
/* End past MMC size. */
if (ums_end > mmc_cap) {
puts("UMS region larger than MMC device, capping\n");
ums_end = mmc_cap;
}
*capacity = (ums_end - ums_start) * SECTOR_SIZE;
Does this work? You'd need to add debug.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation.
2013-10-19 0:57 ` Marek Vasut
@ 2013-10-22 11:04 ` Przemyslaw Marczak
0 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-22 11:04 UTC (permalink / raw)
To: u-boot
Hello Marek,
On 10/19/2013 02:57 AM, Marek Vasut wrote:
> Dear Przemyslaw Marczak,
>
>> Hi Marek,
>>
>> On 10/17/2013 07:41 PM, Marek Vasut wrote:
>>> Dear Przemyslaw Marczak,
>>>
>>>> Before this change ums disk capacity was miscalculated because
>>>> of integer overflow.
>>>>
>>>> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
>>>> Cc: Marek Vasut <marex@denx.de>
>>>> ---
>>>>
>>>> board/samsung/common/ums.c | 16 ++++++++++++----
>>>> 1 file changed, 12 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
>>>> index 1f28590..6c4e6c4 100644
>>>> --- a/board/samsung/common/ums.c
>>>> +++ b/board/samsung/common/ums.c
>>>> @@ -37,11 +37,19 @@ static int ums_write_sector(struct ums *ums_dev,
>>>>
>>>> static void ums_get_capacity(struct ums *ums_dev, long long int
>>>> *capacity) {
>>>>
>>>> - long long int tmp_capacity;
>>>> + int64_t mmc_capacity = (int64_t)ums_dev->mmc->capacity;
>>>
>>> Why are these casts here?
>>>
>>>> + int64_t ums_capacity = (int64_t)ums_dev->part_size * SECTOR_SIZE;
>>>> + int64_t ums_offset = (int64_t)ums_dev->offset * SECTOR_SIZE;
>>>
>>> And here all around? And why are these values signed, can there ever be
>>> negative value in them?
>>
>> I tried to fix it without changes in ums driver because it works fine.
>> Of course capacity can't be a negative value.
>>
>> When we set some offset and some part size we have an integer overflow
>>
>> at this line, just before cast to long long int:
>>>> - tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
>>>> - * SECTOR_SIZE);
>>>> - *capacity = ums_dev->mmc->capacity - tmp_capacity;
>>
>> In the best case of overflow - ums partition capacity will have the same
>> value as mmc cap, but if offset was set, then the partition size will be
>> exceeded.
>>
>>>> + if (ums_capacity && ((ums_capacity + ums_offset) < mmc_capacity))
>>>> + *capacity = ums_capacity;
>>>> + else
>>>> + *capacity = mmc_capacity - ums_offset;
>>>
>>> Urgh, what exactly does this code achieve again?
>>
>> This code above avoids situation when tmp_capacity value is bigger than
>> real mmc capacity. I don't check next the offset but this is also the
>> reason why I put printf here. I assume that developer should know how to
>> define UMS_START_BLOCK and UMS_PART_SIZE if no, some information will be
>> printed.
>>
>>>> + printf("UMS: partition capacity: %#llx blocks\n"
>>>> + "UMS: partition start block: %#x\n",
>>>> + *capacity / SECTOR_SIZE,
>>>> + ums_dev->offset);
>>>>
>>>> }
>>>>
>>>> static struct ums ums_dev = {
>>>
>>> Best regards,
>>> Marek Vasut
>>
>> In summary I will change signed variables to unsigned here and few in
>> the ums gadget driver.
>> Moreover now I think that it will be better to replace part_size from
>> the struct ums_dev with part_blk_num and compute its value at ums_init
>> function. And then pointer to ums_get_capacity is not needed in ums
>> structure.
>>
>> What do you think about this?
>
> I think the first screaming thing here is ... why is this all multiplied by
> SECTOR_SIZE before doing the comparisons and stuffs ? You can do that later
> (that does mean do it later, yes).
You're right, but actually we don't need to use real card capacity but
only sector count. Patch v2 will include this.
>
> Try this:
>
> u64 mmc_cap = ums_dev->mmc->capacity / SECTOR_SIZE;
> u64 ums_start = ums_dev->offset;
> u64 ums_end = ums_start + ums_dev->part_size;
>
> /* Start past MMC size. */
> if (ums_start >= mmc_cap)
> return -EINVAL;
>
> /* End past MMC size. */
> if (ums_end > mmc_cap) {
> puts("UMS region larger than MMC device, capping\n");
> ums_end = mmc_cap;
> }
>
> *capacity = (ums_end - ums_start) * SECTOR_SIZE;
>
> Does this work? You'd need to add debug.
>
It will only work if UMS_PART_SIZE and UMS_START_BLOCK are set
correctly. In default case when both values are defined as 0 - function
returns null capacity but we don't want this.
Patch v2 will include cases for default, valid and bad definitions of
UMS_PART_SIZE and UMS_START_BLOCK. I will also remove unnecessary code
around capacity validation from ums gadget driver.
Next patch set will be send soon.
Regards
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
` (3 preceding siblings ...)
2013-10-16 13:21 ` [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards Przemyslaw Marczak
` (4 more replies)
4 siblings, 5 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
Quick summary:
- introduce board definable parameters: UMS_START_BLOCK and UMS_PART_SIZE
- remove ums unnecessary code
- move ums structures to just one generic ums structure
- add mmc device num as one of ums parameter
- fix ums capacity miscalculation
- move ums initialization code to Samsung common
- add function usb_cable_connected() which depends on CONFIG_USB_CABLE_CHECK
- add ums exit feature by ctrl+c or cable detachment
Thank you,
Przemyslaw Marczak
Przemyslaw Marczak (5):
usb: ums: code refactoring to improve reusability on other boards.
usb: ums: allows using every mmc device with ums.
usb: ums: fix disk capacity miscalculation and code cleanup
usb: ums: move ums code from trats to Samsung common directory
usb: ums: add ums exit feature by ctrl+c or by detach usb cable
README | 7 ++++
board/samsung/common/Makefile | 1 +
board/samsung/common/ums.c | 76 +++++++++++++++++++++++++++++++++++
board/samsung/trats/trats.c | 62 ----------------------------
common/cmd_usb_mass_storage.c | 51 +++++++++++------------
drivers/usb/gadget/f_mass_storage.c | 67 +++++++++++++++++++-----------
drivers/usb/gadget/storage_common.c | 27 ++-----------
include/configs/trats.h | 2 -
include/usb.h | 10 +++++
include/usb_mass_storage.h | 33 +++++++--------
10 files changed, 180 insertions(+), 156 deletions(-)
create mode 100644 board/samsung/common/ums.c
--
1.7.9.5
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards.
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
2013-10-27 18:18 ` Marek Vasut
2013-10-23 12:30 ` [U-Boot] [PATCH v2 2/5] usb: ums: allows using every mmc device with ums Przemyslaw Marczak
` (3 subsequent siblings)
4 siblings, 1 reply; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
This patch introduces some cleanups to ums code. Changes:
ums common:
- introduce UMS_START_SECTOR and UMS_NUM_SECTORS as defined in
usb_mass_storage.h both default values as 0 if board config
doesn't define them
common cleanup changes:
- change name of struct "ums_board_info" to "ums"
- "ums_device" fields are moved to struct ums and "dev_num" is removed
- change function name: board_ums_init to ums_init
- remove "extern" prefixes from usb_mass_storage.h
cmd_usb_mass_storage:
- change error() to printf() if need to print info message
- change return values to command_ret_t type at ums command code
- add command usage string
Changes v2:
ums common:
- always returns number of read/write sectors
- coding style clean-up
ums gadget:
- calculate amount of read/write from device returned value.
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marek.vasut@gmail.com>
---
board/samsung/trats/trats.c | 51 +++++++++++++++--------------------
common/cmd_usb_mass_storage.c | 27 ++++++++-----------
drivers/usb/gadget/f_mass_storage.c | 43 ++++++++++++++---------------
drivers/usb/gadget/storage_common.c | 3 +--
include/usb_mass_storage.h | 33 ++++++++++++-----------
5 files changed, 73 insertions(+), 84 deletions(-)
diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
index 58d925f..0b58b00 100644
--- a/board/samsung/trats/trats.c
+++ b/board/samsung/trats/trats.c
@@ -774,63 +774,54 @@ void init_panel_info(vidinfo_t *vid)
}
#ifdef CONFIG_USB_GADGET_MASS_STORAGE
-static int ums_read_sector(struct ums_device *ums_dev,
+static int ums_read_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, void *buf)
{
- if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt, buf) != blkcnt)
- return -1;
+ block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
+ lbaint_t blkstart = start + ums_dev->offset;
+ int dev_num = block_dev->dev;
- return 0;
+ return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
}
-static int ums_write_sector(struct ums_device *ums_dev,
+static int ums_write_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf)
{
- if (ums_dev->mmc->block_dev.block_write(ums_dev->dev_num,
- start + ums_dev->offset, blkcnt, buf) != blkcnt)
- return -1;
+ block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
+ lbaint_t blkstart = start + ums_dev->offset;
+ int dev_num = block_dev->dev;
- return 0;
+ return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
}
-static void ums_get_capacity(struct ums_device *ums_dev,
- long long int *capacity)
+static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
{
long long int tmp_capacity;
- tmp_capacity = (long long int) ((ums_dev->offset + ums_dev->part_size)
- * SECTOR_SIZE);
+ tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
+ * SECTOR_SIZE);
*capacity = ums_dev->mmc->capacity - tmp_capacity;
}
-static struct ums_board_info ums_board = {
+static struct ums ums_dev = {
.read_sector = ums_read_sector,
.write_sector = ums_write_sector,
.get_capacity = ums_get_capacity,
- .name = "TRATS UMS disk",
- .ums_dev = {
- .mmc = NULL,
- .dev_num = 0,
- .offset = 0,
- .part_size = 0.
- },
+ .name = "UMS disk",
+ .offset = UMS_START_SECTOR,
+ .part_size = UMS_NUM_SECTORS,
};
-struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
- unsigned int part_size)
+struct ums *ums_init(unsigned int dev_num)
{
- struct mmc *mmc;
+ struct mmc *mmc = NULL;
mmc = find_mmc_device(dev_num);
if (!mmc)
return NULL;
- ums_board.ums_dev.mmc = mmc;
- ums_board.ums_dev.dev_num = dev_num;
- ums_board.ums_dev.offset = offset;
- ums_board.ums_dev.part_size = part_size;
+ ums_dev.mmc = mmc;
- return &ums_board;
+ return &ums_dev;
}
#endif
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index f583caf..f6ceba7 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -22,28 +22,26 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
NULL, 0));
- if (dev_num) {
- error("Set eMMC device to 0! - e.g. ums 0");
- goto fail;
- }
+ if (dev_num)
+ return CMD_RET_USAGE;
unsigned int controller_index = (unsigned int)(simple_strtoul(
usb_controller, NULL, 0));
if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
error("Couldn't init USB controller.");
- goto fail;
+ return CMD_RET_FAILURE;
}
- struct ums_board_info *ums_info = board_ums_init(dev_num, 0, 0);
- if (!ums_info) {
- error("MMC: %d -> NOT available", dev_num);
- goto fail;
+ struct ums *ums = ums_init(dev_num);
+ if (!ums) {
+ printf("MMC: %u no such device\n", dev_num);
+ return CMD_RET_FAILURE;
}
- int rc = fsg_init(ums_info);
+ int rc = fsg_init(ums);
if (rc) {
error("fsg_init failed");
- goto fail;
+ return CMD_RET_FAILURE;
}
g_dnl_register("ums");
@@ -62,13 +60,10 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
}
exit:
g_dnl_unregister();
- return 0;
-
-fail:
- return -1;
+ return CMD_RET_SUCCESS;
}
U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
"Use the UMS [User Mass Storage]",
- "<USB_controller> <mmc_dev>"
+ "ums <USB_controller> <mmc_dev> e.g. ums 0 0"
);
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index b34068a..3b77047 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -444,7 +444,7 @@ static void set_bulk_out_req_length(struct fsg_common *common,
/*-------------------------------------------------------------------------*/
-struct ums_board_info *ums_info;
+struct ums *ums;
struct fsg_common *the_fsg_common;
static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
@@ -760,14 +760,14 @@ static int do_read(struct fsg_common *common)
}
/* Perform the read */
- nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
- if (rc)
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
+ if (!rc)
return -EIO;
- nread = amount;
+
+ nread = rc * SECTOR_SIZE;
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -934,13 +934,13 @@ static int do_write(struct fsg_common *common)
amount = bh->outreq->actual;
/* Perform the write */
- rc = ums_info->write_sector(&(ums_info->ums_dev),
+ rc = ums->write_sector(ums,
file_offset / SECTOR_SIZE,
amount / SECTOR_SIZE,
(char __user *)bh->buf);
- if (rc)
+ if (!rc)
return -EIO;
- nwritten = amount;
+ nwritten = rc * SECTOR_SIZE;
VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -962,6 +962,8 @@ static int do_write(struct fsg_common *common)
/* If an error occurred, report it and its position */
if (nwritten < amount) {
+ printf("nwritten:%d amount:%d\n", nwritten,
+ amount);
curlun->sense_data = SS_WRITE_ERROR;
curlun->info_valid = 1;
break;
@@ -1048,14 +1050,13 @@ static int do_verify(struct fsg_common *common)
}
/* Perform the read */
- nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
- if (rc)
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
+ if (!rc)
return -EIO;
- nread = amount;
+ nread = rc * SECTOR_SIZE;
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -1103,7 +1104,7 @@ static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
buf[4] = 31; /* Additional length */
/* No special options */
sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
- ums_info->name, (u16) 0xffff);
+ ums->name, (u16) 0xffff);
return 36;
}
@@ -2758,9 +2759,9 @@ int fsg_add(struct usb_configuration *c)
return fsg_bind_config(c->cdev, c, fsg_common);
}
-int fsg_init(struct ums_board_info *ums)
+int fsg_init(struct ums *ums_dev)
{
- ums_info = ums;
+ ums = ums_dev;
return 0;
}
diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
index 866e7c7..c2c5424 100644
--- a/drivers/usb/gadget/storage_common.c
+++ b/drivers/usb/gadget/storage_common.c
@@ -275,7 +275,6 @@ struct rw_semaphore { int i; };
#define ETOOSMALL 525
#include <usb_mass_storage.h>
-extern struct ums_board_info *ums_info;
/*-------------------------------------------------------------------------*/
@@ -581,7 +580,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
/* R/W if we can, R/O if we must */
ro = curlun->initially_ro;
- ums_info->get_capacity(&(ums_info->ums_dev), &size);
+ ums->get_capacity(ums, &size);
if (size < 0) {
printf("unable to find file size: %s\n", filename);
rc = (int) size;
diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h
index 13f535c..674ca70 100644
--- a/include/usb_mass_storage.h
+++ b/include/usb_mass_storage.h
@@ -9,32 +9,35 @@
#define __USB_MASS_STORAGE_H__
#define SECTOR_SIZE 0x200
-
#include <mmc.h>
#include <linux/usb/composite.h>
-struct ums_device {
- struct mmc *mmc;
- int dev_num;
- int offset;
- int part_size;
-};
+#ifndef UMS_START_SECTOR
+#define UMS_START_SECTOR 0
+#endif
-struct ums_board_info {
- int (*read_sector)(struct ums_device *ums_dev,
+#ifndef UMS_NUM_SECTORS
+#define UMS_NUM_SECTORS 0
+#endif
+
+struct ums {
+ int (*read_sector)(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, void *buf);
- int (*write_sector)(struct ums_device *ums_dev,
+ int (*write_sector)(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf);
- void (*get_capacity)(struct ums_device *ums_dev,
+ void (*get_capacity)(struct ums *ums_dev,
long long int *capacity);
const char *name;
- struct ums_device ums_dev;
+ struct mmc *mmc;
+ int offset;
+ int part_size;
};
-int fsg_init(struct ums_board_info *);
+extern struct ums *ums;
+
+int fsg_init(struct ums *);
void fsg_cleanup(void);
-struct ums_board_info *board_ums_init(unsigned int, unsigned int,
- unsigned int);
+struct ums *ums_init(unsigned int);
int fsg_main_thread(void *);
#ifdef CONFIG_USB_GADGET_MASS_STORAGE
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 2/5] usb: ums: allows using every mmc device with ums.
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 3/5] usb: ums: fix disk capacity miscalculation and code cleanup Przemyslaw Marczak
` (2 subsequent siblings)
4 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
Before this change ums command only allowed use of mmc 0.
Now this argument can be set.
Changes:
- remove mmc device number checking because it is always positive number
- remove printing "no such device" - it is done by find_mmc_device()
Change-Id: I767e45151ad515c7bef19e6c13087374f5e23c11
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
---
common/cmd_usb_mass_storage.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index f6ceba7..4d3bbd8 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -20,10 +20,11 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
const char *usb_controller = argv[1];
const char *mmc_devstring = argv[2];
- unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
- NULL, 0));
- if (dev_num)
- return CMD_RET_USAGE;
+ unsigned int dev_num = simple_strtoul(mmc_devstring, NULL, 0);
+
+ struct ums *ums = ums_init(dev_num);
+ if (!ums)
+ return CMD_RET_FAILURE;
unsigned int controller_index = (unsigned int)(simple_strtoul(
usb_controller, NULL, 0));
@@ -32,12 +33,6 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
return CMD_RET_FAILURE;
}
- struct ums *ums = ums_init(dev_num);
- if (!ums) {
- printf("MMC: %u no such device\n", dev_num);
- return CMD_RET_FAILURE;
- }
-
int rc = fsg_init(ums);
if (rc) {
error("fsg_init failed");
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 3/5] usb: ums: fix disk capacity miscalculation and code cleanup
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 2/5] usb: ums: allows using every mmc device with ums Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 4/5] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 5/5] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
4 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
This patch prevents:
- ums disk capacity miscalculation because of integer overflow
Changes v2:
- Prevents passing zero size disk capacity to ums gadget driver
- Change function ums_get_capacity() to ums_disk_init() and do ums disk
initialization before gadget init
- Remove unnecessary code from mass storage driver
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
---
board/samsung/trats/trats.c | 49 +++++++++++++++++++++++------------
drivers/usb/gadget/storage_common.c | 26 +++----------------
include/usb_mass_storage.h | 6 ++---
3 files changed, 37 insertions(+), 44 deletions(-)
diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
index 0b58b00..7e0e31e 100644
--- a/board/samsung/trats/trats.c
+++ b/board/samsung/trats/trats.c
@@ -778,7 +778,7 @@ static int ums_read_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, void *buf)
{
block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
- lbaint_t blkstart = start + ums_dev->offset;
+ lbaint_t blkstart = start + ums_dev->start_sector;
int dev_num = block_dev->dev;
return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
@@ -788,30 +788,47 @@ static int ums_write_sector(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf)
{
block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
- lbaint_t blkstart = start + ums_dev->offset;
+ lbaint_t blkstart = start + ums_dev->start_sector;
int dev_num = block_dev->dev;
return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
}
-static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
-{
- long long int tmp_capacity;
-
- tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
- * SECTOR_SIZE);
- *capacity = ums_dev->mmc->capacity - tmp_capacity;
-}
-
static struct ums ums_dev = {
.read_sector = ums_read_sector,
.write_sector = ums_write_sector,
- .get_capacity = ums_get_capacity,
.name = "UMS disk",
- .offset = UMS_START_SECTOR,
- .part_size = UMS_NUM_SECTORS,
};
+static struct ums *ums_disk_init(struct mmc *mmc)
+{
+ uint64_t mmc_end_sector = mmc->capacity / SECTOR_SIZE;
+ uint64_t ums_end_sector = UMS_NUM_SECTORS + UMS_START_SECTOR;
+
+ if (!mmc_end_sector) {
+ error("MMC capacity is not valid");
+ return NULL;
+ }
+
+ ums_dev.mmc = mmc;
+
+ if (ums_end_sector <= mmc_end_sector) {
+ ums_dev.start_sector = UMS_START_SECTOR;
+ if (UMS_NUM_SECTORS)
+ ums_dev.num_sectors = UMS_NUM_SECTORS;
+ else
+ ums_dev.num_sectors = mmc_end_sector - UMS_START_SECTOR;
+ } else {
+ ums_dev.num_sectors = mmc_end_sector;
+ puts("UMS: defined bad disk parameters. Using default.\n");
+ }
+
+ printf("UMS: disk start sector: %#x, count: %#x\n",
+ ums_dev.start_sector, ums_dev.num_sectors);
+
+ return &ums_dev;
+}
+
struct ums *ums_init(unsigned int dev_num)
{
struct mmc *mmc = NULL;
@@ -820,8 +837,6 @@ struct ums *ums_init(unsigned int dev_num)
if (!mmc)
return NULL;
- ums_dev.mmc = mmc;
-
- return &ums_dev;
+ return ums_disk_init(mmc);
}
#endif
diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
index c2c5424..02803df 100644
--- a/drivers/usb/gadget/storage_common.c
+++ b/drivers/usb/gadget/storage_common.c
@@ -572,36 +572,16 @@ static struct usb_gadget_strings fsg_stringtab = {
static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
{
int ro;
- int rc = -EINVAL;
- loff_t size;
- loff_t num_sectors;
- loff_t min_sectors;
/* R/W if we can, R/O if we must */
ro = curlun->initially_ro;
- ums->get_capacity(ums, &size);
- if (size < 0) {
- printf("unable to find file size: %s\n", filename);
- rc = (int) size;
- goto out;
- }
- num_sectors = size >> 9; /* File size in 512-byte blocks */
- min_sectors = 1;
- if (num_sectors < min_sectors) {
- printf("file too small: %s\n", filename);
- rc = -ETOOSMALL;
- goto out;
- }
-
curlun->ro = ro;
- curlun->file_length = size;
- curlun->num_sectors = num_sectors;
+ curlun->file_length = ums->num_sectors << 9;
+ curlun->num_sectors = ums->num_sectors;
debug("open backing file: %s\n", filename);
- rc = 0;
-out:
- return rc;
+ return 0;
}
static void fsg_lun_close(struct fsg_lun *curlun)
diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h
index 674ca70..9df3adc 100644
--- a/include/usb_mass_storage.h
+++ b/include/usb_mass_storage.h
@@ -25,12 +25,10 @@ struct ums {
ulong start, lbaint_t blkcnt, void *buf);
int (*write_sector)(struct ums *ums_dev,
ulong start, lbaint_t blkcnt, const void *buf);
- void (*get_capacity)(struct ums *ums_dev,
- long long int *capacity);
+ unsigned int start_sector;
+ unsigned int num_sectors;
const char *name;
struct mmc *mmc;
- int offset;
- int part_size;
};
extern struct ums *ums;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 4/5] usb: ums: move ums code from trats to Samsung common directory
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
` (2 preceding siblings ...)
2013-10-23 12:30 ` [U-Boot] [PATCH v2 3/5] usb: ums: fix disk capacity miscalculation and code cleanup Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 5/5] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
4 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
UMS init was implemented in trats board file but mostly it comprises
common code. Due to that it has been moved to common/ums.c to avoid
code duplication in the future.
Changes:
- move ums initialization code from trats to common/ums.c
- remove unused CONFIG_USB_GADGET_MASS_STORAGE from trats.h
Changes v2:
- move this patch at the top of code cleanups patches
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
board/samsung/common/Makefile | 1 +
board/samsung/common/ums.c | 76 +++++++++++++++++++++++++++++++++++++++++
board/samsung/trats/trats.c | 68 ------------------------------------
include/configs/trats.h | 2 --
4 files changed, 77 insertions(+), 70 deletions(-)
create mode 100644 board/samsung/common/ums.c
diff --git a/board/samsung/common/Makefile b/board/samsung/common/Makefile
index ad7564c..d122169 100644
--- a/board/samsung/common/Makefile
+++ b/board/samsung/common/Makefile
@@ -11,6 +11,7 @@ LIB = $(obj)libsamsung.o
COBJS-$(CONFIG_SOFT_I2C_MULTI_BUS) += multi_i2c.o
COBJS-$(CONFIG_THOR_FUNCTION) += thor.o
+COBJS-$(CONFIG_CMD_USB_MASS_STORAGE) += ums.o
SRCS := $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/samsung/common/ums.c b/board/samsung/common/ums.c
new file mode 100644
index 0000000..dc155ad
--- /dev/null
+++ b/board/samsung/common/ums.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2013 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <usb_mass_storage.h>
+#include <part.h>
+
+static int ums_read_sector(struct ums *ums_dev,
+ ulong start, lbaint_t blkcnt, void *buf)
+{
+ block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
+ lbaint_t blkstart = start + ums_dev->start_sector;
+ int dev_num = block_dev->dev;
+
+ return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
+}
+
+static int ums_write_sector(struct ums *ums_dev,
+ ulong start, lbaint_t blkcnt, const void *buf)
+{
+ block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
+ lbaint_t blkstart = start + ums_dev->start_sector;
+ int dev_num = block_dev->dev;
+
+ return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
+}
+
+static struct ums ums_dev = {
+ .read_sector = ums_read_sector,
+ .write_sector = ums_write_sector,
+ .name = "UMS disk",
+};
+
+static struct ums *ums_disk_init(struct mmc *mmc)
+{
+ uint64_t mmc_end_sector = mmc->capacity / SECTOR_SIZE;
+ uint64_t ums_end_sector = UMS_NUM_SECTORS + UMS_START_SECTOR;
+
+ if (!mmc_end_sector) {
+ error("MMC capacity is not valid");
+ return NULL;
+ }
+
+ ums_dev.mmc = mmc;
+
+ if (ums_end_sector <= mmc_end_sector) {
+ ums_dev.start_sector = UMS_START_SECTOR;
+ if (UMS_NUM_SECTORS)
+ ums_dev.num_sectors = UMS_NUM_SECTORS;
+ else
+ ums_dev.num_sectors = mmc_end_sector - UMS_START_SECTOR;
+ } else {
+ ums_dev.num_sectors = mmc_end_sector;
+ puts("UMS: defined bad disk parameters. Using default.\n");
+ }
+
+ printf("UMS: disk start sector: %#x, count: %#x\n",
+ ums_dev.start_sector, ums_dev.num_sectors);
+
+ return &ums_dev;
+}
+
+struct ums *ums_init(unsigned int dev_num)
+{
+ struct mmc *mmc = NULL;
+
+ mmc = find_mmc_device(dev_num);
+ if (!mmc)
+ return NULL;
+
+ return ums_disk_init(mmc);
+}
diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
index 7e0e31e..db5828d 100644
--- a/board/samsung/trats/trats.c
+++ b/board/samsung/trats/trats.c
@@ -772,71 +772,3 @@ void init_panel_info(vidinfo_t *vid)
setenv("lcdinfo", "lcd=s6e8ax0");
}
-
-#ifdef CONFIG_USB_GADGET_MASS_STORAGE
-static int ums_read_sector(struct ums *ums_dev,
- ulong start, lbaint_t blkcnt, void *buf)
-{
- block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
- lbaint_t blkstart = start + ums_dev->start_sector;
- int dev_num = block_dev->dev;
-
- return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
-}
-
-static int ums_write_sector(struct ums *ums_dev,
- ulong start, lbaint_t blkcnt, const void *buf)
-{
- block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
- lbaint_t blkstart = start + ums_dev->start_sector;
- int dev_num = block_dev->dev;
-
- return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
-}
-
-static struct ums ums_dev = {
- .read_sector = ums_read_sector,
- .write_sector = ums_write_sector,
- .name = "UMS disk",
-};
-
-static struct ums *ums_disk_init(struct mmc *mmc)
-{
- uint64_t mmc_end_sector = mmc->capacity / SECTOR_SIZE;
- uint64_t ums_end_sector = UMS_NUM_SECTORS + UMS_START_SECTOR;
-
- if (!mmc_end_sector) {
- error("MMC capacity is not valid");
- return NULL;
- }
-
- ums_dev.mmc = mmc;
-
- if (ums_end_sector <= mmc_end_sector) {
- ums_dev.start_sector = UMS_START_SECTOR;
- if (UMS_NUM_SECTORS)
- ums_dev.num_sectors = UMS_NUM_SECTORS;
- else
- ums_dev.num_sectors = mmc_end_sector - UMS_START_SECTOR;
- } else {
- ums_dev.num_sectors = mmc_end_sector;
- puts("UMS: defined bad disk parameters. Using default.\n");
- }
-
- printf("UMS: disk start sector: %#x, count: %#x\n",
- ums_dev.start_sector, ums_dev.num_sectors);
-
- return &ums_dev;
-}
-
-struct ums *ums_init(unsigned int dev_num)
-{
- struct mmc *mmc = NULL;
-
- mmc = find_mmc_device(dev_num);
- if (!mmc)
- return NULL;
-
- return ums_disk_init(mmc);
-}
-#endif
diff --git a/include/configs/trats.h b/include/configs/trats.h
index f5bb6aa..3e67229 100644
--- a/include/configs/trats.h
+++ b/include/configs/trats.h
@@ -323,9 +323,7 @@
#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE ((500 * 120 * 4) + (1 << 12))
#define CONFIG_CMD_USB_MASS_STORAGE
-#if defined(CONFIG_CMD_USB_MASS_STORAGE)
#define CONFIG_USB_GADGET_MASS_STORAGE
-#endif
/* Pass open firmware flat tree */
#define CONFIG_OF_LIBFDT 1
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 5/5] usb: ums: add ums exit feature by ctrl+c or by detach usb cable
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
` (3 preceding siblings ...)
2013-10-23 12:30 ` [U-Boot] [PATCH v2 4/5] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
@ 2013-10-23 12:30 ` Przemyslaw Marczak
4 siblings, 0 replies; 22+ messages in thread
From: Przemyslaw Marczak @ 2013-10-23 12:30 UTC (permalink / raw)
To: u-boot
This patch allows exiting from UMS mode to u-boot prompt
by detaching usb cable or by pressing ctrl+c.
Add new config: CONFIG_USB_CABLE_CHECK. If defined then board
file should provide function: usb_cable_connected() (include/usb.h)
that return 1 if cable is connected and 0 otherwise.
Changes v2:
- add a note to the README
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Cc: Marek Vasut <marex@denx.de>
---
README | 7 +++++++
common/cmd_usb_mass_storage.c | 21 +++++++++++++--------
drivers/usb/gadget/f_mass_storage.c | 24 +++++++++++++++++++++---
include/usb.h | 10 ++++++++++
4 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/README b/README
index cee8e2f..75329b1 100644
--- a/README
+++ b/README
@@ -1362,6 +1362,13 @@ The following options need to be configured:
for your device
- CONFIG_USBD_PRODUCTID 0xFFFF
+ Some USB device drivers may need to check USB cable attachment.
+ In this case you can enable following config in BoardName.h:
+ CONFIG_USB_CABLE_CHECK
+ This enables function definition:
+ - usb_cable_connected() in include/usb.h
+ Implementation of this function is board-specific.
+
- ULPI Layer Support:
The ULPI (UTMI Low Pin (count) Interface) PHYs are supported via
the generic ULPI layer. The generic layer accesses the ULPI PHY
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index 4d3bbd8..99487f4 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -5,6 +5,7 @@
* SPDX-License-Identifier: GPL-2.0+
*/
+#include <errno.h>
#include <common.h>
#include <command.h>
#include <g_dnl.h>
@@ -42,16 +43,20 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
g_dnl_register("ums");
while (1) {
- /* Handle control-c and timeouts */
- if (ctrlc()) {
- error("The remote end did not respond in time.");
- goto exit;
- }
-
usb_gadget_handle_interrupts();
- /* Check if USB cable has been detached */
- if (fsg_main_thread(NULL) == EIO)
+
+ rc = fsg_main_thread(NULL);
+ if (rc) {
+ /* Check I/O error */
+ if (rc == -EIO)
+ printf("\rCheck USB cable connection\n");
+
+ /* Check CTRL+C */
+ if (rc == -EPIPE)
+ printf("\rCTRL+C - Operation aborted\n");
+
goto exit;
+ }
}
exit:
g_dnl_unregister();
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 3b77047..d290a56 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -245,6 +245,7 @@
#include <config.h>
#include <malloc.h>
#include <common.h>
+#include <usb.h>
#include <linux/err.h>
#include <linux/usb/ch9.h>
@@ -678,6 +679,18 @@ static int sleep_thread(struct fsg_common *common)
k++;
}
+ if (k == 10) {
+ /* Handle CTRL+C */
+ if (ctrlc())
+ return -EPIPE;
+#ifdef CONFIG_USB_CABLE_CHECK
+ /* Check cable connection */
+ if (!usb_cable_connected())
+ return -EIO;
+#endif
+ k = 0;
+ }
+
usb_gadget_handle_interrupts();
}
common->thread_wakeup_needed = 0;
@@ -2390,6 +2403,7 @@ static void handle_exception(struct fsg_common *common)
int fsg_main_thread(void *common_)
{
+ int ret;
struct fsg_common *common = the_fsg_common;
/* The main loop */
do {
@@ -2399,12 +2413,16 @@ int fsg_main_thread(void *common_)
}
if (!common->running) {
- sleep_thread(common);
+ ret = sleep_thread(common);
+ if (ret)
+ return ret;
+
continue;
}
- if (get_next_command(common))
- continue;
+ ret = get_next_command(common);
+ if (ret)
+ return ret;
if (!exception_in_progress(common))
common->state = FSG_STATE_DATA_PHASE;
diff --git a/include/usb.h b/include/usb.h
index 17fb68c..8c1789f 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -197,6 +197,16 @@ int board_usb_init(int index, enum board_usb_init_type init);
*/
int board_usb_cleanup(int index, enum board_usb_init_type init);
+/*
+ * If CONFIG_USB_CABLE_CHECK is set then this function
+ * should be defined in board file.
+ *
+ * @return 1 if cable is connected and 0 otherwise.
+ */
+#ifdef CONFIG_USB_CABLE_CHECK
+int usb_cable_connected(void);
+#endif
+
#ifdef CONFIG_USB_STORAGE
#define USB_MAX_STOR_DEV 5
--
1.7.9.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards.
2013-10-23 12:30 ` [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards Przemyslaw Marczak
@ 2013-10-27 18:18 ` Marek Vasut
2013-10-28 7:38 ` Lukasz Majewski
0 siblings, 1 reply; 22+ messages in thread
From: Marek Vasut @ 2013-10-27 18:18 UTC (permalink / raw)
To: u-boot
Dear Przemyslaw Marczak,
> This patch introduces some cleanups to ums code. Changes:
>
> ums common:
> - introduce UMS_START_SECTOR and UMS_NUM_SECTORS as defined in
> usb_mass_storage.h both default values as 0 if board config
> doesn't define them
>
> common cleanup changes:
> - change name of struct "ums_board_info" to "ums"
> - "ums_device" fields are moved to struct ums and "dev_num" is removed
> - change function name: board_ums_init to ums_init
> - remove "extern" prefixes from usb_mass_storage.h
>
> cmd_usb_mass_storage:
> - change error() to printf() if need to print info message
> - change return values to command_ret_t type at ums command code
> - add command usage string
>
> Changes v2:
> ums common:
> - always returns number of read/write sectors
> - coding style clean-up
> ums gadget:
> - calculate amount of read/write from device returned value.
Hi Lukasz, can I get ack/nak on the series? Thanks!
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards.
2013-10-27 18:18 ` Marek Vasut
@ 2013-10-28 7:38 ` Lukasz Majewski
2013-10-28 8:47 ` Marek Vasut
0 siblings, 1 reply; 22+ messages in thread
From: Lukasz Majewski @ 2013-10-28 7:38 UTC (permalink / raw)
To: u-boot
Hi Marek,
> Dear Przemyslaw Marczak,
>
> > This patch introduces some cleanups to ums code. Changes:
> >
> > ums common:
> > - introduce UMS_START_SECTOR and UMS_NUM_SECTORS as defined in
> > usb_mass_storage.h both default values as 0 if board config
> > doesn't define them
> >
> > common cleanup changes:
> > - change name of struct "ums_board_info" to "ums"
> > - "ums_device" fields are moved to struct ums and "dev_num" is
> > removed
> > - change function name: board_ums_init to ums_init
> > - remove "extern" prefixes from usb_mass_storage.h
> >
> > cmd_usb_mass_storage:
> > - change error() to printf() if need to print info message
> > - change return values to command_ret_t type at ums command code
> > - add command usage string
> >
> > Changes v2:
> > ums common:
> > - always returns number of read/write sectors
> > - coding style clean-up
> > ums gadget:
> > - calculate amount of read/write from device returned value.
>
> Hi Lukasz, can I get ack/nak on the series? Thanks!
For the whole series:
Acked-by: Lukasz Majewski <l.majewski@samsung.com>
>
> Best regards,
> Marek Vasut
--
Best regards,
Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
^ permalink raw reply [flat|nested] 22+ messages in thread
* [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards.
2013-10-28 7:38 ` Lukasz Majewski
@ 2013-10-28 8:47 ` Marek Vasut
0 siblings, 0 replies; 22+ messages in thread
From: Marek Vasut @ 2013-10-28 8:47 UTC (permalink / raw)
To: u-boot
Hi Lukasz, Przemyslaw,
> Hi Marek,
>
> > Dear Przemyslaw Marczak,
> >
> > > This patch introduces some cleanups to ums code. Changes:
> > >
> > > ums common:
> > > - introduce UMS_START_SECTOR and UMS_NUM_SECTORS as defined in
> > >
> > > usb_mass_storage.h both default values as 0 if board config
> > > doesn't define them
> > >
> > > common cleanup changes:
> > > - change name of struct "ums_board_info" to "ums"
> > > - "ums_device" fields are moved to struct ums and "dev_num" is
> > > removed
> > > - change function name: board_ums_init to ums_init
> > > - remove "extern" prefixes from usb_mass_storage.h
> > >
> > > cmd_usb_mass_storage:
> > > - change error() to printf() if need to print info message
> > > - change return values to command_ret_t type at ums command code
> > > - add command usage string
> > >
> > > Changes v2:
> > > ums common:
> > > - always returns number of read/write sectors
> > > - coding style clean-up
> > > ums gadget:
> > > - calculate amount of read/write from device returned value.
> >
> > Hi Lukasz, can I get ack/nak on the series? Thanks!
>
> For the whole series:
>
> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
Applied all. Thanks!
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2013-10-28 8:47 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-16 13:21 [U-Boot] [PATCH 0/4] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 1/4] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
2013-10-17 17:39 ` Marek Vasut
2013-10-18 11:38 ` Przemyslaw Marczak
2013-10-18 13:58 ` Marek Vasut
2013-10-16 13:21 ` [U-Boot] [PATCH 2/4] usb: ums: code refactoring to improve reusability at other boards Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 3/4] usb: ums: fix bug in partition capacity computation Przemyslaw Marczak
2013-10-17 17:41 ` Marek Vasut
2013-10-18 15:05 ` Przemyslaw Marczak
2013-10-19 0:57 ` Marek Vasut
2013-10-22 11:04 ` Przemyslaw Marczak
2013-10-16 13:21 ` [U-Boot] [PATCH 4/4] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
2013-10-17 17:43 ` Marek Vasut
2013-10-23 12:30 ` [U-Boot] [PATCH v2 0/5] USB: UMS: code refactoring and usage improvement Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 1/5] usb: ums: code refactoring to improve reusability on other boards Przemyslaw Marczak
2013-10-27 18:18 ` Marek Vasut
2013-10-28 7:38 ` Lukasz Majewski
2013-10-28 8:47 ` Marek Vasut
2013-10-23 12:30 ` [U-Boot] [PATCH v2 2/5] usb: ums: allows using every mmc device with ums Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 3/5] usb: ums: fix disk capacity miscalculation and code cleanup Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 4/5] usb: ums: move ums code from trats to Samsung common directory Przemyslaw Marczak
2013-10-23 12:30 ` [U-Boot] [PATCH v2 5/5] usb: ums: add ums exit feature by ctrl+c or by detach usb cable Przemyslaw Marczak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox