|  |  |  | @ -8,7 +8,7 @@ from functools import cached_property | 
			
		
	
		
			
				
					|  |  |  |  | from pathlib import Path | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 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.tici import iwlist | 
			
		
	
		
			
				
					|  |  |  |  | from system.hardware.tici.pins import GPIO | 
			
		
	
	
		
			
				
					|  |  |  | @ -63,8 +63,14 @@ MM_MODEM_ACCESS_TECHNOLOGY_LTE = 1 << 14 | 
			
		
	
		
			
				
					|  |  |  |  | def sudo_write(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): | 
			
		
	
	
		
			
				
					|  |  |  | @ -432,12 +438,19 @@ class Tici(HardwareBase): | 
			
		
	
		
			
				
					|  |  |  |  |       sudo_write(gov, f'/sys/devices/system/cpu/cpufreq/policy{n}/scaling_governor') | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # *** IRQ config *** | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(5, 565)   # kgsl-3d0 | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(4, 126)   # SPI goes on boardd core | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(4, 740)   # xhci-hcd:usb1 goes on the boardd core | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(4, 1069)  # xhci-hcd:usb3 goes on the boardd core | 
			
		
	
		
			
				
					|  |  |  |  |     for irq in range(237, 246): | 
			
		
	
		
			
				
					|  |  |  |  |       affine_irq(5, irq) # camerad | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # GPU | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(5, "kgsl-3d0") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # boardd core | 
			
		
	
		
			
				
					|  |  |  |  |     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): | 
			
		
	
		
			
				
					|  |  |  |  |     try: | 
			
		
	
	
		
			
				
					|  |  |  | @ -461,9 +474,11 @@ class Tici(HardwareBase): | 
			
		
	
		
			
				
					|  |  |  |  |     # *** IRQ config *** | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # move these off the default core | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, 7)    # msm_drm | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, 250)  # msm_vidc | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, 8)    # i2c_geni (sensord) | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, "msm_drm") | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, "msm_vidc") | 
			
		
	
		
			
				
					|  |  |  |  |     affine_irq(1, "i2c_geni") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # mask off big cluster from default affinity | 
			
		
	
		
			
				
					|  |  |  |  |     sudo_write("f", "/proc/irq/default_smp_affinity") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # *** GPU config *** | 
			
		
	
	
		
			
				
					|  |  |  | 
 |