gpu: nvgpu: store usermode regs bus addr directly

Instead of just the base address of the main register range, store
(also) the base address of usermode area. All regs may not be always
available; on vgpu guests we have only the usermode regs.

Store the usermode addr we get from a platform resource directly in
gv11b_vgpu_probe() for vgpu. In that case the main reg addr is unset.

The base address is computed in gk20a_pm_finalize_poweron() for native
environments; when the reg addr is read from a resource, the chip is
still unknown and as such the HAL op for reading the usermode base
offset is unavailable.

Bug 200145225
Bug 200467197

Change-Id: I8855bb54a6456eb63b69559c84398f7eeaec3513
Signed-off-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1951524
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Konsta Holtta
2018-11-15 13:20:57 +02:00
committed by mobile promotions
parent a23c127603
commit d49d64e720
4 changed files with 17 additions and 10 deletions

View File

@@ -286,6 +286,16 @@ int gk20a_pm_finalize_poweron(struct device *dev)
if (err)
goto done;
if (g->ops.fifo.usermode_base != NULL) {
/*
* Native has regs_bus_addr set but not this one yet. Virtual
* gets usermode_regs_bus_addr directly from chip-specific
* probe, and regs_bus_addr stays unset.
*/
l->usermode_regs_bus_addr = l->regs_bus_addr +
g->ops.fifo.usermode_base(g);
}
err = nvgpu_finalize_poweron_linux(l);
if (err)
goto done;