On 5 April 2015 at 22:43, Amit Kucheria <amit.kuche...@linaro.org> wrote: > On Fri, Apr 3, 2015 at 1:09 AM, Larry Bassel <larry.bas...@linaro.org> wrote: >> Add test which verifies capacity calculation on arm >> architecture platforms. >> >> Since there isn't yet a similar calculation done >> for arm64 platforms, this architecture isn't supported >> by this test (at least as of now). > > Rephrase to "This will work on any platform that uses foo() arch hook > to set cpu capacity. Currently only arm32 platforms use this." ? > >> Signed-off-by: Larry Bassel <larry.bas...@linaro.org> >> --- >> cputopology/cputopology_04.sh | 127 >> +++++++++++++++++++++++++++++++++++++++++ >> cputopology/cputopology_04.txt | 1 + >> 2 files changed, 128 insertions(+) >> create mode 100755 cputopology/cputopology_04.sh >> create mode 100644 cputopology/cputopology_04.txt >> >> diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh >> new file mode 100755 >> index 0000000..d66c1c8 >> --- /dev/null >> +++ b/cputopology/cputopology_04.sh >> @@ -0,0 +1,127 @@ >> +#!/bin/bash >> +# > > Nack! Please replace with /bin/sh and test to make sure it still > works. Lisa, please pay attention to this one for future patches from > anybody.
Apologies. It was something I overlooked in previous versions. >> +# PM-QA validation test suite for the power management on Linux >> +# >> +# Copyright (C) 2015, Linaro Limited. >> +# >> +# This program is free software; you can redistribute it and/or >> +# modify it under the terms of the GNU General Public License >> +# as published by the Free Software Foundation; either version 2 >> +# of the License, or (at your option) any later version. >> +# >> +# This program is distributed in the hope that it will be useful, >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> +# GNU General Public License for more details. >> +# >> +# You should have received a copy of the GNU General Public License >> +# along with this program; if not, write to the Free Software >> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA >> 02110-1301, USA. >> +# >> +# Contributors: >> +# Larry Bassel <larry.bas...@linaro.org> >> +# >> + >> +# URL : >> https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/PmQaSpecification#cputopology_04 > > This link is not present. Can you add a section to the spec (and mark > it as draft). Otherwise, once patches get accepted, we'll forget to > update the spec. > > Similarly, cputopology_03 section is also missing. So we're already > forgetting to update the spec. > I can update the cputopology_03 spec since the PM-QA wiki page needs to be updated anyway. It's on my TODO list for today. >> +source ../include/functions.sh Another bashism to be removed. Should be .. ./include/functions.sh; don't include 'source' keyword. >> +calc_freq() >> +{ >> + byte1=$1 >> + byte2=$2 >> + byte3=$3 >> + byte4=$4 >> + freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4)) >> +} >> + >> +set_eff() { > > what is eff? perhaps a comment? > >> + type=$1 >> + >> + case $type in >> + arm,cortex-a15) eff=3891 ;; >> + arm,cortex-a7) eff=2048 ;; >> + * ) eff=1024 ;; >> + esac >> +} >> + >> +calc_mid_capacity() > > What is the significance of middle capacity? A comment perhaps? > >> +{ >> + dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*") >> + min_capacity=$((0xffffffff)) >> + max_capacity=0 >> + sched_capacity_shift=10 >> + >> + for dt_cpu in $dt_cpus; do >> + if [ ! -f >> /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then >> + log_skip "no clock frequency file present" >> + return >> + fi >> + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; >> then >> + log_skip "no compatible file present" >> + return >> + fi >> + filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency >> + bytes=$(od -t u1 -A n $filename) >> + calc_freq $bytes >> + cpu_type=$(cat >> /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible) >> + set_eff $cpu_type >> + capacity=$((($freq>>20)*$eff)) >> + if [ $capacity -gt $max_capacity ]; then >> + max_capacity=$capacity >> + fi >> + if [ $capacity -lt $min_capacity ]; then >> + min_capacity=$capacity >> + fi >> + if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + >> $min_capacity)))) ]; then >> + middle_capacity=$((($min_capacity + >> $max_capacity)>>($sched_capacity_shift+1))) >> + else >> + middle_capacity=$(((($max_capacity / >> 3)>>($sched_capacity_shift-1))+1)) >> + fi >> + done >> +} >> + >> +cpu_num=0 >> + >> +verify_cpu_capacity() >> +{ >> + for dt_cpu in $dt_cpus; do >> + if [ ! -f >> /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then >> + log_skip "no clock frequency file present" >> + return >> + fi >> + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; >> then >> + log_skip "no compatible file present" >> + return >> + fi >> + filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency >> + bytes=$(od -t u1 -A n $filename) >> + calc_freq $bytes >> + cpu_type=$(cat >> /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible) >> + set_eff $cpu_type >> + capacity=$((($freq>>20)*$eff/$middle_capacity)) >> + expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update >> cpu_capacity") >> + expected_capacity=${expected_capacity_string##*cpu_capacity} >> + echo "cpu num: $cpu_num capacity $capacity expected capacity >> $expected_capacity" >> + check "expected capacity for cpu$cpu_num equal to computed capacity" >> "test $expected_capacity -eq $capacity" >> + >> + cpu_num=$((cpu_num+1)) >> + done >> +} >> + >> +verify_capacity() >> +{ >> + if ! [ -d /sys/firmware/devicetree/base/cpus ]; then >> + log_skip "no cpus directory present" >> + return >> + fi >> + >> + calc_mid_capacity >> + dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep >> "cpu@.{1,2}$") >> + verify_cpu_capacity >> + dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep >> "cpu@.{3,4}$") >> + verify_cpu_capacity >> +} >> + >> +verify_capacity || exit 1 >> +test_status_show >> diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt >> new file mode 100644 >> index 0000000..36647db >> --- /dev/null >> +++ b/cputopology/cputopology_04.txt >> @@ -0,0 +1 @@ >> +test capacity calculation > > Some more elaboration on how it does the test? i.e what it calculates > and what it matches from existing data passed to the kernel? > >> -- >> 1.8.3.2 >> _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-dev