mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
drm/amd/display: Update LSDMA commands to explicitly handle DCC fields
[Description] - Previously linear copy commands for LSDMA assumed no DCC - Update so that there is explicit assignment for DCC related fields - Caller can 0 out the fields if DCC is not used - For linear copy command don't subtract 1 from the count - this will be done at a lower layer Reviewed-by: Rafal Ostrowski <rafal.ostrowski@amd.com> Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com> Signed-off-by: George Zhang <george.zhang@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
073875c5d2
commit
1f8722455e
|
|
@ -2125,9 +2125,7 @@ bool dmub_lsdma_init(struct dc_dmub_srv *dc_dmub_srv)
|
|||
|
||||
bool dmub_lsdma_send_linear_copy_command(
|
||||
struct dc_dmub_srv *dc_dmub_srv,
|
||||
uint64_t src_addr,
|
||||
uint64_t dst_addr,
|
||||
uint32_t count
|
||||
struct lsdma_linear_copy_params copy_data
|
||||
)
|
||||
{
|
||||
struct dc_context *dc_ctx = dc_dmub_srv->ctx;
|
||||
|
|
@ -2142,11 +2140,20 @@ bool dmub_lsdma_send_linear_copy_command(
|
|||
cmd.cmd_common.header.sub_type = DMUB_CMD__LSDMA_LINEAR_COPY;
|
||||
wait_type = DM_DMUB_WAIT_TYPE_NO_WAIT;
|
||||
|
||||
lsdma_data->u.linear_copy_data.count = count - 1; // LSDMA controller expects bytes to copy -1
|
||||
lsdma_data->u.linear_copy_data.src_lo = src_addr & 0xFFFFFFFF;
|
||||
lsdma_data->u.linear_copy_data.src_hi = (src_addr >> 32) & 0xFFFFFFFF;
|
||||
lsdma_data->u.linear_copy_data.dst_lo = dst_addr & 0xFFFFFFFF;
|
||||
lsdma_data->u.linear_copy_data.dst_hi = (dst_addr >> 32) & 0xFFFFFFFF;
|
||||
lsdma_data->u.linear_copy_data.count = copy_data.count;
|
||||
lsdma_data->u.linear_copy_data.src_lo = copy_data.src_lo;
|
||||
lsdma_data->u.linear_copy_data.src_hi = copy_data.src_hi;
|
||||
lsdma_data->u.linear_copy_data.dst_lo = copy_data.dst_lo;
|
||||
lsdma_data->u.linear_copy_data.dst_hi = copy_data.dst_hi;
|
||||
lsdma_data->u.linear_copy_data.tmz = copy_data.tmz;
|
||||
lsdma_data->u.linear_copy_data.data_format = copy_data.data_format;
|
||||
lsdma_data->u.linear_copy_data.num_type = copy_data.num_type;
|
||||
lsdma_data->u.linear_copy_data.read_compress = copy_data.read_compress;
|
||||
lsdma_data->u.linear_copy_data.write_compress = copy_data.write_compress;
|
||||
lsdma_data->u.linear_copy_data.max_com = copy_data.max_com;
|
||||
lsdma_data->u.linear_copy_data.max_uncom = copy_data.max_uncom;
|
||||
lsdma_data->u.linear_copy_data.cache_policy_src = copy_data.cache_policy_src;
|
||||
lsdma_data->u.linear_copy_data.cache_policy_dst = copy_data.cache_policy_dst;
|
||||
|
||||
result = dc_wake_and_execute_dmub_cmd(dc_ctx, &cmd, wait_type);
|
||||
|
||||
|
|
@ -2191,6 +2198,12 @@ bool dmub_lsdma_send_linear_sub_window_copy_command(
|
|||
lsdma_data->u.linear_sub_window_copy_data.rect_y = copy_data.rect_y;
|
||||
lsdma_data->u.linear_sub_window_copy_data.src_cache_policy = copy_data.src_cache_policy;
|
||||
lsdma_data->u.linear_sub_window_copy_data.dst_cache_policy = copy_data.dst_cache_policy;
|
||||
lsdma_data->u.linear_sub_window_copy_data.data_format = copy_data.data_format;
|
||||
lsdma_data->u.linear_sub_window_copy_data.num_type = copy_data.num_type;
|
||||
lsdma_data->u.linear_sub_window_copy_data.read_compress = copy_data.read_compress;
|
||||
lsdma_data->u.linear_sub_window_copy_data.write_compress = copy_data.write_compress;
|
||||
lsdma_data->u.linear_sub_window_copy_data.max_com = copy_data.max_com;
|
||||
lsdma_data->u.linear_sub_window_copy_data.max_uncom = copy_data.max_uncom;
|
||||
|
||||
result = dc_wake_and_execute_dmub_cmd(dc_ctx, &cmd, wait_type);
|
||||
|
||||
|
|
|
|||
|
|
@ -203,11 +203,31 @@ void dc_dmub_srv_fams2_passthrough_flip(
|
|||
int surface_count);
|
||||
|
||||
bool dmub_lsdma_init(struct dc_dmub_srv *dc_dmub_srv);
|
||||
|
||||
struct lsdma_linear_copy_params {
|
||||
uint32_t src_lo;
|
||||
uint32_t src_hi;
|
||||
|
||||
uint32_t dst_lo;
|
||||
uint32_t dst_hi;
|
||||
|
||||
uint32_t count : 30;
|
||||
uint32_t read_compress : 2;
|
||||
|
||||
uint32_t tmz : 4;
|
||||
uint32_t cache_policy_src : 3;
|
||||
uint32_t cache_policy_dst : 3;
|
||||
uint32_t data_format : 6;
|
||||
uint32_t num_type : 3;
|
||||
uint32_t write_compress : 2;
|
||||
uint32_t max_com : 2;
|
||||
uint32_t max_uncom : 1;
|
||||
uint32_t reserved0 : 8;
|
||||
};
|
||||
|
||||
bool dmub_lsdma_send_linear_copy_command(
|
||||
struct dc_dmub_srv *dc_dmub_srv,
|
||||
uint64_t src_addr,
|
||||
uint64_t dst_addr,
|
||||
uint32_t count);
|
||||
struct lsdma_linear_copy_params copy_data);
|
||||
|
||||
struct lsdma_linear_sub_window_copy_params {
|
||||
uint32_t src_lo;
|
||||
|
|
@ -235,7 +255,13 @@ struct lsdma_linear_sub_window_copy_params {
|
|||
uint32_t element_size : 3;
|
||||
uint32_t src_cache_policy : 3;
|
||||
uint32_t dst_cache_policy : 3;
|
||||
uint32_t padding : 19;
|
||||
uint32_t data_format : 6;
|
||||
uint32_t num_type : 3;
|
||||
uint32_t read_compress : 2;
|
||||
uint32_t write_compress : 2;
|
||||
uint32_t max_com : 2;
|
||||
uint32_t max_uncom : 1;
|
||||
uint32_t reserved0 : 3;
|
||||
};
|
||||
|
||||
bool dmub_lsdma_send_linear_sub_window_copy_command(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user