Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6be7570 authored by Emily Deng's avatar Emily Deng Committed by Alex Deucher
Browse files

drm/amdgpu: Set ip_blocks according variable amdgpu_virtual_display.



For virtual display feature, if user set the option "amdgpu.virtual_display=1"
when load amdgpu.ko. Then need to set the ip_blocks with virtual display ip
blocks. And when enable virtual display, the amdgpu_dal need to be set to zero.

Signed-off-by: default avatarEmily Deng <Emily.Deng@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e443059d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1185,6 +1185,8 @@ static int amdgpu_early_init(struct amdgpu_device *adev)
{
	int i, r;

	DRM_INFO("virtual display enabled:%d\n", amdgpu_virtual_display);

	switch (adev->asic_type) {
	case CHIP_TOPAZ:
	case CHIP_TONGA:
+53 −24
Original line number Diff line number Diff line
@@ -2323,6 +2323,34 @@ static const struct amdgpu_ip_block_version kaveri_ip_blocks_vd[] =

int cik_set_ip_blocks(struct amdgpu_device *adev)
{
	if (amdgpu_virtual_display) {
		adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
		switch (adev->asic_type) {
		case CHIP_BONAIRE:
			adev->ip_blocks = bonaire_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(bonaire_ip_blocks_vd);
			break;
		case CHIP_HAWAII:
			adev->ip_blocks = hawaii_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(hawaii_ip_blocks_vd);
			break;
		case CHIP_KAVERI:
			adev->ip_blocks = kaveri_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(kaveri_ip_blocks_vd);
			break;
		case CHIP_KABINI:
			adev->ip_blocks = kabini_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(kabini_ip_blocks_vd);
			break;
		case CHIP_MULLINS:
			adev->ip_blocks = mullins_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(mullins_ip_blocks_vd);
			break;
		default:
			/* FIXME: not supported yet */
			return -EINVAL;
		}
	} else {
		switch (adev->asic_type) {
		case CHIP_BONAIRE:
			adev->ip_blocks = bonaire_ip_blocks;
@@ -2348,6 +2376,7 @@ int cik_set_ip_blocks(struct amdgpu_device *adev)
			/* FIXME: not supported yet */
			return -EINVAL;
		}
	}

	return 0;
}
+58 −26
Original line number Diff line number Diff line
@@ -1387,6 +1387,37 @@ static const struct amdgpu_ip_block_version cz_ip_blocks_vd[] =

int vi_set_ip_blocks(struct amdgpu_device *adev)
{
	if (amdgpu_virtual_display) {
		adev->mode_info.vsync_timer_enabled = AMDGPU_IRQ_STATE_DISABLE;
		switch (adev->asic_type) {
		case CHIP_TOPAZ:
			adev->ip_blocks = topaz_ip_blocks;
			adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks);
			break;
		case CHIP_FIJI:
			adev->ip_blocks = fiji_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks_vd);
			break;
		case CHIP_TONGA:
			adev->ip_blocks = tonga_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks_vd);
			break;
		case CHIP_POLARIS11:
		case CHIP_POLARIS10:
			adev->ip_blocks = polaris11_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(polaris11_ip_blocks_vd);
			break;

		case CHIP_CARRIZO:
		case CHIP_STONEY:
			adev->ip_blocks = cz_ip_blocks_vd;
			adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks_vd);
			break;
		default:
			/* FIXME: not supported yet */
			return -EINVAL;
		}
	} else {
		switch (adev->asic_type) {
		case CHIP_TOPAZ:
			adev->ip_blocks = topaz_ip_blocks;
@@ -1414,6 +1445,7 @@ int vi_set_ip_blocks(struct amdgpu_device *adev)
			/* FIXME: not supported yet */
			return -EINVAL;
		}
	}

	return 0;
}