Commit d1964dab authored by Russell King's avatar Russell King Committed by Russell King

Merge branches 'arm', 'at91', 'ep93xx', 'iop', 'ks8695', 'misc', 'mxc',...

Merge branches 'arm', 'at91', 'ep93xx', 'iop', 'ks8695', 'misc', 'mxc', 'ns9x', 'orion', 'pxa', 'sa1100', 's3c' and 'sparsemem' into devel
...@@ -480,6 +480,12 @@ M: kernel@wantstofly.org ...@@ -480,6 +480,12 @@ M: kernel@wantstofly.org
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained S: Maintained
ARM/GUMSTIX MACHINE SUPPORT
P: Steve Sakoman
M: sakoman@gmail.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained
ARM/HP JORNADA 7XX MACHINE SUPPORT ARM/HP JORNADA 7XX MACHINE SUPPORT
P: Kristoffer Ericson P: Kristoffer Ericson
M: kristoffer.ericson@gmail.com M: kristoffer.ericson@gmail.com
......
...@@ -255,6 +255,7 @@ config ARCH_EP93XX ...@@ -255,6 +255,7 @@ config ARCH_EP93XX
select ARM_AMBA select ARM_AMBA
select ARM_VIC select ARM_VIC
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_GPIO_LIB
help help
This enables support for the Cirrus EP93xx series of CPUs. This enables support for the Cirrus EP93xx series of CPUs.
...@@ -377,15 +378,17 @@ config ARCH_MXC ...@@ -377,15 +378,17 @@ config ARCH_MXC
help help
Support for Freescale MXC/iMX-based family of processors Support for Freescale MXC/iMX-based family of processors
config ARCH_ORION config ARCH_ORION5X
bool "Marvell Orion" bool "Marvell Orion"
depends on MMU depends on MMU
select PCI select PCI
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_TIME select GENERIC_TIME
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select PLAT_ORION
help help
Support for Marvell Orion System on Chip family. Support for the following Marvell Orion 5x series SoCs:
Orion-1 (5181), Orion-NAS (5182), Orion-2 (5281.)
config ARCH_PNX4008 config ARCH_PNX4008
bool "Philips Nexperia PNX4008 Mobile" bool "Philips Nexperia PNX4008 Mobile"
...@@ -422,10 +425,15 @@ config ARCH_SA1100 ...@@ -422,10 +425,15 @@ config ARCH_SA1100
bool "SA1100-based" bool "SA1100-based"
select ISA select ISA
select ARCH_DISCONTIGMEM_ENABLE select ARCH_DISCONTIGMEM_ENABLE
select ARCH_SPARSEMEM_ENABLE
select ARCH_SELECT_MEMORY_MODEL
select ARCH_MTD_XIP select ARCH_MTD_XIP
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_TIME select GENERIC_TIME
select GENERIC_CLOCKEVENTS
select TICK_ONESHOT
select HAVE_IDE select HAVE_IDE
select HAVE_GPIO_LIB
help help
Support for StrongARM 11x0 based boards. Support for StrongARM 11x0 based boards.
...@@ -516,7 +524,7 @@ source "arch/arm/mach-omap1/Kconfig" ...@@ -516,7 +524,7 @@ source "arch/arm/mach-omap1/Kconfig"
source "arch/arm/mach-omap2/Kconfig" source "arch/arm/mach-omap2/Kconfig"
source "arch/arm/mach-orion/Kconfig" source "arch/arm/mach-orion5x/Kconfig"
source "arch/arm/plat-s3c24xx/Kconfig" source "arch/arm/plat-s3c24xx/Kconfig"
source "arch/arm/plat-s3c/Kconfig" source "arch/arm/plat-s3c/Kconfig"
...@@ -563,6 +571,9 @@ config ARCH_ACORN ...@@ -563,6 +571,9 @@ config ARCH_ACORN
config PLAT_IOP config PLAT_IOP
bool bool
config PLAT_ORION
bool
source arch/arm/mm/Kconfig source arch/arm/mm/Kconfig
config IWMMXT config IWMMXT
...@@ -774,6 +785,12 @@ config ARCH_DISCONTIGMEM_ENABLE ...@@ -774,6 +785,12 @@ config ARCH_DISCONTIGMEM_ENABLE
or have huge holes in the physical address space for other reasons. or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more. See <file:Documentation/vm/numa> for more.
config ARCH_SPARSEMEM_ENABLE
bool
config ARCH_SELECT_MEMORY_MODEL
bool
config NODES_SHIFT config NODES_SHIFT
int int
default "4" if ARCH_LH7A40X default "4" if ARCH_LH7A40X
......
...@@ -134,12 +134,11 @@ endif ...@@ -134,12 +134,11 @@ endif
machine-$(CONFIG_ARCH_PNX4008) := pnx4008 machine-$(CONFIG_ARCH_PNX4008) := pnx4008
machine-$(CONFIG_ARCH_NETX) := netx machine-$(CONFIG_ARCH_NETX) := netx
machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx
textofs-$(CONFIG_ARCH_NS9XXX) := 0x00108000
machine-$(CONFIG_ARCH_DAVINCI) := davinci machine-$(CONFIG_ARCH_DAVINCI) := davinci
machine-$(CONFIG_ARCH_KS8695) := ks8695 machine-$(CONFIG_ARCH_KS8695) := ks8695
incdir-$(CONFIG_ARCH_MXC) := mxc incdir-$(CONFIG_ARCH_MXC) := mxc
machine-$(CONFIG_ARCH_MX3) := mx3 machine-$(CONFIG_ARCH_MX3) := mx3
machine-$(CONFIG_ARCH_ORION) := orion machine-$(CONFIG_ARCH_ORION5X) := orion5x
machine-$(CONFIG_ARCH_MSM7X00A) := msm machine-$(CONFIG_ARCH_MSM7X00A) := msm
ifeq ($(CONFIG_ARCH_EBSA110),y) ifeq ($(CONFIG_ARCH_EBSA110),y)
...@@ -185,6 +184,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/ ...@@ -185,6 +184,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/
# If we have a common platform directory, then include it in the build. # If we have a common platform directory, then include it in the build.
core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/ core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/
core-$(CONFIG_PLAT_ORION) += arch/arm/plat-orion/
core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/ core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/
core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/ core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/
core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/ core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/
......
...@@ -61,9 +61,15 @@ endif ...@@ -61,9 +61,15 @@ endif
quiet_cmd_uimage = UIMAGE $@ quiet_cmd_uimage = UIMAGE $@
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \ cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-C none -a $(ZRELADDR) -e $(ZRELADDR) \ -C none -a $(LOADADDR) -e $(LOADADDR) \
-n 'Linux-$(KERNELRELEASE)' -d $< $@ -n 'Linux-$(KERNELRELEASE)' -d $< $@
ifeq ($(CONFIG_ZBOOT_ROM),y)
$(obj)/uImage: LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
else
$(obj)/uImage: LOADADDR=$(ZRELADDR)
endif
$(obj)/uImage: $(obj)/zImage FORCE $(obj)/uImage: $(obj)/zImage FORCE
$(call if_changed,uimage) $(call if_changed,uimage)
@echo ' Image $@ is ready' @echo ' Image $@ is ready'
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/gpio.h>
#include <asm/hardware/scoop.h> #include <asm/hardware/scoop.h>
/* PCMCIA to Scoop linkage /* PCMCIA to Scoop linkage
...@@ -30,10 +31,9 @@ ...@@ -30,10 +31,9 @@
struct scoop_pcmcia_config *platform_scoop_config; struct scoop_pcmcia_config *platform_scoop_config;
EXPORT_SYMBOL(platform_scoop_config); EXPORT_SYMBOL(platform_scoop_config);
#define SCOOP_REG(d,adr) (*(volatile unsigned short*)(d +(adr)))
struct scoop_dev { struct scoop_dev {
void *base; void __iomem *base;
struct gpio_chip gpio;
spinlock_t scoop_lock; spinlock_t scoop_lock;
unsigned short suspend_clr; unsigned short suspend_clr;
unsigned short suspend_set; unsigned short suspend_set;
...@@ -44,13 +44,84 @@ void reset_scoop(struct device *dev) ...@@ -44,13 +44,84 @@ void reset_scoop(struct device *dev)
{ {
struct scoop_dev *sdev = dev_get_drvdata(dev); struct scoop_dev *sdev = dev_get_drvdata(dev);
SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00 iowrite16(0x0100, sdev->base + SCOOP_MCR); // 00
SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04 iowrite16(0x0000, sdev->base + SCOOP_CDR); // 04
SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10 iowrite16(0x0000, sdev->base + SCOOP_CCR); // 10
SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18 iowrite16(0x0000, sdev->base + SCOOP_IMR); // 18
SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14 iowrite16(0x00FF, sdev->base + SCOOP_IRM); // 14
SCOOP_REG(sdev->base,SCOOP_ISR) = 0x0000; // 1C iowrite16(0x0000, sdev->base + SCOOP_ISR); // 1C
SCOOP_REG(sdev->base,SCOOP_IRM) = 0x0000; iowrite16(0x0000, sdev->base + SCOOP_IRM);
}
static void __scoop_gpio_set(struct scoop_dev *sdev,
unsigned offset, int value)
{
unsigned short gpwr;
gpwr = ioread16(sdev->base + SCOOP_GPWR);
if (value)
gpwr |= 1 << (offset + 1);
else
gpwr &= ~(1 << (offset + 1));
iowrite16(gpwr, sdev->base + SCOOP_GPWR);
}
static void scoop_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
{
struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
unsigned long flags;
spin_lock_irqsave(&sdev->scoop_lock, flags);
__scoop_gpio_set(sdev, offset, value);
spin_unlock_irqrestore(&sdev->scoop_lock, flags);
}
static int scoop_gpio_get(struct gpio_chip *chip, unsigned offset)
{
struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
/* XXX: I'm usure, but it seems so */
return ioread16(sdev->base + SCOOP_GPRR) & (1 << (offset + 1));
}
static int scoop_gpio_direction_input(struct gpio_chip *chip,
unsigned offset)
{
struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
unsigned long flags;
unsigned short gpcr;
spin_lock_irqsave(&sdev->scoop_lock, flags);
gpcr = ioread16(sdev->base + SCOOP_GPCR);
gpcr &= ~(1 << (offset + 1));
iowrite16(gpcr, sdev->base + SCOOP_GPCR);
spin_unlock_irqrestore(&sdev->scoop_lock, flags);
return 0;
}
static int scoop_gpio_direction_output(struct gpio_chip *chip,
unsigned offset, int value)
{
struct scoop_dev *sdev = container_of(chip, struct scoop_dev, gpio);
unsigned long flags;
unsigned short gpcr;
spin_lock_irqsave(&sdev->scoop_lock, flags);
__scoop_gpio_set(sdev, offset, value);
gpcr = ioread16(sdev->base + SCOOP_GPCR);
gpcr |= 1 << (offset + 1);
iowrite16(gpcr, sdev->base + SCOOP_GPCR);
spin_unlock_irqrestore(&sdev->scoop_lock, flags);
return 0;
} }
unsigned short set_scoop_gpio(struct device *dev, unsigned short bit) unsigned short set_scoop_gpio(struct device *dev, unsigned short bit)
...@@ -60,8 +131,8 @@ unsigned short set_scoop_gpio(struct device *dev, unsigned short bit) ...@@ -60,8 +131,8 @@ unsigned short set_scoop_gpio(struct device *dev, unsigned short bit)
struct scoop_dev *sdev = dev_get_drvdata(dev); struct scoop_dev *sdev = dev_get_drvdata(dev);
spin_lock_irqsave(&sdev->scoop_lock, flag); spin_lock_irqsave(&sdev->scoop_lock, flag);
gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) | bit; gpio_bit = ioread16(sdev->base + SCOOP_GPWR) | bit;
SCOOP_REG(sdev->base, SCOOP_GPWR) = gpio_bit; iowrite16(gpio_bit, sdev->base + SCOOP_GPWR);
spin_unlock_irqrestore(&sdev->scoop_lock, flag); spin_unlock_irqrestore(&sdev->scoop_lock, flag);
return gpio_bit; return gpio_bit;
...@@ -74,8 +145,8 @@ unsigned short reset_scoop_gpio(struct device *dev, unsigned short bit) ...@@ -74,8 +145,8 @@ unsigned short reset_scoop_gpio(struct device *dev, unsigned short bit)
struct scoop_dev *sdev = dev_get_drvdata(dev); struct scoop_dev *sdev = dev_get_drvdata(dev);
spin_lock_irqsave(&sdev->scoop_lock, flag); spin_lock_irqsave(&sdev->scoop_lock, flag);
gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) & ~bit; gpio_bit = ioread16(sdev->base + SCOOP_GPWR) & ~bit;
SCOOP_REG(sdev->base,SCOOP_GPWR) = gpio_bit; iowrite16(gpio_bit, sdev->base + SCOOP_GPWR);
spin_unlock_irqrestore(&sdev->scoop_lock, flag); spin_unlock_irqrestore(&sdev->scoop_lock, flag);
return gpio_bit; return gpio_bit;
...@@ -87,13 +158,13 @@ EXPORT_SYMBOL(reset_scoop_gpio); ...@@ -87,13 +158,13 @@ EXPORT_SYMBOL(reset_scoop_gpio);
unsigned short read_scoop_reg(struct device *dev, unsigned short reg) unsigned short read_scoop_reg(struct device *dev, unsigned short reg)
{ {
struct scoop_dev *sdev = dev_get_drvdata(dev); struct scoop_dev *sdev = dev_get_drvdata(dev);
return SCOOP_REG(sdev->base,reg); return ioread16(sdev->base + reg);
} }
void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data) void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data)
{ {
struct scoop_dev *sdev = dev_get_drvdata(dev); struct scoop_dev *sdev = dev_get_drvdata(dev);
SCOOP_REG(sdev->base,reg)=data; iowrite16(data, sdev->base + reg);
} }
EXPORT_SYMBOL(reset_scoop); EXPORT_SYMBOL(reset_scoop);
...@@ -104,9 +175,9 @@ static void check_scoop_reg(struct scoop_dev *sdev) ...@@ -104,9 +175,9 @@ static void check_scoop_reg(struct scoop_dev *sdev)
{ {
unsigned short mcr; unsigned short mcr;
mcr = SCOOP_REG(sdev->base, SCOOP_MCR); mcr = ioread16(sdev->base + SCOOP_MCR);
if ((mcr & 0x100) == 0) if ((mcr & 0x100) == 0)
SCOOP_REG(sdev->base, SCOOP_MCR) = 0x0101; iowrite16(0x0101, sdev->base + SCOOP_MCR);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
...@@ -115,8 +186,8 @@ static int scoop_suspend(struct platform_device *dev, pm_message_t state) ...@@ -115,8 +186,8 @@ static int scoop_suspend(struct platform_device *dev, pm_message_t state)
struct scoop_dev *sdev = platform_get_drvdata(dev); struct scoop_dev *sdev = platform_get_drvdata(dev);
check_scoop_reg(sdev); check_scoop_reg(sdev);
sdev->scoop_gpwr = SCOOP_REG(sdev->base, SCOOP_GPWR); sdev->scoop_gpwr = ioread16(sdev->base + SCOOP_GPWR);
SCOOP_REG(sdev->base, SCOOP_GPWR) = (sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set; iowrite16((sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set, sdev->base + SCOOP_GPWR);
return 0; return 0;
} }
...@@ -126,7 +197,7 @@ static int scoop_resume(struct platform_device *dev) ...@@ -126,7 +197,7 @@ static int scoop_resume(struct platform_device *dev)
struct scoop_dev *sdev = platform_get_drvdata(dev); struct scoop_dev *sdev = platform_get_drvdata(dev);
check_scoop_reg(sdev); check_scoop_reg(sdev);
SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; iowrite16(sdev->scoop_gpwr, sdev->base + SCOOP_GPWR);
return 0; return 0;
} }
...@@ -135,11 +206,13 @@ static int scoop_resume(struct platform_device *dev) ...@@ -135,11 +206,13 @@ static int scoop_resume(struct platform_device *dev)
#define scoop_resume NULL #define scoop_resume NULL
#endif #endif
int __init scoop_probe(struct platform_device *pdev) static int __devinit scoop_probe(struct platform_device *pdev)
{ {
struct scoop_dev *devptr; struct scoop_dev *devptr;
struct scoop_config *inf; struct scoop_config *inf;
struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
int ret;
int temp;
if (!mem) if (!mem)
return -EINVAL; return -EINVAL;
...@@ -154,40 +227,78 @@ int __init scoop_probe(struct platform_device *pdev) ...@@ -154,40 +227,78 @@ int __init scoop_probe(struct platform_device *pdev)
devptr->base = ioremap(mem->start, mem->end - mem->start + 1); devptr->base = ioremap(mem->start, mem->end - mem->start + 1);
if (!devptr->base) { if (!devptr->base) {
kfree(devptr); ret = -ENOMEM;
return -ENOMEM; goto err_ioremap;
} }
platform_set_drvdata(pdev, devptr); platform_set_drvdata(pdev, devptr);
printk("Sharp Scoop Device found at 0x%08x -> 0x%08x\n",(unsigned int)mem->start,(unsigned int)devptr->base); printk("Sharp Scoop Device found at 0x%08x -> 0x%8p\n",(unsigned int)mem->start, devptr->base);
SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140; iowrite16(0x0140, devptr->base + SCOOP_MCR);
reset_scoop(&pdev->dev); reset_scoop(&pdev->dev);
SCOOP_REG(devptr->base, SCOOP_CPR) = 0x0000; iowrite16(0x0000, devptr->base + SCOOP_CPR);
SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; iowrite16(inf->io_dir & 0xffff, devptr->base + SCOOP_GPCR);
SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; iowrite16(inf->io_out & 0xffff, devptr->base + SCOOP_GPWR);
devptr->suspend_clr = inf->suspend_clr; devptr->suspend_clr = inf->suspend_clr;
devptr->suspend_set = inf->suspend_set; devptr->suspend_set = inf->suspend_set;
devptr->gpio.base = -1;
if (inf->gpio_base != 0) {
devptr->gpio.label = pdev->dev.bus_id;
devptr->gpio.base = inf->gpio_base;
devptr->gpio.ngpio = 12; /* PA11 = 0, PA12 = 1, etc. up to PA22 = 11 */
devptr->gpio.set = scoop_gpio_set;
devptr->gpio.get = scoop_gpio_get;
devptr->gpio.direction_input = scoop_gpio_direction_input;
devptr->gpio.direction_output = scoop_gpio_direction_output;
ret = gpiochip_add(&devptr->gpio);
if (ret)
goto err_gpio;
}
return 0; return 0;
if (devptr->gpio.base != -1)
temp = gpiochip_remove(&devptr->gpio);
err_gpio:
platform_set_drvdata(pdev, NULL);
err_ioremap:
iounmap(devptr->base);
kfree(devptr);
return ret;
} }
static int scoop_remove(struct platform_device *pdev) static int __devexit scoop_remove(struct platform_device *pdev)
{ {
struct scoop_dev *sdev = platform_get_drvdata(pdev); struct scoop_dev *sdev = platform_get_drvdata(pdev);
if (sdev) { int ret;
if (!sdev)
return -EINVAL;
if (sdev->gpio.base != -1) {
ret = gpiochip_remove(&sdev->gpio);
if (ret) {
dev_err(&pdev->dev, "Can't remove gpio chip: %d\n", ret);
return ret;
}
}
platform_set_drvdata(pdev, NULL);
iounmap(sdev->base); iounmap(sdev->base);
kfree(sdev); kfree(sdev);
platform_set_drvdata(pdev, NULL);
}
return 0; return 0;
} }
static struct platform_driver scoop_driver = { static struct platform_driver scoop_driver = {
.probe = scoop_probe, .probe = scoop_probe,
.remove = scoop_remove, .remove = __devexit_p(scoop_remove),
.suspend = scoop_suspend, .suspend = scoop_suspend,
.resume = scoop_resume, .resume = scoop_resume,
.driver = { .driver = {
...@@ -195,7 +306,7 @@ static struct platform_driver scoop_driver = { ...@@ -195,7 +306,7 @@ static struct platform_driver scoop_driver = {
}, },
}; };
int __init scoop_init(void) static int __init scoop_init(void)
{ {
return platform_driver_register(&scoop_driver); return platform_driver_register(&scoop_driver);
} }
......
This diff is collapsed.
...@@ -620,14 +620,14 @@ CONFIG_I2C_CHARDEV=y ...@@ -620,14 +620,14 @@ CONFIG_I2C_CHARDEV=y
# #
# I2C Algorithms # I2C Algorithms
# #
# CONFIG_I2C_ALGOBIT is not set CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not set # CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set # CONFIG_I2C_ALGOPCA is not set
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=y CONFIG_I2C_GPIO=y
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
...@@ -594,14 +594,14 @@ CONFIG_I2C_CHARDEV=y ...@@ -594,14 +594,14 @@ CONFIG_I2C_CHARDEV=y
# #
# I2C Algorithms # I2C Algorithms
# #
# CONFIG_I2C_ALGOBIT is not set CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not set # CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set # CONFIG_I2C_ALGOPCA is not set
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=y CONFIG_I2C_GPIO=y
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -714,7 +714,7 @@ CONFIG_I2C_ALGOPCA=m ...@@ -714,7 +714,7 @@ CONFIG_I2C_ALGOPCA=m
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=m CONFIG_I2C_GPIO=m
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -587,14 +587,14 @@ CONFIG_I2C_CHARDEV=y ...@@ -587,14 +587,14 @@ CONFIG_I2C_CHARDEV=y
# #
# I2C Algorithms # I2C Algorithms
# #
# CONFIG_I2C_ALGOBIT is not set CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_ALGOPCF is not set # CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set # CONFIG_I2C_ALGOPCA is not set
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=y CONFIG_I2C_GPIO=y
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
# CONFIG_I2C_PCA_ISA is not set # CONFIG_I2C_PCA_ISA is not set
......
This diff is collapsed.
This diff is collapsed.
...@@ -140,7 +140,7 @@ CONFIG_CLASSIC_RCU=y ...@@ -140,7 +140,7 @@ CONFIG_CLASSIC_RCU=y
# CONFIG_ARCH_KS8695 is not set # CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set # CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_MXC is not set # CONFIG_ARCH_MXC is not set
CONFIG_ARCH_ORION=y CONFIG_ARCH_ORION5X=y
# CONFIG_ARCH_PNX4008 is not set # CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set # CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set # CONFIG_ARCH_RPC is not set
......
...@@ -727,14 +727,14 @@ CONFIG_I2C_CHARDEV=m ...@@ -727,14 +727,14 @@ CONFIG_I2C_CHARDEV=m
# #
# I2C Algorithms # I2C Algorithms
# #
# CONFIG_I2C_ALGOBIT is not set CONFIG_I2C_ALGOBIT=m
# CONFIG_I2C_ALGOPCF is not set # CONFIG_I2C_ALGOPCF is not set
# CONFIG_I2C_ALGOPCA is not set # CONFIG_I2C_ALGOPCA is not set
# #
# I2C Hardware Bus support # I2C Hardware Bus support
# #
CONFIG_I2C_AT91=m CONFIG_I2C_GPIO=m
# CONFIG_I2C_OCORES is not set # CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_STUB is not set # CONFIG_I2C_STUB is not set
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -359,9 +359,11 @@ ...@@ -359,9 +359,11 @@
CALL(sys_kexec_load) CALL(sys_kexec_load)
CALL(sys_utimensat) CALL(sys_utimensat)
CALL(sys_signalfd) CALL(sys_signalfd)
/* 350 */ CALL(sys_ni_syscall) /* 350 */ CALL(sys_timerfd_create)
CALL(sys_eventfd) CALL(sys_eventfd)
CALL(sys_fallocate) CALL(sys_fallocate)
CALL(sys_timerfd_settime)
CALL(sys_timerfd_gettime)
#ifndef syscalls_counted #ifndef syscalls_counted
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
#define syscalls_counted #define syscalls_counted
......
...@@ -209,14 +209,12 @@ __irq_svc: ...@@ -209,14 +209,12 @@ __irq_svc:
irq_handler irq_handler
#ifdef CONFIG_PREEMPT #ifdef CONFIG_PREEMPT
str r8, [tsk, #TI_PREEMPT] @ restore preempt count
ldr r0, [tsk, #TI_FLAGS] @ get flags ldr r0, [tsk, #TI_FLAGS] @ get flags
teq r8, #0 @ if preempt count != 0
movne r0, #0 @ force flags to 0
tst r0, #_TIF_NEED_RESCHED tst r0, #_TIF_NEED_RESCHED
blne svc_preempt blne svc_preempt
preempt_return:
ldr r0, [tsk, #TI_PREEMPT] @ read preempt value
str r8, [tsk, #TI_PREEMPT] @ restore preempt count
teq r0, r7
strne r0, [r0, -r0] @ bug()
#endif #endif
ldr r0, [sp, #S_PSR] @ irqs are already disabled ldr r0, [sp, #S_PSR] @ irqs are already disabled
msr spsr_cxsf, r0 msr spsr_cxsf, r0
...@@ -230,19 +228,11 @@ preempt_return: ...@@ -230,19 +228,11 @@ preempt_return:
#ifdef CONFIG_PREEMPT #ifdef CONFIG_PREEMPT
svc_preempt: svc_preempt:
teq r8, #0 @ was preempt count = 0 mov r8, lr
ldreq r6, .LCirq_stat
movne pc, lr @ no
ldr r0, [r6, #4] @ local_irq_count
ldr r1, [r6, #8] @ local_bh_count
adds r0, r0, r1
movne pc, lr
mov r7, #0 @ preempt_schedule_irq
str r7, [tsk, #TI_PREEMPT] @ expects preempt_count == 0
1: bl preempt_schedule_irq @ irq en/disable is done inside 1: bl preempt_schedule_irq @ irq en/disable is done inside
ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS ldr r0, [tsk, #TI_FLAGS] @ get new tasks TI_FLAGS
tst r0, #_TIF_NEED_RESCHED tst r0, #_TIF_NEED_RESCHED
beq preempt_return @ go again moveq pc, r8 @ go again
b 1b b 1b
#endif #endif
...@@ -333,10 +323,6 @@ __pabt_svc: ...@@ -333,10 +323,6 @@ __pabt_svc:
#endif #endif
.LCfp: .LCfp:
.word fp_enter .word fp_enter
#ifdef CONFIG_PREEMPT
.LCirq_stat:
.word irq_stat
#endif
/* /*
* User mode handlers * User mode handlers
......
...@@ -75,8 +75,13 @@ __error_p: ...@@ -75,8 +75,13 @@ __error_p:
#ifdef CONFIG_DEBUG_LL #ifdef CONFIG_DEBUG_LL
adr r0, str_p1 adr r0, str_p1
bl printascii bl printascii
mov r0, r9
bl printhex8
adr r0, str_p2
bl printascii
b __error b __error
str_p1: .asciz "\nError: unrecognized/unsupported processor variant.\n" str_p1: .asciz "\nError: unrecognized/unsupported processor variant (0x"
str_p2: .asciz ").\n"
.align .align
#endif #endif
......
...@@ -12,18 +12,28 @@ config ARCH_AT91RM9200 ...@@ -12,18 +12,28 @@ config ARCH_AT91RM9200
config ARCH_AT91SAM9260 config ARCH_AT91SAM9260
bool "AT91SAM9260 or AT91SAM9XE" bool "AT91SAM9260 or AT91SAM9XE"
select GENERIC_TIME
select GENERIC_CLOCKEVENTS
config ARCH_AT91SAM9261 config ARCH_AT91SAM9261
bool "AT91SAM9261" bool "AT91SAM9261"
select GENERIC_TIME
select GENERIC_CLOCKEVENTS
config ARCH_AT91SAM9263 config ARCH_AT91SAM9263
bool "AT91SAM9263" bool "AT91SAM9263"
select GENERIC_TIME
select GENERIC_CLOCKEVENTS
config ARCH_AT91SAM9RL config ARCH_AT91SAM9RL
bool "AT91SAM9RL" bool "AT91SAM9RL"
select GENERIC_TIME
select GENERIC_CLOCKEVENTS
config ARCH_AT91CAP9 config ARCH_AT91CAP9
bool "AT91CAP9" bool "AT91CAP9"
select GENERIC_TIME
select GENERIC_CLOCKEVENTS
config ARCH_AT91X40 config ARCH_AT91X40
bool "AT91x40" bool "AT91x40"
...@@ -109,6 +119,13 @@ config MACH_KAFA ...@@ -109,6 +119,13 @@ config MACH_KAFA
help help
Select this if you are using Sperry-Sun's KAFA board. Select this if you are using Sperry-Sun's KAFA board.
config MACH_ECBAT91
bool "emQbit ECB_AT91 SBC"
depends on ARCH_AT91RM9200
help
Select this if you are using emQbit's ECB_AT91 board.
<http://wiki.emqbit.com/free-ecb-at91>
endif endif
# ---------------------------------------------------------- # ----------------------------------------------------------
...@@ -133,6 +150,20 @@ config MACH_AT91SAM9260EK ...@@ -133,6 +150,20 @@ config MACH_AT91SAM9260EK
Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
<http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933> <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
config MACH_CAM60
bool "KwikByte KB9260 (CAM60) board"
depends on ARCH_AT91SAM9260
help
Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260.
<http://www.kwikbyte.com/KB9260.html>
config MACH_SAM9_L9260
bool "Olimex SAM9-L9260 board"
depends on ARCH_AT91SAM9260
help
Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
<http://www.olimex.com/dev/sam9-L9260.html>
endif endif
# ---------------------------------------------------------- # ----------------------------------------------------------
...@@ -216,7 +247,7 @@ comment "AT91 Board Options" ...@@ -216,7 +247,7 @@ comment "AT91 Board Options"
config MTD_AT91_DATAFLASH_CARD config MTD_AT91_DATAFLASH_CARD
bool "Enable DataFlash Card support" bool "Enable DataFlash Card support"
depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91CAP9ADK) depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91CAP9ADK || MACH_SAM9_L9260 || MACH_ECBAT91)
help help
Enable support for the DataFlash card. Enable support for the DataFlash card.
......
...@@ -29,9 +29,12 @@ obj-$(CONFIG_MACH_KB9200) += board-kb9202.o ...@@ -29,9 +29,12 @@ obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
obj-$(CONFIG_MACH_KAFA) += board-kafa.o obj-$(CONFIG_MACH_KAFA) += board-kafa.o
obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o
obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o
# AT91SAM9260 board-specific support # AT91SAM9260 board-specific support
obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
obj-$(CONFIG_MACH_CAM60) += board-cam60.o
obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o
# AT91SAM9261 board-specific support # AT91SAM9261 board-specific support
obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
......
...@@ -13,12 +13,14 @@ ...@@ -13,12 +13,14 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/pm.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/arch/at91cap9.h> #include <asm/arch/at91cap9.h>
#include <asm/arch/at91_pmc.h> #include <asm/arch/at91_pmc.h>
#include <asm/arch/at91_rstc.h> #include <asm/arch/at91_rstc.h>
#include <asm/arch/at91_shdwc.h>
#include "generic.h" #include "generic.h"
#include "clock.h" #include "clock.h"
...@@ -288,6 +290,12 @@ static void at91cap9_reset(void) ...@@ -288,6 +290,12 @@ static void at91cap9_reset(void)
at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST); at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
} }
static void at91cap9_poweroff(void)
{
at91_sys_write(AT91_SHDW_CR, AT91_SHDW_KEY | AT91_SHDW_SHDW);
}
/* -------------------------------------------------------------------- /* --------------------------------------------------------------------
* AT91CAP9 processor initialization * AT91CAP9 processor initialization
* -------------------------------------------------------------------- */ * -------------------------------------------------------------------- */
...@@ -298,6 +306,7 @@ void __init at91cap9_initialize(unsigned long main_clock) ...@@ -298,6 +306,7 @@ void __init at91cap9_initialize(unsigned long main_clock)
iotable_init(at91cap9_io_desc, ARRAY_SIZE(at91cap9_io_desc)); iotable_init(at91cap9_io_desc, ARRAY_SIZE(at91cap9_io_desc));
at91_arch_reset = at91cap9_reset; at91_arch_reset = at91cap9_reset;
pm_power_off = at91cap9_poweroff;
at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1); at91_extern_irq = (1 << AT91CAP9_ID_IRQ0) | (1 << AT91CAP9_ID_IRQ1);
/* Init clock subsystem */ /* Init clock subsystem */
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
#include <asm/arch/board.h> #include <asm/arch/board.h>
#include <asm/arch/gpio.h> #include <asm/arch/gpio.h>
#include <asm/arch/at91cap9_matrix.h> #include <asm/arch/at91cap9_matrix.h>
#include <asm/arch/at91sam926x_mc.h> #include <asm/arch/at91sam9_smc.h>
#include "generic.h" #include "generic.h"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -31,6 +31,8 @@ config ARCH_EDB7211 ...@@ -31,6 +31,8 @@ config ARCH_EDB7211
bool "EDB7211" bool "EDB7211"
select ISA select ISA
select ARCH_DISCONTIGMEM_ENABLE select ARCH_DISCONTIGMEM_ENABLE
select ARCH_SPARSEMEM_ENABLE
select ARCH_SELECT_MEMORY_MODEL
help help
Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211 Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
evaluation board. evaluation board.
......
# #
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
obj-y := core.o clock.o obj-y := core.o clock.o gpio.o
obj-m := obj-m :=
obj-n := obj-n :=
obj- := obj- :=
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
zreladdr-y := 0x108000 zreladdr-y := 0x8000
params_phys-y := 0x100 params_phys-y := 0x100
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment