From 495de756259c4977b902e7494f61bc41db64d6a8 Mon Sep 17 00:00:00 2001 From: James Wainwright Date: Tue, 28 Jan 2025 15:19:48 +0000 Subject: [PATCH 1/2] [ot] python/qemu: use Python 3.9 syntax for type unions Signed-off-by: James Wainwright --- python/qemu/ot/dm/dm.py | 8 ++++---- python/qemu/ot/dm/otp.py | 6 +++--- python/qemu/ot/lc_ctrl/lcdmi.py | 8 ++++---- python/qemu/ot/otp/partition.py | 6 +++--- python/qemu/ot/spi/spi_device.py | 4 ++-- python/qemu/ot/util/log.py | 4 ++-- python/qemu/ot/util/misc.py | 4 ++-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/python/qemu/ot/dm/dm.py b/python/qemu/ot/dm/dm.py index 6483d906fa7c8..bce425c185c8e 100644 --- a/python/qemu/ot/dm/dm.py +++ b/python/qemu/ot/dm/dm.py @@ -10,7 +10,7 @@ from io import SEEK_END from logging import getLogger from time import sleep, time as now -from typing import Any, BinaryIO, Optional +from typing import Any, BinaryIO, Optional, Union from .regs import CSRS, GPRS from ..bitfield import BitField @@ -277,7 +277,7 @@ def resume(self, hart: int = 0) -> None: self._log.error('Status %s', status) raise TimeoutError(f'Cannot resume hart {self._hart}') - def read_csr(self, reg: [str | int]) -> int: + def read_csr(self, reg: Union[str, int]) -> int: """Read the value of a CSR.""" ireg = self._get_register_index(reg) btf = self.BITFIELDS['COMMAND'] @@ -292,7 +292,7 @@ def read_csr(self, reg: [str | int]) -> int: self._log.info('read %s = %08x', reg, value) return value - def write_csr(self, reg: [str | int], value: int) -> None: + def write_csr(self, reg: Union[str, int], value: int) -> None: """Write a value to a CSR.""" ireg = self._get_register_index(reg) btf = self.BITFIELDS['COMMAND'] @@ -497,7 +497,7 @@ def _read_reg(self, reg: str) -> int: self._log.debug('read 0x%08x', value) return value - def _get_register_index(self, reg: [str | int]) -> int: + def _get_register_index(self, reg: Union[str, int]) -> int: if isinstance(reg, str): # Not supported: FPR, Vector, etc. ireg = CSRS.get(reg.lower()) diff --git a/python/qemu/ot/dm/otp.py b/python/qemu/ot/dm/otp.py index 3f8b34745fdef..e2fe3a0cefd45 100644 --- a/python/qemu/ot/dm/otp.py +++ b/python/qemu/ot/dm/otp.py @@ -10,7 +10,7 @@ from enum import IntEnum from logging import getLogger from time import sleep, time as now -from typing import Optional +from typing import Optional, Union from .dm import DebugModule from ..bitfield import BitField @@ -166,7 +166,7 @@ def is_wide_granule(cls, partition: OtpPartition, offset: int) -> bool: return partition.secret or (partition.digest_offset == offset & ~0b111) def read_partition_item(self, partname: str, itemname: str) \ - -> [int | bytes]: + -> Union[int, bytes]: pname = partname.upper() try: part = self._partitions[pname] @@ -205,7 +205,7 @@ def read_partition_item(self, partname: str, itemname: str) \ return bytes(buffer) def write_partition_item(self, partname: str, itemname: str, - value: [int | bytes | bytearray | str]) -> None: + value: Union[int, bytes, bytearray, str]) -> None: pname = partname.upper() try: part = self._partitions[pname] diff --git a/python/qemu/ot/lc_ctrl/lcdmi.py b/python/qemu/ot/lc_ctrl/lcdmi.py index bcc0c5fb2931a..0ea3155829008 100644 --- a/python/qemu/ot/lc_ctrl/lcdmi.py +++ b/python/qemu/ot/lc_ctrl/lcdmi.py @@ -9,7 +9,7 @@ from binascii import Error as BinasciiError, hexlify, unhexlify from logging import getLogger from struct import pack as spack, unpack as sunpack -from typing import NamedTuple +from typing import NamedTuple, Union from . import LifeCycleError from ..dtm import DebugTransportModule @@ -183,7 +183,7 @@ def transition_token(self) -> bytes: return token @transition_token.setter - def transition_token(self, token: [bytes | bytearray | str | None]) -> None: + def transition_token(self, token: Union[bytes, bytearray, str, None]) -> None: """Define the transition token as a 16-byte token. :param token: if None, use an empty zeroed token, @@ -216,7 +216,7 @@ def transition_target(self) -> tuple[str, int]: return starget, target @transition_target.setter - def transition_target(self, target: [str | int]) -> None: + def transition_target(self, target: Union[str, int]) -> None: """Define the transition token as a 16-byte token.""" if isinstance(target, str): itarget = self._encode_state(target) @@ -240,7 +240,7 @@ def otp_vendor_test_status(self) -> int: return self._read_reg('otp_vendor_test_status') @property - def lc_state(self) -> [str | int]: + def lc_state(self) -> Union[str, int]: """Report the current state.""" istate = self._read_reg('lc_state') tix = self._check_state(istate) diff --git a/python/qemu/ot/otp/partition.py b/python/qemu/ot/otp/partition.py index a4af3f812792a..38a72007b218d 100644 --- a/python/qemu/ot/otp/partition.py +++ b/python/qemu/ot/otp/partition.py @@ -9,7 +9,7 @@ from binascii import hexlify, unhexlify, Error as hexerror from io import BytesIO from logging import getLogger -from typing import BinaryIO, Optional, TextIO +from typing import BinaryIO, Optional, TextIO, Union from .lifecycle import OtpLifecycle @@ -23,7 +23,7 @@ class OtpPartitionDecoder: """Custom partition value decoder.""" - def decode(self, category: str, seq: str) -> Optional[str | int]: + def decode(self, category: str, seq: str) -> Optional[Union[str, int]]: """Decode a value (if possible).""" raise NotImplementedError('abstract base class') @@ -206,7 +206,7 @@ class OtpLifecycleExtension(OtpLifecycle, OtpPartitionDecoder): """Decoder for Lifecyle bytes sequences. """ - def decode(self, category: str, seq: str) -> Optional[str | int]: + def decode(self, category: str, seq: str) -> Optional[Union[str, int]]: try: iseq = hexlify(bytes(reversed(unhexlify(seq)))).decode() except (ValueError, TypeError, hexerror) as exc: diff --git a/python/qemu/ot/spi/spi_device.py b/python/qemu/ot/spi/spi_device.py index fe47d27e78af2..b3e729dfc62b2 100644 --- a/python/qemu/ot/spi/spi_device.py +++ b/python/qemu/ot/spi/spi_device.py @@ -13,7 +13,7 @@ SHUT_RDWR, timeout as LegacyTimeoutError) from struct import calcsize as scalc, pack as spack from time import sleep, time as now -from typing import Optional +from typing import Optional, Union class SpiDevice: @@ -102,7 +102,7 @@ def quit(self) -> None: self._socket = None def transmit(self, cmd: Optional[int] = None, - in_payload: Optional[bytes | bytearray | int] = None, + in_payload: Optional[Union[bytes, bytearray, int]] = None, out_len: int = 0, release: bool = True) -> bytes: """SPI data transfer. diff --git a/python/qemu/ot/util/log.py b/python/qemu/ot/util/log.py index 781067005560b..f1b10b9e671ac 100644 --- a/python/qemu/ot/util/log.py +++ b/python/qemu/ot/util/log.py @@ -156,7 +156,7 @@ def format(self, record): formatter = logging.Formatter(log_fmt, *self._formatter_args) return formatter.format(record) - def add_logger_colors(self, logname: str, color: Union[int | str]) -> None: + def add_logger_colors(self, logname: str, color: Union[int, str]) -> None: """Assign a color to the message of a specific logger.""" if not self._use_ansi: return @@ -190,7 +190,7 @@ def override_xcolors(cls, codes: Sequence[int]) -> None: cls.XCOLORS = xcolors -def configure_loggers(level: int, *lognames: list[Union[str | int | Color]], +def configure_loggers(level: int, *lognames: list[Union[str, int, Color]], **kwargs) -> list[logging.Logger]: """Configure loggers. diff --git a/python/qemu/ot/util/misc.py b/python/qemu/ot/util/misc.py index 43a0464eee667..ca43d0ed873db 100644 --- a/python/qemu/ot/util/misc.py +++ b/python/qemu/ot/util/misc.py @@ -8,14 +8,14 @@ from io import BytesIO from sys import stdout -from typing import Any, Iterable, Optional, TextIO +from typing import Any, Iterable, Optional, TextIO, Union import re try: # only available from Python 3.12+ from collections.abc import Buffer except ImportError: - Buffer = [bytes | bytearray | memoryview] + Buffer = Union[bytes, bytearray, memoryview] class classproperty(property): From 1e09664feba3f75da1999df7b94bd93d994dbc78 Mon Sep 17 00:00:00 2001 From: James Wainwright Date: Tue, 28 Jan 2025 15:20:29 +0000 Subject: [PATCH 2/2] [ot] scripts/opentitan: use Python 3.9 syntax for type unions Signed-off-by: James Wainwright --- scripts/opentitan/flashgen.py | 4 ++-- scripts/opentitan/gdbreplay.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/opentitan/flashgen.py b/scripts/opentitan/flashgen.py index a04f94a649866..84460fc8efdbc 100755 --- a/scripts/opentitan/flashgen.py +++ b/scripts/opentitan/flashgen.py @@ -18,7 +18,7 @@ join as joinpath, normpath) from struct import calcsize as scalc, pack as spack, unpack as sunpack from traceback import format_exc -from typing import Any, BinaryIO, NamedTuple, Optional +from typing import Any, BinaryIO, NamedTuple, Optional, Union import re import sys @@ -216,7 +216,7 @@ def info_part_size(cls) -> int: return sum(cls.INFOS) * cls.BYTES_PER_PAGE def read_boot_info(self) -> dict[BootLocation, - dict[str, [int | bytes]]]: + dict[str, Union[int, bytes]]]: size = self._boot_header_size fmt = ''.join(self.BOOT_HEADER_FORMAT.values()) boot_entries = {} diff --git a/scripts/opentitan/gdbreplay.py b/scripts/opentitan/gdbreplay.py index cacd801c6ec09..31c13d0445d54 100755 --- a/scripts/opentitan/gdbreplay.py +++ b/scripts/opentitan/gdbreplay.py @@ -17,7 +17,7 @@ timeout as LegacyTimeoutError) from string import ascii_uppercase from traceback import format_exc -from typing import BinaryIO, Optional, TextIO +from typing import BinaryIO, Optional, TextIO, Union import re import sys @@ -461,7 +461,7 @@ def _send(self, payload: str): self._log.info('Reply: "%s"', payload) self._send_bytes(payload.encode()) - def _send_bytes(self, payload: [bytes | bytearray]): + def _send_bytes(self, payload: Union[bytes, bytearray]): """Send a reply to the remote GDB client. :param payload: the byte sequence to send