diff options
author | Stefano Babic <sbabic@denx.de> | 2014-08-11 10:21:03 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2014-08-11 10:21:03 +0200 |
commit | e82abaeb7f2a0833fccf90460c48b9f2100258f8 (patch) | |
tree | de701f5c90b7373966412d566b5c00d3837954bc /drivers/block | |
parent | f93f21906e374d46c6abfbdf4eb9cb1ab51b6384 (diff) | |
parent | 1899fac925eda817e12234aef3d01d354788662e (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-arm
Conflicts:
boards.cfg
Signed-off-by: Stefano Babic <sbabic@denx.de>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/ahci.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index 4df804671a..dce99adc6b 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -129,6 +129,14 @@ int __weak ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port) return 1; } +#ifdef CONFIG_SUNXI_AHCI +/* The sunxi AHCI controller requires this undocumented setup */ +static void sunxi_dma_init(volatile u8 *port_mmio) +{ + clrsetbits_le32(port_mmio + PORT_P0DMACR, 0x0000ff00, 0x00004400); +} +#endif + static int ahci_host_init(struct ahci_probe_ent *probe_ent) { #ifndef CONFIG_SCSI_AHCI_PLAT @@ -213,6 +221,10 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent) msleep(500); } +#ifdef CONFIG_SUNXI_AHCI + sunxi_dma_init(port_mmio); +#endif + /* Add the spinup command to whatever mode bits may * already be on in the command register. */ @@ -545,6 +557,10 @@ static int ahci_port_start(u8 port) writel_with_flush(pp->rx_fis, port_mmio + PORT_FIS_ADDR); +#ifdef CONFIG_SUNXI_AHCI + sunxi_dma_init(port_mmio); +#endif + writel_with_flush(PORT_CMD_ICC_ACTIVE | PORT_CMD_FIS_RX | PORT_CMD_POWER_ON | PORT_CMD_SPIN_UP | PORT_CMD_START, port_mmio + PORT_CMD); |