mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	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 | ||||
| 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 | ||||
| F:	drivers/char/agp/ | ||||
| F:	include/linux/agp* | ||||
|  | @ -6175,6 +6175,12 @@ S:	Supported | |||
| F:	drivers/block/nvme* | ||||
| 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 | ||||
| M:	Tony Lindgren <tony@atomide.com> | ||||
| 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; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * 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)); | ||||
| 	WARN_ON(!kfifo_put(&priv->fb_unref, fb)); | ||||
| 	schedule_work(&priv->fb_unref_work); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ config DRM_BOCHS | |||
| 	tristate "DRM Support for bochs dispi vga interface (qemu stdvga)" | ||||
| 	depends on DRM && PCI | ||||
| 	select DRM_KMS_HELPER | ||||
| 	select DRM_KMS_FB_HELPER | ||||
| 	select FB_SYS_FILLRECT | ||||
| 	select FB_SYS_COPYAREA | ||||
| 	select FB_SYS_IMAGEBLIT | ||||
|  |  | |||
|  | @ -403,7 +403,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist); | |||
| void intel_detect_pch(struct drm_device *dev) | ||||
| { | ||||
| 	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
 | ||||
| 	 * (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 | ||||
| 	 * of only checking the first one. | ||||
| 	 */ | ||||
| 	pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL); | ||||
| 	while (pch) { | ||||
| 		struct pci_dev *curr = pch; | ||||
| 	while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) { | ||||
| 		if (pch->vendor == PCI_VENDOR_ID_INTEL) { | ||||
| 			unsigned short id; | ||||
| 			id = pch->device & INTEL_PCH_DEVICE_ID_MASK; | ||||
| 			unsigned short id = pch->device & INTEL_PCH_DEVICE_ID_MASK; | ||||
| 			dev_priv->pch_id = id; | ||||
| 
 | ||||
| 			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"); | ||||
| 				WARN_ON(!IS_HASWELL(dev)); | ||||
| 				WARN_ON(!IS_ULT(dev)); | ||||
| 			} else { | ||||
| 				goto check_next; | ||||
| 			} | ||||
| 			pci_dev_put(pch); | ||||
| 			} else | ||||
| 				continue; | ||||
| 
 | ||||
| 			break; | ||||
| 		} | ||||
| check_next: | ||||
| 		pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr); | ||||
| 		pci_dev_put(curr); | ||||
| 	} | ||||
| 	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) | ||||
|  |  | |||
|  | @ -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, | ||||
| 				    "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; | ||||
| 		/*
 | ||||
| 		 * One more attempt but this time requesting region from | ||||
| 		 * 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; | ||||
|  |  | |||
|  | @ -1092,12 +1092,12 @@ static void assert_cursor(struct drm_i915_private *dev_priv, | |||
| 	struct drm_device *dev = dev_priv->dev; | ||||
| 	bool cur_state; | ||||
| 
 | ||||
| 	if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) | ||||
| 		cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE; | ||||
| 	else if (IS_845G(dev) || IS_I865G(dev)) | ||||
| 	if (IS_845G(dev) || IS_I865G(dev)) | ||||
| 		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; | ||||
| 	else | ||||
| 		cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE; | ||||
| 
 | ||||
| 	WARN(cur_state != state, | ||||
| 	     "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); | ||||
| 
 | ||||
| 	if (IS_G4X(dev)) | ||||
| 	if (!hdmi->has_hdmi_sink || IS_G4X(dev)) | ||||
| 		return 165000; | ||||
| 	else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8) | ||||
| 		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 | ||||
| 	 * within limits. | ||||
| 	 */ | ||||
| 	if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= portclock_limit | ||||
| 	    && HAS_PCH_SPLIT(dev)) { | ||||
| 	if (pipe_config->pipe_bpp > 8*3 && intel_hdmi->has_hdmi_sink && | ||||
| 	    clock_12bpc <= portclock_limit && HAS_PCH_SPLIT(dev)) { | ||||
| 		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n"); | ||||
| 		desired_bpp = 12*3; | ||||
| 
 | ||||
|  |  | |||
|  | @ -698,7 +698,7 @@ static void i9xx_enable_backlight(struct intel_connector *connector) | |||
| 		freq /= 0xff; | ||||
| 
 | ||||
| 	ctl = freq << 17; | ||||
| 	if (IS_GEN2(dev) && panel->backlight.combination_mode) | ||||
| 	if (panel->backlight.combination_mode) | ||||
| 		ctl |= BLM_LEGACY_MODE; | ||||
| 	if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm) | ||||
| 		ctl |= BLM_POLARITY_PNV; | ||||
|  | @ -979,7 +979,7 @@ static int i9xx_setup_backlight(struct intel_connector *connector) | |||
| 
 | ||||
| 	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; | ||||
| 
 | ||||
| 	if (IS_PINEVIEW(dev)) | ||||
|  |  | |||
|  | @ -3493,6 +3493,8 @@ static void valleyview_setup_pctx(struct drm_device *dev) | |||
| 	u32 pcbr; | ||||
| 	int pctx_size = 24*1024; | ||||
| 
 | ||||
| 	WARN_ON(!mutex_is_locked(&dev->struct_mutex)); | ||||
| 
 | ||||
| 	pcbr = I915_READ(VLV_PCBR); | ||||
| 	if (pcbr) { | ||||
| 		/* 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); | ||||
| 	} | ||||
| 
 | ||||
| 	valleyview_setup_pctx(dev); | ||||
| 
 | ||||
| 	/* If VLV, Forcewake all wells, else re-direct to regular path */ | ||||
| 	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); | ||||
| 		intel_init_emon(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 | ||||
| 		 * 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) | ||||
| 				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; | ||||
| 			else | ||||
| 				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 | ||||
|  * @max_rb_num: max RBs (render backends) for the asic | ||||
|  | @ -7902,7 +7902,8 @@ int cik_resume(struct radeon_device *rdev) | |||
| 	/* init golden registers */ | ||||
| 	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; | ||||
| 	r = cik_startup(rdev); | ||||
|  |  | |||
|  | @ -5299,7 +5299,8 @@ int evergreen_resume(struct radeon_device *rdev) | |||
| 	/* init golden registers */ | ||||
| 	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; | ||||
| 	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_softRegisters   0x0 | ||||
| #define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters   0x8 | ||||
| #define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable      0xC | ||||
| #define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20 | ||||
| 
 | ||||
|  |  | |||
|  | @ -2105,7 +2105,8 @@ int cayman_resume(struct radeon_device *rdev) | |||
| 	/* init golden registers */ | ||||
| 	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; | ||||
| 	r = cayman_startup(rdev); | ||||
|  |  | |||
|  | @ -3942,8 +3942,6 @@ int r100_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = r100_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -1430,8 +1430,6 @@ int r300_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = r300_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -325,8 +325,6 @@ int r420_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = r420_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -240,8 +240,6 @@ int r520_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = r520_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -2968,7 +2968,8 @@ int r600_resume(struct radeon_device *rdev) | |||
| 	/* post card */ | ||||
| 	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; | ||||
| 	r = r600_startup(rdev); | ||||
|  |  | |||
|  | @ -1521,13 +1521,16 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon) | |||
| 	if (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 */ | ||||
| 		r = radeon_pm_late_init(rdev); | ||||
| 		if (r) { | ||||
| 			rdev->pm.dpm_enabled = false; | ||||
| 			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); | ||||
|  |  | |||
|  | @ -714,6 +714,9 @@ int radeon_ttm_init(struct radeon_device *rdev) | |||
| 		DRM_ERROR("Failed initializing VRAM heap.\n"); | ||||
| 		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, | ||||
| 			     RADEON_GEM_DOMAIN_VRAM, | ||||
| 			     NULL, &rdev->stollen_vga_memory); | ||||
|  | @ -935,7 +938,7 @@ static ssize_t radeon_ttm_gtt_read(struct file *f, char __user *buf, | |||
| 	while (size) { | ||||
| 		loff_t p = *pos / PAGE_SIZE; | ||||
| 		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; | ||||
| 		void *ptr; | ||||
| 
 | ||||
|  |  | |||
|  | @ -474,8 +474,6 @@ int rs400_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = rs400_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -1048,8 +1048,6 @@ int rs600_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = rs600_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -756,8 +756,6 @@ int rs690_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r = rs690_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -586,8 +586,6 @@ int rv515_resume(struct radeon_device *rdev) | |||
| 	/* Initialize surface registers */ | ||||
| 	radeon_surface_init(rdev); | ||||
| 
 | ||||
| 	radeon_pm_resume(rdev); | ||||
| 
 | ||||
| 	rdev->accel_working = true; | ||||
| 	r =  rv515_startup(rdev); | ||||
| 	if (r) { | ||||
|  |  | |||
|  | @ -1811,7 +1811,8 @@ int rv770_resume(struct radeon_device *rdev) | |||
| 	/* init golden registers */ | ||||
| 	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; | ||||
| 	r = rv770_startup(rdev); | ||||
|  |  | |||
|  | @ -6618,7 +6618,8 @@ int si_resume(struct radeon_device *rdev) | |||
| 	/* init golden registers */ | ||||
| 	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; | ||||
| 	r = si_startup(rdev); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Linus Torvalds
						Linus Torvalds