Merge tag 'u-boot-imx-20200825' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
[platform/kernel/u-boot.git] / drivers / ata / ahci_mvebu.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2016 Stefan Roese <sr@denx.de>
4  */
5
6 #include <common.h>
7 #include <ahci.h>
8 #include <dm.h>
9 #include <log.h>
10
11 /*
12  * Dummy implementation that can be overwritten by a board
13  * specific function
14  */
15 __weak int board_ahci_enable(void)
16 {
17         return 0;
18 }
19
20 static int mvebu_ahci_bind(struct udevice *dev)
21 {
22         struct udevice *scsi_dev;
23         int ret;
24
25         ret = ahci_bind_scsi(dev, &scsi_dev);
26         if (ret) {
27                 debug("%s: Failed to bind (err=%d\n)", __func__, ret);
28                 return ret;
29         }
30
31         return 0;
32 }
33
34 static int mvebu_ahci_probe(struct udevice *dev)
35 {
36         /*
37          * Board specific SATA / AHCI enable code, e.g. enable the
38          * AHCI power or deassert reset
39          */
40         board_ahci_enable();
41
42         ahci_probe_scsi(dev, dev_read_addr(dev));
43
44         return 0;
45 }
46
47 static const struct udevice_id mvebu_ahci_ids[] = {
48         { .compatible = "marvell,armada-380-ahci" },
49         { .compatible = "marvell,armada-3700-ahci" },
50         { .compatible = "marvell,armada-8k-ahci" },
51         { }
52 };
53
54 U_BOOT_DRIVER(ahci_mvebu_drv) = {
55         .name           = "ahci_mvebu",
56         .id             = UCLASS_AHCI,
57         .of_match       = mvebu_ahci_ids,
58         .bind           = mvebu_ahci_bind,
59         .probe          = mvebu_ahci_probe,
60 };