Commit b319ff80 authored by Nicolas Ferre's avatar Nicolas Ferre Committed by Russell King
Browse files

[ARM] 5570/1: at91: Support for at91sam9g10: core chip & board support



From: Hong Xu <hong.xu@atmel.com>

Here are the modification to at91sam9261 files dedicated to the support of
at91sam9g10. This direction has been adopted to minimize code duplication.

All at91sam9261 drivers are enabled in _devices and board- files. Modificaton
to peripherals that support at91sam9g10 will be added in future patches.

Signed-off-by: default avatarHong Xu <hong.xu@atmel.com>
Signed-off-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: default avatarAndrew Victor <linux@maxim.org.za>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent b784b7c0
Loading
Loading
Loading
Loading
+23 −2
Original line number Original line Diff line number Diff line
@@ -23,6 +23,12 @@ config ARCH_AT91SAM9261
	select GENERIC_TIME
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS
	select GENERIC_CLOCKEVENTS


config ARCH_AT91SAM9G10
	bool "AT91SAM9G10"
	select CPU_ARM926T
	select GENERIC_TIME
	select GENERIC_CLOCKEVENTS

config ARCH_AT91SAM9263
config ARCH_AT91SAM9263
	bool "AT91SAM9263"
	bool "AT91SAM9263"
	select CPU_ARM926T
	select CPU_ARM926T
@@ -230,6 +236,21 @@ endif


# ----------------------------------------------------------
# ----------------------------------------------------------


if ARCH_AT91SAM9G10

comment "AT91SAM9G10 Board Type"

config MACH_AT91SAM9G10EK
	bool "Atmel AT91SAM9G10-EK Evaluation Kit"
	depends on ARCH_AT91SAM9G10
	help
	  Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>

endif

# ----------------------------------------------------------

if ARCH_AT91SAM9263
if ARCH_AT91SAM9263


comment "AT91SAM9263 Board Type"
comment "AT91SAM9263 Board Type"
@@ -337,13 +358,13 @@ comment "AT91 Board Options"


config MTD_AT91_DATAFLASH_CARD
config MTD_AT91_DATAFLASH_CARD
	bool "Enable DataFlash Card support"
	bool "Enable DataFlash Card support"
	depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_NEOCORE926)
	depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_NEOCORE926)
	help
	help
	  Enable support for the DataFlash card.
	  Enable support for the DataFlash card.


config MTD_NAND_ATMEL_BUSWIDTH_16
config MTD_NAND_ATMEL_BUSWIDTH_16
	bool "Enable 16-bit data bus interface to NAND flash"
	bool "Enable 16-bit data bus interface to NAND flash"
	depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK)
	depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK)
	help
	help
	  On AT91SAM926x boards both types of NAND flash can be present
	  On AT91SAM926x boards both types of NAND flash can be present
	  (8 and 16 bit data bus width).
	  (8 and 16 bit data bus width).
+2 −0
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@ obj-$(CONFIG_AT91_PMC_UNIT) += clock.o
obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9261)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G10)	+= at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9263)	+= at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9RL)	+= at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o  sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G20)	+= at91sam9260.o at91sam926x_time.o at91sam9260_devices.o  sam9_smc.o
@@ -44,6 +45,7 @@ obj-$(CONFIG_MACH_AFEB9260) += board-afeb-9260v1.o


# AT91SAM9261 board-specific support
# AT91SAM9261 board-specific support
obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
obj-$(CONFIG_MACH_AT91SAM9G10EK) += board-sam9261ek.o


# AT91SAM9263 board-specific support
# AT91SAM9263 board-specific support
obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o
+21 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <mach/cpu.h>
#include <mach/at91sam9261.h>
#include <mach/at91sam9261.h>
#include <mach/at91_pmc.h>
#include <mach/at91_pmc.h>
#include <mach/at91_rstc.h>
#include <mach/at91_rstc.h>
@@ -30,7 +31,11 @@ static struct map_desc at91sam9261_io_desc[] __initdata = {
		.pfn		= __phys_to_pfn(AT91_BASE_SYS),
		.pfn		= __phys_to_pfn(AT91_BASE_SYS),
		.length		= SZ_16K,
		.length		= SZ_16K,
		.type		= MT_DEVICE,
		.type		= MT_DEVICE,
	}, {
	},
};

static struct map_desc at91sam9261_sram_desc[] __initdata = {
	{
		.virtual	= AT91_IO_VIRT_BASE - AT91SAM9261_SRAM_SIZE,
		.virtual	= AT91_IO_VIRT_BASE - AT91SAM9261_SRAM_SIZE,
		.pfn		= __phys_to_pfn(AT91SAM9261_SRAM_BASE),
		.pfn		= __phys_to_pfn(AT91SAM9261_SRAM_BASE),
		.length		= AT91SAM9261_SRAM_SIZE,
		.length		= AT91SAM9261_SRAM_SIZE,
@@ -38,6 +43,15 @@ static struct map_desc at91sam9261_io_desc[] __initdata = {
	},
	},
};
};


static struct map_desc at91sam9g10_sram_desc[] __initdata = {
	{
		.virtual	= AT91_IO_VIRT_BASE - AT91SAM9G10_SRAM_SIZE,
		.pfn		= __phys_to_pfn(AT91SAM9G10_SRAM_BASE),
		.length		= AT91SAM9G10_SRAM_SIZE,
		.type		= MT_DEVICE,
	},
};

/* --------------------------------------------------------------------
/* --------------------------------------------------------------------
 *  Clocks
 *  Clocks
 * -------------------------------------------------------------------- */
 * -------------------------------------------------------------------- */
@@ -263,6 +277,12 @@ void __init at91sam9261_initialize(unsigned long main_clock)
	/* Map peripherals */
	/* Map peripherals */
	iotable_init(at91sam9261_io_desc, ARRAY_SIZE(at91sam9261_io_desc));
	iotable_init(at91sam9261_io_desc, ARRAY_SIZE(at91sam9261_io_desc));


	if (cpu_is_at91sam9g10())
		iotable_init(at91sam9g10_sram_desc, ARRAY_SIZE(at91sam9g10_sram_desc));
	else
		iotable_init(at91sam9261_sram_desc, ARRAY_SIZE(at91sam9261_sram_desc));


	at91_arch_reset = at91sam9261_reset;
	at91_arch_reset = at91sam9261_reset;
	pm_power_off = at91sam9261_poweroff;
	pm_power_off = at91sam9261_poweroff;
	at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1)
	at91_extern_irq = (1 << AT91SAM9261_ID_IRQ0) | (1 << AT91SAM9261_ID_IRQ1)
+14 −0
Original line number Original line Diff line number Diff line
@@ -287,7 +287,11 @@ static void __init ek_add_device_ts(void) {}
 */
 */
static struct at73c213_board_info at73c213_data = {
static struct at73c213_board_info at73c213_data = {
	.ssc_id		= 1,
	.ssc_id		= 1,
#if defined(CONFIG_MACH_AT91SAM9261EK)
	.shortname	= "AT91SAM9261-EK external DAC",
	.shortname	= "AT91SAM9261-EK external DAC",
#else
	.shortname	= "AT91SAM9G10-EK external DAC",
#endif
};
};


#if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
#if defined(CONFIG_SND_AT73C213) || defined(CONFIG_SND_AT73C213_MODULE)
@@ -414,6 +418,9 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
	.default_monspecs		= &at91fb_default_stn_monspecs,
	.default_monspecs		= &at91fb_default_stn_monspecs,
	.atmel_lcdfb_power_control	= at91_lcdc_stn_power_control,
	.atmel_lcdfb_power_control	= at91_lcdc_stn_power_control,
	.guard_time			= 1,
	.guard_time			= 1,
#if defined(CONFIG_MACH_AT91SAM9G10EK)
	.lcd_wiring_mode		= ATMEL_LCDC_WIRING_RGB,
#endif
};
};


#else
#else
@@ -467,6 +474,9 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
	.default_monspecs		= &at91fb_default_tft_monspecs,
	.default_monspecs		= &at91fb_default_tft_monspecs,
	.atmel_lcdfb_power_control	= at91_lcdc_tft_power_control,
	.atmel_lcdfb_power_control	= at91_lcdc_tft_power_control,
	.guard_time			= 1,
	.guard_time			= 1,
#if defined(CONFIG_MACH_AT91SAM9G10EK)
	.lcd_wiring_mode		= ATMEL_LCDC_WIRING_RGB,
#endif
};
};
#endif
#endif


@@ -600,7 +610,11 @@ static void __init ek_board_init(void)
	at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
	at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
}
}


#if defined(CONFIG_MACH_AT91SAM9261EK)
MACHINE_START(AT91SAM9261EK, "Atmel AT91SAM9261-EK")
MACHINE_START(AT91SAM9261EK, "Atmel AT91SAM9261-EK")
#else
MACHINE_START(AT91SAM9G10EK, "Atmel AT91SAM9G10-EK")
#endif
	/* Maintainer: Atmel */
	/* Maintainer: Atmel */
	.phys_io	= AT91_BASE_SYS,
	.phys_io	= AT91_BASE_SYS,
	.io_pg_offst	= (AT91_VA_BASE_SYS >> 18) & 0xfffc,
	.io_pg_offst	= (AT91_VA_BASE_SYS >> 18) & 0xfffc,
+2 −1
Original line number Original line Diff line number Diff line
@@ -201,7 +201,8 @@ static int at91_pm_verify_clocks(void)
			pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
			pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
			return 0;
			return 0;
		}
		}
	} else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) {
	} else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()
			|| cpu_is_at91sam9g20() || cpu_is_at91sam9g10()) {
		if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) {
		if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) {
			pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
			pr_err("AT91: PM - Suspend-to-RAM with USB still active\n");
			return 0;
			return 0;