diff options
Diffstat (limited to 'drivers/gpu/drm/amd')
80 files changed, 1356 insertions, 234 deletions
diff --git a/drivers/gpu/drm/amd/acp/Makefile b/drivers/gpu/drm/amd/acp/Makefile index 8a08e81ee90d..d4176a3fb706 100644 --- a/drivers/gpu/drm/amd/acp/Makefile +++ b/drivers/gpu/drm/amd/acp/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the ACP, which is a sub-component  # of AMDSOC/AMDGPU drm driver.  # It provides the HW control for ACP related functionalities. diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 78d609123420..90202cf4cd1e 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -1,4 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0 +# +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +#  #  # Makefile for the drm device driver.  This driver provides support for the  # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 5afaf6016b4a..0b14b5373783 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -717,7 +717,7 @@ int amdgpu_queue_mgr_fini(struct amdgpu_device *adev,  			  struct amdgpu_queue_mgr *mgr);  int amdgpu_queue_mgr_map(struct amdgpu_device *adev,  			 struct amdgpu_queue_mgr *mgr, -			 int hw_ip, int instance, int ring, +			 u32 hw_ip, u32 instance, u32 ring,  			 struct amdgpu_ring **out_ring);  /* @@ -1572,18 +1572,14 @@ struct amdgpu_device {  	/* sdma */  	struct amdgpu_sdma		sdma; -	union { -		struct { -			/* uvd */ -			struct amdgpu_uvd		uvd; +	/* uvd */ +	struct amdgpu_uvd		uvd; -			/* vce */ -			struct amdgpu_vce		vce; -		}; +	/* vce */ +	struct amdgpu_vce		vce; -		/* vcn */ -		struct amdgpu_vcn		vcn; -	}; +	/* vcn */ +	struct amdgpu_vcn		vcn;  	/* firmwares */  	struct amdgpu_firmware		firmware; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c index 47d1c132ac40..1e3e9be7d77e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c @@ -379,29 +379,50 @@ static int kgd_hqd_sdma_load(struct kgd_dev *kgd, void *mqd)  {  	struct amdgpu_device *adev = get_amdgpu_device(kgd);  	struct cik_sdma_rlc_registers *m; +	unsigned long end_jiffies;  	uint32_t sdma_base_addr; +	uint32_t data;  	m = get_sdma_mqd(mqd);  	sdma_base_addr = get_sdma_base_addr(m); -	WREG32(sdma_base_addr + mmSDMA0_RLC0_VIRTUAL_ADDR, -			m->sdma_rlc_virtual_addr); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, +		m->sdma_rlc_rb_cntl & (~SDMA0_RLC0_RB_CNTL__RB_ENABLE_MASK)); -	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, -			m->sdma_rlc_rb_base); +	end_jiffies = msecs_to_jiffies(2000) + jiffies; +	while (true) { +		data = RREG32(sdma_base_addr + mmSDMA0_RLC0_CONTEXT_STATUS); +		if (data & SDMA0_RLC0_CONTEXT_STATUS__IDLE_MASK) +			break; +		if (time_after(jiffies, end_jiffies)) +			return -ETIME; +		usleep_range(500, 1000); +	} +	if (m->sdma_engine_id) { +		data = RREG32(mmSDMA1_GFX_CONTEXT_CNTL); +		data = REG_SET_FIELD(data, SDMA1_GFX_CONTEXT_CNTL, +				RESUME_CTX, 0); +		WREG32(mmSDMA1_GFX_CONTEXT_CNTL, data); +	} else { +		data = RREG32(mmSDMA0_GFX_CONTEXT_CNTL); +		data = REG_SET_FIELD(data, SDMA0_GFX_CONTEXT_CNTL, +				RESUME_CTX, 0); +		WREG32(mmSDMA0_GFX_CONTEXT_CNTL, data); +	} +	WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, +				m->sdma_rlc_doorbell); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR, 0); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_WPTR, 0); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_VIRTUAL_ADDR, +				m->sdma_rlc_virtual_addr); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, m->sdma_rlc_rb_base);  	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE_HI,  			m->sdma_rlc_rb_base_hi); -  	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_LO,  			m->sdma_rlc_rb_rptr_addr_lo); -  	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR_ADDR_HI,  			m->sdma_rlc_rb_rptr_addr_hi); - -	WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, -			m->sdma_rlc_doorbell); -  	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL,  			m->sdma_rlc_rb_cntl); @@ -574,9 +595,9 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, void *mqd,  	}  	WREG32(sdma_base_addr + mmSDMA0_RLC0_DOORBELL, 0); -	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_RPTR, 0); -	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_WPTR, 0); -	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_BASE, 0); +	WREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL, +		RREG32(sdma_base_addr + mmSDMA0_RLC0_RB_CNTL) | +		SDMA0_RLC0_RB_CNTL__RB_ENABLE_MASK);  	return 0;  } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index a57cec737c18..57abf7abd7a9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -409,6 +409,10 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p,  		if (candidate->robj == validated)  			break; +		/* We can't move pinned BOs here */ +		if (bo->pin_count) +			continue; +  		other = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);  		/* Check if this BO is in one of the domains we need space for */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 2c574374d9b6..3573ecdb06ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -1837,9 +1837,6 @@ static int amdgpu_fini(struct amdgpu_device *adev)  		adev->ip_blocks[i].status.hw = false;  	} -	if (adev->firmware.load_type == AMDGPU_FW_LOAD_SMU) -		amdgpu_ucode_fini_bo(adev); -  	for (i = adev->num_ip_blocks - 1; i >= 0; i--) {  		if (!adev->ip_blocks[i].status.sw)  			continue; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index ec96bb1f9eaf..c2f414ffb2cc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -536,7 +536,7 @@ static const struct pci_device_id pciidlist[] = {  	{0x1002, 0x686c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10},  	{0x1002, 0x687f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_VEGA10},  	/* Raven */ -	{0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU|AMD_EXP_HW_SUPPORT}, +	{0x1002, 0x15dd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RAVEN|AMD_IS_APU},  	{0, 0, 0}  }; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 6c570d4e4516..f8edf5483f11 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c @@ -1,4 +1,6 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"),   * to deal in the Software without restriction, including without limitation diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c index 033fba2def6f..5f5aa5fddc16 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c @@ -164,6 +164,9 @@ static int amdgpu_pp_hw_fini(void *handle)  		ret = adev->powerplay.ip_funcs->hw_fini(  					adev->powerplay.pp_handle); +	if (adev->firmware.load_type == AMDGPU_FW_LOAD_SMU) +		amdgpu_ucode_fini_bo(adev); +  	return ret;  } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 7714f4a6c8b0..447d446b5015 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -442,6 +442,8 @@ static int psp_hw_fini(void *handle)  	if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)  		return 0; +	amdgpu_ucode_fini_bo(adev); +  	psp_ring_destroy(psp, PSP_RING_TYPE__KM);  	amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, &psp->tmr_buf); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c index 190e28cb827e..93d86619e802 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_queue_mgr.c @@ -63,7 +63,7 @@ static int amdgpu_update_cached_map(struct amdgpu_queue_mapper *mapper,  static int amdgpu_identity_map(struct amdgpu_device *adev,  			       struct amdgpu_queue_mapper *mapper, -			       int ring, +			       u32 ring,  			       struct amdgpu_ring **out_ring)  {  	switch (mapper->hw_ip) { @@ -121,7 +121,7 @@ static enum amdgpu_ring_type amdgpu_hw_ip_to_ring_type(int hw_ip)  static int amdgpu_lru_map(struct amdgpu_device *adev,  			  struct amdgpu_queue_mapper *mapper, -			  int user_ring, bool lru_pipe_order, +			  u32 user_ring, bool lru_pipe_order,  			  struct amdgpu_ring **out_ring)  {  	int r, i, j; @@ -208,7 +208,7 @@ int amdgpu_queue_mgr_fini(struct amdgpu_device *adev,   */  int amdgpu_queue_mgr_map(struct amdgpu_device *adev,  			 struct amdgpu_queue_mgr *mgr, -			 int hw_ip, int instance, int ring, +			 u32 hw_ip, u32 instance, u32 ring,  			 struct amdgpu_ring **out_ring)  {  	int r, ip_num_rings; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h index f337c316ec2c..06525f2c36c3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h @@ -1,4 +1,26 @@ -/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #if !defined(_AMDGPU_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)  #define _AMDGPU_TRACE_H_ diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 793b1470284d..a296f7bbe57c 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c @@ -1023,22 +1023,101 @@ static const struct amdgpu_allowed_register_entry cik_allowed_read_registers[] =  	{mmPA_SC_RASTER_CONFIG_1, true},  }; -static uint32_t cik_read_indexed_register(struct amdgpu_device *adev, -					  u32 se_num, u32 sh_num, -					  u32 reg_offset) + +static uint32_t cik_get_register_value(struct amdgpu_device *adev, +				       bool indexed, u32 se_num, +				       u32 sh_num, u32 reg_offset)  { -	uint32_t val; +	if (indexed) { +		uint32_t val; +		unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num; +		unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num; + +		switch (reg_offset) { +		case mmCC_RB_BACKEND_DISABLE: +			return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable; +		case mmGC_USER_RB_BACKEND_DISABLE: +			return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable; +		case mmPA_SC_RASTER_CONFIG: +			return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config; +		case mmPA_SC_RASTER_CONFIG_1: +			return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config_1; +		} -	mutex_lock(&adev->grbm_idx_mutex); -	if (se_num != 0xffffffff || sh_num != 0xffffffff) -		amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); +		mutex_lock(&adev->grbm_idx_mutex); +		if (se_num != 0xffffffff || sh_num != 0xffffffff) +			amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); -	val = RREG32(reg_offset); +		val = RREG32(reg_offset); -	if (se_num != 0xffffffff || sh_num != 0xffffffff) -		amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); -	mutex_unlock(&adev->grbm_idx_mutex); -	return val; +		if (se_num != 0xffffffff || sh_num != 0xffffffff) +			amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); +		mutex_unlock(&adev->grbm_idx_mutex); +		return val; +	} else { +		unsigned idx; + +		switch (reg_offset) { +		case mmGB_ADDR_CONFIG: +			return adev->gfx.config.gb_addr_config; +		case mmMC_ARB_RAMCFG: +			return adev->gfx.config.mc_arb_ramcfg; +		case mmGB_TILE_MODE0: +		case mmGB_TILE_MODE1: +		case mmGB_TILE_MODE2: +		case mmGB_TILE_MODE3: +		case mmGB_TILE_MODE4: +		case mmGB_TILE_MODE5: +		case mmGB_TILE_MODE6: +		case mmGB_TILE_MODE7: +		case mmGB_TILE_MODE8: +		case mmGB_TILE_MODE9: +		case mmGB_TILE_MODE10: +		case mmGB_TILE_MODE11: +		case mmGB_TILE_MODE12: +		case mmGB_TILE_MODE13: +		case mmGB_TILE_MODE14: +		case mmGB_TILE_MODE15: +		case mmGB_TILE_MODE16: +		case mmGB_TILE_MODE17: +		case mmGB_TILE_MODE18: +		case mmGB_TILE_MODE19: +		case mmGB_TILE_MODE20: +		case mmGB_TILE_MODE21: +		case mmGB_TILE_MODE22: +		case mmGB_TILE_MODE23: +		case mmGB_TILE_MODE24: +		case mmGB_TILE_MODE25: +		case mmGB_TILE_MODE26: +		case mmGB_TILE_MODE27: +		case mmGB_TILE_MODE28: +		case mmGB_TILE_MODE29: +		case mmGB_TILE_MODE30: +		case mmGB_TILE_MODE31: +			idx = (reg_offset - mmGB_TILE_MODE0); +			return adev->gfx.config.tile_mode_array[idx]; +		case mmGB_MACROTILE_MODE0: +		case mmGB_MACROTILE_MODE1: +		case mmGB_MACROTILE_MODE2: +		case mmGB_MACROTILE_MODE3: +		case mmGB_MACROTILE_MODE4: +		case mmGB_MACROTILE_MODE5: +		case mmGB_MACROTILE_MODE6: +		case mmGB_MACROTILE_MODE7: +		case mmGB_MACROTILE_MODE8: +		case mmGB_MACROTILE_MODE9: +		case mmGB_MACROTILE_MODE10: +		case mmGB_MACROTILE_MODE11: +		case mmGB_MACROTILE_MODE12: +		case mmGB_MACROTILE_MODE13: +		case mmGB_MACROTILE_MODE14: +		case mmGB_MACROTILE_MODE15: +			idx = (reg_offset - mmGB_MACROTILE_MODE0); +			return adev->gfx.config.macrotile_mode_array[idx]; +		default: +			return RREG32(reg_offset); +		} +	}  }  static int cik_read_register(struct amdgpu_device *adev, u32 se_num, @@ -1048,13 +1127,13 @@ static int cik_read_register(struct amdgpu_device *adev, u32 se_num,  	*value = 0;  	for (i = 0; i < ARRAY_SIZE(cik_allowed_read_registers); i++) { +		bool indexed = cik_allowed_read_registers[i].grbm_indexed; +  		if (reg_offset != cik_allowed_read_registers[i].reg_offset)  			continue; -		*value = cik_allowed_read_registers[i].grbm_indexed ? -			 cik_read_indexed_register(adev, se_num, -						   sh_num, reg_offset) : -			 RREG32(reg_offset); +		*value = cik_get_register_value(adev, indexed, se_num, sh_num, +						reg_offset);  		return 0;  	}  	return -EINVAL; diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 5c8a7a48a4ad..419ba0ce7ee5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c @@ -1819,6 +1819,22 @@ static void gfx_v7_0_setup_rb(struct amdgpu_device *adev)  							adev->gfx.config.backend_enable_mask,  							num_rb_pipes);  	} + +	/* cache the values for userspace */ +	for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { +		for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { +			gfx_v7_0_select_se_sh(adev, i, j, 0xffffffff); +			adev->gfx.config.rb_config[i][j].rb_backend_disable = +				RREG32(mmCC_RB_BACKEND_DISABLE); +			adev->gfx.config.rb_config[i][j].user_rb_backend_disable = +				RREG32(mmGC_USER_RB_BACKEND_DISABLE); +			adev->gfx.config.rb_config[i][j].raster_config = +				RREG32(mmPA_SC_RASTER_CONFIG); +			adev->gfx.config.rb_config[i][j].raster_config_1 = +				RREG32(mmPA_SC_RASTER_CONFIG_1); +		} +	} +	gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);  	mutex_unlock(&adev->grbm_idx_mutex);  } diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index da43813d67a4..5aeb5f8816f3 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -2467,7 +2467,7 @@ static int gfx_v9_0_kiq_kcq_enable(struct amdgpu_device *adev)  				  PACKET3_MAP_QUEUES_PIPE(ring->pipe) |  				  PACKET3_MAP_QUEUES_ME((ring->me == 1 ? 0 : 1)) |  				  PACKET3_MAP_QUEUES_QUEUE_TYPE(0) | /*queue_type: normal compute queue */ -				  PACKET3_MAP_QUEUES_ALLOC_FORMAT(1) | /* alloc format: all_on_one_pipe */ +				  PACKET3_MAP_QUEUES_ALLOC_FORMAT(0) | /* alloc format: all_on_one_pipe */  				  PACKET3_MAP_QUEUES_ENGINE_SEL(0) | /* engine_sel: compute */  				  PACKET3_MAP_QUEUES_NUM_QUEUES(1)); /* num_queues: must be 1 */  		amdgpu_ring_write(kiq_ring, PACKET3_MAP_QUEUES_DOORBELL_OFFSET(ring->doorbell_index)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 1eb4d79d6e30..0450ac5ba6b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c @@ -1175,7 +1175,7 @@ static const struct amdgpu_irq_src_funcs vcn_v1_0_irq_funcs = {  static void vcn_v1_0_set_irq_funcs(struct amdgpu_device *adev)  { -	adev->uvd.irq.num_types = adev->vcn.num_enc_rings + 1; +	adev->vcn.irq.num_types = adev->vcn.num_enc_rings + 1;  	adev->vcn.irq.funcs = &vcn_v1_0_irq_funcs;  } diff --git a/drivers/gpu/drm/amd/amdkfd/Makefile b/drivers/gpu/drm/amd/amdkfd/Makefile index 7bb0bc0ca3d6..342c2d937b17 100644 --- a/drivers/gpu/drm/amd/amdkfd/Makefile +++ b/drivers/gpu/drm/amd/amdkfd/Makefile @@ -1,4 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0 +# +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +#  #  # Makefile for Heterogenous System Architecture support for AMD GPU devices  # diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c index 6c5a9cab55de..f744caeaee04 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c @@ -24,6 +24,7 @@  #include <linux/sched.h>  #include <linux/moduleparam.h>  #include <linux/device.h> +#include <linux/printk.h>  #include "kfd_priv.h"  #define KFD_DRIVER_AUTHOR	"AMD Inc. and others" @@ -132,7 +133,7 @@ static void __exit kfd_module_exit(void)  	kfd_process_destroy_wq();  	kfd_topology_shutdown();  	kfd_chardev_exit(); -	dev_info(kfd_device, "Removed module\n"); +	pr_info("amdkfd: Removed module\n");  }  module_init(kfd_module_init); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c index 4859d263fa2a..4728fad3fd74 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c @@ -202,8 +202,8 @@ static int update_mqd_sdma(struct mqd_manager *mm, void *mqd,  	struct cik_sdma_rlc_registers *m;  	m = get_sdma_mqd(mqd); -	m->sdma_rlc_rb_cntl = ffs(q->queue_size / sizeof(unsigned int)) << -			SDMA0_RLC0_RB_CNTL__RB_SIZE__SHIFT | +	m->sdma_rlc_rb_cntl = (ffs(q->queue_size / sizeof(unsigned int)) - 1) +			<< SDMA0_RLC0_RB_CNTL__RB_SIZE__SHIFT |  			q->vmid << SDMA0_RLC0_RB_CNTL__RB_VMID__SHIFT |  			1 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_ENABLE__SHIFT |  			6 << SDMA0_RLC0_RB_CNTL__RPTR_WRITEBACK_TIMER__SHIFT; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c index 2bec902fc939..a3f1e62c60ba 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c @@ -191,6 +191,24 @@ int pqm_create_queue(struct process_queue_manager *pqm,  	switch (type) {  	case KFD_QUEUE_TYPE_SDMA: +		if (dev->dqm->queue_count >= +			CIK_SDMA_QUEUES_PER_ENGINE * CIK_SDMA_ENGINE_NUM) { +			pr_err("Over-subscription is not allowed for SDMA.\n"); +			retval = -EPERM; +			goto err_create_queue; +		} + +		retval = create_cp_queue(pqm, dev, &q, properties, f, *qid); +		if (retval != 0) +			goto err_create_queue; +		pqn->q = q; +		pqn->kq = NULL; +		retval = dev->dqm->ops.create_queue(dev->dqm, q, &pdd->qpd, +						&q->properties.vmid); +		pr_debug("DQM returned %d for create_queue\n", retval); +		print_queue(q); +		break; +  	case KFD_QUEUE_TYPE_COMPUTE:  		/* check if there is over subscription */  		if ((sched_policy == KFD_SCHED_POLICY_HWS_NO_OVERSUBSCRIPTION) && diff --git a/drivers/gpu/drm/amd/display/Makefile b/drivers/gpu/drm/amd/display/Makefile index 8ba37dd9cf7f..c27c81cdeed3 100644 --- a/drivers/gpu/drm/amd/display/Makefile +++ b/drivers/gpu/drm/amd/display/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the DAL (Display Abstract Layer), which is a  sub-component  # of the AMDGPU drm driver.  # It provides the HW control for display related functionalities. diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile index 4699e47aa76b..2b72009844f8 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'dm' sub-component of DAL.  # It provides the control and status of dm blocks. diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 889ed24084e8..bb5fa895fb64 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -520,7 +520,8 @@ static int detect_mst_link_for_all_connectors(struct drm_device *dev)  	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {  		aconnector = to_amdgpu_dm_connector(connector); -		if (aconnector->dc_link->type == dc_connection_mst_branch) { +		if (aconnector->dc_link->type == dc_connection_mst_branch && +		    aconnector->mst_mgr.aux) {  			DRM_DEBUG_DRIVER("DM_MST: starting TM on aconnector: %p [id: %d]\n",  					aconnector, aconnector->base.base.id); @@ -677,6 +678,10 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)  		mutex_lock(&aconnector->hpd_lock);  		dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD); + +		if (aconnector->fake_enable && aconnector->dc_link->local_sink) +			aconnector->fake_enable = false; +  		aconnector->dc_sink = NULL;  		amdgpu_dm_update_connector_after_detect(aconnector);  		mutex_unlock(&aconnector->hpd_lock); @@ -711,7 +716,6 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev)  	ret = drm_atomic_helper_resume(ddev, adev->dm.cached_state); -	drm_atomic_state_put(adev->dm.cached_state);  	adev->dm.cached_state = NULL;  	amdgpu_dm_irq_resume_late(adev); @@ -2332,7 +2336,7 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,  		       const struct dm_connector_state *dm_state)  {  	struct drm_display_mode *preferred_mode = NULL; -	const struct drm_connector *drm_connector; +	struct drm_connector *drm_connector;  	struct dc_stream_state *stream = NULL;  	struct drm_display_mode mode = *drm_mode;  	bool native_mode_found = false; @@ -2351,11 +2355,13 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,  	if (!aconnector->dc_sink) {  		/* -		 * Exclude MST from creating fake_sink -		 * TODO: need to enable MST into fake_sink feature +		 * Create dc_sink when necessary to MST +		 * Don't apply fake_sink to MST  		 */ -		if (aconnector->mst_port) -			goto stream_create_fail; +		if (aconnector->mst_port) { +			dm_dp_mst_dc_sink_create(drm_connector); +			goto mst_dc_sink_create_done; +		}  		if (create_fake_sink(aconnector))  			goto stream_create_fail; @@ -2406,6 +2412,7 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,  stream_create_fail:  dm_state_null:  drm_connector_null: +mst_dc_sink_create_done:  	return stream;  } @@ -2704,7 +2711,7 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector)  			.link = aconnector->dc_link,  			.sink_signal = SIGNAL_TYPE_VIRTUAL  	}; -	struct edid *edid = (struct edid *) aconnector->base.edid_blob_ptr->data; +	struct edid *edid;  	if (!aconnector->base.edid_blob_ptr ||  		!aconnector->base.edid_blob_ptr->data) { @@ -2716,6 +2723,8 @@ static void create_eml_sink(struct amdgpu_dm_connector *aconnector)  		return;  	} +	edid = (struct edid *) aconnector->base.edid_blob_ptr->data; +  	aconnector->edid = edid;  	aconnector->dc_em_sink = dc_link_add_remote_sink( @@ -4193,13 +4202,13 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)  		update_stream_scaling_settings(&dm_new_con_state->base.crtc->mode,  				dm_new_con_state, (struct dc_stream_state *)dm_new_crtc_state->stream); +		if (!dm_new_crtc_state->stream) +			continue; +  		status = dc_stream_get_status(dm_new_crtc_state->stream);  		WARN_ON(!status);  		WARN_ON(!status->plane_count); -		if (!dm_new_crtc_state->stream) -			continue; -  		/*TODO How it works with MPO ?*/  		if (!dc_commit_planes_to_stream(  				dm->dc, @@ -4253,7 +4262,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)  	drm_atomic_helper_commit_hw_done(state);  	if (wait_for_vblank) -		drm_atomic_helper_wait_for_vblanks(dev, state); +		drm_atomic_helper_wait_for_flip_done(dev, state);  	drm_atomic_helper_cleanup_planes(dev, state);  } @@ -4332,9 +4341,11 @@ void dm_restore_drm_connector_state(struct drm_device *dev,  		return;  	disconnected_acrtc = to_amdgpu_crtc(connector->encoder->crtc); -	acrtc_state = to_dm_crtc_state(disconnected_acrtc->base.state); +	if (!disconnected_acrtc) +		return; -	if (!disconnected_acrtc || !acrtc_state->stream) +	acrtc_state = to_dm_crtc_state(disconnected_acrtc->base.state); +	if (!acrtc_state->stream)  		return;  	/* @@ -4455,7 +4466,7 @@ static int dm_update_crtcs_state(struct dc *dc,  			}  		} -		if (dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && +		if (enable && dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) &&  				dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream)) {  			new_crtc_state->mode_changed = false; @@ -4709,7 +4720,8 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,  		}  	} else {  		for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { -			if (!drm_atomic_crtc_needs_modeset(new_crtc_state)) +			if (!drm_atomic_crtc_needs_modeset(new_crtc_state) && +					!new_crtc_state->color_mgmt_changed)  				continue;  			if (!new_crtc_state->enable) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 117521c6a6ed..0230250a1164 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -189,6 +189,8 @@ struct amdgpu_dm_connector {  	struct mutex hpd_lock;  	bool fake_enable; + +	bool mst_connected;  };  #define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index f8efb98b1fa7..638c2c2b5cd7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c @@ -185,6 +185,42 @@ static int dm_connector_update_modes(struct drm_connector *connector,  	return ret;  } +void dm_dp_mst_dc_sink_create(struct drm_connector *connector) +{ +	struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); +	struct edid *edid; +	struct dc_sink *dc_sink; +	struct dc_sink_init_data init_params = { +			.link = aconnector->dc_link, +			.sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST }; + +	edid = drm_dp_mst_get_edid(connector, &aconnector->mst_port->mst_mgr, aconnector->port); + +	if (!edid) { +		drm_mode_connector_update_edid_property( +			&aconnector->base, +			NULL); +		return; +	} + +	aconnector->edid = edid; + +	dc_sink = dc_link_add_remote_sink( +		aconnector->dc_link, +		(uint8_t *)aconnector->edid, +		(aconnector->edid->extensions + 1) * EDID_LENGTH, +		&init_params); + +	dc_sink->priv = aconnector; +	aconnector->dc_sink = dc_sink; + +	amdgpu_dm_add_sink_to_freesync_module( +			connector, aconnector->edid); + +	drm_mode_connector_update_edid_property( +					&aconnector->base, aconnector->edid); +} +  static int dm_dp_mst_get_modes(struct drm_connector *connector)  {  	struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); @@ -311,6 +347,7 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,  			drm_mode_connector_set_path_property(connector, pathprop);  			drm_connector_list_iter_end(&conn_iter); +			aconnector->mst_connected = true;  			return &aconnector->base;  		}  	} @@ -363,6 +400,8 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,  	 */  	amdgpu_dm_connector_funcs_reset(connector); +	aconnector->mst_connected = true; +  	DRM_INFO("DM_MST: added connector: %p [id: %d] [master: %p]\n",  			aconnector, connector->base.id, aconnector->mst_port); @@ -394,6 +433,8 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,  	drm_mode_connector_update_edid_property(  			&aconnector->base,  			NULL); + +	aconnector->mst_connected = false;  }  static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr) @@ -404,10 +445,18 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)  	drm_kms_helper_hotplug_event(dev);  } +static void dm_dp_mst_link_status_reset(struct drm_connector *connector) +{ +	mutex_lock(&connector->dev->mode_config.mutex); +	drm_mode_connector_set_link_status_property(connector, DRM_MODE_LINK_STATUS_BAD); +	mutex_unlock(&connector->dev->mode_config.mutex); +} +  static void dm_dp_mst_register_connector(struct drm_connector *connector)  {  	struct drm_device *dev = connector->dev;  	struct amdgpu_device *adev = dev->dev_private; +	struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);  	if (adev->mode_info.rfbdev)  		drm_fb_helper_add_one_connector(&adev->mode_info.rfbdev->helper, connector); @@ -416,6 +465,8 @@ static void dm_dp_mst_register_connector(struct drm_connector *connector)  	drm_connector_register(connector); +	if (aconnector->mst_connected) +		dm_dp_mst_link_status_reset(connector);  }  static const struct drm_dp_mst_topology_cbs dm_mst_cbs = { diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h index 2da851b40042..8cf51da26657 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h @@ -31,5 +31,6 @@ struct amdgpu_dm_connector;  void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,  				       struct amdgpu_dm_connector *aconnector); +void dm_dp_mst_dc_sink_create(struct drm_connector *connector);  #endif diff --git a/drivers/gpu/drm/amd/display/dc/Makefile b/drivers/gpu/drm/amd/display/dc/Makefile index 4f83e3011743..aed538a4d1ba 100644 --- a/drivers/gpu/drm/amd/display/dc/Makefile +++ b/drivers/gpu/drm/amd/display/dc/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for Display Core (dc) component.  # diff --git a/drivers/gpu/drm/amd/display/dc/basics/Makefile b/drivers/gpu/drm/amd/display/dc/basics/Makefile index 43c5ccdeeb72..6af8c8a9ad80 100644 --- a/drivers/gpu/drm/amd/display/dc/basics/Makefile +++ b/drivers/gpu/drm/amd/display/dc/basics/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'utils' sub-component of DAL.  # It provides the general basic services required by other DAL  # subcomponents. diff --git a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c index 785b943b60ed..6e43168fbdd6 100644 --- a/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c +++ b/drivers/gpu/drm/amd/display/dc/basics/log_helpers.c @@ -75,6 +75,9 @@ void dc_conn_log(struct dc_context *ctx,  		if (signal == signal_type_info_tbl[i].type)  			break; +	if (i == NUM_ELEMENTS(signal_type_info_tbl)) +		goto fail; +  	dm_logger_append(&entry, "[%s][ConnIdx:%d] ",  			signal_type_info_tbl[i].name,  			link->link_index); @@ -96,6 +99,8 @@ void dc_conn_log(struct dc_context *ctx,  	dm_logger_append(&entry, "^\n");  	dm_helpers_dc_conn_log(ctx, &entry, event); + +fail:  	dm_logger_close(&entry);  	va_end(args); diff --git a/drivers/gpu/drm/amd/display/dc/bios/Makefile b/drivers/gpu/drm/amd/display/dc/bios/Makefile index 6ec815dce9cc..239e86bbec5a 100644 --- a/drivers/gpu/drm/amd/display/dc/bios/Makefile +++ b/drivers/gpu/drm/amd/display/dc/bios/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'bios' sub-component of DAL.  # It provides the parsing and executing controls for atom bios image. diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c index aaaebd06d7ee..86e6438c5cf3 100644 --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c @@ -249,7 +249,7 @@ static enum bp_result bios_parser_get_dst_obj(struct dc_bios *dcb,  	struct graphics_object_id *dest_object_id)  {  	uint32_t number; -	uint16_t *id; +	uint16_t *id = NULL;  	ATOM_OBJECT *object;  	struct bios_parser *bp = BP_FROM_DCB(dcb); @@ -260,7 +260,7 @@ static enum bp_result bios_parser_get_dst_obj(struct dc_bios *dcb,  	number = get_dest_obj_list(bp, object, &id); -	if (number <= index) +	if (number <= index || !id)  		return BP_RESULT_BADINPUT;  	*dest_object_id = object_id_from_bios_object_id(id[index]); diff --git a/drivers/gpu/drm/amd/display/dc/calcs/Makefile b/drivers/gpu/drm/amd/display/dc/calcs/Makefile index 41ef35995b02..7959e382ed28 100644 --- a/drivers/gpu/drm/amd/display/dc/calcs/Makefile +++ b/drivers/gpu/drm/amd/display/dc/calcs/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'calcs' sub-component of DAL.  # It calculates Bandwidth and Watermarks values for HW programming  # diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c index 3dce35e66b09..b142629a1058 100644 --- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c +++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c @@ -900,6 +900,15 @@ bool dcn_validate_bandwidth(  			v->override_vta_ps[input_idx] = pipe->plane_res.scl_data.taps.v_taps;  			v->override_hta_pschroma[input_idx] = pipe->plane_res.scl_data.taps.h_taps_c;  			v->override_vta_pschroma[input_idx] = pipe->plane_res.scl_data.taps.v_taps_c; +			/* +			 * Spreadsheet doesn't handle taps_c is one properly, +			 * need to force Chroma to always be scaled to pass +			 * bandwidth validation. +			 */ +			if (v->override_hta_pschroma[input_idx] == 1) +				v->override_hta_pschroma[input_idx] = 2; +			if (v->override_vta_pschroma[input_idx] == 1) +				v->override_vta_pschroma[input_idx] = 2;  			v->source_scan[input_idx] = (pipe->plane_state->rotation % 2) ? dcn_bw_vert : dcn_bw_hor;  		}  		if (v->is_line_buffer_bpp_fixed == dcn_bw_yes) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index fe63f5894d43..7240db2e6f09 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -121,6 +121,10 @@ static bool create_links(  			goto failed_alloc;  		} +		link->link_index = dc->link_count; +		dc->links[dc->link_count] = link; +		dc->link_count++; +  		link->ctx = dc->ctx;  		link->dc = dc;  		link->connector_signal = SIGNAL_TYPE_VIRTUAL; @@ -129,6 +133,13 @@ static bool create_links(  		link->link_id.enum_id = ENUM_ID_1;  		link->link_enc = kzalloc(sizeof(*link->link_enc), GFP_KERNEL); +		if (!link->link_enc) { +			BREAK_TO_DEBUGGER(); +			goto failed_alloc; +		} + +		link->link_status.dpcd_caps = &link->dpcd_caps; +  		enc_init.ctx = dc->ctx;  		enc_init.channel = CHANNEL_ID_UNKNOWN;  		enc_init.hpd_source = HPD_SOURCEID_UNKNOWN; @@ -138,10 +149,6 @@ static bool create_links(  		enc_init.encoder.id = ENCODER_ID_INTERNAL_VIRTUAL;  		enc_init.encoder.enum_id = ENUM_ID_1;  		virtual_link_encoder_construct(link->link_enc, &enc_init); - -		link->link_index = dc->link_count; -		dc->links[dc->link_count] = link; -		dc->link_count++;  	}  	return true; diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c index 6acee5426e4b..43c7a7fddb83 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c @@ -1,4 +1,26 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +/*   * dc_debug.c   *   *  Created on: Nov 3, 2016 diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c index 0602610489d7..42a111b9505d 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c @@ -480,22 +480,6 @@ static void detect_dp(  		sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT;  		detect_dp_sink_caps(link); -		/* DP active dongles */ -		if (is_dp_active_dongle(link)) { -			link->type = dc_connection_active_dongle; -			if (!link->dpcd_caps.sink_count.bits.SINK_COUNT) { -				/* -				 * active dongle unplug processing for short irq -				 */ -				link_disconnect_sink(link); -				return; -			} - -			if (link->dpcd_caps.dongle_type != -			DISPLAY_DONGLE_DP_HDMI_CONVERTER) { -				*converter_disable_audio = true; -			} -		}  		if (is_mst_supported(link)) {  			sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT_MST;  			link->type = dc_connection_mst_branch; @@ -535,6 +519,22 @@ static void detect_dp(  				sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT;  			}  		} + +		if (link->type != dc_connection_mst_branch && +			is_dp_active_dongle(link)) { +			/* DP active dongles */ +			link->type = dc_connection_active_dongle; +			if (!link->dpcd_caps.sink_count.bits.SINK_COUNT) { +				/* +				 * active dongle unplug processing for short irq +				 */ +				link_disconnect_sink(link); +				return; +			} + +			if (link->dpcd_caps.dongle_type != DISPLAY_DONGLE_DP_HDMI_CONVERTER) +				*converter_disable_audio = true; +		}  	} else {  		/* DP passive dongles */  		sink_caps->signal = dp_passive_dongle_detection(link->ddc, @@ -1801,12 +1801,77 @@ static void disable_link(struct dc_link *link, enum signal_type signal)  		link->link_enc->funcs->disable_output(link->link_enc, signal, link);  } +static bool dp_active_dongle_validate_timing( +		const struct dc_crtc_timing *timing, +		const struct dc_dongle_caps *dongle_caps) +{ +	unsigned int required_pix_clk = timing->pix_clk_khz; + +	if (dongle_caps->dongle_type != DISPLAY_DONGLE_DP_HDMI_CONVERTER || +		dongle_caps->extendedCapValid == false) +		return true; + +	/* Check Pixel Encoding */ +	switch (timing->pixel_encoding) { +	case PIXEL_ENCODING_RGB: +	case PIXEL_ENCODING_YCBCR444: +		break; +	case PIXEL_ENCODING_YCBCR422: +		if (!dongle_caps->is_dp_hdmi_ycbcr422_pass_through) +			return false; +		break; +	case PIXEL_ENCODING_YCBCR420: +		if (!dongle_caps->is_dp_hdmi_ycbcr420_pass_through) +			return false; +		break; +	default: +		/* Invalid Pixel Encoding*/ +		return false; +	} + + +	/* Check Color Depth and Pixel Clock */ +	if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR420) +		required_pix_clk /= 2; +	else if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR422) +		required_pix_clk = required_pix_clk * 2 / 3; + +	switch (timing->display_color_depth) { +	case COLOR_DEPTH_666: +	case COLOR_DEPTH_888: +		/*888 and 666 should always be supported*/ +		break; +	case COLOR_DEPTH_101010: +		if (dongle_caps->dp_hdmi_max_bpc < 10) +			return false; +		required_pix_clk = required_pix_clk * 10 / 8; +		break; +	case COLOR_DEPTH_121212: +		if (dongle_caps->dp_hdmi_max_bpc < 12) +			return false; +		required_pix_clk = required_pix_clk * 12 / 8; +		break; + +	case COLOR_DEPTH_141414: +	case COLOR_DEPTH_161616: +	default: +		/* These color depths are currently not supported */ +		return false; +	} + +	if (required_pix_clk > dongle_caps->dp_hdmi_max_pixel_clk) +		return false; + +	return true; +} +  enum dc_status dc_link_validate_mode_timing(  		const struct dc_stream_state *stream,  		struct dc_link *link,  		const struct dc_crtc_timing *timing)  {  	uint32_t max_pix_clk = stream->sink->dongle_max_pix_clk; +	struct dc_dongle_caps *dongle_caps = &link->link_status.dpcd_caps->dongle_caps;  	/* A hack to avoid failing any modes for EDID override feature on  	 * topology change such as lower quality cable for DP or different dongle @@ -1814,8 +1879,13 @@ enum dc_status dc_link_validate_mode_timing(  	if (link->remote_sinks[0])  		return DC_OK; +	/* Passive Dongle */  	if (0 != max_pix_clk && timing->pix_clk_khz > max_pix_clk) -		return DC_EXCEED_DONGLE_MAX_CLK; +		return DC_EXCEED_DONGLE_CAP; + +	/* Active Dongle*/ +	if (!dp_active_dongle_validate_timing(timing, dongle_caps)) +		return DC_EXCEED_DONGLE_CAP;  	switch (stream->signal) {  	case SIGNAL_TYPE_EDP: diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c index ced42484dcfc..e6bf05d76a94 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c @@ -1512,7 +1512,7 @@ static bool hpd_rx_irq_check_link_loss_status(  	struct dc_link *link,  	union hpd_irq_data *hpd_irq_dpcd_data)  { -	uint8_t irq_reg_rx_power_state; +	uint8_t irq_reg_rx_power_state = 0;  	enum dc_status dpcd_result = DC_ERROR_UNEXPECTED;  	union lane_status lane_status;  	uint32_t lane; @@ -1524,60 +1524,55 @@ static bool hpd_rx_irq_check_link_loss_status(  	if (link->cur_link_settings.lane_count == 0)  		return return_code; -	/*1. Check that we can handle interrupt: Not in FS DOS, -	 *  Not in "Display Timeout" state, Link is trained. -	 */ -	dpcd_result = core_link_read_dpcd(link, -		DP_SET_POWER, -		&irq_reg_rx_power_state, -		sizeof(irq_reg_rx_power_state)); +	/*1. Check that Link Status changed, before re-training.*/ -	if (dpcd_result != DC_OK) { -		irq_reg_rx_power_state = DP_SET_POWER_D0; -		dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, -			"%s: DPCD read failed to obtain power state.\n", -			__func__); +	/*parse lane status*/ +	for (lane = 0; lane < link->cur_link_settings.lane_count; lane++) { +		/* check status of lanes 0,1 +		 * changed DpcdAddress_Lane01Status (0x202) +		 */ +		lane_status.raw = get_nibble_at_index( +			&hpd_irq_dpcd_data->bytes.lane01_status.raw, +			lane); + +		if (!lane_status.bits.CHANNEL_EQ_DONE_0 || +			!lane_status.bits.CR_DONE_0 || +			!lane_status.bits.SYMBOL_LOCKED_0) { +			/* if one of the channel equalization, clock +			 * recovery or symbol lock is dropped +			 * consider it as (link has been +			 * dropped) dp sink status has changed +			 */ +			sink_status_changed = true; +			break; +		}  	} -	if (irq_reg_rx_power_state == DP_SET_POWER_D0) { - -		/*2. Check that Link Status changed, before re-training.*/ - -		/*parse lane status*/ -		for (lane = 0; -			lane < link->cur_link_settings.lane_count; -			lane++) { +	/* Check interlane align.*/ +	if (sink_status_changed || +		!hpd_irq_dpcd_data->bytes.lane_status_updated.bits.INTERLANE_ALIGN_DONE) { -			/* check status of lanes 0,1 -			 * changed DpcdAddress_Lane01Status (0x202)*/ -			lane_status.raw = get_nibble_at_index( -				&hpd_irq_dpcd_data->bytes.lane01_status.raw, -				lane); - -			if (!lane_status.bits.CHANNEL_EQ_DONE_0 || -				!lane_status.bits.CR_DONE_0 || -				!lane_status.bits.SYMBOL_LOCKED_0) { -				/* if one of the channel equalization, clock -				 * recovery or symbol lock is dropped -				 * consider it as (link has been -				 * dropped) dp sink status has changed*/ -				sink_status_changed = true; -				break; -			} +		dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, +			"%s: Link Status changed.\n", __func__); -		} +		return_code = true; -		/* Check interlane align.*/ -		if (sink_status_changed || -			!hpd_irq_dpcd_data->bytes.lane_status_updated.bits. -			INTERLANE_ALIGN_DONE) { +		/*2. Check that we can handle interrupt: Not in FS DOS, +		 *  Not in "Display Timeout" state, Link is trained. +		 */ +		dpcd_result = core_link_read_dpcd(link, +			DP_SET_POWER, +			&irq_reg_rx_power_state, +			sizeof(irq_reg_rx_power_state)); +		if (dpcd_result != DC_OK) {  			dm_logger_write(link->ctx->logger, LOG_HW_HPD_IRQ, -				"%s: Link Status changed.\n", +				"%s: DPCD read failed to obtain power state.\n",  				__func__); - -			return_code = true; +		} else { +			if (irq_reg_rx_power_state != DP_SET_POWER_D0) +				return_code = false;  		}  	} @@ -2062,6 +2057,24 @@ bool is_dp_active_dongle(const struct dc_link *link)  			(dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER);  } +static int translate_dpcd_max_bpc(enum dpcd_downstream_port_max_bpc bpc) +{ +	switch (bpc) { +	case DOWN_STREAM_MAX_8BPC: +		return 8; +	case DOWN_STREAM_MAX_10BPC: +		return 10; +	case DOWN_STREAM_MAX_12BPC: +		return 12; +	case DOWN_STREAM_MAX_16BPC: +		return 16; +	default: +		break; +	} + +	return -1; +} +  static void get_active_converter_info(  	uint8_t data, struct dc_link *link)  { @@ -2131,7 +2144,8 @@ static void get_active_converter_info(  					hdmi_caps.bits.YCrCr420_CONVERSION;  				link->dpcd_caps.dongle_caps.dp_hdmi_max_bpc = -					hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT; +					translate_dpcd_max_bpc( +						hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT);  				link->dpcd_caps.dongle_caps.extendedCapValid = true;  			} diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index d1cdf9f8853d..928895809867 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -1,5 +1,5 @@  /* -* Copyright 2012-15 Advanced Micro Devices, Inc. + * Copyright 2012-15 Advanced Micro Devices, Inc.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -516,13 +516,11 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx)  			right_view = (plane_state->rotation == ROTATION_ANGLE_270) != sec_split;  		if (right_view) { -			data->viewport.width /= 2; -			data->viewport_c.width /= 2; -			data->viewport.x +=  data->viewport.width; -			data->viewport_c.x +=  data->viewport_c.width; +			data->viewport.x +=  data->viewport.width / 2; +			data->viewport_c.x +=  data->viewport_c.width / 2;  			/* Ceil offset pipe */ -			data->viewport.width += data->viewport.width % 2; -			data->viewport_c.width += data->viewport_c.width % 2; +			data->viewport.width = (data->viewport.width + 1) / 2; +			data->viewport_c.width = (data->viewport_c.width + 1) / 2;  		} else {  			data->viewport.width /= 2;  			data->viewport_c.width /= 2; @@ -580,14 +578,12 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip  	if (pipe_ctx->top_pipe && pipe_ctx->top_pipe->plane_state ==  		pipe_ctx->plane_state) {  		if (stream->view_format == VIEW_3D_FORMAT_TOP_AND_BOTTOM) { -			pipe_ctx->plane_res.scl_data.recout.height /= 2; -			pipe_ctx->plane_res.scl_data.recout.y += pipe_ctx->plane_res.scl_data.recout.height; +			pipe_ctx->plane_res.scl_data.recout.y += pipe_ctx->plane_res.scl_data.recout.height / 2;  			/* Floor primary pipe, ceil 2ndary pipe */ -			pipe_ctx->plane_res.scl_data.recout.height += pipe_ctx->plane_res.scl_data.recout.height % 2; +			pipe_ctx->plane_res.scl_data.recout.height = (pipe_ctx->plane_res.scl_data.recout.height + 1) / 2;  		} else { -			pipe_ctx->plane_res.scl_data.recout.width /= 2; -			pipe_ctx->plane_res.scl_data.recout.x += pipe_ctx->plane_res.scl_data.recout.width; -			pipe_ctx->plane_res.scl_data.recout.width += pipe_ctx->plane_res.scl_data.recout.width % 2; +			pipe_ctx->plane_res.scl_data.recout.x += pipe_ctx->plane_res.scl_data.recout.width / 2; +			pipe_ctx->plane_res.scl_data.recout.width = (pipe_ctx->plane_res.scl_data.recout.width + 1) / 2;  		}  	} else if (pipe_ctx->bottom_pipe &&  			pipe_ctx->bottom_pipe->plane_state == pipe_ctx->plane_state) { @@ -856,6 +852,7 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)  	pipe_ctx->plane_res.scl_data.h_active = timing->h_addressable + timing->h_border_left + timing->h_border_right;  	pipe_ctx->plane_res.scl_data.v_active = timing->v_addressable + timing->v_border_top + timing->v_border_bottom; +  	/* Taps calculations */  	if (pipe_ctx->plane_res.xfm != NULL)  		res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( @@ -864,16 +861,21 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)  	if (pipe_ctx->plane_res.dpp != NULL)  		res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps(  				pipe_ctx->plane_res.dpp, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); -  	if (!res) {  		/* Try 24 bpp linebuffer */  		pipe_ctx->plane_res.scl_data.lb_params.depth = LB_PIXEL_DEPTH_24BPP; -		res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( -			pipe_ctx->plane_res.xfm, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); +		if (pipe_ctx->plane_res.xfm != NULL) +			res = pipe_ctx->plane_res.xfm->funcs->transform_get_optimal_number_of_taps( +					pipe_ctx->plane_res.xfm, +					&pipe_ctx->plane_res.scl_data, +					&plane_state->scaling_quality); -		res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( -			pipe_ctx->plane_res.dpp, &pipe_ctx->plane_res.scl_data, &plane_state->scaling_quality); +		if (pipe_ctx->plane_res.dpp != NULL) +			res = pipe_ctx->plane_res.dpp->funcs->dpp_get_optimal_number_of_taps( +					pipe_ctx->plane_res.dpp, +					&pipe_ctx->plane_res.scl_data, +					&plane_state->scaling_quality);  	}  	if (res) @@ -991,8 +993,10 @@ static struct pipe_ctx *acquire_free_pipe_for_stream(  	head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream); -	if (!head_pipe) +	if (!head_pipe) {  		ASSERT(0); +		return NULL; +	}  	if (!head_pipe->plane_state)  		return head_pipe; @@ -1447,11 +1451,16 @@ static struct stream_encoder *find_first_free_match_stream_enc_for_link(  static struct audio *find_first_free_audio(  		struct resource_context *res_ctx, -		const struct resource_pool *pool) +		const struct resource_pool *pool, +		enum engine_id id)  {  	int i;  	for (i = 0; i < pool->audio_count; i++) {  		if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) { +			/*we have enough audio endpoint, find the matching inst*/ +			if (id != i) +				continue; +  			return pool->audios[i];  		}  	} @@ -1700,7 +1709,7 @@ enum dc_status resource_map_pool_resources(  	    dc_is_audio_capable_signal(pipe_ctx->stream->signal) &&  	    stream->audio_info.mode_count) {  		pipe_ctx->stream_res.audio = find_first_free_audio( -		&context->res_ctx, pool); +		&context->res_ctx, pool, pipe_ctx->stream_res.stream_enc->id);  		/*  		 * Audio assigned in order first come first get. @@ -1765,13 +1774,16 @@ enum dc_status dc_validate_global_state(  	enum dc_status result = DC_ERROR_UNEXPECTED;  	int i, j; +	if (!new_ctx) +		return DC_ERROR_UNEXPECTED; +  	if (dc->res_pool->funcs->validate_global) {  			result = dc->res_pool->funcs->validate_global(dc, new_ctx);  			if (result != DC_OK)  				return result;  	} -	for (i = 0; new_ctx && i < new_ctx->stream_count; i++) { +	for (i = 0; i < new_ctx->stream_count; i++) {  		struct dc_stream_state *stream = new_ctx->streams[i];  		for (j = 0; j < dc->res_pool->pipe_count; j++) { diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c index b00a6040a697..e230cc44a0a7 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c @@ -263,7 +263,6 @@ bool dc_stream_set_cursor_position(  		struct input_pixel_processor *ipp = pipe_ctx->plane_res.ipp;  		struct mem_input *mi = pipe_ctx->plane_res.mi;  		struct hubp *hubp = pipe_ctx->plane_res.hubp; -		struct transform *xfm = pipe_ctx->plane_res.xfm;  		struct dpp *dpp = pipe_ctx->plane_res.dpp;  		struct dc_cursor_position pos_cpy = *position;  		struct dc_cursor_mi_param param = { @@ -294,11 +293,11 @@ bool dc_stream_set_cursor_position(  		if (mi != NULL && mi->funcs->set_cursor_position != NULL)  			mi->funcs->set_cursor_position(mi, &pos_cpy, ¶m); -		if (hubp != NULL && hubp->funcs->set_cursor_position != NULL) -			hubp->funcs->set_cursor_position(hubp, &pos_cpy, ¶m); +		if (!hubp) +			continue; -		if (xfm != NULL && xfm->funcs->set_cursor_position != NULL) -			xfm->funcs->set_cursor_position(xfm, &pos_cpy, ¶m, hubp->curs_attr.width); +		if (hubp->funcs->set_cursor_position != NULL) +			hubp->funcs->set_cursor_position(hubp, &pos_cpy, ¶m);  		if (dpp != NULL && dpp->funcs->set_cursor_position != NULL)  			dpp->funcs->set_cursor_position(dpp, &pos_cpy, ¶m, hubp->curs_attr.width); diff --git a/drivers/gpu/drm/amd/display/dc/dc_helper.c b/drivers/gpu/drm/amd/display/dc/dc_helper.c index 0d84b2a1ccfd..90e81f7ba919 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_helper.c +++ b/drivers/gpu/drm/amd/display/dc/dc_helper.c @@ -1,4 +1,26 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +/*   * dc_helper.c   *   *  Created on: Aug 30, 2016 diff --git a/drivers/gpu/drm/amd/display/dc/dce/Makefile b/drivers/gpu/drm/amd/display/dc/dce/Makefile index 8abec0bed379..11401fd8e535 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for common 'dce' logic  # HW object file under this folder follow similar pattern for HW programming  #   - register offset and/or shift + mask stored in the dec_hw struct diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c index 81c40f8864db..0df9ecb2710c 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c @@ -352,11 +352,11 @@ void dce_aud_az_enable(struct audio *audio)  	uint32_t value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);  	set_reg_field_value(value, 1, -			AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, -			CLOCK_GATING_DISABLE); -		set_reg_field_value(value, 1, -			AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, -			AUDIO_ENABLED); +			    AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, +			    CLOCK_GATING_DISABLE); +	set_reg_field_value(value, 1, +			    AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, +			    AUDIO_ENABLED);  	AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);  	value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL); diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c index 4fd49a16c3b6..e42b6eb1c1f0 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c @@ -87,6 +87,9 @@ static void dce110_update_generic_info_packet(  	 */  	uint32_t max_retries = 50; +	/*we need turn on clock before programming AFMT block*/ +	REG_UPDATE(AFMT_CNTL, AFMT_AUDIO_CLOCK_EN, 1); +  	if (REG(AFMT_VBI_PACKET_CONTROL1)) {  		if (packet_index >= 8)  			ASSERT(0); diff --git a/drivers/gpu/drm/amd/display/dc/dce100/Makefile b/drivers/gpu/drm/amd/display/dc/dce100/Makefile index ea40870624b3..a822d4e2a169 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce100/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'controller' sub-component of DAL.  # It provides the control and status of HW CRTC block. diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c index 90911258bdb3..3ea43e2a9450 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c @@ -1,5 +1,5 @@  /* -* Copyright 2012-15 Advanced Micro Devices, Inc. + * Copyright 2012-15 Advanced Micro Devices, Inc.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h index de8fdf438f9b..2f366d66635d 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.h @@ -1,4 +1,27 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * + */ +/*   * dce100_resource.h   *   *  Created on: 2016-01-20 diff --git a/drivers/gpu/drm/amd/display/dc/dce110/Makefile b/drivers/gpu/drm/amd/display/dc/dce110/Makefile index 98d956e2f218..d564c0eb8b04 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce110/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'controller' sub-component of DAL.  # It provides the control and status of HW CRTC block. diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c index 1229a3315018..d844fadcd56f 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c @@ -991,6 +991,16 @@ void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option)  	struct dc_link *link = stream->sink->link;  	struct dc *dc = pipe_ctx->stream->ctx->dc; +	if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) +		pipe_ctx->stream_res.stream_enc->funcs->stop_hdmi_info_packets( +			pipe_ctx->stream_res.stream_enc); + +	if (dc_is_dp_signal(pipe_ctx->stream->signal)) +		pipe_ctx->stream_res.stream_enc->funcs->stop_dp_info_packets( +			pipe_ctx->stream_res.stream_enc); + +	pipe_ctx->stream_res.stream_enc->funcs->audio_mute_control( +			pipe_ctx->stream_res.stream_enc, true);  	if (pipe_ctx->stream_res.audio) {  		pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); @@ -1015,18 +1025,6 @@ void dce110_disable_stream(struct pipe_ctx *pipe_ctx, int option)  		 */  	} -	if (dc_is_hdmi_signal(pipe_ctx->stream->signal)) -		pipe_ctx->stream_res.stream_enc->funcs->stop_hdmi_info_packets( -			pipe_ctx->stream_res.stream_enc); - -	if (dc_is_dp_signal(pipe_ctx->stream->signal)) -		pipe_ctx->stream_res.stream_enc->funcs->stop_dp_info_packets( -			pipe_ctx->stream_res.stream_enc); - -	pipe_ctx->stream_res.stream_enc->funcs->audio_mute_control( -			pipe_ctx->stream_res.stream_enc, true); - -  	/* blank at encoder level */  	if (dc_is_dp_signal(pipe_ctx->stream->signal)) {  		if (pipe_ctx->stream->sink->link->connector_signal == SIGNAL_TYPE_EDP) @@ -1774,6 +1772,10 @@ static enum dc_status validate_fbc(struct dc *dc,  	if (pipe_ctx->stream->sink->link->psr_enabled)  		return DC_ERROR_UNEXPECTED; +	/* Nothing to compress */ +	if (!pipe_ctx->plane_state) +		return DC_ERROR_UNEXPECTED; +  	/* Only for non-linear tiling */  	if (pipe_ctx->plane_state->tiling_info.gfx8.array_mode == DC_ARRAY_LINEAR_GENERAL)  		return DC_ERROR_UNEXPECTED; @@ -1868,8 +1870,10 @@ static void dce110_reset_hw_ctx_wrap(  				pipe_need_reprogram(pipe_ctx_old, pipe_ctx)) {  			struct clock_source *old_clk = pipe_ctx_old->clock_source; -			/* disable already, no need to disable again */ -			if (pipe_ctx->stream && !pipe_ctx->stream->dpms_off) +			/* Disable if new stream is null. O/w, if stream is +			 * disabled already, no need to disable again. +			 */ +			if (!pipe_ctx->stream || !pipe_ctx->stream->dpms_off)  				core_link_disable_stream(pipe_ctx_old, FREE_ACQUIRED_RESOURCE);  			pipe_ctx_old->stream_res.tg->funcs->set_blank(pipe_ctx_old->stream_res.tg, true); @@ -2862,16 +2866,19 @@ static void dce110_apply_ctx_for_surface(  		int num_planes,  		struct dc_state *context)  { -	int i, be_idx; +	int i;  	if (num_planes == 0)  		return; -	be_idx = -1;  	for (i = 0; i < dc->res_pool->pipe_count; i++) { -		if (stream == context->res_ctx.pipe_ctx[i].stream) { -			be_idx = context->res_ctx.pipe_ctx[i].stream_res.tg->inst; -			break; +		struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i]; +		struct pipe_ctx *old_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i]; + +		if (stream == pipe_ctx->stream) { +			if (!pipe_ctx->top_pipe && +				(pipe_ctx->plane_state || old_pipe_ctx->plane_state)) +				dc->hwss.pipe_control_lock(dc, pipe_ctx, true);  		}  	} @@ -2891,9 +2898,22 @@ static void dce110_apply_ctx_for_surface(  					context->stream_count);  		dce110_program_front_end_for_pipe(dc, pipe_ctx); + +		dc->hwss.update_plane_addr(dc, pipe_ctx); +  		program_surface_visibility(dc, pipe_ctx);  	} + +	for (i = 0; i < dc->res_pool->pipe_count; i++) { +		struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i]; +		struct pipe_ctx *old_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[i]; + +		if ((stream == pipe_ctx->stream) && +			(!pipe_ctx->top_pipe) && +			(pipe_ctx->plane_state || old_pipe_ctx->plane_state)) +			dc->hwss.pipe_control_lock(dc, pipe_ctx, false); +	}  }  static void dce110_power_down_fe(struct dc *dc, int fe_idx) diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c index db96d2b47ff1..42df17f9aa8d 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c @@ -1,5 +1,5 @@  /* -* Copyright 2012-15 Advanced Micro Devices, Inc. + * Copyright 2012-15 Advanced Micro Devices, Inc.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -1037,11 +1037,13 @@ static bool underlay_create(struct dc_context *ctx, struct resource_pool *pool)  	struct dce110_opp *dce110_oppv = kzalloc(sizeof(*dce110_oppv),  						 GFP_KERNEL); -	if ((dce110_tgv == NULL) || -		(dce110_xfmv == NULL) || -		(dce110_miv == NULL) || -		(dce110_oppv == NULL)) -			return false; +	if (!dce110_tgv || !dce110_xfmv || !dce110_miv || !dce110_oppv) { +		kfree(dce110_tgv); +		kfree(dce110_xfmv); +		kfree(dce110_miv); +		kfree(dce110_oppv); +		return false; +	}  	dce110_opp_v_construct(dce110_oppv, ctx); diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c index 67ac737eaa7e..4befce6cd87a 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator.c @@ -1112,10 +1112,7 @@ bool dce110_timing_generator_validate_timing(  	enum signal_type signal)  {  	uint32_t h_blank; -	uint32_t h_back_porch; -	uint32_t hsync_offset = timing->h_border_right + -			timing->h_front_porch; -	uint32_t h_sync_start = timing->h_addressable + hsync_offset; +	uint32_t h_back_porch, hsync_offset, h_sync_start;  	struct dce110_timing_generator *tg110 = DCE110TG_FROM_TG(tg); @@ -1124,6 +1121,9 @@ bool dce110_timing_generator_validate_timing(  	if (!timing)  		return false; +	hsync_offset = timing->h_border_right + timing->h_front_porch; +	h_sync_start = timing->h_addressable + hsync_offset; +  	/* Currently we don't support 3D, so block all 3D timings */  	if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE)  		return false; diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c index 07d9303d5477..59b4cd329715 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_timing_generator_v.c @@ -1,3 +1,26 @@ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #include "dm_services.h"  /* include DCE11 register header files */ diff --git a/drivers/gpu/drm/amd/display/dc/dce112/Makefile b/drivers/gpu/drm/amd/display/dc/dce112/Makefile index 265ac4310d85..8e090446d511 100644 --- a/drivers/gpu/drm/amd/display/dc/dce112/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce112/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'controller' sub-component of DAL.  # It provides the control and status of HW CRTC block. diff --git a/drivers/gpu/drm/amd/display/dc/dce120/Makefile b/drivers/gpu/drm/amd/display/dc/dce120/Makefile index 1779b963525c..37db1f8d45ea 100644 --- a/drivers/gpu/drm/amd/display/dc/dce120/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce120/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'controller' sub-component of DAL.  # It provides the control and status of HW CRTC block. @@ -8,4 +29,4 @@ dce120_hw_sequencer.o  AMD_DAL_DCE120 = $(addprefix $(AMDDALPATH)/dc/dce120/,$(DCE120)) -AMD_DISPLAY_FILES += $(AMD_DAL_DCE120)
\ No newline at end of file +AMD_DISPLAY_FILES += $(AMD_DAL_DCE120) diff --git a/drivers/gpu/drm/amd/display/dc/dce80/Makefile b/drivers/gpu/drm/amd/display/dc/dce80/Makefile index c1105895e5fa..bc388aa4b2f5 100644 --- a/drivers/gpu/drm/amd/display/dc/dce80/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dce80/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'controller' sub-component of DAL.  # It provides the control and status of HW CRTC block. diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile index ebeb88283a14..f565a6042970 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dcn10/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for DCN.  DCN10 = dcn10_resource.o dcn10_ipp.o dcn10_hw_sequencer.o \ diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c index 74e7c82bdc76..a9d55d0dd69e 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c @@ -159,11 +159,10 @@ bool dpp_get_optimal_number_of_taps(  			scl_data->taps.h_taps = 1;  		if (IDENTITY_RATIO(scl_data->ratios.vert))  			scl_data->taps.v_taps = 1; -		/* -		 * Spreadsheet doesn't handle taps_c is one properly, -		 * need to force Chroma to always be scaled to pass -		 * bandwidth validation. -		 */ +		if (IDENTITY_RATIO(scl_data->ratios.horz_c)) +			scl_data->taps.h_taps_c = 1; +		if (IDENTITY_RATIO(scl_data->ratios.vert_c)) +			scl_data->taps.v_taps_c = 1;  	}  	return true; diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h index a9782b1aba47..34daf895f848 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.h @@ -1360,7 +1360,7 @@ void dpp1_cm_set_output_csc_adjustment(  void dpp1_cm_set_output_csc_default(  		struct dpp *dpp_base, -		const struct default_adjustment *default_adjust); +		enum dc_color_space colorspace);  void dpp1_cm_set_gamut_remap(  	struct dpp *dpp, diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c index 40627c244bf5..ed1216b53465 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp_cm.c @@ -225,14 +225,13 @@ void dpp1_cm_set_gamut_remap(  void dpp1_cm_set_output_csc_default(  		struct dpp *dpp_base, -		const struct default_adjustment *default_adjust) +		enum dc_color_space colorspace)  {  	struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base);  	uint32_t ocsc_mode = 0; -	if (default_adjust != NULL) { -		switch (default_adjust->out_color_space) { +	switch (colorspace) {  		case COLOR_SPACE_SRGB:  		case COLOR_SPACE_2020_RGB_FULLRANGE:  			ocsc_mode = 0; @@ -253,7 +252,6 @@ void dpp1_cm_set_output_csc_default(  		case COLOR_SPACE_UNKNOWN:  		default:  			break; -		}  	}  	REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode); diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c index 961ad5c3b454..05dc01e54531 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c @@ -2097,6 +2097,8 @@ static void program_csc_matrix(struct pipe_ctx *pipe_ctx,  			tbl_entry.color_space = color_space;  			//tbl_entry.regval = matrix;  			pipe_ctx->plane_res.dpp->funcs->opp_set_csc_adjustment(pipe_ctx->plane_res.dpp, &tbl_entry); +	} else { +		pipe_ctx->plane_res.dpp->funcs->opp_set_csc_default(pipe_ctx->plane_res.dpp, colorspace);  	}  }  static bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx) diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c index 4c4bd72d4e40..9fc8f827f2a1 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c @@ -912,11 +912,13 @@ static struct pipe_ctx *dcn10_acquire_idle_pipe_for_layer(  	struct pipe_ctx *head_pipe = resource_get_head_pipe_for_stream(res_ctx, stream);  	struct pipe_ctx *idle_pipe = find_idle_secondary_pipe(res_ctx, pool); -	if (!head_pipe) +	if (!head_pipe) {  		ASSERT(0); +		return NULL; +	}  	if (!idle_pipe) -		return false; +		return NULL;  	idle_pipe->stream = head_pipe->stream;  	idle_pipe->stream_res.tg = head_pipe->stream_res.tg; diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c index c7333cdf1802..fced178c8c79 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_timing_generator.c @@ -496,9 +496,6 @@ static bool tgn10_validate_timing(  		timing->timing_3d_format != TIMING_3D_FORMAT_INBAND_FA)  		return false; -	if (timing->timing_3d_format != TIMING_3D_FORMAT_NONE && -		tg->ctx->dc->debug.disable_stereo_support) -		return false;  	/* Temporarily blocking interlacing mode until it's supported */  	if (timing->flags.INTERLACE == 1)  		return false; diff --git a/drivers/gpu/drm/amd/display/dc/dml/Makefile b/drivers/gpu/drm/amd/display/dc/dml/Makefile index 87bab8e8139f..3488af2b5786 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/Makefile +++ b/drivers/gpu/drm/amd/display/dc/dml/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'utils' sub-component of DAL.  # It provides the general basic services required by other DAL  # subcomponents. diff --git a/drivers/gpu/drm/amd/display/dc/gpio/Makefile b/drivers/gpu/drm/amd/display/dc/gpio/Makefile index 70d01a9e9676..562ee189d780 100644 --- a/drivers/gpu/drm/amd/display/dc/gpio/Makefile +++ b/drivers/gpu/drm/amd/display/dc/gpio/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'gpio' sub-component of DAL.  # It provides the control and status of HW GPIO pins. diff --git a/drivers/gpu/drm/amd/display/dc/i2caux/Makefile b/drivers/gpu/drm/amd/display/dc/i2caux/Makefile index 55603400acd9..352885cb4d07 100644 --- a/drivers/gpu/drm/amd/display/dc/i2caux/Makefile +++ b/drivers/gpu/drm/amd/display/dc/i2caux/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'i2c' sub-component of DAL.  # It provides the control and status of HW i2c engine of the adapter. diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_status.h b/drivers/gpu/drm/amd/display/dc/inc/core_status.h index 01df85641684..94fc31080fda 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/core_status.h +++ b/drivers/gpu/drm/amd/display/dc/inc/core_status.h @@ -38,7 +38,7 @@ enum dc_status {  	DC_FAIL_DETACH_SURFACES = 8,  	DC_FAIL_SURFACE_VALIDATE = 9,  	DC_NO_DP_LINK_BANDWIDTH = 10, -	DC_EXCEED_DONGLE_MAX_CLK = 11, +	DC_EXCEED_DONGLE_CAP = 11,  	DC_SURFACE_PIXEL_FORMAT_UNSUPPORTED = 12,  	DC_FAIL_BANDWIDTH_VALIDATE = 13, /* BW and Watermark validation */  	DC_FAIL_SCALING = 14, diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h b/drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h index 83a68460edcd..9420dfb94d39 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/dpp.h @@ -64,7 +64,7 @@ struct dpp_funcs {  	void (*opp_set_csc_default)(  		struct dpp *dpp, -		const struct default_adjustment *default_adjust); +		enum dc_color_space colorspace);  	void (*opp_set_csc_adjustment)(  		struct dpp *dpp, diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h index 3d33bcda7059..498b7f05c5ca 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h @@ -1,4 +1,26 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +/*   * link_encoder.h   *   *  Created on: Oct 6, 2015 diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h index 3050afe8e8a9..b5db1692393c 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h @@ -1,4 +1,26 @@  /* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +/*   * stream_encoder.h   *   */ diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h index 7c08bc62c1f5..ea88997e1bbd 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h @@ -259,13 +259,6 @@ struct transform_funcs {  			struct transform *xfm_base,  			const struct dc_cursor_attributes *attr); -	void (*set_cursor_position)( -			struct transform *xfm_base, -			const struct dc_cursor_position *pos, -			const struct dc_cursor_mi_param *param, -			uint32_t width -			); -  };  const uint16_t *get_filter_2tap_16p(void); diff --git a/drivers/gpu/drm/amd/display/dc/irq/Makefile b/drivers/gpu/drm/amd/display/dc/irq/Makefile index c7e93f7223bd..498515aad4a5 100644 --- a/drivers/gpu/drm/amd/display/dc/irq/Makefile +++ b/drivers/gpu/drm/amd/display/dc/irq/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'audio' sub-component of DAL.  # It provides the control and status of HW adapter resources,  # that are global for the ASIC and sharable between pipes. diff --git a/drivers/gpu/drm/amd/display/dc/virtual/Makefile b/drivers/gpu/drm/amd/display/dc/virtual/Makefile index fc0b7318d9cc..07326d244d50 100644 --- a/drivers/gpu/drm/amd/display/dc/virtual/Makefile +++ b/drivers/gpu/drm/amd/display/dc/virtual/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the virtual sub-component of DAL.  # It provides the control and status of HW CRTC block. diff --git a/drivers/gpu/drm/amd/display/modules/freesync/Makefile b/drivers/gpu/drm/amd/display/modules/freesync/Makefile index db8e0ff6d7a9..fb9a499780e8 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/Makefile +++ b/drivers/gpu/drm/amd/display/modules/freesync/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for the 'freesync' sub-module of DAL.  # diff --git a/drivers/gpu/drm/amd/lib/Makefile b/drivers/gpu/drm/amd/lib/Makefile index 87cd7009e80f..690243001e1a 100644 --- a/drivers/gpu/drm/amd/lib/Makefile +++ b/drivers/gpu/drm/amd/lib/Makefile @@ -1,4 +1,25 @@  # +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +#  # Makefile for AMD library routines, which are used by AMD driver  # components.  # diff --git a/drivers/gpu/drm/amd/powerplay/Makefile b/drivers/gpu/drm/amd/powerplay/Makefile index 8c55c6e254d9..231785a9e24c 100644 --- a/drivers/gpu/drm/amd/powerplay/Makefile +++ b/drivers/gpu/drm/amd/powerplay/Makefile @@ -1,4 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0 +# +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +#  subdir-ccflags-y += \  		-I$(FULL_AMD_PATH)/powerplay/inc/  \ diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile index 824fb6fe54ae..a212c27f2e17 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/Makefile @@ -1,4 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0 +# +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +#  #  # Makefile for the 'hw manager' sub-component of powerplay.  # It provides the hardware management services for the driver. diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c index 67fae834bc67..8de384bf9a8f 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/pp_overdriver.c @@ -1,4 +1,26 @@ -// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #include "pp_overdriver.h"  #include <linux/errno.h> diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu72.h b/drivers/gpu/drm/amd/powerplay/inc/smu72.h index 08cd70c75d8b..9ad1cefff79f 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/smu72.h +++ b/drivers/gpu/drm/amd/powerplay/inc/smu72.h @@ -1,4 +1,26 @@ -/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #ifndef SMU72_H  #define SMU72_H diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h b/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h index b2edbc0c3c4d..2aefbb85f620 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h +++ b/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h @@ -1,4 +1,26 @@ -/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #ifndef SMU72_DISCRETE_H  #define SMU72_DISCRETE_H diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/Makefile b/drivers/gpu/drm/amd/powerplay/smumgr/Makefile index 30d3089d7dba..98e701e4f553 100644 --- a/drivers/gpu/drm/amd/powerplay/smumgr/Makefile +++ b/drivers/gpu/drm/amd/powerplay/smumgr/Makefile @@ -1,4 +1,24 @@ -# SPDX-License-Identifier: GPL-2.0 +# +# Copyright 2017 Advanced Micro Devices, Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +#  #  # Makefile for the 'smu manager' sub-component of powerplay.  # It provides the smu management services for the driver. diff --git a/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h b/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h index 283a0dc25e84..07129e6c31a9 100644 --- a/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h +++ b/drivers/gpu/drm/amd/scheduler/gpu_sched_trace.h @@ -1,4 +1,26 @@ -/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2017 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ +  #if !defined(_GPU_SCHED_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)  #define _GPU_SCHED_TRACE_H_  | 

