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: Cruise Hung <cruise.hung@amd.com> Signed-off-by: Peichen Huang <PeiChen.Huang@amd.com> Signed-off-by: Alex Hung <alex.hung@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
a88e727bdb
commit
29e178d139
@@ -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;
|
||||
@@ -6378,6 +6382,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)
|
||||
{
|
||||
|
||||
@@ -68,7 +68,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
|
||||
#define MAX_SUPPORTED_FORMATS 7
|
||||
|
||||
/* Display Core Interfaces */
|
||||
@@ -338,6 +339,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 {
|
||||
@@ -1637,6 +1640,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;
|
||||
@@ -2625,6 +2629,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"
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1866,6 +1866,9 @@ static bool dcn351_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
|
||||
|
||||
@@ -1867,6 +1867,9 @@ static bool dcn36_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
|
||||
|
||||
Reference in New Issue
Block a user