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.

> +# 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.


> +source ../include/functions.sh
> +
> +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