public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size
@ 2017-09-04  9:08 Bin Meng
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Bin Meng @ 2017-09-04  9:08 UTC (permalink / raw)
  To: u-boot

So far these are using magic numbers. Replace them with macros.

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

Changes in v2: None

 include/blk.h | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/include/blk.h b/include/blk.h
index a106f9c..fced138 100644
--- a/include/blk.h
+++ b/include/blk.h
@@ -36,6 +36,10 @@ enum if_type {
 	IF_TYPE_COUNT,			/* Number of interface types */
 };
 
+#define BLK_VEN_SIZE		41
+#define BLK_PRD_SIZE		21
+#define BLK_REV_SIZE		9
+
 /*
  * With driver model (CONFIG_BLK) this is uclass platform data, accessible
  * with dev_get_uclass_platdata(dev)
@@ -60,9 +64,9 @@ struct blk_desc {
 	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 */
+	char		vendor[BLK_VEN_SIZE];	/* device vendor string */
+	char		product[BLK_PRD_SIZE];	/* device product number */
+	char		revision[BLK_REV_SIZE];	/* firmware revision */
 #if CONFIG_IS_ENABLED(BLK)
 	/*
 	 * For now we have a few functions which take struct blk_desc as a
-- 
2.9.2

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

* [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model
  2017-09-04  9:08 [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Bin Meng
@ 2017-09-04  9:08 ` Bin Meng
  2017-09-04 13:47   ` Heinrich Schuchardt
                     ` (2 more replies)
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted Bin Meng
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 12+ messages in thread
From: Bin Meng @ 2017-09-04  9:08 UTC (permalink / raw)
  To: u-boot

This converts the IDE driver to driver model so that block read and
write are fully functional.

Fixes: b7c6baef ("x86: Convert MMC to driver model")
Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

---

Changes in v2:
- Fixed 'fatls ide 0' issue

 drivers/block/blk-uclass.c |  2 +-
 drivers/block/ide.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++
 include/dm/uclass-id.h     |  1 +
 3 files changed, 70 insertions(+), 1 deletion(-)

diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
index e5f00dc..8e58580 100644
--- a/drivers/block/blk-uclass.c
+++ b/drivers/block/blk-uclass.c
@@ -26,7 +26,7 @@ static const char *if_typename_str[IF_TYPE_COUNT] = {
 };
 
 static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = {
-	[IF_TYPE_IDE]		= UCLASS_INVALID,
+	[IF_TYPE_IDE]		= UCLASS_IDE,
 	[IF_TYPE_SCSI]		= UCLASS_SCSI,
 	[IF_TYPE_ATAPI]		= UCLASS_INVALID,
 	[IF_TYPE_USB]		= UCLASS_MASS_STORAGE,
diff --git a/drivers/block/ide.c b/drivers/block/ide.c
index ce51153..58b295e 100644
--- a/drivers/block/ide.c
+++ b/drivers/block/ide.c
@@ -827,12 +827,20 @@ void ide_init(void)
 		ide_ident(&ide_dev_desc[i]);
 		dev_print(&ide_dev_desc[i]);
 
+#ifndef CONFIG_BLK
 		if ((ide_dev_desc[i].lba > 0) && (ide_dev_desc[i].blksz > 0)) {
 			/* initialize partition type */
 			part_init(&ide_dev_desc[i]);
 		}
+#endif
 	}
 	WATCHDOG_RESET();
+
+#ifdef CONFIG_BLK
+	struct udevice *dev;
+
+	uclass_first_device(UCLASS_IDE, &dev);
+#endif
 }
 
 /* We only need to swap data if we are running on a big endian cpu. */
@@ -1147,6 +1155,21 @@ int ide_device_present(int dev)
 #endif
 
 #ifdef CONFIG_BLK
+static int ide_blk_probe(struct udevice *udev)
+{
+	struct blk_desc *desc = dev_get_uclass_platdata(udev);
+	int devnum = desc->devnum;
+
+	/* fill in device vendor/product/rev strings */
+	strncpy(desc->vendor, ide_dev_desc[devnum].vendor, BLK_VEN_SIZE);
+	strncpy(desc->product, ide_dev_desc[devnum].product, BLK_PRD_SIZE);
+	strncpy(desc->revision, ide_dev_desc[devnum].revision, BLK_REV_SIZE);
+
+	part_init(desc);
+
+	return 0;
+}
+
 static const struct blk_ops ide_blk_ops = {
 	.read	= ide_read,
 	.write	= ide_write,
@@ -1156,6 +1179,51 @@ U_BOOT_DRIVER(ide_blk) = {
 	.name		= "ide_blk",
 	.id		= UCLASS_BLK,
 	.ops		= &ide_blk_ops,
+	.probe		= ide_blk_probe,
+};
+
+static int ide_probe(struct udevice *udev)
+{
+	struct udevice *blk_dev;
+	char name[20];
+	int blksz;
+	lbaint_t size;
+	int i;
+	int ret;
+
+	for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
+		if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
+			sprintf(name, "blk#%d", i);
+
+			blksz = ide_dev_desc[i].blksz;
+			size = blksz * ide_dev_desc[i].lba;
+			ret = blk_create_devicef(udev, "ide_blk", name,
+						 IF_TYPE_IDE, i,
+						 blksz, size, &blk_dev);
+			if (ret)
+				return ret;
+		}
+	}
+
+	return 0;
+}
+
+U_BOOT_DRIVER(ide) = {
+	.name		= "ide",
+	.id		= UCLASS_IDE,
+	.probe		= ide_probe,
+};
+
+struct pci_device_id ide_supported[] = {
+	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xffff00) },
+	{ }
+};
+
+U_BOOT_PCI_DEVICE(ide, ide_supported);
+
+UCLASS_DRIVER(ide) = {
+	.name		= "ide",
+	.id		= UCLASS_IDE,
 };
 #else
 U_BOOT_LEGACY_BLK(ide) = {
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 1a50199..3fc2083 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -41,6 +41,7 @@ enum uclass_id {
 	UCLASS_I2C_EEPROM,	/* I2C EEPROM device */
 	UCLASS_I2C_GENERIC,	/* Generic I2C device */
 	UCLASS_I2C_MUX,		/* I2C multiplexer */
+	UCLASS_IDE,		/* IDE device */
 	UCLASS_IRQ,		/* Interrupt controller */
 	UCLASS_KEYBOARD,	/* Keyboard input device */
 	UCLASS_LED,		/* Light-emitting diode (LED) */
-- 
2.9.2

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

* [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted
  2017-09-04  9:08 [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Bin Meng
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
@ 2017-09-04  9:08 ` Bin Meng
  2017-09-05  8:56   ` Simon Glass
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one Bin Meng
  2017-09-05  8:56 ` [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Simon Glass
  3 siblings, 1 reply; 12+ messages in thread
From: Bin Meng @ 2017-09-04  9:08 UTC (permalink / raw)
  To: u-boot

When there is no CDROM inserted, the block size is zero hence there
is no need to create a BLK device for it.

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

Changes in v2: None

 drivers/block/ide.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/block/ide.c b/drivers/block/ide.c
index 58b295e..8125ff8 100644
--- a/drivers/block/ide.c
+++ b/drivers/block/ide.c
@@ -1197,6 +1197,13 @@ static int ide_probe(struct udevice *udev)
 
 			blksz = ide_dev_desc[i].blksz;
 			size = blksz * ide_dev_desc[i].lba;
+
+			/*
+			 * With CDROM, if there is no CD inserted, blksz will
+			 * be zero, don't bother to create IDE block device.
+			 */
+			if (!blksz)
+				continue;
 			ret = blk_create_devicef(udev, "ide_blk", name,
 						 IF_TYPE_IDE, i,
 						 blksz, size, &blk_dev);
-- 
2.9.2

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

* [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one
  2017-09-04  9:08 [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Bin Meng
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted Bin Meng
@ 2017-09-04  9:08 ` Bin Meng
  2017-09-05  8:57   ` Simon Glass
  2017-09-05  8:56 ` [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Simon Glass
  3 siblings, 1 reply; 12+ messages in thread
From: Bin Meng @ 2017-09-04  9:08 UTC (permalink / raw)
  To: u-boot

At present the IDE device number is initialized to -1, which means
we cannot type "ide read" command before setting the device number
via "ide device #".

For convenience, let's set the first device as the default one.

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

---

Changes in v2: None

 cmd/ide.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmd/ide.c b/cmd/ide.c
index e3c3242..bdb5980 100644
--- a/cmd/ide.c
+++ b/cmd/ide.c
@@ -30,7 +30,7 @@
 #endif
 
 /* Current I/O Device	*/
-static int curr_device = -1;
+static int curr_device;
 
 int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 {
-- 
2.9.2

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

* [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
@ 2017-09-04 13:47   ` Heinrich Schuchardt
  2017-09-04 14:10   ` Heinrich Schuchardt
  2017-09-05  8:56   ` Simon Glass
  2 siblings, 0 replies; 12+ messages in thread
From: Heinrich Schuchardt @ 2017-09-04 13:47 UTC (permalink / raw)
  To: u-boot

On 09/04/2017 11:08 AM, Bin Meng wrote:
> This converts the IDE driver to driver model so that block read and
> write are fully functional.
> 
> Fixes: b7c6baef ("x86: Convert MMC to driver model")

Now I am able to load a file from the IDE disk and execute it with
bootefi. Thanks a lot for fixing this.

I think this is release critical and should be merged into 2017.09.

Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> 
> ---
> 
> Changes in v2:
> - Fixed 'fatls ide 0' issue
> 
>  drivers/block/blk-uclass.c |  2 +-
>  drivers/block/ide.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++
>  include/dm/uclass-id.h     |  1 +
>  3 files changed, 70 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> index e5f00dc..8e58580 100644
> --- a/drivers/block/blk-uclass.c
> +++ b/drivers/block/blk-uclass.c
> @@ -26,7 +26,7 @@ static const char *if_typename_str[IF_TYPE_COUNT] = {
>  };
>  
>  static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = {
> -	[IF_TYPE_IDE]		= UCLASS_INVALID,
> +	[IF_TYPE_IDE]		= UCLASS_IDE,
>  	[IF_TYPE_SCSI]		= UCLASS_SCSI,
>  	[IF_TYPE_ATAPI]		= UCLASS_INVALID,
>  	[IF_TYPE_USB]		= UCLASS_MASS_STORAGE,
> diff --git a/drivers/block/ide.c b/drivers/block/ide.c
> index ce51153..58b295e 100644
> --- a/drivers/block/ide.c
> +++ b/drivers/block/ide.c
> @@ -827,12 +827,20 @@ void ide_init(void)
>  		ide_ident(&ide_dev_desc[i]);
>  		dev_print(&ide_dev_desc[i]);
>  
> +#ifndef CONFIG_BLK
>  		if ((ide_dev_desc[i].lba > 0) && (ide_dev_desc[i].blksz > 0)) {
>  			/* initialize partition type */
>  			part_init(&ide_dev_desc[i]);
>  		}
> +#endif
>  	}
>  	WATCHDOG_RESET();
> +
> +#ifdef CONFIG_BLK
> +	struct udevice *dev;
> +
> +	uclass_first_device(UCLASS_IDE, &dev);
> +#endif
>  }
>  
>  /* We only need to swap data if we are running on a big endian cpu. */
> @@ -1147,6 +1155,21 @@ int ide_device_present(int dev)
>  #endif
>  
>  #ifdef CONFIG_BLK
> +static int ide_blk_probe(struct udevice *udev)
> +{
> +	struct blk_desc *desc = dev_get_uclass_platdata(udev);
> +	int devnum = desc->devnum;
> +
> +	/* fill in device vendor/product/rev strings */
> +	strncpy(desc->vendor, ide_dev_desc[devnum].vendor, BLK_VEN_SIZE);
> +	strncpy(desc->product, ide_dev_desc[devnum].product, BLK_PRD_SIZE);
> +	strncpy(desc->revision, ide_dev_desc[devnum].revision, BLK_REV_SIZE);
> +
> +	part_init(desc);
> +
> +	return 0;
> +}
> +
>  static const struct blk_ops ide_blk_ops = {
>  	.read	= ide_read,
>  	.write	= ide_write,
> @@ -1156,6 +1179,51 @@ U_BOOT_DRIVER(ide_blk) = {
>  	.name		= "ide_blk",
>  	.id		= UCLASS_BLK,
>  	.ops		= &ide_blk_ops,
> +	.probe		= ide_blk_probe,
> +};
> +
> +static int ide_probe(struct udevice *udev)
> +{
> +	struct udevice *blk_dev;
> +	char name[20];
> +	int blksz;
> +	lbaint_t size;
> +	int i;
> +	int ret;
> +
> +	for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
> +		if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
> +			sprintf(name, "blk#%d", i);
> +
> +			blksz = ide_dev_desc[i].blksz;
> +			size = blksz * ide_dev_desc[i].lba;
> +			ret = blk_create_devicef(udev, "ide_blk", name,
> +						 IF_TYPE_IDE, i,
> +						 blksz, size, &blk_dev);
> +			if (ret)
> +				return ret;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
> +U_BOOT_DRIVER(ide) = {
> +	.name		= "ide",
> +	.id		= UCLASS_IDE,
> +	.probe		= ide_probe,
> +};
> +
> +struct pci_device_id ide_supported[] = {
> +	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xffff00) },
> +	{ }
> +};
> +
> +U_BOOT_PCI_DEVICE(ide, ide_supported);
> +
> +UCLASS_DRIVER(ide) = {
> +	.name		= "ide",
> +	.id		= UCLASS_IDE,
>  };
>  #else
>  U_BOOT_LEGACY_BLK(ide) = {
> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
> index 1a50199..3fc2083 100644
> --- a/include/dm/uclass-id.h
> +++ b/include/dm/uclass-id.h
> @@ -41,6 +41,7 @@ enum uclass_id {
>  	UCLASS_I2C_EEPROM,	/* I2C EEPROM device */
>  	UCLASS_I2C_GENERIC,	/* Generic I2C device */
>  	UCLASS_I2C_MUX,		/* I2C multiplexer */
> +	UCLASS_IDE,		/* IDE device */
>  	UCLASS_IRQ,		/* Interrupt controller */
>  	UCLASS_KEYBOARD,	/* Keyboard input device */
>  	UCLASS_LED,		/* Light-emitting diode (LED) */
> 

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

* [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
  2017-09-04 13:47   ` Heinrich Schuchardt
@ 2017-09-04 14:10   ` Heinrich Schuchardt
  2017-09-05  7:56     ` Bin Meng
  2017-09-05  8:56   ` Simon Glass
  2 siblings, 1 reply; 12+ messages in thread
From: Heinrich Schuchardt @ 2017-09-04 14:10 UTC (permalink / raw)
  To: u-boot

On 09/04/2017 11:08 AM, Bin Meng wrote:
> This converts the IDE driver to driver model so that block read and
> write are fully functional.
> 
> Fixes: b7c6baef ("x86: Convert MMC to driver model")
> Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> 
> ---
> 
> Changes in v2:
> - Fixed 'fatls ide 0' issue
> 
>  drivers/block/blk-uclass.c |  2 +-
>  drivers/block/ide.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++
>  include/dm/uclass-id.h     |  1 +
>  3 files changed, 70 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> index e5f00dc..8e58580 100644
> --- a/drivers/block/blk-uclass.c
> +++ b/drivers/block/blk-uclass.c
> @@ -26,7 +26,7 @@ static const char *if_typename_str[IF_TYPE_COUNT] = {
>  };
>  
>  static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = {
> -	[IF_TYPE_IDE]		= UCLASS_INVALID,
> +	[IF_TYPE_IDE]		= UCLASS_IDE,
>  	[IF_TYPE_SCSI]		= UCLASS_SCSI,
>  	[IF_TYPE_ATAPI]		= UCLASS_INVALID,
>  	[IF_TYPE_USB]		= UCLASS_MASS_STORAGE,
> diff --git a/drivers/block/ide.c b/drivers/block/ide.c
> index ce51153..58b295e 100644
> --- a/drivers/block/ide.c
> +++ b/drivers/block/ide.c
> @@ -827,12 +827,20 @@ void ide_init(void)
>  		ide_ident(&ide_dev_desc[i]);
>  		dev_print(&ide_dev_desc[i]);
>  
> +#ifndef CONFIG_BLK
>  		if ((ide_dev_desc[i].lba > 0) && (ide_dev_desc[i].blksz > 0)) {
>  			/* initialize partition type */
>  			part_init(&ide_dev_desc[i]);
>  		}
> +#endif
>  	}
>  	WATCHDOG_RESET();
> +
> +#ifdef CONFIG_BLK
> +	struct udevice *dev;
> +
> +	uclass_first_device(UCLASS_IDE, &dev);
> +#endif
>  }
>  
>  /* We only need to swap data if we are running on a big endian cpu. */
> @@ -1147,6 +1155,21 @@ int ide_device_present(int dev)
>  #endif
>  
>  #ifdef CONFIG_BLK
> +static int ide_blk_probe(struct udevice *udev)
> +{
> +	struct blk_desc *desc = dev_get_uclass_platdata(udev);
> +	int devnum = desc->devnum;
> +
> +	/* fill in device vendor/product/rev strings */
> +	strncpy(desc->vendor, ide_dev_desc[devnum].vendor, BLK_VEN_SIZE);
> +	strncpy(desc->product, ide_dev_desc[devnum].product, BLK_PRD_SIZE);
> +	strncpy(desc->revision, ide_dev_desc[devnum].revision, BLK_REV_SIZE);
> +
> +	part_init(desc);
> +
> +	return 0;
> +}
> +
>  static const struct blk_ops ide_blk_ops = {
>  	.read	= ide_read,
>  	.write	= ide_write,
> @@ -1156,6 +1179,51 @@ U_BOOT_DRIVER(ide_blk) = {
>  	.name		= "ide_blk",
>  	.id		= UCLASS_BLK,
>  	.ops		= &ide_blk_ops,
> +	.probe		= ide_blk_probe,
> +};
> +
> +static int ide_probe(struct udevice *udev)
> +{
> +	struct udevice *blk_dev;
> +	char name[20];
> +	int blksz;
> +	lbaint_t size;
> +	int i;
> +	int ret;
> +
> +	for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
> +		if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
> +			sprintf(name, "blk#%d", i);
> +
> +			blksz = ide_dev_desc[i].blksz;
> +			size = blksz * ide_dev_desc[i].lba;
> +			ret = blk_create_devicef(udev, "ide_blk", name,
> +						 IF_TYPE_IDE, i,
> +						 blksz, size, &blk_dev);
> +			if (ret)
> +				return ret;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
> +U_BOOT_DRIVER(ide) = {
> +	.name		= "ide",
> +	.id		= UCLASS_IDE,
> +	.probe		= ide_probe,
> +};
> +
> +struct pci_device_id ide_supported[] = {
> +	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xffff00) },
> +	{ }
> +};
> +
> +U_BOOT_PCI_DEVICE(ide, ide_supported);
> +
> +UCLASS_DRIVER(ide) = {
> +	.name		= "ide",
> +	.id		= UCLASS_IDE,
>  };
>  #else
>  U_BOOT_LEGACY_BLK(ide) = {
> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
> index 1a50199..3fc2083 100644
> --- a/include/dm/uclass-id.h
> +++ b/include/dm/uclass-id.h
> @@ -41,6 +41,7 @@ enum uclass_id {
>  	UCLASS_I2C_EEPROM,	/* I2C EEPROM device */
>  	UCLASS_I2C_GENERIC,	/* Generic I2C device */
>  	UCLASS_I2C_MUX,		/* I2C multiplexer */
> +	UCLASS_IDE,		/* IDE device */
>  	UCLASS_IRQ,		/* Interrupt controller */
>  	UCLASS_KEYBOARD,	/* Keyboard input device */
>  	UCLASS_LED,		/* Light-emitting diode (LED) */
> 

Hello Bin,

I assume the same sort of changes as in ide.c is needed in
drivers/ata/sata.c too.

When booting I see these error messages:
** Bad device scsi 0 **
Error: Invalid Boot Flag (found 0x0000, expected 0xaa55)

qemu-system-x86_64 -m 1G -bios denx/u-boot.rom -nographic \
-netdev \
user,id=eth0,tftp=tftp,net=192.168.76.0/24,dhcpstart=192.168.76.9 \
-device e1000,netdev=eth0 -machine pc-i440fx-2.8 \
-drive file=img,if=scsi,bus=0,unit=6

Best regards

Heinrich

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

* [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model
  2017-09-04 14:10   ` Heinrich Schuchardt
@ 2017-09-05  7:56     ` Bin Meng
  0 siblings, 0 replies; 12+ messages in thread
From: Bin Meng @ 2017-09-05  7:56 UTC (permalink / raw)
  To: u-boot

Hi Heinrich,

On Mon, Sep 4, 2017 at 10:10 PM, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
> On 09/04/2017 11:08 AM, Bin Meng wrote:
>> This converts the IDE driver to driver model so that block read and
>> write are fully functional.
>>
>> Fixes: b7c6baef ("x86: Convert MMC to driver model")
>> Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
>>
>> ---
>>
>> Changes in v2:
>> - Fixed 'fatls ide 0' issue
>>
>>  drivers/block/blk-uclass.c |  2 +-
>>  drivers/block/ide.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++
>>  include/dm/uclass-id.h     |  1 +
>>  3 files changed, 70 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
>> index e5f00dc..8e58580 100644
>> --- a/drivers/block/blk-uclass.c
>> +++ b/drivers/block/blk-uclass.c
>> @@ -26,7 +26,7 @@ static const char *if_typename_str[IF_TYPE_COUNT] = {
>>  };
>>
>>  static enum uclass_id if_type_uclass_id[IF_TYPE_COUNT] = {
>> -     [IF_TYPE_IDE]           = UCLASS_INVALID,
>> +     [IF_TYPE_IDE]           = UCLASS_IDE,
>>       [IF_TYPE_SCSI]          = UCLASS_SCSI,
>>       [IF_TYPE_ATAPI]         = UCLASS_INVALID,
>>       [IF_TYPE_USB]           = UCLASS_MASS_STORAGE,
>> diff --git a/drivers/block/ide.c b/drivers/block/ide.c
>> index ce51153..58b295e 100644
>> --- a/drivers/block/ide.c
>> +++ b/drivers/block/ide.c
>> @@ -827,12 +827,20 @@ void ide_init(void)
>>               ide_ident(&ide_dev_desc[i]);
>>               dev_print(&ide_dev_desc[i]);
>>
>> +#ifndef CONFIG_BLK
>>               if ((ide_dev_desc[i].lba > 0) && (ide_dev_desc[i].blksz > 0)) {
>>                       /* initialize partition type */
>>                       part_init(&ide_dev_desc[i]);
>>               }
>> +#endif
>>       }
>>       WATCHDOG_RESET();
>> +
>> +#ifdef CONFIG_BLK
>> +     struct udevice *dev;
>> +
>> +     uclass_first_device(UCLASS_IDE, &dev);
>> +#endif
>>  }
>>
>>  /* We only need to swap data if we are running on a big endian cpu. */
>> @@ -1147,6 +1155,21 @@ int ide_device_present(int dev)
>>  #endif
>>
>>  #ifdef CONFIG_BLK
>> +static int ide_blk_probe(struct udevice *udev)
>> +{
>> +     struct blk_desc *desc = dev_get_uclass_platdata(udev);
>> +     int devnum = desc->devnum;
>> +
>> +     /* fill in device vendor/product/rev strings */
>> +     strncpy(desc->vendor, ide_dev_desc[devnum].vendor, BLK_VEN_SIZE);
>> +     strncpy(desc->product, ide_dev_desc[devnum].product, BLK_PRD_SIZE);
>> +     strncpy(desc->revision, ide_dev_desc[devnum].revision, BLK_REV_SIZE);
>> +
>> +     part_init(desc);
>> +
>> +     return 0;
>> +}
>> +
>>  static const struct blk_ops ide_blk_ops = {
>>       .read   = ide_read,
>>       .write  = ide_write,
>> @@ -1156,6 +1179,51 @@ U_BOOT_DRIVER(ide_blk) = {
>>       .name           = "ide_blk",
>>       .id             = UCLASS_BLK,
>>       .ops            = &ide_blk_ops,
>> +     .probe          = ide_blk_probe,
>> +};
>> +
>> +static int ide_probe(struct udevice *udev)
>> +{
>> +     struct udevice *blk_dev;
>> +     char name[20];
>> +     int blksz;
>> +     lbaint_t size;
>> +     int i;
>> +     int ret;
>> +
>> +     for (i = 0; i < CONFIG_SYS_IDE_MAXDEVICE; i++) {
>> +             if (ide_dev_desc[i].type != DEV_TYPE_UNKNOWN) {
>> +                     sprintf(name, "blk#%d", i);
>> +
>> +                     blksz = ide_dev_desc[i].blksz;
>> +                     size = blksz * ide_dev_desc[i].lba;
>> +                     ret = blk_create_devicef(udev, "ide_blk", name,
>> +                                              IF_TYPE_IDE, i,
>> +                                              blksz, size, &blk_dev);
>> +                     if (ret)
>> +                             return ret;
>> +             }
>> +     }
>> +
>> +     return 0;
>> +}
>> +
>> +U_BOOT_DRIVER(ide) = {
>> +     .name           = "ide",
>> +     .id             = UCLASS_IDE,
>> +     .probe          = ide_probe,
>> +};
>> +
>> +struct pci_device_id ide_supported[] = {
>> +     { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xffff00) },
>> +     { }
>> +};
>> +
>> +U_BOOT_PCI_DEVICE(ide, ide_supported);
>> +
>> +UCLASS_DRIVER(ide) = {
>> +     .name           = "ide",
>> +     .id             = UCLASS_IDE,
>>  };
>>  #else
>>  U_BOOT_LEGACY_BLK(ide) = {
>> diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
>> index 1a50199..3fc2083 100644
>> --- a/include/dm/uclass-id.h
>> +++ b/include/dm/uclass-id.h
>> @@ -41,6 +41,7 @@ enum uclass_id {
>>       UCLASS_I2C_EEPROM,      /* I2C EEPROM device */
>>       UCLASS_I2C_GENERIC,     /* Generic I2C device */
>>       UCLASS_I2C_MUX,         /* I2C multiplexer */
>> +     UCLASS_IDE,             /* IDE device */
>>       UCLASS_IRQ,             /* Interrupt controller */
>>       UCLASS_KEYBOARD,        /* Keyboard input device */
>>       UCLASS_LED,             /* Light-emitting diode (LED) */
>>
>
> Hello Bin,
>
> I assume the same sort of changes as in ide.c is needed in
> drivers/ata/sata.c too.
>
> When booting I see these error messages:
> ** Bad device scsi 0 **
> Error: Invalid Boot Flag (found 0x0000, expected 0xaa55)
>
> qemu-system-x86_64 -m 1G -bios denx/u-boot.rom -nographic \
> -netdev \
> user,id=eth0,tftp=tftp,net=192.168.76.0/24,dhcpstart=192.168.76.9 \
> -device e1000,netdev=eth0 -machine pc-i440fx-2.8 \
> -drive file=img,if=scsi,bus=0,unit=6
>

I never used QEMU to enable any SCSI device. Looks this should be a
SCSI device, but you referred to drivers/ata/sata.c. Is that the
correct driver for this device? Does the U-Boot driver work before
(without the commit: b7c6baef "x86: Convert MMC to driver model")?

Regards,
Bin

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

* [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size
  2017-09-04  9:08 [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Bin Meng
                   ` (2 preceding siblings ...)
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one Bin Meng
@ 2017-09-05  8:56 ` Simon Glass
  3 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-09-05  8:56 UTC (permalink / raw)
  To: u-boot

On 4 September 2017 at 17:08, Bin Meng <bmeng.cn@gmail.com> wrote:
> So far these are using magic numbers. Replace them with macros.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>
> Changes in v2: None
>
>  include/blk.h | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>

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

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

* [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
  2017-09-04 13:47   ` Heinrich Schuchardt
  2017-09-04 14:10   ` Heinrich Schuchardt
@ 2017-09-05  8:56   ` Simon Glass
  2 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-09-05  8:56 UTC (permalink / raw)
  To: u-boot

On 4 September 2017 at 17:08, Bin Meng <bmeng.cn@gmail.com> wrote:
> This converts the IDE driver to driver model so that block read and
> write are fully functional.
>
> Fixes: b7c6baef ("x86: Convert MMC to driver model")
> Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
>
> ---
>
> Changes in v2:
> - Fixed 'fatls ide 0' issue
>
>  drivers/block/blk-uclass.c |  2 +-
>  drivers/block/ide.c        | 68 ++++++++++++++++++++++++++++++++++++++++++++++
>  include/dm/uclass-id.h     |  1 +
>  3 files changed, 70 insertions(+), 1 deletion(-)
>

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

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

* [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted Bin Meng
@ 2017-09-05  8:56   ` Simon Glass
  2017-09-05  9:04     ` Bin Meng
  0 siblings, 1 reply; 12+ messages in thread
From: Simon Glass @ 2017-09-05  8:56 UTC (permalink / raw)
  To: u-boot

On 4 September 2017 at 17:08, Bin Meng <bmeng.cn@gmail.com> wrote:
> When there is no CDROM inserted, the block size is zero hence there
> is no need to create a BLK device for it.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>
> Changes in v2: None
>
>  drivers/block/ide.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>

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


> diff --git a/drivers/block/ide.c b/drivers/block/ide.c
> index 58b295e..8125ff8 100644
> --- a/drivers/block/ide.c
> +++ b/drivers/block/ide.c
> @@ -1197,6 +1197,13 @@ static int ide_probe(struct udevice *udev)
>
>                         blksz = ide_dev_desc[i].blksz;
>                         size = blksz * ide_dev_desc[i].lba;
> +
> +                       /*
> +                        * With CDROM, if there is no CD inserted, blksz will
> +                        * be zero, don't bother to create IDE block device.
> +                        */

I suppose that if you insert one, you then need to rerun the ide scan
to find it?

> +                       if (!blksz)
> +                               continue;
>                         ret = blk_create_devicef(udev, "ide_blk", name,
>                                                  IF_TYPE_IDE, i,
>                                                  blksz, size, &blk_dev);
> --
> 2.9.2
>

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

* [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one
  2017-09-04  9:08 ` [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one Bin Meng
@ 2017-09-05  8:57   ` Simon Glass
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-09-05  8:57 UTC (permalink / raw)
  To: u-boot

On 4 September 2017 at 17:08, Bin Meng <bmeng.cn@gmail.com> wrote:
> At present the IDE device number is initialized to -1, which means
> we cannot type "ide read" command before setting the device number
> via "ide device #".
>
> For convenience, let's set the first device as the default one.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
>
> ---
>
> Changes in v2: None
>
>  cmd/ide.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>

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

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

* [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted
  2017-09-05  8:56   ` Simon Glass
@ 2017-09-05  9:04     ` Bin Meng
  0 siblings, 0 replies; 12+ messages in thread
From: Bin Meng @ 2017-09-05  9:04 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Tue, Sep 5, 2017 at 4:56 PM, Simon Glass <sjg@chromium.org> wrote:
> On 4 September 2017 at 17:08, Bin Meng <bmeng.cn@gmail.com> wrote:
>> When there is no CDROM inserted, the block size is zero hence there
>> is no need to create a BLK device for it.
>>
>> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
>> ---
>>
>> Changes in v2: None
>>
>>  drivers/block/ide.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
>
>> diff --git a/drivers/block/ide.c b/drivers/block/ide.c
>> index 58b295e..8125ff8 100644
>> --- a/drivers/block/ide.c
>> +++ b/drivers/block/ide.c
>> @@ -1197,6 +1197,13 @@ static int ide_probe(struct udevice *udev)
>>
>>                         blksz = ide_dev_desc[i].blksz;
>>                         size = blksz * ide_dev_desc[i].lba;
>> +
>> +                       /*
>> +                        * With CDROM, if there is no CD inserted, blksz will
>> +                        * be zero, don't bother to create IDE block device.
>> +                        */
>
> I suppose that if you insert one, you then need to rerun the ide scan
> to find it?
>

Yes, we need call "ide reset" from the U-Boot shell, like we do for USB.

>> +                       if (!blksz)
>> +                               continue;
>>                         ret = blk_create_devicef(udev, "ide_blk", name,
>>                                                  IF_TYPE_IDE, i,
>>                                                  blksz, size, &blk_dev);
>> --

Regards,
Bin

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

end of thread, other threads:[~2017-09-05  9:04 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-04  9:08 [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Bin Meng
2017-09-04  9:08 ` [U-Boot] [PATCH v2 2/4] block: ide: Fix block read/write with driver model Bin Meng
2017-09-04 13:47   ` Heinrich Schuchardt
2017-09-04 14:10   ` Heinrich Schuchardt
2017-09-05  7:56     ` Bin Meng
2017-09-05  8:56   ` Simon Glass
2017-09-04  9:08 ` [U-Boot] [PATCH v2 3/4] block: ide: Don't bother to create BLK device if no CDROM inserted Bin Meng
2017-09-05  8:56   ` Simon Glass
2017-09-05  9:04     ` Bin Meng
2017-09-04  9:08 ` [U-Boot] [PATCH v2 4/4] cmd: ide: Make the first device the default one Bin Meng
2017-09-05  8:57   ` Simon Glass
2017-09-05  8:56 ` [U-Boot] [PATCH v2 1/4] blk: Use macros for block device vendor/product/rev string size Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox