On 15/03/2023 15:11, Konrad Dybcio wrote: > The BWMON hardware has two sets of registers: one for the monitor itself > and one called "global". It has what seems to be some kind of a head > switch and an interrupt control register. It's usually 0x200 in size. > > On fairly recent SoCs (with the starting point seemingly being moving > the OSM programming to the firmware) these two register sets are > contiguous and overlapping, like this (on sm8450): > > /* notice how base.start == global_base.start+0x100 */ > reg = <0x90b6400 0x300>, <0x90b6300 0x200>; > reg-names = "base", "global_base"; > > Which led to some confusion and the assumption that since the > "interesting" global registers begin right after global_base+0x100, > there's no need to map two separate regions and one can simply subtract > 0x100 from the offsets. > > This is however not the case for anything older than SDM845, as the > global region can appear in seemingly random spots on the register map. > > Handle the case where the global registers are mapped separately to allow > proper functioning of BWMONv4 on MSM8998 and older. Add specific > compatibles for 845, 8280xp, 7280 and 8550 (all of which use the single > reg space scheme) to keep backwards compatibility with old DTs. > > Signed-off-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> > --- > drivers/soc/qcom/icc-bwmon.c | 230 +++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 209 insertions(+), 21 deletions(-) > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> Best regards, Krzysztof