xref: /rk3399_rockchip-uboot/arch/arm/mach-mvebu/sata.c (revision a821c4af79e4f5ce9b629b20473863397bbe9b10)
121b29fc6SStefan Roese /*
221b29fc6SStefan Roese  * Copyright (C) 2016 Stefan Roese <sr@denx.de>
321b29fc6SStefan Roese  *
421b29fc6SStefan Roese  * SPDX-License-Identifier:	GPL-2.0+
521b29fc6SStefan Roese  */
621b29fc6SStefan Roese 
721b29fc6SStefan Roese #include <common.h>
821b29fc6SStefan Roese #include <ahci.h>
921b29fc6SStefan Roese #include <dm.h>
1021b29fc6SStefan Roese 
1121b29fc6SStefan Roese DECLARE_GLOBAL_DATA_PTR;
1221b29fc6SStefan Roese 
1321b29fc6SStefan Roese /*
1421b29fc6SStefan Roese  * Dummy implementation that can be overwritten by a board
1521b29fc6SStefan Roese  * specific function
1621b29fc6SStefan Roese  */
board_ahci_enable(void)1721b29fc6SStefan Roese __weak int board_ahci_enable(void)
1821b29fc6SStefan Roese {
1921b29fc6SStefan Roese 	return 0;
2021b29fc6SStefan Roese }
2121b29fc6SStefan Roese 
2221b29fc6SStefan Roese #ifdef CONFIG_ARMADA_8K
2321b29fc6SStefan Roese /* CP110 has different AHCI port addresses */
ahci_port_base(void __iomem * base,u32 port)2421b29fc6SStefan Roese void __iomem *ahci_port_base(void __iomem *base, u32 port)
2521b29fc6SStefan Roese {
2621b29fc6SStefan Roese 	return base + 0x10000 + (port * 0x10000);
2721b29fc6SStefan Roese }
2821b29fc6SStefan Roese #endif
2921b29fc6SStefan Roese 
mvebu_ahci_probe(struct udevice * dev)3021b29fc6SStefan Roese static int mvebu_ahci_probe(struct udevice *dev)
3121b29fc6SStefan Roese {
3221b29fc6SStefan Roese 	/*
3321b29fc6SStefan Roese 	 * Board specific SATA / AHCI enable code, e.g. enable the
3421b29fc6SStefan Roese 	 * AHCI power or deassert reset
3521b29fc6SStefan Roese 	 */
3621b29fc6SStefan Roese 	board_ahci_enable();
3721b29fc6SStefan Roese 
38*a821c4afSSimon Glass 	ahci_init(devfdt_get_addr_ptr(dev));
3921b29fc6SStefan Roese 
4021b29fc6SStefan Roese 	return 0;
4121b29fc6SStefan Roese }
4221b29fc6SStefan Roese 
4321b29fc6SStefan Roese static const struct udevice_id mvebu_ahci_ids[] = {
4421b29fc6SStefan Roese 	{ .compatible = "marvell,armada-3700-ahci" },
4521b29fc6SStefan Roese 	{ .compatible = "marvell,armada-8k-ahci" },
4621b29fc6SStefan Roese 	{ }
4721b29fc6SStefan Roese };
4821b29fc6SStefan Roese 
4921b29fc6SStefan Roese U_BOOT_DRIVER(ahci_mvebu_drv) = {
5021b29fc6SStefan Roese 	.name		= "ahci_mvebu",
5121b29fc6SStefan Roese 	.id		= UCLASS_AHCI,
5221b29fc6SStefan Roese 	.of_match	= mvebu_ahci_ids,
5321b29fc6SStefan Roese 	.probe		= mvebu_ahci_probe,
5421b29fc6SStefan Roese };
55