1592b4a7eSKen Ma // SPDX-License-Identifier: GPL-2.0+
2592b4a7eSKen Ma /*
3592b4a7eSKen Ma * Copyright (C) 2016 Stefan Roese <sr@denx.de>
4592b4a7eSKen Ma */
5592b4a7eSKen Ma
6592b4a7eSKen Ma #include <common.h>
7592b4a7eSKen Ma #include <ahci.h>
8592b4a7eSKen Ma #include <dm.h>
9592b4a7eSKen Ma
10592b4a7eSKen Ma /*
11592b4a7eSKen Ma * Dummy implementation that can be overwritten by a board
12592b4a7eSKen Ma * specific function
13592b4a7eSKen Ma */
board_ahci_enable(void)14592b4a7eSKen Ma __weak int board_ahci_enable(void)
15592b4a7eSKen Ma {
16592b4a7eSKen Ma return 0;
17592b4a7eSKen Ma }
18592b4a7eSKen Ma
mvebu_ahci_bind(struct udevice * dev)19*6ac8538bSKen Ma static int mvebu_ahci_bind(struct udevice *dev)
20*6ac8538bSKen Ma {
21*6ac8538bSKen Ma struct udevice *scsi_dev;
22*6ac8538bSKen Ma int ret;
23*6ac8538bSKen Ma
24*6ac8538bSKen Ma ret = ahci_bind_scsi(dev, &scsi_dev);
25*6ac8538bSKen Ma if (ret) {
26*6ac8538bSKen Ma debug("%s: Failed to bind (err=%d\n)", __func__, ret);
27*6ac8538bSKen Ma return ret;
28*6ac8538bSKen Ma }
29*6ac8538bSKen Ma
30*6ac8538bSKen Ma return 0;
31*6ac8538bSKen Ma }
32*6ac8538bSKen Ma
mvebu_ahci_probe(struct udevice * dev)33592b4a7eSKen Ma static int mvebu_ahci_probe(struct udevice *dev)
34592b4a7eSKen Ma {
35592b4a7eSKen Ma /*
36592b4a7eSKen Ma * Board specific SATA / AHCI enable code, e.g. enable the
37592b4a7eSKen Ma * AHCI power or deassert reset
38592b4a7eSKen Ma */
39592b4a7eSKen Ma board_ahci_enable();
40592b4a7eSKen Ma
41*6ac8538bSKen Ma ahci_probe_scsi(dev, (ulong)devfdt_get_addr_ptr(dev));
42592b4a7eSKen Ma
43592b4a7eSKen Ma return 0;
44592b4a7eSKen Ma }
45592b4a7eSKen Ma
46592b4a7eSKen Ma static const struct udevice_id mvebu_ahci_ids[] = {
47592b4a7eSKen Ma { .compatible = "marvell,armada-3700-ahci" },
48592b4a7eSKen Ma { .compatible = "marvell,armada-8k-ahci" },
49592b4a7eSKen Ma { }
50592b4a7eSKen Ma };
51592b4a7eSKen Ma
52592b4a7eSKen Ma U_BOOT_DRIVER(ahci_mvebu_drv) = {
53592b4a7eSKen Ma .name = "ahci_mvebu",
54592b4a7eSKen Ma .id = UCLASS_AHCI,
55592b4a7eSKen Ma .of_match = mvebu_ahci_ids,
56*6ac8538bSKen Ma .bind = mvebu_ahci_bind,
57592b4a7eSKen Ma .probe = mvebu_ahci_probe,
58592b4a7eSKen Ma };
59