mirror of https://gitee.com/openkylin/linux.git
Merge branch 'sh/stable-updates'
This commit is contained in:
commit
0c54de146e
|
@ -48,11 +48,11 @@ for LILO parameters for doing this:
|
|||
This configures the first found 3c509 card for IRQ 10, base I/O 0x310, and
|
||||
transceiver type 3 (10base2). The flag "0x3c509" must be set to avoid conflicts
|
||||
with other card types when overriding the I/O address. When the driver is
|
||||
loaded as a module, only the IRQ and transceiver setting may be overridden.
|
||||
For example, setting two cards to 10base2/IRQ10 and AUI/IRQ11 is done by using
|
||||
the xcvr and irq module options:
|
||||
loaded as a module, only the IRQ may be overridden. For example,
|
||||
setting two cards to IRQ10 and IRQ11 is done by using the irq module
|
||||
option:
|
||||
|
||||
options 3c509 xcvr=3,1 irq=10,11
|
||||
options 3c509 irq=10,11
|
||||
|
||||
|
||||
(2) Full-duplex mode
|
||||
|
@ -77,6 +77,8 @@ operation.
|
|||
itself full-duplex capable. This is almost certainly one of two things: a full-
|
||||
duplex-capable Ethernet switch (*not* a hub), or a full-duplex-capable NIC on
|
||||
another system that's connected directly to the 3c509B via a crossover cable.
|
||||
|
||||
Full-duplex mode can be enabled using 'ethtool'.
|
||||
|
||||
/////Extremely important caution concerning full-duplex mode/////
|
||||
Understand that the 3c509B's hardware's full-duplex support is much more
|
||||
|
@ -113,6 +115,8 @@ This insured that merely upgrading the driver from an earlier version would
|
|||
never automatically enable full-duplex mode in an existing installation;
|
||||
it must always be explicitly enabled via one of these code in order to be
|
||||
activated.
|
||||
|
||||
The transceiver type can be changed using 'ethtool'.
|
||||
|
||||
|
||||
(4a) Interpretation of error messages and common problems
|
||||
|
|
20
MAINTAINERS
20
MAINTAINERS
|
@ -410,9 +410,8 @@ F: drivers/i2c/busses/i2c-ali1563.c
|
|||
|
||||
ALPHA PORT
|
||||
M: Richard Henderson <rth@twiddle.net>
|
||||
S: Odd Fixes for 2.4; Maintained for 2.6.
|
||||
M: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
|
||||
S: Maintained for 2.4; PCI support for 2.6.
|
||||
M: Matt Turner <mattst88@gmail.com>
|
||||
L: linux-alpha@vger.kernel.org
|
||||
F: arch/alpha/
|
||||
|
||||
|
@ -3940,29 +3939,20 @@ S: Maintained
|
|||
F: sound/soc/omap/
|
||||
|
||||
OMAP FRAMEBUFFER SUPPORT
|
||||
M: Imre Deak <imre.deak@nokia.com>
|
||||
M: Tomi Valkeinen <tomi.valkeinen@nokia.com>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
L: linux-omap@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/video/omap/
|
||||
|
||||
OMAP DISPLAY SUBSYSTEM SUPPORT (DSS2)
|
||||
OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2)
|
||||
M: Tomi Valkeinen <tomi.valkeinen@nokia.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
L: linux-fbdev@vger.kernel.org (moderated for non-subscribers)
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/video/omap2/dss/
|
||||
F: drivers/video/omap2/vrfb.c
|
||||
F: drivers/video/omap2/vram.c
|
||||
F: drivers/video/omap2/
|
||||
F: Documentation/arm/OMAP/DSS
|
||||
|
||||
OMAP FRAMEBUFFER SUPPORT (FOR DSS2)
|
||||
M: Tomi Valkeinen <tomi.valkeinen@nokia.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
L: linux-fbdev@vger.kernel.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: drivers/video/omap2/omapfb/
|
||||
|
||||
OMAP MMC SUPPORT
|
||||
M: Jarkko Lavinen <jarkko.lavinen@nokia.com>
|
||||
L: linux-omap@vger.kernel.org
|
||||
|
|
5
Makefile
5
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 33
|
||||
EXTRAVERSION = -rc3
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Man-Eating Seals of Antiquity
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -18,10 +18,9 @@ MAKEFLAGS += -rR --no-print-directory
|
|||
|
||||
# Avoid funny character set dependencies
|
||||
unexport LC_ALL
|
||||
LC_CTYPE=C
|
||||
LC_COLLATE=C
|
||||
LC_NUMERIC=C
|
||||
export LC_CTYPE LC_COLLATE LC_NUMERIC
|
||||
export LC_COLLATE LC_NUMERIC
|
||||
|
||||
# We are using a recursive build, so we need to do a little thinking
|
||||
# to get the ordering right.
|
||||
|
|
|
@ -28,6 +28,9 @@ static const struct cpumask *cpumask_of_node(int node)
|
|||
{
|
||||
int cpu;
|
||||
|
||||
if (node == -1)
|
||||
return cpu_all_mask;
|
||||
|
||||
cpumask_clear(&node_to_cpumask_map[node]);
|
||||
|
||||
for_each_online_cpu(cpu) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.32-rc5
|
||||
# Sat Oct 17 23:32:24 2009
|
||||
# Linux kernel version: 2.6.33-rc2
|
||||
# Wed Jan 6 00:01:36 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
|
@ -46,6 +46,7 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
#
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_TINY_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
|
@ -119,14 +120,41 @@ CONFIG_BLOCK=y
|
|||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
# CONFIG_IOSCHED_AS is not set
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
# CONFIG_DEFAULT_AS is not set
|
||||
CONFIG_DEFAULT_DEADLINE=y
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="deadline"
|
||||
# CONFIG_INLINE_SPIN_TRYLOCK is not set
|
||||
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_INLINE_READ_TRYLOCK is not set
|
||||
# CONFIG_INLINE_READ_LOCK is not set
|
||||
# CONFIG_INLINE_READ_LOCK_BH is not set
|
||||
# CONFIG_INLINE_READ_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_INLINE_WRITE_TRYLOCK is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_BH is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
|
||||
# CONFIG_FREEZER is not set
|
||||
|
||||
#
|
||||
|
@ -155,6 +183,7 @@ CONFIG_MMU=y
|
|||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_DOVE is not set
|
||||
# CONFIG_ARCH_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
|
@ -177,6 +206,7 @@ CONFIG_ARCH_U300=y
|
|||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
|
||||
#
|
||||
# ST-Ericsson AB U300/U330/U335/U365 Platform
|
||||
|
@ -265,12 +295,10 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=999999
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
# CONFIG_KSM is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
@ -499,14 +527,21 @@ CONFIG_MTD_NAND_IDS=y
|
|||
CONFIG_BLK_DEV=y
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
|
||||
#
|
||||
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
|
||||
#
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_AD525X_DPOT is not set
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_ISL29003 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_TI_DAC7512 is not set
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
|
@ -517,6 +552,7 @@ CONFIG_MISC_DEVICES=y
|
|||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_EEPROM_MAX6875 is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_IWMC3200TOP is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
|
@ -539,6 +575,7 @@ CONFIG_HAVE_IDE=y
|
|||
CONFIG_INPUT=y
|
||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||
# CONFIG_INPUT_POLLDEV is not set
|
||||
# CONFIG_INPUT_SPARSEKMAP is not set
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
|
@ -645,7 +682,6 @@ CONFIG_I2C_STU300=y
|
|||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
|
@ -661,6 +697,8 @@ CONFIG_SPI_MASTER=y
|
|||
# CONFIG_SPI_BITBANG is not set
|
||||
# CONFIG_SPI_GPIO is not set
|
||||
CONFIG_SPI_PL022=y
|
||||
# CONFIG_SPI_XILINX is not set
|
||||
# CONFIG_SPI_DESIGNWARE is not set
|
||||
|
||||
#
|
||||
# SPI Protocol Masters
|
||||
|
@ -708,6 +746,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_T7L66XB is not set
|
||||
# CONFIG_MFD_TC6387XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
|
@ -716,6 +755,8 @@ CONFIG_SSB_POSSIBLE=y
|
|||
CONFIG_AB3100_CORE=y
|
||||
CONFIG_AB3100_OTP=y
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
# CONFIG_MFD_88PM8607 is not set
|
||||
# CONFIG_AB4500_CORE is not set
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_DEBUG is not set
|
||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||
|
@ -723,6 +764,7 @@ CONFIG_REGULATOR=y
|
|||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_BQ24022 is not set
|
||||
# CONFIG_REGULATOR_MAX1586 is not set
|
||||
# CONFIG_REGULATOR_MAX8660 is not set
|
||||
# CONFIG_REGULATOR_LP3971 is not set
|
||||
CONFIG_REGULATOR_AB3100=y
|
||||
# CONFIG_REGULATOR_TPS65023 is not set
|
||||
|
@ -840,7 +882,9 @@ CONFIG_LEDS_CLASS=y
|
|||
# CONFIG_LEDS_LP3944 is not set
|
||||
# CONFIG_LEDS_PCA955X is not set
|
||||
# CONFIG_LEDS_DAC124S085 is not set
|
||||
# CONFIG_LEDS_REGULATOR is not set
|
||||
# CONFIG_LEDS_BD2802 is not set
|
||||
# CONFIG_LEDS_LT3593 is not set
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
|
@ -882,6 +926,7 @@ CONFIG_RTC_INTF_DEV=y
|
|||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||
# CONFIG_RTC_DRV_M41T80 is not set
|
||||
# CONFIG_RTC_DRV_BQ32K is not set
|
||||
# CONFIG_RTC_DRV_S35390A is not set
|
||||
# CONFIG_RTC_DRV_FM3130 is not set
|
||||
# CONFIG_RTC_DRV_RX8581 is not set
|
||||
|
@ -911,7 +956,9 @@ CONFIG_RTC_INTF_DEV=y
|
|||
# CONFIG_RTC_DRV_M48T86 is not set
|
||||
# CONFIG_RTC_DRV_M48T35 is not set
|
||||
# CONFIG_RTC_DRV_M48T59 is not set
|
||||
# CONFIG_RTC_DRV_MSM6242 is not set
|
||||
# CONFIG_RTC_DRV_BQ4802 is not set
|
||||
# CONFIG_RTC_DRV_RP5C01 is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
CONFIG_RTC_DRV_AB3100=y
|
||||
|
||||
|
@ -926,6 +973,15 @@ CONFIG_DMADEVICES=y
|
|||
#
|
||||
# DMA Devices
|
||||
#
|
||||
CONFIG_COH901318=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
# CONFIG_NET_DMA is not set
|
||||
# CONFIG_ASYNC_TX_DMA is not set
|
||||
# CONFIG_DMATEST is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
|
@ -1018,7 +1074,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
|||
CONFIG_MSDOS_PARTITION=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
# CONFIG_NLS_CODEPAGE_437 is not set
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
|
@ -1135,6 +1191,7 @@ CONFIG_ARM_UNWIND=y
|
|||
# CONFIG_DEBUG_ERRORS is not set
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
# CONFIG_OC_ETM is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
|
@ -1142,7 +1199,11 @@ CONFIG_ARM_UNWIND=y
|
|||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
|
||||
# CONFIG_DEFAULT_SECURITY_SMACK is not set
|
||||
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
|
||||
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||
CONFIG_DEFAULT_SECURITY=""
|
||||
# CONFIG_CRYPTO is not set
|
||||
# CONFIG_BINARY_PRINTF is not set
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#define __ASM_ARM_CPU_H
|
||||
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
struct cpuinfo_arm {
|
||||
struct cpu cpu;
|
||||
|
|
|
@ -138,12 +138,12 @@ extern int get_dma_residue(unsigned int chan);
|
|||
#define NO_DMA 255
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_ISA_DMA_API */
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
extern int isa_dma_bridge_buggy;
|
||||
#else
|
||||
#define isa_dma_bridge_buggy (0)
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_ISA_DMA_API */
|
||||
|
||||
#endif /* __ASM_ARM_DMA_H */
|
||||
|
|
|
@ -97,9 +97,15 @@
|
|||
* stack during a system call. Note that sizeof(struct pt_regs)
|
||||
* has to be a multiple of 8.
|
||||
*/
|
||||
#ifndef __KERNEL__
|
||||
struct pt_regs {
|
||||
long uregs[18];
|
||||
};
|
||||
#else /* __KERNEL__ */
|
||||
struct pt_regs {
|
||||
unsigned long uregs[18];
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define ARM_cpsr uregs[16]
|
||||
#define ARM_pc uregs[15]
|
||||
|
|
|
@ -391,6 +391,7 @@
|
|||
#define __NR_pwritev (__NR_SYSCALL_BASE+362)
|
||||
#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
|
||||
#define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
|
||||
#define __NR_recvmmsg (__NR_SYSCALL_BASE+365)
|
||||
|
||||
/*
|
||||
* The following SWIs are ARM private.
|
||||
|
|
|
@ -957,9 +957,7 @@ kuser_cmpxchg_fixup:
|
|||
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||
#endif
|
||||
smp_dmb
|
||||
1: ldrex r3, [r2]
|
||||
subs r3, r3, r0
|
||||
strexeq r3, r1, [r2]
|
||||
|
|
|
@ -212,7 +212,8 @@ void __show_regs(struct pt_regs *regs)
|
|||
char buf[64];
|
||||
|
||||
printk("CPU: %d %s (%s %.*s)\n",
|
||||
smp_processor_id(), print_tainted(), init_utsname()->release,
|
||||
raw_smp_processor_id(), print_tainted(),
|
||||
init_utsname()->release,
|
||||
(int)strcspn(init_utsname()->version, " "),
|
||||
init_utsname()->version);
|
||||
print_symbol("PC is at %s\n", instruction_pointer(regs));
|
||||
|
|
|
@ -29,6 +29,7 @@ enum davinci_matrix_types {
|
|||
};
|
||||
|
||||
struct davinci_ks_platform_data {
|
||||
int (*device_enable)(struct device *dev);
|
||||
unsigned short *keymap;
|
||||
u32 keymapsize;
|
||||
u8 rep:1;
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include <mach/hardware.h>
|
||||
#include <mach/clocks.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
struct module;
|
||||
|
||||
|
|
|
@ -250,20 +250,17 @@
|
|||
|
||||
#define cpu_is_pxa930() \
|
||||
({ \
|
||||
unsigned int id = read_cpuid(CPUID_ID); \
|
||||
__cpu_is_pxa930(id); \
|
||||
__cpu_is_pxa930(read_cpuid_id()); \
|
||||
})
|
||||
|
||||
#define cpu_is_pxa935() \
|
||||
({ \
|
||||
unsigned int id = read_cpuid(CPUID_ID); \
|
||||
__cpu_is_pxa935(id); \
|
||||
__cpu_is_pxa935(read_cpuid_id()); \
|
||||
})
|
||||
|
||||
#define cpu_is_pxa950() \
|
||||
({ \
|
||||
unsigned int id = read_cpuid(CPUID_ID); \
|
||||
__cpu_is_pxa950(id); \
|
||||
__cpu_is_pxa950(read_cpuid_id()); \
|
||||
})
|
||||
|
||||
|
||||
|
|
|
@ -381,7 +381,7 @@ static int magician_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int magician_backlight_notify(int brightness)
|
||||
static int magician_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(EGPIO_MAGICIAN_BL_POWER, brightness);
|
||||
if (brightness >= 200) {
|
||||
|
|
|
@ -270,7 +270,7 @@ static int palmld_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmld_backlight_notify(int brightness)
|
||||
static int palmld_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMLD_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMLD_LCD_POWER, brightness);
|
||||
|
|
|
@ -209,7 +209,7 @@ static int palmt5_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmt5_backlight_notify(int brightness)
|
||||
static int palmt5_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMT5_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMT5_LCD_POWER, brightness);
|
||||
|
|
|
@ -185,7 +185,7 @@ static int palmtc_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmtc_backlight_notify(int brightness)
|
||||
static int palmtc_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
/* backlight is on when GPIO16 AF0 is high */
|
||||
gpio_set_value(GPIO_NR_PALMTC_BL_POWER, brightness);
|
||||
|
|
|
@ -181,7 +181,7 @@ static int palmte2_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmte2_backlight_notify(int brightness)
|
||||
static int palmte2_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMTE2_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMTE2_LCD_POWER, brightness);
|
||||
|
|
|
@ -375,7 +375,7 @@ static int treo_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int treo_backlight_notify(int brightness)
|
||||
static int treo_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_TREO_BL_POWER, brightness);
|
||||
return TREO_MAX_INTENSITY - brightness;
|
||||
|
|
|
@ -269,7 +269,7 @@ static int palmtx_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmtx_backlight_notify(int brightness)
|
||||
static int palmtx_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMTX_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMTX_LCD_POWER, brightness);
|
||||
|
|
|
@ -196,7 +196,7 @@ static int palmz72_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int palmz72_backlight_notify(int brightness)
|
||||
static int palmz72_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMZ72_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMZ72_LCD_POWER, brightness);
|
||||
|
|
|
@ -389,13 +389,13 @@ static struct gpio_keys_button spitz_gpio_keys[] = {
|
|||
.type = EV_SW,
|
||||
.code = 0,
|
||||
.gpio = SPITZ_GPIO_SWA,
|
||||
.desc = "Display Down",
|
||||
.desc = "Display Down",
|
||||
},
|
||||
{
|
||||
.type = EV_SW,
|
||||
.code = 1,
|
||||
.gpio = SPITZ_GPIO_SWB,
|
||||
.desc = "Lid Closed",
|
||||
.desc = "Lid Closed",
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -379,7 +379,7 @@ static int viper_backlight_init(struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int viper_backlight_notify(int brightness)
|
||||
static int viper_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(VIPER_LCD_EN_GPIO, !!brightness);
|
||||
gpio_set_value(VIPER_BCKLIGHT_EN_GPIO, !!brightness);
|
||||
|
|
|
@ -74,8 +74,8 @@
|
|||
#define REALVIEW_PB1176_L220_BASE 0x10110000 /* L220 registers */
|
||||
|
||||
/*
|
||||
* Control register SYS_RESETCTL is set to 1 to force a soft reset
|
||||
* Control register SYS_RESETCTL Bit 8 is set to 1 to force a soft reset
|
||||
*/
|
||||
#define REALVIEW_PB1176_SYS_LOCKVAL_RSTCTL 0x0100
|
||||
#define REALVIEW_PB1176_SYS_SOFT_RESET 0x0100
|
||||
|
||||
#endif /* __ASM_ARCH_BOARD_PB1176_H */
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
* SYS_CLD, SYS_BOOTCS
|
||||
*/
|
||||
#define REALVIEW_SYS_LOCK_LOCKED (1 << 16)
|
||||
#define REALVIEW_SYS_LOCKVAL_MASK 0xA05F /* Enable write access */
|
||||
#define REALVIEW_SYS_LOCK_VAL 0xA05F /* Enable write access */
|
||||
|
||||
/*
|
||||
* REALVIEW_SYS_FLASH
|
||||
|
|
|
@ -381,6 +381,20 @@ static struct sys_timer realview_eb_timer = {
|
|||
.init = realview_eb_timer_init,
|
||||
};
|
||||
|
||||
static void realview_eb_reset(char mode)
|
||||
{
|
||||
void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
|
||||
void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
|
||||
|
||||
/*
|
||||
* To reset, we hit the on-board reset register
|
||||
* in the system FPGA
|
||||
*/
|
||||
__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
|
||||
if (core_tile_eb11mp())
|
||||
__raw_writel(0x0008, reset_ctrl);
|
||||
}
|
||||
|
||||
static void __init realview_eb_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -408,6 +422,7 @@ static void __init realview_eb_init(void)
|
|||
#ifdef CONFIG_LEDS
|
||||
leds_event = realview_leds_event;
|
||||
#endif
|
||||
realview_reset = realview_eb_reset;
|
||||
}
|
||||
|
||||
MACHINE_START(REALVIEW_EB, "ARM-RealView EB")
|
||||
|
|
|
@ -292,12 +292,10 @@ static struct sys_timer realview_pb1176_timer = {
|
|||
|
||||
static void realview_pb1176_reset(char mode)
|
||||
{
|
||||
void __iomem *hdr_ctrl = __io_address(REALVIEW_SYS_BASE) +
|
||||
REALVIEW_SYS_RESETCTL_OFFSET;
|
||||
void __iomem *rst_hdr_ctrl = __io_address(REALVIEW_SYS_BASE) +
|
||||
REALVIEW_SYS_LOCK_OFFSET;
|
||||
__raw_writel(REALVIEW_SYS_LOCKVAL_MASK, rst_hdr_ctrl);
|
||||
__raw_writel(REALVIEW_PB1176_SYS_LOCKVAL_RSTCTL, hdr_ctrl);
|
||||
void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
|
||||
void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
|
||||
__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
|
||||
__raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl);
|
||||
}
|
||||
|
||||
static void realview_pb1176_fixup(struct machine_desc *mdesc,
|
||||
|
|
|
@ -301,17 +301,16 @@ static struct sys_timer realview_pb11mp_timer = {
|
|||
|
||||
static void realview_pb11mp_reset(char mode)
|
||||
{
|
||||
void __iomem *hdr_ctrl = __io_address(REALVIEW_SYS_BASE) +
|
||||
REALVIEW_SYS_RESETCTL_OFFSET;
|
||||
unsigned int val;
|
||||
void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
|
||||
void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
|
||||
|
||||
/*
|
||||
* To reset, we hit the on-board reset register
|
||||
* in the system FPGA
|
||||
*/
|
||||
val = __raw_readl(hdr_ctrl);
|
||||
val |= REALVIEW_PB11MP_SYS_CTRL_RESET_CONFIGCLR;
|
||||
__raw_writel(val, hdr_ctrl);
|
||||
__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
|
||||
__raw_writel(0x0000, reset_ctrl);
|
||||
__raw_writel(0x0004, reset_ctrl);
|
||||
}
|
||||
|
||||
static void __init realview_pb11mp_init(void)
|
||||
|
|
|
@ -272,6 +272,20 @@ static struct sys_timer realview_pba8_timer = {
|
|||
.init = realview_pba8_timer_init,
|
||||
};
|
||||
|
||||
static void realview_pba8_reset(char mode)
|
||||
{
|
||||
void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
|
||||
void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
|
||||
|
||||
/*
|
||||
* To reset, we hit the on-board reset register
|
||||
* in the system FPGA
|
||||
*/
|
||||
__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
|
||||
__raw_writel(0x0000, reset_ctrl);
|
||||
__raw_writel(0x0004, reset_ctrl);
|
||||
}
|
||||
|
||||
static void __init realview_pba8_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -291,6 +305,7 @@ static void __init realview_pba8_init(void)
|
|||
#ifdef CONFIG_LEDS
|
||||
leds_event = realview_leds_event;
|
||||
#endif
|
||||
realview_reset = realview_pba8_reset;
|
||||
}
|
||||
|
||||
MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8")
|
||||
|
|
|
@ -324,6 +324,20 @@ static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags,
|
|||
#endif
|
||||
}
|
||||
|
||||
static void realview_pbx_reset(char mode)
|
||||
{
|
||||
void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
|
||||
void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
|
||||
|
||||
/*
|
||||
* To reset, we hit the on-board reset register
|
||||
* in the system FPGA
|
||||
*/
|
||||
__raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
|
||||
__raw_writel(0x0000, reset_ctrl);
|
||||
__raw_writel(0x0004, reset_ctrl);
|
||||
}
|
||||
|
||||
static void __init realview_pbx_init(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -358,6 +372,7 @@ static void __init realview_pbx_init(void)
|
|||
#ifdef CONFIG_LEDS
|
||||
leds_event = realview_leds_event;
|
||||
#endif
|
||||
realview_reset = realview_pbx_reset;
|
||||
}
|
||||
|
||||
MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX")
|
||||
|
|
|
@ -288,7 +288,7 @@ static struct s3c2410_platform_nand mini2440_nand_info __initdata = {
|
|||
|
||||
/* DM9000AEP 10/100 ethernet controller */
|
||||
|
||||
static struct resource mini2440_dm9k_resource[] __initdata = {
|
||||
static struct resource mini2440_dm9k_resource[] = {
|
||||
[0] = {
|
||||
.start = MACH_MINI2440_DM9K_BASE,
|
||||
.end = MACH_MINI2440_DM9K_BASE + 3,
|
||||
|
@ -310,11 +310,11 @@ static struct resource mini2440_dm9k_resource[] __initdata = {
|
|||
* The DM9000 has no eeprom, and it's MAC address is set by
|
||||
* the bootloader before starting the kernel.
|
||||
*/
|
||||
static struct dm9000_plat_data mini2440_dm9k_pdata __initdata = {
|
||||
static struct dm9000_plat_data mini2440_dm9k_pdata = {
|
||||
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_device_eth __initdata = {
|
||||
static struct platform_device mini2440_device_eth = {
|
||||
.name = "dm9000",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(mini2440_dm9k_resource),
|
||||
|
@ -341,7 +341,7 @@ static struct platform_device mini2440_device_eth __initdata = {
|
|||
* | | +----+ +----+
|
||||
* .....
|
||||
*/
|
||||
static struct gpio_keys_button mini2440_buttons[] __initdata = {
|
||||
static struct gpio_keys_button mini2440_buttons[] = {
|
||||
{
|
||||
.gpio = S3C2410_GPG(0), /* K1 */
|
||||
.code = KEY_F1,
|
||||
|
@ -384,12 +384,12 @@ static struct gpio_keys_button mini2440_buttons[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data mini2440_button_data __initdata = {
|
||||
static struct gpio_keys_platform_data mini2440_button_data = {
|
||||
.buttons = mini2440_buttons,
|
||||
.nbuttons = ARRAY_SIZE(mini2440_buttons),
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_button_device __initdata = {
|
||||
static struct platform_device mini2440_button_device = {
|
||||
.name = "gpio-keys",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
|
@ -399,41 +399,41 @@ static struct platform_device mini2440_button_device __initdata = {
|
|||
|
||||
/* LEDS */
|
||||
|
||||
static struct s3c24xx_led_platdata mini2440_led1_pdata __initdata = {
|
||||
static struct s3c24xx_led_platdata mini2440_led1_pdata = {
|
||||
.name = "led1",
|
||||
.gpio = S3C2410_GPB(5),
|
||||
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
|
||||
.def_trigger = "heartbeat",
|
||||
};
|
||||
|
||||
static struct s3c24xx_led_platdata mini2440_led2_pdata __initdata = {
|
||||
static struct s3c24xx_led_platdata mini2440_led2_pdata = {
|
||||
.name = "led2",
|
||||
.gpio = S3C2410_GPB(6),
|
||||
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
|
||||
.def_trigger = "nand-disk",
|
||||
};
|
||||
|
||||
static struct s3c24xx_led_platdata mini2440_led3_pdata __initdata = {
|
||||
static struct s3c24xx_led_platdata mini2440_led3_pdata = {
|
||||
.name = "led3",
|
||||
.gpio = S3C2410_GPB(7),
|
||||
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
|
||||
.def_trigger = "mmc0",
|
||||
};
|
||||
|
||||
static struct s3c24xx_led_platdata mini2440_led4_pdata __initdata = {
|
||||
static struct s3c24xx_led_platdata mini2440_led4_pdata = {
|
||||
.name = "led4",
|
||||
.gpio = S3C2410_GPB(8),
|
||||
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
|
||||
.def_trigger = "",
|
||||
};
|
||||
|
||||
static struct s3c24xx_led_platdata mini2440_led_backlight_pdata __initdata = {
|
||||
static struct s3c24xx_led_platdata mini2440_led_backlight_pdata = {
|
||||
.name = "backlight",
|
||||
.gpio = S3C2410_GPG(4),
|
||||
.def_trigger = "backlight",
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_led1 __initdata = {
|
||||
static struct platform_device mini2440_led1 = {
|
||||
.name = "s3c24xx_led",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
|
@ -441,7 +441,7 @@ static struct platform_device mini2440_led1 __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_led2 __initdata = {
|
||||
static struct platform_device mini2440_led2 = {
|
||||
.name = "s3c24xx_led",
|
||||
.id = 2,
|
||||
.dev = {
|
||||
|
@ -449,7 +449,7 @@ static struct platform_device mini2440_led2 __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_led3 __initdata = {
|
||||
static struct platform_device mini2440_led3 = {
|
||||
.name = "s3c24xx_led",
|
||||
.id = 3,
|
||||
.dev = {
|
||||
|
@ -457,7 +457,7 @@ static struct platform_device mini2440_led3 __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_led4 __initdata = {
|
||||
static struct platform_device mini2440_led4 = {
|
||||
.name = "s3c24xx_led",
|
||||
.id = 4,
|
||||
.dev = {
|
||||
|
@ -465,7 +465,7 @@ static struct platform_device mini2440_led4 __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_led_backlight __initdata = {
|
||||
static struct platform_device mini2440_led_backlight = {
|
||||
.name = "s3c24xx_led",
|
||||
.id = 5,
|
||||
.dev = {
|
||||
|
@ -475,14 +475,14 @@ static struct platform_device mini2440_led_backlight __initdata = {
|
|||
|
||||
/* AUDIO */
|
||||
|
||||
static struct s3c24xx_uda134x_platform_data mini2440_audio_pins __initdata = {
|
||||
static struct s3c24xx_uda134x_platform_data mini2440_audio_pins = {
|
||||
.l3_clk = S3C2410_GPB(4),
|
||||
.l3_mode = S3C2410_GPB(2),
|
||||
.l3_data = S3C2410_GPB(3),
|
||||
.model = UDA134X_UDA1341
|
||||
};
|
||||
|
||||
static struct platform_device mini2440_audio __initdata = {
|
||||
static struct platform_device mini2440_audio = {
|
||||
.name = "s3c24xx_uda134x",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
|
|
|
@ -211,6 +211,7 @@ static struct fixed_voltage_config smdk6410_b_pwr_5v_pdata = {
|
|||
.supply_name = "B_PWR_5V",
|
||||
.microvolts = 5000000,
|
||||
.init_data = &smdk6410_b_pwr_5v_data,
|
||||
.gpio = -EINVAL,
|
||||
};
|
||||
|
||||
static struct platform_device smdk6410_b_pwr_5v = {
|
||||
|
|
|
@ -27,6 +27,9 @@ obj-$(CONFIG_CPU_ABRT_EV5TJ) += abort-ev5tj.o
|
|||
obj-$(CONFIG_CPU_ABRT_EV6) += abort-ev6.o
|
||||
obj-$(CONFIG_CPU_ABRT_EV7) += abort-ev7.o
|
||||
|
||||
AFLAGS_abort-ev6.o :=-Wa,-march=armv6k
|
||||
AFLAGS_abort-ev7.o :=-Wa,-march=armv7-a
|
||||
|
||||
obj-$(CONFIG_CPU_PABRT_LEGACY) += pabort-legacy.o
|
||||
obj-$(CONFIG_CPU_PABRT_V6) += pabort-v6.o
|
||||
obj-$(CONFIG_CPU_PABRT_V7) += pabort-v7.o
|
||||
|
@ -39,6 +42,9 @@ obj-$(CONFIG_CPU_CACHE_V6) += cache-v6.o
|
|||
obj-$(CONFIG_CPU_CACHE_V7) += cache-v7.o
|
||||
obj-$(CONFIG_CPU_CACHE_FA) += cache-fa.o
|
||||
|
||||
AFLAGS_cache-v6.o :=-Wa,-march=armv6
|
||||
AFLAGS_cache-v7.o :=-Wa,-march=armv7-a
|
||||
|
||||
obj-$(CONFIG_CPU_COPY_V3) += copypage-v3.o
|
||||
obj-$(CONFIG_CPU_COPY_V4WT) += copypage-v4wt.o
|
||||
obj-$(CONFIG_CPU_COPY_V4WB) += copypage-v4wb.o
|
||||
|
@ -58,6 +64,9 @@ obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o
|
|||
obj-$(CONFIG_CPU_TLB_V7) += tlb-v7.o
|
||||
obj-$(CONFIG_CPU_TLB_FA) += tlb-fa.o
|
||||
|
||||
AFLAGS_tlb-v6.o :=-Wa,-march=armv6
|
||||
AFLAGS_tlb-v7.o :=-Wa,-march=armv7-a
|
||||
|
||||
obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o
|
||||
obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o
|
||||
obj-$(CONFIG_CPU_ARM7TDMI) += proc-arm7tdmi.o
|
||||
|
@ -84,6 +93,9 @@ obj-$(CONFIG_CPU_FEROCEON) += proc-feroceon.o
|
|||
obj-$(CONFIG_CPU_V6) += proc-v6.o
|
||||
obj-$(CONFIG_CPU_V7) += proc-v7.o
|
||||
|
||||
AFLAGS_proc-v6.o :=-Wa,-march=armv6
|
||||
AFLAGS_proc-v7.o :=-Wa,-march=armv7-a
|
||||
|
||||
obj-$(CONFIG_CACHE_FEROCEON_L2) += cache-feroceon-l2.o
|
||||
obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
|
||||
obj-$(CONFIG_CACHE_XSC3L2) += cache-xsc3l2.o
|
||||
|
|
|
@ -221,15 +221,14 @@ static int __init xsc3_l2_init(void)
|
|||
if (!cpu_is_xsc3() || !xsc3_l2_present())
|
||||
return 0;
|
||||
|
||||
if (!(get_cr() & CR_L2)) {
|
||||
if (get_cr() & CR_L2) {
|
||||
pr_info("XScale3 L2 cache enabled.\n");
|
||||
adjust_cr(CR_L2, CR_L2);
|
||||
xsc3_l2_inv_all();
|
||||
}
|
||||
|
||||
outer_cache.inv_range = xsc3_l2_inv_range;
|
||||
outer_cache.clean_range = xsc3_l2_clean_range;
|
||||
outer_cache.flush_range = xsc3_l2_flush_range;
|
||||
outer_cache.inv_range = xsc3_l2_inv_range;
|
||||
outer_cache.clean_range = xsc3_l2_clean_range;
|
||||
outer_cache.flush_range = xsc3_l2_flush_range;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -407,6 +407,13 @@ __xsc3_setup:
|
|||
|
||||
adr r5, xsc3_crval
|
||||
ldmia r5, {r5, r6}
|
||||
|
||||
#ifdef CONFIG_CACHE_XSC3L2
|
||||
mrc p15, 1, r0, c0, c0, 1 @ get L2 present information
|
||||
ands r0, r0, #0xf8
|
||||
orrne r6, r6, #(1 << 26) @ enable L2 if present
|
||||
#endif
|
||||
|
||||
mrc p15, 0, r0, c1, c0, 0 @ get control register
|
||||
bic r0, r0, r5 @ ..V. ..R. .... ..A.
|
||||
orr r0, r0, r6 @ ..VI Z..S .... .C.M (mmu)
|
||||
|
|
|
@ -58,8 +58,8 @@ static int __init s3c_nand_copy_set(struct s3c2410_nand_set *set)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
size = sizeof(int) * set->nr_chips;
|
||||
if (size) {
|
||||
if (set->nr_map && set->nr_chips) {
|
||||
size = sizeof(int) * set->nr_chips;
|
||||
ptr = kmemdup(set->nr_map, size, GFP_KERNEL);
|
||||
set->nr_map = ptr;
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm/virtconvert.h>
|
||||
|
||||
/*
|
||||
* These are for ISA/PCI shared memory _only_ and should never be used
|
||||
|
@ -165,19 +166,6 @@ static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size
|
|||
|
||||
extern void iounmap(void *addr);
|
||||
|
||||
/* Pages to physical address... */
|
||||
#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
|
||||
#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
|
||||
|
||||
/*
|
||||
* Macros used for converting between virtual and physical mappings.
|
||||
*/
|
||||
#define phys_to_virt(vaddr) ((void *) (vaddr))
|
||||
#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
|
||||
|
||||
#define virt_to_bus virt_to_phys
|
||||
#define bus_to_virt phys_to_virt
|
||||
|
||||
/*
|
||||
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
|
||||
* access
|
||||
|
|
|
@ -56,8 +56,8 @@ extern unsigned long memory_end;
|
|||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#define __pa(vaddr) virt_to_phys((void *)(vaddr))
|
||||
#define __va(paddr) phys_to_virt((unsigned long)(paddr))
|
||||
#define __pa(vaddr) ((unsigned long)(vaddr))
|
||||
#define __va(paddr) ((void *)(paddr))
|
||||
|
||||
#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
|
||||
#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
|
||||
|
|
|
@ -26,6 +26,7 @@ static inline void *phys_to_virt(unsigned long address)
|
|||
}
|
||||
|
||||
/* Permanent address of a page. */
|
||||
#ifdef CONFIG_MMU
|
||||
#ifdef CONFIG_SINGLE_MEMORY_CHUNK
|
||||
#define page_to_phys(page) \
|
||||
__pa(PAGE_OFFSET + (((page) - pg_data_map[0].node_mem_map) << PAGE_SHIFT))
|
||||
|
@ -37,6 +38,9 @@ static inline void *phys_to_virt(unsigned long address)
|
|||
page_to_pfn(__page) << PAGE_SHIFT; \
|
||||
})
|
||||
#endif
|
||||
#else
|
||||
#define page_to_phys(page) (((page) - mem_map) << PAGE_SHIFT)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* IO bus memory addresses are 1:1 with the physical address,
|
||||
|
|
|
@ -146,7 +146,6 @@ static struct clocksource pit_clk = {
|
|||
.read = pit_read_clk,
|
||||
.shift = 20,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
|
|
@ -613,7 +613,7 @@ u32 _au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes, u32 flags)
|
|||
dma_cache_wback_inv((unsigned long)buf, nbytes);
|
||||
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
||||
au_sync();
|
||||
dma_cache_wback_inv((unsigned long)dp, sizeof(dp));
|
||||
dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
|
||||
ctp->chan_ptr->ddma_dbell = 0;
|
||||
|
||||
/* Get next descriptor pointer. */
|
||||
|
@ -676,7 +676,7 @@ _au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes, u32 flags)
|
|||
dma_cache_inv((unsigned long)buf, nbytes);
|
||||
dp->dscr_cmd0 |= DSCR_CMD0_V; /* Let it rip */
|
||||
au_sync();
|
||||
dma_cache_wback_inv((unsigned long)dp, sizeof(dp));
|
||||
dma_cache_wback_inv((unsigned long)dp, sizeof(*dp));
|
||||
ctp->chan_ptr->ddma_dbell = 0;
|
||||
|
||||
/* Get next descriptor pointer. */
|
||||
|
|
|
@ -219,14 +219,6 @@ static void __init console_config(void)
|
|||
if (strstr(prom_getcmdline(), "console="))
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_KGDB
|
||||
if (!strstr(prom_getcmdline(), "nokgdb")) {
|
||||
strcat(prom_getcmdline(), " console=kgdb");
|
||||
kgdb_enabled = 1;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
s = prom_getenv("modetty0");
|
||||
if (s) {
|
||||
baud = simple_strtoul(s, &p, 10);
|
||||
|
@ -280,13 +272,6 @@ static inline void serial_out(int offset, int value)
|
|||
writel(value, (void *)PORT(offset));
|
||||
}
|
||||
|
||||
char prom_getchar(void)
|
||||
{
|
||||
while (!(serial_in(UART_LSR) & UART_LSR_DR))
|
||||
;
|
||||
return serial_in(UART_RX);
|
||||
}
|
||||
|
||||
int prom_putchar(char c)
|
||||
{
|
||||
while ((serial_in(UART_LSR) & UART_LSR_TEMT) == 0)
|
||||
|
|
|
@ -346,27 +346,26 @@ static struct board_info __initdata board_96348gw = {
|
|||
};
|
||||
|
||||
static struct board_info __initdata board_FAST2404 = {
|
||||
.name = "F@ST2404",
|
||||
.expected_cpu_id = 0x6348,
|
||||
.name = "F@ST2404",
|
||||
.expected_cpu_id = 0x6348,
|
||||
|
||||
.has_enet0 = 1,
|
||||
.has_enet1 = 1,
|
||||
.has_pci = 1,
|
||||
.has_enet0 = 1,
|
||||
.has_enet1 = 1,
|
||||
.has_pci = 1,
|
||||
|
||||
.enet0 = {
|
||||
.has_phy = 1,
|
||||
.use_internal_phy = 1,
|
||||
},
|
||||
.enet0 = {
|
||||
.has_phy = 1,
|
||||
.use_internal_phy = 1,
|
||||
},
|
||||
|
||||
.enet1 = {
|
||||
.force_speed_100 = 1,
|
||||
.force_duplex_full = 1,
|
||||
},
|
||||
.enet1 = {
|
||||
.force_speed_100 = 1,
|
||||
.force_duplex_full = 1,
|
||||
},
|
||||
|
||||
|
||||
.has_ohci0 = 1,
|
||||
.has_pccard = 1,
|
||||
.has_ehci0 = 1,
|
||||
.has_ohci0 = 1,
|
||||
.has_pccard = 1,
|
||||
.has_ehci0 = 1,
|
||||
};
|
||||
|
||||
static struct board_info __initdata board_DV201AMR = {
|
||||
|
|
|
@ -40,9 +40,6 @@ void __init prom_init(void)
|
|||
reg &= ~mask;
|
||||
bcm_perf_writel(reg, PERF_CKCTL_REG);
|
||||
|
||||
/* assign command line from kernel config */
|
||||
strcpy(arcs_cmdline, CONFIG_CMDLINE);
|
||||
|
||||
/* register gpiochip */
|
||||
bcm63xx_gpio_init();
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
mkboot
|
||||
elf2ecoff
|
||||
vmlinux.*
|
||||
zImage
|
||||
zImage.tmp
|
||||
|
|
|
@ -28,7 +28,7 @@ VMLINUX = vmlinux
|
|||
all: vmlinux.ecoff vmlinux.srec
|
||||
|
||||
vmlinux.ecoff: $(obj)/elf2ecoff $(VMLINUX)
|
||||
$(obj)/elf2ecoff $(VMLINUX) vmlinux.ecoff $(E2EFLAGS)
|
||||
$(obj)/elf2ecoff $(VMLINUX) $(obj)/vmlinux.ecoff $(E2EFLAGS)
|
||||
|
||||
$(obj)/elf2ecoff: $(obj)/elf2ecoff.c
|
||||
$(HOSTCC) -o $@ $^
|
||||
|
|
|
@ -56,7 +56,7 @@ $(obj)/piggy.o: $(obj)/vmlinux.$(suffix_y) $(obj)/dummy.o
|
|||
LDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T
|
||||
vmlinuz: $(src)/ld.script $(obj-y) $(obj)/piggy.o
|
||||
$(call if_changed,ld)
|
||||
$(Q)$(OBJCOPY) $(OBJCOPYFLAGS) -R .comment -R .stab -R .stabstr -R .initrd -R .sysmap $@
|
||||
$(Q)$(OBJCOPY) $(OBJCOPYFLAGS) $@
|
||||
|
||||
#
|
||||
# Some DECstations need all possible sections of an ECOFF executable
|
||||
|
@ -84,14 +84,11 @@ vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ)
|
|||
$(obj)/../elf2ecoff: $(src)/../elf2ecoff.c
|
||||
$(Q)$(HOSTCC) -o $@ $^
|
||||
|
||||
drop-sections = .reginfo .mdebug .comment .note .pdr .options .MIPS.options
|
||||
strip-flags = $(addprefix --remove-section=,$(drop-sections))
|
||||
|
||||
OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary $(strip-flags)
|
||||
OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary
|
||||
vmlinuz.bin: vmlinuz
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec $(strip-flags)
|
||||
OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec
|
||||
vmlinuz.srec: vmlinuz
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
|
|
|
@ -28,8 +28,6 @@ char *zimage_start;
|
|||
|
||||
/* The linker tells us where the image is. */
|
||||
extern unsigned char __image_begin, __image_end;
|
||||
extern unsigned char __ramdisk_begin, __ramdisk_end;
|
||||
unsigned long initrd_size;
|
||||
|
||||
/* debug interfaces */
|
||||
extern void puts(const char *s);
|
||||
|
@ -102,14 +100,6 @@ void decompress_kernel(unsigned long boot_heap_start)
|
|||
puthex((unsigned long)(zimage_size + zimage_start));
|
||||
puts("\n");
|
||||
|
||||
if (initrd_size) {
|
||||
puts("initrd at: ");
|
||||
puthex((unsigned long)(&__ramdisk_begin));
|
||||
puts(" ");
|
||||
puthex((unsigned long)(&__ramdisk_end));
|
||||
puts("\n");
|
||||
}
|
||||
|
||||
/* this area are prepared for mallocing when decompressing */
|
||||
free_mem_ptr = boot_heap_start;
|
||||
free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE;
|
||||
|
|
|
@ -1,150 +1,67 @@
|
|||
/*
|
||||
* ld.script for compressed kernel support of MIPS
|
||||
*
|
||||
* Copyright (C) 2009 Lemote Inc.
|
||||
* Author: Wu Zhangjin <wuzj@lemote.com>
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(mips)
|
||||
ENTRY(start)
|
||||
SECTIONS
|
||||
{
|
||||
/* Read-only sections, merged into text segment: */
|
||||
.init : { *(.init) } =0
|
||||
.text :
|
||||
{
|
||||
_ftext = . ;
|
||||
*(.text)
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
} =0
|
||||
.kstrtab : { *(.kstrtab) }
|
||||
/* . = VMLINUZ_LOAD_ADDRESS */
|
||||
/* read-only */
|
||||
_text = .; /* Text and read-only data */
|
||||
.text : {
|
||||
_ftext = . ;
|
||||
*(.text)
|
||||
*(.rodata)
|
||||
} = 0
|
||||
_etext = .; /* End of text section */
|
||||
|
||||
. = ALIGN(16); /* Exception table */
|
||||
__start___ex_table = .;
|
||||
__ex_table : { *(__ex_table) }
|
||||
__stop___ex_table = .;
|
||||
/* writable */
|
||||
.data : { /* Data */
|
||||
_fdata = . ;
|
||||
*(.data)
|
||||
/* Put the compressed image here, so bss is on the end. */
|
||||
__image_begin = .;
|
||||
*(.image)
|
||||
__image_end = .;
|
||||
CONSTRUCTORS
|
||||
}
|
||||
.sdata : { *(.sdata) }
|
||||
. = ALIGN(4);
|
||||
_edata = .; /* End of data section */
|
||||
|
||||
__start___dbe_table = .; /* Exception table for data bus errors */
|
||||
__dbe_table : { *(__dbe_table) }
|
||||
__stop___dbe_table = .;
|
||||
/* BSS */
|
||||
__bss_start = .;
|
||||
_fbss = .;
|
||||
.sbss : { *(.sbss) *(.scommon) }
|
||||
.bss : {
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
}
|
||||
. = ALIGN(4);
|
||||
_end = . ;
|
||||
|
||||
__start___ksymtab = .; /* Kernel symbol table */
|
||||
__ksymtab : { *(__ksymtab) }
|
||||
__stop___ksymtab = .;
|
||||
/* These are needed for ELF backends which have not yet been converted
|
||||
* to the new style linker. */
|
||||
|
||||
_etext = .;
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
|
||||
. = ALIGN(8192);
|
||||
.data.init_task : { *(.data.init_task) }
|
||||
/* These must appear regardless of . */
|
||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
||||
|
||||
/* Startup code */
|
||||
. = ALIGN(4096);
|
||||
__init_begin = .;
|
||||
.text.init : { *(.text.init) }
|
||||
.data.init : { *(.data.init) }
|
||||
. = ALIGN(16);
|
||||
__setup_start = .;
|
||||
.setup.init : { *(.setup.init) }
|
||||
__setup_end = .;
|
||||
__initcall_start = .;
|
||||
.initcall.init : { *(.initcall.init) }
|
||||
__initcall_end = .;
|
||||
. = ALIGN(4096); /* Align double page for init_task_union */
|
||||
__init_end = .;
|
||||
|
||||
. = ALIGN(4096);
|
||||
.data.page_aligned : { *(.data.idt) }
|
||||
|
||||
. = ALIGN(32);
|
||||
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
|
||||
|
||||
.fini : { *(.fini) } =0
|
||||
.reginfo : { *(.reginfo) }
|
||||
/* Adjust the address for the data segment. We want to adjust up to
|
||||
the same address within the page on the next page up. It would
|
||||
be more correct to do this:
|
||||
. = .;
|
||||
The current expression does not correctly handle the case of a
|
||||
text segment ending precisely at the end of a page; it causes the
|
||||
data segment to skip a page. The above expression does not have
|
||||
this problem, but it will currently (2/95) cause BFD to allocate
|
||||
a single segment, combining both text and data, for this case.
|
||||
This will prevent the text segment from being shared among
|
||||
multiple executions of the program; I think that is more
|
||||
important than losing a page of the virtual address space (note
|
||||
that no actual memory is lost; the page which is skipped can not
|
||||
be referenced). */
|
||||
. = .;
|
||||
.data :
|
||||
{
|
||||
_fdata = . ;
|
||||
*(.data)
|
||||
|
||||
/* Put the compressed image here, so bss is on the end. */
|
||||
__image_begin = .;
|
||||
*(.image)
|
||||
__image_end = .;
|
||||
/* Align the initial ramdisk image (INITRD) on page boundaries. */
|
||||
. = ALIGN(4096);
|
||||
__ramdisk_begin = .;
|
||||
*(.initrd)
|
||||
__ramdisk_end = .;
|
||||
. = ALIGN(4096);
|
||||
|
||||
CONSTRUCTORS
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
_gp = . + 0x8000;
|
||||
.lit8 : { *(.lit8) }
|
||||
.lit4 : { *(.lit4) }
|
||||
.ctors : { *(.ctors) }
|
||||
.dtors : { *(.dtors) }
|
||||
.got : { *(.got.plt) *(.got) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
/* We want the small data sections together, so single-instruction offsets
|
||||
can access them all, and initialized data all before uninitialized, so
|
||||
we can shorten the on-disk segment size. */
|
||||
.sdata : { *(.sdata) }
|
||||
. = ALIGN(4);
|
||||
_edata = .;
|
||||
PROVIDE (edata = .);
|
||||
|
||||
__bss_start = .;
|
||||
_fbss = .;
|
||||
.sbss : { *(.sbss) *(.scommon) }
|
||||
.bss :
|
||||
{
|
||||
*(.dynbss)
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
_end = . ;
|
||||
PROVIDE (end = .);
|
||||
}
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ :
|
||||
{
|
||||
*(.text.exit)
|
||||
*(.data.exit)
|
||||
*(.exitcall.exit)
|
||||
}
|
||||
|
||||
/* This is the MIPS specific mdebug section. */
|
||||
.mdebug : { *(.mdebug) }
|
||||
/* These are needed for ELF backends which have not yet been
|
||||
converted to the new style linker. */
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
/* DWARF debug sections.
|
||||
Symbols in the .debug DWARF section are relative to the beginning of the
|
||||
section so we begin .debug at 0. It's not clear yet what needs to happen
|
||||
for the others. */
|
||||
.debug 0 : { *(.debug) }
|
||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||
.debug_aranges 0 : { *(.debug_aranges) }
|
||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||
.line 0 : { *(.line) }
|
||||
/* These must appear regardless of . */
|
||||
.gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
|
||||
.gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
|
||||
.comment : { *(.comment) }
|
||||
.note : { *(.note) }
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
*(.MIPS.options)
|
||||
*(.options)
|
||||
*(.pdr)
|
||||
*(.reginfo)
|
||||
*(.comment)
|
||||
*(.note)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,6 +50,38 @@ static struct clocksource clocksource_mips = {
|
|||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
unsigned long long notrace sched_clock(void)
|
||||
{
|
||||
/* 64-bit arithmatic can overflow, so use 128-bit. */
|
||||
#if (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 3))
|
||||
u64 t1, t2, t3;
|
||||
unsigned long long rv;
|
||||
u64 mult = clocksource_mips.mult;
|
||||
u64 shift = clocksource_mips.shift;
|
||||
u64 cnt = read_c0_cvmcount();
|
||||
|
||||
asm (
|
||||
"dmultu\t%[cnt],%[mult]\n\t"
|
||||
"nor\t%[t1],$0,%[shift]\n\t"
|
||||
"mfhi\t%[t2]\n\t"
|
||||
"mflo\t%[t3]\n\t"
|
||||
"dsll\t%[t2],%[t2],1\n\t"
|
||||
"dsrlv\t%[rv],%[t3],%[shift]\n\t"
|
||||
"dsllv\t%[t1],%[t2],%[t1]\n\t"
|
||||
"or\t%[rv],%[t1],%[rv]\n\t"
|
||||
: [rv] "=&r" (rv), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3)
|
||||
: [cnt] "r" (cnt), [mult] "r" (mult), [shift] "r" (shift)
|
||||
: "hi", "lo");
|
||||
return rv;
|
||||
#else
|
||||
/* GCC > 4.3 do it the easy way. */
|
||||
unsigned int __attribute__((mode(TI))) t;
|
||||
t = read_c0_cvmcount();
|
||||
t = t * clocksource_mips.mult;
|
||||
return (unsigned long long)(t >> clocksource_mips.shift);
|
||||
#endif
|
||||
}
|
||||
|
||||
void __init plat_time_init(void)
|
||||
{
|
||||
clocksource_mips.rating = 300;
|
||||
|
|
|
@ -97,26 +97,18 @@ void __init plat_mem_setup(void)
|
|||
|
||||
void __init prom_init(void)
|
||||
{
|
||||
int narg, indx, posn, nchr;
|
||||
unsigned long memsz;
|
||||
int argc, i;
|
||||
char **argv;
|
||||
|
||||
memsz = fw_arg0 & 0x7fff0000;
|
||||
narg = fw_arg0 & 0x0000ffff;
|
||||
argc = fw_arg0 & 0x0000ffff;
|
||||
argv = (char **)fw_arg1;
|
||||
|
||||
if (narg) {
|
||||
arcs_cmdline[0] = '\0';
|
||||
argv = (char **) fw_arg1;
|
||||
posn = 0;
|
||||
for (indx = 1; indx < narg; ++indx) {
|
||||
nchr = strlen(argv[indx]);
|
||||
if (posn + 1 + nchr + 1 > sizeof(arcs_cmdline))
|
||||
break;
|
||||
if (posn)
|
||||
arcs_cmdline[posn++] = ' ';
|
||||
strcpy(arcs_cmdline + posn, argv[indx]);
|
||||
posn += nchr;
|
||||
}
|
||||
for (i = 1; i < argc; i++) {
|
||||
strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
|
||||
if (i < (argc - 1))
|
||||
strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
|
||||
}
|
||||
|
||||
add_memory_region(0x0, memsz, BOOT_MEM_RAM);
|
||||
|
|
|
@ -24,7 +24,9 @@ extern struct cpuinfo_ip27 sn_cpu_info[NR_CPUS];
|
|||
|
||||
#define cpu_to_node(cpu) (sn_cpu_info[(cpu)].p_nodeid)
|
||||
#define parent_node(node) (node)
|
||||
#define cpumask_of_node(node) (&hub_data(node)->h_cpus)
|
||||
#define cpumask_of_node(node) ((node) == -1 ? \
|
||||
cpu_all_mask : \
|
||||
&hub_data(node)->h_cpus)
|
||||
struct pci_bus;
|
||||
extern int pcibus_to_node(struct pci_bus *);
|
||||
|
||||
|
|
|
@ -49,9 +49,6 @@ void __init plat_mem_setup(void)
|
|||
set_io_port_base(0xbfd00000);
|
||||
|
||||
serial_init();
|
||||
|
||||
pr_info("Linux started...\n");
|
||||
|
||||
}
|
||||
|
||||
extern struct plat_smp_ops ssmtc_smp_ops;
|
||||
|
@ -60,7 +57,6 @@ void __init prom_init(void)
|
|||
{
|
||||
set_io_port_base(0xbfd00000);
|
||||
|
||||
pr_info("\nLINUX started...\n");
|
||||
prom_meminit();
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMP
|
||||
|
|
|
@ -73,9 +73,6 @@ static int __cpuinit m4kc_tlbp_war(void)
|
|||
enum label_id {
|
||||
label_second_part = 1,
|
||||
label_leave,
|
||||
#ifdef MODULE_START
|
||||
label_module_alloc,
|
||||
#endif
|
||||
label_vmalloc,
|
||||
label_vmalloc_done,
|
||||
label_tlbw_hazard,
|
||||
|
@ -92,9 +89,6 @@ enum label_id {
|
|||
|
||||
UASM_L_LA(_second_part)
|
||||
UASM_L_LA(_leave)
|
||||
#ifdef MODULE_START
|
||||
UASM_L_LA(_module_alloc)
|
||||
#endif
|
||||
UASM_L_LA(_vmalloc)
|
||||
UASM_L_LA(_vmalloc_done)
|
||||
UASM_L_LA(_tlbw_hazard)
|
||||
|
@ -818,8 +812,6 @@ static void __cpuinit build_r4000_tlb_refill_handler(void)
|
|||
} else {
|
||||
#if defined(CONFIG_HUGETLB_PAGE)
|
||||
const enum label_id ls = label_tlb_huge_update;
|
||||
#elif defined(MODULE_START)
|
||||
const enum label_id ls = label_module_alloc;
|
||||
#else
|
||||
const enum label_id ls = label_vmalloc;
|
||||
#endif
|
||||
|
|
|
@ -355,7 +355,6 @@ void __init prom_init(void)
|
|||
board_nmi_handler_setup = mips_nmi_setup;
|
||||
board_ejtag_handler_setup = mips_ejtag_setup;
|
||||
|
||||
pr_info("\nLINUX started...\n");
|
||||
prom_init_cmdline();
|
||||
prom_meminit();
|
||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
|
|
|
@ -23,6 +23,6 @@
|
|||
# under Linux.
|
||||
#
|
||||
|
||||
obj-y += cmdline.o init.o memory.o reset.o time.o powertv_setup.o asic/ pci/
|
||||
obj-y += init.o memory.o reset.o time.o powertv_setup.o asic/ pci/
|
||||
|
||||
EXTRA_CFLAGS += -Wall -Werror
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
/*
|
||||
* Carsten Langgaard, carstenl@mips.com
|
||||
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
|
||||
* Portions copyright (C) 2009 Cisco Systems, Inc.
|
||||
*
|
||||
* This program is free software; you can distribute it and/or modify it
|
||||
* under the terms of the GNU General Public License (Version 2) as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Kernel command line creation using the prom monitor (YAMON) argc/argv.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <asm/bootinfo.h>
|
||||
|
||||
#include "init.h"
|
||||
|
||||
/*
|
||||
* YAMON (32-bit PROM) pass arguments and environment as 32-bit pointer.
|
||||
* This macro take care of sign extension.
|
||||
*/
|
||||
#define prom_argv(index) ((char *)(long)_prom_argv[(index)])
|
||||
|
||||
char * __init prom_getcmdline(void)
|
||||
{
|
||||
return &(arcs_cmdline[0]);
|
||||
}
|
||||
|
||||
void __init prom_init_cmdline(void)
|
||||
{
|
||||
int len;
|
||||
|
||||
if (prom_argc != 1)
|
||||
return;
|
||||
|
||||
len = strlen(arcs_cmdline);
|
||||
|
||||
arcs_cmdline[len] = ' ';
|
||||
|
||||
strlcpy(arcs_cmdline + len + 1, (char *)_prom_argv,
|
||||
COMMAND_LINE_SIZE - len - 1);
|
||||
}
|
|
@ -34,10 +34,7 @@
|
|||
#include <asm/mips-boards/generic.h>
|
||||
#include <asm/mach-powertv/asic.h>
|
||||
|
||||
#include "init.h"
|
||||
|
||||
int prom_argc;
|
||||
int *_prom_argv, *_prom_envp;
|
||||
static int *_prom_envp;
|
||||
unsigned long _prom_memsize;
|
||||
|
||||
/*
|
||||
|
@ -109,16 +106,20 @@ static void __init mips_ejtag_setup(void)
|
|||
|
||||
void __init prom_init(void)
|
||||
{
|
||||
int prom_argc;
|
||||
char *prom_argv;
|
||||
|
||||
prom_argc = fw_arg0;
|
||||
_prom_argv = (int *) fw_arg1;
|
||||
prom_argv = (char *) fw_arg1;
|
||||
_prom_envp = (int *) fw_arg2;
|
||||
_prom_memsize = (unsigned long) fw_arg3;
|
||||
|
||||
board_nmi_handler_setup = mips_nmi_setup;
|
||||
board_ejtag_handler_setup = mips_ejtag_setup;
|
||||
|
||||
pr_info("\nLINUX started...\n");
|
||||
prom_init_cmdline();
|
||||
if (prom_argc == 1)
|
||||
strlcat(arcs_cmdline, prom_argv, COMMAND_LINE_SIZE);
|
||||
|
||||
configure_platform();
|
||||
prom_meminit();
|
||||
|
||||
|
|
|
@ -22,7 +22,5 @@
|
|||
|
||||
#ifndef _POWERTV_INIT_H
|
||||
#define _POWERTV_INIT_H
|
||||
extern int prom_argc;
|
||||
extern int *_prom_argv;
|
||||
extern unsigned long _prom_memsize;
|
||||
#endif
|
||||
|
|
|
@ -42,8 +42,6 @@
|
|||
#define BOOT_MEM_SIZE KIBIBYTE(256) /* Memory reserved for bldr */
|
||||
#define PHYS_MEM_START 0x10000000 /* Start of physical memory */
|
||||
|
||||
unsigned long ptv_memsize;
|
||||
|
||||
char __initdata cmdline[COMMAND_LINE_SIZE];
|
||||
|
||||
void __init prom_meminit(void)
|
||||
|
@ -87,9 +85,6 @@ void __init prom_meminit(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Store memsize for diagnostic purposes */
|
||||
ptv_memsize = memsize;
|
||||
|
||||
physend = PFN_ALIGN(&_end) - 0x80000000;
|
||||
if (memsize > LOW_MEM_MAX) {
|
||||
low_mem = LOW_MEM_MAX;
|
||||
|
|
|
@ -64,9 +64,6 @@
|
|||
#define REG_SIZE "4" /* In bytes */
|
||||
#endif
|
||||
|
||||
static struct pt_regs die_regs;
|
||||
static bool have_die_regs;
|
||||
|
||||
static void register_panic_notifier(void);
|
||||
static int panic_handler(struct notifier_block *notifier_block,
|
||||
unsigned long event, void *cause_string);
|
||||
|
@ -218,24 +215,6 @@ static int panic_handler(struct notifier_block *notifier_block,
|
|||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Platform-specific handling of oops
|
||||
* @str: Pointer to the oops string
|
||||
* @regs: Pointer to the oops registers
|
||||
* All we do here is to save the registers for subsequent printing through
|
||||
* the panic notifier.
|
||||
*/
|
||||
void platform_die(const char *str, const struct pt_regs *regs)
|
||||
{
|
||||
/* If we already have saved registers, don't overwrite them as they
|
||||
* they apply to the initial fault */
|
||||
|
||||
if (!have_die_regs) {
|
||||
have_die_regs = true;
|
||||
die_regs = *regs;
|
||||
}
|
||||
}
|
||||
|
||||
/* Information about the RF MAC address, if one was supplied on the
|
||||
* command line. */
|
||||
static bool have_rfmac;
|
||||
|
|
|
@ -28,9 +28,6 @@
|
|||
#include <asm/mach-powertv/asic_regs.h>
|
||||
#include "reset.h"
|
||||
|
||||
static void mips_machine_restart(char *command);
|
||||
static void mips_machine_halt(void);
|
||||
|
||||
static void mips_machine_restart(char *command)
|
||||
{
|
||||
#ifdef CONFIG_BOOTLOADER_DRIVER
|
||||
|
@ -44,22 +41,7 @@ static void mips_machine_restart(char *command)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void mips_machine_halt(void)
|
||||
{
|
||||
#ifdef CONFIG_BOOTLOADER_DRIVER
|
||||
/*
|
||||
* Call the bootloader's reset function to ensure
|
||||
* that persistent data is flushed before hard reset
|
||||
*/
|
||||
kbldr_SetCauseAndReset();
|
||||
#else
|
||||
writel(0x1, asic_reg_addr(watchdog));
|
||||
#endif
|
||||
}
|
||||
|
||||
void mips_reboot_setup(void)
|
||||
{
|
||||
_machine_restart = mips_machine_restart;
|
||||
_machine_halt = mips_machine_halt;
|
||||
pm_power_off = mips_machine_halt;
|
||||
}
|
||||
|
|
|
@ -33,5 +33,4 @@ unsigned int __cpuinit get_c0_compare_int(void)
|
|||
void __init plat_time_init(void)
|
||||
{
|
||||
powertv_clocksource_init();
|
||||
r4k_clockevent_init();
|
||||
}
|
||||
|
|
|
@ -160,7 +160,6 @@ static void __init prom_init_cmdline(void)
|
|||
int argc;
|
||||
int *argv32;
|
||||
int i; /* Always ignore the "-c" at argv[0] */
|
||||
static char builtin[COMMAND_LINE_SIZE] __initdata;
|
||||
|
||||
if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) {
|
||||
/*
|
||||
|
@ -174,20 +173,6 @@ static void __init prom_init_cmdline(void)
|
|||
argv32 = (int *)fw_arg1;
|
||||
}
|
||||
|
||||
/* ignore all built-in args if any f/w args given */
|
||||
/*
|
||||
* But if built-in strings was started with '+', append them
|
||||
* to command line args. If built-in was started with '-',
|
||||
* ignore all f/w args.
|
||||
*/
|
||||
builtin[0] = '\0';
|
||||
if (arcs_cmdline[0] == '+')
|
||||
strcpy(builtin, arcs_cmdline + 1);
|
||||
else if (arcs_cmdline[0] == '-') {
|
||||
strcpy(builtin, arcs_cmdline + 1);
|
||||
argc = 0;
|
||||
} else if (argc <= 1)
|
||||
strcpy(builtin, arcs_cmdline);
|
||||
arcs_cmdline[0] = '\0';
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
|
@ -201,12 +186,6 @@ static void __init prom_init_cmdline(void)
|
|||
} else
|
||||
strcat(arcs_cmdline, str);
|
||||
}
|
||||
/* append saved builtin args */
|
||||
if (builtin[0]) {
|
||||
if (arcs_cmdline[0])
|
||||
strcat(arcs_cmdline, " ");
|
||||
strcat(arcs_cmdline, builtin);
|
||||
}
|
||||
}
|
||||
|
||||
static int txx9_ic_disable __initdata;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* init.c, Common initialization routines for NEC VR4100 series.
|
||||
*
|
||||
* Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
* Copyright (C) 2003-2009 Yoichi Yuasa <yuasa@linux-mips.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -66,9 +66,9 @@ void __init prom_init(void)
|
|||
argv = (char **)fw_arg1;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
strcat(arcs_cmdline, argv[i]);
|
||||
strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
|
||||
if (i < (argc - 1))
|
||||
strcat(arcs_cmdline, " ");
|
||||
strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
all: $(obj)/zImage
|
||||
|
||||
BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-fno-strict-aliasing -Os -msoft-float -pipe -D__KERNEL__\
|
||||
-fno-strict-aliasing -Os -msoft-float -pipe \
|
||||
-fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
|
||||
-isystem $(shell $(CROSS32CC) -print-file-name=include)
|
||||
BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
|
||||
|
@ -34,8 +34,6 @@ BOOTCFLAGS += -fno-stack-protector
|
|||
endif
|
||||
|
||||
BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj)
|
||||
BOOTCFLAGS += -include include/linux/autoconf.h -Iarch/powerpc/include
|
||||
BOOTCFLAGS += -Iinclude
|
||||
|
||||
DTS_FLAGS ?= -p 1024
|
||||
|
||||
|
|
|
@ -52,6 +52,10 @@
|
|||
unreachable(); \
|
||||
} while (0)
|
||||
|
||||
#define __WARN() do { \
|
||||
__EMIT_BUG(BUGFLAG_WARNING); \
|
||||
} while (0)
|
||||
|
||||
#define WARN_ON(x) ({ \
|
||||
int __ret_warn_on = !!(x); \
|
||||
if (__builtin_constant_p(__ret_warn_on)) { \
|
||||
|
|
|
@ -15,11 +15,19 @@
|
|||
#ifndef __SIGP__
|
||||
#define __SIGP__
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/* get real cpu address from logical cpu number */
|
||||
extern volatile int __cpu_logical_map[];
|
||||
extern int __cpu_logical_map[];
|
||||
|
||||
static inline int cpu_logical_map(int cpu)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
return __cpu_logical_map[cpu];
|
||||
#else
|
||||
return stap();
|
||||
#endif
|
||||
}
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
@ -79,7 +87,7 @@ signal_processor(__u16 cpu_addr, sigp_order_code order_code)
|
|||
" ipm %0\n"
|
||||
" srl %0,28\n"
|
||||
: "=d" (ccode)
|
||||
: "d" (reg1), "d" (__cpu_logical_map[cpu_addr]),
|
||||
: "d" (reg1), "d" (cpu_logical_map(cpu_addr)),
|
||||
"a" (order_code) : "cc" , "memory");
|
||||
return ccode;
|
||||
}
|
||||
|
@ -98,7 +106,7 @@ signal_processor_p(__u32 parameter, __u16 cpu_addr, sigp_order_code order_code)
|
|||
" ipm %0\n"
|
||||
" srl %0,28\n"
|
||||
: "=d" (ccode)
|
||||
: "d" (reg1), "d" (__cpu_logical_map[cpu_addr]),
|
||||
: "d" (reg1), "d" (cpu_logical_map(cpu_addr)),
|
||||
"a" (order_code) : "cc" , "memory");
|
||||
return ccode;
|
||||
}
|
||||
|
@ -118,7 +126,7 @@ signal_processor_ps(__u32 *statusptr, __u32 parameter, __u16 cpu_addr,
|
|||
" ipm %0\n"
|
||||
" srl %0,28\n"
|
||||
: "=d" (ccode), "+d" (reg1)
|
||||
: "d" (__cpu_logical_map[cpu_addr]), "a" (order_code)
|
||||
: "d" (cpu_logical_map(cpu_addr)), "a" (order_code)
|
||||
: "cc" , "memory");
|
||||
*statusptr = reg1;
|
||||
return ccode;
|
||||
|
|
|
@ -93,13 +93,12 @@ static inline struct thread_info *current_thread_info(void)
|
|||
#define TIF_SYSCALL_AUDIT 9 /* syscall auditing active */
|
||||
#define TIF_SECCOMP 10 /* secure computing */
|
||||
#define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */
|
||||
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
|
||||
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling
|
||||
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling
|
||||
TIF_NEED_RESCHED */
|
||||
#define TIF_31BIT 18 /* 32bit process */
|
||||
#define TIF_MEMDIE 19
|
||||
#define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */
|
||||
#define TIF_FREEZE 21 /* thread is freezing for suspend */
|
||||
#define TIF_31BIT 17 /* 32bit process */
|
||||
#define TIF_MEMDIE 18
|
||||
#define TIF_RESTORE_SIGMASK 19 /* restore signal mask in do_signal() */
|
||||
#define TIF_FREEZE 20 /* thread is freezing for suspend */
|
||||
|
||||
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
|
||||
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
|
||||
|
@ -112,7 +111,6 @@ static inline struct thread_info *current_thread_info(void)
|
|||
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
|
||||
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
|
||||
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
|
||||
#define _TIF_USEDFPU (1<<TIF_USEDFPU)
|
||||
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
|
||||
#define _TIF_31BIT (1<<TIF_31BIT)
|
||||
#define _TIF_FREEZE (1<<TIF_FREEZE)
|
||||
|
|
|
@ -269,8 +269,7 @@
|
|||
#define __NR_pwritev 329
|
||||
#define __NR_rt_tgsigqueueinfo 330
|
||||
#define __NR_perf_event_open 331
|
||||
#define __NR_recvmmsg 332
|
||||
#define NR_syscalls 333
|
||||
#define NR_syscalls 332
|
||||
|
||||
/*
|
||||
* There are some system calls that are not present on 64 bit, some
|
||||
|
@ -377,6 +376,9 @@
|
|||
#define __IGNORE_migrate_pages
|
||||
#define __IGNORE_move_pages
|
||||
|
||||
/* Ignore system calls that are also reachable via sys_socket */
|
||||
#define __IGNORE_recvmmsg
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
|
|
|
@ -616,44 +616,35 @@ asmlinkage long sys32_fstatat64(unsigned int dfd, char __user *filename,
|
|||
*/
|
||||
|
||||
struct mmap_arg_struct_emu31 {
|
||||
u32 addr;
|
||||
u32 len;
|
||||
u32 prot;
|
||||
u32 flags;
|
||||
u32 fd;
|
||||
u32 offset;
|
||||
compat_ulong_t addr;
|
||||
compat_ulong_t len;
|
||||
compat_ulong_t prot;
|
||||
compat_ulong_t flags;
|
||||
compat_ulong_t fd;
|
||||
compat_ulong_t offset;
|
||||
};
|
||||
|
||||
asmlinkage unsigned long
|
||||
old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
|
||||
asmlinkage unsigned long old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
|
||||
{
|
||||
struct mmap_arg_struct_emu31 a;
|
||||
int error = -EFAULT;
|
||||
|
||||
if (copy_from_user(&a, arg, sizeof(a)))
|
||||
goto out;
|
||||
|
||||
error = -EINVAL;
|
||||
return -EFAULT;
|
||||
if (a.offset & ~PAGE_MASK)
|
||||
goto out;
|
||||
|
||||
error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
|
||||
a.offset >> PAGE_SHIFT);
|
||||
out:
|
||||
return error;
|
||||
return -EINVAL;
|
||||
a.addr = (unsigned long) compat_ptr(a.addr);
|
||||
return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
|
||||
a.offset >> PAGE_SHIFT);
|
||||
}
|
||||
|
||||
asmlinkage long
|
||||
sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
|
||||
asmlinkage long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
|
||||
{
|
||||
struct mmap_arg_struct_emu31 a;
|
||||
int error = -EFAULT;
|
||||
|
||||
if (copy_from_user(&a, arg, sizeof(a)))
|
||||
goto out;
|
||||
error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
|
||||
out:
|
||||
return error;
|
||||
return -EFAULT;
|
||||
a.addr = (unsigned long) compat_ptr(a.addr);
|
||||
return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_read(unsigned int fd, char __user * buf, size_t count)
|
||||
|
|
|
@ -1853,12 +1853,3 @@ sys32_execve_wrapper:
|
|||
llgtr %r3,%r3 # compat_uptr_t *
|
||||
llgtr %r4,%r4 # compat_uptr_t *
|
||||
jg sys32_execve # branch to system call
|
||||
|
||||
.globl compat_sys_recvmmsg_wrapper
|
||||
compat_sys_recvmmsg_wrapper:
|
||||
lgfr %r2,%r2 # int
|
||||
llgtr %r3,%r3 # struct compat_mmsghdr *
|
||||
llgfr %r4,%r4 # unsigned int
|
||||
llgfr %r5,%r5 # unsigned int
|
||||
llgtr %r6,%r6 # struct compat_timespec *
|
||||
jg compat_sys_recvmmsg
|
||||
|
|
|
@ -153,8 +153,6 @@ void exit_thread(void)
|
|||
|
||||
void flush_thread(void)
|
||||
{
|
||||
clear_used_math();
|
||||
clear_tsk_thread_flag(current, TIF_USEDFPU);
|
||||
}
|
||||
|
||||
void release_thread(struct task_struct *dead_task)
|
||||
|
@ -217,6 +215,7 @@ int copy_thread(unsigned long clone_flags, unsigned long new_stackp,
|
|||
p->thread.mm_segment = get_fs();
|
||||
/* Don't copy debug registers */
|
||||
memset(&p->thread.per_info, 0, sizeof(p->thread.per_info));
|
||||
clear_tsk_thread_flag(p, TIF_SINGLE_STEP);
|
||||
/* Initialize per thread user and system timer values */
|
||||
ti = task_thread_info(p);
|
||||
ti->user_timer = 0;
|
||||
|
|
|
@ -65,6 +65,7 @@ FixPerRegisters(struct task_struct *task)
|
|||
{
|
||||
struct pt_regs *regs;
|
||||
per_struct *per_info;
|
||||
per_cr_words cr_words;
|
||||
|
||||
regs = task_pt_regs(task);
|
||||
per_info = (per_struct *) &task->thread.per_info;
|
||||
|
@ -98,6 +99,13 @@ FixPerRegisters(struct task_struct *task)
|
|||
per_info->control_regs.bits.storage_alt_space_ctl = 1;
|
||||
else
|
||||
per_info->control_regs.bits.storage_alt_space_ctl = 0;
|
||||
|
||||
if (task == current) {
|
||||
__ctl_store(cr_words, 9, 11);
|
||||
if (memcmp(&cr_words, &per_info->control_regs.words,
|
||||
sizeof(cr_words)) != 0)
|
||||
__ctl_load(per_info->control_regs.words, 9, 11);
|
||||
}
|
||||
}
|
||||
|
||||
void user_enable_single_step(struct task_struct *task)
|
||||
|
|
|
@ -87,7 +87,6 @@ unsigned long elf_hwcap = 0;
|
|||
char elf_platform[ELF_PLATFORM_SIZE];
|
||||
|
||||
struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS];
|
||||
volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
|
||||
|
||||
int __initdata memory_end_set;
|
||||
unsigned long __initdata memory_end;
|
||||
|
@ -124,12 +123,6 @@ void __cpuinit cpu_init(void)
|
|||
*/
|
||||
get_cpu_id(&S390_lowcore.cpu_id);
|
||||
|
||||
/*
|
||||
* Force FPU initialization:
|
||||
*/
|
||||
clear_thread_flag(TIF_USEDFPU);
|
||||
clear_used_math();
|
||||
|
||||
atomic_inc(&init_mm.mm_count);
|
||||
current->active_mm = &init_mm;
|
||||
BUG_ON(current->mm);
|
||||
|
@ -855,7 +848,6 @@ setup_arch(char **cmdline_p)
|
|||
setup_lowcore();
|
||||
|
||||
cpu_init();
|
||||
__cpu_logical_map[0] = stap();
|
||||
s390_init_cpu_topology();
|
||||
|
||||
/*
|
||||
|
|
|
@ -499,19 +499,11 @@ void do_signal(struct pt_regs *regs)
|
|||
if (test_thread_flag(TIF_RESTORE_SIGMASK))
|
||||
clear_thread_flag(TIF_RESTORE_SIGMASK);
|
||||
|
||||
/*
|
||||
* If we would have taken a single-step trap
|
||||
* for a normal instruction, act like we took
|
||||
* one for the handler setup.
|
||||
*/
|
||||
if (current->thread.per_info.single_step)
|
||||
set_thread_flag(TIF_SINGLE_STEP);
|
||||
|
||||
/*
|
||||
* Let tracing know that we've done the handler setup.
|
||||
*/
|
||||
tracehook_signal_handler(signr, &info, &ka, regs,
|
||||
test_thread_flag(TIF_SINGLE_STEP));
|
||||
current->thread.per_info.single_step);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -52,6 +52,9 @@
|
|||
#include <asm/cpu.h>
|
||||
#include "entry.h"
|
||||
|
||||
/* logical cpu to cpu address */
|
||||
int __cpu_logical_map[NR_CPUS];
|
||||
|
||||
static struct task_struct *current_set[NR_CPUS];
|
||||
|
||||
static u8 smp_cpu_type;
|
||||
|
@ -717,6 +720,12 @@ void __init smp_cpus_done(unsigned int max_cpus)
|
|||
{
|
||||
}
|
||||
|
||||
void __init smp_setup_processor_id(void)
|
||||
{
|
||||
S390_lowcore.cpu_nr = 0;
|
||||
__cpu_logical_map[0] = stap();
|
||||
}
|
||||
|
||||
/*
|
||||
* the frequency of the profiling timer can be changed
|
||||
* by writing a multiplier value into /proc/profile.
|
||||
|
|
|
@ -340,4 +340,3 @@ SYSCALL(sys_preadv,sys_preadv,compat_sys_preadv_wrapper)
|
|||
SYSCALL(sys_pwritev,sys_pwritev,compat_sys_pwritev_wrapper)
|
||||
SYSCALL(sys_rt_tgsigqueueinfo,sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo_wrapper) /* 330 */
|
||||
SYSCALL(sys_perf_event_open,sys_perf_event_open,sys_perf_event_open_wrapper)
|
||||
SYSCALL(sys_recvmmsg,sys_recvmmsg,compat_sys_recvmmsg_wrapper)
|
||||
|
|
|
@ -114,7 +114,7 @@ static void add_cpus_to_core(struct tl_cpu *tl_cpu, struct core_info *core)
|
|||
|
||||
rcpu = CPU_BITS - 1 - cpu + tl_cpu->origin;
|
||||
for_each_present_cpu(lcpu) {
|
||||
if (__cpu_logical_map[lcpu] == rcpu) {
|
||||
if (cpu_logical_map(lcpu) == rcpu) {
|
||||
cpu_set(lcpu, core->mask);
|
||||
smp_cpu_polarization[lcpu] = tl_cpu->pp;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ static inline void _raw_yield_cpu(int cpu)
|
|||
{
|
||||
if (MACHINE_HAS_DIAG9C)
|
||||
asm volatile("diag %0,0,0x9c"
|
||||
: : "d" (__cpu_logical_map[cpu]));
|
||||
: : "d" (cpu_logical_map(cpu)));
|
||||
else
|
||||
_raw_yield();
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
static inline unsigned long mmap_base(void)
|
||||
{
|
||||
unsigned long gap = current->signal->rlim[RLIMIT_STACK].rlim_cur;
|
||||
unsigned long gap = rlimit(RLIMIT_STACK);
|
||||
|
||||
if (gap < MIN_GAP)
|
||||
gap = MIN_GAP;
|
||||
|
@ -61,7 +61,7 @@ static inline int mmap_is_legacy(void)
|
|||
#endif
|
||||
return sysctl_legacy_va_layout ||
|
||||
(current->personality & ADDR_COMPAT_LAYOUT) ||
|
||||
current->signal->rlim[RLIMIT_STACK].rlim_cur == RLIM_INFINITY;
|
||||
rlimit(RLIMIT_STACK) == RLIM_INFINITY;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_64BIT
|
||||
|
|
|
@ -351,6 +351,10 @@ static struct i2c_board_info i2c1_devices[] = {
|
|||
{
|
||||
I2C_BOARD_INFO("r2025sd", 0x32),
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("lis3lv02d", 0x1c),
|
||||
.irq = 33,
|
||||
}
|
||||
};
|
||||
|
||||
/* KEYSC */
|
||||
|
@ -1113,6 +1117,10 @@ static int __init arch_setup(void)
|
|||
gpio_direction_output(GPIO_PTU0, 0);
|
||||
mdelay(20);
|
||||
|
||||
/* enable motion sensor */
|
||||
gpio_request(GPIO_FN_INTC_IRQ1, NULL);
|
||||
gpio_direction_input(GPIO_FN_INTC_IRQ1);
|
||||
|
||||
/* enable I2C device */
|
||||
i2c_register_board_info(0, i2c0_devices,
|
||||
ARRAY_SIZE(i2c0_devices));
|
||||
|
|
|
@ -13,4 +13,4 @@
|
|||
include/generated/machtypes.h: $(src)/gen-mach-types $(src)/mach-types
|
||||
@echo ' Generating $@'
|
||||
$(Q)mkdir -p $(dir $@)
|
||||
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
|
||||
$(Q)LC_ALL=C $(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }
|
||||
|
|
|
@ -125,50 +125,36 @@ void mconsole_log(struct mc_request *req)
|
|||
void mconsole_proc(struct mc_request *req)
|
||||
{
|
||||
struct nameidata nd;
|
||||
struct file_system_type *proc;
|
||||
struct super_block *super;
|
||||
struct vfsmount *mnt = current->nsproxy->pid_ns->proc_mnt;
|
||||
struct file *file;
|
||||
int n, err;
|
||||
char *ptr = req->request.data, *buf;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
ptr += strlen("proc");
|
||||
ptr = skip_spaces(ptr);
|
||||
|
||||
proc = get_fs_type("proc");
|
||||
if (proc == NULL) {
|
||||
mconsole_reply(req, "procfs not registered", 1, 0);
|
||||
goto out;
|
||||
}
|
||||
|
||||
super = (*proc->get_sb)(proc, 0, NULL, NULL);
|
||||
put_filesystem(proc);
|
||||
if (super == NULL) {
|
||||
mconsole_reply(req, "Failed to get procfs superblock", 1, 0);
|
||||
goto out;
|
||||
}
|
||||
up_write(&super->s_umount);
|
||||
|
||||
nd.path.dentry = super->s_root;
|
||||
nd.path.mnt = NULL;
|
||||
nd.flags = O_RDONLY + 1;
|
||||
nd.last_type = LAST_ROOT;
|
||||
|
||||
/* START: it was experienced that the stability problems are closed
|
||||
* if commenting out these two calls + the below read cycle. To
|
||||
* make UML crash again, it was enough to readd either one.*/
|
||||
err = link_path_walk(ptr, &nd);
|
||||
err = vfs_path_lookup(mnt->mnt_root, mnt, ptr, LOOKUP_FOLLOW, &nd);
|
||||
if (err) {
|
||||
mconsole_reply(req, "Failed to look up file", 1, 0);
|
||||
goto out_kill;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = may_open(&nd.path, MAY_READ, FMODE_READ);
|
||||
if (result) {
|
||||
mconsole_reply(req, "Failed to open file", 1, 0);
|
||||
path_put(&nd.path);
|
||||
goto out;
|
||||
}
|
||||
|
||||
file = dentry_open(nd.path.dentry, nd.path.mnt, O_RDONLY,
|
||||
current_cred());
|
||||
err = PTR_ERR(file);
|
||||
if (IS_ERR(file)) {
|
||||
mconsole_reply(req, "Failed to open file", 1, 0);
|
||||
goto out_kill;
|
||||
path_put(&nd.path);
|
||||
goto out;
|
||||
}
|
||||
/*END*/
|
||||
|
||||
buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
|
||||
if (buf == NULL) {
|
||||
|
@ -176,10 +162,13 @@ void mconsole_proc(struct mc_request *req)
|
|||
goto out_fput;
|
||||
}
|
||||
|
||||
if ((file->f_op != NULL) && (file->f_op->read != NULL)) {
|
||||
if (file->f_op->read) {
|
||||
do {
|
||||
n = (*file->f_op->read)(file, buf, PAGE_SIZE - 1,
|
||||
&file->f_pos);
|
||||
loff_t pos;
|
||||
set_fs(KERNEL_DS);
|
||||
n = vfs_read(file, buf, PAGE_SIZE - 1, &pos);
|
||||
file_pos_write(file, pos);
|
||||
set_fs(old_fs);
|
||||
if (n >= 0) {
|
||||
buf[n] = '\0';
|
||||
mconsole_reply(req, buf, 0, (n > 0));
|
||||
|
@ -197,8 +186,6 @@ void mconsole_proc(struct mc_request *req)
|
|||
kfree(buf);
|
||||
out_fput:
|
||||
fput(file);
|
||||
out_kill:
|
||||
deactivate_super(super);
|
||||
out: ;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -108,10 +108,11 @@ struct mce_log {
|
|||
#define K8_MCE_THRESHOLD_BANK_5 (MCE_THRESHOLD_BASE + 5 * 9)
|
||||
#define K8_MCE_THRESHOLD_DRAM_ECC (MCE_THRESHOLD_BANK_4 + 0)
|
||||
|
||||
extern struct atomic_notifier_head x86_mce_decoder_chain;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
extern struct atomic_notifier_head x86_mce_decoder_chain;
|
||||
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/atomic.h>
|
||||
|
|
|
@ -495,5 +495,17 @@ static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)
|
|||
uv_write_global_mmr64(pnode, UVH_IPI_INT, val);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the minimum revision number of the hub chips within the partition.
|
||||
* 1 - initial rev 1.0 silicon
|
||||
* 2 - rev 2.0 production silicon
|
||||
*/
|
||||
static inline int uv_get_min_hub_revision_id(void)
|
||||
{
|
||||
extern int uv_min_hub_revision_id;
|
||||
|
||||
return uv_min_hub_revision_id;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_X86_64 */
|
||||
#endif /* _ASM_X86_UV_UV_HUB_H */
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <asm/x86_init.h>
|
||||
|
||||
int gart_iommu_aperture;
|
||||
EXPORT_SYMBOL_GPL(gart_iommu_aperture);
|
||||
int gart_iommu_aperture_disabled __initdata;
|
||||
int gart_iommu_aperture_allowed __initdata;
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ DEFINE_PER_CPU(int, x2apic_extra_bits);
|
|||
|
||||
static enum uv_system_type uv_system_type;
|
||||
static u64 gru_start_paddr, gru_end_paddr;
|
||||
int uv_min_hub_revision_id;
|
||||
EXPORT_SYMBOL_GPL(uv_min_hub_revision_id);
|
||||
|
||||
static inline bool is_GRU_range(u64 start, u64 end)
|
||||
{
|
||||
|
@ -55,12 +57,19 @@ static int early_get_nodeid(void)
|
|||
mmr = early_ioremap(UV_LOCAL_MMR_BASE | UVH_NODE_ID, sizeof(*mmr));
|
||||
node_id.v = *mmr;
|
||||
early_iounmap(mmr, sizeof(*mmr));
|
||||
|
||||
/* Currently, all blades have same revision number */
|
||||
uv_min_hub_revision_id = node_id.s.revision;
|
||||
|
||||
return node_id.s.node_id;
|
||||
}
|
||||
|
||||
static int __init uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
||||
{
|
||||
int nodeid;
|
||||
|
||||
if (!strcmp(oem_id, "SGI")) {
|
||||
nodeid = early_get_nodeid();
|
||||
x86_platform.is_untracked_pat_range = uv_is_untracked_pat_range;
|
||||
if (!strcmp(oem_table_id, "UVL"))
|
||||
uv_system_type = UV_LEGACY_APIC;
|
||||
|
@ -68,7 +77,7 @@ static int __init uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
|||
uv_system_type = UV_X2APIC;
|
||||
else if (!strcmp(oem_table_id, "UVH")) {
|
||||
__get_cpu_var(x2apic_extra_bits) =
|
||||
early_get_nodeid() << (UV_APIC_PNODE_SHIFT - 1);
|
||||
nodeid << (UV_APIC_PNODE_SHIFT - 1);
|
||||
uv_system_type = UV_NON_UNIQUE_APIC;
|
||||
return 1;
|
||||
}
|
||||
|
@ -374,13 +383,13 @@ static __init void get_lowmem_redirect(unsigned long *base, unsigned long *size)
|
|||
|
||||
enum map_type {map_wb, map_uc};
|
||||
|
||||
static __init void map_high(char *id, unsigned long base, int shift,
|
||||
int max_pnode, enum map_type map_type)
|
||||
static __init void map_high(char *id, unsigned long base, int pshift,
|
||||
int bshift, int max_pnode, enum map_type map_type)
|
||||
{
|
||||
unsigned long bytes, paddr;
|
||||
|
||||
paddr = base << shift;
|
||||
bytes = (1UL << shift) * (max_pnode + 1);
|
||||
paddr = base << pshift;
|
||||
bytes = (1UL << bshift) * (max_pnode + 1);
|
||||
printk(KERN_INFO "UV: Map %s_HI 0x%lx - 0x%lx\n", id, paddr,
|
||||
paddr + bytes);
|
||||
if (map_type == map_uc)
|
||||
|
@ -396,7 +405,7 @@ static __init void map_gru_high(int max_pnode)
|
|||
|
||||
gru.v = uv_read_local_mmr(UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR);
|
||||
if (gru.s.enable) {
|
||||
map_high("GRU", gru.s.base, shift, max_pnode, map_wb);
|
||||
map_high("GRU", gru.s.base, shift, shift, max_pnode, map_wb);
|
||||
gru_start_paddr = ((u64)gru.s.base << shift);
|
||||
gru_end_paddr = gru_start_paddr + (1UL << shift) * (max_pnode + 1);
|
||||
|
||||
|
@ -410,7 +419,7 @@ static __init void map_mmr_high(int max_pnode)
|
|||
|
||||
mmr.v = uv_read_local_mmr(UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR);
|
||||
if (mmr.s.enable)
|
||||
map_high("MMR", mmr.s.base, shift, max_pnode, map_uc);
|
||||
map_high("MMR", mmr.s.base, shift, shift, max_pnode, map_uc);
|
||||
}
|
||||
|
||||
static __init void map_mmioh_high(int max_pnode)
|
||||
|
@ -420,7 +429,8 @@ static __init void map_mmioh_high(int max_pnode)
|
|||
|
||||
mmioh.v = uv_read_local_mmr(UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR);
|
||||
if (mmioh.s.enable)
|
||||
map_high("MMIOH", mmioh.s.base, shift, max_pnode, map_uc);
|
||||
map_high("MMIOH", mmioh.s.base, shift, mmioh.s.m_io,
|
||||
max_pnode, map_uc);
|
||||
}
|
||||
|
||||
static __init void map_low_mmrs(void)
|
||||
|
|
|
@ -123,13 +123,15 @@ print_context_stack_bp(struct thread_info *tinfo,
|
|||
while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) {
|
||||
unsigned long addr = *ret_addr;
|
||||
|
||||
if (__kernel_text_address(addr)) {
|
||||
ops->address(data, addr, 1);
|
||||
frame = frame->next_frame;
|
||||
ret_addr = &frame->return_address;
|
||||
print_ftrace_graph_addr(addr, data, ops, tinfo, graph);
|
||||
}
|
||||
if (!__kernel_text_address(addr))
|
||||
break;
|
||||
|
||||
ops->address(data, addr, 1);
|
||||
frame = frame->next_frame;
|
||||
ret_addr = &frame->return_address;
|
||||
print_ftrace_graph_addr(addr, data, ops, tinfo, graph);
|
||||
}
|
||||
|
||||
return (unsigned long)frame;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(print_context_stack_bp);
|
||||
|
|
|
@ -288,6 +288,8 @@ int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
|
|||
regs.es = __USER_DS;
|
||||
regs.fs = __KERNEL_PERCPU;
|
||||
regs.gs = __KERNEL_STACK_CANARY;
|
||||
#else
|
||||
regs.ss = __KERNEL_DS;
|
||||
#endif
|
||||
|
||||
regs.orig_ax = -1;
|
||||
|
|
|
@ -1151,9 +1151,13 @@ asmlinkage void __init xen_start_kernel(void)
|
|||
|
||||
/* keep using Xen gdt for now; no urgent need to change it */
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
pv_info.kernel_rpl = 1;
|
||||
if (xen_feature(XENFEAT_supervisor_mode_kernel))
|
||||
pv_info.kernel_rpl = 0;
|
||||
#else
|
||||
pv_info.kernel_rpl = 0;
|
||||
#endif
|
||||
|
||||
/* set the limit of our address space */
|
||||
xen_reserve_top();
|
||||
|
|
|
@ -329,7 +329,7 @@ static struct ata_port_operations ich_pata_ops = {
|
|||
};
|
||||
|
||||
static struct ata_port_operations piix_sata_ops = {
|
||||
.inherits = &ata_bmdma_port_ops,
|
||||
.inherits = &ata_bmdma32_port_ops,
|
||||
};
|
||||
|
||||
static struct ata_port_operations piix_sidpr_sata_ops = {
|
||||
|
|
|
@ -3790,21 +3790,45 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params,
|
|||
int sata_link_resume(struct ata_link *link, const unsigned long *params,
|
||||
unsigned long deadline)
|
||||
{
|
||||
int tries = ATA_LINK_RESUME_TRIES;
|
||||
u32 scontrol, serror;
|
||||
int rc;
|
||||
|
||||
if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
|
||||
return rc;
|
||||
|
||||
scontrol = (scontrol & 0x0f0) | 0x300;
|
||||
|
||||
if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol)))
|
||||
return rc;
|
||||
|
||||
/* Some PHYs react badly if SStatus is pounded immediately
|
||||
* after resuming. Delay 200ms before debouncing.
|
||||
/*
|
||||
* Writes to SControl sometimes get ignored under certain
|
||||
* controllers (ata_piix SIDPR). Make sure DET actually is
|
||||
* cleared.
|
||||
*/
|
||||
msleep(200);
|
||||
do {
|
||||
scontrol = (scontrol & 0x0f0) | 0x300;
|
||||
if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol)))
|
||||
return rc;
|
||||
/*
|
||||
* Some PHYs react badly if SStatus is pounded
|
||||
* immediately after resuming. Delay 200ms before
|
||||
* debouncing.
|
||||
*/
|
||||
msleep(200);
|
||||
|
||||
/* is SControl restored correctly? */
|
||||
if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
|
||||
return rc;
|
||||
} while ((scontrol & 0xf0f) != 0x300 && --tries);
|
||||
|
||||
if ((scontrol & 0xf0f) != 0x300) {
|
||||
ata_link_printk(link, KERN_ERR,
|
||||
"failed to resume link (SControl %X)\n",
|
||||
scontrol);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (tries < ATA_LINK_RESUME_TRIES)
|
||||
ata_link_printk(link, KERN_WARNING,
|
||||
"link resume succeeded after %d retries\n",
|
||||
ATA_LINK_RESUME_TRIES - tries);
|
||||
|
||||
if ((rc = sata_link_debounce(link, params, deadline)))
|
||||
return rc;
|
||||
|
|
|
@ -862,7 +862,7 @@ static void pdc_error_intr(struct ata_port *ap, struct ata_queued_cmd *qc,
|
|||
if (port_status & PDC_DRIVE_ERR)
|
||||
ac_err_mask |= AC_ERR_DEV;
|
||||
if (port_status & (PDC_OVERRUN_ERR | PDC_UNDERRUN_ERR))
|
||||
ac_err_mask |= AC_ERR_HSM;
|
||||
ac_err_mask |= AC_ERR_OTHER;
|
||||
if (port_status & (PDC2_ATA_HBA_ERR | PDC2_ATA_DMA_CNT_ERR))
|
||||
ac_err_mask |= AC_ERR_ATA_BUS;
|
||||
if (port_status & (PDC_PH_ERR | PDC_SH_ERR | PDC_DH_ERR | PDC2_HTO_ERR
|
||||
|
|
|
@ -309,17 +309,19 @@ static SYSDEV_ATTR(removable, 0444, show_mem_removable, NULL);
|
|||
* Block size attribute stuff
|
||||
*/
|
||||
static ssize_t
|
||||
print_block_size(struct class *class, char *buf)
|
||||
print_block_size(struct sysdev_class *class,
|
||||
struct sysdev_class_attribute *class_attr,
|
||||
char *buf)
|
||||
{
|
||||
return sprintf(buf, "%lx\n", (unsigned long)PAGES_PER_SECTION * PAGE_SIZE);
|
||||
return sprintf(buf, "%#lx\n", (unsigned long)PAGES_PER_SECTION * PAGE_SIZE);
|
||||
}
|
||||
|
||||
static CLASS_ATTR(block_size_bytes, 0444, print_block_size, NULL);
|
||||
static SYSDEV_CLASS_ATTR(block_size_bytes, 0444, print_block_size, NULL);
|
||||
|
||||
static int block_size_init(void)
|
||||
{
|
||||
return sysfs_create_file(&memory_sysdev_class.kset.kobj,
|
||||
&class_attr_block_size_bytes.attr);
|
||||
&attr_block_size_bytes.attr);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -330,7 +332,9 @@ static int block_size_init(void)
|
|||
*/
|
||||
#ifdef CONFIG_ARCH_MEMORY_PROBE
|
||||
static ssize_t
|
||||
memory_probe_store(struct class *class, const char *buf, size_t count)
|
||||
memory_probe_store(struct sysdev_class *class,
|
||||
struct sysdev_class_attribute *class_attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
u64 phys_addr;
|
||||
int nid;
|
||||
|
@ -346,12 +350,12 @@ memory_probe_store(struct class *class, const char *buf, size_t count)
|
|||
|
||||
return count;
|
||||
}
|
||||
static CLASS_ATTR(probe, S_IWUSR, NULL, memory_probe_store);
|
||||
static SYSDEV_CLASS_ATTR(probe, S_IWUSR, NULL, memory_probe_store);
|
||||
|
||||
static int memory_probe_init(void)
|
||||
{
|
||||
return sysfs_create_file(&memory_sysdev_class.kset.kobj,
|
||||
&class_attr_probe.attr);
|
||||
&attr_probe.attr);
|
||||
}
|
||||
#else
|
||||
static inline int memory_probe_init(void)
|
||||
|
@ -367,7 +371,9 @@ static inline int memory_probe_init(void)
|
|||
|
||||
/* Soft offline a page */
|
||||
static ssize_t
|
||||
store_soft_offline_page(struct class *class, const char *buf, size_t count)
|
||||
store_soft_offline_page(struct sysdev_class *class,
|
||||
struct sysdev_class_attribute *class_attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
int ret;
|
||||
u64 pfn;
|
||||
|
@ -384,7 +390,9 @@ store_soft_offline_page(struct class *class, const char *buf, size_t count)
|
|||
|
||||
/* Forcibly offline a page, including killing processes. */
|
||||
static ssize_t
|
||||
store_hard_offline_page(struct class *class, const char *buf, size_t count)
|
||||
store_hard_offline_page(struct sysdev_class *class,
|
||||
struct sysdev_class_attribute *class_attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
int ret;
|
||||
u64 pfn;
|
||||
|
@ -397,18 +405,18 @@ store_hard_offline_page(struct class *class, const char *buf, size_t count)
|
|||
return ret ? ret : count;
|
||||
}
|
||||
|
||||
static CLASS_ATTR(soft_offline_page, 0644, NULL, store_soft_offline_page);
|
||||
static CLASS_ATTR(hard_offline_page, 0644, NULL, store_hard_offline_page);
|
||||
static SYSDEV_CLASS_ATTR(soft_offline_page, 0644, NULL, store_soft_offline_page);
|
||||
static SYSDEV_CLASS_ATTR(hard_offline_page, 0644, NULL, store_hard_offline_page);
|
||||
|
||||
static __init int memory_fail_init(void)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = sysfs_create_file(&memory_sysdev_class.kset.kobj,
|
||||
&class_attr_soft_offline_page.attr);
|
||||
&attr_soft_offline_page.attr);
|
||||
if (!err)
|
||||
err = sysfs_create_file(&memory_sysdev_class.kset.kobj,
|
||||
&class_attr_hard_offline_page.attr);
|
||||
&attr_hard_offline_page.attr);
|
||||
return err;
|
||||
}
|
||||
#else
|
||||
|
|
|
@ -725,12 +725,11 @@ static struct pci_driver agp_amd64_pci_driver = {
|
|||
int __init agp_amd64_init(void)
|
||||
{
|
||||
int err = 0;
|
||||
static int done = 0;
|
||||
|
||||
if (agp_off)
|
||||
return -EINVAL;
|
||||
|
||||
if (done++)
|
||||
if (gart_iommu_aperture)
|
||||
return agp_bridges_found ? 0 : -ENODEV;
|
||||
|
||||
err = pci_register_driver(&agp_amd64_pci_driver);
|
||||
|
@ -771,6 +770,8 @@ int __init agp_amd64_init(void)
|
|||
|
||||
static void __exit agp_amd64_cleanup(void)
|
||||
{
|
||||
if (gart_iommu_aperture)
|
||||
return;
|
||||
if (aperture_resource)
|
||||
release_resource(aperture_resource);
|
||||
pci_unregister_driver(&agp_amd64_pci_driver);
|
||||
|
|
|
@ -2460,10 +2460,14 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
|
|||
&bridge->mode);
|
||||
}
|
||||
|
||||
if (bridge->driver->mask_memory == intel_i965_mask_memory)
|
||||
if (bridge->driver->mask_memory == intel_i965_mask_memory) {
|
||||
if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(36)))
|
||||
dev_err(&intel_private.pcidev->dev,
|
||||
"set gfx device dma mask 36bit failed!\n");
|
||||
else
|
||||
pci_set_consistent_dma_mask(intel_private.pcidev,
|
||||
DMA_BIT_MASK(36));
|
||||
}
|
||||
|
||||
pci_set_drvdata(pdev, bridge);
|
||||
return agp_add_bridge(bridge);
|
||||
|
|
|
@ -114,7 +114,7 @@ static struct virtio_device_id id_table[] = {
|
|||
{ 0 },
|
||||
};
|
||||
|
||||
static struct virtio_driver virtio_rng = {
|
||||
static struct virtio_driver virtio_rng_driver = {
|
||||
.driver.name = KBUILD_MODNAME,
|
||||
.driver.owner = THIS_MODULE,
|
||||
.id_table = id_table,
|
||||
|
@ -124,12 +124,12 @@ static struct virtio_driver virtio_rng = {
|
|||
|
||||
static int __init init(void)
|
||||
{
|
||||
return register_virtio_driver(&virtio_rng);
|
||||
return register_virtio_driver(&virtio_rng_driver);
|
||||
}
|
||||
|
||||
static void __exit fini(void)
|
||||
{
|
||||
unregister_virtio_driver(&virtio_rng);
|
||||
unregister_virtio_driver(&virtio_rng_driver);
|
||||
}
|
||||
module_init(init);
|
||||
module_exit(fini);
|
||||
|
|
|
@ -197,7 +197,7 @@ static int amd64_get_scrub_rate(struct mem_ctl_info *mci, u32 *bw)
|
|||
edac_printk(KERN_DEBUG, EDAC_MC,
|
||||
"pci-read, sdram scrub control value: %d \n", scrubval);
|
||||
|
||||
for (i = 0; ARRAY_SIZE(scrubrates); i++) {
|
||||
for (i = 0; i < ARRAY_SIZE(scrubrates); i++) {
|
||||
if (scrubrates[i].scrubval == scrubval) {
|
||||
*bw = scrubrates[i].bandwidth;
|
||||
status = 0;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue