diff options
44 files changed, 5071 insertions, 1837 deletions
diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile index e12c97fd8db8..0583677e4581 100644 --- a/drivers/gpu/drm/nouveau/Makefile +++ b/drivers/gpu/drm/nouveau/Makefile | |||
| @@ -20,6 +20,8 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ | |||
| 20 | nv40_graph.o nv50_graph.o nvc0_graph.o \ | 20 | nv40_graph.o nv50_graph.o nvc0_graph.o \ |
| 21 | nv40_grctx.o nv50_grctx.o nvc0_grctx.o \ | 21 | nv40_grctx.o nv50_grctx.o nvc0_grctx.o \ |
| 22 | nv84_crypt.o \ | 22 | nv84_crypt.o \ |
| 23 | nva3_copy.o nvc0_copy.o \ | ||
| 24 | nv40_mpeg.o nv50_mpeg.o \ | ||
| 23 | nv04_instmem.o nv50_instmem.o nvc0_instmem.o \ | 25 | nv04_instmem.o nv50_instmem.o nvc0_instmem.o \ |
| 24 | nv50_evo.o nv50_crtc.o nv50_dac.o nv50_sor.o \ | 26 | nv50_evo.o nv50_crtc.o nv50_dac.o nv50_sor.o \ |
| 25 | nv50_cursor.o nv50_display.o \ | 27 | nv50_cursor.o nv50_display.o \ |
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c index 90aef64b76f2..729d5fd7c88d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.c +++ b/drivers/gpu/drm/nouveau/nouveau_bios.c | |||
| @@ -5049,11 +5049,7 @@ int get_pll_limits(struct drm_device *dev, uint32_t limit_match, struct pll_lims | |||
| 5049 | pll_lim->vco1.max_n = record[11]; | 5049 | pll_lim->vco1.max_n = record[11]; |
| 5050 | pll_lim->min_p = record[12]; | 5050 | pll_lim->min_p = record[12]; |
| 5051 | pll_lim->max_p = record[13]; | 5051 | pll_lim->max_p = record[13]; |
| 5052 | /* where did this go to?? */ | 5052 | pll_lim->refclk = ROM16(entry[9]) * 1000; |
| 5053 | if ((entry[0] & 0xf0) == 0x80) | ||
| 5054 | pll_lim->refclk = 27000; | ||
| 5055 | else | ||
| 5056 | pll_lim->refclk = 100000; | ||
| 5057 | } | 5053 | } |
| 5058 | 5054 | ||
| 5059 | /* | 5055 | /* |
| @@ -6035,6 +6031,7 @@ parse_dcb_connector_table(struct nvbios *bios) | |||
| 6035 | case DCB_CONNECTOR_DVI_I: | 6031 | case DCB_CONNECTOR_DVI_I: |
| 6036 | case DCB_CONNECTOR_DVI_D: | 6032 | case DCB_CONNECTOR_DVI_D: |
| 6037 | case DCB_CONNECTOR_LVDS: | 6033 | case DCB_CONNECTOR_LVDS: |
| 6034 | case DCB_CONNECTOR_LVDS_SPWG: | ||
| 6038 | case DCB_CONNECTOR_DP: | 6035 | case DCB_CONNECTOR_DP: |
| 6039 | case DCB_CONNECTOR_eDP: | 6036 | case DCB_CONNECTOR_eDP: |
| 6040 | case DCB_CONNECTOR_HDMI_0: | 6037 | case DCB_CONNECTOR_HDMI_0: |
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.h b/drivers/gpu/drm/nouveau/nouveau_bios.h index 8a54fa7edf5c..050c314119df 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bios.h +++ b/drivers/gpu/drm/nouveau/nouveau_bios.h | |||
| @@ -82,6 +82,7 @@ enum dcb_connector_type { | |||
| 82 | DCB_CONNECTOR_DVI_I = 0x30, | 82 | DCB_CONNECTOR_DVI_I = 0x30, |
| 83 | DCB_CONNECTOR_DVI_D = 0x31, | 83 | DCB_CONNECTOR_DVI_D = 0x31, |
| 84 | DCB_CONNECTOR_LVDS = 0x40, | 84 | DCB_CONNECTOR_LVDS = 0x40, |
| 85 | DCB_CONNECTOR_LVDS_SPWG = 0x41, | ||
| 85 | DCB_CONNECTOR_DP = 0x46, | 86 | DCB_CONNECTOR_DP = 0x46, |
| 86 | DCB_CONNECTOR_eDP = 0x47, | 87 | DCB_CONNECTOR_eDP = 0x47, |
| 87 | DCB_CONNECTOR_HDMI_0 = 0x60, | 88 | DCB_CONNECTOR_HDMI_0 = 0x60, |
diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c index 4cea35c57d15..a7583a8ddb01 100644 --- a/drivers/gpu/drm/nouveau/nouveau_channel.c +++ b/drivers/gpu/drm/nouveau/nouveau_channel.c | |||
| @@ -268,9 +268,8 @@ nouveau_channel_put_unlocked(struct nouveau_channel **pchan) | |||
| 268 | struct drm_device *dev = chan->dev; | 268 | struct drm_device *dev = chan->dev; |
| 269 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 269 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
| 270 | struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; | 270 | struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; |
| 271 | struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph; | ||
| 272 | struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt; | ||
| 273 | unsigned long flags; | 271 | unsigned long flags; |
| 272 | int i; | ||
| 274 | 273 | ||
| 275 | /* decrement the refcount, and we're done if there's still refs */ | 274 | /* decrement the refcount, and we're done if there's still refs */ |
| 276 | if (likely(!atomic_dec_and_test(&chan->users))) { | 275 | if (likely(!atomic_dec_and_test(&chan->users))) { |
| @@ -294,19 +293,12 @@ nouveau_channel_put_unlocked(struct nouveau_channel **pchan) | |||
| 294 | /* boot it off the hardware */ | 293 | /* boot it off the hardware */ |
| 295 | pfifo->reassign(dev, false); | 294 | pfifo->reassign(dev, false); |
| 296 | 295 | ||
| 297 | /* We want to give pgraph a chance to idle and get rid of all | ||
| 298 | * potential errors. We need to do this without the context | ||
| 299 | * switch lock held, otherwise the irq handler is unable to | ||
| 300 | * process them. | ||
| 301 | */ | ||
| 302 | if (pgraph->channel(dev) == chan) | ||
| 303 | nouveau_wait_for_idle(dev); | ||
| 304 | |||
| 305 | /* destroy the engine specific contexts */ | 296 | /* destroy the engine specific contexts */ |
| 306 | pfifo->destroy_context(chan); | 297 | pfifo->destroy_context(chan); |
| 307 | pgraph->destroy_context(chan); | 298 | for (i = 0; i < NVOBJ_ENGINE_NR; i++) { |
| 308 | if (pcrypt->destroy_context) | 299 | if (chan->engctx[i]) |
| 309 | pcrypt->destroy_context(chan); | 300 | dev_priv->eng[i]->context_del(chan, i); |
| 301 | } | ||
| 310 | 302 | ||
| 311 | pfifo->reassign(dev, true); | 303 | pfifo->reassign(dev, true); |
| 312 | 304 | ||
| @@ -414,7 +406,7 @@ nouveau_ioctl_fifo_alloc(struct drm_device *dev, void *data, | |||
| 414 | struct nouveau_channel *chan; | 406 | struct nouveau_channel *chan; |
| 415 | int ret; | 407 | int ret; |
| 416 | 408 | ||
| 417 | if (dev_priv->engine.graph.accel_blocked) | 409 | if (!dev_priv->eng[NVOBJ_ENGINE_GR]) |
| 418 | return -ENODEV; | 410 | return -ENODEV; |
| 419 | 411 | ||
| 420 | if (init->fb_ctxdma_handle == ~0 || init->tt_ctxdma_handle == ~0) | 412 | if (init->fb_ctxdma_handle == ~0 || init->tt_ctxdma_handle == ~0) |
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 7ae151109a66..1595d0b6e815 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c | |||
| @@ -442,7 +442,7 @@ nouveau_connector_set_property(struct drm_connector *connector, | |||
| 442 | } | 442 | } |
| 443 | 443 | ||
| 444 | /* LVDS always needs gpu scaling */ | 444 | /* LVDS always needs gpu scaling */ |
| 445 | if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS && | 445 | if (connector->connector_type == DR |
