Commit 72aaf09f authored by Russell King's avatar Russell King Committed by Russell King

Merge git://git.marvell.com/orion into devel

parents 67fbc231 58c24673
...@@ -316,12 +316,10 @@ reduce current DMA mapping usage or delay and try again later). ...@@ -316,12 +316,10 @@ reduce current DMA mapping usage or delay and try again later).
pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nents, int direction) int nents, int direction)
Maps a scatter gather list from the block layer.
Returns: the number of physical segments mapped (this may be shorter Returns: the number of physical segments mapped (this may be shorter
than <nents> passed in if the block layer determines that some than <nents> passed in if some elements of the scatter/gather list are
elements of the scatter/gather list are physically adjacent and thus physically or virtually adjacent and an IOMMU maps them with a single
may be mapped with a single entry). entry).
Please note that the sg cannot be mapped again if it has been mapped once. Please note that the sg cannot be mapped again if it has been mapped once.
The mapping process is allowed to destroy information in the sg. The mapping process is allowed to destroy information in the sg.
......
...@@ -23,6 +23,7 @@ Contents: ...@@ -23,6 +23,7 @@ Contents:
1.3 sparc64 1.3 sparc64
1.4 ppc 1.4 ppc
1.5 SuperH 1.5 SuperH
1.6 Blackfin
2. "Policy" / "Governor"? 2. "Policy" / "Governor"?
2.1 Policy 2.1 Policy
...@@ -97,6 +98,17 @@ The following SuperH processors are supported by cpufreq: ...@@ -97,6 +98,17 @@ The following SuperH processors are supported by cpufreq:
SH-3 SH-3
SH-4 SH-4
1.6 Blackfin
------------
The following Blackfin processors are supported by cpufreq:
BF522, BF523, BF524, BF525, BF526, BF527, Rev 0.1 or higher
BF531, BF532, BF533, Rev 0.3 or higher
BF534, BF536, BF537, Rev 0.2 or higher
BF561, Rev 0.3 or higher
BF542, BF544, BF547, BF548, BF549, Rev 0.1 or higher
2. "Policy" / "Governor" ? 2. "Policy" / "Governor" ?
========================== ==========================
......
...@@ -28,10 +28,7 @@ Manish Singh <manish.singh@oracle.com> ...@@ -28,10 +28,7 @@ Manish Singh <manish.singh@oracle.com>
Caveats Caveats
======= =======
Features which OCFS2 does not support yet: Features which OCFS2 does not support yet:
- extended attributes
- quotas - quotas
- cluster aware flock
- cluster aware lockf
- Directory change notification (F_NOTIFY) - Directory change notification (F_NOTIFY)
- Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease) - Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease)
- POSIX ACLs - POSIX ACLs
......
...@@ -44,6 +44,7 @@ Table of Contents ...@@ -44,6 +44,7 @@ Table of Contents
2.14 /proc/<pid>/io - Display the IO accounting fields 2.14 /proc/<pid>/io - Display the IO accounting fields
2.15 /proc/<pid>/coredump_filter - Core dump filtering settings 2.15 /proc/<pid>/coredump_filter - Core dump filtering settings
2.16 /proc/<pid>/mountinfo - Information about mounts 2.16 /proc/<pid>/mountinfo - Information about mounts
2.17 /proc/sys/fs/epoll - Configuration options for the epoll interface
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Preface Preface
...@@ -2483,4 +2484,30 @@ For more information on mount propagation see: ...@@ -2483,4 +2484,30 @@ For more information on mount propagation see:
Documentation/filesystems/sharedsubtree.txt Documentation/filesystems/sharedsubtree.txt
2.17 /proc/sys/fs/epoll - Configuration options for the epoll interface
--------------------------------------------------------
This directory contains configuration options for the epoll(7) interface.
max_user_instances
------------------
This is the maximum number of epoll file descriptors that a single user can
have open at a given time. The default value is 128, and should be enough
for normal users.
max_user_watches
----------------
Every epoll file descriptor can store a number of files to be monitored
for event readiness. Each one of these monitored files constitutes a "watch".
This configuration option sets the maximum number of "watches" that are
allowed for each user.
Each "watch" costs roughly 90 bytes on a 32bit kernel, and roughly 160 bytes
on a 64bit one.
The current default value for max_user_watches is the 1/32 of the available
low memory, divided for the "watch" cost in bytes.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
...@@ -130,12 +130,12 @@ The 2.6 kernel build process always creates a gzipped cpio format initramfs ...@@ -130,12 +130,12 @@ The 2.6 kernel build process always creates a gzipped cpio format initramfs
archive and links it into the resulting kernel binary. By default, this archive and links it into the resulting kernel binary. By default, this
archive is empty (consuming 134 bytes on x86). archive is empty (consuming 134 bytes on x86).
The config option CONFIG_INITRAMFS_SOURCE (for some reason buried under The config option CONFIG_INITRAMFS_SOURCE (in General Setup in menuconfig,
devices->block devices in menuconfig, and living in usr/Kconfig) can be used and living in usr/Kconfig) can be used to specify a source for the
to specify a source for the initramfs archive, which will automatically be initramfs archive, which will automatically be incorporated into the
incorporated into the resulting binary. This option can point to an existing resulting binary. This option can point to an existing gzipped cpio
gzipped cpio archive, a directory containing files to be archived, or a text archive, a directory containing files to be archived, or a text file
file specification such as the following example: specification such as the following example:
dir /dev 755 0 0 dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1 nod /dev/console 644 0 0 c 5 1
......
...@@ -20,10 +20,11 @@ pressed or released a BUTTON_IRQ happens. The driver could look like: ...@@ -20,10 +20,11 @@ pressed or released a BUTTON_IRQ happens. The driver could look like:
static struct input_dev *button_dev; static struct input_dev *button_dev;
static void button_interrupt(int irq, void *dummy, struct pt_regs *fp) static irqreturn_t button_interrupt(int irq, void *dummy)
{ {
input_report_key(button_dev, BTN_0, inb(BUTTON_PORT) & 1); input_report_key(button_dev, BTN_0, inb(BUTTON_PORT) & 1);
input_sync(button_dev); input_sync(button_dev);
return IRQ_HANDLED;
} }
static int __init button_init(void) static int __init button_init(void)
......
...@@ -1072,10 +1072,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ...@@ -1072,10 +1072,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
ref Reference board ref Reference board
dell-m4-1 Dell desktops dell-m4-1 Dell desktops
dell-m4-2 Dell desktops dell-m4-2 Dell desktops
dell-m4-3 Dell desktops
STAC92HD73* STAC92HD73*
ref Reference board ref Reference board
dell-m6 Dell desktops dell-m6-amic Dell desktops/laptops with analog mics
dell-m6-dmic Dell desktops/laptops with digital mics
dell-m6 Dell desktops/laptops with both type of mics
STAC9872 STAC9872
vaio Setup for VAIO FE550G/SZ110 vaio Setup for VAIO FE550G/SZ110
......
...@@ -215,7 +215,7 @@ So for example arch/.../mach-*/board-*.c files might have code like: ...@@ -215,7 +215,7 @@ So for example arch/.../mach-*/board-*.c files might have code like:
/* if your mach-* infrastructure doesn't support kernels that can /* if your mach-* infrastructure doesn't support kernels that can
* run on multiple boards, pdata wouldn't benefit from "__init". * run on multiple boards, pdata wouldn't benefit from "__init".
*/ */
static struct mysoc_spi_data __init pdata = { ... }; static struct mysoc_spi_data __initdata pdata = { ... };
static __init board_init(void) static __init board_init(void)
{ {
......
...@@ -37,7 +37,7 @@ $ echo mmiotrace > /debug/tracing/current_tracer ...@@ -37,7 +37,7 @@ $ echo mmiotrace > /debug/tracing/current_tracer
$ cat /debug/tracing/trace_pipe > mydump.txt & $ cat /debug/tracing/trace_pipe > mydump.txt &
Start X or whatever. Start X or whatever.
$ echo "X is up" > /debug/tracing/trace_marker $ echo "X is up" > /debug/tracing/trace_marker
$ echo none > /debug/tracing/current_tracer $ echo nop > /debug/tracing/current_tracer
Check for lost events. Check for lost events.
...@@ -66,7 +66,7 @@ which action. It is recommended to place descriptive markers about what you ...@@ -66,7 +66,7 @@ which action. It is recommended to place descriptive markers about what you
do. do.
Shut down mmiotrace (requires root privileges): Shut down mmiotrace (requires root privileges):
$ echo none > /debug/tracing/current_tracer $ echo nop > /debug/tracing/current_tracer
The 'cat' process exits. If it does not, kill it by issuing 'fg' command and The 'cat' process exits. If it does not, kill it by issuing 'fg' command and
pressing ctrl+c. pressing ctrl+c.
...@@ -81,7 +81,9 @@ are: ...@@ -81,7 +81,9 @@ are:
$ cat /debug/tracing/trace_entries $ cat /debug/tracing/trace_entries
gives you a number. Approximately double this number and write it back, for gives you a number. Approximately double this number and write it back, for
instance: instance:
$ echo 0 > /debug/tracing/tracing_enabled
$ echo 128000 > /debug/tracing/trace_entries $ echo 128000 > /debug/tracing/trace_entries
$ echo 1 > /debug/tracing/tracing_enabled
Then start again from the top. Then start again from the top.
If you are doing a trace for a driver project, e.g. Nouveau, you should also If you are doing a trace for a driver project, e.g. Nouveau, you should also
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 28 SUBLEVEL = 28
EXTRAVERSION = -rc6 EXTRAVERSION = -rc7
NAME = Killer Bat of Doom NAME = Erotic Pickled Herring
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"
......
...@@ -79,8 +79,6 @@ config HAVE_KRETPROBES ...@@ -79,8 +79,6 @@ config HAVE_KRETPROBES
# task_pt_regs() in asm/processor.h or asm/ptrace.h # task_pt_regs() in asm/processor.h or asm/ptrace.h
# arch_has_single_step() if there is hardware single-step support # arch_has_single_step() if there is hardware single-step support
# arch_has_block_step() if there is hardware block-step support # arch_has_block_step() if there is hardware block-step support
# arch_ptrace() and not #define __ARCH_SYS_PTRACE
# compat_arch_ptrace() and #define __ARCH_WANT_COMPAT_SYS_PTRACE
# asm/syscall.h supplying asm-generic/syscall.h interface # asm/syscall.h supplying asm-generic/syscall.h interface
# linux/regset.h user_regset interfaces # linux/regset.h user_regset interfaces
# CORE_DUMP_USE_REGSET #define'd in linux/elf.h # CORE_DUMP_USE_REGSET #define'd in linux/elf.h
......
...@@ -338,7 +338,7 @@ common_swizzle(struct pci_dev *dev, u8 *pinp) ...@@ -338,7 +338,7 @@ common_swizzle(struct pci_dev *dev, u8 *pinp)
return PCI_SLOT(dev->devfn); return PCI_SLOT(dev->devfn);
} }
void __devinit void
pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
struct resource *res) struct resource *res)
{ {
......
...@@ -121,7 +121,7 @@ wait_boot_cpu_to_stop(int cpuid) ...@@ -121,7 +121,7 @@ wait_boot_cpu_to_stop(int cpuid)
/* /*
* Where secondaries begin a life of C. * Where secondaries begin a life of C.
*/ */
void __init void __cpuinit
smp_callin(void) smp_callin(void)
{ {
int cpuid = hard_smp_processor_id(); int cpuid = hard_smp_processor_id();
...@@ -198,7 +198,7 @@ wait_for_txrdy (unsigned long cpumask) ...@@ -198,7 +198,7 @@ wait_for_txrdy (unsigned long cpumask)
* Send a message to a secondary's console. "START" is one such * Send a message to a secondary's console. "START" is one such
* interesting message. ;-) * interesting message. ;-)
*/ */
static void __init static void __cpuinit
send_secondary_console_msg(char *str, int cpuid) send_secondary_console_msg(char *str, int cpuid)
{ {
struct percpu_struct *cpu; struct percpu_struct *cpu;
...@@ -289,7 +289,7 @@ recv_secondary_console_msg(void) ...@@ -289,7 +289,7 @@ recv_secondary_console_msg(void)
/* /*
* Convince the console to have a secondary cpu begin execution. * Convince the console to have a secondary cpu begin execution.
*/ */
static int __init static int __cpuinit
secondary_cpu_start(int cpuid, struct task_struct *idle) secondary_cpu_start(int cpuid, struct task_struct *idle)
{ {
struct percpu_struct *cpu; struct percpu_struct *cpu;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
static int opDEC_fix; static int opDEC_fix;
static void __init static void __cpuinit
opDEC_check(void) opDEC_check(void)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
...@@ -1072,7 +1072,7 @@ do_entUnaUser(void __user * va, unsigned long opcode, ...@@ -1072,7 +1072,7 @@ do_entUnaUser(void __user * va, unsigned long opcode,
return; return;
} }
void __init void __cpuinit
trap_init(void) trap_init(void)
{ {
/* Tell PAL-code what global pointer we want in the kernel. */ /* Tell PAL-code what global pointer we want in the kernel. */
......
...@@ -76,6 +76,7 @@ tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110 ...@@ -76,6 +76,7 @@ tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110
tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100 tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100
tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale tune-$(CONFIG_CPU_XSC3) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
tune-$(CONFIG_CPU_FEROCEON) :=$(call cc-option,-mtune=marvell-f,-mtune=xscale)
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
ifeq ($(CONFIG_AEABI),y) ifeq ($(CONFIG_AEABI),y)
......
...@@ -179,7 +179,7 @@ CONFIG_MACH_HUSKY=y ...@@ -179,7 +179,7 @@ CONFIG_MACH_HUSKY=y
# CONFIG_MACH_AKITA is not set # CONFIG_MACH_AKITA is not set
# CONFIG_MACH_SPITZ is not set # CONFIG_MACH_SPITZ is not set
# CONFIG_MACH_BORZOI is not set # CONFIG_MACH_BORZOI is not set
CONFIG_MACH_TOSA=y # CONFIG_MACH_TOSA is not set
# CONFIG_ARCH_VIPER is not set # CONFIG_ARCH_VIPER is not set
# CONFIG_ARCH_PXA_ESERIES is not set # CONFIG_ARCH_PXA_ESERIES is not set
# CONFIG_TRIZEPS_PXA is not set # CONFIG_TRIZEPS_PXA is not set
......
This diff is collapsed.
...@@ -57,6 +57,7 @@ void __init kirkwood_map_io(void) ...@@ -57,6 +57,7 @@ void __init kirkwood_map_io(void)
****************************************************************************/ ****************************************************************************/
static struct orion_ehci_data kirkwood_ehci_data = { static struct orion_ehci_data kirkwood_ehci_data = {
.dram = &kirkwood_mbus_dram_info, .dram = &kirkwood_mbus_dram_info,
.phy_version = EHCI_PHY_NA,
}; };
static u64 ehci_dmamask = 0xffffffffUL; static u64 ehci_dmamask = 0xffffffffUL;
...@@ -152,6 +153,64 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) ...@@ -152,6 +153,64 @@ void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
} }
/*****************************************************************************
* GE01
****************************************************************************/
struct mv643xx_eth_shared_platform_data kirkwood_ge01_shared_data = {
.dram = &kirkwood_mbus_dram_info,
.shared_smi = &kirkwood_ge00_shared,
};
static struct resource kirkwood_ge01_shared_resources[] = {
{
.name = "ge01 base",
.start = GE01_PHYS_BASE + 0x2000,
.end = GE01_PHYS_BASE + 0x3fff,
.flags = IORESOURCE_MEM,
}, {
.name = "ge01 err irq",
.start = IRQ_KIRKWOOD_GE01_ERR,
.end = IRQ_KIRKWOOD_GE01_ERR,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device kirkwood_ge01_shared = {
.name = MV643XX_ETH_SHARED_NAME,
.id = 1,
.dev = {
.platform_data = &kirkwood_ge01_shared_data,
},
.num_resources = ARRAY_SIZE(kirkwood_ge01_shared_resources),
.resource = kirkwood_ge01_shared_resources,
};
static struct resource kirkwood_ge01_resources[] = {
{
.name = "ge01 irq",
.start = IRQ_KIRKWOOD_GE01_SUM,
.end = IRQ_KIRKWOOD_GE01_SUM,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device kirkwood_ge01 = {
.name = MV643XX_ETH_NAME,
.id = 1,
.num_resources = 1,
.resource = kirkwood_ge01_resources,
};
void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data)
{
eth_data->shared = &kirkwood_ge01_shared;
kirkwood_ge01.dev.platform_data = eth_data;
platform_device_register(&kirkwood_ge01_shared);
platform_device_register(&kirkwood_ge01);
}
/***************************************************************************** /*****************************************************************************
* Ethernet switch * Ethernet switch
****************************************************************************/ ****************************************************************************/
......
...@@ -30,6 +30,7 @@ void kirkwood_pcie_id(u32 *dev, u32 *rev); ...@@ -30,6 +30,7 @@ void kirkwood_pcie_id(u32 *dev, u32 *rev);
void kirkwood_ehci_init(void); void kirkwood_ehci_init(void);
void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data);
void kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data);
void kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq); void kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq);
void kirkwood_pcie_init(void); void kirkwood_pcie_init(void);
void kirkwood_rtc_init(void); void kirkwood_rtc_init(void);
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40
#define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41
#define IRQ_KIRKWOOD_GE00_ERR 46 #define IRQ_KIRKWOOD_GE00_ERR 46
#define IRQ_KIRKWOOD_GE01_ERR 47
/* /*
* KIRKWOOD General Purpose Pins * KIRKWOOD General Purpose Pins
......
...@@ -80,24 +80,38 @@ static struct dsa_platform_data rd88f6281_switch_data = { ...@@ -80,24 +80,38 @@ static struct dsa_platform_data rd88f6281_switch_data = {
.port_names[1] = "lan2", .port_names[1] = "lan2",
.port_names[2] = "lan3", .port_names[2] = "lan3",
.port_names[3] = "lan4", .port_names[3] = "lan4",
.port_names[4] = "wan",
.port_names[5] = "cpu", .port_names[5] = "cpu",
}; };
static struct mv643xx_eth_platform_data rd88f6281_ge01_data = {
.phy_addr = MV643XX_ETH_PHY_ADDR(11),
};
static struct mv_sata_platform_data rd88f6281_sata_data = { static struct mv_sata_platform_data rd88f6281_sata_data = {
.n_ports = 2, .n_ports = 2,
}; };
static void __init rd88f6281_init(void) static void __init rd88f6281_init(void)
{ {
u32 dev, rev;
/* /*
* Basic setup. Needs to be called early. * Basic setup. Needs to be called early.
*/ */
kirkwood_init(); kirkwood_init();
kirkwood_ehci_init(); kirkwood_ehci_init();
kirkwood_ge00_init(&rd88f6281_ge00_data); kirkwood_ge00_init(&rd88f6281_ge00_data);
kirkwood_pcie_id(&dev, &rev);
if (rev == MV88F6281_REV_A0) {
rd88f6281_switch_data.sw_addr = 10;
kirkwood_ge01_init(&rd88f6281_ge01_data);
} else {
rd88f6281_switch_data.port_names[4] = "wan";
}
kirkwood_ge00_switch_init(&rd88f6281_switch_data, NO_IRQ); kirkwood_ge00_switch_init(&rd88f6281_switch_data, NO_IRQ);
kirkwood_rtc_init(); kirkwood_rtc_init();
kirkwood_sata_init(&rd88f6281_sata_data); kirkwood_sata_init(&rd88f6281_sata_data);
kirkwood_uart0_init(); kirkwood_uart0_init();
......
...@@ -167,6 +167,7 @@ void __init mv78xx0_map_io(void) ...@@ -167,6 +167,7 @@ void __init mv78xx0_map_io(void)
****************************************************************************/ ****************************************************************************/
static struct orion_ehci_data mv78xx0_ehci_data = { static struct orion_ehci_data mv78xx0_ehci_data = {
.dram = &mv78xx0_mbus_dram_info, .dram = &mv78xx0_mbus_dram_info,
.phy_version = EHCI_PHY_NA,
}; };
static u64 ehci_dmamask = 0xffffffffUL; static u64 ehci_dmamask = 0xffffffffUL;
......
...@@ -72,6 +72,7 @@ void __init orion5x_map_io(void) ...@@ -72,6 +72,7 @@ void __init orion5x_map_io(void)
****************************************************************************/ ****************************************************************************/
static struct orion_ehci_data orion5x_ehci_data = { static struct orion_ehci_data orion5x_ehci_data = {
.dram = &orion5x_mbus_dram_info, .dram = &orion5x_mbus_dram_info,
.phy_version = EHCI_PHY_ORION,
}; };
static u64 ehci_dmamask = 0xffffffffUL; static u64 ehci_dmamask = 0xffffffffUL;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/ata_platform.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -64,9 +65,21 @@ static struct hw_pci dns323_pci __initdata = { ...@@ -64,9 +65,21 @@ static struct hw_pci dns323_pci __initdata = {
.map_irq = dns323_pci_map_irq, .map_irq = dns323_pci_map_irq,
}; };
static int __init dns323_dev_id(void)
{
u32 dev, rev;
orion5x_pcie_id(&dev, &rev);
return dev;
}
static int __init dns323_pci_init(void) static int __init dns323_pci_init(void)
{ {
if (machine_is_dns323()) /* The 5182 doesn't really use it's PCI bus, and initialising PCI
* gets in the way of initialising the SATA controller.
*/
if (machine_is_dns323() && dns323_dev_id() != MV88F5182_DEV_ID)
pci_common_init(&dns323_pci); pci_common_init(&dns323_pci);
return 0; return 0;
...@@ -74,14 +87,6 @@ static int __init dns323_pci_init(void) ...@@ -74,14 +87,6 @@ static int __init dns323_pci_init(void)
subsys_initcall(dns323_pci_init); subsys_initcall(dns323_pci_init);
/****************************************************************************
* Ethernet
*/
static struct mv643xx_eth_platform_data dns323_eth_data = {
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
};
/**************************************************************************** /****************************************************************************
* 8MiB NOR flash (Spansion S29GL064M90TFIR4) * 8MiB NOR flash (Spansion S29GL064M90TFIR4)
* *
...@@ -142,6 +147,90 @@ static struct platform_device dns323_nor_flash = { ...@@ -142,6 +147,90 @@ static struct platform_device dns323_nor_flash = {
.num_resources = 1, .num_resources = 1,
}; };
/****************************************************************************
* Ethernet
*/
static struct mv643xx_eth_platform_data dns323_eth_data = {
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
};
/* dns323_parse_hex_*() taken from tsx09-common.c; should a common copy of these
* functions be kept somewhere?
*/
static int __init dns323_parse_hex_nibble(char n)
{
if (n >= '0' && n <= '9')
return n - '0';
if (n >= 'A' && n <= 'F')
return n - 'A' + 10;
if (n >= 'a' && n <= 'f')
return n - 'a' + 10;
return -1;
}
static int __init dns323_parse_hex_byte(const char *b)
{
int hi;
int lo;
hi = dns323_parse_hex_nibble(b[0]);
lo = dns323_parse_hex_nibble(b[1]);
if (hi < 0 || lo < 0)
return -1;
return (hi << 4) | lo;
}
static int __init dns323_read_mac_addr(void)
{
u_int8_t addr[6];
int i;
char *mac_page;
/* MAC address is stored as a regular ol' string in /dev/mtdblock4
* (0x007d0000-0x00800000) starting at offset 196480 (0x2ff80).
*/
mac_page = ioremap(DNS323_NOR_BOOT_BASE + 0x7d0000 + 196480, 1024);
if (!mac_page)
return -ENOMEM;
/* Sanity check the string we're looking at */
for (i = 0; i < 5; i++) {
if (*(mac_page + (i * 3) + 2) != ':') {
goto error_fail;
}
}
for (i = 0; i < 6; i++) {
int byte;
byte = dns323_parse_hex_byte(mac_page + (i * 3));
if (byte < 0) {
goto error_fail;
}
addr[i] = byte;
}
iounmap(mac_page);
printk("DNS323: Found ethernet MAC address: ");
for (i = 0; i < 6; i++)
printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n");
memcpy(dns323_eth_data.mac_addr, addr, 6);
return 0;
error_fail:
iounmap(mac_page);
return -EINVAL;
}
/**************************************************************************** /****************************************************************************
* GPIO LEDs (simple - doesn't use hardware blinking support) * GPIO LEDs (simple - doesn't use hardware blinking support)
*/ */
...@@ -207,10 +296,17 @@ static struct platform_device dns323_button_device = { ...@@ -207,10 +296,17 @@ static struct platform_device dns323_button_device = {
}, },
}; };
/*****************************************************************************
* SATA
*/
static struct mv_sata_platform_data dns323_sata_data = {
.n_ports = 2,
};
/**************************************************************************** /****************************************************************************
* General Setup * General Setup
*/ */
static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = { static struct orion5x_mpp_mode dns323_mv88f5181_mpp_modes[] __initdata = {
{ 0, MPP_PCIE_RST_OUTn }, { 0, MPP_PCIE_RST_OUTn },
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */ { 1, MPP_GPIO }, /* right amber LED (sata ch0) */
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */ { 2, MPP_GPIO }, /* left amber LED (sata ch1) */
...@@ -234,6 +330,30 @@ static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = { ...@@ -234,6 +330,30 @@ static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = {
{ -1 }, { -1 },
}; };
static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = {
{ 0, MPP_UNUSED },
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */
{ 3, MPP_UNUSED },
{ 4, MPP_GPIO }, /* power button LED */
{ 5, MPP_GPIO }, /* power button LED */
{ 6, MPP_GPIO }, /* GMT G751-2f overtemp */
{ 7, MPP_GPIO }, /* M41T80 nIRQ/OUT/SQW */
{ 8, MPP_GPIO }, /* triggers power off */
{ 9, MPP_GPIO }, /* power button switch */
{ 10, MPP_GPIO }, /* reset button switch */
{ 11, MPP_UNUSED },
{ 12, MPP_SATA_LED },
{ 13, MPP_SATA_LED },
{ 14, MPP_SATA_LED },
{ 15, MPP_SATA_LED },
{ 16, MPP_UNUSED },
{ 17, MPP_UNUSED },
{ 18, MPP_UNUSED },
{ 19, MPP_UNUSED },
{ -1 },
};
/* /*
* On the DNS-323 the following devices are attached via I2C: * On the DNS-323 the following devices are attached via I2C:
* *
...@@ -264,16 +384,15 @@ static void __init dns323_init(void) ...@@ -264,16 +384,15 @@ static void __init dns323_init(void)
/* Setup basic Orion functions. Need to be called early. */ /* Setup basic Orion functions. Need to be called early. */
orion5x_init(); orion5x_init();
orion5x_mpp_conf(dns323_mpp_modes); /* Just to be tricky, the 5182 has a completely different
writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ * set of MPP modes to the 5181.
/*
* Configure peripherals.
*/ */
orion5x_ehci0_init(); if (dns323_dev_id() == MV88F5182_DEV_ID)
orion5x_eth_init(&dns323_eth_data); orion5x_mpp_conf(dns323_mv88f5182_mpp_modes);
orion5x_i2c_init(); else {
orion5x_uart0_init(); orion5x_mpp_conf(dns323_mv88f5181_mpp_modes);
writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */
}
/* setup flash mapping /* setup flash mapping
* CS3 holds a 8 MB Spansion S29GL064M90TFIR4 * CS3 holds a 8 MB Spansion S29GL064M90TFIR4
...@@ -288,6 +407,23 @@ static void __init dns323_init(void) ...@@ -288,6 +407,23 @@ static void __init dns323_init(void)
i2c_register_board_info(0, dns323_i2c_devices, i2c_register_board_info(0, dns323_i2c_devices,
ARRAY_SIZE(dns323_i2c_devices)); ARRAY_SIZE(dns323_i2c_devices));
/*
* Configure peripherals.
*/
if (dns323_read_mac_addr() < 0)
printk("DNS323: Failed to read MAC address\n");
orion5x_ehci0_init();
orion5x_eth_init(&dns323_eth_data);
orion5x_i2c_init();
orion5x_uart0_init();
/* The 5182 has it's SATA controller on-chip, and needs it's own little
* init routine.
*/
if (dns323_dev_id() == MV88F5182_DEV_ID)
orion5x_sata_init(&dns323_sata_data);
/* register dns323 specific power-off method */ /* register dns323 specific power-off method */
if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||
gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)
......
...@@ -56,6 +56,9 @@ static unsigned long palmtx_pin_config[] __initdata = { ...@@ -56,6 +56,9 @@ static unsigned long palmtx_pin_config[] __initdata = {
GPIO110_MMC_DAT_2, GPIO110_MMC_DAT_2,
GPIO111_MMC_DAT_3, GPIO111_MMC_DAT_3,
GPIO112_MMC_CMD, GPIO112_MMC_CMD,
GPIO14_GPIO, /* SD detect */
GPIO114_GPIO, /* SD power */
GPIO115_GPIO, /* SD r/o switch */
/* AC97 */ /* AC97 */
GPIO28_AC97_BITCLK, GPIO28_AC97_BITCLK,
...@@ -64,6 +67,7 @@ static unsigned long palmtx_pin_config[] __initdata = { ...@@ -64,6 +67,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
GPIO31_AC97_SYNC, GPIO31_AC97_SYNC,
/* IrDA */ /* IrDA */
GPIO40_GPIO, /* ir disable */
GPIO46_FICP_RXD, GPIO46_FICP_RXD,
GPIO47_FICP_TXD, GPIO47_FICP_TXD,
...@@ -71,7 +75,8 @@ static unsigned long palmtx_pin_config[] __initdata = { ...@@ -71,7 +75,8 @@ static unsigned long palmtx_pin_config[] __initdata = {
GPIO16_PWM0_OUT, GPIO16_PWM0_OUT,
/* USB */ /* USB */
GPIO13_GPIO, GPIO13_GPIO, /* usb detect */
GPIO95_GPIO, /* usb power */
/* PCMCIA */ /* PCMCIA */
GPIO48_nPOE, GPIO48_nPOE,
...@@ -84,6 +89,45 @@ static unsigned long palmtx_pin_config[] __initdata = { ...@@ -84,6 +89,45 @@ static unsigned long palmtx_pin_config[] __initdata = {
GPIO55_nPREG, GPIO55_nPREG,
GPIO56_nPWAIT, GPIO56_nPWAIT,
GPIO57_nIOIS16, GPIO57_nIOIS16,
GPIO94_GPIO, /* wifi power 1 */
GPIO108_GPIO, /* wifi power 2 */
GPIO116_GPIO, /* wifi ready */
/* MATRIX KEYPAD */
GPIO100_KP_MKIN_0,
GPIO101_KP_MKIN_1,
GPIO102_KP_MKIN_2,
GPIO97_KP_MKIN_3,
GPIO103_KP_MKOUT_0,
GPIO104_KP_MKOUT_1,
GPIO105_KP_MKOUT_2,
/* LCD */
GPIO58_LCD_LDD_0,
GPIO59_LCD_LDD_1,
GPIO60_LCD_LDD_2,
GPIO61_LCD_LDD_3,
GPIO62_LCD_LDD_4,
GPIO63_LCD_LDD_5,
GPIO64_LCD_LDD_6,
GPIO65_LCD_LDD_7,
GPIO66_LCD_LDD_8,
GPIO67_LCD_LDD_9,
GPIO68_LCD_LDD_10,
GPIO69_LCD_LDD_11,
GPIO70_LCD_LDD_12,
GPIO71_LCD_LDD_13,
GPIO72_LCD_LDD_14,
GPIO73_LCD_LDD_15,
GPIO74_LCD_FCLK,
GPIO75_LCD_LCLK,
GPIO76_LCD_PCLK,
GPIO77_LCD_BIAS,
/* MISC. */
GPIO10_GPIO, /* hotsync button */
GPIO12_GPIO, /* power detect */
GPIO107_GPIO, /* earphone detect */
}; };
/****************************************************************************** /******************************************************************************
...@@ -95,32 +139,49 @@ static int palmtx_mci_init(struct device *dev, irq_handler_t palmtx_detect_int, ...@@ -95,32 +139,49 @@ static int palmtx_mci_init(struct device *dev, irq_handler_t palmtx_detect_int,
int err = 0; int err = 0;
/* Setup an interrupt for detecting card insert/remove events */ /* Setup an interrupt for detecting card insert/remove events */
err = request_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, palmtx_detect_int, err = gpio_request(GPIO_NR_PALMTX_SD_DETECT_N, "SD IRQ");
IRQF_DISABLED | IRQF_SAMPLE_RANDOM | if (err)
goto err;
err = gpio_direction_input(GPIO_NR_PALMTX_SD_DETECT_N);
if (err)
goto err2;
err = request_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N),
palmtx_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
"SD/MMC card detect", data); "SD/MMC card detect", data);
if (err) { if (err) {
printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n", printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
__func__); __func__);
return err; goto err2;
} }
err = gpio_request(GPIO_NR_PALMTX_SD_POWER, "SD_POWER"); err = gpio_request(GPIO_NR_PALMTX_SD_POWER, "SD_POWER");
if (err) if (err)
goto pwr_err; goto err3;
err = gpio_direction_output(GPIO_NR_PALMTX_SD_POWER, 0);
if (err)
goto err4;
err = gpio_request(GPIO_NR_PALMTX_SD_READONLY, "SD_READONLY"); err = gpio_request(GPIO_NR_PALMTX_SD_READONLY, "SD_READONLY");
if (err) if (err)
goto ro_err; goto err4;
err = gpio_direction_input(GPIO_NR_PALMTX_SD_READONLY);
if (err)
goto err5;
printk(KERN_DEBUG "%s: irq registered\n", __func__); printk(KERN_DEBUG "%s: irq registered\n", __func__);
return 0; return 0;
ro_err: err5:
gpio_free(GPIO_NR_PALMTX_SD_READONLY);
err4:
gpio_free(GPIO_NR_PALMTX_SD_POWER); gpio_free(GPIO_NR_PALMTX_SD_POWER);
pwr_err: err3:
free_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, data); free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data);
err2:
gpio_free(GPIO_NR_PALMTX_SD_DETECT_N);
err:
return err; return err;
} }
...@@ -128,7 +189,8 @@ static void palmtx_mci_exit(struct device *dev, void *data) ...@@ -128,7 +189,8 @@ static void palmtx_mci_exit(struct device *dev, void *data)
{ {
gpio_free(GPIO_NR_PALMTX_SD_READONLY); gpio_free(GPIO_NR_PALMTX_SD_READONLY);
gpio_free(GPIO_NR_PALMTX_SD_POWER); gpio_free(GPIO_NR_PALMTX_SD_POWER);
free_irq(IRQ_GPIO_PALMTX_SD_DETECT_N, data); free_irq(gpio_to_irq(GPIO_NR_PALMTX_SD_DETECT_N), data);
gpio_free(GPIO_NR_PALMTX_SD_DETECT_N);
} }
static void palmtx_mci_power(struct device *dev, unsigned int vdd) static void palmtx_mci_power(struct device *dev, unsigned int vdd)
...@@ -167,7 +229,6 @@ static unsigned int palmtx_matrix_keys[] = { ...@@ -167,7 +229,6 @@ static unsigned int palmtx_matrix_keys[] = {
KEY(3, 0, KEY_RIGHT), KEY(3, 0, KEY_RIGHT),
KEY(3, 2, KEY_LEFT), KEY(3, 2, KEY_LEFT),
}; };
static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = { static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
...@@ -209,11 +270,19 @@ static int palmtx_backlight_init(struct device *dev) ...@@ -209,11 +270,19 @@ static int palmtx_backlight_init(struct device *dev)
ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER"); ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER");
if (ret) if (ret)
goto err; goto err;
ret = gpio_direction_output(GPIO_NR_PALMTX_BL_POWER, 0);
if (ret)
goto err2;
ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER"); ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER");
if (ret) if (ret)
goto err2; goto err2;
ret = gpio_direction_output(GPIO_NR_PALMTX_LCD_POWER, 0);
if (ret)
goto err3;
return 0; return 0;
err3:
gpio_free(GPIO_NR_PALMTX_LCD_POWER);
err2: err2:
gpio_free(GPIO_NR_PALMTX_BL_POWER); gpio_free(GPIO_NR_PALMTX_BL_POWER);
err: err:
...@@ -254,6 +323,24 @@ static struct platform_device palmtx_backlight = { ...@@ -254,6 +323,24 @@ static struct platform_device palmtx_backlight = {
/****************************************************************************** /******************************************************************************
* IrDA * IrDA
******************************************************************************/ ******************************************************************************/
static int palmtx_irda_startup(struct device *dev)
{
int err;
err = gpio_request(GPIO_NR_PALMTX_IR_DISABLE, "IR DISABLE");
if (err)
goto err;
err = gpio_direction_output(GPIO_NR_PALMTX_IR_DISABLE, 1);
if (err)
gpio_free(GPIO_NR_PALMTX_IR_DISABLE);
err:
return err;
}
static void palmtx_irda_shutdown(struct device *dev)
{
gpio_free(GPIO_NR_PALMTX_IR_DISABLE);
}
static void palmtx_irda_transceiver_mode(struct device *dev, int mode) static void palmtx_irda_transceiver_mode(struct device *dev, int mode)
{ {
gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF); gpio_set_value(GPIO_NR_PALMTX_IR_DISABLE, mode & IR_OFF);
...@@ -261,6 +348,8 @@ static void palmtx_irda_transceiver_mode(struct device *dev, int mode) ...@@ -261,6 +348,8 @@ static void palmtx_irda_transceiver_mode(struct device *dev, int mode)
} }
static struct pxaficp_platform_data palmtx_ficp_platform_data = { static struct pxaficp_platform_data palmtx_ficp_platform_data = {
.startup = palmtx_irda_startup,
.shutdown = palmtx_irda_shutdown,
.transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF, .transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
.transceiver_mode = palmtx_irda_transceiver_mode, .transceiver_mode = palmtx_irda_transceiver_mode,
}; };
...@@ -268,17 +357,11 @@ static struct pxaficp_platform_data palmtx_ficp_platform_data = { ...@@ -268,17 +357,11 @@ static struct pxaficp_platform_data palmtx_ficp_platform_data = {
/****************************************************************************** /******************************************************************************
* UDC * UDC
******************************************************************************/ ******************************************************************************/
static void palmtx_udc_command(int cmd)
{
gpio_set_value(GPIO_NR_PALMTX_USB_POWER, !cmd);
udelay(50);
gpio_set_value(GPIO_NR_PALMTX_USB_PULLUP, !cmd);
}
static struct pxa2xx_udc_mach_info palmtx_udc_info __initdata = { static struct pxa2xx_udc_mach_info palmtx_udc_info __initdata = {
.gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N, .gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N,
.gpio_vbus_inverted = 1, .gpio_vbus_inverted = 1,
.udc_command = palmtx_udc_command, .gpio_pullup = GPIO_NR_PALMTX_USB_POWER,
.gpio_pullup_inverted = 0,
}; };
/****************************************************************************** /******************************************************************************
...@@ -290,17 +373,16 @@ static int power_supply_init(struct device *dev) ...@@ -290,17 +373,16 @@ static int power_supply_init(struct device *dev)
ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC"); ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC");
if (ret) if (ret)
goto err_cs_ac; goto err1;
ret = gpio_direction_input(GPIO_NR_PALMTX_POWER_DETECT);
ret = gpio_request(GPIO_NR_PALMTX_USB_DETECT_N, "CABLE_STATE_USB");
if (ret) if (ret)
goto err_cs_usb; goto err2;
return 0; return 0;
err_cs_usb: err2:
gpio_free(GPIO_NR_PALMTX_POWER_DETECT); gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
err_cs_ac: err1:
return ret; return ret;
} }
...@@ -309,14 +391,8 @@ static int palmtx_is_ac_online(void) ...@@ -309,14 +391,8 @@ static int palmtx_is_ac_online(void)
return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT); return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT);
} }
static int palmtx_is_usb_online(void)
{
return !gpio_get_value(GPIO_NR_PALMTX_USB_DETECT_N);
}
static void power_supply_exit(struct device *dev) static void power_supply_exit(struct device *dev)
{ {
gpio_free(GPIO_NR_PALMTX_USB_DETECT_N);
gpio_free(GPIO_NR_PALMTX_POWER_DETECT); gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
} }
...@@ -327,7 +403,6 @@ static char *palmtx_supplicants[] = { ...@@ -327,7 +403,6 @@ static char *palmtx_supplicants[] = {
static struct pda_power_pdata power_supply_info = { static struct pda_power_pdata power_supply_info = {
.init = power_supply_init, .init = power_supply_init,
.is_ac_online = palmtx_is_ac_online, .is_ac_online = palmtx_is_ac_online,
.is_usb_online = palmtx_is_usb_online,
.exit = power_supply_exit, .exit = power_supply_exit,
.supplied_to = palmtx_supplicants, .supplied_to = palmtx_supplicants,
.num_supplicants = ARRAY_SIZE(palmtx_supplicants), .num_supplicants = ARRAY_SIZE(palmtx_supplicants),
...@@ -410,12 +485,23 @@ static void __init palmtx_map_io(void) ...@@ -410,12 +485,23 @@ static void __init palmtx_map_io(void)
iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc)); iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
} }
/* setup udc GPIOs initial state */
static void __init palmtx_udc_init(void)
{
if (!gpio_request(GPIO_NR_PALMTX_USB_POWER, "UDC Vbus")) {
gpio_direction_output(GPIO_NR_PALMTX_USB_POWER, 1);
gpio_free(GPIO_NR_PALMTX_USB_POWER);
}
}
static void __init palmtx_init(void) static void __init palmtx_init(void)
{ {
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config)); pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
set_pxa_fb_info(&palmtx_lcd_screen); set_pxa_fb_info(&palmtx_lcd_screen);
pxa_set_mci_info(&palmtx_mci_platform_data); pxa_set_mci_info(&palmtx_mci_platform_data);
palmtx_udc_init();
pxa_set_udc_info(&palmtx_udc_info); pxa_set_udc_info(&palmtx_udc_info);
pxa_set_ac97_info(NULL); pxa_set_ac97_info(NULL);
pxa_set_ficp_info(&palmtx_ficp_platform_data); pxa_set_ficp_info(&palmtx_ficp_platform_data);
......
...@@ -389,6 +389,7 @@ static struct soc_camera_link iclink[] = { ...@@ -389,6 +389,7 @@ static struct soc_camera_link iclink[] = {
.gpio = NR_BUILTIN_GPIO + 1, .gpio = NR_BUILTIN_GPIO + 1,
}, { }, {
.bus_id = 0, /* Must match with the camera ID above */ .bus_id = 0, /* Must match with the camera ID above */
.gpio = -ENXIO,
} }
}; };
......
...@@ -18,6 +18,7 @@ struct s3c2410_spigpio_info { ...@@ -18,6 +18,7 @@ struct s3c2410_spigpio_info {
unsigned long pin_mosi; unsigned long pin_mosi;
unsigned long pin_miso; unsigned long pin_miso;
int num_chipselect;
int bus_num; int bus_num;
void (*chip_select)(struct s3c2410_spigpio_info *spi, int cs); void (*chip_select)(struct s3c2410_spigpio_info *spi, int cs);
......
...@@ -11,8 +11,16 @@ ...@@ -11,8 +11,16 @@
#include <linux/mbus.h> #include <linux/mbus.h>
enum orion_ehci_phy_ver {
EHCI_PHY_ORION,
EHCI_PHY_DD,
EHCI_PHY_KW,
EHCI_PHY_NA,
};
struct orion_ehci_data { struct orion_ehci_data {
struct mbus_dram_target_info *dram; struct mbus_dram_target_info *dram;
enum orion_ehci_phy_ver phy_version;
}; };
......
...@@ -35,22 +35,21 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, ...@@ -35,22 +35,21 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
int error = -EBADF; int error = -EBADF;
struct file * file = NULL; struct file * file = NULL;
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
if (!(flags & MAP_ANONYMOUS)) {
file = fget(fd);
if (!file)
goto out;
}
/* As with sparc32, make sure the shift for mmap2 is constant /* As with sparc32, make sure the shift for mmap2 is constant
(12), no matter what PAGE_SIZE we have.... */ (12), no matter what PAGE_SIZE we have.... */
/* But unlike sparc32, don't just silently break if we're /* But unlike sparc32, don't just silently break if we're
trying to map something we can't */ trying to map something we can't */
if (pgoff & ((1<<(PAGE_SHIFT-12))-1)) if (pgoff & ((1 << (PAGE_SHIFT - 12)) - 1))
return -EINVAL; return -EINVAL;
pgoff >>= PAGE_SHIFT - 12;
pgoff >>= (PAGE_SHIFT - 12); flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
if (!(flags & MAP_ANONYMOUS)) {
file = fget(fd);
if (!file)
goto out;
}
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
......
...@@ -325,8 +325,6 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs) ...@@ -325,8 +325,6 @@ static inline unsigned long user_stack_pointer(struct pt_regs *regs)
#define arch_has_block_step() (1) #define arch_has_block_step() (1)
extern void user_enable_block_step(struct task_struct *); extern void user_enable_block_step(struct task_struct *);
#define __ARCH_WANT_COMPAT_SYS_PTRACE
#endif /* !__KERNEL__ */ #endif /* !__KERNEL__ */
/* pt_all_user_regs is used for PTRACE_GETREGS PTRACE_SETREGS */ /* pt_all_user_regs is used for PTRACE_GETREGS PTRACE_SETREGS */
......
...@@ -292,7 +292,7 @@ EXPORT_SYMBOL(sn_io_slot_fixup); ...@@ -292,7 +292,7 @@ EXPORT_SYMBOL(sn_io_slot_fixup);
* sn_pci_controller_fixup() - This routine sets up a bus's resources * sn_pci_controller_fixup() - This routine sets up a bus's resources
* consistent with the Linux PCI abstraction layer. * consistent with the Linux PCI abstraction layer.
*/ */
static void static void __init
sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus) sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
{ {
s64 status = 0; s64 status = 0;
......
...@@ -23,7 +23,7 @@ __INITDATA ...@@ -23,7 +23,7 @@ __INITDATA
/* /*
* References to members of the boot_cpu_data structure. * References to members of the boot_cpu_data structure.
*/ */
.text .section .text.head, "ax"
.global start_kernel .global start_kernel
.global __bss_start .global __bss_start
.global _end .global _end
...@@ -133,7 +133,6 @@ loop1: ...@@ -133,7 +133,6 @@ loop1:
/* /*
* AP startup routine * AP startup routine
*/ */
.text
.global eit_vector .global eit_vector
ENTRY(startup_AP) ENTRY(startup_AP)
;; setup EVB ;; setup EVB
...@@ -230,6 +229,7 @@ ENTRY(startup_AP) ...@@ -230,6 +229,7 @@ ENTRY(startup_AP)
nop nop
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
.text
ENTRY(stack_start) ENTRY(stack_start)
.long init_thread_union+8192 .long init_thread_union+8192
.long __KERNEL_DS .long __KERNEL_DS
......
...@@ -27,6 +27,7 @@ SECTIONS ...@@ -27,6 +27,7 @@ SECTIONS
_text = .; /* Text and read-only data */ _text = .; /* Text and read-only data */
.boot : { *(.boot) } = 0 .boot : { *(.boot) } = 0
.text : { .text : {
*(.text.head)
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
......
...@@ -7,20 +7,31 @@ ...@@ -7,20 +7,31 @@
#include <asm/break.h> #include <asm/break.h>
#define BUG() \ static inline void __noreturn BUG(void)
do { \ {
__asm__ __volatile__("break %0" : : "i" (BRK_BUG)); \ __asm__ __volatile__("break %0" : : "i" (BRK_BUG));
} while (0) /* Fool GCC into thinking the function doesn't return. */
while (1)
;
}
#define HAVE_ARCH_BUG #define HAVE_ARCH_BUG
#if (_MIPS_ISA > _MIPS_ISA_MIPS1) #if (_MIPS_ISA > _MIPS_ISA_MIPS1)
#define BUG_ON(condition) \ static inline void __BUG_ON(unsigned long condition)
do { \ {
__asm__ __volatile__("tne $0, %0, %1" \ if (__builtin_constant_p(condition)) {
: : "r" (condition), "i" (BRK_BUG)); \ if (condition)
} while (0) BUG();
else
return;
}
__asm__ __volatile__("tne $0, %0, %1"
: : "r" (condition), "i" (BRK_BUG));
}
#define BUG_ON(C) __BUG_ON((unsigned long)(C))
#define HAVE_ARCH_BUG_ON #define HAVE_ARCH_BUG_ON
......
...@@ -9,10 +9,6 @@ ...@@ -9,10 +9,6 @@
#ifndef _ASM_PTRACE_H #ifndef _ASM_PTRACE_H
#define _ASM_PTRACE_H #define _ASM_PTRACE_H
#ifdef CONFIG_64BIT
#define __ARCH_WANT_COMPAT_SYS_PTRACE
#endif
/* 0 - 31 are integer registers, 32 - 63 are fp registers. */ /* 0 - 31 are integer registers, 32 - 63 are fp registers. */
#define FPR_BASE 32 #define FPR_BASE 32
#define PC 64 #define PC 64
......
...@@ -522,17 +522,7 @@ static int gdbstub_single_step(struct pt_regs *regs) ...@@ -522,17 +522,7 @@ static int gdbstub_single_step(struct pt_regs *regs)
} else { } else {
switch (cur) { switch (cur) {
/* Bxx (d8,PC) */ /* Bxx (d8,PC) */
case 0xc0: case 0xc0 ... 0xca:
case 0xc1:
case 0xc2:
case 0xc3:
case 0xc4:
case 0xc5:
case 0xc6:
case 0xc7:
case 0xc8:
case 0xc9:
case 0xca:
if (gdbstub_read_byte(pc + 1, (u8 *) &x) < 0) if (gdbstub_read_byte(pc + 1, (u8 *) &x) < 0)
goto fault; goto fault;
if (!__gdbstub_mark_bp(pc + 2, 0)) if (!__gdbstub_mark_bp(pc + 2, 0))
...@@ -543,17 +533,7 @@ static int gdbstub_single_step(struct pt_regs *regs) ...@@ -543,17 +533,7 @@ static int gdbstub_single_step(struct pt_regs *regs)
break; break;
/* LXX (d8,PC) */ /* LXX (d8,PC) */
case 0xd0: case 0xd0 ... 0xda:
case 0xd1:
case 0xd2:
case 0xd3:
case 0xd4:
case 0xd5:
case 0xd6:
case 0xd7:
case 0xd8:
case 0xd9:
case 0xda:
if (!__gdbstub_mark_bp(pc + 1, 0)) if (!__gdbstub_mark_bp(pc + 1, 0))
goto fault; goto fault;
if (regs->pc != regs->lar && if (regs->pc != regs->lar &&
......
...@@ -42,9 +42,9 @@ struct parisc_driver { ...@@ -42,9 +42,9 @@ struct parisc_driver {
#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv) #define to_parisc_driver(d) container_of(d, struct parisc_driver, drv)
#define parisc_parent(d) to_parisc_device(d->dev.parent) #define parisc_parent(d) to_parisc_device(d->dev.parent)
static inline char *parisc_pathname(struct parisc_device *d) static inline const char *parisc_pathname(struct parisc_device *d)
{ {
return d->dev.bus_id; return dev_name(&d->dev);
} }
static inline void static inline void
......
...@@ -24,13 +24,12 @@ typedef int __kernel_daddr_t; ...@@ -24,13 +24,12 @@ typedef int __kernel_daddr_t;
typedef unsigned long __kernel_size_t; typedef unsigned long __kernel_size_t;
typedef long __kernel_ssize_t; typedef long __kernel_ssize_t;
typedef long __kernel_ptrdiff_t; typedef long __kernel_ptrdiff_t;
typedef long __kernel_time_t;
#else #else
typedef unsigned int __kernel_size_t; typedef unsigned int __kernel_size_t;
typedef int __kernel_ssize_t; typedef int __kernel_ssize_t;
typedef int __kernel_ptrdiff_t; typedef int __kernel_ptrdiff_t;
typedef long __kernel_time_t;
#endif #endif
typedef long __kernel_time_t;
typedef char * __kernel_caddr_t; typedef char * __kernel_caddr_t;
typedef unsigned short __kernel_uid16_t; typedef unsigned short __kernel_uid16_t;
......
...@@ -47,8 +47,6 @@ struct pt_regs { ...@@ -47,8 +47,6 @@ struct pt_regs {
#define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS))
#define __ARCH_WANT_COMPAT_SYS_PTRACE
struct task_struct; struct task_struct;
#define arch_has_single_step() 1 #define arch_has_single_step() 1
void user_disable_single_step(struct task_struct *task); void user_disable_single_step(struct task_struct *task);
......
...@@ -43,7 +43,7 @@ struct hppa_dma_ops *hppa_dma_ops __read_mostly; ...@@ -43,7 +43,7 @@ struct hppa_dma_ops *hppa_dma_ops __read_mostly;
EXPORT_SYMBOL(hppa_dma_ops); EXPORT_SYMBOL(hppa_dma_ops);
static struct device root = { static struct device root = {
.bus_id = "parisc", .init_name = "parisc",
}; };
static inline int check_dev(struct device *dev) static inline int check_dev(struct device *dev)
...@@ -393,7 +393,8 @@ EXPORT_SYMBOL(print_pci_hwpath); ...@@ -393,7 +393,8 @@ EXPORT_SYMBOL(print_pci_hwpath);
static void setup_bus_id(struct parisc_device *padev) static void setup_bus_id(struct parisc_device *padev)
{ {
struct hardware_path path; struct hardware_path path;
char *output = padev->dev.bus_id; char name[20];
char *output = name;
int i; int i;
get_node_path(padev->dev.parent, &path); get_node_path(padev->dev.parent, &path);
...@@ -404,6 +405,7 @@ static void setup_bus_id(struct parisc_device *padev) ...@@ -404,6 +405,7 @@ static void setup_bus_id(struct parisc_device *padev)
output += sprintf(output, "%u:", (unsigned char) path.bc[i]); output += sprintf(output, "%u:", (unsigned char) path.bc[i]);
} }
sprintf(output, "%u", (unsigned char) padev->hw_path); sprintf(output, "%u", (unsigned char) padev->hw_path);
dev_set_name(&padev->dev, name);
} }
struct parisc_device * create_tree_node(char id, struct device *parent) struct parisc_device * create_tree_node(char id, struct device *parent)
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/kallsyms.h>
#include <linux/bug.h> #include <linux/bug.h>
#include <asm/assembly.h> #include <asm/assembly.h>
...@@ -51,7 +50,7 @@ ...@@ -51,7 +50,7 @@
DEFINE_SPINLOCK(pa_dbit_lock); DEFINE_SPINLOCK(pa_dbit_lock);
#endif #endif
void parisc_show_stack(struct task_struct *t, unsigned long *sp, static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
struct pt_regs *regs); struct pt_regs *regs);
static int printbinary(char *buf, unsigned long x, int nbits) static int printbinary(char *buf, unsigned long x, int nbits)
...@@ -121,18 +120,19 @@ static void print_fr(char *level, struct pt_regs *regs) ...@@ -121,18 +120,19 @@ static void print_fr(char *level, struct pt_regs *regs)
void show_regs(struct pt_regs *regs) void show_regs(struct pt_regs *regs)
{ {
int i; int i, user;
char *level; char *level;
unsigned long cr30, cr31; unsigned long cr30, cr31;
level = user_mode(regs) ? KERN_DEBUG : KERN_CRIT; user = user_mode(regs);
level = user ? KERN_DEBUG : KERN_CRIT;
print_gr(level, regs); print_gr(level, regs);
for (i = 0; i < 8; i += 4) for (i = 0; i < 8; i += 4)
PRINTREGS(level, regs->sr, "sr", RFMT, i); PRINTREGS(level, regs->sr, "sr", RFMT, i);
if (user_mode(regs)) if (user)
print_fr(level, regs); print_fr(level, regs);
cr30 = mfctl(30); cr30 = mfctl(30);
...@@ -145,14 +145,18 @@ void show_regs(struct pt_regs *regs) ...@@ -145,14 +145,18 @@ void show_regs(struct pt_regs *regs)
printk("%s CPU: %8d CR30: " RFMT " CR31: " RFMT "\n", printk("%s CPU: %8d CR30: " RFMT " CR31: " RFMT "\n",
level, current_thread_info()->cpu, cr30, cr31); level, current_thread_info()->cpu, cr30, cr31);
printk("%s ORIG_R28: " RFMT "\n", level, regs->orig_r28); printk("%s ORIG_R28: " RFMT "\n", level, regs->orig_r28);
printk(level);
print_symbol(" IAOQ[0]: %s\n", regs->iaoq[0]); if (user) {
printk(level); printk("%s IAOQ[0]: " RFMT "\n", level, regs->iaoq[0]);
print_symbol(" IAOQ[1]: %s\n", regs->iaoq[1]); printk("%s IAOQ[1]: " RFMT "\n", level, regs->iaoq[1]);
printk(level); printk("%s RP(r2): " RFMT "\n", level, regs->gr[2]);
print_symbol(" RP(r2): %s\n", regs->gr[2]); } else {
printk("%s IAOQ[0]: %pS\n", level, (void *) regs->iaoq[0]);
parisc_show_stack(current, NULL, regs); printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
parisc_show_stack(current, NULL, regs);
}
} }
...@@ -173,20 +177,15 @@ static void do_show_stack(struct unwind_frame_info *info) ...@@ -173,20 +177,15 @@ static void do_show_stack(struct unwind_frame_info *info)
break; break;
if (__kernel_text_address(info->ip)) { if (__kernel_text_address(info->ip)) {
printk("%s [<" RFMT ">] ", (i&0x3)==1 ? KERN_CRIT : "", info->ip); printk(KERN_CRIT " [<" RFMT ">] %pS\n",
#ifdef CONFIG_KALLSYMS info->ip, (void *) info->ip);
print_symbol("%s\n", info->ip);
#else
if ((i & 0x03) == 0)
printk("\n");
#endif
i++; i++;
} }
} }
printk("\n"); printk(KERN_CRIT "\n");
} }
void parisc_show_stack(struct task_struct *task, unsigned long *sp, static void parisc_show_stack(struct task_struct *task, unsigned long *sp,
struct pt_regs *regs) struct pt_regs *regs)
{ {
struct unwind_frame_info info; struct unwind_frame_info info;
......
...@@ -18,8 +18,8 @@ / { ...@@ -18,8 +18,8 @@ / {
#size-cells = <1>; #size-cells = <1>;
aliases { aliases {
ethernet0 = &enet0; ethernet0 = &enet1;
ethernet1 = &enet1; ethernet1 = &enet0;
serial0 = &serial0; serial0 = &serial0;
serial1 = &serial1; serial1 = &serial1;
pci0 = &pci0; pci0 = &pci0;
......
...@@ -90,7 +90,7 @@ L2: l2-cache-controller@20000 { ...@@ -90,7 +90,7 @@ L2: l2-cache-controller@20000 {
compatible = "fsl,mpc8572-l2-cache-controller"; compatible = "fsl,mpc8572-l2-cache-controller";
reg = <0x20000 0x1000>; reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes cache-line-size = <32>; // 32 bytes
cache-size = <0x80000>; // L2, 512K cache-size = <0x100000>; // L2, 1M
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
interrupts = <16 2>; interrupts = <16 2>;
}; };
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -838,7 +838,7 @@ CONFIG_PHYLIB=y ...@@ -838,7 +838,7 @@ CONFIG_PHYLIB=y
# #
# MII PHY device drivers # MII PHY device drivers
# #
CONFIG_MARVELL_PHY=y # CONFIG_MARVELL_PHY is not set
# CONFIG_DAVICOM_PHY is not set # CONFIG_DAVICOM_PHY is not set
# CONFIG_QSEMI_PHY is not set # CONFIG_QSEMI_PHY is not set
# CONFIG_LXT_PHY is not set # CONFIG_LXT_PHY is not set
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -280,7 +280,6 @@ extern int hash_huge_page(struct mm_struct *mm, unsigned long access, ...@@ -280,7 +280,6 @@ extern int hash_huge_page(struct mm_struct *mm, unsigned long access,
extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend, extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend,
unsigned long pstart, unsigned long prot, unsigned long pstart, unsigned long prot,
int psize, int ssize); int psize, int ssize);
extern void set_huge_psize(int psize);
extern void add_gpage(unsigned long addr, unsigned long page_size, extern void add_gpage(unsigned long addr, unsigned long page_size,
unsigned long number_of_pages); unsigned long number_of_pages);
extern void demote_segment_4k(struct mm_struct *mm, unsigned long addr); extern void demote_segment_4k(struct mm_struct *mm, unsigned long addr);
......
...@@ -55,8 +55,6 @@ struct pt_regs { ...@@ -55,8 +55,6 @@ struct pt_regs {
#ifdef __powerpc64__ #ifdef __powerpc64__
#define __ARCH_WANT_COMPAT_SYS_PTRACE
#define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */ #define STACK_FRAME_OVERHEAD 112 /* size of minimum stack frame */
#define STACK_FRAME_LR_SAVE 2 /* Location of LR in stack frame */ #define STACK_FRAME_LR_SAVE 2 /* Location of LR in stack frame */
#define STACK_FRAME_REGS_MARKER ASM_CONST(0x7265677368657265) #define STACK_FRAME_REGS_MARKER ASM_CONST(0x7265677368657265)
......
...@@ -34,7 +34,12 @@ _GLOBAL(__setup_cpu_440grx) ...@@ -34,7 +34,12 @@ _GLOBAL(__setup_cpu_440grx)
blr blr
_GLOBAL(__setup_cpu_460ex) _GLOBAL(__setup_cpu_460ex)
_GLOBAL(__setup_cpu_460gt) _GLOBAL(__setup_cpu_460gt)
b __init_fpu_44x mflr r4
bl __init_fpu_44x
bl __fixup_440A_mcheck
mtlr r4
blr
_GLOBAL(__setup_cpu_440gx) _GLOBAL(__setup_cpu_440gx)
_GLOBAL(__setup_cpu_440spe) _GLOBAL(__setup_cpu_440spe)
b __fixup_440A_mcheck b __fixup_440A_mcheck
......
...@@ -57,12 +57,18 @@ system_call_common: ...@@ -57,12 +57,18 @@ system_call_common:
beq- 1f beq- 1f
ld r1,PACAKSAVE(r13) ld r1,PACAKSAVE(r13)
1: std r10,0(r1) 1: std r10,0(r1)
crclr so
std r11,_NIP(r1) std r11,_NIP(r1)
std r12,_MSR(r1) std r12,_MSR(r1)
std r0,GPR0(r1) std r0,GPR0(r1)
std r10,GPR1(r1) std r10,GPR1(r1)
ACCOUNT_CPU_USER_ENTRY(r10, r11) ACCOUNT_CPU_USER_ENTRY(r10, r11)
/*
* This "crclr so" clears CR0.SO, which is the error indication on
* return from this system call. There must be no cmp instruction
* between it and the "mfcr r9" below, otherwise if XER.SO is set,
* CR0.SO will get set, causing all system calls to appear to fail.
*/
crclr so
std r2,GPR2(r1) std r2,GPR2(r1)
std r3,GPR3(r1) std r3,GPR3(r1)
std r4,GPR4(r1) std r4,GPR4(r1)
......
...@@ -250,8 +250,11 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq) ...@@ -250,8 +250,11 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq)
* parsing * parsing
*/ */
dn = pci_device_to_OF_node(pdev); dn = pci_device_to_OF_node(pdev);
if (dn) if (dn) {
return of_irq_map_one(dn, 0, out_irq); rc = of_irq_map_one(dn, 0, out_irq);
if (!rc)
return rc;
}
/* Ok, we don't, time to have fun. Let's start by building up an /* Ok, we don't, time to have fun. Let's start by building up an
* interrupt spec. we assume #interrupt-cells is 1, which is standard * interrupt spec. we assume #interrupt-cells is 1, which is standard
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment