From 2abfa3b3218831177663f3eecc5f686127a72fdd Mon Sep 17 00:00:00 2001 From: George Hotz Date: Fri, 17 Jan 2020 10:41:41 -0800 Subject: [PATCH] bring over scripts old-commit-hash: d4d57ed7feec9e6c0bc797d66be7a5b303e79831 --- scripts/__init__.py | 0 scripts/clwaste | 3 ++ scripts/dump_pll.c | 59 ++++++++++++++++++++++++++++ scripts/get_fan_control_type.py | 41 ++++++++++++++++++++ scripts/internet.sh | 1 + scripts/panda_gcc/.gitignore | 3 ++ scripts/panda_gcc/build_gcc.sh | 66 ++++++++++++++++++++++++++++++++ scripts/phone_nat.sh | 17 ++++++++ scripts/stop_updater.sh | 7 ++++ scripts/throttling.sh | 16 ++++++++ scripts/update_now.sh | 4 ++ scripts/waste | Bin 0 -> 8568 bytes scripts/waste.c | 52 +++++++++++++++++++++++++ scripts/waste.py | 35 +++++++++++++++++ 14 files changed, 304 insertions(+) create mode 100644 scripts/__init__.py create mode 100755 scripts/clwaste create mode 100644 scripts/dump_pll.c create mode 100755 scripts/get_fan_control_type.py create mode 100755 scripts/internet.sh create mode 100644 scripts/panda_gcc/.gitignore create mode 100755 scripts/panda_gcc/build_gcc.sh create mode 100755 scripts/phone_nat.sh create mode 100755 scripts/stop_updater.sh create mode 100755 scripts/throttling.sh create mode 100755 scripts/update_now.sh create mode 100755 scripts/waste create mode 100644 scripts/waste.c create mode 100755 scripts/waste.py diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/clwaste b/scripts/clwaste new file mode 100755 index 000000000..cc02520ae --- /dev/null +++ b/scripts/clwaste @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae68bf896b2963831305606bf0b95b8bac06d9f711d6d8c873136b110d74cfe2 +size 155368 diff --git a/scripts/dump_pll.c b/scripts/dump_pll.c new file mode 100644 index 000000000..325ee2b4c --- /dev/null +++ b/scripts/dump_pll.c @@ -0,0 +1,59 @@ +#include +#include +#include + +void hexdump(uint32_t *d, int l) { + for (int i = 0; i < l; i++) { + if (i%0x10 == 0 && i != 0) printf("\n"); + printf("%8x ", d[i]); + } + printf("\n"); +} + +/* Power cluster primary PLL */ +#define C0_PLL_MODE 0x0 +#define C0_PLL_L_VAL 0x4 +#define C0_PLL_ALPHA 0x8 +#define C0_PLL_USER_CTL 0x10 +#define C0_PLL_CONFIG_CTL 0x18 +#define C0_PLL_CONFIG_CTL_HI 0x1C +#define C0_PLL_STATUS 0x28 +#define C0_PLL_TEST_CTL_LO 0x20 +#define C0_PLL_TEST_CTL_HI 0x24 + +/* Power cluster alt PLL */ +#define C0_PLLA_MODE 0x100 +#define C0_PLLA_L_VAL 0x104 +#define C0_PLLA_ALPHA 0x108 +#define C0_PLLA_USER_CTL 0x110 +#define C0_PLLA_CONFIG_CTL 0x118 +#define C0_PLLA_STATUS 0x128 +#define C0_PLLA_TEST_CTL_LO 0x120 + +#define APC_DIAG_OFFSET 0x48 +#define CLK_CTL_OFFSET 0x44 +#define MUX_OFFSET 0x40 +#define MDD_DROOP_CODE 0x7c +#define SSSCTL_OFFSET 0x160 +#define PSCTL_OFFSET 0x164 + +int main() { + int fd = open("/dev/mem", O_RDWR); + volatile uint32_t *mb = (uint32_t*)mmap(0,0x1000,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0x06400000); + volatile uint32_t *mc = (uint32_t*)mmap(0,0x1000,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0x06480000); + volatile uint32_t *md = (uint32_t*)mmap(0,0x1000,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0x09A20000); + while (1) { + printf("PLL MODE:%x L_VAL:%x ALPHA:%x USER_CTL:%x CONFIG_CTL:%x CONFIG_CTL_HI:%x STATUS:%x TEST_CTL_LO:%x TEST_CTL_HI:%x\n", + mb[C0_PLL_MODE/4], mb[C0_PLL_L_VAL/4], mb[C0_PLL_ALPHA/4], + mb[C0_PLL_USER_CTL/4], mb[C0_PLL_CONFIG_CTL/4], mb[C0_PLL_CONFIG_CTL_HI/4], + mb[C0_PLL_STATUS/4], mb[C0_PLL_TEST_CTL_LO/4], mb[C0_PLL_TEST_CTL_HI/4]); + printf(" MUX_OFFSET:%x CLK_CTL_OFFSET:%x APC_DIAG_OFFSET:%x MDD_DROOP_CODE:%x\n", + mb[MUX_OFFSET/4], mb[CLK_CTL_OFFSET/4], mb[APC_DIAG_OFFSET/4], mb[MDD_DROOP_CODE/4]); + printf(" PLLA MODE:%x L_VAL:%x ALPHA:%x USER_CTL:%x CONFIG_CTL:%x STATUS:%x TEST_CTL_LO:%x SSSCTL_OFFSET:%x PSCTL_OFFSET:%x\n", + mb[C0_PLLA_MODE/4], mb[C0_PLLA_L_VAL/4], mb[C0_PLLA_ALPHA/4], mb[C0_PLLA_USER_CTL/4], + mb[C0_PLLA_CONFIG_CTL/4], mb[C0_PLLA_STATUS/4], mb[C0_PLLA_TEST_CTL_LO/4], + mb[SSSCTL_OFFSET/4], mb[PSCTL_OFFSET/4]); + usleep(1000*100); + } +} + diff --git a/scripts/get_fan_control_type.py b/scripts/get_fan_control_type.py new file mode 100755 index 000000000..cc1b99296 --- /dev/null +++ b/scripts/get_fan_control_type.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3.7 +import os +from smbus2 import SMBus + +def setup_fan(): + os.system("echo 2 > /sys/module/dwc3_msm/parameters/otg_switch") + + bus = SMBus(7, force=True) + try: + bus.write_byte_data(0x21, 0x10, 0xf) # mask all interrupts + bus.write_byte_data(0x21, 0x03, 0x1) # set drive current and global interrupt disable + bus.write_byte_data(0x21, 0x02, 0x2) # needed? + bus.write_byte_data(0x21, 0x04, 0x4) # manual override source + print("OP detected") + return False + except IOError: + print("LEON detected") + return True + bus.close() + +def get_fan_type(): + if not setup_fan(): + return + + bus = SMBus(7, force=True) + try: + # alternate type + bus.write_i2c_block_data(0x3d, 0, [0x1]) + print("Alternate type detected") + return + except IOError: + # tusb320 type + print("tusb320 type detected") + bus.close() + + +def main(gctx=None): + get_fan_type() + +if __name__ == "__main__": + main() diff --git a/scripts/internet.sh b/scripts/internet.sh new file mode 100755 index 000000000..c89dff604 --- /dev/null +++ b/scripts/internet.sh @@ -0,0 +1 @@ +route add default gw 192.168.5.1 && ndc network create 100 && ndc network interface add 100 eth0 && ndc resolver setnetdns 100 localdomain 8.8.8.8 8.8.4.4 && ndc network default set 100 diff --git a/scripts/panda_gcc/.gitignore b/scripts/panda_gcc/.gitignore new file mode 100644 index 000000000..d1fca437f --- /dev/null +++ b/scripts/panda_gcc/.gitignore @@ -0,0 +1,3 @@ +build +out +src diff --git a/scripts/panda_gcc/build_gcc.sh b/scripts/panda_gcc/build_gcc.sh new file mode 100755 index 000000000..f03f451ab --- /dev/null +++ b/scripts/panda_gcc/build_gcc.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# https://blog.tan-ce.com/gcc-bare-metal/ +# https://imvoid.wordpress.com/2013/05/01/building-the-gnu-arm-toolchain-for-bare-metal/ +set -e + +BINUTILS=binutils-2.32 +GCC=gcc-4.7.1 + +mkdir -p src +pushd src +if [ ! -d $BINUTILS ]; then + wget ftp://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2 + tar -xf $BINUTILS.tar.bz2 +fi +popd + +# TODO: replace with /usr +mkdir -p out +PREFIX=$PWD/out + +mkdir -p build/$BINUTILS +pushd build/$BINUTILS +../../src/$BINUTILS/configure --target=arm-none-eabi \ + --build=aarch64-unknown-linux-gnu \ + --prefix=$PREFIX --with-cpu=cortex-m4 \ + --with-mode=thumb \ + --disable-nls \ + --disable-werror +make -j4 all +make install +popd + +mkdir -p src +pushd src +if [ ! -d $GCC ]; then + wget ftp://ftp.gnu.org/gnu/gcc/$GCC/$GCC.tar.bz2 + tar -xf $GCC.tar.bz2 + + cd $GCC + contrib/download_prerequisites +fi + +popd + +export PATH="$PREFIX/bin:$PATH" + +mkdir -p build/$GCC +pushd build/$GCC +../../src/$GCC/configure --target=arm-none-eabi \ + --build=aarch64-unknown-linux-gnu \ + --disable-libssp --disable-gomp --disable-libstcxx-pch --enable-threads \ + --disable-shared --disable-libmudflap \ + --prefix=$PREFIX --with-cpu=cortex-m4 \ + --with-mode=thumb --disable-multilib \ + --enable-interwork \ + --enable-languages="c" \ + --disable-nls \ + --disable-libgcc +make -j4 all-gcc +make install-gcc +popd + +# replace stdint.h with stdint-gcc.h for Android compatibility +mv $PREFIX/lib/gcc/arm-none-eabi/4.7.1/include/stdint-gcc.h $PREFIX/lib/gcc/arm-none-eabi/4.7.1/include/stdint.h + + diff --git a/scripts/phone_nat.sh b/scripts/phone_nat.sh new file mode 100755 index 000000000..2a6e432c9 --- /dev/null +++ b/scripts/phone_nat.sh @@ -0,0 +1,17 @@ +#!/bin/sh +echo 1 > /proc/sys/net/ipv4/ip_forward +#iptables -t nat --delete-chain +iptables --flush +iptables -t nat --flush + +# could be either one +iptables -t nat -A POSTROUTING -o v4-rmnet_data0 -j MASQUERADE +iptables -t nat -A POSTROUTING -o rmnet_data0 -j MASQUERADE + +#iptables --delete-chain +#iptables -A INPUT -i eth0 -j ACCEPT +#iptables -A INPUT -i v4-rmnet_data0 -m state --state RELATED,ESTABLISHED -j ACCEPT +#iptables -A OUTPUT -j ACCEPT +#iptables -A FORWARD -i rmnet_data0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT +#iptables -A FORWARD -i eth0 -o v4-rmnet_data0 -j ACCEPT + diff --git a/scripts/stop_updater.sh b/scripts/stop_updater.sh new file mode 100755 index 000000000..4243d30e9 --- /dev/null +++ b/scripts/stop_updater.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh + +# Stop updater +pkill -2 -f selfdrive.updated + +# Remove pending update +rm -f /data/safe_staging/finalized/.overlay_consistent diff --git a/scripts/throttling.sh b/scripts/throttling.sh new file mode 100755 index 000000000..d100c5f5a --- /dev/null +++ b/scripts/throttling.sh @@ -0,0 +1,16 @@ +#!/data/data/com.termux/files/usr/bin/bash +watch -n1 ' + cat /sys/kernel/debug/clk/pwrcl_clk/measure + cat /sys/kernel/debug/clk/perfcl_clk/measure + cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq + cat /sys/class/kgsl/kgsl-3d0/gpuclk + echo + echo -n "CPU0 " ; cat /sys/devices/virtual/thermal/thermal_zone5/temp + echo -n "CPU1 " ; cat /sys/devices/virtual/thermal/thermal_zone7/temp + echo -n "CPU2 " ; cat /sys/devices/virtual/thermal/thermal_zone10/temp + echo -n "CPU3 " ; cat /sys/devices/virtual/thermal/thermal_zone12/temp + echo -n "MEM " ; cat /sys/devices/virtual/thermal/thermal_zone2/temp + echo -n "GPU " ; cat /sys/devices/virtual/thermal/thermal_zone16/temp + echo -n "BAT " ; cat /sys/devices/virtual/thermal/thermal_zone29/temp +' + diff --git a/scripts/update_now.sh b/scripts/update_now.sh new file mode 100755 index 000000000..3f0193f08 --- /dev/null +++ b/scripts/update_now.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +# Send SIGHUP to updater +pkill -1 -f selfdrive.updated diff --git a/scripts/waste b/scripts/waste new file mode 100755 index 0000000000000000000000000000000000000000..506ce9c758265ec344ac922726c9bfc037e43c5e GIT binary patch literal 8568 zcmeHMeQXrh5g*_3VK5(dpnk=T zumnhKhK1SfjW)qnyNs}Dp~Z|VNJ$So47liL7#1oX5}nCy`N)|$HYyZKZJzYV*Wi4c z4=&H8Z*c#m~9yXk3cqaxIb1@b#TFe4m#tNlSQ zb`v^Lk8C_>d@@dnXI17%#x&wpp=hEi7EK&5()G2}CynEId`PY-5lJVb5uk68u5Jh+ z`P8MZ##dYGtNGOW^m*ptGaH{0eCFbluTU&VmSRcsg~r2E18erUXlxP(3;cvH1w9zc z^N|!-1fb>`pET0q6svX3HKNgEn}Ga{`~|Tf%dJ{*N~oXH4xGCt7+!MV&VB7=2kx9| z!w#I*fRtZ4aM^>XZNz~)=l>fH+_{D>I&fNF?sDtsYl9fu;j-Vhj+d@{azOQzkCv;- zALOyx-o&22OtX?B!R_!N8nKeZ}ZXpm8oPo(Tgtltn`~m12Lz%nKX0 z&4kjJBjTkEQHwXDY>19Eyj3IKPS(@ zKqj5jze<7+%fkpfjKKe01hQPju?O*zXS%7i8K4oB4N2Zn z!94zdv&v&kCC`xKn6!VE+a*6)#=Nvk&M}OeIF-Bivq_@&n3vom$byn{EafCda)hI# zghg_Lr8aAw4Y+C%$$feypWwzTOmSbeisUd7haK#Q;J4Tx$!Yenp5!vp{|d%M?jKou zd=l^b%wJ@C_`R(0OFQn%7Jr`G$C+oAt^e*<+fi%!aBe-98(7yOYW8 zn2|{yOot6`I2o@plgSw7`FO0f^=p0AftrvWs`ne=KyAIhx+Yi`i1>mvVV@BU`Sehz zu09xO@U8u~Y{z1U;%Y#zudfb9>KlxJ5v;DRHmW1F4UsUi!RneoeIQ&H)&q6*I+~sw zU3>fPr|hw04kgy&dBr_OpIT|^-I=P+miCsWT`gMB=c~d~h#p(}z)7Is8D#Qa!y&C8 zDE9yk7!>@Ib(xFLm|UN^_)L&>nTyW?S--jXY>;`Kix-2ehg^IP$hynL=Yp)yT)YHi zzUJbE&dKwkR~E2CL4gGz^V9)jbQXfl*Ic|5WIpHOWgzoE7k>m~Kgz|YpWCTj0okRd zq-npH0k^YLh+V6&$n@{KhVc~dv!WMZ+~>mScw6L{C#P9qH_LzCCBKhx_xy=6zSG3~q;nU;)Z3~|s&lfFxG1SP0Yw-Z5EINIj{19;u-m_fi{jiPY zUq+hGe>?uu=audMeCTt{H{1W|{tUA}d*mMw_xtL<>~{e)^7)^|!H(xb*x|x$e@bDW z3n#sN1R72g4{1%Dv+H@mz`6H=Zo8qEqorxy!smQRDMc0 z#%CkPNAk9x6|nOr;`!omset^uh?hC`PZ`%=*^WCt5%ekF_Z=@_zXbP}eB&)IfJ0U2 zU^Es9CCw@`o~jC`%}^S1i1nfU0e!#jO~UGk*9VEn0nL)r5(ncUBW(ekfj}Z@8XD&v zS~OxLOdE>mrf%1aM8vKnbi93}K8)^Y!W$;z)%5bytA<{+^s0l^z1XXkG4-^m#W87t z!#ZAzlSVIUO!FB#SRV*rYEgq8Ynz|$XnJbvCeT{jw>LMnYumSM+11jebu~4&w`gd= zzW8ixv~DkR?>hyw?n0T-_%c=N!9m81w01bHr&1UMP217gvbAGtm)6wT+4QugAri`D zY`3u<$s}0^8FUc^lF5T6GFwn9pAt&gH?({y%N|&R2fossb_*+R8dkvVyIsMwJnq?^ zI4*WsIOmRd(!kVZGDG0a9EqEH2&tL2X^+(K2H8lbz)MrYE2*eGCA{5yL8wST{& zzQuorA&wP_rRYn(E_5FYO8=rSejR50W|ot@Ug#BvKJD*r{bvv(zc@Xc%>U&aVCPY6 z1c}^32>q5zUw%&$dQt|)CS=}-#TQs##N<37)Xuv_ddh!6zJnF=h2{noId{nKr{bsG zI;AghID-uf@DY7EpS1Ds#1GORLfwT9eL2VM`GopEM_rlQSe-oY$nVsp92ogN; +#include +#include +#include "../selfdrive/common/timing.h" + +#define CORES 4 +double ttime[CORES]; +double oout[CORES]; + +void waste(int pid) { + cpu_set_t my_set; + CPU_ZERO(&my_set); + CPU_SET(pid, &my_set); + int ret = sched_setaffinity(0, sizeof(cpu_set_t), &my_set); + printf("set affinity to %d: %d\n", pid, ret); + + float32x4_t *tmp = (float32x4_t *)malloc(0x1000008*sizeof(float32x4_t)); + float32x4_t out; + + uint64_t i = 0; + double sec = seconds_since_boot(); + while(1) { + int j; + for (j = 0; j < 0x1000000; j++) { + out = vmlaq_f32(out, tmp[j], tmp[j+1]); + } + if (i == 0x8) { + double nsec = seconds_since_boot(); + ttime[pid] = nsec-sec; + oout[pid] = out[0] + out[1] + out[2] + out[3]; + i = 0; + sec = nsec; + } + i++; + } +} + +int main() { + pthread_t waster[CORES]; + for (int i = 0 ; i < CORES; i++) { + pthread_create(&waster[i], NULL, waste, (void*)i); + } + while (1) { + for (int i = 0 ; i < CORES; i++) { + printf("%.2f ", ttime[i]); + } + printf("\n"); + sleep(1); + } +} + diff --git a/scripts/waste.py b/scripts/waste.py new file mode 100755 index 000000000..55aeba066 --- /dev/null +++ b/scripts/waste.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +from multiprocessing import Process +from setproctitle import setproctitle +import os +import numpy as np +from common.realtime import sec_since_boot + +def waste(pid): + # set affinity + os.system("taskset -p %d %d" % (1 << pid, os.getpid())) + + m1 = np.zeros((200,200)) + 0.8 + m2 = np.zeros((200,200)) + 1.2 + + i = 1 + st = sec_since_boot() + j = 0 + while 1: + if (i % 100) == 0: + setproctitle("%3d: %8d" % (pid, i)) + lt = sec_since_boot() + print("%3d: %8d %f %.2f" % (pid, i, lt-st, j)) + st = lt + i += 1 + j = np.sum(np.matmul(m1, m2)) + +def main(gctx=None): + print("1-2 seconds is baseline") + for i in range(4): + p = Process(target=waste, args=(i,)) + p.start() + +if __name__ == "__main__": + main() +