On 12.09.2023 11:40, Stephan Gerhold wrote: > When the MSM8909 SoC is used together with the PM8909 PMIC the primary > power supply for the CPU (VDD_APC) is shared with other components to > the SoC, namely the VDD_CX power domain typically supplied by the PM8909 > S1 regulator. This means that all votes for necessary performance states > go via the RPM firmware which collects the requirements from all the > processors in the SoC. The RPM firmware then chooses the actual voltage > based on the performance states ("corners"), depending on calibration > values in the NVMEM and other factors. > > The MSM8909 SoC is also sometimes used with the PM8916 or PM660 PMIC. > In that case there is a dedicated regulator connected to VDD_APC and > Linux is responsible to do adaptive voltage scaling using CPR (similar > to the existing code for QCS404). > > This difference can be described in the device tree, by either assigning > the CPU a power domain from RPMPD or from the CPR driver. > > To describe this in a more generic way, use "apc" as power domain name > instead of "cpr". From the Linux point of view there is no CPR involved > when MSM8909 is used together with PM8909. Without checking, I have a vague recollection of CPR output also being called VDD_APCx, so it's a-ok > > Also add a simple function that reads the speedbin from a NVMEM cell > and sets it as-is for opp-supported-hw. The actual bit position can be > described in the device tree without additional driver changes. > > Signed-off-by: Stephan Gerhold <stephan.gerhold@xxxxxxxxxxxxxxx> > --- Acked-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx> One nit below: [...] > static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { > + { .compatible = "qcom,msm8909", .data = &match_data_msm8909 }, > { .compatible = "qcom,apq8096", .data = &match_data_kryo }, msm8909 should come after apq8096 (even if adding apq and not msm was a mistake) Konrad