mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
drm/amd/display: Support for DMUB HPD interrupt handling
[WHY] To add support for HPD interrupt handling from DMUB. HPD interrupt could be triggered from outbox1 from DMUB [HOW] 1) Use queue_work to handle hpd task from outbox1 2) Add handle_hpd_irq_helper to share interrupt handling code between legacy and DMUB HPD from outbox1 3) Added DMUB HPD handling in dmub_srv_stat_get_notification(). HPD handling callback function and wake up the DMUB thread. Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Jude Shih <shenshih@amd.com> Tested-by: Daniel Wheeler <Daniel.Wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -47,6 +47,8 @@
|
||||
#define AMDGPU_DM_MAX_CRTC 6
|
||||
|
||||
#define AMDGPU_DM_MAX_NUM_EDP 2
|
||||
|
||||
#define AMDGPU_DMUB_NOTIFICATION_MAX 5
|
||||
/*
|
||||
#include "include/amdgpu_dal_power_if.h"
|
||||
#include "amdgpu_dm_irq.h"
|
||||
@@ -86,6 +88,21 @@ struct dm_compressor_info {
|
||||
uint64_t gpu_addr;
|
||||
};
|
||||
|
||||
typedef void (*dmub_notify_interrupt_callback_t)(struct amdgpu_device *adev, struct dmub_notification *notify);
|
||||
|
||||
/**
|
||||
* struct dmub_hpd_work - Handle time consuming work in low priority outbox IRQ
|
||||
*
|
||||
* @handle_hpd_work: Work to be executed in a separate thread to handle hpd_low_irq
|
||||
* @dmub_notify: notification for callback function
|
||||
* @adev: amdgpu_device pointer
|
||||
*/
|
||||
struct dmub_hpd_work {
|
||||
struct work_struct handle_hpd_work;
|
||||
struct dmub_notification *dmub_notify;
|
||||
struct amdgpu_device *adev;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct vblank_control_work - Work data for vblank control
|
||||
* @work: Kernel work data for the work event
|
||||
@@ -190,8 +207,30 @@ struct amdgpu_display_manager {
|
||||
*/
|
||||
struct dmub_srv *dmub_srv;
|
||||
|
||||
/**
|
||||
* @dmub_notify:
|
||||
*
|
||||
* Notification from DMUB.
|
||||
*/
|
||||
|
||||
struct dmub_notification *dmub_notify;
|
||||
|
||||
/**
|
||||
* @dmub_callback:
|
||||
*
|
||||
* Callback functions to handle notification from DMUB.
|
||||
*/
|
||||
|
||||
dmub_notify_interrupt_callback_t dmub_callback[AMDGPU_DMUB_NOTIFICATION_MAX];
|
||||
|
||||
/**
|
||||
* @dmub_thread_offload:
|
||||
*
|
||||
* Flag to indicate if callback is offload.
|
||||
*/
|
||||
|
||||
bool dmub_thread_offload[AMDGPU_DMUB_NOTIFICATION_MAX];
|
||||
|
||||
/**
|
||||
* @dmub_fb_info:
|
||||
*
|
||||
@@ -439,6 +478,7 @@ struct amdgpu_display_manager {
|
||||
*/
|
||||
struct list_head da_list;
|
||||
struct completion dmub_aux_transfer_done;
|
||||
struct workqueue_struct *delayed_hpd_wq;
|
||||
|
||||
/**
|
||||
* @brightness:
|
||||
|
||||
Reference in New Issue
Block a user