| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| /* PCIe reset pin */ |
| #define GEN2_PCI_RESET_RESUMEWELL_GPIO 0 |
| |
| static const struct reg_script gen2_gpio_init[] = { |
| /* Initialize the legacy GPIO controller */ |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGEN_CORE_WELL, 0x03), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGIO_CORE_WELL, 0x03), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGLVL_CORE_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGTPE_CORE_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGTNE_CORE_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGGPE_CORE_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGSMI_CORE_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CGTS_CORE_WELL, 0x03), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_CNMIEN_CORE_WELL, 0x00), |
| |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGEN_RESUME_WELL, 0x3f), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGIO_RESUME_WELL, 0x1c), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGLVL_RESUME_WELL, 0x02), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGTPE_RESUME_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGTNE_RESUME_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGGPE_RESUME_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGSMI_RESUME_WELL, 0x00), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RGTS_RESUME_WELL, 0x3f), |
| REG_LEG_GPIO_WRITE(R_QNC_GPIO_RNMIEN_RESUME_WELL, 0x00), |
| |
| /* Initialize the GPIO controller */ |
| REG_GPIO_WRITE(GPIO_INTEN, 0), |
| REG_GPIO_WRITE(GPIO_INTSTATUS, 0), |
| REG_GPIO_WRITE(GPIO_SWPORTA_DR, 5), |
| REG_GPIO_WRITE(GPIO_SWPORTA_DDR, 5), |
| REG_GPIO_WRITE(GPIO_INTMASK, 0), |
| REG_GPIO_WRITE(GPIO_INTTYPE_LEVEL, 0), |
| REG_GPIO_WRITE(GPIO_INT_POLARITY, 0), |
| REG_GPIO_WRITE(GPIO_DEBOUNCE, 0), |
| REG_GPIO_WRITE(GPIO_LS_SYNC, 0), |
| |
| REG_SCRIPT_END |
| }; |
| |
| static const struct reg_script gen2_hsuart0[] = { |
| /* Route UART0_TXD to MUX7_Y -> BUF_IO1 -> IO1 -> DIGITAL 1 |
| * Set MUX7_SEL (EXP1.P1_5) high |
| * Configure MUX7_SEL (EXP1.P1_5) as an output |
| * Set LVL_B_OE6_N (EXP0.P1_4) low |
| * Configure LVL_B_OE6_N (EXP0.P1_4) as an output |
| */ |
| REG_I2C_OR(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_OUTPUT1, BIT5), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_CONFIG1, ~BIT5), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP0, GEN2_GPIO_EXP_OUTPUT1, ~BIT4), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP0, GEN2_GPIO_EXP_CONFIG1, ~BIT4), |
| |
| /* Route DIGITAL 0 -> IO0 -> UART0_RXD |
| * Set LVL_C_OE0_N (EXP1.P0_0) high |
| * Configure LVL_C_OE0_N (EXP1.P0_0) as an output |
| */ |
| REG_I2C_OR(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_OUTPUT0, BIT0), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_CONFIG0, ~BIT0), |
| |
| REG_SCRIPT_END |
| }; |
| |
| static const struct reg_script gen2_i2c_init[] = { |
| /* Route I2C to Arduino Shield connector: |
| * Set AMUX1_IN (EXP2.P1_4) low |
| * Configure AMUX1_IN (EXP2.P1_4) as an output |
| * |
| * I2C_SDA -> ANALOG_A4 |
| * I2C_SCL -> ANALOG_A5 |
| */ |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP2, GEN2_GPIO_EXP_OUTPUT1, ~BIT4), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP2, GEN2_GPIO_EXP_CONFIG1, ~BIT4), |
| |
| /* Set all GPIO expander pins connected to the Reset Button as inputs |
| * Configure Reset Button(EXP1.P1_7) as an input |
| * Disable pullup on Reset Button(EXP1.P1_7) |
| * Configure Reset Button(EXP2.P1_7) as an input |
| * Disable pullup on Reset Button(EXP2.P1_7) |
| */ |
| REG_I2C_OR(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_CONFIG1, BIT7), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_PULL_UP_DOWN_EN1, ~BIT7), |
| REG_I2C_OR(GEN2_I2C_GPIO_EXP2, GEN2_GPIO_EXP_CONFIG1, BIT7), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP2, GEN2_GPIO_EXP_PULL_UP_DOWN_EN1, ~BIT7), |
| |
| REG_SCRIPT_END |
| }; |
| |
| static const struct reg_script gen2_tpm_reset[] = { |
| /* Reset the TPM using SW_RESET_N_SHLD (EXP1 P1.7): |
| * low, output, delay, input |
| */ |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_OUTPUT1, ~BIT7), |
| REG_I2C_AND(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_CONFIG1, ~BIT7), |
| TIME_DELAY_USEC(5), |
| REG_I2C_OR(GEN2_I2C_GPIO_EXP1, GEN2_GPIO_EXP_CONFIG1, BIT7), |
| |
| REG_SCRIPT_END |
| }; |