Really good stuff!! Keep up the good work! BTW, what version of the Macbook Pro is that you are testing here? Is it "MacBookPro7,1"? Should "MacBookPro6,1" also work?
sudo dmidecode -s system-product-name I am guessing the models in Apple's website that have hybrid graphics now are the ones called "MacBookPro8,2" and "MacBookPro8,3" in these ubuntu and wikipedia pages, but these are with Intel/AMD combo -- it seems the 13'' model is Intel-only MacBookPro8,1 (13"): https://help.ubuntu.com/community/MacBookPro http://en.wikipedia.org/wiki/MacBook_Pro A. On Sat, Mar 10, 2012 at 12:01 PM, Andreas Heider <[email protected]> wrote: > > Hi, > > Am 09.03.2012 um 10:10 schrieb Albert Vilella: > > Do you folks think this is ready for a blog post? > > There's still a bunch of stuff missing. At the moment switching works, but > only if you know exactly what you're doing. The next step is to make it work > without requiring too much manual intervention, so it's possible to simply > boot the system and switch between nouveau/i915 (and potentially turn the > dedicated card on/off). > > This is not only related to the gmux driver itself but also to nouveau/i915 > and how they handle not having a monitor attached at boot. I don't think it > will be too long until this works but I'd prefer to wait a bit until it does, > since the many of the readers of the hybrid-graphics-linux blog are normal > users. > > In other news, I found a first solution to the vbios problem. There is a > register on the card (0x619f04, if i'm not mistaken PDISPLAY.VGA.ROM_WINDOW) > which points to where the vbios should be. Initially this register is set to > 0x000ffe09 on my card but after a powercycle it's set to 0x1. > > If I manually restore it to 0xffe09 using nvapoke and copy the vbios back > with nvafakebios (otherwise it points to a location with just 0xff) both > nouveau and the nvidia-blob load successfully! > > For more information see the excellent documentation at > https://github.com/pathscale/envytools/blob/master/hwdocs (especially > nvbars.txt) and the source of the envytools. > > This is really amazing, because that means that the standard bumblebee > switching will work without major modifications, especially with the nvidia > blob. > > Cheers, > Andreas > > > > > Now that Linus has Linux running on a Macbook Air, it may be good to > > show Macbook Pros with hybrid graphics have half-decent Linux support > > as well... :-p > > > > On Thu, Mar 8, 2012 at 9:34 PM, Andreas Heider <[email protected]> wrote: > >> Hi Peter, > >> > >> I blacklisted both nvidia and nouveau during boot and did exactly these > >> eight steps. I used dd to save the config space, if that is of any > >> importance (e.g. "dd if=/sys/bus/pci/devices/0000:01:00.0/config > >> of=7-restored"). > >> > >> Because I'm not sure wether the pci_save/restore_state functions work I did > >> the test twice. You can find the results for the run with > >> pci_save/restore_state at http://andreas.meetr.de/nouveau/pcs/ and the one > >> without at http://andreas.meetr.de/nouveau/pcs-2. > >> > >> Both lead to the same result, the vbios is not > >> accessible. http://andreas.meetr.de/nouveau/nouveau.dmesg shows how a > >> normal > >> boot with nouveau looks like. > >> > >> Cheers, > >> Andreas > >> > >> Am 08.03.2012 um 21:31 schrieb Lekensteyn: > >> > >> Hi Andreas, > >> > >> What about nouveau? The blob sometimes do not get completely unloaded > >> (/dev/nvidia* devices then still > >> exist). > >> > >> What if the following steps are followed: > >> > >> 1. ensure that the blob has not been loaded (reboot if necessary) > >> 2. unload nouveau if necessary > >> 3. save pci configuration space > >> 4. disable card > >> 5. save pci configuration space, it should be all 1's (ff in xxd) > >> 6. enable card > >> 7. save pci configuration space, it should be similar to (3) > >> 8. load the nouveau driver, does it work? > >> > >> Regards, > >> Peter > >> > >> On Thu, Mar 8, 2012 at 7:17 PM, Andreas Heider <[email protected]> wrote: > >>> > >>> Hi Peter, > >>> > >>> I'm already saving the pci configuration space with pci_save/restore_state > >>> and I've also tried manually changing it through /sys/bus/pci/..., but I > >>> still have the problem that the blob can't load the vbios. > >>> > >>> I've uploaded dumps of it, maybe you can spot something thats obviously > >>> wrong with it: > >>> 1. After boot: http://andreas.meetr.de/gmux/nv.config > >>> 2. After one powercycle: http://andreas.meetr.de/gmux/nv.bad.config > >>> 3. After one powercycle and copying the first config space > >>> back: http://andreas.meetr.de/gmux/nv.bad.config_restored > >>> > >>> Unfortunately this still gives me the NVRM: RmInitAdapter failed! > >>> (0x30:0xffffffff:858) error. > >>> > >>> Thanks, > >>> Andreas > >>> > >>> > >>> Am 08.03.2012 um 12:38 schrieb Lekensteyn: > >>> > >>> Hi Andreas, > >>> > >>> I've documented about the PCI configuration space issue on > >>> http://wiki.bumblebee-project.org/ACPI-for-Developers. Bumblebee also > >>> saves > >>> and restores the PCI configuration space before enabling/after disabling. > >>> > >>> Regards, > >>> Peter > >>> > >>> On Thu, Mar 8, 2012 at 2:47 AM, Andreas Heider <[email protected]> wrote: > >>>> > >>>> Hi everyone, > >>>> > >>>> I'll just continue using this mailing list as a blog. After a lot of > >>>> wild guesses in all directions I now have a setup that could be a base > >>>> for useful graphics switching on Macbook Pros. It's not completely > >>>> reliable yet but hopefully that will improve in the future. > >>>> > >>>> Switching between two running GPUs works pretty well and just needs a > >>>> bit more work. But that shouldn't be a big issue. > >>>> > >>>> The main problem I fought with is that after powering down the external > >>>> GPU the vbios vanishes and it's impossible to load the proprietary > >>>> nvidia driver: > >>>> > >>>> [ 214.505208] NVRM: failed to copy vbios to system memory. > >>>> [ 214.507347] NVRM: RmInitAdapter failed! (0x30:0xffffffff:858) > >>>> [ 214.507357] NVRM: rm_init_adapter(0) failed > >>>> > >>>> The same problem exists with nouveau, after the first power cycle > >>>> nouveau doesn't load again if I unload it. I guess this is actually a > >>>> BIOS/EFI/firmware bug, since Apple's switching driver just keeps the > >>>> driver loaded. > >>>> > >>>> So it's necessary to load the driver once and keep it loaded. This works > >>>> well with nouveau+vga_switcheroo but is a bit problematic with the > >>>> blob. > >>>> > >>>> At the moment I have the blob running with the patch from my first mail > >>>> and noticed that it survives a powercycle if X _is_ loaded while the GPU > >>>> is powered down. If I shutdown X I get this error when I try to start it > >>>> again afterwards: > >>>> > >>>> [ 144.390920] NVRM: RmInitAdapter failed! (0x26:0xffffffff:1170) > >>>> [ 144.390930] NVRM: rm_init_adapter(0) failed > >>>> > >>>> I'm not 100% certain that this really works but at the moment it's the > >>>> only possibility for getting full switching support with the blob. > >>>> > >>>> Speaking of nvidia bugs, I also had problems with the blob not reliably > >>>> loading when I boot with EFI. > >>>> Luckily it's possible to also enable the integrated card in BIOS > >>>> emulation mode. After staring a lot at the output of lspci -xxx from > >>>> both EFI and BIOS boot I noticed that this just requires flipping one > >>>> bit in the pci configuration space. This can be done by adding "setpci > >>>> -d 8086:0044 54.b=0b" in grub. This value will most likely only work for > >>>> this exact model, a MBP 6,2. For more information see > >>>> http://download.intel.com/design/processor/datashts/322813.pdf page 62. > >>>> > >>>> If anyone has some hints how to better deal with the blob that would be > >>>> greatly appreciated. > >>>> > >>>> On Wed, 2012-02-29 at 10:33 +0100, Lekensteyn wrote: > >>>>> Hi Andreas, > >>>>> > >>>>> I'm using nouveau + bbswitch (switcheroo also works, but not after > >>>>> resume), not on > >>>>> a mac, but a Clevo B7130 (branded as "BTO P-BOOK 17CL34"). > >>>>> > >>>>> The restoration of the PCI configuration space is a hack to allow the > >>>>> driver to load > >>>>> in case it was accidentally loaded while the card was off. This is > >>>>> especially necessary > >>>>> for the nvidia blob driver which loads itself if you try to > >>>>> access /dev/nvidia* devices. > >>>>> > >>>>> In the case of switcheroo, no driver is attempted to be unloaded (see > >>>>> the second field > >>>>> of the switching_method struct and line 30 of src/switch/switching.c. > >>>> > >>>> Sorry, that was my fault. I changed that for testing purposes and then > >>>> forgot about it. > >>>> > >>>>> > >>>>> gmux can be integrated into BB. Writing a new switcher module > >>>>> (src/switch/gmux.c) > >>>>> which also takes care of loading the switcheroo module (only if that > >>>>> is a safe operation!) > >>>>> should do the trick. Just be careful not to conflict with switcheroo. > >>>>> The other way is leave > >>>>> BB as it and require users to load gmux before BB. > >>>> > >>>> Because of vbios situation and nouveau already working pretty well with > >>>> switcheroo I'd prefer to keep using that. > >>>>> > >>>>> Regards, > >>>>> Peter > >>>> > >>>> Cheers, > >>>> Andreas > >>>> > >>>>> > >>>>> On Wed, Feb 29, 2012 at 12:25 AM, Andreas Heider <[email protected]> > >>>>> wrote: > >>>>> Hi Peter, > >>>>> > >>>>> I took another look at bumblebee today and got it running with > >>>>> nouveau! > >>>>> Bumblebee automatically powers the nvidia card down when it's > >>>>> not in > >>>>> use and starting programs with optirun works well. > >>>>> > >>>>> This required a dirty hack to bumblebee which you can find > >>>>> here: > >>>>> > >>>>> https://github.com/ah-/Bumblebee/commit/c5ab6f0e7f841045cee6905bb367c79091b0eb6b > >>>>> > >>>>> The problem is that bumblebee wants to save/restore the pci > >>>>> configuration > >>>>> space, which is already done by nouveau. (See > >>>>> https://gist.github.com/1935992) > >>>>> > >>>>> It also shouldn't try to unload the driver. > >>>>> > >>>>> Do you think this could somehow be integrated into bumblebee? > >>>>> > >>>>> Cheers, > >>>>> Andreas > >>>>> > >>>>> On Tue, 2012-02-28 at 16:14 +0100, Lekensteyn wrote: > >>>>> > Hi Andreas, > >>>>> > > >>>>> > vga_switcheroo is a supported method since Bumblebee 3.0, > >>>>> but I > >>>>> > assumed that > >>>>> > it would not be used for the nvidia driver. If you wish to > >>>>> use the > >>>>> > nvidia blob with > >>>>> > switcheroo, you have to recompile Bumblebee and apply commit > >>>>> > 85636d1f21b0644e7dd47e3931479860c55b7a05 (or use the develop > >>>>> branch). > >>>>> > The > >>>>> > next version will have this change too. > >>>>> > > >>>>> > One shortcoming of vga_switcheroo now is that the state is > >>>>> messed up > >>>>> > after > >>>>> > suspend: switcheroo remembered that the card was off, but in > >>>>> reality > >>>>> > the card > >>>>> > is on. The module bbswitch worked around this by enabling > >>>>> the card > >>>>> > before > >>>>> > suspend and disabling the card on resume. > >>>>> > > >>>>> > In some cases, while the card was turned off with switcheroo > >>>>> caused > >>>>> > the machine > >>>>> > to lock when the card is tried to be accessed. If switcheroo > >>>>> is not an > >>>>> > option for > >>>>> > Bumblebee, you can write your own switching code. See the > >>>>> src/switch/ > >>>>> > directory > >>>>> > for examples. > >>>>> > > >>>>> > Regards, > >>>>> > Peter > >>>>> > (Bumblebee and bbswitch developer) > >>>>> > > >>>>> > On Tue, Feb 28, 2012 at 3:16 PM, Andreas Heider > >>>>> <[email protected]> > >>>>> > wrote: > >>>>> > Hello everybody, > >>>>> > > >>>>> > I'm developing a vga_switcheroo driver for the Apple > >>>>> Macbook > >>>>> > Pro models > >>>>> > with switchable graphics and have a few questions > >>>>> about how to > >>>>> > integrate > >>>>> > it with the current linux hybrid graphics > >>>>> infrastructure. > >>>>> > > >>>>> > > >>>>> > Apple implemented the switching using a "chip" > >>>>> dubbed the > >>>>> > "gmux" (probably short for graphics multiplexer or > >>>>> something > >>>>> > similar). > >>>>> > The gmux can power down the external graphics card, > >>>>> switch the > >>>>> > DDC, > >>>>> > internal and external display connections > >>>>> (individually) > >>>>> > between both > >>>>> > cards and set the backlight brightness. Unlike most > >>>>> newer > >>>>> > laptops with > >>>>> > hybrid graphics, Apple's Macbook Pros use a physical > >>>>> mux. > >>>>> > > >>>>> > Luckily the gmux has remained mostly the same > >>>>> between all > >>>>> > models with > >>>>> > switchable graphics, so it should be possible to > >>>>> develop one > >>>>> > driver that > >>>>> > supports all of them. > >>>>> > > >>>>> > > >>>>> > This driver has actually been lying around in > >>>>> unfinished state > >>>>> > for some > >>>>> > time now, until Seth Forshee from Canonical recently > >>>>> rewrote > >>>>> > it into a > >>>>> > clean, backlight-only driver that will hopefully > >>>>> find it's way > >>>>> > into > >>>>> > mainline soon. > >>>>> > > >>>>> > My goal is to use Seth's work as a base and add the > >>>>> other > >>>>> > features back > >>>>> > again and make it work well. A first version is > >>>>> already > >>>>> > working and up > >>>>> > at https://github.com/ah-/gmux > >>>>> > > >>>>> > This driver supports all vga_switcheroo operations > >>>>> (discrete > >>>>> > power > >>>>> > on/off, display switching) and they all work on my > >>>>> MBP 6,2 > >>>>> > using the > >>>>> > intel and nouveau drivers. > >>>>> > > >>>>> > But unfortunately, it doesn't work with bumbleebee > >>>>> and/or the > >>>>> > proprietary > >>>>> > nvidia driver yet. > >>>>> > > >>>>> > > >>>>> > Because I'm using CUDA in other projects, getting > >>>>> the > >>>>> > proprietary NVIDIA > >>>>> > driver running well is very interesting to me. The > >>>>> setup > >>>>> > bumblebee plus > >>>>> > intel + nvidia_current without power management > >>>>> works well on > >>>>> > my laptop > >>>>> > if I switch to the intel card in grub. (It's just > >>>>> three > >>>>> > outbs). But that > >>>>> > breaks suspend and uses 10W more power than > >>>>> necessary. > >>>>> > > >>>>> > Does/should bumblebee work with a vga_switcheroo > >>>>> driver just > >>>>> > for ON/OFF? > >>>>> > > >>>>> > One thing I stumbled upon is a patch for the > >>>>> proprietary > >>>>> > NVIDIA > >>>>> > driver originally written by "Kayo > >>>>> <[email protected]>" which > >>>>> > adds > >>>>> > some kind of vga_switcheroo support to it. I > >>>>> modified it to > >>>>> > just register > >>>>> > with switcheroo (patch is attached), and that part > >>>>> works well. > >>>>> > Turning > >>>>> > off the card works, but turning it on afterwards > >>>>> doesn't. Any > >>>>> > Ideas? > >>>>> > > >>>>> > > >>>>> > Ultimately I'd like to get two scenarios/workflows > >>>>> to work > >>>>> > well: > >>>>> > > >>>>> > 1. Real switching, by disabling one card completely > >>>>> and only > >>>>> > using > >>>>> > the other one, requiring a logout/login. > >>>>> > Preferably using the NVIDIA driver. > >>>>> > > >>>>> > 2. Bumblebee switching with working power management > >>>>> when the > >>>>> > NVIDIA > >>>>> > GPU is not in usw. > >>>>> > > >>>>> > > >>>>> > I'd appreciate any comments and thoughts on how to > >>>>> implement > >>>>> > this and > >>>>> > how to integrate it with the current hybrid graphics > >>>>> > environment. > >>>>> > > >>>>> > Cheers, > >>>>> > Andreas > >>>>> > > >>>>> > _______________________________________________ > >>>>> > Mailing list: > >>>>> https://launchpad.net/~hybrid-graphics-linux > >>>>> > Post to : > >>>>> [email protected] > >>>>> > Unsubscribe : > >>>>> https://launchpad.net/~hybrid-graphics-linux > >>>>> > More help : https://help.launchpad.net/ListHelp > >>>>> > > >>>>> > > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >>>> > >>> > >>> > >> > >> > >> > >> _______________________________________________ > >> Mailing list: https://launchpad.net/~hybrid-graphics-linux > >> Post to : [email protected] > >> Unsubscribe : https://launchpad.net/~hybrid-graphics-linux > >> More help : https://help.launchpad.net/ListHelp > >> > _______________________________________________ Mailing list: https://launchpad.net/~hybrid-graphics-linux Post to : [email protected] Unsubscribe : https://launchpad.net/~hybrid-graphics-linux More help : https://help.launchpad.net/ListHelp

