mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-09-11 02:33:41 +08:00
log chestnut supply fault (#38711)
* log chestnut INA supply fault * ci
This commit is contained in:
@@ -725,6 +725,7 @@ struct ChestnutState {
|
|||||||
pcieLtssm @7 :UInt8;
|
pcieLtssm @7 :UInt8;
|
||||||
supplyVoltage @8 :UInt16; # mV
|
supplyVoltage @8 :UInt16; # mV
|
||||||
supplyCurrent @9 :Int16; # mA
|
supplyCurrent @9 :Int16; # mA
|
||||||
|
supplyFault @10 :Bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RadarState @0x9a185389d6fdd05f {
|
struct RadarState @0x9a185389d6fdd05f {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import os
|
|||||||
os.environ['GMMU'] = '0' # for chestnut fast loading, noop for qcom
|
os.environ['GMMU'] = '0' # for chestnut fast loading, noop for qcom
|
||||||
from tinygrad.tensor import Tensor
|
from tinygrad.tensor import Tensor
|
||||||
from tinygrad.device import Device
|
from tinygrad.device import Device
|
||||||
|
import usb1
|
||||||
import struct
|
import struct
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
@@ -31,6 +32,7 @@ from openpilot.selfdrive.modeld.parse_model_outputs import Parser
|
|||||||
from openpilot.selfdrive.modeld.compile_modeld import make_input_queues, WARP_INPUTS, POLICY_INPUTS
|
from openpilot.selfdrive.modeld.compile_modeld import make_input_queues, WARP_INPUTS, POLICY_INPUTS
|
||||||
from openpilot.selfdrive.modeld.fill_model_msg import fill_model_msg, fill_driving_model_data, fill_pose_msg, PublishState
|
from openpilot.selfdrive.modeld.fill_model_msg import fill_model_msg, fill_driving_model_data, fill_pose_msg, PublishState
|
||||||
from openpilot.common.file_chunker import open_file_chunked
|
from openpilot.common.file_chunker import open_file_chunked
|
||||||
|
from openpilot.common.hardware.usb import CHESTNUT_USB_IDS
|
||||||
from openpilot.selfdrive.modeld.constants import ModelConstants, Plan
|
from openpilot.selfdrive.modeld.constants import ModelConstants, Plan
|
||||||
from openpilot.selfdrive.modeld.helpers import chestnut_present, chestnut_compiled, modeld_pkl_path, get_tg_input_devices, load_oob
|
from openpilot.selfdrive.modeld.helpers import chestnut_present, chestnut_compiled, modeld_pkl_path, get_tg_input_devices, load_oob
|
||||||
|
|
||||||
@@ -79,6 +81,37 @@ class ChestnutState:
|
|||||||
self.valid = True
|
self.valid = True
|
||||||
self.sends = 0
|
self.sends = 0
|
||||||
self.metrics = {}
|
self.metrics = {}
|
||||||
|
self._asm_usb = None
|
||||||
|
|
||||||
|
def _close_asm_usb(self) -> None:
|
||||||
|
if self._asm_usb is not None:
|
||||||
|
self._asm_usb.close()
|
||||||
|
self._asm_usb = None
|
||||||
|
|
||||||
|
def _open_asm_usb(self):
|
||||||
|
context = usb1.USBContext()
|
||||||
|
for vendor_id, product_id in CHESTNUT_USB_IDS:
|
||||||
|
if (handle := context.openByVendorIDAndProductID(vendor_id, product_id, skip_on_error=True)) is not None:
|
||||||
|
return handle
|
||||||
|
context.close()
|
||||||
|
|
||||||
|
def _read_ina(self) -> tuple[int, int, bool]:
|
||||||
|
if "AMD" in Device._opened_devices and self._asm_usb is None:
|
||||||
|
try:
|
||||||
|
raw = Device["AMD"].iface.pci_dev.usb.usb.control_read(0xC0, 5)
|
||||||
|
return struct.unpack('<Hh?', bytes(raw))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
if self._asm_usb is None:
|
||||||
|
self._asm_usb = self._open_asm_usb()
|
||||||
|
if self._asm_usb is None:
|
||||||
|
raise usb1.USBErrorNoDevice
|
||||||
|
try:
|
||||||
|
raw = self._asm_usb.controlRead(0xC0, 0xC0, 0, 0, 5, timeout=100)
|
||||||
|
except usb1.USBError:
|
||||||
|
self._close_asm_usb()
|
||||||
|
raise
|
||||||
|
return struct.unpack('<Hh?', bytes(raw))
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def power_limit(self) -> int:
|
def power_limit(self) -> int:
|
||||||
@@ -114,13 +147,15 @@ class ChestnutState:
|
|||||||
setattr(state, k, v)
|
setattr(state, k, v)
|
||||||
|
|
||||||
asm_valid = False
|
asm_valid = False
|
||||||
|
try:
|
||||||
|
# ASM runs on USB-C power, these still read without a gpu
|
||||||
|
state.supplyVoltage, state.supplyCurrent, state.supplyFault = self._read_ina()
|
||||||
|
asm_valid = True
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
if "AMD" in Device._opened_devices:
|
if "AMD" in Device._opened_devices:
|
||||||
try:
|
try:
|
||||||
# ASM runs on USB-C power, these still read without a gpu
|
state.pcieLtssm = Device["AMD"].iface.pci_dev.usb.read(0xB450, 1)[0]
|
||||||
asm = Device["AMD"].iface.pci_dev.usb
|
|
||||||
state.pcieLtssm = asm.read(0xB450, 1)[0]
|
|
||||||
state.supplyVoltage, state.supplyCurrent = struct.unpack('<Hh', bytes(asm.usb.control_read(0xC0, 5))[:4])
|
|
||||||
asm_valid = True
|
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user