Jump to content
parczefal

[GUIDE] Enabling Intel Iris Pro (HD5200) in Win8.1 on 15" Macbook Pro with GT750M

Recommended Posts

Hey Guys! Sorry if this is not the appropriate forum, or if this has been done already (I found no related posts).

Long story short, I have the Iris Pro on the 15" Macbook (Mid 2014 with dGPU) partially working on Windows 8.1.

I created a triple boot installation (Mac, Win 8.1, Arch Linux), patched Grub to fake the "booting-into-os-x" procedure, and forced the iris pro 5200 driver installation on windows.

So far, I can only see the two devices working in safe mode, see screenshot below:

post-32195-14494999138127_thumb.jpg

I have tried uninstalling the nVidia card drivers and something weird happens after windows load, looks like there's a secondary screen, with a different resolution to the right of the "main" screen. I can move the mouse and everything, but I can't log in.

If I disable the nVidia card, I just get a black screen after windows load.

Any ideas? Suggestions? I was thinking maybe I could get my hands dirty with nVidia CUDA and code an applet to manage this stuff. I'm good with C/C++ but I don't know if that's possible at all.

I can reveal more details if you want.

Thanks!

- - - Updated - - -

This is basically the Grub hack: http://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html

I was thinking, maybe it's possible to completely disable the nVidia card from the Grub EFI console. Does anybody have any experience with that?

Share this post


Link to post
Share on other sites

Update!

I changed the nVidia driver in the Device Manager for it to use the Microsoft Basic Display Adapter. After the reboot, I was able to see the color I chose for the login screen. I tabbed twice, typed in my password and managed to get into the windows desktop!

At first, it was using some type of "extended virtual desktop", but I managed to tweak some settings in the screen resolution applet to make the Color LCD my main desktop.

I'm also able to reach the Intel Graphics Control Panel.

Stay Tuned!

- - - Updated - - -

Have you seen this post: Win7 x64 booting natively via EFI (no BIOS emulation) - Page 42 - MacRumors Forums?

And tried their tool? I was gonna test it later today..

https://github.com/0xbb/gpu-switch

Hey Tre87!

Actually, I found the hint to do this on those pages! Haven't had the chance to compile his code but I'll give it a go, I'll keep you updated!

Share this post


Link to post
Share on other sites
Hey Tre87!

Actually, I found the hint to do this on those pages! Haven't had the chance to compile his code but I'll give it a go, I'll keep you updated!

It would be so awesome to get this working, not only for the eGPU part, but also for the battery performance in Windows :)

So keep those updates comming! :Banane42:

Share this post


Link to post
Share on other sites

I'll Probably need some help around here!

So far I can boot to Win 8.1 using the Intel Iris Pro driver (5200) hooked to a "Virtual Display". Looks like the LCD panel is still hooked to the nVidia card with a Generic Driver.

I've tried a couple of different things:

Using reFind:

Cloned the process outlined here: [GUIDE] 2012 15" Macbook Pro Retina + GTX560Ti@8Gbps-TB1 (TH05) + Win8.1 , however, the screen just goes black and I have to force shutdown my computer. This is how my .nsh code looks like:


mm 7C2 1 ;IO :1
stall 100000
mm 7D4 1 ;IO :28
stall 100000


echo Switch Display
mm 7C2 1 ;IO :2
stall 100000
mm 7D4 1 ;IO :10
stall 100000


echo Switch DDC
mm 7C2 1 ;IO :2
stall 100000
mm 7D4 1 ;IO :40
stall 100000


echo Power down discrete graphics
mm 7C2 1 ;IO :1
stall 100000
mm 7D4 1 ;IO :50
stall 100000


mm 7C2 1 ;IO :0
stall 100000
mm 7D4 1 ;IO :50


echo enable iGPU
mm 0001013E 1 ;PCI :8
stall 100000
mm 00020004 1 ;PCI :7
stall 100000


echo Boot Grub
fs0:\EFI\Boot\bootx64.efi
echo Switch select

This is what the pci command drops in the EFI Shell:


Vendor 8086 Device 0D04 Prog Interface 0

[/FONT]
[FONT=arial]00 00 01 00 => Bridge Device - PCI/PCI Bridge
Vendor 8086 Device 0D01 Prog Interface 0

[/FONT]
[FONT=arial]00 00 01 01 => Bridge Device - PCI/PCI Bridge
Vendor 8086 Device 0D05 Prog Interface 0

[/FONT]
[FONT=arial]00 00 02 00 => Display Controller - VGA/8514 Controller
Vendor 8086 Device 0D05 Prog Interface 0

[/FONT]
[FONT=arial]00 00 03 00 => Multimedia Device - UNDEFINED
Vendor 8086 Device 0D0C Prog Interface 0

[/FONT]
[FONT=arial]00 00 14 00 => Serial Bus Controllers - USB
Vendor 8086 Device 8C31 Prog Interface 30

[/FONT]
[FONT=arial]00 00 16 00 => Simple Communications Controllers - Other Communications
Vendor 8086 Device 8C3A Prog Interface 0

[/FONT]
[FONT=arial]00 00 1B 00 => Multimedia Device - UNDEFINED
Vendor 8086 Device 8C20 Prog Interface 0

[/FONT]
[FONT=arial]00 00 1C 00 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 8C10 Prog Interface 0

[/FONT]
[FONT=arial]00 00 1C 02 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 8C14 Prog Interface 0

[/FONT]
[FONT=arial]00 00 1C 03 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 8C16 Prog Interface 0

[/FONT]
[FONT=arial]00 00 1C 04 => Bridge Device - PCI/PCI Bridge
Vendor 8086 Device 8C18 Prog Interface 0

[/FONT]
[FONT=arial]00 00 1F 00 => Bridge Device - PCI/ISA Bridge
Vendor 8086 Device 8C4B Prog Interface 0

[/FONT]
[FONT=arial]00 00 1F 03 => Serial Bus Controllers - System Management Bus
Vendor 8086 Device 8C22 Prog Interface 0

[/FONT]
[FONT=arial]00 01 00 00 => Display Controller - VGA/8514 Controller
Vendor 10DE Device 0FE9 Prog Interface 0

[/FONT]
[FONT=arial]00 01 00 01 => Multimedia Device - UNDEFINED
Vendor 10DE Device 0E1B Prog Interface 0

[/FONT]
[FONT=arial]00 03 00 00 => Network Controller - Other Network Controller
Vendor 14E4 Device 43A0 Prog Interface 0

[/FONT]
[FONT=arial]00 04 00 00 => Multimedia Device - Other Multimedia Device
Vendor 14E4 Device 1570 Prog Interface 0

[/FONT]
[FONT=arial]00 05 00 00 => Mass Storage Controller - Undefined
Vendor 144D Device 1600 Prog Interface 1

[/FONT]
[FONT=arial]00 06 00 00 => Bridge Device PCI/PCI bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 07 00 00 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 07 03 00 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 07 04 00 => Bridge Device - PCI/PCU bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 07 05 00 =>Bridge Device - PCI/PCI bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 07 06 00 => Bridge Device - PCI/PCI bridge
Vendor 8086 Device 156D Prog Interface 0

[/FONT]
[FONT=arial]00 08 00 00 => Base System Peripherals - Other system peripheral
Vendor 8086 Device 156C Prog Interface 0[/FONT]
[FONT=arial]00 00 00 00 => Bridge Device - Host/PCI Bridge

Share this post


Link to post
Share on other sites

I've also tried this using grub, same blackscreen result:


#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#


### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi


if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi


export menuentry_id_option


if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi


function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}


function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}


if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
font="/usr/share/grub/unicode.pf2"
fi


if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-b53dd552-9d3e-4447-bec4-8dd6e231e1ba' {
apple_set_os
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
echo 'Loading Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=b53dd552-9d3e-4447-bec4-8dd6e231e1ba rw quiet rootflags=data=writeback libata.force=noncq
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-b53dd552-9d3e-4447-bec4-8dd6e231e1ba' {
apple_set_os
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
echo 'Loading Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=b53dd552-9d3e-4447-bec4-8dd6e231e1ba rw quiet rootflags=data=writeback libata.force=noncq
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-linux-fallback.img
}


### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###


### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-6877-AB9C' {
outb 0x7C2 1
outb 0x7D4 0x28
outb 0x7C2 2
outb 0x7D4 0x10
outb 0x7C2 2
outb 0x7D4 0x40
outb 0x7C2 1
outb 0x7D4 50
outb 0x7C2 0
outb 0x7D4 50
apple_set_os
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 6877-AB9C
else
search --no-floppy --fs-uuid --set=root 6877-AB9C
fi
chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###


### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###


### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###


### BEGIN /etc/grub.d/60_memtest86+ ###
### END /etc/grub.d/60_memtest86+ ###
 ## DO NOT EDIT THIS FILE

Iris Pro is working Flawlessly in Gentoo - Arch.

Share this post


Link to post
Share on other sites

I Got it to Work!!

I'll describe my procedure in the next post, in broad terms, all you need to do is:

1. Wipe out your Hard Drive

2. Install Win 8.1 EFI Mode

3. Install OS X

4. Install Arch EFI Mode

5. Install grub on arch applying the following patch: [PATCH] Add apple_set_os command

6. Set your grub boot drive as your default in OS X startup disk applet.

7. Modify grub.cfg and compile your new bootx64.efi bootloader.

8. Download and compile https://github.com/0xbb/gpu-switch

9. Run sudo ./gpu-switch -i

10. Reboot from linux

11. Start windows from grub loader.

12. Install Intel Driver!

  • Thumbs Up 2

Share this post


Link to post
Share on other sites

¡WARNING! This process will require you to wipe out your hard drive, you might get it to work with pre-installed systems but I haven't had the chance to do so.

As of now, brightness is not working on bootcamp, I'll need to research the issue.

Detailed step by step guide:

1. Create a Win 8.1 EFI bootable flash drive using Rufus.

2. Create an Arch Linux bootable flash drive using Rufus.

3. Create a OS X Yosemite bootable flash drive using createinstallmedia.

4. Boot your computer using the Win 8.1 install flash drive.

5. When you get to the Windows install screen, press shift+F10 to get to the MS Shell.

6. Execute the following commands:

6.1 diskpart

6.2 select disk 0

6.3 clean

6.4 convert gpt

6.5 create partition efi size=200

6.6 format fs=fat32

6.7 create partition msr size=128

6.8 create partition primary size=102400 (You might want to set your own size here)

6.9 format fs=ntfs quick label=Windows

6.10 exit

7. Proceed with Windows Installation

8. Once in Windows, click on start menu then type "cmd"

9. Launch diskpart again

10, Create your OS X Partition with the following commands:

10.1 create partition primary size=204800 (Set your own size here)

10.2 format fs=ntfs quick label=OSX (Don't worry about the filesystem, we'll reformat it using Disk Utility later)

10.3 exit

11. Restart your computer and boot into the OS X Yosemite installer

12. Launch Disk Utility

13. Erase your newly created partition using HFS+ as the filesystem

14. Close disk utility and install OS X in there.

15. Boot into OS X.

16. You'll now have both Windows 8.1 and OS X installed in EFI Mode, now you'll need to install Arch Linux.

17. Boot your computer into the Arch Linux installation USB.

18. Launch the Arch Console.

19. Execute the following commands:

19.1 Select your keymap by typing "loadkeys keymap_file (available keymaps are located in /usr/share/kbd/keymaps)"

19.2 Launch gdisk

19.3 Create a new partition for your root mountpoint

19.4 Create a new partition for your swap mountpoint

19.5 Creae a new partition for your boot mountpoint using EFI boot

19.6 Create a new partition for you extra boot mountpoint using EFI boot

19.7 Format your newly created partitions (mkfs.ext4 for root, mkswap for your swap partition and mkfs.vfat for your EFI boot partitions)

19.8 Mount your root partition on /mnt and your first boot patition on /mnt/boot/efi (You'll need to create this folder). "swapon" your swap partition.

19.9 I used a USB to Ethernet adapter, and the installation CD configured it automatically. If you need to configure wireless settings, please refer to the ARCH Wiki Guide: https://wiki.archlinux.org/index.php/Wireless_network_configuration

19.10 Edit the /etc/pacman.d/mirrorlist and comment out any unnecessary mirrors.

19.11 Execute the following command "pacstrap /mnt base"

19.12 Wait for the base packages to download and install

19.13 Generate your fstab file by issuing the following command: "genfstab -U -p /mnt >> /mnt/etc/fstab"

19.14 "chroot" into your newly created environment by typing this command: "arch-chroot /mnt /bin/bash"

19.15 Uncomment the needed locales in /etc/locale.gen, then generate them with: "locale-gen"

19.16 Execute the following command: # echo LANG=your_locale > /etc/locale.conf (where your_locale matches your keyboard and language settings)

19.17 Create a new initial RAM disk with: "mkinitcpio -p linux"

19.18 Set your root password with "passwd"

19.19 Create a new user for yourself with the following command: "useradd -m -G wheel <username>"

19.20 Set password for your user with "passwd <username>"

19.21 Upgrade pacman db with "pacman-db-upgrade", allocate the repositories with "pacman -Syy" and Install the sudo package with "pacman -S sudo"

19.22 Add your newly created user to the sudoers file located in "/etc/sudoers"

19.23 Switch to your newly created user with "su <username>"

19.24 Go into your user home directory "/home/<username>"

19.25 Install packer dependencies with "sudo pacman -S base-devel fakeroot jshon expac git"

19.26 Create a new directory to download pkgbuild "mkdir pkgbuild"

19.27 Install wget and vim with "sudo pacman -S wget vim"

19.28 Get into the pkgbuild directory and run "wget -c https://aur.archlinux.org/packages/pa/packer/PKGBUILD"

19.29 Execute the "makepkg" command inside that directory

19.30 Install the newly created package with "sudo pacman -U packer-*-pkg.tar.xz"

19.31 Go up one level

19.32 Download my pre-patched, pre-compiled grub2 binary from "http://www.nocreado.com/grub-git.tar.gz" (this one includes Andreas Heider patch to trick the bootloader with "apple_set_os")

19.33 Run "tar xvzf grub-git.tar.gz"

19.34 Switch to the grub-git directory

19.35 Run the following command: "makepkg -si --skippgpcheck" to install my version of grub

19.36 If everything went fine, then you're ready to install and configure grub. First thing you'll need to do is tweak the "/etc/default/grub" file and add "libata.force=noncq" to the GRUB_CMDLINE_LINUX_DEFAULT parameter, it should end up looking like this: GRUB_CMDLINE_LINUX_DEFAULT="quiet libata.force=noncq"

19.37 Install grub with the following command: "grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug"

19.38 Generate your grub configuration file with the following comand "grub-mkconfig -o /boot/grub/grub.cfg" (This should reconize your vmlinuz images and your Windows installation).

19.39 If everything went well, go to your / and create a new mountpoint for your extra boot partition (e.g. sudo mkdir /loader).

19.40 Mount your patition there, switch to that folder.

19.41 Touch a file named "mach_kernel"

19.42 Create the following path inside the folder: "System/Library/CoreServices"

19.43 Switch to that newly created directory (CoreServices) and vim a file named SystemVersion.plist with the following contents:

Edit: Please refer to https://wiki.archlinux.org/index.php/MacBookPro11,x for the file contents configuration

19.44 In that same directory, generate your boot.efi image by issuing the following command: "grub-mkstandalone -o boot.efi -d /usr/lib/grub/x86_64-efi -O x86_64-efi /boot/grub/grub.cfg"

19.45 Reboot into OS X.

19.46 Mount your extra boot partition with diskutil "sudo diskutil mount /dev/diskXsY"

19.47 Bless your new partition with the following commands:

sudo bless --folder=

--file=/System/Library/CoreServices/boot.efi --setBoot

sudo bless --mount= <dev device=""> --file= /System/Library/CoreServices/boot.efi --setBoot

19.48 If everything went well, restart your computer holding the option key. You should be able to reach your arch installation by selecting the "efi boot" Volume and Arch Linux from the grub boot menu.

19.49 Once back in arch, download and compile https://github.com/0xbb/gpu-switch

19.50 Reboot into OS X, select the new EFI Volume "Arch Linux" as your main disk in the Startup Disk Applet.

19.51 Reboot your computer, you should be able to reach Grub without holding down the option key

19.52 Boot into Arch, execute sudo ./gpu-switch -i

19.53 Do "sudo reboot"

19.54 Once you're back in grub, click the "c" key to enter the console, type the command "apple_set_os" in the prompt.

19.55 Click "esc" and boot into windows, You should be able to see 2 display adapters!!!

Now, the first time I installed the bootcamp drivers I just selected the windows partition while holding the option key at startup. This to avoid the dual video card config. Then I deactivated the nvidia card, executed the gpu-switch command, booted into windows and installed the newest intel drivers, this is how my device manager looks like:

post-32195-14494999179931_thumb.jpg

Enjoy!

Greetings

Jose M.

References:

https://wiki.archlinux.org/index.php/MacBookPro11,x

https://wiki.archlinux.org/index.php/GRUB#Alternative_install_method

http://www.tswartz.net/blog/how-to-install-packer-the-archlinux-aur-helper

http://www.reddit.com/r/mac/comments/2fy3be/by_popular_demand_my_better_than_bootcamp_guide/

https://wiki.archlinux.org/index.php/installation_guide

http://lists.gnu.org/archive/html/grub-devel/2013-12/msg00442.html

https://github.com/0xbb/gpu-switch

Special Thanks to Andreas Heider and Tre87!

</dev></username></username></username></username>

  • Thumbs Up 6

Share this post


Link to post
Share on other sites

That's a great job! Would it be possible to automate this? Patch the bootloader without installing Linux?

It would be great to develop a tray icon for Windows, so we can switch between nVidia and Intel gpu.

Share this post


Link to post
Share on other sites
That's a great job! Would it be possible to automate this? Patch the bootloader without installing Linux?

It would be great to develop a tray icon for Windows, so we can switch between nVidia and Intel gpu.

I was thinking about that last night! Maybe if we compile this script as a grub module or executable file. I don't see any linux specific functions in the code. I'll give it a shot later!

Another bug I found is that Hibernate/Sleep isn't working correctly in Windows. Maybe the "null" driver get's installed based on the computer firmware or something.

Share this post


Link to post
Share on other sites

Hi guys,

so has somebody with a rmbp with gt 750 already tried this one with an egpu?

Or have you been successful with your iMac?

Best regards

Daniel

Share this post


Link to post
Share on other sites
I've also tried this using grub, same blackscreen result:


#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#


### BEGIN /etc/grub.d/00_header ###
insmod part_gpt
insmod part_msdos
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="0"
fi


if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi


export menuentry_id_option


if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi


function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}


function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}


if [ x$feature_default_font_path = xy ] ; then
font=unicode
else
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
font="/usr/share/grub/unicode.pf2"
fi


if loadfont $font ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=$prefix/locale
set lang=en_US
insmod gettext
fi
terminal_input console
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-advanced-b53dd552-9d3e-4447-bec4-8dd6e231e1ba' {
apple_set_os
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
echo 'Loading Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=b53dd552-9d3e-4447-bec4-8dd6e231e1ba rw quiet rootflags=data=writeback libata.force=noncq
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-linux-fallback-b53dd552-9d3e-4447-bec4-8dd6e231e1ba' {
apple_set_os
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt6'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 b53dd552-9d3e-4447-bec4-8dd6e231e1ba
else
search --no-floppy --fs-uuid --set=root b53dd552-9d3e-4447-bec4-8dd6e231e1ba
fi
echo 'Loading Linux linux ...'
linux /boot/vmlinuz-linux root=UUID=b53dd552-9d3e-4447-bec4-8dd6e231e1ba rw quiet rootflags=data=writeback libata.force=noncq
echo 'Loading initial ramdisk ...'
initrd /boot/initramfs-linux-fallback.img
}


### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###


### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-6877-AB9C' {
outb 0x7C2 1
outb 0x7D4 0x28
outb 0x7C2 2
outb 0x7D4 0x10
outb 0x7C2 2
outb 0x7D4 0x40
outb 0x7C2 1
outb 0x7D4 50
outb 0x7C2 0
outb 0x7D4 50
apple_set_os
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 6877-AB9C
else
search --no-floppy --fs-uuid --set=root 6877-AB9C
fi
chainloader /efi/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###


### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###


### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###


### BEGIN /etc/grub.d/60_memtest86+ ###
### END /etc/grub.d/60_memtest86+ ###
 ## DO NOT EDIT THIS FILE

Iris Pro is working Flawlessly in Gentoo - Arch.

you are using grub2code. If you have a linux system let's try

sudo update-grub

then grub2 will auto update menu boot if detect efi file of OS

Share this post


Link to post
Share on other sites

Could this lead to enabling optimus with discreet gpu MacBooks? Has anyone tried yet?

Share this post


Link to post
Share on other sites
Could this lead to enabling optimus with discreet gpu MacBooks? Has anyone tried yet?

That is what I'd suggest users with this machine try to do even without having an eGPU to gain extra battery life. Optimus will power down the dGPU when not in use using the much more efficient iGPU to drive the LCD.

Notebookcheck found idle of the Iris Pro model to be 7.6W (MacOSX) compared to 17.4W of the GT750M model under bootcamp. That's a HUGE 10W difference.

http://www.notebookcheck.net/Apple-MacBook-Pro-Retina-15-Late-2013-Notebook-Review.120330.0.html

So if the machines sat idle, the 85Wh battery would see the Iris Pro model would get 11.2hrs of battery life while the GT750M would get 4.8hrs, less than half!

Share this post


Link to post
Share on other sites

Hi @parczefal,

Did you ever manage to automate any of the bootloader stuff? I would be willing to try with my 750m/akitio setup but some of the steps in arch go above my head. It would be nice to finally have some conclusive proof of Optimus working on a 750m model.

Cheers.

Share this post


Link to post
Share on other sites

Hi everyone, you might be interested in this: https://github.com/0xbb/apple_set_os.efi

Download it from releases, install refind, sudo mount -t msdos /dev/disk0s1 /efi, copy apple_set_os.efi to /efi/EFI/custom/apple_set_os.efi.

You should then see an entry for apple_set_os.efi in refit. Before you boot Windows, just quickly start that, which will flash the screen while it runs and then just boot Windows. This enables the Intel GPU so it's visible in the device manager. No more grub/Linux required. (To clarify, this disables the hiding of the Intel GPU and makes it appear in the device manager, nothing else. NVIDIA could still remain your primary GPU).

There is now also a Windows version of gpu-switch at https://github.com/0xbb/gpu-switch, which you can use to set the primary GPU for the next boot.

I just tested it and was able to use the Intel GPU, but booting with both GPUs active and the NVIDIA driver installed often gives me black screens after booting. I have no idea why, when I uninstall the NVIDIA driver it works perfectly, I just see two displays, one for each GPU.

  • Thumbs Up 4

Share this post


Link to post
Share on other sites

Thanks @ah-, It worked!!

For some reason reFit would always freeze in the EFI shell after running apple_set_os.efi. I tried using reFind and that was the solution!

@Evo* do you think it might be possible to activate optimus internal LCD mode?

RHzfpMO.png

Share this post


Link to post
Share on other sites
Thanks @ah-, It worked!!

For some reason reFit would always freeze in the EFI shell after running apple_set_os.efi. I tried using reFind and that was the solution!

@Evo* do you think it might be possible to activate optimus internal LCD mode?

Firstly, check whether your NVidia control panel Manage 3D section to see if you now have a "Preferred graphics processor" option along with a list of programs you can choose this for like shown here.

Then run say Resident Evil 5 benchmark comparing the result when running on the GT750M versus when the iGPU is enabled.

I'd be very much interested in someone confirming that the iGPU works.

Another way of testing if the iGPU is activated and working is to use batterybar software to measure idle power consumption on battery. With the iGPU enabled and driving the internal LCD, idle power consumption be noticably lower.

Share this post


Link to post
Share on other sites

Hi Nando,

Here are a few benchmarks.

Resident Evil 5 Benchmark

Iris

post-33851-14494999955726_thumb.png

750m

post-33851-14494999956178_thumb.png

3Dmark 11 (note the changing clock speeds)

Iris

post-33851-14494999956633_thumb.png

750m

post-33851-1449499995713_thumb.png

Cinebench

Iris

post-33851-14494999957627_thumb.png

750m

post-33851-14494999957966_thumb.png

Nvidia/Intel Control Panel w/ switching

post-33851-14494999958338_thumb.png

Share this post


Link to post
Share on other sites
Hi Nando,

Iris does surprisingly well. Would you mind installing batterybar, booting the system up with each gpu as primary, pulling AC power anf checking the reported battery duscharge at idle?

Iris should be noticeably lower making this iris switched mode desirable for on the road battery life.

Share this post


Link to post
Share on other sites
Iris

750m

750M adds another 58% power consumption at idle. Though your 21.05W with the iGPU is still far higher than the 7.6W notebookcheck recorded under OSX that I describe here.

Consider applying the tweaks at http://forum.techinferno.com/hp-business-class-notebooks/2537-12-5-hp-elitebook-2570p-owners-lounge.html#post38399 to see if can get it nearer to that 7.6W figure.

Share this post


Link to post
Share on other sites

I'm not sure if the NVIDIA driver does any power management, on Linux the dedicated GPU just stays powered up even if you boot with Intel as the primary. Somebody wrote a GMUX driver that can cut the power, see here: MacRumors Forums - View Single Post - Win7 x64 booting natively via EFI (no BIOS emulation)

It's rather crude and probably won't work if you want to use the NVIDIA GPU at all, but maybe it decreases power consumption.

Also, did you have any issues with black screens at all? What software/versions are you running?

Share this post


Link to post
Share on other sites
750M adds another 58% power consumption at idle. Though your 21.05W with the iGPU is still far higher than the 7.6W notebookcheck recorded under OSX that I describe here.

The 750m is definitely still consuming a lot of power while the Iris is active, even while "disabled". Brightness control isn't functioning as well, and it appears to force 80-90% brightness at all times. Perhaps I'll try that GMUX driver and see if it makes a difference.

Also, did you have any issues with black screens at all? What software/versions are you running?

I used the windows version of gpu-switch + apple_set_os.efi + reFind 0.87 to boot Windows 8.1 (bootcamp install). No issues with black screens.

@ah- Do you know how I would go about using the Optimus.dmg tool described in this post with apple_set_os.efi? Could I patch reFind with whatever EFI tweaks are inside the dmg?

My main purpose for trying to get the Iris working is to unlock optimus internal LCD output on discreet gpu macbooks. I think it would be extremely useful to everyone if we could conveniently enable it.

Thanks!

Share this post


Link to post
Share on other sites

I used the windows version of gpu-switch + apple_set_os.efi + reFind 0.87 to boot Windows 8.1 (bootcamp install). No issues with black screens.

@ah- Do you know how I would go about using the Optimus.dmg tool described in this post with apple_set_os.efi? Could I patch reFind with whatever EFI tweaks are inside the dmg?

My main purpose for trying to get the Iris working is to unlock optimus internal LCD output on discreet gpu macbooks. I think it would be extremely useful to everyone if we could conveniently enable it.

Thanks!

I looks like Optimus.dmg is the old grub implementation of apple_set_os.efi, which does exactly the same thing as apple_set_os.efi, just as a grub command instead of a standalone EFI application. You don't need both, one is enough and I think apple_set_os.efi is the better implementation. In particular since less can go wrong, like grub not finding stuff.

I'm a bit surprised to see that it does anything on systems without a dedicated GPU, but who knows what exactly Apple does.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.