[PATCH 5/6] nouveau/gsp: add some more fields to r570 system info
Dave Airlie <[email protected]> Wed, 29 Jul 2026 14:15:29 +1000
| Newsgroups | org.freedesktop.lists.nouveau,org.freedesktop.lists.dri-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Dave Airlie <[email protected]> This just adds the pci io bar, link cap and os page size to the r570. Signed-off-by: Dave Airlie <[email protected]> --- drivers/gpu/drm/nouveau/include/nvkm/core/device.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c | 13 +++++++++++++ .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 5 +++++ 3 files changed, 20 insertions(+) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/g= pu/drm/nouveau/include/nvkm/core/device.h index 954a89d43bad..68b2d8a0b78c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h @@ -86,6 +86,7 @@ enum nvkm_bar_id { =09NVKM_BAR0_PRI, =09NVKM_BAR1_FB, =09NVKM_BAR2_INST, +=09NVKM_BAR3_IO, }; =20 struct nvkm_device_func { @@ -99,6 +100,7 @@ struct nvkm_device_func { =09resource_size_t (*resource_addr)(struct nvkm_device *, enum nvkm_bar_id= ); =09resource_size_t (*resource_size)(struct nvkm_device *, enum nvkm_bar_id= ); =09bool cpu_coherent; +=09int (*link_cap)(struct nvkm_device *, u32 *lnk_cap); }; =20 struct nvkm_device_quirk { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c b/drivers/gpu= /drm/nouveau/nvkm/engine/device/pci.c index 248623b91e29..7cfa21d9abaa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c @@ -1576,6 +1576,10 @@ nvkm_device_pci_resource_idx(struct nvkm_device_pci = *pdev, enum nvkm_bar_id bar) =09if (bar =3D=3D NVKM_BAR2_INST) =09=09return idx; =20 +=09idx +=3D (pci_resource_flags(pdev->pdev, idx) & IORESOURCE_MEM_64) ? 2 = : 1; +=09if (bar =3D=3D NVKM_BAR3_IO) +=09=09return idx; + =09WARN_ON(1); =09return -1; } @@ -1628,6 +1632,14 @@ nvkm_device_pci_preinit(struct nvkm_device *device) =09return 0; } =20 +static int +nvkm_device_pci_link_cap(struct nvkm_device *device, u32 *lnk_cap) +{ +=09struct nvkm_device_pci *pdev =3D nvkm_device_pci(device); + +=09return pcie_capability_read_dword(pdev->pdev, PCI_EXP_LNKCAP, lnk_cap); +} + static void * nvkm_device_pci_dtor(struct nvkm_device *device) { @@ -1646,6 +1658,7 @@ nvkm_device_pci_func =3D { =09.resource_addr =3D nvkm_device_pci_resource_addr, =09.resource_size =3D nvkm_device_pci_resource_size, =09.cpu_coherent =3D !IS_ENABLED(CONFIG_ARM), +=09.link_cap =3D nvkm_device_pci_link_cap, }; =20 int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c b/driver= s/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c index d9786830153d..857eda1e7439 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c @@ -165,6 +165,7 @@ r570_gsp_set_system_info(struct nvkm_gsp *gsp) =09info->gpuPhysAddr =3D device->func->resource_addr(device, NVKM_BAR0_PRI= ); =09info->gpuPhysFbAddr =3D device->func->resource_addr(device, NVKM_BAR1_F= B); =09info->gpuPhysInstAddr =3D device->func->resource_addr(device, NVKM_BAR2= _INST); +=09info->gpuPhysIoAddr =3D device->func->resource_addr(device, NVKM_BAR3_I= O); =09info->nvDomainBusDeviceFunc =3D pci_dev_id(pdev); =09info->maxUserVa =3D TASK_SIZE; =09info->pciConfigMirrorBase =3D device->pci->func->cfg.addr; @@ -175,6 +176,10 @@ r570_gsp_set_system_info(struct nvkm_gsp *gsp) =09r570_gsp_acpi_info(gsp, &info->acpiMethodData); =09info->bIsPrimary =3D video_is_primary_device(device->dev); =09info->bPreserveVideoMemoryAllocations =3D false; +=09info->hostPageSize =3D PAGE_SIZE; + +=09if (device->func->link_cap) +=09=09device->func->link_cap(device, &info->pcieConfigReg.linkCap); =20 =09return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOSEQ); } --=20 2.55.0