diff options
51 files changed, 291 insertions, 144 deletions
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index 9179e8220314..f73d62e8ab60 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
@@ -57,7 +57,7 @@ extern void fp_enter(void); | |||
57 | #define EXPORT_SYMBOL_ALIAS(sym,orig) \ | 57 | #define EXPORT_SYMBOL_ALIAS(sym,orig) \ |
58 | EXPORT_CRC_ALIAS(sym) \ | 58 | EXPORT_CRC_ALIAS(sym) \ |
59 | static const struct kernel_symbol __ksymtab_##sym \ | 59 | static const struct kernel_symbol __ksymtab_##sym \ |
60 | __attribute_used__ __attribute__((section("__ksymtab"))) = \ | 60 | __used __attribute__((section("__ksymtab"))) = \ |
61 | { (unsigned long)&orig, #sym }; | 61 | { (unsigned long)&orig, #sym }; |
62 | 62 | ||
63 | /* | 63 | /* |
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index 8b63ad89d0a8..ae31deb2d065 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
@@ -13,7 +13,7 @@ int walk_stackframe(unsigned long fp, unsigned long low, unsigned long high, | |||
13 | /* | 13 | /* |
14 | * Check current frame pointer is within bounds | 14 | * Check current frame pointer is within bounds |
15 | */ | 15 | */ |
16 | if ((fp - 12) < low || fp + 4 >= high) | 16 | if (fp < (low + 12) || fp + 4 >= high) |
17 | break; | 17 | break; |
18 | 18 | ||
19 | frame = (struct stackframe *)(fp - 12); | 19 | frame = (struct stackframe *)(fp - 12); |
diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-dk.c index 6043c38c0a9e..af497896a96c 100644 --- a/arch/arm/mach-at91/board-dk.c +++ b/arch/arm/mach-at91/board-dk.c | |||
@@ -132,7 +132,7 @@ static struct mtd_partition __initdata dk_nand_partition[] = { | |||
132 | }, | 132 | }, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | static struct mtd_partition *nand_partitions(int size, int *num_partitions) | 135 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
136 | { | 136 | { |
137 | *num_partitions = ARRAY_SIZE(dk_nand_partition); | 137 | *num_partitions = ARRAY_SIZE(dk_nand_partition); |
138 | return dk_nand_partition; | 138 | return dk_nand_partition; |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 76f6e1e553ea..7d9b1a278fd6 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -96,7 +96,7 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = { | |||
96 | }, | 96 | }, |
97 | }; | 97 | }; |
98 | 98 | ||
99 | static struct mtd_partition *nand_partitions(int size, int *num_partitions) | 99 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
100 | { | 100 | { |
101 | *num_partitions = ARRAY_SIZE(kb9202_nand_partition); | 101 | *num_partitions = ARRAY_SIZE(kb9202_nand_partition); |
102 | return kb9202_nand_partition; | 102 | return kb9202_nand_partition; |
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 1f0c8a400b3a..26ca8ab3f62a 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c | |||
@@ -178,7 +178,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
178 | }, | 178 | }, |
179 | }; | 179 | }; |
180 | 180 | ||
181 | static struct mtd_partition *nand_partitions(int size, int *num_partitions) | 181 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
182 | { | 182 | { |
183 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | 183 | *num_partitions = ARRAY_SIZE(ek_nand_partition); |
184 | return ek_nand_partition; | 184 | return ek_nand_partition; |
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index f57458559fb6..c164c8e58ae6 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c | |||
@@ -180,7 +180,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
180 | }, | 180 | }, |
181 | }; | 181 | }; |
182 | 182 | ||
183 | static struct mtd_partition *nand_partitions(int size, int *num_partitions) | 183 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
184 | { | 184 | { |
185 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | 185 | *num_partitions = ARRAY_SIZE(ek_nand_partition); |
186 | return ek_nand_partition; | 186 | return ek_nand_partition; |
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index 30c79aca84d4..9b61320f295a 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -87,7 +87,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
87 | }, | 87 | }, |
88 | }; | 88 | }; |
89 | 89 | ||
90 | static struct mtd_partition *nand_partitions(int size, int *num_partitions) | 90 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
91 | { | 91 | { |
92 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | 92 | *num_partitions = ARRAY_SIZE(ek_nand_partition); |
93 | return ek_nand_partition; | 93 | return ek_nand_partition; |
diff --git a/arch/arm/mach-footbridge/cats-pci.c b/arch/arm/mach-footbridge/cats-pci.c index 4f984fde7375..35eb232a649a 100644 --- a/arch/arm/mach-footbridge/cats-pci.c +++ b/arch/arm/mach-footbridge/cats-pci.c | |||
@@ -45,7 +45,7 @@ static struct hw_pci cats_pci __initdata = { | |||
45 | .postinit = dc21285_postinit, | 45 | .postinit = dc21285_postinit, |
46 | }; | 46 | }; |
47 | 47 | ||
48 | static int cats_pci_init(void) | 48 | static int __init cats_pci_init(void) |
49 | { | 49 | { |
50 | if (machine_is_cats()) | 50 | if (machine_is_cats()) |
51 | pci_common_init(&cats_pci); | 51 | pci_common_init(&cats_pci); |
diff --git a/arch/arm/mach-imx/generic.c b/arch/arm/mach-imx/generic.c index 7a7fa51ec62c..1c474cf709ca 100644 --- a/arch/arm/mach-imx/generic.c +++ b/arch/arm/mach-imx/generic.c | |||
@@ -201,7 +201,6 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info) | |||
201 | { | 201 | { |
202 | imx_mmc_device.dev.platform_data = info; | 202 | imx_mmc_device.dev.platform_data = info; |
203 | } | 203 | } |
204 | EXPORT_SYMBOL(imx_set_mmc_info); | ||
205 | 204 | ||
206 | static struct imxfb_mach_info imx_fb_info; | 205 | static struct imxfb_mach_info imx_fb_info; |
207 | 206 | ||
diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c index 0fdd03ab36e6..ce7c15c73004 100644 --- a/arch/arm/mach-ixp2000/ixdp2400.c +++ b/arch/arm/mach-ixp2000/ixdp2400.c | |||
@@ -164,7 +164,7 @@ int __init ixdp2400_pci_init(void) | |||
164 | 164 | ||
165 | subsys_initcall(ixdp2400_pci_init); | 165 | subsys_initcall(ixdp2400_pci_init); |
166 | 166 | ||
167 | void ixdp2400_init_irq(void) | 167 | void __init ixdp2400_init_irq(void) |
168 | { | 168 | { |
169 | ixdp2x00_init_irq(IXDP2400_CPLD_INT_STAT, IXDP2400_CPLD_INT_MASK, IXDP2400_NR_IRQS); | 169 | ixdp2x00_init_irq(IXDP2400_CPLD_INT_STAT, IXDP2400_CPLD_INT_MASK, IXDP2400_NR_IRQS); |
170 | } | 170 | } |
diff --git a/arch/arm/mach-ixp2000/ixdp2800.c b/arch/arm/mach-ixp2000/ixdp2800.c index 70d247f09a7e..14f09b80ab77 100644 --- a/arch/arm/mach-ixp2000/ixdp2800.c +++ b/arch/arm/mach-ixp2000/ixdp2800.c | |||
@@ -279,7 +279,7 @@ int __init ixdp2800_pci_init(void) | |||
279 | 279 | ||
280 | subsys_initcall(ixdp2800_pci_init); | 280 | subsys_initcall(ixdp2800_pci_init); |
281 | 281 | ||
282 | void ixdp2800_init_irq(void) | 282 | void __init ixdp2800_init_irq(void) |
283 | { | 283 | { |
284 | ixdp2x00_init_irq(IXDP2800_CPLD_INT_STAT, IXDP2800_CPLD_INT_MASK, IXDP2800_NR_IRQS); | 284 | ixdp2x00_init_irq(IXDP2800_CPLD_INT_STAT, IXDP2800_CPLD_INT_MASK, IXDP2800_NR_IRQS); |
285 | } | 285 | } |
diff --git a/arch/arm/mach-ixp2000/ixdp2x00.c b/arch/arm/mach-ixp2000/ixdp2x00.c index 011065b967b4..73c651e83d92 100644 --- a/arch/arm/mach-ixp2000/ixdp2x00.c +++ b/arch/arm/mach-ixp2000/ixdp2x00.c | |||
@@ -145,7 +145,7 @@ static struct irq_chip ixdp2x00_cpld_irq_chip = { | |||
145 | .unmask = ixdp2x00_irq_unmask | 145 | .unmask = ixdp2x00_irq_unmask |
146 | }; | 146 | }; |
147 | 147 | ||
148 | void ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_irqs) | 148 | void __init ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_irqs) |
149 | { | 149 | { |
150 | unsigned int irq; | 150 | unsigned int irq; |
151 | 151 | ||
diff --git a/arch/arm/mach-ixp23xx/ixdp2351.c b/arch/arm/mach-ixp23xx/ixdp2351.c index 7a86a2516eaa..c41a6b5a0acc 100644 --- a/arch/arm/mach-ixp23xx/ixdp2351.c +++ b/arch/arm/mach-ixp23xx/ixdp2351.c | |||
@@ -124,7 +124,7 @@ static struct irq_chip ixdp2351_intb_chip = { | |||
124 | .unmask = ixdp2351_intb_unmask | 124 | .unmask = ixdp2351_intb_unmask |
125 | }; | 125 | }; |
126 | 126 | ||
127 | void ixdp2351_init_irq(void) | 127 | void __init ixdp2351_init_irq(void) |
128 | { | 128 | { |
129 | int irq; | 129 | int irq; |
130 | 130 | ||
diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c index ac7d43d23c28..227f808dc0ec 100644 --- a/arch/arm/mach-ixp23xx/pci.c +++ b/arch/arm/mach-ixp23xx/pci.c | |||
@@ -284,7 +284,7 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
284 | return 1; | 284 | return 1; |
285 | } | 285 | } |
286 | 286 | ||
287 | void ixp23xx_pci_slave_init(void) | 287 | void __init ixp23xx_pci_slave_init(void) |
288 | { | 288 | { |
289 | ixp23xx_pci_common_init(); | 289 | ixp23xx_pci_common_init(); |
290 | } | 290 | } |
diff --git a/arch/arm/mach-ixp23xx/roadrunner.c b/arch/arm/mach-ixp23xx/roadrunner.c index d06e21b70de5..e35644961aa4 100644 --- a/arch/arm/mach-ixp23xx/roadrunner.c +++ b/arch/arm/mach-ixp23xx/roadrunner.c | |||
@@ -110,7 +110,7 @@ static int __init roadrunner_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) | |||
110 | return NO_IRQ; | 110 | return NO_IRQ; |
111 | } | 111 | } |
112 | 112 | ||
113 | static void roadrunner_pci_preinit(void) | 113 | static void __init roadrunner_pci_preinit(void) |
114 | { | 114 | { |
115 | set_irq_type(IRQ_ROADRUNNER_PCI_INTC, IRQT_LOW); | 115 | set_irq_type(IRQ_ROADRUNNER_PCI_INTC, IRQT_LOW); |
116 | set_irq_type(IRQ_ROADRUNNER_PCI_INTD, IRQT_LOW); | 116 | set_irq_type(IRQ_ROADRUNNER_PCI_INTD, IRQT_LOW); |
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig index 9715ef506c24..060909870b50 100644 --- a/arch/arm/mach-ixp4xx/Kconfig +++ b/arch/arm/mach-ixp4xx/Kconfig | |||
@@ -104,9 +104,6 @@ config MACH_DSMG600 | |||
104 | DSM-G600 RevA device. For more information on this platform, | 104 | DSM-G600 RevA device. For more information on this platform, |
105 | see http://www.nslu2-linux.org/wiki/DSMG600/HomePage | 105 | see http://www.nslu2-linux.org/wiki/DSMG600/HomePage |
106 | 106 | ||
107 | # | ||
108 | # Avila and IXDP share the same source for now. Will change in future | ||
109 | # | ||
110 | config ARCH_IXDP4XX | 107 | config ARCH_IXDP4XX |
111 | bool | 108 | bool |
112 | depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435 | 109 | depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435 |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 64685da1462d..8112f726ffa0 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
@@ -283,7 +283,7 @@ static struct irqaction ixp4xx_timer_irq = { | |||
283 | .handler = ixp4xx_timer_interrupt, | 283 | .handler = ixp4xx_timer_interrupt, |
284 | }; | 284 | }; |
285 | 285 | ||
286 | static void __init ixp4xx_timer_init(void) | 286 | void __init ixp4xx_timer_init(void) |
287 | { | 287 | { |
288 | /* Reset/disable counter */ | 288 | /* Reset/disable counter */ |
289 | *IXP4XX_OSRT1 = 0; | 289 | *IXP4XX_OSRT1 = 0; |
diff --git a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c index 7bc94f3def1c..ad2e5b97966e 100644 --- a/arch/arm/mach-ixp4xx/coyote-pci.c +++ b/arch/arm/mach-ixp4xx/coyote-pci.c | |||
@@ -25,10 +25,6 @@ | |||
25 | 25 | ||
26 | #include <asm/mach/pci.h> | 26 | #include <asm/mach/pci.h> |
27 | 27 | ||
28 | extern void ixp4xx_pci_preinit(void); | ||
29 | extern int ixp4xx_setup(int nr, struct pci_sys_data *sys); | ||
30 | extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys); | ||
31 | |||
32 | void __init coyote_pci_preinit(void) | 28 | void __init coyote_pci_preinit(void) |
33 | { | 29 | { |
34 | set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); | 30 | set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); |
diff --git a/arch/arm/mach-ixp4xx/dsmg600-setup.c b/arch/arm/mach-ixp4xx/dsmg600-setup.c index 1caff65e22cc..1e75e105c4f7 100644 --- a/arch/arm/mach-ixp4xx/dsmg600-setup.c +++ b/arch/arm/mach-ixp4xx/dsmg600-setup.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
19 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
20 | #include <asm/mach/flash.h> | 20 | #include <asm/mach/flash.h> |
21 | #include <asm/mach/time.h> | ||
21 | 22 | ||
22 | static struct flash_platform_data dsmg600_flash_data = { | 23 | static struct flash_platform_data dsmg600_flash_data = { |
23 | .map_name = "cfi_probe", | 24 | .map_name = "cfi_probe", |
@@ -128,6 +129,19 @@ static void dsmg600_power_off(void) | |||
128 | gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH); | 129 | gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH); |
129 | } | 130 | } |
130 | 131 | ||
132 | static void __init dsmg600_timer_init(void) | ||
133 | { | ||
134 | /* The xtal on this machine is non-standard. */ | ||
135 | ixp4xx_timer_freq = DSMG600_FREQ; | ||
136 | |||
137 | /* Call standard timer_init function. */ | ||
138 | ixp4xx_timer_init(); | ||
139 | } | ||
140 | |||
141 | static struct sys_timer dsmg600_timer = { | ||
142 | .init = dsmg600_timer_init, | ||
143 | }; | ||
144 | |||
131 | static void __init dsmg600_init(void) | 145 | static void __init dsmg600_init(void) |
132 | { | 146 | { |
133 | ixp4xx_sys_init(); | 147 | ixp4xx_sys_init(); |
@@ -155,21 +169,13 @@ static void __init dsmg600_init(void) | |||
155 | #endif | 169 | #endif |
156 | } | 170 | } |
157 | 171 | ||
158 | static void __init dsmg600_fixup(struct machine_desc *desc, | ||
159 | struct tag *tags, char **cmdline, struct meminfo *mi) | ||
160 | { | ||
161 | /* The xtal on this machine is non-standard. */ | ||
162 | ixp4xx_timer_freq = DSMG600_FREQ; | ||
163 | } | ||
164 | |||
165 | MACHINE_START(DSMG600, "D-Link DSM-G600 RevA") | 172 | MACHINE_START(DSMG600, "D-Link DSM-G600 RevA") |
166 | /* Maintainer: www.nslu2-linux.org */ | 173 | /* Maintainer: www.nslu2-linux.org */ |
167 | .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, | 174 | .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, |
168 | .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, | 175 | .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, |
169 | .boot_params = 0x00000100, | 176 | .boot_params = 0x00000100, |
170 | .fixup = dsmg600_fixup, | ||
171 | .map_io = ixp4xx_map_io, | 177 | .map_io = ixp4xx_map_io, |
172 | .init_irq = ixp4xx_init_irq, | 178 | .init_irq = ixp4xx_init_irq, |
173 | .timer = &ixp4xx_timer, | 179 | .timer = &dsmg600_timer, |
174 | .init_machine = dsmg600_init, | 180 | .init_machine = dsmg600_init, |
175 | MACHINE_END | 181 | MACHINE_END |
diff --git a/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/arch/arm/mach-ixp4xx/ixdpg425-pci.c index 509a95a692a4..d1e75b7dc3b1 100644 --- a/arch/arm/mach-ixp4xx/ixdpg425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdpg425-pci.c | |||
@@ -23,10 +23,6 @@ | |||
23 | 23 | ||
24 | #include <asm/mach/pci.h> | 24 | #include <asm/mach/pci.h> |
25 | 25 | ||
26 | extern void ixp4xx_pci_preinit(void); | ||
27 | extern int ixp4xx_setup(int nr, struct pci_sys_data *sys); | ||
28 | extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys); | ||
29 | |||
30 | void __init ixdpg425_pci_preinit(void) | 26 | void __init ixdpg425_pci_preinit(void) |
31 | { | 27 | { |
32 | set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); | 28 | set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); |
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c index 9a31444d9214..78a17413ceca 100644 --- a/arch/arm/mach-ixp4xx/nas100d-setup.c +++ b/arch/arm/mach-ixp4xx/nas100d-setup.c | |||
@@ -155,7 +155,8 @@ static void __init nas100d_init(void) | |||
155 | 155 | ||
156 | pm_power_off = nas100d_power_off; | 156 | pm_power_off = nas100d_power_off; |
157 | 157 | ||
158 | /* This is only useful on a modified machine, but it is valuable | 158 | /* |
159 | * This is only useful on a modified machine, but it is valuable | ||
159 | * to have it first in order to see debug messages, and so that | 160 | * to have it first in order to see debug messages, and so that |
160 | * it does *not* get removed if platform_add_devices fails! | 161 | * it does *not* get removed if platform_add_devices fails! |
161 | */ | 162 | */ |
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c index 162c266e5f8f..9bf8ccbcaccf 100644 --- a/arch/arm/mach-ixp4xx/nslu2-setup.c +++ b/arch/arm/mach-ixp4xx/nslu2-setup.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
23 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
24 | #include <asm/mach/flash.h> | 24 | #include <asm/mach/flash.h> |
25 | #include <asm/mach/time.h> | ||
25 | 26 | ||
26 | static struct flash_platform_data nslu2_flash_data = { | 27 | static struct flash_platform_data nslu2_flash_data = { |
27 | .map_name = "cfi_probe", | 28 | .map_name = "cfi_probe", |
@@ -49,26 +50,26 @@ static struct ixp4xx_i2c_pins nslu2_i2c_gpio_pins = { | |||
49 | static struct resource nslu2_led_resources[] = { | 50 | static struct resource nslu2_led_resources[] = { |
50 | { | 51 | { |
51 | .name = "ready", /* green led */ | 52 | .name = "ready", /* green led */ |
52 | .start = NSLU2_LED_GRN, | 53 | .start = NSLU2_LED_GRN_GPIO, |
53 | .end = NSLU2_LED_GRN, | 54 | .end = NSLU2_LED_GRN_GPIO, |
54 | .flags = IXP4XX_GPIO_HIGH, | 55 | .flags = IXP4XX_GPIO_HIGH, |
55 | }, | 56 | }, |
56 | { | 57 | { |
57 | .name = "status", /* red led */ | 58 | .name = "status", /* red led */ |
58 | .start = NSLU2_LED_RED, | 59 | .start = NSLU2_LED_RED_GPIO, |
59 | .end = NSLU2_LED_RED, | 60 | .end = NSLU2_LED_RED_GPIO, |
60 | .flags = IXP4XX_GPIO_HIGH, | 61 | .flags = IXP4XX_GPIO_HIGH, |
61 | }, | 62 | }, |
62 | { | 63 | { |
63 | .name = "disk-1", | 64 | .name = "disk-1", |
64 | .start = NSLU2_LED_DISK1, | 65 | .start = NSLU2_LED_DISK1_GPIO, |
65 | .end = NSLU2_LED_DISK1, | 66 | .end = NSLU2_LED_DISK1_GPIO, |
66 | .flags = IXP4XX_GPIO_LOW, | 67 | .flags = IXP4XX_GPIO_LOW, |
67 | }, | 68 | }, |
68 | { | 69 | { |
69 | .name = "disk-2", | 70 | .name = "disk-2", |
70 | .start = NSLU2_LED_DISK2, | 71 | .start = NSLU2_LED_DISK2_GPIO, |
71 | .end = NSLU2_LED_DISK2, | 72 | .end = NSLU2_LED_DISK2_GPIO, |
72 | .flags = IXP4XX_GPIO_LOW, | 73 | .flags = IXP4XX_GPIO_LOW, |
73 | }, | 74 | }, |
74 | }; | 75 | }; |
@@ -157,10 +158,21 @@ static void nslu2_power_off(void) | |||
157 | gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); | 158 | gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); |
158 | } | 159 | } |
159 | 160 | ||
160 | static void __init nslu2_init(void) | 161 | static void __init nslu2_timer_init(void) |
161 | { | 162 | { |
162 | ixp4xx_timer_freq = NSLU2_FREQ; | 163 | /* The xtal on this machine is non-standard. */ |
164 | ixp4xx_timer_freq = NSLU2_FREQ; | ||
165 | |||
166 | /* Call standard timer_init function. */ | ||
167 | ixp4xx_timer_init(); | ||
168 | } | ||
163 | 169 | ||
170 | static struct sys_timer nslu2_timer = { | ||
171 | .init = nslu2_timer_init, | ||
172 | }; | ||
173 | |||
174 | static void __init nslu2_init(void) | ||
175 | { | ||
164 | ixp4xx_sys_init(); | 176 | ixp4xx_sys_init(); |
165 | 177 | ||
166 | nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | 178 | nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); |
@@ -169,7 +181,8 @@ static void __init nslu2_init(void) | |||
169 | 181 | ||
170 | pm_power_off = nslu2_power_off; | 182 | pm_power_off = nslu2_power_off; |
171 | 183 | ||
172 | /* This is only useful on a modified machine, but it is valuable | 184 | /* |
185 | * This is only useful on a modified machine, but it is valuable | ||
173 | * to have it first in order to see debug messages, and so that | 186 | * to have it first in order to see debug messages, and so that |
174 | * it does *not* get removed if platform_add_devices fails! | 187 | * it does *not* get removed if platform_add_devices fails! |
175 | */ | 188 | */ |
@@ -185,6 +198,6 @@ MACHINE_START(NSLU2, "Linksys NSLU2") | |||
185 | .boot_params = 0x00000100, | 198 | .boot_params = 0x00000100, |
186 | .map_io = ixp4xx_map_io, | 199 | .map_io = ixp4xx_map_io, |
187 | .init_irq = ixp4xx_init_irq, | 200 | .init_irq = ixp4xx_init_irq, |
188 | .timer = &ixp4xx_timer, | 201 | .timer = &nslu2_timer, |
189 | .init_machine = nslu2_init, | 202 | .init_machine = nslu2_init, |
190 | MACHINE_END | 203 | MACHINE_END |
diff --git a/arch/arm/mach-s3c2410/bast.h b/arch/arm/mach-s3c2410/bast.h deleted file mode 100644 index e98543742eb9..000000000000 --- a/arch/arm/mach-s3c2410/bast.h +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/bast.h | ||
2 | extern void bast_init_irq(void); | ||
diff --git a/arch/arm/mach-s3c2410/mach-amlm5900.c b/arch/arm/mach-s3c2410/mach-amlm5900.c index bc308ceb91c3..435adcce6482 100644 --- a/arch/arm/mach-s3c2410/mach-amlm5900.c +++ b/arch/arm/mach-s3c2410/mach-amlm5900.c | |||
@@ -160,7 +160,7 @@ static struct platform_device *amlm5900_devices[] __initdata = { | |||
160 | #endif | 160 | #endif |
161 | }; | 161 | }; |
162 | 162 | ||
163 | void __init amlm5900_map_io(void) | 163 | static void __init amlm5900_map_io(void) |
164 | { | 164 | { |
165 | s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc)); | 165 | s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc)); |
166 | s3c24xx_init_clocks(0); | 166 | s3c24xx_init_clocks(0); |
diff --git a/arch/arm/mach-s3c2412/s3c2412.c b/arch/arm/mach-s3c2412/s3c2412.c index c602aa39f9c4..782b5814ced2 100644 --- a/arch/arm/mach-s3c2412/s3c2412.c +++ b/arch/arm/mach-s3c2412/s3c2412.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
17 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/delay.h> | ||
19 | #include <linux/sysdev.h> | 20 | #include <linux/sysdev.h> |
20 | #include <linux/serial_core.h> | 21 | #include <linux/serial_core.h> |
21 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
@@ -29,6 +30,7 @@ | |||
29 | #include <asm/io.h> | 30 | #include <asm/io.h> |
30 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
31 | 32 | ||
33 | #include <asm/arch/reset.h> | ||
32 | #include <asm/arch/idle.h> | 34 | #include <asm/arch/idle.h> |
33 | 35 | ||
34 | #include <asm/arch/regs-clock.h> | 36 | #include <asm/arch/regs-clock.h> |
@@ -38,6 +40,7 @@ | |||
38 | #include <asm/arch/regs-gpioj.h> | 40 | #include <asm/arch/regs-gpioj.h> |
39 | #include <asm/arch/regs-dsc.h> | 41 | #include <asm/arch/regs-dsc.h> |
40 | #include <asm/arch/regs-spi.h> | 42 | #include <asm/arch/regs-spi.h> |
43 | #include <asm/arch/regs-s3c2412.h> | ||
41 | 44 | ||
42 | #include <asm/plat-s3c24xx/s3c2412.h> | 45 | #include <asm/plat-s3c24xx/s3c2412.h> |
43 | #include <asm/plat-s3c24xx/cpu.h> | 46 | #include <asm/plat-s3c24xx/cpu.h> |
@@ -106,6 +109,23 @@ static void s3c2412_idle(void) | |||
106 | cpu_do_idle(); | 109 | cpu_do_idle(); |
107 | } | 110 | } |
108 | 111 | ||
112 | static void s3c2412_hard_reset(void) | ||
113 | { | ||
114 | /* errata "Watch-dog/Software Reset Problem" specifies that | ||
115 | * this reset must be done with the SYSCLK sourced from | ||
116 | * EXTCLK instead of FOUT to avoid a glitch in the reset | ||
117 | * mechanism. | ||
118 | * | ||
119 | * See the watchdog section of the S3C2412 manual for more | ||
120 | * information on this fix. | ||
121 | */ | ||
122 | |||
123 | __raw_writel(0x00, S3C2412_CLKSRC); | ||
124 | __raw_writel(S3C2412_SWRST_RESET, S3C2412_SWRST); | ||
125 | |||
126 | mdelay(1); | ||
127 | } | ||
128 | |||
109 | /* s3c2412_map_io | 129 | /* s3c2412_map_io |
110 | * | 130 | * |
111 | * register the standard cpu IO areas, and any passed in from the | 131 | * register the standard cpu IO areas, and any passed in from the |
@@ -122,6 +142,10 @@ void __init s3c2412_map_io(struct map_desc *mach_desc, int mach_size) | |||
122 | 142 | ||
123 | s3c24xx_idle = s3c2412_idle; | 143 | s3c24xx_idle = s3c2412_idle; |
124 | 144 | ||
145 | /* set custom reset hook */ | ||
146 | |||
147 | s3c24xx_reset_hook = s3c2412_hard_reset; | ||
148 | |||
125 | /* register our io-tables */ | 149 | /* register our io-tables */ |
126 | 150 | ||
127 | iotable_init(s3c2412_iodesc, ARRAY_SIZE(s3c2412_iodesc)); | 151 | iotable_init(s3c2412_iodesc, ARRAY_SIZE(s3c2412_iodesc)); |
diff --git a/arch/arm/mach-s3c2443/clock.c b/arch/arm/mach-s3c2443/clock.c index 5955efb5de8d..58402948c47c 100644 --- a/arch/arm/mach-s3c2443/clock.c +++ b/arch/arm/mach-s3c2443/clock.c | |||
@@ -394,7 +394,7 @@ static int s3c2443_setrate_usbhost(struct clk *clk, unsigned long rate) | |||
394 | return 0; | 394 | return 0; |
395 | } | 395 | } |
396 | 396 | ||
397 | struct clk clk_usb_bus_host = { | 397 | static struct clk clk_usb_bus_host = { |
398 | .name = "usb-bus-host-parent", | 398 | .name = "usb-bus-host-parent", |
399 | .id = -1, | 399 | .id = -1, |
400 | .parent = &clk_esysclk, | 400 | .parent = &clk_esysclk, |
@@ -758,7 +758,6 @@ static struct clk init_clocks[] = { | |||
758 | .parent = &clk_h, | 758 | .parent = &clk_h, |
759 | .enable = s3c2443_clkcon_enable_h, | 759 | .enable = s3c2443_clkcon_enable_h, |
760 | .ctrlbit = S3C2443_HCLKCON_CFC, | 760 | .ctrlbit = S3C2443_HCLKCON_CFC, |
761 | .ctrlbit = S3C2443_HCLKCON_HSMMC, | ||
762 | }, { | 761 | }, { |
763 | .name = "ssmc", | 762 | .name = "ssmc", |
764 | .id = -1, | 763 | .id = -1, |
diff --git a/arch/arm/mach-sa1100/neponset.c b/arch/arm/mach-sa1100/neponset.c index d7c038a0256b..4cbf9468f654 100644 --- a/arch/arm/mach-sa1100/neponset.c +++ b/arch/arm/mach-sa1100/neponset.c | |||
@@ -139,12 +139,12 @@ static u_int neponset_get_mctrl(struct uart_port *port) | |||
139 | return ret; | 139 | return ret; |
140 | } | 140 | } |
141 | 141 | ||
142 | static struct sa1100_port_fns neponset_port_fns __initdata = { | 142 | static struct sa1100_port_fns neponset_port_fns __devinitdata = { |
143 | .set_mctrl = neponset_set_mctrl, | 143 | .set_mctrl = neponset_set_mctrl, |
144 | .get_mctrl = neponset_get_mctrl, | 144 | .get_mctrl = neponset_get_mctrl, |
145 | }; | 145 | }; |
146 | 146 | ||
147 | static int neponset_probe(struct platform_device *dev) | 147 | static int __devinit neponset_probe(struct platform_device *dev) |
148 | { | 148 | { |
149 | sa1100_register_uart_fns(&neponset_port_fns); | 149 | sa1100_register_uart_fns(&neponset_port_fns); |
150 | 150 | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 5f472a8b406a..e7904bc92c73 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -379,7 +379,7 @@ config CPU_V7 | |||
379 | select CPU_CP15_MMU | 379 | select CPU_CP15_MMU |
380 | select CPU_HAS_ASID | 380 | select CPU_HAS_ASID |
381 | select CPU_COPY_V6 if MMU | 381 | select CPU_COPY_V6 if MMU |
382 | select CPU_TLB_V6 if MMU | 382 | select CPU_TLB_V7 if MMU |
383 | 383 | ||
384 | # Figure out what processor architecture version we should be using. | 384 | # Figure out what processor architecture version we should be using. |
385 | # This defines the compiler instruction set which depends on the machine type. | 385 | # This defines the compiler instruction set which depends on the machine type. |
@@ -498,6 +498,9 @@ config CPU_TLB_V4WBI | |||
498 | config CPU_TLB_V6 | 498 | config CPU_TLB_V6 |
499 | bool | 499 | bool |
500 | 500 | ||
501 | config CPU_TLB_V7 | ||
502 | bool | ||
503 | |||
501 | endif | 504 | endif |
502 | 505 | ||
503 | config CPU_HAS_ASID | 506 | config CPU_HAS_ASID |
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index b5bd335ff14a..762702765fc3 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -46,6 +46,7 @@ obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o | |||
46 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o | 46 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o |
47 | obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o | 47 | obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o |
48 | obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o | 48 | obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o |
49 | obj-$(CONFIG_CPU_TLB_V7) += tlb-v7.o | ||
49 | 50 | ||
50 | obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o | 51 | obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o |
51 | obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o | 52 | obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index dd823dd4a374..718f4782ee8b 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -256,7 +256,7 @@ __v7_proc_info: | |||
256 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | 256 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP |
257 | .long cpu_v7_name | 257 | .long cpu_v7_name |
258 | .long v7_processor_functions | 258 | .long v7_processor_functions |
259 | .long v6wbi_tlb_fns | 259 | .long v7wbi_tlb_fns |
260 | .long v6_user_fns | 260 | .long v6_user_fns |
261 | .long v7_cache_fns | 261 | .long v7_cache_fns |
262 | .size __v7_proc_info, . - __v7_proc_info | 262 | .size __v7_proc_info, . - __v7_proc_info |
diff --git a/arch/arm/mm/tlb-v7.S b/arch/arm/mm/tlb-v7.S new file mode 100644 index 000000000000..b56dda8052f7 --- /dev/null +++ b/arch/arm/mm/tlb-v7.S | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mm/tlb-v7.S | ||
3 | * | ||
4 | * Copyright (C) 1997-2002 Russell King | ||
5 | * Modified for ARMv7 by Catalin Marinas | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * ARM architecture version 6 TLB handling functions. | ||
12 | * These assume a split I/D TLB. | ||
13 | */ | ||
14 | #include <linux/linkage.h> | ||
15 | #include <asm/asm-offsets.h> | ||
16 | #include <asm/page.h> | ||
17 | #include <asm/tlbflush.h> | ||
18 | #include "proc-macros.S" | ||
19 | |||
20 | /* | ||
21 | * v7wbi_flush_user_tlb_range(start, end, vma) | ||
22 | * | ||
23 | * Invalidate a range of TLB entries in the specified address space. | ||
24 | * | ||
25 | * - start - start address (may not be aligned) | ||
26 | * - end - end address (exclusive, may not be aligned) | ||
27 | * - vma - vma_struct describing address range | ||
28 | * | ||
29 | * It is assumed that: | ||
30 | * - the "Invalidate single entry" instruction will invalidate | ||
31 | * both the I and the D TLBs on Harvard-style TLBs | ||
32 | */ | ||
33 | ENTRY(v7wbi_flush_user_tlb_range) | ||
34 | vma_vm_mm r3, r2 @ get vma->vm_mm | ||
35 | mmid r3, r3 @ get vm_mm->context.id | ||
36 | dsb | ||
37 | mov r0, r0, lsr #PAGE_SHIFT @ align address | ||
38 | mov r1, r1, lsr #PAGE_SHIFT | ||
39 | asid r3, r3 @ mask ASID | ||
40 | orr r0, r3, r0, lsl #PAGE_SHIFT @ Create initial MVA | ||
41 | mov r1, r1, lsl #PAGE_SHIFT | ||
42 | vma_vm_flags r2, r2 @ get vma->vm_flags | ||
43 | 1: | ||
44 | mcr p15, 0, r0, c8, c6, 1 @ TLB invalidate D MVA (was 1) | ||
45 | tst r2, #VM_EXEC @ Executable area ? | ||
46 | mcrne p15, 0, r0, c8, c5, 1 @ TLB invalidate I MVA (was 1) | ||
47 | add r0, r0, #PAGE_SZ | ||
48 | cmp r0, r1 | ||
49 | blo 1b | ||
50 | mov ip, #0 | ||
51 | mcr p15, 0, ip, c7, c5, 6 @ flush BTAC/BTB | ||
52 | dsb | ||
53 | mov pc, lr | ||
54 | |||
55 | /* | ||
56 | * v7wbi_flush_kern_tlb_range(start,end) | ||
57 | * | ||
58 | * Invalidate a range of kernel TLB entries | ||
59 | * | ||
60 | * - start - start address (may not be aligned) | ||
61 | * - end - end address (exclusive, may not be aligned) | ||
62 | */ | ||
63 | ENTRY(v7wbi_flush_kern_tlb_range) | ||
64 | dsb | ||
65 | mov r0, r0, lsr #PAGE_SHIFT @ align address | ||
66 | mov r1, r1, lsr #PAGE_SHIFT | ||
67 | mov r0, r0, lsl #PAGE_SHIFT | ||
68 | mov r1, r1, lsl #PAGE_SHIFT | ||
69 | 1: | ||
70 | mcr p15, 0, r0, c8, c6, 1 @ TLB invalidate D MVA | ||
71 | mcr p15, 0, r0, c8, c5, 1 @ TLB invalidate I MVA | ||
72 | add r0, r0, #PAGE_SZ | ||
73 | cmp r0, r1 | ||
74 | blo 1b | ||
75 | mov r2, #0 | ||
76 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB | ||
77 | dsb | ||
78 | isb | ||
79 | mov pc, lr | ||
80 | |||
81 | .section ".text.init", #alloc, #execinstr | ||
82 | |||
83 | .type v7wbi_tlb_fns, #object | ||
84 | ENTRY(v7wbi_tlb_fns) | ||
85 | .long v7wbi_flush_user_tlb_range | ||
86 | .long v7wbi_flush_kern_tlb_range | ||
87 | .long v6wbi_tlb_flags | ||
88 | .size v7wbi_tlb_fns, . - v7wbi_tlb_fns | ||
diff --git a/arch/arm/nwfpe/softfloat.h b/arch/arm/nwfpe/softfloat.h index 0a3067452cd2..260fe29d73f5 100644 --- a/arch/arm/nwfpe/softfloat.h +++ b/arch/arm/nwfpe/softfloat.h | |||
@@ -273,4 +273,7 @@ static inline flag float64_lt_nocheck(float64 a, float64 b) | |||
273 | extern flag float32_is_nan( float32 a ); | 273 | extern flag float32_is_nan( float32 a ); |
274 | extern flag float64_is_nan( float64 a ); | 274 | extern flag float64_is_nan( float64 a ); |
275 | 275 | ||
276 | extern int32 float64_to_uint32( struct roundingData *roundData, float64 a ); | ||
277 | extern int32 float64_to_uint32_round_to_zero( float64 a ); | ||
278 | |||
276 | #endif | 279 | #endif |
diff --git a/arch/arm/oprofile/op_model_mpcore.c b/arch/arm/oprofile/op_model_mpcore.c index 898500718249..7791da791f5f 100644 --- a/arch/arm/oprofile/op_model_mpcore.c +++ b/arch/arm/oprofile/op_model_mpcore.c | |||
@@ -257,8 +257,13 @@ static void em_stop(void) | |||
257 | */ | 257 | */ |
258 | static void em_route_irq(int irq, unsigned int cpu) | 258 | static void em_route_irq(int irq, unsigned int cpu) |
259 | { | 259 | { |
260 | irq_desc[irq].affinity = cpumask_of_cpu(cpu); | 260 | struct irq_desc *desc = irq_desc + irq; |
261 | irq_desc[irq].chip->set_affinity(irq, cpumask_of_cpu(cpu)); | 261 | cpumask_t mask = cpumask_of_cpu(cpu); |
262 | |||
263 | spin_lock_irq(&desc->lock); | ||
264 | desc->affinity = mask; | ||
265 | desc->chip->set_affinity(irq, mask); | ||
266 | spin_unlock_irq(&desc->lock); | ||
262 | } | 267 | } |
263 | 268 | ||
264 | static int em_setup(void) | 269 | static int em_setup(void) |
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index 8a0a99b93641..28e7b91a4553 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c | |||
@@ -837,20 +837,10 @@ static const struct i2c_algorithm i2c_pxa_algorithm = { | |||
837 | .functionality = i2c_pxa_functionality, | 837 | .functionality = i2c_pxa_functionality, |
838 | }; | 838 | }; |
839 | 839 | ||
840 | static struct pxa_i2c i2c_pxa = { | ||
841 | .lock = __SPIN_LOCK_UNLOCKED(i2c_pxa.lock), | ||
842 | .adap = { | ||
843 | .owner = THIS_MODULE, | ||
844 | .algo = &i2c_pxa_algorithm, | ||
845 | .name = "pxa2xx-i2c.0", | ||
846 | .retries = 5, | ||
847 | }, | ||
848 | }; | ||
849 | |||
850 | #define res_len(r) ((r)->end - (r)->start + 1) | 840 | #define res_len(r) ((r)->end - (r)->start + 1) |
851 | static int i2c_pxa_probe(struct platform_device *dev) | 841 | static int i2c_pxa_probe(struct platform_device *dev) |
852 | { | 842 | { |
853 | struct pxa_i2c *i2c = &i2c_pxa; | 843 | struct pxa_i2c *i2c; |
854 | struct resource *res; | 844 | struct resource *res; |
855 | struct i2c_pxa_platform_data *plat = dev->dev.platform_data; | 845 | struct i2c_pxa_platform_data *plat = dev->dev.platform_data; |
856 | int ret; | 846 | int ret; |
@@ -864,15 +854,20 @@ static int i2c_pxa_probe(struct platform_device *dev) | |||
864 | if (!request_mem_region(res->start, res_len(res), res->name)) | 854 | if (!request_mem_region(res->start, res_len(res), res->name)) |
865 | return -ENOMEM; | 855 | return -ENOMEM; |
866 | 856 | ||
867 | i2c = kmalloc(sizeof(struct pxa_i2c), GFP_KERNEL); | 857 | i2c = kzalloc(sizeof(struct pxa_i2c), GFP_KERNEL); |
868 | if (!i2c) { | 858 | if (!i2c) { |
869 | ret = -ENOMEM; | 859 | ret = -ENOMEM; |
870 | goto emalloc; | 860 | goto emalloc; |
871 | } | 861 | } |
872 | 862 | ||
873 | memcpy(i2c, &i2c_pxa, sizeof(struct pxa_i2c)); | 863 | i2c->adap.owner = THIS_MODULE; |
864 | i2c->adap.algo = &i2c_pxa_algorithm; | ||
865 | i2c->adap.retries = 5; | ||
866 | |||
867 | spin_lock_init(&i2c->lock); | ||
874 | init_waitqueue_head(&i2c->wait); | 868 | init_waitqueue_head(&i2c->wait); |
875 | i2c->adap.name[strlen(i2c->adap.name) - 1] = '0' + dev->id % 10; | 869 | |
870 | sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id); | ||
876 | 871 | ||
877 | i2c->reg_base = ioremap(res->start, res_len(res)); | 872 | i2c->reg_base = ioremap(res->start, res_len(res)); |
878 | if (!i2c->reg_base) { | 873 | if (!i2c->reg_base) { |
diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c index 559508795af1..d31ece8f68e9 100644 --- a/drivers/input/serio/sa1111ps2.c +++ b/drivers/input/serio/sa1111ps2.c | |||
@@ -170,7 +170,7 @@ static void ps2_close(struct serio *io) | |||
170 | /* | 170 | /* |
171 | * Clear the input buffer. | 171 | * Clear the input buffer. |
172 | */ | 172 | */ |
173 | static void __init ps2_clear_input(struct ps2if *ps2if) | 173 | static void __devinit ps2_clear_input(struct ps2if *ps2if) |
174 | { | 174 | { |
175 | int maxread = 100; | 175 | int maxread = 100; |
176 | 176 | ||
@@ -228,7 +228,7 @@ static int __init ps2_test(struct ps2if *ps2if) | |||
228 | /* | 228 | /* |
229 | * Add one device to this driver. | 229 | * Add one device to this driver. |
230 | */ | 230 | */ |
231 | static int ps2_probe(struct sa1111_dev *dev) | 231 | static int __devinit ps2_probe(struct sa1111_dev *dev) |
232 | { | 232 | { |
233 | struct ps2if *ps2if; | 233 | struct ps2if *ps2if; |
234 | struct serio *serio; | 234 | struct serio *serio; |
diff --git a/drivers/serial/amba-pl010.c b/drivers/serial/amba-pl010.c index 1a9a24b82636..00d1255e4c12 100644 --- a/drivers/serial/amba-pl010.c +++ b/drivers/serial/amba-pl010.c | |||
@@ -167,8 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap) | |||
167 | ignore_char: | 167 | ignore_char: |
168 | status = readb(uap->port.membase + UART01x_FR); | 168 | status = readb(uap->port.membase + UART01x_FR); |
169 | } | 169 | } |
170 | spin_unlock(&port->lock); | ||
170 | tty_flip_buffer_push(tty); | 171 | tty_flip_buffer_push(tty); |
171 | return; | 172 | spin_lock(&port->lock); |
172 | } | 173 | } |
173 | 174 | ||
174 | static void pl010_tx_chars(struct uart_amba_port *uap) | 175 | static void pl010_tx_chars(struct uart_amba_port *uap) |
diff --git a/drivers/serial/amba-pl011.c b/drivers/serial/amba-pl011.c index 44639e71372a..954073c6ce3a 100644 --- a/drivers/serial/amba-pl011.c +++ b/drivers/serial/amba-pl011.c | |||
@@ -153,8 +153,9 @@ static void pl011_rx_chars(struct uart_amba_port *uap) | |||
153 | ignore_char: | 153 | ignore_char: |
154 | status = readw(uap->port.membase + UART01x_FR); | 154 | status = readw(uap->port.membase + UART01x_FR); |
155 | } | 155 | } |
156 | spin_unlock(&uap->port.lock); | ||
156 | tty_flip_buffer_push(tty); | 157 | tty_flip_buffer_push(tty); |
157 | return; | 158 | spin_lock(&uap->port.lock); |
158 | } | 159 | } |
159 | 160 | ||
160 | static void pl011_tx_chars(struct uart_amba_port *uap) | 161 | static void pl011_tx_chars(struct uart_amba_port *uap) |
diff --git a/drivers/serial/serial_ks8695.c b/drivers/serial/serial_ks8695.c index 698763b28ddd..8721afe1ae4f 100644 --- a/drivers/serial/serial_ks8695.c +++ b/drivers/serial/serial_ks8695.c | |||
@@ -589,7 +589,7 @@ static int __init ks8695_console_setup(struct console *co, char *options) | |||
589 | return uart_set_options(port, co, baud, parity, bits, flow); | 589 | return uart_set_options(port, co, baud, parity, bits, flow); |
590 | } | 590 | } |
591 | 591 | ||
592 | extern struct uart_driver ks8695_reg; | 592 | static struct uart_driver ks8695_reg; |
593 | 593 | ||
594 | static struct console ks8695_console = { | 594 | static struct console ks8695_console = { |
595 | .name = SERIAL_KS8695_DEVNAME, | 595 | .name = SERIAL_KS8695_DEVNAME, |
diff --git a/include/asm-arm/arch-ixp4xx/nas100d.h b/include/asm-arm/arch-ixp4xx/nas100d.h index 84467a5190d0..131e0a1d0df3 100644 --- a/include/asm-arm/arch-ixp4xx/nas100d.h +++ b/include/asm-arm/arch-ixp4xx/nas100d.h | |||
@@ -10,7 +10,7 @@ | |||
10 | * based on ixdp425.h: | 10 | * based on ixdp425.h: |
11 | * Copyright 2004 (c) MontaVista, Software, Inc. | 11 | * Copyright 2004 (c) MontaVista, Software, Inc. |
12 | * | 12 | * |
13 | * This file is licensed under the terms of the GNU General Public | 13 | * This file is licensed under the terms of the GNU General Public |
14 | * License version 2. This program is licensed "as is" without any | 14 | * License version 2. This program is licensed "as is" without any |
15 | * warranty of any kind, whether express or implied. | 15 | * warranty of any kind, whether express or implied. |
16 | */ | 16 | */ |
@@ -36,31 +36,11 @@ | |||
36 | #define NAS100D_PCI_INTD_PIN 8 | 36 | #define NAS100D_PCI_INTD_PIN 8 |
37 | #define NAS100D_PCI_INTE_PIN 7 | 37 | #define NAS100D_PCI_INTE_PIN 7 |
38 | 38 | ||
39 | /* GPIO */ | ||
40 | |||
41 | #define NAS100D_GPIO0 0 | ||
42 | #define NAS100D_GPIO1 1 | ||
43 | #define NAS100D_GPIO2 2 | ||
44 | #define NAS100D_GPIO3 3 | ||
45 | #define NAS100D_GPIO4 4 | ||
46 | #define NAS100D_GPIO5 5 | ||
47 | #define NAS100D_GPIO6 6 | ||
48 | #define NAS100D_GPIO7 7 | ||
49 | #define NAS100D_GPIO8 8 | ||
50 | #define NAS100D_GPIO9 9 | ||
51 | #define NAS100D_GPIO10 10 | ||
52 | #define NAS100D_GPIO11 11 | ||
53 | #define NAS100D_GPIO12 12 | ||
54 | #define NAS100D_GPIO13 13 | ||
55 | #define NAS100D_GPIO14 14 | ||
56 | #define NAS100D_GPIO15 15 | ||
57 | |||
58 | |||
59 | /* Buttons */ | 39 | /* Buttons */ |
60 | 40 | ||
61 | #define NAS100D_PB_GPIO NAS100D_GPIO14 | 41 | #define NAS100D_PB_GPIO 14 |
62 | #define NAS100D_RB_GPIO NAS100D_GPIO4 | 42 | #define NAS100D_RB_GPIO 4 |
63 | #define NAS100D_PO_GPIO NAS100D_GPIO12 /* power off */ | 43 | #define NAS100D_PO_GPIO 12 /* power off */ |
64 | 44 | ||
65 | #define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14 | 45 | #define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14 |
66 | #define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4 | 46 | #define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4 |
diff --git a/include/asm-arm/arch-ixp4xx/nslu2.h b/include/asm-arm/arch-ixp4xx/nslu2.h index 6b437f7c9955..850fdc5b45da 100644 --- a/include/asm-arm/arch-ixp4xx/nslu2.h +++ b/include/asm-arm/arch-ixp4xx/nslu2.h | |||
@@ -9,7 +9,7 @@ | |||
9 | * based on ixdp425.h: | 9 | * based on ixdp425.h: |
10 | * Copyright 2004 (c) MontaVista, Software, Inc. | 10 | * Copyright 2004 (c) MontaVista, Software, Inc. |
11 | * | 11 | * |
12 | * This file is licensed under the terms of the GNU General Public | 12 | * This file is licensed under the terms of the GNU General Public |
13 | * License version 2. This program is licensed "as is" without any | 13 | * License version 2. This program is licensed "as is" without any |
14 | * warranty of any kind, whether express or implied. | 14 | * warranty of any kind, whether express or implied. |
15 | */ | 15 | */ |
@@ -34,36 +34,14 @@ | |||
34 | #define NSLU2_PCI_INTC_PIN 9 | 34 | #define NSLU2_PCI_INTC_PIN 9 |
35 | #define NSLU2_PCI_INTD_PIN 8 | 35 | #define NSLU2_PCI_INTD_PIN 8 |
36 | 36 | ||
37 | |||
38 | /* NSLU2 Timer */ | 37 | /* NSLU2 Timer */ |
39 | #define NSLU2_FREQ 66000000 | 38 | #define NSLU2_FREQ 66000000 |
40 | #define NSLU2_CLOCK_TICK_RATE (((NSLU2_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) | ||
41 | #define NSLU2_CLOCK_TICKS_PER_USEC ((NSLU2_CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC) | ||
42 | |||
43 | /* GPIO */ | ||
44 | |||
45 | #define NSLU2_GPIO0 0 | ||
46 | #define NSLU2_GPIO1 1 | ||
47 | #define NSLU2_GPIO2 2 | ||
48 | #define NSLU2_GPIO3 3 | ||
49 | #define NSLU2_GPIO4 4 | ||
50 | #define NSLU2_GPIO5 5 | ||
51 | #define NSLU2_GPIO6 6 | ||
52 | #define NSLU2_GPIO7 7 | ||
53 | #define NSLU2_GPIO8 8 | ||
54 | #define NSLU2_GPIO9 9 | ||
55 | #define NSLU2_GPIO10 10 | ||
56 | #define NSLU2_GPIO11 11 | ||
57 | #define NSLU2_GPIO12 12 | ||
58 | #define NSLU2_GPIO13 13 | ||
59 | #define NSLU2_GPIO14 14 | ||
60 | #define NSLU2_GPIO15 15 | ||
61 | 39 | ||
62 | /* Buttons */ | 40 | /* Buttons */ |
63 | 41 | ||
64 | #define NSLU2_PB_GPIO NSLU2_GPIO5 | 42 | #define NSLU2_PB_GPIO 5 |
65 | #define NSLU2_PO_GPIO NSLU2_GPIO8 /* power off */ | 43 | #define NSLU2_PO_GPIO 8 /* power off */ |
66 | #define NSLU2_RB_GPIO NSLU2_GPIO12 | 44 | #define NSLU2_RB_GPIO 12 |
67 | 45 | ||
68 | #define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5 | 46 | #define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5 |
69 | #define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12 | 47 | #define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12 |
@@ -79,16 +57,16 @@ | |||
79 | 57 | ||
80 | /* LEDs */ | 58 | /* LEDs */ |
81 | 59 | ||
82 | #define NSLU2_LED_RED NSLU2_GPIO0 | 60 | #define NSLU2_LED_RED_GPIO 0 |
83 | #define NSLU2_LED_GRN NSLU2_GPIO1 | 61 | #define NSLU2_LED_GRN_GPIO 1 |
84 | 62 | ||
85 | #define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED) | 63 | #define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED_GPIO) |
86 | #define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN) | 64 | #define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN_GPIO) |
87 | 65 | ||
88 | #define NSLU2_LED_DISK1 NSLU2_GPIO3 | 66 | #define NSLU2_LED_DISK1_GPIO 3 |
89 | #define NSLU2_LED_DISK2 NSLU2_GPIO2 | 67 | #define NSLU2_LED_DISK2_GPIO 2 |
90 | 68 | ||
91 | #define NSLU2_LED_DISK1_BM (1L << NSLU2_GPIO2) | 69 | #define NSLU2_LED_DISK1_BM (1L << NSLU2_LED_DISK1_GPIO) |
92 | #define NSLU2_LED_DISK2_BM (1L << NSLU2_GPIO3) | 70 | #define NSLU2_LED_DISK2_BM (1L << NSLU2_LED_DISK2_GPIO) |
93 | 71 | ||
94 | 72 | ||
diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h index ab194e5f6653..2a44d3d67980 100644 --- a/include/asm-arm/arch-ixp4xx/platform.h +++ b/include/asm-arm/arch-ixp4xx/platform.h | |||
@@ -113,6 +113,7 @@ extern unsigned long ixp4xx_timer_freq; | |||
113 | extern void ixp4xx_map_io(void); | 113 | extern void ixp4xx_map_io(void); |
114 | extern void ixp4xx_init_irq(void); | 114 | extern void ixp4xx_init_irq(void); |
115 | extern void ixp4xx_sys_init(void); | 115 | extern void ixp4xx_sys_init(void); |
116 | extern void ixp4xx_timer_init(void); | ||
116 | extern struct sys_timer ixp4xx_timer; | 117 | extern struct sys_timer ixp4xx_timer; |
117 | extern void ixp4xx_pci_preinit(void); | 118 | extern void ixp4xx_pci_preinit(void); |
118 | struct pci_sys_data; | 119 | struct pci_sys_data; |
diff --git a/include/asm-arm/arch-s3c2410/map.h b/include/asm-arm/arch-s3c2410/map.h index 4505aefbad17..19e77f038042 100644 --- a/include/asm-arm/arch-s3c2410/map.h +++ b/include/asm-arm/arch-s3c2410/map.h | |||
@@ -153,6 +153,10 @@ | |||
153 | #define S3C2440_PA_AC97 (0x5B000000) | 153 | #define S3C2440_PA_AC97 (0x5B000000) |
154 | #define S3C2440_SZ_AC97 SZ_1M | 154 | #define S3C2440_SZ_AC97 SZ_1M |
155 | 155 | ||
156 | /* S3C2443 High-speed SD/MMC */ | ||
157 | #define S3C2443_PA_HSMMC (0x4A800000) | ||
158 | #define S3C2443_SZ_HSMMC (256) | ||
159 | |||
156 | /* ISA style IO, for each machine to sort out mappings for, if it | 160 | /* ISA style IO, for each machine to sort out mappings for, if it |
157 | * implements it. We reserve two 16M regions for ISA. | 161 | * implements it. We reserve two 16M regions for ISA. |
158 | */ | 162 | */ |
diff --git a/include/asm-arm/arch-s3c2410/regs-gpioj.h b/include/asm-arm/arch-s3c2410/regs-gpioj.h index 02131a5a1d3a..0362332faaf0 100644 --- a/include/asm-arm/arch-s3c2410/regs-gpioj.h +++ b/include/asm-arm/arch-s3c2410/regs-gpioj.h | |||
@@ -98,5 +98,9 @@ | |||
98 | #define S3C2440_GPJ12_OUTP (0x01 << 24) | 98 | #define S3C2440_GPJ12_OUTP (0x01 << 24) |
99 | #define S3C2440_GPJ12_CAMRESET (0x02 << 24) | 99 | #define S3C2440_GPJ12_CAMRESET (0x02 << 24) |
100 | 100 | ||
101 | #define S3C2443_GPJ13 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 13) | ||
102 | #define S3C2443_GPJ14 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 14) | ||
103 | #define S3C2443_GPJ15 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 15) | ||
104 | |||
101 | #endif /* __ASM_ARCH_REGS_GPIOJ_H */ | 105 | #endif /* __ASM_ARCH_REGS_GPIOJ_H */ |
102 | 106 | ||
diff --git a/include/asm-arm/arch-s3c2410/regs-s3c2412.h b/include/asm-arm/arch-s3c2410/regs-s3c2412.h new file mode 100644 index 000000000000..8ca6a3bc8555 --- /dev/null +++ b/include/asm-arm/arch-s3c2410/regs-s3c2412.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* linux/include/asm-arm/arch-s3c2410/regs-s3c2412.h | ||
2 | * | ||
3 | * Copyright 2007 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * S3C2412 specific register definitions | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_ARCH_REGS_S3C2412_H | ||
15 | #define __ASM_ARCH_REGS_S3C2412_H "s3c2412" | ||
16 | |||
17 | #define S3C2412_SWRST (S3C24XX_VA_CLKPWR + 0x30) | ||
18 | #define S3C2412_SWRST_RESET (0x533C2412) | ||
19 | |||
20 | #endif /* __ASM_ARCH_REGS_S3C2412_H */ | ||
21 | |||
diff --git a/include/asm-arm/ioctls.h b/include/asm-arm/ioctls.h index bb9a7aa10c12..a91d8a1523cf 100644 --- a/include/asm-arm/ioctls.h +++ b/include/asm-arm/ioctls.h | |||
@@ -46,6 +46,10 @@ | |||
46 | #define TIOCSBRK 0x5427 /* BSD compatibility */ | 46 | #define TIOCSBRK 0x5427 /* BSD compatibility */ |
47 | #define TIOCCBRK 0x5428 /* BSD compatibility */ | 47 | #define TIOCCBRK 0x5428 /* BSD compatibility */ |
48 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ | 48 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ |
49 | #define TCGETS2 _IOR('T',0x2A, struct termios2) | ||
50 | #define TCSETS2 _IOW('T',0x2B, struct termios2) | ||
51 | #define TCSETSW2 _IOW('T',0x2C, struct termios2) | ||
52 | #define TCSETSF2 _IOW('T',0x2D, struct termios2) | ||
49 | #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | 53 | #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ |
50 | #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ | 54 | #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ |
51 | 55 | ||
diff --git a/include/asm-arm/mach/arch.h b/include/asm-arm/mach/arch.h index fd2f9bf4dcc6..c59fad18e73b 100644 --- a/include/asm-arm/mach/arch.h +++ b/include/asm-arm/mach/arch.h | |||
@@ -49,7 +49,7 @@ struct machine_desc { | |||
49 | */ | 49 | */ |
50 | #define MACHINE_START(_type,_name) \ | 50 | #define MACHINE_START(_type,_name) \ |
51 | static const struct machine_desc __mach_desc_##_type \ | 51 | static const struct machine_desc __mach_desc_##_type \ |
52 | __attribute_used__ \ | 52 | __used \ |
53 | __attribute__((__section__(".arch.info.init"))) = { \ | 53 | __attribute__((__section__(".arch.info.init"))) = { \ |
54 | .nr = MACH_TYPE_##_type, \ | 54 | .nr = MACH_TYPE_##_type, \ |
55 | .name = _name, | 55 | .name = _name, |
diff --git a/include/asm-arm/setup.h b/include/asm-arm/setup.h index e5407392afca..7bbf105463f1 100644 --- a/include/asm-arm/setup.h +++ b/include/asm-arm/setup.h | |||
@@ -185,7 +185,7 @@ struct tagtable { | |||
185 | 185 | ||
186 | #ifdef __KERNEL__ | 186 | #ifdef __KERNEL__ |
187 | 187 | ||
188 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | 188 | #define __tag __used __attribute__((__section__(".taglist.init"))) |
189 | #define __tagtable(tag, fn) \ | 189 | #define __tagtable(tag, fn) \ |
190 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | 190 | static struct tagtable __tagtable_##fn __tag = { tag, fn } |
191 | 191 | ||
@@ -218,7 +218,7 @@ struct early_params { | |||
218 | }; | 218 | }; |
219 | 219 | ||
220 | #define __early_param(name,fn) \ | 220 | #define __early_param(name,fn) \ |
221 | static struct early_params __early_##fn __attribute_used__ \ | 221 | static struct early_params __early_##fn __used \ |
222 | __attribute__((__section__(".early_param.init"))) = { name, fn } | 222 | __attribute__((__section__(".early_param.init"))) = { name, fn } |
223 | 223 | ||
224 | #endif /* __KERNEL__ */ | 224 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-arm/termbits.h b/include/asm-arm/termbits.h index a3f4fe1742d0..f784d11f40b5 100644 --- a/include/asm-arm/termbits.h +++ b/include/asm-arm/termbits.h | |||
@@ -15,6 +15,17 @@ struct termios { | |||
15 | cc_t c_cc[NCCS]; /* control characters */ | 15 | cc_t c_cc[NCCS]; /* control characters */ |
16 | }; | 16 | }; |
17 | 17 | ||
18 | struct termios2 { | ||
19 | tcflag_t c_iflag; /* input mode flags */ | ||
20 | tcflag_t c_oflag; /* output mode flags */ | ||
21 | tcflag_t c_cflag; /* control mode flags */ | ||
22 | tcflag_t c_lflag; /* local mode flags */ | ||
23 | cc_t c_line; /* line discipline */ | ||
24 | cc_t c_cc[NCCS]; /* control characters */ | ||
25 | speed_t c_ispeed; /* input speed */ | ||
26 | speed_t c_ospeed; /* output speed */ | ||
27 | }; | ||
28 | |||
18 | struct ktermios { | 29 | struct ktermios { |
19 | tcflag_t c_iflag; /* input mode flags */ | 30 | tcflag_t c_iflag; /* input mode flags */ |
20 | tcflag_t c_oflag; /* output mode flags */ | 31 | tcflag_t c_oflag; /* output mode flags */ |
@@ -128,6 +139,7 @@ struct ktermios { | |||
128 | #define HUPCL 0002000 | 139 | #define HUPCL 0002000 |
129 | #define CLOCAL 0004000 | 140 | #define CLOCAL 0004000 |
130 | #define CBAUDEX 0010000 | 141 | #define CBAUDEX 0010000 |
142 | #define BOTHER 0010000 | ||
131 | #define B57600 0010001 | 143 | #define B57600 0010001 |
132 | #define B115200 0010002 | 144 | #define B115200 0010002 |
133 | #define B230400 0010003 | 145 | #define B230400 0010003 |
@@ -143,10 +155,12 @@ struct ktermios { | |||
143 | #define B3000000 0010015 | 155 | #define B3000000 0010015 |
144 | #define B3500000 0010016 | 156 | #define B3500000 0010016 |
145 | #define B4000000 0010017 | 157 | #define B4000000 0010017 |
146 | #define CIBAUD 002003600000 /* input baud rate (not used) */ | 158 | #define CIBAUD 002003600000 /* input baud rate */ |
147 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | 159 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ |
148 | #define CRTSCTS 020000000000 /* flow control */ | 160 | #define CRTSCTS 020000000000 /* flow control */ |
149 | 161 | ||
162 | #define IBSHIFT 16 | ||
163 | |||
150 | /* c_lflag bits */ | 164 | /* c_lflag bits */ |
151 | #define ISIG 0000001 | 165 | #define ISIG 0000001 |
152 | #define ICANON 0000002 | 166 | #define ICANON 0000002 |
diff --git a/include/asm-arm/termios.h b/include/asm-arm/termios.h index 329c324c4040..293e3f1bc3f2 100644 --- a/include/asm-arm/termios.h +++ b/include/asm-arm/termios.h | |||
@@ -82,8 +82,10 @@ struct termio { | |||
82 | copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ | 82 | copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ |
83 | }) | 83 | }) |
84 | 84 | ||
85 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) | 85 | #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2)) |
86 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) | 86 | #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2)) |
87 | #define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios)) | ||
88 | #define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios)) | ||
87 | 89 | ||
88 | #endif /* __KERNEL__ */ | 90 | #endif /* __KERNEL__ */ |
89 | 91 | ||
diff --git a/include/asm-arm/tlbflush.h b/include/asm-arm/tlbflush.h index ccd0de010e81..71be4fded7e2 100644 --- a/include/asm-arm/tlbflush.h +++ b/include/asm-arm/tlbflush.h | |||
@@ -138,6 +138,19 @@ | |||
138 | # define v6wbi_always_flags (-1UL) | 138 | # define v6wbi_always_flags (-1UL) |
139 | #endif | 139 | #endif |
140 | 140 | ||
141 | #ifdef CONFIG_CPU_TLB_V7 | ||
142 | # define v7wbi_possible_flags v6wbi_tlb_flags | ||
143 | # define v7wbi_always_flags v6wbi_tlb_flags | ||
144 | # ifdef _TLB | ||
145 | # define MULTI_TLB 1 | ||
146 | # else | ||
147 | # define _TLB v7wbi | ||
148 | # endif | ||
149 | #else | ||
150 | # define v7wbi_possible_flags 0 | ||
151 | # define v7wbi_always_flags (-1UL) | ||
152 | #endif | ||
153 | |||
141 | #ifndef _TLB | 154 | #ifndef _TLB |
142 | #error Unknown TLB model | 155 | #error Unknown TLB model |
143 | #endif | 156 | #endif |
diff --git a/include/asm-arm26/setup.h b/include/asm-arm26/setup.h index 10fd07c76662..e82562306475 100644 --- a/include/asm-arm26/setup.h +++ b/include/asm-arm26/setup.h | |||
@@ -173,7 +173,7 @@ struct tagtable { | |||
173 | int (*parse)(const struct tag *); | 173 | int (*parse)(const struct tag *); |
174 | }; | 174 | }; |
175 | 175 | ||
176 | #define __tag __attribute_used__ __attribute__((__section__(".taglist"))) | 176 | #define __tag __used __attribute__((__section__(".taglist"))) |
177 | #define __tagtable(tag, fn) \ | 177 | #define __tagtable(tag, fn) \ |
178 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | 178 | static struct tagtable __tagtable_##fn __tag = { tag, fn } |
179 | 179 | ||