mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-16 14:02:10 +00:00
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);
|
||||
|
||||
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;
|
||||
u32 max_width, max_height, bpp_sel;
|
||||
bool bound = false, crtcs_bound = false;
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
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)
|
||||
crtcs_bound = true;
|
||||
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) {
|
||||
fb_helper->delayed_hotplug = true;
|
||||
return false;
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
return 0;
|
||||
}
|
||||
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,
|
||||
max_height);
|
||||
drm_setup_crtcs(fb_helper);
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
|
||||
return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
|
||||
}
|
||||
|
@ -1780,7 +1780,10 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
|
||||
|
||||
|
||||
mc_shared_chmap = RREG32(MC_SHARED_CHMAP);
|
||||
mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
|
||||
if (rdev->flags & RADEON_IS_IGP)
|
||||
mc_arb_ramcfg = RREG32(FUS_MC_ARB_RAMCFG);
|
||||
else
|
||||
mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
|
||||
|
||||
switch (rdev->config.evergreen.max_tile_pipes) {
|
||||
case 1:
|
||||
|
@ -200,6 +200,7 @@
|
||||
#define BURSTLENGTH_SHIFT 9
|
||||
#define BURSTLENGTH_MASK 0x00000200
|
||||
#define CHANSIZE_OVERRIDE (1 << 11)
|
||||
#define FUS_MC_ARB_RAMCFG 0x2768
|
||||
#define MC_VM_AGP_TOP 0x2028
|
||||
#define MC_VM_AGP_BOT 0x202C
|
||||
#define MC_VM_AGP_BASE 0x2030
|
||||
|
@ -1574,9 +1574,17 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
|
||||
ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;
|
||||
ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;
|
||||
bool bad_record = false;
|
||||
u8 *record = (u8 *)(mode_info->atom_context->bios +
|
||||
data_offset +
|
||||
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
|
||||
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 +
|
||||
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
|
||||
while (*record != ATOM_RECORD_END_TYPE) {
|
||||
switch (*record) {
|
||||
case LCD_MODE_PATCH_RECORD_MODE_TYPE:
|
||||
|
@ -33,6 +33,7 @@ cayman 0x9400
|
||||
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
||||
0x00009100 SPI_CONFIG_CNTL
|
||||
0x0000913C SPI_CONFIG_CNTL_1
|
||||
0x00009508 TA_CNTL_AUX
|
||||
0x00009830 DB_DEBUG
|
||||
0x00009834 DB_DEBUG2
|
||||
0x00009838 DB_DEBUG3
|
||||
|
@ -46,6 +46,7 @@ evergreen 0x9400
|
||||
0x00008E48 SQ_EX_ALLOC_TABLE_SLOTS
|
||||
0x00009100 SPI_CONFIG_CNTL
|
||||
0x0000913C SPI_CONFIG_CNTL_1
|
||||
0x00009508 TA_CNTL_AUX
|
||||
0x00009700 VC_CNTL
|
||||
0x00009714 VC_ENHANCE
|
||||
0x00009830 DB_DEBUG
|
||||
|
@ -219,9 +219,6 @@ static int vga_switchto_stage1(struct vga_switcheroo_client *new_client)
|
||||
int i;
|
||||
struct vga_switcheroo_client *active = NULL;
|
||||
|
||||
if (new_client->active == true)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < VGA_SWITCHEROO_MAX_CLIENTS; i++) {
|
||||
if (vgasr_priv.clients[i].active == true) {
|
||||
active = &vgasr_priv.clients[i];
|
||||
@ -372,6 +369,9 @@ vga_switcheroo_debugfs_write(struct file *filp, const char __user *ubuf,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (client->active == true)
|
||||
goto out;
|
||||
|
||||
/* okay we want a switch - test if devices are willing to switch */
|
||||
can_switch = true;
|
||||
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);
|
||||
|
||||
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);
|
||||
int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
|
||||
int drm_fb_helper_debug_enter(struct fb_info *info);
|
||||
|
Loading…
Reference in New Issue
Block a user