/* * Reset Ethernet PHY. * * This function allows the re-configure the PHY after * changing its strap pins. */ void ethernut5_phy_reset(void) { /* Do not modify anything, if we do not have a known version. */ if (pwrman_major != 2) return; /* * Make sure that the Ethernet clock is enabled and the PHY reset * is disabled for at least 100 us. */ i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA, PWRMAN_ETHCLK); i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS, PWRMAN_ETHRST); udelay(100); /* * LAN8710 strap pins are * PA14 => PHY MODE0 * PA15 => PHY MODE1 * PA17 => PHY MODE2 => 111b all capable * PA18 => PHY ADDR0 => 0b */ at91_set_pio_input(AT91_PIO_PORTA, 14, 1); at91_set_pio_input(AT91_PIO_PORTA, 15, 1); at91_set_pio_input(AT91_PIO_PORTA, 17, 1); at91_set_pio_input(AT91_PIO_PORTA, 18, 0); /* Activate PHY reset for 100 us. */ i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_ENA, PWRMAN_ETHRST); udelay(100); i2c_reg_write(PWRMAN_I2C_ADDR, PWRMAN_REG_DIS, PWRMAN_ETHRST); at91_set_pio_input(AT91_PIO_PORTA, 14, 1); }
static void otc570_nand_hw_init(void) { unsigned long csa; at91_smc_t *smc = (at91_smc_t *) ATMEL_BASE_SMC0; at91_matrix_t *matrix = (at91_matrix_t *) ATMEL_BASE_MATRIX; /* Enable CS3 */ csa = readl(&matrix->csa[0]) | AT91_MATRIX_CSA_EBI_CS3A; writel(csa, &matrix->csa[0]); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(1) | AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(2), &smc->cs[3].setup); writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(3) | AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(3), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(6) | AT91_SMC_CYCLE_NRD(6), &smc->cs[3].cycle); writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | AT91_SMC_MODE_DBW_8 | AT91_SMC_MODE_TDF_CYCLE(12), &smc->cs[3].mode); /* Configure RDY/BSY */ at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); /* Enable NandFlash */ at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); }
static void at91sam9n12ek_nand_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; unsigned long csa; /* Assign CS3 to NAND/SmartMedia Interface */ csa = readl(&matrix->ebicsa); csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; /* Configure databus */ csa &= ~AT91_MATRIX_NFD0_ON_D16; /* nandflash connect to D0~D15 */ /* Configure IO drive */ csa |= AT91_MATRIX_EBI_EBI_IOSR_NORMAL; writel(csa, &matrix->ebicsa); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0), &smc->cs[3].setup); writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(5) | AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(6), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(7), &smc->cs[3].cycle); writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | #ifdef CONFIG_SYS_NAND_DBW_16 AT91_SMC_MODE_DBW_16 | #else /* CONFIG_SYS_NAND_DBW_8 */ AT91_SMC_MODE_DBW_8 | #endif AT91_SMC_MODE_TDF_CYCLE(1), &smc->cs[3].mode); /* Configure RDY/BSY pin */ at91_set_pio_input(AT91_PIO_PORTD, 5, 1); /* Configure ENABLE pin for NandFlash */ at91_set_pio_output(AT91_PIO_PORTD, 4, 1); at91_set_a_periph(AT91_PIO_PORTD, 0, 1); /* NAND OE */ at91_set_a_periph(AT91_PIO_PORTD, 1, 1); /* NAND WE */ at91_set_a_periph(AT91_PIO_PORTD, 2, 1); /* ALE */ at91_set_a_periph(AT91_PIO_PORTD, 3, 1); /* CLE */ }
static void pm9g45_nand_hw_init(void) { unsigned long csa; at91_smc_t *smc = (at91_smc_t *) AT91_SMC_BASE; at91_matrix_t *matrix = (at91_matrix_t *) AT91_MATRIX_BASE; at91_pmc_t *pmc = (at91_pmc_t *) AT91_PMC_BASE; /* Enable CS3 */ csa = readl(&matrix->ccr[6]) | AT91_MATRIX_CSA_EBI_CS3A; writel(csa, &matrix->ccr[6]); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(0) | AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0), &smc->cs[3].setup); writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(3) | AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(2), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(4), &smc->cs[3].cycle); writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | AT91_SMC_MODE_DBW_8 | AT91_SMC_MODE_TDF_CYCLE(3), &smc->cs[3].mode); writel(1 << AT91SAM9G45_ID_PIOC, &pmc->pcer); #ifdef CONFIG_SYS_NAND_READY_PIN /* Configure RDY/BSY */ at91_set_pio_input(CONFIG_SYS_NAND_READY_PIN, 1); #endif /* Enable NandFlash */ at91_set_pio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); }
int gpio_direction_input(unsigned gpio) { at91_set_pio_input(at91_gpio_to_port(gpio), at91_gpio_to_pin(gpio), 0); return 0; }
void fastboot_button_hw_init(void) { at91_set_pio_input(AT91_PIO_PORTE, 13, 1); }
void recovery_button_hw_init(void) { at91_set_pio_input(AT91_PIO_PORTD, 30, 1); }