xref: /openbmc/u-boot/drivers/ata/ahci_mvebu.c (revision 9c2369a554437f072733c53ba0f5f5384f35b6d3)
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