Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
137 changes: 85 additions & 52 deletions CI/update/stm32variant.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@
ospidata6_list = [] # ['PIN','name','OSPIDATA6', ['af']]
ospidata7_list = [] # ['PIN','name','OSPIDATA7', ['af']]
xspisclk_list = [] # ['PIN','name','XSPISCLK', ['af']]
xspissel_list = [] # ['PIN','name','XSPISSEL', ['af']]
xspincs1_list = [] # ['PIN','name','XSPINCS1', ['af']]
xspincs2_list = [] # ['PIN','name','XSPINCS2', ['af']]
xspinclk_list = [] # ['PIN','name','XSPINCLK', ['af']]
xspidqs_list = [] # ['PIN','name','XSPIDQS', ['af']]
syswkup_list = [] # ['PIN','name','SYSWKUP']
usb_list = [] # ['PIN','name','USB', ['af']]
usb_otgfs_list = [] # ['PIN','name','USB', ['af']]
Expand Down Expand Up @@ -222,12 +225,8 @@ def parse_mcu_file():
ignored_stm32_list.append(mcu_family)
xml_mcu.unlink()
return False

mcu_refname = mcu_node.attributes["RefName"].value
# Skip STM32H5E/F series
if mcu_refname.startswith("STM32H5E") or mcu_refname.startswith("STM32H5F"):
print(f"Warning: {mcu_refname} series is not supported yet. Skipping.")
xml_mcu.unlink()
return False
core_node = mcu_node.getElementsByTagName("Core")
for f in core_node:
# Strip last non digit characters and extract the number
Expand Down Expand Up @@ -610,10 +609,16 @@ def store_xspi(pin, name, signal):
ospidata6_list.append([pin, name, signal])
elif "_IO7" in signal:
ospidata7_list.append([pin, name, signal])
elif "_NCLK" in signal:
xspinclk_list.append([pin, name, signal])
elif "_DQS" in signal:
xspidqs_list.append([pin, name, signal])
elif signal.endswith(("_NCS1", "_NCS", "_BK1_NCS")):
xspincs1_list.append([pin, name, signal])
elif signal.endswith(("_NCS2", "_BK2_NCS")):
xspincs2_list.append([pin, name, signal])
elif "_CLK" in signal:
xspisclk_list.append([pin, name, signal])
elif "_NCS" in signal:
xspissel_list.append([pin, name, signal])


# Store SYS pins
Expand Down Expand Up @@ -1001,9 +1006,17 @@ def can_pinmap(lst):

def eth_pinmap():
eth_pins_list = []
seen_pins = {}
wpin = [0]
inst = "ETH"
for p in eth_list:
pin = re.sub(r"_ALT\d+$", "", p[0])
key = (pin, p[1], p[3])
if key in seen_pins:
entry = eth_pins_list[seen_pins[key]]
if p[2] not in entry["cmt"].split(" | "):
entry["cmt"] += " | " + p[2]
continue
# Note: Some pins are duplicated with only a different signal
# Now considered as an ALTX pins even ifsame AF
wpin.append(len(p[0]))
Expand All @@ -1017,6 +1030,7 @@ def eth_pinmap():
"cmt": p[2],
}
)
seen_pins[key] = len(eth_pins_list) - 1
return dict(
name="ETHERNET",
hal=(
Expand All @@ -1038,11 +1052,14 @@ def xspi_pinmap(lst):
wpin = [0]
name = "QUADSPI"
hal = "QSPI"
ospi_regex = r"OCTOSPI(?:M_P)?(\d).*"
xspi_regex = r"(OCTOSPI|XSPI)(?:M_P)?(\d).*"

if xspidata0_list and "OCTOSPI" in xspidata0_list[0][2]:
name = "OCTOSPI"
hal = "OSPI"
elif xspidata0_list and "XSPI" in xspidata0_list[0][2]:
name = "XSPI"
hal = "XSPI"
if lst == xspidata0_list:
aname = f"{name}_DATA0"
elif lst == xspidata1_list:
Expand All @@ -1061,16 +1078,21 @@ def xspi_pinmap(lst):
aname = f"{name}_DATA7"
elif lst == xspisclk_list:
aname = f"{name}_SCLK"
elif lst == xspinclk_list:
aname = f"{name}_NCLK"
elif lst == xspidqs_list:
aname = f"{name}_DQS"
elif lst == xspincs2_list:
aname = f"{name}_NCS2"
elif lst == xspincs1_list:
aname = f"{name}_NCS1"
else:
aname = f"{name}_SSEL"
aname = f"{name}_NCS1"
for p in lst:
# 2nd element is the XXXXSPI_YYYY signal
instm = re.match(ospi_regex, p[2])
instm = re.match(xspi_regex, p[2])
if instm:
if "1" in instm.group(1):
inst = "OCTOSPI1"
elif "2" in instm.group(1):
inst = "OCTOSPI2"
inst = f"{instm.group(1)}{instm.group(2)}"
else:
inst = "QUADSPI"
winst.append(len(inst))
Expand Down Expand Up @@ -1099,33 +1121,27 @@ def xspi_pinmap(lst):
def usb_pinmap(lst):
usb_pins_list = []
wpin = [0]
use_hs_in_fs = False
nb_loop = 1

if lst == usb_otgfs_list:
inst = usb_inst["otg_fs"]
pin_groups = [(lst, 0)]
elif lst == usb_otghs_list:
inst = usb_inst["otg_hs"]
nb_loop = 2
sof_pins = [p for p in lst if "SOF" in p[2]]
fs_pins = [p for p in lst if "SOF" not in p[2] and "ULPI" not in p[2]]
ulpi_pins = [p for p in lst if "ULPI" in p[2]]
pin_groups = [(sof_pins, 0)]
if fs_pins:
pin_groups.append((fs_pins, 1))
if ulpi_pins:
pin_groups.append((ulpi_pins, 2 if fs_pins else 0))
else:
inst = usb_inst["usb"]
for nb in range(nb_loop):
for p in lst:
hsinfs = 0
if lst == usb_otghs_list:
hsinfs = 3
if nb == 0:
if "ULPI" in p[2]:
continue
elif not use_hs_in_fs:
hsinfs = 1
use_hs_in_fs = True
else:
if "ULPI" not in p[2]:
continue
elif use_hs_in_fs:
hsinfs = 2
use_hs_in_fs = False
pin_groups = [(lst, 0)]

for pins, group_marker in pin_groups:
for pin_index, p in enumerate(pins):
hsinfs = group_marker if pin_index == 0 else 3

# 2nd element is the USB_XXXX signal
if not p[2].startswith("USB_D") and "VBUS" not in p[2]:
Expand Down Expand Up @@ -1159,6 +1175,7 @@ def usb_pinmap(lst):
hal=["PCD", "HCD"],
aname=inst,
data="",
hsinfs=any(marker == 1 for _, marker in pin_groups),
wpin=max(wpin) + 1,
winst=len(inst) + 1,
list=usb_pins_list,
Expand Down Expand Up @@ -1242,6 +1259,21 @@ def print_peripheral():
else:
usb_pinmmap = [usb_pinmap(usb_otghs_list)]

xspi_pinmaps = (
xspi_pinmap(xspidata0_list),
xspi_pinmap(xspidata1_list),
xspi_pinmap(xspidata2_list),
xspi_pinmap(xspidata3_list),
xspi_pinmap(ospidata4_list),
xspi_pinmap(ospidata5_list),
xspi_pinmap(ospidata6_list),
xspi_pinmap(ospidata7_list),
xspi_pinmap(xspisclk_list),
xspi_pinmap(xspincs1_list),
xspi_pinmap(xspincs2_list),
)
xspi_pinmaps += (xspi_pinmap(xspinclk_list), xspi_pinmap(xspidqs_list))

periph_c_file.write(
periph_c_template.render(
year=year,
Expand All @@ -1267,18 +1299,7 @@ def print_peripheral():
),
(can_pinmap(canrd_list), can_pinmap(cantd_list)),
[eth_pinmap()],
(
xspi_pinmap(xspidata0_list),
xspi_pinmap(xspidata1_list),
xspi_pinmap(xspidata2_list),
xspi_pinmap(xspidata3_list),
xspi_pinmap(ospidata4_list),
xspi_pinmap(ospidata5_list),
xspi_pinmap(ospidata6_list),
xspi_pinmap(ospidata7_list),
xspi_pinmap(xspisclk_list),
xspi_pinmap(xspissel_list),
),
xspi_pinmaps,
usb_pinmmap,
(
sdx_pinmap(sdxcmd_list),
Expand Down Expand Up @@ -1984,7 +2005,10 @@ def sort_my_lists():
ospidata6_list.sort(key=natural_sortkey)
ospidata7_list.sort(key=natural_sortkey)
xspisclk_list.sort(key=natural_sortkey)
xspissel_list.sort(key=natural_sortkey)
xspincs1_list.sort(key=natural_sortkey)
xspincs2_list.sort(key=natural_sortkey)
xspinclk_list.sort(key=natural_sortkey)
xspidqs_list.sort(key=natural_sortkey)
syswkup_list.sort(key=natural_sortkey2)
usb_list.sort(key=natural_sortkey)
usb_otgfs_list.sort(key=natural_sortkey)
Expand Down Expand Up @@ -2037,7 +2061,10 @@ def clean_all_lists():
del ospidata6_list[:]
del ospidata7_list[:]
del xspisclk_list[:]
del xspissel_list[:]
del xspincs1_list[:]
del xspincs2_list[:]
del xspinclk_list[:]
del xspidqs_list[:]
del syswkup_list[:]
del usb_list[:]
del usb_otgfs_list[:]
Expand Down Expand Up @@ -2085,7 +2112,10 @@ def manage_af_and_alternate():
add_af(ospidata6_list)
add_af(ospidata7_list)
add_af(xspisclk_list)
add_af(xspissel_list)
add_af(xspincs1_list)
add_af(xspincs2_list)
add_af(xspinclk_list)
add_af(xspidqs_list)
add_af(usb_list)
add_af(usb_otgfs_list)
add_af(usb_otghs_list)
Expand Down Expand Up @@ -2133,7 +2163,10 @@ def manage_af_and_alternate():
update_alternate(ospidata6_list)
update_alternate(ospidata7_list)
update_alternate(xspisclk_list)
update_alternate(xspissel_list)
update_alternate(xspincs1_list)
update_alternate(xspincs2_list)
update_alternate(xspinclk_list)
update_alternate(xspidqs_list)
update_alternate(syswkup_list)
update_alternate(usb_list)
update_alternate(usb_otgfs_list)
Expand Down Expand Up @@ -2249,7 +2282,7 @@ def parse_pins():
elif re.match("^(LPU|US|U)ART", sig) is not None:
store_uart(pin, name, sig)
elif "SPI" in sig:
if "QUADSPI" in sig or "OCTOSPI" in sig:
if "QUADSPI" in sig or "OCTOSPI" in sig or "XSPI" in sig:
store_xspi(pin, name, sig)
else:
store_spi(pin, name, sig)
Expand Down
Loading
Loading