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/radeon/kms: add pci id to acer travelmate quirk for 5730 drm/radeon: fix order of doing things in radeon_crtc_cursor_set drm: mm: fix debug output drm/radeon/kms: ATPX switcheroo fixes drm/nouveau: Fix a crash at card takedown for NV40 and older cards
This commit is contained in:
commit
fd98a5d780
7 changed files with 41 additions and 13 deletions
|
@ -431,7 +431,7 @@ EXPORT_SYMBOL(drm_mm_search_free_in_range);
|
|||
void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new)
|
||||
{
|
||||
list_replace(&old->node_list, &new->node_list);
|
||||
list_replace(&old->node_list, &new->hole_stack);
|
||||
list_replace(&old->hole_stack, &new->hole_stack);
|
||||
new->hole_follows = old->hole_follows;
|
||||
new->mm = old->mm;
|
||||
new->start = old->start;
|
||||
|
@ -699,8 +699,8 @@ int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm)
|
|||
entry->size);
|
||||
total_used += entry->size;
|
||||
if (entry->hole_follows) {
|
||||
hole_start = drm_mm_hole_node_start(&mm->head_node);
|
||||
hole_end = drm_mm_hole_node_end(&mm->head_node);
|
||||
hole_start = drm_mm_hole_node_start(entry);
|
||||
hole_end = drm_mm_hole_node_end(entry);
|
||||
hole_size = hole_end - hole_start;
|
||||
seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: free\n",
|
||||
hole_start, hole_end, hole_size);
|
||||
|
|
|
@ -152,8 +152,6 @@ nouveau_mem_vram_fini(struct drm_device *dev)
|
|||
{
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
|
||||
nouveau_bo_ref(NULL, &dev_priv->vga_ram);
|
||||
|
||||
ttm_bo_device_release(&dev_priv->ttm.bdev);
|
||||
|
||||
nouveau_ttm_global_release(dev_priv);
|
||||
|
|
|
@ -768,6 +768,11 @@ static void nouveau_card_takedown(struct drm_device *dev)
|
|||
engine->mc.takedown(dev);
|
||||
engine->display.late_takedown(dev);
|
||||
|
||||
if (dev_priv->vga_ram) {
|
||||
nouveau_bo_unpin(dev_priv->vga_ram);
|
||||
nouveau_bo_ref(NULL, &dev_priv->vga_ram);
|
||||
}
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_VRAM);
|
||||
ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_TT);
|
||||
|
|
|
@ -431,7 +431,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
|
|||
}
|
||||
}
|
||||
|
||||
/* Acer laptop (Acer TravelMate 5730G) has an HDMI port
|
||||
/* Acer laptop (Acer TravelMate 5730/5730G) has an HDMI port
|
||||
* on the laptop and a DVI port on the docking station and
|
||||
* both share the same encoder, hpd pin, and ddc line.
|
||||
* So while the bios table is technically correct,
|
||||
|
@ -440,7 +440,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
|
|||
* with different crtcs which isn't possible on the hardware
|
||||
* side and leaves no crtcs for LVDS or VGA.
|
||||
*/
|
||||
if ((dev->pdev->device == 0x95c4) &&
|
||||
if (((dev->pdev->device == 0x95c4) || (dev->pdev->device == 0x9591)) &&
|
||||
(dev->pdev->subsystem_vendor == 0x1025) &&
|
||||
(dev->pdev->subsystem_device == 0x013c)) {
|
||||
if ((*connector_type == DRM_MODE_CONNECTOR_DVII) &&
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
#define ATPX_VERSION 0
|
||||
#define ATPX_GPU_PWR 2
|
||||
#define ATPX_MUX_SELECT 3
|
||||
#define ATPX_I2C_MUX_SELECT 4
|
||||
#define ATPX_SWITCH_START 5
|
||||
#define ATPX_SWITCH_END 6
|
||||
|
||||
#define ATPX_INTEGRATED 0
|
||||
#define ATPX_DISCRETE 1
|
||||
|
@ -149,13 +152,35 @@ static int radeon_atpx_switch_mux(acpi_handle handle, int mux_id)
|
|||
return radeon_atpx_execute(handle, ATPX_MUX_SELECT, mux_id);
|
||||
}
|
||||
|
||||
static int radeon_atpx_switch_i2c_mux(acpi_handle handle, int mux_id)
|
||||
{
|
||||
return radeon_atpx_execute(handle, ATPX_I2C_MUX_SELECT, mux_id);
|
||||
}
|
||||
|
||||
static int radeon_atpx_switch_start(acpi_handle handle, int gpu_id)
|
||||
{
|
||||
return radeon_atpx_execute(handle, ATPX_SWITCH_START, gpu_id);
|
||||
}
|
||||
|
||||
static int radeon_atpx_switch_end(acpi_handle handle, int gpu_id)
|
||||
{
|
||||
return radeon_atpx_execute(handle, ATPX_SWITCH_END, gpu_id);
|
||||
}
|
||||
|
||||
static int radeon_atpx_switchto(enum vga_switcheroo_client_id id)
|
||||
{
|
||||
int gpu_id;
|
||||
|
||||
if (id == VGA_SWITCHEROO_IGD)
|
||||
radeon_atpx_switch_mux(radeon_atpx_priv.atpx_handle, 0);
|
||||
gpu_id = ATPX_INTEGRATED;
|
||||
else
|
||||
radeon_atpx_switch_mux(radeon_atpx_priv.atpx_handle, 1);
|
||||
gpu_id = ATPX_DISCRETE;
|
||||
|
||||
radeon_atpx_switch_start(radeon_atpx_priv.atpx_handle, gpu_id);
|
||||
radeon_atpx_switch_mux(radeon_atpx_priv.atpx_handle, gpu_id);
|
||||
radeon_atpx_switch_i2c_mux(radeon_atpx_priv.atpx_handle, gpu_id);
|
||||
radeon_atpx_switch_end(radeon_atpx_priv.atpx_handle, gpu_id);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -167,9 +167,6 @@ int radeon_crtc_cursor_set(struct drm_crtc *crtc,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
radeon_crtc->cursor_width = width;
|
||||
radeon_crtc->cursor_height = height;
|
||||
|
||||
obj = drm_gem_object_lookup(crtc->dev, file_priv, handle);
|
||||
if (!obj) {
|
||||
DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, radeon_crtc->crtc_id);
|
||||
|
@ -180,6 +177,9 @@ int radeon_crtc_cursor_set(struct drm_crtc *crtc,
|
|||
if (ret)
|
||||
goto fail;
|
||||
|
||||
radeon_crtc->cursor_width = width;
|
||||
radeon_crtc->cursor_height = height;
|
||||
|
||||
radeon_lock_cursor(crtc, true);
|
||||
/* XXX only 27 bit offset for legacy cursor */
|
||||
radeon_set_cursor(crtc, obj, gpu_addr);
|
||||
|
|
|
@ -86,7 +86,7 @@ static inline bool drm_mm_initialized(struct drm_mm *mm)
|
|||
}
|
||||
#define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \
|
||||
&(mm)->head_node.node_list, \
|
||||
node_list);
|
||||
node_list)
|
||||
#define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \
|
||||
for (entry = (mm)->prev_scanned_node, \
|
||||
next = entry ? list_entry(entry->node_list.next, \
|
||||
|
|
Loading…
Reference in a new issue