Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 791dc143 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Ben Skeggs
Browse files

drm/nvd0-/disp: handle case where display engine is missing/disabled



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent e99716f1
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -958,6 +958,9 @@ nvd0_disp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
	int heads = nv_rd32(parent, 0x022448);
	int ret;

	if (nv_rd32(parent, 0x022500) & 0x00000001)
		return -ENODEV;

	ret = nouveau_disp_create(parent, engine, oclass, heads,
				  "PDISP", "display", &priv);
	*pobject = nv_object(priv);
+3 −0
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@ nve0_disp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
	int heads = nv_rd32(parent, 0x022448);
	int ret;

	if (nv_rd32(parent, 0x022500) & 0x00000001)
		return -ENODEV;

	ret = nouveau_disp_create(parent, engine, oclass, heads,
				  "PDISP", "display", &priv);
	*pobject = nv_object(priv);
+3 −0
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@ nvf0_disp_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
	int heads = nv_rd32(parent, 0x022448);
	int ret;

	if (nv_rd32(parent, 0x022500) & 0x00000001)
		return -ENODEV;

	ret = nouveau_disp_create(parent, engine, oclass, heads,
				  "PDISP", "display", &priv);
	*pobject = nv_object(priv);
+5 −1
Original line number Diff line number Diff line
@@ -85,11 +85,15 @@ static void
nouveau_bios_shadow_pramin(struct nouveau_bios *bios)
{
	struct nouveau_device *device = nv_device(bios);
	u64 addr = 0;
	u32 bar0 = 0;
	int i;

	if (device->card_type >= NV_50) {
		u64 addr = (u64)(nv_rd32(bios, 0x619f04) & 0xffffff00) << 8;
		if (  device->card_type < NV_C0 ||
		    !(nv_rd32(bios, 0x022500) & 0x00000001))
			addr = (u64)(nv_rd32(bios, 0x619f04) & 0xffffff00) << 8;

		if (!addr) {
			addr  = (u64)nv_rd32(bios, 0x001700) << 16;
			addr += 0xf0000;
+2 −0
Original line number Diff line number Diff line
@@ -73,6 +73,8 @@ nvc0_devinit_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
		return ret;

	priv->base.pll_set = nvc0_devinit_pll_set;
	if (nv_rd32(priv, 0x022500) & 0x00000001)
		priv->base.post = true;
	return 0;
}

Loading