Skip to content

Commit

Permalink
drm/amd/display: Implement HDMI Read Request
Browse files Browse the repository at this point in the history
[Why]
Read Request provides alterative method to polling to
the HDMI sinks that support it.

[How]
Implement Read Request where interrupt can be generated
by the sink.

Reviewed-by: Joshua Aberback <joshua.aberback@amd.com>
Signed-off-by: Chris Park <chris.park@amd.com>
Signed-off-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Tested-by: Mark Broadworth <mark.broadworth@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Chris Park authored and Alex Deucher committed Apr 21, 2025
1 parent f53d0f4 commit 724a4b4
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/amd/display/dc/dc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1436,6 +1436,7 @@ struct dc_scratch_space {
enum signal_type connector_signal;
enum dc_irq_source irq_source_hpd;
enum dc_irq_source irq_source_hpd_rx;/* aka DP Short Pulse */
enum dc_irq_source irq_source_read_request;/* Read Request */

bool is_hpd_filter_disabled;
bool dp_ss_off;
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/amd/display/dc/dc_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ struct dc_edid_caps {

bool edid_hdmi;
bool hdr_supported;
bool rr_capable;

struct dc_panel_patch panel_patch;
};
Expand Down
14 changes: 14 additions & 0 deletions drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,20 @@ enum dc_irq_source dal_irq_get_rx_source(
}
}

enum dc_irq_source dal_irq_get_read_request(
const struct gpio *irq)
{
enum gpio_id id = dal_gpio_get_id(irq);

switch (id) {
case GPIO_ID_HPD:
return (enum dc_irq_source)(DC_IRQ_SOURCE_DCI2C_RR_DDC1 +
dal_gpio_get_enum(irq));
default:
return DC_IRQ_SOURCE_INVALID;
}
}

enum gpio_result dal_irq_setup_hpd_filter(
struct gpio *irq,
struct gpio_hpd_config *config)
Expand Down
7 changes: 7 additions & 0 deletions drivers/gpu/drm/amd/display/dc/irq_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ enum dc_irq_source {
DC_IRQ_SOURCE_DC5_VLINE2,
DC_IRQ_SOURCE_DC6_VLINE2,

DC_IRQ_SOURCE_DCI2C_RR_DDC1,
DC_IRQ_SOURCE_DCI2C_RR_DDC2,
DC_IRQ_SOURCE_DCI2C_RR_DDC3,
DC_IRQ_SOURCE_DCI2C_RR_DDC4,
DC_IRQ_SOURCE_DCI2C_RR_DDC5,
DC_IRQ_SOURCE_DCI2C_RR_DDC6,

DAL_IRQ_SOURCES_NUMBER
};

Expand Down
4 changes: 4 additions & 0 deletions drivers/gpu/drm/amd/display/dc/link/link_factory.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,7 @@ static bool construct_phy(struct dc_link *link,

link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
link->irq_source_hpd_rx = DC_IRQ_SOURCE_INVALID;
link->irq_source_read_request = DC_IRQ_SOURCE_INVALID;
link->link_status.dpcd_caps = &link->dpcd_caps;

link->dc = init_params->dc;
Expand Down Expand Up @@ -514,6 +515,9 @@ static bool construct_phy(struct dc_link *link,
case CONNECTOR_ID_HDMI_TYPE_A:
link->connector_signal = SIGNAL_TYPE_HDMI_TYPE_A;

if (link->hpd_gpio)
link->irq_source_read_request =
dal_irq_get_read_request(link->hpd_gpio);
break;
case CONNECTOR_ID_SINGLE_LINK_DVID:
case CONNECTOR_ID_SINGLE_LINK_DVII:
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/amd/display/include/gpio_service_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ enum dc_irq_source dal_irq_get_source(
enum dc_irq_source dal_irq_get_rx_source(
const struct gpio *irq);

enum dc_irq_source dal_irq_get_read_request(
const struct gpio *irq);

enum gpio_result dal_irq_setup_hpd_filter(
struct gpio *irq,
struct gpio_hpd_config *config);
Expand Down

0 comments on commit 724a4b4

Please sign in to comment.