ARM: at91: make smc register base soc independent
now sam9_smc_configure will take as first parameter is the SMC id Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
This commit is contained in:
		
					parent
					
						
							
								4ab0c5998d
							
						
					
				
			
			
				commit
				
					
						faee0cc33c
					
				
			
		
					 33 changed files with 92 additions and 62 deletions
				
			
		| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -336,6 +337,7 @@ static void __init at91cap9_map_io(void)
 | 
			
		|||
static void __init at91cap9_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91CAP9_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91CAP9_BASE_SMC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91cap9_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
static struct map_desc at91rm9200_io_desc[] __initdata = {
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -328,6 +329,7 @@ static void __init at91sam9260_map_io(void)
 | 
			
		|||
static void __init at91sam9260_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91SAM9260_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91SAM9260_BASE_SMC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91sam9260_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -288,6 +289,7 @@ static void __init at91sam9261_map_io(void)
 | 
			
		|||
static void __init at91sam9261_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91SAM9261_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91SAM9261_BASE_SMC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91sam9261_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -306,6 +307,8 @@ static void __init at91sam9263_map_io(void)
 | 
			
		|||
static void __init at91sam9263_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91SAM9263_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91SAM9263_BASE_SMC0);
 | 
			
		||||
	at91sam9_ioremap_smc(1, AT91SAM9263_BASE_SMC1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91sam9263_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -341,6 +342,7 @@ static void __init at91sam9g45_map_io(void)
 | 
			
		|||
static void __init at91sam9g45_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91SAM9G45_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91SAM9G45_BASE_SMC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91sam9g45_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
#include "soc.h"
 | 
			
		||||
#include "generic.h"
 | 
			
		||||
#include "clock.h"
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
/* --------------------------------------------------------------------
 | 
			
		||||
 *  Clocks
 | 
			
		||||
| 
						 | 
				
			
			@ -293,6 +294,7 @@ static void __init at91sam9rl_map_io(void)
 | 
			
		|||
static void __init at91sam9rl_ioremap_registers(void)
 | 
			
		||||
{
 | 
			
		||||
	at91sam926x_ioremap_pit(AT91SAM9RL_BASE_PIT);
 | 
			
		||||
	at91sam9_ioremap_smc(0, AT91SAM9RL_BASE_SMC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __init at91sam9rl_initialize(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -163,7 +163,7 @@ static struct sam9_smc_config __initdata cam60_nand_smc_config = {
 | 
			
		|||
static void __init cam60_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &cam60_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &cam60_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&cam60_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -212,7 +212,7 @@ static void __init cap9adk_add_device_nand(void)
 | 
			
		|||
		cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &cap9adk_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &cap9adk_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&cap9adk_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +282,7 @@ static __init void cap9adk_add_device_nor(void)
 | 
			
		|||
	at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V);
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 0 (NOR) */
 | 
			
		||||
	sam9_smc_configure(0, &cap9adk_nor_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 0, &cap9adk_nor_smc_config);
 | 
			
		||||
 | 
			
		||||
	platform_device_register(&cap9adk_nor_flash);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ static struct sam9_smc_config __initdata cpu9krea_nand_smc_config = {
 | 
			
		|||
 | 
			
		||||
static void __init cpu9krea_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	sam9_smc_configure(3, &cpu9krea_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &cpu9krea_nand_smc_config);
 | 
			
		||||
	at91_add_device_nand(&cpu9krea_nand_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +238,7 @@ static __init void cpu9krea_add_device_nor(void)
 | 
			
		|||
	at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_VDDIOMSEL_3_3V);
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 0 (NOR) */
 | 
			
		||||
	sam9_smc_configure(0, &cpu9krea_nor_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 0, &cpu9krea_nor_smc_config);
 | 
			
		||||
 | 
			
		||||
	platform_device_register(&cpu9krea_nor_flash);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -213,7 +213,7 @@ static struct sam9_smc_config __initdata neocore926_nand_smc_config = {
 | 
			
		|||
static void __init neocore926_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &neocore926_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &neocore926_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&neocore926_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,9 +96,9 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
 | 
			
		|||
static void __init add_device_pcontrol(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 4 (IO compatible to 8051  X4 ) */
 | 
			
		||||
	sam9_smc_configure(4, &pcontrol_smc_config[0]);
 | 
			
		||||
	sam9_smc_configure(0, 4, &pcontrol_smc_config[0]);
 | 
			
		||||
	/* configure chip-select 7 (FerroRAM 256KiBx16bit MR2A16A  D4 ) */
 | 
			
		||||
	sam9_smc_configure(7, &pcontrol_smc_config[1]);
 | 
			
		||||
	sam9_smc_configure(0, 7, &pcontrol_smc_config[1]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -161,7 +161,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 | 
			
		|||
static void __init ek_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 | 
			
		|||
static void __init ek_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,7 +211,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,7 +131,7 @@ static struct sam9_smc_config __initdata dm9000_smc_config = {
 | 
			
		|||
static void __init ek_add_device_dm9000(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Configure chip-select 2 (DM9000) */
 | 
			
		||||
	sam9_smc_configure(2, &dm9000_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 2, &dm9000_smc_config);
 | 
			
		||||
 | 
			
		||||
	/* Configure Reset signal as output */
 | 
			
		||||
	at91_set_gpio_output(AT91_PIN_PC10, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +217,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -218,7 +218,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
		ek_nand_smc_config.mode |= AT91_SMC_DBW_8;
 | 
			
		||||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,7 +119,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
 | 
			
		|||
static void __init ek_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &ek_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &ek_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,7 +149,7 @@ static struct i2c_board_info __initdata snapper9260_i2c_devices[] = {
 | 
			
		|||
static void __init snapper9260_add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	at91_set_A_periph(AT91_PIN_PC14, 0);
 | 
			
		||||
	sam9_smc_configure(3, &snapper9260_nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &snapper9260_nand_smc_config);
 | 
			
		||||
	at91_add_device_nand(&snapper9260_nand_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ static struct sam9_smc_config __initdata nand_smc_config = {
 | 
			
		|||
static void __init add_device_nand(void)
 | 
			
		||||
{
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	sam9_smc_configure(3, &nand_smc_config);
 | 
			
		||||
	sam9_smc_configure(0, 3, &nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -245,9 +245,9 @@ static void __init ek_add_device_nand(void)
 | 
			
		|||
 | 
			
		||||
	/* configure chip-select 3 (NAND) */
 | 
			
		||||
	if (machine_is_usb_a9g20())
 | 
			
		||||
		sam9_smc_configure(3, &usb_a9g20_nand_smc_config);
 | 
			
		||||
		sam9_smc_configure(0, 3, &usb_a9g20_nand_smc_config);
 | 
			
		||||
	else
 | 
			
		||||
		sam9_smc_configure(3, &usb_a9260_nand_smc_config);
 | 
			
		||||
		sam9_smc_configure(0, 3, &usb_a9260_nand_smc_config);
 | 
			
		||||
 | 
			
		||||
	at91_add_device_nand(&ek_nand_data);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,6 @@
 | 
			
		|||
 */
 | 
			
		||||
#define AT91_BCRAMC	(0xffffe400 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DDRSDRC0	(0xffffe600 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC	(0xffffe800 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_CCFG	(0xffffeb10 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DBGU	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +95,7 @@
 | 
			
		|||
 | 
			
		||||
#define AT91CAP9_BASE_ECC	0xffffe200
 | 
			
		||||
#define AT91CAP9_BASE_DMA	0xffffec00
 | 
			
		||||
#define AT91CAP9_BASE_SMC	0xffffe800
 | 
			
		||||
#define AT91CAP9_BASE_PIOA	0xfffff200
 | 
			
		||||
#define AT91CAP9_BASE_PIOB	0xfffff400
 | 
			
		||||
#define AT91CAP9_BASE_PIOC	0xfffff600
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,6 @@
 | 
			
		|||
 * System Peripherals (offset from AT91_BASE_SYS)
 | 
			
		||||
 */
 | 
			
		||||
#define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC	(0xffffec00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_CCFG	(0xffffef10 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_AIC	(0xfffff000 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +92,7 @@
 | 
			
		|||
#define AT91_GPBR	(0xfffffd50 - AT91_BASE_SYS)
 | 
			
		||||
 | 
			
		||||
#define AT91SAM9260_BASE_ECC	0xffffe800
 | 
			
		||||
#define AT91SAM9260_BASE_SMC	0xffffec00
 | 
			
		||||
#define AT91SAM9260_BASE_PIOA	0xfffff400
 | 
			
		||||
#define AT91SAM9260_BASE_PIOB	0xfffff600
 | 
			
		||||
#define AT91SAM9260_BASE_PIOC	0xfffff800
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,6 @@
 | 
			
		|||
 * System Peripherals (offset from AT91_BASE_SYS)
 | 
			
		||||
 */
 | 
			
		||||
#define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC	(0xffffec00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_AIC	(0xfffff000 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DBGU	(0xfffff200 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +75,7 @@
 | 
			
		|||
#define AT91_WDT	(0xfffffd40 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_GPBR	(0xfffffd50 - AT91_BASE_SYS)
 | 
			
		||||
 | 
			
		||||
#define AT91SAM9261_BASE_SMC	0xffffec00
 | 
			
		||||
#define AT91SAM9261_BASE_PIOA	0xfffff400
 | 
			
		||||
#define AT91SAM9261_BASE_PIOB	0xfffff600
 | 
			
		||||
#define AT91SAM9261_BASE_PIOC	0xfffff800
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,9 +75,7 @@
 | 
			
		|||
 * System Peripherals (offset from AT91_BASE_SYS)
 | 
			
		||||
 */
 | 
			
		||||
#define AT91_SDRAMC0	(0xffffe200 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC0	(0xffffe400 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SDRAMC1	(0xffffe800 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC1	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffec00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_CCFG	(0xffffed10 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DBGU	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +87,9 @@
 | 
			
		|||
#define AT91_GPBR	(0xfffffd60 - AT91_BASE_SYS)
 | 
			
		||||
 | 
			
		||||
#define AT91SAM9263_BASE_ECC0	0xffffe000
 | 
			
		||||
#define AT91SAM9263_BASE_SMC0	0xffffe400
 | 
			
		||||
#define AT91SAM9263_BASE_ECC1	0xffffe600
 | 
			
		||||
#define AT91SAM9263_BASE_SMC1	0xffffea00
 | 
			
		||||
#define AT91SAM9263_BASE_PIOA	0xfffff200
 | 
			
		||||
#define AT91SAM9263_BASE_PIOB	0xfffff400
 | 
			
		||||
#define AT91SAM9263_BASE_PIOC	0xfffff600
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,9 @@
 | 
			
		|||
#ifndef AT91SAM9_SMC_H
 | 
			
		||||
#define AT91SAM9_SMC_H
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_SETUP(n)	(AT91_SMC + 0x00 + ((n)*0x10))	/* Setup Register for CS n */
 | 
			
		||||
#include <mach/cpu.h>
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_SETUP		0x00				/* Setup Register for CS n */
 | 
			
		||||
#define		AT91_SMC_NWESETUP	(0x3f << 0)			/* NWE Setup Length */
 | 
			
		||||
#define			AT91_SMC_NWESETUP_(x)	((x) << 0)
 | 
			
		||||
#define		AT91_SMC_NCS_WRSETUP	(0x3f << 8)			/* NCS Setup Length in Write Access */
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +28,7 @@
 | 
			
		|||
#define		AT91_SMC_NCS_RDSETUP	(0x3f << 24)			/* NCS Setup Length in Read Access */
 | 
			
		||||
#define			AT91_SMC_NCS_RDSETUP_(x)	((x) << 24)
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_PULSE(n)	(AT91_SMC + 0x04 + ((n)*0x10))	/* Pulse Register for CS n */
 | 
			
		||||
#define AT91_SMC_PULSE		0x04				/* Pulse Register for CS n */
 | 
			
		||||
#define		AT91_SMC_NWEPULSE	(0x7f <<  0)			/* NWE Pulse Length */
 | 
			
		||||
#define			AT91_SMC_NWEPULSE_(x)	((x) << 0)
 | 
			
		||||
#define		AT91_SMC_NCS_WRPULSE	(0x7f <<  8)			/* NCS Pulse Length in Write Access */
 | 
			
		||||
| 
						 | 
				
			
			@ -36,13 +38,13 @@
 | 
			
		|||
#define		AT91_SMC_NCS_RDPULSE	(0x7f << 24)			/* NCS Pulse Length in Read Access */
 | 
			
		||||
#define			AT91_SMC_NCS_RDPULSE_(x)((x) << 24)
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_CYCLE(n)	(AT91_SMC + 0x08 + ((n)*0x10))	/* Cycle Register for CS n */
 | 
			
		||||
#define AT91_SMC_CYCLE		0x08				/* Cycle Register for CS n */
 | 
			
		||||
#define		AT91_SMC_NWECYCLE	(0x1ff << 0 )			/* Total Write Cycle Length */
 | 
			
		||||
#define			AT91_SMC_NWECYCLE_(x)	((x) << 0)
 | 
			
		||||
#define		AT91_SMC_NRDCYCLE	(0x1ff << 16)			/* Total Read Cycle Length */
 | 
			
		||||
#define			AT91_SMC_NRDCYCLE_(x)	((x) << 16)
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_MODE(n)	(AT91_SMC + 0x0c + ((n)*0x10))	/* Mode Register for CS n */
 | 
			
		||||
#define AT91_SMC_MODE		0x0c				/* Mode Register for CS n */
 | 
			
		||||
#define		AT91_SMC_READMODE	(1 <<  0)			/* Read Mode */
 | 
			
		||||
#define		AT91_SMC_WRITEMODE	(1 <<  1)			/* Write Mode */
 | 
			
		||||
#define		AT91_SMC_EXNWMODE	(3 <<  4)			/* NWAIT Mode */
 | 
			
		||||
| 
						 | 
				
			
			@ -66,11 +68,4 @@
 | 
			
		|||
#define			AT91_SMC_PS_16			(2 << 28)
 | 
			
		||||
#define			AT91_SMC_PS_32			(3 << 28)
 | 
			
		||||
 | 
			
		||||
#if defined(AT91_SMC1)		/* The AT91SAM9263 has 2 Static Memory contollers */
 | 
			
		||||
#define AT91_SMC1_SETUP(n)	(AT91_SMC1 + 0x00 + ((n)*0x10))	/* Setup Register for CS n */
 | 
			
		||||
#define AT91_SMC1_PULSE(n)	(AT91_SMC1 + 0x04 + ((n)*0x10))	/* Pulse Register for CS n */
 | 
			
		||||
#define AT91_SMC1_CYCLE(n)	(AT91_SMC1 + 0x08 + ((n)*0x10))	/* Cycle Register for CS n */
 | 
			
		||||
#define AT91_SMC1_MODE(n)	(AT91_SMC1 + 0x0c + ((n)*0x10))	/* Mode Register for CS n */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,6 @@
 | 
			
		|||
 */
 | 
			
		||||
#define AT91_DDRSDRC1	(0xffffe400 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DDRSDRC0	(0xffffe600 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC	(0xffffe800 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_DBGU	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_AIC	(0xfffff000 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +100,7 @@
 | 
			
		|||
 | 
			
		||||
#define AT91SAM9G45_BASE_ECC	0xffffe200
 | 
			
		||||
#define AT91SAM9G45_BASE_DMA	0xffffec00
 | 
			
		||||
#define AT91SAM9G45_BASE_SMC	0xffffe800
 | 
			
		||||
#define AT91SAM9G45_BASE_PIOA	0xfffff200
 | 
			
		||||
#define AT91SAM9G45_BASE_PIOB	0xfffff400
 | 
			
		||||
#define AT91SAM9G45_BASE_PIOC	0xfffff600
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,7 +70,6 @@
 | 
			
		|||
 * System Peripherals (offset from AT91_BASE_SYS)
 | 
			
		||||
 */
 | 
			
		||||
#define AT91_SDRAMC0	(0xffffea00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_SMC	(0xffffec00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_MATRIX	(0xffffee00 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_CCFG	(0xffffef10 - AT91_BASE_SYS)
 | 
			
		||||
#define AT91_AIC	(0xfffff000 - AT91_BASE_SYS)
 | 
			
		||||
| 
						 | 
				
			
			@ -85,6 +84,7 @@
 | 
			
		|||
 | 
			
		||||
#define AT91SAM9RL_BASE_DMA	0xffffe600
 | 
			
		||||
#define AT91SAM9RL_BASE_ECC	0xffffe800
 | 
			
		||||
#define AT91SAM9RL_BASE_SMC	0xffffec00
 | 
			
		||||
#define AT91SAM9RL_BASE_PIOA	0xfffff400
 | 
			
		||||
#define AT91SAM9RL_BASE_PIOB	0xfffff600
 | 
			
		||||
#define AT91SAM9RL_BASE_PIOC	0xfffff800
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,38 +10,58 @@
 | 
			
		|||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
#include <linux/io.h>
 | 
			
		||||
#include <linux/of.h>
 | 
			
		||||
#include <linux/of_address.h>
 | 
			
		||||
 | 
			
		||||
#include <mach/at91sam9_smc.h>
 | 
			
		||||
 | 
			
		||||
#include "sam9_smc.h"
 | 
			
		||||
 | 
			
		||||
void __init sam9_smc_configure(int cs, struct sam9_smc_config* config)
 | 
			
		||||
 | 
			
		||||
#define AT91_SMC_CS(id, n)	(smc_base_addr[id] + ((n) * 0x10))
 | 
			
		||||
 | 
			
		||||
static void __iomem *smc_base_addr[2];
 | 
			
		||||
 | 
			
		||||
static void __init sam9_smc_cs_configure(void __iomem *base, struct sam9_smc_config* config)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	/* Setup register */
 | 
			
		||||
	at91_sys_write(AT91_SMC_SETUP(cs),
 | 
			
		||||
		  AT91_SMC_NWESETUP_(config->nwe_setup)
 | 
			
		||||
		| AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
 | 
			
		||||
		| AT91_SMC_NRDSETUP_(config->nrd_setup)
 | 
			
		||||
		| AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup)
 | 
			
		||||
	);
 | 
			
		||||
	__raw_writel(AT91_SMC_NWESETUP_(config->nwe_setup)
 | 
			
		||||
		   | AT91_SMC_NCS_WRSETUP_(config->ncs_write_setup)
 | 
			
		||||
		   | AT91_SMC_NRDSETUP_(config->nrd_setup)
 | 
			
		||||
		   | AT91_SMC_NCS_RDSETUP_(config->ncs_read_setup),
 | 
			
		||||
		   base + AT91_SMC_SETUP);
 | 
			
		||||
 | 
			
		||||
	/* Pulse register */
 | 
			
		||||
	at91_sys_write(AT91_SMC_PULSE(cs),
 | 
			
		||||
		  AT91_SMC_NWEPULSE_(config->nwe_pulse)
 | 
			
		||||
		| AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
 | 
			
		||||
                | AT91_SMC_NRDPULSE_(config->nrd_pulse)
 | 
			
		||||
		| AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse)
 | 
			
		||||
	);
 | 
			
		||||
	__raw_writel(AT91_SMC_NWEPULSE_(config->nwe_pulse)
 | 
			
		||||
		   | AT91_SMC_NCS_WRPULSE_(config->ncs_write_pulse)
 | 
			
		||||
		   | AT91_SMC_NRDPULSE_(config->nrd_pulse)
 | 
			
		||||
		   | AT91_SMC_NCS_RDPULSE_(config->ncs_read_pulse),
 | 
			
		||||
		   base + AT91_SMC_PULSE);
 | 
			
		||||
 | 
			
		||||
	/* Cycle register */
 | 
			
		||||
	at91_sys_write(AT91_SMC_CYCLE(cs),
 | 
			
		||||
		  AT91_SMC_NWECYCLE_(config->write_cycle)
 | 
			
		||||
		| AT91_SMC_NRDCYCLE_(config->read_cycle)
 | 
			
		||||
	);
 | 
			
		||||
	__raw_writel(AT91_SMC_NWECYCLE_(config->write_cycle)
 | 
			
		||||
		   | AT91_SMC_NRDCYCLE_(config->read_cycle),
 | 
			
		||||
		   base + AT91_SMC_CYCLE);
 | 
			
		||||
 | 
			
		||||
	/* Mode register */
 | 
			
		||||
	at91_sys_write(AT91_SMC_MODE(cs),
 | 
			
		||||
		  config->mode
 | 
			
		||||
		| AT91_SMC_TDF_(config->tdf_cycles)
 | 
			
		||||
	);
 | 
			
		||||
	__raw_writel(config->mode
 | 
			
		||||
		   | AT91_SMC_TDF_(config->tdf_cycles),
 | 
			
		||||
		   base + AT91_SMC_MODE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void __init sam9_smc_configure(int id, int cs, struct sam9_smc_config* config)
 | 
			
		||||
{
 | 
			
		||||
	sam9_smc_cs_configure(AT91_SMC_CS(id, cs), config);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void __init at91sam9_ioremap_smc(int id, u32 addr)
 | 
			
		||||
{
 | 
			
		||||
	if (id > 1) {
 | 
			
		||||
		pr_warn("%s: id > 2\n", __func__);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	smc_base_addr[id] = ioremap(addr, 512);
 | 
			
		||||
	if (!smc_base_addr[id])
 | 
			
		||||
		pr_warn("Impossible to ioremap smc.%d 0x%x\n", id, addr);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,4 +30,5 @@ struct sam9_smc_config {
 | 
			
		|||
	u8 tdf_cycles:4;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern void __init sam9_smc_configure(int cs, struct sam9_smc_config* config);
 | 
			
		||||
extern void __init sam9_smc_configure(int id, int cs, struct sam9_smc_config* config);
 | 
			
		||||
extern void __init at91sam9_ioremap_smc(int id, u32 addr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue