1. 07 Jan, 2021 1 commit
  2. 05 Jan, 2021 3 commits
    • Danny Lin's avatar
      arm64: dts: qcom: sm8150: Add CPU capacities and energy model · 5b2dae72
      Danny Lin authored
      Power and performance measurements were made using my freqbench [1]
      benchmark coordinator, which isolates, offlines, and disables the timer
      tick on test CPUs to maximize accuracy. It uses EEMBC CoreMark [2] as
      the workload and measures power usage using the PM8150B PMIC's fuel
      gauge.
      
      The energy model dynamic-power-coefficient values were calculated with
          DPC = µW / MHz / V^2
      for each OPP, and averaged across all OPPs within each cluster for the
      final coefficient. Voltages were obtained from the qcom-cpufreq-hw
      driver that reads voltages from the OSM LUT programmed into the SoC.
      
      Normalized DMIPS/MHz capacity scale values for each CPU were calculated
      from CoreMarks/MHz (CoreMark iterations per second per MHz), which
      serves the same purpose. For each CPU, the final capacity-dmips-mhz
      value is the C/MHz value of its maximum frequency normalized to
      SCHED_CAPACITY_SCALE (1024) for the fastest CPU in the system.
      
      An Asus ZenFone 6 device running a downstream Qualcomm 4.14 kernel
      (LA.UM.8.1.r1-15600-sm8150.0) was used for benchmarks to ensure proper
      frequency scaling and other low-level controls.
      
      Raw benchmark results can be found in the freqbench repository [3].
      Below is a human-readable summary:
      
      Frequency domains: cpu1 cpu4 cpu7
      Offline CPUs: cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7
      Baseline power usage: 1400 mW
      
      ===== CPU 1 =====
      Frequencies: 300 403 499 576 672 768 844 940 1036 1113 1209 1305 1382 1478 1555 1632 1708 1785
      
       300:  1114     3.7 C/MHz     52 mW   11.8 J   21.3 I/mJ   224.4 s
       403:  1497     3.7 C/MHz     57 mW    9.5 J   26.2 I/mJ   167.0 s
       499:  1854     3.7 C/MHz     73 mW    9.8 J   25.5 I/mJ   134.9 s
       576:  2139     3.7 C/MHz     83 mW    9.7 J   25.8 I/mJ   116.9 s
       672:  2495     3.7 C/MHz     65 mW    6.5 J   38.6 I/mJ   100.2 s
       768:  2852     3.7 C/MHz     72 mW    6.3 J   39.4 I/mJ    87.7 s
       844:  3137     3.7 C/MHz     77 mW    6.2 J   40.5 I/mJ    79.7 s
       940:  3493     3.7 C/MHz     84 mW    6.0 J   41.8 I/mJ    71.6 s
      1036:  3850     3.7 C/MHz     91 mW    5.9 J   42.5 I/mJ    64.9 s
      1113:  4135     3.7 C/MHz     96 mW    5.8 J   43.2 I/mJ    60.5 s
      1209:  4491     3.7 C/MHz    102 mW    5.7 J   44.2 I/mJ    55.7 s
      1305:  4848     3.7 C/MHz    110 mW    5.7 J   44.0 I/mJ    51.6 s
      1382:  5133     3.7 C/MHz    114 mW    5.5 J   45.2 I/mJ    48.7 s
      1478:  5490     3.7 C/MHz    120 mW    5.5 J   45.7 I/mJ    45.5 s
      1555:  5775     3.7 C/MHz    126 mW    5.5 J   45.8 I/mJ    43.3 s
      1632:  6060     3.7 C/MHz    131 mW    5.4 J   46.1 I/mJ    41.3 s
      1708:  6345     3.7 C/MHz    137 mW    5.4 J   46.3 I/mJ    39.4 s
      1785:  6630     3.7 C/MHz    146 mW    5.5 J   45.5 I/mJ    37.7 s
      
      ===== CPU 4 =====
      Frequencies: 710 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419
      
       710:  2765     3.9 C/MHz    126 mW   11.4 J   22.0 I/mJ    90.4 s
       825:  6432     7.8 C/MHz    206 mW    8.0 J   31.2 I/mJ    38.9 s
       940:  7331     7.8 C/MHz    227 mW    7.7 J   32.3 I/mJ    34.1 s
      1056:  8227     7.8 C/MHz    249 mW    7.6 J   33.0 I/mJ    30.4 s
      1171:  9127     7.8 C/MHz    261 mW    7.2 J   34.9 I/mJ    27.4 s
      1286: 10020     7.8 C/MHz    289 mW    7.2 J   34.6 I/mJ    25.0 s
      1401: 10918     7.8 C/MHz    311 mW    7.1 J   35.1 I/mJ    22.9 s
      1497: 11663     7.8 C/MHz    336 mW    7.2 J   34.7 I/mJ    21.4 s
      1612: 12546     7.8 C/MHz    375 mW    7.5 J   33.5 I/mJ    19.9 s
      1708: 13320     7.8 C/MHz    398 mW    7.5 J   33.5 I/mJ    18.8 s
      1804: 14069     7.8 C/MHz    456 mW    8.1 J   30.9 I/mJ    17.8 s
      1920: 14909     7.8 C/MHz    507 mW    8.5 J   29.4 I/mJ    16.8 s
      2016: 15706     7.8 C/MHz    558 mW    8.9 J   28.1 I/mJ    15.9 s
      2131: 16612     7.8 C/MHz    632 mW    9.5 J   26.3 I/mJ    15.1 s
      2227: 17349     7.8 C/MHz    698 mW   10.1 J   24.8 I/mJ    14.4 s
      2323: 18088     7.8 C/MHz    717 mW    9.9 J   25.2 I/mJ    13.8 s
      2419: 18835     7.8 C/MHz    845 mW   11.2 J   22.3 I/mJ    13.3 s
      
      ===== CPU 7 =====
      Frequencies: 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419 2534 2649 2745 2841
      
       825:  3215     3.9 C/MHz    158 mW   12.3 J   20.3 I/mJ    77.8 s
       940:  7330     7.8 C/MHz    269 mW    9.2 J   27.3 I/mJ    34.1 s
      1056:  8227     7.8 C/MHz    291 mW    8.8 J   28.2 I/mJ    30.4 s
      1171:  9125     7.8 C/MHz    316 mW    8.7 J   28.9 I/mJ    27.4 s
      1286: 10024     7.8 C/MHz    338 mW    8.4 J   29.6 I/mJ    25.0 s
      1401: 10922     7.8 C/MHz    365 mW    8.4 J   29.9 I/mJ    22.9 s
      1497: 11674     7.8 C/MHz    383 mW    8.2 J   30.4 I/mJ    21.4 s
      1612: 12564     7.8 C/MHz    406 mW    8.1 J   30.9 I/mJ    19.9 s
      1708: 13317     7.8 C/MHz    427 mW    8.0 J   31.2 I/mJ    18.8 s
      1804: 14062     7.8 C/MHz    446 mW    7.9 J   31.5 I/mJ    17.8 s
      1920: 14966     7.8 C/MHz    498 mW    8.3 J   30.1 I/mJ    16.7 s
      2016: 15711     7.8 C/MHz    513 mW    8.2 J   30.6 I/mJ    15.9 s
      2131: 16599     7.8 C/MHz    599 mW    9.0 J   27.7 I/mJ    15.1 s
      2227: 17353     7.8 C/MHz    622 mW    9.0 J   27.9 I/mJ    14.4 s
      2323: 18095     7.8 C/MHz    704 mW    9.7 J   25.7 I/mJ    13.8 s
      2419: 18849     7.8 C/MHz    738 mW    9.8 J   25.5 I/mJ    13.3 s
      2534: 19761     7.8 C/MHz    824 mW   10.4 J   23.9 I/mJ    12.7 s
      2649: 20658     7.8 C/MHz    882 mW   10.7 J   23.4 I/mJ    12.1 s
      2745: 21400     7.8 C/MHz   1003 mW   11.7 J   21.3 I/mJ    11.7 s
      2841: 22147     7.8 C/MHz   1092 mW   12.3 J   20.3 I/mJ    11.3 s
      
      [1] https://github.com/kdrag0n/freqbench
      [2] https://www.eembc.org/coremark/
      [3] https://github.com/kdrag0n/freqbench/tree/master/results/sm8150/mainSigned-off-by: default avatarDanny Lin <danny@kdrag0n.dev>
      Link: https://lore.kernel.org/r/20201221002907.2870059-4-danny@kdrag0n.devSigned-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      5b2dae72
    • Danny Lin's avatar
      arm64: dts: qcom: sm8150: Add PSCI idle states · 81188f58
      Danny Lin authored
      Like other Qualcomm SoCs, sm8150 exposes CPU and cluster idle states
      through PSCI. Define the idle states to save power when the CPU is not
      in active use.
      
      These idle states, latency, and residency values match the downstream
      4.14 kernel from Qualcomm as of LA.UM.8.1.r1-15600-sm8150.0.
      
      It's worth noting that the CPU has an additional C3 power collapse idle
      state between WFI and rail power collapse (with PSCI mode 0x40000003),
      but it is not officially used in downstream kernels due to "thermal
      throttling issues."
      Signed-off-by: default avatarDanny Lin <danny@kdrag0n.dev>
      Link: https://lore.kernel.org/r/20201221002907.2870059-3-danny@kdrag0n.devSigned-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      81188f58
    • Danny Lin's avatar
      arm64: dts: qcom: sm8150: Define CPU topology · 066d21bc
      Danny Lin authored
      sm8150 has a big.LITTLE CPU setup with DynamIQ, so all cores are within
      the same CPU cluster and LLC (Last-Level Cache) domain. Define this
      topology to help the scheduler make decisions.
      Signed-off-by: default avatarDanny Lin <danny@kdrag0n.dev>
      Link: https://lore.kernel.org/r/20201221002907.2870059-2-danny@kdrag0n.devSigned-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      066d21bc
  3. 28 Dec, 2020 19 commits
  4. 27 Dec, 2020 8 commits
  5. 26 Dec, 2020 5 commits
  6. 25 Dec, 2020 4 commits
    • Linus Torvalds's avatar
      drm/amd/display: avoid uninitialized variable warning · 61d79136
      Linus Torvalds authored
      clang (quite rightly) complains fairly loudly about the newly added
      mpc1_get_mpc_out_mux() function returning an uninitialized value if the
      'opp_id' checks don't pass.
      
      This may not happen in practice, but the code really shouldn't return
      garbage if the sanity checks don't pass.
      
      So just initialize 'val' to zero to avoid the issue.
      
      Fixes: 110b055b ("drm/amd/display: add getter routine to retrieve mpcc mux")
      Cc: Josip Pavic <Josip.Pavic@amd.com>
      Cc: Bindu Ramamurthy <bindu.r@amd.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      61d79136
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-2020-12-24' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux · 5814bc2d
      Linus Torvalds authored
      Pull more perf tools updates from Arnaldo Carvalho de Melo:
      
       - Refactor 'perf stat' per CPU/socket/die/thread aggregation fixing use
         cases in ARM machines.
      
       - Fix memory leak when synthesizing SDT probes in 'perf probe'.
      
       - Update kernel header copies related to KVM, epol_pwait. msr-index and
         powerpc and s390 syscall tables.
      
      * tag 'perf-tools-2020-12-24' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (24 commits)
        perf probe: Fix memory leak when synthesizing SDT probes
        perf stat aggregation: Add separate thread member
        perf stat aggregation: Add separate core member
        perf stat aggregation: Add separate die member
        perf stat aggregation: Add separate socket member
        perf stat aggregation: Add separate node member
        perf stat aggregation: Start using cpu_aggr_id in map
        perf cpumap: Drop in cpu_aggr_map struct
        perf cpumap: Add new map type for aggregation
        perf stat: Replace aggregation ID with a struct
        perf cpumap: Add new struct for cpu aggregation
        perf cpumap: Use existing allocator to avoid using malloc
        perf tests: Improve topology test to check all aggregation types
        perf tools: Update s390's syscall.tbl copy from the kernel sources
        perf tools: Update powerpc's syscall.tbl copy from the kernel sources
        perf s390: Move syscall.tbl check into check-headers.sh
        perf powerpc: Move syscall.tbl check to check-headers.sh
        tools headers UAPI: Synch KVM's svm.h header with the kernel
        tools kvm headers: Update KVM headers from the kernel sources
        tools headers UAPI: Sync KVM's vmx.h header with the kernel sources
        ...
      5814bc2d
    • Linus Torvalds's avatar
      Merge branch 'for-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/jlawall/linux · 42dc45e8
      Linus Torvalds authored
      Pull coccinelle updates from Julia Lawall.
      
      * 'for-5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/jlawall/linux:
        scripts: coccicheck: Correct usage of make coccicheck
        coccinelle: update expiring email addresses
        coccinnelle: Remove ptr_ret script
        kbuild: do not use scripts/ld-version.sh for checking spatch version
        remove boolinit.cocci
      42dc45e8
    • Michael Ellerman's avatar
      genirq: Fix export of irq_to_desc() for powerpc KVM · 11cc92eb
      Michael Ellerman authored
      Commit 64a1b95b ("genirq: Restrict export of irq_to_desc()") removed
      the export of irq_to_desc() unless powerpc KVM is being built, because
      there is still a use of irq_to_desc() in modular code there.
      
      However it used:
      
        #ifdef CONFIG_KVM_BOOK3S_64_HV
      
      Which doesn't work when that symbol is =m, leading to a build failure:
      
        ERROR: modpost: "irq_to_desc" [arch/powerpc/kvm/kvm-hv.ko] undefined!
      
      Fix it by checking for the definedness of the correct symbol which is
      CONFIG_KVM_BOOK3S_64_HV_MODULE.
      
      Fixes: 64a1b95b ("genirq: Restrict export of irq_to_desc()")
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      11cc92eb