x86: ivybridge: Use the SATA driver to do the init
authorSimon Glass <sjg@chromium.org>
Sun, 17 Jan 2016 23:11:37 +0000 (16:11 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Sun, 24 Jan 2016 04:09:40 +0000 (12:09 +0800)
Instead of manually initing the device, probe the SATA device and move the
init there.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/ivybridge/bd82x6x.c
arch/x86/cpu/ivybridge/sata.c
arch/x86/include/asm/arch-ivybridge/bd82x6x.h

index 1fe2ce13c8c82c464f0172df6af8b71ff322e3de..188b7da4f774000bd8aceeec820c7aee8acda4e9 100644 (file)
@@ -22,7 +22,7 @@ static int bd82x6x_probe(struct udevice *dev)
 {
        const void *blob = gd->fdt_blob;
        struct pci_controller *hose;
-       int sata_node, gma_node;
+       int gma_node;
        int ret;
 
        if (!(gd->flags & GD_FLG_RELOC))
@@ -31,13 +31,10 @@ static int bd82x6x_probe(struct udevice *dev)
        hose = pci_bus_to_hose(0);
        lpc_enable(PCH_LPC_DEV);
        lpc_init_extra(hose, PCH_LPC_DEV);
-       sata_node = fdtdec_next_compatible(blob, 0,
-                                          COMPAT_INTEL_PANTHERPOINT_AHCI);
-       if (sata_node < 0) {
-               debug("%s: Cannot find SATA node\n", __func__);
-               return -EINVAL;
-       }
-       bd82x6x_sata_init(PCH_SATA_DEV, blob, sata_node);
+
+       /* Cause the SATA device to do its init */
+       uclass_first_device(UCLASS_DISK, &dev);
+
        bd82x6x_usb_ehci_init(PCH_EHCI1_DEV);
        bd82x6x_usb_ehci_init(PCH_EHCI2_DEV);
 
index c46ec3a6291e4e247647b1980356e8db2ccc9dc5..631456654e2167a0bd89b7a02a0765767e0c1db1 100644 (file)
@@ -47,7 +47,7 @@ static void common_sata_init(pci_dev_t dev, unsigned int port_map)
        x86_pci_write_config32(dev, 0x94, ((port_map ^ 0x3f) << 24) | 0x183);
 }
 
-void bd82x6x_sata_init(pci_dev_t dev, const void *blob, int node)
+static void bd82x6x_sata_init(pci_dev_t dev, const void *blob, int node)
 {
        unsigned int port_map, speed_support, port_tx;
        struct pci_controller *hose = pci_bus_to_hose(0);
@@ -232,6 +232,8 @@ static int bd82x6x_sata_probe(struct udevice *dev)
 {
        if (!(gd->flags & GD_FLG_RELOC))
                bd82x6x_sata_enable(PCH_SATA_DEV, gd->fdt_blob, dev->of_offset);
+       else
+               bd82x6x_sata_init(PCH_SATA_DEV, gd->fdt_blob, dev->of_offset);
 
        return 0;
 }
index 7a05c7e444c86a271da8e3e6882cecf13c95ca4b..bb3a6c9199a9894b8316bab5e7328d5954102e55 100644 (file)
@@ -7,7 +7,6 @@
 #ifndef _ASM_ARCH_BD82X6X_H
 #define _ASM_ARCH_BD82X6X_H
 
-void bd82x6x_sata_init(pci_dev_t dev, const void *blob, int node);
 void bd82x6x_usb_ehci_init(pci_dev_t dev);
 void bd82x6x_usb_xhci_init(pci_dev_t dev);
 int gma_func0_init(struct udevice *dev, const void *blob, int node);