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

Commit e2800577 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-fixes-4.18' of git://people.freedesktop.org/~agd5f/linux into drm-fixes



A few display and GPUVM fixes for 4.18.

A few more fixes for 4.18. Two display fixes and a fix to avoid a segfault if
the GPU does not power up properly on resume.  These are on top of my pull
from earlier this week.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180712043820.2877-1-alexander.deucher@amd.com
parents f88147e4 02ce6ce2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -927,6 +927,10 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
		r = amdgpu_bo_vm_update_pte(p);
		if (r)
			return r;

		r = reservation_object_reserve_shared(vm->root.base.bo->tbo.resv);
		if (r)
			return r;
	}

	return amdgpu_cs_sync_rings(p);
+3 −1
Original line number Diff line number Diff line
@@ -107,6 +107,9 @@ static void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base,
		return;
	list_add_tail(&base->bo_list, &bo->va);

	if (bo->tbo.type == ttm_bo_type_kernel)
		list_move(&base->vm_status, &vm->relocated);

	if (bo->tbo.resv != vm->root.base.bo->tbo.resv)
		return;

@@ -468,7 +471,6 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
			pt->parent = amdgpu_bo_ref(parent->base.bo);

			amdgpu_vm_bo_base_init(&entry->base, vm, pt);
			list_move(&entry->base.vm_status, &vm->relocated);
		}

		if (level < AMDGPU_VM_PTB) {
+8 −12
Original line number Diff line number Diff line
@@ -83,22 +83,21 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
	enum i2c_mot_mode mot = (msg->request & DP_AUX_I2C_MOT) ?
		I2C_MOT_TRUE : I2C_MOT_FALSE;
	enum ddc_result res;
	uint32_t read_bytes = msg->size;
	ssize_t read_bytes;

	if (WARN_ON(msg->size > 16))
		return -E2BIG;

	switch (msg->request & ~DP_AUX_I2C_MOT) {
	case DP_AUX_NATIVE_READ:
		res = dal_ddc_service_read_dpcd_data(
		read_bytes = dal_ddc_service_read_dpcd_data(
				TO_DM_AUX(aux)->ddc_service,
				false,
				I2C_MOT_UNDEF,
				msg->address,
				msg->buffer,
				msg->size,
				&read_bytes);
		break;
				msg->size);
		return read_bytes;
	case DP_AUX_NATIVE_WRITE:
		res = dal_ddc_service_write_dpcd_data(
				TO_DM_AUX(aux)->ddc_service,
@@ -109,15 +108,14 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
				msg->size);
		break;
	case DP_AUX_I2C_READ:
		res = dal_ddc_service_read_dpcd_data(
		read_bytes = dal_ddc_service_read_dpcd_data(
				TO_DM_AUX(aux)->ddc_service,
				true,
				mot,
				msg->address,
				msg->buffer,
				msg->size,
				&read_bytes);
		break;
				msg->size);
		return read_bytes;
	case DP_AUX_I2C_WRITE:
		res = dal_ddc_service_write_dpcd_data(
				TO_DM_AUX(aux)->ddc_service,
@@ -139,9 +137,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
		 r == DDC_RESULT_SUCESSFULL);
#endif

	if (res != DDC_RESULT_SUCESSFULL)
		return -EIO;
	return read_bytes;
	return msg->size;
}

static enum drm_connector_status
+3 −2
Original line number Diff line number Diff line
@@ -255,8 +255,9 @@ static void pp_to_dc_clock_levels_with_latency(
			DC_DECODE_PP_CLOCK_TYPE(dc_clk_type));

	for (i = 0; i < clk_level_info->num_levels; i++) {
		DRM_DEBUG("DM_PPLIB:\t %d\n", pp_clks->data[i].clocks_in_khz);
		clk_level_info->data[i].clocks_in_khz = pp_clks->data[i].clocks_in_khz;
		DRM_DEBUG("DM_PPLIB:\t %d in 10kHz\n", pp_clks->data[i].clocks_in_khz);
		/* translate 10kHz to kHz */
		clk_level_info->data[i].clocks_in_khz = pp_clks->data[i].clocks_in_khz * 10;
		clk_level_info->data[i].latency_in_us = pp_clks->data[i].latency_in_us;
	}
}
+3 −7
Original line number Diff line number Diff line
@@ -629,14 +629,13 @@ bool dal_ddc_service_query_ddc_data(
	return ret;
}

enum ddc_result dal_ddc_service_read_dpcd_data(
ssize_t dal_ddc_service_read_dpcd_data(
	struct ddc_service *ddc,
	bool i2c,
	enum i2c_mot_mode mot,
	uint32_t address,
	uint8_t *data,
	uint32_t len,
	uint32_t *read)
	uint32_t len)
{
	struct aux_payload read_payload = {
		.i2c_over_aux = i2c,
@@ -653,8 +652,6 @@ enum ddc_result dal_ddc_service_read_dpcd_data(
		.mot = mot
	};

	*read = 0;

	if (len > DEFAULT_AUX_MAX_DATA_SIZE) {
		BREAK_TO_DEBUGGER();
		return DDC_RESULT_FAILED_INVALID_OPERATION;
@@ -664,8 +661,7 @@ enum ddc_result dal_ddc_service_read_dpcd_data(
		ddc->ctx->i2caux,
		ddc->ddc_pin,
		&command)) {
		*read = command.payloads->length;
		return DDC_RESULT_SUCESSFULL;
		return (ssize_t)command.payloads->length;
	}

	return DDC_RESULT_FAILED_OPERATION;
Loading