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

Reply via email to