feat: MSS IOMUX/pinmux driver implementation and host unit tests #118
Labels
No labels
Category
App
Category
Documentation
Category
Firmware
Category
Hardware
Category
Qms
PR_Size
L
PR_Size
M
PR_Size
S
PR_Size
XL
PR_Size
XS
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Priority
Very Low Priority
Size
Epic
Size
Feature
Size
Task
Status
Blocked
Status
Draft
Status
Needs-review
Team
Board
Team
Dev
Team
Management
Type
Bug
Type
Capa
Type
Improvement
Type
New-feature
Type
Regulatory
Type
Usability
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
opendutchsolutions.public/hal_awr6843#118
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Description
Adds
hal/mss/pinmux/hal_pinmux.c/.h— driver for the MSS_IOMUX pad-configuration block (base address0xFFFFEA00, TI TRM/CSL name "MSS_IOMUX"), a genuinely missing layer this HAL has had no coverage for at all: every pin on this device is individually muxed between GPIO/peripheral/alternate functions via aPADxx_CFG_REG[49]array plus a kick-register (IOCFGKICK0/IOCFGKICK1) write-protect mechanism, and neitherhal_gpio.cnor any peripheral driver in this HAL touches it. Confirmed missing the hard way: a downstream consumer project (an MSS barebones example) found that neither GPIO output nor UART TX/RX reached their physical pads on real AWR6843 hardware, because this driver simply didn't exist yet to route them there.Register layout cross-checked against two independent sources that agree exactly (offsets, the 49-entry
PADxx_CFG_REGarray, theUSERMODEEN/PADGLBLCFGREG/IOCFGKICK0/IOCFGKICK1tail, and the per-pad bitfield layout:FUNC_SELbits 0-3,IE_OVERRIDE_CTRL/IE_OVERRIDEbits 4-5,OE_OVERRIDE_CTRL/OE_OVERRIDEbits 6-7,PIbit 8,PUPDSELbit 9,SC1bit 10):mmwave_sdk_03_06_02_00-LTS/packages/ti/drivers/pinmux/include/reg_pinmux.h("auto-generated" per its own header,PINMUXRegs/MSS_IOMUX).AWR6843_IOMUX.h) and pinmux driver (pinmux_iwr68xx.c), independently confirmed working via real hardware bring-up on this exact board.The
IOCFGKICK0/IOCFGKICK1unlock/lock magic values (0x83E70B13/0x95A4F1E0to unlock,0x0/0x0to lock) have no register-level documentation in either source available to this project — both explicitly note they were recovered from TI's own mmWave SDK by observation, not derived from a register field description. Carried forward as-is, flagged as such in the driver's own comments, not re-derived.Use Case / Rationale
As a firmware developer, I need a
hal_pinmux_*API to route a physical pad to the peripheral function I actually want (GPIO, UART, SPI, ...) before that peripheral's own driver can have any real effect — every other MSS driver in this HAL implicitly assumes its pins are already muxed correctly and has no way to make that true itself.As a QMS reviewer, I need a host-native Catch2 test suite covering the unlock-write-lock sequence and pad-index bounds checking, runnable in CI without target hardware.
Acceptance Criteria
hal/mss/pinmux/hal_pinmux.c/.himplemented against the register layout cross-check abovetesting/mss/unit/hal_functionality/test_pinmux.cpasses underctestFunctional Impact
Fixes a real, confirmed-on-hardware gap: GPIO and UART pins were never actually routed to their intended function by this HAL, only configured at the peripheral-internal level.
Regulatory Impact
None
QMS Impact
None
Risk Impact
The undocumented
IOCFGKICK0/IOCFGKICK1magic values are a genuine, carried-forward risk note (not derived from a register field description this project has direct access to) — flagged explicitly in the driver rather than silently treated as fully verified.Related Issues / PRs
Relates to #4