Merge branch 'for-2.6.25' of master.kernel.org:/pub/scm/linux/kernel/git/arnd/cell-2.6 into merge
This commit is contained in:
commit
3cecdda3f1
378 changed files with 6072 additions and 3399 deletions
Documentation
MAINTAINERSMakefilearch
arm
avr32
blackfin
Makefile
configs
BF527-EZKIT_defconfigBF533-EZKIT_defconfigBF533-STAMP_defconfigBF537-STAMP_defconfigBF548-EZKIT_defconfigBF561-EZKIT_defconfig
kernel
mach-bf527/boards
mach-bf533/boards
mach-bf537/boards
mach-bf548
mach-bf561/boards
mach-common
mm
powerpc
sh
sparc/kernel
sparc64
um/kernel
x86
|
@ -36,14 +36,15 @@ available (notebooks) or too slow for extensive debug information (like ACPI).
|
|||
Drivers
|
||||
-------
|
||||
|
||||
The OHCI-1394 drivers in drivers/firewire and drivers/ieee1394 initialize
|
||||
the OHCI-1394 controllers to a working state and can be used to enable
|
||||
physical DMA. By default you only have to load the driver, and physical
|
||||
DMA access will be granted to all remote nodes, but it can be turned off
|
||||
when using the ohci1394 driver.
|
||||
The ohci1394 driver in drivers/ieee1394 initializes the OHCI-1394 controllers
|
||||
to a working state and enables physical DMA by default for all remote nodes.
|
||||
This can be turned off by ohci1394's module parameter phys_dma=0.
|
||||
|
||||
Because these drivers depend on the PCI enumeration to be completed, an
|
||||
initialization routine which can runs pretty early (long before console_init(),
|
||||
The alternative firewire-ohci driver in drivers/firewire uses filtered physical
|
||||
DMA, hence is not yet suitable for remote debugging.
|
||||
|
||||
Because ohci1394 depends on the PCI enumeration to be completed, an
|
||||
initialization routine which runs pretty early (long before console_init()
|
||||
which makes the printk buffer appear on the console can be called) was written.
|
||||
|
||||
To activate it, enable CONFIG_PROVIDE_OHCI1394_DMA_INIT (Kernel hacking menu:
|
||||
|
|
|
@ -172,6 +172,16 @@ Who: Len Brown <len.brown@intel.com>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: ide-tape driver
|
||||
When: July 2008
|
||||
Files: drivers/ide/ide-tape.c
|
||||
Why: This driver might not have any users anymore and maintaining it for no
|
||||
reason is an effort no one wants to make.
|
||||
Who: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>, Borislav Petkov
|
||||
<petkovbb@googlemail.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: libata spindown skipping and warning
|
||||
When: Dec 2008
|
||||
Why: Some halt(8) implementations synchronize caches for and spin
|
||||
|
@ -306,3 +316,15 @@ Why: Largely unmaintained and almost entirely unused. File system
|
|||
is largely pointless as without a lot of work only the most
|
||||
trivial of Solaris binaries can work with the emulation code.
|
||||
Who: David S. Miller <davem@davemloft.net>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: init_mm export
|
||||
When: 2.6.26
|
||||
Why: Not used in-tree. The current out-of-tree users used it to
|
||||
work around problems in the CPA code which should be resolved
|
||||
by now. One usecase was described to provide verification code
|
||||
of the CPA operation. That's a good idea in general, but such
|
||||
code / infrastructure should be in the kernel and not in some
|
||||
out-of-tree driver.
|
||||
Who: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
|
|
@ -12,8 +12,9 @@ Supported adapters:
|
|||
* Intel 82801G (ICH7)
|
||||
* Intel 631xESB/632xESB (ESB2)
|
||||
* Intel 82801H (ICH8)
|
||||
* Intel ICH9
|
||||
* Intel 82801I (ICH9)
|
||||
* Intel Tolapai
|
||||
* Intel ICH10
|
||||
Datasheets: Publicly available at the Intel website
|
||||
|
||||
Authors:
|
||||
|
|
|
@ -258,8 +258,6 @@ Summary of ide driver parameters for kernel command line
|
|||
As for VLB, it is safest to not specify it.
|
||||
Bigger values are safer than smaller ones.
|
||||
|
||||
"idex=noprobe" : do not attempt to access/use this interface
|
||||
|
||||
"idex=base" : probe for an interface at the addr specified,
|
||||
where "base" is usually 0x1f0 or 0x170
|
||||
and "ctl" is assumed to be "base"+0x206
|
||||
|
@ -307,53 +305,6 @@ Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb"
|
|||
kernel paremeter to enable probing for VLB version of the chipset (PCI ones
|
||||
are detected automatically).
|
||||
|
||||
================================================================================
|
||||
|
||||
IDE ATAPI streaming tape driver
|
||||
-------------------------------
|
||||
|
||||
This driver is a part of the Linux ide driver and works in co-operation
|
||||
with linux/drivers/block/ide.c.
|
||||
|
||||
The driver, in co-operation with ide.c, basically traverses the
|
||||
request-list for the block device interface. The character device
|
||||
interface, on the other hand, creates new requests, adds them
|
||||
to the request-list of the block device, and waits for their completion.
|
||||
|
||||
Pipelined operation mode is now supported on both reads and writes.
|
||||
|
||||
The block device major and minor numbers are determined from the
|
||||
tape's relative position in the ide interfaces, as explained in ide.c.
|
||||
|
||||
The character device interface consists of the following devices:
|
||||
|
||||
ht0 major 37, minor 0 first IDE tape, rewind on close.
|
||||
ht1 major 37, minor 1 second IDE tape, rewind on close.
|
||||
...
|
||||
nht0 major 37, minor 128 first IDE tape, no rewind on close.
|
||||
nht1 major 37, minor 129 second IDE tape, no rewind on close.
|
||||
...
|
||||
|
||||
Run /dev/MAKEDEV to create the above entries.
|
||||
|
||||
The general magnetic tape commands compatible interface, as defined by
|
||||
include/linux/mtio.h, is accessible through the character device.
|
||||
|
||||
General ide driver configuration options, such as the interrupt-unmask
|
||||
flag, can be configured by issuing an ioctl to the block device interface,
|
||||
as any other ide device.
|
||||
|
||||
Our own ide-tape ioctl's can be issued to either the block device or
|
||||
the character device interface.
|
||||
|
||||
Maximal throughput with minimal bus load will usually be achieved in the
|
||||
following scenario:
|
||||
|
||||
1. ide-tape is operating in the pipelined operation mode.
|
||||
2. No buffering is performed by the user backup program.
|
||||
|
||||
|
||||
|
||||
================================================================================
|
||||
|
||||
Some Terminology
|
||||
|
|
23
MAINTAINERS
23
MAINTAINERS
|
@ -767,14 +767,14 @@ S: Maintained
|
|||
|
||||
BLACKFIN ARCHITECTURE
|
||||
P: Bryan Wu
|
||||
M: bryan.wu@analog.com
|
||||
M: cooloney@kernel.org
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
|
||||
BLACKFIN EMAC DRIVER
|
||||
P: Bryan Wu
|
||||
M: bryan.wu@analog.com
|
||||
M: cooloney@kernel.org
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
|
@ -982,6 +982,12 @@ M: mchan@broadcom.com
|
|||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||
P: Eliezer Tamir
|
||||
M: eliezert@broadcom.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
BROADCOM TG3 GIGABIT ETHERNET DRIVER
|
||||
P: Michael Chan
|
||||
M: mchan@broadcom.com
|
||||
|
@ -2744,6 +2750,8 @@ S: Maintained
|
|||
NETEFFECT IWARP RNIC DRIVER (IW_NES)
|
||||
P: Faisal Latif
|
||||
M: flatif@neteffect.com
|
||||
P: Nishi Gupta
|
||||
M: ngupta@neteffect.com
|
||||
P: Glenn Streiff
|
||||
M: gstreiff@neteffect.com
|
||||
L: general@lists.openfabrics.org
|
||||
|
@ -3884,10 +3892,13 @@ M: trivial@kernel.org
|
|||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TULIP NETWORK DRIVER
|
||||
L: tulip-users@lists.sourceforge.net
|
||||
W: http://sourceforge.net/projects/tulip/
|
||||
S: Orphan
|
||||
TULIP NETWORK DRIVERS
|
||||
P: Grant Grundler
|
||||
M: grundler@parisc-linux.org
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TUN/TAP driver
|
||||
P: Maxim Krasnyansky
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 25
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Funky Weasel is Jiggy wit it
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -939,7 +939,8 @@ config KEXEC
|
|||
|
||||
config ATAGS_PROC
|
||||
bool "Export atags in procfs"
|
||||
default n
|
||||
depends on KEXEC
|
||||
default y
|
||||
help
|
||||
Should the atags used to boot the kernel be exported in an "atags"
|
||||
file in procfs. Useful with kexec.
|
||||
|
|
|
@ -61,6 +61,7 @@ int sx1_i2c_write_byte(u8 devaddr, u8 regoffset, u8 value)
|
|||
data[0] = regoffset; /* register num */
|
||||
data[1] = value; /* register data */
|
||||
err = i2c_transfer(adap, msg, 1);
|
||||
i2c_put_adapter(adap);
|
||||
if (err >= 0)
|
||||
return 0;
|
||||
return err;
|
||||
|
@ -91,6 +92,7 @@ int sx1_i2c_read_byte(u8 devaddr, u8 regoffset, u8 *value)
|
|||
msg->buf = data;
|
||||
err = i2c_transfer(adap, msg, 1);
|
||||
*value = data[0];
|
||||
i2c_put_adapter(adap);
|
||||
|
||||
if (err >= 0)
|
||||
return 0;
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
#ifdef DEBUG
|
||||
static unsigned int freq_debug;
|
||||
MODULE_PARM(freq_debug, "i");
|
||||
module_param(freq_debug, uint, 0);
|
||||
MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0");
|
||||
#else
|
||||
#define freq_debug 0
|
||||
|
|
|
@ -129,28 +129,20 @@ static void clk_pxa3xx_cken_enable(struct clk *clk)
|
|||
{
|
||||
unsigned long mask = 1ul << (clk->cken & 0x1f);
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
if (clk->cken < 32)
|
||||
CKENA |= mask;
|
||||
else
|
||||
CKENB |= mask;
|
||||
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
static void clk_pxa3xx_cken_disable(struct clk *clk)
|
||||
{
|
||||
unsigned long mask = 1ul << (clk->cken & 0x1f);
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
if (clk->cken < 32)
|
||||
CKENA &= ~mask;
|
||||
else
|
||||
CKENB &= ~mask;
|
||||
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
static const struct clkops clk_pxa3xx_cken_ops = {
|
||||
|
|
|
@ -58,7 +58,7 @@ static struct platform_device smc91x_device = {
|
|||
.resource = smc91x_resources,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || (CONFIG_FB_PXA_MODULES)
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static void zylonite_backlight_power(int on)
|
||||
{
|
||||
gpio_set_value(gpio_backlight, on);
|
||||
|
|
|
@ -120,6 +120,8 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
|||
*/
|
||||
int valid_phys_addr_range(unsigned long addr, size_t size)
|
||||
{
|
||||
if (addr < PHYS_OFFSET)
|
||||
return 0;
|
||||
if (addr + size > __pa(high_memory))
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -129,7 +129,7 @@ static int __init atstk1004_init(void)
|
|||
#ifdef CONFIG_BOARD_ATSTK100X_SPI1
|
||||
at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
|
||||
#endif
|
||||
#ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
|
||||
#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
|
||||
at32_add_device_mci(0);
|
||||
#endif
|
||||
at32_add_device_lcdc(0, &atstk1000_lcdc_data,
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/fs.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/tick.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/unistd.h>
|
||||
|
||||
|
@ -30,8 +31,10 @@ void cpu_idle(void)
|
|||
{
|
||||
/* endless idle loop with no priority at all */
|
||||
while (1) {
|
||||
tick_nohz_stop_sched_tick();
|
||||
while (!need_resched())
|
||||
cpu_idle_sleep();
|
||||
tick_nohz_restart_sched_tick();
|
||||
preempt_enable_no_resched();
|
||||
schedule();
|
||||
preempt_disable();
|
||||
|
@ -345,6 +348,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
|
|||
p->thread.cpu_context.ksp = (unsigned long)childregs;
|
||||
p->thread.cpu_context.pc = (unsigned long)ret_from_fork;
|
||||
|
||||
clear_tsk_thread_flag(p, TIF_DEBUG);
|
||||
if ((clone_flags & CLONE_PTRACE) && test_thread_flag(TIF_DEBUG))
|
||||
ocd_enable(p);
|
||||
|
||||
|
|
|
@ -189,6 +189,8 @@ asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
|
|||
|
||||
page = sysreg_read(PTBR);
|
||||
printk(KERN_ALERT "ptbr = %08lx", page);
|
||||
if (address >= TASK_SIZE)
|
||||
page = (unsigned long)swapper_pg_dir;
|
||||
if (page) {
|
||||
page = ((unsigned long *)page)[address >> 22];
|
||||
printk(" pgd = %08lx", page);
|
||||
|
|
|
@ -98,8 +98,11 @@ drivers-$(CONFIG_OPROFILE) += arch/$(ARCH)/oprofile/
|
|||
# them changed. We use .mach to indicate when they were updated
|
||||
# last, otherwise make uses the target directory mtime.
|
||||
|
||||
show_mach_symlink = :
|
||||
quiet_show_mach_symlink = echo ' SYMLINK include/asm-$(ARCH)/mach-$(MACHINE) -> include/asm-$(ARCH)/mach'
|
||||
silent_show_mach_symlink = :
|
||||
include/asm-blackfin/.mach: $(wildcard include/config/arch/*.h) include/config/auto.conf
|
||||
@echo ' SYMLINK include/asm-$(ARCH)/mach-$(MACHINE) -> include/asm-$(ARCH)/mach'
|
||||
@$($(quiet)show_mach_symlink)
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
$(Q)mkdir -p include/asm-$(ARCH)
|
||||
$(Q)ln -fsn $(srctree)/include/asm-$(ARCH)/mach-$(MACHINE) include/asm-$(ARCH)/mach
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.22.14
|
||||
# Thu Nov 29 17:32:47 2007
|
||||
# Linux kernel version: 2.6.22.16
|
||||
#
|
||||
# CONFIG_MMU is not set
|
||||
# CONFIG_FPU is not set
|
||||
|
@ -116,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y
|
|||
# Processor and Board Settings
|
||||
#
|
||||
# CONFIG_BF522 is not set
|
||||
# CONFIG_BF523 is not set
|
||||
# CONFIG_BF524 is not set
|
||||
# CONFIG_BF525 is not set
|
||||
# CONFIG_BF526 is not set
|
||||
CONFIG_BF527=y
|
||||
# CONFIG_BF531 is not set
|
||||
# CONFIG_BF532 is not set
|
||||
|
@ -306,6 +308,7 @@ CONFIG_BFIN_DCACHE=y
|
|||
# CONFIG_BFIN_WB is not set
|
||||
CONFIG_BFIN_WT=y
|
||||
CONFIG_L1_MAX_PIECE=16
|
||||
# CONFIG_MPU is not set
|
||||
|
||||
#
|
||||
# Asynchonous Memory Configuration
|
||||
|
@ -354,6 +357,7 @@ CONFIG_BINFMT_ZFLAT=y
|
|||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
@ -496,7 +500,6 @@ CONFIG_MTD_CFI_I2=y
|
|||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_MW320D=m
|
||||
CONFIG_MTD_RAM=y
|
||||
CONFIG_MTD_ROM=m
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
|
@ -506,9 +509,6 @@ CONFIG_MTD_ROM=m
|
|||
#
|
||||
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
CONFIG_MTD_BF5xx=m
|
||||
CONFIG_BFIN_FLASH_SIZE=0x400000
|
||||
CONFIG_EBIU_FLASH_BASE=0x20000000
|
||||
# CONFIG_MTD_UCLINUX is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
|
@ -684,7 +684,6 @@ CONFIG_INPUT_MISC=y
|
|||
# CONFIG_INPUT_POWERMATE is not set
|
||||
# CONFIG_INPUT_YEALINK is not set
|
||||
# CONFIG_INPUT_UINPUT is not set
|
||||
# CONFIG_BF53X_PFBUTTONS is not set
|
||||
# CONFIG_TWI_KEYPAD is not set
|
||||
|
||||
#
|
||||
|
@ -702,12 +701,12 @@ CONFIG_INPUT_MISC=y
|
|||
# CONFIG_BF5xx_PPIFCD is not set
|
||||
# CONFIG_BFIN_SIMPLE_TIMER is not set
|
||||
# CONFIG_BF5xx_PPI is not set
|
||||
CONFIG_BFIN_OTP=y
|
||||
# CONFIG_BFIN_OTP_WRITE_ENABLE is not set
|
||||
# CONFIG_BFIN_SPORT is not set
|
||||
# CONFIG_BFIN_TIMER_LATENCY is not set
|
||||
# CONFIG_TWI_LCD is not set
|
||||
# CONFIG_AD5304 is not set
|
||||
# CONFIG_BF5xx_TEA5764 is not set
|
||||
# CONFIG_BF5xx_FBDMA is not set
|
||||
# CONFIG_VT is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
|
@ -772,7 +771,6 @@ CONFIG_I2C_CHARDEV=m
|
|||
#
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
# CONFIG_I2C_BLACKFIN_GPIO is not set
|
||||
CONFIG_I2C_BLACKFIN_TWI=m
|
||||
CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
|
|
|
@ -322,10 +322,9 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_PM_SYSFS_DEPRECATED is not set
|
||||
CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y
|
||||
CONFIG_PM_BFIN_SLEEP_DEEPER=y
|
||||
# CONFIG_PM_BFIN_SLEEP is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
# CONFIG_PM_WAKEUP_GPIO_API is not set
|
||||
CONFIG_PM_WAKEUP_SIC_IWR=0x80
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -697,7 +696,6 @@ CONFIG_SERIAL_BFIN_DMA=y
|
|||
# CONFIG_SERIAL_BFIN_PIO is not set
|
||||
CONFIG_SERIAL_BFIN_UART0=y
|
||||
# CONFIG_BFIN_UART0_CTSRTS is not set
|
||||
# CONFIG_SERIAL_BFIN_UART1 is not set
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_BFIN_SPORT is not set
|
||||
|
|
|
@ -323,10 +323,9 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_PM_SYSFS_DEPRECATED is not set
|
||||
CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y
|
||||
CONFIG_PM_BFIN_SLEEP_DEEPER=y
|
||||
# CONFIG_PM_BFIN_SLEEP is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
# CONFIG_PM_WAKEUP_GPIO_API is not set
|
||||
CONFIG_PM_WAKEUP_SIC_IWR=0x80
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -714,7 +713,6 @@ CONFIG_SERIAL_BFIN_DMA=y
|
|||
# CONFIG_SERIAL_BFIN_PIO is not set
|
||||
CONFIG_SERIAL_BFIN_UART0=y
|
||||
# CONFIG_BFIN_UART0_CTSRTS is not set
|
||||
# CONFIG_SERIAL_BFIN_UART1 is not set
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_BFIN_SPORT is not set
|
||||
|
|
|
@ -330,10 +330,9 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_PM_SYSFS_DEPRECATED is not set
|
||||
CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y
|
||||
CONFIG_PM_BFIN_SLEEP_DEEPER=y
|
||||
# CONFIG_PM_BFIN_SLEEP is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
# CONFIG_PM_WAKEUP_GPIO_API is not set
|
||||
CONFIG_PM_WAKEUP_SIC_IWR=0x8
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -1013,6 +1012,7 @@ CONFIG_SND_BFIN_AD73311_SE=4
|
|||
CONFIG_SND_SOC_AC97_BUS=y
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_BF5XX_SOC=m
|
||||
CONFIG_SND_MMAP_SUPPORT=y
|
||||
CONFIG_SND_BF5XX_SOC_AC97=m
|
||||
# CONFIG_SND_BF5XX_SOC_WM8750 is not set
|
||||
# CONFIG_SND_BF5XX_SOC_WM8731 is not set
|
||||
|
|
|
@ -396,6 +396,7 @@ CONFIG_BINFMT_ZFLAT=y
|
|||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
|
||||
#
|
||||
# CPU Frequency scaling
|
||||
|
@ -1075,6 +1076,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
|||
CONFIG_SND_SOC_AC97_BUS=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_BF5XX_SOC=y
|
||||
CONFIG_SND_MMAP_SUPPORT=y
|
||||
CONFIG_SND_BF5XX_SOC_AC97=y
|
||||
CONFIG_SND_BF5XX_SOC_BF548_EZKIT=y
|
||||
# CONFIG_SND_BF5XX_SOC_WM8750 is not set
|
||||
|
|
|
@ -367,6 +367,7 @@ CONFIG_BINFMT_ZFLAT=y
|
|||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_PM_WAKEUP_BY_GPIO is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
|
|
@ -105,13 +105,14 @@ 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);
|
||||
if (channel >= CH_UART2_RX && channel <= CH_UART3_TX) {
|
||||
if (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;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
/*
|
||||
* bfin_gptimers.c - derived from bf53x_timers.c
|
||||
* Driver for General Purpose Timer functions on the Blackfin processor
|
||||
* gptimers.c - Blackfin General Purpose Timer core API
|
||||
*
|
||||
* Copyright (C) 2005 John DeHority
|
||||
* Copyright (C) 2006 Hella Aglaia GmbH (awe@aglaia-gmbh.de)
|
||||
* Copyright (c) 2005-2008 Analog Devices Inc.
|
||||
* Copyright (C) 2005 John DeHority
|
||||
* Copyright (C) 2006 Hella Aglaia GmbH (awe@aglaia-gmbh.de)
|
||||
*
|
||||
* Licensed under the GPLv2.
|
||||
*/
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
static DEFINE_PER_CPU(struct cpu, cpu_devices);
|
||||
|
||||
u16 _bfin_swrst;
|
||||
EXPORT_SYMBOL(_bfin_swrst);
|
||||
|
||||
unsigned long memory_start, memory_end, physical_mem_end;
|
||||
unsigned long reserved_mem_dcache_on;
|
||||
|
@ -514,6 +515,7 @@ static __init void memory_setup(void)
|
|||
printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20);
|
||||
|
||||
printk(KERN_INFO "Memory map:\n"
|
||||
KERN_INFO " fixedcode = 0x%p-0x%p\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"
|
||||
|
@ -527,7 +529,8 @@ static __init void memory_setup(void)
|
|||
#if DMA_UNCACHED_REGION > 0
|
||||
KERN_INFO " DMA Zone = 0x%p-0x%p\n"
|
||||
#endif
|
||||
, _stext, _etext,
|
||||
, (void *)FIXED_CODE_START, (void *)FIXED_CODE_END,
|
||||
_stext, _etext,
|
||||
__start_rodata, __end_rodata,
|
||||
__bss_start, __bss_stop,
|
||||
_sdata, _edata,
|
||||
|
|
|
@ -147,44 +147,64 @@ SECTIONS
|
|||
|
||||
__l1_lma_start = .;
|
||||
|
||||
#if L1_CODE_LENGTH
|
||||
# define LDS_L1_CODE *(.l1.text)
|
||||
#else
|
||||
# define LDS_L1_CODE
|
||||
#endif
|
||||
.text_l1 L1_CODE_START : AT(LOADADDR(.init.ramfs) + SIZEOF(.init.ramfs))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__stext_l1 = .;
|
||||
*(.l1.text)
|
||||
|
||||
LDS_L1_CODE
|
||||
. = ALIGN(4);
|
||||
__etext_l1 = .;
|
||||
}
|
||||
|
||||
#if L1_DATA_A_LENGTH
|
||||
# define LDS_L1_A_DATA *(.l1.data)
|
||||
# define LDS_L1_A_BSS *(.l1.bss)
|
||||
# define LDS_L1_A_CACHE *(.data_l1.cacheline_aligned)
|
||||
#else
|
||||
# define LDS_L1_A_DATA
|
||||
# define LDS_L1_A_BSS
|
||||
# define LDS_L1_A_CACHE
|
||||
#endif
|
||||
.data_l1 L1_DATA_A_START : AT(LOADADDR(.text_l1) + SIZEOF(.text_l1))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__sdata_l1 = .;
|
||||
*(.l1.data)
|
||||
LDS_L1_A_DATA
|
||||
__edata_l1 = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
__sbss_l1 = .;
|
||||
*(.l1.bss)
|
||||
LDS_L1_A_BSS
|
||||
|
||||
. = ALIGN(32);
|
||||
*(.data_l1.cacheline_aligned)
|
||||
LDS_L1_A_CACHE
|
||||
|
||||
. = ALIGN(4);
|
||||
__ebss_l1 = .;
|
||||
}
|
||||
|
||||
#if L1_DATA_B_LENGTH
|
||||
# define LDS_L1_B_DATA *(.l1.data.B)
|
||||
# define LDS_L1_B_BSS *(.l1.bss.B)
|
||||
#else
|
||||
# define LDS_L1_B_DATA
|
||||
# define LDS_L1_B_BSS
|
||||
#endif
|
||||
.data_b_l1 L1_DATA_B_START : AT(LOADADDR(.data_l1) + SIZEOF(.data_l1))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__sdata_b_l1 = .;
|
||||
*(.l1.data.B)
|
||||
LDS_L1_B_DATA
|
||||
__edata_b_l1 = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
__sbss_b_l1 = .;
|
||||
*(.l1.bss.B)
|
||||
LDS_L1_B_BSS
|
||||
|
||||
. = ALIGN(4);
|
||||
__ebss_b_l1 = .;
|
||||
|
|
|
@ -180,8 +180,8 @@ static struct mtd_partition partition_info[] = {
|
|||
},
|
||||
{
|
||||
.name = "File System",
|
||||
.offset = 4 * SIZE_1M,
|
||||
.size = (256 - 4) * SIZE_1M,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -422,11 +422,11 @@ static struct mtd_partition bfin_spi_flash_partitions[] = {
|
|||
}, {
|
||||
.name = "kernel",
|
||||
.size = 0xe0000,
|
||||
.offset = 0x20000
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "file system",
|
||||
.size = 0x700000,
|
||||
.offset = 0x00100000,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -484,13 +484,6 @@ static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
static struct bfin5xx_spi_chip ad5304_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
|
||||
.enable_dma = 0,
|
||||
|
@ -611,17 +604,6 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
.mode = SPI_MODE_3,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
{
|
||||
.modalias = "ad5304_spi",
|
||||
.max_speed_hz = 1250000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 2,
|
||||
.platform_data = NULL,
|
||||
.controller_data = &ad5304_chip_info,
|
||||
.mode = SPI_MODE_2,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
{
|
||||
.modalias = "ad7877",
|
||||
|
@ -818,6 +800,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *stamp_devices[] __initdata = {
|
||||
#if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
|
||||
&bf5xx_nand_device,
|
||||
|
@ -895,6 +890,8 @@ static struct platform_device *stamp_devices[] __initdata = {
|
|||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&bfin_device_gpiokeys,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
};
|
||||
|
||||
static int __init stamp_init(void)
|
||||
|
@ -921,13 +918,18 @@ void native_machine_restart(char *cmd)
|
|||
bfin_gpio_reset_spi0_ssel1();
|
||||
}
|
||||
|
||||
/*
|
||||
* Currently the MAC address is saved in Flash by U-Boot
|
||||
*/
|
||||
#define FLASH_MAC 0x203f0000
|
||||
void bfin_get_ether_addr(char *addr)
|
||||
{
|
||||
*(u32 *)(&(addr[0])) = bfin_read32(FLASH_MAC);
|
||||
*(u16 *)(&(addr[4])) = bfin_read16(FLASH_MAC + 4);
|
||||
/* the MAC is stored in OTP memory page 0xDF */
|
||||
u32 ret;
|
||||
u64 otp_mac;
|
||||
u32 (*otp_read)(u32 page, u32 flags, u64 *page_content) = (void *)0xEF00001A;
|
||||
|
||||
ret = otp_read(0xDF, 0x00, &otp_mac);
|
||||
if (!(ret & 0x1)) {
|
||||
char *otp_mac_p = (char *)&otp_mac;
|
||||
for (ret = 0; ret < 6; ++ret)
|
||||
addr[ret] = otp_mac_p[5 - ret];
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(bfin_get_ether_addr);
|
||||
|
|
|
@ -99,11 +99,11 @@ static struct mtd_partition bfin_spi_flash_partitions[] = {
|
|||
}, {
|
||||
.name = "kernel",
|
||||
.size = 0xe0000,
|
||||
.offset = 0x20000
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "file system",
|
||||
.size = 0x700000,
|
||||
.offset = 0x00100000,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -298,6 +298,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
#include <linux/i2c-gpio.h>
|
||||
|
||||
|
@ -350,6 +363,8 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
|||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
&i2c_gpio_device,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
};
|
||||
|
||||
static int __init ezkit_init(void)
|
||||
|
|
|
@ -112,7 +112,7 @@ static struct platform_device net2272_bfin_device = {
|
|||
static struct mtd_partition stamp_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.size = 0x20000,
|
||||
.size = 0x40000,
|
||||
.offset = 0,
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
|
@ -160,17 +160,17 @@ static struct platform_device stamp_flash_device = {
|
|||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
{
|
||||
.name = "bootloader",
|
||||
.size = 0x00020000,
|
||||
.size = 0x00040000,
|
||||
.offset = 0,
|
||||
.mask_flags = MTD_CAP_ROM
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.size = 0xe0000,
|
||||
.offset = 0x20000
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "file system",
|
||||
.size = 0x700000,
|
||||
.offset = 0x00100000,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -212,13 +212,6 @@ static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
static struct bfin5xx_spi_chip ad5304_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
|
||||
static struct bfin5xx_spi_chip spi_mmc_chip_info = {
|
||||
.enable_dma = 1,
|
||||
|
@ -308,17 +301,6 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
},
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
{
|
||||
.modalias = "ad5304_spi",
|
||||
.max_speed_hz = 1000000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 2,
|
||||
.platform_data = NULL,
|
||||
.controller_data = &ad5304_chip_info,
|
||||
.mode = SPI_MODE_2,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
|
||||
{
|
||||
.modalias = "spidev",
|
||||
|
@ -457,6 +439,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
#include <linux/i2c-gpio.h>
|
||||
|
||||
|
@ -518,6 +513,8 @@ static struct platform_device *stamp_devices[] __initdata = {
|
|||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
&i2c_gpio_device,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
&stamp_flash_device,
|
||||
};
|
||||
|
||||
|
|
|
@ -371,13 +371,6 @@ static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
static struct bfin5xx_spi_chip ad5304_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
|
||||
.enable_dma = 0,
|
||||
|
@ -483,17 +476,6 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
.mode = SPI_MODE_3,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
{
|
||||
.modalias = "ad5304_spi",
|
||||
.max_speed_hz = 1250000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 2,
|
||||
.platform_data = NULL,
|
||||
.controller_data = &ad5304_chip_info,
|
||||
.mode = SPI_MODE_2,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
{
|
||||
.modalias = "ad7877",
|
||||
|
|
|
@ -128,6 +128,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
|
||||
static struct resource bfin_pcmcia_cf_resources[] = {
|
||||
{
|
||||
|
@ -343,7 +356,7 @@ static struct platform_device net2272_bfin_device = {
|
|||
static struct mtd_partition stamp_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.size = 0x20000,
|
||||
.size = 0x40000,
|
||||
.offset = 0,
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
|
@ -351,7 +364,7 @@ static struct mtd_partition stamp_partitions[] = {
|
|||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "RootFS",
|
||||
.size = 0x400000 - 0x20000 - 0xE0000 - 0x10000,
|
||||
.size = 0x400000 - 0x40000 - 0xE0000 - 0x10000,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "MAC Address",
|
||||
|
@ -391,17 +404,17 @@ static struct platform_device stamp_flash_device = {
|
|||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
{
|
||||
.name = "bootloader",
|
||||
.size = 0x00020000,
|
||||
.size = 0x00040000,
|
||||
.offset = 0,
|
||||
.mask_flags = MTD_CAP_ROM
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.size = 0xe0000,
|
||||
.offset = 0x20000
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}, {
|
||||
.name = "file system",
|
||||
.size = 0x700000,
|
||||
.offset = 0x00100000,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -459,13 +472,6 @@ static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
static struct bfin5xx_spi_chip ad5304_chip_info = {
|
||||
.enable_dma = 0,
|
||||
.bits_per_word = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
|
||||
.enable_dma = 0,
|
||||
|
@ -578,17 +584,6 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
.mode = SPI_MODE_3,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_AD5304) || defined(CONFIG_AD5304_MODULE)
|
||||
{
|
||||
.modalias = "ad5304_spi",
|
||||
.max_speed_hz = 1250000, /* max spi clock (SCK) speed in HZ */
|
||||
.bus_num = 0,
|
||||
.chip_select = 2,
|
||||
.platform_data = NULL,
|
||||
.controller_data = &ad5304_chip_info,
|
||||
.mode = SPI_MODE_2,
|
||||
},
|
||||
#endif
|
||||
#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
|
||||
{
|
||||
.modalias = "ad7877",
|
||||
|
@ -821,6 +816,8 @@ static struct platform_device *stamp_devices[] __initdata = {
|
|||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&bfin_device_gpiokeys,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
&stamp_flash_device,
|
||||
};
|
||||
|
||||
|
|
|
@ -285,8 +285,8 @@ static struct mtd_partition partition_info[] = {
|
|||
},
|
||||
{
|
||||
.name = "File System",
|
||||
.offset = 4 * SIZE_1M,
|
||||
.size = (256 - 4) * SIZE_1M,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -333,7 +333,7 @@ static struct platform_device bf54x_sdh_device = {
|
|||
static struct mtd_partition ezkit_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.size = 0x20000,
|
||||
.size = 0x40000,
|
||||
.offset = 0,
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
|
@ -381,8 +381,8 @@ static struct mtd_partition bfin_spi_flash_partitions[] = {
|
|||
.mask_flags = MTD_CAP_ROM
|
||||
}, {
|
||||
.name = "linux kernel",
|
||||
.size = 0x1c0000,
|
||||
.offset = 0x40000
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -594,6 +594,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *ezkit_devices[] __initdata = {
|
||||
#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
|
||||
&rtc_device,
|
||||
|
@ -646,6 +659,8 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
|||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&bfin_device_gpiokeys,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
&ezkit_flash_device,
|
||||
};
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/blackfin.h>
|
||||
#include <asm/dma.h>
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/blackfin.h>
|
||||
#include <asm/trace.h>
|
||||
#if CONFIG_BFIN_KERNEL_CLOCK
|
||||
|
@ -44,10 +45,9 @@
|
|||
|
||||
#define INITIAL_STACK 0xFFB01000
|
||||
|
||||
.text
|
||||
__INIT
|
||||
|
||||
ENTRY(__start)
|
||||
ENTRY(__stext)
|
||||
/* R0: argument of command line string, passed from uboot, save it */
|
||||
R7 = R0;
|
||||
/* Enable Cycle Counter and Nesting Of Interrupts */
|
||||
|
@ -213,6 +213,7 @@ ENTRY(__stext)
|
|||
|
||||
.LWAIT_HERE:
|
||||
jump .LWAIT_HERE;
|
||||
ENDPROC(__start)
|
||||
|
||||
ENTRY(_real_start)
|
||||
[ -- sp ] = reti;
|
||||
|
@ -285,6 +286,9 @@ ENTRY(_real_start)
|
|||
call _start_kernel;
|
||||
.L_exit:
|
||||
jump.s .L_exit;
|
||||
ENDPROC(_real_start)
|
||||
|
||||
__FINIT
|
||||
|
||||
.section .l1.text
|
||||
#if CONFIG_BFIN_KERNEL_CLOCK
|
||||
|
@ -450,6 +454,7 @@ ENTRY(_start_dma_code)
|
|||
SSYNC;
|
||||
|
||||
RTS;
|
||||
ENDPROC(_start_dma_code)
|
||||
#endif /* CONFIG_BFIN_KERNEL_CLOCK */
|
||||
|
||||
.data
|
||||
|
|
|
@ -223,7 +223,7 @@ static struct platform_device bfin_uart_device = {
|
|||
static struct mtd_partition ezkit_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.size = 0x20000,
|
||||
.size = 0x40000,
|
||||
.offset = 0,
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
|
@ -389,6 +389,19 @@ static struct platform_device bfin_device_gpiokeys = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct resource bfin_gpios_resources = {
|
||||
.start = 0,
|
||||
.end = MAX_BLACKFIN_GPIOS - 1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
static struct platform_device bfin_gpios_device = {
|
||||
.name = "simple-gpio",
|
||||
.id = -1,
|
||||
.num_resources = 1,
|
||||
.resource = &bfin_gpios_resources,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
|
||||
#include <linux/i2c-gpio.h>
|
||||
|
||||
|
@ -446,6 +459,7 @@ static struct platform_device *ezkit_devices[] __initdata = {
|
|||
&isp1362_hcd_device,
|
||||
#endif
|
||||
|
||||
&bfin_gpios_device,
|
||||
&ezkit_flash_device,
|
||||
};
|
||||
|
||||
|
|
|
@ -31,140 +31,6 @@
|
|||
#include <asm/blackfin.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
.text
|
||||
|
||||
ENTRY(_unmask_wdog_wakeup_evt)
|
||||
[--SP] = ( R7:0, P5:0 );
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.H = hi(SICA_IWR1);
|
||||
P0.L = lo(SICA_IWR1);
|
||||
#elif defined(CONFIG_BF54x) || defined(CONFIG_BF52x)
|
||||
P0.h = HI(SIC_IWR0);
|
||||
P0.l = LO(SIC_IWR0);
|
||||
#else
|
||||
P0.h = HI(SIC_IWR);
|
||||
P0.l = LO(SIC_IWR);
|
||||
#endif
|
||||
R7 = [P0];
|
||||
#if defined(CONFIG_BF561)
|
||||
BITSET(R7, 27);
|
||||
#else
|
||||
BITSET(R7,(IRQ_WATCH - IVG7));
|
||||
#endif
|
||||
[P0] = R7;
|
||||
SSYNC;
|
||||
|
||||
( R7:0, P5:0 ) = [SP++];
|
||||
RTS;
|
||||
|
||||
.LWRITE_TO_STAT:
|
||||
/* When watch dog timer is enabled, a write to STAT will load the
|
||||
* contents of CNT to STAT
|
||||
*/
|
||||
R7 = 0x0000(z);
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_STAT);
|
||||
P0.l = LO(WDOGA_STAT);
|
||||
#else
|
||||
P0.h = HI(WDOG_STAT);
|
||||
P0.l = LO(WDOG_STAT);
|
||||
#endif
|
||||
[P0] = R7;
|
||||
SSYNC;
|
||||
JUMP .LSKIP_WRITE_TO_STAT;
|
||||
|
||||
ENTRY(_program_wdog_timer)
|
||||
[--SP] = ( R7:0, P5:0 );
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_CNT);
|
||||
P0.l = LO(WDOGA_CNT);
|
||||
#else
|
||||
P0.h = HI(WDOG_CNT);
|
||||
P0.l = LO(WDOG_CNT);
|
||||
#endif
|
||||
[P0] = R0;
|
||||
SSYNC;
|
||||
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_CTL);
|
||||
P0.l = LO(WDOGA_CTL);
|
||||
#else
|
||||
P0.h = HI(WDOG_CTL);
|
||||
P0.l = LO(WDOG_CTL);
|
||||
#endif
|
||||
R7 = W[P0](Z);
|
||||
CC = BITTST(R7,1);
|
||||
if !CC JUMP .LWRITE_TO_STAT;
|
||||
CC = BITTST(R7,2);
|
||||
if !CC JUMP .LWRITE_TO_STAT;
|
||||
|
||||
.LSKIP_WRITE_TO_STAT:
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_CTL);
|
||||
P0.l = LO(WDOGA_CTL);
|
||||
#else
|
||||
P0.h = HI(WDOG_CTL);
|
||||
P0.l = LO(WDOG_CTL);
|
||||
#endif
|
||||
R7 = W[P0](Z);
|
||||
BITCLR(R7,1); /* Enable GP event */
|
||||
BITSET(R7,2);
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
NOP;
|
||||
|
||||
R7 = W[P0](Z);
|
||||
BITCLR(R7,4); /* Enable the wdog counter */
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
|
||||
( R7:0, P5:0 ) = [SP++];
|
||||
RTS;
|
||||
|
||||
ENTRY(_clear_wdog_wakeup_evt)
|
||||
[--SP] = ( R7:0, P5:0 );
|
||||
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_CTL);
|
||||
P0.l = LO(WDOGA_CTL);
|
||||
#else
|
||||
P0.h = HI(WDOG_CTL);
|
||||
P0.l = LO(WDOG_CTL);
|
||||
#endif
|
||||
R7 = 0x0AD6(Z);
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
|
||||
R7 = W[P0](Z);
|
||||
BITSET(R7,15);
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
|
||||
R7 = W[P0](Z);
|
||||
BITSET(R7,1);
|
||||
BITSET(R7,2);
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
|
||||
( R7:0, P5:0 ) = [SP++];
|
||||
RTS;
|
||||
|
||||
ENTRY(_disable_wdog_timer)
|
||||
[--SP] = ( R7:0, P5:0 );
|
||||
#if defined(CONFIG_BF561)
|
||||
P0.h = HI(WDOGA_CTL);
|
||||
P0.l = LO(WDOGA_CTL);
|
||||
#else
|
||||
P0.h = HI(WDOG_CTL);
|
||||
P0.l = LO(WDOG_CTL);
|
||||
#endif
|
||||
R7 = 0xAD6(Z);
|
||||
W[P0] = R7.L;
|
||||
SSYNC;
|
||||
( R7:0, P5:0 ) = [SP++];
|
||||
RTS;
|
||||
|
||||
#if !defined(CONFIG_BF561)
|
||||
|
||||
.section .l1.text
|
||||
|
||||
|
@ -459,10 +325,12 @@ ENTRY(_set_sic_iwr)
|
|||
RTS;
|
||||
|
||||
ENTRY(_set_rtc_istat)
|
||||
#ifndef CONFIG_BF561
|
||||
P0.H = hi(RTC_ISTAT);
|
||||
P0.L = lo(RTC_ISTAT);
|
||||
w[P0] = R0.L;
|
||||
SSYNC;
|
||||
#endif
|
||||
RTS;
|
||||
|
||||
ENTRY(_test_pll_locked)
|
||||
|
@ -473,4 +341,3 @@ ENTRY(_test_pll_locked)
|
|||
CC = BITTST(R0,5);
|
||||
IF !CC JUMP 1b;
|
||||
RTS;
|
||||
#endif
|
||||
|
|
|
@ -74,7 +74,7 @@ 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 */
|
||||
/* irq number for request_irq, available in mach-bf5xx/irq.h */
|
||||
unsigned int irqno;
|
||||
/* corresponding bit in the SIC_ISR register */
|
||||
unsigned int isrflag;
|
||||
|
@ -86,7 +86,6 @@ struct ivg_slice {
|
|||
struct ivgx *istop;
|
||||
} ivg7_13[IVG13 - IVG7 + 1];
|
||||
|
||||
static void search_IAR(void);
|
||||
|
||||
/*
|
||||
* Search SIC_IAR and fill tables with the irqvalues
|
||||
|
@ -120,10 +119,10 @@ static void __init search_IAR(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* This is for BF533 internal IRQs
|
||||
* This is for core internal IRQs
|
||||
*/
|
||||
|
||||
static void ack_noop(unsigned int irq)
|
||||
static void bfin_ack_noop(unsigned int irq)
|
||||
{
|
||||
/* Dummy function. */
|
||||
}
|
||||
|
@ -156,11 +155,11 @@ static void bfin_internal_mask_irq(unsigned int irq)
|
|||
{
|
||||
#ifdef CONFIG_BF53x
|
||||
bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() &
|
||||
~(1 << (irq - (IRQ_CORETMR + 1))));
|
||||
~(1 << SIC_SYSIRQ(irq)));
|
||||
#else
|
||||
unsigned mask_bank, mask_bit;
|
||||
mask_bank = (irq - (IRQ_CORETMR + 1)) / 32;
|
||||
mask_bit = (irq - (IRQ_CORETMR + 1)) % 32;
|
||||
mask_bank = SIC_SYSIRQ(irq) / 32;
|
||||
mask_bit = SIC_SYSIRQ(irq) % 32;
|
||||
bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) &
|
||||
~(1 << mask_bit));
|
||||
#endif
|
||||
|
@ -171,11 +170,11 @@ static void bfin_internal_unmask_irq(unsigned int irq)
|
|||
{
|
||||
#ifdef CONFIG_BF53x
|
||||
bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() |
|
||||
(1 << (irq - (IRQ_CORETMR + 1))));
|
||||
(1 << SIC_SYSIRQ(irq)));
|
||||
#else
|
||||
unsigned mask_bank, mask_bit;
|
||||
mask_bank = (irq - (IRQ_CORETMR + 1)) / 32;
|
||||
mask_bit = (irq - (IRQ_CORETMR + 1)) % 32;
|
||||
mask_bank = SIC_SYSIRQ(irq) / 32;
|
||||
mask_bit = SIC_SYSIRQ(irq) % 32;
|
||||
bfin_write_SIC_IMASK(mask_bank, bfin_read_SIC_IMASK(mask_bank) |
|
||||
(1 << mask_bit));
|
||||
#endif
|
||||
|
@ -187,8 +186,8 @@ 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;
|
||||
bank = SIC_SYSIRQ(irq) / 32;
|
||||
bit = SIC_SYSIRQ(irq) % 32;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
|
@ -204,15 +203,18 @@ int bfin_internal_set_wake(unsigned int irq, unsigned int state)
|
|||
#endif
|
||||
|
||||
static struct irq_chip bfin_core_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.ack = bfin_ack_noop,
|
||||
.mask = bfin_core_mask_irq,
|
||||
.unmask = bfin_core_unmask_irq,
|
||||
};
|
||||
|
||||
static struct irq_chip bfin_internal_irqchip = {
|
||||
.ack = ack_noop,
|
||||
.ack = bfin_ack_noop,
|
||||
.mask = bfin_internal_mask_irq,
|
||||
.unmask = bfin_internal_unmask_irq,
|
||||
.mask_ack = bfin_internal_mask_irq,
|
||||
.disable = bfin_internal_mask_irq,
|
||||
.enable = bfin_internal_unmask_irq,
|
||||
#ifdef CONFIG_PM
|
||||
.set_wake = bfin_internal_set_wake,
|
||||
#endif
|
||||
|
@ -221,38 +223,23 @@ static struct irq_chip bfin_internal_irqchip = {
|
|||
#ifdef BF537_GENERIC_ERROR_INT_DEMUX
|
||||
static int error_int_mask;
|
||||
|
||||
static void bfin_generic_error_ack_irq(unsigned int irq)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void bfin_generic_error_mask_irq(unsigned int irq)
|
||||
{
|
||||
error_int_mask &= ~(1L << (irq - IRQ_PPI_ERROR));
|
||||
|
||||
if (!error_int_mask) {
|
||||
local_irq_disable();
|
||||
bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() &
|
||||
~(1 << (IRQ_GENERIC_ERROR -
|
||||
(IRQ_CORETMR + 1))));
|
||||
SSYNC();
|
||||
local_irq_enable();
|
||||
}
|
||||
if (!error_int_mask)
|
||||
bfin_internal_mask_irq(IRQ_GENERIC_ERROR);
|
||||
}
|
||||
|
||||
static void bfin_generic_error_unmask_irq(unsigned int irq)
|
||||
{
|
||||
local_irq_disable();
|
||||
bfin_write_SIC_IMASK(bfin_read_SIC_IMASK() | 1 <<
|
||||
(IRQ_GENERIC_ERROR - (IRQ_CORETMR + 1)));
|
||||
SSYNC();
|
||||
local_irq_enable();
|
||||
|
||||
bfin_internal_unmask_irq(IRQ_GENERIC_ERROR);
|
||||
error_int_mask |= 1L << (irq - IRQ_PPI_ERROR);
|
||||
}
|
||||
|
||||
static struct irq_chip bfin_generic_error_irqchip = {
|
||||
.ack = bfin_generic_error_ack_irq,
|
||||
.ack = bfin_ack_noop,
|
||||
.mask_ack = bfin_generic_error_mask_irq,
|
||||
.mask = bfin_generic_error_mask_irq,
|
||||
.unmask = bfin_generic_error_unmask_irq,
|
||||
};
|
||||
|
@ -608,7 +595,7 @@ static struct pin_int_t *pint[NR_PINT_SYS_IRQS] = {
|
|||
(struct pin_int_t *)PINT3_MASK_SET,
|
||||
};
|
||||
|
||||
unsigned short get_irq_base(u8 bank, u8 bmap)
|
||||
inline unsigned short get_irq_base(u8 bank, u8 bmap)
|
||||
{
|
||||
|
||||
u16 irq_base;
|
||||
|
@ -969,17 +956,12 @@ int __init init_arch_irq(void)
|
|||
#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);
|
||||
bfin_write_SIC_IWR1(IWR_ENABLE_ALL);
|
||||
# ifdef CONFIG_BF54x
|
||||
bfin_write_SIC_IMASK2(SIC_UNMASK_ALL);
|
||||
bfin_write_SIC_IWR2(IWR_ENABLE_ALL);
|
||||
# endif
|
||||
#else
|
||||
bfin_write_SIC_IMASK(SIC_UNMASK_ALL);
|
||||
bfin_write_SIC_IWR(IWR_ENABLE_ALL);
|
||||
#endif
|
||||
SSYNC();
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
|
@ -1001,90 +983,53 @@ int __init init_arch_irq(void)
|
|||
set_irq_chip(irq, &bfin_core_irqchip);
|
||||
else
|
||||
set_irq_chip(irq, &bfin_internal_irqchip);
|
||||
#ifdef BF537_GENERIC_ERROR_INT_DEMUX
|
||||
if (irq != IRQ_GENERIC_ERROR) {
|
||||
#endif
|
||||
|
||||
switch (irq) {
|
||||
switch (irq) {
|
||||
#if defined(CONFIG_BF53x)
|
||||
case IRQ_PROG_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PROG_INTA:
|
||||
# if defined(BF537_FAMILY) && !(defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE))
|
||||
case IRQ_MAC_RX:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_MAC_RX:
|
||||
# endif
|
||||
#elif defined(CONFIG_BF54x)
|
||||
case IRQ_PINT0:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PINT1:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PINT2:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PINT3:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PINT0:
|
||||
case IRQ_PINT1:
|
||||
case IRQ_PINT2:
|
||||
case IRQ_PINT3:
|
||||
#elif defined(CONFIG_BF52x)
|
||||
case IRQ_PORTF_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PORTG_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PORTH_INTA:
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
case IRQ_PORTF_INTA:
|
||||
case IRQ_PORTG_INTA:
|
||||
case IRQ_PORTH_INTA:
|
||||
#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;
|
||||
case IRQ_PROG0_INTA:
|
||||
case IRQ_PROG1_INTA:
|
||||
case IRQ_PROG2_INTA:
|
||||
#endif
|
||||
default:
|
||||
set_irq_handler(irq, handle_simple_irq);
|
||||
break;
|
||||
}
|
||||
|
||||
set_irq_chained_handler(irq,
|
||||
bfin_demux_gpio_irq);
|
||||
break;
|
||||
#ifdef BF537_GENERIC_ERROR_INT_DEMUX
|
||||
} else {
|
||||
case IRQ_GENERIC_ERROR:
|
||||
set_irq_handler(irq, bfin_demux_error_irq);
|
||||
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
set_irq_handler(irq, handle_simple_irq);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef BF537_GENERIC_ERROR_INT_DEMUX
|
||||
for (irq = IRQ_PPI_ERROR; irq <= IRQ_UART1_ERROR; irq++) {
|
||||
set_irq_chip(irq, &bfin_generic_error_irqchip);
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
}
|
||||
for (irq = IRQ_PPI_ERROR; irq <= IRQ_UART1_ERROR; irq++)
|
||||
set_irq_chip_and_handler(irq, &bfin_generic_error_irqchip,
|
||||
handle_level_irq);
|
||||
#endif
|
||||
|
||||
for (irq = GPIO_IRQ_BASE; irq < NR_IRQS; irq++) {
|
||||
/* if configured as edge, then will be changed to do_edge_IRQ */
|
||||
for (irq = GPIO_IRQ_BASE; irq < NR_IRQS; irq++)
|
||||
set_irq_chip_and_handler(irq, &bfin_gpio_irqchip,
|
||||
handle_level_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);
|
||||
}
|
||||
|
||||
bfin_write_IMASK(0);
|
||||
CSYNC();
|
||||
|
@ -1106,6 +1051,16 @@ int __init init_arch_irq(void)
|
|||
IMASK_IVG14 | IMASK_IVG13 | IMASK_IVG12 | IMASK_IVG11 |
|
||||
IMASK_IVG10 | IMASK_IVG9 | IMASK_IVG8 | IMASK_IVG7 | IMASK_IVGHW;
|
||||
|
||||
#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
|
||||
bfin_write_SIC_IWR2(IWR_ENABLE_ALL);
|
||||
# endif
|
||||
#else
|
||||
bfin_write_SIC_IWR(IWR_ENABLE_ALL);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1122,7 +1077,6 @@ void do_irq(int vec, struct pt_regs *fp)
|
|||
#if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) || defined(CONFIG_BF561)
|
||||
unsigned long sic_status[3];
|
||||
|
||||
SSYNC();
|
||||
sic_status[0] = bfin_read_SIC_ISR0() & bfin_read_SIC_IMASK0();
|
||||
sic_status[1] = bfin_read_SIC_ISR1() & bfin_read_SIC_IMASK1();
|
||||
#ifdef CONFIG_BF54x
|
||||
|
@ -1138,7 +1092,7 @@ void do_irq(int vec, struct pt_regs *fp)
|
|||
}
|
||||
#else
|
||||
unsigned long sic_status;
|
||||
SSYNC();
|
||||
|
||||
sic_status = bfin_read_SIC_IMASK() & bfin_read_SIC_ISR();
|
||||
|
||||
for (;; ivg++) {
|
||||
|
|
|
@ -181,7 +181,7 @@ void __init mem_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
static __init void free_init_pages(const char *what, unsigned long begin, unsigned long end)
|
||||
static void __init free_init_pages(const char *what, unsigned long begin, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
/* next to check that the page we free is not a partial page */
|
||||
|
@ -203,7 +203,7 @@ void __init free_initrd_mem(unsigned long start, unsigned long end)
|
|||
}
|
||||
#endif
|
||||
|
||||
void __init free_initmem(void)
|
||||
void __init_refok free_initmem(void)
|
||||
{
|
||||
#if defined CONFIG_RAMKERNEL && !defined CONFIG_MPU
|
||||
free_init_pages("unused kernel memory",
|
||||
|
|
|
@ -1151,7 +1151,7 @@ static void cell_handle_interrupt(struct pt_regs *regs,
|
|||
for (i = 0; i < num_counters; ++i) {
|
||||
if ((interrupt_mask & CBE_PM_CTR_OVERFLOW_INTR(i))
|
||||
&& ctr[i].enabled) {
|
||||
oprofile_add_pc(pc, is_kernel, i);
|
||||
oprofile_add_ext_sample(pc, regs, i, is_kernel);
|
||||
cbe_write_ctr(cpu, i, reset_value[i]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
|
||||
/* IOMMU sizing */
|
||||
#define IO_SEGMENT_SHIFT 28
|
||||
#define IO_PAGENO_BITS (IO_SEGMENT_SHIFT - IOMMU_PAGE_SHIFT)
|
||||
#define IO_PAGENO_BITS(shift) (IO_SEGMENT_SHIFT - (shift))
|
||||
|
||||
/* The high bit needs to be set on every DMA address */
|
||||
#define SPIDER_DMA_OFFSET 0x80000000ul
|
||||
|
@ -123,7 +123,6 @@ struct iommu_window {
|
|||
struct cbe_iommu *iommu;
|
||||
unsigned long offset;
|
||||
unsigned long size;
|
||||
unsigned long pte_offset;
|
||||
unsigned int ioid;
|
||||
struct iommu_table table;
|
||||
};
|
||||
|
@ -200,7 +199,7 @@ static void tce_build_cell(struct iommu_table *tbl, long index, long npages,
|
|||
(window->ioid & IOPTE_IOID_Mask);
|
||||
#endif
|
||||
|
||||
io_pte = (unsigned long *)tbl->it_base + (index - window->pte_offset);
|
||||
io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
|
||||
|
||||
for (i = 0; i < npages; i++, uaddr += IOMMU_PAGE_SIZE)
|
||||
io_pte[i] = base_pte | (__pa(uaddr) & IOPTE_RPN_Mask);
|
||||
|
@ -232,7 +231,7 @@ static void tce_free_cell(struct iommu_table *tbl, long index, long npages)
|
|||
| (window->ioid & IOPTE_IOID_Mask);
|
||||
#endif
|
||||
|
||||
io_pte = (unsigned long *)tbl->it_base + (index - window->pte_offset);
|
||||
io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
|
||||
|
||||
for (i = 0; i < npages; i++)
|
||||
io_pte[i] = pte;
|
||||
|
@ -307,76 +306,84 @@ static int cell_iommu_find_ioc(int nid, unsigned long *base)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
static void cell_iommu_setup_page_tables(struct cbe_iommu *iommu,
|
||||
static void cell_iommu_setup_stab(struct cbe_iommu *iommu,
|
||||
unsigned long dbase, unsigned long dsize,
|
||||
unsigned long fbase, unsigned long fsize)
|
||||
{
|
||||
struct page *page;
|
||||
int i;
|
||||
unsigned long reg, segments, pages_per_segment, ptab_size, stab_size,
|
||||
n_pte_pages, base;
|
||||
|
||||
base = dbase;
|
||||
if (fsize != 0)
|
||||
base = min(fbase, dbase);
|
||||
unsigned long segments, stab_size;
|
||||
|
||||
segments = max(dbase + dsize, fbase + fsize) >> IO_SEGMENT_SHIFT;
|
||||
pages_per_segment = 1ull << IO_PAGENO_BITS;
|
||||
|
||||
pr_debug("%s: iommu[%d]: segments: %lu, pages per segment: %lu\n",
|
||||
__FUNCTION__, iommu->nid, segments, pages_per_segment);
|
||||
pr_debug("%s: iommu[%d]: segments: %lu\n",
|
||||
__FUNCTION__, iommu->nid, segments);
|
||||
|
||||
/* set up the segment table */
|
||||
stab_size = segments * sizeof(unsigned long);
|
||||
page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(stab_size));
|
||||
BUG_ON(!page);
|
||||
iommu->stab = page_address(page);
|
||||
clear_page(iommu->stab);
|
||||
memset(iommu->stab, 0, stab_size);
|
||||
}
|
||||
|
||||
static unsigned long *cell_iommu_alloc_ptab(struct cbe_iommu *iommu,
|
||||
unsigned long base, unsigned long size, unsigned long gap_base,
|
||||
unsigned long gap_size, unsigned long page_shift)
|
||||
{
|
||||
struct page *page;
|
||||
int i;
|
||||
unsigned long reg, segments, pages_per_segment, ptab_size,
|
||||
n_pte_pages, start_seg, *ptab;
|
||||
|
||||
start_seg = base >> IO_SEGMENT_SHIFT;
|
||||
segments = size >> IO_SEGMENT_SHIFT;
|
||||
pages_per_segment = 1ull << IO_PAGENO_BITS(page_shift);
|
||||
/* PTEs for each segment must start on a 4K bounday */
|
||||
pages_per_segment = max(pages_per_segment,
|
||||
(1 << 12) / sizeof(unsigned long));
|
||||
|
||||
/* ... and the page tables. Since these are contiguous, we can treat
|
||||
* the page tables as one array of ptes, like pSeries does.
|
||||
*/
|
||||
ptab_size = segments * pages_per_segment * sizeof(unsigned long);
|
||||
pr_debug("%s: iommu[%d]: ptab_size: %lu, order: %d\n", __FUNCTION__,
|
||||
iommu->nid, ptab_size, get_order(ptab_size));
|
||||
page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(ptab_size));
|
||||
BUG_ON(!page);
|
||||
|
||||
iommu->ptab = page_address(page);
|
||||
memset(iommu->ptab, 0, ptab_size);
|
||||
ptab = page_address(page);
|
||||
memset(ptab, 0, ptab_size);
|
||||
|
||||
/* allocate a bogus page for the end of each mapping */
|
||||
page = alloc_pages_node(iommu->nid, GFP_KERNEL, 0);
|
||||
BUG_ON(!page);
|
||||
iommu->pad_page = page_address(page);
|
||||
clear_page(iommu->pad_page);
|
||||
|
||||
/* number of pages needed for a page table */
|
||||
n_pte_pages = (pages_per_segment *
|
||||
sizeof(unsigned long)) >> IOMMU_PAGE_SHIFT;
|
||||
/* number of 4K pages needed for a page table */
|
||||
n_pte_pages = (pages_per_segment * sizeof(unsigned long)) >> 12;
|
||||
|
||||
pr_debug("%s: iommu[%d]: stab at %p, ptab at %p, n_pte_pages: %lu\n",
|
||||
__FUNCTION__, iommu->nid, iommu->stab, iommu->ptab,
|
||||
__FUNCTION__, iommu->nid, iommu->stab, ptab,
|
||||
n_pte_pages);
|
||||
|
||||
/* initialise the STEs */
|
||||
reg = IOSTE_V | ((n_pte_pages - 1) << 5);
|
||||
|
||||
if (IOMMU_PAGE_SIZE == 0x1000)
|
||||
reg |= IOSTE_PS_4K;
|
||||
else if (IOMMU_PAGE_SIZE == 0x10000)
|
||||
reg |= IOSTE_PS_64K;
|
||||
else {
|
||||
extern void __unknown_page_size_error(void);
|
||||
__unknown_page_size_error();
|
||||
switch (page_shift) {
|
||||
case 12: reg |= IOSTE_PS_4K; break;
|
||||
case 16: reg |= IOSTE_PS_64K; break;
|
||||
case 20: reg |= IOSTE_PS_1M; break;
|
||||
case 24: reg |= IOSTE_PS_16M; break;
|
||||
default: BUG();
|
||||
}
|
||||
|
||||
gap_base = gap_base >> IO_SEGMENT_SHIFT;
|
||||
gap_size = gap_size >> IO_SEGMENT_SHIFT;
|
||||
|
||||
pr_debug("Setting up IOMMU stab:\n");
|
||||
for (i = base >> IO_SEGMENT_SHIFT; i < segments; i++) {
|
||||
iommu->stab[i] = reg |
|
||||
(__pa(iommu->ptab) + n_pte_pages * IOMMU_PAGE_SIZE * i);
|
||||
for (i = start_seg; i < (start_seg + segments); i++) {
|
||||
if (i >= gap_base && i < (gap_base + gap_size)) {
|
||||
pr_debug("\toverlap at %d, skipping\n", i);
|
||||
continue;
|
||||
}
|
||||
iommu->stab[i] = reg | (__pa(ptab) + (n_pte_pages << 12) *
|
||||
(i - start_seg));
|
||||
pr_debug("\t[%d] 0x%016lx\n", i, iommu->stab[i]);
|
||||
}
|
||||
|
||||
return ptab;
|
||||
}
|
||||
|
||||
static void cell_iommu_enable_hardware(struct cbe_iommu *iommu)
|
||||
|
@ -423,7 +430,9 @@ static void cell_iommu_enable_hardware(struct cbe_iommu *iommu)
|
|||
static void cell_iommu_setup_hardware(struct cbe_iommu *iommu,
|
||||
unsigned long base, unsigned long size)
|
||||
{
|
||||
cell_iommu_setup_page_tables(iommu, base, size, 0, 0);
|
||||
cell_iommu_setup_stab(iommu, base, size, 0, 0);
|
||||
iommu->ptab = cell_iommu_alloc_ptab(iommu, base, size, 0, 0,
|
||||
IOMMU_PAGE_SHIFT);
|
||||
cell_iommu_enable_hardware(iommu);
|
||||
}
|
||||
|
||||
|
@ -464,6 +473,7 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
|
|||
unsigned long pte_offset)
|
||||
{
|
||||
struct iommu_window *window;
|
||||
struct page *page;
|
||||
u32 ioid;
|
||||
|
||||
ioid = cell_iommu_get_ioid(np);
|
||||
|
@ -475,13 +485,11 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
|
|||
window->size = size;
|
||||
window->ioid = ioid;
|
||||
window->iommu = iommu;
|
||||
window->pte_offset = pte_offset;
|
||||
|
||||
window->table.it_blocksize = 16;
|
||||
window->table.it_base = (unsigned long)iommu->ptab;
|
||||
window->table.it_index = iommu->nid;
|
||||
window->table.it_offset = (offset >> IOMMU_PAGE_SHIFT) +
|
||||
window->pte_offset;
|
||||
window->table.it_offset = (offset >> IOMMU_PAGE_SHIFT) + pte_offset;
|
||||
window->table.it_size = size >> IOMMU_PAGE_SHIFT;
|
||||
|
||||
iommu_init_table(&window->table, iommu->nid);
|
||||
|
@ -504,6 +512,11 @@ cell_iommu_setup_window(struct cbe_iommu *iommu, struct device_node *np,
|
|||
* This code also assumes that we have a window that starts at 0,
|
||||
* which is the case on all spider based blades.
|
||||
*/
|
||||
page = alloc_pages_node(iommu->nid, GFP_KERNEL, 0);
|
||||
BUG_ON(!page);
|
||||
iommu->pad_page = page_address(page);
|
||||
clear_page(iommu->pad_page);
|
||||
|
||||
__set_bit(0, window->table.it_map);
|
||||
tce_build_cell(&window->table, window->table.it_offset, 1,
|
||||
(unsigned long)iommu->pad_page, DMA_TO_DEVICE);
|
||||
|
@ -549,7 +562,7 @@ static void cell_dma_dev_setup_iommu(struct device *dev)
|
|||
archdata->dma_data = &window->table;
|
||||
}
|
||||
|
||||
static void cell_dma_dev_setup_static(struct device *dev);
|
||||
static void cell_dma_dev_setup_fixed(struct device *dev);
|
||||
|
||||
static void cell_dma_dev_setup(struct device *dev)
|
||||
{
|
||||
|
@ -557,7 +570,7 @@ static void cell_dma_dev_setup(struct device *dev)
|
|||
|
||||
/* Order is important here, these are not mutually exclusive */
|
||||
if (get_dma_ops(dev) == &dma_iommu_fixed_ops)
|
||||
cell_dma_dev_setup_static(dev);
|
||||
cell_dma_dev_setup_fixed(dev);
|
||||
else if (get_pci_dma_ops() == &dma_iommu_ops)
|
||||
cell_dma_dev_setup_iommu(dev);
|
||||
else if (get_pci_dma_ops() == &dma_direct_ops)
|
||||
|
@ -858,7 +871,7 @@ static int dma_set_mask_and_switch(struct device *dev, u64 dma_mask)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void cell_dma_dev_setup_static(struct device *dev)
|
||||
static void cell_dma_dev_setup_fixed(struct device *dev)
|
||||
{
|
||||
struct dev_archdata *archdata = &dev->archdata;
|
||||
u64 addr;
|
||||
|
@ -869,35 +882,45 @@ static void cell_dma_dev_setup_static(struct device *dev)
|
|||
dev_dbg(dev, "iommu: fixed addr = %lx\n", addr);
|
||||
}
|
||||
|
||||
static void insert_16M_pte(unsigned long addr, unsigned long *ptab,
|
||||
unsigned long base_pte)
|
||||
{
|
||||
unsigned long segment, offset;
|
||||
|
||||
segment = addr >> IO_SEGMENT_SHIFT;
|
||||
offset = (addr >> 24) - (segment << IO_PAGENO_BITS(24));
|
||||
ptab = ptab + (segment * (1 << 12) / sizeof(unsigned long));
|
||||
|
||||
pr_debug("iommu: addr %lx ptab %p segment %lx offset %lx\n",
|
||||
addr, ptab, segment, offset);
|
||||
|
||||
ptab[offset] = base_pte | (__pa(addr) & IOPTE_RPN_Mask);
|
||||
}
|
||||
|
||||
static void cell_iommu_setup_fixed_ptab(struct cbe_iommu *iommu,
|
||||
struct device_node *np, unsigned long dbase, unsigned long dsize,
|
||||
unsigned long fbase, unsigned long fsize)
|
||||
{
|
||||
unsigned long base_pte, uaddr, *io_pte;
|
||||
int i;
|
||||
unsigned long base_pte, uaddr, ioaddr, *ptab;
|
||||
|
||||
ptab = cell_iommu_alloc_ptab(iommu, fbase, fsize, dbase, dsize, 24);
|
||||
|
||||
dma_iommu_fixed_base = fbase;
|
||||
|
||||
/* convert from bytes into page table indices */
|
||||
dbase = dbase >> IOMMU_PAGE_SHIFT;
|
||||
dsize = dsize >> IOMMU_PAGE_SHIFT;
|
||||
fbase = fbase >> IOMMU_PAGE_SHIFT;
|
||||
fsize = fsize >> IOMMU_PAGE_SHIFT;
|
||||
|
||||
pr_debug("iommu: mapping 0x%lx pages from 0x%lx\n", fsize, fbase);
|
||||
|
||||
io_pte = iommu->ptab;
|
||||
base_pte = IOPTE_PP_W | IOPTE_PP_R | IOPTE_M | IOPTE_SO_RW
|
||||
| (cell_iommu_get_ioid(np) & IOPTE_IOID_Mask);
|
||||
|
||||
uaddr = 0;
|
||||
for (i = fbase; i < fbase + fsize; i++, uaddr += IOMMU_PAGE_SIZE) {
|
||||
for (uaddr = 0; uaddr < fsize; uaddr += (1 << 24)) {
|
||||
/* Don't touch the dynamic region */
|
||||
if (i >= dbase && i < (dbase + dsize)) {
|
||||
pr_debug("iommu: static/dynamic overlap, skipping\n");
|
||||
ioaddr = uaddr + fbase;
|
||||
if (ioaddr >= dbase && ioaddr < (dbase + dsize)) {
|
||||
pr_debug("iommu: fixed/dynamic overlap, skipping\n");
|
||||
continue;
|
||||
}
|
||||
io_pte[i] = base_pte | (__pa(uaddr) & IOPTE_RPN_Mask);
|
||||
|
||||
insert_16M_pte(uaddr, ptab, base_pte);
|
||||
}
|
||||
|
||||
mb();
|
||||
|
@ -995,7 +1018,9 @@ static int __init cell_iommu_fixed_mapping_init(void)
|
|||
"fixed window 0x%lx-0x%lx\n", iommu->nid, dbase,
|
||||
dbase + dsize, fbase, fbase + fsize);
|
||||
|
||||
cell_iommu_setup_page_tables(iommu, dbase, dsize, fbase, fsize);
|
||||
cell_iommu_setup_stab(iommu, dbase, dsize, fbase, fsize);
|
||||
iommu->ptab = cell_iommu_alloc_ptab(iommu, dbase, dsize, 0, 0,
|
||||
IOMMU_PAGE_SHIFT);
|
||||
cell_iommu_setup_fixed_ptab(iommu, np, dbase, dsize,
|
||||
fbase, fsize);
|
||||
cell_iommu_enable_hardware(iommu);
|
||||
|
|
|
@ -149,6 +149,11 @@ static void __init cell_init_irq(void)
|
|||
mpic_init_IRQ();
|
||||
}
|
||||
|
||||
static void __init cell_set_dabrx(void)
|
||||
{
|
||||
mtspr(SPRN_DABRX, DABRX_KERNEL | DABRX_USER);
|
||||
}
|
||||
|
||||
static void __init cell_setup_arch(void)
|
||||
{
|
||||
#ifdef CONFIG_SPU_BASE
|
||||
|
@ -158,6 +163,8 @@ static void __init cell_setup_arch(void)
|
|||
|
||||
cbe_regs_init();
|
||||
|
||||
cell_set_dabrx();
|
||||
|
||||
#ifdef CONFIG_CBE_RAS
|
||||
cbe_ras_init();
|
||||
#endif
|
||||
|
|
|
@ -21,9 +21,6 @@
|
|||
#ifndef _CELLEB_BEAT_H
|
||||
#define _CELLEB_BEAT_H
|
||||
|
||||
#define DABRX_KERNEL (1UL<<1)
|
||||
#define DABRX_USER (1UL<<0)
|
||||
|
||||
int64_t beat_get_term_char(uint64_t,uint64_t*,uint64_t*,uint64_t*);
|
||||
int64_t beat_put_term_char(uint64_t,uint64_t,uint64_t,uint64_t);
|
||||
int64_t beat_repository_encode(int, const char *, uint64_t[4]);
|
||||
|
|
|
@ -330,6 +330,7 @@ config CPU_SUBTYPE_SH5_101
|
|||
|
||||
config CPU_SUBTYPE_SH5_103
|
||||
bool "Support SH5-103 processor"
|
||||
select CPU_SH5
|
||||
|
||||
endchoice
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ static irqreturn_t dma_tei(int irq, void *dev_id)
|
|||
|
||||
static int sh_dmac_request_dma(struct dma_channel *chan)
|
||||
{
|
||||
if (unlikely(!chan->flags & DMA_TEI_CAPABLE))
|
||||
if (unlikely(!(chan->flags & DMA_TEI_CAPABLE)))
|
||||
return 0;
|
||||
|
||||
return request_irq(get_dmte_irq(chan->chan), dma_tei,
|
||||
|
|
|
@ -93,7 +93,7 @@ static int heartbeat_drv_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
hd->base = ioremap_nocache(res->start, res->end - res->start + 1);
|
||||
if (!unlikely(hd->base)) {
|
||||
if (unlikely(!hd->base)) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
|
||||
if (!pdev->dev.platform_data)
|
||||
|
|
|
@ -83,9 +83,9 @@ static int gapspci_read(struct pci_bus *bus, unsigned int devfn, int where, int
|
|||
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||
|
||||
switch (size) {
|
||||
case 1: *val = ctrl_inb(GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 2: *val = ctrl_inw(GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 4: *val = ctrl_inl(GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 1: *val = inb(GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 2: *val = inw(GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 4: *val = inl(GAPSPCI_BBA_CONFIG+where); break;
|
||||
}
|
||||
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
|
@ -97,9 +97,9 @@ static int gapspci_write(struct pci_bus *bus, unsigned int devfn, int where, int
|
|||
return PCIBIOS_DEVICE_NOT_FOUND;
|
||||
|
||||
switch (size) {
|
||||
case 1: ctrl_outb(( u8)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 2: ctrl_outw((u16)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 4: ctrl_outl((u32)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 1: outb(( u8)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 2: outw((u16)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
case 4: outl((u32)val, GAPSPCI_BBA_CONFIG+where); break;
|
||||
}
|
||||
|
||||
return PCIBIOS_SUCCESSFUL;
|
||||
|
@ -127,36 +127,36 @@ int __init gapspci_init(void)
|
|||
*/
|
||||
|
||||
for (i=0; i<16; i++)
|
||||
idbuf[i] = ctrl_inb(GAPSPCI_REGS+i);
|
||||
idbuf[i] = inb(GAPSPCI_REGS+i);
|
||||
|
||||
if (strncmp(idbuf, "GAPSPCI_BRIDGE_2", 16))
|
||||
return -ENODEV;
|
||||
|
||||
ctrl_outl(0x5a14a501, GAPSPCI_REGS+0x18);
|
||||
outl(0x5a14a501, GAPSPCI_REGS+0x18);
|
||||
|
||||
for (i=0; i<1000000; i++)
|
||||
;
|
||||
|
||||
if (ctrl_inl(GAPSPCI_REGS+0x18) != 1)
|
||||
if (inl(GAPSPCI_REGS+0x18) != 1)
|
||||
return -EINVAL;
|
||||
|
||||
ctrl_outl(0x01000000, GAPSPCI_REGS+0x20);
|
||||
ctrl_outl(0x01000000, GAPSPCI_REGS+0x24);
|
||||
outl(0x01000000, GAPSPCI_REGS+0x20);
|
||||
outl(0x01000000, GAPSPCI_REGS+0x24);
|
||||
|
||||
ctrl_outl(GAPSPCI_DMA_BASE, GAPSPCI_REGS+0x28);
|
||||
ctrl_outl(GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE, GAPSPCI_REGS+0x2c);
|
||||
outl(GAPSPCI_DMA_BASE, GAPSPCI_REGS+0x28);
|
||||
outl(GAPSPCI_DMA_BASE+GAPSPCI_DMA_SIZE, GAPSPCI_REGS+0x2c);
|
||||
|
||||
ctrl_outl(1, GAPSPCI_REGS+0x14);
|
||||
ctrl_outl(1, GAPSPCI_REGS+0x34);
|
||||
outl(1, GAPSPCI_REGS+0x14);
|
||||
outl(1, GAPSPCI_REGS+0x34);
|
||||
|
||||
/* Setting Broadband Adapter */
|
||||
ctrl_outw(0xf900, GAPSPCI_BBA_CONFIG+0x06);
|
||||
ctrl_outl(0x00000000, GAPSPCI_BBA_CONFIG+0x30);
|
||||
ctrl_outb(0x00, GAPSPCI_BBA_CONFIG+0x3c);
|
||||
ctrl_outb(0xf0, GAPSPCI_BBA_CONFIG+0x0d);
|
||||
ctrl_outw(0x0006, GAPSPCI_BBA_CONFIG+0x04);
|
||||
ctrl_outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10);
|
||||
ctrl_outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14);
|
||||
outw(0xf900, GAPSPCI_BBA_CONFIG+0x06);
|
||||
outl(0x00000000, GAPSPCI_BBA_CONFIG+0x30);
|
||||
outb(0x00, GAPSPCI_BBA_CONFIG+0x3c);
|
||||
outb(0xf0, GAPSPCI_BBA_CONFIG+0x0d);
|
||||
outw(0x0006, GAPSPCI_BBA_CONFIG+0x04);
|
||||
outl(0x00002001, GAPSPCI_BBA_CONFIG+0x10);
|
||||
outl(0x01000000, GAPSPCI_BBA_CONFIG+0x14);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
enum {
|
||||
UNUSED = 0,
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
#include <asm/freq.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
const static int pll1rate[]={8,12,16,0};
|
||||
const static int pfc_divisors[]={1,2,3,4,6,8,12};
|
||||
static const int pll1rate[]={8,12,16,0};
|
||||
static const int pfc_divisors[]={1,2,3,4,6,8,12};
|
||||
#define ifc_divisors pfc_divisors
|
||||
|
||||
#if (CONFIG_SH_CLK_MD == 0)
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
enum {
|
||||
UNUSED = 0,
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
enum {
|
||||
UNUSED = 0,
|
||||
|
|
|
@ -94,9 +94,9 @@ int __uses_jump_to_uncached detect_cpu_and_cache_system(void)
|
|||
boot_cpu_data.dcache.way_incr = (1 << 13);
|
||||
boot_cpu_data.dcache.entry_mask = 0x1ff0;
|
||||
boot_cpu_data.dcache.sets = 512;
|
||||
ctrl_outl(CCR_CACHE_32KB, CCR3);
|
||||
ctrl_outl(CCR_CACHE_32KB, CCR3_REG);
|
||||
#else
|
||||
ctrl_outl(CCR_CACHE_16KB, CCR3);
|
||||
ctrl_outl(CCR_CACHE_16KB, CCR3_REG);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <asm/rtc.h>
|
||||
|
||||
enum {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
enum {
|
||||
UNUSED = 0,
|
||||
|
@ -123,15 +123,15 @@ static struct resource rtc_resources[] = {
|
|||
.flags = IORESOURCE_IO,
|
||||
},
|
||||
[1] = {
|
||||
.start = 20,
|
||||
.start = 21,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = 21,
|
||||
.start = 22,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[3] = {
|
||||
.start = 22,
|
||||
.start = 20,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <asm/rtc.h>
|
||||
|
||||
enum {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <asm/rtc.h>
|
||||
|
||||
#define INTC_ICR1 0xA4140010UL
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct resource rtc_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
enum {
|
||||
UNUSED = 0,
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/mmzone.h>
|
||||
#include <asm/sci.h>
|
||||
|
||||
static struct resource usbf_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct resource rtc_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/sci.h>
|
||||
#include <linux/serial_sci.h>
|
||||
|
||||
static struct resource rtc_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/mmzone.h>
|
||||
#include <asm/sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_sci.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/mmzone.h>
|
||||
#include <asm/sci.h>
|
||||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/auxio.h>
|
||||
|
||||
|
|
|
@ -525,10 +525,10 @@ static void dr_cpu_mark(struct ds_data *resp, int cpu, int ncpus,
|
|||
}
|
||||
}
|
||||
|
||||
static int dr_cpu_configure(struct ds_info *dp,
|
||||
struct ds_cap_state *cp,
|
||||
u64 req_num,
|
||||
cpumask_t *mask)
|
||||
static int __cpuinit dr_cpu_configure(struct ds_info *dp,
|
||||
struct ds_cap_state *cp,
|
||||
u64 req_num,
|
||||
cpumask_t *mask)
|
||||
{
|
||||
struct ds_data *resp;
|
||||
int resp_len, ncpus, cpu;
|
||||
|
@ -623,9 +623,9 @@ static int dr_cpu_unconfigure(struct ds_info *dp,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void dr_cpu_data(struct ds_info *dp,
|
||||
struct ds_cap_state *cp,
|
||||
void *buf, int len)
|
||||
static void __cpuinit dr_cpu_data(struct ds_info *dp,
|
||||
struct ds_cap_state *cp,
|
||||
void *buf, int len)
|
||||
{
|
||||
struct ds_data *data = buf;
|
||||
struct dr_cpu_tag *tag = (struct dr_cpu_tag *) (data + 1);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
* Copyright (C) 2007 David S. Miller <davem@davemloft.net>
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/hypervisor.h>
|
||||
#include <asm/scratchpad.h>
|
||||
|
@ -13,7 +15,7 @@
|
|||
#include <asm/head.h>
|
||||
#include <asm/asi.h>
|
||||
|
||||
.text
|
||||
__CPUINIT
|
||||
.align 8
|
||||
.globl hv_cpu_startup, hv_cpu_startup_end
|
||||
|
||||
|
|
|
@ -134,7 +134,8 @@ unsigned long iommu_range_alloc(struct device *dev,
|
|||
else
|
||||
boundary_size = ALIGN(1UL << 32, 1 << IO_PAGE_SHIFT);
|
||||
|
||||
n = iommu_area_alloc(arena->map, limit, start, npages, 0,
|
||||
n = iommu_area_alloc(arena->map, limit, start, npages,
|
||||
iommu->page_table_map_base >> IO_PAGE_SHIFT,
|
||||
boundary_size >> IO_PAGE_SHIFT, 0);
|
||||
if (n == -1) {
|
||||
if (likely(pass < 1)) {
|
||||
|
|
|
@ -465,8 +465,6 @@ void __kprobes jprobe_return(void)
|
|||
|
||||
extern void jprobe_return_trap_instruction(void);
|
||||
|
||||
extern void __show_regs(struct pt_regs * regs);
|
||||
|
||||
int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
|
||||
{
|
||||
u32 *addr = (u32 *) regs->tpc;
|
||||
|
|
|
@ -758,7 +758,7 @@ static void __devinit get_mondo_data(struct mdesc_handle *hp, u64 mp,
|
|||
get_one_mondo_bits(val, &tb->nonresum_qmask, 2);
|
||||
}
|
||||
|
||||
void __devinit mdesc_fill_in_cpu_data(cpumask_t mask)
|
||||
void __cpuinit mdesc_fill_in_cpu_data(cpumask_t mask)
|
||||
{
|
||||
struct mdesc_handle *hp = mdesc_grab();
|
||||
u64 mp;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <asm/of_device.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/sstate.h>
|
||||
#include <asm/reboot.h>
|
||||
|
||||
#include <linux/unistd.h>
|
||||
|
||||
|
@ -39,8 +40,6 @@ static irqreturn_t power_handler(int irq, void *dev_id)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
extern void machine_halt(void);
|
||||
extern void machine_alt_power_off(void);
|
||||
static void (*poweroff_method)(void) = machine_alt_power_off;
|
||||
|
||||
void machine_power_off(void)
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/tick.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/elfcore.h>
|
||||
|
||||
#include <asm/oplib.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
@ -47,6 +48,8 @@
|
|||
#include <asm/unistd.h>
|
||||
#include <asm/hypervisor.h>
|
||||
#include <asm/sstate.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/syscalls.h>
|
||||
|
||||
/* #define VERBOSE_SHOWREGS */
|
||||
|
||||
|
@ -211,62 +214,6 @@ static void show_regwindow(struct pt_regs *regs)
|
|||
print_symbol("I7: <%s>\n", rwk->ins[7]);
|
||||
}
|
||||
|
||||
void show_stackframe(struct sparc_stackf *sf)
|
||||
{
|
||||
unsigned long size;
|
||||
unsigned long *stk;
|
||||
int i;
|
||||
|
||||
printk("l0: %016lx l1: %016lx l2: %016lx l3: %016lx\n"
|
||||
"l4: %016lx l5: %016lx l6: %016lx l7: %016lx\n",
|
||||
sf->locals[0], sf->locals[1], sf->locals[2], sf->locals[3],
|
||||
sf->locals[4], sf->locals[5], sf->locals[6], sf->locals[7]);
|
||||
printk("i0: %016lx i1: %016lx i2: %016lx i3: %016lx\n"
|
||||
"i4: %016lx i5: %016lx fp: %016lx ret_pc: %016lx\n",
|
||||
sf->ins[0], sf->ins[1], sf->ins[2], sf->ins[3],
|
||||
sf->ins[4], sf->ins[5], (unsigned long)sf->fp, sf->callers_pc);
|
||||
printk("sp: %016lx x0: %016lx x1: %016lx x2: %016lx\n"
|
||||
"x3: %016lx x4: %016lx x5: %016lx xx: %016lx\n",
|
||||
(unsigned long)sf->structptr, sf->xargs[0], sf->xargs[1],
|
||||
sf->xargs[2], sf->xargs[3], sf->xargs[4], sf->xargs[5],
|
||||
sf->xxargs[0]);
|
||||
size = ((unsigned long)sf->fp) - ((unsigned long)sf);
|
||||
size -= STACKFRAME_SZ;
|
||||
stk = (unsigned long *)((unsigned long)sf + STACKFRAME_SZ);
|
||||
i = 0;
|
||||
do {
|
||||
printk("s%d: %016lx\n", i++, *stk++);
|
||||
} while ((size -= sizeof(unsigned long)));
|
||||
}
|
||||
|
||||
void show_stackframe32(struct sparc_stackf32 *sf)
|
||||
{
|
||||
unsigned long size;
|
||||
unsigned *stk;
|
||||
int i;
|
||||
|
||||
printk("l0: %08x l1: %08x l2: %08x l3: %08x\n",
|
||||
sf->locals[0], sf->locals[1], sf->locals[2], sf->locals[3]);
|
||||
printk("l4: %08x l5: %08x l6: %08x l7: %08x\n",
|
||||
sf->locals[4], sf->locals[5], sf->locals[6], sf->locals[7]);
|
||||
printk("i0: %08x i1: %08x i2: %08x i3: %08x\n",
|
||||
sf->ins[0], sf->ins[1], sf->ins[2], sf->ins[3]);
|
||||
printk("i4: %08x i5: %08x fp: %08x ret_pc: %08x\n",
|
||||
sf->ins[4], sf->ins[5], sf->fp, sf->callers_pc);
|
||||
printk("sp: %08x x0: %08x x1: %08x x2: %08x\n"
|
||||
"x3: %08x x4: %08x x5: %08x xx: %08x\n",
|
||||
sf->structptr, sf->xargs[0], sf->xargs[1],
|
||||
sf->xargs[2], sf->xargs[3], sf->xargs[4], sf->xargs[5],
|
||||
sf->xxargs[0]);
|
||||
size = ((unsigned long)sf->fp) - ((unsigned long)sf);
|
||||
size -= STACKFRAME32_SZ;
|
||||
stk = (unsigned *)((unsigned long)sf + STACKFRAME32_SZ);
|
||||
i = 0;
|
||||
do {
|
||||
printk("s%d: %08x\n", i++, *stk++);
|
||||
} while ((size -= sizeof(unsigned)));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static DEFINE_SPINLOCK(regdump_lock);
|
||||
#endif
|
||||
|
@ -354,24 +301,6 @@ void show_regs(struct pt_regs *regs)
|
|||
#endif
|
||||
}
|
||||
|
||||
void show_regs32(struct pt_regs32 *regs)
|
||||
{
|
||||
printk("PSR: %08x PC: %08x NPC: %08x Y: %08x %s\n", regs->psr,
|
||||
regs->pc, regs->npc, regs->y, print_tainted());
|
||||
printk("g0: %08x g1: %08x g2: %08x g3: %08x ",
|
||||
regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
|
||||
regs->u_regs[3]);
|
||||
printk("g4: %08x g5: %08x g6: %08x g7: %08x\n",
|
||||
regs->u_regs[4], regs->u_regs[5], regs->u_regs[6],
|
||||
regs->u_regs[7]);
|
||||
printk("o0: %08x o1: %08x o2: %08x o3: %08x ",
|
||||
regs->u_regs[8], regs->u_regs[9], regs->u_regs[10],
|
||||
regs->u_regs[11]);
|
||||
printk("o4: %08x o5: %08x sp: %08x ret_pc: %08x\n",
|
||||
regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
|
||||
regs->u_regs[15]);
|
||||
}
|
||||
|
||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
||||
{
|
||||
struct thread_info *ti = task_thread_info(tsk);
|
||||
|
|
|
@ -86,7 +86,7 @@ extern void setup_sparc64_timer(void);
|
|||
|
||||
static volatile unsigned long callin_flag = 0;
|
||||
|
||||
void __devinit smp_callin(void)
|
||||
void __cpuinit smp_callin(void)
|
||||
{
|
||||
int cpuid = hard_smp_processor_id();
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/head.h>
|
||||
#include <asm/asi.h>
|
||||
#include <asm/lsu.h>
|
||||
|
@ -36,7 +38,7 @@ dtlb_load:
|
|||
tramp_stack:
|
||||
.skip TRAMP_STACK_SIZE
|
||||
|
||||
.text
|
||||
__CPUINIT
|
||||
.align 8
|
||||
.globl sparc64_cpu_startup, sparc64_cpu_startup_end
|
||||
sparc64_cpu_startup:
|
||||
|
|
|
@ -1791,8 +1791,6 @@ static const char *sun4v_err_type_to_str(u32 type)
|
|||
};
|
||||
}
|
||||
|
||||
extern void __show_regs(struct pt_regs * regs);
|
||||
|
||||
static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, int cpu, const char *pfx, atomic_t *ocnt)
|
||||
{
|
||||
int cnt;
|
||||
|
|
|
@ -244,16 +244,8 @@ static void do_kernel_fault(struct pt_regs *regs, int si_code, int fault_code,
|
|||
if (regs->tstate & TSTATE_PRIV) {
|
||||
const struct exception_table_entry *entry;
|
||||
|
||||
if (asi == ASI_P && (insn & 0xc0800000) == 0xc0800000) {
|
||||
if (insn & 0x2000)
|
||||
asi = (regs->tstate >> 24);
|
||||
else
|
||||
asi = (insn >> 5);
|
||||
}
|
||||
|
||||
/* Look in asi.h: All _S asis have LS bit set */
|
||||
if ((asi & 0x1) &&
|
||||
(entry = search_exception_tables(regs->tpc))) {
|
||||
entry = search_exception_tables(regs->tpc);
|
||||
if (entry) {
|
||||
regs->tpc = entry->fixup;
|
||||
regs->tnpc = regs->tpc + 4;
|
||||
return;
|
||||
|
@ -294,7 +286,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
|
|||
unsigned long tpc = regs->tpc;
|
||||
|
||||
/* Sanity check the PC. */
|
||||
if ((tpc >= KERNBASE && tpc < (unsigned long) _etext) ||
|
||||
if ((tpc >= KERNBASE && tpc < (unsigned long) __init_end) ||
|
||||
(tpc >= MODULES_VADDR && tpc < MODULES_END)) {
|
||||
/* Valid, no problems... */
|
||||
} else {
|
||||
|
|
|
@ -1010,7 +1010,8 @@ static struct linux_prom64_registers pall[MAX_BANKS] __initdata;
|
|||
static int pall_ents __initdata;
|
||||
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||
static unsigned long kernel_map_range(unsigned long pstart, unsigned long pend, pgprot_t prot)
|
||||
static unsigned long __ref kernel_map_range(unsigned long pstart,
|
||||
unsigned long pend, pgprot_t prot)
|
||||
{
|
||||
unsigned long vstart = PAGE_OFFSET + pstart;
|
||||
unsigned long vend = PAGE_OFFSET + pend;
|
||||
|
|
|
@ -128,8 +128,6 @@ void *get_current(void)
|
|||
return current;
|
||||
}
|
||||
|
||||
extern void schedule_tail(struct task_struct *prev);
|
||||
|
||||
/*
|
||||
* This is called magically, by its address being stuffed in a jmp_buf
|
||||
* and being longjmp-d to.
|
||||
|
|
|
@ -377,6 +377,19 @@ config X86_OOSTORE
|
|||
def_bool y
|
||||
depends on (MWINCHIP3D || MWINCHIP2 || MWINCHIPC6) && MTRR
|
||||
|
||||
#
|
||||
# P6_NOPs are a relatively minor optimization that require a family >=
|
||||
# 6 processor, except that it is broken on certain VIA chips.
|
||||
# Furthermore, AMD chips prefer a totally different sequence of NOPs
|
||||
# (which work on all CPUs). As a result, disallow these if we're
|
||||
# compiling X86_GENERIC but not X86_64 (these NOPs do work on all
|
||||
# x86-64 capable chips); the list of processors in the right-hand clause
|
||||
# are the cores that benefit from this optimization.
|
||||
#
|
||||
config X86_P6_NOP
|
||||
def_bool y
|
||||
depends on (X86_64 || !X86_GENERIC) && (M686 || MPENTIUMII || MPENTIUMIII || MPENTIUMM || MCORE2 || PENTIUM4)
|
||||
|
||||
config X86_TSC
|
||||
def_bool y
|
||||
depends on ((MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2) && !X86_NUMAQ) || X86_64
|
||||
|
@ -390,6 +403,7 @@ config X86_CMOV
|
|||
config X86_MINIMUM_CPU_FAMILY
|
||||
int
|
||||
default "64" if X86_64
|
||||
default "6" if X86_32 && X86_P6_NOP
|
||||
default "4" if X86_32 && (X86_XADD || X86_CMPXCHG || X86_BSWAP || X86_WP_WORKS_OK)
|
||||
default "3"
|
||||
|
||||
|
|
|
@ -37,6 +37,12 @@ static int detect_memory_e820(void)
|
|||
"=m" (*desc)
|
||||
: "D" (desc), "d" (SMAP), "a" (0xe820));
|
||||
|
||||
/* BIOSes which terminate the chain with CF = 1 as opposed
|
||||
to %ebx = 0 don't always report the SMAP signature on
|
||||
the final, failing, probe. */
|
||||
if (err)
|
||||
break;
|
||||
|
||||
/* Some BIOSes stop returning SMAP in the middle of
|
||||
the search loop. We don't know exactly how the BIOS
|
||||
screwed up the map at that point, we might have a
|
||||
|
@ -47,9 +53,6 @@ static int detect_memory_e820(void)
|
|||
break;
|
||||
}
|
||||
|
||||
if (err)
|
||||
break;
|
||||
|
||||
count++;
|
||||
desc++;
|
||||
} while (next && count < E820MAX);
|
||||
|
|
|
@ -128,13 +128,11 @@ void foo(void)
|
|||
OFFSET(XEN_vcpu_info_pending, vcpu_info, evtchn_upcall_pending);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LGUEST_GUEST
|
||||
#if defined(CONFIG_LGUEST) || defined(CONFIG_LGUEST_GUEST) || defined(CONFIG_LGUEST_MODULE)
|
||||
BLANK();
|
||||
OFFSET(LGUEST_DATA_irq_enabled, lguest_data, irq_enabled);
|
||||
OFFSET(LGUEST_DATA_pgdir, lguest_data, pgdir);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LGUEST
|
||||
BLANK();
|
||||
OFFSET(LGUEST_PAGES_host_gdt_desc, lguest_pages, state.host_gdt_desc);
|
||||
OFFSET(LGUEST_PAGES_host_idt_desc, lguest_pages, state.host_idt_desc);
|
||||
|
|
|
@ -504,7 +504,7 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
|||
|
||||
/* Clear all flags overriden by options */
|
||||
for (i = 0; i < NCAPINTS; i++)
|
||||
c->x86_capability[i] ^= cleared_cpu_caps[i];
|
||||
c->x86_capability[i] &= ~cleared_cpu_caps[i];
|
||||
|
||||
/* Init Machine Check Exception if available. */
|
||||
mcheck_init(c);
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/kvm_para.h>
|
||||
#include "mtrr.h"
|
||||
|
||||
u32 num_var_ranges = 0;
|
||||
|
@ -649,6 +650,7 @@ static __init int amd_special_default_mtrr(void)
|
|||
|
||||
/**
|
||||
* mtrr_trim_uncached_memory - trim RAM not covered by MTRRs
|
||||
* @end_pfn: ending page frame number
|
||||
*
|
||||
* Some buggy BIOSes don't setup the MTRRs properly for systems with certain
|
||||
* memory configurations. This routine checks that the highest MTRR matches
|
||||
|
@ -688,8 +690,11 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
|
|||
|
||||
/* kvm/qemu doesn't have mtrr set right, don't trim them all */
|
||||
if (!highest_pfn) {
|
||||
printk(KERN_WARNING "WARNING: strange, CPU MTRRs all blank?\n");
|
||||
WARN_ON(1);
|
||||
if (!kvm_para_available()) {
|
||||
printk(KERN_WARNING
|
||||
"WARNING: strange, CPU MTRRs all blank?\n");
|
||||
WARN_ON(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -76,13 +76,6 @@ static void __cpuinit init_transmeta(struct cpuinfo_x86 *c)
|
|||
/* All Transmeta CPUs have a constant TSC */
|
||||
set_bit(X86_FEATURE_CONSTANT_TSC, c->x86_capability);
|
||||
|
||||
/* If we can run i686 user-space code, call us an i686 */
|
||||
#define USER686 ((1 << X86_FEATURE_TSC)|\
|
||||
(1 << X86_FEATURE_CX8)|\
|
||||
(1 << X86_FEATURE_CMOV))
|
||||
if (c->x86 == 5 && (c->x86_capability[0] & USER686) == USER686)
|
||||
c->x86 = 6;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
/* randomize_va_space slows us down enormously;
|
||||
it probably triggers retranslation of x86->native bytecode */
|
||||
|
|
|
@ -453,6 +453,7 @@ ENTRY(stub_execve)
|
|||
CFI_REGISTER rip, r11
|
||||
SAVE_REST
|
||||
FIXUP_TOP_OF_STACK %r11
|
||||
movq %rsp, %rcx
|
||||
call sys_execve
|
||||
RESTORE_TOP_OF_STACK %r11
|
||||
movq %rax,RAX(%rsp)
|
||||
|
@ -1036,15 +1037,16 @@ ENDPROC(child_rip)
|
|||
* rdi: name, rsi: argv, rdx: envp
|
||||
*
|
||||
* We want to fallback into:
|
||||
* extern long sys_execve(char *name, char **argv,char **envp, struct pt_regs regs)
|
||||
* extern long sys_execve(char *name, char **argv,char **envp, struct pt_regs *regs)
|
||||
*
|
||||
* do_sys_execve asm fallback arguments:
|
||||
* rdi: name, rsi: argv, rdx: envp, fake frame on the stack
|
||||
* rdi: name, rsi: argv, rdx: envp, rcx: fake frame on the stack
|
||||
*/
|
||||
ENTRY(kernel_execve)
|
||||
CFI_STARTPROC
|
||||
FAKE_STACK_FRAME $0
|
||||
SAVE_ALL
|
||||
movq %rsp,%rcx
|
||||
call sys_execve
|
||||
movq %rax, RAX(%rsp)
|
||||
RESTORE_REST
|
||||
|
|
|
@ -606,7 +606,7 @@ ENTRY(_stext)
|
|||
.section ".bss.page_aligned","wa"
|
||||
.align PAGE_SIZE_asm
|
||||
#ifdef CONFIG_X86_PAE
|
||||
ENTRY(swapper_pg_pmd)
|
||||
swapper_pg_pmd:
|
||||
.fill 1024*KPMDS,4,0
|
||||
#else
|
||||
ENTRY(swapper_pg_dir)
|
||||
|
|
|
@ -379,18 +379,24 @@ NEXT_PAGE(level2_ident_pgt)
|
|||
/* Since I easily can, map the first 1G.
|
||||
* Don't set NX because code runs from these pages.
|
||||
*/
|
||||
PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC, PTRS_PER_PMD)
|
||||
PMDS(0, __PAGE_KERNEL_LARGE_EXEC, PTRS_PER_PMD)
|
||||
|
||||
NEXT_PAGE(level2_kernel_pgt)
|
||||
/* 40MB kernel mapping. The kernel code cannot be bigger than that.
|
||||
When you change this change KERNEL_TEXT_SIZE in page.h too. */
|
||||
/* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */
|
||||
PMDS(0x0000000000000000, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL, KERNEL_TEXT_SIZE/PMD_SIZE)
|
||||
/* Module mapping starts here */
|
||||
.fill (PTRS_PER_PMD - (KERNEL_TEXT_SIZE/PMD_SIZE)),8,0
|
||||
/*
|
||||
* 128 MB kernel mapping. We spend a full page on this pagetable
|
||||
* anyway.
|
||||
*
|
||||
* The kernel code+data+bss must not be bigger than that.
|
||||
*
|
||||
* (NOTE: at +128MB starts the module area, see MODULES_VADDR.
|
||||
* If you want to increase this then increase MODULES_VADDR
|
||||
* too.)
|
||||
*/
|
||||
PMDS(0, __PAGE_KERNEL_LARGE_EXEC|_PAGE_GLOBAL,
|
||||
KERNEL_IMAGE_SIZE/PMD_SIZE)
|
||||
|
||||
NEXT_PAGE(level2_spare_pgt)
|
||||
.fill 512,8,0
|
||||
.fill 512, 8, 0
|
||||
|
||||
#undef PMDS
|
||||
#undef NEXT_PAGE
|
||||
|
|
|
@ -368,8 +368,8 @@ static int hpet_clocksource_register(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to setup the HPET timer
|
||||
/**
|
||||
* hpet_enable - Try to setup the HPET timer. Returns 1 on success.
|
||||
*/
|
||||
int __init hpet_enable(void)
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@ static struct files_struct init_files = INIT_FILES;
|
|||
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
|
||||
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
|
||||
struct mm_struct init_mm = INIT_MM(init_mm);
|
||||
EXPORT_UNUSED_SYMBOL(init_mm); /* will be removed in 2.6.26 */
|
||||
|
||||
/*
|
||||
* Initial thread structure.
|
||||
|
|
|
@ -603,11 +603,13 @@ __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef X86_BTS
|
||||
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
||||
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
||||
|
||||
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
||||
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
||||
#endif
|
||||
|
||||
|
||||
if (!test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
|
||||
|
|
|
@ -604,11 +604,13 @@ static inline void __switch_to_xtra(struct task_struct *prev_p,
|
|||
memset(tss->io_bitmap, 0xff, prev->io_bitmap_max);
|
||||
}
|
||||
|
||||
#ifdef X86_BTS
|
||||
if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
|
||||
ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
|
||||
|
||||
if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
|
||||
ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -730,16 +732,16 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
|||
*/
|
||||
asmlinkage
|
||||
long sys_execve(char __user *name, char __user * __user *argv,
|
||||
char __user * __user *envp, struct pt_regs regs)
|
||||
char __user * __user *envp, struct pt_regs *regs)
|
||||
{
|
||||
long error;
|
||||
char * filename;
|
||||
|
||||
filename = getname(name);
|
||||
error = PTR_ERR(filename);
|
||||
if (IS_ERR(filename))
|
||||
if (IS_ERR(filename))
|
||||
return error;
|
||||
error = do_execve(filename, argv, envp, ®s);
|
||||
error = do_execve(filename, argv, envp, regs);
|
||||
putname(filename);
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -544,6 +544,8 @@ static int ptrace_set_debugreg(struct task_struct *child,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef X86_BTS
|
||||
|
||||
static int ptrace_bts_get_size(struct task_struct *child)
|
||||
{
|
||||
if (!child->thread.ds_area_msr)
|
||||
|
@ -826,6 +828,7 @@ void ptrace_bts_take_timestamp(struct task_struct *tsk,
|
|||
|
||||
ptrace_bts_write_record(tsk, &rec);
|
||||
}
|
||||
#endif /* X86_BTS */
|
||||
|
||||
/*
|
||||
* Called by kernel/ptrace.c when detaching..
|
||||
|
@ -839,7 +842,9 @@ void ptrace_disable(struct task_struct *child)
|
|||
clear_tsk_thread_flag(child, TIF_SYSCALL_EMU);
|
||||
#endif
|
||||
if (child->thread.ds_area_msr) {
|
||||
#ifdef X86_BTS
|
||||
ptrace_bts_realloc(child, 0, 0);
|
||||
#endif
|
||||
child->thread.debugctlmsr &= ~ds_debugctl_mask();
|
||||
if (!child->thread.debugctlmsr)
|
||||
clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
|
||||
|
@ -961,6 +966,10 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
break;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These bits need more cooking - not enabled yet:
|
||||
*/
|
||||
#ifdef X86_BTS
|
||||
case PTRACE_BTS_CONFIG:
|
||||
ret = ptrace_bts_config
|
||||
(child, data, (struct ptrace_bts_config __user *)addr);
|
||||
|
@ -988,6 +997,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
ret = ptrace_bts_drain
|
||||
(child, data, (struct bts_struct __user *) addr);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
ret = ptrace_request(child, request, addr, data);
|
||||
|
@ -1226,12 +1236,14 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
|
|||
case PTRACE_SETOPTIONS:
|
||||
case PTRACE_SET_THREAD_AREA:
|
||||
case PTRACE_GET_THREAD_AREA:
|
||||
#ifdef X86_BTS
|
||||
case PTRACE_BTS_CONFIG:
|
||||
case PTRACE_BTS_STATUS:
|
||||
case PTRACE_BTS_SIZE:
|
||||
case PTRACE_BTS_GET:
|
||||
case PTRACE_BTS_CLEAR:
|
||||
case PTRACE_BTS_DRAIN:
|
||||
#endif
|
||||
return sys_ptrace(request, pid, addr, data);
|
||||
|
||||
default:
|
||||
|
|
|
@ -1021,7 +1021,7 @@ void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
|||
|
||||
/* Clear all flags overriden by options */
|
||||
for (i = 0; i < NCAPINTS; i++)
|
||||
c->x86_capability[i] ^= cleared_cpu_caps[i];
|
||||
c->x86_capability[i] &= ~cleared_cpu_caps[i];
|
||||
|
||||
#ifdef CONFIG_X86_MCE
|
||||
mcheck_init(c);
|
||||
|
|
|
@ -554,10 +554,10 @@ static int __cpuinit do_boot_cpu(int cpu, int apicid)
|
|||
int timeout;
|
||||
unsigned long start_rip;
|
||||
struct create_idle c_idle = {
|
||||
.work = __WORK_INITIALIZER(c_idle.work, do_fork_idle),
|
||||
.cpu = cpu,
|
||||
.done = COMPLETION_INITIALIZER_ONSTACK(c_idle.done),
|
||||
};
|
||||
INIT_WORK(&c_idle.work, do_fork_idle);
|
||||
|
||||
/* allocate memory for gdts of secondary cpus. Hotplug is considered */
|
||||
if (!cpu_gdt_descr[cpu].address &&
|
||||
|
|
|
@ -25,6 +25,8 @@ static int save_stack_stack(void *data, char *name)
|
|||
static void save_stack_address(void *data, unsigned long addr, int reliable)
|
||||
{
|
||||
struct stack_trace *trace = data;
|
||||
if (!reliable)
|
||||
return;
|
||||
if (trace->skip > 0) {
|
||||
trace->skip--;
|
||||
return;
|
||||
|
@ -37,6 +39,8 @@ static void
|
|||
save_stack_address_nosched(void *data, unsigned long addr, int reliable)
|
||||
{
|
||||
struct stack_trace *trace = (struct stack_trace *)data;
|
||||
if (!reliable)
|
||||
return;
|
||||
if (in_sched_functions(addr))
|
||||
return;
|
||||
if (trace->skip > 0) {
|
||||
|
|
|
@ -91,7 +91,9 @@ int do_set_thread_area(struct task_struct *p, int idx,
|
|||
|
||||
asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
return do_set_thread_area(current, -1, u_info, 1);
|
||||
int ret = do_set_thread_area(current, -1, u_info, 1);
|
||||
prevent_tail_call(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
@ -139,7 +141,9 @@ int do_get_thread_area(struct task_struct *p, int idx,
|
|||
|
||||
asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
return do_get_thread_area(current, -1, u_info);
|
||||
int ret = do_get_thread_area(current, -1, u_info);
|
||||
prevent_tail_call(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int regset_tls_active(struct task_struct *target,
|
||||
|
|
|
@ -28,7 +28,8 @@ EXPORT_SYMBOL_GPL(tsc_khz);
|
|||
static int __init tsc_setup(char *str)
|
||||
{
|
||||
printk(KERN_WARNING "notsc: Kernel compiled with CONFIG_X86_TSC, "
|
||||
"cannot disable TSC.\n");
|
||||
"cannot disable TSC completely.\n");
|
||||
mark_tsc_unstable("user disabled TSC");
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
|
|
|
@ -44,11 +44,6 @@
|
|||
|
||||
#define __vsyscall(nr) __attribute__ ((unused,__section__(".vsyscall_" #nr)))
|
||||
#define __syscall_clobber "r11","cx","memory"
|
||||
#define __pa_vsymbol(x) \
|
||||
({unsigned long v; \
|
||||
extern char __vsyscall_0; \
|
||||
asm("" : "=r" (v) : "0" (x)); \
|
||||
((v - VSYSCALL_START) + __pa_symbol(&__vsyscall_0)); })
|
||||
|
||||
/*
|
||||
* vsyscall_gtod_data contains data that is :
|
||||
|
@ -102,7 +97,7 @@ static __always_inline void do_get_tz(struct timezone * tz)
|
|||
static __always_inline int gettimeofday(struct timeval *tv, struct timezone *tz)
|
||||
{
|
||||
int ret;
|
||||
asm volatile("vsysc2: syscall"
|
||||
asm volatile("syscall"
|
||||
: "=a" (ret)
|
||||
: "0" (__NR_gettimeofday),"D" (tv),"S" (tz)
|
||||
: __syscall_clobber );
|
||||
|
@ -112,7 +107,7 @@ static __always_inline int gettimeofday(struct timeval *tv, struct timezone *tz)
|
|||
static __always_inline long time_syscall(long *t)
|
||||
{
|
||||
long secs;
|
||||
asm volatile("vsysc1: syscall"
|
||||
asm volatile("syscall"
|
||||
: "=a" (secs)
|
||||
: "0" (__NR_time),"D" (t) : __syscall_clobber);
|
||||
return secs;
|
||||
|
@ -228,42 +223,11 @@ long __vsyscall(3) venosys_1(void)
|
|||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
|
||||
#define SYSCALL 0x050f
|
||||
#define NOP2 0x9090
|
||||
|
||||
/*
|
||||
* NOP out syscall in vsyscall page when not needed.
|
||||
*/
|
||||
static int vsyscall_sysctl_change(ctl_table *ctl, int write, struct file * filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
static int
|
||||
vsyscall_sysctl_change(ctl_table *ctl, int write, struct file * filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
extern u16 vsysc1, vsysc2;
|
||||
u16 __iomem *map1;
|
||||
u16 __iomem *map2;
|
||||
int ret = proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
|
||||
if (!write)
|
||||
return ret;
|
||||
/* gcc has some trouble with __va(__pa()), so just do it this
|
||||
way. */
|
||||
map1 = ioremap(__pa_vsymbol(&vsysc1), 2);
|
||||
if (!map1)
|
||||
return -ENOMEM;
|
||||
map2 = ioremap(__pa_vsymbol(&vsysc2), 2);
|
||||
if (!map2) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
if (!vsyscall_gtod_data.sysctl_enabled) {
|
||||
writew(SYSCALL, map1);
|
||||
writew(SYSCALL, map2);
|
||||
} else {
|
||||
writew(NOP2, map1);
|
||||
writew(NOP2, map2);
|
||||
}
|
||||
iounmap(map2);
|
||||
out:
|
||||
iounmap(map1);
|
||||
return ret;
|
||||
return proc_dointvec(ctl, write, filp, buffer, lenp, ppos);
|
||||
}
|
||||
|
||||
static ctl_table kernel_table2[] = {
|
||||
|
@ -279,7 +243,6 @@ static ctl_table kernel_root_table2[] = {
|
|||
.child = kernel_table2 },
|
||||
{}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* Assume __initcall executes before all user space. Hopefully kmod
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue