|
@@ -6,12 +6,15 @@
|
|
|
*/
|
|
|
|
|
|
#include <common.h>
|
|
|
+#include <dm.h>
|
|
|
#include <fdtdec.h>
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/pci.h>
|
|
|
#include <asm/arch/pch.h>
|
|
|
#include <asm/arch/bd82x6x.h>
|
|
|
|
|
|
+DECLARE_GLOBAL_DATA_PTR;
|
|
|
+
|
|
|
static inline u32 sir_read(pci_dev_t dev, int idx)
|
|
|
{
|
|
|
x86_pci_write_config32(dev, SATA_SIRI, idx);
|
|
@@ -206,7 +209,7 @@ void bd82x6x_sata_init(pci_dev_t dev, const void *blob, int node)
|
|
|
pch_iobp_update(0xea00408a, 0xfffffcff, 0x00000100);
|
|
|
}
|
|
|
|
|
|
-void bd82x6x_sata_enable(pci_dev_t dev, const void *blob, int node)
|
|
|
+static void bd82x6x_sata_enable(pci_dev_t dev, const void *blob, int node)
|
|
|
{
|
|
|
unsigned port_map;
|
|
|
const char *mode;
|
|
@@ -224,3 +227,23 @@ void bd82x6x_sata_enable(pci_dev_t dev, const void *blob, int node)
|
|
|
map |= (port_map ^ 0x3f) << 8;
|
|
|
x86_pci_write_config16(dev, 0x90, map);
|
|
|
}
|
|
|
+
|
|
|
+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);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct udevice_id bd82x6x_ahci_ids[] = {
|
|
|
+ { .compatible = "intel,pantherpoint-ahci" },
|
|
|
+ { }
|
|
|
+};
|
|
|
+
|
|
|
+U_BOOT_DRIVER(ahci_ivybridge_drv) = {
|
|
|
+ .name = "ahci_ivybridge",
|
|
|
+ .id = UCLASS_DISK,
|
|
|
+ .of_match = bd82x6x_ahci_ids,
|
|
|
+ .probe = bd82x6x_sata_probe,
|
|
|
+};
|