Commit 5d72e247 authored by Hamza Mahfooz's avatar Hamza Mahfooz Committed by Alex Deucher
Browse files

drm/amd/display: switch DC over to the new DRM logging macros



For multi-GPU systems it is difficult to tell which GPU a particular
message is being printed for and that is undesirable because it
complicates debugging efforts. Also, the new macros allow us to enable
logging for particular parts of the codebase more selectively (since we
no longer need to throw everything at DRM_DEBUG_KMS()). So, for the
reasons outlined above we should switch to the new macros.

We can accomplish this by using the existing DC_LOGGER code to pass
around the relevant `struct drm_device` which will be fed to the new
macros in logger_types.h. Also, we must get rid of all instances of the
DC_LOG_.*() functions that are currently in amdgpu_dm since we don't use
the DC logger there and we can simply refer to the macros directly
there instead.

Reviewed-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarHamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a73d4e88
Loading
Loading
Loading
Loading
+37 −29
Original line number Diff line number Diff line
@@ -413,6 +413,7 @@ static void dm_pflip_high_irq(void *interrupt_params)
	struct amdgpu_crtc *amdgpu_crtc;
	struct common_irq_params *irq_params = interrupt_params;
	struct amdgpu_device *adev = irq_params->adev;
	struct drm_device *dev = adev_to_drm(adev);
	unsigned long flags;
	struct drm_pending_vblank_event *e;
	u32 vpos, hpos, v_blank_start, v_blank_end;
@@ -423,18 +424,17 @@ static void dm_pflip_high_irq(void *interrupt_params)
	/* IRQ could occur when in initial stage */
	/* TODO work and BO cleanup */
	if (amdgpu_crtc == NULL) {
		DC_LOG_PFLIP("CRTC is null, returning.\n");
		drm_dbg_state(dev, "CRTC is null, returning.\n");
		return;
	}

	spin_lock_irqsave(&adev_to_drm(adev)->event_lock, flags);

	if (amdgpu_crtc->pflip_status != AMDGPU_FLIP_SUBMITTED) {
		DC_LOG_PFLIP("amdgpu_crtc->pflip_status = %d !=AMDGPU_FLIP_SUBMITTED(%d) on crtc:%d[%p]\n",
			     amdgpu_crtc->pflip_status,
			     AMDGPU_FLIP_SUBMITTED,
			     amdgpu_crtc->crtc_id,
			     amdgpu_crtc);
		drm_dbg_state(dev,
			      "amdgpu_crtc->pflip_status = %d != AMDGPU_FLIP_SUBMITTED(%d) on crtc:%d[%p]\n",
			      amdgpu_crtc->pflip_status, AMDGPU_FLIP_SUBMITTED,
			      amdgpu_crtc->crtc_id, amdgpu_crtc);
		spin_unlock_irqrestore(&adev_to_drm(adev)->event_lock, flags);
		return;
	}
@@ -500,9 +500,9 @@ static void dm_pflip_high_irq(void *interrupt_params)
	amdgpu_crtc->pflip_status = AMDGPU_FLIP_NONE;
	spin_unlock_irqrestore(&adev_to_drm(adev)->event_lock, flags);

	DC_LOG_PFLIP("crtc:%d[%p], pflip_stat:AMDGPU_FLIP_NONE, vrr[%d]-fp %d\n",
		     amdgpu_crtc->crtc_id, amdgpu_crtc,
		     vrr_active, (int) !e);
	drm_dbg_state(dev,
		      "crtc:%d[%p], pflip_stat:AMDGPU_FLIP_NONE, vrr[%d]-fp %d\n",
		      amdgpu_crtc->crtc_id, amdgpu_crtc, vrr_active, (int)!e);
}

static void dm_vupdate_high_irq(void *interrupt_params)
@@ -532,8 +532,8 @@ static void dm_vupdate_high_irq(void *interrupt_params)
			atomic64_set(&irq_params->previous_timestamp, vblank->time);
		}

		DC_LOG_VBLANK("crtc:%d, vupdate-vrr:%d\n",
			      acrtc->crtc_id,
		drm_dbg_vbl(drm_dev,
			    "crtc:%d, vupdate-vrr:%d\n", acrtc->crtc_id,
			    vrr_active);

		/* Core vblank handling is done here after end of front-porch in
@@ -585,7 +585,8 @@ static void dm_crtc_high_irq(void *interrupt_params)

	vrr_active = amdgpu_dm_crtc_vrr_active_irq(acrtc);

	DC_LOG_VBLANK("crtc:%d, vupdate-vrr:%d, planes:%d\n", acrtc->crtc_id,
	drm_dbg_vbl(adev_to_drm(adev),
		    "crtc:%d, vupdate-vrr:%d, planes:%d\n", acrtc->crtc_id,
		    vrr_active, acrtc->dm_irq_params.active_planes);

	/**
@@ -2700,6 +2701,7 @@ static void emulated_link_detect(struct dc_link *link)
	struct display_sink_capability sink_caps = { 0 };
	enum dc_edid_status edid_status;
	struct dc_context *dc_ctx = link->ctx;
	struct drm_device *dev = adev_to_drm(dc_ctx->driver_context);
	struct dc_sink *sink = NULL;
	struct dc_sink *prev_sink = NULL;

@@ -2749,7 +2751,7 @@ static void emulated_link_detect(struct dc_link *link)
	}

	default:
		DC_ERROR("Invalid connector type! signal:%d\n",
		drm_err(dev, "Invalid connector type! signal:%d\n",
			link->connector_signal);
		return;
	}
@@ -2759,7 +2761,7 @@ static void emulated_link_detect(struct dc_link *link)

	sink = dc_sink_create(&sink_init_data);
	if (!sink) {
		DC_ERROR("Failed to create sink!\n");
		drm_err(dev, "Failed to create sink!\n");
		return;
	}

@@ -2772,7 +2774,7 @@ static void emulated_link_detect(struct dc_link *link)
			sink);

	if (edid_status != EDID_OK)
		DC_ERROR("Failed to read EDID");
		drm_err(dev, "Failed to read EDID\n");

}

@@ -2791,7 +2793,7 @@ static void dm_gpureset_commit_state(struct dc_state *dc_state,
	bundle = kzalloc(sizeof(*bundle), GFP_KERNEL);

	if (!bundle) {
		dm_error("Failed to allocate update bundle\n");
		drm_err(dm->ddev, "Failed to allocate update bundle\n");
		goto cleanup;
	}

@@ -3243,7 +3245,8 @@ void amdgpu_dm_update_connector_after_detect(
			aconnector->timing_requested =
				kzalloc(sizeof(struct dc_crtc_timing), GFP_KERNEL);
			if (!aconnector->timing_requested)
				dm_error("failed to create aconnector->requested_timing\n");
				drm_err(dev,
					"failed to create aconnector->requested_timing\n");
		}

		drm_connector_update_edid_property(connector, aconnector->edid);
@@ -6159,8 +6162,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
			requested_bpc);

	if (aconnector->timing_changed) {
		DC_LOG_DEBUG("%s: overriding timing for automated test, bpc %d, changing to %d\n",
				__func__,
		drm_dbg(aconnector->base.dev,
			"overriding timing for automated test, bpc %d, changing to %d\n",
			stream->timing.display_color_depth,
			aconnector->timing_requested->display_color_depth);
		stream->timing = *aconnector->timing_requested;
@@ -7882,7 +7885,8 @@ static void prepare_flip_isr(struct amdgpu_crtc *acrtc)
	/* Mark this event as consumed */
	acrtc->base.state->event = NULL;

	DC_LOG_PFLIP("crtc:%d, pflip_stat:AMDGPU_FLIP_SUBMITTED\n",
	drm_dbg_state(acrtc->base.dev,
		      "crtc:%d, pflip_stat:AMDGPU_FLIP_SUBMITTED\n",
		      acrtc->crtc_id);
}

@@ -8126,7 +8130,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
	bundle = kzalloc(sizeof(*bundle), GFP_KERNEL);

	if (!bundle) {
		dm_error("Failed to allocate update bundle\n");
		drm_err(dev, "Failed to allocate update bundle\n");
		goto cleanup;
	}

@@ -8714,7 +8718,9 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
				status = dc_stream_get_status_from_state(dc_state,
									 dm_new_crtc_state->stream);
			if (!status)
				DC_ERR("got no status for stream %p on acrtc%p\n", dm_new_crtc_state->stream, acrtc);
				drm_err(dev,
					"got no status for stream %p on acrtc%p\n",
					dm_new_crtc_state->stream, acrtc);
			else
				acrtc->otg_inst = status->primary_otg_inst;
		}
@@ -10902,7 +10908,8 @@ void dm_write_reg_func(const struct dc_context *ctx, uint32_t address,
{
#ifdef DM_CHECK_ADDR_0
	if (address == 0) {
		DC_ERR("invalid register write. address = 0");
		drm_err(adev_to_drm(ctx->driver_context),
			"invalid register write. address = 0");
		return;
	}
#endif
@@ -10916,7 +10923,8 @@ uint32_t dm_read_reg_func(const struct dc_context *ctx, uint32_t address,
	u32 value;
#ifdef DM_CHECK_ADDR_0
	if (address == 0) {
		DC_ERR("invalid register read; address = 0\n");
		drm_err(adev_to_drm(ctx->driver_context),
			"invalid register read; address = 0\n");
		return 0;
	}
#endif
+40 −29
Original line number Diff line number Diff line
@@ -535,7 +535,8 @@ bool dm_helpers_dp_read_dpcd(
	struct amdgpu_dm_connector *aconnector = link->priv;

	if (!aconnector) {
		DC_LOG_DC("Failed to find connector for link!\n");
		drm_dbg_dp(aconnector->base.dev,
			   "Failed to find connector for link!\n");
		return false;
	}

@@ -657,7 +658,7 @@ static bool execute_synaptics_rc_command(struct drm_dp_aux *aux,
		drm_dp_dpcd_read(aux, SYNAPTICS_RC_DATA, data, length);
	}

	DC_LOG_DC("%s: success = %d\n", __func__, success);
	drm_dbg_dp(aux->drm_dev, "success = %d\n", success);

	return success;
}
@@ -666,7 +667,7 @@ static void apply_synaptics_fifo_reset_wa(struct drm_dp_aux *aux)
{
	unsigned char data[16] = {0};

	DC_LOG_DC("Start %s\n", __func__);
	drm_dbg_dp(aux->drm_dev, "Start\n");

	// Step 2
	data[0] = 'P';
@@ -724,7 +725,7 @@ static void apply_synaptics_fifo_reset_wa(struct drm_dp_aux *aux)
	if (!execute_synaptics_rc_command(aux, true, 0x02, 0, 0, NULL))
		return;

	DC_LOG_DC("Done %s\n", __func__);
	drm_dbg_dp(aux->drm_dev, "Done\n");
}

/* MST Dock */
@@ -737,7 +738,8 @@ static uint8_t write_dsc_enable_synaptics_non_virtual_dpcd_mst(
{
	uint8_t ret = 0;

	DC_LOG_DC("Configure DSC to non-virtual dpcd synaptics\n");
	drm_dbg_dp(aux->drm_dev,
		   "Configure DSC to non-virtual dpcd synaptics\n");

	if (enable) {
		/* When DSC is enabled on previous boot and reboot with the hub,
@@ -775,7 +777,9 @@ bool dm_helpers_dp_write_dsc_enable(
	static const uint8_t DSC_DECODING = 0x01;
	static const uint8_t DSC_PASSTHROUGH = 0x02;

	struct amdgpu_dm_connector *aconnector;
	struct amdgpu_dm_connector *aconnector =
		(struct amdgpu_dm_connector *)stream->dm_stream_context;
	struct drm_device *dev = aconnector->base.dev;
	struct drm_dp_mst_port *port;
	uint8_t enable_dsc = enable ? DSC_DECODING : DSC_DISABLE;
	uint8_t enable_passthrough = enable ? DSC_PASSTHROUGH : DSC_DISABLE;
@@ -785,8 +789,6 @@ bool dm_helpers_dp_write_dsc_enable(
		return false;

	if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {
		aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;

		if (!aconnector->dsc_aux)
			return false;

@@ -803,20 +805,23 @@ bool dm_helpers_dp_write_dsc_enable(
				ret = drm_dp_dpcd_write(port->passthrough_aux,
							DP_DSC_ENABLE,
							&enable_passthrough, 1);
				DC_LOG_DC("Sent DSC pass-through enable to virtual dpcd port, ret = %u\n",
				drm_dbg_dp(dev,
					   "Sent DSC pass-through enable to virtual dpcd port, ret = %u\n",
					   ret);
			}

			ret = drm_dp_dpcd_write(aconnector->dsc_aux,
						DP_DSC_ENABLE, &enable_dsc, 1);
			DC_LOG_DC("Sent DSC decoding enable to %s port, ret = %u\n",
			drm_dbg_dp(dev,
				   "Sent DSC decoding enable to %s port, ret = %u\n",
				   (port->passthrough_aux) ? "remote RX" :
				   "virtual dpcd",
				   ret);
		} else {
			ret = drm_dp_dpcd_write(aconnector->dsc_aux,
						DP_DSC_ENABLE, &enable_dsc, 1);
			DC_LOG_DC("Sent DSC decoding disable to %s port, ret = %u\n",
			drm_dbg_dp(dev,
				   "Sent DSC decoding disable to %s port, ret = %u\n",
				   (port->passthrough_aux) ? "remote RX" :
				   "virtual dpcd",
				   ret);
@@ -825,7 +830,8 @@ bool dm_helpers_dp_write_dsc_enable(
				ret = drm_dp_dpcd_write(port->passthrough_aux,
							DP_DSC_ENABLE,
							&enable_passthrough, 1);
				DC_LOG_DC("Sent DSC pass-through disable to virtual dpcd port, ret = %u\n",
				drm_dbg_dp(dev,
					   "Sent DSC pass-through disable to virtual dpcd port, ret = %u\n",
					   ret);
			}
		}
@@ -834,10 +840,14 @@ bool dm_helpers_dp_write_dsc_enable(
	if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT || stream->signal == SIGNAL_TYPE_EDP) {
		if (stream->sink->link->dpcd_caps.dongle_type == DISPLAY_DONGLE_NONE) {
			ret = dm_helpers_dp_write_dpcd(ctx, stream->link, DP_DSC_ENABLE, &enable_dsc, 1);
			DC_LOG_DC("Send DSC %s to SST RX\n", enable_dsc ? "enable" : "disable");
			drm_dbg_dp(dev,
				   "Send DSC %s to SST RX\n",
				   enable_dsc ? "enable" : "disable");
		} else if (stream->sink->link->dpcd_caps.dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER) {
			ret = dm_helpers_dp_write_dpcd(ctx, stream->link, DP_DSC_ENABLE, &enable_dsc, 1);
			DC_LOG_DC("Send DSC %s to DP-HDMI PCON\n", enable_dsc ? "enable" : "disable");
			drm_dbg_dp(dev,
				   "Send DSC %s to DP-HDMI PCON\n",
				   enable_dsc ? "enable" : "disable");
		}
	}

@@ -1106,6 +1116,7 @@ bool dm_helpers_dp_handle_test_pattern_request(
	struct pipe_ctx *pipes = link->dc->current_state->res_ctx.pipe_ctx;
	struct pipe_ctx *pipe_ctx = NULL;
	struct amdgpu_dm_connector *aconnector = link->priv;
	struct drm_device *dev = aconnector->base.dev;
	int i;

	for (i = 0; i < MAX_PIPES; i++) {
@@ -1183,8 +1194,8 @@ bool dm_helpers_dp_handle_test_pattern_request(
		&& pipe_ctx->stream->timing.display_color_depth != requestColorDepth)
		|| (requestPixelEncoding != PIXEL_ENCODING_UNDEFINED
		&& pipe_ctx->stream->timing.pixel_encoding != requestPixelEncoding)) {
		DC_LOG_DEBUG("%s: original bpc %d pix encoding %d, changing to %d  %d\n",
				__func__,
		drm_dbg(dev,
			"original bpc %d pix encoding %d, changing to %d  %d\n",
			pipe_ctx->stream->timing.display_color_depth,
			pipe_ctx->stream->timing.pixel_encoding,
			requestColorDepth,
@@ -1199,7 +1210,7 @@ bool dm_helpers_dp_handle_test_pattern_request(
		if (aconnector->timing_requested)
			*aconnector->timing_requested = pipe_ctx->stream->timing;
		else
			DC_LOG_ERROR("%s: timing storage failed\n", __func__);
			drm_err(dev, "timing storage failed\n");

	}

+14 −8
Original line number Diff line number Diff line
@@ -173,7 +173,8 @@ amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
		if (dc_link->sink_count)
			dc_link_remove_remote_sink(dc_link, dc_sink);

		DC_LOG_MST("DM_MST: remove remote sink 0x%p, %d remaining\n",
		drm_dbg_dp(connector->dev,
			   "DM_MST: remove remote sink 0x%p, %d remaining\n",
			   dc_sink, dc_link->sink_count);

		dc_sink_release(dc_sink);
@@ -325,8 +326,10 @@ static int dm_dp_mst_get_modes(struct drm_connector *connector)
					return 0;
				}

				DC_LOG_MST("DM_MST: add remote sink 0x%p, %d remaining\n",
					dc_sink, aconnector->dc_link->sink_count);
				drm_dbg_dp(connector->dev,
					   "DM_MST: add remote sink 0x%p, %d remaining\n",
					   dc_sink,
					   aconnector->dc_link->sink_count);

				dc_sink->priv = aconnector;
				aconnector->dc_sink = dc_sink;
@@ -361,7 +364,8 @@ static int dm_dp_mst_get_modes(struct drm_connector *connector)
			return 0;
		}

		DC_LOG_MST("DM_MST: add remote sink 0x%p, %d remaining\n",
		drm_dbg_dp(connector->dev,
			   "DM_MST: add remote sink 0x%p, %d remaining\n",
			   dc_sink, aconnector->dc_link->sink_count);

		dc_sink->priv = aconnector;
@@ -481,8 +485,10 @@ dm_dp_mst_detect(struct drm_connector *connector,
		if (aconnector->dc_link->sink_count)
			dc_link_remove_remote_sink(aconnector->dc_link, aconnector->dc_sink);

		DC_LOG_MST("DM_MST: remove remote sink 0x%p, %d remaining\n",
			aconnector->dc_link, aconnector->dc_link->sink_count);
		drm_dbg_dp(connector->dev,
			   "DM_MST: remove remote sink 0x%p, %d remaining\n",
			   aconnector->dc_link,
			   aconnector->dc_link->sink_count);

		dc_sink_release(aconnector->dc_sink);
		aconnector->dc_sink = NULL;
+3 −5
Original line number Diff line number Diff line
@@ -1237,10 +1237,8 @@ void amdgpu_dm_plane_handle_cursor_update(struct drm_plane *plane,
	if (!plane->state->fb && !old_plane_state->fb)
		return;

	DC_LOG_CURSOR("%s: crtc_id=%d with size %d to %d\n",
		      __func__,
		      amdgpu_crtc->crtc_id,
		      plane->state->crtc_w,
	drm_dbg_atomic(plane->dev, "crtc_id=%d with size %d to %d\n",
		       amdgpu_crtc->crtc_id, plane->state->crtc_w,
		       plane->state->crtc_h);

	ret = get_cursor_position(plane, crtc, &position);
+3 −0
Original line number Diff line number Diff line
@@ -2746,6 +2746,7 @@ static enum bp_result bios_get_board_layout_info(
	struct board_layout_info *board_layout_info)
{
	unsigned int i;
	struct bios_parser *bp;
	enum bp_result record_result;

	const unsigned int slot_index_to_vbios_id[MAX_BOARD_SLOTS] = {
@@ -2754,6 +2755,8 @@ static enum bp_result bios_get_board_layout_info(
		0, 0
	};

	bp = BP_FROM_DCB(dcb);

	if (board_layout_info == NULL) {
		DC_LOG_DETECTION_EDID_PARSER("Invalid board_layout_info\n");
		return BP_RESULT_BADINPUT;
Loading