All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers
@ 2016-02-15  2:16 Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef Simon Glass
                   ` (31 more replies)
  0 siblings, 32 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Recent additions of the MMC and DISK uclasses have indicated that it is time
to look at adding a uclass for block devices. This series does this and
includes a few clean-ups to the partition code also.

A block device is typically a child device of its storage parent. For
example an MMC device will have a block-device child. A USB storage device
may have multiple block-device children, one for each LUN.

With this series only USB storage and 'host' are converted over to use the
new support. Several more remain, including SCSI, IDE and MMC. Each of these
should get its own uclass.

The uclass implements only a few basic features. A few tests are added to
check that things work as expected.

The code size impact of switching to driver model for block devices is
small. One benefit is that it becomes possible to enumerate all block
devices, regardless of their type.


Simon Glass (30):
  dm: Drop the block_dev_desc_t typedef
  dm: pci: Break out the common region display code
  dm: part: Correct a sandbox build warning
  dm: fdtdec: Correct a sandbox build warning
  dm: part: Drop the common.h header
  dm: Add a new header for block devices
  dm: blk: Convert interface type to an enum
  dm: blk: Add comments to a few functions
  dm: blk: Rename get_dev() to blk_get_dev()
  dm: blk: Rename get_device() to blk_get_device_str()
  dm: blk: Rename get_device_and_partition()
  dm: part: Add a cast to avoid a compiler warning
  dm: sandbox: Enable all partition types
  dm: part: Convert partition API use to linker lists
  dm: part: Rename some partition functions
  dm: cbfs: Fix handling of invalid type
  dm: sandbox: Enable cbfs and cramfs
  dm: block: Rename device number member dev to devnum
  dm: block: Adjust device calls to go through helpers function
  dm: usb: Avoid exceeding available array size for storage devices
  dm: usb: Tidy up storage code ready for driver model conversion
  dm: blk: Add a block-device uclass
  dm: sandbox: Prepare block driver for driver-model conversion
  dm: sandbox: Add driver-model block-device support for sandbox
  dm: usb: Convert USB storage to use driver-model for block devs
  dm: usb: Unbind old block devices when shutting down USB
  dm: sandbox: Switch over to use DM for block devices
  dm: sandbox: Drop the pre-DM host implementation
  dm: usb: Clean up USB after each test
  dm: blk: Add tests for block devices

 api/api.c                     |   2 +-
 api/api_storage.c             |  26 ++--
 board/cm5200/fwupdate.c       |   4 +-
 board/mpl/pip405/README       |   4 +-
 board/sunxi/board.c           |   4 +-
 cmd/cbfs.c                    |   5 +-
 cmd/disk.c                    |  12 +-
 cmd/fat.c                     |  12 +-
 cmd/gpt.c                     |  10 +-
 cmd/host.c                    |  13 +-
 cmd/ide.c                     |  44 +++---
 cmd/mmc.c                     |   4 +-
 cmd/mmc_spi.c                 |   4 +-
 cmd/part.c                    |  24 ++--
 cmd/read.c                    |  10 +-
 cmd/reiser.c                  |  12 +-
 cmd/sata.c                    |  22 +--
 cmd/scsi.c                    |  24 ++--
 cmd/unzip.c                   |   4 +-
 cmd/usb.c                     |  12 +-
 cmd/usb_mass_storage.c        |  10 +-
 cmd/zfs.c                     |  10 +-
 common/env_fat.c              |  12 +-
 common/fb_mmc.c               |  33 ++---
 common/spl/spl_ext.c          |  12 +-
 common/spl/spl_fat.c          |   8 +-
 common/spl/spl_mmc.c          |   2 +-
 common/spl/spl_sata.c         |   2 +-
 common/spl/spl_usb.c          |   2 +-
 common/usb_storage.c          | 276 +++++++++++++++++++++++++++----------
 configs/sandbox_defconfig     |   1 +
 disk/part.c                   | 230 +++++++++++--------------------
 disk/part_amiga.c             |  33 +++--
 disk/part_dos.c               |  66 +++++----
 disk/part_efi.c               |  96 ++++++-------
 disk/part_iso.c               |  72 +++++-----
 disk/part_mac.c               |  58 ++++----
 drivers/block/Kconfig         |  11 ++
 drivers/block/Makefile        |   2 +
 drivers/block/blk-uclass.c    | 175 ++++++++++++++++++++++++
 drivers/block/dwc_ahsata.c    |   4 +-
 drivers/block/pata_bfin.c     |   2 +-
 drivers/block/sandbox.c       | 170 +++++++++++++----------
 drivers/block/systemace.c     |  12 +-
 drivers/dfu/dfu_mmc.c         |   4 +-
 drivers/mmc/arm_pl180_mmci.c  |   2 +-
 drivers/mmc/mmc.c             |  14 +-
 drivers/mmc/mmc_private.h     |   8 +-
 drivers/mmc/mmc_write.c       |   8 +-
 drivers/mmc/mxsmmc.c          |  24 ++--
 drivers/mmc/omap_hsmmc.c      |   4 +-
 drivers/mmc/sdhci.c           |   2 +-
 drivers/pci/pci_auto_common.c |  51 +++----
 drivers/usb/host/usb-uclass.c |   6 +-
 fs/ext4/dev.c                 |  54 ++++----
 fs/ext4/ext4_common.c         |  27 ++--
 fs/ext4/ext4fs.c              |   2 +-
 fs/fat/fat.c                  |  18 +--
 fs/fat/fat_write.c            |   5 +-
 fs/fs.c                       |   8 +-
 fs/reiserfs/dev.c             |  33 ++---
 fs/sandbox/sandboxfs.c        |   4 +-
 fs/ubifs/ubifs.c              |   4 +-
 fs/zfs/dev.c                  |  35 +++--
 fs/zfs/zfs.c                  |   2 +-
 include/blk.h                 | 248 ++++++++++++++++++++++++++++++++++
 include/common.h              |   2 +-
 include/configs/sandbox.h     |   8 +-
 include/dm/uclass-id.h        |   1 +
 include/ext4fs.h              |   6 +-
 include/fat.h                 |   4 +-
 include/ide.h                 |  18 +--
 include/mmc.h                 |   2 +-
 include/part.h                | 306 +++++++++++++++++++++++++-----------------
 include/reiserfs.h            |   2 +-
 include/sandboxblockdev.h     |   4 +-
 include/sandboxfs.h           |   2 +-
 include/sata.h                |   2 +-
 include/spl.h                 |  10 +-
 include/systemace.h           |   2 +-
 include/ubifs_uboot.h         |   2 +-
 include/usb.h                 |   2 +-
 include/usb_mass_storage.h    |   2 +-
 include/zfs_common.h          |   4 +-
 lib/fdtdec.c                  |   5 +-
 lib/gunzip.c                  |   2 +-
 test/dm/Makefile              |   1 +
 test/dm/blk.c                 |  96 +++++++++++++
 test/dm/usb.c                 |   8 +-
 89 files changed, 1655 insertions(+), 950 deletions(-)
 create mode 100644 drivers/block/blk-uclass.c
 create mode 100644 include/blk.h
 create mode 100644 test/dm/blk.c

-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:09   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code Simon Glass
                   ` (30 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Use 'struct' instead of a typdef. Also since 'struct block_dev_desc' is long
and causes 80-column violations, rename it to struct blk_desc.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 api/api.c                  |   2 +-
 api/api_storage.c          |  14 ++---
 board/cm5200/fwupdate.c    |   2 +-
 board/mpl/pip405/README    |   4 +-
 cmd/disk.c                 |   2 +-
 cmd/fat.c                  |   4 +-
 cmd/gpt.c                  |   8 +--
 cmd/host.c                 |   4 +-
 cmd/ide.c                  |  22 ++++----
 cmd/mmc.c                  |   2 +-
 cmd/part.c                 |   8 +--
 cmd/read.c                 |   4 +-
 cmd/reiser.c               |   4 +-
 cmd/sata.c                 |  10 ++--
 cmd/scsi.c                 |  12 ++---
 cmd/unzip.c                |   2 +-
 cmd/usb.c                  |   2 +-
 cmd/usb_mass_storage.c     |   6 +--
 cmd/zfs.c                  |   4 +-
 common/env_fat.c           |   4 +-
 common/fb_mmc.c            |  12 ++---
 common/spl/spl_ext.c       |   6 +--
 common/spl/spl_fat.c       |   8 +--
 common/spl/spl_sata.c      |   2 +-
 common/spl/spl_usb.c       |   2 +-
 common/usb_storage.c       |  22 ++++----
 disk/part.c                |  28 +++++-----
 disk/part_amiga.c          |  14 ++---
 disk/part_dos.c            |  19 +++----
 disk/part_efi.c            |  38 ++++++-------
 disk/part_iso.c            |  10 ++--
 disk/part_mac.c            |  19 ++++---
 drivers/block/dwc_ahsata.c |   4 +-
 drivers/block/sandbox.c    |  12 ++---
 drivers/block/systemace.c  |   8 +--
 drivers/dfu/dfu_mmc.c      |   2 +-
 drivers/mmc/mmc.c          |   4 +-
 drivers/mmc/mmc_private.h  |   8 +--
 drivers/mmc/mmc_write.c    |   4 +-
 fs/ext4/dev.c              |  53 +++++++++---------
 fs/ext4/ext4fs.c           |   2 +-
 fs/fat/fat.c               |   6 +--
 fs/fs.c                    |   6 +--
 fs/reiserfs/dev.c          |  33 +++++-------
 fs/sandbox/sandboxfs.c     |   4 +-
 fs/ubifs/ubifs.c           |   2 +-
 fs/zfs/dev.c               |  35 ++++++------
 fs/zfs/zfs.c               |   2 +-
 include/common.h           |   2 +-
 include/ext4fs.h           |   6 +--
 include/fat.h              |   4 +-
 include/ide.h              |   6 +--
 include/mmc.h              |   2 +-
 include/part.h             | 130 ++++++++++++++++++++++++---------------------
 include/reiserfs.h         |   2 +-
 include/sandboxblockdev.h  |   2 +-
 include/sandboxfs.h        |   2 +-
 include/sata.h             |   2 +-
 include/spl.h              |  10 ++--
 include/systemace.h        |   2 +-
 include/ubifs_uboot.h      |   2 +-
 include/usb.h              |   2 +-
 include/usb_mass_storage.h |   2 +-
 include/zfs_common.h       |   4 +-
 lib/gunzip.c               |   2 +-
 test/dm/usb.c              |   2 +-
 66 files changed, 338 insertions(+), 331 deletions(-)

diff --git a/api/api.c b/api/api.c
index c5f6edb..830d6fb 100644
--- a/api/api.c
+++ b/api/api.c
@@ -189,7 +189,7 @@ static int API_get_timer(va_list ap)
  *
  *   - net: &eth_device struct address from list pointed to by eth_devices
  *
- *   - storage: block_dev_desc_t struct address from &ide_dev_desc[n],
+ *   - storage: struct blk_desc struct address from &ide_dev_desc[n],
  *     &scsi_dev_desc[n] and similar tables
  *
  ****************************************************************************/
diff --git a/api/api_storage.c b/api/api_storage.c
index bc2b4d6..225a6cf 100644
--- a/api/api_storage.c
+++ b/api/api_storage.c
@@ -103,7 +103,7 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 
 	int i;
 
-	block_dev_desc_t *dd;
+	struct blk_desc *dd;
 
 	if (first) {
 		di->cookie = (void *)get_dev(specs[type].name, 0);
@@ -148,7 +148,7 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 		di->type = specs[type].type;
 
 		if (di->cookie != NULL) {
-			dd = (block_dev_desc_t *)di->cookie;
+			dd = (struct blk_desc *)di->cookie;
 			if (dd->type == DEV_TYPE_UNKNOWN) {
 				debugf("device instance exists, but is not active..");
 				found = 0;
@@ -166,9 +166,9 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 
 
 /*
- * returns:	ENUM_IDE, ENUM_USB etc. based on block_dev_desc_t
+ * returns:	ENUM_IDE, ENUM_USB etc. based on struct blk_desc
  */
-static int dev_stor_type(block_dev_desc_t *dd)
+static int dev_stor_type(struct blk_desc *dd)
 {
 	int i, j;
 
@@ -308,7 +308,7 @@ int dev_enum_storage(struct device_info *di)
 	return 0;
 }
 
-static int dev_stor_is_valid(int type, block_dev_desc_t *dd)
+static int dev_stor_is_valid(int type, struct blk_desc *dd)
 {
 	int i;
 
@@ -328,7 +328,7 @@ int dev_open_stor(void *cookie)
 	if (type == ENUM_MAX)
 		return API_ENODEV;
 
-	if (dev_stor_is_valid(type, (block_dev_desc_t *)cookie))
+	if (dev_stor_is_valid(type, (struct blk_desc *)cookie))
 		return 0;
 
 	return API_ENODEV;
@@ -348,7 +348,7 @@ int dev_close_stor(void *cookie)
 lbasize_t dev_read_stor(void *cookie, void *buf, lbasize_t len, lbastart_t start)
 {
 	int type;
-	block_dev_desc_t *dd = (block_dev_desc_t *)cookie;
+	struct blk_desc *dd = (struct blk_desc *)cookie;
 
 	if ((type = dev_stor_type(dd)) == ENUM_MAX)
 		return 0;
diff --git a/board/cm5200/fwupdate.c b/board/cm5200/fwupdate.c
index 2b92362..d5064c1 100644
--- a/board/cm5200/fwupdate.c
+++ b/board/cm5200/fwupdate.c
@@ -81,7 +81,7 @@ static int load_rescue_image(ulong addr)
 	char dev[7];
 	char addr_str[16];
 	char * const argv[6] = { "fatload", "usb", dev, addr_str, nxri, NULL };
-	block_dev_desc_t *stor_dev = NULL;
+	struct blk_desc *stor_dev = NULL;
 	cmd_tbl_t *bcmd;
 
 	/* Get name of firmware directory */
diff --git a/board/mpl/pip405/README b/board/mpl/pip405/README
index 1b73dbe..e900c56 100644
--- a/board/mpl/pip405/README
+++ b/board/mpl/pip405/README
@@ -217,8 +217,8 @@ Added files:
 Block device changes:
 ---------------------
 To allow the use of dos_part.c, mac_part.c and iso_part.c, the parameter
-block_dev_desc will be used when accessing the functions in these files. The block
-device descriptor (block_dev_desc) contains a pointer to the read routine of the
+blk_desc will be used when accessing the functions in these files. The block
+device descriptor (blk_desc) contains a pointer to the read routine of the
 device, which will be used to read blocks from the device.
 Renamed function ide_print to dev_print and moved it to the file disk/part.c to use
 it for IDE ATAPI and SCSI devices.
diff --git a/cmd/disk.c b/cmd/disk.c
index 3025225..c53c2a2 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -20,7 +20,7 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
 #if defined(CONFIG_IMAGE_FORMAT_LEGACY)
 	image_header_t *hdr;
 #endif
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 
 #if defined(CONFIG_FIT)
 	const void *fit_hdr = NULL;
diff --git a/cmd/fat.c b/cmd/fat.c
index aae993d..82b9b38 100644
--- a/cmd/fat.c
+++ b/cmd/fat.c
@@ -69,7 +69,7 @@ static int do_fat_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc,
 			 char * const argv[])
 {
 	int dev, part;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	disk_partition_t info;
 
 	if (argc < 2) {
@@ -105,7 +105,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,
 	int ret;
 	unsigned long addr;
 	unsigned long count;
-	block_dev_desc_t *dev_desc = NULL;
+	struct blk_desc *dev_desc = NULL;
 	disk_partition_t info;
 	int dev = 0;
 	int part = 1;
diff --git a/cmd/gpt.c b/cmd/gpt.c
index d94d553..881367c 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -168,7 +168,7 @@ static bool found_key(const char *str, const char *key)
  * @return - zero on success, otherwise error
  *
  */
-static int set_gpt_info(block_dev_desc_t *dev_desc,
+static int set_gpt_info(struct blk_desc *dev_desc,
 			const char *str_part,
 			char **str_disk_guid,
 			disk_partition_t **partitions,
@@ -328,7 +328,7 @@ err:
 	return errno;
 }
 
-static int gpt_default(block_dev_desc_t *blk_dev_desc, const char *str_part)
+static int gpt_default(struct blk_desc *blk_dev_desc, const char *str_part)
 {
 	int ret;
 	char *str_disk_guid;
@@ -356,7 +356,7 @@ static int gpt_default(block_dev_desc_t *blk_dev_desc, const char *str_part)
 	return ret;
 }
 
-static int gpt_verify(block_dev_desc_t *blk_dev_desc, const char *str_part)
+static int gpt_verify(struct blk_desc *blk_dev_desc, const char *str_part)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1,
 				     blk_dev_desc->blksz);
@@ -408,7 +408,7 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	int ret = CMD_RET_SUCCESS;
 	int dev = 0;
 	char *ep;
-	block_dev_desc_t *blk_dev_desc = NULL;
+	struct blk_desc *blk_dev_desc = NULL;
 
 	if (argc < 4 || argc > 5)
 		return CMD_RET_USAGE;
diff --git a/cmd/host.c b/cmd/host.c
index ba1460e..ee219ce 100644
--- a/cmd/host.c
+++ b/cmd/host.c
@@ -67,7 +67,7 @@ static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
 	int dev;
 	printf("%3s %12s %s\n", "dev", "blocks", "path");
 	for (dev = min_dev; dev <= max_dev; dev++) {
-		block_dev_desc_t *blk_dev;
+		struct blk_desc *blk_dev;
 		int ret;
 
 		printf("%3d ", dev);
@@ -92,7 +92,7 @@ static int do_host_dev(cmd_tbl_t *cmdtp, int flag, int argc,
 {
 	int dev;
 	char *ep;
-	block_dev_desc_t *blk_dev;
+	struct blk_desc *blk_dev;
 	int ret;
 
 	if (argc < 1 || argc > 3)
diff --git a/cmd/ide.c b/cmd/ide.c
index f19a7ce..06202c5 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -53,7 +53,7 @@ ulong ide_bus_offset[CONFIG_SYS_IDE_MAXBUS] = {
 
 static int ide_bus_ok[CONFIG_SYS_IDE_MAXBUS];
 
-block_dev_desc_t ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE];
+struct blk_desc ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE];
 /* ------------------------------------------------------------------------- */
 
 #ifdef CONFIG_IDE_RESET
@@ -62,7 +62,7 @@ static void  ide_reset (void);
 #define ide_reset()	/* dummy */
 #endif
 
-static void  ide_ident (block_dev_desc_t *dev_desc);
+static void ide_ident(struct blk_desc *dev_desc);
 static uchar ide_wait  (int dev, ulong t);
 
 #define IDE_TIME_OUT	2000	/* 2 sec timeout */
@@ -78,8 +78,8 @@ static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len
 #endif
 
 #ifdef CONFIG_ATAPI
-static void	atapi_inquiry(block_dev_desc_t *dev_desc);
-static ulong atapi_read(block_dev_desc_t *block_dev, lbaint_t blknr,
+static void	atapi_inquiry(struct blk_desc *dev_desc);
+static ulong atapi_read(struct blk_desc *block_dev, lbaint_t blknr,
 			lbaint_t blkcnt, void *buffer);
 #endif
 
@@ -187,7 +187,7 @@ int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 		if (strcmp(argv[1], "read") == 0) {
 			ulong addr = simple_strtoul(argv[2], NULL, 16);
 			ulong cnt = simple_strtoul(argv[4], NULL, 16);
-			block_dev_desc_t *dev_desc;
+			struct blk_desc *dev_desc;
 			ulong n;
 
 #ifdef CONFIG_SYS_64BIT_LBA
@@ -446,7 +446,7 @@ void ide_init(void)
 /* ------------------------------------------------------------------------- */
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *ide_get_dev(int dev)
+struct blk_desc *ide_get_dev(int dev)
 {
 	return (dev < CONFIG_SYS_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;
 }
@@ -541,7 +541,7 @@ __weak void ide_input_data(int dev, ulong *sect_buf, int words)
 
 /* -------------------------------------------------------------------------
  */
-static void ide_ident(block_dev_desc_t *dev_desc)
+static void ide_ident(struct blk_desc *dev_desc)
 {
 	unsigned char c;
 	hd_driveid_t iop;
@@ -713,7 +713,7 @@ static void ide_ident(block_dev_desc_t *dev_desc)
 
 /* ------------------------------------------------------------------------- */
 
-ulong ide_read(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
+ulong ide_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 	       void *buffer)
 {
 	int device = block_dev->dev;
@@ -839,7 +839,7 @@ IDE_READ_E:
 /* ------------------------------------------------------------------------- */
 
 
-ulong ide_write(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
+ulong ide_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 		const void *buffer)
 {
 	int device = block_dev->dev;
@@ -1301,7 +1301,7 @@ error:
 }
 
 
-static void atapi_inquiry(block_dev_desc_t *dev_desc)
+static void atapi_inquiry(struct blk_desc *dev_desc)
 {
 	unsigned char ccb[12];	/* Command descriptor block */
 	unsigned char iobuf[64];	/* temp buf */
@@ -1394,7 +1394,7 @@ static void atapi_inquiry(block_dev_desc_t *dev_desc)
 #define ATAPI_READ_BLOCK_SIZE	2048	/* assuming CD part */
 #define ATAPI_READ_MAX_BLOCK	(ATAPI_READ_MAX_BYTES/ATAPI_READ_BLOCK_SIZE)
 
-ulong atapi_read(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
+ulong atapi_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 		 void *buffer)
 {
 	int device = block_dev->dev;
diff --git a/cmd/mmc.c b/cmd/mmc.c
index 1c7156f..ab59e7f 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -424,7 +424,7 @@ static int do_mmc_rescan(cmd_tbl_t *cmdtp, int flag,
 static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
 		       int argc, char * const argv[])
 {
-	block_dev_desc_t *mmc_dev;
+	struct blk_desc *mmc_dev;
 	struct mmc *mmc;
 
 	mmc = init_mmc_device(curr_device, false);
diff --git a/cmd/part.c b/cmd/part.c
index 5599509..a572aab 100644
--- a/cmd/part.c
+++ b/cmd/part.c
@@ -29,7 +29,7 @@
 static int do_part_uuid(int argc, char * const argv[])
 {
 	int part;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	disk_partition_t info;
 
 	if (argc < 2)
@@ -52,7 +52,7 @@ static int do_part_uuid(int argc, char * const argv[])
 static int do_part_list(int argc, char * const argv[])
 {
 	int ret;
-	block_dev_desc_t *desc;
+	struct blk_desc *desc;
 	char *var = NULL;
 	bool bootable = false;
 	int i;
@@ -114,7 +114,7 @@ static int do_part_list(int argc, char * const argv[])
 
 static int do_part_start(int argc, char * const argv[])
 {
-	block_dev_desc_t *desc;
+	struct blk_desc *desc;
 	disk_partition_t info;
 	char buf[512] = { 0 };
 	int part;
@@ -148,7 +148,7 @@ static int do_part_start(int argc, char * const argv[])
 
 static int do_part_size(int argc, char * const argv[])
 {
-	block_dev_desc_t *desc;
+	struct blk_desc *desc;
 	disk_partition_t info;
 	char buf[512] = { 0 };
 	int part;
diff --git a/cmd/read.c b/cmd/read.c
index 8710288..6a1e1d9 100644
--- a/cmd/read.c
+++ b/cmd/read.c
@@ -15,7 +15,7 @@
 int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	char *ep;
-	block_dev_desc_t *dev_desc = NULL;
+	struct blk_desc *dev_desc = NULL;
 	int dev;
 	int part = 0;
 	disk_partition_t part_info;
@@ -57,7 +57,7 @@ int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		offset = part_info.start;
 		limit = part_info.size;
 	} else {
-		/* Largest address not available in block_dev_desc_t. */
+		/* Largest address not available in struct blk_desc. */
 		limit = ~0;
 	}
 
diff --git a/cmd/reiser.c b/cmd/reiser.c
index 8871564..1cca5eb 100644
--- a/cmd/reiser.c
+++ b/cmd/reiser.c
@@ -34,7 +34,7 @@ int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	char *filename = "/";
 	int dev, part;
-	block_dev_desc_t *dev_desc=NULL;
+	struct blk_desc *dev_desc = NULL;
 	disk_partition_t info;
 
 	if (argc < 3)
@@ -82,7 +82,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	int dev, part;
 	ulong addr = 0, filelen;
 	disk_partition_t info;
-	block_dev_desc_t *dev_desc = NULL;
+	struct blk_desc *dev_desc = NULL;
 	unsigned long count;
 	char *addr_str;
 
diff --git a/cmd/sata.c b/cmd/sata.c
index 76bacea..a1faf2d 100644
--- a/cmd/sata.c
+++ b/cmd/sata.c
@@ -16,15 +16,15 @@
 #include <sata.h>
 
 static int sata_curr_device = -1;
-block_dev_desc_t sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
+struct blk_desc sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
 
-static unsigned long sata_bread(block_dev_desc_t *block_dev, lbaint_t start,
+static unsigned long sata_bread(struct blk_desc *block_dev, lbaint_t start,
 				lbaint_t blkcnt, void *dst)
 {
 	return sata_read(block_dev->dev, start, blkcnt, dst);
 }
 
-static unsigned long sata_bwrite(block_dev_desc_t *block_dev, lbaint_t start,
+static unsigned long sata_bwrite(struct blk_desc *block_dev, lbaint_t start,
 				 lbaint_t blkcnt, const void *buffer)
 {
 	return sata_write(block_dev->dev, start, blkcnt, buffer);
@@ -36,7 +36,7 @@ int __sata_initialize(void)
 	int i;
 
 	for (i = 0; i < CONFIG_SYS_SATA_MAX_DEVICE; i++) {
-		memset(&sata_dev_desc[i], 0, sizeof(struct block_dev_desc));
+		memset(&sata_dev_desc[i], 0, sizeof(struct blk_desc));
 		sata_dev_desc[i].if_type = IF_TYPE_SATA;
 		sata_dev_desc[i].dev = i;
 		sata_dev_desc[i].part_type = PART_TYPE_UNKNOWN;
@@ -75,7 +75,7 @@ __weak int __sata_stop(void)
 int sata_stop(void) __attribute__((weak, alias("__sata_stop")));
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *sata_get_dev(int dev)
+struct blk_desc *sata_get_dev(int dev)
 {
 	return (dev < CONFIG_SYS_SATA_MAX_DEVICE) ? &sata_dev_desc[dev] : NULL;
 }
diff --git a/cmd/scsi.c b/cmd/scsi.c
index bc7d1b6..dff811b 100644
--- a/cmd/scsi.c
+++ b/cmd/scsi.c
@@ -48,7 +48,7 @@ static int scsi_max_devs; /* number of highest available scsi device */
 
 static int scsi_curr_dev; /* current device */
 
-static block_dev_desc_t scsi_dev_desc[CONFIG_SYS_SCSI_MAX_DEVICE];
+static struct blk_desc scsi_dev_desc[CONFIG_SYS_SCSI_MAX_DEVICE];
 
 /********************************************************************************
  *  forward declerations of some Setup Routines
@@ -66,9 +66,9 @@ void scsi_ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len);
 
 static int scsi_read_capacity(ccb *pccb, lbaint_t *capacity,
 			      unsigned long *blksz);
-static ulong scsi_read(block_dev_desc_t *block_dev, lbaint_t blknr,
+static ulong scsi_read(struct blk_desc *block_dev, lbaint_t blknr,
 		       lbaint_t blkcnt, void *buffer);
-static ulong scsi_write(block_dev_desc_t *block_dev, lbaint_t blknr,
+static ulong scsi_write(struct blk_desc *block_dev, lbaint_t blknr,
 			lbaint_t blkcnt, const void *buffer);
 
 
@@ -239,7 +239,7 @@ void scsi_init(void)
 #endif
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t * scsi_get_dev(int dev)
+struct blk_desc *scsi_get_dev(int dev)
 {
 	return (dev < CONFIG_SYS_SCSI_MAX_DEVICE) ? &scsi_dev_desc[dev] : NULL;
 }
@@ -376,7 +376,7 @@ int do_scsi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #define SCSI_MAX_READ_BLK 0xFFFF
 #define SCSI_LBA48_READ	0xFFFFFFF
 
-static ulong scsi_read(block_dev_desc_t *block_dev, lbaint_t blknr,
+static ulong scsi_read(struct blk_desc *block_dev, lbaint_t blknr,
 		       lbaint_t blkcnt, void *buffer)
 {
 	int device = block_dev->dev;
@@ -443,7 +443,7 @@ static ulong scsi_read(block_dev_desc_t *block_dev, lbaint_t blknr,
 /* Almost the maximum amount of the scsi_ext command.. */
 #define SCSI_MAX_WRITE_BLK 0xFFFF
 
-static ulong scsi_write(block_dev_desc_t *block_dev, lbaint_t blknr,
+static ulong scsi_write(struct blk_desc *block_dev, lbaint_t blknr,
 			lbaint_t blkcnt, const void *buffer)
 {
 	int device = block_dev->dev;
diff --git a/cmd/unzip.c b/cmd/unzip.c
index 0686be6..5be1566 100644
--- a/cmd/unzip.c
+++ b/cmd/unzip.c
@@ -43,7 +43,7 @@ U_BOOT_CMD(
 static int do_gzwrite(cmd_tbl_t *cmdtp, int flag,
 		      int argc, char * const argv[])
 {
-	block_dev_desc_t *bdev;
+	struct blk_desc *bdev;
 	int ret;
 	unsigned char *addr;
 	unsigned long length;
diff --git a/cmd/usb.c b/cmd/usb.c
index c7b642c..5f3b06a 100644
--- a/cmd/usb.c
+++ b/cmd/usb.c
@@ -625,7 +625,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	int i;
 	extern char usb_started;
 #ifdef CONFIG_USB_STORAGE
-	block_dev_desc_t *stor_dev;
+	struct blk_desc *stor_dev;
 #endif
 
 	if (argc < 2)
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index 0415591..03b7e21 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -19,7 +19,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->block_dev;
+	struct blk_desc *block_dev = &ums_dev->block_dev;
 	lbaint_t blkstart = start + ums_dev->start_sector;
 
 	return block_dev->block_read(block_dev, blkstart, blkcnt, buf);
@@ -28,7 +28,7 @@ static int ums_read_sector(struct ums *ums_dev,
 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->block_dev;
+	struct blk_desc *block_dev = &ums_dev->block_dev;
 	lbaint_t blkstart = start + ums_dev->start_sector;
 
 	return block_dev->block_write(block_dev, blkstart, blkcnt, buf);
@@ -53,7 +53,7 @@ static void ums_fini(void)
 static int ums_init(const char *devtype, const char *devnums)
 {
 	char *s, *t, *devnum, *name;
-	block_dev_desc_t *block_dev;
+	struct blk_desc *block_dev;
 	int ret;
 	struct ums *ums_new;
 
diff --git a/cmd/zfs.c b/cmd/zfs.c
index 0aed29e..9076a8a 100644
--- a/cmd/zfs.c
+++ b/cmd/zfs.c
@@ -39,7 +39,7 @@ static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
 	int part;
 	ulong addr = 0;
 	disk_partition_t info;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	char buf[12];
 	unsigned long count;
 	const char *addr_str;
@@ -135,7 +135,7 @@ static int do_zfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	const char *filename = "/";
 	int part;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	disk_partition_t info;
 	struct device_s vdev;
 
diff --git a/common/env_fat.c b/common/env_fat.c
index d79d864..e88279e 100644
--- a/common/env_fat.c
+++ b/common/env_fat.c
@@ -38,7 +38,7 @@ int env_init(void)
 int saveenv(void)
 {
 	env_t	env_new;
-	block_dev_desc_t *dev_desc = NULL;
+	struct blk_desc *dev_desc = NULL;
 	disk_partition_t info;
 	int dev, part;
 	int err;
@@ -77,7 +77,7 @@ int saveenv(void)
 void env_relocate_spec(void)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
-	block_dev_desc_t *dev_desc = NULL;
+	struct blk_desc *dev_desc = NULL;
 	disk_partition_t info;
 	int dev, part;
 	int err;
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 6e742da..fd43085 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -22,10 +22,10 @@
 static char *response_str;
 
 struct fb_mmc_sparse {
-	block_dev_desc_t	*dev_desc;
+	struct blk_desc	*dev_desc;
 };
 
-static int get_partition_info_efi_by_name_or_alias(block_dev_desc_t *dev_desc,
+static int get_partition_info_efi_by_name_or_alias(struct blk_desc *dev_desc,
 		const char *name, disk_partition_t *info)
 {
 	int ret;
@@ -55,7 +55,7 @@ static int fb_mmc_sparse_write(struct sparse_storage *storage,
 			       char *data)
 {
 	struct fb_mmc_sparse *sparse = priv;
-	block_dev_desc_t *dev_desc = sparse->dev_desc;
+	struct blk_desc *dev_desc = sparse->dev_desc;
 	int ret;
 
 	ret = dev_desc->block_write(dev_desc, offset, size, data);
@@ -65,7 +65,7 @@ static int fb_mmc_sparse_write(struct sparse_storage *storage,
 	return ret;
 }
 
-static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
+static void write_raw_image(struct blk_desc *dev_desc, disk_partition_t *info,
 		const char *part_name, void *buffer,
 		unsigned int download_bytes)
 {
@@ -100,7 +100,7 @@ void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
 			void *download_buffer, unsigned int download_bytes,
 			char *response)
 {
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	disk_partition_t info;
 
 	/* initialize the response buffer */
@@ -165,7 +165,7 @@ void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
 void fb_mmc_erase(const char *cmd, char *response)
 {
 	int ret;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	disk_partition_t info;
 	lbaint_t blks, blks_start, blks_size, grp_size;
 	struct mmc *mmc = find_mmc_device(CONFIG_FASTBOOT_FLASH_MMC_DEV);
diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c
index a42fbd0..d29d229 100644
--- a/common/spl/spl_ext.c
+++ b/common/spl/spl_ext.c
@@ -10,7 +10,7 @@
 #include <image.h>
 
 #ifdef CONFIG_SPL_EXT_SUPPORT
-int spl_load_image_ext(block_dev_desc_t *block_dev,
+int spl_load_image_ext(struct blk_desc *block_dev,
 						int partition,
 						const char *filename)
 {
@@ -64,7 +64,7 @@ end:
 }
 
 #ifdef CONFIG_SPL_OS_BOOT
-int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition)
+int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
 {
 	int err;
 	__maybe_unused loff_t filelen, actlen;
@@ -137,7 +137,7 @@ defaults:
 			CONFIG_SPL_FS_LOAD_KERNEL_NAME);
 }
 #else
-int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition)
+int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
 {
 	return -ENOSYS;
 }
diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c
index 0daadbe..d761b26 100644
--- a/common/spl/spl_fat.c
+++ b/common/spl/spl_fat.c
@@ -19,7 +19,7 @@
 static int fat_registered;
 
 #ifdef CONFIG_SPL_FAT_SUPPORT
-static int spl_register_fat_device(block_dev_desc_t *block_dev, int partition)
+static int spl_register_fat_device(struct blk_desc *block_dev, int partition)
 {
 	int err = 0;
 
@@ -39,7 +39,7 @@ static int spl_register_fat_device(block_dev_desc_t *block_dev, int partition)
 	return err;
 }
 
-int spl_load_image_fat(block_dev_desc_t *block_dev,
+int spl_load_image_fat(struct blk_desc *block_dev,
 						int partition,
 						const char *filename)
 {
@@ -72,7 +72,7 @@ end:
 }
 
 #ifdef CONFIG_SPL_OS_BOOT
-int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition)
+int spl_load_image_fat_os(struct blk_desc *block_dev, int partition)
 {
 	int err;
 	__maybe_unused char *file;
@@ -121,7 +121,7 @@ defaults:
 			CONFIG_SPL_FS_LOAD_KERNEL_NAME);
 }
 #else
-int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition)
+int spl_load_image_fat_os(struct blk_desc *block_dev, int partition)
 {
 	return -ENOSYS;
 }
diff --git a/common/spl/spl_sata.c b/common/spl/spl_sata.c
index 3ba4c24..1719946 100644
--- a/common/spl/spl_sata.c
+++ b/common/spl/spl_sata.c
@@ -23,7 +23,7 @@ DECLARE_GLOBAL_DATA_PTR;
 int spl_sata_load_image(void)
 {
 	int err;
-	block_dev_desc_t *stor_dev;
+	struct blk_desc *stor_dev;
 
 	err = init_sata(CONFIG_SPL_SATA_BOOT_DEVICE);
 	if (err) {
diff --git a/common/spl/spl_usb.c b/common/spl/spl_usb.c
index 588b85c..c42848e 100644
--- a/common/spl/spl_usb.c
+++ b/common/spl/spl_usb.c
@@ -25,7 +25,7 @@ static int usb_stor_curr_dev = -1; /* current device */
 int spl_usb_load_image(void)
 {
 	int err;
-	block_dev_desc_t *stor_dev;
+	struct blk_desc *stor_dev;
 
 	usb_stop();
 	err = usb_init();
diff --git a/common/usb_storage.c b/common/usb_storage.c
index 8737cf7..ca5aeea 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -67,7 +67,7 @@ static __u32 CBWTag;
 
 static int usb_max_devs; /* number of highest available usb device */
 
-static block_dev_desc_t usb_dev_desc[USB_MAX_STOR_DEV];
+static struct blk_desc usb_dev_desc[USB_MAX_STOR_DEV];
 
 struct us_data;
 typedef int (*trans_cmnd)(ccb *cb, struct us_data *data);
@@ -115,17 +115,17 @@ static struct us_data usb_stor[USB_MAX_STOR_DEV];
 #define USB_STOR_TRANSPORT_ERROR  -2
 
 int usb_stor_get_info(struct usb_device *dev, struct us_data *us,
-		      block_dev_desc_t *dev_desc);
+		      struct blk_desc *dev_desc);
 int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
 		      struct us_data *ss);
-static unsigned long usb_stor_read(block_dev_desc_t *block_dev, lbaint_t blknr,
+static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer);
-static unsigned long usb_stor_write(block_dev_desc_t *block_dev, lbaint_t blknr,
+static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer);
 void uhci_show_temp_int_td(void);
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *usb_stor_get_dev(int index)
+struct blk_desc *usb_stor_get_dev(int index)
 {
 	return (index < usb_max_devs) ? &usb_dev_desc[index] : NULL;
 }
@@ -187,10 +187,10 @@ static int usb_stor_probe_device(struct usb_device *dev)
 		for (lun = 0;
 			lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV;
 			lun++) {
-			struct block_dev_desc *blkdev;
+			struct blk_desc *blkdev;
 
 			blkdev = &usb_dev_desc[usb_max_devs];
-			memset(blkdev, '\0', sizeof(block_dev_desc_t));
+			memset(blkdev, '\0', sizeof(struct blk_desc));
 			blkdev->if_type = IF_TYPE_USB;
 			blkdev->dev = usb_max_devs;
 			blkdev->part_type = PART_TYPE_UNKNOWN;
@@ -1011,7 +1011,7 @@ static int usb_write_10(ccb *srb, struct us_data *ss, unsigned long start,
  * device with proper values (as reported by 'usb info').
  *
  * Vendor and product length limits are taken from the definition of
- * block_dev_desc_t in include/part.h.
+ * struct blk_desc in include/part.h.
  */
 static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 				unsigned char vendor[],
@@ -1026,7 +1026,7 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 }
 #endif /* CONFIG_USB_BIN_FIXUP */
 
-static unsigned long usb_stor_read(block_dev_desc_t *block_dev, lbaint_t blknr,
+static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer)
 {
 	int device = block_dev->dev;
@@ -1097,7 +1097,7 @@ retry_it:
 	return blkcnt;
 }
 
-static unsigned long usb_stor_write(block_dev_desc_t *block_dev, lbaint_t blknr,
+static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer)
 {
 	int device = block_dev->dev;
@@ -1289,7 +1289,7 @@ int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
 }
 
 int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
-		      block_dev_desc_t *dev_desc)
+		      struct blk_desc *dev_desc)
 {
 	unsigned char perq, modi;
 	ALLOC_CACHE_ALIGN_BUFFER(u32, cap, 2);
diff --git a/disk/part.c b/disk/part.c
index 1935b28..7f98d89 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -22,7 +22,7 @@
 
 struct block_drvr {
 	char *name;
-	block_dev_desc_t* (*get_dev)(int dev);
+	struct blk_desc* (*get_dev)(int dev);
 	int (*select_hwpart)(int dev_num, int hwpart);
 };
 
@@ -58,10 +58,10 @@ static const struct block_drvr block_drvr[] = {
 DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef HAVE_BLOCK_DEVICE
-static block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
+static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 {
 	const struct block_drvr *drvr = block_drvr;
-	block_dev_desc_t* (*reloc_get_dev)(int dev);
+	struct blk_desc* (*reloc_get_dev)(int dev);
 	int (*select_hwpart)(int dev_num, int hwpart);
 	char *name;
 	int ret;
@@ -84,7 +84,7 @@ static block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 			select_hwpart += gd->reloc_off;
 #endif
 		if (strncmp(ifname, name, strlen(name)) == 0) {
-			block_dev_desc_t *dev_desc = reloc_get_dev(dev);
+			struct blk_desc *dev_desc = reloc_get_dev(dev);
 			if (!dev_desc)
 				return NULL;
 			if (hwpart == 0 && !select_hwpart)
@@ -101,17 +101,17 @@ static block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 	return NULL;
 }
 
-block_dev_desc_t *get_dev(const char *ifname, int dev)
+struct blk_desc *get_dev(const char *ifname, int dev)
 {
 	return get_dev_hwpart(ifname, dev, 0);
 }
 #else
-block_dev_desc_t *get_dev_hwpart(const char *ifname, int dev, int hwpart)
+struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 {
 	return NULL;
 }
 
-block_dev_desc_t *get_dev(const char *ifname, int dev)
+struct blk_desc *get_dev(const char *ifname, int dev)
 {
 	return NULL;
 }
@@ -144,7 +144,7 @@ static lba512_t lba512_muldiv(lba512_t block_count, lba512_t mul_by, lba512_t di
 	return bc_quot * mul_by + (bc_rem * mul_by) / div_by;
 }
 
-void dev_print (block_dev_desc_t *dev_desc)
+void dev_print (struct blk_desc *dev_desc)
 {
 	lba512_t lba512; /* number of blocks if 512bytes block size */
 
@@ -250,7 +250,7 @@ void dev_print (block_dev_desc_t *dev_desc)
 
 #ifdef HAVE_BLOCK_DEVICE
 
-void init_part(block_dev_desc_t *dev_desc)
+void init_part(struct blk_desc *dev_desc)
 {
 #ifdef CONFIG_ISO_PARTITION
 	if (test_part_iso(dev_desc) == 0) {
@@ -297,7 +297,7 @@ void init_part(block_dev_desc_t *dev_desc)
 	defined(CONFIG_AMIGA_PARTITION) || \
 	defined(CONFIG_EFI_PARTITION)
 
-static void print_part_header(const char *type, block_dev_desc_t *dev_desc)
+static void print_part_header(const char *type, struct blk_desc *dev_desc)
 {
 	puts ("\nPartition Map for ");
 	switch (dev_desc->if_type) {
@@ -335,7 +335,7 @@ static void print_part_header(const char *type, block_dev_desc_t *dev_desc)
 
 #endif /* any CONFIG_..._PARTITION */
 
-void print_part(block_dev_desc_t * dev_desc)
+void print_part(struct blk_desc *dev_desc)
 {
 
 		switch (dev_desc->part_type) {
@@ -383,7 +383,7 @@ void print_part(block_dev_desc_t * dev_desc)
 
 #endif /* HAVE_BLOCK_DEVICE */
 
-int get_partition_info(block_dev_desc_t *dev_desc, int part,
+int get_partition_info(struct blk_desc *dev_desc, int part,
 		       disk_partition_t *info)
 {
 #ifdef HAVE_BLOCK_DEVICE
@@ -450,7 +450,7 @@ int get_partition_info(block_dev_desc_t *dev_desc, int part,
 }
 
 int get_device(const char *ifname, const char *dev_hwpart_str,
-	       block_dev_desc_t **dev_desc)
+	       struct blk_desc **dev_desc)
 {
 	char *ep;
 	char *dup_str = NULL;
@@ -512,7 +512,7 @@ cleanup:
 #define PART_AUTO -1
 #define MAX_SEARCH_PARTITIONS 16
 int get_device_and_partition(const char *ifname, const char *dev_part_str,
-			     block_dev_desc_t **dev_desc,
+			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev)
 {
 	int ret = -1;
diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index 57c1b9d..008941c 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -126,7 +126,7 @@ static void print_part_info(struct partition_block *p)
  * the ID AMIGA_ID_RDISK ('RDSK') and needs to have a valid
  * sum-to-zero checksum
  */
-struct rigid_disk_block *get_rdisk(block_dev_desc_t *dev_desc)
+struct rigid_disk_block *get_rdisk(struct blk_desc *dev_desc)
 {
     int i;
     int limit;
@@ -166,7 +166,7 @@ struct rigid_disk_block *get_rdisk(block_dev_desc_t *dev_desc)
  * Ridgid disk block
  */
 
-struct bootcode_block *get_bootcode(block_dev_desc_t *dev_desc)
+struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
 {
     int i;
     int limit;
@@ -207,7 +207,7 @@ struct bootcode_block *get_bootcode(block_dev_desc_t *dev_desc)
  * Test if the given partition has an Amiga partition table/Rigid
  * Disk block
  */
-int test_part_amiga(block_dev_desc_t *dev_desc)
+int test_part_amiga(struct blk_desc *dev_desc)
 {
     struct rigid_disk_block *rdb;
     struct bootcode_block *bootcode;
@@ -236,7 +236,8 @@ int test_part_amiga(block_dev_desc_t *dev_desc)
 /*
  * Find partition number partnum on the given drive.
  */
-static struct partition_block *find_partition(block_dev_desc_t *dev_desc, int partnum)
+static struct partition_block *find_partition(struct blk_desc *dev_desc,
+					      int partnum)
 {
     struct rigid_disk_block *rdb;
     struct partition_block *p;
@@ -290,7 +291,8 @@ static struct partition_block *find_partition(block_dev_desc_t *dev_desc, int pa
 /*
  * Get info about a partition
  */
-int get_partition_info_amiga (block_dev_desc_t *dev_desc, int part, disk_partition_t *info)
+int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
+			     disk_partition_t *info)
 {
     struct partition_block *p = find_partition(dev_desc, part-1);
     struct amiga_part_geometry *g;
@@ -317,7 +319,7 @@ int get_partition_info_amiga (block_dev_desc_t *dev_desc, int part, disk_partiti
     return 0;
 }
 
-void print_part_amiga (block_dev_desc_t *dev_desc)
+void print_part_amiga(struct blk_desc *dev_desc)
 {
     struct rigid_disk_block *rdb;
     struct bootcode_block *boot;
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 08872d6..ea0315c 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
 }
 
 
-int test_part_dos (block_dev_desc_t *dev_desc)
+int test_part_dos(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 
@@ -102,7 +102,7 @@ int test_part_dos (block_dev_desc_t *dev_desc)
 
 /*  Print a partition that is relative to its Extended partition table
  */
-static void print_partition_extended(block_dev_desc_t *dev_desc,
+static void print_partition_extended(struct blk_desc *dev_desc,
 				     lbaint_t ext_part_sector,
 				     lbaint_t relative,
 				     int part_num, unsigned int disksig)
@@ -167,11 +167,11 @@ static void print_partition_extended(block_dev_desc_t *dev_desc,
 
 /*  Print a partition that is relative to its Extended partition table
  */
-static int get_partition_info_extended (block_dev_desc_t *dev_desc,
-				 lbaint_t ext_part_sector,
-				 lbaint_t relative, int part_num,
-				 int which_part, disk_partition_t *info,
-				 unsigned int disksig)
+static int get_partition_info_extended(struct blk_desc *dev_desc,
+				       lbaint_t ext_part_sector,
+				       lbaint_t relative, int part_num,
+				       int which_part, disk_partition_t *info,
+				       unsigned int disksig)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 	dos_partition_t *pt;
@@ -283,13 +283,14 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc,
 	return -1;
 }
 
-void print_part_dos (block_dev_desc_t *dev_desc)
+void print_part_dos(struct blk_desc *dev_desc)
 {
 	printf("Part\tStart Sector\tNum Sectors\tUUID\t\tType\n");
 	print_partition_extended(dev_desc, 0, 0, 1, 0);
 }
 
-int get_partition_info_dos (block_dev_desc_t *dev_desc, int part, disk_partition_t * info)
+int get_partition_info_dos(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info)
 {
 	return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
 }
diff --git a/disk/part_efi.c b/disk/part_efi.c
index e1b58c5..db5e7ed 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -41,10 +41,10 @@ static inline u32 efi_crc32(const void *buf, u32 len)
 
 static int pmbr_part_valid(struct partition *part);
 static int is_pmbr_valid(legacy_mbr * mbr);
-static int is_gpt_valid(block_dev_desc_t *dev_desc, u64 lba,
+static int is_gpt_valid(struct blk_desc *dev_desc, u64 lba,
 				gpt_header *pgpt_head, gpt_entry **pgpt_pte);
-static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * dev_desc,
-				gpt_header * pgpt_head);
+static gpt_entry *alloc_read_gpt_entries(struct blk_desc *dev_desc,
+					 gpt_header *pgpt_head);
 static int is_pte_valid(gpt_entry * pte);
 
 static char *print_efiname(gpt_entry *pte)
@@ -176,7 +176,7 @@ static void prepare_backup_gpt_header(gpt_header *gpt_h)
  * Public Functions (include/part.h)
  */
 
-void print_part_efi(block_dev_desc_t * dev_desc)
+void print_part_efi(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
 	gpt_entry *gpt_pte = NULL;
@@ -237,8 +237,8 @@ void print_part_efi(block_dev_desc_t * dev_desc)
 	return;
 }
 
-int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
-				disk_partition_t * info)
+int get_partition_info_efi(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
 	gpt_entry *gpt_pte = NULL;
@@ -300,7 +300,7 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
 	return 0;
 }
 
-int get_partition_info_efi_by_name(block_dev_desc_t *dev_desc,
+int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
 	const char *name, disk_partition_t *info)
 {
 	int ret;
@@ -319,7 +319,7 @@ int get_partition_info_efi_by_name(block_dev_desc_t *dev_desc,
 	return -2;
 }
 
-int test_part_efi(block_dev_desc_t * dev_desc)
+int test_part_efi(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
 
@@ -337,7 +337,7 @@ int test_part_efi(block_dev_desc_t * dev_desc)
  *
  * @return - zero on success, otherwise error
  */
-static int set_protective_mbr(block_dev_desc_t *dev_desc)
+static int set_protective_mbr(struct blk_desc *dev_desc)
 {
 	/* Setup the Protective MBR */
 	ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, p_mbr, 1);
@@ -363,7 +363,7 @@ static int set_protective_mbr(block_dev_desc_t *dev_desc)
 	return 0;
 }
 
-int write_gpt_table(block_dev_desc_t *dev_desc,
+int write_gpt_table(struct blk_desc *dev_desc,
 		gpt_header *gpt_h, gpt_entry *gpt_e)
 {
 	const int pte_blk_cnt = BLOCK_CNT((gpt_h->num_partition_entries
@@ -517,7 +517,7 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
 	return 0;
 }
 
-int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
+int gpt_fill_header(struct blk_desc *dev_desc, gpt_header *gpt_h,
 		char *str_guid, int parts_count)
 {
 	gpt_h->signature = cpu_to_le64(GPT_HEADER_SIGNATURE);
@@ -539,7 +539,7 @@ int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
 	return 0;
 }
 
-int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
+int gpt_restore(struct blk_desc *dev_desc, char *str_disk_guid,
 		disk_partition_t *partitions, int parts_count)
 {
 	int ret;
@@ -595,7 +595,7 @@ static void gpt_convert_efi_name_to_char(char *s, efi_char16_t *es, int n)
 	}
 }
 
-int gpt_verify_headers(block_dev_desc_t *dev_desc, gpt_header *gpt_head,
+int gpt_verify_headers(struct blk_desc *dev_desc, gpt_header *gpt_head,
 		       gpt_entry **gpt_pte)
 {
 	/*
@@ -619,7 +619,7 @@ int gpt_verify_headers(block_dev_desc_t *dev_desc, gpt_header *gpt_head,
 	return 0;
 }
 
-int gpt_verify_partitions(block_dev_desc_t *dev_desc,
+int gpt_verify_partitions(struct blk_desc *dev_desc,
 			  disk_partition_t *partitions, int parts,
 			  gpt_header *gpt_head, gpt_entry **gpt_pte)
 {
@@ -691,7 +691,7 @@ int gpt_verify_partitions(block_dev_desc_t *dev_desc,
 	return 0;
 }
 
-int is_valid_gpt_buf(block_dev_desc_t *dev_desc, void *buf)
+int is_valid_gpt_buf(struct blk_desc *dev_desc, void *buf)
 {
 	gpt_header *gpt_h;
 	gpt_entry *gpt_e;
@@ -712,7 +712,7 @@ int is_valid_gpt_buf(block_dev_desc_t *dev_desc, void *buf)
 	return 0;
 }
 
-int write_mbr_and_gpt_partitions(block_dev_desc_t *dev_desc, void *buf)
+int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 {
 	gpt_header *gpt_h;
 	gpt_entry *gpt_e;
@@ -834,7 +834,7 @@ static int is_pmbr_valid(legacy_mbr * mbr)
  * Description: returns 1 if valid,  0 on error.
  * If valid, returns pointers to PTEs.
  */
-static int is_gpt_valid(block_dev_desc_t *dev_desc, u64 lba,
+static int is_gpt_valid(struct blk_desc *dev_desc, u64 lba,
 			gpt_header *pgpt_head, gpt_entry **pgpt_pte)
 {
 	if (!dev_desc || !pgpt_head) {
@@ -876,8 +876,8 @@ static int is_gpt_valid(block_dev_desc_t *dev_desc, u64 lba,
  * Allocates space for PTEs based on information found in @gpt.
  * Notes: remember to free pte when you're done!
  */
-static gpt_entry *alloc_read_gpt_entries(block_dev_desc_t * dev_desc,
-					 gpt_header * pgpt_head)
+static gpt_entry *alloc_read_gpt_entries(struct blk_desc *dev_desc,
+					 gpt_header *pgpt_head)
 {
 	size_t count = 0, blk_cnt;
 	lbaint_t blk;
diff --git a/disk/part_iso.c b/disk/part_iso.c
index 5f4bb18..2984df5 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -46,7 +46,8 @@ static inline unsigned short le16_to_int(unsigned char *le16)
 
 
 /* only boot records will be listed as valid partitions */
-int get_partition_info_iso_verb(block_dev_desc_t * dev_desc, int part_num, disk_partition_t * info, int verb)
+int get_partition_info_iso_verb(struct blk_desc *dev_desc, int part_num,
+				disk_partition_t *info, int verb)
 {
 	int i,offset,entry_num;
 	unsigned short *chksumbuf;
@@ -216,13 +217,14 @@ found:
 	return 0;
 }
 
-int get_partition_info_iso(block_dev_desc_t * dev_desc, int part_num, disk_partition_t * info)
+int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
+			   disk_partition_t *info)
 {
 	return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
 }
 
 
-void print_part_iso(block_dev_desc_t * dev_desc)
+void print_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 	int i;
@@ -239,7 +241,7 @@ void print_part_iso(block_dev_desc_t * dev_desc)
 	} while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
 }
 
-int test_part_iso (block_dev_desc_t *dev_desc)
+int test_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 
diff --git a/disk/part_mac.c b/disk/part_mac.c
index f3bc8dd..ae83495 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -32,13 +32,15 @@ extern ldiv_t ldiv (long int __numer, long int __denom);
 #endif
 
 
-static int part_mac_read_ddb (block_dev_desc_t *dev_desc, mac_driver_desc_t *ddb_p);
-static int part_mac_read_pdb (block_dev_desc_t *dev_desc, int part, mac_partition_t *pdb_p);
+static int part_mac_read_ddb(struct blk_desc *dev_desc,
+			     mac_driver_desc_t *ddb_p);
+static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
+			     mac_partition_t *pdb_p);
 
 /*
  * Test for a valid MAC partition
  */
-int test_part_mac (block_dev_desc_t *dev_desc)
+int test_part_mac(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
 	ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
@@ -63,7 +65,7 @@ int test_part_mac (block_dev_desc_t *dev_desc)
 }
 
 
-void print_part_mac (block_dev_desc_t *dev_desc)
+void print_part_mac(struct blk_desc *dev_desc)
 {
 	ulong i, n;
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
@@ -149,7 +151,8 @@ void print_part_mac (block_dev_desc_t *dev_desc)
 /*
  * Read Device Descriptor Block
  */
-static int part_mac_read_ddb (block_dev_desc_t *dev_desc, mac_driver_desc_t *ddb_p)
+static int part_mac_read_ddb(struct blk_desc *dev_desc,
+			     mac_driver_desc_t *ddb_p)
 {
 	if (dev_desc->block_read(dev_desc, 0, 1, (ulong *)ddb_p) != 1) {
 		printf ("** Can't read Driver Desriptor Block **\n");
@@ -169,7 +172,8 @@ static int part_mac_read_ddb (block_dev_desc_t *dev_desc, mac_driver_desc_t *ddb
 /*
  * Read Partition Descriptor Block
  */
-static int part_mac_read_pdb (block_dev_desc_t *dev_desc, int part, mac_partition_t *pdb_p)
+static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
+			     mac_partition_t *pdb_p)
 {
 	int n = 1;
 
@@ -210,7 +214,8 @@ static int part_mac_read_pdb (block_dev_desc_t *dev_desc, int part, mac_partitio
 	/* NOTREACHED */
 }
 
-int get_partition_info_mac (block_dev_desc_t *dev_desc, int part, disk_partition_t *info)
+int get_partition_info_mac(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
 	ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
diff --git a/drivers/block/dwc_ahsata.c b/drivers/block/dwc_ahsata.c
index bc072f3..6ec52a9 100644
--- a/drivers/block/dwc_ahsata.c
+++ b/drivers/block/dwc_ahsata.c
@@ -620,7 +620,7 @@ int reset_sata(int dev)
 
 static void dwc_ahsata_print_info(int dev)
 {
-	block_dev_desc_t *pdev = &(sata_dev_desc[dev]);
+	struct blk_desc *pdev = &(sata_dev_desc[dev]);
 
 	printf("SATA Device Info:\n\r");
 #ifdef CONFIG_SYS_64BIT_LBA
@@ -956,7 +956,7 @@ int scan_sata(int dev)
 	struct ahci_probe_ent *probe_ent =
 		(struct ahci_probe_ent *)sata_dev_desc[dev].priv;
 	u8 port = probe_ent->hard_port_no;
-	block_dev_desc_t *pdev = &(sata_dev_desc[dev]);
+	struct blk_desc *pdev = &(sata_dev_desc[dev]);
 
 	id = (u16 *)memalign(ARCH_DMA_MINALIGN,
 				roundup(ARCH_DMA_MINALIGN,
diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index 170f0fa..dd21400 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -22,7 +22,7 @@ static struct host_block_dev *find_host_device(int dev)
 	return NULL;
 }
 
-static unsigned long host_block_read(block_dev_desc_t *block_dev,
+static unsigned long host_block_read(struct blk_desc *block_dev,
 				     unsigned long start, lbaint_t blkcnt,
 				     void *buffer)
 {
@@ -44,7 +44,7 @@ static unsigned long host_block_read(block_dev_desc_t *block_dev,
 	return -1;
 }
 
-static unsigned long host_block_write(block_dev_desc_t *block_dev,
+static unsigned long host_block_write(struct blk_desc *block_dev,
 				      unsigned long start, lbaint_t blkcnt,
 				      const void *buffer)
 {
@@ -89,7 +89,7 @@ int host_dev_bind(int dev, char *filename)
 		return 1;
 	}
 
-	block_dev_desc_t *blk_dev = &host_dev->blk_dev;
+	struct blk_desc *blk_dev = &host_dev->blk_dev;
 	blk_dev->if_type = IF_TYPE_HOST;
 	blk_dev->priv = host_dev;
 	blk_dev->blksz = 512;
@@ -103,7 +103,7 @@ int host_dev_bind(int dev, char *filename)
 	return 0;
 }
 
-int host_get_dev_err(int dev, block_dev_desc_t **blk_devp)
+int host_get_dev_err(int dev, struct blk_desc **blk_devp)
 {
 	struct host_block_dev *host_dev = find_host_device(dev);
 
@@ -117,9 +117,9 @@ int host_get_dev_err(int dev, block_dev_desc_t **blk_devp)
 	return 0;
 }
 
-block_dev_desc_t *host_get_dev(int dev)
+struct blk_desc *host_get_dev(int dev)
 {
-	block_dev_desc_t *blk_dev;
+	struct blk_desc *blk_dev;
 
 	if (host_get_dev_err(dev, &blk_dev))
 		return NULL;
diff --git a/drivers/block/systemace.c b/drivers/block/systemace.c
index b974e80..ea18c0d 100644
--- a/drivers/block/systemace.c
+++ b/drivers/block/systemace.c
@@ -69,11 +69,11 @@ static u16 ace_readw(unsigned off)
 	return in16(base + off);
 }
 
-static unsigned long systemace_read(block_dev_desc_t *block_dev,
+static unsigned long systemace_read(struct blk_desc *block_dev,
 				    unsigned long start, lbaint_t blkcnt,
 				    void *buffer);
 
-static block_dev_desc_t systemace_dev = { 0 };
+static struct blk_desc systemace_dev = { 0 };
 
 static int get_cf_lock(void)
 {
@@ -105,7 +105,7 @@ static void release_cf_lock(void)
 }
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *systemace_get_dev(int dev)
+struct blk_desc *systemace_get_dev(int dev)
 {
 	/* The first time through this, the systemace_dev object is
 	   not yet initialized. In that case, fill it in. */
@@ -137,7 +137,7 @@ block_dev_desc_t *systemace_get_dev(int dev)
  * the dev_desc) to read blocks of data. The return value is the
  * number of blocks read. A zero return indicates an error.
  */
-static unsigned long systemace_read(block_dev_desc_t *block_dev,
+static unsigned long systemace_read(struct blk_desc *block_dev,
 				    unsigned long start, lbaint_t blkcnt,
 				    void *buffer)
 {
diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
index 395d472..bfac91a 100644
--- a/drivers/dfu/dfu_mmc.c
+++ b/drivers/dfu/dfu_mmc.c
@@ -351,7 +351,7 @@ int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr, char *s)
 
 	} else if (!strcmp(entity_type, "part")) {
 		disk_partition_t partinfo;
-		block_dev_desc_t *blk_dev = &mmc->block_dev;
+		struct blk_desc *blk_dev = &mmc->block_dev;
 		int mmcdev = second_arg;
 		int mmcpart = third_arg;
 
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index ede5d6e..b19b328 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -234,7 +234,7 @@ static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
 	return blkcnt;
 }
 
-static ulong mmc_bread(block_dev_desc_t *block_dev, lbaint_t start,
+static ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start,
 		       lbaint_t blkcnt, void *dst)
 {
 	int dev_num = block_dev->dev;
@@ -1579,7 +1579,7 @@ void mmc_destroy(struct mmc *mmc)
 }
 
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *mmc_get_dev(int dev)
+struct blk_desc *mmc_get_dev(int dev)
 {
 	struct mmc *mmc = find_mmc_device(dev);
 	if (!mmc || mmc_init(mmc))
diff --git a/drivers/mmc/mmc_private.h b/drivers/mmc/mmc_private.h
index 6a70639..d3f6bfe 100644
--- a/drivers/mmc/mmc_private.h
+++ b/drivers/mmc/mmc_private.h
@@ -22,23 +22,23 @@ void mmc_adapter_card_type_ident(void);
 
 #ifndef CONFIG_SPL_BUILD
 
-unsigned long mmc_berase(block_dev_desc_t *block_dev, lbaint_t start,
+unsigned long mmc_berase(struct blk_desc *block_dev, lbaint_t start,
 			 lbaint_t blkcnt);
 
-unsigned long mmc_bwrite(block_dev_desc_t *block_dev, lbaint_t start,
+unsigned long mmc_bwrite(struct blk_desc *block_dev, lbaint_t start,
 			 lbaint_t blkcnt, const void *src);
 
 #else /* CONFIG_SPL_BUILD */
 
 /* SPL will never write or erase, declare dummies to reduce code size. */
 
-static inline unsigned long mmc_berase(block_dev_desc_t *block_dev,
+static inline unsigned long mmc_berase(struct blk_desc *block_dev,
 				       lbaint_t start, lbaint_t blkcnt)
 {
 	return 0;
 }
 
-static inline ulong mmc_bwrite(block_dev_desc_t *block_dev, lbaint_t start,
+static inline ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start,
 			       lbaint_t blkcnt, const void *src)
 {
 	return 0;
diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c
index 79b8c4d..54e60db 100644
--- a/drivers/mmc/mmc_write.c
+++ b/drivers/mmc/mmc_write.c
@@ -65,7 +65,7 @@ err_out:
 	return err;
 }
 
-unsigned long mmc_berase(block_dev_desc_t *block_dev, lbaint_t start,
+unsigned long mmc_berase(struct blk_desc *block_dev, lbaint_t start,
 			 lbaint_t blkcnt)
 {
 	int dev_num = block_dev->dev;
@@ -171,7 +171,7 @@ static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t start,
 	return blkcnt;
 }
 
-ulong mmc_bwrite(block_dev_desc_t *block_dev, lbaint_t start, lbaint_t blkcnt,
+ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
 		 const void *src)
 {
 	int dev_num = block_dev->dev;
diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c
index 9fd10de..3eef66f 100644
--- a/fs/ext4/dev.c
+++ b/fs/ext4/dev.c
@@ -32,13 +32,13 @@
 
 lbaint_t part_offset;
 
-static block_dev_desc_t *ext4fs_block_dev_desc;
+static struct blk_desc *ext4fs_blk_desc;
 static disk_partition_t *part_info;
 
-void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
+void ext4fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 {
 	assert(rbdd->blksz == (1 << rbdd->log2blksz));
-	ext4fs_block_dev_desc = rbdd;
+	ext4fs_blk_desc = rbdd;
 	get_fs()->dev_desc = rbdd;
 	part_info = info;
 	part_offset = info->start;
@@ -49,11 +49,11 @@ void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
 int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 {
 	unsigned block_len;
-	int log2blksz = ext4fs_block_dev_desc->log2blksz;
-	ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, (ext4fs_block_dev_desc ?
-						 ext4fs_block_dev_desc->blksz :
+	int log2blksz = ext4fs_blk_desc->log2blksz;
+	ALLOC_CACHE_ALIGN_BUFFER(char, sec_buf, (ext4fs_blk_desc ?
+						 ext4fs_blk_desc->blksz :
 						 0));
-	if (ext4fs_block_dev_desc == NULL) {
+	if (ext4fs_blk_desc == NULL) {
 		printf("** Invalid Block Device Descriptor (NULL)\n");
 		return 0;
 	}
@@ -69,21 +69,20 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 
 	/* Get the read to the beginning of a partition */
 	sector += byte_offset >> log2blksz;
-	byte_offset &= ext4fs_block_dev_desc->blksz - 1;
+	byte_offset &= ext4fs_blk_desc->blksz - 1;
 
 	debug(" <" LBAFU ", %d, %d>\n", sector, byte_offset, byte_len);
 
 	if (byte_offset != 0) {
 		int readlen;
 		/* read first part which isn't aligned with start of sector */
-		if (ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc,
-						      part_info->start + sector,
-						      1, (void *)sec_buf)
-		    != 1) {
+		if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
+						part_info->start + sector,
+						1, (void *)sec_buf) != 1) {
 			printf(" ** ext2fs_devread() read error **\n");
 			return 0;
 		}
-		readlen = min((int)ext4fs_block_dev_desc->blksz - byte_offset,
+		readlen = min((int)ext4fs_blk_desc->blksz - byte_offset,
 			      byte_len);
 		memcpy(buf, sec_buf + byte_offset, readlen);
 		buf += readlen;
@@ -95,38 +94,36 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 		return 1;
 
 	/* read sector aligned part */
-	block_len = byte_len & ~(ext4fs_block_dev_desc->blksz - 1);
+	block_len = byte_len & ~(ext4fs_blk_desc->blksz - 1);
 
 	if (block_len == 0) {
-		ALLOC_CACHE_ALIGN_BUFFER(u8, p, ext4fs_block_dev_desc->blksz);
+		ALLOC_CACHE_ALIGN_BUFFER(u8, p, ext4fs_blk_desc->blksz);
 
-		block_len = ext4fs_block_dev_desc->blksz;
-		ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc,
+		block_len = ext4fs_blk_desc->blksz;
+		ext4fs_blk_desc->block_read(ext4fs_blk_desc,
 						  part_info->start + sector,
 						  1, (void *)p);
 		memcpy(buf, p, byte_len);
 		return 1;
 	}
 
-	if (ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc,
-					      part_info->start + sector,
-					      block_len >> log2blksz,
-					      (void *)buf) !=
-					      block_len >> log2blksz) {
+	if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
+					part_info->start + sector,
+					block_len >> log2blksz, (void *)buf)
+				!= block_len >> log2blksz) {
 		printf(" ** %s read error - block\n", __func__);
 		return 0;
 	}
-	block_len = byte_len & ~(ext4fs_block_dev_desc->blksz - 1);
+	block_len = byte_len & ~(ext4fs_blk_desc->blksz - 1);
 	buf += block_len;
 	byte_len -= block_len;
-	sector += block_len / ext4fs_block_dev_desc->blksz;
+	sector += block_len / ext4fs_blk_desc->blksz;
 
 	if (byte_len != 0) {
 		/* read rest of data which are not in whole sector */
-		if (ext4fs_block_dev_desc->block_read(ext4fs_block_dev_desc,
-						      part_info->start + sector,
-						      1, (void *)sec_buf)
-		    != 1) {
+		if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
+						part_info->start + sector,
+						1, (void *)sec_buf) != 1) {
 			printf("* %s read error - last part\n", __func__);
 			return 0;
 		}
diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
index 258b937..43c8897 100644
--- a/fs/ext4/ext4fs.c
+++ b/fs/ext4/ext4fs.c
@@ -198,7 +198,7 @@ int ext4fs_read(char *buf, loff_t len, loff_t *actread)
 	return ext4fs_read_file(ext4fs_file, 0, len, buf, actread);
 }
 
-int ext4fs_probe(block_dev_desc_t *fs_dev_desc,
+int ext4fs_probe(struct blk_desc *fs_dev_desc,
 		 disk_partition_t *fs_partition)
 {
 	ext4fs_set_blk_dev(fs_dev_desc, fs_partition);
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 472a63e..2cef3bd 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -37,7 +37,7 @@ static void downcase(char *str)
 	}
 }
 
-static block_dev_desc_t *cur_dev;
+static struct blk_desc *cur_dev;
 static disk_partition_t cur_part_info;
 
 #define DOS_BOOT_MAGIC_OFFSET	0x1fe
@@ -60,7 +60,7 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
 	return ret;
 }
 
-int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t *info)
+int fat_set_blk_dev(struct blk_desc *dev_desc, disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 
@@ -89,7 +89,7 @@ int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t *info)
 	return -1;
 }
 
-int fat_register_device(block_dev_desc_t *dev_desc, int part_no)
+int fat_register_device(struct blk_desc *dev_desc, int part_no)
 {
 	disk_partition_t info;
 
diff --git a/fs/fs.c b/fs/fs.c
index d123d29..8515bea 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -20,11 +20,11 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static block_dev_desc_t *fs_dev_desc;
+static struct blk_desc *fs_dev_desc;
 static disk_partition_t fs_partition;
 static int fs_type = FS_TYPE_ANY;
 
-static inline int fs_probe_unsupported(block_dev_desc_t *fs_dev_desc,
+static inline int fs_probe_unsupported(struct blk_desc *fs_dev_desc,
 				      disk_partition_t *fs_partition)
 {
 	printf("** Unrecognized filesystem type **\n");
@@ -81,7 +81,7 @@ struct fstype_info {
 	 * filesystem.
 	 */
 	bool null_dev_desc_ok;
-	int (*probe)(block_dev_desc_t *fs_dev_desc,
+	int (*probe)(struct blk_desc *fs_dev_desc,
 		     disk_partition_t *fs_partition);
 	int (*ls)(const char *dirname);
 	int (*exists)(const char *filename);
diff --git a/fs/reiserfs/dev.c b/fs/reiserfs/dev.c
index 7b24d6a..5a1ab0a 100644
--- a/fs/reiserfs/dev.c
+++ b/fs/reiserfs/dev.c
@@ -12,13 +12,13 @@
 
 #include "reiserfs_private.h"
 
-static block_dev_desc_t *reiserfs_block_dev_desc;
+static struct blk_desc *reiserfs_blk_desc;
 static disk_partition_t *part_info;
 
 
-void reiserfs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
+void reiserfs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 {
-	reiserfs_block_dev_desc = rbdd;
+	reiserfs_blk_desc = rbdd;
 	part_info = info;
 }
 
@@ -53,17 +53,15 @@ int reiserfs_devread (int sector, int byte_offset, int byte_len, char *buf)
 #endif
 
 
-	if (reiserfs_block_dev_desc == NULL)
+	if (reiserfs_blk_desc == NULL)
 		return 0;
 
 
 	if (byte_offset != 0) {
 		/* read first part which isn't aligned with start of sector */
-		if (reiserfs_block_dev_desc->block_read(reiserfs_block_dev_desc,
-							part_info->start +
-								sector,
-							1, (void *)sec_buf)
-		    != 1) {
+		if (reiserfs_blk_desc->block_read(reiserfs_blk_desc,
+						  part_info->start + sector,
+						  1, (void *)sec_buf) != 1) {
 			printf (" ** reiserfs_devread() read error\n");
 			return 0;
 		}
@@ -75,11 +73,10 @@ int reiserfs_devread (int sector, int byte_offset, int byte_len, char *buf)
 
 	/* read sector aligned part */
 	block_len = byte_len & ~(SECTOR_SIZE-1);
-	if (reiserfs_block_dev_desc->block_read(reiserfs_block_dev_desc,
-						part_info->start + sector,
-						block_len / SECTOR_SIZE,
-						(void *)buf)
-	    != block_len/SECTOR_SIZE) {
+	if (reiserfs_blk_desc->block_read(reiserfs_blk_desc,
+					  part_info->start + sector,
+					  block_len / SECTOR_SIZE, (void *)buf)
+			!= block_len/SECTOR_SIZE) {
 		printf (" ** reiserfs_devread() read error - block\n");
 		return 0;
 	}
@@ -89,11 +86,9 @@ int reiserfs_devread (int sector, int byte_offset, int byte_len, char *buf)
 
 	if ( byte_len != 0 ) {
 		/* read rest of data which are not in whole sector */
-		if (reiserfs_block_dev_desc->block_read(reiserfs_block_dev_desc,
-							part_info->start +
-							    sector,
-							1, (void *)sec_buf)
-		    != 1) {
+		if (reiserfs_blk_desc->block_read(reiserfs_blk_desc,
+						  part_info->start + sector,
+						  1, (void *)sec_buf) != 1) {
 			printf (" ** reiserfs_devread() read error - last part\n");
 			return 0;
 		}
diff --git a/fs/sandbox/sandboxfs.c b/fs/sandbox/sandboxfs.c
index 5acfc03..2703eed 100644
--- a/fs/sandbox/sandboxfs.c
+++ b/fs/sandbox/sandboxfs.c
@@ -8,10 +8,10 @@
 #include <fs.h>
 #include <os.h>
 
-int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
+int sandbox_fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 {
 	/*
-	 * Only accept a NULL block_dev_desc_t for the sandbox, which is when
+	 * Only accept a NULL struct blk_desc for the sandbox, which is when
 	 * hostfs interface is used
 	 */
 	return rbdd != NULL;
diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c
index a992a00..168ae2b 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -561,7 +561,7 @@ static unsigned long ubifs_findfile(struct super_block *sb, char *filename)
 	return 0;
 }
 
-int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
+int ubifs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 {
 	if (rbdd) {
 		debug("UBIFS cannot be used with normal block devices\n");
diff --git a/fs/zfs/dev.c b/fs/zfs/dev.c
index 67d1265..2f409e6 100644
--- a/fs/zfs/dev.c
+++ b/fs/zfs/dev.c
@@ -13,12 +13,12 @@
 #include <config.h>
 #include <zfs_common.h>
 
-static block_dev_desc_t *zfs_block_dev_desc;
+static struct blk_desc *zfs_blk_desc;
 static disk_partition_t *part_info;
 
-void zfs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
+void zfs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 {
-	zfs_block_dev_desc = rbdd;
+	zfs_blk_desc = rbdd;
 	part_info = info;
 }
 
@@ -48,17 +48,16 @@ int zfs_devread(int sector, int byte_offset, int byte_len, char *buf)
 
 	debug(" <%d, %d, %d>\n", sector, byte_offset, byte_len);
 
-	if (zfs_block_dev_desc == NULL) {
+	if (zfs_blk_desc == NULL) {
 		printf("** Invalid Block Device Descriptor (NULL)\n");
 		return 1;
 	}
 
 	if (byte_offset != 0) {
 		/* read first part which isn't aligned with start of sector */
-		if (zfs_block_dev_desc->block_read(zfs_block_dev_desc,
-						   part_info->start + sector, 1,
-						   (void *)sec_buf)
-		    != 1) {
+		if (zfs_blk_desc->block_read(zfs_blk_desc,
+					     part_info->start + sector, 1,
+					     (void *)sec_buf) != 1) {
 			printf(" ** zfs_devread() read error **\n");
 			return 1;
 		}
@@ -79,18 +78,16 @@ int zfs_devread(int sector, int byte_offset, int byte_len, char *buf)
 		u8 p[SECTOR_SIZE];
 
 		block_len = SECTOR_SIZE;
-		zfs_block_dev_desc->block_read(zfs_block_dev_desc,
-					       part_info->start + sector,
-					       1, (void *)p);
+		zfs_blk_desc->block_read(zfs_blk_desc,
+					 part_info->start + sector,
+					 1, (void *)p);
 		memcpy(buf, p, byte_len);
 		return 0;
 	}
 
-	if (zfs_block_dev_desc->block_read(zfs_block_dev_desc,
-					   part_info->start + sector,
-					   block_len / SECTOR_SIZE,
-					   (void *)buf)
-	    != block_len / SECTOR_SIZE) {
+	if (zfs_blk_desc->block_read(zfs_blk_desc, part_info->start + sector,
+				     block_len / SECTOR_SIZE,
+				     (void *)buf) != block_len / SECTOR_SIZE) {
 		printf(" ** zfs_devread() read error - block\n");
 		return 1;
 	}
@@ -102,9 +99,9 @@ int zfs_devread(int sector, int byte_offset, int byte_len, char *buf)
 
 	if (byte_len != 0) {
 		/* read rest of data which are not in whole sector */
-		if (zfs_block_dev_desc->block_read(zfs_block_dev_desc,
-						   part_info->start + sector,
-						   1, (void *)sec_buf) != 1) {
+		if (zfs_blk_desc->block_read(zfs_blk_desc,
+					     part_info->start + sector,
+					     1, (void *)sec_buf) != 1) {
 			printf(" ** zfs_devread() read error - last part\n");
 			return 1;
 		}
diff --git a/fs/zfs/zfs.c b/fs/zfs/zfs.c
index fb2b3ee..ca67afb 100644
--- a/fs/zfs/zfs.c
+++ b/fs/zfs/zfs.c
@@ -20,7 +20,7 @@
 #include "zfs_common.h"
 #include "div64.h"
 
-block_dev_desc_t *zfs_dev_desc;
+struct blk_desc *zfs_dev_desc;
 
 /*
  * The zfs plug-in routines for GRUB are:
diff --git a/include/common.h b/include/common.h
index 1563d64..1317f9b 100644
--- a/include/common.h
+++ b/include/common.h
@@ -813,7 +813,7 @@ void gzwrite_progress_finish(int retcode,
  *				for files under 4GiB
  */
 int gzwrite(unsigned char *src, int len,
-	    struct block_dev_desc *dev,
+	    struct blk_desc *dev,
 	    unsigned long szwritebuf,
 	    u64 startoffs,
 	    u64 szexpected);
diff --git a/include/ext4fs.h b/include/ext4fs.h
index 6888adc..cc765ae 100644
--- a/include/ext4fs.h
+++ b/include/ext4fs.h
@@ -110,7 +110,7 @@ struct ext_filesystem {
 	/* Journal Related */
 
 	/* Block Device Descriptor */
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 };
 
 extern struct ext2_data *ext4fs_root;
@@ -141,9 +141,9 @@ int ext4fs_exists(const char *filename);
 int ext4fs_size(const char *filename, loff_t *size);
 void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
 int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf);
-void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
+void ext4fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
 long int read_allocated_block(struct ext2_inode *inode, int fileblock);
-int ext4fs_probe(block_dev_desc_t *fs_dev_desc,
+int ext4fs_probe(struct blk_desc *fs_dev_desc,
 		 disk_partition_t *fs_partition);
 int ext4_read_file(const char *filename, void *buf, loff_t offset, loff_t len,
 		   loff_t *actread);
diff --git a/include/fat.h b/include/fat.h
index 3038bd7..9d053e6 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -203,8 +203,8 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer,
 		     loff_t maxsize, loff_t *actread);
 int file_fat_read(const char *filename, void *buffer, int maxsize);
 const char *file_getfsname(int idx);
-int fat_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
-int fat_register_device(block_dev_desc_t *dev_desc, int part_no);
+int fat_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
+int fat_register_device(struct blk_desc *dev_desc, int part_no);
 
 int file_fat_write(const char *filename, void *buf, loff_t offset, loff_t len,
 		   loff_t *actwrite);
diff --git a/include/ide.h b/include/ide.h
index f9357be..2407393 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -41,10 +41,10 @@ typedef ulong lbaint_t;
  */
 
 void ide_init(void);
-typedef struct block_dev_desc block_dev_desc_t;
-ulong ide_read(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
+struct blk_desc;
+ulong ide_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 	       void *buffer);
-ulong ide_write(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
+ulong ide_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 		const void *buffer);
 
 #ifdef CONFIG_IDE_PREINIT
diff --git a/include/mmc.h b/include/mmc.h
index d652c14..cdb56e7 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -376,7 +376,7 @@ struct mmc {
 	u64 capacity_gp[4];
 	u64 enh_user_start;
 	u64 enh_user_size;
-	block_dev_desc_t block_dev;
+	struct blk_desc block_dev;
 	char op_cond_pending;	/* 1 if we are waiting on an op_cond command */
 	char init_in_progress;	/* 1 if we have done mmc_start_init() */
 	char preinit;		/* start init as early as possible */
diff --git a/include/part.h b/include/part.h
index dc23949..d1e9d0f 100644
--- a/include/part.h
+++ b/include/part.h
@@ -10,7 +10,7 @@
 #include <ide.h>
 #include <common.h>
 
-struct block_dev_desc {
+struct blk_desc {
 	int		if_type;	/* type of the interface */
 	int		dev;		/* device number */
 	unsigned char	part_type;	/* partition type */
@@ -28,23 +28,23 @@ struct block_dev_desc {
 	char		vendor [40+1];	/* IDE model, SCSI Vendor */
 	char		product[20+1];	/* IDE Serial no, SCSI product */
 	char		revision[8+1];	/* firmware revision */
-	unsigned long	(*block_read)(block_dev_desc_t *block_dev,
+	unsigned long	(*block_read)(struct blk_desc *block_dev,
 				      lbaint_t start,
 				      lbaint_t blkcnt,
 				      void *buffer);
-	unsigned long	(*block_write)(block_dev_desc_t *block_dev,
+	unsigned long	(*block_write)(struct blk_desc *block_dev,
 				       lbaint_t start,
 				       lbaint_t blkcnt,
 				       const void *buffer);
-	unsigned long	(*block_erase)(block_dev_desc_t *block_dev,
+	unsigned long	(*block_erase)(struct blk_desc *block_dev,
 				       lbaint_t start,
 				       lbaint_t blkcnt);
 	void		*priv;		/* driver private struct pointer */
 };
 
-#define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz))
-#define PAD_TO_BLOCKSIZE(size, block_dev_desc) \
-	(PAD_SIZE(size, block_dev_desc->blksz))
+#define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
+#define PAD_TO_BLOCKSIZE(size, blk_desc) \
+	(PAD_SIZE(size, blk_desc->blksz))
 #define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \
 		 ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \
 		 ((x & 0xffff0000) ? 16 : 0))
@@ -101,52 +101,53 @@ typedef struct disk_partition {
 
 /* Misc _get_dev functions */
 #ifdef CONFIG_PARTITIONS
-block_dev_desc_t *get_dev(const char *ifname, int dev);
-block_dev_desc_t* ide_get_dev(int dev);
-block_dev_desc_t* sata_get_dev(int dev);
-block_dev_desc_t* scsi_get_dev(int dev);
-block_dev_desc_t* usb_stor_get_dev(int dev);
-block_dev_desc_t* mmc_get_dev(int dev);
+struct blk_desc *get_dev(const char *ifname, int dev);
+struct blk_desc *ide_get_dev(int dev);
+struct blk_desc *sata_get_dev(int dev);
+struct blk_desc *scsi_get_dev(int dev);
+struct blk_desc *usb_stor_get_dev(int dev);
+struct blk_desc *mmc_get_dev(int dev);
 int mmc_select_hwpart(int dev_num, int hwpart);
-block_dev_desc_t* systemace_get_dev(int dev);
-block_dev_desc_t* mg_disk_get_dev(int dev);
-block_dev_desc_t *host_get_dev(int dev);
-int host_get_dev_err(int dev, block_dev_desc_t **blk_devp);
+struct blk_desc *systemace_get_dev(int dev);
+struct blk_desc *mg_disk_get_dev(int dev);
+struct blk_desc *host_get_dev(int dev);
+int host_get_dev_err(int dev, struct blk_desc **blk_devp);
 
 /* disk/part.c */
-int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
-void print_part (block_dev_desc_t *dev_desc);
-void  init_part (block_dev_desc_t *dev_desc);
-void dev_print(block_dev_desc_t *dev_desc);
+int get_partition_info(struct blk_desc *dev_desc, int part,
+		       disk_partition_t *info);
+void print_part(struct blk_desc *dev_desc);
+void init_part(struct blk_desc *dev_desc);
+void dev_print(struct blk_desc *dev_desc);
 int get_device(const char *ifname, const char *dev_str,
-	       block_dev_desc_t **dev_desc);
+	       struct blk_desc **dev_desc);
 int get_device_and_partition(const char *ifname, const char *dev_part_str,
-			     block_dev_desc_t **dev_desc,
+			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev);
 #else
-static inline block_dev_desc_t *get_dev(const char *ifname, int dev)
+static inline struct blk_desc *get_dev(const char *ifname, int dev)
 { return NULL; }
-static inline block_dev_desc_t* ide_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t* sata_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t* scsi_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *ide_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *sata_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *scsi_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *usb_stor_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *mmc_get_dev(int dev) { return NULL; }
 static inline int mmc_select_hwpart(int dev_num, int hwpart) { return -1; }
-static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; }
-static inline block_dev_desc_t *host_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *systemace_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *mg_disk_get_dev(int dev) { return NULL; }
+static inline struct blk_desc *host_get_dev(int dev) { return NULL; }
 
-static inline int get_partition_info (block_dev_desc_t * dev_desc, int part,
-	disk_partition_t *info) { return -1; }
-static inline void print_part (block_dev_desc_t *dev_desc) {}
-static inline void  init_part (block_dev_desc_t *dev_desc) {}
-static inline void dev_print(block_dev_desc_t *dev_desc) {}
+static inline int get_partition_info(struct blk_desc *dev_desc, int part,
+				     disk_partition_t *info) { return -1; }
+static inline void print_part(struct blk_desc *dev_desc) {}
+static inline void init_part(struct blk_desc *dev_desc) {}
+static inline void dev_print(struct blk_desc *dev_desc) {}
 static inline int get_device(const char *ifname, const char *dev_str,
-	       block_dev_desc_t **dev_desc)
+			     struct blk_desc **dev_desc)
 { return -1; }
 static inline int get_device_and_partition(const char *ifname,
 					   const char *dev_part_str,
-					   block_dev_desc_t **dev_desc,
+					   struct blk_desc **dev_desc,
 					   disk_partition_t *info,
 					   int allow_whole_dev)
 { *dev_desc = NULL; return -1; }
@@ -154,36 +155,41 @@ static inline int get_device_and_partition(const char *ifname,
 
 #ifdef CONFIG_MAC_PARTITION
 /* disk/part_mac.c */
-int get_partition_info_mac (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
-void print_part_mac (block_dev_desc_t *dev_desc);
-int   test_part_mac (block_dev_desc_t *dev_desc);
+int get_partition_info_mac(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info);
+void print_part_mac(struct blk_desc *dev_desc);
+int test_part_mac(struct blk_desc *dev_desc);
 #endif
 
 #ifdef CONFIG_DOS_PARTITION
 /* disk/part_dos.c */
-int get_partition_info_dos (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
-void print_part_dos (block_dev_desc_t *dev_desc);
-int   test_part_dos (block_dev_desc_t *dev_desc);
+int get_partition_info_dos(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info);
+void print_part_dos(struct blk_desc *dev_desc);
+int test_part_dos(struct blk_desc *dev_desc);
 #endif
 
 #ifdef CONFIG_ISO_PARTITION
 /* disk/part_iso.c */
-int get_partition_info_iso (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
-void print_part_iso (block_dev_desc_t *dev_desc);
-int   test_part_iso (block_dev_desc_t *dev_desc);
+int get_partition_info_iso(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info);
+void print_part_iso(struct blk_desc *dev_desc);
+int test_part_iso(struct blk_desc *dev_desc);
 #endif
 
 #ifdef CONFIG_AMIGA_PARTITION
 /* disk/part_amiga.c */
-int get_partition_info_amiga (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
-void print_part_amiga (block_dev_desc_t *dev_desc);
-int   test_part_amiga (block_dev_desc_t *dev_desc);
+int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
+			     disk_partition_t *info);
+void print_part_amiga(struct blk_desc *dev_desc);
+int test_part_amiga(struct blk_desc *dev_desc);
 #endif
 
 #ifdef CONFIG_EFI_PARTITION
 #include <part_efi.h>
 /* disk/part_efi.c */
-int get_partition_info_efi (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
+int get_partition_info_efi(struct blk_desc *dev_desc, int part,
+			   disk_partition_t *info);
 /**
  * get_partition_info_efi_by_name() - Find the specified GPT partition table entry
  *
@@ -193,10 +199,10 @@ int get_partition_info_efi (block_dev_desc_t * dev_desc, int part, disk_partitio
  *
  * @return - '0' on match, '-1' on no match, otherwise error
  */
-int get_partition_info_efi_by_name(block_dev_desc_t *dev_desc,
+int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
 	const char *name, disk_partition_t *info);
-void print_part_efi (block_dev_desc_t *dev_desc);
-int   test_part_efi (block_dev_desc_t *dev_desc);
+void print_part_efi(struct blk_desc *dev_desc);
+int test_part_efi(struct blk_desc *dev_desc);
 
 /**
  * write_gpt_table() - Write the GUID Partition Table to disk
@@ -207,7 +213,7 @@ int   test_part_efi (block_dev_desc_t *dev_desc);
  *
  * @return - zero on success, otherwise error
  */
-int write_gpt_table(block_dev_desc_t *dev_desc,
+int write_gpt_table(struct blk_desc *dev_desc,
 		  gpt_header *gpt_h, gpt_entry *gpt_e);
 
 /**
@@ -233,7 +239,7 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
  *
  * @return - error on str_guid conversion error
  */
-int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
+int gpt_fill_header(struct blk_desc *dev_desc, gpt_header *gpt_h,
 		char *str_guid, int parts_count);
 
 /**
@@ -246,7 +252,7 @@ int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
  *
  * @return zero on success
  */
-int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
+int gpt_restore(struct blk_desc *dev_desc, char *str_disk_guid,
 		disk_partition_t *partitions, const int parts_count);
 
 /**
@@ -257,7 +263,7 @@ int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
  *
  * @return - '0' on success, otherwise error
  */
-int is_valid_gpt_buf(block_dev_desc_t *dev_desc, void *buf);
+int is_valid_gpt_buf(struct blk_desc *dev_desc, void *buf);
 
 /**
  * write_mbr_and_gpt_partitions() - write MBR, Primary GPT and Backup GPT
@@ -267,7 +273,7 @@ int is_valid_gpt_buf(block_dev_desc_t *dev_desc, void *buf);
  *
  * @return - '0' on success, otherwise error
  */
-int write_mbr_and_gpt_partitions(block_dev_desc_t *dev_desc, void *buf);
+int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf);
 
 /**
  * gpt_verify_headers() - Function to read and CRC32 check of the GPT's header
@@ -281,7 +287,7 @@ int write_mbr_and_gpt_partitions(block_dev_desc_t *dev_desc, void *buf);
  *
  * @return - '0' on success, otherwise error
  */
-int gpt_verify_headers(block_dev_desc_t *dev_desc, gpt_header *gpt_head,
+int gpt_verify_headers(struct blk_desc *dev_desc, gpt_header *gpt_head,
 		       gpt_entry **gpt_pte);
 
 /**
@@ -300,7 +306,7 @@ int gpt_verify_headers(block_dev_desc_t *dev_desc, gpt_header *gpt_head,
  *
  * @return - '0' on success, otherwise error
  */
-int gpt_verify_partitions(block_dev_desc_t *dev_desc,
+int gpt_verify_partitions(struct blk_desc *dev_desc,
 			  disk_partition_t *partitions, int parts,
 			  gpt_header *gpt_head, gpt_entry **gpt_pte);
 #endif
diff --git a/include/reiserfs.h b/include/reiserfs.h
index 2d14d48..ffe4e46 100644
--- a/include/reiserfs.h
+++ b/include/reiserfs.h
@@ -63,7 +63,7 @@ typedef enum
 } reiserfs_error_t;
 
 
-extern void reiserfs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
+void reiserfs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
 extern int reiserfs_ls (char *dirname);
 extern int reiserfs_open (char *filename);
 extern int reiserfs_read (char *buf, unsigned len);
diff --git a/include/sandboxblockdev.h b/include/sandboxblockdev.h
index 627787a..59f9519 100644
--- a/include/sandboxblockdev.h
+++ b/include/sandboxblockdev.h
@@ -8,7 +8,7 @@
 #define __SANDBOX_BLOCK_DEV__
 
 struct host_block_dev {
-	block_dev_desc_t blk_dev;
+	struct blk_desc blk_dev;
 	char *filename;
 	int fd;
 };
diff --git a/include/sandboxfs.h b/include/sandboxfs.h
index 4c7745d..6e6e3c6 100644
--- a/include/sandboxfs.h
+++ b/include/sandboxfs.h
@@ -18,7 +18,7 @@
 #ifndef __SANDBOX_FS__
 #define __SANDBOX_FS__
 
-int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
+int sandbox_fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
 
 int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer,
 		       loff_t maxsize, loff_t *actread);
diff --git a/include/sata.h b/include/sata.h
index fa61da8..b35359a 100644
--- a/include/sata.h
+++ b/include/sata.h
@@ -14,6 +14,6 @@ int sata_stop(void);
 int __sata_stop(void);
 int sata_port_status(int dev, int port);
 
-extern block_dev_desc_t sata_dev_desc[];
+extern struct blk_desc sata_dev_desc[];
 
 #endif
diff --git a/include/spl.h b/include/spl.h
index 92cdc04..c62887a 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -72,14 +72,16 @@ int spl_usb_load_image(void);
 int spl_sata_load_image(void);
 
 /* SPL FAT image functions */
-int spl_load_image_fat(block_dev_desc_t *block_dev, int partition, const char *filename);
-int spl_load_image_fat_os(block_dev_desc_t *block_dev, int partition);
+int spl_load_image_fat(struct blk_desc *block_dev, int partition,
+		       const char *filename);
+int spl_load_image_fat_os(struct blk_desc *block_dev, int partition);
 
 void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image);
 
 /* SPL EXT image functions */
-int spl_load_image_ext(block_dev_desc_t *block_dev, int partition, const char *filename);
-int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition);
+int spl_load_image_ext(struct blk_desc *block_dev, int partition,
+		       const char *filename);
+int spl_load_image_ext_os(struct blk_desc *block_dev, int partition);
 
 /**
  * spl_init() - Set up device tree and driver model in SPL if enabled
diff --git a/include/systemace.h b/include/systemace.h
index 3f342d5..3b6ec7d 100644
--- a/include/systemace.h
+++ b/include/systemace.h
@@ -11,7 +11,7 @@
 
 # include  <part.h>
 
-block_dev_desc_t *  systemace_get_dev(int dev);
+struct blk_desc *systemace_get_dev(int dev);
 
 #endif	/* CONFIG_SYSTEMACE */
 #endif	/* __SYSTEMACE_H */
diff --git a/include/ubifs_uboot.h b/include/ubifs_uboot.h
index dab433a..d86da27 100644
--- a/include/ubifs_uboot.h
+++ b/include/ubifs_uboot.h
@@ -21,7 +21,7 @@ void uboot_ubifs_umount(void);
 int ubifs_is_mounted(void);
 int ubifs_load(char *filename, u32 addr, u32 size);
 
-int ubifs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
+int ubifs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
 int ubifs_ls(const char *dir_name);
 int ubifs_exists(const char *filename);
 int ubifs_size(const char *filename, loff_t *size);
diff --git a/include/usb.h b/include/usb.h
index 0b410b6..c2fa684 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -228,7 +228,7 @@ int board_usb_cleanup(int index, enum usb_init_type init);
 #ifdef CONFIG_USB_STORAGE
 
 #define USB_MAX_STOR_DEV 7
-block_dev_desc_t *usb_stor_get_dev(int index);
+struct blk_desc *usb_stor_get_dev(int index);
 int usb_stor_scan(int mode);
 int usb_stor_info(void);
 
diff --git a/include/usb_mass_storage.h b/include/usb_mass_storage.h
index 5804b70..8229f62 100644
--- a/include/usb_mass_storage.h
+++ b/include/usb_mass_storage.h
@@ -23,7 +23,7 @@ struct ums {
 	unsigned int start_sector;
 	unsigned int num_sectors;
 	const char *name;
-	block_dev_desc_t block_dev;
+	struct blk_desc block_dev;
 };
 
 int fsg_init(struct ums *ums_devs, int count);
diff --git a/include/zfs_common.h b/include/zfs_common.h
index 3bd575e..bca3dff 100644
--- a/include/zfs_common.h
+++ b/include/zfs_common.h
@@ -63,7 +63,7 @@ enum zfs_errors {
 struct zfs_filesystem {
 
 	/* Block Device Descriptor */
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 };
 
 struct device_s {
@@ -98,7 +98,7 @@ int zfs_close(zfs_file_t);
 int zfs_ls(device_t dev, const char *path,
 		   int (*hook) (const char *, const struct zfs_dirhook_info *));
 int zfs_devread(int sector, int byte_offset, int byte_len, char *buf);
-void zfs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
+void zfs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
 void zfs_unmount(struct zfs_data *data);
 int lzjb_decompress(void *, void *, uint32_t, uint32_t);
 #endif
diff --git a/lib/gunzip.c b/lib/gunzip.c
index da0c76c..6d65ccc 100644
--- a/lib/gunzip.c
+++ b/lib/gunzip.c
@@ -105,7 +105,7 @@ void gzwrite_progress_finish(int returnval,
 }
 
 int gzwrite(unsigned char *src, int len,
-	    struct block_dev_desc *dev,
+	    struct blk_desc *dev,
 	    unsigned long szwritebuf,
 	    u64 startoffs,
 	    u64 szexpected)
diff --git a/test/dm/usb.c b/test/dm/usb.c
index 3a2e52b..25cde68 100644
--- a/test/dm/usb.c
+++ b/test/dm/usb.c
@@ -39,7 +39,7 @@ DM_TEST(dm_test_usb_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
 static int dm_test_usb_flash(struct unit_test_state *uts)
 {
 	struct udevice *dev;
-	block_dev_desc_t *dev_desc;
+	struct blk_desc *dev_desc;
 	char cmp[1024];
 
 	state_set_skip_delays(true);
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:09   ` Bin Meng
  2016-02-17  0:19   ` Stephen Warren
  2016-02-15  2:16 ` [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning Simon Glass
                   ` (29 subsequent siblings)
  31 siblings, 2 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Each region is displayed in almost the same way. Break out this common code
into its own function.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/pci/pci_auto_common.c | 51 +++++++++++++++----------------------------
 1 file changed, 17 insertions(+), 34 deletions(-)

diff --git a/drivers/pci/pci_auto_common.c b/drivers/pci/pci_auto_common.c
index 85c419e..a5c16b9 100644
--- a/drivers/pci/pci_auto_common.c
+++ b/drivers/pci/pci_auto_common.c
@@ -62,6 +62,17 @@ int pciauto_region_allocate(struct pci_region *res, pci_size_t size,
 	return -1;
 }
 
+static void pciauto_show_region(const char *name, struct pci_region *region)
+{
+	pciauto_region_init(region);
+	debug("PCI Autoconfig: Bus %s region: [0x%llx-0x%llx],\n"
+	      "\t\tPhysical Memory [%llx-%llxx]\n", name,
+	      (unsigned long long)region->bus_start,
+	      (unsigned long long)(region->bus_start + region->size - 1),
+	      (unsigned long long)region->phys_start,
+	      (unsigned long long)(region->phys_start + region->size - 1));
+}
+
 void pciauto_config_init(struct pci_controller *hose)
 {
 	int i;
@@ -91,38 +102,10 @@ void pciauto_config_init(struct pci_controller *hose)
 	}
 
 
-	if (hose->pci_mem) {
-		pciauto_region_init(hose->pci_mem);
-
-		debug("PCI Autoconfig: Bus Memory region: [0x%llx-0x%llx],\n"
-		       "\t\tPhysical Memory [%llx-%llxx]\n",
-		    (u64)hose->pci_mem->bus_start,
-		    (u64)(hose->pci_mem->bus_start + hose->pci_mem->size - 1),
-		    (u64)hose->pci_mem->phys_start,
-		    (u64)(hose->pci_mem->phys_start + hose->pci_mem->size - 1));
-	}
-
-	if (hose->pci_prefetch) {
-		pciauto_region_init(hose->pci_prefetch);
-
-		debug("PCI Autoconfig: Bus Prefetchable Mem: [0x%llx-0x%llx],\n"
-		       "\t\tPhysical Memory [%llx-%llx]\n",
-		    (u64)hose->pci_prefetch->bus_start,
-		    (u64)(hose->pci_prefetch->bus_start +
-			    hose->pci_prefetch->size - 1),
-		    (u64)hose->pci_prefetch->phys_start,
-		    (u64)(hose->pci_prefetch->phys_start +
-			    hose->pci_prefetch->size - 1));
-	}
-
-	if (hose->pci_io) {
-		pciauto_region_init(hose->pci_io);
-
-		debug("PCI Autoconfig: Bus I/O region: [0x%llx-0x%llx],\n"
-		       "\t\tPhysical Memory: [%llx-%llx]\n",
-		    (u64)hose->pci_io->bus_start,
-		    (u64)(hose->pci_io->bus_start + hose->pci_io->size - 1),
-		    (u64)hose->pci_io->phys_start,
-		    (u64)(hose->pci_io->phys_start + hose->pci_io->size - 1));
-	}
+	if (hose->pci_mem)
+		pciauto_show_region("Memory", hose->pci_mem);
+	if (hose->pci_prefetch)
+		pciauto_show_region("Prefetchable Mem", hose->pci_mem);
+	if (hose->pci_io)
+		pciauto_show_region("I/O", hose->pci_io);
 }
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:09   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 04/30] dm: fdtdec: " Simon Glass
                   ` (28 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Adjust the cast to avoid a warning when stdint.h is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 disk/part_efi.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/disk/part_efi.c b/disk/part_efi.c
index db5e7ed..7bd840f 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -658,11 +658,13 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
 		gpt_part_size = le64_to_cpu(gpt_e[i].ending_lba) -
 			le64_to_cpu(gpt_e[i].starting_lba) + 1;
 		debug("size(LBA) - GPT: %8llu, ENV: %8llu ",
-		      gpt_part_size, (u64) partitions[i].size);
+		      (unsigned long long)gpt_part_size,
+		      (unsigned long long)partitions[i].size);
 
 		if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
 			error("Partition %s size: %llu does not match %llu!\n",
-			      efi_str, gpt_part_size, (u64) partitions[i].size);
+			      efi_str, (unsigned long long)gpt_part_size,
+			      (unsigned long long)partitions[i].size);
 			return -1;
 		}
 
@@ -678,12 +680,12 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
 		/* Check if GPT and ENV start LBAs match */
 		debug("start LBA - GPT: %8llu, ENV: %8llu\n",
 		      le64_to_cpu(gpt_e[i].starting_lba),
-		      (u64) partitions[i].start);
+		      (unsigned long long)partitions[i].start);
 
 		if (le64_to_cpu(gpt_e[i].starting_lba) != partitions[i].start) {
 			error("Partition %s start: %llu does not match %llu!\n",
 			      efi_str, le64_to_cpu(gpt_e[i].starting_lba),
-			      (u64) partitions[i].start);
+			      (unsigned long long)partitions[i].start);
 			return -1;
 		}
 	}
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 04/30] dm: fdtdec: Correct a sandbox build warning
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (2 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header Simon Glass
                   ` (27 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Adjust the cast to avoid a warning when stdint.h is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 lib/fdtdec.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 1b1ca02..d23f187 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -124,9 +124,10 @@ fdt_addr_t fdtdec_get_addr_size_fixed(const void *blob, int node,
 
 	if (sizep) {
 		*sizep = fdtdec_get_number(prop_size, ns);
-		debug("addr=%08llx, size=%llx\n", (u64)addr, (u64)*sizep);
+		debug("addr=%08llx, size=%llx\n", (unsigned long long)addr,
+		      (unsigned long long)*sizep);
 	} else {
-		debug("addr=%08llx\n", (u64)addr);
+		debug("addr=%08llx\n", (unsigned long long)addr);
 	}
 
 	return addr;
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (3 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 04/30] dm: fdtdec: " Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:09   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 06/30] dm: Add a new header for block devices Simon Glass
                   ` (26 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

We should not include <common.h> in header files. Each C file should include
it if needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/part.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/include/part.h b/include/part.h
index d1e9d0f..140c9b6 100644
--- a/include/part.h
+++ b/include/part.h
@@ -8,7 +8,6 @@
 #define _PART_H
 
 #include <ide.h>
-#include <common.h>
 
 struct blk_desc {
 	int		if_type;	/* type of the interface */
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 06/30] dm: Add a new header for block devices
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (4 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:10   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum Simon Glass
                   ` (25 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

At present block devices are tied up with partitions. But not all block
devices have partitions within them. They are in fact separate concepts.

Create a separate blk.h header file for block devices.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/blk.h  | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 include/ide.h  | 12 ++--------
 include/part.h | 49 +---------------------------------------
 3 files changed, 74 insertions(+), 58 deletions(-)
 create mode 100644 include/blk.h

diff --git a/include/blk.h b/include/blk.h
new file mode 100644
index 0000000..1e8334c
--- /dev/null
+++ b/include/blk.h
@@ -0,0 +1,71 @@
+/*
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef BLK_H
+#define BLK_H
+
+#ifdef CONFIG_SYS_64BIT_LBA
+typedef uint64_t lbaint_t;
+#define LBAFlength "ll"
+#else
+typedef ulong lbaint_t;
+#define LBAFlength "l"
+#endif
+#define LBAF "%" LBAFlength "x"
+#define LBAFU "%" LBAFlength "u"
+
+/* Interface types: */
+#define IF_TYPE_UNKNOWN		0
+#define IF_TYPE_IDE		1
+#define IF_TYPE_SCSI		2
+#define IF_TYPE_ATAPI		3
+#define IF_TYPE_USB		4
+#define IF_TYPE_DOC		5
+#define IF_TYPE_MMC		6
+#define IF_TYPE_SD		7
+#define IF_TYPE_SATA		8
+#define IF_TYPE_HOST		9
+#define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */
+
+struct blk_desc {
+	int		if_type;	/* type of the interface */
+	int		dev;		/* device number */
+	unsigned char	part_type;	/* partition type */
+	unsigned char	target;		/* target SCSI ID */
+	unsigned char	lun;		/* target LUN */
+	unsigned char	hwpart;		/* HW partition, e.g. for eMMC */
+	unsigned char	type;		/* device type */
+	unsigned char	removable;	/* removable device */
+#ifdef CONFIG_LBA48
+	/* device can use 48bit addr (ATA/ATAPI v7) */
+	unsigned char	lba48;
+#endif
+	lbaint_t	lba;		/* number of blocks */
+	unsigned long	blksz;		/* block size */
+	int		log2blksz;	/* for convenience: log2(blksz) */
+	char		vendor[40+1];	/* IDE model, SCSI Vendor */
+	char		product[20+1];	/* IDE Serial no, SCSI product */
+	char		revision[8+1];	/* firmware revision */
+	unsigned long	(*block_read)(struct blk_desc *block_dev,
+				      lbaint_t start,
+				      lbaint_t blkcnt,
+				      void *buffer);
+	unsigned long	(*block_write)(struct blk_desc *block_dev,
+				       lbaint_t start,
+				       lbaint_t blkcnt,
+				       const void *buffer);
+	unsigned long	(*block_erase)(struct blk_desc *block_dev,
+				       lbaint_t start,
+				       lbaint_t blkcnt);
+	void		*priv;		/* driver private struct pointer */
+};
+
+#define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
+#define PAD_TO_BLOCKSIZE(size, blk_desc) \
+	(PAD_SIZE(size, blk_desc->blksz))
+
+#endif
diff --git a/include/ide.h b/include/ide.h
index 2407393..a4e65cf 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -8,6 +8,8 @@
 #ifndef	_IDE_H
 #define _IDE_H
 
+#include <blk.h>
+
 #define IDE_BUS(dev)	(dev / (CONFIG_SYS_IDE_MAXDEVICE / CONFIG_SYS_IDE_MAXBUS))
 
 #define	ATA_CURR_BASE(dev)	(CONFIG_SYS_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)])
@@ -26,16 +28,6 @@ extern ulong ide_bus_offset[];
 void ide_led(uchar led, uchar status);
 #endif /* CONFIG_IDE_LED */
 
-#ifdef CONFIG_SYS_64BIT_LBA
-typedef uint64_t lbaint_t;
-#define LBAFlength "ll"
-#else
-typedef ulong lbaint_t;
-#define LBAFlength "l"
-#endif
-#define LBAF "%" LBAFlength "x"
-#define LBAFU "%" LBAFlength "u"
-
 /*
  * Function Prototypes
  */
diff --git a/include/part.h b/include/part.h
index 140c9b6..2599998 100644
--- a/include/part.h
+++ b/include/part.h
@@ -7,61 +7,14 @@
 #ifndef _PART_H
 #define _PART_H
 
+#include <blk.h>
 #include <ide.h>
 
-struct blk_desc {
-	int		if_type;	/* type of the interface */
-	int		dev;		/* device number */
-	unsigned char	part_type;	/* partition type */
-	unsigned char	target;		/* target SCSI ID */
-	unsigned char	lun;		/* target LUN */
-	unsigned char	hwpart;		/* HW partition, e.g. for eMMC */
-	unsigned char	type;		/* device type */
-	unsigned char	removable;	/* removable device */
-#ifdef CONFIG_LBA48
-	unsigned char	lba48;		/* device can use 48bit addr (ATA/ATAPI v7) */
-#endif
-	lbaint_t	lba;		/* number of blocks */
-	unsigned long	blksz;		/* block size */
-	int		log2blksz;	/* for convenience: log2(blksz) */
-	char		vendor [40+1];	/* IDE model, SCSI Vendor */
-	char		product[20+1];	/* IDE Serial no, SCSI product */
-	char		revision[8+1];	/* firmware revision */
-	unsigned long	(*block_read)(struct blk_desc *block_dev,
-				      lbaint_t start,
-				      lbaint_t blkcnt,
-				      void *buffer);
-	unsigned long	(*block_write)(struct blk_desc *block_dev,
-				       lbaint_t start,
-				       lbaint_t blkcnt,
-				       const void *buffer);
-	unsigned long	(*block_erase)(struct blk_desc *block_dev,
-				       lbaint_t start,
-				       lbaint_t blkcnt);
-	void		*priv;		/* driver private struct pointer */
-};
-
-#define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
-#define PAD_TO_BLOCKSIZE(size, blk_desc) \
-	(PAD_SIZE(size, blk_desc->blksz))
 #define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \
 		 ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \
 		 ((x & 0xffff0000) ? 16 : 0))
 #define LOG2_INVALID(type) ((type)((sizeof(type)<<3)-1))
 
-/* Interface types: */
-#define IF_TYPE_UNKNOWN		0
-#define IF_TYPE_IDE		1
-#define IF_TYPE_SCSI		2
-#define IF_TYPE_ATAPI		3
-#define IF_TYPE_USB		4
-#define IF_TYPE_DOC		5
-#define IF_TYPE_MMC		6
-#define IF_TYPE_SD		7
-#define IF_TYPE_SATA		8
-#define IF_TYPE_HOST		9
-#define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */
-
 /* Part types */
 #define PART_TYPE_UNKNOWN	0x00
 #define PART_TYPE_MAC		0x01
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (5 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 06/30] dm: Add a new header for block devices Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:10   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions Simon Glass
                   ` (24 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Since these are sequentially numbered it makes sense to use an enum. It
avoids having to maintain the maximum value, and provides a type we can use
if it useful.

In fact the maximum value is not used. Rename it to COUNT, since MAX suggests
it is the maximum valid value, but it is not.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/blk.h | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/include/blk.h b/include/blk.h
index 1e8334c..9ba7a62 100644
--- a/include/blk.h
+++ b/include/blk.h
@@ -19,20 +19,23 @@ typedef ulong lbaint_t;
 #define LBAFU "%" LBAFlength "u"
 
 /* Interface types: */
-#define IF_TYPE_UNKNOWN		0
-#define IF_TYPE_IDE		1
-#define IF_TYPE_SCSI		2
-#define IF_TYPE_ATAPI		3
-#define IF_TYPE_USB		4
-#define IF_TYPE_DOC		5
-#define IF_TYPE_MMC		6
-#define IF_TYPE_SD		7
-#define IF_TYPE_SATA		8
-#define IF_TYPE_HOST		9
-#define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */
+enum if_type_t {
+	IF_TYPE_UNKNOWN = 0,
+	IF_TYPE_IDE,
+	IF_TYPE_SCSI,
+	IF_TYPE_ATAPI,
+	IF_TYPE_USB,
+	IF_TYPE_DOC,
+	IF_TYPE_MMC,
+	IF_TYPE_SD,
+	IF_TYPE_SATA,
+	IF_TYPE_HOST,
+
+	IF_TYPE_COUNT,			/* Number of interface types */
+};
 
 struct blk_desc {
-	int		if_type;	/* type of the interface */
+	enum if_type_t	if_type;	/* type of the interface */
 	int		dev;		/* device number */
 	unsigned char	part_type;	/* partition type */
 	unsigned char	target;		/* target SCSI ID */
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (6 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:10   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev() Simon Glass
                   ` (23 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The block interface is not well documented in the code. Pick two important
functions and add comments.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/part.h | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/include/part.h b/include/part.h
index 2599998..4e70d8d 100644
--- a/include/part.h
+++ b/include/part.h
@@ -53,12 +53,42 @@ typedef struct disk_partition {
 
 /* Misc _get_dev functions */
 #ifdef CONFIG_PARTITIONS
+/**
+ * get_dev() - get a pointer to a block device given its type and number
+ *
+ * Each interface allocates its own devices and typically struct blk_desc is
+ * contained with the interface's data structure. There is no global
+ * numbering for block devices, so the interface name must be provided.
+ *
+ * @ifname:	Interface name (e.g. "ide", "scsi")
+ * @dev:	Device number (0 for first device on that interface, 1 for
+ *		second, etc.
+ * @return pointer to the block device, or NULL if not available, or an
+ *	   error occurred.
+ */
 struct blk_desc *get_dev(const char *ifname, int dev);
 struct blk_desc *ide_get_dev(int dev);
 struct blk_desc *sata_get_dev(int dev);
 struct blk_desc *scsi_get_dev(int dev);
 struct blk_desc *usb_stor_get_dev(int dev);
 struct blk_desc *mmc_get_dev(int dev);
+
+/**
+ * mmc_select_hwpart() - Select the MMC hardware partiion on an MMC device
+ *
+ * MMC devices can support partitioning at the hardware level. This is quite
+ * separate from the normal idea of software-based partitions. MMC hardware
+ * partitions must be explicitly selected. Once selected only the region of
+ * the device covered by that partition is accessible.
+ *
+ * The MMC standard provides for two boot partitions (numbered 1 and 2),
+ * rpmb (3), and up to 4 addition general-purpose partitions (4-7).
+ *
+ * @dev_num:	Block device number (struct blk_desc->dev value)
+ * @hwpart:	Hardware partition number to select. 0 means the raw device,
+ *		1 is the first partition, 2 is the second, etc.
+ * @return 0 if OK, other value for an error
+ */
 int mmc_select_hwpart(int dev_num, int hwpart);
 struct blk_desc *systemace_get_dev(int dev);
 struct blk_desc *mg_disk_get_dev(int dev);
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev()
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (7 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 10:10   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str() Simon Glass
                   ` (22 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The current name is too generic. Add a 'blk_' prefix to aid searching and
make its purpose clearer.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 api/api_storage.c | 12 +++++++-----
 cmd/gpt.c         |  2 +-
 cmd/read.c        |  2 +-
 common/fb_mmc.c   |  4 ++--
 disk/part.c       |  4 ++--
 include/part.h    |  6 +++---
 6 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/api/api_storage.c b/api/api_storage.c
index 225a6cf..8c30c56 100644
--- a/api/api_storage.c
+++ b/api/api_storage.c
@@ -106,7 +106,7 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 	struct blk_desc *dd;
 
 	if (first) {
-		di->cookie = (void *)get_dev(specs[type].name, 0);
+		di->cookie = (void *)blk_get_dev(specs[type].name, 0);
 		if (di->cookie == NULL)
 			return 0;
 		else
@@ -119,7 +119,8 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 
 	} else {
 		for (i = 0; i < specs[type].max_dev; i++)
-			if (di->cookie == (void *)get_dev(specs[type].name, i)) {
+			if (di->cookie ==
+			    (void *)blk_get_dev(specs[type].name, i)) {
 				/* previous cookie found -- advance to the
 				 * next device, if possible */
 
@@ -129,7 +130,8 @@ static int dev_stor_get(int type, int first, int *more, struct device_info *di)
 					break;
 				}
 
-				di->cookie = (void *)get_dev(specs[type].name, i);
+				di->cookie = (void *)blk_get_dev(
+							specs[type].name, i);
 				if (di->cookie == NULL)
 					return 0;
 				else
@@ -174,7 +176,7 @@ static int dev_stor_type(struct blk_desc *dd)
 
 	for (i = ENUM_IDE; i < ENUM_MAX; i++)
 		for (j = 0; j < specs[i].max_dev; j++)
-			if (dd == get_dev(specs[i].name, j))
+			if (dd == blk_get_dev(specs[i].name, j))
 				return i;
 
 	return ENUM_MAX;
@@ -313,7 +315,7 @@ static int dev_stor_is_valid(int type, struct blk_desc *dd)
 	int i;
 
 	for (i = 0; i < specs[type].max_dev; i++)
-		if (dd == get_dev(specs[type].name, i))
+		if (dd == blk_get_dev(specs[type].name, i))
 			if (dd->type != DEV_TYPE_UNKNOWN)
 				return 1;
 
diff --git a/cmd/gpt.c b/cmd/gpt.c
index 881367c..8ffaef3 100644
--- a/cmd/gpt.c
+++ b/cmd/gpt.c
@@ -418,7 +418,7 @@ static int do_gpt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		printf("'%s' is not a number\n", argv[3]);
 		return CMD_RET_USAGE;
 	}
-	blk_dev_desc = get_dev(argv[2], dev);
+	blk_dev_desc = blk_get_dev(argv[2], dev);
 	if (!blk_dev_desc) {
 		printf("%s: %s dev %d NOT available\n",
 		       __func__, argv[2], dev);
diff --git a/cmd/read.c b/cmd/read.c
index 6a1e1d9..12ac1659 100644
--- a/cmd/read.c
+++ b/cmd/read.c
@@ -39,7 +39,7 @@ int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		part = (int)simple_strtoul(++ep, NULL, 16);
 	}
 
-	dev_desc = get_dev(argv[1], dev);
+	dev_desc = blk_get_dev(argv[1], dev);
 	if (dev_desc == NULL) {
 		printf("Block device %s %d not supported\n", argv[1], dev);
 		return 1;
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index fd43085..4324f58 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -106,7 +106,7 @@ void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
 	/* initialize the response buffer */
 	response_str = response;
 
-	dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
+	dev_desc = blk_get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
 	if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
 		error("invalid mmc device\n");
 		fastboot_fail(response_str, "invalid mmc device");
@@ -179,7 +179,7 @@ void fb_mmc_erase(const char *cmd, char *response)
 	/* initialize the response buffer */
 	response_str = response;
 
-	dev_desc = get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
+	dev_desc = blk_get_dev("mmc", CONFIG_FASTBOOT_FLASH_MMC_DEV);
 	if (!dev_desc || dev_desc->type == DEV_TYPE_UNKNOWN) {
 		error("invalid mmc device");
 		fastboot_fail(response_str, "invalid mmc device");
diff --git a/disk/part.c b/disk/part.c
index 7f98d89..2466c3e 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -101,7 +101,7 @@ static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 	return NULL;
 }
 
-struct blk_desc *get_dev(const char *ifname, int dev)
+struct blk_desc *blk_get_dev(const char *ifname, int dev)
 {
 	return get_dev_hwpart(ifname, dev, 0);
 }
@@ -111,7 +111,7 @@ struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 	return NULL;
 }
 
-struct blk_desc *get_dev(const char *ifname, int dev)
+struct blk_desc *blk_get_dev(const char *ifname, int dev)
 {
 	return NULL;
 }
diff --git a/include/part.h b/include/part.h
index 4e70d8d..ddc4422 100644
--- a/include/part.h
+++ b/include/part.h
@@ -54,7 +54,7 @@ typedef struct disk_partition {
 /* Misc _get_dev functions */
 #ifdef CONFIG_PARTITIONS
 /**
- * get_dev() - get a pointer to a block device given its type and number
+ * blk_get_dev() - get a pointer to a block device given its type and number
  *
  * Each interface allocates its own devices and typically struct blk_desc is
  * contained with the interface's data structure. There is no global
@@ -66,7 +66,7 @@ typedef struct disk_partition {
  * @return pointer to the block device, or NULL if not available, or an
  *	   error occurred.
  */
-struct blk_desc *get_dev(const char *ifname, int dev);
+struct blk_desc *blk_get_dev(const char *ifname, int dev);
 struct blk_desc *ide_get_dev(int dev);
 struct blk_desc *sata_get_dev(int dev);
 struct blk_desc *scsi_get_dev(int dev);
@@ -107,7 +107,7 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str,
 			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev);
 #else
-static inline struct blk_desc *get_dev(const char *ifname, int dev)
+static inline struct blk_desc *blk_get_dev(const char *ifname, int dev)
 { return NULL; }
 static inline struct blk_desc *ide_get_dev(int dev) { return NULL; }
 static inline struct blk_desc *sata_get_dev(int dev) { return NULL; }
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str()
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (8 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev() Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:02   ` Bin Meng
  2016-02-16 23:14   ` Stephen Warren
  2016-02-15  2:16 ` [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition() Simon Glass
                   ` (21 subsequent siblings)
  31 siblings, 2 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The current name is too generic. The function returns a block device based
on a provided string. Rename it to aid searching and make its purpose
clearer. Also add a few comments.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 cmd/part.c             |  6 +++---
 cmd/unzip.c            |  2 +-
 cmd/usb_mass_storage.c |  2 +-
 disk/part.c            |  6 +++---
 include/part.h         | 34 ++++++++++++++++++++++++++++++----
 test/dm/usb.c          |  2 +-
 6 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/cmd/part.c b/cmd/part.c
index a572aab..f05699d 100644
--- a/cmd/part.c
+++ b/cmd/part.c
@@ -81,7 +81,7 @@ static int do_part_list(int argc, char * const argv[])
 			return CMD_RET_USAGE;
 	}
 
-	ret = get_device(argv[0], argv[1], &desc);
+	ret = blk_get_device_str(argv[0], argv[1], &desc);
 	if (ret < 0)
 		return 1;
 
@@ -128,7 +128,7 @@ static int do_part_start(int argc, char * const argv[])
 
 	part = simple_strtoul(argv[2], NULL, 0);
 
-	ret = get_device(argv[0], argv[1], &desc);
+	ret = blk_get_device_str(argv[0], argv[1], &desc);
 	if (ret < 0)
 		return 1;
 
@@ -162,7 +162,7 @@ static int do_part_size(int argc, char * const argv[])
 
 	part = simple_strtoul(argv[2], NULL, 0);
 
-	ret = get_device(argv[0], argv[1], &desc);
+	ret = blk_get_device_str(argv[0], argv[1], &desc);
 	if (ret < 0)
 		return 1;
 
diff --git a/cmd/unzip.c b/cmd/unzip.c
index 5be1566..588fa75 100644
--- a/cmd/unzip.c
+++ b/cmd/unzip.c
@@ -53,7 +53,7 @@ static int do_gzwrite(cmd_tbl_t *cmdtp, int flag,
 
 	if (argc < 5)
 		return CMD_RET_USAGE;
-	ret = get_device(argv[1], argv[2], &bdev);
+	ret = blk_get_device_str(argv[1], argv[2], &bdev);
 	if (ret < 0)
 		return CMD_RET_FAILURE;
 
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index 03b7e21..fcac389 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -69,7 +69,7 @@ static int ums_init(const char *devtype, const char *devnums)
 		if (!devnum)
 			break;
 
-		ret = get_device(devtype, devnum, &block_dev);
+		ret = blk_get_device_str(devtype, devnum, &block_dev);
 		if (ret < 0)
 			goto cleanup;
 
diff --git a/disk/part.c b/disk/part.c
index 2466c3e..700e505 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -449,8 +449,8 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
 	return -1;
 }
 
-int get_device(const char *ifname, const char *dev_hwpart_str,
-	       struct blk_desc **dev_desc)
+int blk_get_device_str(const char *ifname, const char *dev_hwpart_str,
+		       struct blk_desc **dev_desc)
 {
 	char *ep;
 	char *dup_str = NULL;
@@ -598,7 +598,7 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str,
 	}
 
 	/* Look up the device */
-	dev = get_device(ifname, dev_str, dev_desc);
+	dev = blk_get_device_str(ifname, dev_str, dev_desc);
 	if (dev < 0)
 		goto cleanup;
 
diff --git a/include/part.h b/include/part.h
index ddc4422..d05b48b 100644
--- a/include/part.h
+++ b/include/part.h
@@ -101,8 +101,34 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
 void print_part(struct blk_desc *dev_desc);
 void init_part(struct blk_desc *dev_desc);
 void dev_print(struct blk_desc *dev_desc);
-int get_device(const char *ifname, const char *dev_str,
-	       struct blk_desc **dev_desc);
+
+/**
+ * blk_get_device_str() - Get a block device given its interface/ hw partition
+ *
+ * Each interface allocates its own devices and typically struct blk_desc is
+ * contained with the interface's data structure. There is no global
+ * numbering for block devices, so the interface name must be provided.
+ *
+ * The hardware parition is not related to the normal software partitioning
+ * of a device - each hardware partition is effectively a separately
+ * accessible block device. When a hardware parition is selected on MMC the
+ * other hardware partitions become inaccessible. The same block device is
+ * used to access all hardware partitions, but its capacity may change when a
+ * different hardware partition is selected.
+ *
+ * When a hardware partition number is given, the block device switches to
+ * that hardware partition.
+ *
+ * @ifname:	Interface name (e.g. "ide", "scsi")
+ * @dev_str:	Device and optional hw partition. This can either be a string
+ *		containing the device number (e.g. "2") or the device number
+ *		and hardware partition number (e.g. "2.4") for devices that
+ *		support it (currently only MMC).
+ * @dev_desc:	Returns a pointer to the block device on success
+ * @return block device number (local to the interface), or -1 on error
+ */
+int blk_get_device_str(const char *ifname, const char *dev_str,
+		       struct blk_desc **dev_desc);
 int get_device_and_partition(const char *ifname, const char *dev_part_str,
 			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev);
@@ -124,8 +150,8 @@ static inline int get_partition_info(struct blk_desc *dev_desc, int part,
 static inline void print_part(struct blk_desc *dev_desc) {}
 static inline void init_part(struct blk_desc *dev_desc) {}
 static inline void dev_print(struct blk_desc *dev_desc) {}
-static inline int get_device(const char *ifname, const char *dev_str,
-			     struct blk_desc **dev_desc)
+static inline int blk_get_device_str(const char *ifname, const char *dev_str,
+				     struct blk_desc **dev_desc)
 { return -1; }
 static inline int get_device_and_partition(const char *ifname,
 					   const char *dev_part_str,
diff --git a/test/dm/usb.c b/test/dm/usb.c
index 25cde68..1df25b1 100644
--- a/test/dm/usb.c
+++ b/test/dm/usb.c
@@ -45,7 +45,7 @@ static int dm_test_usb_flash(struct unit_test_state *uts)
 	state_set_skip_delays(true);
 	ut_assertok(usb_init());
 	ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &dev));
-	ut_assertok(get_device("usb", "0", &dev_desc));
+	ut_assertok(blk_get_device_str("usb", "0", &dev_desc));
 
 	/* Read a few blocks and look for the string we expect */
 	ut_asserteq(512, dev_desc->blksz);
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition()
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (9 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str() Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:02   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning Simon Glass
                   ` (20 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Rename this function to blk_get_device_part_str(). This is a better name
because it makes it clear that the function returns a block device and
parses a string.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 cmd/disk.c       |  2 +-
 cmd/fat.c        |  4 ++--
 cmd/part.c       |  2 +-
 cmd/reiser.c     |  4 ++--
 cmd/zfs.c        |  4 ++--
 common/env_fat.c |  4 ++--
 disk/part.c      |  2 +-
 fs/fs.c          |  2 +-
 fs/ubifs/ubifs.c |  2 +-
 include/part.h   | 38 ++++++++++++++++++++++++++++++++++++--
 10 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/cmd/disk.c b/cmd/disk.c
index c53c2a2..0883c79 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -38,7 +38,7 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
 
 	bootstage_mark(BOOTSTAGE_ID_IDE_BOOT_DEVICE);
 
-	part = get_device_and_partition(intf, (argc == 3) ? argv[2] : NULL,
+	part = blk_get_device_part_str(intf, (argc == 3) ? argv[2] : NULL,
 					&dev_desc, &info, 1);
 	if (part < 0) {
 		bootstage_error(BOOTSTAGE_ID_IDE_TYPE);
diff --git a/cmd/fat.c b/cmd/fat.c
index 82b9b38..18a1be9 100644
--- a/cmd/fat.c
+++ b/cmd/fat.c
@@ -77,7 +77,7 @@ static int do_fat_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc,
 		return 0;
 	}
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
@@ -114,7 +114,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,
 	if (argc < 5)
 		return cmd_usage(cmdtp);
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
diff --git a/cmd/part.c b/cmd/part.c
index f05699d..6683ed5 100644
--- a/cmd/part.c
+++ b/cmd/part.c
@@ -37,7 +37,7 @@ static int do_part_uuid(int argc, char * const argv[])
 	if (argc > 3)
 		return CMD_RET_USAGE;
 
-	part = get_device_and_partition(argv[0], argv[1], &dev_desc, &info, 0);
+	part = blk_get_device_part_str(argv[0], argv[1], &dev_desc, &info, 0);
 	if (part < 0)
 		return 1;
 
diff --git a/cmd/reiser.c b/cmd/reiser.c
index 1cca5eb..a717956 100644
--- a/cmd/reiser.c
+++ b/cmd/reiser.c
@@ -40,7 +40,7 @@ int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
@@ -122,7 +122,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return 1;
 	}
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
diff --git a/cmd/zfs.c b/cmd/zfs.c
index 9076a8a..bb61afd 100644
--- a/cmd/zfs.c
+++ b/cmd/zfs.c
@@ -80,7 +80,7 @@ static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
 		return 1;
 	}
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
@@ -145,7 +145,7 @@ static int do_zfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	if (argc == 4)
 		filename = argv[3];
 
-	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+	part = blk_get_device_part_str(argv[1], argv[2], &dev_desc, &info, 1);
 	if (part < 0)
 		return 1;
 
diff --git a/common/env_fat.c b/common/env_fat.c
index e88279e..2f22710 100644
--- a/common/env_fat.c
+++ b/common/env_fat.c
@@ -48,7 +48,7 @@ int saveenv(void)
 	if (err)
 		return err;
 
-	part = get_device_and_partition(FAT_ENV_INTERFACE,
+	part = blk_get_device_part_str(FAT_ENV_INTERFACE,
 					FAT_ENV_DEVICE_AND_PART,
 					&dev_desc, &info, 1);
 	if (part < 0)
@@ -82,7 +82,7 @@ void env_relocate_spec(void)
 	int dev, part;
 	int err;
 
-	part = get_device_and_partition(FAT_ENV_INTERFACE,
+	part = blk_get_device_part_str(FAT_ENV_INTERFACE,
 					FAT_ENV_DEVICE_AND_PART,
 					&dev_desc, &info, 1);
 	if (part < 0)
diff --git a/disk/part.c b/disk/part.c
index 700e505..43a640f 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -511,7 +511,7 @@ cleanup:
 #define PART_UNSPECIFIED -2
 #define PART_AUTO -1
 #define MAX_SEARCH_PARTITIONS 16
-int get_device_and_partition(const char *ifname, const char *dev_part_str,
+int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev)
 {
diff --git a/fs/fs.c b/fs/fs.c
index 8515bea..595ff1f 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -213,7 +213,7 @@ int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
 	}
 #endif
 
-	part = get_device_and_partition(ifname, dev_part_str, &fs_dev_desc,
+	part = blk_get_device_part_str(ifname, dev_part_str, &fs_dev_desc,
 					&fs_partition, 1);
 	if (part < 0)
 		return -1;
diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c
index 168ae2b..cdc04c6 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -569,7 +569,7 @@ int ubifs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info)
 	}
 
 	/*
-	 * Should never happen since get_device_and_partition() already checks
+	 * Should never happen since blk_get_device_part_str() already checks
 	 * this, but better safe then sorry.
 	 */
 	if (!ubifs_is_mounted()) {
diff --git a/include/part.h b/include/part.h
index d05b48b..465dcdd 100644
--- a/include/part.h
+++ b/include/part.h
@@ -129,7 +129,41 @@ void dev_print(struct blk_desc *dev_desc);
  */
 int blk_get_device_str(const char *ifname, const char *dev_str,
 		       struct blk_desc **dev_desc);
-int get_device_and_partition(const char *ifname, const char *dev_part_str,
+
+/**
+ * blk_get_device_part_str() - Get a block device and partition
+ *
+ * This calls blk_get_device_str() to look up a device. It also looks up
+ * a partition and returns information about it.
+ *
+ * @dev_part_str is in the format:
+ *	<dev>.<hw_part>:<part> where <dev> is the device number,
+ *	<hw_part> is the optional hardware partition number and
+ *	<part> is the partition number
+ *
+ * If ifname is "hostfs" then this function returns the sandbox host block
+ * device.
+ *
+ * If ifname is ubi, then this function returns 0, with @info set to a
+ * special UBI device.
+ *
+ * If @dev_part_str is NULL or empty or "-", then this function looks up
+ * the "bootdevice" environment variable and uses that string instead.
+ *
+ * If the partition string is empty then the first partition is used. If the
+ * partition string is "auto" then the first bootable partition is used.
+ *
+ * @ifname:	Interface name (e.g. "ide", "scsi")
+ * @dev_part_str:	Device and partition string
+ * @dev_desc:	Returns a pointer to the block device on success
+ * @info:	Returns partition information
+ * @allow_whole_dev:	true to allow the user to select partition 0
+ *		(which means the whole device), false to require a valid
+ *		partition number >= 1
+ * @return partition number, or -1 on error
+ *
+ */
+int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 			     struct blk_desc **dev_desc,
 			     disk_partition_t *info, int allow_whole_dev);
 #else
@@ -153,7 +187,7 @@ static inline void dev_print(struct blk_desc *dev_desc) {}
 static inline int blk_get_device_str(const char *ifname, const char *dev_str,
 				     struct blk_desc **dev_desc)
 { return -1; }
-static inline int get_device_and_partition(const char *ifname,
+static inline int blk_get_device_part_str(const char *ifname,
 					   const char *dev_part_str,
 					   struct blk_desc **dev_desc,
 					   disk_partition_t *info,
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (10 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition() Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:02   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types Simon Glass
                   ` (19 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

In part_amiga.c the name is unsigned by bcpl_strcpy() requires a signed
pointer. Add a cast to fix the warning.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 disk/part_amiga.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index 008941c..5702c95 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -304,7 +304,7 @@ int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
     info->start = g->low_cyl  * g->block_per_track * g->surfaces;
     info->size  = (g->high_cyl - g->low_cyl + 1) * g->block_per_track * g->surfaces - 1;
     info->blksz = rdb.block_bytes;
-    bcpl_strcpy(info->name, p->drive_name);
+    bcpl_strcpy((char *)info->name, p->drive_name);
 
 
     disk_type = g->dos_type;
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (11 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15 22:37   ` Tom Rini
  2016-02-16 14:02   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
                   ` (18 subsequent siblings)
  31 siblings, 2 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

It is useful to have sandbox build as much code as possible to avoid having
to build every board to detect build errors. Also we may add tests for some
more partition types at some point.

Enable all partition types in sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/configs/sandbox.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
index 4bffd8d..0f02839 100644
--- a/include/configs/sandbox.h
+++ b/include/configs/sandbox.h
@@ -53,8 +53,11 @@
 
 #define CONFIG_CMD_GPT
 #define CONFIG_PARTITION_UUIDS
-#define CONFIG_EFI_PARTITION
+#define CONFIG_MAC_PARTITION
 #define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+#define CONFIG_AMIGA_PARTITION
+#define CONFIG_EFI_PARTITION
 
 /*
  * Size of malloc() pool, before and after relocation
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (12 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15 22:37   ` Tom Rini
                     ` (2 more replies)
  2016-02-15  2:16 ` [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions Simon Glass
                   ` (17 subsequent siblings)
  31 siblings, 3 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

We can use linker lists instead of explicitly declaring each function.
This makes the code shorter by avoiding switch() statements and lots of
header file declarations.

While this does clean up the code it introduces a few code issues with SPL.
SPL never needs to print partition information since this all happens from
commands. SPL mostly doesn't need to obtain information about a partition
either, except in a few cases. Add these cases so that the code will be
dropped from each partition driver when not needed. This avoids code bloat.

I think this is still a win, since it is not a bad thing to be explicit
about which features are used in SPL. But others may like to weigh in.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 disk/part.c       | 184 +++++++++++++++++-------------------------------------
 disk/part_amiga.c |  16 +++--
 disk/part_dos.c   |   9 ++-
 disk/part_efi.c   |  10 ++-
 disk/part_iso.c   |  16 +++--
 disk/part_mac.c   |  16 +++--
 include/part.h    |  79 ++++++++++++++---------
 7 files changed, 157 insertions(+), 173 deletions(-)

diff --git a/disk/part.c b/disk/part.c
index 43a640f..e7d62f4 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -7,6 +7,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <errno.h>
 #include <ide.h>
 #include <malloc.h>
 #include <part.h>
@@ -58,6 +59,22 @@ static const struct block_drvr block_drvr[] = {
 DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef HAVE_BLOCK_DEVICE
+static struct part_driver *part_driver_lookup_type(int part_type)
+{
+	struct part_driver *drv =
+		ll_entry_start(struct part_driver, part_driver);
+	const int n_ents = ll_entry_count(struct part_driver, part_driver);
+	struct part_driver *entry;
+
+	for (entry = drv; entry != drv + n_ents; entry++) {
+		if (part_type == entry->part_type)
+			return entry;
+	}
+
+	/* Not found */
+	return NULL;
+}
+
 static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 {
 	const struct block_drvr *drvr = block_drvr;
@@ -252,53 +269,31 @@ void dev_print (struct blk_desc *dev_desc)
 
 void init_part(struct blk_desc *dev_desc)
 {
-#ifdef CONFIG_ISO_PARTITION
-	if (test_part_iso(dev_desc) == 0) {
-		dev_desc->part_type = PART_TYPE_ISO;
-		return;
-	}
-#endif
+	struct part_driver *drv =
+		ll_entry_start(struct part_driver, part_driver);
+	const int n_ents = ll_entry_count(struct part_driver, part_driver);
+	struct part_driver *entry;
 
-#ifdef CONFIG_MAC_PARTITION
-	if (test_part_mac(dev_desc) == 0) {
-		dev_desc->part_type = PART_TYPE_MAC;
-		return;
-	}
-#endif
-
-/* must be placed before DOS partition detection */
-#ifdef CONFIG_EFI_PARTITION
-	if (test_part_efi(dev_desc) == 0) {
-		dev_desc->part_type = PART_TYPE_EFI;
-		return;
-	}
-#endif
-
-#ifdef CONFIG_DOS_PARTITION
-	if (test_part_dos(dev_desc) == 0) {
-		dev_desc->part_type = PART_TYPE_DOS;
-		return;
-	}
-#endif
-
-#ifdef CONFIG_AMIGA_PARTITION
-	if (test_part_amiga(dev_desc) == 0) {
-	    dev_desc->part_type = PART_TYPE_AMIGA;
-	    return;
-	}
-#endif
 	dev_desc->part_type = PART_TYPE_UNKNOWN;
+	for (entry = drv; entry != drv + n_ents; entry++) {
+		int ret;
+
+		ret = entry->test(dev_desc);
+		debug("%s: try '%s': ret=%d\n", __func__, entry->name, ret);
+		if (!ret) {
+			dev_desc->part_type = entry->part_type;
+			break;
+		}
+	}
 }
 
-
+static void print_part_header(const char *type, struct blk_desc *dev_desc)
+{
 #if defined(CONFIG_MAC_PARTITION) || \
 	defined(CONFIG_DOS_PARTITION) || \
 	defined(CONFIG_ISO_PARTITION) || \
 	defined(CONFIG_AMIGA_PARTITION) || \
 	defined(CONFIG_EFI_PARTITION)
-
-static void print_part_header(const char *type, struct blk_desc *dev_desc)
-{
 	puts ("\nPartition Map for ");
 	switch (dev_desc->if_type) {
 	case IF_TYPE_IDE:
@@ -331,54 +326,24 @@ static void print_part_header(const char *type, struct blk_desc *dev_desc)
 	}
 	printf (" device %d  --   Partition Type: %s\n\n",
 			dev_desc->dev, type);
-}
-
 #endif /* any CONFIG_..._PARTITION */
+}
 
 void print_part(struct blk_desc *dev_desc)
 {
+	struct part_driver *drv;
 
-		switch (dev_desc->part_type) {
-#ifdef CONFIG_MAC_PARTITION
-	case PART_TYPE_MAC:
-		PRINTF ("## Testing for valid MAC partition ##\n");
-		print_part_header ("MAC", dev_desc);
-		print_part_mac (dev_desc);
-		return;
-#endif
-#ifdef CONFIG_DOS_PARTITION
-	case PART_TYPE_DOS:
-		PRINTF ("## Testing for valid DOS partition ##\n");
-		print_part_header ("DOS", dev_desc);
-		print_part_dos (dev_desc);
-		return;
-#endif
-
-#ifdef CONFIG_ISO_PARTITION
-	case PART_TYPE_ISO:
-		PRINTF ("## Testing for valid ISO Boot partition ##\n");
-		print_part_header ("ISO", dev_desc);
-		print_part_iso (dev_desc);
-		return;
-#endif
-
-#ifdef CONFIG_AMIGA_PARTITION
-	case PART_TYPE_AMIGA:
-	    PRINTF ("## Testing for a valid Amiga partition ##\n");
-	    print_part_header ("AMIGA", dev_desc);
-	    print_part_amiga (dev_desc);
-	    return;
-#endif
-
-#ifdef CONFIG_EFI_PARTITION
-	case PART_TYPE_EFI:
-		PRINTF ("## Testing for valid EFI partition ##\n");
-		print_part_header ("EFI", dev_desc);
-		print_part_efi (dev_desc);
+	drv = part_driver_lookup_type(dev_desc->part_type);
+	if (!drv) {
+		printf("## Unknown partition table type %x\n",
+		       dev_desc->part_type);
 		return;
-#endif
 	}
-	puts ("## Unknown partition table\n");
+
+	PRINTF("## Testing for valid %s partition ##\n", drv->name);
+	print_part_header(drv->name, dev_desc);
+	if (drv->print)
+		drv->print(dev_desc);
 }
 
 #endif /* HAVE_BLOCK_DEVICE */
@@ -387,6 +352,7 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
 		       disk_partition_t *info)
 {
 #ifdef HAVE_BLOCK_DEVICE
+	struct part_driver *drv;
 
 #ifdef CONFIG_PARTITION_UUIDS
 	/* The common case is no UUID support */
@@ -396,53 +362,19 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
 	info->type_guid[0] = 0;
 #endif
 
-	switch (dev_desc->part_type) {
-#ifdef CONFIG_MAC_PARTITION
-	case PART_TYPE_MAC:
-		if (get_partition_info_mac(dev_desc, part, info) == 0) {
-			PRINTF("## Valid MAC partition found ##\n");
-			return 0;
-		}
-		break;
-#endif
-
-#ifdef CONFIG_DOS_PARTITION
-	case PART_TYPE_DOS:
-		if (get_partition_info_dos(dev_desc, part, info) == 0) {
-			PRINTF("## Valid DOS partition found ##\n");
-			return 0;
-		}
-		break;
-#endif
-
-#ifdef CONFIG_ISO_PARTITION
-	case PART_TYPE_ISO:
-		if (get_partition_info_iso(dev_desc, part, info) == 0) {
-			PRINTF("## Valid ISO boot partition found ##\n");
-			return 0;
-		}
-		break;
-#endif
-
-#ifdef CONFIG_AMIGA_PARTITION
-	case PART_TYPE_AMIGA:
-		if (get_partition_info_amiga(dev_desc, part, info) == 0) {
-			PRINTF("## Valid Amiga partition found ##\n");
-			return 0;
-		}
-		break;
-#endif
-
-#ifdef CONFIG_EFI_PARTITION
-	case PART_TYPE_EFI:
-		if (get_partition_info_efi(dev_desc, part, info) == 0) {
-			PRINTF("## Valid EFI partition found ##\n");
-			return 0;
-		}
-		break;
-#endif
-	default:
-		break;
+	drv = part_driver_lookup_type(dev_desc->part_type);
+	if (!drv) {
+		debug("## Unknown partition table type %x\n",
+		      dev_desc->part_type);
+		return -EPROTONOSUPPORT;
+	}
+	if (!drv->get_info) {
+		PRINTF("## Driver %s does not have the get_info() method\n");
+		return -ENOSYS;
+	}
+	if (drv->get_info(dev_desc, part, info) == 0) {
+		PRINTF("## Valid %s partition found ##\n", drv->name);
+		return 0;
 	}
 #endif /* HAVE_BLOCK_DEVICE */
 
diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index 5702c95..0f569f0 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -207,7 +207,7 @@ struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
  * Test if the given partition has an Amiga partition table/Rigid
  * Disk block
  */
-int test_part_amiga(struct blk_desc *dev_desc)
+static int test_part_amiga(struct blk_desc *dev_desc)
 {
     struct rigid_disk_block *rdb;
     struct bootcode_block *bootcode;
@@ -291,8 +291,8 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
 /*
  * Get info about a partition
  */
-int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
-			     disk_partition_t *info)
+static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
+				    disk_partition_t *info)
 {
     struct partition_block *p = find_partition(dev_desc, part-1);
     struct amiga_part_geometry *g;
@@ -319,7 +319,7 @@ int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
     return 0;
 }
 
-void print_part_amiga(struct blk_desc *dev_desc)
+static void print_part_amiga(struct blk_desc *dev_desc)
 {
     struct rigid_disk_block *rdb;
     struct bootcode_block *boot;
@@ -379,4 +379,12 @@ void print_part_amiga(struct blk_desc *dev_desc)
     }
 }
 
+U_BOOT_PART_TYPE(amiga) = {
+	.name		= "AMIGA",
+	.part_type	= PART_TYPE_AMIGA,
+	.get_info	= get_partition_info_amiga,
+	.print		= print_part_amiga,
+	.test		= test_part_amiga,
+};
+
 #endif
diff --git a/disk/part_dos.c b/disk/part_dos.c
index ea0315c..7567ed3 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
 }
 
 
-int test_part_dos(struct blk_desc *dev_desc)
+static int test_part_dos(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 
@@ -295,5 +295,12 @@ int get_partition_info_dos(struct blk_desc *dev_desc, int part,
 	return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
 }
 
+U_BOOT_PART_TYPE(dos) = {
+	.name		= "DOS",
+	.part_type	= PART_TYPE_DOS,
+	.get_info	= part_get_info_ptr(get_partition_info_dos),
+	.print		= part_print_ptr(print_part_dos),
+	.test		= test_part_dos,
+};
 
 #endif
diff --git a/disk/part_efi.c b/disk/part_efi.c
index 7bd840f..6f80877 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -319,7 +319,7 @@ int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
 	return -2;
 }
 
-int test_part_efi(struct blk_desc *dev_desc)
+static int test_part_efi(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
 
@@ -953,4 +953,12 @@ static int is_pte_valid(gpt_entry * pte)
 		return 1;
 	}
 }
+
+U_BOOT_PART_TYPE(efi) = {
+	.name		= "EFI",
+	.part_type	= PART_TYPE_EFI,
+	.get_info	= part_get_info_ptr(get_partition_info_efi),
+	.print		= part_print_ptr(print_part_efi),
+	.test		= test_part_efi,
+};
 #endif
diff --git a/disk/part_iso.c b/disk/part_iso.c
index 2984df5..1d72d23 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -217,14 +217,13 @@ found:
 	return 0;
 }
 
-int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
-			   disk_partition_t *info)
+static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
+				  disk_partition_t *info)
 {
 	return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
 }
 
-
-void print_part_iso(struct blk_desc *dev_desc)
+static void print_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 	int i;
@@ -241,11 +240,18 @@ void print_part_iso(struct blk_desc *dev_desc)
 	} while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
 }
 
-int test_part_iso(struct blk_desc *dev_desc)
+static int test_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 
 	return(get_partition_info_iso_verb(dev_desc,0,&info,0));
 }
 
+U_BOOT_PART_TYPE(iso) = {
+	.name		= "ISO",
+	.part_type	= PART_TYPE_ISO,
+	.get_info	= get_partition_info_iso,
+	.print		= print_part_iso,
+	.test		= test_part_iso,
+};
 #endif
diff --git a/disk/part_mac.c b/disk/part_mac.c
index ae83495..3fb3b16 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -40,7 +40,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 /*
  * Test for a valid MAC partition
  */
-int test_part_mac(struct blk_desc *dev_desc)
+static int test_part_mac(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
 	ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
@@ -64,8 +64,7 @@ int test_part_mac(struct blk_desc *dev_desc)
 	return (0);
 }
 
-
-void print_part_mac(struct blk_desc *dev_desc)
+static void print_part_mac(struct blk_desc *dev_desc)
 {
 	ulong i, n;
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
@@ -214,8 +213,8 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 	/* NOTREACHED */
 }
 
-int get_partition_info_mac(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info)
+static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
+				  disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
 	ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
@@ -238,4 +237,11 @@ int get_partition_info_mac(struct blk_desc *dev_desc, int part,
 	return (0);
 }
 
+U_BOOT_PART_TYPE(mac) = {
+	.name		= "MAC",
+	.part_type	= PART_TYPE_MAC,
+	.get_info	= get_partition_info_mac,
+	.print		= print_part_mac,
+	.test		= test_part_mac,
+};
 #endif
diff --git a/include/part.h b/include/part.h
index 465dcdd..2f64c6d 100644
--- a/include/part.h
+++ b/include/part.h
@@ -195,43 +195,62 @@ static inline int blk_get_device_part_str(const char *ifname,
 { *dev_desc = NULL; return -1; }
 #endif
 
-#ifdef CONFIG_MAC_PARTITION
-/* disk/part_mac.c */
-int get_partition_info_mac(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info);
-void print_part_mac(struct blk_desc *dev_desc);
-int test_part_mac(struct blk_desc *dev_desc);
+/*
+ * We don't support printing partition information in SPL and only support
+ * getting partition information in a few cases.
+ */
+#ifdef CONFIG_SPL_BUILD
+# define part_print_ptr(x)	NULL
+# if defined(CONFIG_SPL_EXT_SUPPORT) || \
+	defined(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION)
+#  define part_get_info_ptr(x)	x
+# else
+#  define part_get_info_ptr(x)	NULL
+# endif
+#else
+#define part_print_ptr(x)	x
+#define part_get_info_ptr(x)	x
 #endif
 
-#ifdef CONFIG_DOS_PARTITION
-/* disk/part_dos.c */
-int get_partition_info_dos(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info);
-void print_part_dos(struct blk_desc *dev_desc);
-int test_part_dos(struct blk_desc *dev_desc);
-#endif
 
-#ifdef CONFIG_ISO_PARTITION
-/* disk/part_iso.c */
-int get_partition_info_iso(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info);
-void print_part_iso(struct blk_desc *dev_desc);
-int test_part_iso(struct blk_desc *dev_desc);
-#endif
+struct part_driver {
+	const char *name;
+	int part_type;
 
-#ifdef CONFIG_AMIGA_PARTITION
-/* disk/part_amiga.c */
-int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
-			     disk_partition_t *info);
-void print_part_amiga(struct blk_desc *dev_desc);
-int test_part_amiga(struct blk_desc *dev_desc);
-#endif
+	/**
+	 * get_info() - Get information about a partition
+	 *
+	 * @dev_desc:	Block device descriptor
+	 * @part:	Partition number (1 = first)
+	 * @info:	Returns partition information
+	 */
+	int (*get_info)(struct blk_desc *dev_desc, int part,
+			disk_partition_t *info);
+
+	/**
+	 * print() - Print partition information
+	 *
+	 * @dev_desc:	Block device descriptor
+	 */
+	void (*print)(struct blk_desc *dev_desc);
+
+	/**
+	 * test() - Test if a device contains this partition type
+	 *
+	 * @dev_desc:	Block device descriptor
+	 * @return 0 if the block device appears to contain this partition
+	 *	   type, -ve if not
+	 */
+	int (*test)(struct blk_desc *dev_desc);
+};
+
+/* Declare a new U-Boot partition 'driver' */
+#define U_BOOT_PART_TYPE(__name)					\
+	ll_entry_declare(struct part_driver, __name, part_driver)
 
 #ifdef CONFIG_EFI_PARTITION
 #include <part_efi.h>
 /* disk/part_efi.c */
-int get_partition_info_efi(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info);
 /**
  * get_partition_info_efi_by_name() - Find the specified GPT partition table entry
  *
@@ -243,8 +262,6 @@ int get_partition_info_efi(struct blk_desc *dev_desc, int part,
  */
 int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
 	const char *name, disk_partition_t *info);
-void print_part_efi(struct blk_desc *dev_desc);
-int test_part_efi(struct blk_desc *dev_desc);
 
 /**
  * write_gpt_table() - Write the GUID Partition Table to disk
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (13 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:25   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type Simon Glass
                   ` (16 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Rename three partition functions so that they start with part_. This makes
it clear what they relate to.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 board/cm5200/fwupdate.c   |  2 +-
 cmd/ide.c                 |  6 +++---
 cmd/mmc.c                 |  2 +-
 cmd/part.c                |  8 ++++----
 cmd/read.c                |  2 +-
 cmd/sata.c                |  6 +++---
 cmd/scsi.c                |  6 +++---
 cmd/usb.c                 |  4 ++--
 common/fb_mmc.c           | 10 +++++-----
 common/spl/spl_ext.c      |  6 ++----
 common/spl/spl_mmc.c      |  2 +-
 common/usb_storage.c      |  2 +-
 disk/part.c               | 12 ++++++------
 disk/part_amiga.c         |  4 ++--
 disk/part_dos.c           | 19 +++++++++----------
 disk/part_efi.c           | 10 +++++-----
 disk/part_iso.c           | 17 +++++++++--------
 disk/part_mac.c           |  4 ++--
 drivers/block/pata_bfin.c |  2 +-
 drivers/block/sandbox.c   |  2 +-
 drivers/block/systemace.c |  2 +-
 drivers/dfu/dfu_mmc.c     |  2 +-
 drivers/mmc/mmc.c         |  2 +-
 fs/fat/fat.c              |  2 +-
 include/part.h            | 21 ++++++++++-----------
 25 files changed, 76 insertions(+), 79 deletions(-)

diff --git a/board/cm5200/fwupdate.c b/board/cm5200/fwupdate.c
index d5064c1..2ed90de 100644
--- a/board/cm5200/fwupdate.c
+++ b/board/cm5200/fwupdate.c
@@ -117,7 +117,7 @@ static int load_rescue_image(ulong addr)
 
 	/* Detect partition */
 	for (partno = -1, i = 0; i < 6; i++) {
-		if (get_partition_info(stor_dev, i, &info) == 0) {
+		if (part_get_info(stor_dev, i, &info) == 0) {
 			if (fat_register_device(stor_dev, i) == 0) {
 				/* Check if rescue image is present */
 				FW_DEBUG("Looking for firmware directory '%s'"
diff --git a/cmd/ide.c b/cmd/ide.c
index 06202c5..01b91b5 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -137,7 +137,7 @@ int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 					++ok;
 					if (dev)
 						putc('\n');
-					print_part(&ide_dev_desc[dev]);
+					part_print(&ide_dev_desc[dev]);
 				}
 			}
 			if (!ok) {
@@ -171,7 +171,7 @@ int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 			int dev = (int) simple_strtoul(argv[2], NULL, 10);
 
 			if (ide_dev_desc[dev].part_type != PART_TYPE_UNKNOWN) {
-				print_part(&ide_dev_desc[dev]);
+				part_print(&ide_dev_desc[dev]);
 			} else {
 				printf("\nIDE device %d not available\n",
 				       dev);
@@ -435,7 +435,7 @@ void ide_init(void)
 
 		if ((ide_dev_desc[i].lba > 0) && (ide_dev_desc[i].blksz > 0)) {
 			/* initialize partition type */
-			init_part(&ide_dev_desc[i]);
+			part_init(&ide_dev_desc[i]);
 			if (curr_device < 0)
 				curr_device = i;
 		}
diff --git a/cmd/mmc.c b/cmd/mmc.c
index ab59e7f..fb4382e 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -433,7 +433,7 @@ static int do_mmc_part(cmd_tbl_t *cmdtp, int flag,
 
 	mmc_dev = mmc_get_dev(curr_device);
 	if (mmc_dev != NULL && mmc_dev->type != DEV_TYPE_UNKNOWN) {
-		print_part(mmc_dev);
+		part_print(mmc_dev);
 		return CMD_RET_SUCCESS;
 	}
 
diff --git a/cmd/part.c b/cmd/part.c
index 6683ed5..5f46e42 100644
--- a/cmd/part.c
+++ b/cmd/part.c
@@ -92,7 +92,7 @@ static int do_part_list(int argc, char * const argv[])
 
 		for (p = 1; p < 128; p++) {
 			char t[5];
-			int r = get_partition_info(desc, p, &info);
+			int r = part_get_info(desc, p, &info);
 
 			if (r != 0)
 				continue;
@@ -107,7 +107,7 @@ static int do_part_list(int argc, char * const argv[])
 		return 0;
 	}
 
-	print_part(desc);
+	part_print(desc);
 
 	return 0;
 }
@@ -132,7 +132,7 @@ static int do_part_start(int argc, char * const argv[])
 	if (ret < 0)
 		return 1;
 
-	err = get_partition_info(desc, part, &info);
+	err = part_get_info(desc, part, &info);
 	if (err)
 		return 1;
 
@@ -166,7 +166,7 @@ static int do_part_size(int argc, char * const argv[])
 	if (ret < 0)
 		return 1;
 
-	err = get_partition_info(desc, part, &info);
+	err = part_get_info(desc, part, &info);
 	if (err)
 		return 1;
 
diff --git a/cmd/read.c b/cmd/read.c
index 12ac1659..f8d766a 100644
--- a/cmd/read.c
+++ b/cmd/read.c
@@ -50,7 +50,7 @@ int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	cnt = simple_strtoul(argv[5], NULL, 16);
 
 	if (part != 0) {
-		if (get_partition_info(dev_desc, part, &part_info)) {
+		if (part_get_info(dev_desc, part, &part_info)) {
 			printf("Cannot find partition %d\n", part);
 			return 1;
 		}
diff --git a/cmd/sata.c b/cmd/sata.c
index a1faf2d..8b1f19c 100644
--- a/cmd/sata.c
+++ b/cmd/sata.c
@@ -52,7 +52,7 @@ int __sata_initialize(void)
 			rc = scan_sata(i);
 			if (!rc && (sata_dev_desc[i].lba > 0) &&
 				(sata_dev_desc[i].blksz > 0))
-				init_part(&sata_dev_desc[i]);
+				part_init(&sata_dev_desc[i]);
 		}
 	}
 	sata_curr_device = 0;
@@ -131,7 +131,7 @@ static int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 					++ok;
 					if (dev)
 						putc ('\n');
-					print_part(&sata_dev_desc[dev]);
+					part_print(&sata_dev_desc[dev]);
 				}
 			}
 			if (!ok) {
@@ -164,7 +164,7 @@ static int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			int dev = (int)simple_strtoul(argv[2], NULL, 10);
 
 			if (sata_dev_desc[dev].part_type != PART_TYPE_UNKNOWN) {
-				print_part(&sata_dev_desc[dev]);
+				part_print(&sata_dev_desc[dev]);
 			} else {
 				printf("\nSATA device %d not available\n", dev);
 				rc = 1;
diff --git a/cmd/scsi.c b/cmd/scsi.c
index dff811b..de0651c 100644
--- a/cmd/scsi.c
+++ b/cmd/scsi.c
@@ -156,7 +156,7 @@ void scsi_scan(int mode)
 			scsi_dev_desc[scsi_max_devs].log2blksz =
 				LOG2(scsi_dev_desc[scsi_max_devs].blksz);
 			scsi_dev_desc[scsi_max_devs].type=perq;
-			init_part(&scsi_dev_desc[scsi_max_devs]);
+			part_init(&scsi_dev_desc[scsi_max_devs]);
 removable:
 			if(mode==1) {
 				printf ("  Device %d: ", scsi_max_devs);
@@ -301,7 +301,7 @@ int do_scsi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 						if (dev)
 							printf("\n");
 						debug ("print_part of %x\n",dev);
-							print_part(&scsi_dev_desc[dev]);
+						part_print(&scsi_dev_desc[dev]);
 					}
 				}
 				if (!ok)
@@ -329,7 +329,7 @@ int do_scsi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			if (strncmp(argv[1],"part",4) == 0) {
 				int dev = (int)simple_strtoul(argv[2], NULL, 10);
 				if(scsi_dev_desc[dev].type != DEV_TYPE_UNKNOWN) {
-					print_part(&scsi_dev_desc[dev]);
+					part_print(&scsi_dev_desc[dev]);
 				}
 				else {
 					printf ("\nSCSI device %d not available\n", dev);
diff --git a/cmd/usb.c b/cmd/usb.c
index 5f3b06a..53fd6ad 100644
--- a/cmd/usb.c
+++ b/cmd/usb.c
@@ -727,7 +727,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 					if (devno)
 						printf("\n");
 					debug("print_part of %x\n", devno);
-					print_part(stor_dev);
+					part_print(stor_dev);
 				}
 			}
 		} else {
@@ -737,7 +737,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			    stor_dev->type != DEV_TYPE_UNKNOWN) {
 				ok++;
 				debug("print_part of %x\n", devno);
-				print_part(stor_dev);
+				part_print(stor_dev);
 			}
 		}
 		if (!ok) {
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index 4324f58..d5c9135 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -25,12 +25,12 @@ struct fb_mmc_sparse {
 	struct blk_desc	*dev_desc;
 };
 
-static int get_partition_info_efi_by_name_or_alias(struct blk_desc *dev_desc,
+static int part_get_info_efi_by_name_or_alias(struct blk_desc *dev_desc,
 		const char *name, disk_partition_t *info)
 {
 	int ret;
 
-	ret = get_partition_info_efi_by_name(dev_desc, name, info);
+	ret = part_get_info_efi_by_name(dev_desc, name, info);
 	if (ret) {
 		/* strlen("fastboot_partition_alias_") + 32(part_name) + 1 */
 		char env_alias_name[25 + 32 + 1];
@@ -41,7 +41,7 @@ static int get_partition_info_efi_by_name_or_alias(struct blk_desc *dev_desc,
 		strncat(env_alias_name, name, 32);
 		aliased_part_name = getenv(env_alias_name);
 		if (aliased_part_name != NULL)
-			ret = get_partition_info_efi_by_name(dev_desc,
+			ret = part_get_info_efi_by_name(dev_desc,
 					aliased_part_name, info);
 	}
 	return ret;
@@ -131,7 +131,7 @@ void fb_mmc_flash_write(const char *cmd, unsigned int session_id,
 		printf("........ success\n");
 		fastboot_okay(response_str, "");
 		return;
-	} else if (get_partition_info_efi_by_name_or_alias(dev_desc, cmd, &info)) {
+	} else if (part_get_info_efi_by_name_or_alias(dev_desc, cmd, &info)) {
 		error("cannot find partition: '%s'\n", cmd);
 		fastboot_fail(response_str, "cannot find partition");
 		return;
@@ -186,7 +186,7 @@ void fb_mmc_erase(const char *cmd, char *response)
 		return;
 	}
 
-	ret = get_partition_info_efi_by_name_or_alias(dev_desc, cmd, &info);
+	ret = part_get_info_efi_by_name_or_alias(dev_desc, cmd, &info);
 	if (ret) {
 		error("cannot find partition: '%s'", cmd);
 		fastboot_fail(response_str, "cannot find partition");
diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c
index d29d229..b77dbf4 100644
--- a/common/spl/spl_ext.c
+++ b/common/spl/spl_ext.c
@@ -22,8 +22,7 @@ int spl_load_image_ext(struct blk_desc *block_dev,
 	header = (struct image_header *)(CONFIG_SYS_TEXT_BASE -
 						sizeof(struct image_header));
 
-	if (get_partition_info(block_dev,
-			       partition, &part_info)) {
+	if (part_get_info(block_dev, partition, &part_info)) {
 		printf("spl: no partition table found\n");
 		return -1;
 	}
@@ -71,8 +70,7 @@ int spl_load_image_ext_os(struct blk_desc *block_dev, int partition)
 	disk_partition_t part_info = {};
 	__maybe_unused char *file;
 
-	if (get_partition_info(block_dev,
-			       partition, &part_info)) {
+	if (part_get_info(block_dev, partition, &part_info)) {
 		printf("spl: no partition table found\n");
 		return -1;
 	}
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index c3931c6..fa54730 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -122,7 +122,7 @@ static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
 	disk_partition_t info;
 	int err;
 
-	err = get_partition_info(&mmc->block_dev, partition, &info);
+	err = part_get_info(&mmc->block_dev, partition, &info);
 	if (err) {
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
 		puts("spl: partition error\n");
diff --git a/common/usb_storage.c b/common/usb_storage.c
index ca5aeea..e105a95 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -1374,7 +1374,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
 	debug(" address %d\n", dev_desc->target);
 	debug("partype: %d\n", dev_desc->part_type);
 
-	init_part(dev_desc);
+	part_init(dev_desc);
 
 	debug("partype: %d\n", dev_desc->part_type);
 	return 1;
diff --git a/disk/part.c b/disk/part.c
index e7d62f4..a429eb2 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -267,7 +267,7 @@ void dev_print (struct blk_desc *dev_desc)
 
 #ifdef HAVE_BLOCK_DEVICE
 
-void init_part(struct blk_desc *dev_desc)
+void part_init(struct blk_desc *dev_desc)
 {
 	struct part_driver *drv =
 		ll_entry_start(struct part_driver, part_driver);
@@ -329,7 +329,7 @@ static void print_part_header(const char *type, struct blk_desc *dev_desc)
 #endif /* any CONFIG_..._PARTITION */
 }
 
-void print_part(struct blk_desc *dev_desc)
+void part_print(struct blk_desc *dev_desc)
 {
 	struct part_driver *drv;
 
@@ -348,7 +348,7 @@ void print_part(struct blk_desc *dev_desc)
 
 #endif /* HAVE_BLOCK_DEVICE */
 
-int get_partition_info(struct blk_desc *dev_desc, int part,
+int part_get_info(struct blk_desc *dev_desc, int part,
 		       disk_partition_t *info)
 {
 #ifdef HAVE_BLOCK_DEVICE
@@ -432,7 +432,7 @@ int blk_get_device_str(const char *ifname, const char *dev_hwpart_str,
 	 * already loaded.
 	 */
 	if(hwpart != 0)
-		init_part(*dev_desc);
+		part_init(*dev_desc);
 #endif
 
 cleanup:
@@ -607,7 +607,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 	 * other than "auto", use that partition number directly.
 	 */
 	if (part != PART_AUTO) {
-		ret = get_partition_info(*dev_desc, part, info);
+		ret = part_get_info(*dev_desc, part, info);
 		if (ret) {
 			printf("** Invalid partition %d **\n", part);
 			goto cleanup;
@@ -619,7 +619,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 		 */
 		part = 0;
 		for (p = 1; p <= MAX_SEARCH_PARTITIONS; p++) {
-			ret = get_partition_info(*dev_desc, p, info);
+			ret = part_get_info(*dev_desc, p, info);
 			if (ret)
 				continue;
 
diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index 0f569f0..d323b4b 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -291,7 +291,7 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
 /*
  * Get info about a partition
  */
-static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
+static int part_get_info_amiga(struct blk_desc *dev_desc, int part,
 				    disk_partition_t *info)
 {
     struct partition_block *p = find_partition(dev_desc, part-1);
@@ -382,7 +382,7 @@ static void print_part_amiga(struct blk_desc *dev_desc)
 U_BOOT_PART_TYPE(amiga) = {
 	.name		= "AMIGA",
 	.part_type	= PART_TYPE_AMIGA,
-	.get_info	= get_partition_info_amiga,
+	.get_info	= part_get_info_amiga,
 	.print		= print_part_amiga,
 	.test		= test_part_amiga,
 };
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 7567ed3..4a56391 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -167,11 +167,10 @@ static void print_partition_extended(struct blk_desc *dev_desc,
 
 /*  Print a partition that is relative to its Extended partition table
  */
-static int get_partition_info_extended(struct blk_desc *dev_desc,
-				       lbaint_t ext_part_sector,
-				       lbaint_t relative, int part_num,
-				       int which_part, disk_partition_t *info,
-				       unsigned int disksig)
+static int part_get_info_extended(struct blk_desc *dev_desc,
+				  lbaint_t ext_part_sector, lbaint_t relative,
+				  int part_num, int which_part,
+				  disk_partition_t *info, unsigned int disksig)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 	dos_partition_t *pt;
@@ -259,7 +258,7 @@ static int get_partition_info_extended(struct blk_desc *dev_desc,
 			lbaint_t lba_start
 				= le32_to_int (pt->start4) + relative;
 
-			return get_partition_info_extended (dev_desc, lba_start,
+			return part_get_info_extended(dev_desc, lba_start,
 				 ext_part_sector == 0 ? lba_start : relative,
 				 part_num, which_part, info, disksig);
 		}
@@ -289,16 +288,16 @@ void print_part_dos(struct blk_desc *dev_desc)
 	print_partition_extended(dev_desc, 0, 0, 1, 0);
 }
 
-int get_partition_info_dos(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info)
+int part_get_info_dos(struct blk_desc *dev_desc, int part,
+		      disk_partition_t *info)
 {
-	return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
+	return part_get_info_extended(dev_desc, 0, 0, 1, part, info, 0);
 }
 
 U_BOOT_PART_TYPE(dos) = {
 	.name		= "DOS",
 	.part_type	= PART_TYPE_DOS,
-	.get_info	= part_get_info_ptr(get_partition_info_dos),
+	.get_info	= part_get_info_ptr(part_get_info_dos),
 	.print		= part_print_ptr(print_part_dos),
 	.test		= test_part_dos,
 };
diff --git a/disk/part_efi.c b/disk/part_efi.c
index 6f80877..eed8593 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -237,8 +237,8 @@ void print_part_efi(struct blk_desc *dev_desc)
 	return;
 }
 
-int get_partition_info_efi(struct blk_desc *dev_desc, int part,
-			   disk_partition_t *info)
+int part_get_info_efi(struct blk_desc *dev_desc, int part,
+		      disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
 	gpt_entry *gpt_pte = NULL;
@@ -300,13 +300,13 @@ int get_partition_info_efi(struct blk_desc *dev_desc, int part,
 	return 0;
 }
 
-int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
+int part_get_info_efi_by_name(struct blk_desc *dev_desc,
 	const char *name, disk_partition_t *info)
 {
 	int ret;
 	int i;
 	for (i = 1; i < GPT_ENTRY_NUMBERS; i++) {
-		ret = get_partition_info_efi(dev_desc, i, info);
+		ret = part_get_info_efi(dev_desc, i, info);
 		if (ret != 0) {
 			/* no more entries in table */
 			return -1;
@@ -957,7 +957,7 @@ static int is_pte_valid(gpt_entry * pte)
 U_BOOT_PART_TYPE(efi) = {
 	.name		= "EFI",
 	.part_type	= PART_TYPE_EFI,
-	.get_info	= part_get_info_ptr(get_partition_info_efi),
+	.get_info	= part_get_info_ptr(part_get_info_efi),
 	.print		= part_print_ptr(print_part_efi),
 	.test		= test_part_efi,
 };
diff --git a/disk/part_iso.c b/disk/part_iso.c
index 1d72d23..a1cf358 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -46,8 +46,8 @@ static inline unsigned short le16_to_int(unsigned char *le16)
 
 
 /* only boot records will be listed as valid partitions */
-int get_partition_info_iso_verb(struct blk_desc *dev_desc, int part_num,
-				disk_partition_t *info, int verb)
+int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
+			   disk_partition_t *info, int verb)
 {
 	int i,offset,entry_num;
 	unsigned short *chksumbuf;
@@ -217,17 +217,18 @@ found:
 	return 0;
 }
 
-static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
+static int part_get_info_iso(struct blk_desc *dev_desc, int part_num,
 				  disk_partition_t *info)
 {
-	return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
+	return part_get_info_iso_verb(dev_desc, part_num, info, 1);
 }
 
 static void print_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 	int i;
-	if(get_partition_info_iso_verb(dev_desc,0,&info,0)==-1) {
+
+	if (part_get_info_iso_verb(dev_desc, 0, &info, 0) == -1) {
 		printf("** No boot partition found on device %d **\n",dev_desc->dev);
 		return;
 	}
@@ -237,20 +238,20 @@ static void print_part_iso(struct blk_desc *dev_desc)
 		printf(" %2d " LBAFU " " LBAFU " %6ld %.32s\n",
 		       i, info.start, info.size, info.blksz, info.type);
 		i++;
-	} while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
+	} while (part_get_info_iso_verb(dev_desc, i, &info, 0) != -1);
 }
 
 static int test_part_iso(struct blk_desc *dev_desc)
 {
 	disk_partition_t info;
 
-	return(get_partition_info_iso_verb(dev_desc,0,&info,0));
+	return part_get_info_iso_verb(dev_desc, 0, &info, 0);
 }
 
 U_BOOT_PART_TYPE(iso) = {
 	.name		= "ISO",
 	.part_type	= PART_TYPE_ISO,
-	.get_info	= get_partition_info_iso,
+	.get_info	= part_get_info_iso,
 	.print		= print_part_iso,
 	.test		= test_part_iso,
 };
diff --git a/disk/part_mac.c b/disk/part_mac.c
index 3fb3b16..6192723 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -213,7 +213,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 	/* NOTREACHED */
 }
 
-static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
+static int part_get_info_mac(struct blk_desc *dev_desc, int part,
 				  disk_partition_t *info)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
@@ -240,7 +240,7 @@ static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
 U_BOOT_PART_TYPE(mac) = {
 	.name		= "MAC",
 	.part_type	= PART_TYPE_MAC,
-	.get_info	= get_partition_info_mac,
+	.get_info	= part_get_info_mac,
 	.print		= print_part_mac,
 	.test		= test_part_mac,
 };
diff --git a/drivers/block/pata_bfin.c b/drivers/block/pata_bfin.c
index c2673bd..26569d7 100644
--- a/drivers/block/pata_bfin.c
+++ b/drivers/block/pata_bfin.c
@@ -965,7 +965,7 @@ int scan_sata(int dev)
 		/* Probe device and set xfer mode */
 		bfin_ata_identify(ap, dev%PATA_DEV_NUM_PER_PORT);
 		bfin_ata_set_Feature_cmd(ap, dev%PATA_DEV_NUM_PER_PORT);
-		init_part(&sata_dev_desc[dev]);
+		part_init(&sata_dev_desc[dev]);
 		return 0;
 	}
 
diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index dd21400..093e133 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -98,7 +98,7 @@ int host_dev_bind(int dev, char *filename)
 	blk_dev->block_write = host_block_write;
 	blk_dev->dev = dev;
 	blk_dev->part_type = PART_TYPE_UNKNOWN;
-	init_part(blk_dev);
+	part_init(blk_dev);
 
 	return 0;
 }
diff --git a/drivers/block/systemace.c b/drivers/block/systemace.c
index ea18c0d..b921dcd 100644
--- a/drivers/block/systemace.c
+++ b/drivers/block/systemace.c
@@ -124,7 +124,7 @@ struct blk_desc *systemace_get_dev(int dev)
 		 */
 		ace_writew(width == 8 ? 0 : 0x0001, 0);
 
-		init_part(&systemace_dev);
+		part_init(&systemace_dev);
 
 	}
 
diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
index bfac91a..faece88 100644
--- a/drivers/dfu/dfu_mmc.c
+++ b/drivers/dfu/dfu_mmc.c
@@ -355,7 +355,7 @@ int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr, char *s)
 		int mmcdev = second_arg;
 		int mmcpart = third_arg;
 
-		if (get_partition_info(blk_dev, mmcpart, &partinfo) != 0) {
+		if (part_get_info(blk_dev, mmcpart, &partinfo) != 0) {
 			error("Couldn't find part #%d on mmc device #%d\n",
 			      mmcpart, mmcdev);
 			return -ENODEV;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index b19b328..94afbb1 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1495,7 +1495,7 @@ static int mmc_startup(struct mmc *mmc)
 	mmc->block_dev.revision[0] = 0;
 #endif
 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
-	init_part(&mmc->block_dev);
+	part_init(&mmc->block_dev);
 #endif
 
 	return 0;
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 2cef3bd..47f077d 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -97,7 +97,7 @@ int fat_register_device(struct blk_desc *dev_desc, int part_no)
 	cur_dev = NULL;
 
 	/* Read the partition table, if present */
-	if (get_partition_info(dev_desc, part_no, &info)) {
+	if (part_get_info(dev_desc, part_no, &info)) {
 		if (part_no != 0) {
 			printf("** Partition %d not valid on device %d **\n",
 					part_no, dev_desc->dev);
diff --git a/include/part.h b/include/part.h
index 2f64c6d..1bef56b 100644
--- a/include/part.h
+++ b/include/part.h
@@ -96,10 +96,9 @@ struct blk_desc *host_get_dev(int dev);
 int host_get_dev_err(int dev, struct blk_desc **blk_devp);
 
 /* disk/part.c */
-int get_partition_info(struct blk_desc *dev_desc, int part,
-		       disk_partition_t *info);
-void print_part(struct blk_desc *dev_desc);
-void init_part(struct blk_desc *dev_desc);
+int part_get_info(struct blk_desc *dev_desc, int part, disk_partition_t *info);
+void part_print(struct blk_desc *dev_desc);
+void part_init(struct blk_desc *dev_desc);
 void dev_print(struct blk_desc *dev_desc);
 
 /**
@@ -179,10 +178,10 @@ static inline struct blk_desc *systemace_get_dev(int dev) { return NULL; }
 static inline struct blk_desc *mg_disk_get_dev(int dev) { return NULL; }
 static inline struct blk_desc *host_get_dev(int dev) { return NULL; }
 
-static inline int get_partition_info(struct blk_desc *dev_desc, int part,
-				     disk_partition_t *info) { return -1; }
-static inline void print_part(struct blk_desc *dev_desc) {}
-static inline void init_part(struct blk_desc *dev_desc) {}
+static inline int part_get_info(struct blk_desc *dev_desc, int part,
+				disk_partition_t *info) { return -1; }
+static inline void part_print(struct blk_desc *dev_desc) {}
+static inline void part_init(struct blk_desc *dev_desc) {}
 static inline void dev_print(struct blk_desc *dev_desc) {}
 static inline int blk_get_device_str(const char *ifname, const char *dev_str,
 				     struct blk_desc **dev_desc)
@@ -252,7 +251,7 @@ struct part_driver {
 #include <part_efi.h>
 /* disk/part_efi.c */
 /**
- * get_partition_info_efi_by_name() - Find the specified GPT partition table entry
+ * part_get_info_efi_by_name() - Find the specified GPT partition table entry
  *
  * @param dev_desc - block device descriptor
  * @param gpt_name - the specified table entry name
@@ -260,8 +259,8 @@ struct part_driver {
  *
  * @return - '0' on match, '-1' on no match, otherwise error
  */
-int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
-	const char *name, disk_partition_t *info);
+int part_get_info_efi_by_name(struct blk_desc *dev_desc,
+			      const char *name, disk_partition_t *info);
 
 /**
  * write_gpt_table() - Write the GUID Partition Table to disk
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (14 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:51   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs Simon Glass
                   ` (15 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The comment for file_cbfs_type() says that it returns 0 for an invalid type.
The code appears to check for -1, except that it uses an unsigned variable
to store the type. This results in a warning on 64-bit machines.

Adjust it to make the meaning clearer. Continue to handle the -1 case since
it may be needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 cmd/cbfs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cmd/cbfs.c b/cmd/cbfs.c
index 35d8a7a..cdfc9b6 100644
--- a/cmd/cbfs.c
+++ b/cmd/cbfs.c
@@ -103,7 +103,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	printf("     size              type  name\n");
 	printf("------------------------------------------\n");
 	while (file) {
-		u32 type = file_cbfs_type(file);
+		int type = file_cbfs_type(file);
 		char *type_name = NULL;
 		const char *filename = file_cbfs_name(file);
 
@@ -140,7 +140,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 		case CBFS_COMPONENT_CMOS_LAYOUT:
 			type_name = "cmos layout";
 			break;
-		case -1UL:
+		case -1:
 			type_name = "null";
 			break;
 		}
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (15 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:51   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum Simon Glass
                   ` (14 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Enable these two filesystems to provide better build coverage in sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 include/configs/sandbox.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
index 0f02839..2268c4e 100644
--- a/include/configs/sandbox.h
+++ b/include/configs/sandbox.h
@@ -44,6 +44,9 @@
 #define CONFIG_CMD_FAT
 #define CONFIG_CMD_EXT4
 #define CONFIG_CMD_EXT4_WRITE
+#define CONFIG_CMD_CBFS
+#define CONFIG_CMD_CRAMFS
+#define CONFIG_CRAMFS_CMDLINE
 #define CONFIG_CMD_PART
 #define CONFIG_DOS_PARTITION
 #define CONFIG_HOST_MAX_DEVICES 4
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (16 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:51   ` Bin Meng
  2016-02-16 23:23   ` Stephen Warren
  2016-02-15  2:16 ` [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function Simon Glass
                   ` (13 subsequent siblings)
  31 siblings, 2 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

This is a device number, and we want to use 'dev' to mean a driver model
device. Rename the member.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 board/sunxi/board.c          |  4 ++--
 cmd/cbfs.c                   |  1 +
 cmd/disk.c                   |  2 +-
 cmd/fat.c                    |  4 ++--
 cmd/ide.c                    | 12 ++++++------
 cmd/mmc_spi.c                |  4 ++--
 cmd/reiser.c                 |  4 ++--
 cmd/sata.c                   |  6 +++---
 cmd/scsi.c                   |  6 +++---
 cmd/usb_mass_storage.c       |  2 +-
 cmd/zfs.c                    |  2 +-
 common/env_fat.c             |  4 ++--
 common/fb_mmc.c              |  4 ++--
 common/usb_storage.c         |  6 +++---
 disk/part.c                  |  8 ++------
 disk/part_dos.c              | 29 +++++++++++++++++------------
 disk/part_efi.c              |  4 ++--
 disk/part_iso.c              | 39 ++++++++++++++++++++-------------------
 disk/part_mac.c              | 22 +++++++++++-----------
 drivers/block/sandbox.c      |  6 +++---
 drivers/block/systemace.c    |  2 +-
 drivers/mmc/arm_pl180_mmci.c |  2 +-
 drivers/mmc/mmc.c            |  8 ++++----
 drivers/mmc/mmc_write.c      |  4 ++--
 drivers/mmc/mxsmmc.c         | 24 ++++++++++++------------
 drivers/mmc/omap_hsmmc.c     |  4 ++--
 drivers/mmc/sdhci.c          |  2 +-
 fs/fat/fat.c                 |  4 ++--
 include/blk.h                |  2 +-
 29 files changed, 112 insertions(+), 109 deletions(-)

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 420481a..fd0cab9 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -336,8 +336,8 @@ int board_mmc_init(bd_t *bis)
 	if (!sunxi_mmc_has_egon_boot_signature(mmc0) &&
 	    sunxi_mmc_has_egon_boot_signature(mmc1)) {
 		/* Booting from emmc / mmc2, swap */
-		mmc0->block_dev.dev = 1;
-		mmc1->block_dev.dev = 0;
+		mmc0->block_dev.devnum = 1;
+		mmc1->block_dev.devnum = 0;
 	}
 #endif
 
diff --git a/cmd/cbfs.c b/cmd/cbfs.c
index cdfc9b6..779e9c0 100644
--- a/cmd/cbfs.c
+++ b/cmd/cbfs.c
@@ -141,6 +141,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 			type_name = "cmos layout";
 			break;
 		case -1:
+		case 0:
 			type_name = "null";
 			break;
 		}
diff --git a/cmd/disk.c b/cmd/disk.c
index 0883c79..27ed115 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -45,7 +45,7 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
 		return 1;
 	}
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	bootstage_mark(BOOTSTAGE_ID_IDE_TYPE);
 
 	printf("\nLoading from %s device %d, partition %d: "
diff --git a/cmd/fat.c b/cmd/fat.c
index 18a1be9..4e20746 100644
--- a/cmd/fat.c
+++ b/cmd/fat.c
@@ -81,7 +81,7 @@ static int do_fat_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc,
 	if (part < 0)
 		return 1;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	if (fat_set_blk_dev(dev_desc, &info) != 0) {
 		printf("\n** Unable to use %s %d:%d for fatinfo **\n",
 			argv[1], dev, part);
@@ -118,7 +118,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,
 	if (part < 0)
 		return 1;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 
 	if (fat_set_blk_dev(dev_desc, &info) != 0) {
 		printf("\n** Unable to use %s %d:%d for fatwrite **\n",
diff --git a/cmd/ide.c b/cmd/ide.c
index 01b91b5..dfd5548 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -418,7 +418,7 @@ void ide_init(void)
 		int led = (IDE_BUS(i) == 0) ? LED_IDE1 : LED_IDE2;
 		ide_dev_desc[i].type = DEV_TYPE_UNKNOWN;
 		ide_dev_desc[i].if_type = IF_TYPE_IDE;
-		ide_dev_desc[i].dev = i;
+		ide_dev_desc[i].devnum = i;
 		ide_dev_desc[i].part_type = PART_TYPE_UNKNOWN;
 		ide_dev_desc[i].blksz = 0;
 		ide_dev_desc[i].log2blksz =
@@ -551,7 +551,7 @@ static void ide_ident(struct blk_desc *dev_desc)
 #endif
 	int device;
 
-	device = dev_desc->dev;
+	device = dev_desc->devnum;
 	printf("  Device %d: ", device);
 
 	ide_led(DEVICE_LED(device), 1);	/* LED on       */
@@ -716,7 +716,7 @@ static void ide_ident(struct blk_desc *dev_desc)
 ulong ide_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 	       void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	ulong n = 0;
 	unsigned char c;
 	unsigned char pwrsave = 0;	/* power save */
@@ -842,7 +842,7 @@ IDE_READ_E:
 ulong ide_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 		const void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	ulong n = 0;
 	unsigned char c;
 
@@ -1308,7 +1308,7 @@ static void atapi_inquiry(struct blk_desc *dev_desc)
 	unsigned char c;
 	int device;
 
-	device = dev_desc->dev;
+	device = dev_desc->devnum;
 	dev_desc->type = DEV_TYPE_UNKNOWN;	/* not yet valid */
 	dev_desc->block_read = atapi_read;
 
@@ -1397,7 +1397,7 @@ static void atapi_inquiry(struct blk_desc *dev_desc)
 ulong atapi_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
 		 void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	ulong n = 0;
 	unsigned char ccb[12];	/* Command descriptor block */
 	ulong cnt;
diff --git a/cmd/mmc_spi.c b/cmd/mmc_spi.c
index a2138b8..0c44d06 100644
--- a/cmd/mmc_spi.c
+++ b/cmd/mmc_spi.c
@@ -72,8 +72,8 @@ static int do_mmc_spi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		printf("Failed to create MMC Device\n");
 		return 1;
 	}
-	printf("%s: %d at %u:%u hz %u mode %u\n", mmc->cfg->name, mmc->block_dev.dev,
-	       bus, cs, speed, mode);
+	printf("%s: %d at %u:%u hz %u mode %u\n", mmc->cfg->name,
+	       mmc->block_dev.devnum, bus, cs, speed, mode);
 	mmc_init(mmc);
 	return 0;
 
diff --git a/cmd/reiser.c b/cmd/reiser.c
index a717956..cbdad36 100644
--- a/cmd/reiser.c
+++ b/cmd/reiser.c
@@ -48,7 +48,7 @@ int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	    filename = argv[3];
 	}
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	PRINTF("Using device %s %d:%d, directory: %s\n", argv[1], dev, part, filename);
 
 	reiserfs_set_blk_dev(dev_desc, &info);
@@ -126,7 +126,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	if (part < 0)
 		return 1;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 
 	printf("Loading file \"%s\" from %s device %d%c%c\n",
 		filename, argv[1], dev,
diff --git a/cmd/sata.c b/cmd/sata.c
index 8b1f19c..c8de9a3 100644
--- a/cmd/sata.c
+++ b/cmd/sata.c
@@ -21,13 +21,13 @@ struct blk_desc sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
 static unsigned long sata_bread(struct blk_desc *block_dev, lbaint_t start,
 				lbaint_t blkcnt, void *dst)
 {
-	return sata_read(block_dev->dev, start, blkcnt, dst);
+	return sata_read(block_dev->devnum, start, blkcnt, dst);
 }
 
 static unsigned long sata_bwrite(struct blk_desc *block_dev, lbaint_t start,
 				 lbaint_t blkcnt, const void *buffer)
 {
-	return sata_write(block_dev->dev, start, blkcnt, buffer);
+	return sata_write(block_dev->devnum, start, blkcnt, buffer);
 }
 
 int __sata_initialize(void)
@@ -38,7 +38,7 @@ int __sata_initialize(void)
 	for (i = 0; i < CONFIG_SYS_SATA_MAX_DEVICE; i++) {
 		memset(&sata_dev_desc[i], 0, sizeof(struct blk_desc));
 		sata_dev_desc[i].if_type = IF_TYPE_SATA;
-		sata_dev_desc[i].dev = i;
+		sata_dev_desc[i].devnum = i;
 		sata_dev_desc[i].part_type = PART_TYPE_UNKNOWN;
 		sata_dev_desc[i].type = DEV_TYPE_HARDDISK;
 		sata_dev_desc[i].lba = 0;
diff --git a/cmd/scsi.c b/cmd/scsi.c
index de0651c..951d1e5 100644
--- a/cmd/scsi.c
+++ b/cmd/scsi.c
@@ -99,7 +99,7 @@ void scsi_scan(int mode)
 		scsi_dev_desc[i].revision[0]=0;
 		scsi_dev_desc[i].removable = false;
 		scsi_dev_desc[i].if_type=IF_TYPE_SCSI;
-		scsi_dev_desc[i].dev=i;
+		scsi_dev_desc[i].devnum = i;
 		scsi_dev_desc[i].part_type=PART_TYPE_UNKNOWN;
 		scsi_dev_desc[i].block_read=scsi_read;
 		scsi_dev_desc[i].block_write = scsi_write;
@@ -379,7 +379,7 @@ int do_scsi (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 static ulong scsi_read(struct blk_desc *block_dev, lbaint_t blknr,
 		       lbaint_t blkcnt, void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks = 0;
@@ -446,7 +446,7 @@ static ulong scsi_read(struct blk_desc *block_dev, lbaint_t blknr,
 static ulong scsi_write(struct blk_desc *block_dev, lbaint_t blknr,
 			lbaint_t blkcnt, const void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks;
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index fcac389..d4e60b2 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -100,7 +100,7 @@ static int ums_init(const char *devtype, const char *devnums)
 		ums[ums_count].block_dev = *block_dev;
 
 		printf("UMS: LUN %d, dev %d, hwpart %d, sector %#x, count %#x\n",
-		       ums_count, ums[ums_count].block_dev.dev,
+		       ums_count, ums[ums_count].block_dev.devnum,
 		       ums[ums_count].block_dev.hwpart,
 		       ums[ums_count].start_sector,
 		       ums[ums_count].num_sectors);
diff --git a/cmd/zfs.c b/cmd/zfs.c
index bb61afd..93067a9 100644
--- a/cmd/zfs.c
+++ b/cmd/zfs.c
@@ -84,7 +84,7 @@ static int do_zfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
 	if (part < 0)
 		return 1;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	printf("Loading file \"%s\" from %s device %d%c%c\n",
 		filename, argv[1], dev,
 		part ? ':' : ' ', part ? part + '0' : ' ');
diff --git a/common/env_fat.c b/common/env_fat.c
index 2f22710..75616d4 100644
--- a/common/env_fat.c
+++ b/common/env_fat.c
@@ -54,7 +54,7 @@ int saveenv(void)
 	if (part < 0)
 		return 1;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	if (fat_set_blk_dev(dev_desc, &info) != 0) {
 		printf("\n** Unable to use %s %d:%d for saveenv **\n",
 		       FAT_ENV_INTERFACE, dev, part);
@@ -88,7 +88,7 @@ void env_relocate_spec(void)
 	if (part < 0)
 		goto err_env_relocate;
 
-	dev = dev_desc->dev;
+	dev = dev_desc->devnum;
 	if (fat_set_blk_dev(dev_desc, &info) != 0) {
 		printf("\n** Unable to use %s %d:%d for loading the env **\n",
 		       FAT_ENV_INTERFACE, dev, part);
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index d5c9135..da7949f 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -86,7 +86,7 @@ static void write_raw_image(struct blk_desc *dev_desc, disk_partition_t *info,
 
 	blks = dev_desc->block_write(dev_desc, info->start, blkcnt, buffer);
 	if (blks != blkcnt) {
-		error("failed writing to device %d\n", dev_desc->dev);
+		error("failed writing to device %d\n", dev_desc->devnum);
 		fastboot_fail(response_str, "failed writing to device");
 		return;
 	}
@@ -207,7 +207,7 @@ void fb_mmc_erase(const char *cmd, char *response)
 
 	blks = dev_desc->block_erase(dev_desc, blks_start, blks_size);
 	if (blks != blks_size) {
-		error("failed erasing from device %d", dev_desc->dev);
+		error("failed erasing from device %d", dev_desc->devnum);
 		fastboot_fail(response_str, "failed erasing from device");
 		return;
 	}
diff --git a/common/usb_storage.c b/common/usb_storage.c
index e105a95..60531e2 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -192,7 +192,7 @@ static int usb_stor_probe_device(struct usb_device *dev)
 			blkdev = &usb_dev_desc[usb_max_devs];
 			memset(blkdev, '\0', sizeof(struct blk_desc));
 			blkdev->if_type = IF_TYPE_USB;
-			blkdev->dev = usb_max_devs;
+			blkdev->devnum = usb_max_devs;
 			blkdev->part_type = PART_TYPE_UNKNOWN;
 			blkdev->target = 0xff;
 			blkdev->type = DEV_TYPE_UNKNOWN;
@@ -1029,7 +1029,7 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks;
@@ -1100,7 +1100,7 @@ retry_it:
 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer)
 {
-	int device = block_dev->dev;
+	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks;
diff --git a/disk/part.c b/disk/part.c
index a429eb2..cf8680e 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -108,7 +108,7 @@ static struct blk_desc *get_dev_hwpart(const char *ifname, int dev, int hwpart)
 				return dev_desc;
 			if (!select_hwpart)
 				return NULL;
-			ret = select_hwpart(dev_desc->dev, hwpart);
+			ret = select_hwpart(dev_desc->devnum, hwpart);
 			if (ret < 0)
 				return NULL;
 			return dev_desc;
@@ -325,7 +325,7 @@ static void print_part_header(const char *type, struct blk_desc *dev_desc)
 		break;
 	}
 	printf (" device %d  --   Partition Type: %s\n\n",
-			dev_desc->dev, type);
+			dev_desc->devnum, type);
 #endif /* any CONFIG_..._PARTITION */
 }
 
@@ -457,10 +457,6 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
 	int part;
 	disk_partition_t tmpinfo;
 
-#if defined CONFIG_SANDBOX && defined CONFIG_CMD_UBIFS
-#error Only one of CONFIG_SANDBOX and CONFIG_CMD_UBIFS may be selected
-#endif
-
 #ifdef CONFIG_SANDBOX
 	/*
 	 * Special-case a pseudo block device "hostfs", to allow access to the
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 4a56391..5f8d949 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -114,7 +114,7 @@ static void print_partition_extended(struct blk_desc *dev_desc,
 	if (dev_desc->block_read(dev_desc, ext_part_sector, 1,
 				 (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
-			dev_desc->dev, ext_part_sector);
+			dev_desc->devnum, ext_part_sector);
 		return;
 	}
 	i=test_block_type(buffer);
@@ -180,7 +180,7 @@ static int part_get_info_extended(struct blk_desc *dev_desc,
 	if (dev_desc->block_read(dev_desc, ext_part_sector, 1,
 				 (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
-			dev_desc->dev, ext_part_sector);
+			dev_desc->devnum, ext_part_sector);
 		return -1;
 	}
 	if (buffer[DOS_PART_MAGIC_OFFSET] != 0x55 ||
@@ -215,24 +215,29 @@ static int part_get_info_extended(struct blk_desc *dev_desc,
 				case IF_TYPE_IDE:
 				case IF_TYPE_SATA:
 				case IF_TYPE_ATAPI:
-					sprintf ((char *)info->name, "hd%c%d",
-						'a' + dev_desc->dev, part_num);
+					sprintf((char *)info->name, "hd%c%d",
+						'a' + dev_desc->devnum,
+						part_num);
 					break;
 				case IF_TYPE_SCSI:
-					sprintf ((char *)info->name, "sd%c%d",
-						'a' + dev_desc->dev, part_num);
+					sprintf((char *)info->name, "sd%c%d",
+						'a' + dev_desc->devnum,
+						part_num);
 					break;
 				case IF_TYPE_USB:
-					sprintf ((char *)info->name, "usbd%c%d",
-						'a' + dev_desc->dev, part_num);
+					sprintf((char *)info->name, "usbd%c%d",
+						'a' + dev_desc->devnum,
+						part_num);
 					break;
 				case IF_TYPE_DOC:
-					sprintf ((char *)info->name, "docd%c%d",
-						'a' + dev_desc->dev, part_num);
+					sprintf((char *)info->name, "docd%c%d",
+						'a' + dev_desc->devnum,
+						part_num);
 					break;
 				default:
-					sprintf ((char *)info->name, "xx%c%d",
-						'a' + dev_desc->dev, part_num);
+					sprintf((char *)info->name, "xx%c%d",
+						'a' + dev_desc->devnum,
+						part_num);
 					break;
 			}
 			/* sprintf(info->type, "%d, pt->sys_ind); */
diff --git a/disk/part_efi.c b/disk/part_efi.c
index eed8593..bdcddd4 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -356,7 +356,7 @@ static int set_protective_mbr(struct blk_desc *dev_desc)
 	/* Write MBR sector to the MMC device */
 	if (dev_desc->block_write(dev_desc, 0, 1, p_mbr) != 1) {
 		printf("** Can't write to device %d **\n",
-			dev_desc->dev);
+			dev_desc->devnum);
 		return -1;
 	}
 
@@ -410,7 +410,7 @@ int write_gpt_table(struct blk_desc *dev_desc,
 	return 0;
 
  err:
-	printf("** Can't write to device %d **\n", dev_desc->dev);
+	printf("** Can't write to device %d **\n", dev_desc->devnum);
 	return -1;
 }
 
diff --git a/disk/part_iso.c b/disk/part_iso.c
index a1cf358..c78ae21 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -68,13 +68,13 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	if(ppr->desctype!=0x01) {
 		if(verb)
 			printf ("** First descriptor is NOT a primary desc on %d:%d **\n",
-				dev_desc->dev, part_num);
+				dev_desc->devnum, part_num);
 		return (-1);
 	}
 	if(strncmp((char *)ppr->stand_ident,"CD001",5)!=0) {
 		if(verb)
 			printf ("** Wrong ISO Ident: %s on %d:%d **\n",
-				ppr->stand_ident,dev_desc->dev, part_num);
+				ppr->stand_ident, dev_desc->devnum, part_num);
 		return (-1);
 	}
 	lastsect= ((ppr->firstsek_LEpathtab1_LE & 0x000000ff)<<24) +
@@ -92,7 +92,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 		if(ppr->desctype==0xff) {
 			if(verb)
 				printf ("** No valid boot catalog found on %d:%d **\n",
-					dev_desc->dev, part_num);
+					dev_desc->devnum, part_num);
 			return (-1);
 		}
 	}
@@ -100,7 +100,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	if(strncmp(pbr->ident_str,"EL TORITO SPECIFICATION",23)!=0) {
 		if(verb)
 			printf ("** Wrong El Torito ident: %s on %d:%d **\n",
-				pbr->ident_str,dev_desc->dev, part_num);
+				pbr->ident_str, dev_desc->devnum, part_num);
 		return (-1);
 	}
 	bootaddr=le32_to_int(pbr->pointer);
@@ -108,7 +108,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	if (dev_desc->block_read(dev_desc, bootaddr, 1, (ulong *)tmpbuf) != 1) {
 		if(verb)
 			printf ("** Can't read Boot Entry at %lX on %d:%d **\n",
-				bootaddr,dev_desc->dev, part_num);
+				bootaddr, dev_desc->devnum, part_num);
 		return (-1);
 	}
 	chksum=0;
@@ -117,21 +117,21 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 		chksum+=((chksumbuf[i] &0xff)<<8)+((chksumbuf[i] &0xff00)>>8);
 	if(chksum!=0) {
 		if(verb)
-			printf ("** Checksum Error in booting catalog validation entry on %d:%d **\n",
-				dev_desc->dev, part_num);
+			printf("** Checksum Error in booting catalog validation entry on %d:%d **\n",
+			       dev_desc->devnum, part_num);
 		return (-1);
 	}
 	if((pve->key[0]!=0x55)||(pve->key[1]!=0xAA)) {
 		if(verb)
 			printf ("** Key 0x55 0xAA error on %d:%d **\n",
-				dev_desc->dev, part_num);
+				dev_desc->devnum, part_num);
 		return(-1);
 	}
 #ifdef CHECK_FOR_POWERPC_PLATTFORM
 	if(pve->platform!=0x01) {
 		if(verb)
 			printf ("** No PowerPC platform CD on %d:%d **\n",
-				dev_desc->dev, part_num);
+				dev_desc->devnum, part_num);
 		return(-1);
 	}
 #endif
@@ -144,23 +144,23 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 		case IF_TYPE_SATA:
 		case IF_TYPE_ATAPI:
 			sprintf ((char *)info->name, "hd%c%d",
-				'a' + dev_desc->dev, part_num);
+				'a' + dev_desc->devnum, part_num);
 			break;
 		case IF_TYPE_SCSI:
 			sprintf ((char *)info->name, "sd%c%d",
-				'a' + dev_desc->dev, part_num);
+				'a' + dev_desc->devnum, part_num);
 			break;
 		case IF_TYPE_USB:
 			sprintf ((char *)info->name, "usbd%c%d",
-				'a' + dev_desc->dev, part_num);
+				'a' + dev_desc->devnum, part_num);
 			break;
 		case IF_TYPE_DOC:
 			sprintf ((char *)info->name, "docd%c%d",
-				'a' + dev_desc->dev, part_num);
+				'a' + dev_desc->devnum, part_num);
 			break;
 		default:
 			sprintf ((char *)info->name, "xx%c%d",
-				'a' + dev_desc->dev, part_num);
+				'a' + dev_desc->devnum, part_num);
 			break;
 	}
 	/* the bootcatalog (including validation Entry) is limited to 2048Bytes
@@ -184,7 +184,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 		else {
 			if(verb)
 				printf ("** Partition %d not found on device %d **\n",
-					part_num,dev_desc->dev);
+					part_num, dev_desc->devnum);
 			return(-1);
 		}
 	}
@@ -192,13 +192,13 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	 * searched w/o succsess */
 	if(verb)
 		printf ("** Partition %d not found on device %d **\n",
-			part_num,dev_desc->dev);
+			part_num, dev_desc->devnum);
 	return(-1);
 found:
 	if(pide->boot_ind!=0x88) {
 		if(verb)
-			printf ("** Partition %d is not bootable on device %d **\n",
-				part_num,dev_desc->dev);
+			printf("** Partition %d is not bootable on device %d **\n",
+			       part_num, dev_desc->devnum);
 		return (-1);
 	}
 	switch(pide->boot_media) {
@@ -229,7 +229,8 @@ static void print_part_iso(struct blk_desc *dev_desc)
 	int i;
 
 	if (part_get_info_iso_verb(dev_desc, 0, &info, 0) == -1) {
-		printf("** No boot partition found on device %d **\n",dev_desc->dev);
+		printf("** No boot partition found on device %d **\n",
+		       dev_desc->devnum);
 		return;
 	}
 	printf("Part   Start     Sect x Size Type\n");
diff --git a/disk/part_mac.c b/disk/part_mac.c
index 6192723..07bbc19 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -108,14 +108,14 @@ static void print_part_mac(struct blk_desc *dev_desc)
 		printf ("%4ld: ", i);
 		if (dev_desc->block_read(dev_desc, i, 1, (ulong *)mpart) != 1) {
 			printf ("** Can't read Partition Map on %d:%ld **\n",
-				dev_desc->dev, i);
+				dev_desc->devnum, i);
 			return;
 		}
 
 		if (mpart->signature != MAC_PARTITION_MAGIC) {
-			printf ("** Bad Signature on %d:%ld - "
-				"expected 0x%04x, got 0x%04x\n",
-				dev_desc->dev, i, MAC_PARTITION_MAGIC, mpart->signature);
+			printf("** Bad Signature on %d:%ld - expected 0x%04x, got 0x%04x\n",
+			       dev_desc->devnum, i, MAC_PARTITION_MAGIC,
+			       mpart->signature);
 			return;
 		}
 
@@ -184,14 +184,14 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 		 */
 		if (dev_desc->block_read(dev_desc, n, 1, (ulong *)pdb_p) != 1) {
 			printf ("** Can't read Partition Map on %d:%d **\n",
-				dev_desc->dev, n);
+				dev_desc->devnum, n);
 			return (-1);
 		}
 
 		if (pdb_p->signature != MAC_PARTITION_MAGIC) {
-			printf ("** Bad Signature on %d:%d: "
-				"expected 0x%04x, got 0x%04x\n",
-				dev_desc->dev, n, MAC_PARTITION_MAGIC, pdb_p->signature);
+			printf("** Bad Signature on %d:%d: expected 0x%04x, got 0x%04x\n",
+			       dev_desc->devnum, n, MAC_PARTITION_MAGIC,
+			       pdb_p->signature);
 			return (-1);
 		}
 
@@ -200,9 +200,9 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 
 		if ((part < 1) || (part > pdb_p->map_count)) {
 			printf ("** Invalid partition %d:%d [%d:1...%d:%d only]\n",
-				dev_desc->dev, part,
-				dev_desc->dev,
-				dev_desc->dev, pdb_p->map_count);
+				dev_desc->devnum, part,
+				dev_desc->devnum,
+				dev_desc->devnum, pdb_p->map_count);
 			return (-1);
 		}
 
diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index 093e133..14d3e38 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -26,7 +26,7 @@ static unsigned long host_block_read(struct blk_desc *block_dev,
 				     unsigned long start, lbaint_t blkcnt,
 				     void *buffer)
 {
-	int dev = block_dev->dev;
+	int dev = block_dev->devnum;
 	struct host_block_dev *host_dev = find_host_device(dev);
 
 	if (!host_dev)
@@ -48,7 +48,7 @@ static unsigned long host_block_write(struct blk_desc *block_dev,
 				      unsigned long start, lbaint_t blkcnt,
 				      const void *buffer)
 {
-	int dev = block_dev->dev;
+	int dev = block_dev->devnum;
 	struct host_block_dev *host_dev = find_host_device(dev);
 	if (os_lseek(host_dev->fd,
 		     start * host_dev->blk_dev.blksz,
@@ -96,7 +96,7 @@ int host_dev_bind(int dev, char *filename)
 	blk_dev->lba = os_lseek(host_dev->fd, 0, OS_SEEK_END) / blk_dev->blksz;
 	blk_dev->block_read = host_block_read;
 	blk_dev->block_write = host_block_write;
-	blk_dev->dev = dev;
+	blk_dev->devnum = dev;
 	blk_dev->part_type = PART_TYPE_UNKNOWN;
 	part_init(blk_dev);
 
diff --git a/drivers/block/systemace.c b/drivers/block/systemace.c
index b921dcd..09fe834 100644
--- a/drivers/block/systemace.c
+++ b/drivers/block/systemace.c
@@ -111,7 +111,7 @@ struct blk_desc *systemace_get_dev(int dev)
 	   not yet initialized. In that case, fill it in. */
 	if (systemace_dev.blksz == 0) {
 		systemace_dev.if_type = IF_TYPE_UNKNOWN;
-		systemace_dev.dev = 0;
+		systemace_dev.devnum = 0;
 		systemace_dev.part_type = PART_TYPE_UNKNOWN;
 		systemace_dev.type = DEV_TYPE_HARDDISK;
 		systemace_dev.blksz = 512;
diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c
index 5ef7ff7..8f2694f 100644
--- a/drivers/mmc/arm_pl180_mmci.c
+++ b/drivers/mmc/arm_pl180_mmci.c
@@ -375,7 +375,7 @@ int arm_pl180_mmci_init(struct pl180_mmc_host *host)
 	if (mmc == NULL)
 		return -1;
 
-	debug("registered mmc interface number is:%d\n", mmc->block_dev.dev);
+	debug("registered mmc interface number is:%d\n", mmc->block_dev.devnum);
 
 	return 0;
 }
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 94afbb1..8b2e606 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -182,7 +182,7 @@ struct mmc *find_mmc_device(int dev_num)
 	list_for_each(entry, &mmc_devices) {
 		m = list_entry(entry, struct mmc, link);
 
-		if (m->block_dev.dev == dev_num)
+		if (m->block_dev.devnum == dev_num)
 			return m;
 	}
 
@@ -237,7 +237,7 @@ static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
 static ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start,
 		       lbaint_t blkcnt, void *dst)
 {
-	int dev_num = block_dev->dev;
+	int dev_num = block_dev->devnum;
 	int err;
 	lbaint_t cur, blocks_todo = blkcnt;
 
@@ -1556,7 +1556,7 @@ struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
 	mmc->dsr = 0xffffffff;
 	/* Setup the universal parts of the block interface just once */
 	mmc->block_dev.if_type = IF_TYPE_MMC;
-	mmc->block_dev.dev = cur_dev_num++;
+	mmc->block_dev.devnum = cur_dev_num++;
 	mmc->block_dev.removable = 1;
 	mmc->block_dev.block_read = mmc_bread;
 	mmc->block_dev.block_write = mmc_bwrite;
@@ -1728,7 +1728,7 @@ void print_mmc_devices(char separator)
 		else
 			mmc_type = NULL;
 
-		printf("%s: %d", m->cfg->name, m->block_dev.dev);
+		printf("%s: %d", m->cfg->name, m->block_dev.devnum);
 		if (mmc_type)
 			printf(" (%s)", mmc_type);
 
diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c
index 54e60db..7b186f8 100644
--- a/drivers/mmc/mmc_write.c
+++ b/drivers/mmc/mmc_write.c
@@ -68,7 +68,7 @@ err_out:
 unsigned long mmc_berase(struct blk_desc *block_dev, lbaint_t start,
 			 lbaint_t blkcnt)
 {
-	int dev_num = block_dev->dev;
+	int dev_num = block_dev->devnum;
 	int err = 0;
 	u32 start_rem, blkcnt_rem;
 	struct mmc *mmc = find_mmc_device(dev_num);
@@ -174,7 +174,7 @@ static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t start,
 ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
 		 const void *src)
 {
-	int dev_num = block_dev->dev;
+	int dev_num = block_dev->devnum;
 	lbaint_t cur, blocks_todo = blkcnt;
 	int err;
 
diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 31fb3ab..9fa87d5 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -142,7 +142,7 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 	uint32_t ctrl0;
 	int ret;
 
-	debug("MMC%d: CMD%d\n", mmc->block_dev.dev, cmd->cmdidx);
+	debug("MMC%d: CMD%d\n", mmc->block_dev.devnum, cmd->cmdidx);
 
 	/* Check bus busy */
 	timeout = MXSMMC_MAX_TIMEOUT;
@@ -157,13 +157,13 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 	}
 
 	if (!timeout) {
-		printf("MMC%d: Bus busy timeout!\n", mmc->block_dev.dev);
+		printf("MMC%d: Bus busy timeout!\n", mmc->block_dev.devnum);
 		return TIMEOUT;
 	}
 
 	/* See if card is present */
 	if (!mxsmmc_cd(priv)) {
-		printf("MMC%d: No card detected!\n", mmc->block_dev.dev);
+		printf("MMC%d: No card detected!\n", mmc->block_dev.devnum);
 		return NO_CARD_ERR;
 	}
 
@@ -200,9 +200,9 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 		if (data->flags & MMC_DATA_READ) {
 			ctrl0 |= SSP_CTRL0_READ;
 		} else if (priv->mmc_is_wp &&
-			priv->mmc_is_wp(mmc->block_dev.dev)) {
+			priv->mmc_is_wp(mmc->block_dev.devnum)) {
 			printf("MMC%d: Can not write a locked card!\n",
-				mmc->block_dev.dev);
+				mmc->block_dev.devnum);
 			return UNUSABLE_ERR;
 		}
 
@@ -243,21 +243,21 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 
 	if (!timeout) {
 		printf("MMC%d: Command %d busy\n",
-			mmc->block_dev.dev, cmd->cmdidx);
+			mmc->block_dev.devnum, cmd->cmdidx);
 		return TIMEOUT;
 	}
 
 	/* Check command timeout */
 	if (reg & SSP_STATUS_RESP_TIMEOUT) {
 		printf("MMC%d: Command %d timeout (status 0x%08x)\n",
-			mmc->block_dev.dev, cmd->cmdidx, reg);
+			mmc->block_dev.devnum, cmd->cmdidx, reg);
 		return TIMEOUT;
 	}
 
 	/* Check command errors */
 	if (reg & (SSP_STATUS_RESP_CRC_ERR | SSP_STATUS_RESP_ERR)) {
 		printf("MMC%d: Command %d error (status 0x%08x)!\n",
-			mmc->block_dev.dev, cmd->cmdidx, reg);
+			mmc->block_dev.devnum, cmd->cmdidx, reg);
 		return COMM_ERR;
 	}
 
@@ -279,14 +279,14 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 		if (ret) {
 			printf("MMC%d: Data timeout with command %d "
 				"(status 0x%08x)!\n",
-				mmc->block_dev.dev, cmd->cmdidx, reg);
+				mmc->block_dev.devnum, cmd->cmdidx, reg);
 			return ret;
 		}
 	} else {
 		ret = mxsmmc_send_cmd_dma(priv, data);
 		if (ret) {
 			printf("MMC%d: DMA transfer failed\n",
-				mmc->block_dev.dev);
+				mmc->block_dev.devnum);
 			return ret;
 		}
 	}
@@ -297,7 +297,7 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
 		(SSP_STATUS_TIMEOUT | SSP_STATUS_DATA_CRC_ERR |
 		SSP_STATUS_FIFO_OVRFLW | SSP_STATUS_FIFO_UNDRFLW)) {
 		printf("MMC%d: Data error with command %d (status 0x%08x)!\n",
-			mmc->block_dev.dev, cmd->cmdidx, reg);
+			mmc->block_dev.devnum, cmd->cmdidx, reg);
 		return COMM_ERR;
 	}
 
@@ -330,7 +330,7 @@ static void mxsmmc_set_ios(struct mmc *mmc)
 			SSP_CTRL0_BUS_WIDTH_MASK, priv->buswidth);
 
 	debug("MMC%d: Set %d bits bus width\n",
-		mmc->block_dev.dev, mmc->bus_width);
+		mmc->block_dev.devnum, mmc->bus_width);
 }
 
 static int mxsmmc_init(struct mmc *mmc)
diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index 5038a9f..5f2db3b 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -177,11 +177,11 @@ static unsigned char mmc_board_init(struct mmc *mmc)
 
 #if defined(CONFIG_OMAP44XX) && defined(CONFIG_TWL6030_POWER)
 	/* PBIAS config needed for MMC1 only */
-	if (mmc->block_dev.dev == 0)
+	if (mmc->block_dev.devnum == 0)
 		omap4_vmmc_pbias_config(mmc);
 #endif
 #if defined(CONFIG_OMAP54XX) && defined(CONFIG_PALMAS_POWER)
-	if (mmc->block_dev.dev == 0)
+	if (mmc->block_dev.devnum == 0)
 		omap5_pbias_config(mmc);
 #endif
 
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 8586d89..ef7e615 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -137,7 +137,7 @@ static int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
 	int trans_bytes = 0, is_aligned = 1;
 	u32 mask, flags, mode;
 	unsigned int time = 0, start_addr = 0;
-	int mmc_dev = mmc->block_dev.dev;
+	int mmc_dev = mmc->block_dev.devnum;
 	unsigned start = get_timer(0);
 
 	/* Timeout unit - ms */
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 47f077d..f87ddd7 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -100,7 +100,7 @@ int fat_register_device(struct blk_desc *dev_desc, int part_no)
 	if (part_get_info(dev_desc, part_no, &info)) {
 		if (part_no != 0) {
 			printf("** Partition %d not valid on device %d **\n",
-					part_no, dev_desc->dev);
+					part_no, dev_desc->devnum);
 			return -1;
 		}
 
@@ -1284,7 +1284,7 @@ int file_fat_detectfs(void)
 		printf("Unknown");
 	}
 
-	printf("\n  Device %d: ", cur_dev->dev);
+	printf("\n  Device %d: ", cur_dev->devnum);
 	dev_print(cur_dev);
 #endif
 
diff --git a/include/blk.h b/include/blk.h
index 9ba7a62..b6173cb 100644
--- a/include/blk.h
+++ b/include/blk.h
@@ -36,7 +36,7 @@ enum if_type_t {
 
 struct blk_desc {
 	enum if_type_t	if_type;	/* type of the interface */
-	int		dev;		/* device number */
+	int		devnum;		/* device number */
 	unsigned char	part_type;	/* partition type */
 	unsigned char	target;		/* target SCSI ID */
 	unsigned char	lun;		/* target LUN */
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (17 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 14:51   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 20/30] dm: usb: Avoid exceeding available array size for storage devices Simon Glass
                   ` (12 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

To ease conversion to driver model, add helper functions which deal with
calling each block device method. With driver model we can reimplement these
functions with the same arguments.

Use inline functions to avoid increasing code size on some boards.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 cmd/disk.c            |  6 +++---
 cmd/ide.c             |  4 ++--
 cmd/read.c            |  2 +-
 cmd/usb.c             |  6 ++----
 common/fb_mmc.c       |  5 +++--
 disk/part_amiga.c     |  9 ++++-----
 disk/part_dos.c       |  8 +++-----
 disk/part_efi.c       | 34 +++++++++++++++-------------------
 disk/part_iso.c       |  6 +++---
 disk/part_mac.c       |  9 ++++-----
 fs/ext4/dev.c         | 23 ++++++++++-------------
 fs/ext4/ext4_common.c | 27 +++++++++------------------
 fs/fat/fat.c          |  6 +++---
 fs/fat/fat_write.c    |  5 ++---
 include/blk.h         | 29 +++++++++++++++++++++++++++++
 test/dm/usb.c         |  2 +-
 16 files changed, 94 insertions(+), 87 deletions(-)

diff --git a/cmd/disk.c b/cmd/disk.c
index 27ed115..e0219f8 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -56,7 +56,7 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
 	      ", Block Size: %ld\n",
 	      info.start, info.size, info.blksz);
 
-	if (dev_desc->block_read(dev_desc, info.start, 1, (ulong *)addr) != 1) {
+	if (blk_dread(dev_desc, info.start, 1, (ulong *)addr) != 1) {
 		printf("** Read error on %d:%d\n", dev, part);
 		bootstage_error(BOOTSTAGE_ID_IDE_PART_READ);
 		return 1;
@@ -100,8 +100,8 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc,
 	cnt /= info.blksz;
 	cnt -= 1;
 
-	if (dev_desc->block_read(dev_desc, info.start + 1, cnt,
-				 (ulong *)(addr + info.blksz)) != cnt) {
+	if (blk_dread(dev_desc, info.start + 1, cnt,
+		      (ulong *)(addr + info.blksz)) != cnt) {
 		printf("** Read error on %d:%d\n", dev, part);
 		bootstage_error(BOOTSTAGE_ID_IDE_READ);
 		return 1;
diff --git a/cmd/ide.c b/cmd/ide.c
index dfd5548..c4c08c8 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <blk.h>
 #include <config.h>
 #include <watchdog.h>
 #include <command.h>
@@ -203,8 +204,7 @@ int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 #endif
 
 			dev_desc = &ide_dev_desc[curr_device];
-			n = dev_desc->block_read(dev_desc, blk, cnt,
-						 (ulong *)addr);
+			n = blk_dread(dev_desc, blk, cnt, (ulong *)addr);
 			/* flush cache after read */
 			flush_cache(addr,
 				    cnt * ide_dev_desc[curr_device].blksz);
diff --git a/cmd/read.c b/cmd/read.c
index f8d766a..61d8ce7 100644
--- a/cmd/read.c
+++ b/cmd/read.c
@@ -66,7 +66,7 @@ int do_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return 1;
 	}
 
-	if (dev_desc->block_read(dev_desc, offset + blk, cnt, addr) < 0) {
+	if (blk_read(dev_desc, offset + blk, cnt, addr) < 0) {
 		printf("Error reading blocks\n");
 		return 1;
 	}
diff --git a/cmd/usb.c b/cmd/usb.c
index 53fd6ad..9ed5dc6 100644
--- a/cmd/usb.c
+++ b/cmd/usb.c
@@ -759,8 +759,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			printf("\nUSB read: device %d block # %ld, count %ld"
 				" ... ", usb_stor_curr_dev, blk, cnt);
 			stor_dev = usb_stor_get_dev(usb_stor_curr_dev);
-			n = stor_dev->block_read(stor_dev, blk, cnt,
-						 (ulong *)addr);
+			n = blk_dread(stor_dev, blk, cnt, (ulong *)addr);
 			printf("%ld blocks read: %s\n", n,
 				(n == cnt) ? "OK" : "ERROR");
 			if (n == cnt)
@@ -781,8 +780,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 			printf("\nUSB write: device %d block # %ld, count %ld"
 				" ... ", usb_stor_curr_dev, blk, cnt);
 			stor_dev = usb_stor_get_dev(usb_stor_curr_dev);
-			n = stor_dev->block_write(stor_dev, blk, cnt,
-						(ulong *)addr);
+			n = blk_dwrite(stor_dev, blk, cnt, (ulong *)addr);
 			printf("%ld blocks write: %s\n", n,
 				(n == cnt) ? "OK" : "ERROR");
 			if (n == cnt)
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index da7949f..e3abcc8 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -6,6 +6,7 @@
 
 #include <config.h>
 #include <common.h>
+#include <blk.h>
 #include <errno.h>
 #include <fastboot.h>
 #include <fb_mmc.h>
@@ -58,7 +59,7 @@ static int fb_mmc_sparse_write(struct sparse_storage *storage,
 	struct blk_desc *dev_desc = sparse->dev_desc;
 	int ret;
 
-	ret = dev_desc->block_write(dev_desc, offset, size, data);
+	ret = blk_dwrite(dev_desc, offset, size, data);
 	if (!ret)
 		return -EIO;
 
@@ -84,7 +85,7 @@ static void write_raw_image(struct blk_desc *dev_desc, disk_partition_t *info,
 
 	puts("Flashing Raw Image\n");
 
-	blks = dev_desc->block_write(dev_desc, info->start, blkcnt, buffer);
+	blks = blk_dwrite(dev_desc, info->start, blkcnt, buffer);
 	if (blks != blkcnt) {
 		error("failed writing to device %d\n", dev_desc->devnum);
 		fastboot_fail(response_str, "failed writing to device");
diff --git a/disk/part_amiga.c b/disk/part_amiga.c
index d323b4b..4a67689 100644
--- a/disk/part_amiga.c
+++ b/disk/part_amiga.c
@@ -140,7 +140,7 @@ struct rigid_disk_block *get_rdisk(struct blk_desc *dev_desc)
 
     for (i=0; i<limit; i++)
     {
-	ulong res = dev_desc->block_read(dev_desc, i, 1, (ulong *)block_buffer);
+	ulong res = blk_dread(dev_desc, i, 1, (ulong *)block_buffer);
 	if (res == 1)
 	{
 	    struct rigid_disk_block *trdb = (struct rigid_disk_block *)block_buffer;
@@ -182,7 +182,7 @@ struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
 
     for (i = 0; i < limit; i++)
     {
-	ulong res = dev_desc->block_read(dev_desc, i, 1, (ulong *)block_buffer);
+	ulong res = blk_dread(dev_desc, i, 1, (ulong *)block_buffer);
 	if (res == 1)
 	{
 	    struct bootcode_block *boot = (struct bootcode_block *)block_buffer;
@@ -258,8 +258,7 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
 
     while (block != 0xFFFFFFFF)
     {
-	ulong res = dev_desc->block_read(dev_desc, block, 1,
-					 (ulong *)block_buffer);
+	ulong res = blk_dread(dev_desc, block, 1, (ulong *)block_buffer);
 	if (res == 1)
 	{
 	    p = (struct partition_block *)block_buffer;
@@ -355,7 +354,7 @@ static void print_part_amiga(struct blk_desc *dev_desc)
 
 	PRINTF("Trying to load block #0x%X\n", block);
 
-	res = dev_desc->block_read(dev_desc, block, 1, (ulong *)block_buffer);
+	res = blk_dread(dev_desc, block, 1, (ulong *)block_buffer);
 	if (res == 1)
 	{
 	    p = (struct partition_block *)block_buffer;
diff --git a/disk/part_dos.c b/disk/part_dos.c
index 5f8d949..0ed1374 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -91,7 +91,7 @@ static int test_part_dos(struct blk_desc *dev_desc)
 {
 	ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
 
-	if (dev_desc->block_read(dev_desc, 0, 1, (ulong *)buffer) != 1)
+	if (blk_dread(dev_desc, 0, 1, (ulong *)buffer) != 1)
 		return -1;
 
 	if (test_block_type(buffer) != DOS_MBR)
@@ -111,8 +111,7 @@ static void print_partition_extended(struct blk_desc *dev_desc,
 	dos_partition_t *pt;
 	int i;
 
-	if (dev_desc->block_read(dev_desc, ext_part_sector, 1,
-				 (ulong *)buffer) != 1) {
+	if (blk_dread(dev_desc, ext_part_sector, 1, (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->devnum, ext_part_sector);
 		return;
@@ -177,8 +176,7 @@ static int part_get_info_extended(struct blk_desc *dev_desc,
 	int i;
 	int dos_type;
 
-	if (dev_desc->block_read(dev_desc, ext_part_sector, 1,
-				 (ulong *)buffer) != 1) {
+	if (blk_dread(dev_desc, ext_part_sector, 1, (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->devnum, ext_part_sector);
 		return -1;
diff --git a/disk/part_efi.c b/disk/part_efi.c
index bdcddd4..ccc5915 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -324,7 +324,7 @@ static int test_part_efi(struct blk_desc *dev_desc)
 	ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
 
 	/* Read legacy MBR from block 0 and validate it */
-	if ((dev_desc->block_read(dev_desc, 0, 1, (ulong *)legacymbr) != 1)
+	if ((blk_dread(dev_desc, 0, 1, (ulong *)legacymbr) != 1)
 		|| (is_pmbr_valid(legacymbr) != 1)) {
 		return -1;
 	}
@@ -354,7 +354,7 @@ static int set_protective_mbr(struct blk_desc *dev_desc)
 	p_mbr->partition_record[0].nr_sects = (u32) dev_desc->lba - 1;
 
 	/* Write MBR sector to the MMC device */
-	if (dev_desc->block_write(dev_desc, 0, 1, p_mbr) != 1) {
+	if (blk_dwrite(dev_desc, 0, 1, p_mbr) != 1) {
 		printf("** Can't write to device %d **\n",
 			dev_desc->devnum);
 		return -1;
@@ -386,24 +386,21 @@ int write_gpt_table(struct blk_desc *dev_desc,
 	gpt_h->header_crc32 = cpu_to_le32(calc_crc32);
 
 	/* Write the First GPT to the block right after the Legacy MBR */
-	if (dev_desc->block_write(dev_desc, 1, 1, gpt_h) != 1)
+	if (blk_dwrite(dev_desc, 1, 1, gpt_h) != 1)
 		goto err;
 
-	if (dev_desc->block_write(dev_desc, 2, pte_blk_cnt, gpt_e)
+	if (blk_dwrite(dev_desc, 2, pte_blk_cnt, gpt_e)
 	    != pte_blk_cnt)
 		goto err;
 
 	prepare_backup_gpt_header(gpt_h);
 
-	if (dev_desc->block_write(dev_desc,
-				  (lbaint_t)le64_to_cpu(gpt_h->last_usable_lba)
-				  + 1,
-				  pte_blk_cnt, gpt_e) != pte_blk_cnt)
+	if (blk_dwrite(dev_desc, (lbaint_t)le64_to_cpu(gpt_h->last_usable_lba)
+		       + 1, pte_blk_cnt, gpt_e) != pte_blk_cnt)
 		goto err;
 
-	if (dev_desc->block_write(dev_desc,
-				  (lbaint_t)le64_to_cpu(gpt_h->my_lba), 1,
-				  gpt_h) != 1)
+	if (blk_dwrite(dev_desc, (lbaint_t)le64_to_cpu(gpt_h->my_lba), 1,
+		       gpt_h) != 1)
 		goto err;
 
 	debug("GPT successfully written to block device!\n");
@@ -739,7 +736,7 @@ int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 	/* write MBR */
 	lba = 0;	/* MBR is always at 0 */
 	cnt = 1;	/* MBR (1 block) */
-	if (dev_desc->block_write(dev_desc, lba, cnt, buf) != cnt) {
+	if (blk_dwrite(dev_desc, lba, cnt, buf) != cnt) {
 		printf("%s: failed writing '%s' (%d blks at 0x" LBAF ")\n",
 		       __func__, "MBR", cnt, lba);
 		return 1;
@@ -748,7 +745,7 @@ int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 	/* write Primary GPT */
 	lba = GPT_PRIMARY_PARTITION_TABLE_LBA;
 	cnt = 1;	/* GPT Header (1 block) */
-	if (dev_desc->block_write(dev_desc, lba, cnt, gpt_h) != cnt) {
+	if (blk_dwrite(dev_desc, lba, cnt, gpt_h) != cnt) {
 		printf("%s: failed writing '%s' (%d blks at 0x" LBAF ")\n",
 		       __func__, "Primary GPT Header", cnt, lba);
 		return 1;
@@ -756,7 +753,7 @@ int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 
 	lba = le64_to_cpu(gpt_h->partition_entry_lba);
 	cnt = gpt_e_blk_cnt;
-	if (dev_desc->block_write(dev_desc, lba, cnt, gpt_e) != cnt) {
+	if (blk_dwrite(dev_desc, lba, cnt, gpt_e) != cnt) {
 		printf("%s: failed writing '%s' (%d blks at 0x" LBAF ")\n",
 		       __func__, "Primary GPT Entries", cnt, lba);
 		return 1;
@@ -767,7 +764,7 @@ int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 	/* write Backup GPT */
 	lba = le64_to_cpu(gpt_h->partition_entry_lba);
 	cnt = gpt_e_blk_cnt;
-	if (dev_desc->block_write(dev_desc, lba, cnt, gpt_e) != cnt) {
+	if (blk_dwrite(dev_desc, lba, cnt, gpt_e) != cnt) {
 		printf("%s: failed writing '%s' (%d blks at 0x" LBAF ")\n",
 		       __func__, "Backup GPT Entries", cnt, lba);
 		return 1;
@@ -775,7 +772,7 @@ int write_mbr_and_gpt_partitions(struct blk_desc *dev_desc, void *buf)
 
 	lba = le64_to_cpu(gpt_h->my_lba);
 	cnt = 1;	/* GPT Header (1 block) */
-	if (dev_desc->block_write(dev_desc, lba, cnt, gpt_h) != cnt) {
+	if (blk_dwrite(dev_desc, lba, cnt, gpt_h) != cnt) {
 		printf("%s: failed writing '%s' (%d blks at 0x" LBAF ")\n",
 		       __func__, "Backup GPT Header", cnt, lba);
 		return 1;
@@ -845,7 +842,7 @@ static int is_gpt_valid(struct blk_desc *dev_desc, u64 lba,
 	}
 
 	/* Read GPT Header from device */
-	if (dev_desc->block_read(dev_desc, (lbaint_t)lba, 1, pgpt_head) != 1) {
+	if (blk_dread(dev_desc, (lbaint_t)lba, 1, pgpt_head) != 1) {
 		printf("*** ERROR: Can't read GPT header ***\n");
 		return 0;
 	}
@@ -913,8 +910,7 @@ static gpt_entry *alloc_read_gpt_entries(struct blk_desc *dev_desc,
 	/* Read GPT Entries from device */
 	blk = le64_to_cpu(pgpt_head->partition_entry_lba);
 	blk_cnt = BLOCK_CNT(count, dev_desc);
-	if (dev_desc->block_read(dev_desc, blk, (lbaint_t)blk_cnt, pte)
-	    != blk_cnt) {
+	if (blk_dread(dev_desc, blk, (lbaint_t)blk_cnt, pte) != blk_cnt) {
 		printf("*** ERROR: Can't read GPT Entries ***\n");
 		free(pte);
 		return NULL;
diff --git a/disk/part_iso.c b/disk/part_iso.c
index c78ae21..76eab39 100644
--- a/disk/part_iso.c
+++ b/disk/part_iso.c
@@ -63,7 +63,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 
 	/* the first sector (sector 0x10) must be a primary volume desc */
 	blkaddr=PVD_OFFSET;
-	if (dev_desc->block_read(dev_desc, PVD_OFFSET, 1, (ulong *)tmpbuf) != 1)
+	if (blk_dread(dev_desc, PVD_OFFSET, 1, (ulong *)tmpbuf) != 1)
 		return -1;
 	if(ppr->desctype!=0x01) {
 		if(verb)
@@ -85,7 +85,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	PRINTF(" Lastsect:%08lx\n",lastsect);
 	for(i=blkaddr;i<lastsect;i++) {
 		PRINTF("Reading block %d\n", i);
-		if (dev_desc->block_read(dev_desc, i, 1, (ulong *)tmpbuf) != 1)
+		if (blk_dread(dev_desc, i, 1, (ulong *)tmpbuf) != 1)
 			return -1;
 		if(ppr->desctype==0x00)
 			break; /* boot entry found */
@@ -105,7 +105,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
 	}
 	bootaddr=le32_to_int(pbr->pointer);
 	PRINTF(" Boot Entry at: %08lX\n",bootaddr);
-	if (dev_desc->block_read(dev_desc, bootaddr, 1, (ulong *)tmpbuf) != 1) {
+	if (blk_dread(dev_desc, bootaddr, 1, (ulong *)tmpbuf) != 1) {
 		if(verb)
 			printf ("** Can't read Boot Entry at %lX on %d:%d **\n",
 				bootaddr, dev_desc->devnum, part_num);
diff --git a/disk/part_mac.c b/disk/part_mac.c
index 07bbc19..ce57b57 100644
--- a/disk/part_mac.c
+++ b/disk/part_mac.c
@@ -53,8 +53,7 @@ static int test_part_mac(struct blk_desc *dev_desc)
 
 	n = 1;	/* assuming at least one partition */
 	for (i=1; i<=n; ++i) {
-		if ((dev_desc->block_read(dev_desc, i, 1,
-					  (ulong *)mpart) != 1) ||
+		if ((blk_dread(dev_desc, i, 1, (ulong *)mpart) != 1) ||
 		    (mpart->signature != MAC_PARTITION_MAGIC) ) {
 			return (-1);
 		}
@@ -106,7 +105,7 @@ static void print_part_mac(struct blk_desc *dev_desc)
 		char c;
 
 		printf ("%4ld: ", i);
-		if (dev_desc->block_read(dev_desc, i, 1, (ulong *)mpart) != 1) {
+		if (blk_dread(dev_desc, i, 1, (ulong *)mpart) != 1) {
 			printf ("** Can't read Partition Map on %d:%ld **\n",
 				dev_desc->devnum, i);
 			return;
@@ -153,7 +152,7 @@ static void print_part_mac(struct blk_desc *dev_desc)
 static int part_mac_read_ddb(struct blk_desc *dev_desc,
 			     mac_driver_desc_t *ddb_p)
 {
-	if (dev_desc->block_read(dev_desc, 0, 1, (ulong *)ddb_p) != 1) {
+	if (blk_dread(dev_desc, 0, 1, (ulong *)ddb_p) != 1) {
 		printf ("** Can't read Driver Desriptor Block **\n");
 		return (-1);
 	}
@@ -182,7 +181,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
 		 * partition 1 first since this is the only way to
 		 * know how many partitions we have.
 		 */
-		if (dev_desc->block_read(dev_desc, n, 1, (ulong *)pdb_p) != 1) {
+		if (blk_dread(dev_desc, n, 1, (ulong *)pdb_p) != 1) {
 			printf ("** Can't read Partition Map on %d:%d **\n",
 				dev_desc->devnum, n);
 			return (-1);
diff --git a/fs/ext4/dev.c b/fs/ext4/dev.c
index 3eef66f..ee84d3f 100644
--- a/fs/ext4/dev.c
+++ b/fs/ext4/dev.c
@@ -24,6 +24,7 @@
  */
 
 #include <common.h>
+#include <blk.h>
 #include <config.h>
 #include <memalign.h>
 #include <ext4fs.h>
@@ -76,9 +77,8 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 	if (byte_offset != 0) {
 		int readlen;
 		/* read first part which isn't aligned with start of sector */
-		if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
-						part_info->start + sector,
-						1, (void *)sec_buf) != 1) {
+		if (blk_dread(ext4fs_blk_desc, part_info->start + sector, 1,
+			      (void *)sec_buf) != 1) {
 			printf(" ** ext2fs_devread() read error **\n");
 			return 0;
 		}
@@ -100,17 +100,15 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 		ALLOC_CACHE_ALIGN_BUFFER(u8, p, ext4fs_blk_desc->blksz);
 
 		block_len = ext4fs_blk_desc->blksz;
-		ext4fs_blk_desc->block_read(ext4fs_blk_desc,
-						  part_info->start + sector,
-						  1, (void *)p);
+		blk_dread(ext4fs_blk_desc, part_info->start + sector, 1,
+			  (void *)p);
 		memcpy(buf, p, byte_len);
 		return 1;
 	}
 
-	if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
-					part_info->start + sector,
-					block_len >> log2blksz, (void *)buf)
-				!= block_len >> log2blksz) {
+	if (blk_dread(ext4fs_blk_desc, part_info->start + sector,
+		      block_len >> log2blksz, (void *)buf) !=
+			block_len >> log2blksz) {
 		printf(" ** %s read error - block\n", __func__);
 		return 0;
 	}
@@ -121,9 +119,8 @@ int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf)
 
 	if (byte_len != 0) {
 		/* read rest of data which are not in whole sector */
-		if (ext4fs_blk_desc->block_read(ext4fs_blk_desc,
-						part_info->start + sector,
-						1, (void *)sec_buf) != 1) {
+		if (blk_dread(ext4fs_blk_desc, part_info->start + sector, 1,
+			      (void *)sec_buf) != 1) {
 			printf("* %s read error - last part\n", __func__);
 			return 0;
 		}
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 294a46e..84fba76 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -81,29 +81,20 @@ void put_ext4(uint64_t off, void *buf, uint32_t size)
 	}
 
 	if (remainder) {
-		if (fs->dev_desc->block_read) {
-			fs->dev_desc->block_read(fs->dev_desc,
-						 startblock, 1, sec_buf);
-			temp_ptr = sec_buf;
-			memcpy((temp_ptr + remainder),
-			       (unsigned char *)buf, size);
-			fs->dev_desc->block_write(fs->dev_desc,
-						  startblock, 1, sec_buf);
-		}
+		blk_dread(fs->dev_desc, startblock, 1, sec_buf);
+		temp_ptr = sec_buf;
+		memcpy((temp_ptr + remainder), (unsigned char *)buf, size);
+		blk_dwrite(fs->dev_desc, startblock, 1, sec_buf);
 	} else {
 		if (size >> log2blksz != 0) {
-			fs->dev_desc->block_write(fs->dev_desc,
-						  startblock,
-						  size >> log2blksz,
-						  (unsigned long *)buf);
+			blk_dwrite(fs->dev_desc, startblock, size >> log2blksz,
+				   (unsigned long *)buf);
 		} else {
-			fs->dev_desc->block_read(fs->dev_desc,
-						 startblock, 1, sec_buf);
+			blk_dread(fs->dev_desc, startblock, 1, sec_buf);
 			temp_ptr = sec_buf;
 			memcpy(temp_ptr, buf, size);
-			fs->dev_desc->block_write(fs->dev_desc,
-						  startblock, 1,
-						  (unsigned long *)sec_buf);
+			blk_dwrite(fs->dev_desc, startblock, 1,
+				   (unsigned long *)sec_buf);
 		}
 	}
 }
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index f87ddd7..600a90e 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <blk.h>
 #include <config.h>
 #include <exports.h>
 #include <fat.h>
@@ -48,11 +49,10 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
 {
 	ulong ret;
 
-	if (!cur_dev || !cur_dev->block_read)
+	if (!cur_dev)
 		return -1;
 
-	ret = cur_dev->block_read(cur_dev, cur_part_info.start + block,
-				  nr_blocks, buf);
+	ret = blk_dread(cur_dev, cur_part_info.start + block, nr_blocks, buf);
 
 	if (nr_blocks && ret == 0)
 		return -1;
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index 5ed324c..baa85ec 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -32,7 +32,7 @@ static int disk_write(__u32 block, __u32 nr_blocks, void *buf)
 {
 	ulong ret;
 
-	if (!cur_dev || !cur_dev->block_write)
+	if (!cur_dev)
 		return -1;
 
 	if (cur_part_info.start + block + nr_blocks >
@@ -41,8 +41,7 @@ static int disk_write(__u32 block, __u32 nr_blocks, void *buf)
 		return -1;
 	}
 
-	ret = cur_dev->block_write(cur_dev, cur_part_info.start + block,
-				   nr_blocks, buf);
+	ret = blk_dwrite(cur_dev, cur_part_info.start + block, nr_blocks, buf);
 	if (nr_blocks && ret == 0)
 		return -1;
 
diff --git a/include/blk.h b/include/blk.h
index b6173cb..8b4861b 100644
--- a/include/blk.h
+++ b/include/blk.h
@@ -71,4 +71,33 @@ struct blk_desc {
 #define PAD_TO_BLOCKSIZE(size, blk_desc) \
 	(PAD_SIZE(size, blk_desc->blksz))
 
+/*
+ * These functions should take struct udevice instead of struct blk_desc,
+ * but this is convenient for migration to driver model. Add a 'd' prefix
+ * to the function operations, so that blk_read(), etc. can be reserved for
+ * functions with the correct arguments.
+ */
+static inline ulong blk_dread(struct blk_desc *block_dev, lbaint_t start,
+			      lbaint_t blkcnt, void *buffer)
+{
+	/*
+	 * We could check if block_read is NULL and return -ENOSYS. But this
+	 * bloats the code slightly (cause some board to fail to build), and
+	 * it would be an error to try an operation that does not exist.
+	 */
+	return block_dev->block_read(block_dev, start, blkcnt, buffer);
+}
+
+static inline ulong blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
+			       lbaint_t blkcnt, const void *buffer)
+{
+	return block_dev->block_write(block_dev, start, blkcnt, buffer);
+}
+
+static inline ulong blk_derase(struct blk_desc *block_dev, lbaint_t start,
+			       lbaint_t blkcnt)
+{
+	return block_dev->block_erase(block_dev, start, blkcnt);
+}
+
 #endif
diff --git a/test/dm/usb.c b/test/dm/usb.c
index 1df25b1..5531606 100644
--- a/test/dm/usb.c
+++ b/test/dm/usb.c
@@ -50,7 +50,7 @@ static int dm_test_usb_flash(struct unit_test_state *uts)
 	/* Read a few blocks and look for the string we expect */
 	ut_asserteq(512, dev_desc->blksz);
 	memset(cmp, '\0', sizeof(cmp));
-	ut_asserteq(2, dev_desc->block_read(dev_desc, 0, 2, cmp));
+	ut_asserteq(2, blk_dread(dev_desc, 0, 2, cmp));
 	ut_assertok(strcmp(cmp, "this is a test"));
 
 	return 0;
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 20/30] dm: usb: Avoid exceeding available array size for storage devices
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (18 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 21/30] dm: usb: Tidy up storage code ready for driver model conversion Simon Glass
                   ` (11 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The limit on storage devices is USB_MAX_STOR_DEV but we use one extra
element while probing to see if a device is a storage device. Avoid this,
since it causes memory corruption.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 common/usb_storage.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/common/usb_storage.c b/common/usb_storage.c
index 60531e2..f2d2ad9 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -176,6 +176,13 @@ static int usb_stor_probe_device(struct usb_device *dev)
 	if (dev == NULL)
 		return -ENOENT; /* no more devices available */
 
+	/* We don't have space to even probe if we hit the maximum */
+	if (usb_max_devs == USB_MAX_STOR_DEV) {
+		printf("max USB Storage Device reached: %d stopping\n",
+		       usb_max_devs);
+		return -ENOSPC;
+	}
+
 	debug("\n\nProbing for storage\n");
 	if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
 		/* OK, it's a storage device.  Iterate over its LUNs
@@ -210,13 +217,6 @@ static int usb_stor_probe_device(struct usb_device *dev)
 		}
 	}
 
-	/* if storage device */
-	if (usb_max_devs == USB_MAX_STOR_DEV) {
-		printf("max USB Storage Device reached: %d stopping\n",
-		       usb_max_devs);
-		return -ENOSPC;
-	}
-
 	return 0;
 }
 
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 21/30] dm: usb: Tidy up storage code ready for driver model conversion
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (19 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 20/30] dm: usb: Avoid exceeding available array size for storage devices Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass Simon Glass
                   ` (10 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Adjust a few things so that the addition of driver-models support involved
adding code rather than also changing it. This makes the patches easier to
review.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 common/usb_storage.c | 117 +++++++++++++++++++++++++++------------------------
 1 file changed, 61 insertions(+), 56 deletions(-)

diff --git a/common/usb_storage.c b/common/usb_storage.c
index f2d2ad9..0475123 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -142,6 +142,7 @@ static void usb_show_progress(void)
  */
 int usb_stor_info(void)
 {
+	int count = 0;
 	int i;
 
 	if (usb_max_devs > 0) {
@@ -152,7 +153,11 @@ int usb_stor_info(void)
 		return 0;
 	}
 
-	printf("No storage devices, perhaps not 'usb start'ed..?\n");
+	if (!count) {
+		printf("No storage devices, perhaps not 'usb start'ed..?\n");
+		return 1;
+	}
+
 	return 1;
 }
 
@@ -171,9 +176,12 @@ static unsigned int usb_get_max_lun(struct us_data *us)
 	return (len > 0) ? *result : 0;
 }
 
-static int usb_stor_probe_device(struct usb_device *dev)
+static int usb_stor_probe_device(struct usb_device *udev)
 {
-	if (dev == NULL)
+	int lun, max_lun;
+	int start;
+
+	if (udev == NULL)
 		return -ENOENT; /* no more devices available */
 
 	/* We don't have space to even probe if we hit the maximum */
@@ -184,36 +192,36 @@ static int usb_stor_probe_device(struct usb_device *dev)
 	}
 
 	debug("\n\nProbing for storage\n");
-	if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
-		/* OK, it's a storage device.  Iterate over its LUNs
-			* and populate `usb_dev_desc'.
-			*/
-		int lun, max_lun, start = usb_max_devs;
-
-		max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
-		for (lun = 0;
-			lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV;
-			lun++) {
-			struct blk_desc *blkdev;
-
-			blkdev = &usb_dev_desc[usb_max_devs];
-			memset(blkdev, '\0', sizeof(struct blk_desc));
-			blkdev->if_type = IF_TYPE_USB;
-			blkdev->devnum = usb_max_devs;
-			blkdev->part_type = PART_TYPE_UNKNOWN;
-			blkdev->target = 0xff;
-			blkdev->type = DEV_TYPE_UNKNOWN;
-			blkdev->block_read = usb_stor_read;
-			blkdev->block_write = usb_stor_write;
-			blkdev->lun = lun;
-			blkdev->priv = dev;
-
-			if (usb_stor_get_info(dev, &usb_stor[start],
-					      &usb_dev_desc[usb_max_devs]) ==
-					      1) {
-				usb_max_devs++;
-				debug("%s: Found device %p\n", __func__, dev);
-			}
+	if (!usb_storage_probe(udev, 0, &usb_stor[usb_max_devs]))
+		return 0;
+
+	/*
+	 * OK, it's a storage device.  Iterate over its LUNs and populate
+	 * usb_dev_desc'
+	 */
+	start = usb_max_devs;
+
+	max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
+	for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV;
+	     lun++) {
+		struct blk_desc *blkdev;
+
+		blkdev = &usb_dev_desc[usb_max_devs];
+		memset(blkdev, '\0', sizeof(struct blk_desc));
+		blkdev->if_type = IF_TYPE_USB;
+		blkdev->devnum = usb_max_devs;
+		blkdev->part_type = PART_TYPE_UNKNOWN;
+		blkdev->target = 0xff;
+		blkdev->type = DEV_TYPE_UNKNOWN;
+		blkdev->block_read = usb_stor_read;
+		blkdev->block_write = usb_stor_write;
+		blkdev->lun = lun;
+		blkdev->priv = udev;
+
+		if (usb_stor_get_info(udev, &usb_stor[start],
+				      &usb_dev_desc[usb_max_devs]) == 1) {
+			usb_max_devs++;
+			debug("%s: Found device %p\n", __func__, udev);
 		}
 	}
 
@@ -1029,36 +1037,33 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer)
 {
-	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks;
-	struct usb_device *dev;
+	struct usb_device *udev;
 	struct us_data *ss;
 	int retry;
 	ccb *srb = &usb_ccb;
 
 	if (blkcnt == 0)
 		return 0;
-
-	device &= 0xff;
 	/* Setup  device */
-	debug("\nusb_read: dev %d\n", device);
-	dev = usb_dev_desc[device].priv;
-	if (!dev) {
+	debug("\nusb_read: udev %d\n", block_dev->devnum);
+	udev = usb_dev_desc[block_dev->devnum].priv;
+	if (!udev) {
 		debug("%s: No device\n", __func__);
 		return 0;
 	}
-	ss = (struct us_data *)dev->privptr;
+	ss = (struct us_data *)udev->privptr;
 
 	usb_disable_asynch(1); /* asynch transfer not allowed */
-	srb->lun = usb_dev_desc[device].lun;
+	srb->lun = block_dev->lun;
 	buf_addr = (uintptr_t)buffer;
 	start = blknr;
 	blks = blkcnt;
 
-	debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF
-	      " buffer %" PRIxPTR "\n", device, start, blks, buf_addr);
+	debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF " buffer %"
+	      PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr);
 
 	do {
 		/* XXX need some comment here */
@@ -1071,7 +1076,7 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 retry_it:
 		if (smallblks == USB_MAX_XFER_BLK)
 			usb_show_progress();
-		srb->datalen = usb_dev_desc[device].blksz * smallblks;
+		srb->datalen = block_dev->blksz * smallblks;
 		srb->pdata = (unsigned char *)buf_addr;
 		if (usb_read_10(srb, ss, start, smallblks)) {
 			debug("Read ERROR\n");
@@ -1100,11 +1105,10 @@ retry_it:
 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer)
 {
-	int device = block_dev->devnum;
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
 	unsigned short smallblks;
-	struct usb_device *dev;
+	struct usb_device *udev;
 	struct us_data *ss;
 	int retry;
 	ccb *srb = &usb_ccb;
@@ -1112,23 +1116,24 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 	if (blkcnt == 0)
 		return 0;
 
-	device &= 0xff;
 	/* Setup  device */
-	debug("\nusb_write: dev %d\n", device);
-	dev = usb_dev_desc[device].priv;
-	if (!dev)
+	debug("\nusb_read: udev %d\n", block_dev->devnum);
+	udev = usb_dev_desc[block_dev->devnum].priv;
+	if (!udev) {
+		debug("%s: No device\n", __func__);
 		return 0;
-	ss = (struct us_data *)dev->privptr;
+	}
+	ss = (struct us_data *)udev->privptr;
 
 	usb_disable_asynch(1); /* asynch transfer not allowed */
 
-	srb->lun = usb_dev_desc[device].lun;
+	srb->lun = block_dev->lun;
 	buf_addr = (uintptr_t)buffer;
 	start = blknr;
 	blks = blkcnt;
 
-	debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF
-	      " buffer %" PRIxPTR "\n", device, start, blks, buf_addr);
+	debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF " buffer %"
+	      PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr);
 
 	do {
 		/* If write fails retry for max retry count else
@@ -1143,7 +1148,7 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 retry_it:
 		if (smallblks == USB_MAX_XFER_BLK)
 			usb_show_progress();
-		srb->datalen = usb_dev_desc[device].blksz * smallblks;
+		srb->datalen = block_dev->blksz * smallblks;
 		srb->pdata = (unsigned char *)buf_addr;
 		if (usb_write_10(srb, ss, start, smallblks)) {
 			debug("Write ERROR\n");
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (20 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 21/30] dm: usb: Tidy up storage code ready for driver model conversion Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-17  4:49   ` Bin Meng
  2016-02-15  2:16 ` [U-Boot] [PATCH 23/30] dm: sandbox: Prepare block driver for driver-model conversion Simon Glass
                   ` (9 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Add a uclass for block devices. These provide block-oriented data access,
supporting reading, writing and erasing of whole blocks.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/block/Kconfig      |  11 +++
 drivers/block/Makefile     |   2 +
 drivers/block/blk-uclass.c | 175 +++++++++++++++++++++++++++++++++++++++++++++
 include/blk.h              | 145 +++++++++++++++++++++++++++++++++++++
 include/dm/uclass-id.h     |   1 +
 5 files changed, 334 insertions(+)
 create mode 100644 drivers/block/blk-uclass.c

diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index 990f768..f35c4d4 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -1,3 +1,14 @@
+config BLK
+	bool "Support block devices"
+	depends on DM
+	help
+	  Enable support for block devices, such as SCSI, MMC and USB
+	  flash sticks. These provide a block-level interface which permits
+	  reading, writing and (in some cases) erasing blocks. Block
+	  devices often have a partition table which allows the device to
+	  be partitioned into several areas, called 'partitions' in U-Boot.
+	  A filesystem can be placed in each partition.
+
 config DISK
 	bool "Support disk controllers with driver model"
 	depends on DM
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index 5eb87e0..b5c7ae1 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -5,6 +5,8 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
+obj-$(CONFIG_BLK) += blk-uclass.o
+
 obj-$(CONFIG_DISK) += disk-uclass.o
 obj-$(CONFIG_SCSI_AHCI) += ahci.o
 obj-$(CONFIG_DWC_AHSATA) += dwc_ahsata.o
diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
new file mode 100644
index 0000000..49df2a6
--- /dev/null
+++ b/drivers/block/blk-uclass.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2016 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <blk.h>
+#include <dm.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
+
+int blk_first_device(int if_type, struct udevice **devp)
+{
+	struct blk_desc *desc;
+	int ret;
+
+	ret = uclass_first_device(UCLASS_BLK, devp);
+	if (ret)
+		return ret;
+	if (!*devp)
+		return -ENODEV;
+	do {
+		desc = dev_get_uclass_platdata(*devp);
+		if (desc->if_type == if_type)
+			return 0;
+		ret = uclass_next_device(devp);
+		if (ret)
+			return ret;
+	} while (*devp);
+
+	return -ENODEV;
+}
+
+int blk_next_device(struct udevice **devp)
+{
+	struct blk_desc *desc;
+	int ret, if_type;
+
+	desc = dev_get_uclass_platdata(*devp);
+	if_type = desc->if_type;
+	do {
+		ret = uclass_next_device(devp);
+		if (ret)
+			return ret;
+		if (!*devp)
+			return -ENODEV;
+		desc = dev_get_uclass_platdata(*devp);
+		if (desc->if_type == if_type)
+			return 0;
+	} while (1);
+}
+
+int blk_get_device(int if_type, int devnum, struct udevice **devp)
+{
+	struct uclass *uc;
+	struct udevice *dev;
+	int ret;
+
+	ret = uclass_get(UCLASS_BLK, &uc);
+	if (ret)
+		return ret;
+	uclass_foreach_dev(dev, uc) {
+		struct blk_desc *desc = dev_get_uclass_platdata(dev);
+
+		debug("%s: if_type=%d, devnum=%d: %s, %d, %d\n", __func__,
+		      if_type, devnum, dev->name, desc->if_type, desc->devnum);
+		if (desc->if_type == if_type && desc->devnum == devnum) {
+			*devp = dev;
+			return device_probe(dev);
+		}
+	}
+
+	return -ENODEV;
+}
+
+unsigned long blk_dread(struct blk_desc *block_dev, lbaint_t start,
+			lbaint_t blkcnt, void *buffer)
+{
+	struct udevice *dev = block_dev->bdev;
+	const struct blk_ops *ops = blk_get_ops(dev);
+
+	if (!ops->read)
+		return -ENOSYS;
+
+	return ops->read(dev, start, blkcnt, buffer);
+}
+
+unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
+			 lbaint_t blkcnt, const void *buffer)
+{
+	struct udevice *dev = block_dev->bdev;
+	const struct blk_ops *ops = blk_get_ops(dev);
+
+	if (!ops->write)
+		return -ENOSYS;
+
+	return ops->write(dev, start, blkcnt, buffer);
+}
+
+unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
+			 lbaint_t blkcnt)
+{
+	struct udevice *dev = block_dev->bdev;
+	const struct blk_ops *ops = blk_get_ops(dev);
+
+	if (!ops->erase)
+		return -ENOSYS;
+
+	return ops->erase(dev, start, blkcnt);
+}
+
+int blk_prepare_device(struct udevice *dev)
+{
+	struct blk_desc *desc = dev_get_uclass_platdata(dev);
+
+	part_init(desc);
+
+	return 0;
+}
+
+int blk_create_device(struct udevice *parent, const char *drv_name,
+		      const char *name, int if_type, int devnum, int blksz,
+		      lbaint_t size, struct udevice **devp)
+{
+	struct blk_desc *desc;
+	struct udevice *dev;
+	int ret;
+
+	ret = device_bind_driver(parent, drv_name, name, &dev);
+	if (ret)
+		return ret;
+	desc = dev_get_uclass_platdata(dev);
+	desc->if_type = if_type;
+	desc->blksz = blksz;
+	desc->lba = size / blksz;
+	desc->part_type = PART_TYPE_UNKNOWN;
+	desc->bdev = dev;
+	desc->devnum = devnum;
+	*devp = dev;
+
+	return 0;
+}
+
+int blk_unbind_all(int if_type)
+{
+	struct uclass *uc;
+	struct udevice *dev, *next;
+	int ret;
+
+	ret = uclass_get(UCLASS_BLK, &uc);
+	if (ret)
+		return ret;
+	uclass_foreach_dev_safe(dev, next, uc) {
+		struct blk_desc *desc = dev_get_uclass_platdata(dev);
+
+		if (desc->if_type == if_type) {
+			ret = device_remove(dev);
+			if (ret)
+				return ret;
+			ret = device_unbind(dev);
+			if (ret)
+				return ret;
+		}
+	}
+
+	return 0;
+}
+
+UCLASS_DRIVER(blk) = {
+	.id		= UCLASS_BLK,
+	.name		= "blk",
+	.per_device_platdata_auto_alloc_size = sizeof(struct blk_desc),
+};
diff --git a/include/blk.h b/include/blk.h
index 8b4861b..9d6918b 100644
--- a/include/blk.h
+++ b/include/blk.h
@@ -34,7 +34,15 @@ enum if_type_t {
 	IF_TYPE_COUNT,			/* Number of interface types */
 };
 
+/*
+ * With driver model (CONFIG_BLK) this is uclass platform data, accessible
+ * with dev_get_uclass_platdata(dev)
+ */
 struct blk_desc {
+	/*
+	 * TODO: With driver model we should be able to use the parent
+	 * device's uclass instead.
+	 */
 	enum if_type_t	if_type;	/* type of the interface */
 	int		devnum;		/* device number */
 	unsigned char	part_type;	/* partition type */
@@ -53,6 +61,9 @@ struct blk_desc {
 	char		vendor[40+1];	/* IDE model, SCSI Vendor */
 	char		product[20+1];	/* IDE Serial no, SCSI product */
 	char		revision[8+1];	/* firmware revision */
+#ifdef CONFIG_BLK
+	struct udevice *bdev;
+#else
 	unsigned long	(*block_read)(struct blk_desc *block_dev,
 				      lbaint_t start,
 				      lbaint_t blkcnt,
@@ -65,12 +76,145 @@ struct blk_desc {
 				       lbaint_t start,
 				       lbaint_t blkcnt);
 	void		*priv;		/* driver private struct pointer */
+#endif
 };
 
 #define BLOCK_CNT(size, blk_desc) (PAD_COUNT(size, blk_desc->blksz))
 #define PAD_TO_BLOCKSIZE(size, blk_desc) \
 	(PAD_SIZE(size, blk_desc->blksz))
 
+#ifdef CONFIG_BLK
+struct udevice;
+
+/* Operations on block devices */
+struct blk_ops {
+	/**
+	 * read() - read from a block device
+	 *
+	 * @dev:	Device to read from
+	 * @start:	Start block number to read (0=first)
+	 * @blkcnt:	Number of blocks to read
+	 * @buffer:	Destination buffer for data read
+	 * @return number of blocks read, or -ve error number (see the
+	 * IS_ERR_VALUE() macro
+	 */
+	unsigned long (*read)(struct udevice *dev, lbaint_t start,
+			      lbaint_t blkcnt, void *buffer);
+
+	/**
+	 * write() - write to a block device
+	 *
+	 * @dev:	Device to write to
+	 * @start:	Start block number to write (0=first)
+	 * @blkcnt:	Number of blocks to write
+	 * @buffer:	Source buffer for data to write
+	 * @return number of blocks written, or -ve error number (see the
+	 * IS_ERR_VALUE() macro
+	 */
+	unsigned long (*write)(struct udevice *dev, lbaint_t start,
+			       lbaint_t blkcnt, const void *buffer);
+
+	/**
+	 * erase() - erase a section of a block device
+	 *
+	 * @dev:	Device to (partially) erase
+	 * @start:	Start block number to erase (0=first)
+	 * @blkcnt:	Number of blocks to erase
+	 * @return number of blocks erased, or -ve error number (see the
+	 * IS_ERR_VALUE() macro
+	 */
+	unsigned long (*erase)(struct udevice *dev, lbaint_t start,
+			       lbaint_t blkcnt);
+};
+
+#define blk_get_ops(dev)	((struct blk_ops *)(dev)->driver->ops)
+
+/*
+ * These functions should take struct udevice instead of struct blk_desc,
+ * but this is convenient for migration to driver model. Add a 'd' prefix
+ * to the function operations, so that blk_read(), etc. can be reserved for
+ * functions with the correct arguments.
+ */
+unsigned long blk_dread(struct blk_desc *block_dev, lbaint_t start,
+			lbaint_t blkcnt, void *buffer);
+unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
+			 lbaint_t blkcnt, const void *buffer);
+unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
+			 lbaint_t blkcnt);
+
+/**
+ * blk_get_device() - Find and probe a block device ready for use
+ *
+ * @if_type:	Interface type (enum if_type_t)
+ * @devnum:	Device number (specific to each interface type)
+ * @devp:	the device, if found
+ * @return - if found, -ENODEV if no device found, or other -ve error value
+ */
+int blk_get_device(int if_type, int devnum, struct udevice **devp);
+
+/**
+ * blk_first_device() - Find the first device for a given interface
+ *
+ * The device is probed ready for use
+ *
+ * @devnum:	Device number (specific to each interface type)
+ * @devp:	the device, if found
+ * @return 0 if found, -ENODEV if no device, or other -ve error value
+ */
+int blk_first_device(int if_type, struct udevice **devp);
+
+/**
+ * blk_next_device() - Find the next device for a given interface
+ *
+ * This can be called repeatedly after blk_first_device() to iterate through
+ * all devices of the given interface type.
+ *
+ * The device is probed ready for use
+ *
+ * @devp:	On entry, the previous device returned. On exit, the next
+ *		device, if found
+ * @return 0 if found, -ENODEV if no device, or other -ve error value
+ */
+int blk_next_device(struct udevice **devp);
+
+/**
+ * blk_create_device() - Create a new block device
+ *
+ * @parent:	Parent of the new device
+ * @drv_name:	Driver name to use for the block device
+ * @name:	Name for the device
+ * @if_type:	Interface type (enum if_type_t)
+ * @devnum:	Device number, specific to the interface type
+ * @blksz:	Block size of the device in bytes (typically 512)
+ * @size:	Total size of the device in bytes
+ * @devp:	the new device (which has not been probed)
+ */
+int blk_create_device(struct udevice *parent, const char *drv_name,
+		      const char *name, int if_type, int devnum, int blksz,
+		      lbaint_t size, struct udevice **devp);
+
+/**
+ * blk_prepare_device() - Prepare a block device for use
+ *
+ * This reads partition information from the device if supported.
+ *
+ * @dev:	Device to prepare
+ * @return 0 if ok, -ve on error
+ */
+int blk_prepare_device(struct udevice *dev);
+
+/**
+ * blk_unbind_all() - Unbind all device of the given interface type
+ *
+ * The devices are removed and then unbound.
+ *
+ * @if_type:	Interface type to unbind
+ * @return 0 if OK, -ve on error
+ */
+int blk_unbind_all(int if_type);
+
+#else
+#include <errno.h>
 /*
  * These functions should take struct udevice instead of struct blk_desc,
  * but this is convenient for migration to driver model. Add a 'd' prefix
@@ -99,5 +243,6 @@ static inline ulong blk_derase(struct blk_desc *block_dev, lbaint_t start,
 {
 	return block_dev->block_erase(block_dev, start, blkcnt);
 }
+#endif /* !CONFIG_BLK */
 
 #endif
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 73cd3ac..096fd38 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -26,6 +26,7 @@ enum uclass_id {
 
 	/* U-Boot uclasses start here - in alphabetical order */
 	UCLASS_ADC,		/* Analog-to-digital converter */
+	UCLASS_BLK,		/* Block device */
 	UCLASS_CLK,		/* Clock source, e.g. used by peripherals */
 	UCLASS_CPU,		/* CPU, typically part of an SoC */
 	UCLASS_CROS_EC,		/* Chrome OS EC */
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 23/30] dm: sandbox: Prepare block driver for driver-model conversion
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (21 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox Simon Glass
                   ` (8 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Make a few minor changes to make it easier to add driver-model support.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/block/sandbox.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index 14d3e38..dde9d68 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -31,16 +31,15 @@ static unsigned long host_block_read(struct blk_desc *block_dev,
 
 	if (!host_dev)
 		return -1;
-	if (os_lseek(host_dev->fd,
-		     start * host_dev->blk_dev.blksz,
-		     OS_SEEK_SET) == -1) {
-		printf("ERROR: Invalid position\n");
+
+	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
+			-1) {
+		printf("ERROR: Invalid block %lx\n", start);
 		return -1;
 	}
-	ssize_t len = os_read(host_dev->fd, buffer,
-			      blkcnt * host_dev->blk_dev.blksz);
+	ssize_t len = os_read(host_dev->fd, buffer, blkcnt * block_dev->blksz);
 	if (len >= 0)
-		return len / host_dev->blk_dev.blksz;
+		return len / block_dev->blksz;
 	return -1;
 }
 
@@ -50,16 +49,15 @@ static unsigned long host_block_write(struct blk_desc *block_dev,
 {
 	int dev = block_dev->devnum;
 	struct host_block_dev *host_dev = find_host_device(dev);
-	if (os_lseek(host_dev->fd,
-		     start * host_dev->blk_dev.blksz,
-		     OS_SEEK_SET) == -1) {
-		printf("ERROR: Invalid position\n");
+
+	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
+			-1) {
+		printf("ERROR: Invalid block %lx\n", start);
 		return -1;
 	}
-	ssize_t len = os_write(host_dev->fd, buffer, blkcnt *
-			       host_dev->blk_dev.blksz);
+	ssize_t len = os_write(host_dev->fd, buffer, blkcnt * block_dev->blksz);
 	if (len >= 0)
-		return len / host_dev->blk_dev.blksz;
+		return len / block_dev->blksz;
 	return -1;
 }
 
@@ -103,9 +101,9 @@ int host_dev_bind(int dev, char *filename)
 	return 0;
 }
 
-int host_get_dev_err(int dev, struct blk_desc **blk_devp)
+int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 {
-	struct host_block_dev *host_dev = find_host_device(dev);
+	struct host_block_dev *host_dev = find_host_device(devnum);
 
 	if (!host_dev)
 		return -ENODEV;
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (22 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 23/30] dm: sandbox: Prepare block driver for driver-model conversion Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-16 23:34   ` Stephen Warren
  2016-02-15  2:16 ` [U-Boot] [PATCH 25/30] dm: usb: Convert USB storage to use driver-model for block devs Simon Glass
                   ` (7 subsequent siblings)
  31 siblings, 1 reply; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Update the host driver to support driver model for block devices. A future
commit will remove the old code, but for now it is useful to be able to use
it both with and without CONFIG_BLK.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 cmd/host.c                |   9 +++-
 drivers/block/sandbox.c   | 118 +++++++++++++++++++++++++++++++++++++++++++++-
 include/sandboxblockdev.h |   2 +
 3 files changed, 127 insertions(+), 2 deletions(-)

diff --git a/cmd/host.c b/cmd/host.c
index ee219ce..8d84415 100644
--- a/cmd/host.c
+++ b/cmd/host.c
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <dm.h>
 #include <fs.h>
 #include <part.h>
 #include <sandboxblockdev.h>
@@ -80,7 +81,13 @@ static int do_host_info(cmd_tbl_t *cmdtp, int flag, int argc,
 
 			continue;
 		}
-		struct host_block_dev *host_dev = blk_dev->priv;
+		struct host_block_dev *host_dev;
+
+#ifdef CONFIG_BLK
+		host_dev = dev_get_priv(blk_dev->bdev);
+#else
+		host_dev = blk_dev->priv;
+#endif
 		printf("%12lu %s\n", (unsigned long)blk_dev->lba,
 		       host_dev->filename);
 	}
diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index dde9d68..f5a8688 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -4,14 +4,20 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
-#include <config.h>
 #include <common.h>
+#include <blk.h>
+#include <dm.h>
+#include <fdtdec.h>
 #include <part.h>
 #include <os.h>
 #include <malloc.h>
 #include <sandboxblockdev.h>
 #include <asm/errno.h>
+#include <dm/device-internal.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifndef CONFIG_BLK
 static struct host_block_dev host_devices[CONFIG_HOST_MAX_DEVICES];
 
 static struct host_block_dev *find_host_device(int dev)
@@ -21,7 +27,17 @@ static struct host_block_dev *find_host_device(int dev)
 
 	return NULL;
 }
+#endif
+
+#ifdef CONFIG_BLK
+static unsigned long host_block_read(struct udevice *dev,
+				     unsigned long start, lbaint_t blkcnt,
+				     void *buffer)
+{
+	struct host_block_dev *host_dev = dev_get_priv(dev);
+	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
 
+#else
 static unsigned long host_block_read(struct blk_desc *block_dev,
 				     unsigned long start, lbaint_t blkcnt,
 				     void *buffer)
@@ -31,6 +47,7 @@ static unsigned long host_block_read(struct blk_desc *block_dev,
 
 	if (!host_dev)
 		return -1;
+#endif
 
 	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
 			-1) {
@@ -43,12 +60,21 @@ static unsigned long host_block_read(struct blk_desc *block_dev,
 	return -1;
 }
 
+#ifdef CONFIG_BLK
+static unsigned long host_block_write(struct udevice *dev,
+				      unsigned long start, lbaint_t blkcnt,
+				      const void *buffer)
+{
+	struct host_block_dev *host_dev = dev_get_priv(dev);
+	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
+#else
 static unsigned long host_block_write(struct blk_desc *block_dev,
 				      unsigned long start, lbaint_t blkcnt,
 				      const void *buffer)
 {
 	int dev = block_dev->devnum;
 	struct host_block_dev *host_dev = find_host_device(dev);
+#endif
 
 	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
 			-1) {
@@ -61,6 +87,70 @@ static unsigned long host_block_write(struct blk_desc *block_dev,
 	return -1;
 }
 
+#ifdef CONFIG_BLK
+int host_dev_bind(int devnum, char *filename)
+{
+	struct host_block_dev *host_dev;
+	struct udevice *dev;
+	char dev_name[20], *str, *fname;
+	int ret, fd;
+
+	/* Remove and unbind the old device, if any */
+	ret = blk_get_device(IF_TYPE_HOST, devnum, &dev);
+	if (ret == 0) {
+		ret = device_remove(dev);
+		if (ret)
+			return ret;
+		ret = device_unbind(dev);
+		if (ret)
+			return ret;
+	} else if (ret != -ENODEV) {
+		return ret;
+	}
+
+	if (!filename)
+		return 0;
+
+	sprintf(dev_name, "host%d", devnum);
+	str = strdup(dev_name);
+	if (!str)
+		return -ENOMEM;
+	fname = strdup(filename);
+	if (!fname) {
+		free(str);
+		return -ENOMEM;
+	}
+
+	fd = os_open(filename, OS_O_RDWR);
+	if (fd == -1) {
+		printf("Failed to access host backing file '%s'\n", filename);
+		ret = -ENOENT;
+		goto err;
+	}
+	ret = blk_create_device(gd->dm_root, "sandbox_host_blk", str,
+				IF_TYPE_HOST, devnum, 512,
+				os_lseek(fd, 0, OS_SEEK_END), &dev);
+	if (ret)
+		goto err_file;
+	ret = device_probe(dev);
+	if (ret) {
+		device_unbind(dev);
+		goto err_file;
+	}
+
+	host_dev = dev_get_priv(dev);
+	host_dev->fd = fd;
+	host_dev->filename = fname;
+
+	return blk_prepare_device(dev);
+err_file:
+	os_close(fd);
+err:
+	free(fname);
+	free(str);
+	return ret;
+}
+#else
 int host_dev_bind(int dev, char *filename)
 {
 	struct host_block_dev *host_dev = find_host_device(dev);
@@ -100,9 +190,19 @@ int host_dev_bind(int dev, char *filename)
 
 	return 0;
 }
+#endif
 
 int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 {
+#ifdef CONFIG_BLK
+	struct udevice *dev;
+	int ret;
+
+	ret = blk_get_device(IF_TYPE_HOST, devnum, &dev);
+	if (ret)
+		return ret;
+	*blk_devp = dev_get_uclass_platdata(dev);
+#else
 	struct host_block_dev *host_dev = find_host_device(devnum);
 
 	if (!host_dev)
@@ -112,6 +212,8 @@ int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 		return -ENOENT;
 
 	*blk_devp = &host_dev->blk_dev;
+#endif
+
 	return 0;
 }
 
@@ -124,3 +226,17 @@ struct blk_desc *host_get_dev(int dev)
 
 	return blk_dev;
 }
+
+#ifdef CONFIG_BLK
+static const struct blk_ops sandbox_host_blk_ops = {
+	.read	= host_block_read,
+	.write	= host_block_write,
+};
+
+U_BOOT_DRIVER(sandbox_host_blk) = {
+	.name		= "sandbox_host_blk",
+	.id		= UCLASS_BLK,
+	.ops		= &sandbox_host_blk_ops,
+	.priv_auto_alloc_size	= sizeof(struct host_block_dev),
+};
+#endif
diff --git a/include/sandboxblockdev.h b/include/sandboxblockdev.h
index 59f9519..5174f45 100644
--- a/include/sandboxblockdev.h
+++ b/include/sandboxblockdev.h
@@ -8,7 +8,9 @@
 #define __SANDBOX_BLOCK_DEV__
 
 struct host_block_dev {
+#ifndef CONFIG_BLK
 	struct blk_desc blk_dev;
+#endif
 	char *filename;
 	int fd;
 };
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 25/30] dm: usb: Convert USB storage to use driver-model for block devs
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (23 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 26/30] dm: usb: Unbind old block devices when shutting down USB Simon Glass
                   ` (6 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Update this code to support CONFIG_BLK. Each USB storage device can have
one or more block devices as children, each one representing a LUN
(logical unit) of the USB device.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 common/usb_storage.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 135 insertions(+), 6 deletions(-)

diff --git a/common/usb_storage.c b/common/usb_storage.c
index 0475123..1472824 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -43,6 +43,7 @@
 #include <asm/byteorder.h>
 #include <asm/processor.h>
 #include <dm/device-internal.h>
+#include <dm/lists.h>
 
 #include <part.h>
 #include <usb.h>
@@ -67,7 +68,9 @@ static __u32 CBWTag;
 
 static int usb_max_devs; /* number of highest available usb device */
 
+#ifndef CONFIG_BLK
 static struct blk_desc usb_dev_desc[USB_MAX_STOR_DEV];
+#endif
 
 struct us_data;
 typedef int (*trans_cmnd)(ccb *cb, struct us_data *data);
@@ -108,7 +111,9 @@ struct us_data {
 #define USB_MAX_XFER_BLK	20
 #endif
 
+#ifndef CONFIG_BLK
 static struct us_data usb_stor[USB_MAX_STOR_DEV];
+#endif
 
 #define USB_STOR_TRANSPORT_GOOD	   0
 #define USB_STOR_TRANSPORT_FAILED -1
@@ -118,16 +123,33 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *us,
 		      struct blk_desc *dev_desc);
 int usb_storage_probe(struct usb_device *dev, unsigned int ifnum,
 		      struct us_data *ss);
+#ifdef CONFIG_BLK
+static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr,
+				   lbaint_t blkcnt, void *buffer);
+static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr,
+				    lbaint_t blkcnt, const void *buffer);
+#else
 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer);
 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer);
+#endif
 void uhci_show_temp_int_td(void);
 
 #ifdef CONFIG_PARTITIONS
 struct blk_desc *usb_stor_get_dev(int index)
 {
+#ifdef CONFIG_BLK
+	struct udevice *dev;
+	int ret;
+
+	ret = blk_get_device(IF_TYPE_USB, index, &dev);
+	if (ret)
+		return NULL;
+	return dev_get_uclass_platdata(dev);
+#else
 	return (index < usb_max_devs) ? &usb_dev_desc[index] : NULL;
+#endif
 }
 #endif
 
@@ -143,6 +165,19 @@ static void usb_show_progress(void)
 int usb_stor_info(void)
 {
 	int count = 0;
+#ifdef CONFIG_BLK
+	struct udevice *dev;
+
+	for (blk_first_device(IF_TYPE_USB, &dev);
+	     dev;
+	     blk_next_device(&dev)) {
+		struct blk_desc *desc = dev_get_uclass_platdata(dev);
+
+		printf("  Device %d: ", desc->devnum);
+		dev_print(desc);
+		count++;
+	}
+#else
 	int i;
 
 	if (usb_max_devs > 0) {
@@ -152,7 +187,7 @@ int usb_stor_info(void)
 		}
 		return 0;
 	}
-
+#endif
 	if (!count) {
 		printf("No storage devices, perhaps not 'usb start'ed..?\n");
 		return 1;
@@ -179,11 +214,63 @@ static unsigned int usb_get_max_lun(struct us_data *us)
 static int usb_stor_probe_device(struct usb_device *udev)
 {
 	int lun, max_lun;
+
+#ifdef CONFIG_BLK
+	struct us_data *data;
+	char dev_name[30], *str;
+	int ret;
+#else
 	int start;
 
 	if (udev == NULL)
 		return -ENOENT; /* no more devices available */
+#endif
+
+	debug("\n\nProbing for storage\n");
+#ifdef CONFIG_BLK
+	/*
+	 * We store the us_data in the mass storage device's platdata. It
+	 * is shared by all LUNs (block devices) attached to this mass storage
+	 * device.
+	 */
+	data = dev_get_platdata(udev->dev);
+	if (!usb_storage_probe(udev, 0, data))
+		return 0;
+	max_lun = usb_get_max_lun(data);
+	for (lun = 0; lun <= max_lun; lun++) {
+		struct blk_desc *blkdev;
+		struct udevice *dev;
+
+		snprintf(dev_name, sizeof(dev_name), "%s.lun%d",
+			 udev->dev->name, lun);
+		str = strdup(dev_name);
+		if (!str)
+			return -ENOMEM;
+		ret = blk_create_device(udev->dev, "usb_storage_blk", str,
+				IF_TYPE_USB, usb_max_devs, 512, 0, &dev);
+		if (ret) {
+			debug("Cannot bind driver\n");
+			return ret;
+		}
+
+		blkdev = dev_get_uclass_platdata(dev);
+		blkdev->target = 0xff;
+		blkdev->lun = lun;
 
+		ret = usb_stor_get_info(udev, data, blkdev);
+		if (ret == 1)
+			ret = blk_prepare_device(dev);
+		if (!ret) {
+			usb_max_devs++;
+			debug("%s: Found device %p\n", __func__, udev);
+		} else {
+			debug("usb_stor_get_info: Invalid device\n");
+			ret = device_unbind(dev);
+			if (ret)
+				return ret;
+		}
+	}
+#else
 	/* We don't have space to even probe if we hit the maximum */
 	if (usb_max_devs == USB_MAX_STOR_DEV) {
 		printf("max USB Storage Device reached: %d stopping\n",
@@ -191,7 +278,6 @@ static int usb_stor_probe_device(struct usb_device *udev)
 		return -ENOSPC;
 	}
 
-	debug("\n\nProbing for storage\n");
 	if (!usb_storage_probe(udev, 0, &usb_stor[usb_max_devs]))
 		return 0;
 
@@ -220,10 +306,14 @@ static int usb_stor_probe_device(struct usb_device *udev)
 
 		if (usb_stor_get_info(udev, &usb_stor[start],
 				      &usb_dev_desc[usb_max_devs]) == 1) {
+			debug("partype: %d\n", blkdev->part_type);
+			part_init(blkdev);
+			debug("partype: %d\n", blkdev->part_type);
 			usb_max_devs++;
 			debug("%s: Found device %p\n", __func__, udev);
 		}
 	}
+#endif
 
 	return 0;
 }
@@ -1034,8 +1124,13 @@ static void usb_bin_fixup(struct usb_device_descriptor descriptor,
 }
 #endif /* CONFIG_USB_BIN_FIXUP */
 
+#ifdef CONFIG_BLK
+static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr,
+				   lbaint_t blkcnt, void *buffer)
+#else
 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 				   lbaint_t blkcnt, void *buffer)
+#endif
 {
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
@@ -1044,16 +1139,25 @@ static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr,
 	struct us_data *ss;
 	int retry;
 	ccb *srb = &usb_ccb;
+#ifdef CONFIG_BLK
+	struct blk_desc *block_dev;
+#endif
 
 	if (blkcnt == 0)
 		return 0;
 	/* Setup  device */
+#ifdef CONFIG_BLK
+	block_dev = dev_get_uclass_platdata(dev);
+	udev = dev_get_parent_priv(dev_get_parent(dev));
+	debug("\nusb_read: udev %d\n", block_dev->devnum);
+#else
 	debug("\nusb_read: udev %d\n", block_dev->devnum);
 	udev = usb_dev_desc[block_dev->devnum].priv;
 	if (!udev) {
 		debug("%s: No device\n", __func__);
 		return 0;
 	}
+#endif
 	ss = (struct us_data *)udev->privptr;
 
 	usb_disable_asynch(1); /* asynch transfer not allowed */
@@ -1102,8 +1206,13 @@ retry_it:
 	return blkcnt;
 }
 
+#ifdef CONFIG_BLK
+static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr,
+				    lbaint_t blkcnt, const void *buffer)
+#else
 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 				    lbaint_t blkcnt, const void *buffer)
+#endif
 {
 	lbaint_t start, blks;
 	uintptr_t buf_addr;
@@ -1112,17 +1221,26 @@ static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr,
 	struct us_data *ss;
 	int retry;
 	ccb *srb = &usb_ccb;
+#ifdef CONFIG_BLK
+	struct blk_desc *block_dev;
+#endif
 
 	if (blkcnt == 0)
 		return 0;
 
 	/* Setup  device */
+#ifdef CONFIG_BLK
+	block_dev = dev_get_uclass_platdata(dev);
+	udev = dev_get_parent_priv(dev_get_parent(dev));
+	debug("\nusb_read: udev %d\n", block_dev->devnum);
+#else
 	debug("\nusb_read: udev %d\n", block_dev->devnum);
 	udev = usb_dev_desc[block_dev->devnum].priv;
 	if (!udev) {
 		debug("%s: No device\n", __func__);
 		return 0;
 	}
+#endif
 	ss = (struct us_data *)udev->privptr;
 
 	usb_disable_asynch(1); /* asynch transfer not allowed */
@@ -1377,11 +1495,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
 	dev_desc->log2blksz = LOG2(dev_desc->blksz);
 	dev_desc->type = perq;
 	debug(" address %d\n", dev_desc->target);
-	debug("partype: %d\n", dev_desc->part_type);
-
-	part_init(dev_desc);
 
-	debug("partype: %d\n", dev_desc->part_type);
 	return 1;
 }
 
@@ -1409,6 +1523,9 @@ U_BOOT_DRIVER(usb_mass_storage) = {
 	.id	= UCLASS_MASS_STORAGE,
 	.of_match = usb_mass_storage_ids,
 	.probe = usb_mass_storage_probe,
+#ifdef CONFIG_BLK
+	.platdata_auto_alloc_size	= sizeof(struct us_data),
+#endif
 };
 
 UCLASS_DRIVER(usb_mass_storage) = {
@@ -1425,5 +1542,17 @@ static const struct usb_device_id mass_storage_id_table[] = {
 };
 
 U_BOOT_USB_DEVICE(usb_mass_storage, mass_storage_id_table);
+#endif
 
+#ifdef CONFIG_BLK
+static const struct blk_ops usb_storage_ops = {
+	.read	= usb_stor_read,
+	.write	= usb_stor_write,
+};
+
+U_BOOT_DRIVER(usb_storage_blk) = {
+	.name		= "usb_storage_blk",
+	.id		= UCLASS_BLK,
+	.ops		= &usb_storage_ops,
+};
 #endif
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 26/30] dm: usb: Unbind old block devices when shutting down USB
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (24 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 25/30] dm: usb: Convert USB storage to use driver-model for block devs Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 27/30] dm: sandbox: Switch over to use DM for block devices Simon Glass
                   ` (5 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

We don't want old block devices hanging around since they can still appear
visible in some way.

Possibly we should unbind all devices which don't cause problems by being
unbound. Most likely we can remove everything except USB controllers, hubs
and emulators. We can consider that later.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/usb/host/usb-uclass.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/host/usb-uclass.c b/drivers/usb/host/usb-uclass.c
index 50538e0..69c9a50 100644
--- a/drivers/usb/host/usb-uclass.c
+++ b/drivers/usb/host/usb-uclass.c
@@ -159,7 +159,11 @@ int usb_stop(void)
 		if (ret && !err)
 			err = ret;
 	}
-
+#ifdef CONFIG_BLK
+	ret = blk_unbind_all(IF_TYPE_USB);
+	if (ret && !err)
+		err = ret;
+#endif
 #ifdef CONFIG_SANDBOX
 	struct udevice *dev;
 
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 27/30] dm: sandbox: Switch over to use DM for block devices
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (25 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 26/30] dm: usb: Unbind old block devices when shutting down USB Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 28/30] dm: sandbox: Drop the pre-DM host implementation Simon Glass
                   ` (4 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Now that the drivers used by sandbox support CONFIG_BLK, we can switch
sandbox over to use driver model for block devices.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 configs/sandbox_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 02534bf..d69c9fc 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -28,6 +28,7 @@ CONFIG_SPL_SYSCON=y
 CONFIG_DEVRES=y
 CONFIG_ADC=y
 CONFIG_ADC_SANDBOX=y
+CONFIG_BLK=y
 CONFIG_CLK=y
 CONFIG_SANDBOX_GPIO=y
 CONFIG_SYS_I2C_SANDBOX=y
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 28/30] dm: sandbox: Drop the pre-DM host implementation
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (26 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 27/30] dm: sandbox: Switch over to use DM for block devices Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 29/30] dm: usb: Clean up USB after each test Simon Glass
                   ` (3 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Driver model is used for host device block devices now, so we don't need the
old code. Remove it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/block/sandbox.c | 90 -------------------------------------------------
 1 file changed, 90 deletions(-)

diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index f5a8688..d33518c 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -17,19 +17,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#ifndef CONFIG_BLK
-static struct host_block_dev host_devices[CONFIG_HOST_MAX_DEVICES];
-
-static struct host_block_dev *find_host_device(int dev)
-{
-	if (dev >= 0 && dev < CONFIG_HOST_MAX_DEVICES)
-		return &host_devices[dev];
-
-	return NULL;
-}
-#endif
-
-#ifdef CONFIG_BLK
 static unsigned long host_block_read(struct udevice *dev,
 				     unsigned long start, lbaint_t blkcnt,
 				     void *buffer)
@@ -37,18 +24,6 @@ static unsigned long host_block_read(struct udevice *dev,
 	struct host_block_dev *host_dev = dev_get_priv(dev);
 	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
 
-#else
-static unsigned long host_block_read(struct blk_desc *block_dev,
-				     unsigned long start, lbaint_t blkcnt,
-				     void *buffer)
-{
-	int dev = block_dev->devnum;
-	struct host_block_dev *host_dev = find_host_device(dev);
-
-	if (!host_dev)
-		return -1;
-#endif
-
 	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
 			-1) {
 		printf("ERROR: Invalid block %lx\n", start);
@@ -60,21 +35,12 @@ static unsigned long host_block_read(struct blk_desc *block_dev,
 	return -1;
 }
 
-#ifdef CONFIG_BLK
 static unsigned long host_block_write(struct udevice *dev,
 				      unsigned long start, lbaint_t blkcnt,
 				      const void *buffer)
 {
 	struct host_block_dev *host_dev = dev_get_priv(dev);
 	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
-#else
-static unsigned long host_block_write(struct blk_desc *block_dev,
-				      unsigned long start, lbaint_t blkcnt,
-				      const void *buffer)
-{
-	int dev = block_dev->devnum;
-	struct host_block_dev *host_dev = find_host_device(dev);
-#endif
 
 	if (os_lseek(host_dev->fd, start * block_dev->blksz, OS_SEEK_SET) ==
 			-1) {
@@ -87,7 +53,6 @@ static unsigned long host_block_write(struct blk_desc *block_dev,
 	return -1;
 }
 
-#ifdef CONFIG_BLK
 int host_dev_bind(int devnum, char *filename)
 {
 	struct host_block_dev *host_dev;
@@ -150,51 +115,9 @@ err:
 	free(str);
 	return ret;
 }
-#else
-int host_dev_bind(int dev, char *filename)
-{
-	struct host_block_dev *host_dev = find_host_device(dev);
-
-	if (!host_dev)
-		return -1;
-	if (host_dev->blk_dev.priv) {
-		os_close(host_dev->fd);
-		host_dev->blk_dev.priv = NULL;
-	}
-	if (host_dev->filename)
-		free(host_dev->filename);
-	if (filename && *filename) {
-		host_dev->filename = strdup(filename);
-	} else {
-		host_dev->filename = NULL;
-		return 0;
-	}
-
-	host_dev->fd = os_open(host_dev->filename, OS_O_RDWR);
-	if (host_dev->fd == -1) {
-		printf("Failed to access host backing file '%s'\n",
-		       host_dev->filename);
-		return 1;
-	}
-
-	struct blk_desc *blk_dev = &host_dev->blk_dev;
-	blk_dev->if_type = IF_TYPE_HOST;
-	blk_dev->priv = host_dev;
-	blk_dev->blksz = 512;
-	blk_dev->lba = os_lseek(host_dev->fd, 0, OS_SEEK_END) / blk_dev->blksz;
-	blk_dev->block_read = host_block_read;
-	blk_dev->block_write = host_block_write;
-	blk_dev->devnum = dev;
-	blk_dev->part_type = PART_TYPE_UNKNOWN;
-	part_init(blk_dev);
-
-	return 0;
-}
-#endif
 
 int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 {
-#ifdef CONFIG_BLK
 	struct udevice *dev;
 	int ret;
 
@@ -202,17 +125,6 @@ int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 	if (ret)
 		return ret;
 	*blk_devp = dev_get_uclass_platdata(dev);
-#else
-	struct host_block_dev *host_dev = find_host_device(devnum);
-
-	if (!host_dev)
-		return -ENODEV;
-
-	if (!host_dev->blk_dev.priv)
-		return -ENOENT;
-
-	*blk_devp = &host_dev->blk_dev;
-#endif
 
 	return 0;
 }
@@ -227,7 +139,6 @@ struct blk_desc *host_get_dev(int dev)
 	return blk_dev;
 }
 
-#ifdef CONFIG_BLK
 static const struct blk_ops sandbox_host_blk_ops = {
 	.read	= host_block_read,
 	.write	= host_block_write,
@@ -239,4 +150,3 @@ U_BOOT_DRIVER(sandbox_host_blk) = {
 	.ops		= &sandbox_host_blk_ops,
 	.priv_auto_alloc_size	= sizeof(struct host_block_dev),
 };
-#endif
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 29/30] dm: usb: Clean up USB after each test
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (27 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 28/30] dm: sandbox: Drop the pre-DM host implementation Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15  2:16 ` [U-Boot] [PATCH 30/30] dm: blk: Add tests for block devices Simon Glass
                   ` (2 subsequent siblings)
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

The USB subsystem has a few counters that need to be reset since they are
stored in static variables rather than driver-model data. An example is
usb_max_devs. Ultimately we should move this data into the USB uclass.

For now, make sure that USB is reset after each test, so that the counters
go back to zero.

Note: this is not a perfect solution: It a USB test fails it will exit
immediately and leave USB un-reset. The impact here is that it may cause
subsequence test failures in the same run.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 test/dm/usb.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/test/dm/usb.c b/test/dm/usb.c
index 5531606..157e9f4 100644
--- a/test/dm/usb.c
+++ b/test/dm/usb.c
@@ -52,6 +52,7 @@ static int dm_test_usb_flash(struct unit_test_state *uts)
 	memset(cmp, '\0', sizeof(cmp));
 	ut_asserteq(2, blk_dread(dev_desc, 0, 2, cmp));
 	ut_assertok(strcmp(cmp, "this is a test"));
+	ut_assertok(usb_stop());
 
 	return 0;
 }
@@ -67,6 +68,7 @@ static int dm_test_usb_multi(struct unit_test_state *uts)
 	ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &dev));
 	ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 1, &dev));
 	ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 2, &dev));
+	ut_assertok(usb_stop());
 
 	return 0;
 }
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 30/30] dm: blk: Add tests for block devices
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (28 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 29/30] dm: usb: Clean up USB after each test Simon Glass
@ 2016-02-15  2:16 ` Simon Glass
  2016-02-15 22:37 ` [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Tom Rini
  2016-02-16 23:43 ` Stephen Warren
  31 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-15  2:16 UTC (permalink / raw)
  To: u-boot

Add some tests to check that block devices work as expected.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 test/dm/Makefile |  1 +
 test/dm/blk.c    | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 test/dm/blk.c

diff --git a/test/dm/Makefile b/test/dm/Makefile
index fd0198f..df2d71f 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -15,6 +15,7 @@ obj-$(CONFIG_UT_DM) += test-uclass.o
 # subsystem you must add sandbox tests here.
 obj-$(CONFIG_UT_DM) += core.o
 ifneq ($(CONFIG_SANDBOX),)
+obj-$(CONFIG_BLK) += blk.o
 obj-$(CONFIG_CLK) += clk.o
 obj-$(CONFIG_DM_ETH) += eth.o
 obj-$(CONFIG_DM_GPIO) += gpio.o
diff --git a/test/dm/blk.c b/test/dm/blk.c
new file mode 100644
index 0000000..819fbb7
--- /dev/null
+++ b/test/dm/blk.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2015 Google, Inc
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <usb.h>
+#include <asm/state.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* Test that block devices can be created */
+static int dm_test_blk_base(struct unit_test_state *uts)
+{
+	struct udevice *blk, *usb_blk, *dev;
+
+	/* Make sure there are no block devices */
+	ut_asserteq(-ENODEV, uclass_get_device_by_seq(UCLASS_BLK, 0, &blk));
+
+	/* Create two, one the parent of the other */
+	ut_assertok(blk_create_device(gd->dm_root, "sandbox_host_blk", "test",
+				      IF_TYPE_HOST, 1, 512, 1024, &blk));
+	ut_assertok(blk_create_device(blk, "usb_storage_blk", "test",
+				      IF_TYPE_USB, 3, 512, 1024, &usb_blk));
+
+	/* Check we can find them */
+	ut_asserteq(-ENODEV, blk_get_device(IF_TYPE_HOST, 0, &dev));
+	ut_assertok(blk_get_device(IF_TYPE_HOST, 1, &dev));
+	ut_asserteq_ptr(blk, dev);
+
+	ut_asserteq(-ENODEV, blk_get_device(IF_TYPE_USB, 0, &dev));
+	ut_assertok(blk_get_device(IF_TYPE_USB, 3, &dev));
+	ut_asserteq_ptr(usb_blk, dev);
+
+	/* Check we can iterate */
+	ut_assertok(blk_first_device(IF_TYPE_HOST, &dev));
+	ut_asserteq_ptr(blk, dev);
+	ut_asserteq(-ENODEV, blk_next_device(&dev));
+
+	ut_assertok(blk_first_device(IF_TYPE_USB, &dev));
+	ut_asserteq_ptr(usb_blk, dev);
+	ut_asserteq(-ENODEV, blk_next_device(&dev));
+
+	return 0;
+}
+DM_TEST(dm_test_blk_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
+static int count_blk_devices(void)
+{
+	struct udevice *blk;
+	struct uclass *uc;
+	int count = 0;
+	int ret;
+
+	ret = uclass_get(UCLASS_BLK, &uc);
+	if (ret)
+		return ret;
+
+	uclass_foreach_dev(blk, uc)
+		count++;
+
+	return count;
+}
+
+/* Test that block devices work correctly with USB */
+static int dm_test_blk_usb(struct unit_test_state *uts)
+{
+	struct udevice *usb_dev, *dev;
+	struct blk_desc *dev_desc;
+
+	/* Get a flash device */
+	state_set_skip_delays(true);
+	ut_assertok(usb_init());
+	ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &usb_dev));
+	ut_assertok(blk_get_device_str("usb", "0", &dev_desc));
+
+	/* The parent should be a block device */
+	ut_assertok(blk_get_device(IF_TYPE_USB, 0, &dev));
+	ut_asserteq_ptr(usb_dev, dev_get_parent(dev));
+
+	/* Check we have one block device for each mass storage device */
+	ut_asserteq(3, count_blk_devices());
+
+	/* Now go around again, making sure the old devices were unbound */
+	ut_assertok(usb_stop());
+	ut_assertok(usb_init());
+	ut_asserteq(3, count_blk_devices());
+	ut_assertok(usb_stop());
+
+	return 0;
+}
+DM_TEST(dm_test_blk_usb, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
-- 
2.7.0.rc3.207.g0ac5344

^ permalink raw reply related	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
@ 2016-02-15 22:37   ` Tom Rini
  2016-02-16 14:25   ` Bin Meng
  2016-02-17  6:41   ` Stephen Warren
  2 siblings, 0 replies; 69+ messages in thread
From: Tom Rini @ 2016-02-15 22:37 UTC (permalink / raw)
  To: u-boot

On Sun, Feb 14, 2016 at 07:16:43PM -0700, Simon Glass wrote:

> We can use linker lists instead of explicitly declaring each function.
> This makes the code shorter by avoiding switch() statements and lots of
> header file declarations.
> 
> While this does clean up the code it introduces a few code issues with SPL.
> SPL never needs to print partition information since this all happens from
> commands. SPL mostly doesn't need to obtain information about a partition
> either, except in a few cases. Add these cases so that the code will be
> dropped from each partition driver when not needed. This avoids code bloat.
> 
> I think this is still a win, since it is not a bad thing to be explicit
> about which features are used in SPL. But others may like to weigh in.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Since there's a question here:

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160215/2a9fcca1/attachment.sig>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types
  2016-02-15  2:16 ` [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types Simon Glass
@ 2016-02-15 22:37   ` Tom Rini
  2016-02-16 14:02   ` Bin Meng
  1 sibling, 0 replies; 69+ messages in thread
From: Tom Rini @ 2016-02-15 22:37 UTC (permalink / raw)
  To: u-boot

On Sun, Feb 14, 2016 at 07:16:42PM -0700, Simon Glass wrote:

> It is useful to have sandbox build as much code as possible to avoid having
> to build every board to detect build errors. Also we may add tests for some
> more partition types at some point.
> 
> Enable all partition types in sandbox.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Sandbox is also the target I can (easily) run coverity with so that gets
additional coverage, FYI.

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160215/e2927dcc/attachment.sig>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (29 preceding siblings ...)
  2016-02-15  2:16 ` [U-Boot] [PATCH 30/30] dm: blk: Add tests for block devices Simon Glass
@ 2016-02-15 22:37 ` Tom Rini
  2016-02-29  4:19   ` Simon Glass
  2016-02-16 23:43 ` Stephen Warren
  31 siblings, 1 reply; 69+ messages in thread
From: Tom Rini @ 2016-02-15 22:37 UTC (permalink / raw)
  To: u-boot

On Sun, Feb 14, 2016 at 07:16:29PM -0700, Simon Glass wrote:

> Recent additions of the MMC and DISK uclasses have indicated that it is time
> to look at adding a uclass for block devices. This series does this and
> includes a few clean-ups to the partition code also.
> 
> A block device is typically a child device of its storage parent. For
> example an MMC device will have a block-device child. A USB storage device
> may have multiple block-device children, one for each LUN.
> 
> With this series only USB storage and 'host' are converted over to use the
> new support. Several more remain, including SCSI, IDE and MMC. Each of these
> should get its own uclass.
> 
> The uclass implements only a few basic features. A few tests are added to
> check that things work as expected.
> 
> The code size impact of switching to driver model for block devices is
> small. One benefit is that it becomes possible to enumerate all block
> devices, regardless of their type.

Things generally make sense.  I've tossed out a few Reviewed-by's for
some things but I looked over everything.  My only question is have you
run buildman -S and compared the numbers, especially for things that
aren't opting in yet?  A few oddballs have been spotted by that already
:)

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160215/7891356a/attachment.sig>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef
  2016-02-15  2:16 ` [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef Simon Glass
@ 2016-02-16 10:09   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:09 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Use 'struct' instead of a typdef. Also since 'struct block_dev_desc' is long
> and causes 80-column violations, rename it to struct blk_desc.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  api/api.c                  |   2 +-
>  api/api_storage.c          |  14 ++---
>  board/cm5200/fwupdate.c    |   2 +-
>  board/mpl/pip405/README    |   4 +-
>  cmd/disk.c                 |   2 +-
>  cmd/fat.c                  |   4 +-
>  cmd/gpt.c                  |   8 +--
>  cmd/host.c                 |   4 +-
>  cmd/ide.c                  |  22 ++++----
>  cmd/mmc.c                  |   2 +-
>  cmd/part.c                 |   8 +--
>  cmd/read.c                 |   4 +-
>  cmd/reiser.c               |   4 +-
>  cmd/sata.c                 |  10 ++--
>  cmd/scsi.c                 |  12 ++---
>  cmd/unzip.c                |   2 +-
>  cmd/usb.c                  |   2 +-
>  cmd/usb_mass_storage.c     |   6 +--
>  cmd/zfs.c                  |   4 +-
>  common/env_fat.c           |   4 +-
>  common/fb_mmc.c            |  12 ++---
>  common/spl/spl_ext.c       |   6 +--
>  common/spl/spl_fat.c       |   8 +--
>  common/spl/spl_sata.c      |   2 +-
>  common/spl/spl_usb.c       |   2 +-
>  common/usb_storage.c       |  22 ++++----
>  disk/part.c                |  28 +++++-----
>  disk/part_amiga.c          |  14 ++---
>  disk/part_dos.c            |  19 +++----
>  disk/part_efi.c            |  38 ++++++-------
>  disk/part_iso.c            |  10 ++--
>  disk/part_mac.c            |  19 ++++---
>  drivers/block/dwc_ahsata.c |   4 +-
>  drivers/block/sandbox.c    |  12 ++---
>  drivers/block/systemace.c  |   8 +--
>  drivers/dfu/dfu_mmc.c      |   2 +-
>  drivers/mmc/mmc.c          |   4 +-
>  drivers/mmc/mmc_private.h  |   8 +--
>  drivers/mmc/mmc_write.c    |   4 +-
>  fs/ext4/dev.c              |  53 +++++++++---------
>  fs/ext4/ext4fs.c           |   2 +-
>  fs/fat/fat.c               |   6 +--
>  fs/fs.c                    |   6 +--
>  fs/reiserfs/dev.c          |  33 +++++-------
>  fs/sandbox/sandboxfs.c     |   4 +-
>  fs/ubifs/ubifs.c           |   2 +-
>  fs/zfs/dev.c               |  35 ++++++------
>  fs/zfs/zfs.c               |   2 +-
>  include/common.h           |   2 +-
>  include/ext4fs.h           |   6 +--
>  include/fat.h              |   4 +-
>  include/ide.h              |   6 +--
>  include/mmc.h              |   2 +-
>  include/part.h             | 130 ++++++++++++++++++++++++---------------------
>  include/reiserfs.h         |   2 +-
>  include/sandboxblockdev.h  |   2 +-
>  include/sandboxfs.h        |   2 +-
>  include/sata.h             |   2 +-
>  include/spl.h              |  10 ++--
>  include/systemace.h        |   2 +-
>  include/ubifs_uboot.h      |   2 +-
>  include/usb.h              |   2 +-
>  include/usb_mass_storage.h |   2 +-
>  include/zfs_common.h       |   4 +-
>  lib/gunzip.c               |   2 +-
>  test/dm/usb.c              |   2 +-
>  66 files changed, 338 insertions(+), 331 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code
  2016-02-15  2:16 ` [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code Simon Glass
@ 2016-02-16 10:09   ` Bin Meng
  2016-02-29  4:18     ` Simon Glass
  2016-02-17  0:19   ` Stephen Warren
  1 sibling, 1 reply; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:09 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Each region is displayed in almost the same way. Break out this common code
> into its own function.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  drivers/pci/pci_auto_common.c | 51 +++++++++++++++----------------------------
>  1 file changed, 17 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/pci/pci_auto_common.c b/drivers/pci/pci_auto_common.c
> index 85c419e..a5c16b9 100644
> --- a/drivers/pci/pci_auto_common.c
> +++ b/drivers/pci/pci_auto_common.c
> @@ -62,6 +62,17 @@ int pciauto_region_allocate(struct pci_region *res, pci_size_t size,
>         return -1;
>  }
>
> +static void pciauto_show_region(const char *name, struct pci_region *region)
> +{
> +       pciauto_region_init(region);
> +       debug("PCI Autoconfig: Bus %s region: [0x%llx-0x%llx],\n"
> +             "\t\tPhysical Memory [%llx-%llxx]\n", name,

While we are here, can we add '0x' prefix to Physical Memory output?

> +             (unsigned long long)region->bus_start,
> +             (unsigned long long)(region->bus_start + region->size - 1),
> +             (unsigned long long)region->phys_start,
> +             (unsigned long long)(region->phys_start + region->size - 1));

Why changing previous (u64) to (unsigned long long)?

> +}
> +
>  void pciauto_config_init(struct pci_controller *hose)
>  {
>         int i;
> @@ -91,38 +102,10 @@ void pciauto_config_init(struct pci_controller *hose)
>         }
>
>
> -       if (hose->pci_mem) {
> -               pciauto_region_init(hose->pci_mem);
> -
> -               debug("PCI Autoconfig: Bus Memory region: [0x%llx-0x%llx],\n"
> -                      "\t\tPhysical Memory [%llx-%llxx]\n",
> -                   (u64)hose->pci_mem->bus_start,
> -                   (u64)(hose->pci_mem->bus_start + hose->pci_mem->size - 1),
> -                   (u64)hose->pci_mem->phys_start,
> -                   (u64)(hose->pci_mem->phys_start + hose->pci_mem->size - 1));
> -       }
> -
> -       if (hose->pci_prefetch) {
> -               pciauto_region_init(hose->pci_prefetch);
> -
> -               debug("PCI Autoconfig: Bus Prefetchable Mem: [0x%llx-0x%llx],\n"
> -                      "\t\tPhysical Memory [%llx-%llx]\n",
> -                   (u64)hose->pci_prefetch->bus_start,
> -                   (u64)(hose->pci_prefetch->bus_start +
> -                           hose->pci_prefetch->size - 1),
> -                   (u64)hose->pci_prefetch->phys_start,
> -                   (u64)(hose->pci_prefetch->phys_start +
> -                           hose->pci_prefetch->size - 1));
> -       }
> -
> -       if (hose->pci_io) {
> -               pciauto_region_init(hose->pci_io);
> -
> -               debug("PCI Autoconfig: Bus I/O region: [0x%llx-0x%llx],\n"
> -                      "\t\tPhysical Memory: [%llx-%llx]\n",
> -                   (u64)hose->pci_io->bus_start,
> -                   (u64)(hose->pci_io->bus_start + hose->pci_io->size - 1),
> -                   (u64)hose->pci_io->phys_start,
> -                   (u64)(hose->pci_io->phys_start + hose->pci_io->size - 1));
> -       }
> +       if (hose->pci_mem)
> +               pciauto_show_region("Memory", hose->pci_mem);
> +       if (hose->pci_prefetch)
> +               pciauto_show_region("Prefetchable Mem", hose->pci_mem);
> +       if (hose->pci_io)
> +               pciauto_show_region("I/O", hose->pci_io);
>  }
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning
  2016-02-15  2:16 ` [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning Simon Glass
@ 2016-02-16 10:09   ` Bin Meng
  2016-02-29  4:18     ` Simon Glass
  0 siblings, 1 reply; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:09 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Adjust the cast to avoid a warning when stdint.h is used.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  disk/part_efi.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index db5e7ed..7bd840f 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -658,11 +658,13 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>                 gpt_part_size = le64_to_cpu(gpt_e[i].ending_lba) -
>                         le64_to_cpu(gpt_e[i].starting_lba) + 1;
>                 debug("size(LBA) - GPT: %8llu, ENV: %8llu ",
> -                     gpt_part_size, (u64) partitions[i].size);
> +                     (unsigned long long)gpt_part_size,
> +                     (unsigned long long)partitions[i].size);

Can you elaborate why this is needed?

>
>                 if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
>                         error("Partition %s size: %llu does not match %llu!\n",
> -                             efi_str, gpt_part_size, (u64) partitions[i].size);
> +                             efi_str, (unsigned long long)gpt_part_size,
> +                             (unsigned long long)partitions[i].size);
>                         return -1;
>                 }
>
> @@ -678,12 +680,12 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>                 /* Check if GPT and ENV start LBAs match */
>                 debug("start LBA - GPT: %8llu, ENV: %8llu\n",
>                       le64_to_cpu(gpt_e[i].starting_lba),
> -                     (u64) partitions[i].start);
> +                     (unsigned long long)partitions[i].start);
>
>                 if (le64_to_cpu(gpt_e[i].starting_lba) != partitions[i].start) {
>                         error("Partition %s start: %llu does not match %llu!\n",
>                               efi_str, le64_to_cpu(gpt_e[i].starting_lba),
> -                             (u64) partitions[i].start);
> +                             (unsigned long long)partitions[i].start);
>                         return -1;
>                 }
>         }
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header
  2016-02-15  2:16 ` [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header Simon Glass
@ 2016-02-16 10:09   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:09 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> We should not include <common.h> in header files. Each C file should include
> it if needed.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/part.h | 1 -
>  1 file changed, 1 deletion(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 06/30] dm: Add a new header for block devices
  2016-02-15  2:16 ` [U-Boot] [PATCH 06/30] dm: Add a new header for block devices Simon Glass
@ 2016-02-16 10:10   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:10 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> At present block devices are tied up with partitions. But not all block
> devices have partitions within them. They are in fact separate concepts.
>
> Create a separate blk.h header file for block devices.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/blk.h  | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/ide.h  | 12 ++--------
>  include/part.h | 49 +---------------------------------------
>  3 files changed, 74 insertions(+), 58 deletions(-)
>  create mode 100644 include/blk.h
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum
  2016-02-15  2:16 ` [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum Simon Glass
@ 2016-02-16 10:10   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:10 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Since these are sequentially numbered it makes sense to use an enum. It
> avoids having to maintain the maximum value, and provides a type we can use
> if it useful.

if it *is* useful?

>
> In fact the maximum value is not used. Rename it to COUNT, since MAX suggests
> it is the maximum valid value, but it is not.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/blk.h | 27 +++++++++++++++------------
>  1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/include/blk.h b/include/blk.h
> index 1e8334c..9ba7a62 100644
> --- a/include/blk.h
> +++ b/include/blk.h
> @@ -19,20 +19,23 @@ typedef ulong lbaint_t;
>  #define LBAFU "%" LBAFlength "u"
>
>  /* Interface types: */
> -#define IF_TYPE_UNKNOWN                0
> -#define IF_TYPE_IDE            1
> -#define IF_TYPE_SCSI           2
> -#define IF_TYPE_ATAPI          3
> -#define IF_TYPE_USB            4
> -#define IF_TYPE_DOC            5
> -#define IF_TYPE_MMC            6
> -#define IF_TYPE_SD             7
> -#define IF_TYPE_SATA           8
> -#define IF_TYPE_HOST           9
> -#define IF_TYPE_MAX            10      /* Max number of IF_TYPE_* supported */
> +enum if_type_t {

I believe we should not add _t as it is not a typedef?

> +       IF_TYPE_UNKNOWN = 0,
> +       IF_TYPE_IDE,
> +       IF_TYPE_SCSI,
> +       IF_TYPE_ATAPI,
> +       IF_TYPE_USB,
> +       IF_TYPE_DOC,
> +       IF_TYPE_MMC,
> +       IF_TYPE_SD,
> +       IF_TYPE_SATA,
> +       IF_TYPE_HOST,
> +
> +       IF_TYPE_COUNT,                  /* Number of interface types */
> +};
>
>  struct blk_desc {
> -       int             if_type;        /* type of the interface */
> +       enum if_type_t  if_type;        /* type of the interface */
>         int             dev;            /* device number */
>         unsigned char   part_type;      /* partition type */
>         unsigned char   target;         /* target SCSI ID */
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions
  2016-02-15  2:16 ` [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions Simon Glass
@ 2016-02-16 10:10   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:10 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> The block interface is not well documented in the code. Pick two important
> functions and add comments.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/part.h | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev()
  2016-02-15  2:16 ` [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev() Simon Glass
@ 2016-02-16 10:10   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 10:10 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> The current name is too generic. Add a 'blk_' prefix to aid searching and
> make its purpose clearer.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  api/api_storage.c | 12 +++++++-----
>  cmd/gpt.c         |  2 +-
>  cmd/read.c        |  2 +-
>  common/fb_mmc.c   |  4 ++--
>  disk/part.c       |  4 ++--
>  include/part.h    |  6 +++---
>  6 files changed, 16 insertions(+), 14 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str()
  2016-02-15  2:16 ` [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str() Simon Glass
@ 2016-02-16 14:02   ` Bin Meng
  2016-02-16 23:14   ` Stephen Warren
  1 sibling, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:02 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> The current name is too generic. The function returns a block device based
> on a provided string. Rename it to aid searching and make its purpose
> clearer. Also add a few comments.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  cmd/part.c             |  6 +++---
>  cmd/unzip.c            |  2 +-
>  cmd/usb_mass_storage.c |  2 +-
>  disk/part.c            |  6 +++---
>  include/part.h         | 34 ++++++++++++++++++++++++++++++----
>  test/dm/usb.c          |  2 +-
>  6 files changed, 39 insertions(+), 13 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

One comment below

> diff --git a/cmd/part.c b/cmd/part.c
> index a572aab..f05699d 100644
> --- a/cmd/part.c
> +++ b/cmd/part.c
> @@ -81,7 +81,7 @@ static int do_part_list(int argc, char * const argv[])
>                         return CMD_RET_USAGE;
>         }
>
> -       ret = get_device(argv[0], argv[1], &desc);
> +       ret = blk_get_device_str(argv[0], argv[1], &desc);
>         if (ret < 0)
>                 return 1;
>
> @@ -128,7 +128,7 @@ static int do_part_start(int argc, char * const argv[])
>
>         part = simple_strtoul(argv[2], NULL, 0);
>
> -       ret = get_device(argv[0], argv[1], &desc);
> +       ret = blk_get_device_str(argv[0], argv[1], &desc);
>         if (ret < 0)
>                 return 1;
>
> @@ -162,7 +162,7 @@ static int do_part_size(int argc, char * const argv[])
>
>         part = simple_strtoul(argv[2], NULL, 0);
>
> -       ret = get_device(argv[0], argv[1], &desc);
> +       ret = blk_get_device_str(argv[0], argv[1], &desc);
>         if (ret < 0)
>                 return 1;
>
> diff --git a/cmd/unzip.c b/cmd/unzip.c
> index 5be1566..588fa75 100644
> --- a/cmd/unzip.c
> +++ b/cmd/unzip.c
> @@ -53,7 +53,7 @@ static int do_gzwrite(cmd_tbl_t *cmdtp, int flag,
>
>         if (argc < 5)
>                 return CMD_RET_USAGE;
> -       ret = get_device(argv[1], argv[2], &bdev);
> +       ret = blk_get_device_str(argv[1], argv[2], &bdev);
>         if (ret < 0)
>                 return CMD_RET_FAILURE;
>
> diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
> index 03b7e21..fcac389 100644
> --- a/cmd/usb_mass_storage.c
> +++ b/cmd/usb_mass_storage.c
> @@ -69,7 +69,7 @@ static int ums_init(const char *devtype, const char *devnums)
>                 if (!devnum)
>                         break;
>
> -               ret = get_device(devtype, devnum, &block_dev);
> +               ret = blk_get_device_str(devtype, devnum, &block_dev);
>                 if (ret < 0)
>                         goto cleanup;
>
> diff --git a/disk/part.c b/disk/part.c
> index 2466c3e..700e505 100644
> --- a/disk/part.c
> +++ b/disk/part.c
> @@ -449,8 +449,8 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
>         return -1;
>  }
>
> -int get_device(const char *ifname, const char *dev_hwpart_str,
> -              struct blk_desc **dev_desc)
> +int blk_get_device_str(const char *ifname, const char *dev_hwpart_str,
> +                      struct blk_desc **dev_desc)
>  {
>         char *ep;
>         char *dup_str = NULL;
> @@ -598,7 +598,7 @@ int get_device_and_partition(const char *ifname, const char *dev_part_str,
>         }
>
>         /* Look up the device */
> -       dev = get_device(ifname, dev_str, dev_desc);
> +       dev = blk_get_device_str(ifname, dev_str, dev_desc);
>         if (dev < 0)
>                 goto cleanup;
>
> diff --git a/include/part.h b/include/part.h
> index ddc4422..d05b48b 100644
> --- a/include/part.h
> +++ b/include/part.h
> @@ -101,8 +101,34 @@ int get_partition_info(struct blk_desc *dev_desc, int part,
>  void print_part(struct blk_desc *dev_desc);
>  void init_part(struct blk_desc *dev_desc);
>  void dev_print(struct blk_desc *dev_desc);
> -int get_device(const char *ifname, const char *dev_str,
> -              struct blk_desc **dev_desc);
> +
> +/**
> + * blk_get_device_str() - Get a block device given its interface/ hw partition

nits: need one space before /, or remove space before 'hw'?

I am not sure if blk_get_device_str() is a good name, but I cannot
think of a better name..

> + *
> + * Each interface allocates its own devices and typically struct blk_desc is
> + * contained with the interface's data structure. There is no global
> + * numbering for block devices, so the interface name must be provided.
> + *
> + * The hardware parition is not related to the normal software partitioning
> + * of a device - each hardware partition is effectively a separately
> + * accessible block device. When a hardware parition is selected on MMC the
> + * other hardware partitions become inaccessible. The same block device is
> + * used to access all hardware partitions, but its capacity may change when a
> + * different hardware partition is selected.
> + *
> + * When a hardware partition number is given, the block device switches to
> + * that hardware partition.
> + *
> + * @ifname:    Interface name (e.g. "ide", "scsi")
> + * @dev_str:   Device and optional hw partition. This can either be a string
> + *             containing the device number (e.g. "2") or the device number
> + *             and hardware partition number (e.g. "2.4") for devices that
> + *             support it (currently only MMC).
> + * @dev_desc:  Returns a pointer to the block device on success
> + * @return block device number (local to the interface), or -1 on error
> + */
> +int blk_get_device_str(const char *ifname, const char *dev_str,
> +                      struct blk_desc **dev_desc);
>  int get_device_and_partition(const char *ifname, const char *dev_part_str,
>                              struct blk_desc **dev_desc,
>                              disk_partition_t *info, int allow_whole_dev);
> @@ -124,8 +150,8 @@ static inline int get_partition_info(struct blk_desc *dev_desc, int part,
>  static inline void print_part(struct blk_desc *dev_desc) {}
>  static inline void init_part(struct blk_desc *dev_desc) {}
>  static inline void dev_print(struct blk_desc *dev_desc) {}
> -static inline int get_device(const char *ifname, const char *dev_str,
> -                            struct blk_desc **dev_desc)
> +static inline int blk_get_device_str(const char *ifname, const char *dev_str,
> +                                    struct blk_desc **dev_desc)
>  { return -1; }
>  static inline int get_device_and_partition(const char *ifname,
>                                            const char *dev_part_str,
> diff --git a/test/dm/usb.c b/test/dm/usb.c
> index 25cde68..1df25b1 100644
> --- a/test/dm/usb.c
> +++ b/test/dm/usb.c
> @@ -45,7 +45,7 @@ static int dm_test_usb_flash(struct unit_test_state *uts)
>         state_set_skip_delays(true);
>         ut_assertok(usb_init());
>         ut_assertok(uclass_get_device(UCLASS_MASS_STORAGE, 0, &dev));
> -       ut_assertok(get_device("usb", "0", &dev_desc));
> +       ut_assertok(blk_get_device_str("usb", "0", &dev_desc));
>
>         /* Read a few blocks and look for the string we expect */
>         ut_asserteq(512, dev_desc->blksz);
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition()
  2016-02-15  2:16 ` [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition() Simon Glass
@ 2016-02-16 14:02   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:02 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Rename this function to blk_get_device_part_str(). This is a better name
> because it makes it clear that the function returns a block device and
> parses a string.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  cmd/disk.c       |  2 +-
>  cmd/fat.c        |  4 ++--
>  cmd/part.c       |  2 +-
>  cmd/reiser.c     |  4 ++--
>  cmd/zfs.c        |  4 ++--
>  common/env_fat.c |  4 ++--
>  disk/part.c      |  2 +-
>  fs/fs.c          |  2 +-
>  fs/ubifs/ubifs.c |  2 +-
>  include/part.h   | 38 ++++++++++++++++++++++++++++++++++++--
>  10 files changed, 49 insertions(+), 15 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning
  2016-02-15  2:16 ` [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning Simon Glass
@ 2016-02-16 14:02   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:02 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> In part_amiga.c the name is unsigned by bcpl_strcpy() requires a signed
> pointer. Add a cast to fix the warning.

is unsigned *but* bcpl_strcpy() ?

>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  disk/part_amiga.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types
  2016-02-15  2:16 ` [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types Simon Glass
  2016-02-15 22:37   ` Tom Rini
@ 2016-02-16 14:02   ` Bin Meng
  1 sibling, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:02 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> It is useful to have sandbox build as much code as possible to avoid having
> to build every board to detect build errors. Also we may add tests for some
> more partition types at some point.
>
> Enable all partition types in sandbox.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/configs/sandbox.h | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

One nits below:

> diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
> index 4bffd8d..0f02839 100644
> --- a/include/configs/sandbox.h
> +++ b/include/configs/sandbox.h
> @@ -53,8 +53,11 @@
>
>  #define CONFIG_CMD_GPT
>  #define CONFIG_PARTITION_UUIDS
> -#define CONFIG_EFI_PARTITION
> +#define CONFIG_MAC_PARTITION
>  #define CONFIG_DOS_PARTITION
> +#define CONFIG_ISO_PARTITION
> +#define CONFIG_AMIGA_PARTITION
> +#define CONFIG_EFI_PARTITION
>

Guess we can use proper alphabetical order for these partitions? Like
AMIGA, DOS, EFI, ISO, MAC ..

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
  2016-02-15 22:37   ` Tom Rini
@ 2016-02-16 14:25   ` Bin Meng
  2016-02-29  4:18     ` Simon Glass
  2016-02-17  6:41   ` Stephen Warren
  2 siblings, 1 reply; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:25 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> We can use linker lists instead of explicitly declaring each function.
> This makes the code shorter by avoiding switch() statements and lots of
> header file declarations.
>
> While this does clean up the code it introduces a few code issues with SPL.
> SPL never needs to print partition information since this all happens from
> commands. SPL mostly doesn't need to obtain information about a partition
> either, except in a few cases. Add these cases so that the code will be
> dropped from each partition driver when not needed. This avoids code bloat.
>
> I think this is still a win, since it is not a bad thing to be explicit
> about which features are used in SPL. But others may like to weigh in.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  disk/part.c       | 184 +++++++++++++++++-------------------------------------
>  disk/part_amiga.c |  16 +++--
>  disk/part_dos.c   |   9 ++-
>  disk/part_efi.c   |  10 ++-
>  disk/part_iso.c   |  16 +++--
>  disk/part_mac.c   |  16 +++--
>  include/part.h    |  79 ++++++++++++++---------
>  7 files changed, 157 insertions(+), 173 deletions(-)
>

[snip]

> diff --git a/disk/part_amiga.c b/disk/part_amiga.c
> index 5702c95..0f569f0 100644
> --- a/disk/part_amiga.c
> +++ b/disk/part_amiga.c
> @@ -207,7 +207,7 @@ struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
>   * Test if the given partition has an Amiga partition table/Rigid
>   * Disk block
>   */
> -int test_part_amiga(struct blk_desc *dev_desc)
> +static int test_part_amiga(struct blk_desc *dev_desc)
>  {
>      struct rigid_disk_block *rdb;
>      struct bootcode_block *bootcode;
> @@ -291,8 +291,8 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
>  /*
>   * Get info about a partition
>   */
> -int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
> -                            disk_partition_t *info)
> +static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
> +                                   disk_partition_t *info)
>  {
>      struct partition_block *p = find_partition(dev_desc, part-1);
>      struct amiga_part_geometry *g;
> @@ -319,7 +319,7 @@ int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>      return 0;
>  }
>
> -void print_part_amiga(struct blk_desc *dev_desc)
> +static void print_part_amiga(struct blk_desc *dev_desc)
>  {
>      struct rigid_disk_block *rdb;
>      struct bootcode_block *boot;
> @@ -379,4 +379,12 @@ void print_part_amiga(struct blk_desc *dev_desc)
>      }
>  }
>
> +U_BOOT_PART_TYPE(amiga) = {
> +       .name           = "AMIGA",
> +       .part_type      = PART_TYPE_AMIGA,
> +       .get_info       = get_partition_info_amiga,
> +       .print          = print_part_amiga,
> +       .test           = test_part_amiga,
> +};
> +
>  #endif
> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index ea0315c..7567ed3 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
>  }
>
>
> -int test_part_dos(struct blk_desc *dev_desc)
> +static int test_part_dos(struct blk_desc *dev_desc)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
>
> @@ -295,5 +295,12 @@ int get_partition_info_dos(struct blk_desc *dev_desc, int part,
>         return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
>  }
>
> +U_BOOT_PART_TYPE(dos) = {
> +       .name           = "DOS",
> +       .part_type      = PART_TYPE_DOS,
> +       .get_info       = part_get_info_ptr(get_partition_info_dos),

Does this compile?

> +       .print          = part_print_ptr(print_part_dos),

and this?

> +       .test           = test_part_dos,
> +};
>
>  #endif
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 7bd840f..6f80877 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -319,7 +319,7 @@ int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
>         return -2;
>  }
>
> -int test_part_efi(struct blk_desc *dev_desc)
> +static int test_part_efi(struct blk_desc *dev_desc)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
>
> @@ -953,4 +953,12 @@ static int is_pte_valid(gpt_entry * pte)
>                 return 1;
>         }
>  }
> +
> +U_BOOT_PART_TYPE(efi) = {
> +       .name           = "EFI",
> +       .part_type      = PART_TYPE_EFI,
> +       .get_info       = part_get_info_ptr(get_partition_info_efi),
> +       .print          = part_print_ptr(print_part_efi),

and these?

> +       .test           = test_part_efi,
> +};
>  #endif
> diff --git a/disk/part_iso.c b/disk/part_iso.c
> index 2984df5..1d72d23 100644
> --- a/disk/part_iso.c
> +++ b/disk/part_iso.c
> @@ -217,14 +217,13 @@ found:
>         return 0;
>  }
>
> -int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
> -                          disk_partition_t *info)
> +static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
> +                                 disk_partition_t *info)
>  {
>         return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
>  }
>
> -
> -void print_part_iso(struct blk_desc *dev_desc)
> +static void print_part_iso(struct blk_desc *dev_desc)
>  {
>         disk_partition_t info;
>         int i;
> @@ -241,11 +240,18 @@ void print_part_iso(struct blk_desc *dev_desc)
>         } while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
>  }
>
> -int test_part_iso(struct blk_desc *dev_desc)
> +static int test_part_iso(struct blk_desc *dev_desc)
>  {
>         disk_partition_t info;
>
>         return(get_partition_info_iso_verb(dev_desc,0,&info,0));
>  }
>
> +U_BOOT_PART_TYPE(iso) = {
> +       .name           = "ISO",
> +       .part_type      = PART_TYPE_ISO,
> +       .get_info       = get_partition_info_iso,
> +       .print          = print_part_iso,
> +       .test           = test_part_iso,
> +};
>  #endif
> diff --git a/disk/part_mac.c b/disk/part_mac.c
> index ae83495..3fb3b16 100644
> --- a/disk/part_mac.c
> +++ b/disk/part_mac.c
> @@ -40,7 +40,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>  /*
>   * Test for a valid MAC partition
>   */
> -int test_part_mac(struct blk_desc *dev_desc)
> +static int test_part_mac(struct blk_desc *dev_desc)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
> @@ -64,8 +64,7 @@ int test_part_mac(struct blk_desc *dev_desc)
>         return (0);
>  }
>
> -
> -void print_part_mac(struct blk_desc *dev_desc)
> +static void print_part_mac(struct blk_desc *dev_desc)
>  {
>         ulong i, n;
>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
> @@ -214,8 +213,8 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>         /* NOTREACHED */
>  }
>
> -int get_partition_info_mac(struct blk_desc *dev_desc, int part,
> -                          disk_partition_t *info)
> +static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
> +                                 disk_partition_t *info)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
> @@ -238,4 +237,11 @@ int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>         return (0);
>  }
>
> +U_BOOT_PART_TYPE(mac) = {
> +       .name           = "MAC",
> +       .part_type      = PART_TYPE_MAC,
> +       .get_info       = get_partition_info_mac,
> +       .print          = print_part_mac,
> +       .test           = test_part_mac,
> +};
>  #endif

[snip]

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions
  2016-02-15  2:16 ` [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions Simon Glass
@ 2016-02-16 14:25   ` Bin Meng
  2016-02-29  4:19     ` Simon Glass
  0 siblings, 1 reply; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:25 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Rename three partition functions so that they start with part_. This makes
> it clear what they relate to.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  board/cm5200/fwupdate.c   |  2 +-
>  cmd/ide.c                 |  6 +++---
>  cmd/mmc.c                 |  2 +-
>  cmd/part.c                |  8 ++++----
>  cmd/read.c                |  2 +-
>  cmd/sata.c                |  6 +++---
>  cmd/scsi.c                |  6 +++---
>  cmd/usb.c                 |  4 ++--
>  common/fb_mmc.c           | 10 +++++-----
>  common/spl/spl_ext.c      |  6 ++----
>  common/spl/spl_mmc.c      |  2 +-
>  common/usb_storage.c      |  2 +-
>  disk/part.c               | 12 ++++++------
>  disk/part_amiga.c         |  4 ++--
>  disk/part_dos.c           | 19 +++++++++----------
>  disk/part_efi.c           | 10 +++++-----
>  disk/part_iso.c           | 17 +++++++++--------
>  disk/part_mac.c           |  4 ++--
>  drivers/block/pata_bfin.c |  2 +-
>  drivers/block/sandbox.c   |  2 +-
>  drivers/block/systemace.c |  2 +-
>  drivers/dfu/dfu_mmc.c     |  2 +-
>  drivers/mmc/mmc.c         |  2 +-
>  fs/fat/fat.c              |  2 +-
>  include/part.h            | 21 ++++++++++-----------
>  25 files changed, 76 insertions(+), 79 deletions(-)
>

[snip]

> diff --git a/disk/part_amiga.c b/disk/part_amiga.c
> index 0f569f0..d323b4b 100644
> --- a/disk/part_amiga.c
> +++ b/disk/part_amiga.c
> @@ -291,7 +291,7 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
>  /*
>   * Get info about a partition
>   */
> -static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
> +static int part_get_info_amiga(struct blk_desc *dev_desc, int part,
>                                     disk_partition_t *info)
>  {
>      struct partition_block *p = find_partition(dev_desc, part-1);
> @@ -382,7 +382,7 @@ static void print_part_amiga(struct blk_desc *dev_desc)
>  U_BOOT_PART_TYPE(amiga) = {
>         .name           = "AMIGA",
>         .part_type      = PART_TYPE_AMIGA,
> -       .get_info       = get_partition_info_amiga,
> +       .get_info       = part_get_info_amiga,
>         .print          = print_part_amiga,
>         .test           = test_part_amiga,

Can we rename these two to: part_print_amiga and part_test_amiga too?

>  };
> diff --git a/disk/part_dos.c b/disk/part_dos.c
> index 7567ed3..4a56391 100644
> --- a/disk/part_dos.c
> +++ b/disk/part_dos.c
> @@ -167,11 +167,10 @@ static void print_partition_extended(struct blk_desc *dev_desc,
>
>  /*  Print a partition that is relative to its Extended partition table
>   */
> -static int get_partition_info_extended(struct blk_desc *dev_desc,
> -                                      lbaint_t ext_part_sector,
> -                                      lbaint_t relative, int part_num,
> -                                      int which_part, disk_partition_t *info,
> -                                      unsigned int disksig)
> +static int part_get_info_extended(struct blk_desc *dev_desc,
> +                                 lbaint_t ext_part_sector, lbaint_t relative,
> +                                 int part_num, int which_part,
> +                                 disk_partition_t *info, unsigned int disksig)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
>         dos_partition_t *pt;
> @@ -259,7 +258,7 @@ static int get_partition_info_extended(struct blk_desc *dev_desc,
>                         lbaint_t lba_start
>                                 = le32_to_int (pt->start4) + relative;
>
> -                       return get_partition_info_extended (dev_desc, lba_start,
> +                       return part_get_info_extended(dev_desc, lba_start,
>                                  ext_part_sector == 0 ? lba_start : relative,
>                                  part_num, which_part, info, disksig);
>                 }
> @@ -289,16 +288,16 @@ void print_part_dos(struct blk_desc *dev_desc)
>         print_partition_extended(dev_desc, 0, 0, 1, 0);
>  }
>
> -int get_partition_info_dos(struct blk_desc *dev_desc, int part,
> -                          disk_partition_t *info)
> +int part_get_info_dos(struct blk_desc *dev_desc, int part,
> +                     disk_partition_t *info)
>  {
> -       return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
> +       return part_get_info_extended(dev_desc, 0, 0, 1, part, info, 0);
>  }
>
>  U_BOOT_PART_TYPE(dos) = {
>         .name           = "DOS",
>         .part_type      = PART_TYPE_DOS,
> -       .get_info       = part_get_info_ptr(get_partition_info_dos),
> +       .get_info       = part_get_info_ptr(part_get_info_dos),
>         .print          = part_print_ptr(print_part_dos),
>         .test           = test_part_dos,

ditto.

>  };
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 6f80877..eed8593 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -237,8 +237,8 @@ void print_part_efi(struct blk_desc *dev_desc)
>         return;
>  }
>
> -int get_partition_info_efi(struct blk_desc *dev_desc, int part,
> -                          disk_partition_t *info)
> +int part_get_info_efi(struct blk_desc *dev_desc, int part,
> +                     disk_partition_t *info)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER_PAD(gpt_header, gpt_head, 1, dev_desc->blksz);
>         gpt_entry *gpt_pte = NULL;
> @@ -300,13 +300,13 @@ int get_partition_info_efi(struct blk_desc *dev_desc, int part,
>         return 0;
>  }
>
> -int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
> +int part_get_info_efi_by_name(struct blk_desc *dev_desc,
>         const char *name, disk_partition_t *info)
>  {
>         int ret;
>         int i;
>         for (i = 1; i < GPT_ENTRY_NUMBERS; i++) {
> -               ret = get_partition_info_efi(dev_desc, i, info);
> +               ret = part_get_info_efi(dev_desc, i, info);
>                 if (ret != 0) {
>                         /* no more entries in table */
>                         return -1;
> @@ -957,7 +957,7 @@ static int is_pte_valid(gpt_entry * pte)
>  U_BOOT_PART_TYPE(efi) = {
>         .name           = "EFI",
>         .part_type      = PART_TYPE_EFI,
> -       .get_info       = part_get_info_ptr(get_partition_info_efi),
> +       .get_info       = part_get_info_ptr(part_get_info_efi),
>         .print          = part_print_ptr(print_part_efi),
>         .test           = test_part_efi,

ditto.

>  };
> diff --git a/disk/part_iso.c b/disk/part_iso.c
> index 1d72d23..a1cf358 100644
> --- a/disk/part_iso.c
> +++ b/disk/part_iso.c
> @@ -46,8 +46,8 @@ static inline unsigned short le16_to_int(unsigned char *le16)
>
>
>  /* only boot records will be listed as valid partitions */
> -int get_partition_info_iso_verb(struct blk_desc *dev_desc, int part_num,
> -                               disk_partition_t *info, int verb)
> +int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
> +                          disk_partition_t *info, int verb)
>  {
>         int i,offset,entry_num;
>         unsigned short *chksumbuf;
> @@ -217,17 +217,18 @@ found:
>         return 0;
>  }
>
> -static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
> +static int part_get_info_iso(struct blk_desc *dev_desc, int part_num,
>                                   disk_partition_t *info)
>  {
> -       return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
> +       return part_get_info_iso_verb(dev_desc, part_num, info, 1);
>  }
>
>  static void print_part_iso(struct blk_desc *dev_desc)
>  {
>         disk_partition_t info;
>         int i;
> -       if(get_partition_info_iso_verb(dev_desc,0,&info,0)==-1) {
> +
> +       if (part_get_info_iso_verb(dev_desc, 0, &info, 0) == -1) {
>                 printf("** No boot partition found on device %d **\n",dev_desc->dev);
>                 return;
>         }
> @@ -237,20 +238,20 @@ static void print_part_iso(struct blk_desc *dev_desc)
>                 printf(" %2d " LBAFU " " LBAFU " %6ld %.32s\n",
>                        i, info.start, info.size, info.blksz, info.type);
>                 i++;
> -       } while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
> +       } while (part_get_info_iso_verb(dev_desc, i, &info, 0) != -1);
>  }
>
>  static int test_part_iso(struct blk_desc *dev_desc)
>  {
>         disk_partition_t info;
>
> -       return(get_partition_info_iso_verb(dev_desc,0,&info,0));
> +       return part_get_info_iso_verb(dev_desc, 0, &info, 0);
>  }
>
>  U_BOOT_PART_TYPE(iso) = {
>         .name           = "ISO",
>         .part_type      = PART_TYPE_ISO,
> -       .get_info       = get_partition_info_iso,
> +       .get_info       = part_get_info_iso,
>         .print          = print_part_iso,
>         .test           = test_part_iso,

ditto.

>  };
> diff --git a/disk/part_mac.c b/disk/part_mac.c
> index 3fb3b16..6192723 100644
> --- a/disk/part_mac.c
> +++ b/disk/part_mac.c
> @@ -213,7 +213,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>         /* NOTREACHED */
>  }
>
> -static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
> +static int part_get_info_mac(struct blk_desc *dev_desc, int part,
>                                   disk_partition_t *info)
>  {
>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
> @@ -240,7 +240,7 @@ static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>  U_BOOT_PART_TYPE(mac) = {
>         .name           = "MAC",
>         .part_type      = PART_TYPE_MAC,
> -       .get_info       = get_partition_info_mac,
> +       .get_info       = part_get_info_mac,
>         .print          = print_part_mac,
>         .test           = test_part_mac,

ditto.

>  };

[snip]

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type
  2016-02-15  2:16 ` [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type Simon Glass
@ 2016-02-16 14:51   ` Bin Meng
  2016-02-29  4:19     ` Simon Glass
  0 siblings, 1 reply; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:51 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> The comment for file_cbfs_type() says that it returns 0 for an invalid type.
> The code appears to check for -1, except that it uses an unsigned variable
> to store the type. This results in a warning on 64-bit machines.
>
> Adjust it to make the meaning clearer. Continue to handle the -1 case since
> it may be needed.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  cmd/cbfs.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/cbfs.c b/cmd/cbfs.c
> index 35d8a7a..cdfc9b6 100644
> --- a/cmd/cbfs.c
> +++ b/cmd/cbfs.c
> @@ -103,7 +103,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>         printf("     size              type  name\n");
>         printf("------------------------------------------\n");
>         while (file) {
> -               u32 type = file_cbfs_type(file);
> +               int type = file_cbfs_type(file);

but file_cbfs_type() returns u32 as its type..

>                 char *type_name = NULL;
>                 const char *filename = file_cbfs_name(file);
>
> @@ -140,7 +140,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>                 case CBFS_COMPONENT_CMOS_LAYOUT:
>                         type_name = "cmos layout";
>                         break;
> -               case -1UL:
> +               case -1:

What about: case (u32)-1UL:

>                         type_name = "null";
>                         break;
>                 }
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs
  2016-02-15  2:16 ` [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs Simon Glass
@ 2016-02-16 14:51   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:51 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Enable these two filesystems to provide better build coverage in sandbox.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  include/configs/sandbox.h | 3 +++
>  1 file changed, 3 insertions(+)

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

One comment below:

>
> diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
> index 0f02839..2268c4e 100644
> --- a/include/configs/sandbox.h
> +++ b/include/configs/sandbox.h
> @@ -44,6 +44,9 @@
>  #define CONFIG_CMD_FAT
>  #define CONFIG_CMD_EXT4
>  #define CONFIG_CMD_EXT4_WRITE
> +#define CONFIG_CMD_CBFS
> +#define CONFIG_CMD_CRAMFS
> +#define CONFIG_CRAMFS_CMDLINE

It looks CONFIG_CRAMFS_CMDLINE is nothing but a duplicated macro of
CONFIG_CMD_CRAMFS. Maybe a separate patch to drop
CONFIG_CRAMFS_CMDLINE?

>  #define CONFIG_CMD_PART
>  #define CONFIG_DOS_PARTITION
>  #define CONFIG_HOST_MAX_DEVICES 4
> --

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum
  2016-02-15  2:16 ` [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum Simon Glass
@ 2016-02-16 14:51   ` Bin Meng
  2016-02-16 23:23   ` Stephen Warren
  1 sibling, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:51 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> This is a device number, and we want to use 'dev' to mean a driver model
> device. Rename the member.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  board/sunxi/board.c          |  4 ++--
>  cmd/cbfs.c                   |  1 +
>  cmd/disk.c                   |  2 +-
>  cmd/fat.c                    |  4 ++--
>  cmd/ide.c                    | 12 ++++++------
>  cmd/mmc_spi.c                |  4 ++--
>  cmd/reiser.c                 |  4 ++--
>  cmd/sata.c                   |  6 +++---
>  cmd/scsi.c                   |  6 +++---
>  cmd/usb_mass_storage.c       |  2 +-
>  cmd/zfs.c                    |  2 +-
>  common/env_fat.c             |  4 ++--
>  common/fb_mmc.c              |  4 ++--
>  common/usb_storage.c         |  6 +++---
>  disk/part.c                  |  8 ++------
>  disk/part_dos.c              | 29 +++++++++++++++++------------
>  disk/part_efi.c              |  4 ++--
>  disk/part_iso.c              | 39 ++++++++++++++++++++-------------------
>  disk/part_mac.c              | 22 +++++++++++-----------
>  drivers/block/sandbox.c      |  6 +++---
>  drivers/block/systemace.c    |  2 +-
>  drivers/mmc/arm_pl180_mmci.c |  2 +-
>  drivers/mmc/mmc.c            |  8 ++++----
>  drivers/mmc/mmc_write.c      |  4 ++--
>  drivers/mmc/mxsmmc.c         | 24 ++++++++++++------------
>  drivers/mmc/omap_hsmmc.c     |  4 ++--
>  drivers/mmc/sdhci.c          |  2 +-
>  fs/fat/fat.c                 |  4 ++--
>  include/blk.h                |  2 +-
>  29 files changed, 112 insertions(+), 109 deletions(-)
>
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 420481a..fd0cab9 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -336,8 +336,8 @@ int board_mmc_init(bd_t *bis)
>         if (!sunxi_mmc_has_egon_boot_signature(mmc0) &&
>             sunxi_mmc_has_egon_boot_signature(mmc1)) {
>                 /* Booting from emmc / mmc2, swap */
> -               mmc0->block_dev.dev = 1;
> -               mmc1->block_dev.dev = 0;
> +               mmc0->block_dev.devnum = 1;
> +               mmc1->block_dev.devnum = 0;
>         }
>  #endif
>
> diff --git a/cmd/cbfs.c b/cmd/cbfs.c
> index cdfc9b6..779e9c0 100644
> --- a/cmd/cbfs.c
> +++ b/cmd/cbfs.c
> @@ -141,6 +141,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>                         type_name = "cmos layout";
>                         break;
>                 case -1:
> +               case 0:

Guess you didn't want this change (a git rebase ordering issue?)

>                         type_name = "null";
>                         break;
>                 }

[snip]

Other than that,
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

Regards,
Bin

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function
  2016-02-15  2:16 ` [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function Simon Glass
@ 2016-02-16 14:51   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-16 14:51 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> To ease conversion to driver model, add helper functions which deal with
> calling each block device method. With driver model we can reimplement these
> functions with the same arguments.
>
> Use inline functions to avoid increasing code size on some boards.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  cmd/disk.c            |  6 +++---
>  cmd/ide.c             |  4 ++--
>  cmd/read.c            |  2 +-
>  cmd/usb.c             |  6 ++----
>  common/fb_mmc.c       |  5 +++--
>  disk/part_amiga.c     |  9 ++++-----
>  disk/part_dos.c       |  8 +++-----
>  disk/part_efi.c       | 34 +++++++++++++++-------------------
>  disk/part_iso.c       |  6 +++---
>  disk/part_mac.c       |  9 ++++-----
>  fs/ext4/dev.c         | 23 ++++++++++-------------
>  fs/ext4/ext4_common.c | 27 +++++++++------------------
>  fs/fat/fat.c          |  6 +++---
>  fs/fat/fat_write.c    |  5 ++---
>  include/blk.h         | 29 +++++++++++++++++++++++++++++
>  test/dm/usb.c         |  2 +-
>  16 files changed, 94 insertions(+), 87 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str()
  2016-02-15  2:16 ` [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str() Simon Glass
  2016-02-16 14:02   ` Bin Meng
@ 2016-02-16 23:14   ` Stephen Warren
  1 sibling, 0 replies; 69+ messages in thread
From: Stephen Warren @ 2016-02-16 23:14 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> The current name is too generic. The function returns a block device based
> on a provided string. Rename it to aid searching and make its purpose
> clearer. Also add a few comments.

> +int blk_get_device_str(const char *ifname, const char *dev_str,
> +		       struct blk_desc **dev_desc);

Bikeshed: s/_str/_by_str/? Otherwise it somewhat sounds like it returns 
a "device_str" rather than returns a "device" and searches for it using 
a "str".

Of course, this is a really annoying comment that would cause a large 
amount of work, so feel free to ignore it.

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum
  2016-02-15  2:16 ` [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum Simon Glass
  2016-02-16 14:51   ` Bin Meng
@ 2016-02-16 23:23   ` Stephen Warren
  2016-02-29  4:19     ` Simon Glass
  1 sibling, 1 reply; 69+ messages in thread
From: Stephen Warren @ 2016-02-16 23:23 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> This is a device number, and we want to use 'dev' to mean a driver model
> device. Rename the member.

> diff --git a/cmd/cbfs.c b/cmd/cbfs.c
> index cdfc9b6..779e9c0 100644
> --- a/cmd/cbfs.c
> +++ b/cmd/cbfs.c
> @@ -141,6 +141,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>   			type_name = "cmos layout";
>   			break;
>   		case -1:
> +		case 0:
>   			type_name = "null";
>   			break;
>   		}

Should that be part of the earlier cbfs fix patch?

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox
  2016-02-15  2:16 ` [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox Simon Glass
@ 2016-02-16 23:34   ` Stephen Warren
  2016-02-29  4:19     ` Simon Glass
  0 siblings, 1 reply; 69+ messages in thread
From: Stephen Warren @ 2016-02-16 23:34 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> Update the host driver to support driver model for block devices. A future
> commit will remove the old code, but for now it is useful to be able to use
> it both with and without CONFIG_BLK.

> diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c

> +#ifdef CONFIG_BLK
> +int host_dev_bind(int devnum, char *filename)
> +{
> +	struct host_block_dev *host_dev;
> +	struct udevice *dev;
> +	char dev_name[20], *str, *fname;
...
> +	sprintf(dev_name, "host%d", devnum);

Use snprintf() to avoid overflow?

> +	str = strdup(dev_name);
> +	if (!str)
> +		return -ENOMEM;
> +	fname = strdup(filename);
> +	if (!fname) {
> +		free(str);
> +		return -ENOMEM;
> +	}

Do those get free()d somewhere on unbind?

Actually, I don't see any unbind() function in this file (even before 
this patch).

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers
  2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
                   ` (30 preceding siblings ...)
  2016-02-15 22:37 ` [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Tom Rini
@ 2016-02-16 23:43 ` Stephen Warren
  2016-02-29  4:19   ` Simon Glass
  31 siblings, 1 reply; 69+ messages in thread
From: Stephen Warren @ 2016-02-16 23:43 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> Recent additions of the MMC and DISK uclasses have indicated that it is time
> to look at adding a uclass for block devices. This series does this and
> includes a few clean-ups to the partition code also.
>
> A block device is typically a child device of its storage parent. For
> example an MMC device will have a block-device child. A USB storage device
> may have multiple block-device children, one for each LUN.
>
> With this series only USB storage and 'host' are converted over to use the
> new support. Several more remain, including SCSI, IDE and MMC. Each of these
> should get its own uclass.
>
> The uclass implements only a few basic features. A few tests are added to
> check that things work as expected.
>
> The code size impact of switching to driver model for block devices is
> small. One benefit is that it becomes possible to enumerate all block
> devices, regardless of their type.

This series looks OK, and I would give it an Acked-by, except that it 
seems to break DFU to SD card on the 3 systems where I'm running 
test/py, and even cause "dhcp" to fail on one of them (that could be 
either memory corruption caused by these patches, or pre-existing 
corruption that these patches shuffle around in memory so it only now 
causes a problem). I'll see if I can bisect these down to a specific 
patch in the series and see what's up.

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code
  2016-02-15  2:16 ` [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code Simon Glass
  2016-02-16 10:09   ` Bin Meng
@ 2016-02-17  0:19   ` Stephen Warren
  1 sibling, 0 replies; 69+ messages in thread
From: Stephen Warren @ 2016-02-17  0:19 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> Each region is displayed in almost the same way. Break out this common code
> into its own function.

> diff --git a/drivers/pci/pci_auto_common.c b/drivers/pci/pci_auto_common.c

> +	if (hose->pci_mem)
> +		pciauto_show_region("Memory", hose->pci_mem);
> +	if (hose->pci_prefetch)
> +		pciauto_show_region("Prefetchable Mem", hose->pci_mem);

That parameter should be hose->pci_prefetch

> +	if (hose->pci_io)
> +		pciauto_show_region("I/O", hose->pci_io);

With that fixed, the "dhcp" failure I mentioned earlier is fixed (the 
system in question uses PCIe Ethernet).

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass
  2016-02-15  2:16 ` [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass Simon Glass
@ 2016-02-17  4:49   ` Bin Meng
  0 siblings, 0 replies; 69+ messages in thread
From: Bin Meng @ 2016-02-17  4:49 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
> Add a uclass for block devices. These provide block-oriented data access,
> supporting reading, writing and erasing of whole blocks.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  drivers/block/Kconfig      |  11 +++
>  drivers/block/Makefile     |   2 +
>  drivers/block/blk-uclass.c | 175 +++++++++++++++++++++++++++++++++++++++++++++
>  include/blk.h              | 145 +++++++++++++++++++++++++++++++++++++
>  include/dm/uclass-id.h     |   1 +
>  5 files changed, 334 insertions(+)
>  create mode 100644 drivers/block/blk-uclass.c
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
  2016-02-15 22:37   ` Tom Rini
  2016-02-16 14:25   ` Bin Meng
@ 2016-02-17  6:41   ` Stephen Warren
  2016-02-29  4:48     ` Simon Glass
  2 siblings, 1 reply; 69+ messages in thread
From: Stephen Warren @ 2016-02-17  6:41 UTC (permalink / raw)
  To: u-boot

On 02/14/2016 07:16 PM, Simon Glass wrote:
> We can use linker lists instead of explicitly declaring each function.
> This makes the code shorter by avoiding switch() statements and lots of
> header file declarations.
> 
> While this does clean up the code it introduces a few code issues with SPL.
> SPL never needs to print partition information since this all happens from
> commands. SPL mostly doesn't need to obtain information about a partition
> either, except in a few cases. Add these cases so that the code will be
> dropped from each partition driver when not needed. This avoids code bloat.
> 
> I think this is still a win, since it is not a bad thing to be explicit
> about which features are used in SPL. But others may like to weigh in.

This patch changes the order in which partition types are detected,
which matters when multiple partition types match (a GPT often/always
has a protective MBR too). Consequently, this breaks GPT support.

By hacking around this (turning off DOS partition support), and fixing
the PCIe issue I mentioned elsewhere, test/py seems to work for me with
this series applied.

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code
  2016-02-16 10:09   ` Bin Meng
@ 2016-02-29  4:18     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:18 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 16 February 2016 at 03:09, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
>> Each region is displayed in almost the same way. Break out this common code
>> into its own function.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  drivers/pci/pci_auto_common.c | 51 +++++++++++++++----------------------------
>>  1 file changed, 17 insertions(+), 34 deletions(-)
>>
>> diff --git a/drivers/pci/pci_auto_common.c b/drivers/pci/pci_auto_common.c
>> index 85c419e..a5c16b9 100644
>> --- a/drivers/pci/pci_auto_common.c
>> +++ b/drivers/pci/pci_auto_common.c
>> @@ -62,6 +62,17 @@ int pciauto_region_allocate(struct pci_region *res, pci_size_t size,
>>         return -1;
>>  }
>>
>> +static void pciauto_show_region(const char *name, struct pci_region *region)
>> +{
>> +       pciauto_region_init(region);
>> +       debug("PCI Autoconfig: Bus %s region: [0x%llx-0x%llx],\n"
>> +             "\t\tPhysical Memory [%llx-%llxx]\n", name,
>
> While we are here, can we add '0x' prefix to Physical Memory output?

We shouldn't really do that - in fact the 0x should probably be
removed, since hex is U-Boot's default display base.

>
>> +             (unsigned long long)region->bus_start,
>> +             (unsigned long long)(region->bus_start + region->size - 1),
>> +             (unsigned long long)region->phys_start,
>> +             (unsigned long long)(region->phys_start + region->size - 1));
>
> Why changing previous (u64) to (unsigned long long)?

It fixes a compiler warning on sandbox for me using stdint.h. Not a
big deal but I thought I'd do it at the same time.

>
>> +}
>> +
>>  void pciauto_config_init(struct pci_controller *hose)
>>  {
>>         int i;
>> @@ -91,38 +102,10 @@ void pciauto_config_init(struct pci_controller *hose)
>>         }
>>
>>
>> -       if (hose->pci_mem) {
>> -               pciauto_region_init(hose->pci_mem);
>> -
>> -               debug("PCI Autoconfig: Bus Memory region: [0x%llx-0x%llx],\n"
>> -                      "\t\tPhysical Memory [%llx-%llxx]\n",
>> -                   (u64)hose->pci_mem->bus_start,
>> -                   (u64)(hose->pci_mem->bus_start + hose->pci_mem->size - 1),
>> -                   (u64)hose->pci_mem->phys_start,
>> -                   (u64)(hose->pci_mem->phys_start + hose->pci_mem->size - 1));
>> -       }
>> -
>> -       if (hose->pci_prefetch) {
>> -               pciauto_region_init(hose->pci_prefetch);
>> -
>> -               debug("PCI Autoconfig: Bus Prefetchable Mem: [0x%llx-0x%llx],\n"
>> -                      "\t\tPhysical Memory [%llx-%llx]\n",
>> -                   (u64)hose->pci_prefetch->bus_start,
>> -                   (u64)(hose->pci_prefetch->bus_start +
>> -                           hose->pci_prefetch->size - 1),
>> -                   (u64)hose->pci_prefetch->phys_start,
>> -                   (u64)(hose->pci_prefetch->phys_start +
>> -                           hose->pci_prefetch->size - 1));
>> -       }
>> -
>> -       if (hose->pci_io) {
>> -               pciauto_region_init(hose->pci_io);
>> -
>> -               debug("PCI Autoconfig: Bus I/O region: [0x%llx-0x%llx],\n"
>> -                      "\t\tPhysical Memory: [%llx-%llx]\n",
>> -                   (u64)hose->pci_io->bus_start,
>> -                   (u64)(hose->pci_io->bus_start + hose->pci_io->size - 1),
>> -                   (u64)hose->pci_io->phys_start,
>> -                   (u64)(hose->pci_io->phys_start + hose->pci_io->size - 1));
>> -       }
>> +       if (hose->pci_mem)
>> +               pciauto_show_region("Memory", hose->pci_mem);
>> +       if (hose->pci_prefetch)
>> +               pciauto_show_region("Prefetchable Mem", hose->pci_mem);
>> +       if (hose->pci_io)
>> +               pciauto_show_region("I/O", hose->pci_io);
>>  }
>> --
>
> Regards,
> Bin

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning
  2016-02-16 10:09   ` Bin Meng
@ 2016-02-29  4:18     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:18 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 16 February 2016 at 03:09, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
>> Adjust the cast to avoid a warning when stdint.h is used.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  disk/part_efi.c | 10 ++++++----
>>  1 file changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/disk/part_efi.c b/disk/part_efi.c
>> index db5e7ed..7bd840f 100644
>> --- a/disk/part_efi.c
>> +++ b/disk/part_efi.c
>> @@ -658,11 +658,13 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>>                 gpt_part_size = le64_to_cpu(gpt_e[i].ending_lba) -
>>                         le64_to_cpu(gpt_e[i].starting_lba) + 1;
>>                 debug("size(LBA) - GPT: %8llu, ENV: %8llu ",
>> -                     gpt_part_size, (u64) partitions[i].size);
>> +                     (unsigned long long)gpt_part_size,
>> +                     (unsigned long long)partitions[i].size);
>
> Can you elaborate why this is needed?

When using stdint.h (CONFIG_USE_STDINT) I get this warning with
sandbox. I don't know if it is my compiler or there is a better way to
make stdint work...

>
>>
>>                 if (le64_to_cpu(gpt_part_size) != partitions[i].size) {
>>                         error("Partition %s size: %llu does not match %llu!\n",
>> -                             efi_str, gpt_part_size, (u64) partitions[i].size);
>> +                             efi_str, (unsigned long long)gpt_part_size,
>> +                             (unsigned long long)partitions[i].size);
>>                         return -1;
>>                 }
>>
>> @@ -678,12 +680,12 @@ int gpt_verify_partitions(struct blk_desc *dev_desc,
>>                 /* Check if GPT and ENV start LBAs match */
>>                 debug("start LBA - GPT: %8llu, ENV: %8llu\n",
>>                       le64_to_cpu(gpt_e[i].starting_lba),
>> -                     (u64) partitions[i].start);
>> +                     (unsigned long long)partitions[i].start);
>>
>>                 if (le64_to_cpu(gpt_e[i].starting_lba) != partitions[i].start) {
>>                         error("Partition %s start: %llu does not match %llu!\n",
>>                               efi_str, le64_to_cpu(gpt_e[i].starting_lba),
>> -                             (u64) partitions[i].start);
>> +                             (unsigned long long)partitions[i].start);
>>                         return -1;
>>                 }
>>         }
>> --

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-16 14:25   ` Bin Meng
@ 2016-02-29  4:18     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:18 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 16 February 2016 at 07:25, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
>> We can use linker lists instead of explicitly declaring each function.
>> This makes the code shorter by avoiding switch() statements and lots of
>> header file declarations.
>>
>> While this does clean up the code it introduces a few code issues with SPL.
>> SPL never needs to print partition information since this all happens from
>> commands. SPL mostly doesn't need to obtain information about a partition
>> either, except in a few cases. Add these cases so that the code will be
>> dropped from each partition driver when not needed. This avoids code bloat.
>>
>> I think this is still a win, since it is not a bad thing to be explicit
>> about which features are used in SPL. But others may like to weigh in.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  disk/part.c       | 184 +++++++++++++++++-------------------------------------
>>  disk/part_amiga.c |  16 +++--
>>  disk/part_dos.c   |   9 ++-
>>  disk/part_efi.c   |  10 ++-
>>  disk/part_iso.c   |  16 +++--
>>  disk/part_mac.c   |  16 +++--
>>  include/part.h    |  79 ++++++++++++++---------
>>  7 files changed, 157 insertions(+), 173 deletions(-)
>>
>
> [snip]
>
>> diff --git a/disk/part_amiga.c b/disk/part_amiga.c
>> index 5702c95..0f569f0 100644
>> --- a/disk/part_amiga.c
>> +++ b/disk/part_amiga.c
>> @@ -207,7 +207,7 @@ struct bootcode_block *get_bootcode(struct blk_desc *dev_desc)
>>   * Test if the given partition has an Amiga partition table/Rigid
>>   * Disk block
>>   */
>> -int test_part_amiga(struct blk_desc *dev_desc)
>> +static int test_part_amiga(struct blk_desc *dev_desc)
>>  {
>>      struct rigid_disk_block *rdb;
>>      struct bootcode_block *bootcode;
>> @@ -291,8 +291,8 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
>>  /*
>>   * Get info about a partition
>>   */
>> -int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>> -                            disk_partition_t *info)
>> +static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>> +                                   disk_partition_t *info)
>>  {
>>      struct partition_block *p = find_partition(dev_desc, part-1);
>>      struct amiga_part_geometry *g;
>> @@ -319,7 +319,7 @@ int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>>      return 0;
>>  }
>>
>> -void print_part_amiga(struct blk_desc *dev_desc)
>> +static void print_part_amiga(struct blk_desc *dev_desc)
>>  {
>>      struct rigid_disk_block *rdb;
>>      struct bootcode_block *boot;
>> @@ -379,4 +379,12 @@ void print_part_amiga(struct blk_desc *dev_desc)
>>      }
>>  }
>>
>> +U_BOOT_PART_TYPE(amiga) = {
>> +       .name           = "AMIGA",
>> +       .part_type      = PART_TYPE_AMIGA,
>> +       .get_info       = get_partition_info_amiga,
>> +       .print          = print_part_amiga,
>> +       .test           = test_part_amiga,
>> +};
>> +
>>  #endif
>> diff --git a/disk/part_dos.c b/disk/part_dos.c
>> index ea0315c..7567ed3 100644
>> --- a/disk/part_dos.c
>> +++ b/disk/part_dos.c
>> @@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
>>  }
>>
>>
>> -int test_part_dos(struct blk_desc *dev_desc)
>> +static int test_part_dos(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
>>
>> @@ -295,5 +295,12 @@ int get_partition_info_dos(struct blk_desc *dev_desc, int part,
>>         return get_partition_info_extended(dev_desc, 0, 0, 1, part, info, 0);
>>  }
>>
>> +U_BOOT_PART_TYPE(dos) = {
>> +       .name           = "DOS",
>> +       .part_type      = PART_TYPE_DOS,
>> +       .get_info       = part_get_info_ptr(get_partition_info_dos),
>
> Does this compile?

These are defined in part.h. I had to add these to avoid bloating the
code since these functions are never called in SPL.

>
>> +       .print          = part_print_ptr(print_part_dos),
>
> and this?
>
>> +       .test           = test_part_dos,
>> +};
>>
>>  #endif
>> diff --git a/disk/part_efi.c b/disk/part_efi.c
>> index 7bd840f..6f80877 100644
>> --- a/disk/part_efi.c
>> +++ b/disk/part_efi.c
>> @@ -319,7 +319,7 @@ int get_partition_info_efi_by_name(struct blk_desc *dev_desc,
>>         return -2;
>>  }
>>
>> -int test_part_efi(struct blk_desc *dev_desc)
>> +static int test_part_efi(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER_PAD(legacy_mbr, legacymbr, 1, dev_desc->blksz);
>>
>> @@ -953,4 +953,12 @@ static int is_pte_valid(gpt_entry * pte)
>>                 return 1;
>>         }
>>  }
>> +
>> +U_BOOT_PART_TYPE(efi) = {
>> +       .name           = "EFI",
>> +       .part_type      = PART_TYPE_EFI,
>> +       .get_info       = part_get_info_ptr(get_partition_info_efi),
>> +       .print          = part_print_ptr(print_part_efi),
>
> and these?
>
>> +       .test           = test_part_efi,
>> +};
>>  #endif
>> diff --git a/disk/part_iso.c b/disk/part_iso.c
>> index 2984df5..1d72d23 100644
>> --- a/disk/part_iso.c
>> +++ b/disk/part_iso.c
>> @@ -217,14 +217,13 @@ found:
>>         return 0;
>>  }
>>
>> -int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
>> -                          disk_partition_t *info)
>> +static int get_partition_info_iso(struct blk_desc *dev_desc, int part_num,
>> +                                 disk_partition_t *info)
>>  {
>>         return(get_partition_info_iso_verb(dev_desc, part_num, info, 1));
>>  }
>>
>> -
>> -void print_part_iso(struct blk_desc *dev_desc)
>> +static void print_part_iso(struct blk_desc *dev_desc)
>>  {
>>         disk_partition_t info;
>>         int i;
>> @@ -241,11 +240,18 @@ void print_part_iso(struct blk_desc *dev_desc)
>>         } while (get_partition_info_iso_verb(dev_desc,i,&info,0)!=-1);
>>  }
>>
>> -int test_part_iso(struct blk_desc *dev_desc)
>> +static int test_part_iso(struct blk_desc *dev_desc)
>>  {
>>         disk_partition_t info;
>>
>>         return(get_partition_info_iso_verb(dev_desc,0,&info,0));
>>  }
>>
>> +U_BOOT_PART_TYPE(iso) = {
>> +       .name           = "ISO",
>> +       .part_type      = PART_TYPE_ISO,
>> +       .get_info       = get_partition_info_iso,
>> +       .print          = print_part_iso,
>> +       .test           = test_part_iso,
>> +};
>>  #endif
>> diff --git a/disk/part_mac.c b/disk/part_mac.c
>> index ae83495..3fb3b16 100644
>> --- a/disk/part_mac.c
>> +++ b/disk/part_mac.c
>> @@ -40,7 +40,7 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>>  /*
>>   * Test for a valid MAC partition
>>   */
>> -int test_part_mac(struct blk_desc *dev_desc)
>> +static int test_part_mac(struct blk_desc *dev_desc)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
>> @@ -64,8 +64,7 @@ int test_part_mac(struct blk_desc *dev_desc)
>>         return (0);
>>  }
>>
>> -
>> -void print_part_mac(struct blk_desc *dev_desc)
>> +static void print_part_mac(struct blk_desc *dev_desc)
>>  {
>>         ulong i, n;
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>> @@ -214,8 +213,8 @@ static int part_mac_read_pdb(struct blk_desc *dev_desc, int part,
>>         /* NOTREACHED */
>>  }
>>
>> -int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>> -                          disk_partition_t *info)
>> +static int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>> +                                 disk_partition_t *info)
>>  {
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_driver_desc_t, ddesc, 1);
>>         ALLOC_CACHE_ALIGN_BUFFER(mac_partition_t, mpart, 1);
>> @@ -238,4 +237,11 @@ int get_partition_info_mac(struct blk_desc *dev_desc, int part,
>>         return (0);
>>  }
>>
>> +U_BOOT_PART_TYPE(mac) = {
>> +       .name           = "MAC",
>> +       .part_type      = PART_TYPE_MAC,
>> +       .get_info       = get_partition_info_mac,
>> +       .print          = print_part_mac,
>> +       .test           = test_part_mac,
>> +};
>>  #endif
>
> [snip]
>
> Regards,
> Bin

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions
  2016-02-16 14:25   ` Bin Meng
@ 2016-02-29  4:19     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 16 February 2016 at 07:25, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
>> Rename three partition functions so that they start with part_. This makes
>> it clear what they relate to.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  board/cm5200/fwupdate.c   |  2 +-
>>  cmd/ide.c                 |  6 +++---
>>  cmd/mmc.c                 |  2 +-
>>  cmd/part.c                |  8 ++++----
>>  cmd/read.c                |  2 +-
>>  cmd/sata.c                |  6 +++---
>>  cmd/scsi.c                |  6 +++---
>>  cmd/usb.c                 |  4 ++--
>>  common/fb_mmc.c           | 10 +++++-----
>>  common/spl/spl_ext.c      |  6 ++----
>>  common/spl/spl_mmc.c      |  2 +-
>>  common/usb_storage.c      |  2 +-
>>  disk/part.c               | 12 ++++++------
>>  disk/part_amiga.c         |  4 ++--
>>  disk/part_dos.c           | 19 +++++++++----------
>>  disk/part_efi.c           | 10 +++++-----
>>  disk/part_iso.c           | 17 +++++++++--------
>>  disk/part_mac.c           |  4 ++--
>>  drivers/block/pata_bfin.c |  2 +-
>>  drivers/block/sandbox.c   |  2 +-
>>  drivers/block/systemace.c |  2 +-
>>  drivers/dfu/dfu_mmc.c     |  2 +-
>>  drivers/mmc/mmc.c         |  2 +-
>>  fs/fat/fat.c              |  2 +-
>>  include/part.h            | 21 ++++++++++-----------
>>  25 files changed, 76 insertions(+), 79 deletions(-)
>>
>
> [snip]
>
>> diff --git a/disk/part_amiga.c b/disk/part_amiga.c
>> index 0f569f0..d323b4b 100644
>> --- a/disk/part_amiga.c
>> +++ b/disk/part_amiga.c
>> @@ -291,7 +291,7 @@ static struct partition_block *find_partition(struct blk_desc *dev_desc,
>>  /*
>>   * Get info about a partition
>>   */
>> -static int get_partition_info_amiga(struct blk_desc *dev_desc, int part,
>> +static int part_get_info_amiga(struct blk_desc *dev_desc, int part,
>>                                     disk_partition_t *info)
>>  {
>>      struct partition_block *p = find_partition(dev_desc, part-1);
>> @@ -382,7 +382,7 @@ static void print_part_amiga(struct blk_desc *dev_desc)
>>  U_BOOT_PART_TYPE(amiga) = {
>>         .name           = "AMIGA",
>>         .part_type      = PART_TYPE_AMIGA,
>> -       .get_info       = get_partition_info_amiga,
>> +       .get_info       = part_get_info_amiga,
>>         .print          = print_part_amiga,
>>         .test           = test_part_amiga,
>
> Can we rename these two to: part_print_amiga and part_test_amiga too?

Yes I'll do these renames in a separate patch for v2.

[snip]

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type
  2016-02-16 14:51   ` Bin Meng
@ 2016-02-29  4:19     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 16 February 2016 at 07:51, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Feb 15, 2016 at 10:16 AM, Simon Glass <sjg@chromium.org> wrote:
>> The comment for file_cbfs_type() says that it returns 0 for an invalid type.
>> The code appears to check for -1, except that it uses an unsigned variable
>> to store the type. This results in a warning on 64-bit machines.
>>
>> Adjust it to make the meaning clearer. Continue to handle the -1 case since
>> it may be needed.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>> ---
>>
>>  cmd/cbfs.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/cmd/cbfs.c b/cmd/cbfs.c
>> index 35d8a7a..cdfc9b6 100644
>> --- a/cmd/cbfs.c
>> +++ b/cmd/cbfs.c
>> @@ -103,7 +103,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>         printf("     size              type  name\n");
>>         printf("------------------------------------------\n");
>>         while (file) {
>> -               u32 type = file_cbfs_type(file);
>> +               int type = file_cbfs_type(file);
>
> but file_cbfs_type() returns u32 as its type..
>
>>                 char *type_name = NULL;
>>                 const char *filename = file_cbfs_name(file);
>>
>> @@ -140,7 +140,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>                 case CBFS_COMPONENT_CMOS_LAYOUT:
>>                         type_name = "cmos layout";
>>                         break;
>> -               case -1UL:
>> +               case -1:
>
> What about: case (u32)-1UL:

Actually they are the same thing. This code is pretty horrible - I
suspect the return value of -1 is intended, but since it is u32 they
use -1UL. But there is no need for that really.

>
>>                         type_name = "null";
>>                         break;
>>                 }
>> --

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum
  2016-02-16 23:23   ` Stephen Warren
@ 2016-02-29  4:19     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On 16 February 2016 at 16:23, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 02/14/2016 07:16 PM, Simon Glass wrote:
>>
>> This is a device number, and we want to use 'dev' to mean a driver model
>> device. Rename the member.
>
>
>> diff --git a/cmd/cbfs.c b/cmd/cbfs.c
>> index cdfc9b6..779e9c0 100644
>> --- a/cmd/cbfs.c
>> +++ b/cmd/cbfs.c
>> @@ -141,6 +141,7 @@ int do_cbfs_ls(cmd_tbl_t *cmdtp, int flag, int argc,
>> char *const argv[])
>>                         type_name = "cmos layout";
>>                         break;
>>                 case -1:
>> +               case 0:
>>                         type_name = "null";
>>                         break;
>>                 }
>
>
> Should that be part of the earlier cbfs fix patch?
>

Yes, will move it.

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox
  2016-02-16 23:34   ` Stephen Warren
@ 2016-02-29  4:19     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On 16 February 2016 at 16:34, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 02/14/2016 07:16 PM, Simon Glass wrote:
>>
>> Update the host driver to support driver model for block devices. A future
>> commit will remove the old code, but for now it is useful to be able to
>> use
>> it both with and without CONFIG_BLK.
>
>
>> diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
>
>
>> +#ifdef CONFIG_BLK
>> +int host_dev_bind(int devnum, char *filename)
>> +{
>> +       struct host_block_dev *host_dev;
>> +       struct udevice *dev;
>> +       char dev_name[20], *str, *fname;
>
> ...
>>
>> +       sprintf(dev_name, "host%d", devnum);
>
>
> Use snprintf() to avoid overflow?

OK.

>
>> +       str = strdup(dev_name);
>> +       if (!str)
>> +               return -ENOMEM;
>> +       fname = strdup(filename);
>> +       if (!fname) {
>> +               free(str);
>> +               return -ENOMEM;
>> +       }
>
>
> Do those get free()d somewhere on unbind?
>
> Actually, I don't see any unbind() function in this file (even before this
> patch).

The unbinding is at the top of this function - if you overwrite an
existing device. It's a bit clunky. I suspect we can do better when
everything is on driver model.

There is no free(). This is a memory leak. It only affects sandbox though.

Actually we have similar memory leaks elsewhere when device names are
allocated, for example with GPIO. I haven't considered it a high
priority so far, but one possible fix is to add a device flag to
indicate that the name should be free on unbind().

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers
  2016-02-15 22:37 ` [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Tom Rini
@ 2016-02-29  4:19   ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Tom,

On 15 February 2016 at 15:37, Tom Rini <trini@konsulko.com> wrote:
> On Sun, Feb 14, 2016 at 07:16:29PM -0700, Simon Glass wrote:
>
>> Recent additions of the MMC and DISK uclasses have indicated that it is time
>> to look at adding a uclass for block devices. This series does this and
>> includes a few clean-ups to the partition code also.
>>
>> A block device is typically a child device of its storage parent. For
>> example an MMC device will have a block-device child. A USB storage device
>> may have multiple block-device children, one for each LUN.
>>
>> With this series only USB storage and 'host' are converted over to use the
>> new support. Several more remain, including SCSI, IDE and MMC. Each of these
>> should get its own uclass.
>>
>> The uclass implements only a few basic features. A few tests are added to
>> check that things work as expected.
>>
>> The code size impact of switching to driver model for block devices is
>> small. One benefit is that it becomes possible to enumerate all block
>> devices, regardless of their type.
>
> Things generally make sense.  I've tossed out a few Reviewed-by's for
> some things but I looked over everything.  My only question is have you
> run buildman -S and compared the numbers, especially for things that
> aren't opting in yet?  A few oddballs have been spotted by that already
> :)

Yes I found quite a few problems that way. There was SPL code bloat
and also general bloat with more code being linked in than before. But
I believe all of that was fixed. Let me know if you see anything
though.

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers
  2016-02-16 23:43 ` Stephen Warren
@ 2016-02-29  4:19   ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:19 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On 16 February 2016 at 16:43, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 02/14/2016 07:16 PM, Simon Glass wrote:
>>
>> Recent additions of the MMC and DISK uclasses have indicated that it is
>> time
>> to look at adding a uclass for block devices. This series does this and
>> includes a few clean-ups to the partition code also.
>>
>> A block device is typically a child device of its storage parent. For
>> example an MMC device will have a block-device child. A USB storage device
>> may have multiple block-device children, one for each LUN.
>>
>> With this series only USB storage and 'host' are converted over to use the
>> new support. Several more remain, including SCSI, IDE and MMC. Each of
>> these
>> should get its own uclass.
>>
>> The uclass implements only a few basic features. A few tests are added to
>> check that things work as expected.
>>
>> The code size impact of switching to driver model for block devices is
>> small. One benefit is that it becomes possible to enumerate all block
>> devices, regardless of their type.
>
>
> This series looks OK, and I would give it an Acked-by, except that it seems
> to break DFU to SD card on the 3 systems where I'm running test/py, and even
> cause "dhcp" to fail on one of them (that could be either memory corruption
> caused by these patches, or pre-existing corruption that these patches
> shuffle around in memory so it only now causes a problem). I'll see if I can
> bisect these down to a specific patch in the series and see what's up.

It sounds like you found the bug there, and I'll include the fix in
v2. Thanks very much for testing this. I will try to get it in very
early in the merge window as it is risky. But your automated tests are
a big comfort.

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

* [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists
  2016-02-17  6:41   ` Stephen Warren
@ 2016-02-29  4:48     ` Simon Glass
  0 siblings, 0 replies; 69+ messages in thread
From: Simon Glass @ 2016-02-29  4:48 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On 16 February 2016 at 23:41, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 02/14/2016 07:16 PM, Simon Glass wrote:
>> We can use linker lists instead of explicitly declaring each function.
>> This makes the code shorter by avoiding switch() statements and lots of
>> header file declarations.
>>
>> While this does clean up the code it introduces a few code issues with SPL.
>> SPL never needs to print partition information since this all happens from
>> commands. SPL mostly doesn't need to obtain information about a partition
>> either, except in a few cases. Add these cases so that the code will be
>> dropped from each partition driver when not needed. This avoids code bloat.
>>
>> I think this is still a win, since it is not a bad thing to be explicit
>> about which features are used in SPL. But others may like to weigh in.
>
> This patch changes the order in which partition types are detected,
> which matters when multiple partition types match (a GPT often/always
> has a protective MBR too). Consequently, this breaks GPT support.
>
> By hacking around this (turning off DOS partition support), and fixing
> the PCIe issue I mentioned elsewhere, test/py seems to work for me with
> this series applied.

Thanks for finding this and for your comment on the other patch too.
I'll fix the ordering for v2.

Regards,
Simon

^ permalink raw reply	[flat|nested] 69+ messages in thread

end of thread, other threads:[~2016-02-29  4:48 UTC | newest]

Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-15  2:16 [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 01/30] dm: Drop the block_dev_desc_t typedef Simon Glass
2016-02-16 10:09   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 02/30] dm: pci: Break out the common region display code Simon Glass
2016-02-16 10:09   ` Bin Meng
2016-02-29  4:18     ` Simon Glass
2016-02-17  0:19   ` Stephen Warren
2016-02-15  2:16 ` [U-Boot] [PATCH 03/30] dm: part: Correct a sandbox build warning Simon Glass
2016-02-16 10:09   ` Bin Meng
2016-02-29  4:18     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 04/30] dm: fdtdec: " Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 05/30] dm: part: Drop the common.h header Simon Glass
2016-02-16 10:09   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 06/30] dm: Add a new header for block devices Simon Glass
2016-02-16 10:10   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 07/30] dm: blk: Convert interface type to an enum Simon Glass
2016-02-16 10:10   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 08/30] dm: blk: Add comments to a few functions Simon Glass
2016-02-16 10:10   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 09/30] dm: blk: Rename get_dev() to blk_get_dev() Simon Glass
2016-02-16 10:10   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 10/30] dm: blk: Rename get_device() to blk_get_device_str() Simon Glass
2016-02-16 14:02   ` Bin Meng
2016-02-16 23:14   ` Stephen Warren
2016-02-15  2:16 ` [U-Boot] [PATCH 11/30] dm: blk: Rename get_device_and_partition() Simon Glass
2016-02-16 14:02   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 12/30] dm: part: Add a cast to avoid a compiler warning Simon Glass
2016-02-16 14:02   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 13/30] dm: sandbox: Enable all partition types Simon Glass
2016-02-15 22:37   ` Tom Rini
2016-02-16 14:02   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 14/30] dm: part: Convert partition API use to linker lists Simon Glass
2016-02-15 22:37   ` Tom Rini
2016-02-16 14:25   ` Bin Meng
2016-02-29  4:18     ` Simon Glass
2016-02-17  6:41   ` Stephen Warren
2016-02-29  4:48     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 15/30] dm: part: Rename some partition functions Simon Glass
2016-02-16 14:25   ` Bin Meng
2016-02-29  4:19     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 16/30] dm: cbfs: Fix handling of invalid type Simon Glass
2016-02-16 14:51   ` Bin Meng
2016-02-29  4:19     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 17/30] dm: sandbox: Enable cbfs and cramfs Simon Glass
2016-02-16 14:51   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 18/30] dm: block: Rename device number member dev to devnum Simon Glass
2016-02-16 14:51   ` Bin Meng
2016-02-16 23:23   ` Stephen Warren
2016-02-29  4:19     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 19/30] dm: block: Adjust device calls to go through helpers function Simon Glass
2016-02-16 14:51   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 20/30] dm: usb: Avoid exceeding available array size for storage devices Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 21/30] dm: usb: Tidy up storage code ready for driver model conversion Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 22/30] dm: blk: Add a block-device uclass Simon Glass
2016-02-17  4:49   ` Bin Meng
2016-02-15  2:16 ` [U-Boot] [PATCH 23/30] dm: sandbox: Prepare block driver for driver-model conversion Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 24/30] dm: sandbox: Add driver-model block-device support for sandbox Simon Glass
2016-02-16 23:34   ` Stephen Warren
2016-02-29  4:19     ` Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 25/30] dm: usb: Convert USB storage to use driver-model for block devs Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 26/30] dm: usb: Unbind old block devices when shutting down USB Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 27/30] dm: sandbox: Switch over to use DM for block devices Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 28/30] dm: sandbox: Drop the pre-DM host implementation Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 29/30] dm: usb: Clean up USB after each test Simon Glass
2016-02-15  2:16 ` [U-Boot] [PATCH 30/30] dm: blk: Add tests for block devices Simon Glass
2016-02-15 22:37 ` [U-Boot] [PATCH 00/30] dm: Add driver-model support for block drivers Tom Rini
2016-02-29  4:19   ` Simon Glass
2016-02-16 23:43 ` Stephen Warren
2016-02-29  4:19   ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.