These registers have moved on GH100/GBxxx, and the GSP-RM init code uses
hardcoded values from earlier GPUs to fill GspSystemInfo.

Replace the per-GPU accessors in nvkm_pci_func with region info, and use
it when initialising GspSystemInfo.

Signed-off-by: Ben Skeggs <bske...@nvidia.com>
Reviewed-by: Dave Airlie <airl...@redhat.com>
Reviewed-by: Timur Tabi <tt...@nvidia.com>
Tested-by: Timur Tabi <tt...@nvidia.com>
---
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c |  5 ++--
 .../drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c |  5 ++--
 .../gpu/drm/nouveau/nvkm/subdev/pci/base.c    | 10 ++++----
 drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c |  5 ++--
 drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c |  5 ++--
 drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c |  5 ++--
 .../gpu/drm/nouveau/nvkm/subdev/pci/gf100.c   |  5 ++--
 .../gpu/drm/nouveau/nvkm/subdev/pci/gf106.c   |  5 ++--
 .../gpu/drm/nouveau/nvkm/subdev/pci/gk104.c   |  5 ++--
 .../gpu/drm/nouveau/nvkm/subdev/pci/gp100.c   |  4 +--
 .../gpu/drm/nouveau/nvkm/subdev/pci/nv04.c    | 25 +------------------
 .../gpu/drm/nouveau/nvkm/subdev/pci/nv40.c    | 25 +------------------
 .../gpu/drm/nouveau/nvkm/subdev/pci/nv46.c    |  4 +--
 .../gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c    |  4 +--
 .../gpu/drm/nouveau/nvkm/subdev/pci/priv.h    | 11 ++++----
 15 files changed, 33 insertions(+), 90 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
index ce3d4dd49ac8..e2171d0d25be 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
@@ -24,6 +24,7 @@
 #include "priv.h"
 
 #include <core/pci.h>
+#include <subdev/pci/priv.h>
 #include <subdev/timer.h>
 #include <subdev/vfn.h>
 #include <engine/fifo/chan.h>
@@ -905,8 +906,8 @@ r535_gsp_set_system_info(struct nvkm_gsp *gsp)
        info->gpuPhysInstAddr = device->func->resource_addr(device, 3);
        info->nvDomainBusDeviceFunc = pci_dev_id(pdev->pdev);
        info->maxUserVa = TASK_SIZE;
-       info->pciConfigMirrorBase = 0x088000;
-       info->pciConfigMirrorSize = 0x001000;
+       info->pciConfigMirrorBase = device->pci->func->cfg.addr;
+       info->pciConfigMirrorSize = device->pci->func->cfg.size;
        r535_gsp_acpi_info(gsp, &info->acpiMethodData);
 
        return nvkm_gsp_rpc_wr(gsp, info, NVKM_GSP_RPC_REPLY_NOWAIT);
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 55795c49371f..a3c070d41923 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
@@ -12,6 +12,7 @@
 #include "nvrm/msgfn.h"
 
 #include <core/pci.h>
+#include <subdev/pci/priv.h>
 
 static u32
 r570_gsp_sr_data_size(struct nvkm_gsp *gsp)
@@ -157,8 +158,8 @@ r570_gsp_set_system_info(struct nvkm_gsp *gsp)
        info->gpuPhysInstAddr = device->func->resource_addr(device, 3);
        info->nvDomainBusDeviceFunc = pci_dev_id(pdev);
        info->maxUserVa = TASK_SIZE;
-       info->pciConfigMirrorBase = 0x088000;
-       info->pciConfigMirrorSize = 0x001000;
+       info->pciConfigMirrorBase = device->pci->func->cfg.addr;
+       info->pciConfigMirrorSize = device->pci->func->cfg.size;
        info->PCIDeviceID = (pdev->device << 16) | pdev->vendor;
        info->PCISubDeviceID = (pdev->subsystem_device << 16) | 
pdev->subsystem_vendor;
        info->PCIRevisionID = pdev->revision;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
index 5a0de45d36ce..6867934256a7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
@@ -39,26 +39,26 @@ nvkm_pci_msi_rearm(struct nvkm_device *device)
 u32
 nvkm_pci_rd32(struct nvkm_pci *pci, u16 addr)
 {
-       return pci->func->rd32(pci, addr);
+       return nvkm_rd32(pci->subdev.device, pci->func->cfg.addr + addr);
 }
 
 void
 nvkm_pci_wr08(struct nvkm_pci *pci, u16 addr, u8 data)
 {
-       pci->func->wr08(pci, addr, data);
+       nvkm_wr08(pci->subdev.device, pci->func->cfg.addr + addr, data);
 }
 
 void
 nvkm_pci_wr32(struct nvkm_pci *pci, u16 addr, u32 data)
 {
-       pci->func->wr32(pci, addr, data);
+       nvkm_wr32(pci->subdev.device, pci->func->cfg.addr + addr, data);
 }
 
 u32
 nvkm_pci_mask(struct nvkm_pci *pci, u16 addr, u32 mask, u32 value)
 {
-       u32 data = pci->func->rd32(pci, addr);
-       pci->func->wr32(pci, addr, (data & ~mask) | value);
+       u32 data = nvkm_pci_rd32(pci, addr);
+       nvkm_pci_wr32(pci, addr, (data & ~mask) | value);
        return data;
 }
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c
index 5b29aacedef3..5308f6539a3f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c
@@ -132,10 +132,9 @@ g84_pcie_init(struct nvkm_pci *pci)
 
 static const struct nvkm_pci_func
 g84_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = nv46_pci_msi_rearm,
 
        .pcie.init = g84_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c
index a9e0674009c6..8ae7aa02e675 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.c
@@ -33,10 +33,9 @@ g92_pcie_version_supported(struct nvkm_pci *pci)
 
 static const struct nvkm_pci_func
 g92_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = nv46_pci_msi_rearm,
 
        .pcie.init = g84_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c
index 7bacd0693283..df745d0690ca 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c
@@ -25,10 +25,9 @@
 
 static const struct nvkm_pci_func
 g94_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = nv40_pci_msi_rearm,
 
        .pcie.init = g84_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c
index 099906092fe1..6ce941df87b7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c
@@ -78,10 +78,9 @@ gf100_pcie_set_link(struct nvkm_pci *pci, enum 
nvkm_pcie_speed speed, u8 width)
 
 static const struct nvkm_pci_func
 gf100_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = gf100_pci_msi_rearm,
 
        .pcie.init = gf100_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c
index bcde609ba866..712ca7e0959a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c
@@ -25,10 +25,9 @@
 
 static const struct nvkm_pci_func
 gf106_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = nv40_pci_msi_rearm,
 
        .pcie.init = gf100_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c
index 6be87ecffc89..ec6d0a7de995 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c
@@ -204,10 +204,9 @@ gk104_pcie_set_link(struct nvkm_pci *pci, enum 
nvkm_pcie_speed speed, u8 width)
 
 static const struct nvkm_pci_func
 gk104_pci_func = {
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
+
        .init = g84_pci_init,
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
        .msi_rearm = nv40_pci_msi_rearm,
 
        .pcie.init = gk104_pcie_init,
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c
index a5fafda0014d..4204316a544f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.c
@@ -31,9 +31,7 @@ gp100_pci_msi_rearm(struct nvkm_pci *pci)
 
 static const struct nvkm_pci_func
 gp100_pci_func = {
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
        .msi_rearm = gp100_pci_msi_rearm,
 };
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c
index 9ab64194b185..b8a3f6850fa7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.c
@@ -23,32 +23,9 @@
  */
 #include "priv.h"
 
-static u32
-nv04_pci_rd32(struct nvkm_pci *pci, u16 addr)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       return nvkm_rd32(device, 0x001800 + addr);
-}
-
-static void
-nv04_pci_wr08(struct nvkm_pci *pci, u16 addr, u8 data)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       nvkm_wr08(device, 0x001800 + addr, data);
-}
-
-static void
-nv04_pci_wr32(struct nvkm_pci *pci, u16 addr, u32 data)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       nvkm_wr32(device, 0x001800 + addr, data);
-}
-
 static const struct nvkm_pci_func
 nv04_pci_func = {
-       .rd32 = nv04_pci_rd32,
-       .wr08 = nv04_pci_wr08,
-       .wr32 = nv04_pci_wr32,
+       .cfg = { .addr = 0x001800, .size = 0x1000 },
 };
 
 int
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c
index 6a3c31cf0200..1971dbbdeb2b 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.c
@@ -23,27 +23,6 @@
  */
 #include "priv.h"
 
-u32
-nv40_pci_rd32(struct nvkm_pci *pci, u16 addr)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       return nvkm_rd32(device, 0x088000 + addr);
-}
-
-void
-nv40_pci_wr08(struct nvkm_pci *pci, u16 addr, u8 data)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       nvkm_wr08(device, 0x088000 + addr, data);
-}
-
-void
-nv40_pci_wr32(struct nvkm_pci *pci, u16 addr, u32 data)
-{
-       struct nvkm_device *device = pci->subdev.device;
-       nvkm_wr32(device, 0x088000 + addr, data);
-}
-
 void
 nv40_pci_msi_rearm(struct nvkm_pci *pci)
 {
@@ -52,9 +31,7 @@ nv40_pci_msi_rearm(struct nvkm_pci *pci)
 
 static const struct nvkm_pci_func
 nv40_pci_func = {
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
        .msi_rearm = nv40_pci_msi_rearm,
 };
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c
index 9cad17f178ec..0093eabac9ae 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.c
@@ -38,9 +38,7 @@ nv46_pci_msi_rearm(struct nvkm_pci *pci)
 
 static const struct nvkm_pci_func
 nv46_pci_func = {
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
        .msi_rearm = nv46_pci_msi_rearm,
 };
 
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c
index 741e34bf307c..b445081bb80e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.c
@@ -25,9 +25,7 @@
 
 static const struct nvkm_pci_func
 nv4c_pci_func = {
-       .rd32 = nv40_pci_rd32,
-       .wr08 = nv40_pci_wr08,
-       .wr32 = nv40_pci_wr32,
+       .cfg = { .addr = 0x088000, .size = 0x1000 },
 };
 
 int
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h 
b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h
index 9b7583532962..988eeee1471c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h
@@ -8,10 +8,12 @@ int nvkm_pci_new_(const struct nvkm_pci_func *, struct 
nvkm_device *, enum nvkm_
                  struct nvkm_pci **);
 
 struct nvkm_pci_func {
+       struct {
+               u32 addr;
+               u16 size;
+       } cfg;
+
        void (*init)(struct nvkm_pci *);
-       u32 (*rd32)(struct nvkm_pci *, u16 addr);
-       void (*wr08)(struct nvkm_pci *, u16 addr, u8 data);
-       void (*wr32)(struct nvkm_pci *, u16 addr, u32 data);
        void (*msi_rearm)(struct nvkm_pci *);
 
        struct {
@@ -27,9 +29,6 @@ struct nvkm_pci_func {
        } pcie;
 };
 
-u32 nv40_pci_rd32(struct nvkm_pci *, u16);
-void nv40_pci_wr08(struct nvkm_pci *, u16, u8);
-void nv40_pci_wr32(struct nvkm_pci *, u16, u32);
 void nv40_pci_msi_rearm(struct nvkm_pci *);
 
 void nv46_pci_msi_rearm(struct nvkm_pci *);
-- 
2.49.0

Reply via email to