static void setup_pinmux(void) { /* Write protect. */ gpio_input_pullup(GPIO(R1)); /* Recovery mode. */ gpio_input_pullup(GPIO(Q7)); /* Lid switch. */ gpio_input_pullup(GPIO(R4)); /* Power switch. */ gpio_input_pullup(GPIO(Q0)); /* Developer mode. */ gpio_input_pullup(GPIO(Q6)); /* EC in RW. */ gpio_input_pullup(GPIO(U4)); /* route PU4/5 to GMI to remove conflict w/PWM1/2. */ pinmux_set_config(PINMUX_GPIO_PU4_INDEX, PINMUX_GPIO_PU4_FUNC_NOR); /* s/b GMI */ pinmux_set_config(PINMUX_GPIO_PU5_INDEX, PINMUX_GPIO_PU5_FUNC_NOR); /* s/b GMI */ /* SOC and TPM reset GPIO, active low. */ gpio_output(GPIO(I5), 1); /* SPI1 MOSI */ pinmux_set_config(PINMUX_ULPI_CLK_INDEX, PINMUX_ULPI_CLK_FUNC_SPI1 | PINMUX_PULL_NONE | PINMUX_INPUT_ENABLE); /* SPI1 MISO */ pinmux_set_config(PINMUX_ULPI_DIR_INDEX, PINMUX_ULPI_DIR_FUNC_SPI1 | PINMUX_PULL_NONE | PINMUX_INPUT_ENABLE); /* SPI1 SCLK */ pinmux_set_config(PINMUX_ULPI_NXT_INDEX, PINMUX_ULPI_NXT_FUNC_SPI1 | PINMUX_PULL_NONE | PINMUX_INPUT_ENABLE); /* SPI1 CS0 */ pinmux_set_config(PINMUX_ULPI_STP_INDEX, PINMUX_ULPI_STP_FUNC_SPI1 | PINMUX_PULL_NONE | PINMUX_INPUT_ENABLE); /* I2C3 (cam) clock. */ pinmux_set_config(PINMUX_CAM_I2C_SCL_INDEX, PINMUX_CAM_I2C_SCL_FUNC_I2C3 | PINMUX_INPUT_ENABLE); /* I2C3 (cam) data. */ pinmux_set_config(PINMUX_CAM_I2C_SDA_INDEX, PINMUX_CAM_I2C_SDA_FUNC_I2C3 | PINMUX_INPUT_ENABLE); /* switch unused pin to GPIO */ gpio_set_mode(GPIO(X3), GPIO_MODE_GPIO); gpio_set_mode(GPIO(X4), GPIO_MODE_GPIO); gpio_set_mode(GPIO(X5), GPIO_MODE_GPIO); gpio_set_mode(GPIO(X6), GPIO_MODE_GPIO); gpio_set_mode(GPIO(X7), GPIO_MODE_GPIO); gpio_set_mode(GPIO(W3), GPIO_MODE_GPIO); }
void main(void) { void *entry; clock_early_uart(); // Serial out, tristate off. pinmux_set_config(PINMUX_KB_ROW9_INDEX, PINMUX_KB_ROW9_FUNC_UA3); // Serial in, tristate_on. pinmux_set_config(PINMUX_KB_ROW10_INDEX, PINMUX_KB_ROW10_FUNC_UA3 | PINMUX_TRISTATE | PINMUX_INPUT_ENABLE); if (CONFIG_BOOTBLOCK_CONSOLE) console_init(); clock_init(); bootblock_mainboard_init(); pinmux_set_config(PINMUX_CORE_PWR_REQ_INDEX, PINMUX_CORE_PWR_REQ_FUNC_PWRON); pinmux_set_config(PINMUX_CPU_PWR_REQ_INDEX, PINMUX_CPU_PWR_REQ_FUNC_CPU); pinmux_set_config(PINMUX_PWR_INT_N_INDEX, PINMUX_PWR_INT_N_FUNC_PMICINTR | PINMUX_TRISTATE | PINMUX_INPUT_ENABLE); power_enable_cpu_rail(); power_ungate_cpu(); entry = cbfs_load_stage(CBFS_DEFAULT_MEDIA, "fallback/romstage"); if (entry) clock_cpu0_config_and_reset(entry); hlt(); }
void main(void) { // enable pinmux clamp inputs clamp_tristate_inputs(); // enable JTAG at the earliest stage enable_jtag(); clock_early_uart(); // Serial out, tristate off. pinmux_set_config(PINMUX_KB_ROW9_INDEX, PINMUX_KB_ROW9_FUNC_UA3); // Serial in, tristate_on. pinmux_set_config(PINMUX_KB_ROW10_INDEX, PINMUX_KB_ROW10_FUNC_UA3 | PINMUX_PULL_UP | PINMUX_INPUT_ENABLE); // Mux some pins away from uart A. pinmux_set_config(PINMUX_UART2_CTS_N_INDEX, PINMUX_UART2_CTS_N_FUNC_UB3 | PINMUX_INPUT_ENABLE); pinmux_set_config(PINMUX_UART2_RTS_N_INDEX, PINMUX_UART2_RTS_N_FUNC_UB3); if (CONFIG_BOOTBLOCK_CONSOLE) { console_init(); exception_init(); } clock_init(); bootblock_mainboard_init(); pinmux_set_config(PINMUX_CORE_PWR_REQ_INDEX, PINMUX_CORE_PWR_REQ_FUNC_PWRON); pinmux_set_config(PINMUX_CPU_PWR_REQ_INDEX, PINMUX_CPU_PWR_REQ_FUNC_CPU); pinmux_set_config(PINMUX_PWR_INT_N_INDEX, PINMUX_PWR_INT_N_FUNC_PMICINTR | PINMUX_INPUT_ENABLE); run_romstage(); }
void bootblock_mainboard_init(void) { set_clock_sources(); clock_enable_clear_reset(CLK_L_CACHE2 | CLK_L_TMR, CLK_H_I2C5 | CLK_H_APBDMA, 0, CLK_V_MSELECT, 0, 0); // Board ID GPIOs, bits 0-3. gpio_input(GPIO(Q3)); gpio_input(GPIO(T1)); gpio_input(GPIO(X1)); gpio_input(GPIO(X4)); // I2C5 (PMU) clock. pinmux_set_config(PINMUX_PWR_I2C_SCL_INDEX, PINMUX_PWR_I2C_SCL_FUNC_I2CPMU | PINMUX_INPUT_ENABLE); // I2C5 (PMU) data. pinmux_set_config(PINMUX_PWR_I2C_SDA_INDEX, PINMUX_PWR_I2C_SDA_FUNC_I2CPMU | PINMUX_INPUT_ENABLE); i2c_init(4); pmic_init(4); /* SPI4 data out (MOSI) */ pinmux_set_config(PINMUX_GPIO_PG6_INDEX, PINMUX_GPIO_PG6_FUNC_SPI4 | PINMUX_INPUT_ENABLE | PINMUX_PULL_UP); /* SPI4 data in (MISO) */ pinmux_set_config(PINMUX_GPIO_PG7_INDEX, PINMUX_GPIO_PG7_FUNC_SPI4 | PINMUX_INPUT_ENABLE | PINMUX_PULL_UP); /* SPI4 clock */ pinmux_set_config(PINMUX_GPIO_PG5_INDEX, PINMUX_GPIO_PG5_FUNC_SPI4 | PINMUX_INPUT_ENABLE); /* SPI4 chip select 0 */ pinmux_set_config(PINMUX_GPIO_PI3_INDEX, PINMUX_GPIO_PI3_FUNC_SPI4 | PINMUX_INPUT_ENABLE); tegra_spi_init(4); }
static void setup_pinmux(void) { // I2C1 clock. pinmux_set_config(PINMUX_GEN1_I2C_SCL_INDEX, PINMUX_GEN1_I2C_SCL_FUNC_I2C1 | PINMUX_INPUT_ENABLE); // I2C1 data. pinmux_set_config(PINMUX_GEN1_I2C_SDA_INDEX, PINMUX_GEN1_I2C_SDA_FUNC_I2C1 | PINMUX_INPUT_ENABLE); // I2C2 clock. pinmux_set_config(PINMUX_GEN2_I2C_SCL_INDEX, PINMUX_GEN2_I2C_SCL_FUNC_I2C2 | PINMUX_INPUT_ENABLE | PINMUX_OPEN_DRAIN); // I2C2 data. pinmux_set_config(PINMUX_GEN2_I2C_SDA_INDEX, PINMUX_GEN2_I2C_SDA_FUNC_I2C2 | PINMUX_INPUT_ENABLE | PINMUX_OPEN_DRAIN); // I2C4 (DDC) clock. pinmux_set_config(PINMUX_DDC_SCL_INDEX, PINMUX_DDC_SCL_FUNC_I2C4 | PINMUX_INPUT_ENABLE); // I2C4 (DDC) data. pinmux_set_config(PINMUX_DDC_SDA_INDEX, PINMUX_DDC_SDA_FUNC_I2C4 | PINMUX_INPUT_ENABLE); // TODO(hungte) Revice pinmux setup, make nice little SoC functions for // every single logical thing instead of dumping a wall of code below. uint32_t pin_up = PINMUX_PULL_UP | PINMUX_INPUT_ENABLE, pin_down = PINMUX_PULL_DOWN | PINMUX_INPUT_ENABLE, pin_none = PINMUX_PULL_NONE | PINMUX_INPUT_ENABLE; // MMC3 (sdcard reader) pinmux_set_config(PINMUX_SDMMC3_CLK_INDEX, PINMUX_SDMMC3_CLK_FUNC_SDMMC3 | pin_none); pinmux_set_config(PINMUX_SDMMC3_CMD_INDEX, PINMUX_SDMMC3_CMD_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_DAT0_INDEX, PINMUX_SDMMC3_DAT0_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_DAT1_INDEX, PINMUX_SDMMC3_DAT1_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_DAT2_INDEX, PINMUX_SDMMC3_DAT2_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_DAT3_INDEX, PINMUX_SDMMC3_DAT3_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_CLK_LB_IN_INDEX, PINMUX_SDMMC3_CLK_LB_IN_FUNC_SDMMC3 | pin_up); pinmux_set_config(PINMUX_SDMMC3_CLK_LB_OUT_INDEX, PINMUX_SDMMC3_CLK_LB_OUT_FUNC_SDMMC3 | pin_down); // MMC3 Card Detect pin. gpio_input_pullup(GPIO(V2)); // Disable SD card reader power so it can be reset even on warm boot. // Payloads must enable power before accessing SD card slots. gpio_output(GPIO(R0), 0); // MMC4 (eMMC) pinmux_set_config(PINMUX_SDMMC4_CLK_INDEX, PINMUX_SDMMC4_CLK_FUNC_SDMMC4 | pin_none); pinmux_set_config(PINMUX_SDMMC4_CMD_INDEX, PINMUX_SDMMC4_CMD_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT0_INDEX, PINMUX_SDMMC4_DAT0_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT1_INDEX, PINMUX_SDMMC4_DAT1_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT2_INDEX, PINMUX_SDMMC4_DAT2_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT3_INDEX, PINMUX_SDMMC4_DAT3_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT4_INDEX, PINMUX_SDMMC4_DAT4_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT5_INDEX, PINMUX_SDMMC4_DAT5_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT6_INDEX, PINMUX_SDMMC4_DAT6_FUNC_SDMMC4 | pin_up); pinmux_set_config(PINMUX_SDMMC4_DAT7_INDEX, PINMUX_SDMMC4_DAT7_FUNC_SDMMC4 | pin_up); /* We pull the USB VBUS signals up but keep them as inputs since the * voltage source likes to drive them low on overcurrent conditions */ gpio_input_pullup(GPIO(N4)); /* USB VBUS EN0 */ gpio_input_pullup(GPIO(N5)); /* USB VBUS EN1 */ /* Clock output 1 (for external peripheral) */ pinmux_set_config(PINMUX_DAP_MCLK1_INDEX, PINMUX_DAP_MCLK1_FUNC_EXTPERIPH1 | PINMUX_PULL_NONE); /* I2S1 */ pinmux_set_config(PINMUX_DAP2_DIN_INDEX, PINMUX_DAP2_DIN_FUNC_I2S1 | PINMUX_INPUT_ENABLE); pinmux_set_config(PINMUX_DAP2_DOUT_INDEX, PINMUX_DAP2_DOUT_FUNC_I2S1 | PINMUX_INPUT_ENABLE); pinmux_set_config(PINMUX_DAP2_FS_INDEX, PINMUX_DAP2_FS_FUNC_I2S1 | PINMUX_INPUT_ENABLE); pinmux_set_config(PINMUX_DAP2_SCLK_INDEX, PINMUX_DAP2_SCLK_FUNC_I2S1 | PINMUX_INPUT_ENABLE); /* PWM1 */ pinmux_set_config(PINMUX_GPIO_PH1_INDEX, PINMUX_GPIO_PH1_FUNC_PWM1 | PINMUX_PULL_NONE); /* DP HPD */ pinmux_set_config(PINMUX_DP_HPD_INDEX, PINMUX_DP_HPD_FUNC_DP | PINMUX_INPUT_ENABLE); }