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:
parent
b5006f873b
commit
a8b537605e
8 changed files with 52 additions and 8 deletions
|
@ -473,3 +473,8 @@ void dc_link_enable_hpd_filter(struct dc_link *link, bool enable)
|
|||
{
|
||||
link->dc->link_srv->enable_hpd_filter(link, enable);
|
||||
}
|
||||
|
||||
bool dc_link_validate(struct dc *dc, const struct dc_stream_state *streams, const unsigned int count)
|
||||
{
|
||||
return dc->link_srv->validate_dpia_bandwidth(streams, count);
|
||||
}
|
||||
|
|
|
@ -2028,6 +2028,19 @@ void dc_link_handle_usb4_bw_alloc_response(struct dc_link *link,
|
|||
int dc_link_dp_dpia_handle_usb4_bandwidth_allocation_for_link(
|
||||
struct dc_link *link, int peak_bw);
|
||||
|
||||
/*
|
||||
* Validate the BW of all the valid DPIA links to make sure it doesn't exceed
|
||||
* available BW for each host router
|
||||
*
|
||||
* @dc: pointer to dc struct
|
||||
* @stream: pointer to all possible streams
|
||||
* @num_streams: number of valid DPIA streams
|
||||
*
|
||||
* return: TRUE if bw used by DPIAs doesn't exceed available BW else return FALSE
|
||||
*/
|
||||
bool dc_link_validate(struct dc *dc, const struct dc_stream_state *streams,
|
||||
const unsigned int count);
|
||||
|
||||
/* Sink Interfaces - A sink corresponds to a display output device */
|
||||
|
||||
struct dc_container_id {
|
||||
|
|
|
@ -144,6 +144,9 @@ struct link_service {
|
|||
uint32_t (*dp_link_bandwidth_kbps)(
|
||||
const struct dc_link *link,
|
||||
const struct dc_link_settings *link_settings);
|
||||
bool (*validate_dpia_bandwidth)(
|
||||
const struct dc_stream_state *stream,
|
||||
const unsigned int num_streams);
|
||||
|
||||
|
||||
/*************************** DPMS *************************************/
|
||||
|
|
|
@ -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_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue