> Subject: [PATCH] vexpress: Setup IRQ affinity to A7s for TC2 > Date: Wed, 9 Jan 2013 14:20:19 +0000 > From: Punit Agrawal <punit.agra...@arm.com><mailto:punit.agra...@arm.com> > To: t...@linaro.org<mailto:t...@linaro.org> > <t...@linaro.org><mailto:t...@linaro.org> > CC: linaro-...@linaro.org<mailto:linaro-...@linaro.org> > <linaro-...@linaro.org><mailto:linaro-...@linaro.org>, Punit Agrawal > <punit.agra...@arm.com><mailto:punit.agra...@arm.com> > > > > On TC2, to maximise power savings, it helps to affine the IRQs to the A7s. Now > that the cpu to parts mapping is available via /proc/cpuinfo, this patch > introduces a script to parse this file and build a mask of particular CPU type > and change the IRQ affinity to this mask. > > The patch also makes the necessary changes to platform specific init script to > call above script and affine the IRQs to the A7s. > > Lastly, it changes the makefile to include the new script in the target. > > Change-Id: I2fd2840acd4602d9145c7c2f2e839e5dda09ff99 > Signed-off-by: Punit Agrawal > <punit.agra...@arm.com><mailto:punit.agra...@arm.com> > --- > > Hi Tixy, > > I am not quite sure where to send this patch to get it included in Linaro. But > you seem to have a few patches in this repo, so maybe you can apply this one.
Yes, I can do that. It looks like it copes OK for devices without any A7's but will give it a test to check that first :-) We also need to consider how this behaves with the big.LITTLE switcher, I'll have to ask about that. > Let me know if you have any feedback on this as well. I would be happy to > incorporate that as long as the intent of the patches carries through. One question, what happens if I offline all the A7's at run time? Will the system stop responding to interrupts, prevent the last A7 being offlined or migrate the IRQs to the A15s? Guess I can try it out when I test it, but this might not be until tomorrow now. --- Tixy > Thanks, > Punit > > device.mk | 3 ++- > init.arm-versatileexpress.rc | 6 ++++++ > set_irq_affinity.sh | 45 > ++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 53 insertions(+), 1 deletion(-) > create mode 100755 set_irq_affinity.sh > > diff --git a/device.mk b/device.mk > index 6e6c6dd..9ca73e3 100644 > --- a/device.mk > +++ b/device.mk > @@ -9,7 +9,8 @@ PRODUCT_COPY_FILES += \ > device/linaro/vexpress/init.v2p-aarch64.rc:root/init.v2p-aarch64.rc \ > > device/linaro/vexpress/ueventd.v2p-aarch64.rc:root/ueventd.v2p-aarch64.rc \ > device/linaro/vexpress/init.vexpress.sh:system/etc/init.vexpress.sh \ > - device/linaro/vexpress/initlogo.rle:root/initlogo.rle > + device/linaro/vexpress/initlogo.rle:root/initlogo.rle \ > + device/linaro/vexpress/set_irq_affinity.sh:root/set_irq_affinity.sh > > PRODUCT_CHARACTERISTICS := tablet,nosdcard > > diff --git a/init.arm-versatileexpress.rc b/init.arm-versatileexpress.rc > index a71e491..d710f36 100644 > --- a/init.arm-versatileexpress.rc > +++ b/init.arm-versatileexpress.rc > @@ -33,6 +33,12 @@ on boot > chown system system /sys/class/graphics/fb0/fit_to_screen > chown system system /sys/class/graphics/fb1/overlays > > +# setup IRQ affinity to the A7s > +service setirqaffinity /set_irq_affinity 0xc07 > + class main > + user root > + oneshot > + > service faketsd /system/bin/faketsd > class main > user bluetooth > diff --git a/set_irq_affinity.sh b/set_irq_affinity.sh > new file mode 100755 > index 0000000..4a09d61 > --- /dev/null > +++ b/set_irq_affinity.sh > @@ -0,0 +1,45 @@ > +#!/system/bin/sh > + > +# This script sets the default affinity to the processors with the given > part id. > +# - part id is in hex (as seen in /proc/cpuinfo) > + > +function build_mask_from_part_id { > + local IFS > + local mask > + local ref_part_id > + > + ref_part_id=$1 > + IFS=$'\n' > + > + for line in `cat /proc/cpuinfo` > + do > + IFS=':' > + set -A tokens $line > + > + if [ "${line#'processor'}" != "$line" ] > + then > + cpu="${tokens[1]##' '}" > + elif [ "${line#'CPU part'}" != "$line" ] > + then > + part_id="${tokens[1]##' '}" > + > + if [ "$part_id" == "$ref_part_id" ] > + then > + (( mask |= 1 << $cpu )) > + fi > + fi > + done > + echo $(printf "%x" $mask) > +} > + > +ref_part_id=$(echo $1 | tr '[A-Z]' '[a-z]') > +mask=$(build_mask_from_part_id $ref_part_id) > +[ -z "$mask" ] && exit > + > +echo $mask > /proc/irq/default_smp_affinity > + > +for i in `ls /proc/irq` > +do > + affinity_file="/proc/irq/$i/smp_affinity" > + [ -e $affinity_file ] && echo $mask > $affinity_file > +done > -- > 1.7.9.5 _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev