]> git.sur5r.net Git - u-boot/blobdiff - arch/x86/cpu/ivybridge/gma.c
Merge branch 'master' of git://git.denx.de/u-boot-x86
[u-boot] / arch / x86 / cpu / ivybridge / gma.c
index 3d7f740273fb29ff96b9751478e466e4e4dd5fff..85a09c64b6725024b35d294f94f0420ab88dcb1f 100644 (file)
@@ -12,6 +12,7 @@
 #include <fdtdec.h>
 #include <pci_rom.h>
 #include <asm/io.h>
+#include <asm/mtrr.h>
 #include <asm/pci.h>
 #include <asm/arch/pch.h>
 #include <asm/arch/sandybridge.h>
@@ -727,26 +728,38 @@ static int int15_handler(void)
        return res;
 }
 
-int gma_func0_init(pci_dev_t dev, struct pci_controller *hose,
-                  const void *blob, int node)
+int gma_func0_init(struct udevice *dev, const void *blob, int node)
 {
+#ifdef CONFIG_VIDEO
+       ulong start;
+#endif
        void *gtt_bar;
+       ulong base;
        u32 reg32;
        int ret;
 
        /* IGD needs to be Bus Master */
-       reg32 = pci_read_config32(dev, PCI_COMMAND);
+       dm_pci_read_config32(dev, PCI_COMMAND, &reg32);
        reg32 |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
-       pci_write_config32(dev, PCI_COMMAND, reg32);
+       dm_pci_write_config32(dev, PCI_COMMAND, reg32);
 
-       gtt_bar = (void *)pci_read_bar32(pci_bus_to_hose(0), dev, 0);
+       /* Use write-combining for the graphics memory, 256MB */
+       base = dm_pci_read_bar32(dev, 2);
+       mtrr_add_request(MTRR_TYPE_WRCOMB, base, 256 << 20);
+       mtrr_commit(true);
+
+       gtt_bar = (void *)dm_pci_read_bar32(dev, 0);
        debug("GT bar %p\n", gtt_bar);
        ret = gma_pm_init_pre_vbios(gtt_bar);
        if (ret)
                return ret;
 
-       ret = pci_run_vga_bios(dev, int15_handler, false);
-
+#ifdef CONFIG_VIDEO
+       start = get_timer(0);
+       ret = dm_pci_run_vga_bios(dev, int15_handler,
+                                 PCI_ROM_USE_NATIVE | PCI_ROM_ALLOW_FALLBACK);
+       debug("BIOS ran in %lums\n", get_timer(start));
+#endif
        /* Post VBIOS init */
        ret = gma_pm_init_post_vbios(gtt_bar, blob, node);
        if (ret)