mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
drm/nouveau/instmem: add hal for set_bar0_window_addr()
GH100/GBxxx have moved the register that controls where in VRAM the the BAR0 NV_PRAMIN window points. Add a HAL for this, as the BAR0 window is needed for BAR2 bootstrap. Signed-off-by: Ben Skeggs <bskeggs@nvidia.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Timur Tabi <ttabi@nvidia.com> Tested-by: Timur Tabi <ttabi@nvidia.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
2f89bb3264
commit
0adfd612c0
|
|
@ -317,6 +317,7 @@ r535_instmem_new(const struct nvkm_instmem_func *hw,
|
|||
rm->memory_new = hw->memory_new;
|
||||
rm->memory_wrap = hw->memory_wrap;
|
||||
rm->zero = false;
|
||||
rm->set_bar0_window_addr = hw->set_bar0_window_addr;
|
||||
|
||||
ret = nv50_instmem_new_(rm, device, type, inst, pinstmem);
|
||||
if (ret)
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ nv50_instobj_wr32_slow(struct nvkm_memory *memory, u64 offset, u32 data)
|
|||
|
||||
spin_lock_irqsave(&imem->base.lock, flags);
|
||||
if (unlikely(imem->addr != base)) {
|
||||
nvkm_wr32(device, 0x001700, base >> 16);
|
||||
imem->base.func->set_bar0_window_addr(device, base);
|
||||
imem->addr = base;
|
||||
}
|
||||
nvkm_wr32(device, 0x700000 + addr, data);
|
||||
|
|
@ -85,7 +85,7 @@ nv50_instobj_rd32_slow(struct nvkm_memory *memory, u64 offset)
|
|||
|
||||
spin_lock_irqsave(&imem->base.lock, flags);
|
||||
if (unlikely(imem->addr != base)) {
|
||||
nvkm_wr32(device, 0x001700, base >> 16);
|
||||
imem->base.func->set_bar0_window_addr(device, base);
|
||||
imem->addr = base;
|
||||
}
|
||||
data = nvkm_rd32(device, 0x700000 + addr);
|
||||
|
|
@ -394,6 +394,12 @@ nv50_instobj_new(struct nvkm_instmem *imem, u32 size, u32 align, bool zero,
|
|||
* instmem subdev implementation
|
||||
*****************************************************************************/
|
||||
|
||||
static void
|
||||
nv50_instmem_set_bar0_window_addr(struct nvkm_device *device, u64 addr)
|
||||
{
|
||||
nvkm_wr32(device, 0x001700, addr >> 16);
|
||||
}
|
||||
|
||||
static void
|
||||
nv50_instmem_fini(struct nvkm_instmem *base)
|
||||
{
|
||||
|
|
@ -415,6 +421,7 @@ nv50_instmem = {
|
|||
.memory_new = nv50_instobj_new,
|
||||
.memory_wrap = nv50_instobj_wrap,
|
||||
.zero = false,
|
||||
.set_bar0_window_addr = nv50_instmem_set_bar0_window_addr,
|
||||
};
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ struct nvkm_instmem_func {
|
|||
bool zero, struct nvkm_memory **);
|
||||
int (*memory_wrap)(struct nvkm_instmem *, struct nvkm_memory *, struct nvkm_memory **);
|
||||
bool zero;
|
||||
void (*set_bar0_window_addr)(struct nvkm_device *, u64 addr);
|
||||
};
|
||||
|
||||
int nv50_instmem_new_(const struct nvkm_instmem_func *, struct nvkm_device *,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user