void at91_spi0_hw_init(void) { #if defined(CONFIG_SPI_BUS0) #if defined(CONFIG_SPI0_IOSET_1) const struct pio_desc spi_pins[] = { {"SPI0_SPCK", AT91C_PIN_PA(14), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_MOSI", AT91C_PIN_PA(15), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_MISO", AT91C_PIN_PA(16), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_SPI0_IOSET_2) const struct pio_desc spi_pins[] = { {"SPI0_SPCK", AT91C_PIN_PB(1), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"SPI0_MOSI", AT91C_PIN_PB(0), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"SPI0_MISO", AT91C_PIN_PA(31), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"SPI0_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #else #error "No SPI0 IOSET defined" #endif #elif defined(CONFIG_SPI_BUS1) #if defined(CONFIG_SPI1_IOSET_1) const struct pio_desc spi_pins[] = { {"SPI1_SPCK", AT91C_PIN_PC(1), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_MOSI", AT91C_PIN_PC(2), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_MISO", AT91C_PIN_PC(3), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_SPI1_IOSET_2) const struct pio_desc spi_pins[] = { {"SPI1_SPCK", AT91C_PIN_PA(22), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_MOSI", AT91C_PIN_PA(23), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_MISO", AT91C_PIN_PA(24), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"SPI1_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_SPI1_IOSET_3) const struct pio_desc spi_pins[] = { {"SPI1_SPCK", AT91C_PIN_PD(25), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI1_MOSI", AT91C_PIN_PD(26), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI1_MISO", AT91C_PIN_PD(27), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI1_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #else #error "No SPI1 IOSET defined" #endif #else #error "No SPI Bus defined" #endif pio_configure(spi_pins); pmc_sam9x5_enable_periph_clk(CONFIG_SYS_ID_SPI); }
static void emac_hw_init(void) { const struct pio_desc macb_pins[] = { {"EMDC", AT91C_PIN_PC(8), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"EMDIO", AT91C_PIN_PC(9), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(macb_pins); pmc_enable_periph_clock(AT91C_ID_PIOC); }
static void HDMI_Qt1070_workaround(void) { /* For the HDMI and QT1070 shar the irq line * if the HDMI does not initialize, the irq line is pulled down by HDMI, * so, the irq line can not used by QT1070 */ pio_set_gpio_output(AT91C_PIN_PC(31), 1); udelay(500000); pio_set_gpio_output(AT91C_PIN_PC(31), 0); udelay(500000); pio_set_gpio_output(AT91C_PIN_PC(31), 1); }
static void at91_twi3_hw_init(void) { const struct pio_desc twi_pins[] = { {"TWD3", AT91C_PIN_PC(25), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"TWCK3", AT91C_PIN_PC(26), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pmc_enable_periph_clock(AT91C_ID_PIOC); pio_configure(twi_pins); pmc_enable_periph_clock(AT91C_ID_TWI3); }
static void at91_dbgu_hw_init(void) { /* Configure DBGU pin */ const struct pio_desc dbgu_pins[] = { {"RXD", AT91C_PIN_PC(30), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"TXD", AT91C_PIN_PC(31), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* Configure the dbgu pins */ pmc_enable_periph_clock(AT91C_ID_PIOCDE); pio_configure(dbgu_pins); }
void nandflash_hw_init(void) { unsigned int reg; /* Configure NAND pins */ const struct pio_desc nand_pins[] = { {"NANDOE", AT91C_PIN_PC(0), 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDWE", AT91C_PIN_PC(1), 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDCS", CONFIG_SYS_NAND_ENABLE_PIN, 1, PIO_PULLUP, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* * Setup Smart Media, first enable the address range of * CS3 in HMATRIX user interface */ reg = readl(AT91C_BASE_CCFG + CCFG_EBICSA); reg |= AT91C_EBI_CS3A_SM; writel(reg, AT91C_BASE_CCFG + CCFG_EBICSA); /* Configure SMC CS3 */ writel((AT91C_SMC_NWESETUP_(1) | AT91C_SMC_NCS_WRSETUP_(0) | AT91C_SMC_NRDSETUP_(1) | AT91C_SMC_NCS_RDSETUP_(0)), AT91C_BASE_SMC + SMC_SETUP3); writel((AT91C_SMC_NWEPULSE_(3) | AT91C_SMC_NCS_WRPULSE_(3) | AT91C_SMC_NRDPULSE_(3) | AT91C_SMC_NCS_RDPULSE_(3)), AT91C_BASE_SMC + SMC_PULSE3); writel((AT91C_SMC_NWECYCLE_(5) | AT91C_SMC_NRDCYCLE_(5)), AT91C_BASE_SMC + SMC_CYCLE3); writel((AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE | AT91C_SMC_NWAITM_NWAIT_DISABLE | AT91C_SMC_DBW_WIDTH_BITS_16 | AT91_SMC_TDF_(2)), AT91C_BASE_SMC + SMC_CTRL3); pio_configure(nand_pins); writel((1 << AT91C_ID_PIOC), PMC_PCER + AT91C_BASE_PMC); }
void at91_spi0_hw_init(void) { /* Configure PIN for SPI0 */ const struct pio_desc spi0_pins[] = { {"SPI0_MISO", AT91C_PIN_PC(0), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_MOSI", AT91C_PIN_PC(1), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_SPCK", AT91C_PIN_PC(2), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPI0_NPCS", CONFIG_SYS_SPI_PCS, 1, PIO_DEFAULT, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* Configure the PIO controller */ pio_configure(spi0_pins); pmc_enable_periph_clock(AT91C_ID_PIOC); pmc_enable_periph_clock(AT91C_ID_SPI0); }
unsigned int at91_twi3_hw_init(void) { unsigned int base_addr = AT91C_BASE_TWI3; const struct pio_desc twi_pins[] = { {"TWD3", AT91C_PIN_PC(25), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"TWCK3", AT91C_PIN_PC(26), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pmc_enable_periph_clock(AT91C_ID_PIOC); pio_configure(twi_pins); pmc_enable_periph_clock(AT91C_ID_TWI3); return base_addr; }
unsigned int at91_eth1_hw_init(void) { unsigned int base_addr = AT91C_BASE_EMAC; const struct pio_desc macb_pins[] = { {"EMDC", AT91C_PIN_PC(8), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"EMDIO", AT91C_PIN_PC(9), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(macb_pins); pmc_enable_periph_clock(AT91C_ID_PIOC); pmc_enable_periph_clock(AT91C_ID_EMAC); return base_addr; }
/*------------------------------------------------------------------------------*/ void nandflash_hw_init(void) { /* * Configure PIOs */ const struct pio_desc nand_pio[] = { {"RDY_BSY", AT91C_PIN_PC(8), 0, PIO_PULLUP, PIO_INPUT}, {"NANDCS", AT91C_PIN_PC(14), 0, PIO_PULLUP, PIO_OUTPUT}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* * Setup Smart Media, first enable the address range of CS3 in HMATRIX user interface */ writel(readl(AT91C_BASE_CCFG + CCFG_EBICSA) | AT91C_EBI_CS3A_SM, AT91C_BASE_CCFG + CCFG_EBICSA); /* * EBI IO in 1.8V mode */ writel(readl(AT91C_BASE_CCFG + CCFG_EBICSA) & ~(1 << 16), AT91C_BASE_CCFG + CCFG_EBICSA); /* * Configure SMC CS3 */ writel((AT91C_SM_NWE_SETUP | AT91C_SM_NCS_WR_SETUP | AT91C_SM_NRD_SETUP | AT91C_SM_NCS_RD_SETUP), AT91C_BASE_SMC + SMC_SETUP3); writel((AT91C_SM_NWE_PULSE | AT91C_SM_NCS_WR_PULSE | AT91C_SM_NRD_PULSE | AT91C_SM_NCS_RD_PULSE), AT91C_BASE_SMC + SMC_PULSE3); writel((AT91C_SM_NWE_CYCLE | AT91C_SM_NRD_CYCLE), AT91C_BASE_SMC + SMC_CYCLE3); writel((AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE | AT91C_SMC_NWAITM_NWAIT_DISABLE | AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS | AT91C_SM_TDF), AT91C_BASE_SMC + SMC_CTRL3); /* * Configure the PIO controller */ writel((1 << AT91C_ID_PIOC), (PMC_PCER + AT91C_BASE_PMC)); pio_setup(nand_pio); nand_recovery(); }
/*------------------------------------------------------------------------------*/ void df_hw_init(void) { /* * Configure PIOs */ const struct pio_desc df_pio[] = { {"MISO", AT91C_PIN_PB(0), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"MOSI", AT91C_PIN_PB(1), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPCK", AT91C_PIN_PB(2), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"NPCS0", AT91C_PIN_PB(3), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"NPCS1", AT91C_PIN_PC(11), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* * Configure the PIO controller */ pio_setup(df_pio); }
/*------------------------------------------------------------------------------*/ void df_hw_init(void) { /* * Configure PIOs */ const struct pio_desc df_pio[] = { {"MISO", AT91C_PIN_PA(0), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"MOSI", AT91C_PIN_PA(1), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SPCK", AT91C_PIN_PA(2), 0, PIO_DEFAULT, PIO_PERIPH_A}, #if (AT91C_SPI_PCS_DATAFLASH == AT91C_SPI_PCS0_DATAFLASH) {"NPCS0", AT91C_PIN_PA(3), 0, PIO_DEFAULT, PIO_PERIPH_A}, #endif #if (AT91C_SPI_PCS_DATAFLASH == AT91C_SPI_PCS1_DATAFLASH) {"NPCS1", AT91C_PIN_PC(11), 0, PIO_DEFAULT, PIO_PERIPH_B}, #endif {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* * Configure the PIO controller */ pio_setup(df_pio); }
static void sdramc_hw_init(void) { /* Configure sdramc pins */ const struct pio_desc sdramc_pins[] = { {"D16", AT91C_PIN_PC(16), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D17", AT91C_PIN_PC(17), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D18", AT91C_PIN_PC(18), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D19", AT91C_PIN_PC(19), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D20", AT91C_PIN_PC(20), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D21", AT91C_PIN_PC(21), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D22", AT91C_PIN_PC(22), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D23", AT91C_PIN_PC(23), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D24", AT91C_PIN_PC(24), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D25", AT91C_PIN_PC(25), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D26", AT91C_PIN_PC(26), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D27", AT91C_PIN_PC(27), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D28", AT91C_PIN_PC(28), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D29", AT91C_PIN_PC(29), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D30", AT91C_PIN_PC(30), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D31", AT91C_PIN_PC(31), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* Configure the sdramc pins */ pio_configure(sdramc_pins); writel((1 << AT91C_ID_PIOC), (PMC_PCER + AT91C_BASE_PMC)); }
static void sdramc_hw_init(void) { /* Configure sdramc pins */ const struct pio_desc sdramc_pins[] = { {"D16", AT91C_PIN_PC(16), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D17", AT91C_PIN_PC(17), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D18", AT91C_PIN_PC(18), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D19", AT91C_PIN_PC(19), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D20", AT91C_PIN_PC(20), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D21", AT91C_PIN_PC(21), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D22", AT91C_PIN_PC(22), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D23", AT91C_PIN_PC(23), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D24", AT91C_PIN_PC(24), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D25", AT91C_PIN_PC(25), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D26", AT91C_PIN_PC(26), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D27", AT91C_PIN_PC(27), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D28", AT91C_PIN_PC(28), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D29", AT91C_PIN_PC(29), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D30", AT91C_PIN_PC(30), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"D31", AT91C_PIN_PC(31), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *) 0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* Configure the SDRAMC PINs */ pmc_enable_periph_clock(AT91C_ID_PIOC); pio_configure(sdramc_pins); }
void nandflash_hw_init(void) { /* Configure nand pins */ const struct pio_desc nand_pins[] = { {"NANDOE", CONFIG_SYS_NAND_OE_PIN, 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDWE", CONFIG_SYS_NAND_WE_PIN, 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDALE", CONFIG_SYS_NAND_ALE_PIN, 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDCLE", CONFIG_SYS_NAND_CLE_PIN, 0, PIO_PULLUP, PIO_PERIPH_A}, {"NANDCS", CONFIG_SYS_NAND_ENABLE_PIN, 1, PIO_DEFAULT, PIO_OUTPUT}, {"D0", AT91C_PIN_PC(5), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D1", AT91C_PIN_PC(6), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D2", AT91C_PIN_PC(7), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D3", AT91C_PIN_PC(8), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D4", AT91C_PIN_PC(9), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D5", AT91C_PIN_PC(10), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D6", AT91C_PIN_PC(11), 0, PIO_PULLUP, PIO_PERIPH_A}, {"D7", AT91C_PIN_PC(12), 0, PIO_PULLUP, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; /* Configure the nand controller pins*/ pio_configure(nand_pins); pmc_enable_periph_clock(AT91C_ID_PIOC); /* Enable the clock */ pmc_enable_periph_clock(AT91C_ID_HSMC); /* EBI Configuration Register */ writel((AT91C_EBICFG_DRIVE0_HIGH | AT91C_EBICFG_PULL0_NONE | AT91C_EBICFG_DRIVE1_HIGH | AT91C_EBICFG_PULL1_NONE), SFR_EBICFG + AT91C_BASE_SFR); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91C_SMC_SETUP_NWE(1) | AT91C_SMC_SETUP_NCS_WR(1) | AT91C_SMC_SETUP_NRD(1) | AT91C_SMC_SETUP_NCS_RD(1), (ATMEL_BASE_SMC + SMC_SETUP3)); writel(AT91C_SMC_PULSE_NWE(2) | AT91C_SMC_PULSE_NCS_WR(3) | AT91C_SMC_PULSE_NRD(2) | AT91C_SMC_PULSE_NCS_RD(3), (ATMEL_BASE_SMC + SMC_PULSE3)); writel(AT91C_SMC_CYCLE_NWE(5) | AT91C_SMC_CYCLE_NRD(5), (ATMEL_BASE_SMC + SMC_CYCLE3)); writel(AT91C_SMC_TIMINGS_TCLR(2) | AT91C_SMC_TIMINGS_TADL(7) | AT91C_SMC_TIMINGS_TAR(2) | AT91C_SMC_TIMINGS_TRR(3) | AT91C_SMC_TIMINGS_TWB(7) | AT91C_SMC_TIMINGS_RBNSEL(2) | AT91C_SMC_TIMINGS_NFSEL, (ATMEL_BASE_SMC + SMC_TIMINGS3)); writel(AT91C_SMC_MODE_READMODE_NRD_CTRL | AT91C_SMC_MODE_WRITEMODE_NWE_CTRL | AT91C_SMC_MODE_DBW_8 | AT91C_SMC_MODE_TDF_CYCLES(1), (ATMEL_BASE_SMC + SMC_MODE3)); }