fbsr
struct sg_table fbsr;
fbsr_send(struct fbsr *fbsr, struct fbsr_item *item)
struct nvkm_gsp *gsp = fbsr->client.gsp;
ret = r535_fbsr_memlist(&fbsr->device, fbsr->hmemory, NVKM_MEM_TARGET_VRAM,
ctrl->hClient = fbsr->client.object.handle;
ctrl->hVidMem = fbsr->hmemory++;
ctrl->sysOffset = fbsr->sys_offset;
fbsr->sys_offset += item->size;
fbsr_init(struct fbsr *fbsr, struct sg_table *sgt, u64 items_size)
struct nvkm_gsp *gsp = fbsr->client.gsp;
ret = r535_fbsr_memlist(&fbsr->device, fbsr->hmemory, NVKM_MEM_TARGET_HOST,
0, fbsr->size, sgt, &memlist);
ctrl->numRegions = fbsr->regions;
ctrl->hClient = fbsr->client.object.handle;
ctrl->hSysMem = fbsr->hmemory++;
fbsr_vram(struct fbsr *fbsr, const char *type, u64 addr, u64 size)
list_add_tail(&item->head, &fbsr->items);
fbsr_inst(struct fbsr *fbsr, const char *type, struct nvkm_memory *memory)
return fbsr_vram(fbsr, type, nvkm_memory_addr(memory), nvkm_memory_size(memory));
nvkm_gsp_sg_free(gsp->subdev.device, &gsp->sr.fbsr);
struct fbsr fbsr = {};
INIT_LIST_HEAD(&fbsr.items);
fbsr.hmemory = 0xcaf00003;
if (!fbsr_inst(&fbsr, "inst", &iobj->memory))
if (!fbsr_inst(&fbsr, "boot", &iobj->memory))
if (!fbsr_vram(&fbsr, "gsp-non-wpr", gsp->fb.heap.addr, gsp->fb.heap.size))
list_for_each_entry(item, &fbsr.items, head) {
fbsr.size += item->size;
fbsr.regions++;
items_size = fbsr.size;
nvkm_debug(subdev, "fbsr: %d regions (0x%llx bytes)\n", fbsr.regions, items_size);
fbsr.size += gsp->fb.rsvd_size;
fbsr.size += gsp->fb.bios.vga_workspace.size;
nvkm_debug(subdev, "fbsr: size: 0x%llx bytes\n", fbsr.size);
ret = nvkm_gsp_sg(gsp->subdev.device, fbsr.size, &gsp->sr.fbsr);
ret = nvkm_gsp_client_device_ctor(gsp, &fbsr.client, &fbsr.device);
ret = fbsr_init(&fbsr, &gsp->sr.fbsr, items_size);
list_for_each_entry(item, &fbsr.items, head) {
ret = fbsr_send(&fbsr, item);
nvkm_gsp_sg_free(device, &gsp->sr.fbsr);
list_for_each_entry_safe(item, temp, &fbsr.items, head) {
nvkm_gsp_device_dtor(&fbsr.device);
nvkm_gsp_client_dtor(&fbsr.client);
ret = rm->api->fbsr->suspend(gsp, suspend == NVKM_RUNTIME_SUSPEND);
gsp->rm->api->fbsr->resume(gsp);
.fbsr = &r535_fbsr,
ret = nvkm_gsp_sg(device, size, &gsp->sr.fbsr);
ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size, runtime);
nvkm_gsp_sg_free(device, &gsp->sr.fbsr);
.fbsr = &r570_fbsr,
} *fbsr;