Re: [PATCH] PCI/VGA: Look at all PCI display devices in VGA arbiter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 17, 2025 at 11:06:00AM -0500, Mario Limonciello wrote:
> On 6/17/25 10:53 AM, Daniel Dadap wrote:
> > On Mon, Jun 16, 2025 at 09:14:04PM +0200, Lukas Wunner wrote:
> > > On Mon, Jun 16, 2025 at 10:05:48AM -0500, Daniel Dadap wrote:
> > > > On Sat, Jun 14, 2025 at 09:04:52AM +0200, Lukas Wunner wrote:
> > > > > On Fri, Jun 13, 2025 at 04:47:20PM -0500, Daniel Dadap wrote:
> > > > > > Ideally we'd be able to actually query which GPU is connected to
> > > > > > the panel at the time we're making this determination, but I don't
> > > > > > think there's a uniform way to do this at the moment. Selecting the
> > > > > > integrated GPU seems like a reasonable heuristic, since I'm not
> > > > > > aware of any systems where the internal panel defaults to dGPU
> > > > > > connection, since that would defeat the purpose of having a hybrid
> > > > > > GPU system in the first place
> > > > > 
> > > > > Intel-based dual-GPU MacBook Pros boot with the panel switched to the
> > > > > dGPU by default.  This is done for Windows compatibility because Apple
> > > > > never bothered to implement dynamic GPU switching on Windows.
> > > > > 
> > > > > The boot firmware can be told to switch the panel to the iGPU via an
> > > > > EFI variable, but that's not something the kernel can or should depend on.
> > > > > 
> > > > > MacBook Pros introduced since 2013/2014 hide the iGPU if the panel is
> > > > > switched to the dGPU on boot, but the kernel is now unhiding it since
> > > > > 71e49eccdca6.
> > > > 
> > > > This is good to know. Is vga_switcheroo initialized by the time the code
> > > > in this patch runs? If so, maybe we should query switcheroo to determine
> > > > the GPU which is connected to the panel and favor that one, then fall
> > > > back to the "iGPU is probably right" heuristic otherwise.
> > > 
> > > Right now vga_switcheroo doesn't seem to provide a function to query the
> > > current mux state.
> > > 
> > > The driver for the mux on MacBook Pros, apple_gmux.c, can be modular,
> > > so may be loaded fairly late.
> > 
> > Yeah, that's what I was afraid of.
> > 
> > > 
> > > Personally I'm booting my MacBook Pro via EFI, so the GPU in use is
> > > whatever efifb is talking to.  However it is possible to boot these
> > > machines in a legacy CSM mode and I don't know what the situation
> > > looks like in that case.
> > > 
> > 
> > Skimming through the code, this seems like the sort of thing that the
> > existing check in vga_is_firmware_default() is testing. I'm not familiar
> > enough with the relevant code to intuitively know whether it is supposed
> > to work for UEFI or legacy VGA or both (I think both?).
> > 
> > Mario, on the affected system, what does vga_is_firmware_default() return
> > on each of the GPUs? (I'd expect it to return true for the iGPU and false
> > for the dGPU, but I think the (boot_vga && boot_vga->is_firmware_default)
> > test would cause vga_is_boot_device() to return false if the vga_default
> > is passed into it a second time. That made sense for the way that the
> > function was originally called, to test if the passed-in vgadev is any
> > "better" than vga_default, and from a quick skim it doesn't seem like it
> > would get called multiple times in the new code either, but I worry that
> > if someone else decides they need to call vga_is_boot_device() a second
> > time in the future it might return a false result for vga_default.)
> > 
> 
> Right "now" on an unpatched kernel it won't run 'at all' because
> vga_arb_device_init() only matches VGA class devices.
> 
> Both GPUs are not VGA compatible, which is what lead to the patch in this
> thread starting to match display class devices too.
> 
>

Sure, I was curious what vga_is_firmware_default() returns for each of
the GPUs when run, regardless of whether or not it's currently being run
in the existing code - I'm wondering if vga_is_firmware_default() can be
a better tie breaker (or at least a first line tie breaker) than the one
you have now which tests for iGPU. I kind of went off on a tangent about
vga_is_boot_device() being possibly unreliable for a second time caller
when I was checking the callers of vga_is_firmware_default().





[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux