13 #include "sw/device/silicon_creator/lib/drivers/otp.h"
14 #include "sw/device/silicon_creator/lib/drivers/pinmux.h"
15 #include "sw/device/silicon_creator/lib/drivers/uart.h"
16 #include "sw/device/silicon_creator/lib/error.h"
17 #include "sw/device/silicon_creator/lib/manifest_def.h"
20 #include "otp_ctrl_regs.h"
21 #include "pinmux_regs.h"
22 #include "uart_regs.h"
44 static void setup_stdout(
void) {
56 static void fault(
void) {
63 #define CHECK_EQ(lhs_, rhs_, name_) \
67 LOG_ERROR("Check failed: %s (0x%08x != 0x%08x)", name_, lhs_, rhs_); \
80 static uint32_t pad_attr_mask_get(
void) {
82 "This test is only supported for CW310");
95 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_0_REG_OFFSET);
99 abs_mmio_write32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_0_REG_OFFSET, UINT32_MAX);
100 uint32_t attr0_legal =
101 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_0_REG_OFFSET);
102 CHECK_EQ(attr0_legal, mask,
"Pad attribute mask check");
105 abs_mmio_write32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_0_REG_OFFSET, attr0_orig);
125 static void pinmux_init_test(
void) {
126 uint32_t bootstrap_dis =
127 otp_read32(OTP_CTRL_PARAM_OWNER_SW_CFG_ROM_BOOTSTRAP_DIS_OFFSET);
129 uint32_t attr_mask = pad_attr_mask_get();
132 uint32_t insel_gpio22 =
133 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PERIPH_INSEL_22_REG_OFFSET);
135 "GPIO 22 input selector");
139 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_22_REG_OFFSET);
143 "GPIO 22 pull enable");
146 false,
"GPIO 22 pull select");
149 uint32_t insel_gpio23 =
150 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PERIPH_INSEL_23_REG_OFFSET);
152 "GPIO 23 input selector");
156 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_23_REG_OFFSET);
160 "GPIO 23 pull enable");
163 false,
"GPIO 23 pull select");
166 uint32_t insel_gpio24 =
167 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PERIPH_INSEL_24_REG_OFFSET);
169 "GPIO 24 input selector");
173 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PAD_ATTR_24_REG_OFFSET);
177 "GPIO 24 pull enable");
180 false,
"GPIO 24 pull select");
184 uint32_t insel_uartrx =
185 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_PERIPH_INSEL_42_REG_OFFSET);
189 uint32_t outsel_ioc4 =
190 abs_mmio_read32(kPinmuxBase + PINMUX_MIO_OUTSEL_26_REG_OFFSET);
192 "UART Tx output selector");
208 static void uart_init_test(
void) {
210 uint32_t ctrl = abs_mmio_read32(kUartBase + UART_CTRL_REG_OFFSET);
216 "UART.CTRL.SLPBK_BIT");
218 "UART.CTRL.LLPBK_BIT");
220 "UART.CTRL.NCO_FIELD");
222 "UART.CTRL.PARITY_EN_BIT");
225 uint32_t intr_enable =
226 abs_mmio_read32(kUartBase + UART_INTR_ENABLE_REG_OFFSET);
227 CHECK_EQ(intr_enable, 0x0,
"UART.INTR_ENABLE");
230 uint32_t
status = abs_mmio_read32(kUartBase + UART_STATUS_REG_OFFSET);
232 "UART.STATUS.TXIDLE_BIT");
234 "UART.STATUS.RXIDLE_BIT");
236 "UART.STATUS.TXEMPTY_BIT");
238 "UART.STATUS.RXEMPTY_BIT");
247 static void cpuctrl_init_test(
void) {
248 uint32_t expected_value =
249 otp_read32(OTP_CTRL_PARAM_CREATOR_SW_CFG_CPUCTRL_OFFSET);
251 uint32_t cpuctrl_csr;
252 CSR_READ(CSR_REG_CPUCTRL, &cpuctrl_csr);
264 void __attribute__((aligned(4))) _ottf_start(
void) {