Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm: fix "persistant" typo
drm/radeon/kms: add some new ontario pci ids
drm/radeon/kms: pageflipping cleanup for avivo+
drm/radeon/kms: Add support for tv-out dongle on G5 9600
drm: export drm_find_cea_extension to drivers
drm/radeon/kms: add some sanity checks to obj info record parsingi (v2)
drm/i915: Reset GMBUS controller after NAK
drm/i915: Busy-spin wait_for condition in atomic contexts
drm/i915/lvds: Always return connected in the absence of better information

+94 -67
+2 -1
drivers/gpu/drm/drm_edid.c
··· 1297 1297 /** 1298 1298 * Search EDID for CEA extension block. 1299 1299 */ 1300 - static u8 *drm_find_cea_extension(struct edid *edid) 1300 + u8 *drm_find_cea_extension(struct edid *edid) 1301 1301 { 1302 1302 u8 *edid_ext = NULL; 1303 1303 int i; ··· 1318 1318 1319 1319 return edid_ext; 1320 1320 } 1321 + EXPORT_SYMBOL(drm_find_cea_extension); 1321 1322 1322 1323 /** 1323 1324 * drm_detect_hdmi_monitor - detect whether monitor is hdmi.
+1 -1
drivers/gpu/drm/i915/intel_drv.h
··· 39 39 ret__ = -ETIMEDOUT; \ 40 40 break; \ 41 41 } \ 42 - if (W && !in_dbg_master()) msleep(W); \ 42 + if (W && !(in_atomic() || in_dbg_master())) msleep(W); \ 43 43 } \ 44 44 ret__; \ 45 45 })
+21 -4
drivers/gpu/drm/i915/intel_i2c.c
··· 259 259 if (wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_RDY), 50)) 260 260 goto timeout; 261 261 if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER) 262 - return 0; 262 + goto clear_err; 263 263 264 264 val = I915_READ(GMBUS3 + reg_offset); 265 265 do { ··· 287 287 if (wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_RDY), 50)) 288 288 goto timeout; 289 289 if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER) 290 - return 0; 290 + goto clear_err; 291 291 292 292 val = loop = 0; 293 293 do { ··· 302 302 if (i + 1 < num && wait_for(I915_READ(GMBUS2 + reg_offset) & (GMBUS_SATOER | GMBUS_HW_WAIT_PHASE), 50)) 303 303 goto timeout; 304 304 if (I915_READ(GMBUS2 + reg_offset) & GMBUS_SATOER) 305 - return 0; 305 + goto clear_err; 306 306 } 307 307 308 - return num; 308 + goto done; 309 + 310 + clear_err: 311 + /* Toggle the Software Clear Interrupt bit. This has the effect 312 + * of resetting the GMBUS controller and so clearing the 313 + * BUS_ERROR raised by the slave's NAK. 314 + */ 315 + I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT); 316 + I915_WRITE(GMBUS1 + reg_offset, 0); 317 + 318 + done: 319 + /* Mark the GMBUS interface as disabled. We will re-enable it at the 320 + * start of the next xfer, till then let it sleep. 321 + */ 322 + I915_WRITE(GMBUS0 + reg_offset, 0); 323 + return i; 309 324 310 325 timeout: 311 326 DRM_INFO("GMBUS timed out, falling back to bit banging on pin %d [%s]\n", 312 327 bus->reg0 & 0xff, bus->adapter.name); 328 + I915_WRITE(GMBUS0 + reg_offset, 0); 329 + 313 330 /* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */ 314 331 bus->force_bit = intel_gpio_create(dev_priv, bus->reg0 & 0xff); 315 332 if (!bus->force_bit)
+2 -8
drivers/gpu/drm/i915/intel_lvds.c
··· 473 473 intel_lvds_detect(struct drm_connector *connector, bool force) 474 474 { 475 475 struct drm_device *dev = connector->dev; 476 - enum drm_connector_status status = connector_status_connected; 476 + enum drm_connector_status status; 477 477 478 478 status = intel_panel_detect(dev); 479 479 if (status != connector_status_unknown) 480 480 return status; 481 481 482 - /* ACPI lid methods were generally unreliable in this generation, so 483 - * don't even bother. 484 - */ 485 - if (IS_GEN2(dev) || IS_GEN3(dev)) 486 - return connector_status_connected; 487 - 488 - return status; 482 + return connector_status_connected; 489 483 } 490 484 491 485 /**
+1 -1
drivers/gpu/drm/nouveau/nouveau_gem.c
··· 97 97 return -ENOMEM; 98 98 } 99 99 100 - nvbo->bo.persistant_swap_storage = nvbo->gem->filp; 100 + nvbo->bo.persistent_swap_storage = nvbo->gem->filp; 101 101 nvbo->gem->driver_private = nvbo; 102 102 return 0; 103 103 }
+20
drivers/gpu/drm/radeon/atombios_crtc.c
··· 1009 1009 uint64_t fb_location; 1010 1010 uint32_t fb_format, fb_pitch_pixels, tiling_flags; 1011 1011 u32 fb_swap = EVERGREEN_GRPH_ENDIAN_SWAP(EVERGREEN_GRPH_ENDIAN_NONE); 1012 + u32 tmp; 1012 1013 int r; 1013 1014 1014 1015 /* no fb bound */ ··· 1138 1137 WREG32(EVERGREEN_VIEWPORT_SIZE + radeon_crtc->crtc_offset, 1139 1138 (crtc->mode.hdisplay << 16) | crtc->mode.vdisplay); 1140 1139 1140 + /* pageflip setup */ 1141 + /* make sure flip is at vb rather than hb */ 1142 + tmp = RREG32(EVERGREEN_GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset); 1143 + tmp &= ~EVERGREEN_GRPH_SURFACE_UPDATE_H_RETRACE_EN; 1144 + WREG32(EVERGREEN_GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset, tmp); 1145 + 1146 + /* set pageflip to happen anywhere in vblank interval */ 1147 + WREG32(EVERGREEN_MASTER_UPDATE_MODE + radeon_crtc->crtc_offset, 0); 1148 + 1141 1149 if (!atomic && fb && fb != crtc->fb) { 1142 1150 radeon_fb = to_radeon_framebuffer(fb); 1143 1151 rbo = gem_to_radeon_bo(radeon_fb->obj); ··· 1177 1167 uint64_t fb_location; 1178 1168 uint32_t fb_format, fb_pitch_pixels, tiling_flags; 1179 1169 u32 fb_swap = R600_D1GRPH_SWAP_ENDIAN_NONE; 1170 + u32 tmp; 1180 1171 int r; 1181 1172 1182 1173 /* no fb bound */ ··· 1304 1293 (x << 16) | y); 1305 1294 WREG32(AVIVO_D1MODE_VIEWPORT_SIZE + radeon_crtc->crtc_offset, 1306 1295 (crtc->mode.hdisplay << 16) | crtc->mode.vdisplay); 1296 + 1297 + /* pageflip setup */ 1298 + /* make sure flip is at vb rather than hb */ 1299 + tmp = RREG32(AVIVO_D1GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset); 1300 + tmp &= ~AVIVO_D1GRPH_SURFACE_UPDATE_H_RETRACE_EN; 1301 + WREG32(AVIVO_D1GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset, tmp); 1302 + 1303 + /* set pageflip to happen anywhere in vblank interval */ 1304 + WREG32(AVIVO_D1MODE_MASTER_UPDATE_MODE + radeon_crtc->crtc_offset, 0); 1307 1305 1308 1306 if (!atomic && fb && fb != crtc->fb) { 1309 1307 radeon_fb = to_radeon_framebuffer(fb);
-11
drivers/gpu/drm/radeon/evergreen.c
··· 43 43 44 44 void evergreen_pre_page_flip(struct radeon_device *rdev, int crtc) 45 45 { 46 - struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc]; 47 - u32 tmp; 48 - 49 - /* make sure flip is at vb rather than hb */ 50 - tmp = RREG32(EVERGREEN_GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset); 51 - tmp &= ~EVERGREEN_GRPH_SURFACE_UPDATE_H_RETRACE_EN; 52 - WREG32(EVERGREEN_GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset, tmp); 53 - 54 - /* set pageflip to happen anywhere in vblank interval */ 55 - WREG32(EVERGREEN_MASTER_UPDATE_MODE + radeon_crtc->crtc_offset, 0); 56 - 57 46 /* enable the pflip int */ 58 47 radeon_irq_kms_pflip_irq_get(rdev, crtc); 59 48 }
+7 -6
drivers/gpu/drm/radeon/radeon_atombios.c
··· 675 675 ATOM_ENCODER_CAP_RECORD *cap_record; 676 676 u16 caps = 0; 677 677 678 - while (record->ucRecordType > 0 && 678 + while (record->ucRecordSize > 0 && 679 + record->ucRecordType > 0 && 679 680 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { 680 681 switch (record->ucRecordType) { 681 682 case ATOM_ENCODER_CAP_RECORD_TYPE: ··· 721 720 break; 722 721 } 723 722 724 - while (record->ucRecordType > 0 && 723 + while (record->ucRecordSize > 0 && 724 + record->ucRecordType > 0 && 725 725 record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { 726 726 switch (record->ucRecordType) { 727 727 case ATOM_I2C_RECORD_TYPE: ··· 784 782 ATOM_HPD_INT_RECORD *hpd_record; 785 783 ATOM_I2C_ID_CONFIG_ACCESS *i2c_config; 786 784 787 - while (record->ucRecordType > 0 788 - && record-> 789 - ucRecordType <= 790 - ATOM_MAX_OBJECT_RECORD_NUMBER) { 785 + while (record->ucRecordSize > 0 && 786 + record->ucRecordType > 0 && 787 + record->ucRecordType <= ATOM_MAX_OBJECT_RECORD_NUMBER) { 791 788 switch (record->ucRecordType) { 792 789 case ATOM_I2C_RECORD_TYPE: 793 790 i2c_record =
+13
drivers/gpu/drm/radeon/radeon_combios.c
··· 2079 2079 DRM_MODE_CONNECTOR_DVII, &ddc_i2c, 2080 2080 CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I, 2081 2081 &hpd); 2082 + /* TV - TV DAC */ 2083 + ddc_i2c.valid = false; 2084 + hpd.hpd = RADEON_HPD_NONE; 2085 + radeon_add_legacy_encoder(dev, 2086 + radeon_get_encoder_enum(dev, 2087 + ATOM_DEVICE_TV1_SUPPORT, 2088 + 2), 2089 + ATOM_DEVICE_TV1_SUPPORT); 2090 + radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT, 2091 + DRM_MODE_CONNECTOR_SVIDEO, 2092 + &ddc_i2c, 2093 + CONNECTOR_OBJECT_ID_SVIDEO, 2094 + &hpd); 2082 2095 break; 2083 2096 default: 2084 2097 DRM_INFO("Connector table: %d (invalid)\n",
-11
drivers/gpu/drm/radeon/rs600.c
··· 48 48 49 49 void rs600_pre_page_flip(struct radeon_device *rdev, int crtc) 50 50 { 51 - struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc]; 52 - u32 tmp; 53 - 54 - /* make sure flip is at vb rather than hb */ 55 - tmp = RREG32(AVIVO_D1GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset); 56 - tmp &= ~AVIVO_D1GRPH_SURFACE_UPDATE_H_RETRACE_EN; 57 - WREG32(AVIVO_D1GRPH_FLIP_CONTROL + radeon_crtc->crtc_offset, tmp); 58 - 59 - /* set pageflip to happen anywhere in vblank interval */ 60 - WREG32(AVIVO_D1MODE_MASTER_UPDATE_MODE + radeon_crtc->crtc_offset, 0); 61 - 62 51 /* enable the pflip int */ 63 52 radeon_irq_kms_pflip_irq_get(rdev, crtc); 64 53 }
+5 -5
drivers/gpu/drm/ttm/ttm_bo.c
··· 1168 1168 uint32_t page_alignment, 1169 1169 unsigned long buffer_start, 1170 1170 bool interruptible, 1171 - struct file *persistant_swap_storage, 1171 + struct file *persistent_swap_storage, 1172 1172 size_t acc_size, 1173 1173 void (*destroy) (struct ttm_buffer_object *)) 1174 1174 { ··· 1211 1211 bo->priv_flags = 0; 1212 1212 bo->mem.placement = (TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED); 1213 1213 bo->seq_valid = false; 1214 - bo->persistant_swap_storage = persistant_swap_storage; 1214 + bo->persistent_swap_storage = persistent_swap_storage; 1215 1215 bo->acc_size = acc_size; 1216 1216 atomic_inc(&bo->glob->bo_count); 1217 1217 ··· 1260 1260 uint32_t page_alignment, 1261 1261 unsigned long buffer_start, 1262 1262 bool interruptible, 1263 - struct file *persistant_swap_storage, 1263 + struct file *persistent_swap_storage, 1264 1264 struct ttm_buffer_object **p_bo) 1265 1265 { 1266 1266 struct ttm_buffer_object *bo; ··· 1282 1282 1283 1283 ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, 1284 1284 buffer_start, interruptible, 1285 - persistant_swap_storage, acc_size, NULL); 1285 + persistent_swap_storage, acc_size, NULL); 1286 1286 if (likely(ret == 0)) 1287 1287 *p_bo = bo; 1288 1288 ··· 1863 1863 if (bo->bdev->driver->swap_notify) 1864 1864 bo->bdev->driver->swap_notify(bo); 1865 1865 1866 - ret = ttm_tt_swapout(bo->ttm, bo->persistant_swap_storage); 1866 + ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage); 1867 1867 out: 1868 1868 1869 1869 /**
+8 -8
drivers/gpu/drm/ttm/ttm_tt.c
··· 332 332 ttm_tt_free_page_directory(ttm); 333 333 } 334 334 335 - if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTANT_SWAP) && 335 + if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP) && 336 336 ttm->swap_storage) 337 337 fput(ttm->swap_storage); 338 338 ··· 503 503 page_cache_release(from_page); 504 504 } 505 505 506 - if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTANT_SWAP)) 506 + if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP)) 507 507 fput(swap_storage); 508 508 ttm->swap_storage = NULL; 509 509 ttm->page_flags &= ~TTM_PAGE_FLAG_SWAPPED; ··· 514 514 return ret; 515 515 } 516 516 517 - int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) 517 + int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage) 518 518 { 519 519 struct address_space *swap_space; 520 520 struct file *swap_storage; ··· 540 540 return 0; 541 541 } 542 542 543 - if (!persistant_swap_storage) { 543 + if (!persistent_swap_storage) { 544 544 swap_storage = shmem_file_setup("ttm swap", 545 545 ttm->num_pages << PAGE_SHIFT, 546 546 0); ··· 549 549 return PTR_ERR(swap_storage); 550 550 } 551 551 } else 552 - swap_storage = persistant_swap_storage; 552 + swap_storage = persistent_swap_storage; 553 553 554 554 swap_space = swap_storage->f_path.dentry->d_inode->i_mapping; 555 555 ··· 577 577 ttm_tt_free_alloced_pages(ttm); 578 578 ttm->swap_storage = swap_storage; 579 579 ttm->page_flags |= TTM_PAGE_FLAG_SWAPPED; 580 - if (persistant_swap_storage) 581 - ttm->page_flags |= TTM_PAGE_FLAG_PERSISTANT_SWAP; 580 + if (persistent_swap_storage) 581 + ttm->page_flags |= TTM_PAGE_FLAG_PERSISTENT_SWAP; 582 582 583 583 return 0; 584 584 out_err: 585 - if (!persistant_swap_storage) 585 + if (!persistent_swap_storage) 586 586 fput(swap_storage); 587 587 588 588 return ret;
+1
include/drm/drm_crtc.h
··· 778 778 void *data, struct drm_file *file_priv); 779 779 extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, 780 780 void *data, struct drm_file *file_priv); 781 + extern u8 *drm_find_cea_extension(struct edid *edid); 781 782 extern bool drm_detect_hdmi_monitor(struct edid *edid); 782 783 extern bool drm_detect_monitor_audio(struct edid *edid); 783 784 extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
+2
include/drm/drm_pciids.h
··· 472 472 {0x1002, 0x9803, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 473 473 {0x1002, 0x9804, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 474 474 {0x1002, 0x9805, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 475 + {0x1002, 0x9806, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 476 + {0x1002, 0x9807, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_PALM|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 475 477 {0, 0, 0} 476 478 477 479 #define r128_PCI_IDS \
+9 -9
include/drm/ttm/ttm_bo_api.h
··· 158 158 * the object is destroyed. 159 159 * @event_queue: Queue for processes waiting on buffer object status change. 160 160 * @mem: structure describing current placement. 161 - * @persistant_swap_storage: Usually the swap storage is deleted for buffers 161 + * @persistent_swap_storage: Usually the swap storage is deleted for buffers 162 162 * pinned in physical memory. If this behaviour is not desired, this member 163 - * holds a pointer to a persistant shmem object. 163 + * holds a pointer to a persistent shmem object. 164 164 * @ttm: TTM structure holding system pages. 165 165 * @evicted: Whether the object was evicted without user-space knowing. 166 166 * @cpu_writes: For synchronization. Number of cpu writers. ··· 221 221 */ 222 222 223 223 struct ttm_mem_reg mem; 224 - struct file *persistant_swap_storage; 224 + struct file *persistent_swap_storage; 225 225 struct ttm_tt *ttm; 226 226 bool evicted; 227 227 ··· 459 459 * user buffer object. 460 460 * @interruptible: If needing to sleep to wait for GPU resources, 461 461 * sleep interruptible. 462 - * @persistant_swap_storage: Usually the swap storage is deleted for buffers 462 + * @persistent_swap_storage: Usually the swap storage is deleted for buffers 463 463 * pinned in physical memory. If this behaviour is not desired, this member 464 - * holds a pointer to a persistant shmem object. Typically, this would 464 + * holds a pointer to a persistent shmem object. Typically, this would 465 465 * point to the shmem object backing a GEM object if TTM is used to back a 466 466 * GEM user interface. 467 467 * @acc_size: Accounted size for this object. ··· 490 490 uint32_t page_alignment, 491 491 unsigned long buffer_start, 492 492 bool interrubtible, 493 - struct file *persistant_swap_storage, 493 + struct file *persistent_swap_storage, 494 494 size_t acc_size, 495 495 void (*destroy) (struct ttm_buffer_object *)); 496 496 /** ··· 506 506 * user buffer object. 507 507 * @interruptible: If needing to sleep while waiting for GPU resources, 508 508 * sleep interruptible. 509 - * @persistant_swap_storage: Usually the swap storage is deleted for buffers 509 + * @persistent_swap_storage: Usually the swap storage is deleted for buffers 510 510 * pinned in physical memory. If this behaviour is not desired, this member 511 - * holds a pointer to a persistant shmem object. Typically, this would 511 + * holds a pointer to a persistent shmem object. Typically, this would 512 512 * point to the shmem object backing a GEM object if TTM is used to back a 513 513 * GEM user interface. 514 514 * @p_bo: On successful completion *p_bo points to the created object. ··· 528 528 uint32_t page_alignment, 529 529 unsigned long buffer_start, 530 530 bool interruptible, 531 - struct file *persistant_swap_storage, 531 + struct file *persistent_swap_storage, 532 532 struct ttm_buffer_object **p_bo); 533 533 534 534 /**
+2 -2
include/drm/ttm/ttm_bo_driver.h
··· 122 122 #define TTM_PAGE_FLAG_USER_DIRTY (1 << 2) 123 123 #define TTM_PAGE_FLAG_WRITE (1 << 3) 124 124 #define TTM_PAGE_FLAG_SWAPPED (1 << 4) 125 - #define TTM_PAGE_FLAG_PERSISTANT_SWAP (1 << 5) 125 + #define TTM_PAGE_FLAG_PERSISTENT_SWAP (1 << 5) 126 126 #define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6) 127 127 #define TTM_PAGE_FLAG_DMA32 (1 << 7) 128 128 ··· 714 714 */ 715 715 extern int ttm_tt_set_placement_caching(struct ttm_tt *ttm, uint32_t placement); 716 716 extern int ttm_tt_swapout(struct ttm_tt *ttm, 717 - struct file *persistant_swap_storage); 717 + struct file *persistent_swap_storage); 718 718 719 719 /* 720 720 * ttm_bo.c