Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6

* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
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/kms: Fix &&/|| confusion in drm_fb_helper_connector_parse_command_line()
drm/edid: Fix CVT width/height decode
drm/edid: Skip empty CVT codepoints
drm: remove address mask param for drm_pci_alloc()
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

+87 -44
+8 -2
drivers/gpu/drm/ati_pcigart.c
··· 39 39 struct drm_ati_pcigart_info *gart_info) 40 40 { 41 41 gart_info->table_handle = drm_pci_alloc(dev, gart_info->table_size, 42 - PAGE_SIZE, 43 - gart_info->table_mask); 42 + PAGE_SIZE); 44 43 if (gart_info->table_handle == NULL) 45 44 return -ENOMEM; 46 45 ··· 110 111 111 112 if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) { 112 113 DRM_DEBUG("PCI: no table in VRAM: using normal RAM\n"); 114 + 115 + if (pci_set_dma_mask(dev->pdev, gart_info->table_mask)) { 116 + DRM_ERROR("fail to set dma mask to 0x%Lx\n", 117 + gart_info->table_mask); 118 + ret = 1; 119 + goto done; 120 + } 113 121 114 122 ret = drm_ati_alloc_pcigart_table(dev, gart_info); 115 123 if (ret) {
+2 -2
drivers/gpu/drm/drm_bufs.c
··· 326 326 * As we're limiting the address to 2^32-1 (or less), 327 327 * casting it down to 32 bits is no problem, but we 328 328 * need to point to a 64bit variable first. */ 329 - dmah = drm_pci_alloc(dev, map->size, map->size, 0xffffffffUL); 329 + dmah = drm_pci_alloc(dev, map->size, map->size); 330 330 if (!dmah) { 331 331 kfree(map); 332 332 return -ENOMEM; ··· 885 885 886 886 while (entry->buf_count < count) { 887 887 888 - dmah = drm_pci_alloc(dev, PAGE_SIZE << page_order, 0x1000, 0xfffffffful); 888 + dmah = drm_pci_alloc(dev, PAGE_SIZE << page_order, 0x1000); 889 889 890 890 if (!dmah) { 891 891 /* Set count correctly so we free the proper amount. */
+9 -5
drivers/gpu/drm/drm_edid.c
··· 911 911 struct drm_device *dev = connector->dev; 912 912 struct cvt_timing *cvt; 913 913 const int rates[] = { 60, 85, 75, 60, 50 }; 914 + const u8 empty[3] = { 0, 0, 0 }; 914 915 915 916 for (i = 0; i < 4; i++) { 916 917 int uninitialized_var(width), height; 917 918 cvt = &(timing->data.other_data.data.cvt[i]); 918 919 919 - height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 8) + 1) * 2; 920 - switch (cvt->code[1] & 0xc0) { 920 + if (!memcmp(cvt->code, empty, 3)) 921 + continue; 922 + 923 + height = (cvt->code[0] + ((cvt->code[1] & 0xf0) << 4) + 1) * 2; 924 + switch (cvt->code[1] & 0x0c) { 921 925 case 0x00: 922 926 width = height * 4 / 3; 923 927 break; 924 - case 0x40: 928 + case 0x04: 925 929 width = height * 16 / 9; 926 930 break; 927 - case 0x80: 931 + case 0x08: 928 932 width = height * 16 / 10; 929 933 break; 930 - case 0xc0: 934 + case 0x0c: 931 935 width = height * 15 / 9; 932 936 break; 933 937 }
+1 -1
drivers/gpu/drm/drm_fb_helper.c
··· 156 156 force = DRM_FORCE_ON; 157 157 break; 158 158 case 'D': 159 - if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) || 159 + if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) && 160 160 (connector->connector_type != DRM_MODE_CONNECTOR_HDMIB)) 161 161 force = DRM_FORCE_ON; 162 162 else
+1 -7
drivers/gpu/drm/drm_pci.c
··· 47 47 /** 48 48 * \brief Allocate a PCI consistent memory block, for DMA. 49 49 */ 50 - drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t align, 51 - dma_addr_t maxaddr) 50 + drm_dma_handle_t *drm_pci_alloc(struct drm_device * dev, size_t size, size_t align) 52 51 { 53 52 drm_dma_handle_t *dmah; 54 53 #if 1 ··· 61 62 */ 62 63 if (align > size) 63 64 return NULL; 64 - 65 - if (pci_set_dma_mask(dev->pdev, maxaddr) != 0) { 66 - DRM_ERROR("Setting pci dma mask failed\n"); 67 - return NULL; 68 - } 69 65 70 66 dmah = kmalloc(sizeof(drm_dma_handle_t), GFP_KERNEL); 71 67 if (!dmah)
+1 -1
drivers/gpu/drm/i915/i915_dma.c
··· 123 123 drm_i915_private_t *dev_priv = dev->dev_private; 124 124 /* Program Hardware Status Page */ 125 125 dev_priv->status_page_dmah = 126 - drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff); 126 + drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE); 127 127 128 128 if (!dev_priv->status_page_dmah) { 129 129 DRM_ERROR("Can not allocate hardware status page\n");
+1 -1
drivers/gpu/drm/i915/i915_gem.c
··· 4839 4839 4840 4840 phys_obj->id = id; 4841 4841 4842 - phys_obj->handle = drm_pci_alloc(dev, size, 0, 0xffffffff); 4842 + phys_obj->handle = drm_pci_alloc(dev, size, 0); 4843 4843 if (!phys_obj->handle) { 4844 4844 ret = -ENOMEM; 4845 4845 goto kfree_obj;
+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))
+1 -1
include/drm/drmP.h
··· 1408 1408 struct drm_ati_pcigart_info * gart_info); 1409 1409 1410 1410 extern drm_dma_handle_t *drm_pci_alloc(struct drm_device *dev, size_t size, 1411 - size_t align, dma_addr_t maxaddr); 1411 + size_t align); 1412 1412 extern void __drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1413 1413 extern void drm_pci_free(struct drm_device *dev, drm_dma_handle_t * dmah); 1414 1414