Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Mostly intel and radeon fixes, one tda998x, one kconfig dep fix and two more MAINTAINERS updates, All pretty run of the mill for this stage" * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm/radeon/atom: select the proper number of lanes in transmitter setup MAINTAINERS: add maintainer entry for TDA998x driver drm: fix bochs kconfig dependencies drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters drm/radeon/cik: fix typo in documentation drm/radeon: silence GCC warning on 32 bit drm/radeon: resume old pm late drm/radeon: TTM must be init with cpu-visible VRAM, v2 DRM: armada: fix use of kfifo_put() drm/i915: Reject >165MHz modes w/ DVI monitors drm/i915: fix assert_cursor on BDW drm/i915: vlv: reserve GT power context early drm/i915: fix pch pci device enumeration drm/i915: Resolving the memory region conflict for Stolen area drm/i915: use backlight legacy combination mode also for i915gm/i945gm MAINTAINERS: update AGP tree to point at drm tree
This commit is contained in:
commit
3bf7706b15
27 changed files with 70 additions and 65 deletions
|
@ -474,7 +474,7 @@ F: net/rxrpc/af_rxrpc.c
|
||||||
|
|
||||||
AGPGART DRIVER
|
AGPGART DRIVER
|
||||||
M: David Airlie <airlied@linux.ie>
|
M: David Airlie <airlied@linux.ie>
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
|
T: git git://people.freedesktop.org/~airlied/linux (part of drm maint)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/agp/
|
F: drivers/char/agp/
|
||||||
F: include/linux/agp*
|
F: include/linux/agp*
|
||||||
|
@ -6175,6 +6175,12 @@ S: Supported
|
||||||
F: drivers/block/nvme*
|
F: drivers/block/nvme*
|
||||||
F: include/linux/nvme.h
|
F: include/linux/nvme.h
|
||||||
|
|
||||||
|
NXP TDA998X DRM DRIVER
|
||||||
|
M: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||||
|
S: Supported
|
||||||
|
F: drivers/gpu/drm/i2c/tda998x_drv.c
|
||||||
|
F: include/drm/i2c/tda998x.h
|
||||||
|
|
||||||
OMAP SUPPORT
|
OMAP SUPPORT
|
||||||
M: Tony Lindgren <tony@atomide.com>
|
M: Tony Lindgren <tony@atomide.com>
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
|
|
|
@ -68,15 +68,7 @@ void __armada_drm_queue_unref_work(struct drm_device *dev,
|
||||||
{
|
{
|
||||||
struct armada_private *priv = dev->dev_private;
|
struct armada_private *priv = dev->dev_private;
|
||||||
|
|
||||||
/*
|
WARN_ON(!kfifo_put(&priv->fb_unref, fb));
|
||||||
* Yes, we really must jump through these hoops just to store a
|
|
||||||
* _pointer_ to something into the kfifo. This is utterly insane
|
|
||||||
* and idiotic, because it kfifo requires the _data_ pointed to by
|
|
||||||
* the pointer const, not the pointer itself. Not only that, but
|
|
||||||
* you have to pass a pointer _to_ the pointer you want stored.
|
|
||||||
*/
|
|
||||||
const struct drm_framebuffer *silly_api_alert = fb;
|
|
||||||
WARN_ON(!kfifo_put(&priv->fb_unref, &silly_api_alert));
|
|
||||||
schedule_work(&priv->fb_unref_work);
|
schedule_work(&priv->fb_unref_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ config DRM_BOCHS
|
||||||
tristate "DRM Support for bochs dispi vga interface (qemu stdvga)"
|
tristate "DRM Support for bochs dispi vga interface (qemu stdvga)"
|
||||||
depends on DRM && PCI
|
depends on DRM && PCI
|
||||||
select DRM_KMS_HELPER
|
select DRM_KMS_HELPER
|
||||||
|
select DRM_KMS_FB_HELPER
|
||||||
select FB_SYS_FILLRECT
|
select FB_SYS_FILLRECT
|
||||||
select FB_SYS_COPYAREA
|
select FB_SYS_COPYAREA
|
||||||
select FB_SYS_IMAGEBLIT
|
select FB_SYS_IMAGEBLIT
|
||||||
|
|
|
@ -403,7 +403,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
|
||||||
void intel_detect_pch(struct drm_device *dev)
|
void intel_detect_pch(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct pci_dev *pch;
|
struct pci_dev *pch = NULL;
|
||||||
|
|
||||||
/* In all current cases, num_pipes is equivalent to the PCH_NOP setting
|
/* In all current cases, num_pipes is equivalent to the PCH_NOP setting
|
||||||
* (which really amounts to a PCH but no South Display).
|
* (which really amounts to a PCH but no South Display).
|
||||||
|
@ -424,12 +424,9 @@ void intel_detect_pch(struct drm_device *dev)
|
||||||
* all the ISA bridge devices and check for the first match, instead
|
* all the ISA bridge devices and check for the first match, instead
|
||||||
* of only checking the first one.
|
* of only checking the first one.
|
||||||
*/
|
*/
|
||||||
pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
|
while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) {
|
||||||
while (pch) {
|
|
||||||
struct pci_dev *curr = pch;
|
|
||||||
if (pch->vendor == PCI_VENDOR_ID_INTEL) {
|
if (pch->vendor == PCI_VENDOR_ID_INTEL) {
|
||||||
unsigned short id;
|
unsigned short id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
|
||||||
id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
|
|
||||||
dev_priv->pch_id = id;
|
dev_priv->pch_id = id;
|
||||||
|
|
||||||
if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
|
if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
|
||||||
|
@ -461,18 +458,16 @@ void intel_detect_pch(struct drm_device *dev)
|
||||||
DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
|
DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
|
||||||
WARN_ON(!IS_HASWELL(dev));
|
WARN_ON(!IS_HASWELL(dev));
|
||||||
WARN_ON(!IS_ULT(dev));
|
WARN_ON(!IS_ULT(dev));
|
||||||
} else {
|
} else
|
||||||
goto check_next;
|
continue;
|
||||||
}
|
|
||||||
pci_dev_put(pch);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
check_next:
|
|
||||||
pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr);
|
|
||||||
pci_dev_put(curr);
|
|
||||||
}
|
}
|
||||||
if (!pch)
|
if (!pch)
|
||||||
DRM_DEBUG_KMS("No PCH found?\n");
|
DRM_DEBUG_KMS("No PCH found.\n");
|
||||||
|
|
||||||
|
pci_dev_put(pch);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool i915_semaphore_is_enabled(struct drm_device *dev)
|
bool i915_semaphore_is_enabled(struct drm_device *dev)
|
||||||
|
|
|
@ -82,9 +82,22 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
|
||||||
r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
|
r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
|
||||||
"Graphics Stolen Memory");
|
"Graphics Stolen Memory");
|
||||||
if (r == NULL) {
|
if (r == NULL) {
|
||||||
DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n",
|
/*
|
||||||
base, base + (uint32_t)dev_priv->gtt.stolen_size);
|
* One more attempt but this time requesting region from
|
||||||
base = 0;
|
* base + 1, as we have seen that this resolves the region
|
||||||
|
* conflict with the PCI Bus.
|
||||||
|
* This is a BIOS w/a: Some BIOS wrap stolen in the root
|
||||||
|
* PCI bus, but have an off-by-one error. Hence retry the
|
||||||
|
* reservation starting from 1 instead of 0.
|
||||||
|
*/
|
||||||
|
r = devm_request_mem_region(dev->dev, base + 1,
|
||||||
|
dev_priv->gtt.stolen_size - 1,
|
||||||
|
"Graphics Stolen Memory");
|
||||||
|
if (r == NULL) {
|
||||||
|
DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n",
|
||||||
|
base, base + (uint32_t)dev_priv->gtt.stolen_size);
|
||||||
|
base = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return base;
|
return base;
|
||||||
|
|
|
@ -1092,12 +1092,12 @@ static void assert_cursor(struct drm_i915_private *dev_priv,
|
||||||
struct drm_device *dev = dev_priv->dev;
|
struct drm_device *dev = dev_priv->dev;
|
||||||
bool cur_state;
|
bool cur_state;
|
||||||
|
|
||||||
if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
|
if (IS_845G(dev) || IS_I865G(dev))
|
||||||
cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE;
|
|
||||||
else if (IS_845G(dev) || IS_I865G(dev))
|
|
||||||
cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE;
|
cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE;
|
||||||
else
|
else if (INTEL_INFO(dev)->gen <= 6 || IS_VALLEYVIEW(dev))
|
||||||
cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
|
cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
|
||||||
|
else
|
||||||
|
cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE;
|
||||||
|
|
||||||
WARN(cur_state != state,
|
WARN(cur_state != state,
|
||||||
"cursor on pipe %c assertion failure (expected %s, current %s)\n",
|
"cursor on pipe %c assertion failure (expected %s, current %s)\n",
|
||||||
|
|
|
@ -845,7 +845,7 @@ static int hdmi_portclock_limit(struct intel_hdmi *hdmi)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = intel_hdmi_to_dev(hdmi);
|
struct drm_device *dev = intel_hdmi_to_dev(hdmi);
|
||||||
|
|
||||||
if (IS_G4X(dev))
|
if (!hdmi->has_hdmi_sink || IS_G4X(dev))
|
||||||
return 165000;
|
return 165000;
|
||||||
else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
|
else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
|
||||||
return 300000;
|
return 300000;
|
||||||
|
@ -899,8 +899,8 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
|
||||||
* outputs. We also need to check that the higher clock still fits
|
* outputs. We also need to check that the higher clock still fits
|
||||||
* within limits.
|
* within limits.
|
||||||
*/
|
*/
|
||||||
if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= portclock_limit
|
if (pipe_config->pipe_bpp > 8*3 && intel_hdmi->has_hdmi_sink &&
|
||||||
&& HAS_PCH_SPLIT(dev)) {
|
clock_12bpc <= portclock_limit && HAS_PCH_SPLIT(dev)) {
|
||||||
DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
|
DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
|
||||||
desired_bpp = 12*3;
|
desired_bpp = 12*3;
|
||||||
|
|
||||||
|
|
|
@ -698,7 +698,7 @@ static void i9xx_enable_backlight(struct intel_connector *connector)
|
||||||
freq /= 0xff;
|
freq /= 0xff;
|
||||||
|
|
||||||
ctl = freq << 17;
|
ctl = freq << 17;
|
||||||
if (IS_GEN2(dev) && panel->backlight.combination_mode)
|
if (panel->backlight.combination_mode)
|
||||||
ctl |= BLM_LEGACY_MODE;
|
ctl |= BLM_LEGACY_MODE;
|
||||||
if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm)
|
if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm)
|
||||||
ctl |= BLM_POLARITY_PNV;
|
ctl |= BLM_POLARITY_PNV;
|
||||||
|
@ -979,7 +979,7 @@ static int i9xx_setup_backlight(struct intel_connector *connector)
|
||||||
|
|
||||||
ctl = I915_READ(BLC_PWM_CTL);
|
ctl = I915_READ(BLC_PWM_CTL);
|
||||||
|
|
||||||
if (IS_GEN2(dev))
|
if (IS_GEN2(dev) || IS_I915GM(dev) || IS_I945GM(dev))
|
||||||
panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE;
|
panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE;
|
||||||
|
|
||||||
if (IS_PINEVIEW(dev))
|
if (IS_PINEVIEW(dev))
|
||||||
|
|
|
@ -3493,6 +3493,8 @@ static void valleyview_setup_pctx(struct drm_device *dev)
|
||||||
u32 pcbr;
|
u32 pcbr;
|
||||||
int pctx_size = 24*1024;
|
int pctx_size = 24*1024;
|
||||||
|
|
||||||
|
WARN_ON(!mutex_is_locked(&dev->struct_mutex));
|
||||||
|
|
||||||
pcbr = I915_READ(VLV_PCBR);
|
pcbr = I915_READ(VLV_PCBR);
|
||||||
if (pcbr) {
|
if (pcbr) {
|
||||||
/* BIOS set it up already, grab the pre-alloc'd space */
|
/* BIOS set it up already, grab the pre-alloc'd space */
|
||||||
|
@ -3542,8 +3544,6 @@ static void valleyview_enable_rps(struct drm_device *dev)
|
||||||
I915_WRITE(GTFIFODBG, gtfifodbg);
|
I915_WRITE(GTFIFODBG, gtfifodbg);
|
||||||
}
|
}
|
||||||
|
|
||||||
valleyview_setup_pctx(dev);
|
|
||||||
|
|
||||||
/* If VLV, Forcewake all wells, else re-direct to regular path */
|
/* If VLV, Forcewake all wells, else re-direct to regular path */
|
||||||
gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
|
gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
|
||||||
|
|
||||||
|
@ -4395,6 +4395,8 @@ void intel_enable_gt_powersave(struct drm_device *dev)
|
||||||
ironlake_enable_rc6(dev);
|
ironlake_enable_rc6(dev);
|
||||||
intel_init_emon(dev);
|
intel_init_emon(dev);
|
||||||
} else if (IS_GEN6(dev) || IS_GEN7(dev)) {
|
} else if (IS_GEN6(dev) || IS_GEN7(dev)) {
|
||||||
|
if (IS_VALLEYVIEW(dev))
|
||||||
|
valleyview_setup_pctx(dev);
|
||||||
/*
|
/*
|
||||||
* PCU communication is slow and this doesn't need to be
|
* PCU communication is slow and this doesn't need to be
|
||||||
* done at any specific time, so do this out of our fast path
|
* done at any specific time, so do this out of our fast path
|
||||||
|
|
|
@ -1314,7 +1314,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
|
||||||
}
|
}
|
||||||
if (is_dp)
|
if (is_dp)
|
||||||
args.v5.ucLaneNum = dp_lane_count;
|
args.v5.ucLaneNum = dp_lane_count;
|
||||||
else if (radeon_encoder->pixel_clock > 165000)
|
else if (radeon_dig_monitor_is_duallink(encoder, radeon_encoder->pixel_clock))
|
||||||
args.v5.ucLaneNum = 8;
|
args.v5.ucLaneNum = 8;
|
||||||
else
|
else
|
||||||
args.v5.ucLaneNum = 4;
|
args.v5.ucLaneNum = 4;
|
||||||
|
|
|
@ -3046,7 +3046,7 @@ static u32 cik_create_bitmask(u32 bit_width)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cik_select_se_sh - select which SE, SH to address
|
* cik_get_rb_disabled - computes the mask of disabled RBs
|
||||||
*
|
*
|
||||||
* @rdev: radeon_device pointer
|
* @rdev: radeon_device pointer
|
||||||
* @max_rb_num: max RBs (render backends) for the asic
|
* @max_rb_num: max RBs (render backends) for the asic
|
||||||
|
@ -7902,7 +7902,8 @@ int cik_resume(struct radeon_device *rdev)
|
||||||
/* init golden registers */
|
/* init golden registers */
|
||||||
cik_init_golden_registers(rdev);
|
cik_init_golden_registers(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = cik_startup(rdev);
|
r = cik_startup(rdev);
|
||||||
|
|
|
@ -5299,7 +5299,8 @@ int evergreen_resume(struct radeon_device *rdev)
|
||||||
/* init golden registers */
|
/* init golden registers */
|
||||||
evergreen_init_golden_registers(rdev);
|
evergreen_init_golden_registers(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = evergreen_startup(rdev);
|
r = evergreen_startup(rdev);
|
||||||
|
|
|
@ -57,7 +57,7 @@ typedef struct SMC_Evergreen_MCRegisters SMC_Evergreen_MCRegisters;
|
||||||
|
|
||||||
#define EVERGREEN_SMC_FIRMWARE_HEADER_LOCATION 0x100
|
#define EVERGREEN_SMC_FIRMWARE_HEADER_LOCATION 0x100
|
||||||
|
|
||||||
#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters 0x0
|
#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters 0x8
|
||||||
#define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable 0xC
|
#define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable 0xC
|
||||||
#define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20
|
#define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20
|
||||||
|
|
||||||
|
|
|
@ -2105,7 +2105,8 @@ int cayman_resume(struct radeon_device *rdev)
|
||||||
/* init golden registers */
|
/* init golden registers */
|
||||||
ni_init_golden_registers(rdev);
|
ni_init_golden_registers(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = cayman_startup(rdev);
|
r = cayman_startup(rdev);
|
||||||
|
|
|
@ -3942,8 +3942,6 @@ int r100_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = r100_startup(rdev);
|
r = r100_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -1430,8 +1430,6 @@ int r300_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = r300_startup(rdev);
|
r = r300_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -325,8 +325,6 @@ int r420_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = r420_startup(rdev);
|
r = r420_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -240,8 +240,6 @@ int r520_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = r520_startup(rdev);
|
r = r520_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -2968,7 +2968,8 @@ int r600_resume(struct radeon_device *rdev)
|
||||||
/* post card */
|
/* post card */
|
||||||
atom_asic_init(rdev->mode_info.atom_context);
|
atom_asic_init(rdev->mode_info.atom_context);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = r600_startup(rdev);
|
r = r600_startup(rdev);
|
||||||
|
|
|
@ -1521,13 +1521,16 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
|
||||||
if (r)
|
if (r)
|
||||||
DRM_ERROR("ib ring test failed (%d).\n", r);
|
DRM_ERROR("ib ring test failed (%d).\n", r);
|
||||||
|
|
||||||
if (rdev->pm.dpm_enabled) {
|
if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) {
|
||||||
/* do dpm late init */
|
/* do dpm late init */
|
||||||
r = radeon_pm_late_init(rdev);
|
r = radeon_pm_late_init(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
rdev->pm.dpm_enabled = false;
|
rdev->pm.dpm_enabled = false;
|
||||||
DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
|
DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
/* resume old pm late */
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
radeon_restore_bios_scratch_regs(rdev);
|
radeon_restore_bios_scratch_regs(rdev);
|
||||||
|
|
|
@ -714,6 +714,9 @@ int radeon_ttm_init(struct radeon_device *rdev)
|
||||||
DRM_ERROR("Failed initializing VRAM heap.\n");
|
DRM_ERROR("Failed initializing VRAM heap.\n");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
/* Change the size here instead of the init above so only lpfn is affected */
|
||||||
|
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
|
||||||
|
|
||||||
r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true,
|
r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true,
|
||||||
RADEON_GEM_DOMAIN_VRAM,
|
RADEON_GEM_DOMAIN_VRAM,
|
||||||
NULL, &rdev->stollen_vga_memory);
|
NULL, &rdev->stollen_vga_memory);
|
||||||
|
@ -935,7 +938,7 @@ static ssize_t radeon_ttm_gtt_read(struct file *f, char __user *buf,
|
||||||
while (size) {
|
while (size) {
|
||||||
loff_t p = *pos / PAGE_SIZE;
|
loff_t p = *pos / PAGE_SIZE;
|
||||||
unsigned off = *pos & ~PAGE_MASK;
|
unsigned off = *pos & ~PAGE_MASK;
|
||||||
ssize_t cur_size = min(size, PAGE_SIZE - off);
|
size_t cur_size = min_t(size_t, size, PAGE_SIZE - off);
|
||||||
struct page *page;
|
struct page *page;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
|
||||||
|
|
|
@ -474,8 +474,6 @@ int rs400_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = rs400_startup(rdev);
|
r = rs400_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -1048,8 +1048,6 @@ int rs600_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = rs600_startup(rdev);
|
r = rs600_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -756,8 +756,6 @@ int rs690_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = rs690_startup(rdev);
|
r = rs690_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -586,8 +586,6 @@ int rv515_resume(struct radeon_device *rdev)
|
||||||
/* Initialize surface registers */
|
/* Initialize surface registers */
|
||||||
radeon_surface_init(rdev);
|
radeon_surface_init(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = rv515_startup(rdev);
|
r = rv515_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
|
|
|
@ -1811,7 +1811,8 @@ int rv770_resume(struct radeon_device *rdev)
|
||||||
/* init golden registers */
|
/* init golden registers */
|
||||||
rv770_init_golden_registers(rdev);
|
rv770_init_golden_registers(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = rv770_startup(rdev);
|
r = rv770_startup(rdev);
|
||||||
|
|
|
@ -6618,7 +6618,8 @@ int si_resume(struct radeon_device *rdev)
|
||||||
/* init golden registers */
|
/* init golden registers */
|
||||||
si_init_golden_registers(rdev);
|
si_init_golden_registers(rdev);
|
||||||
|
|
||||||
radeon_pm_resume(rdev);
|
if (rdev->pm.pm_method == PM_METHOD_DPM)
|
||||||
|
radeon_pm_resume(rdev);
|
||||||
|
|
||||||
rdev->accel_working = true;
|
rdev->accel_working = true;
|
||||||
r = si_startup(rdev);
|
r = si_startup(rdev);
|
||||||
|
|
Loading…
Add table
Reference in a new issue