1210040Scognet/*- 2210040Scognet * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. 3210040Scognet * Copyright (c) 2005-2008 Warner Losh. All rights reserved. 4210040Scognet * 5210040Scognet * Redistribution and use in source and binary forms, with or without 6210040Scognet * modification, are permitted provided that the following conditions 7210040Scognet * are met: 8210040Scognet * 1. Redistributions of source code must retain the above copyright 9210040Scognet * notice, this list of conditions and the following disclaimer. 10210040Scognet * 2. Redistributions in binary form must reproduce the above copyright 11210040Scognet * notice, this list of conditions and the following disclaimer in the 12210040Scognet * documentation and/or other materials provided with the distribution. 13210040Scognet * 14210040Scognet * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15210040Scognet * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16210040Scognet * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17210040Scognet * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 18210040Scognet * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19210040Scognet * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20210040Scognet * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21210040Scognet * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22210040Scognet * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23210040Scognet * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24210040Scognet * SUCH DAMAGE. 25210040Scognet */ 26210040Scognet 27210040Scognet#include <sys/cdefs.h> 28210040Scognet__FBSDID("$FreeBSD: releng/11.0/sys/arm/at91/board_hl201.c 260886 2014-01-19 17:59:34Z imp $"); 29210040Scognet#include <sys/param.h> 30210040Scognet#include <sys/systm.h> 31210040Scognet 32238189Simp#include <machine/board.h> 33210040Scognet#include <arm/at91/at91board.h> 34210040Scognet#include <arm/at91/at91sam9g20reg.h> 35210040Scognet#include <arm/at91/at91_piovar.h> 36213496Scognet#include <arm/at91/at91_pio_sam9g20.h> 37260886Simp#include <arm/at91/at91_smc.h> 38260886Simp#include <arm/at91/at91_gpio.h> 39260886Simp#include <dev/nand/nfc_at91.h> 40210040Scognet 41260886Simpstatic struct at91_smc_init nand_smc = { 42260886Simp .ncs_rd_setup = 0, 43260886Simp .nrd_setup = 2, 44260886Simp .ncs_wr_setup = 0, 45260886Simp .nwe_setup = 2, 46260886Simp 47260886Simp .ncs_rd_pulse = 4, 48260886Simp .nrd_pulse = 4, 49260886Simp .ncs_wr_pulse = 4, 50260886Simp .nwe_pulse = 4, 51260886Simp 52260886Simp .nrd_cycle = 7, 53260886Simp .nwe_cycle = 7, 54260886Simp 55260886Simp .mode = SMC_MODE_READ | SMC_MODE_WRITE | SMC_MODE_EXNW_DISABLED, 56260886Simp .tdf_cycles = 3, 57260886Simp}; 58260886Simp 59260886Simpstatic struct at91_nand_params nand_param = { 60260886Simp .ale = 1u << 21, 61260886Simp .cle = 1u << 22, 62260886Simp .width = 8, 63260886Simp .rnb_pin = AT91_PIN_PC13, /* Note: These pins not confirmed */ 64260886Simp .nce_pin = AT91_PIN_PC14, 65260886Simp .cs = 3, 66260886Simp}; 67260886Simp 68238189SimpBOARD_INIT long 69210040Scognetboard_init(void) 70210040Scognet{ 71213496Scognet /* Setup Ethernet Pins */ 72213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, 1<<7, 0); 73210040Scognet 74213496Scognet at91_pio_gpio_input(AT91SAM9G20_PIOA_BASE, 1<<7); 75213496Scognet at91_pio_gpio_set_deglitch(AT91SAM9G20_PIOA_BASE, 1<<7, 1); 76213496Scognet 77213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA19, 0); /* ETXCK_EREFCK */ 78213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA17, 0); /* ERXDV */ 79213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA14, 0); /* ERX0 */ 80213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA15, 0); /* ERX1 */ 81213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA18, 0); /* ERXER */ 82213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA16, 0); /* ETXEN */ 83213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA12, 0); /* ETX0 */ 84213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA13, 0); /* ETX1 */ 85213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA21, 0); /* EMDIO */ 86213496Scognet at91_pio_use_periph_a(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA20, 0); /* EMDC */ 87213496Scognet 88213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA28, 0); /* ECRS */ 89213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA29, 0); /* ECOL */ 90213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA25, 0); /* ERX2 */ 91213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA26, 0); /* ERX3 */ 92213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA27, 0); /* ERXCK */ 93213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA23, 0); /* ETX2 */ 94213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA24, 0); /* ETX3 */ 95213496Scognet at91_pio_use_periph_b(AT91SAM9G20_PIOA_BASE, AT91C_PIO_PA22, 0); /* ETXER */ 96213496Scognet 97260886Simp /* Setup Static Memory Controller */ 98260886Simp at91_smc_setup(0, 3, &nand_smc); 99260886Simp at91_enable_nand(&nand_param); 100260886Simp 101260886Simp /* 102260886Simp * This assumes 103260886Simp * - RNB is on pin PC13 104260886Simp * - CE is on pin PC14 105260886Simp * 106260886Simp * Nothing actually uses RNB right now. 107260886Simp * 108260886Simp * For CE, this currently asserts it during board setup and leaves it 109260886Simp * that way forever. 110260886Simp * 111260886Simp * All this can go away when the gpio pin-renumbering happens... 112260886Simp */ 113260886Simp at91_pio_use_gpio(AT91SAM9G20_PIOC_BASE, AT91C_PIO_PC13 | AT91C_PIO_PC14); 114260886Simp at91_pio_gpio_input(AT91SAM9G20_PIOC_BASE, AT91C_PIO_PC13); /* RNB */ 115260886Simp at91_pio_gpio_output(AT91SAM9G20_PIOC_BASE, AT91C_PIO_PC14, 0); /* nCS */ 116260886Simp at91_pio_gpio_clear(AT91SAM9G20_PIOC_BASE, AT91C_PIO_PC14); /* Assert nCS */ 117260886Simp 118210040Scognet return (at91_ramsize()); 119210040Scognet} 120238189Simp 121238189SimpARM_BOARD(NONE, "HOTe 201"); 122