You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6: [AVR32] extint: Set initial irq type to low level [AVR32] extint: change set_irq_type() handling [AVR32] NMI debugging [AVR32] constify function pointer tables [AVR32] ATNGW100: Update defconfig [AVR32] ATSTK1002: Update defconfig [AVR32] Kconfig: Choose daughterboard instead of CPU [AVR32] Add support for ATSTK1003 and ATSTK1004 [AVR32] Clean up external DAC setup code [AVR32] ATSTK1000: Move gpio-leds setup to setup.c [AVR32] Add support for AT32AP7001 and AT32AP7002 [AVR32] Provide more CPU information in /proc/cpuinfo and dmesg [AVR32] Oprofile support [AVR32] Include instrumentation menu Disable VGA text console for AVR32 architecture [AVR32] Enable debugging only when needed ptrace: Call arch_ptrace_attach() when request=PTRACE_TRACEME [AVR32] Remove redundant try_to_freeze() call from do_signal() [AVR32] Drop GFP_COMP for DMA memory allocations
This commit is contained in:
@@ -34,6 +34,7 @@ parameter is applicable:
|
||||
ALSA ALSA sound support is enabled.
|
||||
APIC APIC support is enabled.
|
||||
APM Advanced Power Management support is enabled.
|
||||
AVR32 AVR32 architecture is enabled.
|
||||
AX25 Appropriate AX.25 support is enabled.
|
||||
BLACKFIN Blackfin architecture is enabled.
|
||||
DRM Direct Rendering Management support is enabled.
|
||||
@@ -1123,6 +1124,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
of returning the full 64-bit number.
|
||||
The default is to return 64-bit inode numbers.
|
||||
|
||||
nmi_debug= [KNL,AVR32] Specify one or more actions to take
|
||||
when a NMI is triggered.
|
||||
Format: [state][,regs][,debounce][,die]
|
||||
|
||||
nmi_watchdog= [KNL,BUGS=X86-32] Debugging features for SMP kernels
|
||||
|
||||
no387 [BUGS=X86-32] Tells the kernel to use the 387 maths
|
||||
|
||||
+34
-15
@@ -54,6 +54,9 @@ config ARCH_HAS_ILOG2_U32
|
||||
config ARCH_HAS_ILOG2_U64
|
||||
def_bool n
|
||||
|
||||
config ARCH_SUPPORTS_OPROFILE
|
||||
def_bool y
|
||||
|
||||
config GENERIC_HWEIGHT
|
||||
def_bool y
|
||||
|
||||
@@ -81,19 +84,23 @@ config PLATFORM_AT32AP
|
||||
select MMU
|
||||
select PERFORMANCE_COUNTERS
|
||||
|
||||
choice
|
||||
prompt "AVR32 CPU type"
|
||||
default CPU_AT32AP7000
|
||||
|
||||
config CPU_AT32AP7000
|
||||
bool "AT32AP7000"
|
||||
select PLATFORM_AT32AP
|
||||
endchoice
|
||||
|
||||
#
|
||||
# CPU Daughterboards for ATSTK1000
|
||||
config BOARD_ATSTK1002
|
||||
# CPU types
|
||||
#
|
||||
|
||||
# AP7000 derivatives
|
||||
config CPU_AT32AP700X
|
||||
bool
|
||||
select PLATFORM_AT32AP
|
||||
config CPU_AT32AP7000
|
||||
bool
|
||||
select CPU_AT32AP700X
|
||||
config CPU_AT32AP7001
|
||||
bool
|
||||
select CPU_AT32AP700X
|
||||
config CPU_AT32AP7002
|
||||
bool
|
||||
select CPU_AT32AP700X
|
||||
|
||||
choice
|
||||
prompt "AVR32 board type"
|
||||
@@ -101,10 +108,10 @@ choice
|
||||
|
||||
config BOARD_ATSTK1000
|
||||
bool "ATSTK1000 evaluation board"
|
||||
select BOARD_ATSTK1002 if CPU_AT32AP7000
|
||||
|
||||
config BOARD_ATNGW100
|
||||
bool "ATNGW100 Network Gateway"
|
||||
select CPU_AT32AP7000
|
||||
endchoice
|
||||
|
||||
if BOARD_ATSTK1000
|
||||
@@ -123,15 +130,15 @@ source "arch/avr32/mach-at32ap/Kconfig"
|
||||
|
||||
config LOAD_ADDRESS
|
||||
hex
|
||||
default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
|
||||
default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y
|
||||
|
||||
config ENTRY_ADDRESS
|
||||
hex
|
||||
default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
|
||||
default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP700X=y
|
||||
|
||||
config PHYS_OFFSET
|
||||
hex
|
||||
default 0x10000000 if CPU_AT32AP7000=y
|
||||
default 0x10000000 if CPU_AT32AP700X=y
|
||||
|
||||
source "kernel/Kconfig.preempt"
|
||||
|
||||
@@ -163,6 +170,16 @@ config OWNERSHIP_TRACE
|
||||
enabling Nexus-compliant debuggers to keep track of the PID of the
|
||||
currently executing task.
|
||||
|
||||
config NMI_DEBUGGING
|
||||
bool "NMI Debugging"
|
||||
default n
|
||||
help
|
||||
Say Y here and pass the nmi_debug command-line parameter to
|
||||
the kernel to turn on NMI debugging. Depending on the value
|
||||
of the nmi_debug option, various pieces of information will
|
||||
be dumped to the console when a Non-Maskable Interrupt
|
||||
happens.
|
||||
|
||||
# FPU emulation goes here
|
||||
|
||||
source "kernel/Kconfig.hz"
|
||||
@@ -219,6 +236,8 @@ source "drivers/Kconfig"
|
||||
|
||||
source "fs/Kconfig"
|
||||
|
||||
source "kernel/Kconfig.instrumentation"
|
||||
|
||||
source "arch/avr32/Kconfig.debug"
|
||||
|
||||
source "security/Kconfig"
|
||||
|
||||
@@ -6,14 +6,4 @@ config TRACE_IRQFLAGS_SUPPORT
|
||||
|
||||
source "lib/Kconfig.debug"
|
||||
|
||||
config KPROBES
|
||||
bool "Kprobes"
|
||||
depends on DEBUG_KERNEL
|
||||
help
|
||||
Kprobes allows you to trap at almost any kernel address and
|
||||
execute a callback function. register_kprobe() establishes
|
||||
a probepoint and specifies the callback. Kprobes is useful
|
||||
for kernel debugging, non-intrusive instrumentation and testing.
|
||||
If in doubt, say "N".
|
||||
|
||||
endmenu
|
||||
|
||||
+2
-1
@@ -16,7 +16,7 @@ KBUILD_AFLAGS += -mrelax -mno-pic
|
||||
CFLAGS_MODULE += -mno-relax
|
||||
LDFLAGS_vmlinux += --relax
|
||||
|
||||
cpuflags-$(CONFIG_CPU_AT32AP7000) += -mcpu=ap7000
|
||||
cpuflags-$(CONFIG_PLATFORM_AT32AP) += -march=ap
|
||||
|
||||
KBUILD_CFLAGS += $(cpuflags-y)
|
||||
KBUILD_AFLAGS += $(cpuflags-y)
|
||||
@@ -31,6 +31,7 @@ core-$(CONFIG_BOARD_ATNGW100) += arch/avr32/boards/atngw100/
|
||||
core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
|
||||
core-y += arch/avr32/kernel/
|
||||
core-y += arch/avr32/mm/
|
||||
drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/
|
||||
libs-y += arch/avr32/lib/
|
||||
|
||||
archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <asm/arch/at32ap7000.h>
|
||||
#include <asm/arch/at32ap700x.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/init.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
|
||||
@@ -1,34 +1,53 @@
|
||||
# STK1000 customization
|
||||
|
||||
if BOARD_ATSTK1002
|
||||
if BOARD_ATSTK1000
|
||||
|
||||
config BOARD_ATSTK1002_CUSTOM
|
||||
bool "Non-default STK-1002 jumper settings"
|
||||
choice
|
||||
prompt "ATSTK1000 CPU daughterboard type"
|
||||
default BOARD_ATSTK1002
|
||||
|
||||
config BOARD_ATSTK1002
|
||||
bool "ATSTK1002"
|
||||
select CPU_AT32AP7000
|
||||
|
||||
config BOARD_ATSTK1003
|
||||
bool "ATSTK1003"
|
||||
select CPU_AT32AP7001
|
||||
|
||||
config BOARD_ATSTK1004
|
||||
bool "ATSTK1004"
|
||||
select CPU_AT32AP7002
|
||||
|
||||
endchoice
|
||||
|
||||
|
||||
config BOARD_ATSTK100X_CUSTOM
|
||||
bool "Non-default STK1002/STK1003/STK1004 jumper settings"
|
||||
help
|
||||
You will normally leave the jumpers on the CPU card at their
|
||||
default settings. If you need to use certain peripherals,
|
||||
you will need to change some of those jumpers.
|
||||
|
||||
if BOARD_ATSTK1002_CUSTOM
|
||||
if BOARD_ATSTK100X_CUSTOM
|
||||
|
||||
config BOARD_ATSTK1002_SW1_CUSTOM
|
||||
config BOARD_ATSTK100X_SW1_CUSTOM
|
||||
bool "SW1: use SSC1 (not SPI0)"
|
||||
help
|
||||
This also prevents using the external DAC as an audio interface,
|
||||
and means you can't initialize the on-board QVGA display.
|
||||
|
||||
config BOARD_ATSTK1002_SW2_CUSTOM
|
||||
config BOARD_ATSTK100X_SW2_CUSTOM
|
||||
bool "SW2: use IRDA or TIMER0 (not UART-A, MMC/SD, and PS2-A)"
|
||||
help
|
||||
If you change this you'll want an updated boot loader putting
|
||||
the console on UART-C not UART-A.
|
||||
|
||||
config BOARD_ATSTK1002_SW3_CUSTOM
|
||||
config BOARD_ATSTK100X_SW3_CUSTOM
|
||||
bool "SW3: use TIMER1 (not SSC0 and GCLK)"
|
||||
help
|
||||
This also prevents using the external DAC as an audio interface.
|
||||
|
||||
config BOARD_ATSTK1002_SW4_CUSTOM
|
||||
config BOARD_ATSTK100X_SW4_CUSTOM
|
||||
bool "SW4: use ISI/Camera (not GPIOs, SPI1, and PS2-B)"
|
||||
help
|
||||
To use the camera interface you'll need a custom card (on the
|
||||
@@ -36,27 +55,29 @@ config BOARD_ATSTK1002_SW4_CUSTOM
|
||||
|
||||
config BOARD_ATSTK1002_SW5_CUSTOM
|
||||
bool "SW5: use MACB1 (not LCDC)"
|
||||
depends on BOARD_ATSTK1002
|
||||
|
||||
config BOARD_ATSTK1002_SW6_CUSTOM
|
||||
bool "SW6: more GPIOs (not MACB0)"
|
||||
depends on BOARD_ATSTK1002
|
||||
|
||||
endif # custom
|
||||
|
||||
config BOARD_ATSTK1002_SPI1
|
||||
config BOARD_ATSTK100X_SPI1
|
||||
bool "Configure SPI1 controller"
|
||||
depends on !BOARD_ATSTK1002_SW4_CUSTOM
|
||||
depends on !BOARD_ATSTK100X_SW4_CUSTOM
|
||||
help
|
||||
All the signals for the second SPI controller are available on
|
||||
GPIO lines and accessed through the J1 jumper block. Say "y"
|
||||
here to configure that SPI controller.
|
||||
|
||||
config BOARD_ATSTK1002_J2_LED
|
||||
config BOARD_ATSTK1000_J2_LED
|
||||
bool
|
||||
default BOARD_ATSTK1002_J2_LED8 || BOARD_ATSTK1002_J2_RGB
|
||||
default BOARD_ATSTK1000_J2_LED8 || BOARD_ATSTK1000_J2_RGB
|
||||
|
||||
choice
|
||||
prompt "LEDs connected to J2:"
|
||||
depends on LEDS_GPIO && !BOARD_ATSTK1002_SW4_CUSTOM
|
||||
depends on LEDS_GPIO && !BOARD_ATSTK100X_SW4_CUSTOM
|
||||
optional
|
||||
help
|
||||
Select this if you have jumpered the J2 jumper block to the
|
||||
@@ -64,16 +85,21 @@ choice
|
||||
IDC cable. A default "heartbeat" trigger is provided, but
|
||||
you can of course override this.
|
||||
|
||||
config BOARD_ATSTK1002_J2_LED8
|
||||
config BOARD_ATSTK1000_J2_LED8
|
||||
bool "LED0..LED7"
|
||||
help
|
||||
Select this if J2 is jumpered to LED0..LED7 amber leds.
|
||||
|
||||
config BOARD_ATSTK1002_J2_RGB
|
||||
config BOARD_ATSTK1000_J2_RGB
|
||||
bool "RGB leds"
|
||||
help
|
||||
Select this if J2 is jumpered to the RGB leds.
|
||||
|
||||
endchoice
|
||||
|
||||
endif # stk 1002
|
||||
config BOARD_ATSTK1000_EXTDAC
|
||||
bool
|
||||
depends on !BOARD_ATSTK100X_SW1_CUSTOM && !BOARD_ATSTK100X_SW3_CUSTOM
|
||||
default y
|
||||
|
||||
endif # stk 1000
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
obj-y += setup.o flash.o
|
||||
obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o
|
||||
obj-$(CONFIG_BOARD_ATSTK1003) += atstk1003.o
|
||||
obj-$(CONFIG_BOARD_ATSTK1004) += atstk1004.o
|
||||
|
||||
@@ -12,4 +12,6 @@
|
||||
|
||||
extern struct atmel_lcdfb_info atstk1000_lcdc_data;
|
||||
|
||||
void atstk1000_setup_j2_leds(void);
|
||||
|
||||
#endif /* __ARCH_AVR32_BOARDS_ATSTK1000_ATSTK1000_H */
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
@@ -22,7 +21,7 @@
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/arch/at32ap7000.h>
|
||||
#include <asm/arch/at32ap700x.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/init.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
@@ -49,18 +48,16 @@ static struct eth_platform_data __initdata eth_data[2] = {
|
||||
},
|
||||
};
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static struct at73c213_board_info at73c213_data = {
|
||||
.ssc_id = 0,
|
||||
.shortname = "AVR32 STK1000 external DAC",
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
static struct spi_board_info spi0_board_info[] __initdata = {
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
{
|
||||
/* AT73C213 */
|
||||
.modalias = "at73c213",
|
||||
@@ -80,7 +77,7 @@ static struct spi_board_info spi0_board_info[] __initdata = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_SPI1
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
static struct spi_board_info spi1_board_info[] __initdata = { {
|
||||
/* patch in custom entries here */
|
||||
} };
|
||||
@@ -141,68 +138,8 @@ static void __init set_hw_addr(struct platform_device *pdev)
|
||||
clk_put(pclk);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_J2_LED
|
||||
|
||||
static struct gpio_led stk_j2_led[] = {
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_J2_LED8
|
||||
#define LEDSTRING "J2 jumpered to LED8"
|
||||
{ .name = "led0:amber", .gpio = GPIO_PIN_PB( 8), },
|
||||
{ .name = "led1:amber", .gpio = GPIO_PIN_PB( 9), },
|
||||
{ .name = "led2:amber", .gpio = GPIO_PIN_PB(10), },
|
||||
{ .name = "led3:amber", .gpio = GPIO_PIN_PB(13), },
|
||||
{ .name = "led4:amber", .gpio = GPIO_PIN_PB(14), },
|
||||
{ .name = "led5:amber", .gpio = GPIO_PIN_PB(15), },
|
||||
{ .name = "led6:amber", .gpio = GPIO_PIN_PB(16), },
|
||||
{ .name = "led7:amber", .gpio = GPIO_PIN_PB(30),
|
||||
.default_trigger = "heartbeat", },
|
||||
#else /* RGB */
|
||||
#define LEDSTRING "J2 jumpered to RGB LEDs"
|
||||
{ .name = "r1:red", .gpio = GPIO_PIN_PB( 8), },
|
||||
{ .name = "g1:green", .gpio = GPIO_PIN_PB(10), },
|
||||
{ .name = "b1:blue", .gpio = GPIO_PIN_PB(14), },
|
||||
|
||||
{ .name = "r2:red", .gpio = GPIO_PIN_PB( 9),
|
||||
.default_trigger = "heartbeat", },
|
||||
{ .name = "g2:green", .gpio = GPIO_PIN_PB(13), },
|
||||
{ .name = "b2:blue", .gpio = GPIO_PIN_PB(15),
|
||||
.default_trigger = "heartbeat", },
|
||||
/* PB16, PB30 unused */
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data stk_j2_led_data = {
|
||||
.num_leds = ARRAY_SIZE(stk_j2_led),
|
||||
.leds = stk_j2_led,
|
||||
};
|
||||
|
||||
static struct platform_device stk_j2_led_dev = {
|
||||
.name = "leds-gpio",
|
||||
.id = 2, /* gpio block J2 */
|
||||
.dev = {
|
||||
.platform_data = &stk_j2_led_data,
|
||||
},
|
||||
};
|
||||
|
||||
static void setup_j2_leds(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(stk_j2_led); i++)
|
||||
at32_select_gpio(stk_j2_led[i].gpio, AT32_GPIOF_OUTPUT);
|
||||
|
||||
printk("STK1002: " LEDSTRING "\n");
|
||||
platform_device_register(&stk_j2_led_dev);
|
||||
}
|
||||
|
||||
#else
|
||||
static void setup_j2_leds(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
|
||||
static void __init at73c213_set_clk(struct at73c213_board_info *info)
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static void __init atstk1002_setup_extdac(void)
|
||||
{
|
||||
struct clk *gclk;
|
||||
struct clk *pll;
|
||||
@@ -220,7 +157,7 @@ static void __init at73c213_set_clk(struct at73c213_board_info *info)
|
||||
}
|
||||
|
||||
at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
|
||||
info->dac_clk = gclk;
|
||||
at73c213_data.dac_clk = gclk;
|
||||
|
||||
err_set_clk:
|
||||
clk_put(pll);
|
||||
@@ -229,12 +166,16 @@ err_pll:
|
||||
err_gclk:
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
static void __init atstk1002_setup_extdac(void)
|
||||
{
|
||||
|
||||
}
|
||||
#endif /* CONFIG_BOARD_ATSTK1000_EXTDAC */
|
||||
|
||||
void __init setup_board(void)
|
||||
{
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */
|
||||
#else
|
||||
at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */
|
||||
@@ -271,7 +212,7 @@ static int __init atstk1002_init(void)
|
||||
|
||||
at32_add_system_devices();
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_add_device_usart(1);
|
||||
#else
|
||||
at32_add_device_usart(0);
|
||||
@@ -281,10 +222,10 @@ static int __init atstk1002_init(void)
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM
|
||||
set_hw_addr(at32_add_device_eth(0, ð_data[0]));
|
||||
#endif
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
|
||||
#endif
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_SPI1
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
|
||||
#endif
|
||||
#ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM
|
||||
@@ -294,17 +235,12 @@ static int __init atstk1002_init(void)
|
||||
fbmem_start, fbmem_size);
|
||||
#endif
|
||||
at32_add_device_usba(0, NULL);
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
|
||||
at32_add_device_ssc(0, ATMEL_SSC_TX);
|
||||
#endif
|
||||
|
||||
setup_j2_leds();
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
|
||||
at73c213_set_clk(&at73c213_data);
|
||||
#endif
|
||||
#endif
|
||||
atstk1000_setup_j2_leds();
|
||||
atstk1002_setup_extdac();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* ATSTK1003 daughterboard-specific init code
|
||||
*
|
||||
* Copyright (C) 2007 Atmel Corporation
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/spi/at73c213.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <asm/arch/at32ap700x.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/init.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
|
||||
#include "atstk1000.h"
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static struct at73c213_board_info at73c213_data = {
|
||||
.ssc_id = 0,
|
||||
.shortname = "AVR32 STK1000 external DAC",
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
static struct spi_board_info spi0_board_info[] __initdata = {
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
{
|
||||
/* AT73C213 */
|
||||
.modalias = "at73c213",
|
||||
.max_speed_hz = 200000,
|
||||
.chip_select = 0,
|
||||
.mode = SPI_MODE_1,
|
||||
.platform_data = &at73c213_data,
|
||||
},
|
||||
#endif
|
||||
/*
|
||||
* We can control the LTV350QV LCD panel, but it isn't much
|
||||
* point since we don't have an LCD controller...
|
||||
*/
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
static struct spi_board_info spi1_board_info[] __initdata = { {
|
||||
/* patch in custom entries here */
|
||||
} };
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static void __init atstk1003_setup_extdac(void)
|
||||
{
|
||||
struct clk *gclk;
|
||||
struct clk *pll;
|
||||
|
||||
gclk = clk_get(NULL, "gclk0");
|
||||
if (IS_ERR(gclk))
|
||||
goto err_gclk;
|
||||
pll = clk_get(NULL, "pll0");
|
||||
if (IS_ERR(pll))
|
||||
goto err_pll;
|
||||
|
||||
if (clk_set_parent(gclk, pll)) {
|
||||
pr_debug("STK1000: failed to set pll0 as parent for DAC clock\n");
|
||||
goto err_set_clk;
|
||||
}
|
||||
|
||||
at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
|
||||
at73c213_data.dac_clk = gclk;
|
||||
|
||||
err_set_clk:
|
||||
clk_put(pll);
|
||||
err_pll:
|
||||
clk_put(gclk);
|
||||
err_gclk:
|
||||
return;
|
||||
}
|
||||
#else
|
||||
static void __init atstk1003_setup_extdac(void)
|
||||
{
|
||||
|
||||
}
|
||||
#endif /* CONFIG_BOARD_ATSTK1000_EXTDAC */
|
||||
|
||||
void __init setup_board(void)
|
||||
{
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */
|
||||
#else
|
||||
at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */
|
||||
#endif
|
||||
/* USART 2/unused: expansion connector */
|
||||
at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */
|
||||
|
||||
at32_setup_serial_console(0);
|
||||
}
|
||||
|
||||
static int __init atstk1003_init(void)
|
||||
{
|
||||
/*
|
||||
* ATSTK1000 uses 32-bit SDRAM interface. Reserve the
|
||||
* SDRAM-specific pins so that nobody messes with them.
|
||||
*/
|
||||
at32_reserve_pin(GPIO_PIN_PE(0)); /* DATA[16] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(1)); /* DATA[17] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(2)); /* DATA[18] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(3)); /* DATA[19] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(4)); /* DATA[20] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(5)); /* DATA[21] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(6)); /* DATA[22] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(7)); /* DATA[23] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(8)); /* DATA[24] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(9)); /* DATA[25] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(10)); /* DATA[26] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(11)); /* DATA[27] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(12)); /* DATA[28] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(13)); /* DATA[29] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(14)); /* DATA[30] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(15)); /* DATA[31] */
|
||||
at32_reserve_pin(GPIO_PIN_PE(26)); /* SDCS */
|
||||
|
||||
at32_add_system_devices();
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_add_device_usart(1);
|
||||
#else
|
||||
at32_add_device_usart(0);
|
||||
#endif
|
||||
at32_add_device_usart(2);
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
|
||||
#endif
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
|
||||
#endif
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_add_device_mci(0);
|
||||
#endif
|
||||
at32_add_device_usba(0, NULL);
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
|
||||
at32_add_device_ssc(0, ATMEL_SSC_TX);
|
||||
#endif
|
||||
|
||||
atstk1000_setup_j2_leds();
|
||||
atstk1003_setup_extdac();
|
||||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(atstk1003_init);
|
||||
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
* ATSTK1003 daughterboard-specific init code
|
||||
*
|
||||
* Copyright (C) 2007 Atmel Corporation
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/spi/at73c213.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <asm/arch/at32ap700x.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/init.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
|
||||
#include "atstk1000.h"
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static struct at73c213_board_info at73c213_data = {
|
||||
.ssc_id = 0,
|
||||
.shortname = "AVR32 STK1000 external DAC",
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
static struct spi_board_info spi0_board_info[] __initdata = {
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
{
|
||||
/* AT73C213 */
|
||||
.modalias = "at73c213",
|
||||
.max_speed_hz = 200000,
|
||||
.chip_select = 0,
|
||||
.mode = SPI_MODE_1,
|
||||
.platform_data = &at73c213_data,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
/* QVGA display */
|
||||
.modalias = "ltv350qv",
|
||||
.max_speed_hz = 16000000,
|
||||
.chip_select = 1,
|
||||
.mode = SPI_MODE_3,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
static struct spi_board_info spi1_board_info[] __initdata = { {
|
||||
/* patch in custom entries here */
|
||||
} };
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_EXTDAC
|
||||
static void __init atstk1004_setup_extdac(void)
|
||||
{
|
||||
struct clk *gclk;
|
||||
struct clk *pll;
|
||||
|
||||
gclk = clk_get(NULL, "gclk0");
|
||||
if (IS_ERR(gclk))
|
||||
goto err_gclk;
|
||||
pll = clk_get(NULL, "pll0");
|
||||
if (IS_ERR(pll))
|
||||
goto err_pll;
|
||||
|
||||
if (clk_set_parent(gclk, pll)) {
|
||||
pr_debug("STK1000: failed to set pll0 as parent for DAC clock\n");
|
||||
goto err_set_clk;
|
||||
}
|
||||
|
||||
at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
|
||||
at73c213_data.dac_clk = gclk;
|
||||
|
||||
err_set_clk:
|
||||
clk_put(pll);
|
||||
err_pll:
|
||||
clk_put(gclk);
|
||||
err_gclk:
|
||||
return;
|
||||
}
|
||||
#else
|
||||
static void __init atstk1004_setup_extdac(void)
|
||||
{
|
||||
|
||||
}
|
||||
#endif /* CONFIG_BOARD_ATSTK1000_EXTDAC */
|
||||
|
||||
void __init setup_board(void)
|
||||
{
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */
|
||||
#else
|
||||
at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */
|
||||
#endif
|
||||
/* USART 2/unused: expansion connector */
|
||||
at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */
|
||||
|
||||
at32_setup_serial_console(0);
|
||||
}
|
||||
|
||||
static int __init atstk1004_init(void)
|
||||
{
|
||||
at32_add_system_devices();
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_add_device_usart(1);
|
||||
#else
|
||||
at32_add_device_usart(0);
|
||||
#endif
|
||||
at32_add_device_usart(2);
|
||||
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW1_CUSTOM
|
||||
at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
|
||||
#endif
|
||||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
|
||||
#endif
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
|
||||
at32_add_device_mci(0);
|
||||
#endif
|
||||
at32_add_device_lcdc(0, &atstk1000_lcdc_data,
|
||||
fbmem_start, fbmem_size);
|
||||
at32_add_device_usba(0, NULL);
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
|
||||
at32_add_device_ssc(0, ATMEL_SSC_TX);
|
||||
#endif
|
||||
|
||||
atstk1000_setup_j2_leds();
|
||||
atstk1004_setup_extdac();
|
||||
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(atstk1004_init);
|
||||
@@ -10,13 +10,17 @@
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <asm/arch/at32ap700x.h>
|
||||
#include <asm/arch/board.h>
|
||||
#include <asm/arch/portmux.h>
|
||||
|
||||
#include "atstk1000.h"
|
||||
|
||||
@@ -61,3 +65,63 @@ struct atmel_lcdfb_info __initdata atstk1000_lcdc_data = {
|
||||
.default_monspecs = &atstk1000_default_monspecs,
|
||||
.guard_time = 2,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_J2_LED
|
||||
#include <linux/leds.h>
|
||||
|
||||
static struct gpio_led stk1000_j2_led[] = {
|
||||
#ifdef CONFIG_BOARD_ATSTK1000_J2_LED8
|
||||
#define LEDSTRING "J2 jumpered to LED8"
|
||||
{ .name = "led0:amber", .gpio = GPIO_PIN_PB( 8), },
|
||||
{ .name = "led1:amber", .gpio = GPIO_PIN_PB( 9), },
|
||||
{ .name = "led2:amber", .gpio = GPIO_PIN_PB(10), },
|
||||
{ .name = "led3:amber", .gpio = GPIO_PIN_PB(13), },
|
||||
{ .name = "led4:amber", .gpio = GPIO_PIN_PB(14), },
|
||||
{ .name = "led5:amber", .gpio = GPIO_PIN_PB(15), },
|
||||
{ .name = "led6:amber", .gpio = GPIO_PIN_PB(16), },
|
||||
{ .name = "led7:amber", .gpio = GPIO_PIN_PB(30),
|
||||
.default_trigger = "heartbeat", },
|
||||
#else /* RGB */
|
||||
#define LEDSTRING "J2 jumpered to RGB LEDs"
|
||||
{ .name = "r1:red", .gpio = GPIO_PIN_PB( 8), },
|
||||
{ .name = "g1:green", .gpio = GPIO_PIN_PB(10), },
|
||||
{ .name = "b1:blue", .gpio = GPIO_PIN_PB(14), },
|
||||
|
||||
{ .name = "r2:red", .gpio = GPIO_PIN_PB( 9),
|
||||
.default_trigger = "heartbeat", },
|
||||
{ .name = "g2:green", .gpio = GPIO_PIN_PB(13), },
|
||||
{ .name = "b2:blue", .gpio = GPIO_PIN_PB(15),
|
||||
.default_trigger = "heartbeat", },
|
||||
/* PB16, PB30 unused */
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data stk1000_j2_led_data = {
|
||||
.num_leds = ARRAY_SIZE(stk1000_j2_led),
|
||||
.leds = stk1000_j2_led,
|
||||
};
|
||||
|
||||
static struct platform_device stk1000_j2_led_dev = {
|
||||
.name = "leds-gpio",
|
||||
.id = 2, /* gpio block J2 */
|
||||
.dev = {
|
||||
.platform_data = &stk1000_j2_led_data,
|
||||
},
|
||||
};
|
||||
|
||||
void __init atstk1000_setup_j2_leds(void)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(stk1000_j2_led); i++)
|
||||
at32_select_gpio(stk1000_j2_led[i].gpio, AT32_GPIOF_OUTPUT);
|
||||
|
||||
printk("STK1000: " LEDSTRING "\n");
|
||||
platform_device_register(&stk1000_j2_led_dev);
|
||||
}
|
||||
#else /* CONFIG_BOARD_ATSTK1000_J2_LED */
|
||||
void __init atstk1000_setup_j2_leds(void)
|
||||
{
|
||||
|
||||
}
|
||||
#endif /* CONFIG_BOARD_ATSTK1000_J2_LED */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -6,9 +6,10 @@ extra-y := head.o vmlinux.lds
|
||||
|
||||
obj-$(CONFIG_SUBARCH_AVR32B) += entry-avr32b.o
|
||||
obj-y += syscall_table.o syscall-stubs.o irq.o
|
||||
obj-y += setup.o traps.o semaphore.o ptrace.o
|
||||
obj-y += setup.o traps.o semaphore.o ocd.o ptrace.o
|
||||
obj-y += signal.o sys_avr32.o process.o time.o
|
||||
obj-y += init_task.o switch_to.o cpu.o
|
||||
obj-$(CONFIG_MODULES) += module.o avr32_ksyms.o
|
||||
obj-$(CONFIG_KPROBES) += kprobes.o
|
||||
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||
obj-$(CONFIG_NMI_DEBUGGING) += nmi_debug.o
|
||||
|
||||
+69
-27
@@ -13,6 +13,7 @@
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/param.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sysreg.h>
|
||||
@@ -187,9 +188,20 @@ static int __init topology_init(void)
|
||||
|
||||
subsys_initcall(topology_init);
|
||||
|
||||
struct chip_id_map {
|
||||
u16 mid;
|
||||
u16 pn;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static const struct chip_id_map chip_names[] = {
|
||||
{ .mid = 0x1f, .pn = 0x1e82, .name = "AT32AP700x" },
|
||||
};
|
||||
#define NR_CHIP_NAMES ARRAY_SIZE(chip_names)
|
||||
|
||||
static const char *cpu_names[] = {
|
||||
"Morgan",
|
||||
"AP7000",
|
||||
"AP7",
|
||||
};
|
||||
#define NR_CPU_NAMES ARRAY_SIZE(cpu_names)
|
||||
|
||||
@@ -206,12 +218,32 @@ static const char *mmu_types[] = {
|
||||
"MPU"
|
||||
};
|
||||
|
||||
static const char *cpu_feature_flags[] = {
|
||||
"rmw", "dsp", "simd", "ocd", "perfctr", "java", "fpu",
|
||||
};
|
||||
|
||||
static const char *get_chip_name(struct avr32_cpuinfo *cpu)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int mid = avr32_get_manufacturer_id(cpu);
|
||||
unsigned int pn = avr32_get_product_number(cpu);
|
||||
|
||||
for (i = 0; i < NR_CHIP_NAMES; i++) {
|
||||
if (chip_names[i].mid == mid && chip_names[i].pn == pn)
|
||||
return chip_names[i].name;
|
||||
}
|
||||
|
||||
return "(unknown)";
|
||||
}
|
||||
|
||||
void __init setup_processor(void)
|
||||
{
|
||||
unsigned long config0, config1;
|
||||
unsigned long features;
|
||||
unsigned cpu_id, cpu_rev, arch_id, arch_rev, mmu_type;
|
||||
unsigned device_id;
|
||||
unsigned tmp;
|
||||
unsigned i;
|
||||
|
||||
config0 = sysreg_read(CONFIG0);
|
||||
config1 = sysreg_read(CONFIG1);
|
||||
@@ -221,11 +253,14 @@ void __init setup_processor(void)
|
||||
arch_rev = SYSREG_BFEXT(AR, config0);
|
||||
mmu_type = SYSREG_BFEXT(MMUT, config0);
|
||||
|
||||
device_id = ocd_read(DID);
|
||||
|
||||
boot_cpu_data.arch_type = arch_id;
|
||||
boot_cpu_data.cpu_type = cpu_id;
|
||||
boot_cpu_data.arch_revision = arch_rev;
|
||||
boot_cpu_data.cpu_revision = cpu_rev;
|
||||
boot_cpu_data.tlb_config = mmu_type;
|
||||
boot_cpu_data.device_id = device_id;
|
||||
|
||||
tmp = SYSREG_BFEXT(ILSZ, config1);
|
||||
if (tmp) {
|
||||
@@ -247,41 +282,34 @@ void __init setup_processor(void)
|
||||
return;
|
||||
}
|
||||
|
||||
printk ("CPU: %s [%02x] revision %d (%s revision %d)\n",
|
||||
printk ("CPU: %s chip revision %c\n", get_chip_name(&boot_cpu_data),
|
||||
avr32_get_chip_revision(&boot_cpu_data) + 'A');
|
||||
printk ("CPU: %s [%02x] core revision %d (%s arch revision %d)\n",
|
||||
cpu_names[cpu_id], cpu_id, cpu_rev,
|
||||
arch_names[arch_id], arch_rev);
|
||||
printk ("CPU: MMU configuration: %s\n", mmu_types[mmu_type]);
|
||||
|
||||
printk ("CPU: features:");
|
||||
features = 0;
|
||||
if (config0 & SYSREG_BIT(CONFIG0_R)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_R))
|
||||
features |= AVR32_FEATURE_RMW;
|
||||
printk(" rmw");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_D)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_D))
|
||||
features |= AVR32_FEATURE_DSP;
|
||||
printk(" dsp");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_S)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_S))
|
||||
features |= AVR32_FEATURE_SIMD;
|
||||
printk(" simd");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_O)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_O))
|
||||
features |= AVR32_FEATURE_OCD;
|
||||
printk(" ocd");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_P)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_P))
|
||||
features |= AVR32_FEATURE_PCTR;
|
||||
printk(" perfctr");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_J)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_J))
|
||||
features |= AVR32_FEATURE_JAVA;
|
||||
printk(" java");
|
||||
}
|
||||
if (config0 & SYSREG_BIT(CONFIG0_F)) {
|
||||
if (config0 & SYSREG_BIT(CONFIG0_F))
|
||||
features |= AVR32_FEATURE_FPU;
|
||||
printk(" fpu");
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(cpu_feature_flags); i++)
|
||||
if (features & (1 << i))
|
||||
printk(" %s", cpu_feature_flags[i]);
|
||||
|
||||
printk("\n");
|
||||
boot_cpu_data.features = features;
|
||||
}
|
||||
@@ -291,6 +319,8 @@ static int c_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned int icache_size, dcache_size;
|
||||
unsigned int cpu = smp_processor_id();
|
||||
unsigned int freq;
|
||||
unsigned int i;
|
||||
|
||||
icache_size = boot_cpu_data.icache.ways *
|
||||
boot_cpu_data.icache.sets *
|
||||
@@ -301,15 +331,21 @@ static int c_show(struct seq_file *m, void *v)
|
||||
|
||||
seq_printf(m, "processor\t: %d\n", cpu);
|
||||
|
||||
seq_printf(m, "chip type\t: %s revision %c\n",
|
||||
get_chip_name(&boot_cpu_data),
|
||||
avr32_get_chip_revision(&boot_cpu_data) + 'A');
|
||||
if (boot_cpu_data.arch_type < NR_ARCH_NAMES)
|
||||
seq_printf(m, "cpu family\t: %s revision %d\n",
|
||||
seq_printf(m, "cpu arch\t: %s revision %d\n",
|
||||
arch_names[boot_cpu_data.arch_type],
|
||||
boot_cpu_data.arch_revision);
|
||||
if (boot_cpu_data.cpu_type < NR_CPU_NAMES)
|
||||
seq_printf(m, "cpu type\t: %s revision %d\n",
|
||||
seq_printf(m, "cpu core\t: %s revision %d\n",
|
||||
cpu_names[boot_cpu_data.cpu_type],
|
||||
boot_cpu_data.cpu_revision);
|
||||
|
||||
freq = (clk_get_rate(boot_cpu_data.clk) + 500) / 1000;
|
||||
seq_printf(m, "cpu MHz\t\t: %u.%03u\n", freq / 1000, freq % 1000);
|
||||
|
||||
seq_printf(m, "i-cache\t\t: %dK (%u ways x %u sets x %u)\n",
|
||||
icache_size >> 10,
|
||||
boot_cpu_data.icache.ways,
|
||||
@@ -320,7 +356,13 @@ static int c_show(struct seq_file *m, void *v)
|
||||
boot_cpu_data.dcache.ways,
|
||||
boot_cpu_data.dcache.sets,
|
||||
boot_cpu_data.dcache.linesz);
|
||||
seq_printf(m, "bogomips\t: %lu.%02lu\n",
|
||||
|
||||
seq_printf(m, "features\t:");
|
||||
for (i = 0; i < ARRAY_SIZE(cpu_feature_flags); i++)
|
||||
if (boot_cpu_data.features & (1 << i))
|
||||
seq_printf(m, " %s", cpu_feature_flags[i]);
|
||||
|
||||
seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
|
||||
boot_cpu_data.loops_per_jiffy / (500000/HZ),
|
||||
(boot_cpu_data.loops_per_jiffy / (5000/HZ)) % 100);
|
||||
|
||||
@@ -343,7 +385,7 @@ static void c_stop(struct seq_file *m, void *v)
|
||||
|
||||
}
|
||||
|
||||
struct seq_operations cpuinfo_op = {
|
||||
const struct seq_operations cpuinfo_op = {
|
||||
.start = c_start,
|
||||
.next = c_next,
|
||||
.stop = c_stop,
|
||||
|
||||
@@ -25,6 +25,17 @@ void ack_bad_irq(unsigned int irq)
|
||||
printk("unexpected IRQ %u\n", irq);
|
||||
}
|
||||
|
||||
/* May be overridden by platform code */
|
||||
int __weak nmi_enable(void)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
void __weak nmi_disable(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
int show_interrupts(struct seq_file *p, void *v)
|
||||
{
|
||||
|
||||
@@ -48,6 +48,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
|
||||
void __kprobes arch_arm_kprobe(struct kprobe *p)
|
||||
{
|
||||
pr_debug("arming kprobe at %p\n", p->addr);
|
||||
ocd_enable(NULL);
|
||||
*p->addr = BREAKPOINT_INSTRUCTION;
|
||||
flush_icache_range((unsigned long)p->addr,
|
||||
(unsigned long)p->addr + sizeof(kprobe_opcode_t));
|
||||
@@ -56,6 +57,7 @@ void __kprobes arch_arm_kprobe(struct kprobe *p)
|
||||
void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
||||
{
|
||||
pr_debug("disarming kprobe at %p\n", p->addr);
|
||||
ocd_disable(NULL);
|
||||
*p->addr = p->opcode;
|
||||
flush_icache_range((unsigned long)p->addr,
|
||||
(unsigned long)p->addr + sizeof(kprobe_opcode_t));
|
||||
@@ -260,9 +262,6 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
|
||||
|
||||
int __init arch_init_kprobes(void)
|
||||
{
|
||||
printk("KPROBES: Enabling monitor mode (MM|DBE)...\n");
|
||||
ocd_write(DC, (1 << OCD_DC_MM_BIT) | (1 << OCD_DC_DBE_BIT));
|
||||
|
||||
/* TODO: Register kretprobe trampoline */
|
||||
return 0;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user