mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 15:02:40 -04:00
drm/amd/display: Add function pointer for validate bw usb4
[WHY] In order to follow the new protocol of calling link functions [HOW] Add the function pointer to the link_srv Reviewed-by: Kshitij Bhardwaj <kshitij.bhardwaj1@amd.com> Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com> Signed-off-by: Mustapha Ghaddar <mghaddar@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
b5006f873b
commit
a8b537605e
@@ -99,6 +99,7 @@ static void construct_link_service_validation(struct link_service *link_srv)
|
||||
{
|
||||
link_srv->validate_mode_timing = link_validate_mode_timing;
|
||||
link_srv->dp_link_bandwidth_kbps = dp_link_bandwidth_kbps;
|
||||
link_srv->validate_dpia_bandwidth = link_validate_dpia_bandwidth;
|
||||
}
|
||||
|
||||
/* link dpms owns the programming sequence of stream's dpms state associated
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
#include "link_validation.h"
|
||||
#include "protocols/link_dp_capability.h"
|
||||
#include "protocols/link_dp_dpia_bw.h"
|
||||
#include "resource.h"
|
||||
|
||||
#define DC_LOGGER_INIT(logger)
|
||||
@@ -343,3 +344,20 @@ enum dc_status link_validate_mode_timing(
|
||||
|
||||
return DC_OK;
|
||||
}
|
||||
|
||||
bool link_validate_dpia_bandwidth(const struct dc_stream_state *stream, const unsigned int num_streams)
|
||||
{
|
||||
bool ret = true;
|
||||
int bw_needed[MAX_DPIA_NUM];
|
||||
struct dc_link *link[MAX_DPIA_NUM];
|
||||
|
||||
if (!num_streams || num_streams > MAX_DPIA_NUM)
|
||||
return ret;
|
||||
|
||||
for (uint8_t i = 0; i < num_streams; ++i) {
|
||||
|
||||
link[i] = stream[i].link;
|
||||
bw_needed[i] = dc_bandwidth_in_kbps_from_timing(&stream[i].timing);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,11 @@ enum dc_status link_validate_mode_timing(
|
||||
const struct dc_stream_state *stream,
|
||||
struct dc_link *link,
|
||||
const struct dc_crtc_timing *timing);
|
||||
bool link_validate_dpia_bandwidth(
|
||||
const struct dc_stream_state *stream,
|
||||
const unsigned int num_streams);
|
||||
uint32_t dp_link_bandwidth_kbps(
|
||||
const struct dc_link *link,
|
||||
const struct dc_link_settings *link_settings);
|
||||
|
||||
#endif /* __LINK_VALIDATION_H__ */
|
||||
|
||||
@@ -33,10 +33,6 @@
|
||||
#define DC_LOGGER \
|
||||
link->ctx->logger
|
||||
|
||||
/* Number of Host Routers per motherboard is 2 */
|
||||
#define MAX_HR_NUM 2
|
||||
/* Number of DPIA per host router is 2 */
|
||||
#define MAX_DPIA_NUM (MAX_HR_NUM * 2)
|
||||
#define Kbps_TO_Gbps (1000 * 1000)
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
@@ -379,9 +375,8 @@ void dpia_handle_bw_alloc_response(struct dc_link *link, uint8_t bw, uint8_t res
|
||||
// 1. If due to unplug of other sink
|
||||
if (estimated == host_router_total_estimated_bw) {
|
||||
// First update the estimated & max_bw fields
|
||||
if (link->dpia_bw_alloc_config.estimated_bw < estimated) {
|
||||
if (link->dpia_bw_alloc_config.estimated_bw < estimated)
|
||||
link->dpia_bw_alloc_config.estimated_bw = estimated;
|
||||
}
|
||||
}
|
||||
// 2. If due to realloc bw btw 2 dpia due to plug OR realloc unused Bw
|
||||
else {
|
||||
@@ -464,7 +459,7 @@ int link_dp_dpia_allocate_usb4_bandwidth_for_stream(struct dc_link *link, int re
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
bool dpia_validate_usb4_bw(struct dc_link **link, int *bw_needed_per_dpia, uint8_t num_dpias)
|
||||
bool dpia_validate_usb4_bw(struct dc_link **link, int *bw_needed_per_dpia, const unsigned int num_dpias)
|
||||
{
|
||||
bool ret = true;
|
||||
int bw_needed_per_hr[MAX_HR_NUM] = { 0, 0 };
|
||||
|
||||
@@ -28,6 +28,11 @@
|
||||
|
||||
#include "link.h"
|
||||
|
||||
/* Number of Host Routers per motherboard is 2 */
|
||||
#define MAX_HR_NUM 2
|
||||
/* Number of DPIA per host router is 2 */
|
||||
#define MAX_DPIA_NUM (MAX_HR_NUM * 2)
|
||||
|
||||
/*
|
||||
* Host Router BW type
|
||||
*/
|
||||
@@ -92,6 +97,6 @@ void dpia_handle_bw_alloc_response(struct dc_link *link, uint8_t bw, uint8_t res
|
||||
*
|
||||
* return: TRUE if bw used by DPIAs doesn't exceed available BW else return FALSE
|
||||
*/
|
||||
bool dpia_validate_usb4_bw(struct dc_link **link, int *bw_needed, uint8_t num_dpias);
|
||||
bool dpia_validate_usb4_bw(struct dc_link **link, int *bw_needed, const unsigned int num_dpias);
|
||||
|
||||
#endif /* DC_INC_LINK_DP_DPIA_BW_H_ */
|
||||
|
||||
Reference in New Issue
Block a user