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 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; /* Enable CS3 as NAND/SmartMedia */ csa = readl(&matrix->ebicsa); csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA; writel(csa, &matrix->ebicsa); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(2) | 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(4) | AT91_SMC_PULSE_NCS_WR(4) | AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(4), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(7) | 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 | AT91_SMC_MODE_DBW_8 | AT91_SMC_MODE_TDF_CYCLE(3), &smc->cs[3].mode); /* Configure RDY/BSY */ at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); /* Enable NandFlash */ at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); }
void sama5d3_xplained_nand_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; at91_periph_clk_enable(ATMEL_ID_SMC); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(1) | AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(1), &smc->cs[3].setup); writel(AT91_SMC_PULSE_NWE(3) | AT91_SMC_PULSE_NCS_WR(5) | AT91_SMC_PULSE_NRD(3) | AT91_SMC_PULSE_NCS_RD(5), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(8) | AT91_SMC_CYCLE_NRD(8), &smc->cs[3].cycle); writel(AT91_SMC_TIMINGS_TCLR(3) | AT91_SMC_TIMINGS_TADL(10) | AT91_SMC_TIMINGS_TAR(3) | AT91_SMC_TIMINGS_TRR(4) | AT91_SMC_TIMINGS_TWB(5) | AT91_SMC_TIMINGS_RBNSEL(3)| AT91_SMC_TIMINGS_NFSEL(1), &smc->cs[3].timings); 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(3), &smc->cs[3].mode); }
static void at91sam9x5ek_nand_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; unsigned long csa; /* Enable CS3 */ csa = readl(&matrix->ebicsa); csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; /* NAND flash on D16 */ csa |= AT91_MATRIX_NFD0_ON_D16; /* 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(1) | 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(6), &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); writel(1 << ATMEL_ID_PIOCD, &pmc->pcer); /* Configure RDY/BSY */ at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); /* Enable NandFlash */ at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 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); /* NAND ALE */ at91_set_a_periph(AT91_PIO_PORTD, 3, 1); /* NAND CLE */ at91_set_a_periph(AT91_PIO_PORTD, 6, 1); at91_set_a_periph(AT91_PIO_PORTD, 7, 1); at91_set_a_periph(AT91_PIO_PORTD, 8, 1); at91_set_a_periph(AT91_PIO_PORTD, 9, 1); at91_set_a_periph(AT91_PIO_PORTD, 10, 1); at91_set_a_periph(AT91_PIO_PORTD, 11, 1); at91_set_a_periph(AT91_PIO_PORTD, 12, 1); at91_set_a_periph(AT91_PIO_PORTD, 13, 1); }
static void sama5d3xek_nor_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; at91_periph_clk_enable(ATMEL_ID_SMC); /* Configure SMC CS0 for NOR flash */ 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[0].setup); writel(AT91_SMC_PULSE_NWE(10) | AT91_SMC_PULSE_NCS_WR(11) | AT91_SMC_PULSE_NRD(10) | AT91_SMC_PULSE_NCS_RD(11), &smc->cs[0].pulse); writel(AT91_SMC_CYCLE_NWE(11) | AT91_SMC_CYCLE_NRD(14), &smc->cs[0].cycle); writel(AT91_SMC_TIMINGS_TCLR(0) | AT91_SMC_TIMINGS_TADL(0) | AT91_SMC_TIMINGS_TAR(0) | AT91_SMC_TIMINGS_TRR(0) | AT91_SMC_TIMINGS_TWB(0) | AT91_SMC_TIMINGS_RBNSEL(0)| AT91_SMC_TIMINGS_NFSEL(0), &smc->cs[0].timings); writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | AT91_SMC_MODE_DBW_16 | AT91_SMC_MODE_TDF_CYCLE(1), &smc->cs[0].mode); /* Address pin (A1 ~ A23) configuration */ at91_set_a_periph(AT91_PIO_PORTE, 1, 0); at91_set_a_periph(AT91_PIO_PORTE, 2, 0); at91_set_a_periph(AT91_PIO_PORTE, 3, 0); at91_set_a_periph(AT91_PIO_PORTE, 4, 0); at91_set_a_periph(AT91_PIO_PORTE, 5, 0); at91_set_a_periph(AT91_PIO_PORTE, 6, 0); at91_set_a_periph(AT91_PIO_PORTE, 7, 0); at91_set_a_periph(AT91_PIO_PORTE, 8, 0); at91_set_a_periph(AT91_PIO_PORTE, 9, 0); at91_set_a_periph(AT91_PIO_PORTE, 10, 0); at91_set_a_periph(AT91_PIO_PORTE, 11, 0); at91_set_a_periph(AT91_PIO_PORTE, 12, 0); at91_set_a_periph(AT91_PIO_PORTE, 13, 0); at91_set_a_periph(AT91_PIO_PORTE, 14, 0); at91_set_a_periph(AT91_PIO_PORTE, 15, 0); at91_set_a_periph(AT91_PIO_PORTE, 16, 0); at91_set_a_periph(AT91_PIO_PORTE, 17, 0); at91_set_a_periph(AT91_PIO_PORTE, 18, 0); at91_set_a_periph(AT91_PIO_PORTE, 19, 0); at91_set_a_periph(AT91_PIO_PORTE, 20, 0); at91_set_a_periph(AT91_PIO_PORTE, 21, 0); at91_set_a_periph(AT91_PIO_PORTE, 22, 0); at91_set_a_periph(AT91_PIO_PORTE, 23, 0); /* CS0 pin configuration */ at91_set_a_periph(AT91_PIO_PORTE, 26, 0); }
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 int gurnard_nand_hw_init(void) { struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; ulong flags; int ret; /* Enable CS3 as NAND/SmartMedia */ setbits_le32(&matrix->ebicsa, AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA); /* Configure SMC CS3 for NAND/SmartMedia */ writel(AT91_SMC_SETUP_NWE(2) | 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(4) | AT91_SMC_PULSE_NCS_WR(4) | AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(4), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7), &smc->cs[3].cycle); #ifdef CONFIG_SYS_NAND_DBW_16 flags = AT91_SMC_MODE_DBW_16; #else flags = AT91_SMC_MODE_DBW_8; #endif writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | flags | AT91_SMC_MODE_TDF_CYCLE(3), &smc->cs[3].mode); ret = gpio_request(CONFIG_SYS_NAND_READY_PIN, "nand_rdy"); if (ret) return ret; gpio_direction_input(CONFIG_SYS_NAND_READY_PIN); /* Enable NandFlash */ ret = gpio_request(CONFIG_SYS_NAND_ENABLE_PIN, "nand_ce"); if (ret) return ret; gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); return 0; }
/* * Miscelaneous platform dependent initialisations */ static void wb45n_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; csa = readl(&matrix->ebicsa); /* Enable CS3 */ csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA; /* NAND flash on D0 */ csa &= ~AT91_MATRIX_NFD0_ON_D16; 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(1) | 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(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(1), &smc->cs[3].mode); at91_periph_clk_enable(ATMEL_ID_PIOCD); /* Configure RDY/BSY */ at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); /* Enable NandFlash */ at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); /* Disable Flash Write Protect Line */ at91_set_gpio_output(AT91_PIN_PD10, 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); /* NAND ALE */ at91_set_a_periph(AT91_PIO_PORTD, 3, 1); /* NAND CLE */ }
void at91sam9n12ek_ks8851_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) | AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(0), &smc->cs[2].setup); writel(AT91_SMC_PULSE_NWE(7) | AT91_SMC_PULSE_NCS_WR(7) | AT91_SMC_PULSE_NRD(7) | AT91_SMC_PULSE_NCS_RD(7), &smc->cs[2].pulse); writel(AT91_SMC_CYCLE_NWE(9) | AT91_SMC_CYCLE_NRD(9), &smc->cs[2].cycle); writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE | AT91_SMC_MODE_EXNW_DISABLE | AT91_SMC_MODE_BAT | AT91_SMC_MODE_DBW_16 | AT91_SMC_MODE_TDF_CYCLE(1), &smc->cs[2].mode); /* Configure NCS2 PIN */ at91_set_b_periph(AT91_PIO_PORTD, 19, 0); }
static void sama5d4_xplained_nand_hw_init(void) { struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; at91_periph_clk_enable(ATMEL_ID_SMC); /* Configure SMC CS3 for NAND */ writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(1) | AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(1), &smc->cs[3].setup); writel(AT91_SMC_PULSE_NWE(2) | AT91_SMC_PULSE_NCS_WR(3) | AT91_SMC_PULSE_NRD(2) | AT91_SMC_PULSE_NCS_RD(3), &smc->cs[3].pulse); writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5), &smc->cs[3].cycle); writel(AT91_SMC_TIMINGS_TCLR(2) | AT91_SMC_TIMINGS_TADL(7) | AT91_SMC_TIMINGS_TAR(2) | AT91_SMC_TIMINGS_TRR(3) | AT91_SMC_TIMINGS_TWB(7) | AT91_SMC_TIMINGS_RBNSEL(3)| AT91_SMC_TIMINGS_NFSEL(1), &smc->cs[3].timings); 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); at91_set_a_periph(AT91_PIO_PORTC, 5, 0); /* D0 */ at91_set_a_periph(AT91_PIO_PORTC, 6, 0); /* D1 */ at91_set_a_periph(AT91_PIO_PORTC, 7, 0); /* D2 */ at91_set_a_periph(AT91_PIO_PORTC, 8, 0); /* D3 */ at91_set_a_periph(AT91_PIO_PORTC, 9, 0); /* D4 */ at91_set_a_periph(AT91_PIO_PORTC, 10, 0); /* D5 */ at91_set_a_periph(AT91_PIO_PORTC, 11, 0); /* D6 */ at91_set_a_periph(AT91_PIO_PORTC, 12, 0); /* D7 */ at91_set_a_periph(AT91_PIO_PORTC, 13, 0); /* RE */ at91_set_a_periph(AT91_PIO_PORTC, 14, 0); /* WE */ at91_set_a_periph(AT91_PIO_PORTC, 15, 1); /* NCS */ at91_set_a_periph(AT91_PIO_PORTC, 16, 1); /* RDY */ at91_set_a_periph(AT91_PIO_PORTC, 17, 1); /* ALE */ at91_set_a_periph(AT91_PIO_PORTC, 18, 1); /* CLE */ }
static void sbc35_a9g20_nand_hw_init(void) { struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; unsigned long csa; /* Enable CS3 */ csa = readl(&matrix->ebicsa); csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA; 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(1) | AT91_SMC_SETUP_NCS_RD(0), &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(5) | AT91_SMC_CYCLE_NRD(5), &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(2), &smc->cs[3].mode); writel(1 << ATMEL_ID_PIOC, &pmc->pcer); /* Configure RDY/BSY */ at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1); /* Enable NandFlash */ at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); }
static void pm9g45_nand_hw_init(void) { unsigned long csa; struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; /* 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 << ATMEL_ID_PIOC, &pmc->pcer); #ifdef CONFIG_SYS_NAND_READY_PIN /* Configure RDY/BSY */ gpio_direction_input(CONFIG_SYS_NAND_READY_PIN); #endif /* Enable NandFlash */ gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1); }
/** * Initialise the memory bus settings so that we can talk to the * memory mapped FPGA */ static int fpga_hw_init(void) { struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX; struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC; int i; setbits_le32(&matrix->ebicsa, AT91_MATRIX_EBI_CS1A_SDRAMC); at91_set_a_periph(2, 4, 0); /* EBIA21 */ at91_set_a_periph(2, 5, 0); /* EBIA22 */ at91_set_a_periph(2, 6, 0); /* EBIA23 */ at91_set_a_periph(2, 7, 0); /* EBIA24 */ at91_set_a_periph(2, 12, 0); /* EBIA25 */ for (i = 15; i <= 31; i++) /* EBINWAIT & EBID16 - 31 */ at91_set_a_periph(2, i, 0); /* configure SMC cs0 for FPGA access timing */ writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(2) | AT91_SMC_SETUP_NRD(0) | AT91_SMC_SETUP_NCS_RD(2), &smc->cs[0].setup); writel(AT91_SMC_PULSE_NWE(5) | AT91_SMC_PULSE_NCS_WR(4) | AT91_SMC_PULSE_NRD(6) | AT91_SMC_PULSE_NCS_RD(4), &smc->cs[0].pulse); writel(AT91_SMC_CYCLE_NWE(6) | AT91_SMC_CYCLE_NRD(6), &smc->cs[0].cycle); writel(AT91_SMC_MODE_BAT | AT91_SMC_MODE_EXNW_DISABLE | AT91_SMC_MODE_DBW_32 | AT91_SMC_MODE_TDF | AT91_SMC_MODE_TDF_CYCLE(2), &smc->cs[0].mode); /* Do a write to within EBI_CS1 to enable the SDCK */ writel(0, ATMEL_BASE_CS1); return 0; }
/* * Static memory controller initialization to enable Beckhoff ET1100 EtherCAT * controller debugging * The ET1100 is located at physical address 0x70000000 * Its process memory is located at physical address 0x70001000 */ static void otc570_ethercat_hw_init(void) { at91_smc_t *smc1 = (at91_smc_t *) ATMEL_BASE_SMC1; /* Configure SMC EBI1_CS0 for EtherCAT */ writel(AT91_SMC_SETUP_NWE(0) | AT91_SMC_SETUP_NCS_WR(0) | AT91_SMC_SETUP_NRD(0) | AT91_SMC_SETUP_NCS_RD(0), &smc1->cs[0].setup); writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(9) | AT91_SMC_PULSE_NRD(5) | AT91_SMC_PULSE_NCS_RD(9), &smc1->cs[0].pulse); writel(AT91_SMC_CYCLE_NWE(10) | AT91_SMC_CYCLE_NRD(6), &smc1->cs[0].cycle); /* * Configure behavior at external wait signal, byte-select mode, 16 bit * data bus width, none data float wait states and TDF optimization */ writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_EXNW_READY | AT91_SMC_MODE_DBW_16 | AT91_SMC_MODE_TDF_CYCLE(0) | AT91_SMC_MODE_TDF, &smc1->cs[0].mode); /* Configure RDY/BSY */ at91_set_b_periph(AT91_PIO_PORTE, 20, 0); /* EBI1_NWAIT */ }