21.12.2022 12:35, Sumit Gupta пишет: > > > On 20/12/22 23:40, Dmitry Osipenko wrote: >> External email: Use caution opening links or attachments >> >> >> 20.12.2022 19:02, Sumit Gupta пишет: >>> +static int tegra_emc_icc_get_init_bw(struct icc_node *node, u32 >>> *avg, u32 *peak) >>> +{ >>> + *avg = 0; >>> + *peak = 0; >>> + >>> + return 0; >>> +} >> >> Looks wrong, you should add ICC support to all the drivers first and >> only then enable ICC. I think you added this init_bw() to work around >> the fact that ICC isn't supported by T234 drivers. > > If get_bw hook is not added then max freq is set due to 'INT_MAX' below. > > void icc_node_add(struct icc_node *node, struct icc_provider *provider) > { > .... > /* get the initial bandwidth values and sync them with hardware */ > if (provider->get_bw) { > provider->get_bw(node, &node->init_avg, &node->init_peak); > } else { > node->init_avg = INT_MAX; > node->init_peak = INT_MAX; > } > > So, will have to add the empty functions at least. > > static int tegra_emc_icc_get_init_bw(struct icc_node *node, u32 *avg, > u32 *peak) > { > - *avg = 0; > - *peak = 0; > - > return 0; > } > > Support to all the client drivers can't be added at once as there are > many drivers all with different requirements and handling. This patch > series is the beginning to add the basic interconnect support in new > Tegra SoC's. Support for more clients will be added later one by one or > in batch. This means that bandwidth management isn't working properly. You should leave the freq to INT_MAX and fix the missing integer overflows in the code if any, or read out the BW from FW. Once you'll enable ICC for all drivers, it will start working.