Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6: (24 commits) [Blackfin] arch: import defines for BF547 -- it is just like the BF548, but no CAN [Blackfin] arch: fix build fails only include header files when enabled [Blackfin] arch: declare default INSTALL_PATH for Blackfin ports [Blackfin] arch: Encourage users to use the spidev character driver: Provide platform support [Blackfin] arch: Enable UART2 and UART3 for bf548 [Blackfin] arch: Enable NET2272 on BF561-EZkit - remove request_mem_region [Blackfin] arch:Fix BUG [#3876] pfbutton test for BTN3 on bf533 don't show complete info [Blackfin] arch: remove duplicated definitions of the line discipline numbers N_* in asm-blackfin/termios.h [Blackfin] arch: fix building with mtd uclinux by putting the mtd_phys option into the function it actually gets used in [Blackfin] arch: simpler header and update dates [Blackfin] arch: move the init sections to the end of memory [Blackfin] arch: change the trace buffer control start/stop logic in the exception handlers [Blackfin] arch: fix typo in printk message [Blackfin] arch: this is an ezkit, not a stamp, so fixup the init function name [Blackfin] arch: add slightly better help text for CPLB_INFO [Blackfin] arch: Fix BUG - Enable ISP1362 driver to work ok with BF561 [Blackfin] arch: Fix header file information [Blackfin] arch: Add Support for ISP1362 [Blackfin] arch: add support for cmdline partitioning to the BF533-STAMP flash map driver and enable it as a module by default [Blackfin] arch: hook up set_irq_wake in Blackfin's irq code ...
This commit is contained in:
commit
04a94babd6
@ -544,7 +544,7 @@ config EXCPT_IRQ_SYSC_L1
|
||||
default y
|
||||
help
|
||||
If enabled, the entire ASM lowlevel exception and interrupt entry code
|
||||
(STORE/RESTORE CONTEXT) is linked into L1 instruction memory.
|
||||
(STORE/RESTORE CONTEXT) is linked into L1 instruction memory.
|
||||
(less latency)
|
||||
|
||||
config DO_IRQ_L1
|
||||
@ -904,29 +904,38 @@ config ARCH_SUSPEND_POSSIBLE
|
||||
depends on !SMP
|
||||
|
||||
choice
|
||||
prompt "Select PM Wakeup Event Source"
|
||||
default PM_WAKEUP_GPIO_BY_SIC_IWR
|
||||
prompt "Default Power Saving Mode"
|
||||
depends on PM
|
||||
default PM_BFIN_SLEEP_DEEPER
|
||||
config PM_BFIN_SLEEP_DEEPER
|
||||
bool "Sleep Deeper"
|
||||
help
|
||||
If you have a GPIO already configured as input with the corresponding PORTx_MASK
|
||||
bit set - "Specify Wakeup Event by SIC_IWR value"
|
||||
|
||||
config PM_WAKEUP_GPIO_BY_SIC_IWR
|
||||
bool "Specify Wakeup Event by SIC_IWR value"
|
||||
config PM_WAKEUP_BY_GPIO
|
||||
bool "Cause Wakeup Event by GPIO"
|
||||
config PM_WAKEUP_GPIO_API
|
||||
bool "Configure Wakeup Event by PM GPIO API"
|
||||
Sleep "Deeper" Mode (High Power Savings) - This mode reduces dynamic
|
||||
power dissipation by disabling the clock to the processor core (CCLK).
|
||||
Furthermore, Standby sets the internal power supply voltage (VDDINT)
|
||||
to 0.85 V to provide the greatest power savings, while preserving the
|
||||
processor state.
|
||||
The PLL and system clock (SCLK) continue to operate at a very low
|
||||
frequency of about 3.3 MHz. To preserve data integrity in the SDRAM,
|
||||
the SDRAM is put into Self Refresh Mode. Typically an external event
|
||||
such as GPIO interrupt or RTC activity wakes up the processor.
|
||||
Various Peripherals such as UART, SPORT, PPI may not function as
|
||||
normal during Sleep Deeper, due to the reduced SCLK frequency.
|
||||
When in the sleep mode, system DMA access to L1 memory is not supported.
|
||||
|
||||
config PM_BFIN_SLEEP
|
||||
bool "Sleep"
|
||||
help
|
||||
Sleep Mode (High Power Savings) - The sleep mode reduces power
|
||||
dissipation by disabling the clock to the processor core (CCLK).
|
||||
The PLL and system clock (SCLK), however, continue to operate in
|
||||
this mode. Typically an external event or RTC activity will wake
|
||||
up the processor. When in the sleep mode,
|
||||
system DMA access to L1 memory is not supported.
|
||||
endchoice
|
||||
|
||||
config PM_WAKEUP_SIC_IWR
|
||||
hex "Wakeup Events (SIC_IWR)"
|
||||
depends on PM_WAKEUP_GPIO_BY_SIC_IWR
|
||||
default 0x8 if (BF537 || BF536 || BF534)
|
||||
default 0x80 if (BF533 || BF532 || BF531)
|
||||
default 0x80 if (BF54x)
|
||||
default 0x80 if (BF52x)
|
||||
config PM_WAKEUP_BY_GPIO
|
||||
bool "Cause Wakeup Event by GPIO"
|
||||
|
||||
config PM_WAKEUP_GPIO_NUMBER
|
||||
int "Wakeup GPIO number"
|
||||
|
@ -164,7 +164,7 @@ config DUAL_CORE_TEST_MODULE
|
||||
config CPLB_INFO
|
||||
bool "Display the CPLB information"
|
||||
help
|
||||
Display the CPLB information.
|
||||
Display the CPLB information via /proc/cplbinfo.
|
||||
|
||||
config ACCESS_CHECK
|
||||
bool "Check the user pointer address"
|
||||
|
@ -119,6 +119,7 @@ archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
|
||||
INSTALL_PATH ?= /tftpboot
|
||||
boot := arch/$(ARCH)/boot
|
||||
BOOT_TARGETS = vmImage
|
||||
PHONY += $(BOOT_TARGETS) install
|
||||
|
@ -216,8 +216,6 @@ CONFIG_MEM_SIZE=128
|
||||
CONFIG_MEM_ADD_WIDTH=11
|
||||
CONFIG_ENET_FLASH_PIN=0
|
||||
CONFIG_BOOT_LOAD=0x1000
|
||||
|
||||
|
||||
CONFIG_BFIN_SCRATCH_REG_RETN=y
|
||||
# CONFIG_BFIN_SCRATCH_REG_RETE is not set
|
||||
# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set
|
||||
@ -483,7 +481,7 @@ CONFIG_MTD=y
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
# CONFIG_MTD_CMDLINE_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
|
||||
#
|
||||
# User Modules And Translation Layers
|
||||
@ -500,8 +498,8 @@ CONFIG_MTD_BLOCK=y
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
# CONFIG_MTD_CFI is not set
|
||||
CONFIG_MTD_JEDECPROBE=m
|
||||
CONFIG_MTD_CFI=m
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_GEN_PROBE=m
|
||||
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
@ -515,8 +513,9 @@ CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
CONFIG_MTD_CFI_AMDSTD=m
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=m
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_ROM=m
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
@ -526,6 +525,11 @@ CONFIG_MTD_ROM=m
|
||||
#
|
||||
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
CONFIG_MTD_BF5xx=m
|
||||
CONFIG_BFIN_FLASH_BANK_0=0x7BB0
|
||||
CONFIG_BFIN_FLASH_BANK_1=0x7BB0
|
||||
CONFIG_BFIN_FLASH_BANK_2=0x7BB0
|
||||
CONFIG_BFIN_FLASH_BANK_3=0x7BB0
|
||||
# CONFIG_MTD_UCLINUX is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
|
@ -104,6 +104,16 @@ int request_dma(unsigned int channel, char *device_id)
|
||||
|
||||
mutex_unlock(&(dma_ch[channel].dmalock));
|
||||
|
||||
#ifdef CONFIG_BF54x
|
||||
if (channel >= CH_UART2_RX && channel <= CH_UART3_TX &&
|
||||
strncmp(device_id, "BFIN_UART", 9) == 0)
|
||||
dma_ch[channel].regs->peripheral_map |=
|
||||
(channel - CH_UART2_RX + 0xC);
|
||||
else
|
||||
dma_ch[channel].regs->peripheral_map |=
|
||||
(channel - CH_UART2_RX + 0x6);
|
||||
#endif
|
||||
|
||||
dma_ch[channel].device_id = device_id;
|
||||
dma_ch[channel].irq_callback = NULL;
|
||||
|
||||
|
@ -186,7 +186,7 @@ static struct str_ident {
|
||||
char name[RESOURCE_LABEL_SIZE];
|
||||
} str_ident[MAX_RESOURCES];
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
#if defined(CONFIG_PM) && !defined(CONFIG_BF54x)
|
||||
static unsigned short wakeup_map[gpio_bank(MAX_BLACKFIN_GPIOS)];
|
||||
static unsigned char wakeup_flags_map[MAX_BLACKFIN_GPIOS];
|
||||
static struct gpio_port_s gpio_bank_saved[gpio_bank(MAX_BLACKFIN_GPIOS)];
|
||||
@ -696,9 +696,8 @@ static int bfin_gpio_wakeup_type(unsigned gpio, unsigned char type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 gpio_pm_setup(void)
|
||||
u32 bfin_pm_setup(void)
|
||||
{
|
||||
u32 sic_iwr = 0;
|
||||
u16 bank, mask, i, gpio;
|
||||
|
||||
for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
|
||||
@ -723,7 +722,8 @@ u32 gpio_pm_setup(void)
|
||||
gpio = i;
|
||||
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
if ((mask & 1) && (wakeup_flags_map[gpio] !=
|
||||
PM_WAKE_IGNORE)) {
|
||||
reserved_gpio_map[gpio_bank(gpio)] |=
|
||||
gpio_bit(gpio);
|
||||
bfin_gpio_wakeup_type(gpio,
|
||||
@ -734,21 +734,17 @@ u32 gpio_pm_setup(void)
|
||||
mask >>= 1;
|
||||
}
|
||||
|
||||
sic_iwr |= 1 <<
|
||||
(sic_iwr_irqs[bank] - (IRQ_CORETMR + 1));
|
||||
bfin_internal_set_wake(sic_iwr_irqs[bank], 1);
|
||||
gpio_bankb[bank]->maskb_set = wakeup_map[gpio_bank(i)];
|
||||
}
|
||||
}
|
||||
|
||||
AWA_DUMMY_READ(maskb_set);
|
||||
|
||||
if (sic_iwr)
|
||||
return sic_iwr;
|
||||
else
|
||||
return IWR_ENABLE_ALL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void gpio_pm_restore(void)
|
||||
void bfin_pm_restore(void)
|
||||
{
|
||||
u16 bank, mask, i;
|
||||
|
||||
@ -768,7 +764,7 @@ void gpio_pm_restore(void)
|
||||
|
||||
reserved_gpio_map[bank] =
|
||||
gpio_bank_saved[bank].reserved;
|
||||
|
||||
bfin_internal_set_wake(sic_iwr_irqs[bank], 0);
|
||||
}
|
||||
|
||||
gpio_bankb[bank]->maskb = gpio_bank_saved[bank].maskb;
|
||||
|
@ -26,6 +26,10 @@
|
||||
#include <asm/cplb.h>
|
||||
#include <asm/cplbinit.h>
|
||||
|
||||
#if ANOMALY_05000263
|
||||
# error the MPU will not function safely while Anomaly 05000263 applies
|
||||
#endif
|
||||
|
||||
struct cplb_entry icplb_tbl[MAX_CPLBS];
|
||||
struct cplb_entry dcplb_tbl[MAX_CPLBS];
|
||||
|
||||
|
@ -57,5 +57,5 @@ EXPORT_SYMBOL(init_task);
|
||||
* "init_task" linker map entry.
|
||||
*/
|
||||
union thread_union init_thread_union
|
||||
__attribute__ ((__section__(".data.init_task"))) = {
|
||||
__attribute__ ((__section__(".init_task.data"))) = {
|
||||
INIT_THREAD_INFO(init_task)};
|
||||
|
@ -1,30 +1,11 @@
|
||||
/*
|
||||
* File: arch/blackfin/kernel/setup.c
|
||||
* Based on:
|
||||
* Author:
|
||||
* arch/blackfin/kernel/setup.c
|
||||
*
|
||||
* Created:
|
||||
* Description:
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
*
|
||||
* Modified:
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
* Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see the file COPYING, or write
|
||||
* to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* Licensed under the GPL-2 or later.
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
@ -34,6 +15,7 @@
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/pfn.h>
|
||||
|
||||
#include <linux/ext2_fs.h>
|
||||
#include <linux/cramfs_fs.h>
|
||||
@ -47,6 +29,8 @@
|
||||
#include <asm/fixed_code.h>
|
||||
#include <asm/early_printk.h>
|
||||
|
||||
static DEFINE_PER_CPU(struct cpu, cpu_devices);
|
||||
|
||||
u16 _bfin_swrst;
|
||||
|
||||
unsigned long memory_start, memory_end, physical_mem_end;
|
||||
@ -67,6 +51,29 @@ EXPORT_SYMBOL(mtd_size);
|
||||
|
||||
char __initdata command_line[COMMAND_LINE_SIZE];
|
||||
|
||||
/* boot memmap, for parsing "memmap=" */
|
||||
#define BFIN_MEMMAP_MAX 128 /* number of entries in bfin_memmap */
|
||||
#define BFIN_MEMMAP_RAM 1
|
||||
#define BFIN_MEMMAP_RESERVED 2
|
||||
struct bfin_memmap {
|
||||
int nr_map;
|
||||
struct bfin_memmap_entry {
|
||||
unsigned long long addr; /* start of memory segment */
|
||||
unsigned long long size;
|
||||
unsigned long type;
|
||||
} map[BFIN_MEMMAP_MAX];
|
||||
} bfin_memmap __initdata;
|
||||
|
||||
/* for memmap sanitization */
|
||||
struct change_member {
|
||||
struct bfin_memmap_entry *pentry; /* pointer to original entry */
|
||||
unsigned long long addr; /* address for this change point */
|
||||
};
|
||||
static struct change_member change_point_list[2*BFIN_MEMMAP_MAX] __initdata;
|
||||
static struct change_member *change_point[2*BFIN_MEMMAP_MAX] __initdata;
|
||||
static struct bfin_memmap_entry *overlap_list[BFIN_MEMMAP_MAX] __initdata;
|
||||
static struct bfin_memmap_entry new_map[BFIN_MEMMAP_MAX] __initdata;
|
||||
|
||||
void __init bf53x_cache_init(void)
|
||||
{
|
||||
#if defined(CONFIG_BFIN_DCACHE) || defined(CONFIG_BFIN_ICACHE)
|
||||
@ -123,12 +130,224 @@ void __init bf53x_relocate_l1_mem(void)
|
||||
|
||||
}
|
||||
|
||||
/* add_memory_region to memmap */
|
||||
static void __init add_memory_region(unsigned long long start,
|
||||
unsigned long long size, int type)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = bfin_memmap.nr_map;
|
||||
|
||||
if (i == BFIN_MEMMAP_MAX) {
|
||||
printk(KERN_ERR "Ooops! Too many entries in the memory map!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
bfin_memmap.map[i].addr = start;
|
||||
bfin_memmap.map[i].size = size;
|
||||
bfin_memmap.map[i].type = type;
|
||||
bfin_memmap.nr_map++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sanitize the boot memmap, removing overlaps.
|
||||
*/
|
||||
static int __init sanitize_memmap(struct bfin_memmap_entry *map, int *pnr_map)
|
||||
{
|
||||
struct change_member *change_tmp;
|
||||
unsigned long current_type, last_type;
|
||||
unsigned long long last_addr;
|
||||
int chgidx, still_changing;
|
||||
int overlap_entries;
|
||||
int new_entry;
|
||||
int old_nr, new_nr, chg_nr;
|
||||
int i;
|
||||
|
||||
/*
|
||||
Visually we're performing the following (1,2,3,4 = memory types)
|
||||
|
||||
Sample memory map (w/overlaps):
|
||||
____22__________________
|
||||
______________________4_
|
||||
____1111________________
|
||||
_44_____________________
|
||||
11111111________________
|
||||
____________________33__
|
||||
___________44___________
|
||||
__________33333_________
|
||||
______________22________
|
||||
___________________2222_
|
||||
_________111111111______
|
||||
_____________________11_
|
||||
_________________4______
|
||||
|
||||
Sanitized equivalent (no overlap):
|
||||
1_______________________
|
||||
_44_____________________
|
||||
___1____________________
|
||||
____22__________________
|
||||
______11________________
|
||||
_________1______________
|
||||
__________3_____________
|
||||
___________44___________
|
||||
_____________33_________
|
||||
_______________2________
|
||||
________________1_______
|
||||
_________________4______
|
||||
___________________2____
|
||||
____________________33__
|
||||
______________________4_
|
||||
*/
|
||||
/* if there's only one memory region, don't bother */
|
||||
if (*pnr_map < 2)
|
||||
return -1;
|
||||
|
||||
old_nr = *pnr_map;
|
||||
|
||||
/* bail out if we find any unreasonable addresses in memmap */
|
||||
for (i = 0; i < old_nr; i++)
|
||||
if (map[i].addr + map[i].size < map[i].addr)
|
||||
return -1;
|
||||
|
||||
/* create pointers for initial change-point information (for sorting) */
|
||||
for (i = 0; i < 2*old_nr; i++)
|
||||
change_point[i] = &change_point_list[i];
|
||||
|
||||
/* record all known change-points (starting and ending addresses),
|
||||
omitting those that are for empty memory regions */
|
||||
chgidx = 0;
|
||||
for (i = 0; i < old_nr; i++) {
|
||||
if (map[i].size != 0) {
|
||||
change_point[chgidx]->addr = map[i].addr;
|
||||
change_point[chgidx++]->pentry = &map[i];
|
||||
change_point[chgidx]->addr = map[i].addr + map[i].size;
|
||||
change_point[chgidx++]->pentry = &map[i];
|
||||
}
|
||||
}
|
||||
chg_nr = chgidx; /* true number of change-points */
|
||||
|
||||
/* sort change-point list by memory addresses (low -> high) */
|
||||
still_changing = 1;
|
||||
while (still_changing) {
|
||||
still_changing = 0;
|
||||
for (i = 1; i < chg_nr; i++) {
|
||||
/* if <current_addr> > <last_addr>, swap */
|
||||
/* or, if current=<start_addr> & last=<end_addr>, swap */
|
||||
if ((change_point[i]->addr < change_point[i-1]->addr) ||
|
||||
((change_point[i]->addr == change_point[i-1]->addr) &&
|
||||
(change_point[i]->addr == change_point[i]->pentry->addr) &&
|
||||
(change_point[i-1]->addr != change_point[i-1]->pentry->addr))
|
||||
) {
|
||||
change_tmp = change_point[i];
|
||||
change_point[i] = change_point[i-1];
|
||||
change_point[i-1] = change_tmp;
|
||||
still_changing = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* create a new memmap, removing overlaps */
|
||||
overlap_entries = 0; /* number of entries in the overlap table */
|
||||
new_entry = 0; /* index for creating new memmap entries */
|
||||
last_type = 0; /* start with undefined memory type */
|
||||
last_addr = 0; /* start with 0 as last starting address */
|
||||
/* loop through change-points, determining affect on the new memmap */
|
||||
for (chgidx = 0; chgidx < chg_nr; chgidx++) {
|
||||
/* keep track of all overlapping memmap entries */
|
||||
if (change_point[chgidx]->addr == change_point[chgidx]->pentry->addr) {
|
||||
/* add map entry to overlap list (> 1 entry implies an overlap) */
|
||||
overlap_list[overlap_entries++] = change_point[chgidx]->pentry;
|
||||
} else {
|
||||
/* remove entry from list (order independent, so swap with last) */
|
||||
for (i = 0; i < overlap_entries; i++) {
|
||||
if (overlap_list[i] == change_point[chgidx]->pentry)
|
||||
overlap_list[i] = overlap_list[overlap_entries-1];
|
||||
}
|
||||
overlap_entries--;
|
||||
}
|
||||
/* if there are overlapping entries, decide which "type" to use */
|
||||
/* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */
|
||||
current_type = 0;
|
||||
for (i = 0; i < overlap_entries; i++)
|
||||
if (overlap_list[i]->type > current_type)
|
||||
current_type = overlap_list[i]->type;
|
||||
/* continue building up new memmap based on this information */
|
||||
if (current_type != last_type) {
|
||||
if (last_type != 0) {
|
||||
new_map[new_entry].size =
|
||||
change_point[chgidx]->addr - last_addr;
|
||||
/* move forward only if the new size was non-zero */
|
||||
if (new_map[new_entry].size != 0)
|
||||
if (++new_entry >= BFIN_MEMMAP_MAX)
|
||||
break; /* no more space left for new entries */
|
||||
}
|
||||
if (current_type != 0) {
|
||||
new_map[new_entry].addr = change_point[chgidx]->addr;
|
||||
new_map[new_entry].type = current_type;
|
||||
last_addr = change_point[chgidx]->addr;
|
||||
}
|
||||
last_type = current_type;
|
||||
}
|
||||
}
|
||||
new_nr = new_entry; /* retain count for new entries */
|
||||
|
||||
/* copy new mapping into original location */
|
||||
memcpy(map, new_map, new_nr*sizeof(struct bfin_memmap_entry));
|
||||
*pnr_map = new_nr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init print_memory_map(char *who)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < bfin_memmap.nr_map; i++) {
|
||||
printk(KERN_DEBUG " %s: %016Lx - %016Lx ", who,
|
||||
bfin_memmap.map[i].addr,
|
||||
bfin_memmap.map[i].addr + bfin_memmap.map[i].size);
|
||||
switch (bfin_memmap.map[i].type) {
|
||||
case BFIN_MEMMAP_RAM:
|
||||
printk("(usable)\n");
|
||||
break;
|
||||
case BFIN_MEMMAP_RESERVED:
|
||||
printk("(reserved)\n");
|
||||
break;
|
||||
default: printk("type %lu\n", bfin_memmap.map[i].type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static __init int parse_memmap(char *arg)
|
||||
{
|
||||
unsigned long long start_at, mem_size;
|
||||
|
||||
if (!arg)
|
||||
return -EINVAL;
|
||||
|
||||
mem_size = memparse(arg, &arg);
|
||||
if (*arg == '@') {
|
||||
start_at = memparse(arg+1, &arg);
|
||||
add_memory_region(start_at, mem_size, BFIN_MEMMAP_RAM);
|
||||
} else if (*arg == '$') {
|
||||
start_at = memparse(arg+1, &arg);
|
||||
add_memory_region(start_at, mem_size, BFIN_MEMMAP_RESERVED);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initial parsing of the command line. Currently, we support:
|
||||
* - Controlling the linux memory size: mem=xxx[KMG]
|
||||
* - Controlling the physical memory size: max_mem=xxx[KMG][$][#]
|
||||
* $ -> reserved memory is dcacheable
|
||||
* # -> reserved memory is icacheable
|
||||
* - "memmap=XXX[KkmM][@][$]XXX[KkmM]" defines a memory region
|
||||
* @ from <start> to <start>+<mem>, type RAM
|
||||
* $ from <start> to <start>+<mem>, type RESERVED
|
||||
*
|
||||
*/
|
||||
static __init void parse_cmdline_early(char *cmdline_p)
|
||||
{
|
||||
@ -136,7 +355,6 @@ static __init void parse_cmdline_early(char *cmdline_p)
|
||||
unsigned int memsize;
|
||||
for (;;) {
|
||||
if (c == ' ') {
|
||||
|
||||
if (!memcmp(to, "mem=", 4)) {
|
||||
to += 4;
|
||||
memsize = memparse(to, &to);
|
||||
@ -162,6 +380,9 @@ static __init void parse_cmdline_early(char *cmdline_p)
|
||||
} else if (!memcmp(to, "earlyprintk=", 12)) {
|
||||
to += 12;
|
||||
setup_early_printk(to);
|
||||
} else if (!memcmp(to, "memmap=", 7)) {
|
||||
to += 7;
|
||||
parse_memmap(to);
|
||||
}
|
||||
}
|
||||
c = *(to++);
|
||||
@ -170,75 +391,36 @@ static __init void parse_cmdline_early(char *cmdline_p)
|
||||
}
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
/*
|
||||
* Setup memory defaults from user config.
|
||||
* The physical memory layout looks like:
|
||||
*
|
||||
* [_rambase, _ramstart]: kernel image
|
||||
* [memory_start, memory_end]: dynamic memory managed by kernel
|
||||
* [memory_end, _ramend]: reserved memory
|
||||
* [meory_mtd_start(memory_end),
|
||||
* memory_mtd_start + mtd_size]: rootfs (if any)
|
||||
* [_ramend - DMA_UNCACHED_REGION,
|
||||
* _ramend]: uncached DMA region
|
||||
* [_ramend, physical_mem_end]: memory not managed by kernel
|
||||
*
|
||||
*/
|
||||
static __init void memory_setup(void)
|
||||
{
|
||||
int bootmap_size;
|
||||
unsigned long l1_length, sclk, cclk;
|
||||
#ifdef CONFIG_MTD_UCLINUX
|
||||
unsigned long mtd_phys = 0;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DUMMY_CONSOLE
|
||||
conswitchp = &dummy_con;
|
||||
#endif
|
||||
_rambase = (unsigned long)_stext;
|
||||
_ramstart = (unsigned long)_end;
|
||||
|
||||
#if defined(CONFIG_CMDLINE_BOOL)
|
||||
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
||||
command_line[sizeof(command_line) - 1] = 0;
|
||||
#endif
|
||||
|
||||
/* Keep a copy of command line */
|
||||
*cmdline_p = &command_line[0];
|
||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
||||
|
||||
/* setup memory defaults from the user config */
|
||||
physical_mem_end = 0;
|
||||
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
||||
|
||||
parse_cmdline_early(&command_line[0]);
|
||||
|
||||
cclk = get_cclk();
|
||||
sclk = get_sclk();
|
||||
|
||||
#if !defined(CONFIG_BFIN_KERNEL_CLOCK)
|
||||
if (ANOMALY_05000273 && cclk == sclk)
|
||||
panic("ANOMALY 05000273, SCLK can not be same as CCLK");
|
||||
#endif
|
||||
|
||||
#ifdef BF561_FAMILY
|
||||
if (ANOMALY_05000266) {
|
||||
bfin_read_IMDMA_D0_IRQ_STATUS();
|
||||
bfin_read_IMDMA_D1_IRQ_STATUS();
|
||||
if (DMA_UNCACHED_REGION > (_ramend - _ramstart)) {
|
||||
console_init();
|
||||
panic("DMA region exceeds memory limit: %lu.\n",
|
||||
_ramend - _ramstart);
|
||||
}
|
||||
#endif
|
||||
|
||||
printk(KERN_INFO "Hardware Trace ");
|
||||
if (bfin_read_TBUFCTL() & 0x1 )
|
||||
printk("Active ");
|
||||
else
|
||||
printk("Off ");
|
||||
if (bfin_read_TBUFCTL() & 0x2)
|
||||
printk("and Enabled\n");
|
||||
else
|
||||
printk("and Disabled\n");
|
||||
|
||||
|
||||
#if defined(CONFIG_CHR_DEV_FLASH) || defined(CONFIG_BLK_DEV_FLASH)
|
||||
/* we need to initialize the Flashrom device here since we might
|
||||
* do things with flash early on in the boot
|
||||
*/
|
||||
flash_probe();
|
||||
#endif
|
||||
|
||||
if (physical_mem_end == 0)
|
||||
physical_mem_end = _ramend;
|
||||
|
||||
/* by now the stack is part of the init task */
|
||||
memory_end = _ramend - DMA_UNCACHED_REGION;
|
||||
|
||||
_ramstart = (unsigned long)__bss_stop;
|
||||
_rambase = (unsigned long)_stext;
|
||||
#ifdef CONFIG_MPU
|
||||
/* Round up to multiple of 4MB. */
|
||||
memory_start = (_ramstart + 0x3fffff) & ~0x3fffff;
|
||||
@ -292,7 +474,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
}
|
||||
|
||||
/* Relocate MTD image to the top of memory after the uncached memory area */
|
||||
dma_memcpy((char *)memory_end, __bss_stop, mtd_size);
|
||||
dma_memcpy((char *)memory_end, _end, mtd_size);
|
||||
|
||||
memory_mtd_start = memory_end;
|
||||
_ebss = memory_mtd_start; /* define _ebss for compatible */
|
||||
@ -319,13 +501,175 @@ void __init setup_arch(char **cmdline_p)
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_MTD_UCLINUX)
|
||||
memory_end -= SIZE_4K; /*In case there is no valid CPLB behind memory_end make sure we don't get to close*/
|
||||
/*In case there is no valid CPLB behind memory_end make sure we don't get to close*/
|
||||
memory_end -= SIZE_4K;
|
||||
#endif
|
||||
|
||||
init_mm.start_code = (unsigned long)_stext;
|
||||
init_mm.end_code = (unsigned long)_etext;
|
||||
init_mm.end_data = (unsigned long)_edata;
|
||||
init_mm.brk = (unsigned long)0;
|
||||
|
||||
printk(KERN_INFO "Board Memory: %ldMB\n", physical_mem_end >> 20);
|
||||
printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20);
|
||||
|
||||
printk(KERN_INFO "Memory map:\n"
|
||||
KERN_INFO " text = 0x%p-0x%p\n"
|
||||
KERN_INFO " rodata = 0x%p-0x%p\n"
|
||||
KERN_INFO " bss = 0x%p-0x%p\n"
|
||||
KERN_INFO " data = 0x%p-0x%p\n"
|
||||
KERN_INFO " stack = 0x%p-0x%p\n"
|
||||
KERN_INFO " init = 0x%p-0x%p\n"
|
||||
KERN_INFO " available = 0x%p-0x%p\n"
|
||||
#ifdef CONFIG_MTD_UCLINUX
|
||||
KERN_INFO " rootfs = 0x%p-0x%p\n"
|
||||
#endif
|
||||
#if DMA_UNCACHED_REGION > 0
|
||||
KERN_INFO " DMA Zone = 0x%p-0x%p\n"
|
||||
#endif
|
||||
, _stext, _etext,
|
||||
__start_rodata, __end_rodata,
|
||||
__bss_start, __bss_stop,
|
||||
_sdata, _edata,
|
||||
(void *)&init_thread_union,
|
||||
(void *)((int)(&init_thread_union) + 0x2000),
|
||||
__init_begin, __init_end,
|
||||
(void *)_ramstart, (void *)memory_end
|
||||
#ifdef CONFIG_MTD_UCLINUX
|
||||
, (void *)memory_mtd_start, (void *)(memory_mtd_start + mtd_size)
|
||||
#endif
|
||||
#if DMA_UNCACHED_REGION > 0
|
||||
, (void *)(_ramend - DMA_UNCACHED_REGION), (void *)(_ramend)
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
static __init void setup_bootmem_allocator(void)
|
||||
{
|
||||
int bootmap_size;
|
||||
int i;
|
||||
unsigned long min_pfn, max_pfn;
|
||||
unsigned long curr_pfn, last_pfn, size;
|
||||
|
||||
/* mark memory between memory_start and memory_end usable */
|
||||
add_memory_region(memory_start,
|
||||
memory_end - memory_start, BFIN_MEMMAP_RAM);
|
||||
/* sanity check for overlap */
|
||||
sanitize_memmap(bfin_memmap.map, &bfin_memmap.nr_map);
|
||||
print_memory_map("boot memmap");
|
||||
|
||||
min_pfn = PAGE_OFFSET >> PAGE_SHIFT;
|
||||
max_pfn = memory_end >> PAGE_SHIFT;
|
||||
|
||||
/*
|
||||
* give all the memory to the bootmap allocator, tell it to put the
|
||||
* boot mem_map at the start of memory.
|
||||
*/
|
||||
bootmap_size = init_bootmem_node(NODE_DATA(0),
|
||||
memory_start >> PAGE_SHIFT, /* map goes here */
|
||||
min_pfn, max_pfn);
|
||||
|
||||
/* register the memmap regions with the bootmem allocator */
|
||||
for (i = 0; i < bfin_memmap.nr_map; i++) {
|
||||
/*
|
||||
* Reserve usable memory
|
||||
*/
|
||||
if (bfin_memmap.map[i].type != BFIN_MEMMAP_RAM)
|
||||
continue;
|
||||
/*
|
||||
* We are rounding up the start address of usable memory:
|
||||
*/
|
||||
curr_pfn = PFN_UP(bfin_memmap.map[i].addr);
|
||||
if (curr_pfn >= max_pfn)
|
||||
continue;
|
||||
/*
|
||||
* ... and at the end of the usable range downwards:
|
||||
*/
|
||||
last_pfn = PFN_DOWN(bfin_memmap.map[i].addr +
|
||||
bfin_memmap.map[i].size);
|
||||
|
||||
if (last_pfn > max_pfn)
|
||||
last_pfn = max_pfn;
|
||||
|
||||
/*
|
||||
* .. finally, did all the rounding and playing
|
||||
* around just make the area go away?
|
||||
*/
|
||||
if (last_pfn <= curr_pfn)
|
||||
continue;
|
||||
|
||||
size = last_pfn - curr_pfn;
|
||||
free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
|
||||
}
|
||||
|
||||
/* reserve memory before memory_start, including bootmap */
|
||||
reserve_bootmem(PAGE_OFFSET,
|
||||
memory_start + bootmap_size + PAGE_SIZE - 1 - PAGE_OFFSET,
|
||||
BOOTMEM_DEFAULT);
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
unsigned long l1_length, sclk, cclk;
|
||||
|
||||
#ifdef CONFIG_DUMMY_CONSOLE
|
||||
conswitchp = &dummy_con;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMDLINE_BOOL)
|
||||
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
||||
command_line[sizeof(command_line) - 1] = 0;
|
||||
#endif
|
||||
|
||||
/* Keep a copy of command line */
|
||||
*cmdline_p = &command_line[0];
|
||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
||||
|
||||
/* setup memory defaults from the user config */
|
||||
physical_mem_end = 0;
|
||||
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
||||
|
||||
memset(&bfin_memmap, 0, sizeof(bfin_memmap));
|
||||
|
||||
parse_cmdline_early(&command_line[0]);
|
||||
|
||||
if (physical_mem_end == 0)
|
||||
physical_mem_end = _ramend;
|
||||
|
||||
memory_setup();
|
||||
|
||||
cclk = get_cclk();
|
||||
sclk = get_sclk();
|
||||
|
||||
#if !defined(CONFIG_BFIN_KERNEL_CLOCK)
|
||||
if (ANOMALY_05000273 && cclk == sclk)
|
||||
panic("ANOMALY 05000273, SCLK can not be same as CCLK");
|
||||
#endif
|
||||
|
||||
#ifdef BF561_FAMILY
|
||||
if (ANOMALY_05000266) {
|
||||
bfin_read_IMDMA_D0_IRQ_STATUS();
|
||||
bfin_read_IMDMA_D1_IRQ_STATUS();
|
||||
}
|
||||
#endif
|
||||
printk(KERN_INFO "Hardware Trace ");
|
||||
if (bfin_read_TBUFCTL() & 0x1)
|
||||
printk("Active ");
|
||||
else
|
||||
printk("Off ");
|
||||
if (bfin_read_TBUFCTL() & 0x2)
|
||||
printk("and Enabled\n");
|
||||
else
|
||||
printk("and Disabled\n");
|
||||
|
||||
#if defined(CONFIG_CHR_DEV_FLASH) || defined(CONFIG_BLK_DEV_FLASH)
|
||||
/* we need to initialize the Flashrom device here since we might
|
||||
* do things with flash early on in the boot
|
||||
*/
|
||||
flash_probe();
|
||||
#endif
|
||||
|
||||
_bfin_swrst = bfin_read_SWRST();
|
||||
|
||||
if (_bfin_swrst & RESET_DOUBLE)
|
||||
@ -335,7 +679,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
else if (_bfin_swrst & RESET_SOFTWARE)
|
||||
printk(KERN_NOTICE "Reset caused by Software reset\n");
|
||||
|
||||
printk(KERN_INFO "Blackfin support (C) 2004-2007 Analog Devices, Inc.\n");
|
||||
printk(KERN_INFO "Blackfin support (C) 2004-2008 Analog Devices, Inc.\n");
|
||||
if (bfin_compiled_revid() == 0xffff)
|
||||
printk(KERN_INFO "Compiled for ADSP-%s Rev any\n", CPU);
|
||||
else if (bfin_compiled_revid() == -1)
|
||||
@ -361,55 +705,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (ANOMALY_05000273 && (cclk >> 1) <= sclk)
|
||||
printk("\n\n\nANOMALY_05000273: CCLK must be >= 2*SCLK !!!\n\n\n");
|
||||
|
||||
printk(KERN_INFO "Board Memory: %ldMB\n", physical_mem_end >> 20);
|
||||
printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20);
|
||||
setup_bootmem_allocator();
|
||||
|
||||
printk(KERN_INFO "Memory map:\n"
|
||||
KERN_INFO " text = 0x%p-0x%p\n"
|
||||
KERN_INFO " rodata = 0x%p-0x%p\n"
|
||||
KERN_INFO " data = 0x%p-0x%p\n"
|
||||
KERN_INFO " stack = 0x%p-0x%p\n"
|
||||
KERN_INFO " init = 0x%p-0x%p\n"
|
||||
KERN_INFO " bss = 0x%p-0x%p\n"
|
||||
KERN_INFO " available = 0x%p-0x%p\n"
|
||||
#ifdef CONFIG_MTD_UCLINUX
|
||||
KERN_INFO " rootfs = 0x%p-0x%p\n"
|
||||
#endif
|
||||
#if DMA_UNCACHED_REGION > 0
|
||||
KERN_INFO " DMA Zone = 0x%p-0x%p\n"
|
||||
#endif
|
||||
, _stext, _etext,
|
||||
__start_rodata, __end_rodata,
|
||||
_sdata, _edata,
|
||||
(void *)&init_thread_union, (void *)((int)(&init_thread_union) + 0x2000),
|
||||
__init_begin, __init_end,
|
||||
__bss_start, __bss_stop,
|
||||
(void *)_ramstart, (void *)memory_end
|
||||
#ifdef CONFIG_MTD_UCLINUX
|
||||
, (void *)memory_mtd_start, (void *)(memory_mtd_start + mtd_size)
|
||||
#endif
|
||||
#if DMA_UNCACHED_REGION > 0
|
||||
, (void *)(_ramend - DMA_UNCACHED_REGION), (void *)(_ramend)
|
||||
#endif
|
||||
);
|
||||
|
||||
/*
|
||||
* give all the memory to the bootmap allocator, tell it to put the
|
||||
* boot mem_map at the start of memory
|
||||
*/
|
||||
bootmap_size = init_bootmem_node(NODE_DATA(0), memory_start >> PAGE_SHIFT, /* map goes here */
|
||||
PAGE_OFFSET >> PAGE_SHIFT,
|
||||
memory_end >> PAGE_SHIFT);
|
||||
/*
|
||||
* free the usable memory, we have to make sure we do not free
|
||||
* the bootmem bitmap so we then reserve it after freeing it :-)
|
||||
*/
|
||||
free_bootmem(memory_start, memory_end - memory_start);
|
||||
|
||||
reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);
|
||||
/*
|
||||
* get kmalloc into gear
|
||||
*/
|
||||
paging_init();
|
||||
|
||||
/* check the size of the l1 area */
|
||||
@ -450,15 +747,15 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
static int __init topology_init(void)
|
||||
{
|
||||
#if defined (CONFIG_BF561)
|
||||
static struct cpu cpu[2];
|
||||
register_cpu(&cpu[0], 0);
|
||||
register_cpu(&cpu[1], 1);
|
||||
int cpu;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
struct cpu *c = &per_cpu(cpu_devices, cpu);
|
||||
|
||||
register_cpu(c, cpu);
|
||||
}
|
||||
|
||||
return 0;
|
||||
#else
|
||||
static struct cpu cpu[1];
|
||||
return register_cpu(cpu, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
subsys_initcall(topology_init);
|
||||
|
@ -649,7 +649,7 @@ void dump_bfin_process(struct pt_regs *fp)
|
||||
if (context & 0x0020 && (fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR)
|
||||
printk(KERN_NOTICE "HW Error context\n");
|
||||
else if (context & 0x0020)
|
||||
printk(KERN_NOTICE "Defered Exception context\n");
|
||||
printk(KERN_NOTICE "Deferred Exception context\n");
|
||||
else if (context & 0x3FC0)
|
||||
printk(KERN_NOTICE "Interrupt context\n");
|
||||
else if (context & 0x4000)
|
||||
|
@ -41,6 +41,9 @@ _jiffies = _jiffies_64;
|
||||
SECTIONS
|
||||
{
|
||||
. = CONFIG_BOOT_LOAD;
|
||||
/* Neither the text, ro_data or bss section need to be aligned
|
||||
* So pack them back to back
|
||||
*/
|
||||
.text :
|
||||
{
|
||||
__text = .;
|
||||
@ -58,22 +61,25 @@ SECTIONS
|
||||
*(__ex_table)
|
||||
___stop___ex_table = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
__etext = .;
|
||||
}
|
||||
|
||||
RO_DATA(PAGE_SIZE)
|
||||
/* Just in case the first read only is a 32-bit access */
|
||||
RO_DATA(4)
|
||||
|
||||
.bss :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
___bss_start = .;
|
||||
*(.bss .bss.*)
|
||||
*(COMMON)
|
||||
___bss_stop = .;
|
||||
}
|
||||
|
||||
.data :
|
||||
{
|
||||
/* make sure the init_task is aligned to the
|
||||
* kernel thread size so we can locate the kernel
|
||||
* stack properly and quickly.
|
||||
*/
|
||||
__sdata = .;
|
||||
. = ALIGN(THREAD_SIZE);
|
||||
*(.data.init_task)
|
||||
|
||||
/* This gets done first, so the glob doesn't suck it in */
|
||||
. = ALIGN(32);
|
||||
*(.data.cacheline_aligned)
|
||||
|
||||
@ -81,10 +87,22 @@ SECTIONS
|
||||
*(.data.*)
|
||||
CONSTRUCTORS
|
||||
|
||||
/* make sure the init_task is aligned to the
|
||||
* kernel thread size so we can locate the kernel
|
||||
* stack properly and quickly.
|
||||
*/
|
||||
. = ALIGN(THREAD_SIZE);
|
||||
*(.init_task.data)
|
||||
|
||||
__edata = .;
|
||||
}
|
||||
|
||||
/* The init section should be last, so when we free it, it goes into
|
||||
* the general memory pool, and (hopefully) will decrease fragmentation
|
||||
* a tiny bit. The init section has a _requirement_ that it be
|
||||
* PAGE_SIZE aligned
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
___init_begin = .;
|
||||
|
||||
.init.text :
|
||||
@ -179,16 +197,7 @@ SECTIONS
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
___init_end = .;
|
||||
|
||||
.bss :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
___bss_start = .;
|
||||
*(.bss .bss.*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
___bss_stop = .;
|
||||
__end = .;
|
||||
}
|
||||
__end =.;
|
||||
|
||||
STABS_DEBUG
|
||||
|
||||
|
@ -41,7 +41,9 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/usb/sl811.h>
|
||||
#if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
|
||||
#include <linux/usb/musb.h>
|
||||
#endif
|
||||
#include <asm/cplb.h>
|
||||
#include <asm/dma.h>
|
||||
#include <asm/bfin5xx_spi.h>
|
||||
@ -517,6 +519,14 @@ static struct bfin5xx_spi_chip spi_wm8731_chip_info = {
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
@ -634,6 +644,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
.mode = SPI_MODE_0,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SPI controller data */
|
||||
|
@ -34,7 +34,9 @@
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
|
||||
#include <linux/usb/isp1362.h>
|
||||
#endif
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/dma.h>
|
||||
@ -134,6 +136,13 @@ static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
|
||||
{
|
||||
@ -168,6 +177,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
.controller_data = &ad1836_spi_chip_info,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SPI (0) */
|
||||
|
@ -226,6 +226,13 @@ static struct bfin5xx_spi_chip spi_mmc_chip_info = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
|
||||
{
|
||||
@ -312,6 +319,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
.mode = SPI_MODE_2,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SPI (0) */
|
||||
@ -423,9 +439,9 @@ static struct platform_device bfin_pata_device = {
|
||||
#include <linux/gpio_keys.h>
|
||||
|
||||
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
||||
{BTN_0, GPIO_PF5, 1, "gpio-keys: BTN0"},
|
||||
{BTN_1, GPIO_PF6, 1, "gpio-keys: BTN1"},
|
||||
{BTN_2, GPIO_PF8, 1, "gpio-keys: BTN2"},
|
||||
{BTN_0, GPIO_PF5, 0, "gpio-keys: BTN0"},
|
||||
{BTN_1, GPIO_PF6, 0, "gpio-keys: BTN1"},
|
||||
{BTN_2, GPIO_PF8, 0, "gpio-keys: BTN2"},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data bfin_gpio_keys_data = {
|
||||
|
@ -487,6 +487,13 @@ static const struct ad7877_platform_data bfin_ad7877_ts_info = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
@ -593,6 +600,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
.controller_data = &spi_ad7877_chip_info,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SPI controller data */
|
||||
|
@ -37,7 +37,9 @@
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
|
||||
#include <linux/usb/musb.h>
|
||||
#endif
|
||||
#include <asm/bfin5xx_spi.h>
|
||||
#include <asm/cplb.h>
|
||||
#include <asm/dma.h>
|
||||
@ -420,6 +422,13 @@ static const struct ad7877_platform_data bfin_ad7877_ts_info = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bf54x_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
@ -445,6 +454,15 @@ static struct spi_board_info bf54x_spi_board_info[] __initdata = {
|
||||
.controller_data = &spi_ad7877_chip_info,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* SPI (0) */
|
||||
@ -631,7 +649,7 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
||||
&ezkit_flash_device,
|
||||
};
|
||||
|
||||
static int __init stamp_init(void)
|
||||
static int __init ezkit_init(void)
|
||||
{
|
||||
printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__);
|
||||
platform_add_devices(ezkit_devices, ARRAY_SIZE(ezkit_devices));
|
||||
@ -644,4 +662,4 @@ static int __init stamp_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(stamp_init);
|
||||
arch_initcall(ezkit_init);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* File: arch/blackfin/mach-bf561/dma.c
|
||||
* File: arch/blackfin/mach-bf548/dma.c
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
@ -7,7 +7,7 @@
|
||||
* Description: This file contains the simple DMA Implementation for Blackfin
|
||||
*
|
||||
* Modified:
|
||||
* Copyright 2004-2007 Analog Devices Inc.
|
||||
* Copyright 2004-2008 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
|
@ -92,6 +92,68 @@ void __exit bfin_isp1761_exit(void)
|
||||
arch_initcall(bfin_isp1761_init);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
|
||||
#include <linux/usb/isp1362.h>
|
||||
|
||||
static struct resource isp1362_hcd_resources[] = {
|
||||
{
|
||||
.start = 0x2c060000,
|
||||
.end = 0x2c060000,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = 0x2c060004,
|
||||
.end = 0x2c060004,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_PF8,
|
||||
.end = IRQ_PF8,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct isp1362_platform_data isp1362_priv = {
|
||||
.sel15Kres = 1,
|
||||
.clknotstop = 0,
|
||||
.oc_enable = 0,
|
||||
.int_act_high = 0,
|
||||
.int_edge_triggered = 0,
|
||||
.remote_wakeup_connected = 0,
|
||||
.no_power_switching = 1,
|
||||
.power_switching_mode = 0,
|
||||
};
|
||||
|
||||
static struct platform_device isp1362_hcd_device = {
|
||||
.name = "isp1362-hcd",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &isp1362_priv,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(isp1362_hcd_resources),
|
||||
.resource = isp1362_hcd_resources,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
|
||||
static struct resource net2272_bfin_resources[] = {
|
||||
{
|
||||
.start = 0x2C000000,
|
||||
.end = 0x2C000000 + 0x7F,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_PF10,
|
||||
.end = IRQ_PF10,
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device net2272_bfin_device = {
|
||||
.name = "net2272",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(net2272_bfin_resources),
|
||||
.resource = net2272_bfin_resources,
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* USB-LAN EzExtender board
|
||||
* Driver needs to know address, irq and flag pin.
|
||||
@ -204,6 +266,13 @@ static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
static struct bfin5xx_spi_chip spidev_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* SPI (0) */
|
||||
@ -248,6 +317,15 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
.controller_data = &ad1836_spi_chip_info,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
.max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 1,
|
||||
.controller_data = &spidev_chip_info,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
@ -340,6 +418,10 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
||||
&ax88180_device,
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
|
||||
&net2272_bfin_device,
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
&bfin_spi0_device,
|
||||
#endif
|
||||
@ -359,6 +441,11 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
||||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
&i2c_gpio_device,
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
|
||||
&isp1362_hcd_device,
|
||||
#endif
|
||||
|
||||
&ezkit_flash_device,
|
||||
};
|
||||
|
||||
|
@ -4,8 +4,6 @@
|
||||
|
||||
obj-y := \
|
||||
cache.o cacheinit.o entry.o \
|
||||
interrupt.o lock.o irqpanic.o arch_checks.o
|
||||
interrupt.o lock.o irqpanic.o arch_checks.o ints-priority.o
|
||||
|
||||
obj-$(CONFIG_BFIN_SINGLE_CORE) += ints-priority-sc.o
|
||||
obj-$(CONFIG_BFIN_DUAL_CORE) += ints-priority-dc.o
|
||||
obj-$(CONFIG_PM) += pm.o dpmc.o
|
||||
|
@ -191,6 +191,9 @@ ENTRY(_sleep_mode)
|
||||
call _test_pll_locked;
|
||||
|
||||
R0 = IWR_ENABLE(0);
|
||||
R1 = IWR_DISABLE_ALL;
|
||||
R2 = IWR_DISABLE_ALL;
|
||||
|
||||
call _set_sic_iwr;
|
||||
|
||||
P0.H = hi(PLL_CTL);
|
||||
@ -237,6 +240,10 @@ ENTRY(_deep_sleep)
|
||||
|
||||
CLI R4;
|
||||
|
||||
R0 = IWR_ENABLE(0);
|
||||
R1 = IWR_DISABLE_ALL;
|
||||
R2 = IWR_DISABLE_ALL;
|
||||
|
||||
call _set_sic_iwr;
|
||||
|
||||
call _set_dram_srfs;
|
||||
@ -261,6 +268,9 @@ ENTRY(_deep_sleep)
|
||||
call _test_pll_locked;
|
||||
|
||||
R0 = IWR_ENABLE(0);
|
||||
R1 = IWR_DISABLE_ALL;
|
||||
R2 = IWR_DISABLE_ALL;
|
||||
|
||||
call _set_sic_iwr;
|
||||
|
||||
P0.H = hi(PLL_CTL);
|
||||
@ -286,7 +296,13 @@ ENTRY(_sleep_deeper)
|
||||
CLI R4;
|
||||
|
||||
P3 = R0;
|
||||
P4 = R1;
|
||||
P5 = R2;
|
||||
|
||||
R0 = IWR_ENABLE(0);
|
||||
R1 = IWR_DISABLE_ALL;
|
||||
R2 = IWR_DISABLE_ALL;
|
||||
|
||||
call _set_sic_iwr;
|
||||
call _set_dram_srfs; /* Set SDRAM Self Refresh */
|
||||
|
||||
@ -327,6 +343,8 @@ ENTRY(_sleep_deeper)
|
||||
call _test_pll_locked;
|
||||
|
||||
R0 = P3;
|
||||
R1 = P4;
|
||||
R3 = P5;
|
||||
call _set_sic_iwr; /* Set Awake from IDLE */
|
||||
|
||||
P0.H = hi(PLL_CTL);
|
||||
@ -340,6 +358,9 @@ ENTRY(_sleep_deeper)
|
||||
call _test_pll_locked;
|
||||
|
||||
R0 = IWR_ENABLE(0);
|
||||
R1 = IWR_DISABLE_ALL;
|
||||
R2 = IWR_DISABLE_ALL;
|
||||
|
||||
call _set_sic_iwr; /* Set Awake from IDLE PLL */
|
||||
|
||||
P0.H = hi(VR_CTL);
|
||||
@ -417,14 +438,23 @@ ENTRY(_unset_dram_srfs)
|
||||
RTS;
|
||||
|
||||
ENTRY(_set_sic_iwr)
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561)
|
||||
P0.H = hi(SIC_IWR0);
|
||||
P0.L = lo(SIC_IWR0);
|
||||
P1.H = hi(SIC_IWR1);
|
||||
P1.L = lo(SIC_IWR1);
|
||||
[P1] = R1;
|
||||
#if defined(CONFIG_BF54x)
|
||||
P1.H = hi(SIC_IWR2);
|
||||
P1.L = lo(SIC_IWR2);
|
||||
[P1] = R2;
|
||||
#endif
|
||||
#else
|
||||
P0.H = hi(SIC_IWR);
|
||||
P0.L = lo(SIC_IWR);
|
||||
#endif
|
||||
[P0] = R0;
|
||||
|
||||
SSYNC;
|
||||
RTS;
|
||||
|
||||
|
@ -121,6 +121,7 @@ ENTRY(_ex_icplb_miss)
|
||||
(R7:6,P5:4) = [sp++];
|
||||
ASTAT = [sp++];
|
||||
SAVE_ALL_SYS
|
||||
DEBUG_HWTRACE_SAVE(p5, r7)
|
||||
#ifdef CONFIG_MPU
|
||||
R0 = SEQSTAT;
|
||||
R1 = SP;
|
||||
@ -132,14 +133,13 @@ ENTRY(_ex_icplb_miss)
|
||||
#else
|
||||
call __cplb_hdr;
|
||||
#endif
|
||||
DEBUG_START_HWTRACE(p5, r7)
|
||||
DEBUG_HWTRACE_RESTORE(p5, r7)
|
||||
RESTORE_ALL_SYS
|
||||
SP = EX_SCRATCH_REG;
|
||||
rtx;
|
||||
ENDPROC(_ex_icplb_miss)
|
||||
|
||||
ENTRY(_ex_syscall)
|
||||
DEBUG_START_HWTRACE(p5, r7)
|
||||
(R7:6,P5:4) = [sp++];
|
||||
ASTAT = [sp++];
|
||||
raise 15; /* invoked by TRAP #0, for sys call */
|
||||
@ -178,7 +178,6 @@ ENTRY(_ex_single_step)
|
||||
ENDPROC(_ex_single_step)
|
||||
|
||||
ENTRY(_bfin_return_from_exception)
|
||||
DEBUG_START_HWTRACE(p5, r7)
|
||||
#if ANOMALY_05000257
|
||||
R7=LC0;
|
||||
LC0=R7;
|
||||
@ -200,10 +199,9 @@ ENTRY(_handle_bad_cplb)
|
||||
* need to make a CPLB exception look like a normal exception
|
||||
*/
|
||||
|
||||
DEBUG_START_HWTRACE(p5, r7)
|
||||
RESTORE_ALL_SYS
|
||||
[--sp] = ASTAT;
|
||||
[--sp] = (R7:6, P5:4);
|
||||
[--sp] = (R7:6,P5:4);
|
||||
|
||||
ENTRY(_ex_replaceable)
|
||||
nop;
|
||||
@ -253,7 +251,6 @@ ENTRY(_ex_trap_c)
|
||||
R6 = SEQSTAT;
|
||||
[P5] = R6;
|
||||
|
||||
DEBUG_START_HWTRACE(p5, r7)
|
||||
(R7:6,P5:4) = [sp++];
|
||||
ASTAT = [sp++];
|
||||
SP = EX_SCRATCH_REG;
|
||||
@ -382,8 +379,7 @@ ENTRY(_trap) /* Exception: 4th entry into system event table(supervisor mode)*/
|
||||
sp.h = _exception_stack_top;
|
||||
/* Try to deal with syscalls quickly. */
|
||||
[--sp] = ASTAT;
|
||||
[--sp] = (R7:6, P5:4);
|
||||
DEBUG_STOP_HWTRACE(p5, r7)
|
||||
[--sp] = (R7:6,P5:4);
|
||||
r7 = SEQSTAT; /* reason code is in bit 5:0 */
|
||||
r6.l = lo(SEQSTAT_EXCAUSE);
|
||||
r6.h = hi(SEQSTAT_EXCAUSE);
|
||||
|
@ -1,484 +0,0 @@
|
||||
/*
|
||||
* File: arch/blackfin/mach-common/ints-priority-dc.c
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
* Created: ?
|
||||
* Description: Set up the interrupt priorities
|
||||
*
|
||||
* Modified:
|
||||
* 1996 Roman Zippel
|
||||
* 1999 D. Jeff Dionne <jeff@uclinux.org>
|
||||
* 2000-2001 Lineo, Inc. D. Jefff Dionne <jeff@lineo.ca>
|
||||
* 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
|
||||
* 2003 Metrowerks/Motorola
|
||||
* 2003 Bas Vermeulen <bas@buyways.nl>
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see the file COPYING, or write
|
||||
* to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/irq.h>
|
||||
#ifdef CONFIG_KGDB
|
||||
#include <linux/kgdb.h>
|
||||
#endif
|
||||
#include <asm/traps.h>
|
||||
#include <asm/blackfin.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/irq_handler.h>
|
||||
|
||||
/*
|
||||
* NOTES:
|
||||
* - we have separated the physical Hardware interrupt from the
|
||||
* levels that the LINUX kernel sees (see the description in irq.h)
|
||||
* -
|
||||
*/
|
||||
|
||||
/* Initialize this to an actual value to force it into the .data
|
||||
* section so that we know it is properly initialized at entry into
|
||||
* the kernel but before bss is initialized to zero (which is where
|
||||
* it would live otherwise). The 0x1f magic represents the IRQs we
|
||||
* cannot actually mask out in hardware.
|
||||
*/
|
||||
unsigned long irq_flags = 0x1f;
|
||||
|
||||
/* The number of spurious interrupts */
|
||||
atomic_t num_spurious;
|
||||
|
||||
struct ivgx {
|
||||
/* irq number for request_irq, available in mach-bf561/irq.h */
|
||||
int irqno;
|
||||
/* corresponding bit in the SICA_ISR0 register */
|
||||
int isrflag0;
|
||||
/* corresponding bit in the SICA_ISR1 register */
|
||||
int isrflag1;
|
||||
} ivg_table[NR_PERI_INTS];
|
||||
|
||||
struct ivg_slice {
|
||||
/* position of first irq in ivg_table for given ivg */
|
||||
struct ivgx *ifirst;
|
||||
struct ivgx *istop;
|
||||
} ivg7_13[IVG13 - IVG7 + 1];
|
||||
|
||||
static void search_IAR(void);
|
||||
|
||||
/*
|
||||
* Search SIC_IAR and fill tables with the irqvalues
|
||||
* and their positions in the SIC_ISR register.
|
||||
*/
|
||||
static void __init search_IAR(void)
|
||||
{
|
||||
unsigned ivg, irq_pos = 0;
|
||||
for (ivg = 0; ivg <= IVG13 - IVG7; ivg++) {
|
||||
int irqn;
|
||||
|
||||
ivg7_13[ivg].istop = ivg7_13[ivg].ifirst = &ivg_table[irq_pos];
|
||||
|
||||
for (irqn = 0; irqn < NR_PERI_INTS; irqn++) {
|
||||
int iar_shift = (irqn & 7) * 4;
|
||||
if (ivg ==
|
||||
(0xf &
|
||||
bfin_read32((unsigned long *)SICA_IAR0 +
|
||||
(irqn >> 3)) >> iar_shift)) {
|
||||
ivg_table[irq_pos].irqno = IVG7 + irqn;
|
||||
ivg_table[irq_pos].isrflag0 =
|
||||
(irqn < 32 ? (1 << irqn) : 0);
|
||||
ivg_table[irq_pos].isrflag1 =
|
||||
(irqn < 32 ? 0 : (1 << (irqn - 32)));
|
||||
ivg7_13[ivg].istop++;
|
||||
irq_pos++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This is for BF561 internal IRQs
|
||||
*/
|
||||
|
||||
static void ack_noop(unsigned int irq)
|
||||
{
|
||||
/* Dummy function. */
|
||||
}
|
||||
|
||||
static void bf561_core_mask_irq(unsigned int irq)
|
||||
{
|
||||
irq_flags &= ~(1 << irq);
|
||||
if (!irqs_disabled())
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
static void bf561_core_unmask_irq(unsigned int irq)
|
||||
{
|
||||
irq_flags |= 1 << irq;
|
||||
/*
|
||||
* If interrupts are enabled, IMASK must contain the same value
|
||||
* as irq_flags. Make sure that invariant holds. If interrupts
|
||||
* are currently disabled we need not do anything; one of the
|
||||
* callers will take care of setting IMASK to the proper value
|
||||
* when reenabling interrupts.
|
||||
* local_irq_enable just does "STI irq_flags", so it's exactly
|
||||
* what we need.
|
||||
*/
|
||||
if (!irqs_disabled())
|
||||
local_irq_enable();
|
||||
return;
|
||||
}
|
||||
|
||||
static void bf561_internal_mask_irq(unsigned int irq)
|
||||
{
|
||||
unsigned long irq_mask;
|
||||
if ((irq - (IRQ_CORETMR + 1)) < 32) {
|
||||
irq_mask = (1 << (irq - (IRQ_CORETMR + 1)));
|
||||
bfin_write_SICA_IMASK0(bfin_read_SICA_IMASK0() & ~irq_mask);
|
||||
} else {
|
||||
irq_mask = (1 << (irq - (IRQ_CORETMR + 1) - 32));
|
||||
bfin_write_SICA_IMASK1(bfin_read_SICA_IMASK1() & ~irq_mask);
|
||||
}
|
||||
}
|
||||
|
||||
static void bf561_internal_unmask_irq(unsigned int irq)
|
||||
{
|
||||
unsigned long irq_mask;
|
||||
|
||||
if ((irq - (IRQ_CORETMR + 1)) < 32) {
|
||||
irq_mask = (1 << (irq - (IRQ_CORETMR + 1)));
|
||||
bfin_write_SICA_IMASK0(bfin_read_SICA_IMASK0() | irq_mask);
|
||||
} else {
|
||||
irq_mask = (1 << (irq - (IRQ_CORETMR + 1) - 32));
|
||||
bfin_write_SICA_IMASK1(bfin_read_SICA_IMASK1() | irq_mask);
|
||||
}
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
static struct irq_chip bf561_core_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.mask = bf561_core_mask_irq,
|
||||
.unmask = bf561_core_unmask_irq,
|
||||
};
|
||||
|
||||
static struct irq_chip bf561_internal_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.mask = bf561_internal_mask_irq,
|
||||
.unmask = bf561_internal_unmask_irq,
|
||||
};
|
||||
|
||||
static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
|
||||
static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)];
|
||||
|
||||
static void bf561_gpio_ack_irq(unsigned int irq)
|
||||
{
|
||||
u16 gpionr = irq - IRQ_PF0;
|
||||
|
||||
if (gpio_edge_triggered[gpio_bank(gpionr)] & gpio_bit(gpionr)) {
|
||||
set_gpio_data(gpionr, 0);
|
||||
SSYNC();
|
||||
}
|
||||
}
|
||||
|
||||
static void bf561_gpio_mask_ack_irq(unsigned int irq)
|
||||
{
|
||||
u16 gpionr = irq - IRQ_PF0;
|
||||
|
||||
if (gpio_edge_triggered[gpio_bank(gpionr)] & gpio_bit(gpionr)) {
|
||||
set_gpio_data(gpionr, 0);
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
set_gpio_maska(gpionr, 0);
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
static void bf561_gpio_mask_irq(unsigned int irq)
|
||||
{
|
||||
set_gpio_maska(irq - IRQ_PF0, 0);
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
static void bf561_gpio_unmask_irq(unsigned int irq)
|
||||
{
|
||||
set_gpio_maska(irq - IRQ_PF0, 1);
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
static unsigned int bf561_gpio_irq_startup(unsigned int irq)
|
||||
{
|
||||
unsigned int ret;
|
||||
char buf[8];
|
||||
u16 gpionr = irq - IRQ_PF0;
|
||||
|
||||
if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
|
||||
snprintf(buf, sizeof buf, "IRQ %d", irq);
|
||||
ret = gpio_request(gpionr, buf);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
bf561_gpio_unmask_irq(irq);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
static void bf561_gpio_irq_shutdown(unsigned int irq)
|
||||
{
|
||||
bf561_gpio_mask_irq(irq);
|
||||
gpio_free(irq - IRQ_PF0);
|
||||
gpio_enabled[gpio_bank(irq - IRQ_PF0)] &= ~gpio_bit(irq - IRQ_PF0);
|
||||
}
|
||||
|
||||
static int bf561_gpio_irq_type(unsigned int irq, unsigned int type)
|
||||
{
|
||||
|
||||
unsigned int ret;
|
||||
char buf[8];
|
||||
u16 gpionr = irq - IRQ_PF0;
|
||||
|
||||
|
||||
if (type == IRQ_TYPE_PROBE) {
|
||||
/* only probe unenabled GPIO interrupt lines */
|
||||
if (gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))
|
||||
return 0;
|
||||
type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
|
||||
|
||||
}
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING |
|
||||
IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
|
||||
|
||||
if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) {
|
||||
snprintf(buf, sizeof buf, "IRQ %d", irq);
|
||||
ret = gpio_request(gpionr, buf);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
gpio_enabled[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
} else {
|
||||
gpio_enabled[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
set_gpio_dir(gpionr, 0);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
set_gpio_edge(gpionr, 1);
|
||||
} else {
|
||||
set_gpio_edge(gpionr, 0);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
}
|
||||
|
||||
if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
== (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
set_gpio_both(gpionr, 1);
|
||||
else
|
||||
set_gpio_both(gpionr, 0);
|
||||
|
||||
if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW)))
|
||||
set_gpio_polar(gpionr, 1); /* low or falling edge denoted by one */
|
||||
else
|
||||
set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */
|
||||
|
||||
SSYNC();
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
set_irq_handler(irq, handle_edge_irq);
|
||||
else
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip bf561_gpio_irqchip = {
|
||||
.ack = bf561_gpio_ack_irq,
|
||||
.mask = bf561_gpio_mask_irq,
|
||||
.mask_ack = bf561_gpio_mask_ack_irq,
|
||||
.unmask = bf561_gpio_unmask_irq,
|
||||
.set_type = bf561_gpio_irq_type,
|
||||
.startup = bf561_gpio_irq_startup,
|
||||
.shutdown = bf561_gpio_irq_shutdown
|
||||
};
|
||||
|
||||
static void bf561_demux_gpio_irq(unsigned int inta_irq,
|
||||
struct irq_desc *intb_desc)
|
||||
{
|
||||
int irq, flag_d, mask;
|
||||
u16 gpio;
|
||||
|
||||
switch (inta_irq) {
|
||||
case IRQ_PROG0_INTA:
|
||||
irq = IRQ_PF0;
|
||||
break;
|
||||
case IRQ_PROG1_INTA:
|
||||
irq = IRQ_PF16;
|
||||
break;
|
||||
case IRQ_PROG2_INTA:
|
||||
irq = IRQ_PF32;
|
||||
break;
|
||||
default:
|
||||
dump_stack();
|
||||
return;
|
||||
}
|
||||
|
||||
gpio = irq - IRQ_PF0;
|
||||
|
||||
flag_d = get_gpiop_data(gpio);
|
||||
mask = flag_d & (gpio_enabled[gpio_bank(gpio)] &
|
||||
get_gpiop_maska(gpio));
|
||||
|
||||
do {
|
||||
if (mask & 1) {
|
||||
struct irq_desc *desc = irq_desc + irq;
|
||||
desc->handle_irq(irq, desc);
|
||||
}
|
||||
irq++;
|
||||
mask >>= 1;
|
||||
} while (mask);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void __init init_exception_vectors(void)
|
||||
{
|
||||
SSYNC();
|
||||
|
||||
/* cannot program in software:
|
||||
* evt0 - emulation (jtag)
|
||||
* evt1 - reset
|
||||
*/
|
||||
bfin_write_EVT2(evt_nmi);
|
||||
bfin_write_EVT3(trap);
|
||||
bfin_write_EVT5(evt_ivhw);
|
||||
bfin_write_EVT6(evt_timer);
|
||||
bfin_write_EVT7(evt_evt7);
|
||||
bfin_write_EVT8(evt_evt8);
|
||||
bfin_write_EVT9(evt_evt9);
|
||||
bfin_write_EVT10(evt_evt10);
|
||||
bfin_write_EVT11(evt_evt11);
|
||||
bfin_write_EVT12(evt_evt12);
|
||||
bfin_write_EVT13(evt_evt13);
|
||||
bfin_write_EVT14(evt14_softirq);
|
||||
bfin_write_EVT15(evt_system_call);
|
||||
CSYNC();
|
||||
}
|
||||
|
||||
/*
|
||||
* This function should be called during kernel startup to initialize
|
||||
* the BFin IRQ handling routines.
|
||||
*/
|
||||
int __init init_arch_irq(void)
|
||||
{
|
||||
int irq;
|
||||
unsigned long ilat = 0;
|
||||
/* Disable all the peripheral intrs - page 4-29 HW Ref manual */
|
||||
bfin_write_SICA_IMASK0(SIC_UNMASK_ALL);
|
||||
bfin_write_SICA_IMASK1(SIC_UNMASK_ALL);
|
||||
SSYNC();
|
||||
|
||||
bfin_write_SICA_IWR0(IWR_ENABLE_ALL);
|
||||
bfin_write_SICA_IWR1(IWR_ENABLE_ALL);
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
init_exception_buff();
|
||||
|
||||
for (irq = 0; irq <= SYS_IRQS; irq++) {
|
||||
if (irq <= IRQ_CORETMR)
|
||||
set_irq_chip(irq, &bf561_core_irqchip);
|
||||
else
|
||||
set_irq_chip(irq, &bf561_internal_irqchip);
|
||||
|
||||
if ((irq != IRQ_PROG0_INTA) &&
|
||||
(irq != IRQ_PROG1_INTA) &&
|
||||
(irq != IRQ_PROG2_INTA))
|
||||
set_irq_handler(irq, handle_simple_irq);
|
||||
else
|
||||
set_irq_chained_handler(irq, bf561_demux_gpio_irq);
|
||||
}
|
||||
|
||||
for (irq = IRQ_PF0; irq <= IRQ_PF47; irq++) {
|
||||
set_irq_chip(irq, &bf561_gpio_irqchip);
|
||||
/* if configured as edge, then will be changed to do_edge_IRQ */
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
}
|
||||
|
||||
bfin_write_IMASK(0);
|
||||
CSYNC();
|
||||
ilat = bfin_read_ILAT();
|
||||
CSYNC();
|
||||
bfin_write_ILAT(ilat);
|
||||
CSYNC();
|
||||
|
||||
printk(KERN_INFO "Configuring Blackfin Priority Driven Interrupts\n");
|
||||
/* IMASK=xxx is equivalent to STI xx or irq_flags=xx,
|
||||
* local_irq_enable()
|
||||
*/
|
||||
program_IAR();
|
||||
/* Therefore it's better to setup IARs before interrupts enabled */
|
||||
search_IAR();
|
||||
|
||||
/* Enable interrupts IVG7-15 */
|
||||
irq_flags = irq_flags | IMASK_IVG15 |
|
||||
IMASK_IVG14 | IMASK_IVG13 | IMASK_IVG12 | IMASK_IVG11 |
|
||||
IMASK_IVG10 | IMASK_IVG9 | IMASK_IVG8 | IMASK_IVG7 | IMASK_IVGHW;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DO_IRQ_L1
|
||||
__attribute__((l1_text))
|
||||
#endif
|
||||
void do_irq(int vec, struct pt_regs *fp)
|
||||
{
|
||||
if (vec == EVT_IVTMR_P) {
|
||||
vec = IRQ_CORETMR;
|
||||
} else {
|
||||
struct ivgx *ivg = ivg7_13[vec - IVG7].ifirst;
|
||||
struct ivgx *ivg_stop = ivg7_13[vec - IVG7].istop;
|
||||
unsigned long sic_status0, sic_status1;
|
||||
|
||||
SSYNC();
|
||||
sic_status0 = bfin_read_SICA_IMASK0() & bfin_read_SICA_ISR0();
|
||||
sic_status1 = bfin_read_SICA_IMASK1() & bfin_read_SICA_ISR1();
|
||||
|
||||
for (;; ivg++) {
|
||||
if (ivg >= ivg_stop) {
|
||||
atomic_inc(&num_spurious);
|
||||
return;
|
||||
} else if ((sic_status0 & ivg->isrflag0) ||
|
||||
(sic_status1 & ivg->isrflag1))
|
||||
break;
|
||||
}
|
||||
vec = ivg->irqno;
|
||||
}
|
||||
asm_do_IRQ(vec, fp);
|
||||
|
||||
#ifdef CONFIG_KGDB
|
||||
kgdb_process_breakpoint();
|
||||
#endif
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* File: arch/blackfin/mach-common/ints-priority-sc.c
|
||||
* File: arch/blackfin/mach-common/ints-priority.c
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
@ -13,7 +13,7 @@
|
||||
* 2002 Arcturus Networks Inc. MaTed <mated@sympatico.ca>
|
||||
* 2003 Metrowerks/Motorola
|
||||
* 2003 Bas Vermeulen <bas@buyways.nl>
|
||||
* Copyright 2004-2007 Analog Devices Inc.
|
||||
* Copyright 2004-2008 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
@ -69,6 +69,10 @@ unsigned long irq_flags = 0x1f;
|
||||
/* The number of spurious interrupts */
|
||||
atomic_t num_spurious;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
unsigned long bfin_sic_iwr[3]; /* Up to 3 SIC_IWRx registers */
|
||||
#endif
|
||||
|
||||
struct ivgx {
|
||||
/* irq number for request_irq, available in mach-bf533/irq.h */
|
||||
unsigned int irqno;
|
||||
@ -98,8 +102,7 @@ static void __init search_IAR(void)
|
||||
|
||||
for (irqn = 0; irqn < NR_PERI_INTS; irqn++) {
|
||||
int iar_shift = (irqn & 7) * 4;
|
||||
if (ivg ==
|
||||
(0xf &
|
||||
if (ivg == (0xf &
|
||||
#ifndef CONFIG_BF52x
|
||||
bfin_read32((unsigned long *)SIC_IAR0 +
|
||||
(irqn >> 3)) >> iar_shift)) {
|
||||
@ -179,6 +182,27 @@ static void bfin_internal_unmask_irq(unsigned int irq)
|
||||
SSYNC();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
int bfin_internal_set_wake(unsigned int irq, unsigned int state)
|
||||
{
|
||||
unsigned bank, bit;
|
||||
unsigned long flags;
|
||||
bank = (irq - (IRQ_CORETMR + 1)) / 32;
|
||||
bit = (irq - (IRQ_CORETMR + 1)) % 32;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (state)
|
||||
bfin_sic_iwr[bank] |= (1 << bit);
|
||||
else
|
||||
bfin_sic_iwr[bank] &= ~(1 << bit);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct irq_chip bfin_core_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.mask = bfin_core_mask_irq,
|
||||
@ -189,6 +213,9 @@ static struct irq_chip bfin_internal_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.mask = bfin_internal_mask_irq,
|
||||
.unmask = bfin_internal_unmask_irq,
|
||||
#ifdef CONFIG_PM
|
||||
.set_wake = bfin_internal_set_wake,
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef BF537_GENERIC_ERROR_INT_DEMUX
|
||||
@ -206,8 +233,7 @@ static void bfin_generic_error_mask_irq(unsigned int irq)
|
||||
if (!error_int_mask) {
|
||||
local_irq_disable();
|
||||
bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() &
|
||||
~(1 <<
|
||||
(IRQ_GENERIC_ERROR -
|
||||
~(1 << (IRQ_GENERIC_ERROR -
|
||||
(IRQ_CORETMR + 1))));
|
||||
SSYNC();
|
||||
local_irq_enable();
|
||||
@ -232,7 +258,7 @@ static struct irq_chip bfin_generic_error_irqchip = {
|
||||
};
|
||||
|
||||
static void bfin_demux_error_irq(unsigned int int_err_irq,
|
||||
struct irq_desc *intb_desc)
|
||||
struct irq_desc *inta_desc)
|
||||
{
|
||||
int irq = 0;
|
||||
|
||||
@ -404,16 +430,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
set_gpio_inen(gpionr, 0);
|
||||
set_gpio_dir(gpionr, 0);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
set_gpio_edge(gpionr, 1);
|
||||
} else {
|
||||
set_gpio_edge(gpionr, 0);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
}
|
||||
|
||||
if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
== (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
@ -426,6 +444,18 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
||||
else
|
||||
set_gpio_polar(gpionr, 0); /* high or rising edge denoted by zero */
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
|
||||
set_gpio_edge(gpionr, 1);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] |= gpio_bit(gpionr);
|
||||
set_gpio_data(gpionr, 0);
|
||||
|
||||
} else {
|
||||
set_gpio_edge(gpionr, 0);
|
||||
gpio_edge_triggered[gpio_bank(gpionr)] &= ~gpio_bit(gpionr);
|
||||
set_gpio_inen(gpionr, 1);
|
||||
}
|
||||
|
||||
SSYNC();
|
||||
|
||||
if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
|
||||
@ -436,6 +466,20 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
int bfin_gpio_set_wake(unsigned int irq, unsigned int state)
|
||||
{
|
||||
unsigned gpio = irq_to_gpio(irq);
|
||||
|
||||
if (state)
|
||||
gpio_pm_wakeup_request(gpio, PM_WAKE_IGNORE);
|
||||
else
|
||||
gpio_pm_wakeup_free(gpio);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct irq_chip bfin_gpio_irqchip = {
|
||||
.ack = bfin_gpio_ack_irq,
|
||||
.mask = bfin_gpio_mask_irq,
|
||||
@ -443,30 +487,87 @@ static struct irq_chip bfin_gpio_irqchip = {
|
||||
.unmask = bfin_gpio_unmask_irq,
|
||||
.set_type = bfin_gpio_irq_type,
|
||||
.startup = bfin_gpio_irq_startup,
|
||||
.shutdown = bfin_gpio_irq_shutdown
|
||||
.shutdown = bfin_gpio_irq_shutdown,
|
||||
#ifdef CONFIG_PM
|
||||
.set_wake = bfin_gpio_set_wake,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void bfin_demux_gpio_irq(unsigned int intb_irq,
|
||||
struct irq_desc *intb_desc)
|
||||
static void bfin_demux_gpio_irq(unsigned int inta_irq,
|
||||
struct irq_desc *desc)
|
||||
{
|
||||
u16 i;
|
||||
struct irq_desc *desc;
|
||||
unsigned int i, gpio, mask, irq, search = 0;
|
||||
|
||||
for (i = 0; i < MAX_BLACKFIN_GPIOS; i += 16) {
|
||||
int irq = IRQ_PF0 + i;
|
||||
int flag_d = get_gpiop_data(i);
|
||||
int mask =
|
||||
flag_d & (gpio_enabled[gpio_bank(i)] & get_gpiop_maska(i));
|
||||
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
desc = irq_desc + irq;
|
||||
desc->handle_irq(irq, desc);
|
||||
}
|
||||
irq++;
|
||||
mask >>= 1;
|
||||
}
|
||||
switch (inta_irq) {
|
||||
#if defined(CONFIG_BF53x)
|
||||
case IRQ_PROG_INTA:
|
||||
irq = IRQ_PF0;
|
||||
search = 1;
|
||||
break;
|
||||
# if defined(BF537_FAMILY) && !(defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE))
|
||||
case IRQ_MAC_RX:
|
||||
irq = IRQ_PH0;
|
||||
break;
|
||||
# endif
|
||||
#elif defined(CONFIG_BF52x)
|
||||
case IRQ_PORTF_INTA:
|
||||
irq = IRQ_PF0;
|
||||
break;
|
||||
case IRQ_PORTG_INTA:
|
||||
irq = IRQ_PG0;
|
||||
break;
|
||||
case IRQ_PORTH_INTA:
|
||||
irq = IRQ_PH0;
|
||||
break;
|
||||
#elif defined(CONFIG_BF561)
|
||||
case IRQ_PROG0_INTA:
|
||||
irq = IRQ_PF0;
|
||||
break;
|
||||
case IRQ_PROG1_INTA:
|
||||
irq = IRQ_PF16;
|
||||
break;
|
||||
case IRQ_PROG2_INTA:
|
||||
irq = IRQ_PF32;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
BUG();
|
||||
return;
|
||||
}
|
||||
|
||||
if (search) {
|
||||
for (i = 0; i < MAX_BLACKFIN_GPIOS; i += GPIO_BANKSIZE) {
|
||||
irq += i;
|
||||
|
||||
mask = get_gpiop_data(i) &
|
||||
(gpio_enabled[gpio_bank(i)] &
|
||||
get_gpiop_maska(i));
|
||||
|
||||
while (mask) {
|
||||
if (mask & 1) {
|
||||
desc = irq_desc + irq;
|
||||
desc->handle_irq(irq, desc);
|
||||
}
|
||||
irq++;
|
||||
mask >>= 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
gpio = irq_to_gpio(irq);
|
||||
mask = get_gpiop_data(gpio) &
|
||||
(gpio_enabled[gpio_bank(gpio)] &
|
||||
get_gpiop_maska(gpio));
|
||||
|
||||
do {
|
||||
if (mask & 1) {
|
||||
desc = irq_desc + irq;
|
||||
desc->handle_irq(irq, desc);
|
||||
}
|
||||
irq++;
|
||||
mask >>= 1;
|
||||
} while (mask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else /* CONFIG_BF54x */
|
||||
@ -711,6 +812,74 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
u32 pint_saved_masks[NR_PINT_SYS_IRQS];
|
||||
u32 pint_wakeup_masks[NR_PINT_SYS_IRQS];
|
||||
|
||||
int bfin_gpio_set_wake(unsigned int irq, unsigned int state)
|
||||
{
|
||||
u32 pint_irq;
|
||||
u8 pint_val = irq2pint_lut[irq - SYS_IRQS];
|
||||
u32 bank = PINT_2_BANK(pint_val);
|
||||
u32 pintbit = PINT_BIT(pint_val);
|
||||
|
||||
switch (bank) {
|
||||
case 0:
|
||||
pint_irq = IRQ_PINT0;
|
||||
break;
|
||||
case 2:
|
||||
pint_irq = IRQ_PINT2;
|
||||
break;
|
||||
case 3:
|
||||
pint_irq = IRQ_PINT3;
|
||||
break;
|
||||
case 1:
|
||||
pint_irq = IRQ_PINT1;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bfin_internal_set_wake(pint_irq, state);
|
||||
|
||||
if (state)
|
||||
pint_wakeup_masks[bank] |= pintbit;
|
||||
else
|
||||
pint_wakeup_masks[bank] &= ~pintbit;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 bfin_pm_setup(void)
|
||||
{
|
||||
u32 val, i;
|
||||
|
||||
for (i = 0; i < NR_PINT_SYS_IRQS; i++) {
|
||||
val = pint[i]->mask_clear;
|
||||
pint_saved_masks[i] = val;
|
||||
if (val ^ pint_wakeup_masks[i]) {
|
||||
pint[i]->mask_clear = val;
|
||||
pint[i]->mask_set = pint_wakeup_masks[i];
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bfin_pm_restore(void)
|
||||
{
|
||||
u32 i, val;
|
||||
|
||||
for (i = 0; i < NR_PINT_SYS_IRQS; i++) {
|
||||
val = pint_saved_masks[i];
|
||||
if (val ^ pint_wakeup_masks[i]) {
|
||||
pint[i]->mask_clear = pint[i]->mask_clear;
|
||||
pint[i]->mask_set = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct irq_chip bfin_gpio_irqchip = {
|
||||
.ack = bfin_gpio_ack_irq,
|
||||
.mask = bfin_gpio_mask_irq,
|
||||
@ -718,17 +887,19 @@ static struct irq_chip bfin_gpio_irqchip = {
|
||||
.unmask = bfin_gpio_unmask_irq,
|
||||
.set_type = bfin_gpio_irq_type,
|
||||
.startup = bfin_gpio_irq_startup,
|
||||
.shutdown = bfin_gpio_irq_shutdown
|
||||
.shutdown = bfin_gpio_irq_shutdown,
|
||||
#ifdef CONFIG_PM
|
||||
.set_wake = bfin_gpio_set_wake,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void bfin_demux_gpio_irq(unsigned int intb_irq,
|
||||
struct irq_desc *intb_desc)
|
||||
static void bfin_demux_gpio_irq(unsigned int inta_irq,
|
||||
struct irq_desc *desc)
|
||||
{
|
||||
u8 bank, pint_val;
|
||||
u32 request, irq;
|
||||
struct irq_desc *desc;
|
||||
|
||||
switch (intb_irq) {
|
||||
switch (inta_irq) {
|
||||
case IRQ_PINT0:
|
||||
bank = 0;
|
||||
break;
|
||||
@ -795,7 +966,7 @@ int __init init_arch_irq(void)
|
||||
int irq;
|
||||
unsigned long ilat = 0;
|
||||
/* Disable all the peripheral intrs - page 4-29 HW Ref manual */
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561)
|
||||
bfin_write_SIC_IMASK0(SIC_UNMASK_ALL);
|
||||
bfin_write_SIC_IMASK1(SIC_UNMASK_ALL);
|
||||
bfin_write_SIC_IWR0(IWR_ENABLE_ALL);
|
||||
@ -812,6 +983,8 @@ int __init init_arch_irq(void)
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
init_exception_buff();
|
||||
|
||||
#ifdef CONFIG_BF54x
|
||||
# ifdef CONFIG_PINTx_REASSIGN
|
||||
pint[0]->assign = CONFIG_PINT0_ASSIGN;
|
||||
@ -874,6 +1047,19 @@ int __init init_arch_irq(void)
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
#elif defined(CONFIG_BF561)
|
||||
case IRQ_PROG0_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PROG1_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PROG2_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
set_irq_handler(irq, handle_simple_irq);
|
||||
@ -893,11 +1079,8 @@ int __init init_arch_irq(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_BF54x
|
||||
for (irq = IRQ_PF0; irq < NR_IRQS; irq++) {
|
||||
#else
|
||||
for (irq = IRQ_PA0; irq < NR_IRQS; irq++) {
|
||||
#endif
|
||||
for (irq = GPIO_IRQ_BASE; irq < NR_IRQS; irq++) {
|
||||
|
||||
set_irq_chip(irq, &bfin_gpio_irqchip);
|
||||
/* if configured as edge, then will be changed to do_edge_IRQ */
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
@ -936,7 +1119,7 @@ void do_irq(int vec, struct pt_regs *fp)
|
||||
} else {
|
||||
struct ivgx *ivg = ivg7_13[vec - IVG7].ifirst;
|
||||
struct ivgx *ivg_stop = ivg7_13[vec - IVG7].istop;
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561)
|
||||
unsigned long sic_status[3];
|
||||
|
||||
SSYNC();
|
@ -4,7 +4,7 @@
|
||||
* Author: Cliff Brake <cbrake@accelent.com> Copyright (c) 2001
|
||||
*
|
||||
* Created: 2001
|
||||
* Description: Power management for the bfin
|
||||
* Description: Blackfin power management
|
||||
*
|
||||
* Modified: Nicolas Pitre - PXA250 support
|
||||
* Copyright (c) 2002 Monta Vista Software, Inc.
|
||||
@ -12,7 +12,7 @@
|
||||
* Copyright (c) 2002 Monta Vista Software, Inc.
|
||||
* Dirk Behme <dirk.behme@de.bosch.com> - OMAP1510/1610
|
||||
* Copyright 2004
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
* Copyright 2004-2008 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
@ -67,42 +67,30 @@ void bfin_pm_suspend_standby_enter(void)
|
||||
gpio_pm_wakeup_request(CONFIG_PM_WAKEUP_GPIO_NUMBER, WAKEUP_TYPE);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PM_WAKEUP_BY_GPIO) || defined(CONFIG_PM_WAKEUP_GPIO_API)
|
||||
{
|
||||
u32 flags;
|
||||
u32 flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
local_irq_save(flags);
|
||||
bfin_pm_setup();
|
||||
|
||||
sleep_deeper(gpio_pm_setup()); /*Goto Sleep*/
|
||||
|
||||
gpio_pm_restore();
|
||||
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
bfin_write_SIC_IWR0(IWR_ENABLE_ALL);
|
||||
bfin_write_SIC_IWR1(IWR_ENABLE_ALL);
|
||||
# ifdef CONFIG_BF54x
|
||||
bfin_write_SIC_IWR2(IWR_ENABLE_ALL);
|
||||
# endif
|
||||
#ifdef CONFIG_PM_BFIN_SLEEP_DEEPER
|
||||
sleep_deeper(bfin_sic_iwr[0], bfin_sic_iwr[1], bfin_sic_iwr[2]);
|
||||
#else
|
||||
bfin_write_SIC_IWR(IWR_ENABLE_ALL);
|
||||
sleep_mode(bfin_sic_iwr[0], bfin_sic_iwr[1], bfin_sic_iwr[2]);
|
||||
#endif
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
#endif
|
||||
bfin_pm_restore();
|
||||
|
||||
#if defined(CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR)
|
||||
sleep_deeper(CONFIG_PM_WAKEUP_SIC_IWR);
|
||||
# if defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561)
|
||||
bfin_write_SIC_IWR0(IWR_ENABLE_ALL);
|
||||
bfin_write_SIC_IWR1(IWR_ENABLE_ALL);
|
||||
# ifdef CONFIG_BF54x
|
||||
# ifdef CONFIG_BF54x
|
||||
bfin_write_SIC_IWR2(IWR_ENABLE_ALL);
|
||||
# endif
|
||||
# else
|
||||
bfin_write_SIC_IWR(IWR_ENABLE_ALL);
|
||||
# endif
|
||||
#endif /* CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR */
|
||||
#else
|
||||
bfin_write_SIC_IWR(IWR_ENABLE_ALL);
|
||||
#endif
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -138,8 +138,7 @@ void __init mem_init(void)
|
||||
|
||||
start_mem = PAGE_ALIGN(start_mem);
|
||||
max_mapnr = num_physpages = MAP_NR(high_memory);
|
||||
printk(KERN_INFO "Kernel managed physical pages: %lu\n",
|
||||
num_physpages);
|
||||
printk(KERN_DEBUG "Kernel managed physical pages: %lu\n", num_physpages);
|
||||
|
||||
/* This will put all memory onto the freelists. */
|
||||
totalram_pages = free_all_bootmem();
|
||||
@ -153,8 +152,7 @@ void __init mem_init(void)
|
||||
/* do not count in kernel image between _rambase and _ramstart */
|
||||
reservedpages -= (_ramstart - _rambase) >> PAGE_SHIFT;
|
||||
#if (defined(CONFIG_BFIN_ICACHE) && ANOMALY_05000263)
|
||||
reservedpages += (_ramend - memory_end - DMA_UNCACHED_REGION) >>
|
||||
PAGE_SHIFT;
|
||||
reservedpages += (_ramend - memory_end - DMA_UNCACHED_REGION) >> PAGE_SHIFT;
|
||||
#endif
|
||||
|
||||
codek = (_etext - _stext) >> 10;
|
||||
@ -163,11 +161,9 @@ void __init mem_init(void)
|
||||
|
||||
printk(KERN_INFO
|
||||
"Memory available: %luk/%luk RAM, "
|
||||
"(%uk init code, %uk kernel code, "
|
||||
"%uk data, %uk dma, %uk reserved)\n",
|
||||
"(%uk init code, %uk kernel code, %uk data, %uk dma, %uk reserved)\n",
|
||||
(unsigned long) freepages << (PAGE_SHIFT-10), _ramend >> 10,
|
||||
initk, codek, datak, DMA_UNCACHED_REGION >> 10,
|
||||
(reservedpages << (PAGE_SHIFT-10)));
|
||||
initk, codek, datak, DMA_UNCACHED_REGION >> 10, (reservedpages << (PAGE_SHIFT-10)));
|
||||
|
||||
/* Initialize the blackfin L1 Memory. */
|
||||
l1sram_init();
|
||||
|
@ -70,6 +70,7 @@ extern void program_IAR(void);
|
||||
extern void evt14_softirq(void);
|
||||
extern asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs);
|
||||
extern void bfin_gpio_interrupt_setup(int irq, int irq_pfx, int type);
|
||||
extern int bfin_internal_set_wake(unsigned int irq, unsigned int state);
|
||||
|
||||
extern asmlinkage void finish_atomic_sections (struct pt_regs *regs);
|
||||
extern char fixed_code_start;
|
||||
@ -121,6 +122,7 @@ extern unsigned long dpdt_swapcount_table[];
|
||||
|
||||
extern unsigned long table_start, table_end;
|
||||
|
||||
extern unsigned long bfin_sic_iwr[];
|
||||
extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */
|
||||
extern struct file_operations dpmc_fops;
|
||||
extern char _start;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/************************************************************
|
||||
*
|
||||
* Copyright (C) 2004, Analog Devices. All Rights Reserved
|
||||
|
||||
* Copyright (C) 2006-2008, Analog Devices. All Rights Reserved
|
||||
*
|
||||
* FILE bfin5xx_spi.h
|
||||
* PROGRAMMER(S): Luke Yang (Analog Devices Inc.)
|
||||
@ -32,42 +32,6 @@
|
||||
#define SPI_BAUD_OFF 0x14
|
||||
#define SPI_SHAW_OFF 0x18
|
||||
|
||||
#define CMD_SPI_OUT_ENABLE 1
|
||||
#define CMD_SPI_SET_BAUDRATE 2
|
||||
#define CMD_SPI_SET_POLAR 3
|
||||
#define CMD_SPI_SET_PHASE 4
|
||||
#define CMD_SPI_SET_MASTER 5
|
||||
#define CMD_SPI_SET_SENDOPT 6
|
||||
#define CMD_SPI_SET_RECVOPT 7
|
||||
#define CMD_SPI_SET_ORDER 8
|
||||
#define CMD_SPI_SET_LENGTH16 9
|
||||
#define CMD_SPI_GET_STAT 11
|
||||
#define CMD_SPI_GET_CFG 12
|
||||
#define CMD_SPI_SET_CSAVAIL 13
|
||||
#define CMD_SPI_SET_CSHIGH 14 /* CS unavail */
|
||||
#define CMD_SPI_SET_CSLOW 15 /* CS avail */
|
||||
#define CMD_SPI_MISO_ENABLE 16
|
||||
#define CMD_SPI_SET_CSENABLE 17
|
||||
#define CMD_SPI_SET_CSDISABLE 18
|
||||
|
||||
#define CMD_SPI_SET_TRIGGER_MODE 19
|
||||
#define CMD_SPI_SET_TRIGGER_SENSE 20
|
||||
#define CMD_SPI_SET_TRIGGER_EDGE 21
|
||||
#define CMD_SPI_SET_TRIGGER_LEVEL 22
|
||||
|
||||
#define CMD_SPI_SET_TIME_SPS 23
|
||||
#define CMD_SPI_SET_TIME_SAMPLES 24
|
||||
#define CMD_SPI_GET_SYSTEMCLOCK 25
|
||||
|
||||
#define CMD_SPI_SET_WRITECONTINUOUS 26
|
||||
#define CMD_SPI_SET_SKFS 27
|
||||
|
||||
#define CMD_SPI_GET_ALLCONFIG 32 /* For debug */
|
||||
|
||||
#define SPI_DEFAULT_BARD 0x0100
|
||||
|
||||
#define SPI0_IRQ_NUM IRQ_SPI
|
||||
#define SPI_ERR_TRIG -1
|
||||
|
||||
#define BIT_CTL_ENABLE 0x4000
|
||||
#define BIT_CTL_OPENDRAIN 0x2000
|
||||
@ -148,6 +112,10 @@
|
||||
#define CFG_SPI_CS6VALUE 6
|
||||
#define CFG_SPI_CS7VALUE 7
|
||||
|
||||
#define CMD_SPI_SET_BAUDRATE 2
|
||||
#define CMD_SPI_GET_SYSTEMCLOCK 25
|
||||
#define CMD_SPI_SET_WRITECONTINUOUS 26
|
||||
|
||||
/* device.platform_data for SSP controller devices */
|
||||
struct bfin5xx_spi_master {
|
||||
u16 num_chipselect;
|
||||
|
@ -53,10 +53,10 @@ unsigned long get_pll_status(void);
|
||||
void change_baud(int baud);
|
||||
void fullon_mode(void);
|
||||
void active_mode(void);
|
||||
void sleep_mode(u32 sic_iwr);
|
||||
void deep_sleep(u32 sic_iwr);
|
||||
void hibernate_mode(u32 sic_iwr);
|
||||
void sleep_deeper(u32 sic_iwr);
|
||||
void sleep_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2);
|
||||
void deep_sleep(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2);
|
||||
void hibernate_mode(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2);
|
||||
void sleep_deeper(u32 sic_iwr0, u32 sic_iwr1, u32 sic_iwr2);
|
||||
void program_wdog_timer(unsigned long);
|
||||
void unmask_wdog_wakeup_evt(void);
|
||||
void clear_wdog_wakeup_evt(void);
|
||||
|
@ -376,16 +376,19 @@ struct gpio_port_t {
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
unsigned int bfin_pm_setup(void);
|
||||
void bfin_pm_restore(void);
|
||||
|
||||
#ifndef CONFIG_BF54x
|
||||
#define PM_WAKE_RISING 0x1
|
||||
#define PM_WAKE_FALLING 0x2
|
||||
#define PM_WAKE_HIGH 0x4
|
||||
#define PM_WAKE_LOW 0x8
|
||||
#define PM_WAKE_BOTH_EDGES (PM_WAKE_RISING | PM_WAKE_FALLING)
|
||||
#define PM_WAKE_IGNORE 0xF0
|
||||
|
||||
int gpio_pm_wakeup_request(unsigned gpio, unsigned char type);
|
||||
void gpio_pm_wakeup_free(unsigned gpio);
|
||||
unsigned int gpio_pm_setup(void);
|
||||
void gpio_pm_restore(void);
|
||||
|
||||
struct gpio_port_s {
|
||||
unsigned short data;
|
||||
@ -409,6 +412,7 @@ struct gpio_port_s {
|
||||
unsigned short fer;
|
||||
unsigned short reserved;
|
||||
};
|
||||
#endif /*CONFIG_BF54x*/
|
||||
#endif /*CONFIG_PM*/
|
||||
|
||||
/***********************************************************
|
||||
|
@ -46,6 +46,10 @@
|
||||
#include "defBF544.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BF547
|
||||
#include "defBF547.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BF548
|
||||
#include "defBF548.h"
|
||||
#endif
|
||||
@ -58,10 +62,12 @@
|
||||
#ifdef CONFIG_BF542
|
||||
#include "cdefBF542.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BF544
|
||||
#include "cdefBF544.h"
|
||||
#endif
|
||||
#ifdef CONFIG_BF547
|
||||
#include "cdefBF547.h"
|
||||
#endif
|
||||
#ifdef CONFIG_BF548
|
||||
#include "cdefBF548.h"
|
||||
#endif
|
||||
|
865
include/asm-blackfin/mach-bf548/cdefBF547.h
Normal file
865
include/asm-blackfin/mach-bf548/cdefBF547.h
Normal file
@ -0,0 +1,865 @@
|
||||
/*
|
||||
* File: include/asm-blackfin/mach-bf548/cdefBF547.h
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
* Created:
|
||||
* Description:
|
||||
*
|
||||
* Rev:
|
||||
*
|
||||
* Modified:
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING.
|
||||
* If not, write to the Free Software Foundation,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef _CDEF_BF548_H
|
||||
#define _CDEF_BF548_H
|
||||
|
||||
/* include all Core registers and bit definitions */
|
||||
#include "defBF548.h"
|
||||
|
||||
/* include core sbfin_read_()ecific register pointer definitions */
|
||||
#include <asm/mach-common/cdef_LPBlackfin.h>
|
||||
|
||||
/* SYSTEM & MMR ADDRESS DEFINITIONS FOR ADSP-BF548 */
|
||||
|
||||
/* include cdefBF54x_base.h for the set of #defines that are common to all ADSP-BF54x bfin_read_()rocessors */
|
||||
#include "cdefBF54x_base.h"
|
||||
|
||||
/* The following are the #defines needed by ADSP-BF548 that are not in the common header */
|
||||
|
||||
/* Timer Registers */
|
||||
|
||||
#define bfin_read_TIMER8_CONFIG() bfin_read16(TIMER8_CONFIG)
|
||||
#define bfin_write_TIMER8_CONFIG(val) bfin_write16(TIMER8_CONFIG, val)
|
||||
#define bfin_read_TIMER8_COUNTER() bfin_read32(TIMER8_COUNTER)
|
||||
#define bfin_write_TIMER8_COUNTER(val) bfin_write32(TIMER8_COUNTER, val)
|
||||
#define bfin_read_TIMER8_PERIOD() bfin_read32(TIMER8_PERIOD)
|
||||
#define bfin_write_TIMER8_PERIOD(val) bfin_write32(TIMER8_PERIOD, val)
|
||||
#define bfin_read_TIMER8_WIDTH() bfin_read32(TIMER8_WIDTH)
|
||||
#define bfin_write_TIMER8_WIDTH(val) bfin_write32(TIMER8_WIDTH, val)
|
||||
#define bfin_read_TIMER9_CONFIG() bfin_read16(TIMER9_CONFIG)
|
||||
#define bfin_write_TIMER9_CONFIG(val) bfin_write16(TIMER9_CONFIG, val)
|
||||
#define bfin_read_TIMER9_COUNTER() bfin_read32(TIMER9_COUNTER)
|
||||
#define bfin_write_TIMER9_COUNTER(val) bfin_write32(TIMER9_COUNTER, val)
|
||||
#define bfin_read_TIMER9_PERIOD() bfin_read32(TIMER9_PERIOD)
|
||||
#define bfin_write_TIMER9_PERIOD(val) bfin_write32(TIMER9_PERIOD, val)
|
||||
#define bfin_read_TIMER9_WIDTH() bfin_read32(TIMER9_WIDTH)
|
||||
#define bfin_write_TIMER9_WIDTH(val) bfin_write32(TIMER9_WIDTH, val)
|
||||
#define bfin_read_TIMER10_CONFIG() bfin_read16(TIMER10_CONFIG)
|
||||
#define bfin_write_TIMER10_CONFIG(val) bfin_write16(TIMER10_CONFIG, val)
|
||||
#define bfin_read_TIMER10_COUNTER() bfin_read32(TIMER10_COUNTER)
|
||||
#define bfin_write_TIMER10_COUNTER(val) bfin_write32(TIMER10_COUNTER, val)
|
||||
#define bfin_read_TIMER10_PERIOD() bfin_read32(TIMER10_PERIOD)
|
||||
#define bfin_write_TIMER10_PERIOD(val) bfin_write32(TIMER10_PERIOD, val)
|
||||
#define bfin_read_TIMER10_WIDTH() bfin_read32(TIMER10_WIDTH)
|
||||
#define bfin_write_TIMER10_WIDTH(val) bfin_write32(TIMER10_WIDTH, val)
|
||||
|
||||
/* Timer Groubfin_read_() of 3 */
|
||||
|
||||
#define bfin_read_TIMER_ENABLE1() bfin_read16(TIMER_ENABLE1)
|
||||
#define bfin_write_TIMER_ENABLE1(val) bfin_write16(TIMER_ENABLE1, val)
|
||||
#define bfin_read_TIMER_DISABLE1() bfin_read16(TIMER_DISABLE1)
|
||||
#define bfin_write_TIMER_DISABLE1(val) bfin_write16(TIMER_DISABLE1, val)
|
||||
#define bfin_read_TIMER_STATUS1() bfin_read32(TIMER_STATUS1)
|
||||
#define bfin_write_TIMER_STATUS1(val) bfin_write32(TIMER_STATUS1, val)
|
||||
|
||||
/* SPORT0 Registers */
|
||||
|
||||
#define bfin_read_SPORT0_TCR1() bfin_read16(SPORT0_TCR1)
|
||||
#define bfin_write_SPORT0_TCR1(val) bfin_write16(SPORT0_TCR1, val)
|
||||
#define bfin_read_SPORT0_TCR2() bfin_read16(SPORT0_TCR2)
|
||||
#define bfin_write_SPORT0_TCR2(val) bfin_write16(SPORT0_TCR2, val)
|
||||
#define bfin_read_SPORT0_TCLKDIV() bfin_read16(SPORT0_TCLKDIV)
|
||||
#define bfin_write_SPORT0_TCLKDIV(val) bfin_write16(SPORT0_TCLKDIV, val)
|
||||
#define bfin_read_SPORT0_TFSDIV() bfin_read16(SPORT0_TFSDIV)
|
||||
#define bfin_write_SPORT0_TFSDIV(val) bfin_write16(SPORT0_TFSDIV, val)
|
||||
#define bfin_read_SPORT0_TX() bfin_read32(SPORT0_TX)
|
||||
#define bfin_write_SPORT0_TX(val) bfin_write32(SPORT0_TX, val)
|
||||
#define bfin_read_SPORT0_RX() bfin_read32(SPORT0_RX)
|
||||
#define bfin_write_SPORT0_RX(val) bfin_write32(SPORT0_RX, val)
|
||||
#define bfin_read_SPORT0_RCR1() bfin_read16(SPORT0_RCR1)
|
||||
#define bfin_write_SPORT0_RCR1(val) bfin_write16(SPORT0_RCR1, val)
|
||||
#define bfin_read_SPORT0_RCR2() bfin_read16(SPORT0_RCR2)
|
||||
#define bfin_write_SPORT0_RCR2(val) bfin_write16(SPORT0_RCR2, val)
|
||||
#define bfin_read_SPORT0_RCLKDIV() bfin_read16(SPORT0_RCLKDIV)
|
||||
#define bfin_write_SPORT0_RCLKDIV(val) bfin_write16(SPORT0_RCLKDIV, val)
|
||||
#define bfin_read_SPORT0_RFSDIV() bfin_read16(SPORT0_RFSDIV)
|
||||
#define bfin_write_SPORT0_RFSDIV(val) bfin_write16(SPORT0_RFSDIV, val)
|
||||
#define bfin_read_SPORT0_STAT() bfin_read16(SPORT0_STAT)
|
||||
#define bfin_write_SPORT0_STAT(val) bfin_write16(SPORT0_STAT, val)
|
||||
#define bfin_read_SPORT0_CHNL() bfin_read16(SPORT0_CHNL)
|
||||
#define bfin_write_SPORT0_CHNL(val) bfin_write16(SPORT0_CHNL, val)
|
||||
#define bfin_read_SPORT0_MCMC1() bfin_read16(SPORT0_MCMC1)
|
||||
#define bfin_write_SPORT0_MCMC1(val) bfin_write16(SPORT0_MCMC1, val)
|
||||
#define bfin_read_SPORT0_MCMC2() bfin_read16(SPORT0_MCMC2)
|
||||
#define bfin_write_SPORT0_MCMC2(val) bfin_write16(SPORT0_MCMC2, val)
|
||||
#define bfin_read_SPORT0_MTCS0() bfin_read32(SPORT0_MTCS0)
|
||||
#define bfin_write_SPORT0_MTCS0(val) bfin_write32(SPORT0_MTCS0, val)
|
||||
#define bfin_read_SPORT0_MTCS1() bfin_read32(SPORT0_MTCS1)
|
||||
#define bfin_write_SPORT0_MTCS1(val) bfin_write32(SPORT0_MTCS1, val)
|
||||
#define bfin_read_SPORT0_MTCS2() bfin_read32(SPORT0_MTCS2)
|
||||
#define bfin_write_SPORT0_MTCS2(val) bfin_write32(SPORT0_MTCS2, val)
|
||||
#define bfin_read_SPORT0_MTCS3() bfin_read32(SPORT0_MTCS3)
|
||||
#define bfin_write_SPORT0_MTCS3(val) bfin_write32(SPORT0_MTCS3, val)
|
||||
#define bfin_read_SPORT0_MRCS0() bfin_read32(SPORT0_MRCS0)
|
||||
#define bfin_write_SPORT0_MRCS0(val) bfin_write32(SPORT0_MRCS0, val)
|
||||
#define bfin_read_SPORT0_MRCS1() bfin_read32(SPORT0_MRCS1)
|
||||
#define bfin_write_SPORT0_MRCS1(val) bfin_write32(SPORT0_MRCS1, val)
|
||||
#define bfin_read_SPORT0_MRCS2() bfin_read32(SPORT0_MRCS2)
|
||||
#define bfin_write_SPORT0_MRCS2(val) bfin_write32(SPORT0_MRCS2, val)
|
||||
#define bfin_read_SPORT0_MRCS3() bfin_read32(SPORT0_MRCS3)
|
||||
#define bfin_write_SPORT0_MRCS3(val) bfin_write32(SPORT0_MRCS3, val)
|
||||
|
||||
/* EPPI0 Registers */
|
||||
|
||||
#define bfin_read_EPPI0_STATUS() bfin_read16(EPPI0_STATUS)
|
||||
#define bfin_write_EPPI0_STATUS(val) bfin_write16(EPPI0_STATUS, val)
|
||||
#define bfin_read_EPPI0_HCOUNT() bfin_read16(EPPI0_HCOUNT)
|
||||
#define bfin_write_EPPI0_HCOUNT(val) bfin_write16(EPPI0_HCOUNT, val)
|
||||
#define bfin_read_EPPI0_HDELAY() bfin_read16(EPPI0_HDELAY)
|
||||
#define bfin_write_EPPI0_HDELAY(val) bfin_write16(EPPI0_HDELAY, val)
|
||||
#define bfin_read_EPPI0_VCOUNT() bfin_read16(EPPI0_VCOUNT)
|
||||
#define bfin_write_EPPI0_VCOUNT(val) bfin_write16(EPPI0_VCOUNT, val)
|
||||
#define bfin_read_EPPI0_VDELAY() bfin_read16(EPPI0_VDELAY)
|
||||
#define bfin_write_EPPI0_VDELAY(val) bfin_write16(EPPI0_VDELAY, val)
|
||||
#define bfin_read_EPPI0_FRAME() bfin_read16(EPPI0_FRAME)
|
||||
#define bfin_write_EPPI0_FRAME(val) bfin_write16(EPPI0_FRAME, val)
|
||||
#define bfin_read_EPPI0_LINE() bfin_read16(EPPI0_LINE)
|
||||
#define bfin_write_EPPI0_LINE(val) bfin_write16(EPPI0_LINE, val)
|
||||
#define bfin_read_EPPI0_CLKDIV() bfin_read16(EPPI0_CLKDIV)
|
||||
#define bfin_write_EPPI0_CLKDIV(val) bfin_write16(EPPI0_CLKDIV, val)
|
||||
#define bfin_read_EPPI0_CONTROL() bfin_read32(EPPI0_CONTROL)
|
||||
#define bfin_write_EPPI0_CONTROL(val) bfin_write32(EPPI0_CONTROL, val)
|
||||
#define bfin_read_EPPI0_FS1W_HBL() bfin_read32(EPPI0_FS1W_HBL)
|
||||
#define bfin_write_EPPI0_FS1W_HBL(val) bfin_write32(EPPI0_FS1W_HBL, val)
|
||||
#define bfin_read_EPPI0_FS1P_AVPL() bfin_read32(EPPI0_FS1P_AVPL)
|
||||
#define bfin_write_EPPI0_FS1P_AVPL(val) bfin_write32(EPPI0_FS1P_AVPL, val)
|
||||
#define bfin_read_EPPI0_FS2W_LVB() bfin_read32(EPPI0_FS2W_LVB)
|
||||
#define bfin_write_EPPI0_FS2W_LVB(val) bfin_write32(EPPI0_FS2W_LVB, val)
|
||||
#define bfin_read_EPPI0_FS2P_LAVF() bfin_read32(EPPI0_FS2P_LAVF)
|
||||
#define bfin_write_EPPI0_FS2P_LAVF(val) bfin_write32(EPPI0_FS2P_LAVF, val)
|
||||
#define bfin_read_EPPI0_CLIP() bfin_read32(EPPI0_CLIP)
|
||||
#define bfin_write_EPPI0_CLIP(val) bfin_write32(EPPI0_CLIP, val)
|
||||
|
||||
/* UART2 Registers */
|
||||
|
||||
#define bfin_read_UART2_DLL() bfin_read16(UART2_DLL)
|
||||
#define bfin_write_UART2_DLL(val) bfin_write16(UART2_DLL, val)
|
||||
#define bfin_read_UART2_DLH() bfin_read16(UART2_DLH)
|
||||
#define bfin_write_UART2_DLH(val) bfin_write16(UART2_DLH, val)
|
||||
#define bfin_read_UART2_GCTL() bfin_read16(UART2_GCTL)
|
||||
#define bfin_write_UART2_GCTL(val) bfin_write16(UART2_GCTL, val)
|
||||
#define bfin_read_UART2_LCR() bfin_read16(UART2_LCR)
|
||||
#define bfin_write_UART2_LCR(val) bfin_write16(UART2_LCR, val)
|
||||
#define bfin_read_UART2_MCR() bfin_read16(UART2_MCR)
|
||||
#define bfin_write_UART2_MCR(val) bfin_write16(UART2_MCR, val)
|
||||
#define bfin_read_UART2_LSR() bfin_read16(UART2_LSR)
|
||||
#define bfin_write_UART2_LSR(val) bfin_write16(UART2_LSR, val)
|
||||
#define bfin_read_UART2_MSR() bfin_read16(UART2_MSR)
|
||||
#define bfin_write_UART2_MSR(val) bfin_write16(UART2_MSR, val)
|
||||
#define bfin_read_UART2_SCR() bfin_read16(UART2_SCR)
|
||||
#define bfin_write_UART2_SCR(val) bfin_write16(UART2_SCR, val)
|
||||
#define bfin_read_UART2_IER_SET() bfin_read16(UART2_IER_SET)
|
||||
#define bfin_write_UART2_IER_SET(val) bfin_write16(UART2_IER_SET, val)
|
||||
#define bfin_read_UART2_IER_CLEAR() bfin_read16(UART2_IER_CLEAR)
|
||||
#define bfin_write_UART2_IER_CLEAR(val) bfin_write16(UART2_IER_CLEAR, val)
|
||||
#define bfin_read_UART2_RBR() bfin_read16(UART2_RBR)
|
||||
#define bfin_write_UART2_RBR(val) bfin_write16(UART2_RBR, val)
|
||||
|
||||
/* Two Wire Interface Registers (TWI1) */
|
||||
|
||||
#define bfin_read_TWI1_CLKDIV() bfin_read16(TWI1_CLKDIV)
|
||||
#define bfin_write_TWI1_CLKDIV(val) bfin_write16(TWI1_CLKDIV, val)
|
||||
#define bfin_read_TWI1_CONTROL() bfin_read16(TWI1_CONTROL)
|
||||
#define bfin_write_TWI1_CONTROL(val) bfin_write16(TWI1_CONTROL, val)
|
||||
#define bfin_read_TWI1_SLAVE_CTRL() bfin_read16(TWI1_SLAVE_CTRL)
|
||||
#define bfin_write_TWI1_SLAVE_CTRL(val) bfin_write16(TWI1_SLAVE_CTRL, val)
|
||||
#define bfin_read_TWI1_SLAVE_STAT() bfin_read16(TWI1_SLAVE_STAT)
|
||||
#define bfin_write_TWI1_SLAVE_STAT(val) bfin_write16(TWI1_SLAVE_STAT, val)
|
||||
#define bfin_read_TWI1_SLAVE_ADDR() bfin_read16(TWI1_SLAVE_ADDR)
|
||||
#define bfin_write_TWI1_SLAVE_ADDR(val) bfin_write16(TWI1_SLAVE_ADDR, val)
|
||||
#define bfin_read_TWI1_MASTER_CTRL() bfin_read16(TWI1_MASTER_CTRL)
|
||||
#define bfin_write_TWI1_MASTER_CTRL(val) bfin_write16(TWI1_MASTER_CTRL, val)
|
||||
#define bfin_read_TWI1_MASTER_STAT() bfin_read16(TWI1_MASTER_STAT)
|
||||
#define bfin_write_TWI1_MASTER_STAT(val) bfin_write16(TWI1_MASTER_STAT, val)
|
||||
#define bfin_read_TWI1_MASTER_ADDR() bfin_read16(TWI1_MASTER_ADDR)
|
||||
#define bfin_write_TWI1_MASTER_ADDR(val) bfin_write16(TWI1_MASTER_ADDR, val)
|
||||
#define bfin_read_TWI1_INT_STAT() bfin_read16(TWI1_INT_STAT)
|
||||
#define bfin_write_TWI1_INT_STAT(val) bfin_write16(TWI1_INT_STAT, val)
|
||||
#define bfin_read_TWI1_INT_MASK() bfin_read16(TWI1_INT_MASK)
|
||||
#define bfin_write_TWI1_INT_MASK(val) bfin_write16(TWI1_INT_MASK, val)
|
||||
#define bfin_read_TWI1_FIFO_CTRL() bfin_read16(TWI1_FIFO_CTRL)
|
||||
#define bfin_write_TWI1_FIFO_CTRL(val) bfin_write16(TWI1_FIFO_CTRL, val)
|
||||
#define bfin_read_TWI1_FIFO_STAT() bfin_read16(TWI1_FIFO_STAT)
|
||||
#define bfin_write_TWI1_FIFO_STAT(val) bfin_write16(TWI1_FIFO_STAT, val)
|
||||
#define bfin_read_TWI1_XMT_DATA8() bfin_read16(TWI1_XMT_DATA8)
|
||||
#define bfin_write_TWI1_XMT_DATA8(val) bfin_write16(TWI1_XMT_DATA8, val)
|
||||
#define bfin_read_TWI1_XMT_DATA16() bfin_read16(TWI1_XMT_DATA16)
|
||||
#define bfin_write_TWI1_XMT_DATA16(val) bfin_write16(TWI1_XMT_DATA16, val)
|
||||
#define bfin_read_TWI1_RCV_DATA8() bfin_read16(TWI1_RCV_DATA8)
|
||||
#define bfin_write_TWI1_RCV_DATA8(val) bfin_write16(TWI1_RCV_DATA8, val)
|
||||
#define bfin_read_TWI1_RCV_DATA16() bfin_read16(TWI1_RCV_DATA16)
|
||||
#define bfin_write_TWI1_RCV_DATA16(val) bfin_write16(TWI1_RCV_DATA16, val)
|
||||
|
||||
/* SPI2 Registers */
|
||||
|
||||
#define bfin_read_SPI2_CTL() bfin_read16(SPI2_CTL)
|
||||
#define bfin_write_SPI2_CTL(val) bfin_write16(SPI2_CTL, val)
|
||||
#define bfin_read_SPI2_FLG() bfin_read16(SPI2_FLG)
|
||||
#define bfin_write_SPI2_FLG(val) bfin_write16(SPI2_FLG, val)
|
||||
#define bfin_read_SPI2_STAT() bfin_read16(SPI2_STAT)
|
||||
#define bfin_write_SPI2_STAT(val) bfin_write16(SPI2_STAT, val)
|
||||
#define bfin_read_SPI2_TDBR() bfin_read16(SPI2_TDBR)
|
||||
#define bfin_write_SPI2_TDBR(val) bfin_write16(SPI2_TDBR, val)
|
||||
#define bfin_read_SPI2_RDBR() bfin_read16(SPI2_RDBR)
|
||||
#define bfin_write_SPI2_RDBR(val) bfin_write16(SPI2_RDBR, val)
|
||||
#define bfin_read_SPI2_BAUD() bfin_read16(SPI2_BAUD)
|
||||
#define bfin_write_SPI2_BAUD(val) bfin_write16(SPI2_BAUD, val)
|
||||
#define bfin_read_SPI2_SHADOW() bfin_read16(SPI2_SHADOW)
|
||||
#define bfin_write_SPI2_SHADOW(val) bfin_write16(SPI2_SHADOW, val)
|
||||
|
||||
/* ATAPI Registers */
|
||||
|
||||
#define bfin_read_ATAPI_CONTROL() bfin_read16(ATAPI_CONTROL)
|
||||
#define bfin_write_ATAPI_CONTROL(val) bfin_write16(ATAPI_CONTROL, val)
|
||||
#define bfin_read_ATAPI_STATUS() bfin_read16(ATAPI_STATUS)
|
||||
#define bfin_write_ATAPI_STATUS(val) bfin_write16(ATAPI_STATUS, val)
|
||||
#define bfin_read_ATAPI_DEV_ADDR() bfin_read16(ATAPI_DEV_ADDR)
|
||||
#define bfin_write_ATAPI_DEV_ADDR(val) bfin_write16(ATAPI_DEV_ADDR, val)
|
||||
#define bfin_read_ATAPI_DEV_TXBUF() bfin_read16(ATAPI_DEV_TXBUF)
|
||||
#define bfin_write_ATAPI_DEV_TXBUF(val) bfin_write16(ATAPI_DEV_TXBUF, val)
|
||||
#define bfin_read_ATAPI_DEV_RXBUF() bfin_read16(ATAPI_DEV_RXBUF)
|
||||
#define bfin_write_ATAPI_DEV_RXBUF(val) bfin_write16(ATAPI_DEV_RXBUF, val)
|
||||
#define bfin_read_ATAPI_INT_MASK() bfin_read16(ATAPI_INT_MASK)
|
||||
#define bfin_write_ATAPI_INT_MASK(val) bfin_write16(ATAPI_INT_MASK, val)
|
||||
#define bfin_read_ATAPI_INT_STATUS() bfin_read16(ATAPI_INT_STATUS)
|
||||
#define bfin_write_ATAPI_INT_STATUS(val) bfin_write16(ATAPI_INT_STATUS, val)
|
||||
#define bfin_read_ATAPI_XFER_LEN() bfin_read16(ATAPI_XFER_LEN)
|
||||
#define bfin_write_ATAPI_XFER_LEN(val) bfin_write16(ATAPI_XFER_LEN, val)
|
||||
#define bfin_read_ATAPI_LINE_STATUS() bfin_read16(ATAPI_LINE_STATUS)
|
||||
#define bfin_write_ATAPI_LINE_STATUS(val) bfin_write16(ATAPI_LINE_STATUS, val)
|
||||
#define bfin_read_ATAPI_SM_STATE() bfin_read16(ATAPI_SM_STATE)
|
||||
#define bfin_write_ATAPI_SM_STATE(val) bfin_write16(ATAPI_SM_STATE, val)
|
||||
#define bfin_read_ATAPI_TERMINATE() bfin_read16(ATAPI_TERMINATE)
|
||||
#define bfin_write_ATAPI_TERMINATE(val) bfin_write16(ATAPI_TERMINATE, val)
|
||||
#define bfin_read_ATAPI_PIO_TFRCNT() bfin_read16(ATAPI_PIO_TFRCNT)
|
||||
#define bfin_write_ATAPI_PIO_TFRCNT(val) bfin_write16(ATAPI_PIO_TFRCNT, val)
|
||||
#define bfin_read_ATAPI_DMA_TFRCNT() bfin_read16(ATAPI_DMA_TFRCNT)
|
||||
#define bfin_write_ATAPI_DMA_TFRCNT(val) bfin_write16(ATAPI_DMA_TFRCNT, val)
|
||||
#define bfin_read_ATAPI_UMAIN_TFRCNT() bfin_read16(ATAPI_UMAIN_TFRCNT)
|
||||
#define bfin_write_ATAPI_UMAIN_TFRCNT(val) bfin_write16(ATAPI_UMAIN_TFRCNT, val)
|
||||
#define bfin_read_ATAPI_UDMAOUT_TFRCNT() bfin_read16(ATAPI_UDMAOUT_TFRCNT)
|
||||
#define bfin_write_ATAPI_UDMAOUT_TFRCNT(val) bfin_write16(ATAPI_UDMAOUT_TFRCNT, val)
|
||||
#define bfin_read_ATAPI_REG_TIM_0() bfin_read16(ATAPI_REG_TIM_0)
|
||||
#define bfin_write_ATAPI_REG_TIM_0(val) bfin_write16(ATAPI_REG_TIM_0, val)
|
||||
#define bfin_read_ATAPI_PIO_TIM_0() bfin_read16(ATAPI_PIO_TIM_0)
|
||||
#define bfin_write_ATAPI_PIO_TIM_0(val) bfin_write16(ATAPI_PIO_TIM_0, val)
|
||||
#define bfin_read_ATAPI_PIO_TIM_1() bfin_read16(ATAPI_PIO_TIM_1)
|
||||
#define bfin_write_ATAPI_PIO_TIM_1(val) bfin_write16(ATAPI_PIO_TIM_1, val)
|
||||
#define bfin_read_ATAPI_MULTI_TIM_0() bfin_read16(ATAPI_MULTI_TIM_0)
|
||||
#define bfin_write_ATAPI_MULTI_TIM_0(val) bfin_write16(ATAPI_MULTI_TIM_0, val)
|
||||
#define bfin_read_ATAPI_MULTI_TIM_1() bfin_read16(ATAPI_MULTI_TIM_1)
|
||||
#define bfin_write_ATAPI_MULTI_TIM_1(val) bfin_write16(ATAPI_MULTI_TIM_1, val)
|
||||
#define bfin_read_ATAPI_MULTI_TIM_2() bfin_read16(ATAPI_MULTI_TIM_2)
|
||||
#define bfin_write_ATAPI_MULTI_TIM_2(val) bfin_write16(ATAPI_MULTI_TIM_2, val)
|
||||
#define bfin_read_ATAPI_ULTRA_TIM_0() bfin_read16(ATAPI_ULTRA_TIM_0)
|
||||
#define bfin_write_ATAPI_ULTRA_TIM_0(val) bfin_write16(ATAPI_ULTRA_TIM_0, val)
|
||||
#define bfin_read_ATAPI_ULTRA_TIM_1() bfin_read16(ATAPI_ULTRA_TIM_1)
|
||||
#define bfin_write_ATAPI_ULTRA_TIM_1(val) bfin_write16(ATAPI_ULTRA_TIM_1, val)
|
||||
#define bfin_read_ATAPI_ULTRA_TIM_2() bfin_read16(ATAPI_ULTRA_TIM_2)
|
||||
#define bfin_write_ATAPI_ULTRA_TIM_2(val) bfin_write16(ATAPI_ULTRA_TIM_2, val)
|
||||
#define bfin_read_ATAPI_ULTRA_TIM_3() bfin_read16(ATAPI_ULTRA_TIM_3)
|
||||
#define bfin_write_ATAPI_ULTRA_TIM_3(val) bfin_write16(ATAPI_ULTRA_TIM_3, val)
|
||||
|
||||
/* SDH Registers */
|
||||
|
||||
#define bfin_read_SDH_PWR_CTL() bfin_read16(SDH_PWR_CTL)
|
||||
#define bfin_write_SDH_PWR_CTL(val) bfin_write16(SDH_PWR_CTL, val)
|
||||
#define bfin_read_SDH_CLK_CTL() bfin_read16(SDH_CLK_CTL)
|
||||
#define bfin_write_SDH_CLK_CTL(val) bfin_write16(SDH_CLK_CTL, val)
|
||||
#define bfin_read_SDH_ARGUMENT() bfin_read32(SDH_ARGUMENT)
|
||||
#define bfin_write_SDH_ARGUMENT(val) bfin_write32(SDH_ARGUMENT, val)
|
||||
#define bfin_read_SDH_COMMAND() bfin_read16(SDH_COMMAND)
|
||||
#define bfin_write_SDH_COMMAND(val) bfin_write16(SDH_COMMAND, val)
|
||||
#define bfin_read_SDH_RESP_CMD() bfin_read16(SDH_RESP_CMD)
|
||||
#define bfin_write_SDH_RESP_CMD(val) bfin_write16(SDH_RESP_CMD, val)
|
||||
#define bfin_read_SDH_RESPONSE0() bfin_read32(SDH_RESPONSE0)
|
||||
#define bfin_write_SDH_RESPONSE0(val) bfin_write32(SDH_RESPONSE0, val)
|
||||
#define bfin_read_SDH_RESPONSE1() bfin_read32(SDH_RESPONSE1)
|
||||
#define bfin_write_SDH_RESPONSE1(val) bfin_write32(SDH_RESPONSE1, val)
|
||||
#define bfin_read_SDH_RESPONSE2() bfin_read32(SDH_RESPONSE2)
|
||||
#define bfin_write_SDH_RESPONSE2(val) bfin_write32(SDH_RESPONSE2, val)
|
||||
#define bfin_read_SDH_RESPONSE3() bfin_read32(SDH_RESPONSE3)
|
||||
#define bfin_write_SDH_RESPONSE3(val) bfin_write32(SDH_RESPONSE3, val)
|
||||
#define bfin_read_SDH_DATA_TIMER() bfin_read32(SDH_DATA_TIMER)
|
||||
#define bfin_write_SDH_DATA_TIMER(val) bfin_write32(SDH_DATA_TIMER, val)
|
||||
#define bfin_read_SDH_DATA_LGTH() bfin_read16(SDH_DATA_LGTH)
|
||||
#define bfin_write_SDH_DATA_LGTH(val) bfin_write16(SDH_DATA_LGTH, val)
|
||||
#define bfin_read_SDH_DATA_CTL() bfin_read16(SDH_DATA_CTL)
|
||||
#define bfin_write_SDH_DATA_CTL(val) bfin_write16(SDH_DATA_CTL, val)
|
||||
#define bfin_read_SDH_DATA_CNT() bfin_read16(SDH_DATA_CNT)
|
||||
#define bfin_write_SDH_DATA_CNT(val) bfin_write16(SDH_DATA_CNT, val)
|
||||
#define bfin_read_SDH_STATUS() bfin_read32(SDH_STATUS)
|
||||
#define bfin_write_SDH_STATUS(val) bfin_write32(SDH_STATUS, val)
|
||||
#define bfin_read_SDH_STATUS_CLR() bfin_read16(SDH_STATUS_CLR)
|
||||
#define bfin_write_SDH_STATUS_CLR(val) bfin_write16(SDH_STATUS_CLR, val)
|
||||
#define bfin_read_SDH_MASK0() bfin_read32(SDH_MASK0)
|
||||
#define bfin_write_SDH_MASK0(val) bfin_write32(SDH_MASK0, val)
|
||||
#define bfin_read_SDH_MASK1() bfin_read32(SDH_MASK1)
|
||||
#define bfin_write_SDH_MASK1(val) bfin_write32(SDH_MASK1, val)
|
||||
#define bfin_read_SDH_FIFO_CNT() bfin_read16(SDH_FIFO_CNT)
|
||||
#define bfin_write_SDH_FIFO_CNT(val) bfin_write16(SDH_FIFO_CNT, val)
|
||||
#define bfin_read_SDH_FIFO() bfin_read32(SDH_FIFO)
|
||||
#define bfin_write_SDH_FIFO(val) bfin_write32(SDH_FIFO, val)
|
||||
#define bfin_read_SDH_E_STATUS() bfin_read16(SDH_E_STATUS)
|
||||
#define bfin_write_SDH_E_STATUS(val) bfin_write16(SDH_E_STATUS, val)
|
||||
#define bfin_read_SDH_E_MASK() bfin_read16(SDH_E_MASK)
|
||||
#define bfin_write_SDH_E_MASK(val) bfin_write16(SDH_E_MASK, val)
|
||||
#define bfin_read_SDH_CFG() bfin_read16(SDH_CFG)
|
||||
#define bfin_write_SDH_CFG(val) bfin_write16(SDH_CFG, val)
|
||||
#define bfin_read_SDH_RD_WAIT_EN() bfin_read16(SDH_RD_WAIT_EN)
|
||||
#define bfin_write_SDH_RD_WAIT_EN(val) bfin_write16(SDH_RD_WAIT_EN, val)
|
||||
#define bfin_read_SDH_PID0() bfin_read16(SDH_PID0)
|
||||
#define bfin_write_SDH_PID0(val) bfin_write16(SDH_PID0, val)
|
||||
#define bfin_read_SDH_PID1() bfin_read16(SDH_PID1)
|
||||
#define bfin_write_SDH_PID1(val) bfin_write16(SDH_PID1, val)
|
||||
#define bfin_read_SDH_PID2() bfin_read16(SDH_PID2)
|
||||
#define bfin_write_SDH_PID2(val) bfin_write16(SDH_PID2, val)
|
||||
#define bfin_read_SDH_PID3() bfin_read16(SDH_PID3)
|
||||
#define bfin_write_SDH_PID3(val) bfin_write16(SDH_PID3, val)
|
||||
#define bfin_read_SDH_PID4() bfin_read16(SDH_PID4)
|
||||
#define bfin_write_SDH_PID4(val) bfin_write16(SDH_PID4, val)
|
||||
#define bfin_read_SDH_PID5() bfin_read16(SDH_PID5)
|
||||
#define bfin_write_SDH_PID5(val) bfin_write16(SDH_PID5, val)
|
||||
#define bfin_read_SDH_PID6() bfin_read16(SDH_PID6)
|
||||
#define bfin_write_SDH_PID6(val) bfin_write16(SDH_PID6, val)
|
||||
#define bfin_read_SDH_PID7() bfin_read16(SDH_PID7)
|
||||
#define bfin_write_SDH_PID7(val) bfin_write16(SDH_PID7, val)
|
||||
|
||||
/* HOST Port Registers */
|
||||
|
||||
#define bfin_read_HOST_CONTROL() bfin_read16(HOST_CONTROL)
|
||||
#define bfin_write_HOST_CONTROL(val) bfin_write16(HOST_CONTROL, val)
|
||||
#define bfin_read_HOST_STATUS() bfin_read16(HOST_STATUS)
|
||||
#define bfin_write_HOST_STATUS(val) bfin_write16(HOST_STATUS, val)
|
||||
#define bfin_read_HOST_TIMEOUT() bfin_read16(HOST_TIMEOUT)
|
||||
#define bfin_write_HOST_TIMEOUT(val) bfin_write16(HOST_TIMEOUT, val)
|
||||
|
||||
/* USB Control Registers */
|
||||
|
||||
#define bfin_read_USB_FADDR() bfin_read16(USB_FADDR)
|
||||
#define bfin_write_USB_FADDR(val) bfin_write16(USB_FADDR, val)
|
||||
#define bfin_read_USB_POWER() bfin_read16(USB_POWER)
|
||||
#define bfin_write_USB_POWER(val) bfin_write16(USB_POWER, val)
|
||||
#define bfin_read_USB_INTRTX() bfin_read16(USB_INTRTX)
|
||||
#define bfin_write_USB_INTRTX(val) bfin_write16(USB_INTRTX, val)
|
||||
#define bfin_read_USB_INTRRX() bfin_read16(USB_INTRRX)
|
||||
#define bfin_write_USB_INTRRX(val) bfin_write16(USB_INTRRX, val)
|
||||
#define bfin_read_USB_INTRTXE() bfin_read16(USB_INTRTXE)
|
||||
#define bfin_write_USB_INTRTXE(val) bfin_write16(USB_INTRTXE, val)
|
||||
#define bfin_read_USB_INTRRXE() bfin_read16(USB_INTRRXE)
|
||||
#define bfin_write_USB_INTRRXE(val) bfin_write16(USB_INTRRXE, val)
|
||||
#define bfin_read_USB_INTRUSB() bfin_read16(USB_INTRUSB)
|
||||
#define bfin_write_USB_INTRUSB(val) bfin_write16(USB_INTRUSB, val)
|
||||
#define bfin_read_USB_INTRUSBE() bfin_read16(USB_INTRUSBE)
|
||||
#define bfin_write_USB_INTRUSBE(val) bfin_write16(USB_INTRUSBE, val)
|
||||
#define bfin_read_USB_FRAME() bfin_read16(USB_FRAME)
|
||||
#define bfin_write_USB_FRAME(val) bfin_write16(USB_FRAME, val)
|
||||
#define bfin_read_USB_INDEX() bfin_read16(USB_INDEX)
|
||||
#define bfin_write_USB_INDEX(val) bfin_write16(USB_INDEX, val)
|
||||
#define bfin_read_USB_TESTMODE() bfin_read16(USB_TESTMODE)
|
||||
#define bfin_write_USB_TESTMODE(val) bfin_write16(USB_TESTMODE, val)
|
||||
#define bfin_read_USB_GLOBINTR() bfin_read16(USB_GLOBINTR)
|
||||
#define bfin_write_USB_GLOBINTR(val) bfin_write16(USB_GLOBINTR, val)
|
||||
#define bfin_read_USB_GLOBAL_CTL() bfin_read16(USB_GLOBAL_CTL)
|
||||
#define bfin_write_USB_GLOBAL_CTL(val) bfin_write16(USB_GLOBAL_CTL, val)
|
||||
|
||||
/* USB Packet Control Registers */
|
||||
|
||||
#define bfin_read_USB_TX_MAX_PACKET() bfin_read16(USB_TX_MAX_PACKET)
|
||||
#define bfin_write_USB_TX_MAX_PACKET(val) bfin_write16(USB_TX_MAX_PACKET, val)
|
||||
#define bfin_read_USB_CSR0() bfin_read16(USB_CSR0)
|
||||
#define bfin_write_USB_CSR0(val) bfin_write16(USB_CSR0, val)
|
||||
#define bfin_read_USB_TXCSR() bfin_read16(USB_TXCSR)
|
||||
#define bfin_write_USB_TXCSR(val) bfin_write16(USB_TXCSR, val)
|
||||
#define bfin_read_USB_RX_MAX_PACKET() bfin_read16(USB_RX_MAX_PACKET)
|
||||
#define bfin_write_USB_RX_MAX_PACKET(val) bfin_write16(USB_RX_MAX_PACKET, val)
|
||||
#define bfin_read_USB_RXCSR() bfin_read16(USB_RXCSR)
|
||||
#define bfin_write_USB_RXCSR(val) bfin_write16(USB_RXCSR, val)
|
||||
#define bfin_read_USB_COUNT0() bfin_read16(USB_COUNT0)
|
||||
#define bfin_write_USB_COUNT0(val) bfin_write16(USB_COUNT0, val)
|
||||
#define bfin_read_USB_RXCOUNT() bfin_read16(USB_RXCOUNT)
|
||||
#define bfin_write_USB_RXCOUNT(val) bfin_write16(USB_RXCOUNT, val)
|
||||
#define bfin_read_USB_TXTYPE() bfin_read16(USB_TXTYPE)
|
||||
#define bfin_write_USB_TXTYPE(val) bfin_write16(USB_TXTYPE, val)
|
||||
#define bfin_read_USB_NAKLIMIT0() bfin_read16(USB_NAKLIMIT0)
|
||||
#define bfin_write_USB_NAKLIMIT0(val) bfin_write16(USB_NAKLIMIT0, val)
|
||||
#define bfin_read_USB_TXINTERVAL() bfin_read16(USB_TXINTERVAL)
|
||||
#define bfin_write_USB_TXINTERVAL(val) bfin_write16(USB_TXINTERVAL, val)
|
||||
#define bfin_read_USB_RXTYPE() bfin_read16(USB_RXTYPE)
|
||||
#define bfin_write_USB_RXTYPE(val) bfin_write16(USB_RXTYPE, val)
|
||||
#define bfin_read_USB_RXINTERVAL() bfin_read16(USB_RXINTERVAL)
|
||||
#define bfin_write_USB_RXINTERVAL(val) bfin_write16(USB_RXINTERVAL, val)
|
||||
#define bfin_read_USB_TXCOUNT() bfin_read16(USB_TXCOUNT)
|
||||
#define bfin_write_USB_TXCOUNT(val) bfin_write16(USB_TXCOUNT, val)
|
||||
|
||||
/* USB Endbfin_read_()oint FIFO Registers */
|
||||
|
||||
#define bfin_read_USB_EP0_FIFO() bfin_read16(USB_EP0_FIFO)
|
||||
#define bfin_write_USB_EP0_FIFO(val) bfin_write16(USB_EP0_FIFO, val)
|
||||
#define bfin_read_USB_EP1_FIFO() bfin_read16(USB_EP1_FIFO)
|
||||
#define bfin_write_USB_EP1_FIFO(val) bfin_write16(USB_EP1_FIFO, val)
|
||||
#define bfin_read_USB_EP2_FIFO() bfin_read16(USB_EP2_FIFO)
|
||||
#define bfin_write_USB_EP2_FIFO(val) bfin_write16(USB_EP2_FIFO, val)
|
||||
#define bfin_read_USB_EP3_FIFO() bfin_read16(USB_EP3_FIFO)
|
||||
#define bfin_write_USB_EP3_FIFO(val) bfin_write16(USB_EP3_FIFO, val)
|
||||
#define bfin_read_USB_EP4_FIFO() bfin_read16(USB_EP4_FIFO)
|
||||
#define bfin_write_USB_EP4_FIFO(val) bfin_write16(USB_EP4_FIFO, val)
|
||||
#define bfin_read_USB_EP5_FIFO() bfin_read16(USB_EP5_FIFO)
|
||||
#define bfin_write_USB_EP5_FIFO(val) bfin_write16(USB_EP5_FIFO, val)
|
||||
#define bfin_read_USB_EP6_FIFO() bfin_read16(USB_EP6_FIFO)
|
||||
#define bfin_write_USB_EP6_FIFO(val) bfin_write16(USB_EP6_FIFO, val)
|
||||
#define bfin_read_USB_EP7_FIFO() bfin_read16(USB_EP7_FIFO)
|
||||
#define bfin_write_USB_EP7_FIFO(val) bfin_write16(USB_EP7_FIFO, val)
|
||||
|
||||
/* USB OTG Control Registers */
|
||||
|
||||
#define bfin_read_USB_OTG_DEV_CTL() bfin_read16(USB_OTG_DEV_CTL)
|
||||
#define bfin_write_USB_OTG_DEV_CTL(val) bfin_write16(USB_OTG_DEV_CTL, val)
|
||||
#define bfin_read_USB_OTG_VBUS_IRQ() bfin_read16(USB_OTG_VBUS_IRQ)
|
||||
#define bfin_write_USB_OTG_VBUS_IRQ(val) bfin_write16(USB_OTG_VBUS_IRQ, val)
|
||||
#define bfin_read_USB_OTG_VBUS_MASK() bfin_read16(USB_OTG_VBUS_MASK)
|
||||
#define bfin_write_USB_OTG_VBUS_MASK(val) bfin_write16(USB_OTG_VBUS_MASK, val)
|
||||
|
||||
/* USB Phy Control Registers */
|
||||
|
||||
#define bfin_read_USB_LINKINFO() bfin_read16(USB_LINKINFO)
|
||||
#define bfin_write_USB_LINKINFO(val) bfin_write16(USB_LINKINFO, val)
|
||||
#define bfin_read_USB_VPLEN() bfin_read16(USB_VPLEN)
|
||||
#define bfin_write_USB_VPLEN(val) bfin_write16(USB_VPLEN, val)
|
||||
#define bfin_read_USB_HS_EOF1() bfin_read16(USB_HS_EOF1)
|
||||
#define bfin_write_USB_HS_EOF1(val) bfin_write16(USB_HS_EOF1, val)
|
||||
#define bfin_read_USB_FS_EOF1() bfin_read16(USB_FS_EOF1)
|
||||
#define bfin_write_USB_FS_EOF1(val) bfin_write16(USB_FS_EOF1, val)
|
||||
#define bfin_read_USB_LS_EOF1() bfin_read16(USB_LS_EOF1)
|
||||
#define bfin_write_USB_LS_EOF1(val) bfin_write16(USB_LS_EOF1, val)
|
||||
|
||||
/* (APHY_CNTRL is for ADI usage only) */
|
||||
|
||||
#define bfin_read_USB_APHY_CNTRL() bfin_read16(USB_APHY_CNTRL)
|
||||
#define bfin_write_USB_APHY_CNTRL(val) bfin_write16(USB_APHY_CNTRL, val)
|
||||
|
||||
/* (APHY_CALIB is for ADI usage only) */
|
||||
|
||||
#define bfin_read_USB_APHY_CALIB() bfin_read16(USB_APHY_CALIB)
|
||||
#define bfin_write_USB_APHY_CALIB(val) bfin_write16(USB_APHY_CALIB, val)
|
||||
#define bfin_read_USB_APHY_CNTRL2() bfin_read16(USB_APHY_CNTRL2)
|
||||
#define bfin_write_USB_APHY_CNTRL2(val) bfin_write16(USB_APHY_CNTRL2, val)
|
||||
|
||||
/* (PHY_TEST is for ADI usage only) */
|
||||
|
||||
#define bfin_read_USB_PHY_TEST() bfin_read16(USB_PHY_TEST)
|
||||
#define bfin_write_USB_PHY_TEST(val) bfin_write16(USB_PHY_TEST, val)
|
||||
#define bfin_read_USB_PLLOSC_CTRL() bfin_read16(USB_PLLOSC_CTRL)
|
||||
#define bfin_write_USB_PLLOSC_CTRL(val) bfin_write16(USB_PLLOSC_CTRL, val)
|
||||
#define bfin_read_USB_SRP_CLKDIV() bfin_read16(USB_SRP_CLKDIV)
|
||||
#define bfin_write_USB_SRP_CLKDIV(val) bfin_write16(USB_SRP_CLKDIV, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 0 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI0_TXMAXP() bfin_read16(USB_EP_NI0_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI0_TXMAXP(val) bfin_write16(USB_EP_NI0_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI0_TXCSR() bfin_read16(USB_EP_NI0_TXCSR)
|
||||
#define bfin_write_USB_EP_NI0_TXCSR(val) bfin_write16(USB_EP_NI0_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI0_RXMAXP() bfin_read16(USB_EP_NI0_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI0_RXMAXP(val) bfin_write16(USB_EP_NI0_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI0_RXCSR() bfin_read16(USB_EP_NI0_RXCSR)
|
||||
#define bfin_write_USB_EP_NI0_RXCSR(val) bfin_write16(USB_EP_NI0_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI0_RXCOUNT() bfin_read16(USB_EP_NI0_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI0_RXCOUNT(val) bfin_write16(USB_EP_NI0_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI0_TXTYPE() bfin_read16(USB_EP_NI0_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI0_TXTYPE(val) bfin_write16(USB_EP_NI0_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI0_TXINTERVAL() bfin_read16(USB_EP_NI0_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI0_TXINTERVAL(val) bfin_write16(USB_EP_NI0_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI0_RXTYPE() bfin_read16(USB_EP_NI0_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI0_RXTYPE(val) bfin_write16(USB_EP_NI0_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI0_RXINTERVAL() bfin_read16(USB_EP_NI0_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI0_RXINTERVAL(val) bfin_write16(USB_EP_NI0_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 1 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI0_TXCOUNT() bfin_read16(USB_EP_NI0_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI0_TXCOUNT(val) bfin_write16(USB_EP_NI0_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI1_TXMAXP() bfin_read16(USB_EP_NI1_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI1_TXMAXP(val) bfin_write16(USB_EP_NI1_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI1_TXCSR() bfin_read16(USB_EP_NI1_TXCSR)
|
||||
#define bfin_write_USB_EP_NI1_TXCSR(val) bfin_write16(USB_EP_NI1_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI1_RXMAXP() bfin_read16(USB_EP_NI1_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI1_RXMAXP(val) bfin_write16(USB_EP_NI1_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI1_RXCSR() bfin_read16(USB_EP_NI1_RXCSR)
|
||||
#define bfin_write_USB_EP_NI1_RXCSR(val) bfin_write16(USB_EP_NI1_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI1_RXCOUNT() bfin_read16(USB_EP_NI1_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI1_RXCOUNT(val) bfin_write16(USB_EP_NI1_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI1_TXTYPE() bfin_read16(USB_EP_NI1_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI1_TXTYPE(val) bfin_write16(USB_EP_NI1_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI1_TXINTERVAL() bfin_read16(USB_EP_NI1_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI1_TXINTERVAL(val) bfin_write16(USB_EP_NI1_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI1_RXTYPE() bfin_read16(USB_EP_NI1_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI1_RXTYPE(val) bfin_write16(USB_EP_NI1_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI1_RXINTERVAL() bfin_read16(USB_EP_NI1_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI1_RXINTERVAL(val) bfin_write16(USB_EP_NI1_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 2 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI1_TXCOUNT() bfin_read16(USB_EP_NI1_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI1_TXCOUNT(val) bfin_write16(USB_EP_NI1_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI2_TXMAXP() bfin_read16(USB_EP_NI2_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI2_TXMAXP(val) bfin_write16(USB_EP_NI2_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI2_TXCSR() bfin_read16(USB_EP_NI2_TXCSR)
|
||||
#define bfin_write_USB_EP_NI2_TXCSR(val) bfin_write16(USB_EP_NI2_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI2_RXMAXP() bfin_read16(USB_EP_NI2_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI2_RXMAXP(val) bfin_write16(USB_EP_NI2_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI2_RXCSR() bfin_read16(USB_EP_NI2_RXCSR)
|
||||
#define bfin_write_USB_EP_NI2_RXCSR(val) bfin_write16(USB_EP_NI2_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI2_RXCOUNT() bfin_read16(USB_EP_NI2_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI2_RXCOUNT(val) bfin_write16(USB_EP_NI2_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI2_TXTYPE() bfin_read16(USB_EP_NI2_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI2_TXTYPE(val) bfin_write16(USB_EP_NI2_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI2_TXINTERVAL() bfin_read16(USB_EP_NI2_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI2_TXINTERVAL(val) bfin_write16(USB_EP_NI2_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI2_RXTYPE() bfin_read16(USB_EP_NI2_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI2_RXTYPE(val) bfin_write16(USB_EP_NI2_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI2_RXINTERVAL() bfin_read16(USB_EP_NI2_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI2_RXINTERVAL(val) bfin_write16(USB_EP_NI2_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 3 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI2_TXCOUNT() bfin_read16(USB_EP_NI2_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI2_TXCOUNT(val) bfin_write16(USB_EP_NI2_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI3_TXMAXP() bfin_read16(USB_EP_NI3_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI3_TXMAXP(val) bfin_write16(USB_EP_NI3_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI3_TXCSR() bfin_read16(USB_EP_NI3_TXCSR)
|
||||
#define bfin_write_USB_EP_NI3_TXCSR(val) bfin_write16(USB_EP_NI3_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI3_RXMAXP() bfin_read16(USB_EP_NI3_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI3_RXMAXP(val) bfin_write16(USB_EP_NI3_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI3_RXCSR() bfin_read16(USB_EP_NI3_RXCSR)
|
||||
#define bfin_write_USB_EP_NI3_RXCSR(val) bfin_write16(USB_EP_NI3_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI3_RXCOUNT() bfin_read16(USB_EP_NI3_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI3_RXCOUNT(val) bfin_write16(USB_EP_NI3_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI3_TXTYPE() bfin_read16(USB_EP_NI3_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI3_TXTYPE(val) bfin_write16(USB_EP_NI3_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI3_TXINTERVAL() bfin_read16(USB_EP_NI3_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI3_TXINTERVAL(val) bfin_write16(USB_EP_NI3_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI3_RXTYPE() bfin_read16(USB_EP_NI3_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI3_RXTYPE(val) bfin_write16(USB_EP_NI3_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI3_RXINTERVAL() bfin_read16(USB_EP_NI3_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI3_RXINTERVAL(val) bfin_write16(USB_EP_NI3_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 4 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI3_TXCOUNT() bfin_read16(USB_EP_NI3_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI3_TXCOUNT(val) bfin_write16(USB_EP_NI3_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI4_TXMAXP() bfin_read16(USB_EP_NI4_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI4_TXMAXP(val) bfin_write16(USB_EP_NI4_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI4_TXCSR() bfin_read16(USB_EP_NI4_TXCSR)
|
||||
#define bfin_write_USB_EP_NI4_TXCSR(val) bfin_write16(USB_EP_NI4_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI4_RXMAXP() bfin_read16(USB_EP_NI4_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI4_RXMAXP(val) bfin_write16(USB_EP_NI4_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI4_RXCSR() bfin_read16(USB_EP_NI4_RXCSR)
|
||||
#define bfin_write_USB_EP_NI4_RXCSR(val) bfin_write16(USB_EP_NI4_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI4_RXCOUNT() bfin_read16(USB_EP_NI4_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI4_RXCOUNT(val) bfin_write16(USB_EP_NI4_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI4_TXTYPE() bfin_read16(USB_EP_NI4_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI4_TXTYPE(val) bfin_write16(USB_EP_NI4_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI4_TXINTERVAL() bfin_read16(USB_EP_NI4_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI4_TXINTERVAL(val) bfin_write16(USB_EP_NI4_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI4_RXTYPE() bfin_read16(USB_EP_NI4_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI4_RXTYPE(val) bfin_write16(USB_EP_NI4_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI4_RXINTERVAL() bfin_read16(USB_EP_NI4_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI4_RXINTERVAL(val) bfin_write16(USB_EP_NI4_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 5 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI4_TXCOUNT() bfin_read16(USB_EP_NI4_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI4_TXCOUNT(val) bfin_write16(USB_EP_NI4_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI5_TXMAXP() bfin_read16(USB_EP_NI5_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI5_TXMAXP(val) bfin_write16(USB_EP_NI5_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI5_TXCSR() bfin_read16(USB_EP_NI5_TXCSR)
|
||||
#define bfin_write_USB_EP_NI5_TXCSR(val) bfin_write16(USB_EP_NI5_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI5_RXMAXP() bfin_read16(USB_EP_NI5_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI5_RXMAXP(val) bfin_write16(USB_EP_NI5_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI5_RXCSR() bfin_read16(USB_EP_NI5_RXCSR)
|
||||
#define bfin_write_USB_EP_NI5_RXCSR(val) bfin_write16(USB_EP_NI5_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI5_RXCOUNT() bfin_read16(USB_EP_NI5_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI5_RXCOUNT(val) bfin_write16(USB_EP_NI5_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI5_TXTYPE() bfin_read16(USB_EP_NI5_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI5_TXTYPE(val) bfin_write16(USB_EP_NI5_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI5_TXINTERVAL() bfin_read16(USB_EP_NI5_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI5_TXINTERVAL(val) bfin_write16(USB_EP_NI5_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI5_RXTYPE() bfin_read16(USB_EP_NI5_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI5_RXTYPE(val) bfin_write16(USB_EP_NI5_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI5_RXINTERVAL() bfin_read16(USB_EP_NI5_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI5_RXINTERVAL(val) bfin_write16(USB_EP_NI5_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 6 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI5_TXCOUNT() bfin_read16(USB_EP_NI5_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI5_TXCOUNT(val) bfin_write16(USB_EP_NI5_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI6_TXMAXP() bfin_read16(USB_EP_NI6_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI6_TXMAXP(val) bfin_write16(USB_EP_NI6_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI6_TXCSR() bfin_read16(USB_EP_NI6_TXCSR)
|
||||
#define bfin_write_USB_EP_NI6_TXCSR(val) bfin_write16(USB_EP_NI6_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI6_RXMAXP() bfin_read16(USB_EP_NI6_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI6_RXMAXP(val) bfin_write16(USB_EP_NI6_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI6_RXCSR() bfin_read16(USB_EP_NI6_RXCSR)
|
||||
#define bfin_write_USB_EP_NI6_RXCSR(val) bfin_write16(USB_EP_NI6_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI6_RXCOUNT() bfin_read16(USB_EP_NI6_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI6_RXCOUNT(val) bfin_write16(USB_EP_NI6_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI6_TXTYPE() bfin_read16(USB_EP_NI6_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI6_TXTYPE(val) bfin_write16(USB_EP_NI6_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI6_TXINTERVAL() bfin_read16(USB_EP_NI6_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI6_TXINTERVAL(val) bfin_write16(USB_EP_NI6_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI6_RXTYPE() bfin_read16(USB_EP_NI6_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI6_RXTYPE(val) bfin_write16(USB_EP_NI6_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI6_RXINTERVAL() bfin_read16(USB_EP_NI6_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI6_RXINTERVAL(val) bfin_write16(USB_EP_NI6_RXINTERVAL, val)
|
||||
|
||||
/* USB Endbfin_read_()oint 7 Control Registers */
|
||||
|
||||
#define bfin_read_USB_EP_NI6_TXCOUNT() bfin_read16(USB_EP_NI6_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI6_TXCOUNT(val) bfin_write16(USB_EP_NI6_TXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI7_TXMAXP() bfin_read16(USB_EP_NI7_TXMAXP)
|
||||
#define bfin_write_USB_EP_NI7_TXMAXP(val) bfin_write16(USB_EP_NI7_TXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI7_TXCSR() bfin_read16(USB_EP_NI7_TXCSR)
|
||||
#define bfin_write_USB_EP_NI7_TXCSR(val) bfin_write16(USB_EP_NI7_TXCSR, val)
|
||||
#define bfin_read_USB_EP_NI7_RXMAXP() bfin_read16(USB_EP_NI7_RXMAXP)
|
||||
#define bfin_write_USB_EP_NI7_RXMAXP(val) bfin_write16(USB_EP_NI7_RXMAXP, val)
|
||||
#define bfin_read_USB_EP_NI7_RXCSR() bfin_read16(USB_EP_NI7_RXCSR)
|
||||
#define bfin_write_USB_EP_NI7_RXCSR(val) bfin_write16(USB_EP_NI7_RXCSR, val)
|
||||
#define bfin_read_USB_EP_NI7_RXCOUNT() bfin_read16(USB_EP_NI7_RXCOUNT)
|
||||
#define bfin_write_USB_EP_NI7_RXCOUNT(val) bfin_write16(USB_EP_NI7_RXCOUNT, val)
|
||||
#define bfin_read_USB_EP_NI7_TXTYPE() bfin_read16(USB_EP_NI7_TXTYPE)
|
||||
#define bfin_write_USB_EP_NI7_TXTYPE(val) bfin_write16(USB_EP_NI7_TXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI7_TXINTERVAL() bfin_read16(USB_EP_NI7_TXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI7_TXINTERVAL(val) bfin_write16(USB_EP_NI7_TXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI7_RXTYPE() bfin_read16(USB_EP_NI7_RXTYPE)
|
||||
#define bfin_write_USB_EP_NI7_RXTYPE(val) bfin_write16(USB_EP_NI7_RXTYPE, val)
|
||||
#define bfin_read_USB_EP_NI7_RXINTERVAL() bfin_read16(USB_EP_NI7_RXINTERVAL)
|
||||
#define bfin_write_USB_EP_NI7_RXINTERVAL(val) bfin_write16(USB_EP_NI7_RXINTERVAL, val)
|
||||
#define bfin_read_USB_EP_NI7_TXCOUNT() bfin_read16(USB_EP_NI7_TXCOUNT)
|
||||
#define bfin_write_USB_EP_NI7_TXCOUNT(val) bfin_write16(USB_EP_NI7_TXCOUNT, val)
|
||||
#define bfin_read_USB_DMA_INTERRUPT() bfin_read16(USB_DMA_INTERRUPT)
|
||||
#define bfin_write_USB_DMA_INTERRUPT(val) bfin_write16(USB_DMA_INTERRUPT, val)
|
||||
|
||||
/* USB Channel 0 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA0CONTROL() bfin_read16(USB_DMA0CONTROL)
|
||||
#define bfin_write_USB_DMA0CONTROL(val) bfin_write16(USB_DMA0CONTROL, val)
|
||||
#define bfin_read_USB_DMA0ADDRLOW() bfin_read16(USB_DMA0ADDRLOW)
|
||||
#define bfin_write_USB_DMA0ADDRLOW(val) bfin_write16(USB_DMA0ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA0ADDRHIGH() bfin_read16(USB_DMA0ADDRHIGH)
|
||||
#define bfin_write_USB_DMA0ADDRHIGH(val) bfin_write16(USB_DMA0ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA0COUNTLOW() bfin_read16(USB_DMA0COUNTLOW)
|
||||
#define bfin_write_USB_DMA0COUNTLOW(val) bfin_write16(USB_DMA0COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA0COUNTHIGH() bfin_read16(USB_DMA0COUNTHIGH)
|
||||
#define bfin_write_USB_DMA0COUNTHIGH(val) bfin_write16(USB_DMA0COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 1 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA1CONTROL() bfin_read16(USB_DMA1CONTROL)
|
||||
#define bfin_write_USB_DMA1CONTROL(val) bfin_write16(USB_DMA1CONTROL, val)
|
||||
#define bfin_read_USB_DMA1ADDRLOW() bfin_read16(USB_DMA1ADDRLOW)
|
||||
#define bfin_write_USB_DMA1ADDRLOW(val) bfin_write16(USB_DMA1ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA1ADDRHIGH() bfin_read16(USB_DMA1ADDRHIGH)
|
||||
#define bfin_write_USB_DMA1ADDRHIGH(val) bfin_write16(USB_DMA1ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA1COUNTLOW() bfin_read16(USB_DMA1COUNTLOW)
|
||||
#define bfin_write_USB_DMA1COUNTLOW(val) bfin_write16(USB_DMA1COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA1COUNTHIGH() bfin_read16(USB_DMA1COUNTHIGH)
|
||||
#define bfin_write_USB_DMA1COUNTHIGH(val) bfin_write16(USB_DMA1COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 2 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA2CONTROL() bfin_read16(USB_DMA2CONTROL)
|
||||
#define bfin_write_USB_DMA2CONTROL(val) bfin_write16(USB_DMA2CONTROL, val)
|
||||
#define bfin_read_USB_DMA2ADDRLOW() bfin_read16(USB_DMA2ADDRLOW)
|
||||
#define bfin_write_USB_DMA2ADDRLOW(val) bfin_write16(USB_DMA2ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA2ADDRHIGH() bfin_read16(USB_DMA2ADDRHIGH)
|
||||
#define bfin_write_USB_DMA2ADDRHIGH(val) bfin_write16(USB_DMA2ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA2COUNTLOW() bfin_read16(USB_DMA2COUNTLOW)
|
||||
#define bfin_write_USB_DMA2COUNTLOW(val) bfin_write16(USB_DMA2COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA2COUNTHIGH() bfin_read16(USB_DMA2COUNTHIGH)
|
||||
#define bfin_write_USB_DMA2COUNTHIGH(val) bfin_write16(USB_DMA2COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 3 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA3CONTROL() bfin_read16(USB_DMA3CONTROL)
|
||||
#define bfin_write_USB_DMA3CONTROL(val) bfin_write16(USB_DMA3CONTROL, val)
|
||||
#define bfin_read_USB_DMA3ADDRLOW() bfin_read16(USB_DMA3ADDRLOW)
|
||||
#define bfin_write_USB_DMA3ADDRLOW(val) bfin_write16(USB_DMA3ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA3ADDRHIGH() bfin_read16(USB_DMA3ADDRHIGH)
|
||||
#define bfin_write_USB_DMA3ADDRHIGH(val) bfin_write16(USB_DMA3ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA3COUNTLOW() bfin_read16(USB_DMA3COUNTLOW)
|
||||
#define bfin_write_USB_DMA3COUNTLOW(val) bfin_write16(USB_DMA3COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA3COUNTHIGH() bfin_read16(USB_DMA3COUNTHIGH)
|
||||
#define bfin_write_USB_DMA3COUNTHIGH(val) bfin_write16(USB_DMA3COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 4 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA4CONTROL() bfin_read16(USB_DMA4CONTROL)
|
||||
#define bfin_write_USB_DMA4CONTROL(val) bfin_write16(USB_DMA4CONTROL, val)
|
||||
#define bfin_read_USB_DMA4ADDRLOW() bfin_read16(USB_DMA4ADDRLOW)
|
||||
#define bfin_write_USB_DMA4ADDRLOW(val) bfin_write16(USB_DMA4ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA4ADDRHIGH() bfin_read16(USB_DMA4ADDRHIGH)
|
||||
#define bfin_write_USB_DMA4ADDRHIGH(val) bfin_write16(USB_DMA4ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA4COUNTLOW() bfin_read16(USB_DMA4COUNTLOW)
|
||||
#define bfin_write_USB_DMA4COUNTLOW(val) bfin_write16(USB_DMA4COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA4COUNTHIGH() bfin_read16(USB_DMA4COUNTHIGH)
|
||||
#define bfin_write_USB_DMA4COUNTHIGH(val) bfin_write16(USB_DMA4COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 5 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA5CONTROL() bfin_read16(USB_DMA5CONTROL)
|
||||
#define bfin_write_USB_DMA5CONTROL(val) bfin_write16(USB_DMA5CONTROL, val)
|
||||
#define bfin_read_USB_DMA5ADDRLOW() bfin_read16(USB_DMA5ADDRLOW)
|
||||
#define bfin_write_USB_DMA5ADDRLOW(val) bfin_write16(USB_DMA5ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA5ADDRHIGH() bfin_read16(USB_DMA5ADDRHIGH)
|
||||
#define bfin_write_USB_DMA5ADDRHIGH(val) bfin_write16(USB_DMA5ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA5COUNTLOW() bfin_read16(USB_DMA5COUNTLOW)
|
||||
#define bfin_write_USB_DMA5COUNTLOW(val) bfin_write16(USB_DMA5COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA5COUNTHIGH() bfin_read16(USB_DMA5COUNTHIGH)
|
||||
#define bfin_write_USB_DMA5COUNTHIGH(val) bfin_write16(USB_DMA5COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 6 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA6CONTROL() bfin_read16(USB_DMA6CONTROL)
|
||||
#define bfin_write_USB_DMA6CONTROL(val) bfin_write16(USB_DMA6CONTROL, val)
|
||||
#define bfin_read_USB_DMA6ADDRLOW() bfin_read16(USB_DMA6ADDRLOW)
|
||||
#define bfin_write_USB_DMA6ADDRLOW(val) bfin_write16(USB_DMA6ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA6ADDRHIGH() bfin_read16(USB_DMA6ADDRHIGH)
|
||||
#define bfin_write_USB_DMA6ADDRHIGH(val) bfin_write16(USB_DMA6ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA6COUNTLOW() bfin_read16(USB_DMA6COUNTLOW)
|
||||
#define bfin_write_USB_DMA6COUNTLOW(val) bfin_write16(USB_DMA6COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA6COUNTHIGH() bfin_read16(USB_DMA6COUNTHIGH)
|
||||
#define bfin_write_USB_DMA6COUNTHIGH(val) bfin_write16(USB_DMA6COUNTHIGH, val)
|
||||
|
||||
/* USB Channel 7 Config Registers */
|
||||
|
||||
#define bfin_read_USB_DMA7CONTROL() bfin_read16(USB_DMA7CONTROL)
|
||||
#define bfin_write_USB_DMA7CONTROL(val) bfin_write16(USB_DMA7CONTROL, val)
|
||||
#define bfin_read_USB_DMA7ADDRLOW() bfin_read16(USB_DMA7ADDRLOW)
|
||||
#define bfin_write_USB_DMA7ADDRLOW(val) bfin_write16(USB_DMA7ADDRLOW, val)
|
||||
#define bfin_read_USB_DMA7ADDRHIGH() bfin_read16(USB_DMA7ADDRHIGH)
|
||||
#define bfin_write_USB_DMA7ADDRHIGH(val) bfin_write16(USB_DMA7ADDRHIGH, val)
|
||||
#define bfin_read_USB_DMA7COUNTLOW() bfin_read16(USB_DMA7COUNTLOW)
|
||||
#define bfin_write_USB_DMA7COUNTLOW(val) bfin_write16(USB_DMA7COUNTLOW, val)
|
||||
#define bfin_read_USB_DMA7COUNTHIGH() bfin_read16(USB_DMA7COUNTHIGH)
|
||||
#define bfin_write_USB_DMA7COUNTHIGH(val) bfin_write16(USB_DMA7COUNTHIGH, val)
|
||||
|
||||
/* Keybfin_read_()ad Registers */
|
||||
|
||||
#define bfin_read_KPAD_CTL() bfin_read16(KPAD_CTL)
|
||||
#define bfin_write_KPAD_CTL(val) bfin_write16(KPAD_CTL, val)
|
||||
#define bfin_read_KPAD_PRESCALE() bfin_read16(KPAD_PRESCALE)
|
||||
#define bfin_write_KPAD_PRESCALE(val) bfin_write16(KPAD_PRESCALE, val)
|
||||
#define bfin_read_KPAD_MSEL() bfin_read16(KPAD_MSEL)
|
||||
#define bfin_write_KPAD_MSEL(val) bfin_write16(KPAD_MSEL, val)
|
||||
#define bfin_read_KPAD_ROWCOL() bfin_read16(KPAD_ROWCOL)
|
||||
#define bfin_write_KPAD_ROWCOL(val) bfin_write16(KPAD_ROWCOL, val)
|
||||
#define bfin_read_KPAD_STAT() bfin_read16(KPAD_STAT)
|
||||
#define bfin_write_KPAD_STAT(val) bfin_write16(KPAD_STAT, val)
|
||||
#define bfin_read_KPAD_SOFTEVAL() bfin_read16(KPAD_SOFTEVAL)
|
||||
#define bfin_write_KPAD_SOFTEVAL(val) bfin_write16(KPAD_SOFTEVAL, val)
|
||||
|
||||
/* Pixel Combfin_read_()ositor (PIXC) Registers */
|
||||
|
||||
#define bfin_read_PIXC_CTL() bfin_read16(PIXC_CTL)
|
||||
#define bfin_write_PIXC_CTL(val) bfin_write16(PIXC_CTL, val)
|
||||
#define bfin_read_PIXC_PPL() bfin_read16(PIXC_PPL)
|
||||
#define bfin_write_PIXC_PPL(val) bfin_write16(PIXC_PPL, val)
|
||||
#define bfin_read_PIXC_LPF() bfin_read16(PIXC_LPF)
|
||||
#define bfin_write_PIXC_LPF(val) bfin_write16(PIXC_LPF, val)
|
||||
#define bfin_read_PIXC_AHSTART() bfin_read16(PIXC_AHSTART)
|
||||
#define bfin_write_PIXC_AHSTART(val) bfin_write16(PIXC_AHSTART, val)
|
||||
#define bfin_read_PIXC_AHEND() bfin_read16(PIXC_AHEND)
|
||||
#define bfin_write_PIXC_AHEND(val) bfin_write16(PIXC_AHEND, val)
|
||||
#define bfin_read_PIXC_AVSTART() bfin_read16(PIXC_AVSTART)
|
||||
#define bfin_write_PIXC_AVSTART(val) bfin_write16(PIXC_AVSTART, val)
|
||||
#define bfin_read_PIXC_AVEND() bfin_read16(PIXC_AVEND)
|
||||
#define bfin_write_PIXC_AVEND(val) bfin_write16(PIXC_AVEND, val)
|
||||
#define bfin_read_PIXC_ATRANSP() bfin_read16(PIXC_ATRANSP)
|
||||
#define bfin_write_PIXC_ATRANSP(val) bfin_write16(PIXC_ATRANSP, val)
|
||||
#define bfin_read_PIXC_BHSTART() bfin_read16(PIXC_BHSTART)
|
||||
#define bfin_write_PIXC_BHSTART(val) bfin_write16(PIXC_BHSTART, val)
|
||||
#define bfin_read_PIXC_BHEND() bfin_read16(PIXC_BHEND)
|
||||
#define bfin_write_PIXC_BHEND(val) bfin_write16(PIXC_BHEND, val)
|
||||
#define bfin_read_PIXC_BVSTART() bfin_read16(PIXC_BVSTART)
|
||||
#define bfin_write_PIXC_BVSTART(val) bfin_write16(PIXC_BVSTART, val)
|
||||
#define bfin_read_PIXC_BVEND() bfin_read16(PIXC_BVEND)
|
||||
#define bfin_write_PIXC_BVEND(val) bfin_write16(PIXC_BVEND, val)
|
||||
#define bfin_read_PIXC_BTRANSP() bfin_read16(PIXC_BTRANSP)
|
||||
#define bfin_write_PIXC_BTRANSP(val) bfin_write16(PIXC_BTRANSP, val)
|
||||
#define bfin_read_PIXC_INTRSTAT() bfin_read16(PIXC_INTRSTAT)
|
||||
#define bfin_write_PIXC_INTRSTAT(val) bfin_write16(PIXC_INTRSTAT, val)
|
||||
#define bfin_read_PIXC_RYCON() bfin_read32(PIXC_RYCON)
|
||||
#define bfin_write_PIXC_RYCON(val) bfin_write32(PIXC_RYCON, val)
|
||||
#define bfin_read_PIXC_GUCON() bfin_read32(PIXC_GUCON)
|
||||
#define bfin_write_PIXC_GUCON(val) bfin_write32(PIXC_GUCON, val)
|
||||
#define bfin_read_PIXC_BVCON() bfin_read32(PIXC_BVCON)
|
||||
#define bfin_write_PIXC_BVCON(val) bfin_write32(PIXC_BVCON, val)
|
||||
#define bfin_read_PIXC_CCBIAS() bfin_read32(PIXC_CCBIAS)
|
||||
#define bfin_write_PIXC_CCBIAS(val) bfin_write32(PIXC_CCBIAS, val)
|
||||
#define bfin_read_PIXC_TC() bfin_read32(PIXC_TC)
|
||||
#define bfin_write_PIXC_TC(val) bfin_write32(PIXC_TC, val)
|
||||
|
||||
/* Handshake MDMA 0 Registers */
|
||||
|
||||
#define bfin_read_HMDMA0_CONTROL() bfin_read16(HMDMA0_CONTROL)
|
||||
#define bfin_write_HMDMA0_CONTROL(val) bfin_write16(HMDMA0_CONTROL, val)
|
||||
#define bfin_read_HMDMA0_ECINIT() bfin_read16(HMDMA0_ECINIT)
|
||||
#define bfin_write_HMDMA0_ECINIT(val) bfin_write16(HMDMA0_ECINIT, val)
|
||||
#define bfin_read_HMDMA0_BCINIT() bfin_read16(HMDMA0_BCINIT)
|
||||
#define bfin_write_HMDMA0_BCINIT(val) bfin_write16(HMDMA0_BCINIT, val)
|
||||
#define bfin_read_HMDMA0_ECURGENT() bfin_read16(HMDMA0_ECURGENT)
|
||||
#define bfin_write_HMDMA0_ECURGENT(val) bfin_write16(HMDMA0_ECURGENT, val)
|
||||
#define bfin_read_HMDMA0_ECOVERFLOW() bfin_read16(HMDMA0_ECOVERFLOW)
|
||||
#define bfin_write_HMDMA0_ECOVERFLOW(val) bfin_write16(HMDMA0_ECOVERFLOW, val)
|
||||
#define bfin_read_HMDMA0_ECOUNT() bfin_read16(HMDMA0_ECOUNT)
|
||||
#define bfin_write_HMDMA0_ECOUNT(val) bfin_write16(HMDMA0_ECOUNT, val)
|
||||
#define bfin_read_HMDMA0_BCOUNT() bfin_read16(HMDMA0_BCOUNT)
|
||||
#define bfin_write_HMDMA0_BCOUNT(val) bfin_write16(HMDMA0_BCOUNT, val)
|
||||
|
||||
/* Handshake MDMA 1 Registers */
|
||||
|
||||
#define bfin_read_HMDMA1_CONTROL() bfin_read16(HMDMA1_CONTROL)
|
||||
#define bfin_write_HMDMA1_CONTROL(val) bfin_write16(HMDMA1_CONTROL, val)
|
||||
#define bfin_read_HMDMA1_ECINIT() bfin_read16(HMDMA1_ECINIT)
|
||||
#define bfin_write_HMDMA1_ECINIT(val) bfin_write16(HMDMA1_ECINIT, val)
|
||||
#define bfin_read_HMDMA1_BCINIT() bfin_read16(HMDMA1_BCINIT)
|
||||
#define bfin_write_HMDMA1_BCINIT(val) bfin_write16(HMDMA1_BCINIT, val)
|
||||
#define bfin_read_HMDMA1_ECURGENT() bfin_read16(HMDMA1_ECURGENT)
|
||||
#define bfin_write_HMDMA1_ECURGENT(val) bfin_write16(HMDMA1_ECURGENT, val)
|
||||
#define bfin_read_HMDMA1_ECOVERFLOW() bfin_read16(HMDMA1_ECOVERFLOW)
|
||||
#define bfin_write_HMDMA1_ECOVERFLOW(val) bfin_write16(HMDMA1_ECOVERFLOW, val)
|
||||
#define bfin_read_HMDMA1_ECOUNT() bfin_read16(HMDMA1_ECOUNT)
|
||||
#define bfin_write_HMDMA1_ECOUNT(val) bfin_write16(HMDMA1_ECOUNT, val)
|
||||
#define bfin_read_HMDMA1_BCOUNT() bfin_read16(HMDMA1_BCOUNT)
|
||||
#define bfin_write_HMDMA1_BCOUNT(val) bfin_write16(HMDMA1_BCOUNT, val)
|
||||
|
||||
#endif /* _CDEF_BF548_H */
|
1244
include/asm-blackfin/mach-bf548/defBF547.h
Normal file
1244
include/asm-blackfin/mach-bf548/defBF547.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -1010,9 +1010,9 @@
|
||||
#define DMA_READY 0x1 /* DMA Ready */
|
||||
#define FIFOFULL 0x2 /* FIFO Full */
|
||||
#define FIFOEMPTY 0x4 /* FIFO Empty */
|
||||
#define COMPLETE 0x8 /* DMA Complete */
|
||||
#define DMA_COMPLETE 0x8 /* DMA Complete */
|
||||
#define HSHK 0x10 /* Host Handshake */
|
||||
#define TIMEOUT 0x20 /* Host Timeout */
|
||||
#define HSTIMEOUT 0x20 /* Host Timeout */
|
||||
#define HIRQ 0x40 /* Host Interrupt Request */
|
||||
#define ALLOW_CNFG 0x80 /* Allow New Configuration */
|
||||
#define DMA_DIR 0x100 /* DMA Direction */
|
||||
|
@ -51,9 +51,13 @@
|
||||
#define CH_PIXC_OVERLAY 16
|
||||
#define CH_PIXC_OUTPUT 17
|
||||
#define CH_SPORT2_RX 18
|
||||
#define CH_UART2_RX 18
|
||||
#define CH_SPORT2_TX 19
|
||||
#define CH_UART2_TX 19
|
||||
#define CH_SPORT3_RX 20
|
||||
#define CH_UART3_RX 20
|
||||
#define CH_SPORT3_TX 21
|
||||
#define CH_UART3_TX 21
|
||||
#define CH_SDH 22
|
||||
#define CH_NFC 22
|
||||
#define CH_SPI2 23
|
||||
|
@ -99,9 +99,13 @@ Events (highest priority) EMU 0
|
||||
#define IRQ_UART2_ERROR BFIN_IRQ(31) /* UART2 Status (Error) Interrupt */
|
||||
#define IRQ_CAN0_ERROR BFIN_IRQ(32) /* CAN0 Status (Error) Interrupt */
|
||||
#define IRQ_SPORT2_RX BFIN_IRQ(33) /* SPORT2 RX (DMA18) Interrupt */
|
||||
#define IRQ_UART2_RX BFIN_IRQ(33) /* UART2 RX (DMA18) Interrupt */
|
||||
#define IRQ_SPORT2_TX BFIN_IRQ(34) /* SPORT2 TX (DMA19) Interrupt */
|
||||
#define IRQ_UART2_TX BFIN_IRQ(34) /* UART2 TX (DMA19) Interrupt */
|
||||
#define IRQ_SPORT3_RX BFIN_IRQ(35) /* SPORT3 RX (DMA20) Interrupt */
|
||||
#define IRQ_UART3_RX BFIN_IRQ(35) /* UART3 RX (DMA20) Interrupt */
|
||||
#define IRQ_SPORT3_TX BFIN_IRQ(36) /* SPORT3 TX (DMA21) Interrupt */
|
||||
#define IRQ_UART3_TX BFIN_IRQ(36) /* UART3 TX (DMA21) Interrupt */
|
||||
#define IRQ_EPPI1 BFIN_IRQ(37) /* EPP1 (DMA13) Interrupt */
|
||||
#define IRQ_EPPI2 BFIN_IRQ(38) /* EPP2 (DMA14) Interrupt */
|
||||
#define IRQ_SPI1 BFIN_IRQ(39) /* SPI1 (DMA5) Interrupt */
|
||||
@ -421,9 +425,13 @@ Events (highest priority) EMU 0
|
||||
/* IAR4 BIT FILEDS */
|
||||
#define IRQ_CAN0_ERR_POS 0
|
||||
#define IRQ_SPORT2_RX_POS 4
|
||||
#define IRQ_UART2_RX_POS 4
|
||||
#define IRQ_SPORT2_TX_POS 8
|
||||
#define IRQ_UART2_TX_POS 8
|
||||
#define IRQ_SPORT3_RX_POS 12
|
||||
#define IRQ_UART3_RX_POS 12
|
||||
#define IRQ_SPORT3_TX_POS 16
|
||||
#define IRQ_UART3_TX_POS 16
|
||||
#define IRQ_EPPI1_POS 20
|
||||
#define IRQ_EPPI2_POS 24
|
||||
#define IRQ_SPI1_POS 28
|
||||
|
@ -49,4 +49,24 @@
|
||||
#define bfin_read_FIO_INEN() bfin_read_FIO0_INEN()
|
||||
#define bfin_write_FIO_INEN(val) bfin_write_FIO0_INEN(val)
|
||||
|
||||
|
||||
#define SIC_IAR0 SICA_IAR0
|
||||
#define bfin_write_SIC_IMASK0 bfin_write_SICA_IMASK0
|
||||
#define bfin_write_SIC_IMASK1 bfin_write_SICA_IMASK1
|
||||
#define bfin_write_SIC_IWR0 bfin_write_SICA_IWR0
|
||||
#define bfin_write_SIC_IWR1 bfin_write_SICA_IWR1
|
||||
|
||||
#define bfin_read_SIC_IMASK0 bfin_read_SICA_IMASK0
|
||||
#define bfin_read_SIC_IMASK1 bfin_read_SICA_IMASK1
|
||||
#define bfin_read_SIC_IWR0 bfin_read_SICA_IWR0
|
||||
#define bfin_read_SIC_IWR1 bfin_read_SICA_IWR1
|
||||
#define bfin_read_SIC_ISR0 bfin_read_SICA_ISR0
|
||||
#define bfin_read_SIC_ISR1 bfin_read_SICA_ISR1
|
||||
|
||||
#define bfin_read_SIC_IMASK(x) bfin_read32(SICA_IMASK0 + (x << 2))
|
||||
#define bfin_write_SIC_IMASK(x, val) bfin_write32((SICA_IMASK0 + (x << 2)), val)
|
||||
#define bfin_read_SIC_ISR(x) bfin_read32(SICA_ISR0 + (x << 2))
|
||||
#define bfin_write_SIC_ISR(x, val) bfin_write32((SICA_ISR0 + (x << 2)), val)
|
||||
|
||||
|
||||
#endif /* _MACH_BLACKFIN_H_ */
|
||||
|
@ -39,24 +39,6 @@ struct termio {
|
||||
|
||||
/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
|
||||
|
||||
/* line disciplines */
|
||||
#define N_TTY 0
|
||||
#define N_SLIP 1
|
||||
#define N_MOUSE 2
|
||||
#define N_PPP 3
|
||||
#define N_STRIP 4
|
||||
#define N_AX25 5
|
||||
#define N_X25 6 /* X.25 async */
|
||||
#define N_6PACK 7
|
||||
#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
|
||||
#define N_R3964 9 /* Reserved for Simatic R3964 module */
|
||||
#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
|
||||
#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */
|
||||
#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
|
||||
#define N_HDLC 13 /* synchronous HDLC */
|
||||
#define N_SYNC_PPP 14 /* synchronous PPP */
|
||||
#define N_HCI 15 /* Bluetooth HCI UART */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* intr=^C quit=^\ erase=del kill=^U
|
||||
|
@ -46,42 +46,47 @@ extern unsigned long software_trace_buff[];
|
||||
|
||||
#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
|
||||
|
||||
#define TRACE_BUFFER_START(preg, dreg) trace_buffer_start(preg, dreg)
|
||||
#define TRACE_BUFFER_STOP(preg, dreg) trace_buffer_stop(preg, dreg)
|
||||
|
||||
#define trace_buffer_stop(preg, dreg) \
|
||||
preg.L = LO(TBUFCTL); \
|
||||
preg.H = HI(TBUFCTL); \
|
||||
dreg = 0x1; \
|
||||
[preg] = dreg;
|
||||
|
||||
#define trace_buffer_start(preg, dreg) \
|
||||
preg.L = LO(TBUFCTL); \
|
||||
preg.H = HI(TBUFCTL); \
|
||||
dreg = BFIN_TRACE_ON; \
|
||||
[preg] = dreg;
|
||||
|
||||
#define trace_buffer_init(preg, dreg) \
|
||||
preg.L = LO(TBUFCTL); \
|
||||
preg.H = HI(TBUFCTL); \
|
||||
dreg = BFIN_TRACE_INIT; \
|
||||
[preg] = dreg;
|
||||
|
||||
#define trace_buffer_save(preg, dreg) \
|
||||
preg.L = LO(TBUFCTL); \
|
||||
preg.H = HI(TBUFCTL); \
|
||||
dreg = [preg]; \
|
||||
[sp++] = dreg; \
|
||||
dreg = 0x1; \
|
||||
[preg] = dreg;
|
||||
|
||||
#define trace_buffer_restore(preg, dreg) \
|
||||
preg.L = LO(TBUFCTL); \
|
||||
preg.H = HI(TBUFCTL); \
|
||||
dreg = [sp--]; \
|
||||
[preg] = dreg;
|
||||
|
||||
#else /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
|
||||
|
||||
#define trace_buffer_stop(preg, dreg)
|
||||
#define trace_buffer_start(preg, dreg)
|
||||
#define trace_buffer_init(preg, dreg)
|
||||
#define trace_buffer_save(preg, dreg)
|
||||
#define trace_buffer_restore(preg, dreg)
|
||||
|
||||
#endif /* CONFIG_DEBUG_BFIN_HWTRACE_ON */
|
||||
|
||||
#ifdef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
|
||||
# define DEBUG_START_HWTRACE(preg, dreg) trace_buffer_start(preg, dreg)
|
||||
# define DEBUG_STOP_HWTRACE(preg, dreg) trace_buffer_stop(preg, dreg)
|
||||
|
||||
# define DEBUG_HWTRACE_SAVE(preg, dreg) trace_buffer_save(preg, dreg)
|
||||
# define DEBUG_HWTRACE_RESTORE(preg, dreg) trace_buffer_restore(preg, dreg)
|
||||
#else
|
||||
# define DEBUG_START_HWTRACE(preg, dreg)
|
||||
# define DEBUG_STOP_HWTRACE(preg, dreg)
|
||||
# define DEBUG_HWTRACE_SAVE(preg, dreg)
|
||||
# define DEBUG_HWTRACE_RESTORE(preg, dreg)
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
Loading…
Reference in New Issue
Block a user