diff options
| author | Francisco Jerez <currojerez@riseup.net> | 2011-02-02 19:53:18 -0500 |
|---|---|---|
| committer | Ben Skeggs <bskeggs@redhat.com> | 2011-02-16 18:39:49 -0500 |
| commit | 87886221471495c26d517a7b3ce7c7aa56cc854f (patch) | |
| tree | 84510b6306a18c994d65bc3e42d6cb62214e0933 /drivers/gpu | |
| parent | 812f219a0f8a74a558c35be7942a07232ba348a5 (diff) | |
drm/nv04-nv40: Fix NULL dereference when we fail to find an LVDS native mode.
Reported-by: Alex Buell <alex.buell@munted.org.uk>
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv04_dfp.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c index ef23550407b5..c82db37d9f41 100644 --- a/drivers/gpu/drm/nouveau/nv04_dfp.c +++ b/drivers/gpu/drm/nouveau/nv04_dfp.c | |||
| @@ -342,8 +342,8 @@ static void nv04_dfp_mode_set(struct drm_encoder *encoder, | |||
| 342 | if (nv_encoder->dcb->type == OUTPUT_LVDS) { | 342 | if (nv_encoder->dcb->type == OUTPUT_LVDS) { |
| 343 | bool duallink, dummy; | 343 | bool duallink, dummy; |
| 344 | 344 | ||
| 345 | nouveau_bios_parse_lvds_table(dev, nv_connector->native_mode-> | 345 | nouveau_bios_parse_lvds_table(dev, output_mode->clock, |
| 346 | clock, &duallink, &dummy); | 346 | &duallink, &dummy); |
| 347 | if (duallink) | 347 | if (duallink) |
| 348 | regp->fp_control |= (8 << 28); | 348 | regp->fp_control |= (8 << 28); |
| 349 | } else | 349 | } else |
| @@ -518,8 +518,6 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode) | |||
| 518 | return; | 518 | return; |
| 519 | 519 | ||
| 520 | if (nv_encoder->dcb->lvdsconf.use_power_scripts) { | 520 | if (nv_encoder->dcb->lvdsconf.use_power_scripts) { |
| 521 | struct nouveau_connector *nv_connector = nouveau_encoder_connector_get(nv_encoder); | ||
| 522 | |||
| 523 | /* when removing an output, crtc may not be set, but PANEL_OFF | 521 | /* when removing an output, crtc may not be set, but PANEL_OFF |
| 524 | * must still be run | 522 | * must still be run |
| 525 | */ | 523 | */ |
| @@ -527,12 +525,8 @@ static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode) | |||
| 527 | nv04_dfp_get_bound_head(dev, nv_encoder->dcb); | 525 | nv04_dfp_get_bound_head(dev, nv_encoder->dcb); |
| 528 | 526 | ||
| 529 | if (mode == DRM_MODE_DPMS_ON) { | 527 | if (mode == DRM_MODE_DPMS_ON) { |
| 530 | if (!nv_connector->native_mode) { | ||
| 531 | NV_ERROR(dev, "Not turning on LVDS without native mode\n"); | ||
| 532 | return; | ||
| 533 | } | ||
| 534 | call_lvds_script(dev, nv_encoder->dcb, head, | 528 | call_lvds_script(dev, nv_encoder->dcb, head, |
| 535 | LVDS_PANEL_ON, nv_connector->native_mode->clock); | 529 | LVDS_PANEL_ON, nv_encoder->mode.clock); |
| 536 | } else | 530 | } else |
| 537 | /* pxclk of 0 is fine for PANEL_OFF, and for a | 531 | /* pxclk of 0 is fine for PANEL_OFF, and for a |
| 538 | * disconnected LVDS encoder there is no native_mode | 532 | * disconnected LVDS encoder there is no native_mode |
