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

Reply via email to