]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add outbox notification support for HPD redetect
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Wed, 15 May 2024 18:53:56 +0000 (14:53 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Jun 2024 19:20:20 +0000 (15:20 -0400)
[Why]
HPD sense changes can occur during low power states and need to be
notified from firmware to driver. Upon notification the hotplug
redetection routines should execute.

[How]
Add Support in DMUB srv and DMUB srv stat for receiving these
notifications. DM can hook them up and process the HPD redetection
once received.

Reviewed-by: Duncan Ma <duncan.ma@amd.com>
Acked-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dmub/dmub_srv.h
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
drivers/gpu/drm/amd/display/dmub/src/dmub_srv_stat.c

index cd51c91a822b6d0e2918b875f30fef96104cd54f..85dcf6b4fe926d8d4f21ae46d532a687d4e5cd5c 100644 (file)
@@ -137,6 +137,7 @@ enum dmub_notification_type {
        DMUB_NOTIFICATION_HPD_IRQ,
        DMUB_NOTIFICATION_SET_CONFIG_REPLY,
        DMUB_NOTIFICATION_DPIA_NOTIFICATION,
+       DMUB_NOTIFICATION_HPD_SENSE_NOTIFY,
        DMUB_NOTIFICATION_MAX
 };
 
@@ -560,6 +561,7 @@ struct dmub_notification {
                 * DPIA notification command.
                 */
                struct dmub_rb_cmd_dpia_notification dpia_notification;
+               struct dmub_rb_cmd_hpd_sense_notify_data hpd_sense_notify;
        };
 };
 
index 4db4c5ad51694624d56ff655a24aa830e7d1840f..7f08e95140ef6e9e1296c98e19df83f5e6e48680 100644 (file)
@@ -1285,6 +1285,10 @@ enum dmub_out_cmd_type {
         * Command type used for USB4 DPIA notification
         */
        DMUB_OUT_CMD__DPIA_NOTIFICATION = 5,
+       /**
+        * Command type used for HPD redetect notification
+        */
+       DMUB_OUT_CMD__HPD_SENSE_NOTIFY = 6,
 };
 
 /* DMUB_CMD__DPIA command sub-types. */
@@ -2468,6 +2472,22 @@ struct dmub_rb_cmd_query_hpd_state {
        struct dmub_cmd_hpd_state_query_data data;
 };
 
+/**
+ * struct dmub_rb_cmd_hpd_sense_notify - HPD sense notification data.
+ */
+struct dmub_rb_cmd_hpd_sense_notify_data {
+       uint32_t old_hpd_sense_mask; /**< Old HPD sense mask */
+       uint32_t new_hpd_sense_mask; /**< New HPD sense mask */
+};
+
+/**
+ * struct dmub_rb_cmd_hpd_sense_notify - DMUB_OUT_CMD__HPD_SENSE_NOTIFY command.
+ */
+struct dmub_rb_cmd_hpd_sense_notify {
+       struct dmub_cmd_header header; /**< header */
+       struct dmub_rb_cmd_hpd_sense_notify_data data; /**< payload */
+};
+
 /*
  * Command IDs should be treated as stable ABI.
  * Do not reuse or modify IDs.
@@ -5204,6 +5224,10 @@ union dmub_rb_out_cmd {
         * DPIA notification command.
         */
        struct dmub_rb_cmd_dpia_notification dpia_notification;
+       /**
+        * HPD sense notification command.
+        */
+       struct dmub_rb_cmd_hpd_sense_notify hpd_sense_notify;
 };
 #pragma pack(pop)
 
index 74189102eaecc1bfd93eea80ee9b42552a96337e..cce887cefc0177f2752a0a1a7f5df5aad69fc681 100644 (file)
@@ -113,6 +113,12 @@ enum dmub_status dmub_srv_stat_get_notification(struct dmub_srv *dmub,
                                notify->result = DPIA_BW_ALLOC_CAPS_CHANGED;
                }
                break;
+       case DMUB_OUT_CMD__HPD_SENSE_NOTIFY:
+               notify->type = DMUB_NOTIFICATION_HPD_SENSE_NOTIFY;
+               dmub_memcpy(&notify->hpd_sense_notify,
+                           &cmd.hpd_sense_notify.data,
+                           sizeof(cmd.hpd_sense_notify.data));
+               break;
        default:
                notify->type = DMUB_NOTIFICATION_NO_DATA;
                break;