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 ddramc_init(void) { struct ddramc_register ddramc_reg; unsigned int reg; ddramc_reg_config(&ddramc_reg); pmc_sam9x5_enable_periph_clk(AT91C_ID_MPDDRC); pmc_enable_system_clock(AT91C_PMC_DDR); /* MPDDRC I/O Calibration Register */ reg = readl(AT91C_BASE_MPDDRC + MPDDRC_IO_CALIBR); reg &= ~AT91C_MPDDRC_RDIV; reg |= AT91C_MPDDRC_RDIV_DDR2_RZQ_50; reg &= ~AT91C_MPDDRC_TZQIO; reg |= AT91C_MPDDRC_TZQIO_(100); writel(reg, (AT91C_BASE_MPDDRC + MPDDRC_IO_CALIBR)); writel(AT91C_MPDDRC_RD_DATA_PATH_TWO_CYCLES, (AT91C_BASE_MPDDRC + MPDDRC_RD_DATA_PATH)); ddr3_sdram_initialize(AT91C_BASE_MPDDRC, AT91C_BASE_DDRCS, &ddramc_reg); ddramc_dump_regs(AT91C_BASE_MPDDRC); }
void nandflash_hw_init(void) { const struct pio_desc nand_pins[] = { {"NANDOE", CONFIG_SYS_NAND_OE_PIN, 0, PIO_PULLUP, PIO_PERIPH_F}, {"NANDWE", CONFIG_SYS_NAND_WE_PIN, 0, PIO_PULLUP, PIO_PERIPH_F}, {"NANDALE", CONFIG_SYS_NAND_ALE_PIN, 0, PIO_PULLUP, PIO_PERIPH_F}, {"NANDCLE", CONFIG_SYS_NAND_CLE_PIN, 0, PIO_PULLUP, PIO_PERIPH_F}, {"NANDCS", CONFIG_SYS_NAND_ENABLE_PIN, 1, PIO_DEFAULT, PIO_OUTPUT}, {"D0", AT91C_PIN_PA(0), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D1", AT91C_PIN_PA(1), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D2", AT91C_PIN_PA(2), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D3", AT91C_PIN_PA(3), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D4", AT91C_PIN_PA(4), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D5", AT91C_PIN_PA(5), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D6", AT91C_PIN_PA(6), 0, PIO_PULLUP, PIO_PERIPH_F}, {"D7", AT91C_PIN_PA(7), 0, PIO_PULLUP, PIO_PERIPH_F}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(nand_pins); pmc_sam9x5_enable_periph_clk(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)); }
static void at91_dbgu_hw_init(void) { const struct pio_desc dbgu_pins[] = { {"RXD0", CONFIG_SYS_DBGU_RXD_PIN, 0, PIO_DEFAULT, PIO_PERIPH_C}, {"TXD0", CONFIG_SYS_DBGU_TXD_PIN, 0, PIO_DEFAULT, PIO_PERIPH_C}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(dbgu_pins); pmc_sam9x5_enable_periph_clk(CONFIG_SYS_DBGU_ID); }
static void at91_dbgu_hw_init(void) { const struct pio_desc dbgu_pins[] = { {"URXD1", AT91C_PIN_PD(2), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"UTXD1", AT91C_PIN_PD(3), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(dbgu_pins); pmc_sam9x5_enable_periph_clk(AT91C_ID_UART1); }
void at91_spi0_hw_init(void) { 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}, }; pio_configure(spi_pins); pmc_sam9x5_enable_periph_clk(CONFIG_SYS_ID_SPI); }
unsigned int at91_twi1_hw_init(void) { const struct pio_desc twi_pins[] = { {"TWD1", AT91C_PIN_PD(4), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"TWCK1", AT91C_PIN_PD(5), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(twi_pins); pmc_sam9x5_enable_periph_clk(AT91C_ID_TWI1); return AT91C_BASE_TWI1; }
static void lpddr1_init(void) { struct ddramc_register ddramc_reg; unsigned int reg; lpddr1_reg_config(&ddramc_reg); pmc_sam9x5_enable_periph_clk(AT91C_ID_MPDDRC); pmc_enable_system_clock(AT91C_PMC_DDR); /* * Before starting the initialization sequence, the user must force * the DDR_DQ and DDR_DQS input buffers to always on by setting * the FDQIEN and FDQSIEN bits in the SFR_DDRCFG register. */ pmc_sam9x5_enable_periph_clk(AT91C_ID_SFR); reg = readl(AT91C_BASE_SFR + SFR_DDRCFG); reg |= AT91C_DDRCFG_FDQIEN; reg |= AT91C_DDRCFG_FDQSIEN; writel(reg, AT91C_BASE_SFR + SFR_DDRCFG); /* MPDDRC I/O Calibration Register */ reg = readl(AT91C_BASE_MPDDRC + MPDDRC_IO_CALIBR); reg &= ~AT91C_MPDDRC_RDIV; reg |= AT91C_MPDDRC_RDIV_DDR2_RZQ_50; reg &= ~AT91C_MPDDRC_TZQIO; reg |= AT91C_MPDDRC_TZQIO_(100); writel(reg, AT91C_BASE_MPDDRC + MPDDRC_IO_CALIBR); writel(AT91C_MPDDRC_RD_DATA_PATH_ONE_CYCLES, AT91C_BASE_MPDDRC + MPDDRC_RD_DATA_PATH); lpddr1_sdram_initialize(AT91C_BASE_MPDDRC, AT91C_BASE_DDRCS, &ddramc_reg); ddramc_dump_regs(AT91C_BASE_MPDDRC); }
unsigned int at91_twi0_hw_init(void) { unsigned int base_addr = AT91C_BASE_TWI0; const struct pio_desc twi_pins[] = { {"TWD0", AT91C_PIN_PD(21), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"TWCK0", AT91C_PIN_PD(22), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; pio_configure(twi_pins); pmc_sam9x5_enable_periph_clk(AT91C_ID_TWI0); return base_addr; }
void at91_sdhc_hw_init(void) { #ifdef CONFIG_SDHC0 const struct pio_desc sdmmc_pins[] = { {"SDMMC0_CK", AT91C_PIN_PA(0), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_CMD", AT91C_PIN_PA(1), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT0", AT91C_PIN_PA(2), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT1", AT91C_PIN_PA(3), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT2", AT91C_PIN_PA(4), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT3", AT91C_PIN_PA(5), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT4", AT91C_PIN_PA(6), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT5", AT91C_PIN_PA(7), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT6", AT91C_PIN_PA(8), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_DAT7", AT91C_PIN_PA(9), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_RSTN", AT91C_PIN_PA(10), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_VDDSEL", AT91C_PIN_PA(11), 0, PIO_DEFAULT, PIO_PERIPH_A}, {"SDMMC0_CD", AT91C_PIN_PA(13), 0, PIO_DEFAULT, PIO_PERIPH_A}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #endif #ifdef CONFIG_SDHC1 const struct pio_desc sdmmc_pins[] = { {"SDMMC1_CD", AT91C_PIN_PA(30), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_CMD", AT91C_PIN_PA(28), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_CK", AT91C_PIN_PA(22), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_DAT0", AT91C_PIN_PA(18), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_DAT1", AT91C_PIN_PA(19), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_DAT2", AT91C_PIN_PA(20), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"SDMMC1_DAT3", AT91C_PIN_PA(21), 0, PIO_DEFAULT, PIO_PERIPH_E}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #endif pio_configure(sdmmc_pins); pmc_sam9x5_enable_periph_clk(CONFIG_SYS_ID_SDHC); pmc_enable_periph_generated_clk(CONFIG_SYS_ID_SDHC, GCK_CSS_UPLL_CLK, ATMEL_SDHC_GCKDIV_VALUE); }
void at91_qspi_hw_init(void) { #if defined(CONFIG_QSPI_BUS0) #if defined(CONFIG_QSPI0_IOSET_1) const struct pio_desc qspi_pins[] = { {"QSPI0_SCK", AT91C_PIN_PA(0), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI0_CS", AT91C_PIN_PA(1), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI0_IO0", AT91C_PIN_PA(2), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI0_IO1", AT91C_PIN_PA(3), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI0_IO2", AT91C_PIN_PA(4), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI0_IO3", AT91C_PIN_PA(5), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_QSPI0_IOSET_2) const struct pio_desc qspi_pins[] = { {"QSPI0_SCK", AT91C_PIN_PA(14), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"QSPI0_CS", AT91C_PIN_PA(15), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"QSPI0_IO0", AT91C_PIN_PA(16), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"QSPI0_IO1", AT91C_PIN_PA(17), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"QSPI0_IO2", AT91C_PIN_PA(18), 0, PIO_DEFAULT, PIO_PERIPH_C}, {"QSPI0_IO3", AT91C_PIN_PA(19), 0, PIO_DEFAULT, PIO_PERIPH_C}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_QSPI0_IOSET_3) const struct pio_desc qspi_pins[] = { {"QSPI0_SCK", AT91C_PIN_PA(22), 0, PIO_DEFAULT, PIO_PERIPH_F}, {"QSPI0_CS", AT91C_PIN_PA(23), 0, PIO_DEFAULT, PIO_PERIPH_F}, {"QSPI0_IO0", AT91C_PIN_PA(24), 0, PIO_DEFAULT, PIO_PERIPH_F}, {"QSPI0_IO1", AT91C_PIN_PA(25), 0, PIO_DEFAULT, PIO_PERIPH_F}, {"QSPI0_IO2", AT91C_PIN_PA(26), 0, PIO_DEFAULT, PIO_PERIPH_F}, {"QSPI0_IO3", AT91C_PIN_PA(27), 0, PIO_DEFAULT, PIO_PERIPH_F}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #else #error "No QSPI0 IOSET defined" #endif #elif defined(CONFIG_QSPI_BUS1) #if defined(CONFIG_QSPI1_IOSET_1) const struct pio_desc qspi_pins[] = { {"QSPI1_SCK", AT91C_PIN_PA(6), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI1_CS", AT91C_PIN_PA(11), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI1_IO0", AT91C_PIN_PA(7), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI1_IO1", AT91C_PIN_PA(8), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI1_IO2", AT91C_PIN_PA(9), 0, PIO_DEFAULT, PIO_PERIPH_B}, {"QSPI1_IO3", AT91C_PIN_PA(10), 0, PIO_DEFAULT, PIO_PERIPH_B}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_QSPI1_IOSET_2) const struct pio_desc qspi_pins[] = { {"QSPI1_SCK", AT91C_PIN_PB(5), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"QSPI1_CS", AT91C_PIN_PB(6), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"QSPI1_IO0", AT91C_PIN_PB(7), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"QSPI1_IO1", AT91C_PIN_PB(8), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"QSPI1_IO2", AT91C_PIN_PB(9), 0, PIO_DEFAULT, PIO_PERIPH_D}, {"QSPI1_IO3", AT91C_PIN_PB(10), 0, PIO_DEFAULT, PIO_PERIPH_D}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #elif defined(CONFIG_QSPI1_IOSET_3) const struct pio_desc qspi_pins[] = { {"QSPI1_SCK", AT91C_PIN_PB(14), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"QSPI1_CS", AT91C_PIN_PB(15), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"QSPI1_IO0", AT91C_PIN_PB(16), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"QSPI1_IO1", AT91C_PIN_PB(17), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"QSPI1_IO2", AT91C_PIN_PB(18), 0, PIO_DEFAULT, PIO_PERIPH_E}, {"QSPI1_IO3", AT91C_PIN_PB(19), 0, PIO_DEFAULT, PIO_PERIPH_E}, {(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A}, }; #else #error "No QSPI1 IOSET defined" #endif #else #error "No QSPI Bus defined" #endif pio_configure(qspi_pins); pmc_sam9x5_enable_periph_clk(CONFIG_SYS_ID_QSPI); }