[U-Boot] [PATCH 3/7] scsi: call children devices' probe functions automatically
Simon Glass
sjg at chromium.org
Sat Apr 1 04:21:46 UTC 2017
Hi,
On 23 March 2017 at 03:29, <make at marvell.com> wrote:
> From: Ken Ma <make at marvell.com>
>
> - For the purpose of accessing peripheral devices through SCSI, the
> peripheral devices need to be probed to finish low level
> initialization, for example, ahci controller needs to do the ahci
> initialization;
> - scsi_low_level_init() calling is removed since the detailed scsi low
> level initialization work is up to the peripheral scsi devices, for
> example, sata controller may do AHCI initialization while scanner
> controller may do ISIS initialization; the work should be done in
> children devices probe when scsi controller acts as bus or be done
> in the pure SAS controller's probe when SCSI controller is a SAS
> and works as an on-board component on the motherboard;
> - Since u-boot initialization does not probe devices by default, SCSI
> children devices can be probed automatically in SCSI post probe
> function when SCSI controller acts as a bus.
Do you have to probe everything? The idea in DM is to probe devices
only when they are first used.
(Also please use 'U-Boot' everywhere consistently)
>
> Signed-off-by: Ken Ma <make at marvell.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Stefan Roese <sr at denx.de>
> Cc: Michal Simek <michal.simek at xilinx.com>
> Reviewed-on: http://vgitil04.il.marvell.com:8080/35426
> Tested-by: iSoC Platform CI <ykjenk at marvell.com>
> Reviewed-by: Omri Itach <omrii at marvell.com>
> Reviewed-by: Kostya Porotchkin <kostap at marvell.com>
> ---
> drivers/block/scsi-uclass.c | 22 ++++++++++++++++++++--
> 1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/block/scsi-uclass.c b/drivers/block/scsi-uclass.c
> index 86eddfc..119ba53 100644
> --- a/drivers/block/scsi-uclass.c
> +++ b/drivers/block/scsi-uclass.c
> @@ -18,8 +18,26 @@ DECLARE_GLOBAL_DATA_PTR;
>
> static int scsi_post_probe(struct udevice *dev)
> {
> + struct udevice *child_dev;
> + int ret;
> +
> debug("%s: device %p\n", __func__, dev);
> - scsi_low_level_init(0, dev);
> +
> + /*
> + * For the purpose of accessing peripheral devices through SCSI, the
> + * peripheral devices need to be probed to finish low level
> + * initialization, for example, ahci controller needs to do the ahci
> + * initialization;
> + * Since u-boot initialization does not probe devices by default, SCSI
U-Boot
> + * children devices can be probed automatically in SCSI post probe
> + * function when SCSI controller acts as a bus.
> + */
> + list_for_each_entry(child_dev, &dev->child_head, sibling_node) {
> + ret = device_probe(child_dev);
> + if (ret)
> + return ret;
> + }
> +
> return 0;
> }
>
> @@ -54,6 +72,6 @@ UCLASS_DRIVER(scsi) = {
> .id = UCLASS_SCSI,
> .name = "scsi",
> .post_bind = scsi_post_bind,
> - .post_probe = scsi_post_probe,
> + .post_probe = scsi_post_probe,
> .per_device_platdata_auto_alloc_size = sizeof(struct scsi_platdata),
> };
> --
> 1.9.1
>
Regards,
Simon
More information about the U-Boot
mailing list