All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: AKASHI Takahiro <takahiro.akashi@linaro.org>
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>,
	Alex Graf <agraf@csgraf.de>,
	 Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	U-Boot Mailing List <u-boot@lists.denx.de>
Subject: Re: [RFC 10/22] dm: blk: add read/write interfaces with udevice
Date: Sun, 10 Oct 2021 08:14:16 -0600	[thread overview]
Message-ID: <CAPnjgZ2Je1Hs=0hmkOvZ7Zea9QNcwENh3MUwsnBnXSNyjaXQnw@mail.gmail.com> (raw)
In-Reply-To: <20211001050228.55183-20-takahiro.akashi@linaro.org>

Hi Takahiro,

On Thu, 30 Sept 2021 at 23:03, AKASHI Takahiro
<takahiro.akashi@linaro.org> wrote:
>
> In include/blk.h, Simon suggested:
> ===>
> /*
>  * 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);
> <===
>
> So new interfaces are provided with this patch.
>
> They are expected to be used everywhere in U-Boot at the end. The exceptions
> are block device drivers, partition drivers and efi_disk which should know
> details of blk_desc structure.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> ---
>  drivers/block/blk-uclass.c | 91 ++++++++++++++++++++++++++++++++++++++
>  include/blk.h              |  6 +++
>  2 files changed, 97 insertions(+)
>
> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> index 6ba11a8fa7f7..8fbec8779e1e 100644
> --- a/drivers/block/blk-uclass.c
> +++ b/drivers/block/blk-uclass.c
> @@ -482,6 +482,97 @@ unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
>         return ops->erase(dev, start, blkcnt);
>  }
>
> +static struct blk_desc *dev_get_blk(struct udevice *dev)
> +{
> +       struct blk_desc *block_dev;
> +
> +       switch (device_get_uclass_id(dev)) {
> +       case UCLASS_BLK:
> +               block_dev = dev_get_uclass_plat(dev);
> +               break;
> +       case UCLASS_PARTITION:
> +               block_dev = dev_get_uclass_plat(dev_get_parent(dev));
> +               break;
> +       default:
> +               block_dev = NULL;
> +               break;
> +       }
> +
> +       return block_dev;
> +}
> +
> +unsigned long blk_read(struct udevice *dev, lbaint_t start,
> +                      lbaint_t blkcnt, void *buffer)
> +{
> +       struct blk_desc *block_dev;
> +       const struct blk_ops *ops;
> +       struct disk_part *part;
> +       lbaint_t start_in_disk;
> +       ulong blks_read;
> +
> +       block_dev = dev_get_blk(dev);
> +       if (!block_dev)
> +               return -ENOSYS;

IMO blk_read() should take a block device. That is how all other DM
APIs work. I think it is too confusing to use the parent device here.

So how about changing these functions to take a blk device, then
adding new ones for what you want here, e.g.

int media_read(struct udevice *dev...
{
   struct udevice *blk;

       blk = dev_get_blk(dev);
       if (!blk)
               return -ENOSYS;

   ret = blk_read(blk, ...
}

Also can we use blk instead of block_dev?

> +
> +       ops = blk_get_ops(dev);
> +       if (!ops->read)
> +               return -ENOSYS;
> +
> +       start_in_disk = start;
> +       if (device_get_uclass_id(dev) == UCLASS_PARTITION) {
> +               part = dev_get_uclass_plat(dev);
> +               start_in_disk += part->gpt_part_info.start;
> +       }
> +
> +       if (blkcache_read(block_dev->if_type, block_dev->devnum,
> +                         start_in_disk, blkcnt, block_dev->blksz, buffer))
> +               return blkcnt;
> +       blks_read = ops->read(dev, start, blkcnt, buffer);
> +       if (blks_read == blkcnt)
> +               blkcache_fill(block_dev->if_type, block_dev->devnum,
> +                             start_in_disk, blkcnt, block_dev->blksz, buffer);
> +
> +       return blks_read;
> +}
> +
> +unsigned long blk_write(struct udevice *dev, lbaint_t start,
> +                       lbaint_t blkcnt, const void *buffer)
> +{
> +       struct blk_desc *block_dev;
> +       const struct blk_ops *ops;
> +
> +       block_dev = dev_get_blk(dev);
> +       if (!block_dev)
> +               return -ENOSYS;
> +
> +       ops = blk_get_ops(dev);
> +       if (!ops->write)
> +               return -ENOSYS;
> +
> +       blkcache_invalidate(block_dev->if_type, block_dev->devnum);
> +
> +       return ops->write(dev, start, blkcnt, buffer);
> +}
> +
> +unsigned long blk_erase(struct udevice *dev, lbaint_t start,
> +                       lbaint_t blkcnt)
> +{
> +       struct blk_desc *block_dev;
> +       const struct blk_ops *ops;
> +
> +       block_dev = dev_get_blk(dev);
> +       if (!block_dev)
> +               return -ENOSYS;
> +
> +       ops = blk_get_ops(dev);
> +       if (!ops->erase)
> +               return -ENOSYS;
> +
> +       blkcache_invalidate(block_dev->if_type, block_dev->devnum);
> +
> +       return ops->erase(dev, start, blkcnt);
> +}
> +
>  int blk_get_from_parent(struct udevice *parent, struct udevice **devp)
>  {
>         struct udevice *dev;
> diff --git a/include/blk.h b/include/blk.h
> index 3d883eb1db64..f5fdd6633a09 100644
> --- a/include/blk.h
> +++ b/include/blk.h
> @@ -284,6 +284,12 @@ unsigned long blk_dwrite(struct blk_desc *block_dev, lbaint_t start,
>  unsigned long blk_derase(struct blk_desc *block_dev, lbaint_t start,
>                          lbaint_t blkcnt);
>
> +unsigned long blk_read(struct udevice *dev, lbaint_t start,
> +                      lbaint_t blkcnt, void *buffer);
> +unsigned long blk_write(struct udevice *dev, lbaint_t start,
> +                       lbaint_t blkcnt, const void *buffer);
> +unsigned long blk_erase(struct udevice *dev, lbaint_t start,
> +                       lbaint_t blkcnt);

Please add full comments to these.

>  /**
>   * blk_find_device() - Find a block device
>   *
> --
> 2.33.0
>

Regards,
Simon

  reply	other threads:[~2021-10-10 14:18 UTC|newest]

Thread overview: 157+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-01  5:01 [RFC 00/22] efi_loader: more tightly integrate UEFI disks to device model AKASHI Takahiro
2021-10-01  5:01 ` [RFC 01/22] part: call part_init() in blk_get_device_by_str() only for MMC AKASHI Takahiro
2021-10-01  6:41   ` Heinrich Schuchardt
2021-10-01  7:56     ` Heinrich Schuchardt
2021-10-04  3:13     ` AKASHI Takahiro
2021-10-01 11:48   ` Peter Robinson
2021-10-04  3:26     ` AKASHI Takahiro
2021-10-11 10:07     ` Heinrich Schuchardt
2021-10-11 14:32       ` Simon Glass
2021-10-11 15:08         ` Heinrich Schuchardt
2021-10-11 16:14           ` Simon Glass
2021-10-12  3:26             ` AKASHI Takahiro
2021-10-12 13:30               ` Heinrich Schuchardt
2021-10-13  1:50                 ` AKASHI Takahiro
2021-10-12 20:31               ` Simon Glass
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:01 ` [RFC 01/22] scsi: call device_probe() after scanning AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:01 ` [RFC 02/22] " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 02/22] usb: storage: " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 03/22] mmc: " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  1:10     ` AKASHI Takahiro
2021-10-01  5:01 ` [RFC 03/22] usb: storage: " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:01 ` [RFC 04/22] mmc: " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 04/22] nvme: " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 05/22] " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:01 ` [RFC 05/22] sata: " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 06/22] block: ide: " AKASHI Takahiro
2021-10-01  5:01 ` [RFC 06/22] sata: " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  1:11     ` AKASHI Takahiro
2021-10-01  5:01 ` [RFC 07/22] block: ide: " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  1:43     ` AKASHI Takahiro
2021-10-11 14:54       ` Simon Glass
2021-10-12  5:53         ` Ilias Apalodimas
2021-10-13  0:35           ` AKASHI Takahiro
2021-10-01  5:01 ` [RFC 07/22] dm: blk: add UCLASS_PARTITION AKASHI Takahiro
2021-10-01  9:30   ` Heinrich Schuchardt
2021-10-04  3:27     ` AKASHI Takahiro
2021-10-08  0:51       ` AKASHI Takahiro
2021-10-08  8:23         ` Heinrich Schuchardt
2021-10-11  2:29           ` AKASHI Takahiro
2021-10-11 14:54             ` Simon Glass
2021-10-11 15:02               ` Heinrich Schuchardt
2021-10-11 16:14                 ` Simon Glass
2021-10-11 16:48                   ` Heinrich Schuchardt
2021-10-11 17:41                     ` Simon Glass
2021-10-12  5:12                       ` AKASHI Takahiro
2021-10-12  6:42                         ` Heinrich Schuchardt
2021-10-12 15:14                   ` Tom Rini
2021-10-13  1:32                     ` AKASHI Takahiro
2021-10-13 18:05                       ` Simon Glass
2021-10-14  8:03                         ` AKASHI Takahiro
2021-10-14 20:55                           ` Simon Glass
2021-10-28  8:52                             ` AKASHI Takahiro
2021-10-28 10:42                               ` Heinrich Schuchardt
2021-10-29  1:45                                 ` Simon Glass
2021-10-29  4:57                                   ` Heinrich Schuchardt
2021-10-29  6:15                                     ` AKASHI Takahiro
2021-10-29 19:21                                       ` Heinrich Schuchardt
2021-10-29 21:17                                         ` Simon Glass
2021-10-30  5:45                                           ` Heinrich Schuchardt
2021-11-01  0:36                                             ` AKASHI Takahiro
2021-11-01  1:15                                               ` Simon Glass
2021-11-01  1:51                                                 ` AKASHI Takahiro
2021-11-01  2:14                                                   ` Simon Glass
2021-11-02  1:42                                                     ` AKASHI Takahiro
2021-11-02  7:38                                                     ` Heinrich Schuchardt
2021-11-05  2:02                                                       ` Simon Glass
2021-11-05  2:49                                                         ` AKASHI Takahiro
2021-11-05 16:12                                                           ` Simon Glass
2021-11-08  4:46                                                             ` AKASHI Takahiro
2021-11-08 18:44                                                               ` Ilias Apalodimas
2021-11-09  0:09                                                                 ` Simon Glass
2021-11-13 18:14                                                                   ` Simon Glass
2021-11-13 18:37                                                                     ` Heinrich Schuchardt
2021-11-13 21:32                                                                       ` Simon Glass
2021-11-15  1:43                                                                         ` AKASHI Takahiro
2021-11-15 19:05                                                                           ` Simon Glass
2021-11-15 19:16                                                                             ` Heinrich Schuchardt
2021-11-15 23:51                                                                               ` AKASHI Takahiro
2021-11-16  0:02                                                                                 ` Heinrich Schuchardt
2021-11-16  3:01                                                                                   ` AKASHI Takahiro
2021-12-03  7:16                                                                                     ` AKASHI Takahiro
2021-12-03 16:06                                                                                       ` Heinrich Schuchardt
2021-12-06  4:18                                                                                         ` AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-12  3:53     ` AKASHI Takahiro
2021-10-01  5:01 ` [RFC 08/22] " AKASHI Takahiro
2021-10-01  9:32   ` Heinrich Schuchardt
2021-10-01  5:02 ` [RFC 08/22] dm: blk: add a device-probe hook for scanning disk partitions AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 09/22] " AKASHI Takahiro
2021-10-01  5:02 ` [RFC 09/22] dm: blk: add read/write interfaces with udevice AKASHI Takahiro
2021-10-01  5:02 ` [RFC 10/22] " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass [this message]
2021-10-01  5:02 ` [RFC 10/22] efi_loader: disk: use udevice instead of blk_desc AKASHI Takahiro
2021-10-01  5:02 ` [RFC 11/22] dm: add a hidden link to efi object AKASHI Takahiro
2021-10-01  5:02 ` [RFC 11/22] efi_loader: disk: use udevice instead of blk_desc AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 12/22] dm: add a hidden link to efi object AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  6:43     ` AKASHI Takahiro
2021-10-11 14:54       ` Simon Glass
2021-10-11 15:26         ` Heinrich Schuchardt
2021-10-11 16:09           ` Simon Glass
2021-10-12  2:09             ` AKASHI Takahiro
2021-10-12 20:31               ` Simon Glass
2021-10-01  5:02 ` [RFC 12/22] efi_loader: remove !CONFIG_BLK code from efi_disk AKASHI Takahiro
2021-10-01  5:02 ` [RFC 13/22] efi_loader: disk: a helper function to create efi_disk objects from udevice AKASHI Takahiro
2021-10-01  5:02 ` [RFC 13/22] efi_loader: remove !CONFIG_BLK code from efi_disk AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 14/22] dm: blk: call efi's device-probe hook AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  3:15     ` AKASHI Takahiro
2021-10-11 14:54       ` Simon Glass
2021-11-01  3:03         ` Simon Glass
2021-10-01  5:02 ` [RFC 14/22] efi_loader: disk: a helper function to create efi_disk objects from udevice AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  6:52     ` AKASHI Takahiro
2021-10-11 14:54       ` Simon Glass
2021-10-12  1:09         ` AKASHI Takahiro
2021-10-12 14:08           ` Simon Glass
2021-10-01  5:02 ` [RFC 15/22] dm: blk: call efi's device-probe hook AKASHI Takahiro
2021-10-01  5:02 ` [RFC 15/22] efi_loader: cleanup after efi_disk-dm integration AKASHI Takahiro
2021-10-01  5:02 ` [RFC 16/22] efi_loader: add efi_remove_handle() AKASHI Takahiro
2021-10-01  5:02 ` [RFC 16/22] efi_loader: cleanup after efi_disk-dm integration AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 17/22] efi_loader: add efi_remove_handle() AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 17/22] efi_loader: efi_disk: a helper function to delete efi_disk objects AKASHI Takahiro
2021-10-01  5:02 ` [RFC 18/22] dm: blk: call efi's device-removal hook AKASHI Takahiro
2021-10-01  5:02 ` [RFC 18/22] efi_loader: efi_disk: a helper function to delete efi_disk objects AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 19/22] dm: blk: call efi's device-removal hook AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 19/22] efi_driver: align with efi_disk-dm integration AKASHI Takahiro
2021-10-01  5:02 ` [RFC 20/22] " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-11  7:41     ` AKASHI Takahiro
2021-10-01  5:02 ` [RFC 20/22] efi_driver: cleanup after " AKASHI Takahiro
2021-10-01  5:02 ` [RFC 21/22] " AKASHI Takahiro
2021-10-10 14:14   ` Simon Glass
2021-10-01  5:02 ` [RFC 21/22] efi_selftest: block device: adjust dp for a test disk AKASHI Takahiro
2021-10-01  5:02 ` [RFC 22/22] (TEST) let dm-tree unchanged after block_io testing is done AKASHI Takahiro
2021-10-01  5:02 ` [RFC 22/22] efi_selftest: block device: adjust dp for a test disk AKASHI Takahiro
2021-10-02 14:17   ` Heinrich Schuchardt
2021-10-10 14:14 ` [RFC 00/22] efi_loader: more tightly integrate UEFI disks to device model Simon Glass
2021-10-12 15:00   ` Tom Rini
2021-10-12 20:31     ` Simon Glass
2021-10-12 21:13       ` Tom Rini
2021-10-12 23:37         ` Simon Glass
2021-10-12 23:40           ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAPnjgZ2Je1Hs=0hmkOvZ7Zea9QNcwENh3MUwsnBnXSNyjaXQnw@mail.gmail.com' \
    --to=sjg@chromium.org \
    --cc=agraf@csgraf.de \
    --cc=ilias.apalodimas@linaro.org \
    --cc=takahiro.akashi@linaro.org \
    --cc=u-boot@lists.denx.de \
    --cc=xypron.glpk@gmx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.