Commit ed0795aa authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin: (37 commits)
  Blackfin: use new common PERCPU_INPUT define
  MAINTAINERS: Fix Analog Devices mailinglist address
  Blackfin: boards: update ASoC resources after machine driver overhaul
  Blackfin: work around anomaly 05000480
  Blackfin: fix addr type with bfin_write_{or,and} helpers
  Blackfin: convert /proc/sram to seq_file
  Blackfin: switch /proc/gpio to seq_file
  Blackfin: fix indentation with bfin_read() helper
  Blackfin: convert old cpumask API to new one
  Blackfin: don't touch task->cpus_allowed directly
  Blackfin: don't touch cpu_possible_map and cpu_present_map directly
  Blackfin: bf548-ezkit/bf561-ezkit: update nor flash layout
  Blackfin: initial perf_event support
  Blackfin: update anomaly lists to latest public info
  Blackfin: use on-chip reset func with newer parts
  Blackfin: bf533-stamp/bf537-stamp: drop ad1980 from defconfigs
  Blackfin: optimize MMR reads during startup a bit
  Blackfin: bf537: demux port H mask A and emac rx ints
  Blackfin: bf537: fix excessive gpio int demuxing
  Blackfin: bf54x: drop unused pm gpio handling
  ...
parents 4e8a780e d6cb2e3a
...@@ -287,35 +287,35 @@ F: sound/pci/ad1889.* ...@@ -287,35 +287,35 @@ F: sound/pci/ad1889.*
AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD5254 W: http://wiki.analog.com/AD5254
S: Supported S: Supported
F: drivers/misc/ad525x_dpot.c F: drivers/misc/ad525x_dpot.c
AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD5398 W: http://wiki.analog.com/AD5398
S: Supported S: Supported
F: drivers/regulator/ad5398.c F: drivers/regulator/ad5398.c
AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7142 W: http://wiki.analog.com/AD7142
S: Supported S: Supported
F: drivers/input/misc/ad714x.c F: drivers/input/misc/ad714x.c
AD7877 TOUCHSCREEN DRIVER AD7877 TOUCHSCREEN DRIVER
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7877 W: http://wiki.analog.com/AD7877
S: Supported S: Supported
F: drivers/input/touchscreen/ad7877.c F: drivers/input/touchscreen/ad7877.c
AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7879 W: http://wiki.analog.com/AD7879
S: Supported S: Supported
F: drivers/input/touchscreen/ad7879.c F: drivers/input/touchscreen/ad7879.c
...@@ -341,7 +341,7 @@ F: drivers/net/wireless/adm8211.* ...@@ -341,7 +341,7 @@ F: drivers/net/wireless/adm8211.*
ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP5520 W: http://wiki.analog.com/ADP5520
S: Supported S: Supported
F: drivers/mfd/adp5520.c F: drivers/mfd/adp5520.c
...@@ -352,7 +352,7 @@ F: drivers/input/keyboard/adp5520-keys.c ...@@ -352,7 +352,7 @@ F: drivers/input/keyboard/adp5520-keys.c
ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP5588 W: http://wiki.analog.com/ADP5588
S: Supported S: Supported
F: drivers/input/keyboard/adp5588-keys.c F: drivers/input/keyboard/adp5588-keys.c
...@@ -360,7 +360,7 @@ F: drivers/gpio/adp5588-gpio.c ...@@ -360,7 +360,7 @@ F: drivers/gpio/adp5588-gpio.c
ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP8860 W: http://wiki.analog.com/ADP8860
S: Supported S: Supported
F: drivers/video/backlight/adp8860_bl.c F: drivers/video/backlight/adp8860_bl.c
...@@ -387,7 +387,7 @@ F: drivers/hwmon/adt7475.c ...@@ -387,7 +387,7 @@ F: drivers/hwmon/adt7475.c
ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADXL345 W: http://wiki.analog.com/ADXL345
S: Supported S: Supported
F: drivers/input/misc/adxl34x.c F: drivers/input/misc/adxl34x.c
...@@ -526,7 +526,7 @@ S: Maintained ...@@ -526,7 +526,7 @@ S: Maintained
F: drivers/infiniband/hw/amso1100/ F: drivers/infiniband/hw/amso1100/
ANALOG DEVICES INC ASOC CODEC DRIVERS ANALOG DEVICES INC ASOC CODEC DRIVERS
L: device-driver-devel@blackfin.uclinux.org L: device-drivers-devel@blackfin.uclinux.org
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
W: http://wiki.analog.com/ W: http://wiki.analog.com/
S: Supported S: Supported
......
...@@ -24,11 +24,13 @@ config BLACKFIN ...@@ -24,11 +24,13 @@ config BLACKFIN
select HAVE_FUNCTION_TRACER select HAVE_FUNCTION_TRACER
select HAVE_FUNCTION_TRACE_MCOUNT_TEST select HAVE_FUNCTION_TRACE_MCOUNT_TEST
select HAVE_IDE select HAVE_IDE
select HAVE_IRQ_WORK
select HAVE_KERNEL_GZIP if RAMKERNEL select HAVE_KERNEL_GZIP if RAMKERNEL
select HAVE_KERNEL_BZIP2 if RAMKERNEL select HAVE_KERNEL_BZIP2 if RAMKERNEL
select HAVE_KERNEL_LZMA if RAMKERNEL select HAVE_KERNEL_LZMA if RAMKERNEL
select HAVE_KERNEL_LZO if RAMKERNEL select HAVE_KERNEL_LZO if RAMKERNEL
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_PERF_EVENTS
select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_WANT_OPTIONAL_GPIOLIB
select HAVE_GENERIC_HARDIRQS select HAVE_GENERIC_HARDIRQS
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
......
...@@ -23,7 +23,7 @@ config DEBUG_VERBOSE ...@@ -23,7 +23,7 @@ config DEBUG_VERBOSE
Most people should say N here. Most people should say N here.
config DEBUG_MMRS config DEBUG_MMRS
bool "Generate Blackfin MMR tree" tristate "Generate Blackfin MMR tree"
select DEBUG_FS select DEBUG_FS
help help
Create a tree of Blackfin MMRs via the debugfs tree. If Create a tree of Blackfin MMRs via the debugfs tree. If
......
...@@ -121,13 +121,11 @@ CONFIG_LOGO=y ...@@ -121,13 +121,11 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set # CONFIG_LOGO_LINUX_CLUT224 is not set
# CONFIG_LOGO_BLACKFIN_VGA16 is not set # CONFIG_LOGO_BLACKFIN_VGA16 is not set
CONFIG_SOUND=m CONFIG_SOUND=y
CONFIG_SND=m CONFIG_SND=y
CONFIG_SND_SOC=m CONFIG_SND_SOC=y
CONFIG_SND_BF5XX_I2S=m CONFIG_SND_BF5XX_I2S=y
CONFIG_SND_BF5XX_SOC_SSM2602=m CONFIG_SND_BF5XX_SOC_SSM2602=y
CONFIG_SND_BF5XX_AC97=m
CONFIG_SND_BF5XX_SOC_AD1980=m
CONFIG_HID_A4TECH=y CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y CONFIG_HID_BELKIN=y
......
...@@ -96,7 +96,7 @@ CONFIG_SERIAL_BFIN_UART1=y ...@@ -96,7 +96,7 @@ CONFIG_SERIAL_BFIN_UART1=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
CONFIG_I2C=y CONFIG_I2C=y
CONFIG_I2C_CHARDEV=m CONFIG_I2C_CHARDEV=m
CONFIG_I2C_BLACKFIN_TWI=m CONFIG_I2C_BLACKFIN_TWI=y
CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100 CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=100
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_SPI_BFIN=y CONFIG_SPI_BFIN=y
...@@ -115,13 +115,11 @@ CONFIG_LOGO=y ...@@ -115,13 +115,11 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set # CONFIG_LOGO_LINUX_CLUT224 is not set
# CONFIG_LOGO_BLACKFIN_VGA16 is not set # CONFIG_LOGO_BLACKFIN_VGA16 is not set
CONFIG_SOUND=m CONFIG_SOUND=y
CONFIG_SND=m CONFIG_SND=y
CONFIG_SND_SOC=m CONFIG_SND_SOC=y
CONFIG_SND_BF5XX_I2S=m CONFIG_SND_BF5XX_I2S=y
CONFIG_SND_BF5XX_SOC_SSM2602=m CONFIG_SND_BF5XX_SOC_SSM2602=y
CONFIG_SND_BF5XX_AC97=m
CONFIG_SND_BF5XX_SOC_AD1980=m
CONFIG_HID_A4TECH=y CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y CONFIG_HID_BELKIN=y
......
...@@ -99,8 +99,6 @@ CONFIG_SND_PCM_OSS=m ...@@ -99,8 +99,6 @@ CONFIG_SND_PCM_OSS=m
CONFIG_SND_SOC=m CONFIG_SND_SOC=m
CONFIG_SND_BF5XX_I2S=m CONFIG_SND_BF5XX_I2S=m
CONFIG_SND_BF5XX_SOC_AD73311=m CONFIG_SND_BF5XX_SOC_AD73311=m
CONFIG_SND_BF5XX_AC97=m
CONFIG_SND_BF5XX_SOC_AD1980=m
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_BFIN=y CONFIG_RTC_DRV_BFIN=y
......
...@@ -110,8 +110,6 @@ CONFIG_SND_PCM_OSS=m ...@@ -110,8 +110,6 @@ CONFIG_SND_PCM_OSS=m
CONFIG_SND_SOC=m CONFIG_SND_SOC=m
CONFIG_SND_BF5XX_I2S=m CONFIG_SND_BF5XX_I2S=m
CONFIG_SND_BF5XX_SOC_AD73311=m CONFIG_SND_BF5XX_SOC_AD73311=m
CONFIG_SND_BF5XX_AC97=m
CONFIG_SND_BF5XX_SOC_AD1980=m
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_BFIN=y CONFIG_RTC_DRV_BFIN=y
......
...@@ -49,16 +49,6 @@ extern void dump_bfin_trace_buffer(void); ...@@ -49,16 +49,6 @@ extern void dump_bfin_trace_buffer(void);
#define dump_bfin_trace_buffer() #define dump_bfin_trace_buffer()
#endif #endif
/* init functions only */
extern int init_arch_irq(void);
extern void init_exception_vectors(void);
extern void program_IAR(void);
extern asmlinkage void lower_to_irq14(void);
extern asmlinkage void bfin_return_from_exception(void);
extern asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs);
extern int bfin_internal_set_wake(unsigned int irq, unsigned int state);
extern void *l1_data_A_sram_alloc(size_t); extern void *l1_data_A_sram_alloc(size_t);
extern void *l1_data_B_sram_alloc(size_t); extern void *l1_data_B_sram_alloc(size_t);
extern void *l1_inst_sram_alloc(size_t); extern void *l1_inst_sram_alloc(size_t);
......
/*
* Blackfin Performance Monitor definitions
*
* Copyright 2005-2011 Analog Devices Inc.
*
* Licensed under the ADI BSD license or GPL-2 (or later).
*/
#ifndef __ASM_BFIN_PFMON_H__
#define __ASM_BFIN_PFMON_H__
/* PFCTL Masks */
#define PFMON_MASK 0xff
#define PFCEN_MASK 0x3
#define PFCEN_DISABLE 0x0
#define PFCEN_ENABLE_USER 0x1
#define PFCEN_ENABLE_SUPV 0x2
#define PFCEN_ENABLE_ALL (PFCEN_ENABLE_USER | PFCEN_ENABLE_SUPV)
#define PFPWR_P 0
#define PEMUSW0_P 2
#define PFCEN0_P 3
#define PFMON0_P 5
#define PEMUSW1_P 13
#define PFCEN1_P 14
#define PFMON1_P 16
#define PFCNT0_P 24
#define PFCNT1_P 25
#define PFPWR (1 << PFPWR_P)
#define PEMUSW(n, x) ((x) << ((n) ? PEMUSW1_P : PEMUSW0_P))
#define PEMUSW0 PEMUSW(0, 1)
#define PEMUSW1 PEMUSW(1, 1)
#define PFCEN(n, x) ((x) << ((n) ? PFCEN1_P : PFCEN0_P))
#define PFCEN0 PFCEN(0, PFCEN_MASK)
#define PFCEN1 PFCEN(1, PFCEN_MASK)
#define PFCNT(n, x) ((x) << ((n) ? PFCNT1_P : PFCNT0_P))
#define PFCNT0 PFCNT(0, 1)
#define PFCNT1 PFCNT(1, 1)
#define PFMON(n, x) ((x) << ((n) ? PFMON1_P : PFMON0_P))
#define PFMON0 PFMON(0, PFMON_MASK)
#define PFMON1 PFMON(1, PFMON_MASK)
#endif
...@@ -100,6 +100,10 @@ struct sport_register { ...@@ -100,6 +100,10 @@ struct sport_register {
}; };
#undef __BFP #undef __BFP
struct bfin_snd_platform_data {
const unsigned short *pin_req;
};
#define bfin_read_sport_rx32(base) \ #define bfin_read_sport_rx32(base) \
({ \ ({ \
struct sport_register *__mmrs = (void *)base; \ struct sport_register *__mmrs = (void *)base; \
......
...@@ -39,7 +39,12 @@ extern void blackfin_invalidate_entire_icache(void); ...@@ -39,7 +39,12 @@ extern void blackfin_invalidate_entire_icache(void);
static inline void flush_icache_range(unsigned start, unsigned end) static inline void flush_icache_range(unsigned start, unsigned end)
{ {
#if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK) #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK)
if (end <= physical_mem_end)
blackfin_dcache_flush_range(start, end);
#endif
#if defined(CONFIG_BFIN_L2_WRITEBACK)
if (start >= L2_START && end <= L2_START + L2_LENGTH)
blackfin_dcache_flush_range(start, end); blackfin_dcache_flush_range(start, end);
#endif #endif
...@@ -52,9 +57,17 @@ static inline void flush_icache_range(unsigned start, unsigned end) ...@@ -52,9 +57,17 @@ static inline void flush_icache_range(unsigned start, unsigned end)
* the pipeline. * the pipeline.
*/ */
SSYNC(); SSYNC();
#if defined(CONFIG_BFIN_ICACHE) #if defined(CONFIG_BFIN_EXTMEM_ICACHEABLE)
if (end <= physical_mem_end) {
blackfin_icache_flush_range(start, end);
flush_icache_range_others(start, end);
}
#endif
#if defined(CONFIG_BFIN_L2_ICACHEABLE)
if (start >= L2_START && end <= L2_START + L2_LENGTH) {
blackfin_icache_flush_range(start, end); blackfin_icache_flush_range(start, end);
flush_icache_range_others(start, end); flush_icache_range_others(start, end);
}
#endif #endif
} }
......
...@@ -10,11 +10,8 @@ ...@@ -10,11 +10,8 @@
#include <linux/percpu.h> #include <linux/percpu.h>
struct task_struct;
struct blackfin_cpudata { struct blackfin_cpudata {
struct cpu cpu; struct cpu cpu;
struct task_struct *idle;
unsigned int imemctl; unsigned int imemctl;
unsigned int dmemctl; unsigned int dmemctl;
}; };
......
...@@ -69,13 +69,13 @@ do { \ ...@@ -69,13 +69,13 @@ do { \
#define bfin_write_or(addr, bits) \ #define bfin_write_or(addr, bits) \
do { \ do { \
void *__addr = (void *)(addr); \ typeof(addr) __addr = (addr); \
bfin_write(__addr, bfin_read(__addr) | (bits)); \ bfin_write(__addr, bfin_read(__addr) | (bits)); \
} while (0) } while (0)
#define bfin_write_and(addr, bits) \ #define bfin_write_and(addr, bits) \
do { \ do { \
void *__addr = (void *)(addr); \ typeof(addr) __addr = (addr); \
bfin_write(__addr, bfin_read(__addr) & (bits)); \ bfin_write(__addr, bfin_read(__addr) & (bits)); \
} while (0) } while (0)
......
...@@ -10,6 +10,16 @@ ...@@ -10,6 +10,16 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/linkage.h> #include <linux/linkage.h>
/* init functions only */
extern int __init init_arch_irq(void);
extern void init_exception_vectors(void);
extern void __init program_IAR(void);
#ifdef init_mach_irq
extern void __init init_mach_irq(void);
#else
# define init_mach_irq()
#endif
/* BASE LEVEL interrupt handler routines */ /* BASE LEVEL interrupt handler routines */
asmlinkage void evt_exception(void); asmlinkage void evt_exception(void);
asmlinkage void trap(void); asmlinkage void trap(void);
...@@ -37,4 +47,19 @@ extern void return_from_exception(void); ...@@ -37,4 +47,19 @@ extern void return_from_exception(void);
extern int bfin_request_exception(unsigned int exception, void (*handler)(void)); extern int bfin_request_exception(unsigned int exception, void (*handler)(void));
extern int bfin_free_exception(unsigned int exception, void (*handler)(void)); extern int bfin_free_exception(unsigned int exception, void (*handler)(void));
extern asmlinkage void lower_to_irq14(void);
extern asmlinkage void bfin_return_from_exception(void);
extern asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs);
extern int bfin_internal_set_wake(unsigned int irq, unsigned int state);
struct irq_data;
extern void bfin_handle_irq(unsigned irq);
extern void bfin_ack_noop(struct irq_data *);
extern void bfin_internal_mask_irq(unsigned int irq);
extern void bfin_internal_unmask_irq(unsigned int irq);
struct irq_desc;
extern void bfin_demux_mac_status_irq(unsigned int, struct irq_desc *);
extern void bfin_demux_gpio_irq(unsigned int, struct irq_desc *);
#endif #endif
...@@ -103,7 +103,11 @@ static inline void arch_kgdb_breakpoint(void) ...@@ -103,7 +103,11 @@ static inline void arch_kgdb_breakpoint(void)
asm("EXCPT 2;"); asm("EXCPT 2;");
} }
#define BREAK_INSTR_SIZE 2 #define BREAK_INSTR_SIZE 2
#define CACHE_FLUSH_IS_SAFE 1 #ifdef CONFIG_SMP
# define CACHE_FLUSH_IS_SAFE 0
#else
# define CACHE_FLUSH_IS_SAFE 1
#endif
#define HW_INST_WATCHPOINT_NUM 6 #define HW_INST_WATCHPOINT_NUM 6
#define HW_WATCHPOINT_NUM 8 #define HW_WATCHPOINT_NUM 8
#define TYPE_INST_WATCHPOINT 0 #define TYPE_INST_WATCHPOINT 0
......
...@@ -108,8 +108,6 @@ struct pt_regs { ...@@ -108,8 +108,6 @@ struct pt_regs {
extern void show_regs(struct pt_regs *); extern void show_regs(struct pt_regs *);
#define arch_has_single_step() (1) #define arch_has_single_step() (1)
extern void user_enable_single_step(struct task_struct *child);
extern void user_disable_single_step(struct task_struct *child);
/* common code demands this function */ /* common code demands this function */
#define ptrace_disable(child) user_disable_single_step(child) #define ptrace_disable(child) user_disable_single_step(child)
......
/*
* Common Blackfin IRQ definitions (i.e. the CEC)
*
* Copyright 2005-2011 Analog Devices Inc.
*
* Licensed under the GPL-2 or later
*/
#ifndef _MACH_COMMON_IRQ_H_
#define _MACH_COMMON_IRQ_H_
/*
* Core events interrupt source definitions
*
* Event Source Event Name
* Emulation EMU 0 (highest priority)
* Reset RST 1
* NMI NMI 2
* Exception EVX 3
* Reserved -- 4
* Hardware Error IVHW 5
* Core Timer IVTMR 6
* Peripherals IVG7 7
* Peripherals IVG8 8
* Peripherals IVG9 9
* Peripherals IVG10 10
* Peripherals IVG11 11
* Peripherals IVG12 12
* Peripherals IVG13 13
* Softirq IVG14 14
* System Call IVG15 15 (lowest priority)
*/
/* The ABSTRACT IRQ definitions */
#define IRQ_EMU 0 /* Emulation */
#define IRQ_RST 1 /* reset */
#define IRQ_NMI 2 /* Non Maskable */
#define IRQ_EVX 3 /* Exception */
#define IRQ_UNUSED 4 /* - unused interrupt */
#define IRQ_HWERR 5 /* Hardware Error */
#define IRQ_CORETMR 6 /* Core timer */
#define BFIN_IRQ(x) ((x) + 7)
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
#endif
...@@ -33,7 +33,10 @@ obj-$(CONFIG_EARLY_PRINTK) += shadow_console.o ...@@ -33,7 +33,10 @@ obj-$(CONFIG_EARLY_PRINTK) += shadow_console.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_DEBUG_VERBOSE) += trace.o obj-$(CONFIG_DEBUG_VERBOSE) += trace.o
obj-$(CONFIG_BFIN_PSEUDODBG_INSNS) += pseudodbg.o obj-$(CONFIG_BFIN_PSEUDODBG_INSNS) += pseudodbg.o
obj-$(CONFIG_PERF_EVENTS) += perf_event.o
# the kgdb test puts code into L2 and without linker # the kgdb test puts code into L2 and without linker
# relaxation, we need to force long calls to/from it # relaxation, we need to force long calls to/from it
CFLAGS_kgdb_test.o := -mlong-calls -O0 CFLAGS_kgdb_test.o := -mlong-calls -O0
obj-$(CONFIG_DEBUG_MMRS) += debug-mmrs.o
...@@ -36,6 +36,11 @@ static int __init blackfin_dma_init(void) ...@@ -36,6 +36,11 @@ static int __init blackfin_dma_init(void)
printk(KERN_INFO "Blackfin DMA Controller\n"); printk(KERN_INFO "Blackfin DMA Controller\n");
#if ANOMALY_05000480
bfin_write_DMAC_TC_PER(0x0111);
#endif
for (i = 0; i < MAX_DMA_CHANNELS; i++) { for (i = 0; i < MAX_DMA_CHANNELS; i++) {
atomic_set(&dma_ch[i].chan_status, 0); atomic_set(&dma_ch[i].chan_status, 0);
dma_ch[i].regs = dma_io_base_addr[i]; dma_ch[i].regs = dma_io_base_addr[i];
......
...@@ -10,10 +10,12 @@ ...@@ -10,10 +10,12 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <asm/blackfin.h> #include <asm/blackfin.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/portmux.h> #include <asm/portmux.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/irq_handler.h>
#if ANOMALY_05000311 || ANOMALY_05000323 #if ANOMALY_05000311 || ANOMALY_05000323
enum { enum {
...@@ -534,7 +536,7 @@ static const unsigned int sic_iwr_irqs[] = { ...@@ -534,7 +536,7 @@ static const unsigned int sic_iwr_irqs[] = {
#if defined(BF533_FAMILY) #if defined(BF533_FAMILY)
IRQ_PROG_INTB IRQ_PROG_INTB
#elif defined(BF537_FAMILY) #elif defined(BF537_FAMILY)
IRQ_PROG_INTB, IRQ_PORTG_INTB, IRQ_MAC_TX IRQ_PF_INTB_WATCH, IRQ_PORTG_INTB, IRQ_PH_INTB_MAC_TX
#elif defined(BF538_FAMILY) #elif defined(BF538_FAMILY)
IRQ_PORTF_INTB IRQ_PORTF_INTB
#elif defined(CONFIG_BF52x) || defined(CONFIG_BF51x) #elif defined(CONFIG_BF52x) || defined(CONFIG_BF51x)
...@@ -1203,35 +1205,43 @@ void bfin_reset_boot_spi_cs(unsigned short pin) ...@@ -1203,35 +1205,43 @@ void bfin_reset_boot_spi_cs(unsigned short pin)
} }
#if defined(CONFIG_PROC_FS) #if defined(CONFIG_PROC_FS)
static int gpio_proc_read(char *buf, char **start, off_t offset, static int gpio_proc_show(struct seq_file *m, void *v)
int len, int *unused_i, void *unused_v)
{ {
int c, irq, gpio, outlen = 0; int c, irq, gpio;
for (c = 0; c < MAX_RESOURCES; c++) { for (c = 0; c < MAX_RESOURCES; c++) {
irq = is_reserved(gpio_irq, c, 1); irq = is_reserved(gpio_irq, c, 1);
gpio = is_reserved(gpio, c, 1); gpio = is_reserved(gpio, c, 1);
if (!check_gpio(c) && (gpio || irq)) if (!check_gpio(c) && (gpio || irq))
len = sprintf(buf, "GPIO_%d: \t%s%s \t\tGPIO %s\n", c, seq_printf(m, "GPIO_%d: \t%s%s \t\tGPIO %s\n", c,
get_label(c), (gpio && irq) ? " *" : "", get_label(c), (gpio && irq) ? " *" : "",
get_gpio_dir(c) ? "OUTPUT" : "INPUT"); get_gpio_dir(c) ? "OUTPUT" : "INPUT");
else if (is_reserved(peri, c, 1)) else if (is_reserved(peri, c, 1))
len = sprintf(buf, "GPIO_%d: \t%s \t\tPeripheral\n", c, get_label(c)); seq_printf(m, "GPIO_%d: \t%s \t\tPeripheral\n", c, get_label(c));
else else
continue; continue;
buf += len;
outlen += len;
} }
return outlen;
return 0;
} }
static int gpio_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, gpio_proc_show, NULL);
}
static const struct file_operations gpio_proc_ops = {
.open = gpio_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static __init int gpio_register_proc(void) static __init int gpio_register_proc(void)
{ {
struct proc_dir_entry *proc_gpio; struct proc_dir_entry *proc_gpio;
proc_gpio = create_proc_entry("gpio", S_IRUGO, NULL); proc_gpio = proc_create("gpio", S_IRUGO, NULL, &gpio_proc_ops);
if (proc_gpio)
proc_gpio->read_proc = gpio_proc_read;
return proc_gpio != NULL; return proc_gpio != NULL;
} }
__initcall(gpio_register_proc); __initcall(gpio_register_proc);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq_handler.h>
/* Allow people to have their own Blackfin exception handler in a module */ /* Allow people to have their own Blackfin exception handler in a module */
EXPORT_SYMBOL(bfin_return_from_exception); EXPORT_SYMBOL(bfin_return_from_exception);
......
This diff is collapsed.
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/irq_handler.h>
DEFINE_PER_CPU(struct pt_regs, __ipipe_tick_regs); DEFINE_PER_CPU(struct pt_regs, __ipipe_tick_regs);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/irq_handler.h>
#include <asm/trace.h> #include <asm/trace.h>
#include <asm/pda.h> #include <asm/pda.h>
......
...@@ -145,16 +145,16 @@ int check_nmi_wdt_touched(void) ...@@ -145,16 +145,16 @@ int check_nmi_wdt_touched(void)
{ {
unsigned int this_cpu = smp_processor_id(); unsigned int this_cpu = smp_processor_id();
unsigned int cpu; unsigned int cpu;
cpumask_t mask;
cpumask_t mask = cpu_online_map; cpumask_copy(&mask, cpu_online_mask);
if (!atomic_read(&nmi_touched[this_cpu])) if (!atomic_read(&nmi_touched[this_cpu]))
return 0; return 0;
atomic_set(&nmi_touched[this_cpu], 0); atomic_set(&nmi_touched[this_cpu], 0);
cpu_clear(this_cpu, mask); cpumask_clear_cpu(this_cpu, &mask);
for_each_cpu_mask(cpu, mask) { for_each_cpu(cpu, &mask) {
invalidate_dcache_range((unsigned long)(&nmi_touched[cpu]), invalidate_dcache_range((unsigned long)(&nmi_touched[cpu]),
(unsigned long)(&nmi_touched[cpu])); (unsigned long)(&nmi_touched[cpu]));
if (!atomic_read(&nmi_touched[cpu])) if (!atomic_read(&nmi_touched[cpu]))
......
This diff is collapsed.
...@@ -171,10 +171,8 @@ asmlinkage int bfin_clone(struct pt_regs *regs) ...@@ -171,10 +171,8 @@ asmlinkage int bfin_clone(struct pt_regs *regs)
unsigned long newsp; unsigned long newsp;
#ifdef __ARCH_SYNC_CORE_DCACHE #ifdef __ARCH_SYNC_CORE_DCACHE
if (current->rt.nr_cpus_allowed == num_possible_cpus()) { if (current->rt.nr_cpus_allowed == num_possible_cpus())
current->cpus_allowed = cpumask_of_cpu(smp_processor_id()); set_cpus_allowed_ptr(current, cpumask_of(smp_processor_id()));
current->rt.nr_cpus_allowed = 1;
}
#endif #endif
/* syscall2 puts clone_flags in r0 and usp in r1 */ /* syscall2 puts clone_flags in r0 and usp in r1 */
......
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
__attribute__ ((__l1_text__, __noreturn__)) __attribute__ ((__l1_text__, __noreturn__))
static void bfin_reset(void) static void bfin_reset(void)
{ {
if (!ANOMALY_05000353 && !ANOMALY_05000386)
bfrom_SoftReset((void *)(L1_SCRATCH_START + L1_SCRATCH_LENGTH - 20));
/* Wait for completion of "system" events such as cache line /* Wait for completion of "system" events such as cache line
* line fills so that we avoid infinite stalls later on as * line fills so that we avoid infinite stalls later on as
* much as possible. This code is in L1, so it won't trigger * much as possible. This code is in L1, so it won't trigger
...@@ -30,11 +33,6 @@ static void bfin_reset(void) ...@@ -30,11 +33,6 @@ static void bfin_reset(void)
*/ */
__builtin_bfin_ssync(); __builtin_bfin_ssync();
/* The bootrom checks to see how it was reset and will
* automatically perform a software reset for us when
* it starts executing after the core reset.
*/
if (ANOMALY_05000353 || ANOMALY_05000386) {
/* Initiate System software reset. */ /* Initiate System software reset. */
bfin_write_SWRST(0x7); bfin_write_SWRST(0x7);
...@@ -69,7 +67,6 @@ static void bfin_reset(void) ...@@ -69,7 +67,6 @@ static void bfin_reset(void)
: "a" (15 * 1) : "a" (15 * 1)
: "LC1", "LB1", "LT1" : "LC1", "LB1", "LT1"
); );
}
while (1) while (1)
/* Issue core reset */ /* Issue core reset */
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/cpu.h> #include <asm/cpu.h>
#include <asm/fixed_code.h> #include <asm/fixed_code.h>
#include <asm/early_printk.h> #include <asm/early_printk.h>
#include <asm/irq_handler.h>
u16 _bfin_swrst; u16 _bfin_swrst;
EXPORT_SYMBOL(_bfin_swrst); EXPORT_SYMBOL(_bfin_swrst);
...@@ -105,6 +106,8 @@ void __cpuinit bfin_setup_caches(unsigned int cpu) ...@@ -105,6 +106,8 @@ void __cpuinit bfin_setup_caches(unsigned int cpu)
bfin_dcache_init(dcplb_tbl[cpu]); bfin_dcache_init(dcplb_tbl[cpu]);
#endif #endif
bfin_setup_cpudata(cpu);
/* /*
* In cache coherence emulation mode, we need to have the * In cache coherence emulation mode, we need to have the
* D-cache enabled before running any atomic operation which * D-cache enabled before running any atomic operation which
...@@ -163,7 +166,6 @@ void __cpuinit bfin_setup_cpudata(unsigned int cpu) ...@@ -163,7 +166,6 @@ void __cpuinit bfin_setup_cpudata(unsigned int cpu)
{ {
struct blackfin_cpudata *cpudata = &per_cpu(cpu_data, cpu); struct blackfin_cpudata *cpudata = &per_cpu(cpu_data, cpu);
cpudata->idle = current;
cpudata->imemctl = bfin_read_IMEM_CONTROL(); cpudata->imemctl = bfin_read_IMEM_CONTROL();
cpudata->dmemctl = bfin_read_DMEM_CONTROL(); cpudata->dmemctl = bfin_read_DMEM_CONTROL();
} }
...@@ -851,6 +853,7 @@ void __init native_machine_early_platform_add_devices(void) ...@@ -851,6 +853,7 @@ void __init native_machine_early_platform_add_devices(void)
void __init setup_arch(char **cmdline_p) void __init setup_arch(char **cmdline_p)
{ {
u32 mmr;
unsigned long sclk, cclk; unsigned long sclk, cclk;
native_machine_early_platform_add_devices(); native_machine_early_platform_add_devices();
...@@ -902,10 +905,10 @@ void __init setup_arch(char **cmdline_p) ...@@ -902,10 +905,10 @@ void __init setup_arch(char **cmdline_p)
bfin_write_EBIU_FCTL(CONFIG_EBIU_FCTLVAL); bfin_write_EBIU_FCTL(CONFIG_EBIU_FCTLVAL);
#endif #endif
#ifdef CONFIG_BFIN_HYSTERESIS_CONTROL #ifdef CONFIG_BFIN_HYSTERESIS_CONTROL
bfin_write_PORTF_HYSTERISIS(HYST_PORTF_0_15); bfin_write_PORTF_HYSTERESIS(HYST_PORTF_0_15);
bfin_write_PORTG_HYSTERISIS(HYST_PORTG_0_15); bfin_write_PORTG_HYSTERESIS(HYST_PORTG_0_15);
bfin_write_PORTH_HYSTERISIS(HYST_PORTH_0_15); bfin_write_PORTH_HYSTERESIS(HYST_PORTH_0_15);
bfin_write_MISCPORT_HYSTERISIS((bfin_read_MISCPORT_HYSTERISIS() & bfin_write_MISCPORT_HYSTERESIS((bfin_read_MISCPORT_HYSTERESIS() &
~HYST_NONEGPIO_MASK) | HYST_NONEGPIO); ~HYST_NONEGPIO_MASK) | HYST_NONEGPIO);
#endif #endif
...@@ -921,17 +924,14 @@ void __init setup_arch(char **cmdline_p) ...@@ -921,17 +924,14 @@ void __init setup_arch(char **cmdline_p)
bfin_read_IMDMA_D1_IRQ_STATUS(); bfin_read_IMDMA_D1_IRQ_STATUS();
} }
#endif #endif
printk(KERN_INFO "Hardware Trace ");
if (bfin_read_TBUFCTL() & 0x1)
printk(KERN_CONT "Active ");
else
printk(KERN_CONT "Off ");
if (bfin_read_TBUFCTL() & 0x2)
printk(KERN_CONT "and Enabled\n");
else
printk(KERN_CONT "and Disabled\n");
printk(KERN_INFO "Boot Mode: %i\n", bfin_read_SYSCR() & 0xF); mmr = bfin_read_TBUFCTL();
printk(KERN_INFO "Hardware Trace %s and %sabled\n",
(mmr & 0x1) ? "active" : "off",
(mmr & 0x2) ? "en" : "dis");
mmr = bfin_read_SYSCR();
printk(KERN_INFO "Boot Mode: %i\n", mmr & 0xF);
/* Newer parts mirror SWRST bits in SYSCR */ /* Newer parts mirror SWRST bits in SYSCR */
#if defined(CONFIG_BF53x) || defined(CONFIG_BF561) || \ #if defined(CONFIG_BF53x) || defined(CONFIG_BF561) || \
...@@ -939,7 +939,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -939,7 +939,7 @@ void __init setup_arch(char **cmdline_p)
_bfin_swrst = bfin_read_SWRST(); _bfin_swrst = bfin_read_SWRST();
#else #else
/* Clear boot mode field */ /* Clear boot mode field */
_bfin_swrst = bfin_read_SYSCR() & ~0xf; _bfin_swrst = mmr & ~0xf;
#endif #endif
#ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT #ifdef CONFIG_DEBUG_DOUBLEFAULT_PRINT
...@@ -1036,8 +1036,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -1036,8 +1036,6 @@ void __init setup_arch(char **cmdline_p)
static int __init topology_init(void) static int __init topology_init(void)
{ {
unsigned int cpu; unsigned int cpu;
/* Record CPU-private information for the boot processor. */
bfin_setup_cpudata(0);
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu); register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu);
...@@ -1283,12 +1281,14 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -1283,12 +1281,14 @@ static int show_cpuinfo(struct seq_file *m, void *v)
dsup_banks, BFIN_DSUBBANKS, BFIN_DWAYS, dsup_banks, BFIN_DSUBBANKS, BFIN_DWAYS,
BFIN_DLINES); BFIN_DLINES);
#ifdef __ARCH_SYNC_CORE_DCACHE #ifdef __ARCH_SYNC_CORE_DCACHE
seq_printf(m, "SMP Dcache Flushes\t: %lu\n\n", dcache_invld_count[cpu_num]); seq_printf(m, "dcache flushes\t: %lu\n", dcache_invld_count[cpu_num]);
#endif #endif
#ifdef __ARCH_SYNC_CORE_ICACHE #ifdef __ARCH_SYNC_CORE_ICACHE
seq_printf(m, "SMP Icache Flushes\t: %lu\n\n", icache_invld_count[cpu_num]); seq_printf(m, "icache flushes\t: %lu\n", icache_invld_count[cpu_num]);
#endif #endif
seq_printf(m, "\n");
if (cpu_num != num_possible_cpus() - 1) if (cpu_num != num_possible_cpus() - 1)
return 0; return 0;
...@@ -1312,13 +1312,11 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -1312,13 +1312,11 @@ static int show_cpuinfo(struct seq_file *m, void *v)
" in data cache\n"); " in data cache\n");
} }
seq_printf(m, "board name\t: %s\n", bfin_board_name); seq_printf(m, "board name\t: %s\n", bfin_board_name);
seq_printf(m, "board memory\t: %ld kB (0x%p -> 0x%p)\n", seq_printf(m, "board memory\t: %ld kB (0x%08lx -> 0x%08lx)\n",
physical_mem_end >> 10, (void *)0, (void *)physical_mem_end); physical_mem_end >> 10, 0ul, physical_mem_end);
seq_printf(m, "kernel memory\t: %d kB (0x%p -> 0x%p)\n", seq_printf(m, "kernel memory\t: %d kB (0x%08lx -> 0x%08lx)\n",
((int)memory_end - (int)_rambase) >> 10, ((int)memory_end - (int)_rambase) >> 10,
(void *)_rambase, _rambase, memory_end);
(void *)memory_end);
seq_printf(m, "\n");
return 0; return 0;
} }
...@@ -1326,7 +1324,7 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -1326,7 +1324,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
static void *c_start(struct seq_file *m, loff_t *pos) static void *c_start(struct seq_file *m, loff_t *pos)
{ {
if (*pos == 0) if (*pos == 0)
*pos = first_cpu(cpu_online_map); *pos = cpumask_first(cpu_online_mask);
if (*pos >= num_online_cpus()) if (*pos >= num_online_cpus())
return NULL; return NULL;
...@@ -1335,7 +1333,7 @@ static void *c_start(struct seq_file *m, loff_t *pos) ...@@ -1335,7 +1333,7 @@ static void *c_start(struct seq_file *m, loff_t *pos)
static void *c_next(struct seq_file *m, void *v, loff_t *pos) static void *c_next(struct seq_file *m, void *v, loff_t *pos)
{ {
*pos = next_cpu(*pos, cpu_online_map); *pos = cpumask_next(*pos, cpu_online_mask);
return c_start(m, pos); return c_start(m, pos);
} }
......
...@@ -155,14 +155,8 @@ SECTIONS ...@@ -155,14 +155,8 @@ SECTIONS
SECURITY_INITCALL SECURITY_INITCALL
INIT_RAM_FS INIT_RAM_FS
. = ALIGN(4);
___per_cpu_load = .; ___per_cpu_load = .;
___per_cpu_start = .; PERCPU_INPUT(32)
*(.data.percpu.first)
*(.data.percpu.page_aligned)
*(.data.percpu)
*(.data.percpu.shared_aligned)
___per_cpu_end = .;
EXIT_DATA EXIT_DATA
__einitdata = .; __einitdata = .;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
...@@ -141,6 +141,7 @@ ...@@ -141,6 +141,7 @@
#define ANOMALY_05000364 (0) #define ANOMALY_05000364 (0)
#define ANOMALY_05000371 (0) #define ANOMALY_05000371 (0)
#define ANOMALY_05000380 (0) #define ANOMALY_05000380 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000386 (0) #define ANOMALY_05000386 (0)
#define ANOMALY_05000389 (0) #define ANOMALY_05000389 (0)
#define ANOMALY_05000400 (0) #define ANOMALY_05000400 (0)
...@@ -155,6 +156,7 @@ ...@@ -155,6 +156,7 @@
#define ANOMALY_05000467 (0) #define ANOMALY_05000467 (0)
#define ANOMALY_05000474 (0) #define ANOMALY_05000474 (0)
#define ANOMALY_05000475 (0) #define ANOMALY_05000475 (0)
#define ANOMALY_05000480 (0)
#define ANOMALY_05000485 (0) #define ANOMALY_05000485 (0)
#endif #endif
...@@ -990,18 +990,18 @@ ...@@ -990,18 +990,18 @@
#define bfin_write_PORTG_SLEW(val) bfin_write16(PORTG_SLEW, val) #define bfin_write_PORTG_SLEW(val) bfin_write16(PORTG_SLEW, val)
#define bfin_read_PORTH_SLEW() bfin_read16(PORTH_SLEW) #define bfin_read_PORTH_SLEW() bfin_read16(PORTH_SLEW)
#define bfin_write_PORTH_SLEW(val) bfin_write16(PORTH_SLEW, val) #define bfin_write_PORTH_SLEW(val) bfin_write16(PORTH_SLEW, val)
#define bfin_read_PORTF_HYSTERISIS() bfin_read16(PORTF_HYSTERISIS) #define bfin_read_PORTF_HYSTERESIS() bfin_read16(PORTF_HYSTERESIS)
#define bfin_write_PORTF_HYSTERISIS(val) bfin_write16(PORTF_HYSTERISIS, val) #define bfin_write_PORTF_HYSTERESIS(val) bfin_write16(PORTF_HYSTERESIS, val)
#define bfin_read_PORTG_HYSTERISIS() bfin_read16(PORTG_HYSTERISIS) #define bfin_read_PORTG_HYSTERESIS() bfin_read16(PORTG_HYSTERESIS)
#define bfin_write_PORTG_HYSTERISIS(val) bfin_write16(PORTG_HYSTERISIS, val) #define bfin_write_PORTG_HYSTERESIS(val) bfin_write16(PORTG_HYSTERESIS, val)
#define bfin_read_PORTH_HYSTERISIS() bfin_read16(PORTH_HYSTERISIS) #define bfin_read_PORTH_HYSTERESIS() bfin_read16(PORTH_HYSTERESIS)
#define bfin_write_PORTH_HYSTERISIS(val) bfin_write16(PORTH_HYSTERISIS, val) #define bfin_write_PORTH_HYSTERESIS(val) bfin_write16(PORTH_HYSTERESIS, val)
#define bfin_read_MISCPORT_DRIVE() bfin_read16(MISCPORT_DRIVE) #define bfin_read_MISCPORT_DRIVE() bfin_read16(MISCPORT_DRIVE)
#define bfin_write_MISCPORT_DRIVE(val) bfin_write16(MISCPORT_DRIVE, val) #define bfin_write_MISCPORT_DRIVE(val) bfin_write16(MISCPORT_DRIVE, val)
#define bfin_read_MISCPORT_SLEW() bfin_read16(MISCPORT_SLEW) #define bfin_read_MISCPORT_SLEW() bfin_read16(MISCPORT_SLEW)
#define bfin_write_MISCPORT_SLEW(val) bfin_write16(MISCPORT_SLEW, val) #define bfin_write_MISCPORT_SLEW(val) bfin_write16(MISCPORT_SLEW, val)
#define bfin_read_MISCPORT_HYSTERISIS() bfin_read16(MISCPORT_HYSTERISIS) #define bfin_read_MISCPORT_HYSTERESIS() bfin_read16(MISCPORT_HYSTERESIS)
#define bfin_write_MISCPORT_HYSTERISIS(val) bfin_write16(MISCPORT_HYSTERISIS, val) #define bfin_write_MISCPORT_HYSTERESIS(val) bfin_write16(MISCPORT_HYSTERESIS, val)
/* HOST Port Registers */ /* HOST Port Registers */
......
...@@ -561,12 +561,12 @@ ...@@ -561,12 +561,12 @@
#define PORTF_SLEW 0xFFC03230 /* Port F slew control */ #define PORTF_SLEW 0xFFC03230 /* Port F slew control */
#define PORTG_SLEW 0xFFC03234 /* Port G slew control */ #define PORTG_SLEW 0xFFC03234 /* Port G slew control */
#define PORTH_SLEW 0xFFC03238 /* Port H slew control */ #define PORTH_SLEW 0xFFC03238 /* Port H slew control */
#define PORTF_HYSTERISIS 0xFFC03240 /* Port F Schmitt trigger control */ #define PORTF_HYSTERESIS 0xFFC03240 /* Port F Schmitt trigger control */
#define PORTG_HYSTERISIS 0xFFC03244 /* Port G Schmitt trigger control */ #define PORTG_HYSTERESIS 0xFFC03244 /* Port G Schmitt trigger control */
#define PORTH_HYSTERISIS 0xFFC03248 /* Port H Schmitt trigger control */ #define PORTH_HYSTERESIS 0xFFC03248 /* Port H Schmitt trigger control */
#define MISCPORT_DRIVE 0xFFC03280 /* Misc Port drive strength control */ #define MISCPORT_DRIVE 0xFFC03280 /* Misc Port drive strength control */
#define MISCPORT_SLEW 0xFFC03284 /* Misc Port slew control */ #define MISCPORT_SLEW 0xFFC03284 /* Misc Port slew control */
#define MISCPORT_HYSTERISIS 0xFFC03288 /* Misc Port Schmitt trigger control */ #define MISCPORT_HYSTERESIS 0xFFC03288 /* Misc Port Schmitt trigger control */
/*********************************************************************************** /***********************************************************************************
......
...@@ -7,39 +7,10 @@ ...@@ -7,39 +7,10 @@
#ifndef _BF518_IRQ_H_ #ifndef _BF518_IRQ_H_
#define _BF518_IRQ_H_ #define _BF518_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
Event Source Core Event Name
Core Emulation **
Events (highest priority) EMU 0
Reset RST 1
NMI NMI 2
Exception EVX 3
Reserved -- 4
Hardware Error IVHW 5
Core Timer IVTMR 6 *
.....
Software Interrupt 1 IVG14 31
Software Interrupt 2 --
(lowest priority) IVG15 32 *
*/
#define NR_PERI_INTS (2 * 32) #define NR_PERI_INTS (2 * 32)
/* The ABSTRACT IRQ definitions */
/** the first seven of the following are fixed, the rest you change if you need to **/
#define IRQ_EMU 0 /* Emulation */
#define IRQ_RST 1 /* reset */
#define IRQ_NMI 2 /* Non Maskable */
#define IRQ_EVX 3 /* Exception */
#define IRQ_UNUSED 4 /* - unused interrupt */
#define IRQ_HWERR 5 /* Hardware Error */
#define IRQ_CORETMR 6 /* Core timer */
#define BFIN_IRQ(x) ((x) + 7)
#define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
#define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */ #define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */
#define IRQ_DMAR0_BLK BFIN_IRQ(2) /* DMAR0 Block Interrupt */ #define IRQ_DMAR0_BLK BFIN_IRQ(2) /* DMAR0 Block Interrupt */
...@@ -161,17 +132,6 @@ ...@@ -161,17 +132,6 @@
#define IRQ_MAC_STMDONE 126 /* Station Mgt. Transfer Done Interrupt */ #define IRQ_MAC_STMDONE 126 /* Station Mgt. Transfer Done Interrupt */
#define NR_MACH_IRQS (IRQ_MAC_STMDONE + 1) #define NR_MACH_IRQS (IRQ_MAC_STMDONE + 1)
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS */ /* IAR0 BIT FIELDS */
#define IRQ_PLL_WAKEUP_POS 0 #define IRQ_PLL_WAKEUP_POS 0
...@@ -242,4 +202,4 @@ ...@@ -242,4 +202,4 @@
#define IRQ_PWM_SYNC_POS 24 #define IRQ_PWM_SYNC_POS 24
#define IRQ_PTP_STAT_POS 28 #define IRQ_PTP_STAT_POS 28
#endif /* _BF518_IRQ_H_ */ #endif
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <asm/portmux.h> #include <asm/portmux.h>
#include <asm/dpmc.h> #include <asm/dpmc.h>
#include <linux/spi/ad7877.h> #include <linux/spi/ad7877.h>
#include <asm/bfin_sport.h>
/* /*
* Name the Board for the /proc/cpuinfo * Name the Board for the /proc/cpuinfo
...@@ -526,11 +527,69 @@ static struct bfin5xx_spi_chip spidev_chip_info = { ...@@ -526,11 +527,69 @@ static struct bfin5xx_spi_chip spidev_chip_info = {
}; };
#endif #endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE)
static const u16 bfin_snd_pin[][7] = {
{P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS,
P_SPORT0_DRPRI, P_SPORT0_RSCLK, 0, 0},
{P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS,
P_SPORT1_DRPRI, P_SPORT1_RSCLK, P_SPORT1_TFS, 0},
};
static struct bfin_snd_platform_data bfin_snd_data[] = {
{
.pin_req = &bfin_snd_pin[0][0],
},
{
.pin_req = &bfin_snd_pin[1][0],
},
};
#define BFIN_SND_RES(x) \
[x] = { \
{ \
.start = SPORT##x##_TCR1, \
.end = SPORT##x##_TCR1, \
.flags = IORESOURCE_MEM \
}, \
{ \
.start = CH_SPORT##x##_RX, \
.end = CH_SPORT##x##_RX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = CH_SPORT##x##_TX, \
.end = CH_SPORT##x##_TX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = IRQ_SPORT##x##_ERROR, \
.end = IRQ_SPORT##x##_ERROR, \
.flags = IORESOURCE_IRQ, \
} \
}
static struct resource bfin_snd_resources[][4] = {
BFIN_SND_RES(0),
BFIN_SND_RES(1),
};
static struct platform_device bfin_pcm = {
.name = "bfin-pcm-audio",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE)
static struct platform_device bfin_i2s = { static struct platform_device bfin_i2s = {
.name = "bfin-i2s", .name = "bfin-i2s",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
...@@ -538,7 +597,11 @@ static struct platform_device bfin_i2s = { ...@@ -538,7 +597,11 @@ static struct platform_device bfin_i2s = {
static struct platform_device bfin_tdm = { static struct platform_device bfin_tdm = {
.name = "bfin-tdm", .name = "bfin-tdm",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
...@@ -583,7 +646,9 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { ...@@ -583,7 +646,9 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */ .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
.bus_num = 0, .bus_num = 0,
.chip_select = 4, .chip_select = 4,
.platform_data = "ad1836",
.controller_data = &ad1836_spi_chip_info, .controller_data = &ad1836_spi_chip_info,
.mode = SPI_MODE_3,
}, },
#endif #endif
#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE) #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
...@@ -1211,6 +1276,11 @@ static struct platform_device *stamp_devices[] __initdata = { ...@@ -1211,6 +1276,11 @@ static struct platform_device *stamp_devices[] __initdata = {
&ezkit_flash_device, &ezkit_flash_device,
#endif #endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE)
&bfin_pcm,
#endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE)
&bfin_i2s, &bfin_i2s,
#endif #endif
......
...@@ -5,14 +5,14 @@ ...@@ -5,14 +5,14 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision E, 03/15/2010; ADSP-BF526 Blackfin Processor Anomaly List * - Revision E, 03/15/2010; ADSP-BF526 Blackfin Processor Anomaly List
* - Revision G, 08/25/2009; ADSP-BF527 Blackfin Processor Anomaly List * - Revision H, 04/29/2010; ADSP-BF527 Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -220,6 +220,8 @@ ...@@ -220,6 +220,8 @@
#define ANOMALY_05000483 (1) #define ANOMALY_05000483 (1)
/* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */ /* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */
#define ANOMALY_05000485 (_ANOMALY_BF526_BF527(< 2, < 3)) #define ANOMALY_05000485 (_ANOMALY_BF526_BF527(< 2, < 3))
/* The CODEC Zero-Cross Detect Feature is not Functional */
#define ANOMALY_05000487 (1)
/* IFLUSH sucks at life */ /* IFLUSH sucks at life */
#define ANOMALY_05000491 (1) #define ANOMALY_05000491 (1)
...@@ -268,11 +270,13 @@ ...@@ -268,11 +270,13 @@
#define ANOMALY_05000323 (0) #define ANOMALY_05000323 (0)
#define ANOMALY_05000362 (1) #define ANOMALY_05000362 (1)
#define ANOMALY_05000363 (0) #define ANOMALY_05000363 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000400 (0) #define ANOMALY_05000400 (0)
#define ANOMALY_05000402 (0) #define ANOMALY_05000402 (0)
#define ANOMALY_05000412 (0) #define ANOMALY_05000412 (0)
#define ANOMALY_05000447 (0) #define ANOMALY_05000447 (0)
#define ANOMALY_05000448 (0) #define ANOMALY_05000448 (0)
#define ANOMALY_05000474 (0) #define ANOMALY_05000474 (0)
#define ANOMALY_05000480 (0)
#endif #endif
...@@ -1007,18 +1007,18 @@ ...@@ -1007,18 +1007,18 @@
#define bfin_write_PORTG_SLEW(val) bfin_write16(PORTG_SLEW, val) #define bfin_write_PORTG_SLEW(val) bfin_write16(PORTG_SLEW, val)
#define bfin_read_PORTH_SLEW() bfin_read16(PORTH_SLEW) #define bfin_read_PORTH_SLEW() bfin_read16(PORTH_SLEW)
#define bfin_write_PORTH_SLEW(val) bfin_write16(PORTH_SLEW, val) #define bfin_write_PORTH_SLEW(val) bfin_write16(PORTH_SLEW, val)
#define bfin_read_PORTF_HYSTERISIS() bfin_read16(PORTF_HYSTERISIS) #define bfin_read_PORTF_HYSTERESIS() bfin_read16(PORTF_HYSTERESIS)
#define bfin_write_PORTF_HYSTERISIS(val) bfin_write16(PORTF_HYSTERISIS, val) #define bfin_write_PORTF_HYSTERESIS(val) bfin_write16(PORTF_HYSTERESIS, val)
#define bfin_read_PORTG_HYSTERISIS() bfin_read16(PORTG_HYSTERISIS) #define bfin_read_PORTG_HYSTERESIS() bfin_read16(PORTG_HYSTERESIS)
#define bfin_write_PORTG_HYSTERISIS(val) bfin_write16(PORTG_HYSTERISIS, val) #define bfin_write_PORTG_HYSTERESIS(val) bfin_write16(PORTG_HYSTERESIS, val)
#define bfin_read_PORTH_HYSTERISIS() bfin_read16(PORTH_HYSTERISIS) #define bfin_read_PORTH_HYSTERESIS() bfin_read16(PORTH_HYSTERESIS)
#define bfin_write_PORTH_HYSTERISIS(val) bfin_write16(PORTH_HYSTERISIS, val) #define bfin_write_PORTH_HYSTERESIS(val) bfin_write16(PORTH_HYSTERESIS, val)
#define bfin_read_MISCPORT_DRIVE() bfin_read16(MISCPORT_DRIVE) #define bfin_read_MISCPORT_DRIVE() bfin_read16(MISCPORT_DRIVE)
#define bfin_write_MISCPORT_DRIVE(val) bfin_write16(MISCPORT_DRIVE, val) #define bfin_write_MISCPORT_DRIVE(val) bfin_write16(MISCPORT_DRIVE, val)
#define bfin_read_MISCPORT_SLEW() bfin_read16(MISCPORT_SLEW) #define bfin_read_MISCPORT_SLEW() bfin_read16(MISCPORT_SLEW)
#define bfin_write_MISCPORT_SLEW(val) bfin_write16(MISCPORT_SLEW, val) #define bfin_write_MISCPORT_SLEW(val) bfin_write16(MISCPORT_SLEW, val)
#define bfin_read_MISCPORT_HYSTERISIS() bfin_read16(MISCPORT_HYSTERISIS) #define bfin_read_MISCPORT_HYSTERESIS() bfin_read16(MISCPORT_HYSTERESIS)
#define bfin_write_MISCPORT_HYSTERISIS(val) bfin_write16(MISCPORT_HYSTERISIS, val) #define bfin_write_MISCPORT_HYSTERESIS(val) bfin_write16(MISCPORT_HYSTERESIS, val)
/* HOST Port Registers */ /* HOST Port Registers */
......
...@@ -562,12 +562,12 @@ ...@@ -562,12 +562,12 @@
#define PORTF_SLEW 0xFFC03230 /* Port F slew control */ #define PORTF_SLEW 0xFFC03230 /* Port F slew control */
#define PORTG_SLEW 0xFFC03234 /* Port G slew control */ #define PORTG_SLEW 0xFFC03234 /* Port G slew control */
#define PORTH_SLEW 0xFFC03238 /* Port H slew control */ #define PORTH_SLEW 0xFFC03238 /* Port H slew control */
#define PORTF_HYSTERISIS 0xFFC03240 /* Port F Schmitt trigger control */ #define PORTF_HYSTERESIS 0xFFC03240 /* Port F Schmitt trigger control */
#define PORTG_HYSTERISIS 0xFFC03244 /* Port G Schmitt trigger control */ #define PORTG_HYSTERESIS 0xFFC03244 /* Port G Schmitt trigger control */
#define PORTH_HYSTERISIS 0xFFC03248 /* Port H Schmitt trigger control */ #define PORTH_HYSTERESIS 0xFFC03248 /* Port H Schmitt trigger control */
#define MISCPORT_DRIVE 0xFFC03280 /* Misc Port drive strength control */ #define MISCPORT_DRIVE 0xFFC03280 /* Misc Port drive strength control */
#define MISCPORT_SLEW 0xFFC03284 /* Misc Port slew control */ #define MISCPORT_SLEW 0xFFC03284 /* Misc Port slew control */
#define MISCPORT_HYSTERISIS 0xFFC03288 /* Misc Port Schmitt trigger control */ #define MISCPORT_HYSTERESIS 0xFFC03288 /* Misc Port Schmitt trigger control */
/*********************************************************************************** /***********************************************************************************
......
...@@ -7,39 +7,10 @@ ...@@ -7,39 +7,10 @@
#ifndef _BF527_IRQ_H_ #ifndef _BF527_IRQ_H_
#define _BF527_IRQ_H_ #define _BF527_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
Event Source Core Event Name
Core Emulation **
Events (highest priority) EMU 0
Reset RST 1
NMI NMI 2
Exception EVX 3
Reserved -- 4
Hardware Error IVHW 5
Core Timer IVTMR 6 *
.....
Software Interrupt 1 IVG14 31
Software Interrupt 2 --
(lowest priority) IVG15 32 *
*/
#define NR_PERI_INTS (2 * 32) #define NR_PERI_INTS (2 * 32)
/* The ABSTRACT IRQ definitions */
/** the first seven of the following are fixed, the rest you change if you need to **/
#define IRQ_EMU 0 /* Emulation */
#define IRQ_RST 1 /* reset */
#define IRQ_NMI 2 /* Non Maskable */
#define IRQ_EVX 3 /* Exception */
#define IRQ_UNUSED 4 /* - unused interrupt */
#define IRQ_HWERR 5 /* Hardware Error */
#define IRQ_CORETMR 6 /* Core timer */
#define BFIN_IRQ(x) ((x) + 7)
#define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
#define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */ #define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */
#define IRQ_DMAR0_BLK BFIN_IRQ(2) /* DMAR0 Block Interrupt */ #define IRQ_DMAR0_BLK BFIN_IRQ(2) /* DMAR0 Block Interrupt */
...@@ -161,17 +132,6 @@ ...@@ -161,17 +132,6 @@
#define IRQ_MAC_STMDONE 126 /* Station Mgt. Transfer Done Interrupt */ #define IRQ_MAC_STMDONE 126 /* Station Mgt. Transfer Done Interrupt */
#define NR_MACH_IRQS (IRQ_MAC_STMDONE + 1) #define NR_MACH_IRQS (IRQ_MAC_STMDONE + 1)
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS */ /* IAR0 BIT FIELDS */
#define IRQ_PLL_WAKEUP_POS 0 #define IRQ_PLL_WAKEUP_POS 0
...@@ -241,4 +201,4 @@ ...@@ -241,4 +201,4 @@
#define IRQ_USB_INT2_POS 24 #define IRQ_USB_INT2_POS 24
#define IRQ_USB_DMA_POS 28 #define IRQ_USB_DMA_POS 28
#endif /* _BF527_IRQ_H_ */ #endif
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision E, 09/18/2008; ADSP-BF531/BF532/BF533 Blackfin Processor Anomaly List * - Revision F, 05/25/2010; ADSP-BF531/BF532/BF533 Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -206,6 +206,10 @@ ...@@ -206,6 +206,10 @@
#define ANOMALY_05000443 (1) #define ANOMALY_05000443 (1)
/* False Hardware Error when RETI Points to Invalid Memory */ /* False Hardware Error when RETI Points to Invalid Memory */
#define ANOMALY_05000461 (1) #define ANOMALY_05000461 (1)
/* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */
#define ANOMALY_05000462 (1)
/* Boot Failure When SDRAM Control Signals Toggle Coming Out Of Reset */
#define ANOMALY_05000471 (1)
/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */ /* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
#define ANOMALY_05000473 (1) #define ANOMALY_05000473 (1)
/* Possible Lockup Condition whem Modifying PLL from External Memory */ /* Possible Lockup Condition whem Modifying PLL from External Memory */
...@@ -351,12 +355,14 @@ ...@@ -351,12 +355,14 @@
#define ANOMALY_05000362 (1) #define ANOMALY_05000362 (1)
#define ANOMALY_05000364 (0) #define ANOMALY_05000364 (0)
#define ANOMALY_05000380 (0) #define ANOMALY_05000380 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000386 (1) #define ANOMALY_05000386 (1)
#define ANOMALY_05000389 (0) #define ANOMALY_05000389 (0)
#define ANOMALY_05000412 (0) #define ANOMALY_05000412 (0)
#define ANOMALY_05000430 (0) #define ANOMALY_05000430 (0)
#define ANOMALY_05000432 (0) #define ANOMALY_05000432 (0)
#define ANOMALY_05000435 (0) #define ANOMALY_05000435 (0)
#define ANOMALY_05000440 (0)
#define ANOMALY_05000447 (0) #define ANOMALY_05000447 (0)
#define ANOMALY_05000448 (0) #define ANOMALY_05000448 (0)
#define ANOMALY_05000456 (0) #define ANOMALY_05000456 (0)
...@@ -364,6 +370,7 @@ ...@@ -364,6 +370,7 @@
#define ANOMALY_05000465 (0) #define ANOMALY_05000465 (0)
#define ANOMALY_05000467 (0) #define ANOMALY_05000467 (0)
#define ANOMALY_05000474 (0) #define ANOMALY_05000474 (0)
#define ANOMALY_05000480 (0)
#define ANOMALY_05000485 (0) #define ANOMALY_05000485 (0)
#endif #endif
...@@ -7,83 +7,36 @@ ...@@ -7,83 +7,36 @@
#ifndef _BF533_IRQ_H_ #ifndef _BF533_IRQ_H_
#define _BF533_IRQ_H_ #define _BF533_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
Event Source Core Event Name
Core Emulation **
Events (highest priority) EMU 0
Reset RST 1
NMI NMI 2
Exception EVX 3
Reserved -- 4
Hardware Error IVHW 5
Core Timer IVTMR 6 *
PLL Wakeup Interrupt IVG7 7
DMA Error (generic) IVG7 8
PPI Error Interrupt IVG7 9
SPORT0 Error Interrupt IVG7 10
SPORT1 Error Interrupt IVG7 11
SPI Error Interrupt IVG7 12
UART Error Interrupt IVG7 13
RTC Interrupt IVG8 14
DMA0 Interrupt (PPI) IVG8 15
DMA1 (SPORT0 RX) IVG9 16
DMA2 (SPORT0 TX) IVG9 17
DMA3 (SPORT1 RX) IVG9 18
DMA4 (SPORT1 TX) IVG9 19
DMA5 (PPI) IVG10 20
DMA6 (UART RX) IVG10 21
DMA7 (UART TX) IVG10 22
Timer0 IVG11 23
Timer1 IVG11 24
Timer2 IVG11 25
PF Interrupt A IVG12 26
PF Interrupt B IVG12 27
DMA8/9 Interrupt IVG13 28
DMA10/11 Interrupt IVG13 29
Watchdog Timer IVG13 30
Softirq IVG14 31
System Call --
(lowest priority) IVG15 32 *
*/
#define SYS_IRQS 31
#define NR_PERI_INTS 24 #define NR_PERI_INTS 24
/* The ABSTRACT IRQ definitions */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
/** the first seven of the following are fixed, the rest you change if you need to **/ #define IRQ_DMA_ERROR BFIN_IRQ(1) /* DMA Error (general) */
#define IRQ_EMU 0 /*Emulation */ #define IRQ_PPI_ERROR BFIN_IRQ(2) /* PPI Error Interrupt */
#define IRQ_RST 1 /*reset */ #define IRQ_SPORT0_ERROR BFIN_IRQ(3) /* SPORT0 Error Interrupt */
#define IRQ_NMI 2 /*Non Maskable */ #define IRQ_SPORT1_ERROR BFIN_IRQ(4) /* SPORT1 Error Interrupt */
#define IRQ_EVX 3 /*Exception */ #define IRQ_SPI_ERROR BFIN_IRQ(5) /* SPI Error Interrupt */
#define IRQ_UNUSED 4 /*- unused interrupt*/ #define IRQ_UART0_ERROR BFIN_IRQ(6) /* UART Error Interrupt */
#define IRQ_HWERR 5 /*Hardware Error */ #define IRQ_RTC BFIN_IRQ(7) /* RTC Interrupt */
#define IRQ_CORETMR 6 /*Core timer */ #define IRQ_PPI BFIN_IRQ(8) /* DMA0 Interrupt (PPI) */
#define IRQ_SPORT0_RX BFIN_IRQ(9) /* DMA1 Interrupt (SPORT0 RX) */
#define IRQ_SPORT0_TX BFIN_IRQ(10) /* DMA2 Interrupt (SPORT0 TX) */
#define IRQ_SPORT1_RX BFIN_IRQ(11) /* DMA3 Interrupt (SPORT1 RX) */
#define IRQ_SPORT1_TX BFIN_IRQ(12) /* DMA4 Interrupt (SPORT1 TX) */
#define IRQ_SPI BFIN_IRQ(13) /* DMA5 Interrupt (SPI) */
#define IRQ_UART0_RX BFIN_IRQ(14) /* DMA6 Interrupt (UART RX) */
#define IRQ_UART0_TX BFIN_IRQ(15) /* DMA7 Interrupt (UART TX) */
#define IRQ_TIMER0 BFIN_IRQ(16) /* Timer 0 */
#define IRQ_TIMER1 BFIN_IRQ(17) /* Timer 1 */
#define IRQ_TIMER2 BFIN_IRQ(18) /* Timer 2 */
#define IRQ_PROG_INTA BFIN_IRQ(19) /* Programmable Flags A (8) */
#define IRQ_PROG_INTB BFIN_IRQ(20) /* Programmable Flags B (8) */
#define IRQ_MEM_DMA0 BFIN_IRQ(21) /* DMA8/9 Interrupt (Memory DMA Stream 0) */
#define IRQ_MEM_DMA1 BFIN_IRQ(22) /* DMA10/11 Interrupt (Memory DMA Stream 1) */
#define IRQ_WATCH BFIN_IRQ(23) /* Watch Dog Timer */
#define IRQ_PLL_WAKEUP 7 /*PLL Wakeup Interrupt */ #define SYS_IRQS 31
#define IRQ_DMA_ERROR 8 /*DMA Error (general) */
#define IRQ_PPI_ERROR 9 /*PPI Error Interrupt */
#define IRQ_SPORT0_ERROR 10 /*SPORT0 Error Interrupt */
#define IRQ_SPORT1_ERROR 11 /*SPORT1 Error Interrupt */
#define IRQ_SPI_ERROR 12 /*SPI Error Interrupt */
#define IRQ_UART0_ERROR 13 /*UART Error Interrupt */
#define IRQ_RTC 14 /*RTC Interrupt */
#define IRQ_PPI 15 /*DMA0 Interrupt (PPI) */
#define IRQ_SPORT0_RX 16 /*DMA1 Interrupt (SPORT0 RX) */
#define IRQ_SPORT0_TX 17 /*DMA2 Interrupt (SPORT0 TX) */
#define IRQ_SPORT1_RX 18 /*DMA3 Interrupt (SPORT1 RX) */
#define IRQ_SPORT1_TX 19 /*DMA4 Interrupt (SPORT1 TX) */
#define IRQ_SPI 20 /*DMA5 Interrupt (SPI) */
#define IRQ_UART0_RX 21 /*DMA6 Interrupt (UART RX) */
#define IRQ_UART0_TX 22 /*DMA7 Interrupt (UART TX) */
#define IRQ_TIMER0 23 /*Timer 0 */
#define IRQ_TIMER1 24 /*Timer 1 */
#define IRQ_TIMER2 25 /*Timer 2 */
#define IRQ_PROG_INTA 26 /*Programmable Flags A (8) */
#define IRQ_PROG_INTB 27 /*Programmable Flags B (8) */
#define IRQ_MEM_DMA0 28 /*DMA8/9 Interrupt (Memory DMA Stream 0) */
#define IRQ_MEM_DMA1 29 /*DMA10/11 Interrupt (Memory DMA Stream 1) */
#define IRQ_WATCH 30 /*Watch Dog Timer */
#define IRQ_PF0 33 #define IRQ_PF0 33
#define IRQ_PF1 34 #define IRQ_PF1 34
...@@ -105,19 +58,8 @@ Core Emulation ** ...@@ -105,19 +58,8 @@ Core Emulation **
#define GPIO_IRQ_BASE IRQ_PF0 #define GPIO_IRQ_BASE IRQ_PF0
#define NR_MACH_IRQS (IRQ_PF15 + 1) #define NR_MACH_IRQS (IRQ_PF15 + 1)
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS*/ /* IAR0 BIT FIELDS */
#define RTC_ERROR_POS 28 #define RTC_ERROR_POS 28
#define UART_ERROR_POS 24 #define UART_ERROR_POS 24
#define SPORT1_ERROR_POS 20 #define SPORT1_ERROR_POS 20
...@@ -127,7 +69,7 @@ Core Emulation ** ...@@ -127,7 +69,7 @@ Core Emulation **
#define DMA_ERROR_POS 4 #define DMA_ERROR_POS 4
#define PLLWAKE_ERROR_POS 0 #define PLLWAKE_ERROR_POS 0
/* IAR1 BIT FIELDS*/ /* IAR1 BIT FIELDS */
#define DMA7_UARTTX_POS 28 #define DMA7_UARTTX_POS 28
#define DMA6_UARTRX_POS 24 #define DMA6_UARTRX_POS 24
#define DMA5_SPI_POS 20 #define DMA5_SPI_POS 20
...@@ -137,7 +79,7 @@ Core Emulation ** ...@@ -137,7 +79,7 @@ Core Emulation **
#define DMA1_SPORT0RX_POS 4 #define DMA1_SPORT0RX_POS 4
#define DMA0_PPI_POS 0 #define DMA0_PPI_POS 0
/* IAR2 BIT FIELDS*/ /* IAR2 BIT FIELDS */
#define WDTIMER_POS 28 #define WDTIMER_POS 28
#define MEMDMA1_POS 24 #define MEMDMA1_POS 24
#define MEMDMA0_POS 20 #define MEMDMA0_POS 20
...@@ -147,4 +89,4 @@ Core Emulation ** ...@@ -147,4 +89,4 @@ Core Emulation **
#define TIMER1_POS 4 #define TIMER1_POS 4
#define TIMER0_POS 0 #define TIMER0_POS 0
#endif /* _BF533_IRQ_H_ */ #endif
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <asm/reboot.h> #include <asm/reboot.h>
#include <asm/portmux.h> #include <asm/portmux.h>
#include <asm/dpmc.h> #include <asm/dpmc.h>
#include <asm/bfin_sport.h>
#ifdef CONFIG_REGULATOR_FIXED_VOLTAGE #ifdef CONFIG_REGULATOR_FIXED_VOLTAGE
#include <linux/regulator/fixed.h> #include <linux/regulator/fixed.h>
#endif #endif
...@@ -2585,27 +2586,103 @@ static struct platform_device bfin_dpmc = { ...@@ -2585,27 +2586,103 @@ static struct platform_device bfin_dpmc = {
}, },
}; };
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) || \
defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE)
#define SPORT_REQ(x) \
[x] = {P_SPORT##x##_TFS, P_SPORT##x##_DTPRI, P_SPORT##x##_TSCLK, \
P_SPORT##x##_RFS, P_SPORT##x##_DRPRI, P_SPORT##x##_RSCLK, 0}
static const u16 bfin_snd_pin[][7] = {
SPORT_REQ(0),
SPORT_REQ(1),
};
static struct bfin_snd_platform_data bfin_snd_data[] = {
{
.pin_req = &bfin_snd_pin[0][0],
},
{
.pin_req = &bfin_snd_pin[1][0],
},
};
#define BFIN_SND_RES(x) \
[x] = { \
{ \
.start = SPORT##x##_TCR1, \
.end = SPORT##x##_TCR1, \
.flags = IORESOURCE_MEM \
}, \
{ \
.start = CH_SPORT##x##_RX, \
.end = CH_SPORT##x##_RX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = CH_SPORT##x##_TX, \
.end = CH_SPORT##x##_TX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = IRQ_SPORT##x##_ERROR, \
.end = IRQ_SPORT##x##_ERROR, \
.flags = IORESOURCE_IRQ, \
} \
}
static struct resource bfin_snd_resources[][4] = {
BFIN_SND_RES(0),
BFIN_SND_RES(1),
};
static struct platform_device bfin_pcm = {
.name = "bfin-pcm-audio",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_SOC_AD73311) || defined(CONFIG_SND_BF5XX_SOC_AD73311_MODULE)
static struct platform_device bfin_ad73311_codec_device = {
.name = "ad73311",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_SOC_I2S) || defined(CONFIG_SND_BF5XX_SOC_I2S_MODULE)
static struct platform_device bfin_i2s = { static struct platform_device bfin_i2s = {
.name = "bfin-i2s", .name = "bfin-i2s",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
#if defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_TDM) || defined(CONFIG_SND_BF5XX_SOC_TDM_MODULE)
static struct platform_device bfin_tdm = { static struct platform_device bfin_tdm = {
.name = "bfin-tdm", .name = "bfin-tdm",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
#if defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_AC97) || defined(CONFIG_SND_BF5XX_SOC_AC97_MODULE)
static struct platform_device bfin_ac97 = { static struct platform_device bfin_ac97 = {
.name = "bfin-ac97", .name = "bfin-ac97",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
...@@ -2796,17 +2873,28 @@ static struct platform_device *stamp_devices[] __initdata = { ...@@ -2796,17 +2873,28 @@ static struct platform_device *stamp_devices[] __initdata = {
&stamp_flash_device, &stamp_flash_device,
#endif #endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) || \
defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE)
&bfin_pcm,
#endif
#if defined(CONFIG_SND_BF5XX_SOC_AD73311) || defined(CONFIG_SND_BF5XX_SOC_AD73311_MODULE)
&bfin_ad73311_codec_device,
#endif
#if defined(CONFIG_SND_BF5XX_SOC_I2S) || defined(CONFIG_SND_BF5XX_SOC_I2S_MODULE)
&bfin_i2s, &bfin_i2s,
#endif #endif
#if defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_TDM) || defined(CONFIG_SND_BF5XX_SOC_TDM_MODULE)
&bfin_tdm, &bfin_tdm,
#endif #endif
#if defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_AC97) || defined(CONFIG_SND_BF5XX_SOC_AC97_MODULE)
&bfin_ac97, &bfin_ac97,
#endif #endif
#if defined(CONFIG_REGULATOR_AD5398) || defined(CONFIG_REGULATOR_AD5398_MODULE) #if defined(CONFIG_REGULATOR_AD5398) || defined(CONFIG_REGULATOR_AD5398_MODULE)
#if defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER) || \ #if defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER) || \
defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER_MODULE) defined(CONFIG_REGULATOR_VIRTUAL_CONSUMER_MODULE)
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision D, 09/18/2008; ADSP-BF534/ADSP-BF536/ADSP-BF537 Blackfin Processor Anomaly List * - Revision E, 05/25/2010; ADSP-BF534/ADSP-BF536/ADSP-BF537 Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -160,12 +160,16 @@ ...@@ -160,12 +160,16 @@
#define ANOMALY_05000443 (1) #define ANOMALY_05000443 (1)
/* False Hardware Error when RETI Points to Invalid Memory */ /* False Hardware Error when RETI Points to Invalid Memory */
#define ANOMALY_05000461 (1) #define ANOMALY_05000461 (1)
/* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */
#define ANOMALY_05000462 (1)
/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */ /* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
#define ANOMALY_05000473 (1) #define ANOMALY_05000473 (1)
/* Possible Lockup Condition whem Modifying PLL from External Memory */ /* Possible Lockup Condition whem Modifying PLL from External Memory */
#define ANOMALY_05000475 (1) #define ANOMALY_05000475 (1)
/* TESTSET Instruction Cannot Be Interrupted */ /* TESTSET Instruction Cannot Be Interrupted */
#define ANOMALY_05000477 (1) #define ANOMALY_05000477 (1)
/* Multiple Simultaneous Urgent DMA Requests May Cause DMA System Instability */
#define ANOMALY_05000480 (__SILICON_REVISION__ < 3)
/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */ /* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
#define ANOMALY_05000481 (1) #define ANOMALY_05000481 (1)
/* IFLUSH sucks at life */ /* IFLUSH sucks at life */
...@@ -204,6 +208,7 @@ ...@@ -204,6 +208,7 @@
#define ANOMALY_05000363 (0) #define ANOMALY_05000363 (0)
#define ANOMALY_05000364 (0) #define ANOMALY_05000364 (0)
#define ANOMALY_05000380 (0) #define ANOMALY_05000380 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000386 (1) #define ANOMALY_05000386 (1)
#define ANOMALY_05000389 (0) #define ANOMALY_05000389 (0)
#define ANOMALY_05000400 (0) #define ANOMALY_05000400 (0)
...@@ -211,6 +216,7 @@ ...@@ -211,6 +216,7 @@
#define ANOMALY_05000430 (0) #define ANOMALY_05000430 (0)
#define ANOMALY_05000432 (0) #define ANOMALY_05000432 (0)
#define ANOMALY_05000435 (0) #define ANOMALY_05000435 (0)
#define ANOMALY_05000440 (0)
#define ANOMALY_05000447 (0) #define ANOMALY_05000447 (0)
#define ANOMALY_05000448 (0) #define ANOMALY_05000448 (0)
#define ANOMALY_05000456 (0) #define ANOMALY_05000456 (0)
......
...@@ -7,79 +7,53 @@ ...@@ -7,79 +7,53 @@
#ifndef _BF537_IRQ_H_ #ifndef _BF537_IRQ_H_
#define _BF537_IRQ_H_ #define _BF537_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
* Event Source Core Event Name
* Core Emulation **
* Events (highest priority) EMU 0
* Reset RST 1
* NMI NMI 2
* Exception EVX 3
* Reserved -- 4
* Hardware Error IVHW 5
* Core Timer IVTMR 6
* .....
*
* Softirq IVG14
* System Call --
* (lowest priority) IVG15
*/
#define SYS_IRQS 39
#define NR_PERI_INTS 32 #define NR_PERI_INTS 32
/* The ABSTRACT IRQ definitions */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
/** the first seven of the following are fixed, the rest you change if you need to **/ #define IRQ_DMA_ERROR BFIN_IRQ(1) /* DMA Error (general) */
#define IRQ_EMU 0 /*Emulation */ #define IRQ_GENERIC_ERROR BFIN_IRQ(2) /* GENERIC Error Interrupt */
#define IRQ_RST 1 /*reset */ #define IRQ_RTC BFIN_IRQ(3) /* RTC Interrupt */
#define IRQ_NMI 2 /*Non Maskable */ #define IRQ_PPI BFIN_IRQ(4) /* DMA0 Interrupt (PPI) */
#define IRQ_EVX 3 /*Exception */ #define IRQ_SPORT0_RX BFIN_IRQ(5) /* DMA3 Interrupt (SPORT0 RX) */
#define IRQ_UNUSED 4 /*- unused interrupt*/ #define IRQ_SPORT0_TX BFIN_IRQ(6) /* DMA4 Interrupt (SPORT0 TX) */
#define IRQ_HWERR 5 /*Hardware Error */ #define IRQ_SPORT1_RX BFIN_IRQ(7) /* DMA5 Interrupt (SPORT1 RX) */
#define IRQ_CORETMR 6 /*Core timer */ #define IRQ_SPORT1_TX BFIN_IRQ(8) /* DMA6 Interrupt (SPORT1 TX) */
#define IRQ_TWI BFIN_IRQ(9) /* TWI Interrupt */
#define IRQ_PLL_WAKEUP 7 /*PLL Wakeup Interrupt */ #define IRQ_SPI BFIN_IRQ(10) /* DMA7 Interrupt (SPI) */
#define IRQ_DMA_ERROR 8 /*DMA Error (general) */ #define IRQ_UART0_RX BFIN_IRQ(11) /* DMA8 Interrupt (UART0 RX) */
#define IRQ_GENERIC_ERROR 9 /*GENERIC Error Interrupt */ #define IRQ_UART0_TX BFIN_IRQ(12) /* DMA9 Interrupt (UART0 TX) */
#define IRQ_RTC 10 /*RTC Interrupt */ #define IRQ_UART1_RX BFIN_IRQ(13) /* DMA10 Interrupt (UART1 RX) */
#define IRQ_PPI 11 /*DMA0 Interrupt (PPI) */ #define IRQ_UART1_TX BFIN_IRQ(14) /* DMA11 Interrupt (UART1 TX) */
#define IRQ_SPORT0_RX 12 /*DMA3 Interrupt (SPORT0 RX) */ #define IRQ_CAN_RX BFIN_IRQ(15) /* CAN Receive Interrupt */
#define IRQ_SPORT0_TX 13 /*DMA4 Interrupt (SPORT0 TX) */ #define IRQ_CAN_TX BFIN_IRQ(16) /* CAN Transmit Interrupt */
#define IRQ_SPORT1_RX 14 /*DMA5 Interrupt (SPORT1 RX) */ #define IRQ_PH_INTA_MAC_RX BFIN_IRQ(17) /* Port H Interrupt A & DMA1 Interrupt (Ethernet RX) */
#define IRQ_SPORT1_TX 15 /*DMA6 Interrupt (SPORT1 TX) */ #define IRQ_PH_INTB_MAC_TX BFIN_IRQ(18) /* Port H Interrupt B & DMA2 Interrupt (Ethernet TX) */
#define IRQ_TWI 16 /*TWI Interrupt */ #define IRQ_TIMER0 BFIN_IRQ(19) /* Timer 0 */
#define IRQ_SPI 17 /*DMA7 Interrupt (SPI) */ #define IRQ_TIMER1 BFIN_IRQ(20) /* Timer 1 */
#define IRQ_UART0_RX 18 /*DMA8 Interrupt (UART0 RX) */ #define IRQ_TIMER2 BFIN_IRQ(21) /* Timer 2 */
#define IRQ_UART0_TX 19 /*DMA9 Interrupt (UART0 TX) */ #define IRQ_TIMER3 BFIN_IRQ(22) /* Timer 3 */
#define IRQ_UART1_RX 20 /*DMA10 Interrupt (UART1 RX) */ #define IRQ_TIMER4 BFIN_IRQ(23) /* Timer 4 */
#define IRQ_UART1_TX 21 /*DMA11 Interrupt (UART1 TX) */ #define IRQ_TIMER5 BFIN_IRQ(24) /* Timer 5 */
#define IRQ_CAN_RX 22 /*CAN Receive Interrupt */ #define IRQ_TIMER6 BFIN_IRQ(25) /* Timer 6 */
#define IRQ_CAN_TX 23 /*CAN Transmit Interrupt */ #define IRQ_TIMER7 BFIN_IRQ(26) /* Timer 7 */
#define IRQ_MAC_RX 24 /*DMA1 (Ethernet RX) Interrupt */ #define IRQ_PF_INTA_PG_INTA BFIN_IRQ(27) /* Ports F&G Interrupt A */
#define IRQ_MAC_TX 25 /*DMA2 (Ethernet TX) Interrupt */ #define IRQ_PORTG_INTB BFIN_IRQ(28) /* Port G Interrupt B */
#define IRQ_TIMER0 26 /*Timer 0 */ #define IRQ_MEM_DMA0 BFIN_IRQ(29) /* (Memory DMA Stream 0) */
#define IRQ_TIMER1 27 /*Timer 1 */ #define IRQ_MEM_DMA1 BFIN_IRQ(30) /* (Memory DMA Stream 1) */
#define IRQ_TIMER2 28 /*Timer 2 */ #define IRQ_PF_INTB_WATCH BFIN_IRQ(31) /* Watchdog & Port F Interrupt B */
#define IRQ_TIMER3 29 /*Timer 3 */
#define IRQ_TIMER4 30 /*Timer 4 */ #define SYS_IRQS 39
#define IRQ_TIMER5 31 /*Timer 5 */
#define IRQ_TIMER6 32 /*Timer 6 */ #define IRQ_PPI_ERROR 42 /* PPI Error Interrupt */
#define IRQ_TIMER7 33 /*Timer 7 */ #define IRQ_CAN_ERROR 43 /* CAN Error Interrupt */
#define IRQ_PROG_INTA 34 /* PF Ports F&G (PF15:0) Interrupt A */ #define IRQ_MAC_ERROR 44 /* MAC Status/Error Interrupt */
#define IRQ_PORTG_INTB 35 /* PF Port G (PF15:0) Interrupt B */ #define IRQ_SPORT0_ERROR 45 /* SPORT0 Error Interrupt */
#define IRQ_MEM_DMA0 36 /*(Memory DMA Stream 0) */ #define IRQ_SPORT1_ERROR 46 /* SPORT1 Error Interrupt */
#define IRQ_MEM_DMA1 37 /*(Memory DMA Stream 1) */ #define IRQ_SPI_ERROR 47 /* SPI Error Interrupt */
#define IRQ_PROG_INTB 38 /* PF Ports F (PF15:0) Interrupt B */ #define IRQ_UART0_ERROR 48 /* UART Error Interrupt */
#define IRQ_WATCH 38 /*Watch Dog Timer */ #define IRQ_UART1_ERROR 49 /* UART Error Interrupt */
#define IRQ_PPI_ERROR 42 /*PPI Error Interrupt */
#define IRQ_CAN_ERROR 43 /*CAN Error Interrupt */
#define IRQ_MAC_ERROR 44 /*MAC Status/Error Interrupt */
#define IRQ_SPORT0_ERROR 45 /*SPORT0 Error Interrupt */
#define IRQ_SPORT1_ERROR 46 /*SPORT1 Error Interrupt */
#define IRQ_SPI_ERROR 47 /*SPI Error Interrupt */
#define IRQ_UART0_ERROR 48 /*UART Error Interrupt */
#define IRQ_UART1_ERROR 49 /*UART Error Interrupt */
#define IRQ_PF0 50 #define IRQ_PF0 50
#define IRQ_PF1 51 #define IRQ_PF1 51
...@@ -143,20 +117,29 @@ ...@@ -143,20 +117,29 @@
#define IRQ_MAC_TXDMAERR 104 /* TX DMA Direction Error Interrupt */ #define IRQ_MAC_TXDMAERR 104 /* TX DMA Direction Error Interrupt */
#define IRQ_MAC_STMDONE 105 /* Station Mgt. Transfer Done Interrupt */ #define IRQ_MAC_STMDONE 105 /* Station Mgt. Transfer Done Interrupt */
#define NR_MACH_IRQS (IRQ_MAC_STMDONE + 1) #define IRQ_MAC_RX 106 /* DMA1 Interrupt (Ethernet RX) */
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS) #define IRQ_PORTH_INTA 107 /* Port H Interrupt A */
#if 0 /* No Interrupt B support (yet) */
#define IRQ_MAC_TX 108 /* DMA2 Interrupt (Ethernet TX) */
#define IRQ_PORTH_INTB 109 /* Port H Interrupt B */
#else
#define IRQ_MAC_TX IRQ_PH_INTB_MAC_TX
#endif
#define IRQ_PORTF_INTA 110 /* Port F Interrupt A */
#define IRQ_PORTG_INTA 111 /* Port G Interrupt A */
#define IVG7 7 #if 0 /* No Interrupt B support (yet) */
#define IVG8 8 #define IRQ_WATCH 112 /* Watchdog Timer */
#define IVG9 9 #define IRQ_PORTF_INTB 113 /* Port F Interrupt B */
#define IVG10 10 #else
#define IVG11 11 #define IRQ_WATCH IRQ_PF_INTB_WATCH
#define IVG12 12 #endif
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS*/ #define NR_MACH_IRQS (113 + 1)
/* IAR0 BIT FIELDS */
#define IRQ_PLL_WAKEUP_POS 0 #define IRQ_PLL_WAKEUP_POS 0
#define IRQ_DMA_ERROR_POS 4 #define IRQ_DMA_ERROR_POS 4
#define IRQ_ERROR_POS 8 #define IRQ_ERROR_POS 8
...@@ -166,7 +149,7 @@ ...@@ -166,7 +149,7 @@
#define IRQ_SPORT0_TX_POS 24 #define IRQ_SPORT0_TX_POS 24
#define IRQ_SPORT1_RX_POS 28 #define IRQ_SPORT1_RX_POS 28
/* IAR1 BIT FIELDS*/ /* IAR1 BIT FIELDS */
#define IRQ_SPORT1_TX_POS 0 #define IRQ_SPORT1_TX_POS 0
#define IRQ_TWI_POS 4 #define IRQ_TWI_POS 4
#define IRQ_SPI_POS 8 #define IRQ_SPI_POS 8
...@@ -176,7 +159,7 @@ ...@@ -176,7 +159,7 @@
#define IRQ_UART1_TX_POS 24 #define IRQ_UART1_TX_POS 24
#define IRQ_CAN_RX_POS 28 #define IRQ_CAN_RX_POS 28
/* IAR2 BIT FIELDS*/ /* IAR2 BIT FIELDS */
#define IRQ_CAN_TX_POS 0 #define IRQ_CAN_TX_POS 0
#define IRQ_MAC_RX_POS 4 #define IRQ_MAC_RX_POS 4
#define IRQ_MAC_TX_POS 8 #define IRQ_MAC_TX_POS 8
...@@ -186,7 +169,7 @@ ...@@ -186,7 +169,7 @@
#define IRQ_TIMER3_POS 24 #define IRQ_TIMER3_POS 24
#define IRQ_TIMER4_POS 28 #define IRQ_TIMER4_POS 28
/* IAR3 BIT FIELDS*/ /* IAR3 BIT FIELDS */
#define IRQ_TIMER5_POS 0 #define IRQ_TIMER5_POS 0
#define IRQ_TIMER6_POS 4 #define IRQ_TIMER6_POS 4
#define IRQ_TIMER7_POS 8 #define IRQ_TIMER7_POS 8
...@@ -196,4 +179,6 @@ ...@@ -196,4 +179,6 @@
#define IRQ_MEM_DMA1_POS 24 #define IRQ_MEM_DMA1_POS 24
#define IRQ_WATCH_POS 28 #define IRQ_WATCH_POS 28
#endif /* _BF537_IRQ_H_ */ #define init_mach_irq init_mach_irq
#endif
...@@ -10,6 +10,13 @@ ...@@ -10,6 +10,13 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/blackfin.h> #include <asm/blackfin.h>
#include <asm/irq_handler.h>
#include <asm/bfin5xx_spi.h>
#include <asm/bfin_sport.h>
#include <asm/bfin_can.h>
#include <asm/bfin_dma.h>
#include <asm/dpmc.h>
void __init program_IAR(void) void __init program_IAR(void)
{ {
/* Program the IAR0 Register with the configured priority */ /* Program the IAR0 Register with the configured priority */
...@@ -51,3 +58,159 @@ void __init program_IAR(void) ...@@ -51,3 +58,159 @@ void __init program_IAR(void)
SSYNC(); SSYNC();
} }
#define SPI_ERR_MASK (BIT_STAT_TXCOL | BIT_STAT_RBSY | BIT_STAT_MODF | BIT_STAT_TXE) /* SPI_STAT */
#define SPORT_ERR_MASK (ROVF | RUVF | TOVF | TUVF) /* SPORT_STAT */
#define PPI_ERR_MASK (0xFFFF & ~FLD) /* PPI_STATUS */
#define EMAC_ERR_MASK (PHYINT | MMCINT | RXFSINT | TXFSINT | WAKEDET | RXDMAERR | TXDMAERR | STMDONE) /* EMAC_SYSTAT */
#define UART_ERR_MASK (0x6) /* UART_IIR */
#define CAN_ERR_MASK (EWTIF | EWRIF | EPIF | BOIF | WUIF | UIAIF | AAIF | RMLIF | UCEIF | EXTIF | ADIF) /* CAN_GIF */
static int error_int_mask;
static void bf537_generic_error_mask_irq(struct irq_data *d)
{
error_int_mask &= ~(1L << (d->irq - IRQ_PPI_ERROR));
if (!error_int_mask)
bfin_internal_mask_irq(IRQ_GENERIC_ERROR);
}
static void bf537_generic_error_unmask_irq(struct irq_data *d)
{
bfin_internal_unmask_irq(IRQ_GENERIC_ERROR);
error_int_mask |= 1L << (d->irq - IRQ_PPI_ERROR);
}
static struct irq_chip bf537_generic_error_irqchip = {
.name = "ERROR",
.irq_ack = bfin_ack_noop,
.irq_mask_ack = bf537_generic_error_mask_irq,
.irq_mask = bf537_generic_error_mask_irq,
.irq_unmask = bf537_generic_error_unmask_irq,
};
static void bf537_demux_error_irq(unsigned int int_err_irq,
struct irq_desc *inta_desc)
{
int irq = 0;
#if (defined(CONFIG_BF537) || defined(CONFIG_BF536))
if (bfin_read_EMAC_SYSTAT() & EMAC_ERR_MASK)
irq = IRQ_MAC_ERROR;
else
#endif
if (bfin_read_SPORT0_STAT() & SPORT_ERR_MASK)
irq = IRQ_SPORT0_ERROR;
else if (bfin_read_SPORT1_STAT() & SPORT_ERR_MASK)
irq = IRQ_SPORT1_ERROR;
else if (bfin_read_PPI_STATUS() & PPI_ERR_MASK)
irq = IRQ_PPI_ERROR;
else if (bfin_read_CAN_GIF() & CAN_ERR_MASK)
irq = IRQ_CAN_ERROR;
else if (bfin_read_SPI_STAT() & SPI_ERR_MASK)
irq = IRQ_SPI_ERROR;
else if ((bfin_read_UART0_IIR() & UART_ERR_MASK) == UART_ERR_MASK)
irq = IRQ_UART0_ERROR;
else if ((bfin_read_UART1_IIR() & UART_ERR_MASK) == UART_ERR_MASK)
irq = IRQ_UART1_ERROR;
if (irq) {
if (error_int_mask & (1L << (irq - IRQ_PPI_ERROR)))
bfin_handle_irq(irq);
else {
switch (irq) {
case IRQ_PPI_ERROR:
bfin_write_PPI_STATUS(PPI_ERR_MASK);
break;
#if (defined(CONFIG_BF537) || defined(CONFIG_BF536))
case IRQ_MAC_ERROR:
bfin_write_EMAC_SYSTAT(EMAC_ERR_MASK);
break;
#endif
case IRQ_SPORT0_ERROR:
bfin_write_SPORT0_STAT(SPORT_ERR_MASK);
break;
case IRQ_SPORT1_ERROR:
bfin_write_SPORT1_STAT(SPORT_ERR_MASK);
break;
case IRQ_CAN_ERROR:
bfin_write_CAN_GIS(CAN_ERR_MASK);
break;
case IRQ_SPI_ERROR:
bfin_write_SPI_STAT(SPI_ERR_MASK);
break;
default:
break;
}
pr_debug("IRQ %d:"
" MASKED PERIPHERAL ERROR INTERRUPT ASSERTED\n",
irq);
}
} else
pr_err("%s: IRQ ?: PERIPHERAL ERROR INTERRUPT ASSERTED BUT NO SOURCE FOUND\n",
__func__);
}
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
static int mac_rx_int_mask;
static void bf537_mac_rx_mask_irq(struct irq_data *d)
{
mac_rx_int_mask &= ~(1L << (d->irq - IRQ_MAC_RX));
if (!mac_rx_int_mask)
bfin_internal_mask_irq(IRQ_PH_INTA_MAC_RX);
}
static void bf537_mac_rx_unmask_irq(struct irq_data *d)
{
bfin_internal_unmask_irq(IRQ_PH_INTA_MAC_RX);
mac_rx_int_mask |= 1L << (d->irq - IRQ_MAC_RX);
}
static struct irq_chip bf537_mac_rx_irqchip = {
.name = "ERROR",
.irq_ack = bfin_ack_noop,
.irq_mask_ack = bf537_mac_rx_mask_irq,
.irq_mask = bf537_mac_rx_mask_irq,
.irq_unmask = bf537_mac_rx_unmask_irq,
};
static void bf537_demux_mac_rx_irq(unsigned int int_irq,
struct irq_desc *desc)
{
if (bfin_read_DMA1_IRQ_STATUS() & (DMA_DONE | DMA_ERR))
bfin_handle_irq(IRQ_MAC_RX);
else
bfin_demux_gpio_irq(int_irq, desc);
}
#endif
void __init init_mach_irq(void)
{
int irq;
#if defined(CONFIG_BF537) || defined(CONFIG_BF536)
/* Clear EMAC Interrupt Status bits so we can demux it later */
bfin_write_EMAC_SYSTAT(-1);
#endif
irq_set_chained_handler(IRQ_GENERIC_ERROR, bf537_demux_error_irq);
for (irq = IRQ_PPI_ERROR; irq <= IRQ_UART1_ERROR; irq++)
irq_set_chip_and_handler(irq, &bf537_generic_error_irqchip,
handle_level_irq);
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
irq_set_chained_handler(IRQ_PH_INTA_MAC_RX, bf537_demux_mac_rx_irq);
irq_set_chip_and_handler(IRQ_MAC_RX, &bf537_mac_rx_irqchip, handle_level_irq);
irq_set_chip_and_handler(IRQ_PORTH_INTA, &bf537_mac_rx_irqchip, handle_level_irq);
irq_set_chained_handler(IRQ_MAC_ERROR, bfin_demux_mac_status_irq);
#endif
}
...@@ -5,14 +5,14 @@ ...@@ -5,14 +5,14 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision H, 07/10/2009; ADSP-BF538/BF538F Blackfin Processor Anomaly List * - Revision I, 05/25/2010; ADSP-BF538/BF538F Blackfin Processor Anomaly List
* - Revision M, 07/10/2009; ADSP-BF539/BF539F Blackfin Processor Anomaly List * - Revision N, 05/25/2010; ADSP-BF539/BF539F Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -179,6 +179,7 @@ ...@@ -179,6 +179,7 @@
#define ANOMALY_05000363 (0) #define ANOMALY_05000363 (0)
#define ANOMALY_05000364 (0) #define ANOMALY_05000364 (0)
#define ANOMALY_05000380 (0) #define ANOMALY_05000380 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000386 (1) #define ANOMALY_05000386 (1)
#define ANOMALY_05000389 (0) #define ANOMALY_05000389 (0)
#define ANOMALY_05000400 (0) #define ANOMALY_05000400 (0)
...@@ -186,6 +187,7 @@ ...@@ -186,6 +187,7 @@
#define ANOMALY_05000430 (0) #define ANOMALY_05000430 (0)
#define ANOMALY_05000432 (0) #define ANOMALY_05000432 (0)
#define ANOMALY_05000435 (0) #define ANOMALY_05000435 (0)
#define ANOMALY_05000440 (0)
#define ANOMALY_05000447 (0) #define ANOMALY_05000447 (0)
#define ANOMALY_05000448 (0) #define ANOMALY_05000448 (0)
#define ANOMALY_05000456 (0) #define ANOMALY_05000456 (0)
...@@ -193,6 +195,7 @@ ...@@ -193,6 +195,7 @@
#define ANOMALY_05000465 (0) #define ANOMALY_05000465 (0)
#define ANOMALY_05000467 (0) #define ANOMALY_05000467 (0)
#define ANOMALY_05000474 (0) #define ANOMALY_05000474 (0)
#define ANOMALY_05000480 (0)
#define ANOMALY_05000485 (0) #define ANOMALY_05000485 (0)
#endif #endif
...@@ -7,39 +7,10 @@ ...@@ -7,39 +7,10 @@
#ifndef _BF538_IRQ_H_ #ifndef _BF538_IRQ_H_
#define _BF538_IRQ_H_ #define _BF538_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
Event Source Core Event Name
Core Emulation **
Events (highest priority) EMU 0
Reset RST 1
NMI NMI 2
Exception EVX 3
Reserved -- 4
Hardware Error IVHW 5
Core Timer IVTMR 6 *
.....
Software Interrupt 1 IVG14 31
Software Interrupt 2 --
(lowest priority) IVG15 32 *
*/
#define NR_PERI_INTS (2 * 32) #define NR_PERI_INTS (2 * 32)
/* The ABSTRACT IRQ definitions */
/** the first seven of the following are fixed, the rest you change if you need to **/
#define IRQ_EMU 0 /* Emulation */
#define IRQ_RST 1 /* reset */
#define IRQ_NMI 2 /* Non Maskable */
#define IRQ_EVX 3 /* Exception */
#define IRQ_UNUSED 4 /* - unused interrupt */
#define IRQ_HWERR 5 /* Hardware Error */
#define IRQ_CORETMR 6 /* Core timer */
#define BFIN_IRQ(x) ((x) + 7)
#define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
#define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */ #define IRQ_DMA0_ERROR BFIN_IRQ(1) /* DMA Error 0 (generic) */
#define IRQ_PPI_ERROR BFIN_IRQ(2) /* PPI Error */ #define IRQ_PPI_ERROR BFIN_IRQ(2) /* PPI Error */
...@@ -111,17 +82,6 @@ ...@@ -111,17 +82,6 @@
#define GPIO_IRQ_BASE IRQ_PF0 #define GPIO_IRQ_BASE IRQ_PF0
#define NR_MACH_IRQS (IRQ_PF15 + 1) #define NR_MACH_IRQS (IRQ_PF15 + 1)
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS */ /* IAR0 BIT FIELDS */
#define IRQ_PLL_WAKEUP_POS 0 #define IRQ_PLL_WAKEUP_POS 0
...@@ -184,4 +144,5 @@ ...@@ -184,4 +144,5 @@
#define IRQ_CAN_TX_POS 0 #define IRQ_CAN_TX_POS 0
#define IRQ_MEM1_DMA0_POS 4 #define IRQ_MEM1_DMA0_POS 4
#define IRQ_MEM1_DMA1_POS 8 #define IRQ_MEM1_DMA1_POS 8
#endif /* _BF538_IRQ_H_ */
#endif
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/nand.h> #include <asm/nand.h>
#include <asm/dpmc.h> #include <asm/dpmc.h>
#include <asm/bfin_sport.h>
#include <asm/portmux.h> #include <asm/portmux.h>
#include <asm/bfin_sdh.h> #include <asm/bfin_sdh.h>
#include <mach/bf54x_keys.h> #include <mach/bf54x_keys.h>
...@@ -956,7 +957,15 @@ static struct mtd_partition ezkit_partitions[] = { ...@@ -956,7 +957,15 @@ static struct mtd_partition ezkit_partitions[] = {
.offset = MTDPART_OFS_APPEND, .offset = MTDPART_OFS_APPEND,
}, { }, {
.name = "file system(nor)", .name = "file system(nor)",
.size = MTDPART_SIZ_FULL, .size = 0x1000000 - 0x80000 - 0x400000 - 0x8000 * 4,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "config(nor)",
.size = 0x8000 * 3,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "u-boot env(nor)",
.size = 0x8000,
.offset = MTDPART_OFS_APPEND, .offset = MTDPART_OFS_APPEND,
} }
}; };
...@@ -1312,27 +1321,110 @@ static struct platform_device bfin_dpmc = { ...@@ -1312,27 +1321,110 @@ static struct platform_device bfin_dpmc = {
}, },
}; };
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) || \
defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE)
#define SPORT_REQ(x) \
[x] = {P_SPORT##x##_TFS, P_SPORT##x##_DTPRI, P_SPORT##x##_TSCLK, \
P_SPORT##x##_RFS, P_SPORT##x##_DRPRI, P_SPORT##x##_RSCLK, 0}
static const u16 bfin_snd_pin[][7] = {
SPORT_REQ(0),
SPORT_REQ(1),
};
static struct bfin_snd_platform_data bfin_snd_data[] = {
{
.pin_req = &bfin_snd_pin[0][0],
},
{
.pin_req = &bfin_snd_pin[1][0],
},
};
#define BFIN_SND_RES(x) \
[x] = { \
{ \
.start = SPORT##x##_TCR1, \
.end = SPORT##x##_TCR1, \
.flags = IORESOURCE_MEM \
}, \
{ \
.start = CH_SPORT##x##_RX, \
.end = CH_SPORT##x##_RX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = CH_SPORT##x##_TX, \
.end = CH_SPORT##x##_TX, \
.flags = IORESOURCE_DMA, \
}, \
{ \
.start = IRQ_SPORT##x##_ERROR, \
.end = IRQ_SPORT##x##_ERROR, \
.flags = IORESOURCE_IRQ, \
} \
}
static struct resource bfin_snd_resources[][4] = {
BFIN_SND_RES(0),
BFIN_SND_RES(1),
};
static struct platform_device bfin_pcm = {
.name = "bfin-pcm-audio",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_SOC_AD73311) || defined(CONFIG_SND_BF5XX_SOC_AD73311_MODULE)
static struct platform_device bfin_ad73311_codec_device = {
.name = "ad73311",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_SOC_AD1980) || defined(CONFIG_SND_BF5XX_SOC_AD1980_MODULE)
static struct platform_device bfin_ad1980_codec_device = {
.name = "ad1980",
.id = -1,
};
#endif
#if defined(CONFIG_SND_BF5XX_SOC_I2S) || defined(CONFIG_SND_BF5XX_SOC_I2S_MODULE)
static struct platform_device bfin_i2s = { static struct platform_device bfin_i2s = {
.name = "bfin-i2s", .name = "bfin-i2s",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
#if defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_TDM) || defined(CONFIG_SND_BF5XX_SOC_TDM_MODULE)
static struct platform_device bfin_tdm = { static struct platform_device bfin_tdm = {
.name = "bfin-tdm", .name = "bfin-tdm",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
#if defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE) #if defined(CONFIG_SND_BF5XX_SOC_AC97) || defined(CONFIG_SND_BF5XX_SOC_AC97_MODULE)
static struct platform_device bfin_ac97 = { static struct platform_device bfin_ac97 = {
.name = "bfin-ac97", .name = "bfin-ac97",
.id = CONFIG_SND_BF5XX_SPORT_NUM, .id = CONFIG_SND_BF5XX_SPORT_NUM,
/* TODO: add platform data here */ .num_resources = ARRAY_SIZE(bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM]),
.resource = bfin_snd_resources[CONFIG_SND_BF5XX_SPORT_NUM],
.dev = {
.platform_data = &bfin_snd_data[CONFIG_SND_BF5XX_SPORT_NUM],
},
}; };
#endif #endif
...@@ -1450,6 +1542,16 @@ static struct platform_device *ezkit_devices[] __initdata = { ...@@ -1450,6 +1542,16 @@ static struct platform_device *ezkit_devices[] __initdata = {
&ezkit_flash_device, &ezkit_flash_device,
#endif #endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) || \
defined(CONFIG_SND_BF5XX_TDM) || defined(CONFIG_SND_BF5XX_TDM_MODULE) || \
defined(CONFIG_SND_BF5XX_AC97) || defined(CONFIG_SND_BF5XX_AC97_MODULE)
&bfin_pcm,
#endif
#if defined(CONFIG_SND_BF5XX_SOC_AD1980) || defined(CONFIG_SND_BF5XX_SOC_AD1980_MODULE)
&bfin_ad1980_codec_device,
#endif
#if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE) #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE)
&bfin_i2s, &bfin_i2s,
#endif #endif
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision I, 07/23/2009; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List * - Revision J, 06/03/2010; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -220,6 +220,8 @@ ...@@ -220,6 +220,8 @@
#define ANOMALY_05000481 (1) #define ANOMALY_05000481 (1)
/* Possible USB Data Corruption When Multiple Endpoints Are Accessed by the Core */ /* Possible USB Data Corruption When Multiple Endpoints Are Accessed by the Core */
#define ANOMALY_05000483 (1) #define ANOMALY_05000483 (1)
/* DDR Trim May Not Be Performed for Certain VLEV Values in OTP Page PBS00L */
#define ANOMALY_05000484 (__SILICON_REVISION__ < 3)
/* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */ /* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */
#define ANOMALY_05000485 (__SILICON_REVISION__ >= 2) #define ANOMALY_05000485 (__SILICON_REVISION__ >= 2)
/* IFLUSH sucks at life */ /* IFLUSH sucks at life */
...@@ -274,6 +276,8 @@ ...@@ -274,6 +276,8 @@
#define ANOMALY_05000412 (0) #define ANOMALY_05000412 (0)
#define ANOMALY_05000432 (0) #define ANOMALY_05000432 (0)
#define ANOMALY_05000435 (0) #define ANOMALY_05000435 (0)
#define ANOMALY_05000440 (0)
#define ANOMALY_05000475 (0) #define ANOMALY_05000475 (0)
#define ANOMALY_05000480 (0)
#endif #endif
...@@ -7,38 +7,9 @@ ...@@ -7,38 +7,9 @@
#ifndef _BF548_IRQ_H_ #ifndef _BF548_IRQ_H_
#define _BF548_IRQ_H_ #define _BF548_IRQ_H_
/* #include <mach-common/irq.h>
* Interrupt source definitions
Event Source Core Event Name
Core Emulation **
Events (highest priority) EMU 0
Reset RST 1
NMI NMI 2
Exception EVX 3
Reserved -- 4
Hardware Error IVHW 5
Core Timer IVTMR 6 *
.....
Software Interrupt 1 IVG14 31
Software Interrupt 2 --
(lowest priority) IVG15 32 *
*/
#define NR_PERI_INTS (32 * 3)
/* The ABSTRACT IRQ definitions */
/** the first seven of the following are fixed, the rest you change if you need to **/
#define IRQ_EMU 0 /* Emulation */
#define IRQ_RST 1 /* reset */
#define IRQ_NMI 2 /* Non Maskable */
#define IRQ_EVX 3 /* Exception */
#define IRQ_UNUSED 4 /* - unused interrupt*/
#define IRQ_HWERR 5 /* Hardware Error */
#define IRQ_CORETMR 6 /* Core timer */
#define BFIN_IRQ(x) ((x) + 7) #define NR_PERI_INTS (3 * 32)
#define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */ #define IRQ_PLL_WAKEUP BFIN_IRQ(0) /* PLL Wakeup Interrupt */
#define IRQ_DMAC0_ERROR BFIN_IRQ(1) /* DMAC0 Status Interrupt */ #define IRQ_DMAC0_ERROR BFIN_IRQ(1) /* DMAC0 Status Interrupt */
...@@ -314,7 +285,6 @@ Events (highest priority) EMU 0 ...@@ -314,7 +285,6 @@ Events (highest priority) EMU 0
#define GPIO_IRQ_BASE IRQ_PA0 #define GPIO_IRQ_BASE IRQ_PA0
#define NR_MACH_IRQS (IRQ_PJ15 + 1) #define NR_MACH_IRQS (IRQ_PJ15 + 1)
#define NR_IRQS (NR_MACH_IRQS + NR_SPARE_IRQS)
/* For compatibility reasons with existing code */ /* For compatibility reasons with existing code */
...@@ -343,17 +313,6 @@ Events (highest priority) EMU 0 ...@@ -343,17 +313,6 @@ Events (highest priority) EMU 0
#define IRQ_CAN1_ERR IRQ_CAN1_ERROR #define IRQ_CAN1_ERR IRQ_CAN1_ERROR
#define IRQ_HS_DMA_ERR IRQ_HS_DMA_ERROR #define IRQ_HS_DMA_ERR IRQ_HS_DMA_ERROR
#define IVG7 7
#define IVG8 8
#define IVG9 9
#define IVG10 10
#define IVG11 11
#define IVG12 12
#define IVG13 13
#define IVG14 14
#define IVG15 15
/* IAR0 BIT FIELDS */ /* IAR0 BIT FIELDS */
#define IRQ_PLL_WAKEUP_POS 0 #define IRQ_PLL_WAKEUP_POS 0
#define IRQ_DMAC0_ERR_POS 4 #define IRQ_DMAC0_ERR_POS 4
...@@ -492,4 +451,4 @@ struct bfin_pint_regs { ...@@ -492,4 +451,4 @@ struct bfin_pint_regs {
#endif #endif
#endif /* _BF548_IRQ_H_ */ #endif
...@@ -247,7 +247,15 @@ static struct mtd_partition ezkit_partitions[] = { ...@@ -247,7 +247,15 @@ static struct mtd_partition ezkit_partitions[] = {
.offset = MTDPART_OFS_APPEND, .offset = MTDPART_OFS_APPEND,
}, { }, {
.name = "file system(nor)", .name = "file system(nor)",
.size = MTDPART_SIZ_FULL, .size = 0x800000 - 0x40000 - 0x1C0000 - 0x2000 * 8,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "config(nor)",
.size = 0x2000 * 7,
.offset = MTDPART_OFS_APPEND,
}, {
.name = "u-boot env(nor)",
.size = 0x2000,
.offset = MTDPART_OFS_APPEND, .offset = MTDPART_OFS_APPEND,
} }
}; };
......
...@@ -5,13 +5,13 @@ ...@@ -5,13 +5,13 @@
* and can be replaced with that version at any time * and can be replaced with that version at any time
* DO NOT EDIT THIS FILE * DO NOT EDIT THIS FILE
* *
* Copyright 2004-2010 Analog Devices Inc. * Copyright 2004-2011 Analog Devices Inc.
* Licensed under the ADI BSD license. * Licensed under the ADI BSD license.
* https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd * https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
*/ */
/* This file should be up to date with: /* This file should be up to date with:
* - Revision Q, 11/07/2008; ADSP-BF561 Blackfin Processor Anomaly List * - Revision R, 05/25/2010; ADSP-BF561 Blackfin Processor Anomaly List
*/ */
#ifndef _MACH_ANOMALY_H_ #ifndef _MACH_ANOMALY_H_
...@@ -290,12 +290,18 @@ ...@@ -290,12 +290,18 @@
#define ANOMALY_05000428 (__SILICON_REVISION__ > 3) #define ANOMALY_05000428 (__SILICON_REVISION__ > 3)
/* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */ /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
#define ANOMALY_05000443 (1) #define ANOMALY_05000443 (1)
/* SCKELOW Feature Is Not Functional */
#define ANOMALY_05000458 (1)
/* False Hardware Error when RETI Points to Invalid Memory */ /* False Hardware Error when RETI Points to Invalid Memory */
#define ANOMALY_05000461 (1) #define ANOMALY_05000461 (1)
/* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */
#define ANOMALY_05000462 (1)
/* Boot Failure When SDRAM Control Signals Toggle Coming Out Of Reset */
#define ANOMALY_05000471 (1)
/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */ /* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
#define ANOMALY_05000473 (1) #define ANOMALY_05000473 (1)
/* Possible Lockup Condition whem Modifying PLL from External Memory */ /* Possible Lockup Condition whem Modifying PLL from External Memory */
#define ANOMALY_05000475 (__SILICON_REVISION__ < 4) #define ANOMALY_05000475 (1)
/* TESTSET Instruction Cannot Be Interrupted */ /* TESTSET Instruction Cannot Be Interrupted */
#define ANOMALY_05000477 (1) #define ANOMALY_05000477 (1)
/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */ /* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
...@@ -314,12 +320,14 @@ ...@@ -314,12 +320,14 @@
#define ANOMALY_05000353 (1) #define ANOMALY_05000353 (1)
#define ANOMALY_05000364 (0) #define ANOMALY_05000364 (0)
#define ANOMALY_05000380 (0) #define ANOMALY_05000380 (0)
#define ANOMALY_05000383 (0)
#define ANOMALY_05000386 (1) #define ANOMALY_05000386 (1)
#define ANOMALY_05000389 (0) #define ANOMALY_05000389 (0)
#define ANOMALY_05000400 (0) #define ANOMALY_05000400 (0)
#define ANOMALY_05000430 (0) #define ANOMALY_05000430 (0)
#define ANOMALY_05000432 (0) #define ANOMALY_05000432 (0)
#define ANOMALY_05000435 (0) #define ANOMALY_05000435 (0)
#define ANOMALY_05000440 (0)
#define ANOMALY_05000447 (0) #define ANOMALY_05000447 (0)
#define ANOMALY_05000448 (0) #define ANOMALY_05000448 (0)
#define ANOMALY_05000456 (0) #define ANOMALY_05000456 (0)
...@@ -327,6 +335,7 @@ ...@@ -327,6 +335,7 @@
#define ANOMALY_05000465 (0) #define ANOMALY_05000465 (0)
#define ANOMALY_05000467 (0) #define ANOMALY_05000467 (0)
#define ANOMALY_05000474 (0) #define ANOMALY_05000474 (0)
#define ANOMALY_05000480 (0)
#define ANOMALY_05000485 (0) #define ANOMALY_05000485 (0)
#endif #endif
This diff is collapsed.
...@@ -24,17 +24,23 @@ static DEFINE_SPINLOCK(boot_lock); ...@@ -24,17 +24,23 @@ static DEFINE_SPINLOCK(boot_lock);
void __init platform_init_cpus(void) void __init platform_init_cpus(void)
{ {
cpu_set(0, cpu_possible_map); /* CoreA */ struct cpumask mask;
cpu_set(1, cpu_possible_map); /* CoreB */
cpumask_set_cpu(0, &mask); /* CoreA */
cpumask_set_cpu(1, &mask); /* CoreB */
init_cpu_possible(&mask);
} }
void __init platform_prepare_cpus(unsigned int max_cpus) void __init platform_prepare_cpus(unsigned int max_cpus)
{ {
struct cpumask mask;
bfin_relocate_coreb_l1_mem(); bfin_relocate_coreb_l1_mem();
/* Both cores ought to be present on a bf561! */ /* Both cores ought to be present on a bf561! */
cpu_set(0, cpu_present_map); /* CoreA */ cpumask_set_cpu(0, &mask); /* CoreA */
cpu_set(1, cpu_present_map); /* CoreB */ cpumask_set_cpu(1, &mask); /* CoreB */
init_cpu_present(&mask);
} }
int __init setup_profiling_timer(unsigned int multiplier) /* not supported */ int __init setup_profiling_timer(unsigned int multiplier) /* not supported */
...@@ -62,9 +68,6 @@ void __cpuinit platform_secondary_init(unsigned int cpu) ...@@ -62,9 +68,6 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
bfin_write_SICB_IWR1(IWR_DISABLE_ALL); bfin_write_SICB_IWR1(IWR_DISABLE_ALL);
SSYNC(); SSYNC();
/* Store CPU-private information to the cpu_data array. */
bfin_setup_cpudata(cpu);
/* We are done with local CPU inits, unblock the boot CPU. */ /* We are done with local CPU inits, unblock the boot CPU. */
set_cpu_online(cpu, true); set_cpu_online(cpu, true);
spin_lock(&boot_lock); spin_lock(&boot_lock);
......
...@@ -85,10 +85,11 @@ static void bfin_wakeup_cpu(void) ...@@ -85,10 +85,11 @@ static void bfin_wakeup_cpu(void)
{ {
unsigned int cpu; unsigned int cpu;
unsigned int this_cpu = smp_processor_id(); unsigned int this_cpu = smp_processor_id();
cpumask_t mask = cpu_online_map; cpumask_t mask;
cpu_clear(this_cpu, mask); cpumask_copy(&mask, cpu_online_mask);
for_each_cpu_mask(cpu, mask) cpumask_clear_cpu(this_cpu, &mask);
for_each_cpu(cpu, &mask)
platform_send_ipi_cpu(cpu, IRQ_SUPPLE_0); platform_send_ipi_cpu(cpu, IRQ_SUPPLE_0);
} }
......
This diff is collapsed.
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/irq_handler.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
...@@ -96,7 +97,7 @@ static void ipi_cpu_stop(unsigned int cpu) ...@@ -96,7 +97,7 @@ static void ipi_cpu_stop(unsigned int cpu)
dump_stack(); dump_stack();
spin_unlock(&stop_lock); spin_unlock(&stop_lock);
cpu_clear(cpu, cpu_online_map); set_cpu_online(cpu, false);
local_irq_disable(); local_irq_disable();
...@@ -146,7 +147,7 @@ static void ipi_call_function(unsigned int cpu, struct ipi_message *msg) ...@@ -146,7 +147,7 @@ static void ipi_call_function(unsigned int cpu, struct ipi_message *msg)
*/ */
resync_core_dcache(); resync_core_dcache();
#endif #endif
cpu_clear(cpu, *msg->call_struct.waitmask); cpumask_clear_cpu(cpu, msg->call_struct.waitmask);
} }
} }
...@@ -222,9 +223,10 @@ static inline void smp_send_message(cpumask_t callmap, unsigned long type, ...@@ -222,9 +223,10 @@ static inline void smp_send_message(cpumask_t callmap, unsigned long type,
struct ipi_message_queue *msg_queue; struct ipi_message_queue *msg_queue;
struct ipi_message *msg; struct ipi_message *msg;
unsigned long flags, next_msg; unsigned long flags, next_msg;
cpumask_t waitmask = callmap; /* waitmask is shared by all cpus */ cpumask_t waitmask; /* waitmask is shared by all cpus */
for_each_cpu_mask(cpu, callmap) { cpumask_copy(&waitmask, &callmap);
for_each_cpu(cpu, &callmap) {
msg_queue = &per_cpu(ipi_msg_queue, cpu); msg_queue = &per_cpu(ipi_msg_queue, cpu);
spin_lock_irqsave(&msg_queue->lock, flags); spin_lock_irqsave(&msg_queue->lock, flags);
if (msg_queue->count < BFIN_IPI_MSGQ_LEN) { if (msg_queue->count < BFIN_IPI_MSGQ_LEN) {
...@@ -246,7 +248,7 @@ static inline void smp_send_message(cpumask_t callmap, unsigned long type, ...@@ -246,7 +248,7 @@ static inline void smp_send_message(cpumask_t callmap, unsigned long type,
} }
if (wait) { if (wait) {
while (!cpus_empty(waitmask)) while (!cpumask_empty(&waitmask))
blackfin_dcache_invalidate_range( blackfin_dcache_invalidate_range(
(unsigned long)(&waitmask), (unsigned long)(&waitmask),
(unsigned long)(&waitmask)); (unsigned long)(&waitmask));
...@@ -265,9 +267,9 @@ int smp_call_function(void (*func)(void *info), void *info, int wait) ...@@ -265,9 +267,9 @@ int smp_call_function(void (*func)(void *info), void *info, int wait)
cpumask_t callmap; cpumask_t callmap;
preempt_disable(); preempt_disable();
callmap = cpu_online_map; cpumask_copy(&callmap, cpu_online_mask);
cpu_clear(smp_processor_id(), callmap); cpumask_clear_cpu(smp_processor_id(), &callmap);
if (!cpus_empty(callmap)) if (!cpumask_empty(&callmap))
smp_send_message(callmap, BFIN_IPI_CALL_FUNC, func, info, wait); smp_send_message(callmap, BFIN_IPI_CALL_FUNC, func, info, wait);
preempt_enable(); preempt_enable();
...@@ -284,8 +286,8 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, ...@@ -284,8 +286,8 @@ int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
if (cpu_is_offline(cpu)) if (cpu_is_offline(cpu))
return 0; return 0;
cpus_clear(callmap); cpumask_clear(&callmap);
cpu_set(cpu, callmap); cpumask_set_cpu(cpu, &callmap);
smp_send_message(callmap, BFIN_IPI_CALL_FUNC, func, info, wait); smp_send_message(callmap, BFIN_IPI_CALL_FUNC, func, info, wait);
...@@ -308,9 +310,9 @@ void smp_send_stop(void) ...@@ -308,9 +310,9 @@ void smp_send_stop(void)
cpumask_t callmap; cpumask_t callmap;
preempt_disable(); preempt_disable();
callmap = cpu_online_map; cpumask_copy(&callmap, cpu_online_mask);
cpu_clear(smp_processor_id(), callmap); cpumask_clear_cpu(smp_processor_id(), &callmap);
if (!cpus_empty(callmap)) if (!cpumask_empty(&callmap))
smp_send_message(callmap, BFIN_IPI_CPU_STOP, NULL, NULL, 0); smp_send_message(callmap, BFIN_IPI_CPU_STOP, NULL, NULL, 0);
preempt_enable(); preempt_enable();
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/rtc.h> #include <linux/rtc.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -764,7 +765,7 @@ EXPORT_SYMBOL(sram_alloc_with_lsl); ...@@ -764,7 +765,7 @@ EXPORT_SYMBOL(sram_alloc_with_lsl);
/* Need to keep line of output the same. Currently, that is 44 bytes /* Need to keep line of output the same. Currently, that is 44 bytes
* (including newline). * (including newline).
*/ */
static int _sram_proc_read(char *buf, int *len, int count, const char *desc, static int _sram_proc_show(struct seq_file *m, const char *desc,
struct sram_piece *pfree_head, struct sram_piece *pfree_head,
struct sram_piece *pused_head) struct sram_piece *pused_head)
{ {
...@@ -773,13 +774,13 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc, ...@@ -773,13 +774,13 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc,
if (!pfree_head || !pused_head) if (!pfree_head || !pused_head)
return -1; return -1;
*len += sprintf(&buf[*len], "--- SRAM %-14s Size PID State \n", desc); seq_printf(m, "--- SRAM %-14s Size PID State \n", desc);
/* search the relevant memory slot */ /* search the relevant memory slot */
pslot = pused_head->next; pslot = pused_head->next;
while (pslot != NULL) { while (pslot != NULL) {
*len += sprintf(&buf[*len], "%p-%p %10i %5i %-10s\n", seq_printf(m, "%p-%p %10i %5i %-10s\n",
pslot->paddr, pslot->paddr + pslot->size, pslot->paddr, pslot->paddr + pslot->size,
pslot->size, pslot->pid, "ALLOCATED"); pslot->size, pslot->pid, "ALLOCATED");
...@@ -789,7 +790,7 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc, ...@@ -789,7 +790,7 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc,
pslot = pfree_head->next; pslot = pfree_head->next;
while (pslot != NULL) { while (pslot != NULL) {
*len += sprintf(&buf[*len], "%p-%p %10i %5i %-10s\n", seq_printf(m, "%p-%p %10i %5i %-10s\n",
pslot->paddr, pslot->paddr + pslot->size, pslot->paddr, pslot->paddr + pslot->size,
pslot->size, pslot->pid, "FREE"); pslot->size, pslot->pid, "FREE");
...@@ -798,54 +799,62 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc, ...@@ -798,54 +799,62 @@ static int _sram_proc_read(char *buf, int *len, int count, const char *desc,
return 0; return 0;
} }
static int sram_proc_read(char *buf, char **start, off_t offset, int count, static int sram_proc_show(struct seq_file *m, void *v)
int *eof, void *data)
{ {
int len = 0;
unsigned int cpu; unsigned int cpu;
for (cpu = 0; cpu < num_possible_cpus(); ++cpu) { for (cpu = 0; cpu < num_possible_cpus(); ++cpu) {
if (_sram_proc_read(buf, &len, count, "Scratchpad", if (_sram_proc_show(m, "Scratchpad",
&per_cpu(free_l1_ssram_head, cpu), &per_cpu(used_l1_ssram_head, cpu))) &per_cpu(free_l1_ssram_head, cpu), &per_cpu(used_l1_ssram_head, cpu)))
goto not_done; goto not_done;
#if L1_DATA_A_LENGTH != 0 #if L1_DATA_A_LENGTH != 0
if (_sram_proc_read(buf, &len, count, "L1 Data A", if (_sram_proc_show(m, "L1 Data A",
&per_cpu(free_l1_data_A_sram_head, cpu), &per_cpu(free_l1_data_A_sram_head, cpu),
&per_cpu(used_l1_data_A_sram_head, cpu))) &per_cpu(used_l1_data_A_sram_head, cpu)))
goto not_done; goto not_done;
#endif #endif
#if L1_DATA_B_LENGTH != 0 #if L1_DATA_B_LENGTH != 0
if (_sram_proc_read(buf, &len, count, "L1 Data B", if (_sram_proc_show(m, "L1 Data B",
&per_cpu(free_l1_data_B_sram_head, cpu), &per_cpu(free_l1_data_B_sram_head, cpu),
&per_cpu(used_l1_data_B_sram_head, cpu))) &per_cpu(used_l1_data_B_sram_head, cpu)))
goto not_done; goto not_done;
#endif #endif
#if L1_CODE_LENGTH != 0 #if L1_CODE_LENGTH != 0
if (_sram_proc_read(buf, &len, count, "L1 Instruction", if (_sram_proc_show(m, "L1 Instruction",
&per_cpu(free_l1_inst_sram_head, cpu), &per_cpu(free_l1_inst_sram_head, cpu),
&per_cpu(used_l1_inst_sram_head, cpu))) &per_cpu(used_l1_inst_sram_head, cpu)))
goto not_done; goto not_done;
#endif #endif
} }
#if L2_LENGTH != 0 #if L2_LENGTH != 0
if (_sram_proc_read(buf, &len, count, "L2", &free_l2_sram_head, if (_sram_proc_show(m, "L2", &free_l2_sram_head, &used_l2_sram_head))
&used_l2_sram_head))
goto not_done; goto not_done;
#endif #endif
*eof = 1;
not_done: not_done:
return len; return 0;
}
static int sram_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, sram_proc_show, NULL);
} }
static const struct file_operations sram_proc_ops = {
.open = sram_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int __init sram_proc_init(void) static int __init sram_proc_init(void)
{ {
struct proc_dir_entry *ptr; struct proc_dir_entry *ptr;
ptr = create_proc_entry("sram", S_IFREG | S_IRUGO, NULL);
ptr = proc_create("sram", S_IRUGO, NULL, &sram_proc_ops);
if (!ptr) { if (!ptr) {
printk(KERN_WARNING "unable to create /proc/sram\n"); printk(KERN_WARNING "unable to create /proc/sram\n");
return -1; return -1;
} }
ptr->read_proc = sram_proc_read;
return 0; return 0;
} }
late_initcall(sram_proc_init); late_initcall(sram_proc_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment