1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) 2016 Stefan Roese <sr@denx.de> 4 */ 5 6#include <ahci.h> 7#include <dm.h> 8#include <log.h> 9 10/* 11 * Dummy implementation that can be overwritten by a board 12 * specific function 13 */ 14__weak int board_ahci_enable(void) 15{ 16 return 0; 17} 18 19static int mvebu_ahci_bind(struct udevice *dev) 20{ 21 struct udevice *scsi_dev; 22 int ret; 23 24 ret = ahci_bind_scsi(dev, &scsi_dev); 25 if (ret) { 26 debug("%s: Failed to bind (err=%d\n)", __func__, ret); 27 return ret; 28 } 29 30 return 0; 31} 32 33static int mvebu_ahci_probe(struct udevice *dev) 34{ 35 /* 36 * Board specific SATA / AHCI enable code, e.g. enable the 37 * AHCI power or deassert reset 38 */ 39 board_ahci_enable(); 40 41 ahci_probe_scsi(dev, (ulong)dev_remap_addr(dev)); 42 43 return 0; 44} 45 46static const struct udevice_id mvebu_ahci_ids[] = { 47 { .compatible = "marvell,armada-380-ahci" }, 48 { .compatible = "marvell,armada-3700-ahci" }, 49 { .compatible = "marvell,armada-8k-ahci" }, 50 { .compatible = "cavium,octeon-7130-ahci" }, 51 { } 52}; 53 54U_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}; 61