@@ -57,6 +57,7 @@ static int intel_ace2x_bpt_open_stream(struct sdw_intel *sdw, struct sdw_slave *
5757 struct sdw_port_config * pconfig ;
5858 unsigned int pdi0_buf_size_pre_frame ;
5959 unsigned int pdi1_buf_size_pre_frame ;
60+ unsigned int max_data_per_frame ;
6061 unsigned int pdi0_buffer_size_ ;
6162 unsigned int pdi1_buffer_size_ ;
6263 unsigned int pdi0_buffer_size ;
@@ -168,11 +169,24 @@ static int intel_ace2x_bpt_open_stream(struct sdw_intel *sdw, struct sdw_slave *
168169 pdi0_buffer_size = 0 ;
169170 pdi1_buffer_size = 0 ;
170171 num_frames = 0 ;
172+
173+ if (slave -> prop .bra_max_data_per_frame ) {
174+ max_data_per_frame = slave -> prop .bra_max_data_per_frame ;
175+ if (max_data_per_frame > SDW_BRA_MAX_BYTES_PER_FRAME ) {
176+ dev_warn (& slave -> dev ,
177+ "BRA max_data_per_frame %u exceeds limit %u, clamping\n" ,
178+ max_data_per_frame , SDW_BRA_MAX_BYTES_PER_FRAME );
179+ max_data_per_frame = SDW_BRA_MAX_BYTES_PER_FRAME ;
180+ }
181+ } else {
182+ max_data_per_frame = SDW_BRA_MAX_BYTES_PER_FRAME ;
183+ }
184+
171185 /* Add up pdi buffer size and frame numbers of each BPT sections */
172186 for (i = 0 ; i < msg -> sections ; i ++ ) {
173187 ret = sdw_cdns_bpt_find_buffer_sizes (command , cdns -> bus .params .row ,
174188 cdns -> bus .params .col ,
175- msg -> sec [i ].len , SDW_BPT_MSG_MAX_BYTES ,
189+ msg -> sec [i ].len , max_data_per_frame ,
176190 slave -> prop .bra_block_alignment ,
177191 & data_per_frame , & pdi0_buffer_size_ ,
178192 & pdi1_buffer_size_ , & num_frames_ );
@@ -197,7 +211,7 @@ static int intel_ace2x_bpt_open_stream(struct sdw_intel *sdw, struct sdw_slave *
197211 /* Get buffer size of a full frame */
198212 ret = sdw_cdns_bpt_find_buffer_sizes (command , cdns -> bus .params .row ,
199213 cdns -> bus .params .col ,
200- data_per_frame , SDW_BPT_MSG_MAX_BYTES ,
214+ data_per_frame , max_data_per_frame ,
201215 slave -> prop .bra_block_alignment ,
202216 & data_per_frame , & pdi0_buf_size_pre_frame ,
203217 & pdi1_buf_size_pre_frame , & fake_num_frames );
0 commit comments