Merge master.kernel.org:/home/rmk/linux-2.6-arm
Manual conflict merge of arch/arm/Kconfig
This commit is contained in:
@@ -10,7 +10,7 @@ config ARM
|
|||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
The ARM series is a line of low-power-consumption RISC chip designs
|
The ARM series is a line of low-power-consumption RISC chip designs
|
||||||
licensed by ARM ltd and targeted at embedded applications and
|
licensed by ARM Ltd and targeted at embedded applications and
|
||||||
handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
|
handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
|
||||||
manufactured, but legacy ARM-based PC hardware remains popular in
|
manufactured, but legacy ARM-based PC hardware remains popular in
|
||||||
Europe. There is an ARM Linux project with a web page at
|
Europe. There is an ARM Linux project with a web page at
|
||||||
@@ -84,45 +84,62 @@ config ARCH_CLPS7500
|
|||||||
bool "Cirrus-CL-PS7500FE"
|
bool "Cirrus-CL-PS7500FE"
|
||||||
select TIMER_ACORN
|
select TIMER_ACORN
|
||||||
select ISA
|
select ISA
|
||||||
|
help
|
||||||
|
Support for the Cirrus Logic PS7500FE system-on-a-chip.
|
||||||
|
|
||||||
config ARCH_CLPS711X
|
config ARCH_CLPS711X
|
||||||
bool "CLPS711x/EP721x-based"
|
bool "CLPS711x/EP721x-based"
|
||||||
|
help
|
||||||
|
Support for Cirrus Logic 711x/721x based boards.
|
||||||
|
|
||||||
config ARCH_CO285
|
config ARCH_CO285
|
||||||
bool "Co-EBSA285"
|
bool "Co-EBSA285"
|
||||||
select FOOTBRIDGE
|
select FOOTBRIDGE
|
||||||
select FOOTBRIDGE_ADDIN
|
select FOOTBRIDGE_ADDIN
|
||||||
|
help
|
||||||
|
Support for Intel's EBSA285 companion chip.
|
||||||
|
|
||||||
config ARCH_EBSA110
|
config ARCH_EBSA110
|
||||||
bool "EBSA-110"
|
bool "EBSA-110"
|
||||||
select ISA
|
select ISA
|
||||||
help
|
help
|
||||||
This is an evaluation board for the StrongARM processor available
|
This is an evaluation board for the StrongARM processor available
|
||||||
from Digital. It has limited hardware on-board, including an onboard
|
from Digital. It has limited hardware on-board, including an
|
||||||
Ethernet interface, two PCMCIA sockets, two serial ports and a
|
Ethernet interface, two PCMCIA sockets, two serial ports and a
|
||||||
parallel port.
|
parallel port.
|
||||||
|
|
||||||
config ARCH_FOOTBRIDGE
|
config ARCH_FOOTBRIDGE
|
||||||
bool "FootBridge"
|
bool "FootBridge"
|
||||||
select FOOTBRIDGE
|
select FOOTBRIDGE
|
||||||
|
help
|
||||||
|
Support for systems based on the DC21285 companion chip
|
||||||
|
("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
|
||||||
|
|
||||||
config ARCH_INTEGRATOR
|
config ARCH_INTEGRATOR
|
||||||
bool "Integrator"
|
bool "Integrator"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ICST525
|
select ICST525
|
||||||
|
help
|
||||||
|
Support for ARM's Integrator platform.
|
||||||
|
|
||||||
config ARCH_IOP3XX
|
config ARCH_IOP3XX
|
||||||
bool "IOP3xx-based"
|
bool "IOP3xx-based"
|
||||||
select PCI
|
select PCI
|
||||||
|
help
|
||||||
|
Support for Intel's IOP3XX (XScale) family of processors.
|
||||||
|
|
||||||
config ARCH_IXP4XX
|
config ARCH_IXP4XX
|
||||||
bool "IXP4xx-based"
|
bool "IXP4xx-based"
|
||||||
select DMABOUNCE
|
select DMABOUNCE
|
||||||
select PCI
|
select PCI
|
||||||
|
help
|
||||||
|
Support for Intel's IXP4XX (XScale) family of processors.
|
||||||
|
|
||||||
config ARCH_IXP2000
|
config ARCH_IXP2000
|
||||||
bool "IXP2400/2800-based"
|
bool "IXP2400/2800-based"
|
||||||
select PCI
|
select PCI
|
||||||
|
help
|
||||||
|
Support for Intel's IXP2400/2800 (XScale) family of processors.
|
||||||
|
|
||||||
config ARCH_L7200
|
config ARCH_L7200
|
||||||
bool "LinkUp-L7200"
|
bool "LinkUp-L7200"
|
||||||
@@ -140,6 +157,8 @@ config ARCH_L7200
|
|||||||
config ARCH_PXA
|
config ARCH_PXA
|
||||||
bool "PXA2xx-based"
|
bool "PXA2xx-based"
|
||||||
select ARCH_MTD_XIP
|
select ARCH_MTD_XIP
|
||||||
|
help
|
||||||
|
Support for Intel's PXA2XX processor line.
|
||||||
|
|
||||||
config ARCH_RPC
|
config ARCH_RPC
|
||||||
bool "RiscPC"
|
bool "RiscPC"
|
||||||
@@ -157,19 +176,24 @@ config ARCH_SA1100
|
|||||||
select ISA
|
select ISA
|
||||||
select ARCH_DISCONTIGMEM_ENABLE
|
select ARCH_DISCONTIGMEM_ENABLE
|
||||||
select ARCH_MTD_XIP
|
select ARCH_MTD_XIP
|
||||||
|
help
|
||||||
|
Support for StrongARM 11x0 based boards.
|
||||||
|
|
||||||
config ARCH_S3C2410
|
config ARCH_S3C2410
|
||||||
bool "Samsung S3C2410"
|
bool "Samsung S3C2410"
|
||||||
help
|
help
|
||||||
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
||||||
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
||||||
the Samsung SMDK2410 development board (and derviatives).
|
the Samsung SMDK2410 development board (and derivatives).
|
||||||
|
|
||||||
config ARCH_SHARK
|
config ARCH_SHARK
|
||||||
bool "Shark"
|
bool "Shark"
|
||||||
select ISA
|
select ISA
|
||||||
select ISA_DMA
|
select ISA_DMA
|
||||||
select PCI
|
select PCI
|
||||||
|
help
|
||||||
|
Support for the StrongARM based Digital DNARD machine, also known
|
||||||
|
as "Shark" (<http://www.shark-linux.de/shark.html>).
|
||||||
|
|
||||||
config ARCH_LH7A40X
|
config ARCH_LH7A40X
|
||||||
bool "Sharp LH7A40X"
|
bool "Sharp LH7A40X"
|
||||||
@@ -181,6 +205,8 @@ config ARCH_LH7A40X
|
|||||||
|
|
||||||
config ARCH_OMAP
|
config ARCH_OMAP
|
||||||
bool "TI OMAP"
|
bool "TI OMAP"
|
||||||
|
help
|
||||||
|
Support for TI's OMAP platform (OMAP1 and OMAP2).
|
||||||
|
|
||||||
config ARCH_VERSATILE
|
config ARCH_VERSATILE
|
||||||
bool "Versatile"
|
bool "Versatile"
|
||||||
@@ -199,6 +225,8 @@ config ARCH_REALVIEW
|
|||||||
|
|
||||||
config ARCH_IMX
|
config ARCH_IMX
|
||||||
bool "IMX"
|
bool "IMX"
|
||||||
|
help
|
||||||
|
Support for Motorola's i.MX family of processors (MX1, MXL).
|
||||||
|
|
||||||
config ARCH_H720X
|
config ARCH_H720X
|
||||||
bool "Hynix-HMS720x-based"
|
bool "Hynix-HMS720x-based"
|
||||||
@@ -215,8 +243,8 @@ config ARCH_AAEC2000
|
|||||||
config ARCH_AT91RM9200
|
config ARCH_AT91RM9200
|
||||||
bool "AT91RM9200"
|
bool "AT91RM9200"
|
||||||
help
|
help
|
||||||
Say Y here if you intend to run this kernel on an AT91RM9200-based
|
Say Y here if you intend to run this kernel on an Atmel
|
||||||
board.
|
AT91RM9200-based board.
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
@@ -422,8 +450,8 @@ config AEABI
|
|||||||
To use this you need GCC version 4.0.0 or later.
|
To use this you need GCC version 4.0.0 or later.
|
||||||
|
|
||||||
config OABI_COMPAT
|
config OABI_COMPAT
|
||||||
bool "Allow old ABI binaries to run with this kernel"
|
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
|
||||||
depends on AEABI
|
depends on AEABI && EXPERIMENTAL
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option preserves the old syscall interface along with the
|
This option preserves the old syscall interface along with the
|
||||||
|
@@ -171,7 +171,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||||||
#
|
#
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||||
# CONFIG_XIP_KERNEL is not set
|
# CONFIG_XIP_KERNEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||||||
#
|
#
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
CONFIG_CMDLINE="console=ttyS0,57600 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||||
# CONFIG_XIP_KERNEL is not set
|
# CONFIG_XIP_KERNEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||||||
#
|
#
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware"
|
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||||
# CONFIG_XIP_KERNEL is not set
|
# CONFIG_XIP_KERNEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -172,7 +172,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||||||
#
|
#
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0 pci=firmware ixdp2x01_clock=50000000"
|
CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/nfs ip=bootp mem=64M@0x0"
|
||||||
# CONFIG_XIP_KERNEL is not set
|
# CONFIG_XIP_KERNEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -1,11 +1,10 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.15-rc1
|
# Linux kernel version: 2.6.16-rc2
|
||||||
# Sun Nov 13 17:41:24 2005
|
# Mon Feb 6 11:17:23 2006
|
||||||
#
|
#
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_UID16=y
|
|
||||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
|
||||||
@@ -28,27 +27,31 @@ CONFIG_SYSVIPC=y
|
|||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
# CONFIG_HOTPLUG is not set
|
|
||||||
CONFIG_KOBJECT_UEVENT=y
|
|
||||||
# CONFIG_IKCONFIG is not set
|
# CONFIG_IKCONFIG is not set
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_UID16=y
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
# CONFIG_EMBEDDED is not set
|
# CONFIG_EMBEDDED is not set
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
# CONFIG_KALLSYMS_ALL is not set
|
# CONFIG_KALLSYMS_ALL is not set
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
CONFIG_CC_ALIGN_LABELS=0
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
CONFIG_CC_ALIGN_LOOPS=0
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
CONFIG_CC_ALIGN_JUMPS=0
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
CONFIG_SLAB=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
|
# CONFIG_SLOB is not set
|
||||||
|
CONFIG_OBSOLETE_INTERMODULE=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Loadable module support
|
# Loadable module support
|
||||||
@@ -102,6 +105,7 @@ CONFIG_ARCH_S3C2410=y
|
|||||||
# CONFIG_ARCH_IMX is not set
|
# CONFIG_ARCH_IMX is not set
|
||||||
# CONFIG_ARCH_H720X is not set
|
# CONFIG_ARCH_H720X is not set
|
||||||
# CONFIG_ARCH_AAEC2000 is not set
|
# CONFIG_ARCH_AAEC2000 is not set
|
||||||
|
# CONFIG_ARCH_AT91RM9200 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# S3C24XX Implementations
|
# S3C24XX Implementations
|
||||||
@@ -160,7 +164,6 @@ CONFIG_CPU_TLB_V4WBI=y
|
|||||||
# Bus support
|
# Bus support
|
||||||
#
|
#
|
||||||
CONFIG_ISA=y
|
CONFIG_ISA=y
|
||||||
CONFIG_ISA_DMA_API=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# PCCARD (PCMCIA/CardBus) support
|
# PCCARD (PCMCIA/CardBus) support
|
||||||
@@ -172,6 +175,7 @@ CONFIG_ISA_DMA_API=y
|
|||||||
#
|
#
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
# CONFIG_NO_IDLE_HZ is not set
|
# CONFIG_NO_IDLE_HZ is not set
|
||||||
|
# CONFIG_AEABI is not set
|
||||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||||
CONFIG_SELECT_MEMORY_MODEL=y
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
CONFIG_FLATMEM_MANUAL=y
|
CONFIG_FLATMEM_MANUAL=y
|
||||||
@@ -214,6 +218,8 @@ CONFIG_BINFMT_AOUT=y
|
|||||||
# Power management options
|
# Power management options
|
||||||
#
|
#
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
|
CONFIG_PM_LEGACY=y
|
||||||
|
# CONFIG_PM_DEBUG is not set
|
||||||
CONFIG_APM=y
|
CONFIG_APM=y
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -259,6 +265,11 @@ CONFIG_TCP_CONG_BIC=y
|
|||||||
# SCTP Configuration (EXPERIMENTAL)
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
# CONFIG_IP_SCTP is not set
|
# CONFIG_IP_SCTP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TIPC Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_TIPC is not set
|
||||||
# CONFIG_ATM is not set
|
# CONFIG_ATM is not set
|
||||||
# CONFIG_BRIDGE is not set
|
# CONFIG_BRIDGE is not set
|
||||||
# CONFIG_VLAN_8021Q is not set
|
# CONFIG_VLAN_8021Q is not set
|
||||||
@@ -276,7 +287,6 @@ CONFIG_TCP_CONG_BIC=y
|
|||||||
# QoS and/or fair queueing
|
# QoS and/or fair queueing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
# CONFIG_NET_CLS_ROUTE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
@@ -299,6 +309,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||||||
# CONFIG_FW_LOADER is not set
|
# CONFIG_FW_LOADER is not set
|
||||||
# CONFIG_DEBUG_DRIVER is not set
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Connector - unified userspace <-> kernelspace linker
|
||||||
|
#
|
||||||
|
# CONFIG_CONNECTOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Memory Technology Devices (MTD)
|
# Memory Technology Devices (MTD)
|
||||||
#
|
#
|
||||||
@@ -412,8 +427,6 @@ CONFIG_PARPORT_1284=y
|
|||||||
#
|
#
|
||||||
# Block devices
|
# Block devices
|
||||||
#
|
#
|
||||||
# CONFIG_BLK_DEV_XD is not set
|
|
||||||
# CONFIG_PARIDE is not set
|
|
||||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||||
@@ -502,7 +515,6 @@ CONFIG_NETDEVICES=y
|
|||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
# CONFIG_NET_VENDOR_3COM is not set
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
# CONFIG_LANCE is not set
|
|
||||||
# CONFIG_NET_VENDOR_SMC is not set
|
# CONFIG_NET_VENDOR_SMC is not set
|
||||||
# CONFIG_SMC91X is not set
|
# CONFIG_SMC91X is not set
|
||||||
CONFIG_DM9000=y
|
CONFIG_DM9000=y
|
||||||
@@ -607,11 +619,11 @@ CONFIG_SERIAL_NONSTANDARD=y
|
|||||||
# CONFIG_ROCKETPORT is not set
|
# CONFIG_ROCKETPORT is not set
|
||||||
# CONFIG_CYCLADES is not set
|
# CONFIG_CYCLADES is not set
|
||||||
# CONFIG_DIGIEPCA is not set
|
# CONFIG_DIGIEPCA is not set
|
||||||
# CONFIG_ESPSERIAL is not set
|
|
||||||
# CONFIG_MOXA_INTELLIO is not set
|
# CONFIG_MOXA_INTELLIO is not set
|
||||||
# CONFIG_MOXA_SMARTIO is not set
|
# CONFIG_MOXA_SMARTIO is not set
|
||||||
# CONFIG_ISI is not set
|
# CONFIG_ISI is not set
|
||||||
# CONFIG_SYNCLINKMP is not set
|
# CONFIG_SYNCLINKMP is not set
|
||||||
|
# CONFIG_SYNCLINK_GT is not set
|
||||||
# CONFIG_N_HDLC is not set
|
# CONFIG_N_HDLC is not set
|
||||||
# CONFIG_RISCOM8 is not set
|
# CONFIG_RISCOM8 is not set
|
||||||
# CONFIG_SPECIALIX is not set
|
# CONFIG_SPECIALIX is not set
|
||||||
@@ -625,6 +637,7 @@ CONFIG_SERIAL_NONSTANDARD=y
|
|||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=8
|
CONFIG_SERIAL_8250_NR_UARTS=8
|
||||||
|
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
@@ -687,6 +700,7 @@ CONFIG_S3C2410_RTC=y
|
|||||||
#
|
#
|
||||||
# TPM devices
|
# TPM devices
|
||||||
#
|
#
|
||||||
|
# CONFIG_TCG_TPM is not set
|
||||||
# CONFIG_TELCLOCK is not set
|
# CONFIG_TELCLOCK is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -730,6 +744,12 @@ CONFIG_SENSORS_EEPROM=m
|
|||||||
# CONFIG_I2C_DEBUG_BUS is not set
|
# CONFIG_I2C_DEBUG_BUS is not set
|
||||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI support
|
||||||
|
#
|
||||||
|
# CONFIG_SPI is not set
|
||||||
|
# CONFIG_SPI_MASTER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Hardware Monitoring support
|
# Hardware Monitoring support
|
||||||
#
|
#
|
||||||
@@ -863,6 +883,7 @@ CONFIG_FS_MBCACHE=y
|
|||||||
# CONFIG_JFS_FS is not set
|
# CONFIG_JFS_FS is not set
|
||||||
# CONFIG_FS_POSIX_ACL is not set
|
# CONFIG_FS_POSIX_ACL is not set
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_OCFS2_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
CONFIG_ROMFS_FS=y
|
CONFIG_ROMFS_FS=y
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
@@ -897,6 +918,7 @@ CONFIG_SYSFS=y
|
|||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_RAMFS=y
|
CONFIG_RAMFS=y
|
||||||
# CONFIG_RELAYFS_FS is not set
|
# CONFIG_RELAYFS_FS is not set
|
||||||
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Miscellaneous filesystems
|
# Miscellaneous filesystems
|
||||||
@@ -965,6 +987,7 @@ CONFIG_SOLARIS_X86_PARTITION=y
|
|||||||
# CONFIG_SGI_PARTITION is not set
|
# CONFIG_SGI_PARTITION is not set
|
||||||
# CONFIG_ULTRIX_PARTITION is not set
|
# CONFIG_ULTRIX_PARTITION is not set
|
||||||
# CONFIG_SUN_PARTITION is not set
|
# CONFIG_SUN_PARTITION is not set
|
||||||
|
# CONFIG_KARMA_PARTITION is not set
|
||||||
# CONFIG_EFI_PARTITION is not set
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1020,12 +1043,13 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
|||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
@@ -1034,6 +1058,7 @@ CONFIG_DEBUG_INFO=y
|
|||||||
# CONFIG_DEBUG_FS is not set
|
# CONFIG_DEBUG_FS is not set
|
||||||
# CONFIG_DEBUG_VM is not set
|
# CONFIG_DEBUG_VM is not set
|
||||||
CONFIG_FRAME_POINTER=y
|
CONFIG_FRAME_POINTER=y
|
||||||
|
CONFIG_FORCED_INLINING=y
|
||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
CONFIG_DEBUG_USER=y
|
CONFIG_DEBUG_USER=y
|
||||||
# CONFIG_DEBUG_WAITQ is not set
|
# CONFIG_DEBUG_WAITQ is not set
|
||||||
|
@@ -291,21 +291,21 @@
|
|||||||
CALL(sys_mq_getsetattr)
|
CALL(sys_mq_getsetattr)
|
||||||
/* 280 */ CALL(sys_waitid)
|
/* 280 */ CALL(sys_waitid)
|
||||||
CALL(sys_socket)
|
CALL(sys_socket)
|
||||||
CALL(sys_bind)
|
CALL(ABI(sys_bind, sys_oabi_bind))
|
||||||
CALL(sys_connect)
|
CALL(ABI(sys_connect, sys_oabi_connect))
|
||||||
CALL(sys_listen)
|
CALL(sys_listen)
|
||||||
/* 285 */ CALL(sys_accept)
|
/* 285 */ CALL(sys_accept)
|
||||||
CALL(sys_getsockname)
|
CALL(sys_getsockname)
|
||||||
CALL(sys_getpeername)
|
CALL(sys_getpeername)
|
||||||
CALL(sys_socketpair)
|
CALL(sys_socketpair)
|
||||||
CALL(sys_send)
|
CALL(sys_send)
|
||||||
/* 290 */ CALL(sys_sendto)
|
/* 290 */ CALL(ABI(sys_sendto, sys_oabi_sendto))
|
||||||
CALL(sys_recv)
|
CALL(sys_recv)
|
||||||
CALL(sys_recvfrom)
|
CALL(sys_recvfrom)
|
||||||
CALL(sys_shutdown)
|
CALL(sys_shutdown)
|
||||||
CALL(sys_setsockopt)
|
CALL(sys_setsockopt)
|
||||||
/* 295 */ CALL(sys_getsockopt)
|
/* 295 */ CALL(sys_getsockopt)
|
||||||
CALL(sys_sendmsg)
|
CALL(ABI(sys_sendmsg, sys_oabi_sendmsg))
|
||||||
CALL(sys_recvmsg)
|
CALL(sys_recvmsg)
|
||||||
CALL(ABI(sys_semop, sys_oabi_semop))
|
CALL(ABI(sys_semop, sys_oabi_semop))
|
||||||
CALL(sys_semget)
|
CALL(sys_semget)
|
||||||
|
@@ -333,9 +333,13 @@ __pabt_svc:
|
|||||||
@ from the exception stack
|
@ from the exception stack
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
|
#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
|
||||||
|
#ifndef CONFIG_MMU
|
||||||
|
#warning "NPTL on non MMU needs fixing"
|
||||||
|
#else
|
||||||
@ make sure our user space atomic helper is aborted
|
@ make sure our user space atomic helper is aborted
|
||||||
cmp r2, #TASK_SIZE
|
cmp r2, #TASK_SIZE
|
||||||
bichs r3, r3, #PSR_Z_BIT
|
bichs r3, r3, #PSR_Z_BIT
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@
|
@
|
||||||
@@ -705,7 +709,12 @@ __kuser_memory_barrier: @ 0xffff0fa0
|
|||||||
* The C flag is also set if *ptr was changed to allow for assembly
|
* The C flag is also set if *ptr was changed to allow for assembly
|
||||||
* optimization in the calling code.
|
* optimization in the calling code.
|
||||||
*
|
*
|
||||||
* Note: this routine already includes memory barriers as needed.
|
* Notes:
|
||||||
|
*
|
||||||
|
* - This routine already includes memory barriers as needed.
|
||||||
|
*
|
||||||
|
* - A failure might be transient, i.e. it is possible, although unlikely,
|
||||||
|
* that "failure" be returned even if *ptr == oldval.
|
||||||
*
|
*
|
||||||
* For example, a user space atomic_add implementation could look like this:
|
* For example, a user space atomic_add implementation could look like this:
|
||||||
*
|
*
|
||||||
@@ -756,12 +765,18 @@ __kuser_cmpxchg: @ 0xffff0fc0
|
|||||||
* exception happening just after the str instruction which would
|
* exception happening just after the str instruction which would
|
||||||
* clear the Z flag although the exchange was done.
|
* clear the Z flag although the exchange was done.
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
teq ip, ip @ set Z flag
|
teq ip, ip @ set Z flag
|
||||||
ldr ip, [r2] @ load current val
|
ldr ip, [r2] @ load current val
|
||||||
add r3, r2, #1 @ prepare store ptr
|
add r3, r2, #1 @ prepare store ptr
|
||||||
teqeq ip, r0 @ compare with oldval if still allowed
|
teqeq ip, r0 @ compare with oldval if still allowed
|
||||||
streq r1, [r3, #-1]! @ store newval if still allowed
|
streq r1, [r3, #-1]! @ store newval if still allowed
|
||||||
subs r0, r2, r3 @ if r2 == r3 the str occured
|
subs r0, r2, r3 @ if r2 == r3 the str occured
|
||||||
|
#else
|
||||||
|
#warning "NPTL on non MMU needs fixing"
|
||||||
|
mov r0, #-1
|
||||||
|
adds r0, r0, #0
|
||||||
|
#endif
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@@ -59,6 +59,16 @@
|
|||||||
* struct sembuf loses its padding with EABI. Since arrays of them are
|
* struct sembuf loses its padding with EABI. Since arrays of them are
|
||||||
* used they have to be copyed to remove the padding. Compatibility wrappers
|
* used they have to be copyed to remove the padding. Compatibility wrappers
|
||||||
* provided below.
|
* provided below.
|
||||||
|
*
|
||||||
|
* sys_bind:
|
||||||
|
* sys_connect:
|
||||||
|
* sys_sendmsg:
|
||||||
|
* sys_sendto:
|
||||||
|
*
|
||||||
|
* struct sockaddr_un loses its padding with EABI. Since the size of the
|
||||||
|
* structure is used as a validation test in unix_mkname(), we need to
|
||||||
|
* change the length argument to 110 whenever it is 112. Compatibility
|
||||||
|
* wrappers provided below.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
@@ -67,6 +77,7 @@
|
|||||||
#include <linux/fcntl.h>
|
#include <linux/fcntl.h>
|
||||||
#include <linux/eventpoll.h>
|
#include <linux/eventpoll.h>
|
||||||
#include <linux/sem.h>
|
#include <linux/sem.h>
|
||||||
|
#include <linux/socket.h>
|
||||||
#include <asm/ipc.h>
|
#include <asm/ipc.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
@@ -337,3 +348,63 @@ asmlinkage int sys_oabi_ipc(uint call, int first, int second, int third,
|
|||||||
return sys_ipc(call, first, second, third, ptr, fifth);
|
return sys_ipc(call, first, second, third, ptr, fifth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys_oabi_bind(int fd, struct sockaddr __user *addr, int addrlen)
|
||||||
|
{
|
||||||
|
sa_family_t sa_family;
|
||||||
|
if (addrlen == 112 &&
|
||||||
|
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||||
|
sa_family == AF_UNIX)
|
||||||
|
addrlen = 110;
|
||||||
|
return sys_bind(fd, addr, addrlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys_oabi_connect(int fd, struct sockaddr __user *addr, int addrlen)
|
||||||
|
{
|
||||||
|
sa_family_t sa_family;
|
||||||
|
if (addrlen == 112 &&
|
||||||
|
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||||
|
sa_family == AF_UNIX)
|
||||||
|
addrlen = 110;
|
||||||
|
return sys_connect(fd, addr, addrlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys_oabi_sendto(int fd, void __user *buff,
|
||||||
|
size_t len, unsigned flags,
|
||||||
|
struct sockaddr __user *addr,
|
||||||
|
int addrlen)
|
||||||
|
{
|
||||||
|
sa_family_t sa_family;
|
||||||
|
if (addrlen == 112 &&
|
||||||
|
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||||
|
sa_family == AF_UNIX)
|
||||||
|
addrlen = 110;
|
||||||
|
return sys_sendto(fd, buff, len, flags, addr, addrlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
|
||||||
|
{
|
||||||
|
struct sockaddr __user *addr;
|
||||||
|
int msg_namelen;
|
||||||
|
sa_family_t sa_family;
|
||||||
|
if (msg &&
|
||||||
|
get_user(msg_namelen, &msg->msg_namelen) == 0 &&
|
||||||
|
msg_namelen == 112 &&
|
||||||
|
get_user(addr, &msg->msg_name) == 0 &&
|
||||||
|
get_user(sa_family, &addr->sa_family) == 0 &&
|
||||||
|
sa_family == AF_UNIX)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* HACK ALERT: there is a limit to how much backward bending
|
||||||
|
* we should do for what is actually a transitional
|
||||||
|
* compatibility layer. This already has known flaws with
|
||||||
|
* a few ioctls that we don't intend to fix. Therefore
|
||||||
|
* consider this blatent hack as another one... and take care
|
||||||
|
* to run for cover. In most cases it will "just work fine".
|
||||||
|
* If it doesn't, well, tough.
|
||||||
|
*/
|
||||||
|
put_user(110, &msg->msg_namelen);
|
||||||
|
}
|
||||||
|
return sys_sendmsg(fd, msg, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -24,6 +24,8 @@ config ARCH_CEIVA
|
|||||||
|
|
||||||
config ARCH_CLEP7312
|
config ARCH_CLEP7312
|
||||||
bool "CLEP7312"
|
bool "CLEP7312"
|
||||||
|
help
|
||||||
|
Boards based on the Cirrus Logic 7212/7312 chips.
|
||||||
|
|
||||||
config ARCH_EDB7211
|
config ARCH_EDB7211
|
||||||
bool "EDB7211"
|
bool "EDB7211"
|
||||||
|
@@ -106,6 +106,7 @@ static void __init enp2611_pci_preinit(void)
|
|||||||
{
|
{
|
||||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
||||||
ixp2000_pci_preinit();
|
ixp2000_pci_preinit();
|
||||||
|
pcibios_setup("firmware");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int enp2611_pci_valid_device(struct pci_bus *bus,
|
static inline int enp2611_pci_valid_device(struct pci_bus *bus,
|
||||||
|
@@ -68,6 +68,7 @@ void __init ixdp2400_pci_preinit(void)
|
|||||||
{
|
{
|
||||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00100000);
|
||||||
ixp2000_pci_preinit();
|
ixp2000_pci_preinit();
|
||||||
|
pcibios_setup("firmware");
|
||||||
}
|
}
|
||||||
|
|
||||||
int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys)
|
int ixdp2400_pci_setup(int nr, struct pci_sys_data *sys)
|
||||||
|
@@ -212,6 +212,7 @@ void __init ixdp2x01_pci_preinit(void)
|
|||||||
{
|
{
|
||||||
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000);
|
ixp2000_reg_write(IXP2000_PCI_ADDR_EXT, 0x00000000);
|
||||||
ixp2000_pci_preinit();
|
ixp2000_pci_preinit();
|
||||||
|
pcibios_setup("firmware");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEVPIN(dev, pin) ((pin) | ((dev) << 3))
|
#define DEVPIN(dev, pin) ((pin) | ((dev) << 3))
|
||||||
@@ -299,7 +300,9 @@ struct hw_pci ixdp2x01_pci __initdata = {
|
|||||||
|
|
||||||
int __init ixdp2x01_pci_init(void)
|
int __init ixdp2x01_pci_init(void)
|
||||||
{
|
{
|
||||||
|
if (machine_is_ixdp2401() || machine_is_ixdp2801())
|
||||||
pci_common_init(&ixdp2x01_pci);
|
pci_common_init(&ixdp2x01_pci);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
static void __init omap_generic_init_irq(void)
|
static void __init omap_generic_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +105,7 @@ static void __init omap_generic_init(void)
|
|||||||
|
|
||||||
static void __init omap_generic_map_io(void)
|
static void __init omap_generic_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
|
MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
|
||||||
|
@@ -128,6 +128,7 @@ static void __init h2_init_smc91x(void)
|
|||||||
|
|
||||||
static void __init h2_init_irq(void)
|
static void __init h2_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
h2_init_smc91x();
|
h2_init_smc91x();
|
||||||
@@ -194,7 +195,7 @@ static void __init h2_init(void)
|
|||||||
|
|
||||||
static void __init h2_map_io(void)
|
static void __init h2_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_H2, "TI-H2")
|
MACHINE_START(OMAP_H2, "TI-H2")
|
||||||
|
@@ -203,6 +203,7 @@ static void __init h3_init_smc91x(void)
|
|||||||
|
|
||||||
void h3_init_irq(void)
|
void h3_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
h3_init_smc91x();
|
h3_init_smc91x();
|
||||||
@@ -210,7 +211,7 @@ void h3_init_irq(void)
|
|||||||
|
|
||||||
static void __init h3_map_io(void)
|
static void __init h3_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
|
MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
|
||||||
|
@@ -181,6 +181,7 @@ static void __init innovator_init_smc91x(void)
|
|||||||
|
|
||||||
void innovator_init_irq(void)
|
void innovator_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
#ifdef CONFIG_ARCH_OMAP15XX
|
#ifdef CONFIG_ARCH_OMAP15XX
|
||||||
@@ -285,7 +286,7 @@ static void __init innovator_init(void)
|
|||||||
|
|
||||||
static void __init innovator_map_io(void)
|
static void __init innovator_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_OMAP15XX
|
#ifdef CONFIG_ARCH_OMAP15XX
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap1510()) {
|
||||||
|
@@ -65,6 +65,7 @@ static struct omap_board_config_kernel netstar_config[] = {
|
|||||||
|
|
||||||
static void __init netstar_init_irq(void)
|
static void __init netstar_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
}
|
}
|
||||||
@@ -108,7 +109,7 @@ static void __init netstar_init(void)
|
|||||||
|
|
||||||
static void __init netstar_map_io(void)
|
static void __init netstar_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MACHINE_PANICED 1
|
#define MACHINE_PANICED 1
|
||||||
|
@@ -169,6 +169,7 @@ static void __init osk_init_cf(void)
|
|||||||
|
|
||||||
static void __init osk_init_irq(void)
|
static void __init osk_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
osk_init_smc91x();
|
osk_init_smc91x();
|
||||||
@@ -269,7 +270,7 @@ static void __init osk_init(void)
|
|||||||
|
|
||||||
static void __init osk_map_io(void)
|
static void __init osk_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_OSK, "TI-OSK")
|
MACHINE_START(OMAP_OSK, "TI-OSK")
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
static void __init omap_generic_init_irq(void)
|
static void __init omap_generic_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +73,7 @@ static void __init omap_generic_init(void)
|
|||||||
|
|
||||||
static void __init omap_generic_map_io(void)
|
static void __init omap_generic_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
|
MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
|
||||||
|
@@ -144,6 +144,7 @@ static void __init perseus2_init_smc91x(void)
|
|||||||
|
|
||||||
void omap_perseus2_init_irq(void)
|
void omap_perseus2_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
perseus2_init_smc91x();
|
perseus2_init_smc91x();
|
||||||
@@ -160,7 +161,7 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = {
|
|||||||
|
|
||||||
static void __init omap_perseus2_map_io(void)
|
static void __init omap_perseus2_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
iotable_init(omap_perseus2_io_desc,
|
iotable_init(omap_perseus2_io_desc,
|
||||||
ARRAY_SIZE(omap_perseus2_io_desc));
|
ARRAY_SIZE(omap_perseus2_io_desc));
|
||||||
|
|
||||||
|
@@ -162,6 +162,7 @@ static struct omap_board_config_kernel voiceblue_config[] = {
|
|||||||
|
|
||||||
static void __init voiceblue_init_irq(void)
|
static void __init voiceblue_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap1_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
}
|
}
|
||||||
@@ -206,7 +207,7 @@ static void __init voiceblue_init(void)
|
|||||||
|
|
||||||
static void __init voiceblue_map_io(void)
|
static void __init voiceblue_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap1_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MACHINE_PANICED 1
|
#define MACHINE_PANICED 1
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
#include <asm/tlb.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/arch/mux.h>
|
#include <asm/arch/mux.h>
|
||||||
@@ -83,15 +84,24 @@ static struct map_desc omap16xx_io_desc[] __initdata = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int initialized = 0;
|
/*
|
||||||
|
* Maps common IO regions for omap1. This should only get called from
|
||||||
static void __init _omap_map_io(void)
|
* board specific init.
|
||||||
|
*/
|
||||||
|
void __init omap1_map_common_io(void)
|
||||||
{
|
{
|
||||||
initialized = 1;
|
|
||||||
|
|
||||||
/* We have to initialize the IO space mapping before we can run
|
|
||||||
* cpu_is_omapxxx() macros. */
|
|
||||||
iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
|
iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
|
||||||
|
|
||||||
|
/* Normally devicemaps_init() would flush caches and tlb after
|
||||||
|
* mdesc->map_io(), but we must also do it here because of the CPU
|
||||||
|
* revision check below.
|
||||||
|
*/
|
||||||
|
local_flush_tlb_all();
|
||||||
|
flush_cache_all();
|
||||||
|
|
||||||
|
/* We want to check CPU revision early for cpu_is_omapxxxx() macros.
|
||||||
|
* IO space mapping must be initialized before we can do that.
|
||||||
|
*/
|
||||||
omap_check_revision();
|
omap_check_revision();
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_OMAP730
|
#ifdef CONFIG_ARCH_OMAP730
|
||||||
@@ -111,7 +121,14 @@ static void __init _omap_map_io(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
omap_sram_init();
|
omap_sram_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Common low-level hardware init for omap1. This should only get called from
|
||||||
|
* board specific init.
|
||||||
|
*/
|
||||||
|
void __init omap1_init_common_hw()
|
||||||
|
{
|
||||||
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
|
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
|
||||||
* on a Posted Write in the TIPB Bridge".
|
* on a Posted Write in the TIPB Bridge".
|
||||||
*/
|
*/
|
||||||
@@ -121,16 +138,7 @@ static void __init _omap_map_io(void)
|
|||||||
/* Must init clocks early to assure that timer interrupt works
|
/* Must init clocks early to assure that timer interrupt works
|
||||||
*/
|
*/
|
||||||
omap1_clk_init();
|
omap1_clk_init();
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This should only get called from board specific init
|
|
||||||
*/
|
|
||||||
void __init omap_map_common_io(void)
|
|
||||||
{
|
|
||||||
if (!initialized) {
|
|
||||||
_omap_map_io();
|
|
||||||
omap1_mux_init();
|
omap1_mux_init();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
static void __init omap_generic_init_irq(void)
|
static void __init omap_generic_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap2_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ static void __init omap_generic_init(void)
|
|||||||
|
|
||||||
static void __init omap_generic_map_io(void)
|
static void __init omap_generic_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap2_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
|
MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
|
||||||
|
@@ -136,6 +136,7 @@ static inline void __init h4_init_smc91x(void)
|
|||||||
|
|
||||||
static void __init omap_h4_init_irq(void)
|
static void __init omap_h4_init_irq(void)
|
||||||
{
|
{
|
||||||
|
omap2_init_common_hw();
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
omap_gpio_init();
|
omap_gpio_init();
|
||||||
h4_init_smc91x();
|
h4_init_smc91x();
|
||||||
@@ -181,7 +182,7 @@ static void __init omap_h4_init(void)
|
|||||||
|
|
||||||
static void __init omap_h4_map_io(void)
|
static void __init omap_h4_map_io(void)
|
||||||
{
|
{
|
||||||
omap_map_common_io();
|
omap2_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
|
MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
|
||||||
|
@@ -182,7 +182,7 @@ static const struct icst307_params realview_oscvco_params = {
|
|||||||
static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco)
|
static void realview_oscvco_set(struct clk *clk, struct icst307_vco vco)
|
||||||
{
|
{
|
||||||
void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
|
void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
|
||||||
void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC1_OFFSET;
|
void __iomem *sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
val = readl(sys_osc) & ~0x7ffff;
|
val = readl(sys_osc) & ~0x7ffff;
|
||||||
|
@@ -40,7 +40,6 @@
|
|||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
#include <asm/hardware.h>
|
#include <asm/hardware.h>
|
||||||
#include <asm/atomic.h>
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
@@ -59,22 +58,18 @@ static DEFINE_MUTEX(clocks_mutex);
|
|||||||
void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable)
|
void inline s3c24xx_clk_enable(unsigned int clocks, unsigned int enable)
|
||||||
{
|
{
|
||||||
unsigned long clkcon;
|
unsigned long clkcon;
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
clkcon = __raw_readl(S3C2410_CLKCON);
|
clkcon = __raw_readl(S3C2410_CLKCON);
|
||||||
clkcon &= ~clocks;
|
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
clkcon |= clocks;
|
clkcon |= clocks;
|
||||||
|
else
|
||||||
|
clkcon &= ~clocks;
|
||||||
|
|
||||||
/* ensure none of the special function bits set */
|
/* ensure none of the special function bits set */
|
||||||
clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
|
clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
|
||||||
|
|
||||||
__raw_writel(clkcon, S3C2410_CLKCON);
|
__raw_writel(clkcon, S3C2410_CLKCON);
|
||||||
|
|
||||||
local_irq_restore(flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* enable and disable calls for use with the clk struct */
|
/* enable and disable calls for use with the clk struct */
|
||||||
@@ -138,16 +133,32 @@ void clk_put(struct clk *clk)
|
|||||||
|
|
||||||
int clk_enable(struct clk *clk)
|
int clk_enable(struct clk *clk)
|
||||||
{
|
{
|
||||||
if (IS_ERR(clk))
|
if (IS_ERR(clk) || clk == NULL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return (clk->enable)(clk, 1);
|
clk_enable(clk->parent);
|
||||||
|
|
||||||
|
mutex_lock(&clocks_mutex);
|
||||||
|
|
||||||
|
if ((clk->usage++) == 0)
|
||||||
|
(clk->enable)(clk, 1);
|
||||||
|
|
||||||
|
mutex_unlock(&clocks_mutex);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clk_disable(struct clk *clk)
|
void clk_disable(struct clk *clk)
|
||||||
{
|
{
|
||||||
if (!IS_ERR(clk))
|
if (IS_ERR(clk) || clk == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mutex_lock(&clocks_mutex);
|
||||||
|
|
||||||
|
if ((--clk->usage) == 0)
|
||||||
(clk->enable)(clk, 0);
|
(clk->enable)(clk, 0);
|
||||||
|
|
||||||
|
mutex_unlock(&clocks_mutex);
|
||||||
|
clk_disable(clk->parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -361,6 +372,14 @@ int s3c24xx_register_clock(struct clk *clk)
|
|||||||
if (clk->enable == NULL)
|
if (clk->enable == NULL)
|
||||||
clk->enable = clk_null_enable;
|
clk->enable = clk_null_enable;
|
||||||
|
|
||||||
|
/* if this is a standard clock, set the usage state */
|
||||||
|
|
||||||
|
if (clk->ctrlbit) {
|
||||||
|
unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
|
||||||
|
|
||||||
|
clk->usage = (clkcon & clk->ctrlbit) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* add to the list of available clocks */
|
/* add to the list of available clocks */
|
||||||
|
|
||||||
mutex_lock(&clocks_mutex);
|
mutex_lock(&clocks_mutex);
|
||||||
@@ -402,6 +421,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
|
|||||||
* the LCD clock if it is not needed.
|
* the LCD clock if it is not needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
mutex_lock(&clocks_mutex);
|
||||||
|
|
||||||
s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0);
|
s3c24xx_clk_enable(S3C2410_CLKCON_NAND, 0);
|
||||||
s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0);
|
s3c24xx_clk_enable(S3C2410_CLKCON_USBH, 0);
|
||||||
s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0);
|
s3c24xx_clk_enable(S3C2410_CLKCON_USBD, 0);
|
||||||
@@ -409,6 +430,8 @@ int __init s3c24xx_setup_clocks(unsigned long xtal,
|
|||||||
s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0);
|
s3c24xx_clk_enable(S3C2410_CLKCON_IIC, 0);
|
||||||
s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0);
|
s3c24xx_clk_enable(S3C2410_CLKCON_SPI, 0);
|
||||||
|
|
||||||
|
mutex_unlock(&clocks_mutex);
|
||||||
|
|
||||||
/* assume uart clocks are correctly setup */
|
/* assume uart clocks are correctly setup */
|
||||||
|
|
||||||
/* register our clocks */
|
/* register our clocks */
|
||||||
|
@@ -16,6 +16,7 @@ struct clk {
|
|||||||
struct clk *parent;
|
struct clk *parent;
|
||||||
const char *name;
|
const char *name;
|
||||||
int id;
|
int id;
|
||||||
|
int usage;
|
||||||
unsigned long rate;
|
unsigned long rate;
|
||||||
unsigned long ctrlbit;
|
unsigned long ctrlbit;
|
||||||
int (*enable)(struct clk *, int enable);
|
int (*enable)(struct clk *, int enable);
|
||||||
|
@@ -275,6 +275,11 @@ static struct resource s3c_adc_resource[] = {
|
|||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = IRQ_TC,
|
.start = IRQ_TC,
|
||||||
|
.end = IRQ_TC,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
.start = IRQ_ADC,
|
||||||
.end = IRQ_ADC,
|
.end = IRQ_ADC,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
#include <asm/tlb.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
|
||||||
@@ -95,6 +96,14 @@ void __init omap_map_sram(void)
|
|||||||
omap_sram_io_desc[0].pfn, omap_sram_io_desc[0].virtual,
|
omap_sram_io_desc[0].pfn, omap_sram_io_desc[0].virtual,
|
||||||
omap_sram_io_desc[0].length);
|
omap_sram_io_desc[0].length);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Normally devicemaps_init() would flush caches and tlb after
|
||||||
|
* mdesc->map_io(), but since we're called from map_io(), we
|
||||||
|
* must do it here.
|
||||||
|
*/
|
||||||
|
local_flush_tlb_all();
|
||||||
|
flush_cache_all();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Looks like we need to preserve some bootloader code at the
|
* Looks like we need to preserve some bootloader code at the
|
||||||
* beginning of SRAM for jumping to flash for reboot to work...
|
* beginning of SRAM for jumping to flash for reboot to work...
|
||||||
|
@@ -161,7 +161,11 @@ s3c24xx_serial_dbg(const char *fmt, ...)
|
|||||||
|
|
||||||
/* we can support 3 uarts, but not always use them */
|
/* we can support 3 uarts, but not always use them */
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_S3C2400
|
||||||
|
#define NR_PORTS (2)
|
||||||
|
#else
|
||||||
#define NR_PORTS (3)
|
#define NR_PORTS (3)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* port irq numbers */
|
/* port irq numbers */
|
||||||
|
|
||||||
|
@@ -116,7 +116,11 @@ typedef struct { volatile u32 offset[4096]; } __regbase32;
|
|||||||
->offset[((vaddr)&4095)>>2]
|
->offset[((vaddr)&4095)>>2]
|
||||||
#define __REG32(paddr) __REGV32(io_p2v(paddr))
|
#define __REG32(paddr) __REGV32(io_p2v(paddr))
|
||||||
|
|
||||||
extern void omap_map_common_io(void);
|
extern void omap1_map_common_io(void);
|
||||||
|
extern void omap1_init_common_hw(void);
|
||||||
|
|
||||||
|
extern void omap2_map_common_io(void);
|
||||||
|
extern void omap2_init_common_hw(void);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@@ -23,72 +23,71 @@
|
|||||||
* simply bail out immediately through the slow path where the lock will be
|
* simply bail out immediately through the slow path where the lock will be
|
||||||
* reattempted until it succeeds.
|
* reattempted until it succeeds.
|
||||||
*/
|
*/
|
||||||
#define __mutex_fastpath_lock(count, fail_fn) \
|
static inline void
|
||||||
do { \
|
__mutex_fastpath_lock(atomic_t *count, fastcall void (*fail_fn)(atomic_t *))
|
||||||
int __ex_flag, __res; \
|
{
|
||||||
\
|
int __ex_flag, __res;
|
||||||
typecheck(atomic_t *, count); \
|
|
||||||
typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \
|
|
||||||
\
|
|
||||||
__asm__ ( \
|
|
||||||
"ldrex %0, [%2] \n" \
|
|
||||||
"sub %0, %0, #1 \n" \
|
|
||||||
"strex %1, %0, [%2] \n" \
|
|
||||||
\
|
|
||||||
: "=&r" (__res), "=&r" (__ex_flag) \
|
|
||||||
: "r" (&(count)->counter) \
|
|
||||||
: "cc","memory" ); \
|
|
||||||
\
|
|
||||||
if (unlikely(__res || __ex_flag)) \
|
|
||||||
fail_fn(count); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define __mutex_fastpath_lock_retval(count, fail_fn) \
|
__asm__ (
|
||||||
({ \
|
|
||||||
int __ex_flag, __res; \
|
"ldrex %0, [%2] \n\t"
|
||||||
\
|
"sub %0, %0, #1 \n\t"
|
||||||
typecheck(atomic_t *, count); \
|
"strex %1, %0, [%2] "
|
||||||
typecheck_fn(fastcall int (*)(atomic_t *), fail_fn); \
|
|
||||||
\
|
: "=&r" (__res), "=&r" (__ex_flag)
|
||||||
__asm__ ( \
|
: "r" (&(count)->counter)
|
||||||
"ldrex %0, [%2] \n" \
|
: "cc","memory" );
|
||||||
"sub %0, %0, #1 \n" \
|
|
||||||
"strex %1, %0, [%2] \n" \
|
__res |= __ex_flag;
|
||||||
\
|
if (unlikely(__res != 0))
|
||||||
: "=&r" (__res), "=&r" (__ex_flag) \
|
fail_fn(count);
|
||||||
: "r" (&(count)->counter) \
|
}
|
||||||
: "cc","memory" ); \
|
|
||||||
\
|
static inline int
|
||||||
__res |= __ex_flag; \
|
__mutex_fastpath_lock_retval(atomic_t *count, fastcall int (*fail_fn)(atomic_t *))
|
||||||
if (unlikely(__res != 0)) \
|
{
|
||||||
__res = fail_fn(count); \
|
int __ex_flag, __res;
|
||||||
__res; \
|
|
||||||
})
|
__asm__ (
|
||||||
|
|
||||||
|
"ldrex %0, [%2] \n\t"
|
||||||
|
"sub %0, %0, #1 \n\t"
|
||||||
|
"strex %1, %0, [%2] "
|
||||||
|
|
||||||
|
: "=&r" (__res), "=&r" (__ex_flag)
|
||||||
|
: "r" (&(count)->counter)
|
||||||
|
: "cc","memory" );
|
||||||
|
|
||||||
|
__res |= __ex_flag;
|
||||||
|
if (unlikely(__res != 0))
|
||||||
|
__res = fail_fn(count);
|
||||||
|
return __res;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Same trick is used for the unlock fast path. However the original value,
|
* Same trick is used for the unlock fast path. However the original value,
|
||||||
* rather than the result, is used to test for success in order to have
|
* rather than the result, is used to test for success in order to have
|
||||||
* better generated assembly.
|
* better generated assembly.
|
||||||
*/
|
*/
|
||||||
#define __mutex_fastpath_unlock(count, fail_fn) \
|
static inline void
|
||||||
do { \
|
__mutex_fastpath_unlock(atomic_t *count, fastcall void (*fail_fn)(atomic_t *))
|
||||||
int __ex_flag, __res, __orig; \
|
{
|
||||||
\
|
int __ex_flag, __res, __orig;
|
||||||
typecheck(atomic_t *, count); \
|
|
||||||
typecheck_fn(fastcall void (*)(atomic_t *), fail_fn); \
|
__asm__ (
|
||||||
\
|
|
||||||
__asm__ ( \
|
"ldrex %0, [%3] \n\t"
|
||||||
"ldrex %0, [%3] \n" \
|
"add %1, %0, #1 \n\t"
|
||||||
"add %1, %0, #1 \n" \
|
"strex %2, %1, [%3] "
|
||||||
"strex %2, %1, [%3] \n" \
|
|
||||||
\
|
: "=&r" (__orig), "=&r" (__res), "=&r" (__ex_flag)
|
||||||
: "=&r" (__orig), "=&r" (__res), "=&r" (__ex_flag) \
|
: "r" (&(count)->counter)
|
||||||
: "r" (&(count)->counter) \
|
: "cc","memory" );
|
||||||
: "cc","memory" ); \
|
|
||||||
\
|
__orig |= __ex_flag;
|
||||||
if (unlikely(__orig || __ex_flag)) \
|
if (unlikely(__orig != 0))
|
||||||
fail_fn(count); \
|
fail_fn(count);
|
||||||
} while (0)
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the unlock was done on a contended lock, or if the unlock simply fails
|
* If the unlock was done on a contended lock, or if the unlock simply fails
|
||||||
@@ -110,12 +109,12 @@ __mutex_fastpath_trylock(atomic_t *count, int (*fail_fn)(atomic_t *))
|
|||||||
|
|
||||||
__asm__ (
|
__asm__ (
|
||||||
|
|
||||||
"1: ldrex %0, [%3] \n"
|
"1: ldrex %0, [%3] \n\t"
|
||||||
"subs %1, %0, #1 \n"
|
"subs %1, %0, #1 \n\t"
|
||||||
"strexeq %2, %1, [%3] \n"
|
"strexeq %2, %1, [%3] \n\t"
|
||||||
"movlt %0, #0 \n"
|
"movlt %0, #0 \n\t"
|
||||||
"cmpeq %2, #0 \n"
|
"cmpeq %2, #0 \n\t"
|
||||||
"bgt 1b \n"
|
"bgt 1b "
|
||||||
|
|
||||||
: "=&r" (__orig), "=&r" (__res), "=&r" (__ex_flag)
|
: "=&r" (__orig), "=&r" (__res), "=&r" (__ex_flag)
|
||||||
: "r" (&count->counter)
|
: "r" (&count->counter)
|
||||||
|
Reference in New Issue
Block a user