diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/dispnv04/hw.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_fence.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_led.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_usif.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv50_display.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv84_fence.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c | 2 | 
8 files changed, 19 insertions, 6 deletions
diff --git a/drivers/gpu/drm/nouveau/dispnv04/hw.c b/drivers/gpu/drm/nouveau/dispnv04/hw.c index 74856a8b8f35..e64f52464ecf 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/hw.c +++ b/drivers/gpu/drm/nouveau/dispnv04/hw.c @@ -222,6 +222,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype)  		uint32_t mpllP;  		pci_read_config_dword(pci_get_bus_and_slot(0, 3), 0x6c, &mpllP); +		mpllP = (mpllP >> 8) & 0xf;  		if (!mpllP)  			mpllP = 4; @@ -232,7 +233,7 @@ nouveau_hw_get_clock(struct drm_device *dev, enum nvbios_pll_type plltype)  		uint32_t clock;  		pci_read_config_dword(pci_get_bus_and_slot(0, 5), 0x4c, &clock); -		return clock; +		return clock / 1000;  	}  	ret = nouveau_hw_get_pllvals(dev, plltype, &pllvals); diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.h b/drivers/gpu/drm/nouveau/nouveau_fence.h index ccdce1b4eec4..d5e58a38f160 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fence.h +++ b/drivers/gpu/drm/nouveau/nouveau_fence.h @@ -99,6 +99,7 @@ struct nv84_fence_priv {  	struct nouveau_bo *bo;  	struct nouveau_bo *bo_gart;  	u32 *suspend; +	struct mutex mutex;  };  int  nv84_fence_context_new(struct nouveau_channel *); diff --git a/drivers/gpu/drm/nouveau/nouveau_led.h b/drivers/gpu/drm/nouveau/nouveau_led.h index 187ecdb82002..21a5775028cc 100644 --- a/drivers/gpu/drm/nouveau/nouveau_led.h +++ b/drivers/gpu/drm/nouveau/nouveau_led.h @@ -42,7 +42,7 @@ nouveau_led(struct drm_device *dev)  }  /* nouveau_led.c */ -#if IS_ENABLED(CONFIG_LEDS_CLASS) +#if IS_REACHABLE(CONFIG_LEDS_CLASS)  int  nouveau_led_init(struct drm_device *dev);  void nouveau_led_suspend(struct drm_device *dev);  void nouveau_led_resume(struct drm_device *dev); diff --git a/drivers/gpu/drm/nouveau/nouveau_usif.c b/drivers/gpu/drm/nouveau/nouveau_usif.c index 08f9c6fa0f7f..1fba38622744 100644 --- a/drivers/gpu/drm/nouveau/nouveau_usif.c +++ b/drivers/gpu/drm/nouveau/nouveau_usif.c @@ -313,7 +313,8 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)  	if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) {  		/* block access to objects not created via this interface */  		owner = argv->v0.owner; -		if (argv->v0.object == 0ULL) +		if (argv->v0.object == 0ULL && +		    argv->v0.type != NVIF_IOCTL_V0_DEL)  			argv->v0.owner = NVDRM_OBJECT_ANY; /* except client */  		else  			argv->v0.owner = NVDRM_OBJECT_USIF; diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index 2c2c64507661..32097fd615fd 100644 --- a/drivers/gpu/drm/nouveau/nv50_display.c +++ b/drivers/gpu/drm/nouveau/nv50_display.c @@ -4052,6 +4052,11 @@ nv50_disp_atomic_commit_tail(struct drm_atomic_state *state)  		}  	} +	for_each_crtc_in_state(state, crtc, crtc_state, i) { +		if (crtc->state->event) +			drm_crtc_vblank_get(crtc); +	} +  	/* Update plane(s). */  	for_each_plane_in_state(state, plane, plane_state, i) {  		struct nv50_wndw_atom *asyw = nv50_wndw_atom(plane->state); @@ -4101,6 +4106,7 @@ nv50_disp_atomic_commit_tail(struct drm_atomic_state *state)  			drm_crtc_send_vblank_event(crtc, crtc->state->event);  			spin_unlock_irqrestore(&crtc->dev->event_lock, flags);  			crtc->state->event = NULL; +			drm_crtc_vblank_put(crtc);  		}  	} diff --git a/drivers/gpu/drm/nouveau/nv84_fence.c b/drivers/gpu/drm/nouveau/nv84_fence.c index 52b87ae83e7b..f0b322bec7df 100644 --- a/drivers/gpu/drm/nouveau/nv84_fence.c +++ b/drivers/gpu/drm/nouveau/nv84_fence.c @@ -107,8 +107,10 @@ nv84_fence_context_del(struct nouveau_channel *chan)  	struct nv84_fence_chan *fctx = chan->fence;  	nouveau_bo_wr32(priv->bo, chan->chid * 16 / 4, fctx->base.sequence); +	mutex_lock(&priv->mutex);  	nouveau_bo_vma_del(priv->bo, &fctx->vma_gart);  	nouveau_bo_vma_del(priv->bo, &fctx->vma); +	mutex_unlock(&priv->mutex);  	nouveau_fence_context_del(&fctx->base);  	chan->fence = NULL;  	nouveau_fence_context_free(&fctx->base); @@ -134,11 +136,13 @@ nv84_fence_context_new(struct nouveau_channel *chan)  	fctx->base.sync32 = nv84_fence_sync32;  	fctx->base.sequence = nv84_fence_read(chan); +	mutex_lock(&priv->mutex);  	ret = nouveau_bo_vma_add(priv->bo, cli->vm, &fctx->vma);  	if (ret == 0) {  		ret = nouveau_bo_vma_add(priv->bo_gart, cli->vm,  					&fctx->vma_gart);  	} +	mutex_unlock(&priv->mutex);  	if (ret)  		nv84_fence_context_del(chan); @@ -212,6 +216,8 @@ nv84_fence_create(struct nouveau_drm *drm)  	priv->base.context_base = dma_fence_context_alloc(priv->base.contexts);  	priv->base.uevent = true; +	mutex_init(&priv->mutex); +  	/* Use VRAM if there is any ; otherwise fallback to system memory */  	domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM :  			 /* diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c index 6f0436df0219..f8f2f16c22a2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c @@ -59,7 +59,7 @@ gt215_hda_eld(NV50_DISP_MTHD_V1)  			);  		}  		for (i = 0; i < size; i++) -			nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[0]); +			nvkm_wr32(device, 0x61c440 + soff, (i << 8) | args->v0.data[i]);  		for (; i < 0x60; i++)  			nvkm_wr32(device, 0x61c440 + soff, (i << 8));  		nvkm_mask(device, 0x61c448 + soff, 0x80000003, 0x80000003); diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c index 567466f93cd5..0db8efbf1c2e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c @@ -433,8 +433,6 @@ nv50_disp_dptmds_war(struct nvkm_device *device)  	case 0x94:  	case 0x96:  	case 0x98: -	case 0xaa: -	case 0xac:  		return true;  	default:  		break;  | 
