Merge remote branch 'korg/drm-radeon-next' into drm-linus

* korg/drm-radeon-next:
drm/radeon/kms: rs600: use correct mask for SW interrupt
gpu/drm/radeon/radeon_irq.c: move a dereference below a NULL test
drm/radeon/radeon_device.c: move a dereference below a NULL test
drm/radeon/radeon_fence.c: move a dereference below the NULL test
drm/radeon/radeon_connectors.c: add a NULL test before dereference
drm/radeon/kms: fix memory leak
drm/radeon/kms: add missing breaks in i2c and ss lookups
drm/radeon/kms: add primary dac adj values table
drm/radeon/kms: fallback to default connector table

+63 -24
+2
drivers/gpu/drm/radeon/radeon_atombios.c
··· 114 114 i2c.i2c_id = gpio->sucI2cId.ucAccess; 115 115 116 116 i2c.valid = true; 117 + break; 117 118 } 118 119 } 119 120 ··· 1027 1026 ss->delay = ss_info->asSS_Info[i].ucSS_Delay; 1028 1027 ss->range = ss_info->asSS_Info[i].ucSS_Range; 1029 1028 ss->refdiv = ss_info->asSS_Info[i].ucRecommendedRef_Div; 1029 + break; 1030 1030 } 1031 1031 } 1032 1032 }
+41 -9
drivers/gpu/drm/radeon/radeon_combios.c
··· 595 595 return false; 596 596 } 597 597 598 + static const uint32_t default_primarydac_adj[CHIP_LAST] = { 599 + 0x00000808, /* r100 */ 600 + 0x00000808, /* rv100 */ 601 + 0x00000808, /* rs100 */ 602 + 0x00000808, /* rv200 */ 603 + 0x00000808, /* rs200 */ 604 + 0x00000808, /* r200 */ 605 + 0x00000808, /* rv250 */ 606 + 0x00000000, /* rs300 */ 607 + 0x00000808, /* rv280 */ 608 + 0x00000808, /* r300 */ 609 + 0x00000808, /* r350 */ 610 + 0x00000808, /* rv350 */ 611 + 0x00000808, /* rv380 */ 612 + 0x00000808, /* r420 */ 613 + 0x00000808, /* r423 */ 614 + 0x00000808, /* rv410 */ 615 + 0x00000000, /* rs400 */ 616 + 0x00000000, /* rs480 */ 617 + }; 618 + 619 + static void radeon_legacy_get_primary_dac_info_from_table(struct radeon_device *rdev, 620 + struct radeon_encoder_primary_dac *p_dac) 621 + { 622 + p_dac->ps2_pdac_adj = default_primarydac_adj[rdev->family]; 623 + return; 624 + } 625 + 598 626 struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct 599 627 radeon_encoder 600 628 *encoder) ··· 632 604 uint16_t dac_info; 633 605 uint8_t rev, bg, dac; 634 606 struct radeon_encoder_primary_dac *p_dac = NULL; 607 + int found = 0; 608 + 609 + p_dac = kzalloc(sizeof(struct radeon_encoder_primary_dac), 610 + GFP_KERNEL); 611 + 612 + if (!p_dac) 613 + return NULL; 635 614 636 615 if (rdev->bios == NULL) 637 - return NULL; 616 + goto out; 638 617 639 618 /* check CRT table */ 640 619 dac_info = combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE); 641 620 if (dac_info) { 642 - p_dac = 643 - kzalloc(sizeof(struct radeon_encoder_primary_dac), 644 - GFP_KERNEL); 645 - 646 - if (!p_dac) 647 - return NULL; 648 - 649 621 rev = RBIOS8(dac_info) & 0x3; 650 622 if (rev < 2) { 651 623 bg = RBIOS8(dac_info + 0x2) & 0xf; ··· 656 628 dac = RBIOS8(dac_info + 0x3) & 0xf; 657 629 p_dac->ps2_pdac_adj = (bg << 8) | (dac); 658 630 } 659 - 631 + found = 1; 660 632 } 633 + 634 + out: 635 + if (!found) /* fallback to defaults */ 636 + radeon_legacy_get_primary_dac_info_from_table(rdev, p_dac); 661 637 662 638 return p_dac; 663 639 }
+1 -1
drivers/gpu/drm/radeon/radeon_connectors.c
··· 615 615 ret = connector_status_connected; 616 616 } 617 617 } else { 618 - if (radeon_connector->dac_load_detect) { 618 + if (radeon_connector->dac_load_detect && encoder) { 619 619 encoder_funcs = encoder->helper_private; 620 620 ret = encoder_funcs->detect(encoder, connector); 621 621 }
+1
drivers/gpu/drm/radeon/radeon_cp.c
··· 2145 2145 &master_priv->sarea); 2146 2146 if (ret) { 2147 2147 DRM_ERROR("SAREA setup failed\n"); 2148 + kfree(master_priv); 2148 2149 return ret; 2149 2150 } 2150 2151 master_priv->sarea_priv = master_priv->sarea->handle + sizeof(struct drm_sarea);
+4 -2
drivers/gpu/drm/radeon/radeon_device.c
··· 733 733 */ 734 734 int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) 735 735 { 736 - struct radeon_device *rdev = dev->dev_private; 736 + struct radeon_device *rdev; 737 737 struct drm_crtc *crtc; 738 738 int r; 739 739 740 - if (dev == NULL || rdev == NULL) { 740 + if (dev == NULL || dev->dev_private == NULL) { 741 741 return -ENODEV; 742 742 } 743 743 if (state.event == PM_EVENT_PRETHAW) { 744 744 return 0; 745 745 } 746 + rdev = dev->dev_private; 747 + 746 748 /* unpin the front buffers */ 747 749 list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 748 750 struct radeon_framebuffer *rfb = to_radeon_framebuffer(crtc->fb);
+4 -1
drivers/gpu/drm/radeon/radeon_display.c
··· 329 329 ret = radeon_get_atom_connector_info_from_object_table(dev); 330 330 else 331 331 ret = radeon_get_atom_connector_info_from_supported_devices_table(dev); 332 - } else 332 + } else { 333 333 ret = radeon_get_legacy_connector_info_from_bios(dev); 334 + if (ret == false) 335 + ret = radeon_get_legacy_connector_info_from_table(dev); 336 + } 334 337 } else { 335 338 if (!ASIC_IS_AVIVO(rdev)) 336 339 ret = radeon_get_legacy_connector_info_from_table(dev);
+4 -5
drivers/gpu/drm/radeon/radeon_fence.c
··· 140 140 141 141 bool radeon_fence_signaled(struct radeon_fence *fence) 142 142 { 143 - struct radeon_device *rdev = fence->rdev; 144 143 unsigned long irq_flags; 145 144 bool signaled = false; 146 145 147 - if (rdev->gpu_lockup) { 146 + if (!fence) 148 147 return true; 149 - } 150 - if (fence == NULL) { 148 + 149 + if (fence->rdev->gpu_lockup) 151 150 return true; 152 - } 151 + 153 152 write_lock_irqsave(&fence->rdev->fence_drv.lock, irq_flags); 154 153 signaled = fence->signaled; 155 154 /* if we are shuting down report all fence as signaled */
+5 -5
drivers/gpu/drm/radeon/radeon_irq.c
··· 289 289 drm_radeon_irq_emit_t *emit = data; 290 290 int result; 291 291 292 - if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) 293 - return -EINVAL; 294 - 295 - LOCK_TEST_WITH_RETURN(dev, file_priv); 296 - 297 292 if (!dev_priv) { 298 293 DRM_ERROR("called with no initialization\n"); 299 294 return -EINVAL; 300 295 } 296 + 297 + if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600) 298 + return -EINVAL; 299 + 300 + LOCK_TEST_WITH_RETURN(dev, file_priv); 301 301 302 302 result = radeon_emit_irq(dev); 303 303
+1 -1
drivers/gpu/drm/radeon/rs600.c
··· 396 396 } 397 397 while (status || r500_disp_int) { 398 398 /* SW interrupt */ 399 - if (G_000040_SW_INT_EN(status)) 399 + if (G_000044_SW_INT(status)) 400 400 radeon_fence_process(rdev); 401 401 /* Vertical blank interrupts */ 402 402 if (G_007EDC_LB_D1_VBLANK_INTERRUPT(r500_disp_int))