Commit 3251b69b authored by Peichen Huang's avatar Peichen Huang Committed by Alex Deucher
Browse files

drm/amd/display: Add dc cap for dp tunneling



[WHAT]
1. add dc cap for dp tunneling
2. add function to get index of host router

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarCruise Hung <cruise.hung@amd.com>
Signed-off-by: default avatarPeichen Huang <PeiChen.Huang@amd.com>
Signed-off-by: default avatarAlex Hung <alex.hung@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 29e178d1)
Cc: stable@vger.kernel.org
parent a55737da
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ static bool create_links(
	DC_LOG_DC("BIOS object table - end");

	/* Create a link for each usb4 dpia port */
	dc->lowest_dpia_link_index = MAX_LINKS;
	for (i = 0; i < dc->res_pool->usb4_dpia_count; i++) {
		struct link_init_data link_init_params = {0};
		struct dc_link *link;
@@ -253,6 +254,9 @@ static bool create_links(

		link = dc->link_srv->create_link(&link_init_params);
		if (link) {
			if (dc->lowest_dpia_link_index > dc->link_count)
				dc->lowest_dpia_link_index = dc->link_count;

			dc->links[dc->link_count] = link;
			link->dc = dc;
			++dc->link_count;
@@ -6376,6 +6380,35 @@ unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context)
	else
		return 0;
}
/**
 ***********************************************************************************************
 * dc_get_host_router_index: Get index of host router from a dpia link
 *
 * This function return a host router index of the target link. If the target link is dpia link.
 *
 * @param [in] link: target link
 * @param [out] host_router_index: host router index of the target link
 *
 * @return: true if the host router index is found and valid.
 *
 ***********************************************************************************************
 */
bool dc_get_host_router_index(const struct dc_link *link, unsigned int *host_router_index)
{
	struct dc *dc = link->ctx->dc;

	if (link->ep_type != DISPLAY_ENDPOINT_USB4_DPIA)
		return false;

	if (link->link_index < dc->lowest_dpia_link_index)
		return false;

	*host_router_index = (link->link_index - dc->lowest_dpia_link_index) / dc->caps.num_of_dpias_per_host_router;
	if (*host_router_index < dc->caps.num_of_host_routers)
		return true;
	else
		return false;
}

bool dc_is_cursor_limit_pending(struct dc *dc)
{
+7 −1
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ struct dmub_notification;
#define MAX_STREAMS 6
#define MIN_VIEWPORT_SIZE 12
#define MAX_NUM_EDP 2
#define MAX_HOST_ROUTERS_NUM 2
#define MAX_HOST_ROUTERS_NUM 3
#define MAX_DPIA_PER_HOST_ROUTER 2

/* Display Core Interfaces */
struct dc_versions {
@@ -305,6 +306,8 @@ struct dc_caps {
	/* Conservative limit for DCC cases which require ODM4:1 to support*/
	uint32_t dcc_plane_width_limit;
	struct dc_scl_caps scl_caps;
	uint8_t num_of_host_routers;
	uint8_t num_of_dpias_per_host_router;
};

struct dc_bug_wa {
@@ -1603,6 +1606,7 @@ struct dc {

	uint8_t link_count;
	struct dc_link *links[MAX_LINKS];
	uint8_t lowest_dpia_link_index;
	struct link_service *link_srv;

	struct dc_state *current_state;
@@ -2595,6 +2599,8 @@ struct dc_power_profile dc_get_power_profile_for_dc_state(const struct dc_state

unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context);

bool dc_get_host_router_index(const struct dc_link *link, unsigned int *host_router_index);

/* DSC Interfaces */
#include "dc_dsc.h"

+3 −0
Original line number Diff line number Diff line
@@ -1954,6 +1954,9 @@ static bool dcn31_resource_construct(
	dc->caps.color.mpc.ogam_rom_caps.hlg = 0;
	dc->caps.color.mpc.ocsc = 1;

	dc->caps.num_of_host_routers = 2;
	dc->caps.num_of_dpias_per_host_router = 2;

	/* Use pipe context based otg sync logic */
	dc->config.use_pipe_ctx_sync_logic = true;
	dc->config.disable_hbr_audio_dp2 = true;
+3 −0
Original line number Diff line number Diff line
@@ -1885,6 +1885,9 @@ static bool dcn314_resource_construct(

	dc->caps.max_disp_clock_khz_at_vmin = 650000;

	dc->caps.num_of_host_routers = 2;
	dc->caps.num_of_dpias_per_host_router = 2;

	/* Use pipe context based otg sync logic */
	dc->config.use_pipe_ctx_sync_logic = true;

+3 −0
Original line number Diff line number Diff line
@@ -1894,6 +1894,9 @@ static bool dcn35_resource_construct(
	dc->caps.color.mpc.ogam_rom_caps.hlg = 0;
	dc->caps.color.mpc.ocsc = 1;

	dc->caps.num_of_host_routers = 2;
	dc->caps.num_of_dpias_per_host_router = 2;

	/* max_disp_clock_khz_at_vmin is slightly lower than the STA value in order
	 * to provide some margin.
	 * It's expected for furture ASIC to have equal or higher value, in order to
Loading