Commit f54496f5 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  [ARM] Fix some section mismatch warnings
  [ARM] 4417/1: Serial: Fix AMBA drivers locking
  [ARM] 4394/1: ARMv7: Add the TLB range operations
  [ARM] 4410/1: Remove extern declarations in coyote/ixdpg425-pci.c
  [ARM] 4416/1: NWFPE: fix undeclared symbols
  [ARM] 4415/1: AML5900: fix sparse warnings from map_io
  [ARM] 4414/1: S3C2443: sparse fix for clock.c
  [ARM] 4412/1: S3C2412: reset errata fix
  [ARM] 4411/1: KS8695: Another serial driver fix
  [ARM] oprofile: avoid lockdep warnings on mpcore oprofile init
  [ARM] Fix stacktrace FP range checking
  [ARM] use __used attribute
  [ARM] enable arbitary speed tty ioctls and split input/output speed
  [ARM] remove unused header file: arch/arm/mach-s3c2410/bast.h
  [ARM] 4406/1: Trivial NSLU2 / NAS-100D header & setup code cleanup
  [ARM] 4405/1: NSLU2, DSM-G600 frequency fixup code
  [ARM] 4404/1: Trivial IXP42x Kconfig cleanup
  [ARM] 4403/1: Make the PXA-I2C driver work with lockdep validator
  [ARM] 4402/1: S3C2443: Add physical address of HSMMC controller
  [ARM] 4401/1: S3C2443: Add definitions for port GPIOJ
parents aa2d3322 cdea4606
...@@ -57,7 +57,7 @@ extern void fp_enter(void); ...@@ -57,7 +57,7 @@ extern void fp_enter(void);
#define EXPORT_SYMBOL_ALIAS(sym,orig) \ #define EXPORT_SYMBOL_ALIAS(sym,orig) \
EXPORT_CRC_ALIAS(sym) \ EXPORT_CRC_ALIAS(sym) \
static const struct kernel_symbol __ksymtab_##sym \ static const struct kernel_symbol __ksymtab_##sym \
__attribute_used__ __attribute__((section("__ksymtab"))) = \ __used __attribute__((section("__ksymtab"))) = \
{ (unsigned long)&orig, #sym }; { (unsigned long)&orig, #sym };
/* /*
......
...@@ -13,7 +13,7 @@ int walk_stackframe(unsigned long fp, unsigned long low, unsigned long high, ...@@ -13,7 +13,7 @@ int walk_stackframe(unsigned long fp, unsigned long low, unsigned long high,
/* /*
* Check current frame pointer is within bounds * Check current frame pointer is within bounds
*/ */
if ((fp - 12) < low || fp + 4 >= high) if (fp < (low + 12) || fp + 4 >= high)
break; break;
frame = (struct stackframe *)(fp - 12); frame = (struct stackframe *)(fp - 12);
......
...@@ -132,7 +132,7 @@ static struct mtd_partition __initdata dk_nand_partition[] = { ...@@ -132,7 +132,7 @@ static struct mtd_partition __initdata dk_nand_partition[] = {
}, },
}; };
static struct mtd_partition *nand_partitions(int size, int *num_partitions) static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
{ {
*num_partitions = ARRAY_SIZE(dk_nand_partition); *num_partitions = ARRAY_SIZE(dk_nand_partition);
return dk_nand_partition; return dk_nand_partition;
......
...@@ -96,7 +96,7 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = { ...@@ -96,7 +96,7 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = {
}, },
}; };
static struct mtd_partition *nand_partitions(int size, int *num_partitions) static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
{ {
*num_partitions = ARRAY_SIZE(kb9202_nand_partition); *num_partitions = ARRAY_SIZE(kb9202_nand_partition);
return kb9202_nand_partition; return kb9202_nand_partition;
......
...@@ -178,7 +178,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { ...@@ -178,7 +178,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
}, },
}; };
static struct mtd_partition *nand_partitions(int size, int *num_partitions) static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
{ {
*num_partitions = ARRAY_SIZE(ek_nand_partition); *num_partitions = ARRAY_SIZE(ek_nand_partition);
return ek_nand_partition; return ek_nand_partition;
......
...@@ -180,7 +180,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { ...@@ -180,7 +180,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
}, },
}; };
static struct mtd_partition *nand_partitions(int size, int *num_partitions) static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
{ {
*num_partitions = ARRAY_SIZE(ek_nand_partition); *num_partitions = ARRAY_SIZE(ek_nand_partition);
return ek_nand_partition; return ek_nand_partition;
......
...@@ -87,7 +87,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = { ...@@ -87,7 +87,7 @@ static struct mtd_partition __initdata ek_nand_partition[] = {
}, },
}; };
static struct mtd_partition *nand_partitions(int size, int *num_partitions) static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
{ {
*num_partitions = ARRAY_SIZE(ek_nand_partition); *num_partitions = ARRAY_SIZE(ek_nand_partition);
return ek_nand_partition; return ek_nand_partition;
......
...@@ -45,7 +45,7 @@ static struct hw_pci cats_pci __initdata = { ...@@ -45,7 +45,7 @@ static struct hw_pci cats_pci __initdata = {
.postinit = dc21285_postinit, .postinit = dc21285_postinit,
}; };
static int cats_pci_init(void) static int __init cats_pci_init(void)
{ {
if (machine_is_cats()) if (machine_is_cats())
pci_common_init(&cats_pci); pci_common_init(&cats_pci);
......
...@@ -201,7 +201,6 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info) ...@@ -201,7 +201,6 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
{ {
imx_mmc_device.dev.platform_data = info; imx_mmc_device.dev.platform_data = info;
} }
EXPORT_SYMBOL(imx_set_mmc_info);
static struct imxfb_mach_info imx_fb_info; static struct imxfb_mach_info imx_fb_info;
......
...@@ -164,7 +164,7 @@ int __init ixdp2400_pci_init(void) ...@@ -164,7 +164,7 @@ int __init ixdp2400_pci_init(void)
subsys_initcall(ixdp2400_pci_init); subsys_initcall(ixdp2400_pci_init);
void ixdp2400_init_irq(void) void __init ixdp2400_init_irq(void)
{ {
ixdp2x00_init_irq(IXDP2400_CPLD_INT_STAT, IXDP2400_CPLD_INT_MASK, IXDP2400_NR_IRQS); ixdp2x00_init_irq(IXDP2400_CPLD_INT_STAT, IXDP2400_CPLD_INT_MASK, IXDP2400_NR_IRQS);
} }
......
...@@ -279,7 +279,7 @@ int __init ixdp2800_pci_init(void) ...@@ -279,7 +279,7 @@ int __init ixdp2800_pci_init(void)
subsys_initcall(ixdp2800_pci_init); subsys_initcall(ixdp2800_pci_init);
void ixdp2800_init_irq(void) void __init ixdp2800_init_irq(void)
{ {
ixdp2x00_init_irq(IXDP2800_CPLD_INT_STAT, IXDP2800_CPLD_INT_MASK, IXDP2800_NR_IRQS); ixdp2x00_init_irq(IXDP2800_CPLD_INT_STAT, IXDP2800_CPLD_INT_MASK, IXDP2800_NR_IRQS);
} }
......
...@@ -145,7 +145,7 @@ static struct irq_chip ixdp2x00_cpld_irq_chip = { ...@@ -145,7 +145,7 @@ static struct irq_chip ixdp2x00_cpld_irq_chip = {
.unmask = ixdp2x00_irq_unmask .unmask = ixdp2x00_irq_unmask
}; };
void ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_irqs) void __init ixdp2x00_init_irq(volatile unsigned long *stat_reg, volatile unsigned long *mask_reg, unsigned long nr_irqs)
{ {
unsigned int irq; unsigned int irq;
......
...@@ -124,7 +124,7 @@ static struct irq_chip ixdp2351_intb_chip = { ...@@ -124,7 +124,7 @@ static struct irq_chip ixdp2351_intb_chip = {
.unmask = ixdp2351_intb_unmask .unmask = ixdp2351_intb_unmask
}; };
void ixdp2351_init_irq(void) void __init ixdp2351_init_irq(void)
{ {
int irq; int irq;
......
...@@ -284,7 +284,7 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys) ...@@ -284,7 +284,7 @@ int ixp23xx_pci_setup(int nr, struct pci_sys_data *sys)
return 1; return 1;
} }
void ixp23xx_pci_slave_init(void) void __init ixp23xx_pci_slave_init(void)
{ {
ixp23xx_pci_common_init(); ixp23xx_pci_common_init();
} }
...@@ -110,7 +110,7 @@ static int __init roadrunner_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) ...@@ -110,7 +110,7 @@ static int __init roadrunner_map_irq(struct pci_dev *dev, u8 idsel, u8 pin)
return NO_IRQ; return NO_IRQ;
} }
static void roadrunner_pci_preinit(void) static void __init roadrunner_pci_preinit(void)
{ {
set_irq_type(IRQ_ROADRUNNER_PCI_INTC, IRQT_LOW); set_irq_type(IRQ_ROADRUNNER_PCI_INTC, IRQT_LOW);
set_irq_type(IRQ_ROADRUNNER_PCI_INTD, IRQT_LOW); set_irq_type(IRQ_ROADRUNNER_PCI_INTD, IRQT_LOW);
......
...@@ -104,9 +104,6 @@ config MACH_DSMG600 ...@@ -104,9 +104,6 @@ config MACH_DSMG600
DSM-G600 RevA device. For more information on this platform, DSM-G600 RevA device. For more information on this platform,
see http://www.nslu2-linux.org/wiki/DSMG600/HomePage see http://www.nslu2-linux.org/wiki/DSMG600/HomePage
#
# Avila and IXDP share the same source for now. Will change in future
#
config ARCH_IXDP4XX config ARCH_IXDP4XX
bool bool
depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435 depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435
......
...@@ -283,7 +283,7 @@ static struct irqaction ixp4xx_timer_irq = { ...@@ -283,7 +283,7 @@ static struct irqaction ixp4xx_timer_irq = {
.handler = ixp4xx_timer_interrupt, .handler = ixp4xx_timer_interrupt,
}; };
static void __init ixp4xx_timer_init(void) void __init ixp4xx_timer_init(void)
{ {
/* Reset/disable counter */ /* Reset/disable counter */
*IXP4XX_OSRT1 = 0; *IXP4XX_OSRT1 = 0;
......
...@@ -25,10 +25,6 @@ ...@@ -25,10 +25,6 @@
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
extern void ixp4xx_pci_preinit(void);
extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
void __init coyote_pci_preinit(void) void __init coyote_pci_preinit(void)
{ {
set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW); set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQT_LOW);
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <asm/mach/time.h>
static struct flash_platform_data dsmg600_flash_data = { static struct flash_platform_data dsmg600_flash_data = {
.map_name = "cfi_probe", .map_name = "cfi_probe",
...@@ -128,6 +129,19 @@ static void dsmg600_power_off(void) ...@@ -128,6 +129,19 @@ static void dsmg600_power_off(void)
gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH); gpio_line_set(DSMG600_PO_GPIO, IXP4XX_GPIO_HIGH);
} }
static void __init dsmg600_timer_init(void)
{
/* The xtal on this machine is non-standard. */
ixp4xx_timer_freq = DSMG600_FREQ;
/* Call standard timer_init function. */
ixp4xx_timer_init();
}
static struct sys_timer dsmg600_timer = {
.init = dsmg600_timer_init,
};
static void __init dsmg600_init(void) static void __init dsmg600_init(void)
{ {
ixp4xx_sys_init(); ixp4xx_sys_init();
...@@ -155,21 +169,13 @@ static void __init dsmg600_init(void) ...@@ -155,21 +169,13 @@ static void __init dsmg600_init(void)
#endif #endif
} }
static void __init dsmg600_fixup(struct machine_desc *desc,
struct tag *tags, char **cmdline, struct meminfo *mi)
{
/* The xtal on this machine is non-standard. */
ixp4xx_timer_freq = DSMG600_FREQ;
}
MACHINE_START(DSMG600, "D-Link DSM-G600 RevA") MACHINE_START(DSMG600, "D-Link DSM-G600 RevA")
/* Maintainer: www.nslu2-linux.org */ /* Maintainer: www.nslu2-linux.org */
.phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
.io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC, .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xFFFC,
.boot_params = 0x00000100, .boot_params = 0x00000100,
.fixup = dsmg600_fixup,
.map_io = ixp4xx_map_io, .map_io = ixp4xx_map_io,
.init_irq = ixp4xx_init_irq, .init_irq = ixp4xx_init_irq,
.timer = &ixp4xx_timer, .timer = &dsmg600_timer,
.init_machine = dsmg600_init, .init_machine = dsmg600_init,
MACHINE_END MACHINE_END
...@@ -23,10 +23,6 @@ ...@@ -23,10 +23,6 @@
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
extern void ixp4xx_pci_preinit(void);
extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
void __init ixdpg425_pci_preinit(void) void __init ixdpg425_pci_preinit(void)
{ {
set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW); set_irq_type(IRQ_IXP4XX_GPIO6, IRQT_LOW);
......
...@@ -155,7 +155,8 @@ static void __init nas100d_init(void) ...@@ -155,7 +155,8 @@ static void __init nas100d_init(void)
pm_power_off = nas100d_power_off; pm_power_off = nas100d_power_off;
/* This is only useful on a modified machine, but it is valuable /*
* This is only useful on a modified machine, but it is valuable
* to have it first in order to see debug messages, and so that * to have it first in order to see debug messages, and so that
* it does *not* get removed if platform_add_devices fails! * it does *not* get removed if platform_add_devices fails!
*/ */
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <asm/mach/time.h>
static struct flash_platform_data nslu2_flash_data = { static struct flash_platform_data nslu2_flash_data = {
.map_name = "cfi_probe", .map_name = "cfi_probe",
...@@ -49,26 +50,26 @@ static struct ixp4xx_i2c_pins nslu2_i2c_gpio_pins = { ...@@ -49,26 +50,26 @@ static struct ixp4xx_i2c_pins nslu2_i2c_gpio_pins = {
static struct resource nslu2_led_resources[] = { static struct resource nslu2_led_resources[] = {
{ {
.name = "ready", /* green led */ .name = "ready", /* green led */
.start = NSLU2_LED_GRN, .start = NSLU2_LED_GRN_GPIO,
.end = NSLU2_LED_GRN, .end = NSLU2_LED_GRN_GPIO,
.flags = IXP4XX_GPIO_HIGH, .flags = IXP4XX_GPIO_HIGH,
}, },
{ {
.name = "status", /* red led */ .name = "status", /* red led */
.start = NSLU2_LED_RED, .start = NSLU2_LED_RED_GPIO,
.end = NSLU2_LED_RED, .end = NSLU2_LED_RED_GPIO,
.flags = IXP4XX_GPIO_HIGH, .flags = IXP4XX_GPIO_HIGH,
}, },
{ {
.name = "disk-1", .name = "disk-1",
.start = NSLU2_LED_DISK1, .start = NSLU2_LED_DISK1_GPIO,
.end = NSLU2_LED_DISK1, .end = NSLU2_LED_DISK1_GPIO,
.flags = IXP4XX_GPIO_LOW, .flags = IXP4XX_GPIO_LOW,
}, },
{ {
.name = "disk-2", .name = "disk-2",
.start = NSLU2_LED_DISK2, .start = NSLU2_LED_DISK2_GPIO,
.end = NSLU2_LED_DISK2, .end = NSLU2_LED_DISK2_GPIO,
.flags = IXP4XX_GPIO_LOW, .flags = IXP4XX_GPIO_LOW,
}, },
}; };
...@@ -157,10 +158,21 @@ static void nslu2_power_off(void) ...@@ -157,10 +158,21 @@ static void nslu2_power_off(void)
gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH);
} }
static void __init nslu2_init(void) static void __init nslu2_timer_init(void)
{ {
ixp4xx_timer_freq = NSLU2_FREQ; /* The xtal on this machine is non-standard. */
ixp4xx_timer_freq = NSLU2_FREQ;
/* Call standard timer_init function. */
ixp4xx_timer_init();
}
static struct sys_timer nslu2_timer = {
.init = nslu2_timer_init,
};
static void __init nslu2_init(void)
{
ixp4xx_sys_init(); ixp4xx_sys_init();
nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); nslu2_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
...@@ -169,7 +181,8 @@ static void __init nslu2_init(void) ...@@ -169,7 +181,8 @@ static void __init nslu2_init(void)
pm_power_off = nslu2_power_off; pm_power_off = nslu2_power_off;
/* This is only useful on a modified machine, but it is valuable /*
* This is only useful on a modified machine, but it is valuable
* to have it first in order to see debug messages, and so that * to have it first in order to see debug messages, and so that
* it does *not* get removed if platform_add_devices fails! * it does *not* get removed if platform_add_devices fails!
*/ */
...@@ -185,6 +198,6 @@ MACHINE_START(NSLU2, "Linksys NSLU2") ...@@ -185,6 +198,6 @@ MACHINE_START(NSLU2, "Linksys NSLU2")
.boot_params = 0x00000100, .boot_params = 0x00000100,
.map_io = ixp4xx_map_io, .map_io = ixp4xx_map_io,
.init_irq = ixp4xx_init_irq, .init_irq = ixp4xx_init_irq,
.timer = &ixp4xx_timer, .timer = &nslu2_timer,
.init_machine = nslu2_init, .init_machine = nslu2_init,
MACHINE_END MACHINE_END
/* linux/arch/arm/mach-s3c2410/bast.h
extern void bast_init_irq(void);
...@@ -160,7 +160,7 @@ static struct platform_device *amlm5900_devices[] __initdata = { ...@@ -160,7 +160,7 @@ static struct platform_device *amlm5900_devices[] __initdata = {
#endif #endif
}; };
void __init amlm5900_map_io(void) static void __init amlm5900_map_io(void)
{ {
s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc)); s3c24xx_init_io(amlm5900_iodesc, ARRAY_SIZE(amlm5900_iodesc));
s3c24xx_init_clocks(0); s3c24xx_init_clocks(0);
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h>
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -29,6 +30,7 @@ ...@@ -29,6 +30,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/arch/reset.h>
#include <asm/arch/idle.h> #include <asm/arch/idle.h>
#include <asm/arch/regs-clock.h> #include <asm/arch/regs-clock.h>
...@@ -38,6 +40,7 @@ ...@@ -38,6 +40,7 @@
#include <asm/arch/regs-gpioj.h> #include <asm/arch/regs-gpioj.h>
#include <asm/arch/regs-dsc.h> #include <asm/arch/regs-dsc.h>
#include <asm/arch/regs-spi.h> #include <asm/arch/regs-spi.h>
#include <asm/arch/regs-s3c2412.h>
#include <asm/plat-s3c24xx/s3c2412.h> #include <asm/plat-s3c24xx/s3c2412.h>
#include <asm/plat-s3c24xx/cpu.h> #include <asm/plat-s3c24xx/cpu.h>
...@@ -106,6 +109,23 @@ static void s3c2412_idle(void) ...@@ -106,6 +109,23 @@ static void s3c2412_idle(void)
cpu_do_idle(); cpu_do_idle();
} }
static void s3c2412_hard_reset(void)
{
/* errata "Watch-dog/Software Reset Problem" specifies that
* this reset must be done with the SYSCLK sourced from
* EXTCLK instead of FOUT to avoid a glitch in the reset
* mechanism.
*
* See the watchdog section of the S3C2412 manual for more
* information on this fix.
*/
__raw_writel(0x00, S3C2412_CLKSRC);
__raw_writel(S3C2412_SWRST_RESET, S3C2412_SWRST);
mdelay(1);
}
/* s3c2412_map_io /* s3c2412_map_io
* *
* register the standard cpu IO areas, and any passed in from the * 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,6 +142,10 @@ void __init s3c2412_map_io(struct map_desc *mach_desc, int mach_size)
s3c24xx_idle = s3c2412_idle; s3c24xx_idle = s3c2412_idle;
/* set custom reset hook */
s3c24xx_reset_hook = s3c2412_hard_reset;
/* register our io-tables */ /* register our io-tables */
iotable_init(s3c2412_iodesc, ARRAY_SIZE(s3c2412_iodesc)); iotable_init(s3c2412_iodesc, ARRAY_SIZE(s3c2412_iodesc));
......
...@@ -394,7 +394,7 @@ static int s3c2443_setrate_usbhost(struct clk *clk, unsigned long rate) ...@@ -394,7 +394,7 @@ static int s3c2443_setrate_usbhost(struct clk *clk, unsigned long rate)
return 0; return 0;
} }
struct clk clk_usb_bus_host = { static struct clk clk_usb_bus_host = {
.name = "usb-bus-host-parent", .name = "usb-bus-host-parent",
.id = -1, .id = -1,
.parent = &clk_esysclk, .parent = &clk_esysclk,
...@@ -758,7 +758,6 @@ static struct clk init_clocks[] = { ...@@ -758,7 +758,6 @@ static struct clk init_clocks[] = {
.parent = &clk_h, .parent = &clk_h,
.enable = s3c2443_clkcon_enable_h, .enable = s3c2443_clkcon_enable_h,
.ctrlbit = S3C2443_HCLKCON_CFC, .ctrlbit = S3C2443_HCLKCON_CFC,
.ctrlbit = S3C2443_HCLKCON_HSMMC,
}, { }, {
.name = "ssmc", .name = "ssmc",
.id = -1, .id = -1,
......
...@@ -139,12 +139,12 @@ static u_int neponset_get_mctrl(struct uart_port *port) ...@@ -139,12 +139,12 @@ static u_int neponset_get_mctrl(struct uart_port *port)
return ret; return ret;
} }
static struct sa1100_port_fns neponset_port_fns __initdata = { static struct sa1100_port_fns neponset_port_fns __devinitdata = {
.set_mctrl = neponset_set_mctrl, .set_mctrl = neponset_set_mctrl,
.get_mctrl = neponset_get_mctrl, .get_mctrl = neponset_get_mctrl,
}; };
static int neponset_probe(struct platform_device *dev) static int __devinit neponset_probe(struct platform_device *dev)
{ {
sa1100_register_uart_fns(&neponset_port_fns); sa1100_register_uart_fns(&neponset_port_fns);
......
...@@ -379,7 +379,7 @@ config CPU_V7 ...@@ -379,7 +379,7 @@ config CPU_V7
select CPU_CP15_MMU select CPU_CP15_MMU
select CPU_HAS_ASID select CPU_HAS_ASID
select CPU_COPY_V6 if MMU select CPU_COPY_V6 if MMU
select CPU_TLB_V6 if MMU select CPU_TLB_V7 if MMU
# Figure out what processor architecture version we should be using. # Figure out what processor architecture version we should be using.
# This defines the compiler instruction set which depends on the machine type. # This defines the compiler instruction set which depends on the machine type.
...@@ -498,6 +498,9 @@ config CPU_TLB_V4WBI ...@@ -498,6 +498,9 @@ config CPU_TLB_V4WBI
config CPU_TLB_V6 config CPU_TLB_V6
bool bool
config CPU_TLB_V7
bool
endif endif
config CPU_HAS_ASID config CPU_HAS_ASID
......
...@@ -46,6 +46,7 @@ obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o ...@@ -46,6 +46,7 @@ obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o
obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o
obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o
obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o
obj-$(CONFIG_CPU_TLB_V7) += tlb-v7.o
obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o obj-$(CONFIG_CPU_ARM610) += proc-arm6_7.o
obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o
......
...@@ -256,7 +256,7 @@ __v7_proc_info: ...@@ -256,7 +256,7 @@ __v7_proc_info:
.long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
.long cpu_v7_name .long cpu_v7_name
.long v7_processor_functions .long v7_processor_functions
.long v6wbi_tlb_fns .long v7wbi_tlb_fns
.long v6_user_fns .long v6_user_fns
.long v7_cache_fns .long v7_cache_fns
.size __v7_proc_info, . - __v7_proc_info .size __v7_proc_info, . - __v7_proc_info
/*
* linux/arch/arm/mm/tlb-v7.S
*
* Copyright (C) 1997-2002 Russell King
* Modified for ARMv7 by Catalin Marinas
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* ARM architecture version 6 TLB handling functions.
* These assume a split I/D TLB.
*/
#include <linux/linkage.h>
#include <asm/asm-offsets.h>
#include <asm/page.h>
#include <asm/tlbflush.h>
#include "proc-macros.S"
/*
* v7wbi_flush_user_tlb_range(start, end, vma)
*
* Invalidate a range of TLB entries in the specified address space.
*
* - start - start address (may not be aligned)
* - end - end address (exclusive, may not be aligned)
* - vma - vma_struct describing address range
*
* It is assumed that:
* - the "Invalidate single entry" instruction will invalidate
* both the I and the D TLBs on Harvard-style TLBs
*/
ENTRY(v7wbi_flush_user_tlb_range)
vma_vm_mm r3, r2 @ get vma->vm_mm
mmid r3, r3 @ get vm_mm->context.id
dsb
mov r0, r0, lsr #PAGE_SHIFT @ align address
mov r1, r1, lsr #PAGE_SHIFT
asid r3, r3 @ mask ASID
orr r0, r3, r0, lsl #PAGE_SHIFT @ Create initial MVA
mov r1, r1, lsl #PAGE_SHIFT
vma_vm_flags r2, r2 @ get vma->vm_flags
1:
mcr p15, 0, r0, c8, c6, 1 @ TLB invalidate D MVA (was 1)
tst r2, #VM_EXEC @ Executable area ?
mcrne p15, 0, r0, c8, c5, 1 @ TLB invalidate I MVA (was 1)
add r0, r0, #PAGE_SZ
cmp r0, r1
blo 1b
mov ip, #0
mcr p15, 0, ip, c7, c5, 6 @ flush BTAC/BTB
dsb
mov pc, lr
/*
* v7wbi_flush_kern_tlb_range(start,end)
*
* Invalidate a range of kernel TLB entries
*
* - start - start address (may not be aligned)
* - end - end address (exclusive, may not be aligned)
*/
ENTRY(v7wbi_flush_kern_tlb_range)
dsb
mov r0, r0, lsr #PAGE_SHIFT @ align address
mov r1, r1, lsr #PAGE_SHIFT
mov r0, r0, lsl #PAGE_SHIFT
mov r1, r1, lsl #PAGE_SHIFT
1:
mcr p15, 0, r0, c8, c6, 1 @ TLB invalidate D MVA
mcr p15, 0, r0, c8, c5, 1 @ TLB invalidate I MVA
add r0, r0, #PAGE_SZ
cmp r0, r1
blo 1b
mov r2, #0
mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB
dsb
isb
mov pc, lr
.section ".text.init", #alloc, #execinstr
.type v7wbi_tlb_fns, #object
ENTRY(v7wbi_tlb_fns)
.long v7wbi_flush_user_tlb_range
.long v7wbi_flush_kern_tlb_range
.long v6wbi_tlb_flags
.size v7wbi_tlb_fns, . - v7wbi_tlb_fns
...@@ -273,4 +273,7 @@ static inline flag float64_lt_nocheck(float64 a, float64 b) ...@@ -273,4 +273,7 @@ static inline flag float64_lt_nocheck(float64 a, float64 b)
extern flag float32_is_nan( float32 a ); extern flag float32_is_nan( float32 a );
extern flag float64_is_nan( float64 a ); extern flag float64_is_nan( float64 a );
extern int32 float64_to_uint32( struct roundingData *roundData, float64 a );
extern int32 float64_to_uint32_round_to_zero( float64 a );
#endif #endif
...@@ -257,8 +257,13 @@ static void em_stop(void) ...@@ -257,8 +257,13 @@ static void em_stop(void)
*/ */
static void em_route_irq(int irq, unsigned int cpu) static void em_route_irq(int irq, unsigned int cpu)
{ {
irq_desc[irq].affinity = cpumask_of_cpu(cpu); struct irq_desc *desc = irq_desc + irq;
irq_desc[irq].chip->set_affinity(irq, cpumask_of_cpu(cpu)); cpumask_t mask = cpumask_of_cpu(cpu);
spin_lock_irq(&desc->lock);
desc->affinity = mask;
desc->chip->set_affinity(irq, mask);
spin_unlock_irq(&desc->lock);
} }
static int em_setup(void) static int em_setup(void)
......
...@@ -837,20 +837,10 @@ static const struct i2c_algorithm i2c_pxa_algorithm = { ...@@ -837,20 +837,10 @@ static const struct i2c_algorithm i2c_pxa_algorithm = {
.functionality = i2c_pxa_functionality, .functionality = i2c_pxa_functionality,
}; };
static struct pxa_i2c i2c_pxa = {
.lock = __SPIN_LOCK_UNLOCKED(i2c_pxa.lock),
.adap = {
.owner = THIS_MODULE,
.algo = &i2c_pxa_algorithm,
.name = "pxa2xx-i2c.0",
.retries = 5,
},
};
#define res_len(r) ((r)->end - (r)->start + 1) #define res_len(r) ((r)->end - (r)->start + 1)
static int i2c_pxa_probe(struct platform_device *dev) static int i2c_pxa_probe(struct platform_device *dev)
{ {
struct pxa_i2c *i2c = &i2c_pxa; struct pxa_i2c *i2c;
struct resource *res; struct resource *res;
struct i2c_pxa_platform_data *plat = dev->dev.platform_data; struct i2c_pxa_platform_data *plat = dev->dev.platform_data;
int ret; int ret;
...@@ -864,15 +854,20 @@ static int i2c_pxa_probe(struct platform_device *dev) ...@@ -864,15 +854,20 @@ static int i2c_pxa_probe(struct platform_device *dev)
if (!request_mem_region(res->start, res_len(res), res->name)) if (!request_mem_region(res->start, res_len(res), res->name))
return -ENOMEM; return -ENOMEM;
i2c = kmalloc(sizeof(struct pxa_i2c), GFP_KERNEL); i2c = kzalloc(sizeof(struct pxa_i2c), GFP_KERNEL);
if (!i2c) { if (!i2c) {
ret = -ENOMEM; ret = -ENOMEM;
goto emalloc; goto emalloc;
} }
memcpy(i2c, &i2c_pxa, sizeof(struct pxa_i2c)); i2c->adap.owner = THIS_MODULE;
i2c->adap.algo = &i2c_pxa_algorithm;
i2c->adap.retries = 5;
spin_lock_init(&i2c->lock);
init_waitqueue_head(&i2c->wait); init_waitqueue_head(&i2c->wait);
i2c->adap.name[strlen(i2c->adap.name) - 1] = '0' + dev->id % 10;
sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id);
i2c->reg_base = ioremap(res->start, res_len(res)); i2c->reg_base = ioremap(res->start, res_len(res));
if (!i2c->reg_base) { if (!i2c->reg_base) {
......
...@@ -170,7 +170,7 @@ static void ps2_close(struct serio *io) ...@@ -170,7 +170,7 @@ static void ps2_close(struct serio *io)
/* /*
* Clear the input buffer. * Clear the input buffer.
*/ */
static void __init ps2_clear_input(struct ps2if *ps2if) static void __devinit ps2_clear_input(struct ps2if *ps2if)
{ {
int maxread = 100; int maxread = 100;
...@@ -228,7 +228,7 @@ static int __init ps2_test(struct ps2if *ps2if) ...@@ -228,7 +228,7 @@ static int __init ps2_test(struct ps2if *ps2if)
/* /*
* Add one device to this driver. * Add one device to this driver.
*/ */
static int ps2_probe(struct sa1111_dev *dev) static int __devinit ps2_probe(struct sa1111_dev *dev)
{ {
struct ps2if *ps2if; struct ps2if *ps2if;
struct serio *serio; struct serio *serio;
......
...@@ -167,8 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap) ...@@ -167,8 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap)
ignore_char: ignore_char:
status = readb(uap->port.membase + UART01x_FR); status = readb(uap->port.membase + UART01x_FR);
} }
spin_unlock(&port->lock);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
return; spin_lock(&port->lock);
} }
static void pl010_tx_chars(struct uart_amba_port *uap) static void pl010_tx_chars(struct uart_amba_port *uap)
......
...@@ -153,8 +153,9 @@ static void pl011_rx_chars(struct uart_amba_port *uap) ...@@ -153,8 +153,9 @@ static void pl011_rx_chars(struct uart_amba_port *uap)
ignore_char: ignore_char:
status = readw(uap->port.membase + UART01x_FR); status = readw(uap->port.membase + UART01x_FR);
} }
spin_unlock(&uap->port.lock);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
return; spin_lock(&uap->port.lock);
} }
static void pl011_tx_chars(struct uart_amba_port *uap) static void pl011_tx_chars(struct uart_amba_port *uap)
......
...@@ -589,7 +589,7 @@ static int __init ks8695_console_setup(struct console *co, char *options) ...@@ -589,7 +589,7 @@ static int __init ks8695_console_setup(struct console *co, char *options)
return uart_set_options(port, co, baud, parity, bits, flow); return uart_set_options(port, co, baud, parity, bits, flow);
} }
extern struct uart_driver ks8695_reg; static struct uart_driver ks8695_reg;
static struct console ks8695_console = { static struct console ks8695_console = {
.name = SERIAL_KS8695_DEVNAME, .name = SERIAL_KS8695_DEVNAME,
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* based on ixdp425.h: * based on ixdp425.h:
* Copyright 2004 (c) MontaVista, Software, Inc. * Copyright 2004 (c) MontaVista, Software, Inc.
* *
* This file is licensed under the terms of the GNU General Public * This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any * License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied. * warranty of any kind, whether express or implied.
*/ */
...@@ -36,31 +36,11 @@ ...@@ -36,31 +36,11 @@
#define NAS100D_PCI_INTD_PIN 8 #define NAS100D_PCI_INTD_PIN 8
#define NAS100D_PCI_INTE_PIN 7 #define NAS100D_PCI_INTE_PIN 7
/* GPIO */
#define NAS100D_GPIO0 0
#define NAS100D_GPIO1 1
#define NAS100D_GPIO2 2
#define NAS100D_GPIO3 3
#define NAS100D_GPIO4 4
#define NAS100D_GPIO5 5
#define NAS100D_GPIO6 6
#define NAS100D_GPIO7 7
#define NAS100D_GPIO8 8
#define NAS100D_GPIO9 9
#define NAS100D_GPIO10 10
#define NAS100D_GPIO11 11
#define NAS100D_GPIO12 12
#define NAS100D_GPIO13 13
#define NAS100D_GPIO14 14
#define NAS100D_GPIO15 15
/* Buttons */ /* Buttons */
#define NAS100D_PB_GPIO NAS100D_GPIO14 #define NAS100D_PB_GPIO 14
#define NAS100D_RB_GPIO NAS100D_GPIO4 #define NAS100D_RB_GPIO 4
#define NAS100D_PO_GPIO NAS100D_GPIO12 /* power off */ #define NAS100D_PO_GPIO 12 /* power off */
#define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14 #define NAS100D_PB_IRQ IRQ_IXP4XX_GPIO14
#define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4 #define NAS100D_RB_IRQ IRQ_IXP4XX_GPIO4
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* based on ixdp425.h: * based on ixdp425.h:
* Copyright 2004 (c) MontaVista, Software, Inc. * Copyright 2004 (c) MontaVista, Software, Inc.
* *
* This file is licensed under the terms of the GNU General Public * This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any * License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied. * warranty of any kind, whether express or implied.
*/ */
...@@ -34,36 +34,14 @@ ...@@ -34,36 +34,14 @@
#define NSLU2_PCI_INTC_PIN 9 #define NSLU2_PCI_INTC_PIN 9
#define NSLU2_PCI_INTD_PIN 8 #define NSLU2_PCI_INTD_PIN 8
/* NSLU2 Timer */ /* NSLU2 Timer */
#define NSLU2_FREQ 66000000 #define NSLU2_FREQ 66000000
#define NSLU2_CLOCK_TICK_RATE (((NSLU2_FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ)
#define NSLU2_CLOCK_TICKS_PER_USEC ((NSLU2_CLOCK_TICK_RATE + USEC_PER_SEC/2) / USEC_PER_SEC)
/* GPIO */
#define NSLU2_GPIO0 0
#define NSLU2_GPIO1 1
#define NSLU2_GPIO2 2
#define NSLU2_GPIO3 3
#define NSLU2_GPIO4 4
#define NSLU2_GPIO5 5
#define NSLU2_GPIO6 6
#define NSLU2_GPIO7 7
#define NSLU2_GPIO8 8
#define NSLU2_GPIO9 9
#define NSLU2_GPIO10 10
#define NSLU2_GPIO11 11
#define NSLU2_GPIO12 12
#define NSLU2_GPIO13 13
#define NSLU2_GPIO14 14
#define NSLU2_GPIO15 15
/* Buttons */ /* Buttons */
#define NSLU2_PB_GPIO NSLU2_GPIO5 #define NSLU2_PB_GPIO 5
#define NSLU2_PO_GPIO NSLU2_GPIO8 /* power off */ #define NSLU2_PO_GPIO 8 /* power off */
#define NSLU2_RB_GPIO NSLU2_GPIO12 #define NSLU2_RB_GPIO 12
#define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5 #define NSLU2_PB_IRQ IRQ_IXP4XX_GPIO5
#define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12 #define NSLU2_RB_IRQ IRQ_IXP4XX_GPIO12
...@@ -79,16 +57,16 @@ ...@@ -79,16 +57,16 @@
/* LEDs */ /* LEDs */
#define NSLU2_LED_RED NSLU2_GPIO0 #define NSLU2_LED_RED_GPIO 0
#define NSLU2_LED_GRN NSLU2_GPIO1 #define NSLU2_LED_GRN_GPIO 1
#define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED) #define NSLU2_LED_RED_BM (1L << NSLU2_LED_RED_GPIO)
#define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN) #define NSLU2_LED_GRN_BM (1L << NSLU2_LED_GRN_GPIO)
#define NSLU2_LED_DISK1 NSLU2_GPIO3 #define NSLU2_LED_DISK1_GPIO 3
#define NSLU2_LED_DISK2 NSLU2_GPIO2 #define NSLU2_LED_DISK2_GPIO 2
#define NSLU2_LED_DISK1_BM (1L << NSLU2_GPIO2) #define NSLU2_LED_DISK1_BM (1L << NSLU2_LED_DISK1_GPIO)
#define NSLU2_LED_DISK2_BM (1L << NSLU2_GPIO3) #define NSLU2_LED_DISK2_BM (1L << NSLU2_LED_DISK2_GPIO)
...@@ -113,6 +113,7 @@ extern unsigned long ixp4xx_timer_freq; ...@@ -113,6 +113,7 @@ extern unsigned long ixp4xx_timer_freq;
extern void ixp4xx_map_io(void); extern void ixp4xx_map_io(void);
extern void ixp4xx_init_irq(void); extern void ixp4xx_init_irq(void);
extern void ixp4xx_sys_init(void); extern void ixp4xx_sys_init(void);
extern void ixp4xx_timer_init(void);
extern struct sys_timer ixp4xx_timer; extern struct sys_timer ixp4xx_timer;
extern void ixp4xx_pci_preinit(void); extern void ixp4xx_pci_preinit(void);
struct pci_sys_data; struct pci_sys_data;
......
...@@ -153,6 +153,10 @@ ...@@ -153,6 +153,10 @@
#define S3C2440_PA_AC97 (0x5B000000) #define S3C2440_PA_AC97 (0x5B000000)
#define S3C2440_SZ_AC97 SZ_1M #define S3C2440_SZ_AC97 SZ_1M
/* S3C2443 High-speed SD/MMC */
#define S3C2443_PA_HSMMC (0x4A800000)
#define S3C2443_SZ_HSMMC (256)
/* ISA style IO, for each machine to sort out mappings for, if it /* ISA style IO, for each machine to sort out mappings for, if it
* implements it. We reserve two 16M regions for ISA. * implements it. We reserve two 16M regions for ISA.
*/ */
......
...@@ -98,5 +98,9 @@ ...@@ -98,5 +98,9 @@
#define S3C2440_GPJ12_OUTP (0x01 << 24) #define S3C2440_GPJ12_OUTP (0x01 << 24)
#define S3C2440_GPJ12_CAMRESET (0x02 << 24) #define S3C2440_GPJ12_CAMRESET (0x02 << 24)
#define S3C2443_GPJ13 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 13)
#define S3C2443_GPJ14 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 14)
#define S3C2443_GPJ15 S3C2410_GPIONO(S3C2440_GPIO_BANKJ, 15)
#endif /* __ASM_ARCH_REGS_GPIOJ_H */ #endif /* __ASM_ARCH_REGS_GPIOJ_H */
/* linux/include/asm-arm/arch-s3c2410/regs-s3c2412.h
*
* Copyright 2007 Simtec Electronics
* http://armlinux.simtec.co.uk/
* Ben Dooks <ben@simtec.co.uk>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* S3C2412 specific register definitions
*/
#ifndef __ASM_ARCH_REGS_S3C2412_H
#define __ASM_ARCH_REGS_S3C2412_H "s3c2412"
#define S3C2412_SWRST (S3C24XX_VA_CLKPWR + 0x30)
#define S3C2412_SWRST_RESET (0x533C2412)
#endif /* __ASM_ARCH_REGS_S3C2412_H */
...@@ -46,6 +46,10 @@ ...@@ -46,6 +46,10 @@
#define TIOCSBRK 0x5427 /* BSD compatibility */ #define TIOCSBRK 0x5427 /* BSD compatibility */
#define TIOCCBRK 0x5428 /* BSD compatibility */ #define TIOCCBRK 0x5428 /* BSD compatibility */
#define TIOCGSID 0x5429 /* Return the session ID of FD */ #define TIOCGSID 0x5429 /* Return the session ID of FD */
#define TCGETS2 _IOR('T',0x2A, struct termios2)
#define TCSETS2 _IOW('T',0x2B, struct termios2)
#define TCSETSW2 _IOW('T',0x2C, struct termios2)
#define TCSETSF2 _IOW('T',0x2D, struct termios2)
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
......
...@@ -49,7 +49,7 @@ struct machine_desc { ...@@ -49,7 +49,7 @@ struct machine_desc {
*/ */
#define MACHINE_START(_type,_name) \ #define MACHINE_START(_type,_name) \
static const struct machine_desc __mach_desc_##_type \ static const struct machine_desc __mach_desc_##_type \
__attribute_used__ \ __used \
__attribute__((__section__(".arch.info.init"))) = { \ __attribute__((__section__(".arch.info.init"))) = { \
.nr = MACH_TYPE_##_type, \ .nr = MACH_TYPE_##_type, \
.name = _name, .name = _name,
......
...@@ -185,7 +185,7 @@ struct tagtable { ...@@ -185,7 +185,7 @@ struct tagtable {
#ifdef __KERNEL__ #ifdef __KERNEL__
#define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) #define __tag __used __attribute__((__section__(".taglist.init")))
#define __tagtable(tag, fn) \ #define __tagtable(tag, fn) \
static struct tagtable __tagtable_##fn __tag = { tag, fn } static struct tagtable __tagtable_##fn __tag = { tag, fn }
...@@ -218,7 +218,7 @@ struct early_params { ...@@ -218,7 +218,7 @@ struct early_params {
}; };
#define __early_param(name,fn) \ #define __early_param(name,fn) \
static struct early_params __early_##fn __attribute_used__ \ static struct early_params __early_##fn __used \
__attribute__((__section__(".early_param.init"))) = { name, fn } __attribute__((__section__(".early_param.init"))) = { name, fn }
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -15,6 +15,17 @@ struct termios { ...@@ -15,6 +15,17 @@ struct termios {
cc_t c_cc[NCCS]; /* control characters */ cc_t c_cc[NCCS]; /* control characters */
}; };
struct termios2 {
tcflag_t c_iflag; /* input mode flags */
tcflag_t c_oflag; /* output mode flags */
tcflag_t c_cflag; /* control mode flags */
tcflag_t c_lflag; /* local mode flags */
cc_t c_line; /* line discipline */
cc_t c_cc[NCCS]; /* control characters */
speed_t c_ispeed; /* input speed */
speed_t c_ospeed; /* output speed */
};
struct ktermios { struct ktermios {
tcflag_t c_iflag; /* input mode flags */ tcflag_t c_iflag; /* input mode flags */
tcflag_t c_oflag; /* output mode flags */ tcflag_t c_oflag; /* output mode flags */
...@@ -128,6 +139,7 @@ struct ktermios { ...@@ -128,6 +139,7 @@ struct ktermios {
#define HUPCL 0002000 #define HUPCL 0002000
#define CLOCAL 0004000 #define CLOCAL 0004000
#define CBAUDEX 0010000 #define CBAUDEX 0010000
#define BOTHER 0010000
#define B57600 0010001 #define B57600 0010001
#define B115200 0010002 #define B115200 0010002
#define B230400 0010003 #define B230400 0010003
...@@ -143,10 +155,12 @@ struct ktermios { ...@@ -143,10 +155,12 @@ struct ktermios {
#define B3000000 0010015 #define B3000000 0010015
#define B3500000 0010016 #define B3500000 0010016
#define B4000000 0010017 #define B4000000 0010017
#define CIBAUD 002003600000 /* input baud rate (not used) */ #define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */ #define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */ #define CRTSCTS 020000000000 /* flow control */
#define IBSHIFT 16
/* c_lflag bits */ /* c_lflag bits */
#define ISIG 0000001 #define ISIG 0000001
#define ICANON 0000002 #define ICANON 0000002
......
...@@ -82,8 +82,10 @@ struct termio { ...@@ -82,8 +82,10 @@ struct termio {
copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
}) })
#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) #define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios2))
#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) #define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -138,6 +138,19 @@ ...@@ -138,6 +138,19 @@
# define v6wbi_always_flags (-1UL) # define v6wbi_always_flags (-1UL)
#endif #endif
#ifdef CONFIG_CPU_TLB_V7
# define v7wbi_possible_flags v6wbi_tlb_flags
# define v7wbi_always_flags v6wbi_tlb_flags
# ifdef _TLB
# define MULTI_TLB 1
# else
# define _TLB v7wbi
# endif
#else
# define v7wbi_possible_flags 0
# define v7wbi_always_flags (-1UL)
#endif
#ifndef _TLB #ifndef _TLB
#error Unknown TLB model #error Unknown TLB model
#endif #endif
......
...@@ -173,7 +173,7 @@ struct tagtable { ...@@ -173,7 +173,7 @@ struct tagtable {
int (*parse)(const struct tag *); int (*parse)(const struct tag *);
}; };
#define __tag __attribute_used__ __attribute__((__section__(".taglist"))) #define __tag __used __attribute__((__section__(".taglist")))
#define __tagtable(tag, fn) \ #define __tagtable(tag, fn) \
static struct tagtable __tagtable_##fn __tag = { tag, fn } static struct tagtable __tagtable_##fn __tag = { tag, fn }
......
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