forked from Minki/linux
drm/nouveau/bar/nv50: ensure BAR is mapped
If the BAR is zero size, it indicates it was never successfully mapped. Ensure that the BAR is valid during initialization before attempting to use it. Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
307a312df9
commit
f10b83de1f
@ -109,7 +109,7 @@ nv50_bar_oneinit(struct nvkm_bar *base)
|
|||||||
struct nvkm_device *device = bar->base.subdev.device;
|
struct nvkm_device *device = bar->base.subdev.device;
|
||||||
static struct lock_class_key bar1_lock;
|
static struct lock_class_key bar1_lock;
|
||||||
static struct lock_class_key bar2_lock;
|
static struct lock_class_key bar2_lock;
|
||||||
u64 start, limit;
|
u64 start, limit, size;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = nvkm_gpuobj_new(device, 0x20000, 0, false, NULL, &bar->mem);
|
ret = nvkm_gpuobj_new(device, 0x20000, 0, false, NULL, &bar->mem);
|
||||||
@ -127,7 +127,10 @@ nv50_bar_oneinit(struct nvkm_bar *base)
|
|||||||
|
|
||||||
/* BAR2 */
|
/* BAR2 */
|
||||||
start = 0x0100000000ULL;
|
start = 0x0100000000ULL;
|
||||||
limit = start + device->func->resource_size(device, 3);
|
size = device->func->resource_size(device, 3);
|
||||||
|
if (!size)
|
||||||
|
return -ENOMEM;
|
||||||
|
limit = start + size;
|
||||||
|
|
||||||
ret = nvkm_vmm_new(device, start, limit-- - start, NULL, 0,
|
ret = nvkm_vmm_new(device, start, limit-- - start, NULL, 0,
|
||||||
&bar2_lock, "bar2", &bar->bar2_vmm);
|
&bar2_lock, "bar2", &bar->bar2_vmm);
|
||||||
@ -164,7 +167,10 @@ nv50_bar_oneinit(struct nvkm_bar *base)
|
|||||||
|
|
||||||
/* BAR1 */
|
/* BAR1 */
|
||||||
start = 0x0000000000ULL;
|
start = 0x0000000000ULL;
|
||||||
limit = start + device->func->resource_size(device, 1);
|
size = device->func->resource_size(device, 1);
|
||||||
|
if (!size)
|
||||||
|
return -ENOMEM;
|
||||||
|
limit = start + size;
|
||||||
|
|
||||||
ret = nvkm_vmm_new(device, start, limit-- - start, NULL, 0,
|
ret = nvkm_vmm_new(device, start, limit-- - start, NULL, 0,
|
||||||
&bar1_lock, "bar1", &bar->bar1_vmm);
|
&bar1_lock, "bar1", &bar->bar1_vmm);
|
||||||
|
Loading…
Reference in New Issue
Block a user