lkml.org 
[lkml]   [2023]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v2 0/5] apple-gmux: support MMIO gmux type on T2 Macs
    Date
    Hi All,

    This patch series adds support for the MMIO based gmux present on these
    Dual GPU Apple T2 Macs: MacBookPro15,1, MacBookPro15,3, MacBookPro16,1,
    MacBookPro16,4 (although amdgpu isn't working on MacBookPro16,4 [1]).

    Changes from v1/RFC[2]:

    - Drop commits "use cpu_to_be32 instead of manual reorder" and
    "consolidate version reading" as the former was broken and they
    could introduce regressions.
    - Only use the GMSP acpi method on MMIO gmux's.
    - Use a debugfs interface instead of a sysfs interface.
    - Document some of the chips used with MMIO gmux's.
    - Move changes to amdgpu and snd_hda_intel out of this patchset.

    # 1:

    has a slight change in how the switch state is read: instead of checking
    for x == 2, check !(x & 1)

    # 2:

    implements a system to support more than 2 gmux types

    # 3:

    start using the gmux's GMSP acpi method when handling interrupts on MMIO
    gmux's. This is needed for the MMIO gmux's to clear interrupts.

    # 4:

    Adds support for the MMIO based gmux on T2 macs.

    # 5:

    Add a debugfs interface to apple-gmux so data from ports can be read
    and written to from userspace.

    This can be used for more easily researching what unknown ports do,
    and switching gpus when vga_switcheroo isn't ready (e.g. when one gpu
    is bound to vfio-pci and in use by a Windows VM, I can use this to
    switch my internal display between Linux and Windows easily).

    # Issues:

    1. Switching gpus at runtime has the same issue as indexed gmux's: the
    inactive gpu can't probe the DDC lines for eDP [3]

    2. Powering on the amdgpu with vga_switcheroo doesn't work well. I'm
    told on the MacBookPro15,1 it works sometimes, and adding delays helps,
    but on my MacBookPro16,1 I haven't been able to get it to work at all:

    amdgpu: switched off
    amdgpu: switched on
    amdgpu 0000:03:00.0:
    Unable to change power state from D3hot to D0, device inaccessible
    amdgpu 0000:03:00.0:
    Unable to change power state from D3cold to D0, device inaccessible
    [drm] PCIE GART of 512M enabled (table at 0x00000080FEE00000).
    [drm] PSP is resuming...
    [drm:psp_hw_start [amdgpu]] *ERROR* PSP create ring failed!
    [drm:psp_resume [amdgpu]] *ERROR* PSP resume failed
    [drm:amdgpu_device_fw_loading [amdgpu]]
    *ERROR* resume of IP block <psp> failed -62
    amdgpu 0000:03:00.0: amdgpu: amdgpu_device_ip_resume failed (-62).
    snd_hda_intel 0000:03:00.1: Enabling via vga_switcheroo
    snd_hda_intel 0000:03:00.1:
    Unable to change power state from D3cold to D0, device inaccessible
    snd_hda_intel 0000:03:00.1: CORB reset timeout#2, CORBRP = 65535
    snd_hda_codec_hdmi hdaudioC0D0: Unable to sync register 0x2f0d00. -5

    There are some acpi methods (PWRD, PWG1 [4, 5]) that macOS calls when
    changing the amdgpu's power state, but we don't use them and that could be
    a cause. Additionally unlike previous generation Macbooks which work
    better, on MacBookPro16,1 the gpu is located behind 2 pci bridges:

    01:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI]
    Navi 10 XL Upstream Port of PCI Express Switch (rev 43)
    02:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI]
    Navi 10 XL Downstream Port of PCI Express Switch
    03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
    Navi 14 [Radeon RX 5500/5500M / Pro 5500M] (rev 43)
    03:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI]
    Navi 10 HDMI Audio

    Upon attempting to power on the gpu with vga_switcheroo, all these
    devices except 01:00.0 have their config space filled with 1s.
    Rescanning pci makes the config space of all the devices go back to
    normal, however amdgpu still fails to resume with the same logs as
    above.

    [1]: https://lore.kernel.org/all/3AFB9142-2BD0-46F9-AEA9-C9C5D13E68E6@live.com/
    [2]: https://lore.kernel.org/platform-driver-x86/20230210044826.9834-1-orlandoch.dev@gmail.com/
    [3]: https://lore.kernel.org/all/9eed8ede6f15a254ad578e783b050e1c585d5a15.1439288957.git.lukas@wunner.de/
    [4]: https://gist.github.com/Redecorating/6c7136b7a4ac7ce3b77d8e41740dd87b
    [5]: https://lore.kernel.org/all/20120710160555.GA31562@srcf.ucam.org/

    Orlando Chamberlain (5):
    apple-gmux: use first bit to check switch state
    apple-gmux: refactor gmux types
    apple-gmux: Use GMSP acpi method for interrupt clear
    apple-gmux: support MMIO gmux on T2 Macs
    apple-gmux: add debugfs interface

    drivers/platform/x86/apple-gmux.c | 361 ++++++++++++++++++++++++++----
    include/linux/apple-gmux.h | 52 +++--
    2 files changed, 349 insertions(+), 64 deletions(-)

    --
    2.39.1

    \
     
     \ /
      Last update: 2023-03-27 00:25    [W:3.399 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site