Re: AGP cards in PCI mode (fake slots like AGPro, AGP Express, AGI, AGX, XGP)

From: Ilia Mirkin
Date: Sun Sep 13 2015 - 15:12:49 EST


On Sun, Sep 13, 2015 at 2:57 PM, Ondrej Zary <linux@xxxxxxxxxxxxxxxxxxxx> wrote:
> Hello,
> I have a PC Chips A31G board with AGPro slot and found that nouveau does not
> work properly with it. Console works but reverts to software mode, X11 hangs
> with mouse cursor only.
>
> The slot is physically AGP 1.5V but is wired to PCI bus as the chipset (SiS
> 761) does not support AGP cards. To further complicate things, the chipset has
> AGP capability - but only for the integrated video. You can see that in the
> lspci output below - the AGP card is on bus 0 and SiS card on bus 1 (AGP bus
> behind the AGP bridge). The SiS card is not used (can be disabled in BIOS but
> it does not improve things - as the AGP capability of the host bridge remains
> active).

I believe we can handle it with a blacklist. If the chipset just
doesn't support AGP at all, we should just set agpmode=0 irrespective
of the card plugged in, right?

Shouldn't the agpgart know about this and not even allow any setting
at all? This is where we get the idea to set 8x AGP from. See
drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.c for details.

The alternative is to add to nvkm_device_agp_quirks, and just add
something that matches just the host bridge vendor/device, ignoring
the chip.

>
> As seen in dmesg below, kernel tries to set AGP 8x mode for all AGP devices,
> including the AGP 4x TNT2 card which is not even connected to the AGP bridge.
>
> Setting nouveau.agpmode=0 makes it work but how can we make this case work
> automatically?
>
> Radeon driver does some "ring test" and if it fails, it disables AGP mode and
> retries. That seems to work a bit (with R7000 but not with R7200).
>
> But I think that we shouldn't even touch the AGP registers of other devices
> in this case as it might break the integrated video.
> But how can we know that the card is connected to the AGP bus? There does not
> seem to be a reliable way...
>
> dmesg:
> [ 22.015411] nouveau [ DEVICE][0000:00:05.0] BOOT0 : 0x20154000
> [ 22.015473] nouveau [ DEVICE][0000:00:05.0] Chipset: NV05 (NV05)
> [ 22.015527] nouveau [ DEVICE][0000:00:05.0] Family : NV04
> [ 22.041131] nouveau [ VBIOS][0000:00:05.0] using image from PRAMIN
> [ 22.041194] nouveau [ VBIOS][0000:00:05.0] BMP version 5.6
> [ 22.041382] nouveau [ VBIOS][0000:00:05.0] version 02.05.20.02.00
> [ 22.041561] nouveau W[ VBIOS][0000:00:05.0] DCB table not found
> [ 22.041867] nouveau W[ VBIOS][0000:00:05.0] DCB table not found
> [ 22.042079] nouveau W[ VBIOS][0000:00:05.0] DCB table not found
> [ 22.042133] nouveau W[ VBIOS][0000:00:05.0] DCB table not found
> [ 22.042245] nouveau W[ PTIMER][0000:00:05.0] unknown input clock freq
> [ 22.042306] nouveau [ PFB][0000:00:05.0] RAM type: SDRAM
> [ 22.042360] nouveau [ PFB][0000:00:05.0] RAM size: 32 MiB
> [ 22.042413] nouveau [ PFB][0000:00:05.0] ZCOMP: 0 tags
> [ 22.047063] nouveau [ CLK][0000:00:05.0] --:
> [ 22.047137] nouveau W[ VBIOS][0000:00:05.0] DCB table not found
> [ 22.047220] agpgart-amd64 0000:00:00.0: AGP 3.0 bridge
> [ 22.047281] agpgart: systemd-udevd tried to set rate=x12. Setting to AGP3 x8 mode.
> [ 22.047348] agpgart-amd64 0000:00:00.0: putting AGP V3 device into 8x mode
> [ 22.047425] nouveau 0000:00:05.0: putting AGP V3 device into 8x mode
> [ 22.047503] pci 0000:01:00.0: putting AGP V3 device into 8x mode
> [ 22.047632] [TTM] Zone kernel: Available graphics memory: 239112 kiB
> [ 22.047685] [TTM] Initializing pool allocator
> [ 22.047744] [TTM] Initializing DMA pool allocator
> [ 22.047814] nouveau [ DRM] VRAM: 31 MiB
> [ 22.047865] nouveau [ DRM] GART: 64 MiB
> [ 22.047918] nouveau [ DRM] BMP version 5.6
> [ 22.047971] nouveau W[ DRM] No DCB data found in VBIOS
> [ 22.051250] nouveau [ DRM] Saving VGA fonts
> [ 22.099912] nouveau W[ DRM] No DCB data found in VBIOS
> [ 22.101006] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
> [ 22.101061] [drm] Driver supports precise vblank timestamp query.
> [ 22.102645] nouveau [ DRM] MM: using M2MF for buffer copies
> [ 22.133344] nouveau [ DRM] allocated 1280x1024 fb: 0x4000, bo db2d6c00
> [ 22.133545] fbcon: nouveaufb (fb0) is primary device
> [ 22.369387] nouveau E[ DRM] GPU lockup - switching to software fbcon
> [ 22.378443] Console: switching to colour frame buffer device 160x64
> [ 22.395704] nouveau 0000:00:05.0: fb0: nouveaufb frame buffer device
> [ 22.395808] nouveau 0000:00:05.0: registered panic notifier
> [ 22.396783] [drm] Initialized nouveau 1.2.2 20120801 for 0000:00:05.0 on minor 0
>
> lspci -vvnn:
> 00:00.0 Host bridge [0600]: Silicon Integrated Systems [SiS] 761/M761 Host [1039:0761] (rev 01)
> Subsystem: Elitegroup Computer Systems Device [1019:0131]
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
> Latency: 32
> Region 0: Memory at f0000000 (32-bit, non-prefetchable) [size=64M]
> Capabilities: [a0] AGP version 3.0
> Status: RQ=32 Iso- ArqSz=2 Cal=3 SBA+ ITACoh- GART64- HTrans- 64bit- FW- AGP3+ Rate=x4,x8
> Command: RQ=1 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit- FW- Rate=x8
> Capabilities: [d0] HyperTransport: Slave or Primary Interface
> Command: BaseUnitID=0 UnitCnt=17 MastHost- DefDir- DUL-
> Link Control 0: CFlE- CST- CFE- <LkFail- Init+ EOC- TXO- <CRCErr=0 IsocEn- LSEn- ExtCTL- 64b-
> Link Config 0: MLWI=16bit DwFcIn- MLWO=16bit DwFcOut- LWI=16bit DwFcInEn- LWO=16bit DwFcOutEn-
> Link Control 1: CFlE- CST- CFE- <LkFail+ Init- EOC+ TXO+ <CRCErr=0 IsocEn- LSEn- ExtCTL- 64b-
> Link Config 1: MLWI=N/C DwFcIn- MLWO=N/C DwFcOut- LWI=N/C DwFcInEn- LWO=N/C DwFcOutEn-
> Revision ID: 1.05
> Link Frequency 0: 800MHz
> Link Error 0: <Prot- <Ovfl- <EOC- CTLTm-
> Link Frequency Capability 0: 200MHz+ 300MHz- 400MHz+ 500MHz- 600MHz- 800MHz+ 1.0GHz+ 1.2GHz- 1.4GHz- 1.6GHz- Vend-
> Feature Capability: IsocFC- LDTSTOP+ CRCTM- ECTLT- 64bA+ UIDRD-
> Link Frequency 1: 200MHz
> Link Error 1: <Prot- <Ovfl- <EOC- CTLTm-
> Link Frequency Capability 1: 200MHz- 300MHz- 400MHz- 500MHz- 600MHz- 800MHz- 1.0GHz- 1.2GHz- 1.4GHz- 1.6GHz- Vend-
> Error Handling: PFlE- OFlE- PFE- OFE- EOCFE- RFE- CRCFE- SERRFE- CF- RE- PNFE- ONFE- EOCNFE- RNFE- CRCNFE- SERRNFE-
> Prefetchable memory behind bridge Upper: 00-00
> Bus Number: 00
> Capabilities: [f0] HyperTransport: Interrupt Discovery and Configuration
> Capabilities: [5c] HyperTransport: Revision ID: 1.05
> Kernel driver in use: agpgart-amd64
>
> 00:01.0 PCI bridge [0604]: Silicon Integrated Systems [SiS] AGP Port (virtual PCI-to-PCI bridge) [1039:0002] (prog-if 00 [Normal decode])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
> Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 64
> Bus: primary=00, secondary=01, subordinate=01, sec-latency=64
> I/O behind bridge: 0000e000-0000efff
> Memory behind bridge: feb00000-febfffff
> Prefetchable memory behind bridge: d8000000-dfffffff
> Secondary status: 66MHz+ FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- <SERR- <PERR-
> BridgeCtl: Parity- SERR+ NoISA- VGA- MAbort- >Reset- FastB2B-
> PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> Capabilities: [a4] HyperTransport: UnitID Clumping
> ...
> 00:05.0 VGA compatible controller [0300]: NVIDIA Corporation NV5 [Riva TNT2 Model 64 / Model 64 Pro] [10de:002d] (rev 15) (prog-if 00 [VGA controller])
> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Latency: 64 (1250ns min, 250ns max)
> Interrupt: pin A routed to IRQ 16
> Region 0: Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
> Region 1: Memory at d6000000 (32-bit, prefetchable) [size=32M]
> Expansion ROM at feae0000 [disabled] [size=64K]
> Capabilities: [60] Power Management version 1
> Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [44] AGP version 2.0
> Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA- ITACoh- GART64- HTrans- 64bit- FW- AGP3- Rate=x1,x2,x4
> Command: RQ=32 ArqSz=0 Cal=0 SBA- AGP+ GART64- 64bit- FW- Rate=x2
> Kernel driver in use: nouveau
> ...
> 01:00.0 VGA compatible controller [0300]: Silicon Integrated Systems [SiS] 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter [1039:6330] (rev 03) (prog-if 00 [VGA controller])
> Subsystem: Silicon Integrated Systems [SiS] [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter [1039:6330]
> Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
> Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
> Interrupt: pin A routed to IRQ 10
> BIST result: 00
> Region 0: Memory at d8000000 (32-bit, prefetchable) [disabled] [size=128M]
> Region 1: Memory at febe0000 (32-bit, non-prefetchable) [disabled] [size=128K]
> Region 2: I/O ports at e800 [disabled] [size=128]
> Capabilities: [40] Power Management version 2
> Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
> Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> Capabilities: [50] AGP version 3.0
> Status: RQ=256 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW- AGP3+ Rate=x4,x8
> Command: RQ=32 ArqSz=2 Cal=0 SBA+ AGP+ GART64- 64bit- FW- Rate=x8
>
> --
> Ondrej Zary
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/