/* * Static Memory Controller for AT32 chips * * Copyright (C) 2006 Atmel Corporation * * Inspired by the OMAP2 General-Purpose Memory Controller interface * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __ARCH_AT32AP_SMC_H #define __ARCH_AT32AP_SMC_H /* * All timing parameters are in nanoseconds. */ struct smc_config { /* Delay from address valid to assertion of given strobe */ u16 ncs_read_setup; u16 nrd_setup; u16 ncs_write_setup; u16 nwe_setup; /* Pulse length of given strobe */ u16 ncs_read_pulse; u16 nrd_pulse; u16 ncs_write_pulse; u16 nwe_pulse; /* Total cycle length of given operation */ u16 read_cycle; u16 write_cycle; /* Bus width in bytes */ u8 bus_width; /* * 0: Data is sampled on rising edge of NCS * 1: Data is sampled on rising edge of NRD */ unsigned int nrd_controlled:1; /* * 0: Data is driven on falling edge of NCS * 1: Data is driven on falling edge of NWR */ unsigned int nwe_controlled:1; /* * 0: Byte select access type * 1: Byte write access type */ unsigned int byte_write:1; }; extern int smc_set_configuration(int cs, const struct smc_config *config); extern struct smc_config *smc_get_configuration(int cs); #endif /* __ARCH_AT32AP_SMC_H */