On Wed, 16 Apr 2025 01:36:15 +0800
Tomita Moeko <tomitamo...@gmail.com> wrote:
> 
> The generation register also exists on discrete GPUs. In the new xe
> driver [1], the Battlemage discrete GPU shares the same logic reading
> GMD_ID_DISPLAY register. The driver itself uses is_dgfx bit mapped to
> device id. In QEMU, we need to know whether the device is a supported
> IGD device first before applying the IGD-specific quirk, especially
> for legacy mode.
> 
> The most feasible way is to check if kernel exposes VFIO_REGION_SUBTYPE_
> INTEL_IGD_OPREGION on that device I think, as only IGD has OpRegion.
> 
> i915 driver [2] and Arrow Lake datasheet [3] shows that Intel has
> removed the BDSM register by making the DSM range part of BAR2 since
> Meteor Lake and onwards. QEMU only need to quirk on the register for
> IGD devices until Raptor Lake, meaning that the device list is fixed
> for now.
> 
> By the way, for legacy mode, I think we should only support it until
> Gen 9, as Intel only provide VBIOS or CSM support until that generation,
> and seabios cannot handle 64 bit BDSM register. I'm also wondering if
> VGA really works on newer generations.

If it's a VGA class device, it really should, but without CSM I could
see why you have doubts.
 
> Maybe we can continue with current igd_gen, but implement a logic like:
>     if (!intel graphics)
>         return;
>     if (!has VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION)
>         return;
>     setup_opregion();  // make x-igd-opregion automatically enabled?
>     if (gen <= 9)
>         setup_legacy_mode();
>     if (gen >= 6 && gen <=9)
>         setup_32bit_bdsm():
>     else if (gen >= 9 && gen <= 12)
>         setup_64bit_bdsm();
>     // ...
>     // optional quirks like lpc bridge id
> 
> A table can also be used to precisely track all the gen 6-12 devices.

This seems reasonable to me.

> Attached a config space dump of Intel A770 discrete GPU for reference
> 
> 03:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A770] (rev 08) 
> (prog-if 00 [VGA controller])
>       Subsystem: Intel Corporation Device 1020
>       Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
> Stepping- SERR- FastB2B- DisINTx-
>       Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- 
> <MAbort- >SERR- <PERR- INTx-
>       Latency: 0, Cache Line Size: 64 bytes
>       Interrupt: pin ? routed to IRQ 181
>       IOMMU group: 19
>       Region 0: Memory at 81000000 (64-bit, non-prefetchable) [size=16M]
>       Region 2: Memory at 6000000000 (64-bit, prefetchable) [size=16G]
>       Expansion ROM at 82000000 [disabled] [size=2M]
>       Capabilities: [40] Vendor Specific Information: Len=0c <?>
>       Capabilities: [70] Express (v2) Endpoint, IntMsgNum 0
>               DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, 
> L1 <1us
>                       ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ 
> SlotPowerLimit 0W TEE-IO-
>               DevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-
>                       RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+ FLReset-
>                       MaxPayload 128 bytes, MaxReadReq 128 bytes
>               DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq+ AuxPwr- 
> TransPend-
>               LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit 
> Latency L0s <64ns, L1 <1us

Hmm, hardware bug?  Surely the A770 is not a Gen1, x1 device.
Something is going on with the interrupt pin above too.  At least it
claims FLReset+ above, does it work reliably though?  Seems like there
are various reports of Arc GPUs not working well with assignment due to
reset issues.  Thanks,

Alex

>                       ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
>               LnkCtl: ASPM Disabled; RCB 64 bytes, LnkDisable- CommClk-
>                       ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>               LnkSta: Speed 2.5GT/s, Width x1
>                       TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
>               DevCap2: Completion Timeout: Range B, TimeoutDis+ NROPrPrP- LTR+
>                        10BitTagComp+ 10BitTagReq+ OBFF Not Supported, ExtFmt+ 
> EETLPPrefix-
>                        EmergencyPowerReduction Not Supported, 
> EmergencyPowerReductionInit-
>                        FRS- TPHComp- ExtTPHComp-
>                        AtomicOpsCap: 32bit- 64bit- 128bitCAS-
>               DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
>                        AtomicOpsCtl: ReqEn-
>                        IDOReq- IDOCompl- LTR+ EmergencyPowerReductionReq-
>                        10BitTagReq- OBFF Disabled, EETLPPrefixBlk-
>               LnkCap2: Supported Link Speeds: 2.5GT/s, Crosslink- Retimer- 
> 2Retimers- DRS-
>               LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
>                        Transmit Margin: Normal Operating Range, 
> EnterModifiedCompliance- ComplianceSOS-
>                        Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB 
> preshoot
>               LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- 
> EqualizationPhase1-
>                        EqualizationPhase2- EqualizationPhase3- 
> LinkEqualizationRequest-
>                        Retimer- 2Retimers- CrosslinkRes: unsupported
>       Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable+ 64bit+
>               Address: 00000000fee008b8  Data: 0000
>               Masking: 00000000  Pending: 00000000
>       Capabilities: [d0] Power Management version 3
>               Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA 
> PME(D0+,D1-,D2-,D3hot+,D3cold-)
>               Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
>       Capabilities: [100 v1] Alternative Routing-ID Interpretation (ARI)
>               ARICap: MFVC- ACS-, Next Function: 0
>               ARICtl: MFVC- ACS-, Function Group: 0
>       Capabilities: [420 v1] Physical Resizable BAR
>               BAR 2: current size: 16GB, supported: 256MB 512MB 1GB 2GB 4GB 
> 8GB 16GB
>       Capabilities: [400 v1] Latency Tolerance Reporting
>               Max snoop latency: 15728640ns
>               Max no snoop latency: 15728640ns
>       Kernel driver in use: i915
>       Kernel modules: i915, xe


Reply via email to