Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Feb 2013 05:15:46 -0800
From:      matt <sendtomatt@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Adrian Chadd <adrian@freebsd.org>, freebsd-current@freebsd.org, freebsd-acpi@freebsd.org
Subject:   Re: Fixing X220 Video The Right Way
Message-ID:  <512F5882.7080004@gmail.com>
In-Reply-To: <201302271527.37079.jhb@freebsd.org>
References:  <512A6FFF.2060603@gmail.com> <201302271200.22976.jhb@freebsd.org> <512E51FF.5010701@gmail.com> <201302271527.37079.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 02/27/13 12:27, John Baldwin wrote:
> On Wednesday, February 27, 2013 1:35:43 pm matt wrote:
>> On 02/27/13 09:00, John Baldwin wrote:
>>> If that is true, it's because your BIOS is lying. Do you have a URL to
>>> your ASL lying around already?
>> Too big for pastebin :( +500k
>>
>> https://docs.google.com/file/d/0B6YlMzJxarGbVnotLUdNWWNTVG8/edit?usp=sharing
> Here is where I find _DOD and _DOS methods:
>
>          Device (PCI0)
>              Device (VID)
>                  Name (_ADR, 0x00020000)  // _ADR: Address
>                  Method (_DOS, 1, NotSerialized)  // _DOS: Disable Output Switching
>                  Method (_DOD, 0, NotSerialized)  // _DOD: Display Output Devices
>              Device (PEG)
>                  Name (_ADR, 0x00010000)  // _ADR: Address
>                  Device (VID)
>                      Name (_ADR, 0x00)  // _ADR: Address
>                      Method (_DOS, 1, NotSerialized)  // _DOS: Disable Output Switching
>                      Method (_DOD, 0, NotSerialized)  // _DOD: Display Output Devices
>
> PCI0.VID is a PCI device at pci0:0:2:0.
> PCI0.PEG would be a PCI-PCI bridge at pci0:0:1:0.
> It would have a child device at 0:0 that would be PCI0.PEG.VID.  Does the X220
> have a switchable GPU (e.g. it has built-in Intel graphics, but also has an
> Nvidia GPU or some such?).  If so, I imagine that PCI0.VID is the Intel graphics
> and PEG is the non-Intel.  The output of 'pciconf -lcv' would be useful to determine
> that.  If both PCI devices exist you shoudl have both acpi_video0 and acpi_video1.
> However, it may be that the acpi_video driver doesn't cope well with having multiple
> devices.
Only Intel graphics, there is no option for switchable graphics.
I initially thought that PEG was for Optimus usage, and left in the bios 
by accident (i.e. Lenovo using a generic DSDT for many machines)

Here is pciconf -lcf, truncated
hostb0@pci0:0:0:0:    class=0x060000 card=0x21da17aa chip=0x01048086 
rev=0x09 hdr=0x00
     vendor     = 'Intel Corporation'
     device     = '2nd Generation Core Processor Family DRAM Controller'
     class      = bridge
     subclass   = HOST-PCI
     cap 09[e0] = vendor (length 12) Intel cap 0 version 1
vgapci0@pci0:0:2:0:    class=0x030000 card=0x21da17aa chip=0x01268086 
rev=0x09 hdr=0x00
     vendor     = 'Intel Corporation'
     device     = '2nd Generation Core Processor Family Integrated 
Graphics Controller'
     class      = display
     subclass   = VGA
     cap 05[90] = MSI supports 1 message enabled with 1 message
     cap 01[d0] = powerspec 2  supports D0 D3  current D0
     cap 13[a4] = PCI Advanced Features: FLR TP
none0@pci0:0:22:0:    class=0x078000 card=0x21da17aa chip=0x1c3a8086 
rev=0x04 hdr=0x00
     vendor     = 'Intel Corporation'

As you can see there is no device at pci0:0:1:0. So no dev_t with for 
acpi_video to probe or attach to.

Nonetheless, only PEGs ACPI methods work, which is quite broken. This is 
true for a large number of Lenovo devices, back to x61 (non-attaching 
AGP adr) and probably including some other x series and t series.

Unfortunately the ASL will not compile which makes fixing the DSDT an 
exercise in fixing broken ACPI.

What I find interesting is that as far as I can tell, there's no special 
case handling for this device in Linux, yet backlight controls work out 
of the box since about 3.0. Installing Linux as the OSI via loader.conf 
is not the issue, unfortunately, nor Windows 2006 (/WVIS) or Windows 
2009 (/WIN7). I get correct (for platform) behavior when I call PEGs 
_BCM... :(

Is Linux getting this to work by doing it wrong, essentially?

Matt



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?512F5882.7080004>