@ -8,7 +8,7 @@ from functools import cached_property
from pathlib import Path
from pathlib import Path
from cereal import log
from cereal import log
from common . gpio import gpio_set , gpio_init
from common . gpio import gpio_set , gpio_init , get_irq_for_action
from system . hardware . base import HardwareBase , ThermalConfig
from system . hardware . base import HardwareBase , ThermalConfig
from system . hardware . tici import iwlist
from system . hardware . tici import iwlist
from system . hardware . tici . pins import GPIO
from system . hardware . tici . pins import GPIO
@ -63,8 +63,14 @@ MM_MODEM_ACCESS_TECHNOLOGY_LTE = 1 << 14
def sudo_write ( val , path ) :
def sudo_write ( val , path ) :
os . system ( f " sudo su -c ' echo { val } > { path } ' " )
os . system ( f " sudo su -c ' echo { val } > { path } ' " )
def affine_irq ( val , irq ) :
sudo_write ( str ( val ) , f " /proc/irq/ { irq } /smp_affinity_list " )
def affine_irq ( val , action ) :
irq = get_irq_for_action ( action )
if len ( irq ) == 0 :
print ( f " No IRQs found for ' { action } ' " )
return
for i in irq :
sudo_write ( str ( val ) , f " /proc/irq/ { i } /smp_affinity_list " )
class Tici ( HardwareBase ) :
class Tici ( HardwareBase ) :
@ -432,12 +438,19 @@ class Tici(HardwareBase):
sudo_write ( gov , f ' /sys/devices/system/cpu/cpufreq/policy { n } /scaling_governor ' )
sudo_write ( gov , f ' /sys/devices/system/cpu/cpufreq/policy { n } /scaling_governor ' )
# *** IRQ config ***
# *** IRQ config ***
affine_irq ( 5 , 565 ) # kgsl-3d0
affine_irq ( 4 , 126 ) # SPI goes on boardd core
# GPU
affine_irq ( 4 , 740 ) # xhci-hcd:usb1 goes on the boardd core
affine_irq ( 5 , " kgsl-3d0 " )
affine_irq ( 4 , 1069 ) # xhci-hcd:usb3 goes on the boardd core
for irq in range ( 237 , 246 ) :
# boardd core
affine_irq ( 5 , irq ) # camerad
affine_irq ( 4 , " spi_geni " ) # SPI
affine_irq ( 4 , " xhci-hcd:usb1 " ) # internal panda USB
affine_irq ( 4 , " xhci-hcd:usb3 " ) # aux panda USB (or potentially anything else on USB)
# camerad core
camera_irqs = ( " cci " , " cpas_camnoc " , " cpas-cdm " , " csid " , " ife " , " csid " , " csid-lite " , " ife-lite " )
for n in camera_irqs :
affine_irq ( 5 , n )
def get_gpu_usage_percent ( self ) :
def get_gpu_usage_percent ( self ) :
try :
try :
@ -461,9 +474,11 @@ class Tici(HardwareBase):
# *** IRQ config ***
# *** IRQ config ***
# move these off the default core
# move these off the default core
affine_irq ( 1 , 7 ) # msm_drm
affine_irq ( 1 , " msm_drm " )
affine_irq ( 1 , 250 ) # msm_vidc
affine_irq ( 1 , " msm_vidc " )
affine_irq ( 1 , 8 ) # i2c_geni (sensord)
affine_irq ( 1 , " i2c_geni " )
# mask off big cluster from default affinity
sudo_write ( " f " , " /proc/irq/default_smp_affinity " )
sudo_write ( " f " , " /proc/irq/default_smp_affinity " )
# *** GPU config ***
# *** GPU config ***