[U-Boot] [PATCH 1/3] dm: ahci: Add a generic PCI-based AHCI driver

Simon Glass sjg at chromium.org
Wed Jun 21 03:29:44 UTC 2017


Hi Bin,

On 17 June 2017 at 07:35, Bin Meng <bmeng.cn at gmail.com> wrote:
> This adds support for PCI-based AHCI controller and enables it on
> x86 by default.
>
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> ---
>
>  drivers/ata/Kconfig    |  7 +++++++
>  drivers/ata/Makefile   |  1 +
>  drivers/ata/ahci-pci.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 50 insertions(+)
>  create mode 100644 drivers/ata/ahci-pci.c

I believe that if the device tree specifies this driver then it will
override the generic PCI probing done here. Is that right?

- Simon

>
> diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
> index 6427f1b..cc1c52c 100644
> --- a/drivers/ata/Kconfig
> +++ b/drivers/ata/Kconfig
> @@ -40,6 +40,13 @@ config DM_SCSI
>
>  menu "SATA/SCSI device support"
>
> +config AHCI_PCI
> +       bool "Support for PCI-based AHCI controller"
> +       default y if X86
> +       select DM_SCSI
> +       help
> +         Enables support for the PCI-based AHCI controller.
> +
>  config SATA_CEVA
>         bool "Ceva Sata controller"
>         depends on AHCI
> diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
> index c48184c..4e2de93 100644
> --- a/drivers/ata/Makefile
> +++ b/drivers/ata/Makefile
> @@ -7,6 +7,7 @@
>
>  obj-$(CONFIG_DWC_AHCI) += dwc_ahci.o
>  obj-$(CONFIG_AHCI) += ahci-uclass.o
> +obj-$(CONFIG_AHCI_PCI) += ahci-pci.o
>  obj-$(CONFIG_SCSI_AHCI) += ahci.o
>  obj-$(CONFIG_DWC_AHSATA) += dwc_ahsata.o
>  obj-$(CONFIG_FSL_SATA) += fsl_sata.o
> diff --git a/drivers/ata/ahci-pci.c b/drivers/ata/ahci-pci.c
> new file mode 100644
> index 0000000..f46fad8
> --- /dev/null
> +++ b/drivers/ata/ahci-pci.c
> @@ -0,0 +1,42 @@
> +/*
> + * Copyright (C) 2017, Bin Meng <bmeng.cn at gmail.com>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <ahci.h>
> +#include <dm.h>
> +#include <pci.h>
> +
> +static int ahci_pci_bind(struct udevice *dev)
> +{
> +       struct udevice *scsi_dev;
> +
> +       return ahci_bind_scsi(dev, &scsi_dev);
> +}
> +
> +static int ahci_pci_probe(struct udevice *dev)
> +{
> +       return ahci_probe_scsi(dev);
> +}
> +
> +static const struct udevice_id ahci_pci_ids[] = {
> +       { .compatible = "ahci-pci" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(ahci_pci) = {
> +       .name   = "ahci_pci",
> +       .id     = UCLASS_AHCI,
> +       .of_match = ahci_pci_ids,
> +       .bind   = ahci_pci_bind,
> +       .probe = ahci_pci_probe,
> +};
> +
> +static struct pci_device_id ahci_pci_supported[] = {
> +       { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_SATA_AHCI, ~0) },
> +       {},
> +};
> +
> +U_BOOT_PCI_DEVICE(ahci_pci, ahci_pci_supported);
> --
> 2.9.2
>


More information about the U-Boot mailing list