[AVR32] Add support for AT32AP7001 and AT32AP7002
These are derivatives of the AT32AP7000 chip, which means that most of the code stays the same. Rename a few files, functions, definitions and config symbols to reflect that they apply to all AP700x chips, and exclude some platform devices from chips where they aren't present. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
This commit is contained in:
Родитель
281ef58ccf
Коммит
438ff3f3cc
|
@ -84,13 +84,26 @@ config PLATFORM_AT32AP
|
||||||
select MMU
|
select MMU
|
||||||
select PERFORMANCE_COUNTERS
|
select PERFORMANCE_COUNTERS
|
||||||
|
|
||||||
|
config CPU_AT32AP700X
|
||||||
|
bool
|
||||||
|
select PLATFORM_AT32AP
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "AVR32 CPU type"
|
prompt "AVR32 CPU type"
|
||||||
default CPU_AT32AP7000
|
default CPU_AT32AP7000
|
||||||
|
|
||||||
config CPU_AT32AP7000
|
config CPU_AT32AP7000
|
||||||
bool "AT32AP7000"
|
bool "AT32AP7000"
|
||||||
select PLATFORM_AT32AP
|
select CPU_AT32AP700X
|
||||||
|
|
||||||
|
config CPU_AT32AP7001
|
||||||
|
bool "AT32AP7001"
|
||||||
|
select CPU_AT32AP700X
|
||||||
|
|
||||||
|
config CPU_AT32AP7002
|
||||||
|
bool "AT32AP7002"
|
||||||
|
select CPU_AT32AP700X
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -126,15 +139,15 @@ source "arch/avr32/mach-at32ap/Kconfig"
|
||||||
|
|
||||||
config LOAD_ADDRESS
|
config LOAD_ADDRESS
|
||||||
hex
|
hex
|
||||||
default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
|
default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y
|
||||||
|
|
||||||
config ENTRY_ADDRESS
|
config ENTRY_ADDRESS
|
||||||
hex
|
hex
|
||||||
default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
|
default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y
|
||||||
|
|
||||||
config PHYS_OFFSET
|
config PHYS_OFFSET
|
||||||
hex
|
hex
|
||||||
default 0x10000000 if CPU_AT32AP7000=y
|
default 0x10000000 if CPU_AT32AP700X=y
|
||||||
|
|
||||||
source "kernel/Kconfig.preempt"
|
source "kernel/Kconfig.preempt"
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ KBUILD_AFLAGS += -mrelax -mno-pic
|
||||||
CFLAGS_MODULE += -mno-relax
|
CFLAGS_MODULE += -mno-relax
|
||||||
LDFLAGS_vmlinux += --relax
|
LDFLAGS_vmlinux += --relax
|
||||||
|
|
||||||
cpuflags-$(CONFIG_CPU_AT32AP7000) += -mcpu=ap7000
|
cpuflags-$(CONFIG_PLATFORM_AT32AP) += -march=ap
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(cpuflags-y)
|
KBUILD_CFLAGS += $(cpuflags-y)
|
||||||
KBUILD_AFLAGS += $(cpuflags-y)
|
KBUILD_AFLAGS += $(cpuflags-y)
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#include <asm/arch/at32ap7000.h>
|
#include <asm/arch/at32ap700x.h>
|
||||||
#include <asm/arch/board.h>
|
#include <asm/arch/board.h>
|
||||||
#include <asm/arch/init.h>
|
#include <asm/arch/init.h>
|
||||||
#include <asm/arch/portmux.h>
|
#include <asm/arch/portmux.h>
|
||||||
|
|
|
@ -111,7 +111,10 @@ CONFIG_SUBARCH_AVR32B=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_PERFORMANCE_COUNTERS=y
|
CONFIG_PERFORMANCE_COUNTERS=y
|
||||||
CONFIG_PLATFORM_AT32AP=y
|
CONFIG_PLATFORM_AT32AP=y
|
||||||
|
CONFIG_CPU_AT32AP700X=y
|
||||||
CONFIG_CPU_AT32AP7000=y
|
CONFIG_CPU_AT32AP7000=y
|
||||||
|
# CONFIG_CPU_AT32AP7001 is not set
|
||||||
|
# CONFIG_CPU_AT32AP7002 is not set
|
||||||
# CONFIG_BOARD_ATSTK1000 is not set
|
# CONFIG_BOARD_ATSTK1000 is not set
|
||||||
CONFIG_BOARD_ATNGW100=y
|
CONFIG_BOARD_ATNGW100=y
|
||||||
CONFIG_LOADER_U_BOOT=y
|
CONFIG_LOADER_U_BOOT=y
|
||||||
|
@ -119,9 +122,9 @@ CONFIG_LOADER_U_BOOT=y
|
||||||
#
|
#
|
||||||
# Atmel AVR32 AP options
|
# Atmel AVR32 AP options
|
||||||
#
|
#
|
||||||
# CONFIG_AP7000_32_BIT_SMC is not set
|
# CONFIG_AP700X_32_BIT_SMC is not set
|
||||||
CONFIG_AP7000_16_BIT_SMC=y
|
CONFIG_AP700X_16_BIT_SMC=y
|
||||||
# CONFIG_AP7000_8_BIT_SMC is not set
|
# CONFIG_AP700X_8_BIT_SMC is not set
|
||||||
CONFIG_LOAD_ADDRESS=0x10000000
|
CONFIG_LOAD_ADDRESS=0x10000000
|
||||||
CONFIG_ENTRY_ADDRESS=0x90000000
|
CONFIG_ENTRY_ADDRESS=0x90000000
|
||||||
CONFIG_PHYS_OFFSET=0x10000000
|
CONFIG_PHYS_OFFSET=0x10000000
|
||||||
|
|
|
@ -114,6 +114,8 @@ CONFIG_MMU=y
|
||||||
CONFIG_PERFORMANCE_COUNTERS=y
|
CONFIG_PERFORMANCE_COUNTERS=y
|
||||||
CONFIG_PLATFORM_AT32AP=y
|
CONFIG_PLATFORM_AT32AP=y
|
||||||
CONFIG_CPU_AT32AP7000=y
|
CONFIG_CPU_AT32AP7000=y
|
||||||
|
# CONFIG_CPU_AT32AP7001 is not set
|
||||||
|
# CONFIG_CPU_AT32AP7002 is not set
|
||||||
CONFIG_BOARD_ATSTK1002=y
|
CONFIG_BOARD_ATSTK1002=y
|
||||||
CONFIG_BOARD_ATSTK1000=y
|
CONFIG_BOARD_ATSTK1000=y
|
||||||
# CONFIG_BOARD_ATNGW100 is not set
|
# CONFIG_BOARD_ATNGW100 is not set
|
||||||
|
@ -122,9 +124,9 @@ CONFIG_LOADER_U_BOOT=y
|
||||||
#
|
#
|
||||||
# Atmel AVR32 AP options
|
# Atmel AVR32 AP options
|
||||||
#
|
#
|
||||||
# CONFIG_AP7000_32_BIT_SMC is not set
|
# CONFIG_AP700X_32_BIT_SMC is not set
|
||||||
CONFIG_AP7000_16_BIT_SMC=y
|
CONFIG_AP700X_16_BIT_SMC=y
|
||||||
# CONFIG_AP7000_8_BIT_SMC is not set
|
# CONFIG_AP700X_8_BIT_SMC is not set
|
||||||
CONFIG_LOAD_ADDRESS=0x10000000
|
CONFIG_LOAD_ADDRESS=0x10000000
|
||||||
CONFIG_ENTRY_ADDRESS=0x90000000
|
CONFIG_ENTRY_ADDRESS=0x90000000
|
||||||
CONFIG_PHYS_OFFSET=0x10000000
|
CONFIG_PHYS_OFFSET=0x10000000
|
||||||
|
|
|
@ -3,9 +3,9 @@ if PLATFORM_AT32AP
|
||||||
menu "Atmel AVR32 AP options"
|
menu "Atmel AVR32 AP options"
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "AT32AP7000 static memory bus width"
|
prompt "AT32AP700x static memory bus width"
|
||||||
depends on CPU_AT32AP7000
|
depends on CPU_AT32AP700X
|
||||||
default AP7000_16_BIT_SMC
|
default AP700X_16_BIT_SMC
|
||||||
help
|
help
|
||||||
Define the width of the AP7000 external static memory interface.
|
Define the width of the AP7000 external static memory interface.
|
||||||
This is used to determine how to mangle the address and/or data
|
This is used to determine how to mangle the address and/or data
|
||||||
|
@ -15,13 +15,13 @@ choice
|
||||||
width for all chip selects, excluding the flash (which is using
|
width for all chip selects, excluding the flash (which is using
|
||||||
raw access and is thus not affected by any of this.)
|
raw access and is thus not affected by any of this.)
|
||||||
|
|
||||||
config AP7000_32_BIT_SMC
|
config AP700X_32_BIT_SMC
|
||||||
bool "32 bit"
|
bool "32 bit"
|
||||||
|
|
||||||
config AP7000_16_BIT_SMC
|
config AP700X_16_BIT_SMC
|
||||||
bool "16 bit"
|
bool "16 bit"
|
||||||
|
|
||||||
config AP7000_8_BIT_SMC
|
config AP700X_8_BIT_SMC
|
||||||
bool "8 bit"
|
bool "8 bit"
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
obj-y += at32ap.o clock.o intc.o extint.o pio.o hsmc.o
|
obj-y += at32ap.o clock.o intc.o extint.o pio.o hsmc.o
|
||||||
obj-$(CONFIG_CPU_AT32AP7000) += at32ap7000.o
|
obj-$(CONFIG_CPU_AT32AP700X) += at32ap700x.o
|
||||||
obj-$(CONFIG_CPU_AT32AP7000) += time-tc.o
|
obj-$(CONFIG_CPU_AT32AP700X) += time-tc.o
|
||||||
obj-$(CONFIG_CPU_FREQ_AT32AP) += cpufreq.o
|
obj-$(CONFIG_CPU_FREQ_AT32AP) += cpufreq.o
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
#include <asm/arch/at32ap7000.h>
|
#include <asm/arch/at32ap700x.h>
|
||||||
#include <asm/arch/board.h>
|
#include <asm/arch/board.h>
|
||||||
#include <asm/arch/portmux.h>
|
#include <asm/arch/portmux.h>
|
||||||
|
|
||||||
|
@ -803,6 +803,7 @@ void __init at32_setup_serial_console(unsigned int usart_id)
|
||||||
* Ethernet
|
* Ethernet
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_AT32AP7000
|
||||||
static struct eth_platform_data macb0_data;
|
static struct eth_platform_data macb0_data;
|
||||||
static struct resource macb0_resource[] = {
|
static struct resource macb0_resource[] = {
|
||||||
PBMEM(0xfff01800),
|
PBMEM(0xfff01800),
|
||||||
|
@ -890,6 +891,7 @@ at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
|
||||||
|
|
||||||
return pdev;
|
return pdev;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* SPI
|
* SPI
|
||||||
|
@ -1064,6 +1066,7 @@ err_add_resources:
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* LCDC
|
* LCDC
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7002)
|
||||||
static struct atmel_lcdfb_info atmel_lcdfb0_data;
|
static struct atmel_lcdfb_info atmel_lcdfb0_data;
|
||||||
static struct resource atmel_lcdfb0_resource[] = {
|
static struct resource atmel_lcdfb0_resource[] = {
|
||||||
{
|
{
|
||||||
|
@ -1179,6 +1182,7 @@ err_dup_modedb:
|
||||||
kfree(monspecs);
|
kfree(monspecs);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* SSC
|
* SSC
|
||||||
|
@ -1332,6 +1336,7 @@ out_free_pdev:
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* IDE / CompactFlash
|
* IDE / CompactFlash
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7001)
|
||||||
static struct resource at32_smc_cs4_resource[] __initdata = {
|
static struct resource at32_smc_cs4_resource[] __initdata = {
|
||||||
{
|
{
|
||||||
.start = 0x04000000,
|
.start = 0x04000000,
|
||||||
|
@ -1464,6 +1469,7 @@ fail:
|
||||||
platform_device_put(pdev);
|
platform_device_put(pdev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* --------------------------------------------------------------------
|
/* --------------------------------------------------------------------
|
||||||
* AC97C
|
* AC97C
|
||||||
|
@ -1639,16 +1645,20 @@ struct clk *at32_clock_list[] = {
|
||||||
&atmel_usart1_usart,
|
&atmel_usart1_usart,
|
||||||
&atmel_usart2_usart,
|
&atmel_usart2_usart,
|
||||||
&atmel_usart3_usart,
|
&atmel_usart3_usart,
|
||||||
|
#if defined(CONFIG_CPU_AT32AP7000)
|
||||||
&macb0_hclk,
|
&macb0_hclk,
|
||||||
&macb0_pclk,
|
&macb0_pclk,
|
||||||
&macb1_hclk,
|
&macb1_hclk,
|
||||||
&macb1_pclk,
|
&macb1_pclk,
|
||||||
|
#endif
|
||||||
&atmel_spi0_spi_clk,
|
&atmel_spi0_spi_clk,
|
||||||
&atmel_spi1_spi_clk,
|
&atmel_spi1_spi_clk,
|
||||||
&atmel_twi0_pclk,
|
&atmel_twi0_pclk,
|
||||||
&atmel_mci0_pclk,
|
&atmel_mci0_pclk,
|
||||||
|
#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7002)
|
||||||
&atmel_lcdfb0_hck1,
|
&atmel_lcdfb0_hck1,
|
||||||
&atmel_lcdfb0_pixclk,
|
&atmel_lcdfb0_pixclk,
|
||||||
|
#endif
|
||||||
&ssc0_pclk,
|
&ssc0_pclk,
|
||||||
&ssc1_pclk,
|
&ssc1_pclk,
|
||||||
&ssc2_pclk,
|
&ssc2_pclk,
|
||||||
|
@ -1697,7 +1707,9 @@ void __init at32_clock_init(void)
|
||||||
genclk_init_parent(&gclk2);
|
genclk_init_parent(&gclk2);
|
||||||
genclk_init_parent(&gclk3);
|
genclk_init_parent(&gclk3);
|
||||||
genclk_init_parent(&gclk4);
|
genclk_init_parent(&gclk4);
|
||||||
|
#if defined(CONFIG_CPU_AT32AP7000) || defined(CONFIG_CPU_AT32AP7002)
|
||||||
genclk_init_parent(&atmel_lcdfb0_pixclk);
|
genclk_init_parent(&atmel_lcdfb0_pixclk);
|
||||||
|
#endif
|
||||||
genclk_init_parent(&abdac0_sample_clk);
|
genclk_init_parent(&abdac0_sample_clk);
|
||||||
|
|
||||||
/*
|
/*
|
|
@ -223,7 +223,7 @@ config DAVINCI_WATCHDOG
|
||||||
|
|
||||||
config AT32AP700X_WDT
|
config AT32AP700X_WDT
|
||||||
tristate "AT32AP700x watchdog"
|
tristate "AT32AP700x watchdog"
|
||||||
depends on CPU_AT32AP7000
|
depends on CPU_AT32AP700X
|
||||||
help
|
help
|
||||||
Watchdog timer embedded into AT32AP700x devices. This will reboot
|
Watchdog timer embedded into AT32AP700x devices. This will reboot
|
||||||
your system when the timeout is reached.
|
your system when the timeout is reached.
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#ifndef __ASM_ARCH_AT32AP7000_H__
|
#ifndef __ASM_ARCH_AT32AP700X_H__
|
||||||
#define __ASM_ARCH_AT32AP7000_H__
|
#define __ASM_ARCH_AT32AP700X_H__
|
||||||
|
|
||||||
#define GPIO_PERIPH_A 0
|
#define GPIO_PERIPH_A 0
|
||||||
#define GPIO_PERIPH_B 1
|
#define GPIO_PERIPH_B 1
|
||||||
|
@ -32,4 +32,4 @@
|
||||||
#define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N))
|
#define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N))
|
||||||
#define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N))
|
#define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N))
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_AT32AP7000_H__ */
|
#endif /* __ASM_ARCH_AT32AP700X_H__ */
|
|
@ -14,7 +14,7 @@
|
||||||
* Only AT32AP7000 is defined for now. We can identify the specific
|
* Only AT32AP7000 is defined for now. We can identify the specific
|
||||||
* chip at runtime, but I'm not sure if it's really worth it.
|
* chip at runtime, but I'm not sure if it's really worth it.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_CPU_AT32AP7000
|
#ifdef CONFIG_CPU_AT32AP700X
|
||||||
# define cpu_is_at32ap7000() (1)
|
# define cpu_is_at32ap7000() (1)
|
||||||
#else
|
#else
|
||||||
# define cpu_is_at32ap7000() (0)
|
# define cpu_is_at32ap7000() (0)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* For "bizarre" halfword swapping */
|
/* For "bizarre" halfword swapping */
|
||||||
#include <linux/byteorder/swabb.h>
|
#include <linux/byteorder/swabb.h>
|
||||||
|
|
||||||
#if defined(CONFIG_AP7000_32_BIT_SMC)
|
#if defined(CONFIG_AP700X_32_BIT_SMC)
|
||||||
# define __swizzle_addr_b(addr) (addr ^ 3UL)
|
# define __swizzle_addr_b(addr) (addr ^ 3UL)
|
||||||
# define __swizzle_addr_w(addr) (addr ^ 2UL)
|
# define __swizzle_addr_w(addr) (addr ^ 2UL)
|
||||||
# define __swizzle_addr_l(addr) (addr)
|
# define __swizzle_addr_l(addr) (addr)
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
# define __mem_ioswabb(a, x) (x)
|
# define __mem_ioswabb(a, x) (x)
|
||||||
# define __mem_ioswabw(a, x) swab16(x)
|
# define __mem_ioswabw(a, x) swab16(x)
|
||||||
# define __mem_ioswabl(a, x) swab32(x)
|
# define __mem_ioswabl(a, x) swab32(x)
|
||||||
#elif defined(CONFIG_AP7000_16_BIT_SMC)
|
#elif defined(CONFIG_AP700X_16_BIT_SMC)
|
||||||
# define __swizzle_addr_b(addr) (addr ^ 1UL)
|
# define __swizzle_addr_b(addr) (addr ^ 1UL)
|
||||||
# define __swizzle_addr_w(addr) (addr)
|
# define __swizzle_addr_w(addr) (addr)
|
||||||
# define __swizzle_addr_l(addr) (addr)
|
# define __swizzle_addr_l(addr) (addr)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче