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: Take lock around probes for drm_fb_helper_hotplug_event
drm/i915: Revert i915.semaphore=1 default from 47ae63e0
vga_switcheroo: don't toggle-switch devices
drm/radeon/kms: add some evergreen/ni safe regs
drm/radeon/kms: fix extended lvds info parsing
drm/radeon/kms: fix tiling reg on fusion
This commit is contained in:
commit
7c21738efd
@ -1516,17 +1516,33 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_fb_helper_initial_config);
|
EXPORT_SYMBOL(drm_fb_helper_initial_config);
|
||||||
|
|
||||||
bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
|
/**
|
||||||
|
* drm_fb_helper_hotplug_event - respond to a hotplug notification by
|
||||||
|
* probing all the outputs attached to the fb.
|
||||||
|
* @fb_helper: the drm_fb_helper
|
||||||
|
*
|
||||||
|
* LOCKING:
|
||||||
|
* Called at runtime, must take mode config lock.
|
||||||
|
*
|
||||||
|
* Scan the connectors attached to the fb_helper and try to put together a
|
||||||
|
* setup after *notification of a change in output configuration.
|
||||||
|
*
|
||||||
|
* RETURNS:
|
||||||
|
* 0 on success and a non-zero error code otherwise.
|
||||||
|
*/
|
||||||
|
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
|
||||||
{
|
{
|
||||||
|
struct drm_device *dev = fb_helper->dev;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
u32 max_width, max_height, bpp_sel;
|
u32 max_width, max_height, bpp_sel;
|
||||||
bool bound = false, crtcs_bound = false;
|
bool bound = false, crtcs_bound = false;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
|
|
||||||
if (!fb_helper->fb)
|
if (!fb_helper->fb)
|
||||||
return false;
|
return 0;
|
||||||
|
|
||||||
list_for_each_entry(crtc, &fb_helper->dev->mode_config.crtc_list, head) {
|
mutex_lock(&dev->mode_config.mutex);
|
||||||
|
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||||
if (crtc->fb)
|
if (crtc->fb)
|
||||||
crtcs_bound = true;
|
crtcs_bound = true;
|
||||||
if (crtc->fb == fb_helper->fb)
|
if (crtc->fb == fb_helper->fb)
|
||||||
@ -1535,7 +1551,8 @@ bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
|
|||||||
|
|
||||||
if (!bound && crtcs_bound) {
|
if (!bound && crtcs_bound) {
|
||||||
fb_helper->delayed_hotplug = true;
|
fb_helper->delayed_hotplug = true;
|
||||||
return false;
|
mutex_unlock(&dev->mode_config.mutex);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
DRM_DEBUG_KMS("\n");
|
DRM_DEBUG_KMS("\n");
|
||||||
|
|
||||||
@ -1546,6 +1563,7 @@ bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
|
|||||||
count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
|
count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
|
||||||
max_height);
|
max_height);
|
||||||
drm_setup_crtcs(fb_helper);
|
drm_setup_crtcs(fb_helper);
|
||||||
|
mutex_unlock(&dev->mode_config.mutex);
|
||||||
|
|
||||||
return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
|
return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
|
||||||
}
|
}
|
||||||
|
@ -1780,6 +1780,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
|
|||||||
|
|
||||||
|
|
||||||
mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
|
mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
|
||||||
|
if (rdev->flags & RADEON_IS_IGP)
|
||||||
|
mc_arb_ramcfg = RREG32(FUS_MC_ARB_RAMCFG);
|
||||||
|
else
|
||||||
mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
|
mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
|
||||||
|
|
||||||
switch (rdev->config.evergreen.max_tile_pipes) {
|
switch (rdev->config.evergreen.max_tile_pipes) {
|
||||||
|
@ -200,6 +200,7 @@
|
|||||||
#define BURSTLENGTH_SHIFT 9
|
#define BURSTLENGTH_SHIFT 9
|
||||||
#define BURSTLENGTH_MASK 0x00000200
|
#define BURSTLENGTH_MASK 0x00000200
|
||||||
#define CHANSIZE_OVERRIDE (1 << 11)
|
#define CHANSIZE_OVERRIDE (1 << 11)
|
||||||
|
#define FUS_MC_ARB_RAMCFG 0x2768
|
||||||
#define MC_VM_AGP_TOP 0x2028
|
#define MC_VM_AGP_TOP 0x2028
|
||||||
#define MC_VM_AGP_BOT 0x202C
|
#define MC_VM_AGP_BOT 0x202C
|
||||||
#define MC_VM_AGP_BASE 0x2030
|
#define MC_VM_AGP_BASE 0x2030
|
||||||
|
@ -1574,7 +1574,15 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
|
|||||||
ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;
|
ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;
|
||||||
ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;
|
ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;
|
||||||
bool bad_record = false;
|
bool bad_record = false;
|
||||||
u8 *record = (u8 *)(mode_info->atom_context->bios +
|
u8 *record;
|
||||||
|
|
||||||
|
if ((frev == 1) && (crev < 2))
|
||||||
|
/* absolute */
|
||||||
|
record = (u8 *)(mode_info->atom_context->bios +
|
||||||
|
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
|
||||||
|
else
|
||||||
|
/* relative */
|
||||||
|
record = (u8 *)(mode_info->atom_context->bios +
|
||||||
data_offset +
|
data_offset +
|
||||||
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
|
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
|
||||||
while (*record != ATOM_RECORD_END_TYPE) {
|
while (*record != ATOM_RECORD_END_TYPE) {
|
||||||
|
@ -33,6 +33,7 @@ cayman 0x9400
|
|||||||
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
||||||
0x00009100 SPI_CONFIG_CNTL
|
0x00009100 SPI_CONFIG_CNTL
|
||||||
0x0000913C SPI_CONFIG_CNTL_1
|
0x0000913C SPI_CONFIG_CNTL_1
|
||||||
|
0x00009508 TA_CNTL_AUX
|
||||||
0x00009830 DB_DEBUG
|
0x00009830 DB_DEBUG
|
||||||
0x00009834 DB_DEBUG2
|
0x00009834 DB_DEBUG2
|
||||||
0x00009838 DB_DEBUG3
|
0x00009838 DB_DEBUG3
|
||||||
|
@ -46,6 +46,7 @@ evergreen 0x9400
|
|||||||
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
||||||
0x00009100 SPI_CONFIG_CNTL
|
0x00009100 SPI_CONFIG_CNTL
|
||||||
0x0000913C SPI_CONFIG_CNTL_1
|
0x0000913C SPI_CONFIG_CNTL_1
|
||||||
|
0x00009508 TA_CNTL_AUX
|
||||||
0x00009700 VC_CNTL
|
0x00009700 VC_CNTL
|
||||||
0x00009714 VC_ENHANCE
|
0x00009714 VC_ENHANCE
|
||||||
0x00009830 DB_DEBUG
|
0x00009830 DB_DEBUG
|
||||||
|
@ -219,9 +219,6 @@ static int vga_switchto_stage1(struct vga_switcheroo_client *new_client)
|
|||||||
int i;
|
int i;
|
||||||
struct vga_switcheroo_client *active = NULL;
|
struct vga_switcheroo_client *active = NULL;
|
||||||
|
|
||||||
if (new_client->active == true)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
|
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
|
||||||
if (vgasr_priv.clients[i].active == true) {
|
if (vgasr_priv.clients[i].active == true) {
|
||||||
active = &vgasr_priv.clients[i];
|
active = &vgasr_priv.clients[i];
|
||||||
@ -372,6 +369,9 @@ vga_switcheroo_debugfs_write(struct file *filp, const char __user *ubuf,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (client->active == true)
|
||||||
|
goto out;
|
||||||
|
|
||||||
/* okay we want a switch - test if devices are willing to switch */
|
/* okay we want a switch - test if devices are willing to switch */
|
||||||
can_switch = true;
|
can_switch = true;
|
||||||
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
|
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
|
||||||
|
@ -127,7 +127,7 @@ void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch,
|
|||||||
|
|
||||||
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
|
int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info);
|
||||||
|
|
||||||
bool drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
|
int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper);
|
||||||
bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
|
bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
|
||||||
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
|
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
|
||||||
int drm_fb_helper_debug_enter(struct fb_info *info);
|
int drm_fb_helper_debug_enter(struct fb_info *info);
|
||||||
|
Loading…
Reference in New Issue
Block a user