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/gpu/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 { NVKM_BAR0_PRI, NVKM_BAR1_FB, NVKM_BAR2_INST, + NVKM_BAR3_IO, }; struct nvkm_device_func { @@ -99,6 +100,7 @@ struct nvkm_device_func { resource_size_t (*resource_addr)(struct nvkm_device *, enum nvkm_bar_id); resource_size_t (*resource_size)(struct nvkm_device *, enum nvkm_bar_id); bool cpu_coherent; + int (*link_cap)(struct nvkm_device *, u32 *lnk_cap); }; 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) if (bar == NVKM_BAR2_INST) return idx; + idx += (pci_resource_flags(pdev->pdev, idx) & IORESOURCE_MEM_64) ? 2 : 1; + if (bar == NVKM_BAR3_IO) + return idx; + WARN_ON(1); return -1; } @@ -1628,6 +1632,14 @@ nvkm_device_pci_preinit(struct nvkm_device *device) return 0; } +static int +nvkm_device_pci_link_cap(struct nvkm_device *device, u32 *lnk_cap) +{ + struct nvkm_device_pci *pdev = nvkm_device_pci(device); + + return 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 = { .resource_addr = nvkm_device_pci_resource_addr, .resource_size = nvkm_device_pci_resource_size, .cpu_coherent = !IS_ENABLED(CONFIG_ARM), + .link_cap = nvkm_device_pci_link_cap, }; int diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c b/drivers/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) info->gpuPhysAddr = device->func->resource_addr(device, NVKM_BAR0_PRI); info->gpuPhysFbAddr = device->func->resource_addr(device, NVKM_BAR1_FB); info->gpuPhysInstAddr = device->func->resource_addr(device, NVKM_BAR2_INST); + info->gpuPhysIoAddr = device->func->resource_addr(device, NVKM_BAR3_IO); info->nvDomainBusDeviceFunc = pci_dev_id(pdev); info->maxUserVa = TASK_SIZE; info->pciConfigMirrorBase = device->pci->func->cfg.addr; @@ -175,6 +176,10 @@ r570_gsp_set_system_info(struct nvkm_gsp *gsp) r570_gsp_acpi_info(gsp, &info->acpiMethodData); info->bIsPrimary = video_is_primary_device(device->dev); info->bPreserveVideoMemoryAllocations = false; + info->hostPageSize = PAGE_SIZE; + + if (device->func->link_cap) + device->func->link_cap(device, &info->pcieConfigReg.linkCap); return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOSEQ); } -- 2.55.0
