Commit b710fb62 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 3805f9c1 9b5f4e9e
......@@ -75,28 +75,6 @@ choice
config ARCH_ADIFCC
bool "ADIFCC-based"
config ARCH_ANAKIN
bool "Anakin"
---help---
The Anakin is a StrongArm based SA110 - 2 DIN Vehicle Telematics Platform.
64MB SDRAM - 4 Mb Flash - Compact Flash Interface - 1 MB VRAM
On board peripherals:
* Front display: 400x234 16 bit TFT touchscreen
* External independent second screen interface
* CAN controller SJA1000
* USB host controller
* 6 channel video codec with hardware overlay
* Smartcard reader
* IrDa
Modules interfaced over the Multi Media Extension slots:
* A communication card
Wavecom GPRS modem
uBlock GPS
Bosch DAB module
* An audio card ( 4 * 40W, AC97 Codec, I2S)
config ARCH_CLPS7500
bool "Cirrus-CL-PS7500FE"
......
......@@ -96,7 +96,6 @@ endif
textaddr-$(CONFIG_ARCH_CLPS711X) := 0xc0028000
machine-$(CONFIG_ARCH_CLPS711X) := clps711x
textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
machine-$(CONFIG_ARCH_ANAKIN) := anakin
machine-$(CONFIG_ARCH_IOP3XX) := iop3xx
machine-$(CONFIG_ARCH_ADIFCC) := adifcc
......
......@@ -47,7 +47,6 @@ endif
params_phys-$(CONFIG_ARCH_SA1100) := 0xc0000100
initrd_phys-$(CONFIG_ARCH_SA1100) := 0xc0800000
zreladdr-$(CONFIG_ARCH_PXA) := 0xa0008000
zreladdr-$(CONFIG_ARCH_ANAKIN) := 0x20008000
zreladdr-$(CONFIG_ARCH_IOP3XX) := 0xa0008000
params_phys-$(CONFIG_ARCH_IOP3XX) := 0xa0000100
zreladdr-$(CONFIG_ARCH_ADIFCC) := 0xc0008000
......@@ -82,7 +81,7 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
$(call if_changed,objcopy)
@echo ' Kernel: $@ is ready'
quite_cmd_uimage = UIMAGE $@
quiet_cmd_uimage = UIMAGE $@
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
-C none -a $(ZRELADDR) -e $(ZRELADDR) \
-n 'Linux-$(KERNELRELEASE)' -d $< $@
......
......@@ -199,8 +199,12 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
dev->dev.release = amba_device_release;
dev->dev.bus = &amba_bustype;
dev->dev.dma_mask = &dev->dma_mask;
dev->res.name = dev->dev.bus_id;
if (!dev->dev.coherent_dma_mask && dev->dma_mask)
dev_warn(&dev->dev, "coherent dma mask is unset\n");
ret = request_resource(parent, &dev->res);
if (ret == 0) {
tmp = ioremap(dev->res.start, SZ_4K);
......
......@@ -516,6 +516,8 @@ sa1111_configure_smc(struct sa1111 *sachip, int sdram, unsigned int drac,
*/
if (sachip->dev->dma_mask)
*sachip->dev->dma_mask &= sa1111_dma_mask[drac >> 2];
sachip->dev->coherent_dma_mask &= sa1111_dma_mask[drac >> 2];
}
#endif
......@@ -558,6 +560,7 @@ sa1111_init_one_child(struct sa1111 *sachip, struct resource *parent,
dev->dev.parent = sachip->dev;
dev->dev.bus = &sa1111_bus_type;
dev->dev.release = sa1111_dev_release;
dev->dev.coherent_dma_mask = sachip->dev->coherent_dma_mask;
dev->res.start = sachip->phys + info->offset;
dev->res.end = dev->res.start + 511;
dev->res.name = dev->dev.bus_id;
......
......@@ -28,7 +28,6 @@ CONFIG_MODULES=y
# System Type
#
CONFIG_ARCH_ADIFCC=y
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -417,8 +416,6 @@ CONFIG_SERIAL_CONSOLE=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -581,7 +580,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -527,8 +526,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -773,7 +770,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -654,8 +653,6 @@ CONFIG_SOUND_GAMEPORT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -45,7 +45,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_ARCH_EBSA110=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......
......@@ -32,7 +32,6 @@ CONFIG_OBSOLETE_MODPARM=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -513,8 +512,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -716,7 +713,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_EXPERIMENTAL=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
CONFIG_ARCH_CLPS711X=y
......@@ -343,8 +342,6 @@ CONFIG_UNIX=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
CONFIG_SERIAL_CLPS711X=y
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -687,7 +686,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -662,7 +661,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -516,8 +515,6 @@ CONFIG_SERIAL=m
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -753,7 +750,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -32,7 +32,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -35,7 +35,6 @@ CONFIG_ARCH_INTEGRATOR=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......@@ -620,7 +619,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_SA1100 is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
......
......@@ -39,7 +39,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -39,7 +39,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_KMOD=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -518,8 +517,6 @@ CONFIG_SERIAL=m
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -730,7 +727,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_SA1100 is not set
CONFIG_FB_EPSON1356=y
......
......@@ -44,7 +44,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_MODULES=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -583,8 +582,6 @@ CONFIG_SERIAL_8250_CONSOLE=y
#
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -314,8 +313,6 @@ CONFIG_SERIAL_NONSTANDARD=y
#
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -31,7 +31,6 @@ CONFIG_MODULES=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -40,7 +40,6 @@ CONFIG_IOSCHED_DEADLINE=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -662,7 +661,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_SA1100 is not set
CONFIG_FB_MQ200=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......
......@@ -31,7 +31,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -46,7 +46,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -28,7 +28,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -514,8 +513,6 @@ CONFIG_SERIAL_CONSOLE=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -753,7 +750,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -532,8 +531,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -799,7 +796,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -601,8 +600,6 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_ACORN is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -348,37 +348,6 @@
1002:
.endm
#elif defined(CONFIG_ARCH_ANAKIN)
//#//include <asm/arch/serial_reg.h>
.macro addruart,rx
mrc p15, 0, \rx, c1, c0
tst \rx, #1 @ MMU enabled?
moveq \rx, #IO_START
movne \rx, #IO_BASE
add \rx, \rx, #UART0
.endm
.macro senduart,rd,rx
str \rd, [\rx, #0x14] @ tx
ldr \rd, [\rx, #0x18]
orr \rd, \rd, #SENDREQUEST
str \rd, [\rx, #0x18]
.endm
.macro waituart,rd,rx
1001: ldr \rd, [\rx, #0x10]
tst \rd, #TXEMPTY
beq 1001b
.endm
.macro busyuart,rd,rx
1001: ldr \rd, [\rx, #0x10]
tst \rd, #CTS
bne 1001b
.endm
#elif defined(CONFIG_ARCH_CAMELOT)
#include <asm/arch/excalibur.h>
......
......@@ -530,33 +530,6 @@ ENTRY(soft_irq_mask)
.macro irq_prio_table
.endm
#elif defined(CONFIG_ARCH_ANAKIN)
.macro disable_fiq
.endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp
mov \base, #IO_BASE
mov \irqstat, #INTERRUPT_CONTROLLER
ldr \tmp, =anakin_irq_mask
ldr \irqstat, [\base, \irqstat]
ldr \tmp, [\tmp]
ands \irqstat, \irqstat, \tmp
ldrne \tmp, =anakin_active_irqs
strne \irqstat, [\tmp]
movne \irqnr, #IRQ_ANAKIN
.endm
.macro irq_prio_table
.ltorg
.bss
ENTRY(anakin_irq_mask)
.word 0
ENTRY(anakin_active_irqs)
.space 4
.text
.endm
#elif defined(CONFIG_ARCH_IOP310) || defined(CONFIG_ARCH_ADIFCC)
.macro disable_fiq
......
#
# Makefile for the linux kernel.
#
# Object file lists.
obj-y := arch.o irq.o mm.o
obj-m :=
obj-n :=
obj- :=
/*
* linux/arch/arm/mach-anakin/arch.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#include <linux/tty.h>
#include <linux/init.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
extern void anakin_map_io(void);
extern void genarch_init_irq(void);
MACHINE_START(ANAKIN, "Anakin")
MAINTAINER("Wookey/Tak-Shing Chan")
BOOT_MEM(0x20000000, 0x40000000, 0xe0000000)
VIDEO(0x80000000, 0x8002db40)
MAPIO(anakin_map_io)
INITIRQ(genarch_init_irq)
MACHINE_END
/*
* linux/arch/arm/mach-anakin/irq.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#include <linux/ptrace.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
extern unsigned int anakin_irq_mask, anakin_active_irqs;
extern void do_IRQ(int, struct pt_regs *);
static void
anakin_mask_irq(unsigned int irq)
{
anakin_irq_mask &= ~(1 << irq);
}
static void
anakin_unmask_irq(unsigned int irq)
{
anakin_irq_mask |= (1 << irq);
}
/*
* This is a faked interrupt to deal with parallel interrupt requests
* on the Anakin. Make sure that its interrupt number is not in any
* way conflicting with the hardware interrupt numbers! Check
* IRQ_ANAKIN in linux/include/asm-arm/arch-anakin/irqs.h.
*/
static void
anakin_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
for (irq = 0; irq < NR_IRQS; irq++)
if (anakin_active_irqs & (1 << irq))
do_IRQ(irq, regs);
}
static struct irqaction anakin_irq = {
.name = "Anakin IRQ",
.handler = anakin_interrupt,
.flags = SA_INTERRUPT
};
void __init
irq_init_irq(void)
{
unsigned int irq;
for (irq = 0; irq < NR_IRQS; irq++) {
switch (irq) {
case IRQ_UART0:
case IRQ_UART1:
case IRQ_UART2:
case IRQ_TICK:
case IRQ_CODEC:
case IRQ_UART4:
case IRQ_TOUCHSCREEN:
case IRQ_UART3:
case IRQ_FIFO:
case IRQ_CAN:
case IRQ_COMPACTFLASH:
case IRQ_BOSH:
case IRQ_ANAKIN:
irq_desc[irq].valid = 1;
irq_desc[irq].mask_ack = anakin_mask_irq;
irq_desc[irq].mask = anakin_mask_irq;
irq_desc[irq].unmask = anakin_unmask_irq;
}
}
setup_arm_irq(IRQ_ANAKIN, &anakin_irq);
}
/*
* linux/arch/arm/mach-anakin/mm.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/mach/map.h>
static struct map_desc anakin_io_desc[] __initdata = {
{ IO_BASE, IO_START, IO_SIZE, MT_DEVICE },
{ FLASH_BASE, FLASH_START, FLASH_SIZE, MT_DEVICE },
{ VGA_BASE, VGA_START, VGA_SIZE, MT_DEVICE }
};
void __init
anakin_map_io(void)
{
iotable_init(anakin_io_desc, ARRAY_SIZE(anakin_io_desc));
}
......@@ -204,7 +204,7 @@ config SA1100_OMNIMETER
depends on ARCH_SA1100
help
Say Y here if you are using the inhand electronics OmniMeter. See
<http://www.inhandelectronics.com/html/omni1.html> for details.
<http://www.inhandelectronics.com/omnimeter.asp> for details.
config SA1100_PANGOLIN
bool "Pangolin"
......@@ -232,7 +232,7 @@ config SA1100_PT_SYSTEM3
help
Say Y here if you intend to build a kernel suitable to run on
a Pruftechnik Digital Board. For more information see
<http://www.pruftechnik.com>
<http://www.pruftechnik.com/>
config SA1100_SHANNON
bool "Shannon"
......@@ -250,8 +250,8 @@ config SA1100_SHERMAN
Say Y here to support the Blazie Engineering `Sherman' StrongARM
1110-based SBC, used primarily in assistance products for the
visually impaired. The company is now Freedom Scientific, with
a website at <http://www.freedomscientific.com/index.html>. The
Sherman product, however, appears to have been discontinued.
a website at <http://www.freedomscientific.com/>. The Sherman
product, however, appears to have been discontinued.
config SA1100_SIMPAD
bool "Simpad"
......@@ -262,7 +262,7 @@ config SA1100_SIMPAD
FLASH. The SL4 version got 64 MB RAM and 32 MB FLASH and a
PCMCIA-Slot. The version for the Germany Telecom (DTAG) is the same
like CL4 in additional it has a PCMCIA-Slot. For more information
visit <http://www.my-siemens.com or www.siemens.ch>.
visit <http://www.my-siemens.com/> or <http://www.siemens.ch/>.
config SA1100_PFS168
bool "Tulsa"
......@@ -280,7 +280,7 @@ config SA1100_VICTOR
help
Say Y here if you are using a Visu Aide Intel(R) StrongARM(R)
SA-1100 based Victor Digital Talking Book Reader. See
<http://www.visuaide.com/pagevictor.en.html> for information on
<http://www.visuaide.com/products.html> for information on
this system.
config SA1100_XP860
......
......@@ -47,6 +47,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -55,6 +55,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask;
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -162,6 +162,7 @@ static struct platform_device sa11x0udc_device = {
.id = 0,
.dev = {
.dma_mask = &sa11x0udc_dma_mask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa11x0udc_resources),
.resource = sa11x0udc_resources,
......@@ -212,6 +213,7 @@ static struct platform_device sa11x0mcp_device = {
.id = 0,
.dev = {
.dma_mask = &sa11x0mcp_dma_mask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa11x0mcp_resources),
.resource = sa11x0mcp_resources,
......@@ -232,6 +234,7 @@ static struct platform_device sa11x0ssp_device = {
.id = 0,
.dev = {
.dma_mask = &sa11x0ssp_dma_mask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa11x0ssp_resources),
.resource = sa11x0ssp_resources,
......@@ -253,6 +256,9 @@ static struct resource sa11x0fb_resources[] = {
static struct platform_device sa11x0fb_device = {
.name = "sa11x0-fb",
.id = 0,
.dev = {
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa11x0fb_resources),
.resource = sa11x0fb_resources,
};
......
......@@ -44,6 +44,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -44,6 +44,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -251,6 +251,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -38,6 +38,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -393,6 +393,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -45,6 +45,7 @@ static struct platform_device sa1111_device = {
.id = 0,
.dev = {
.dma_mask = &sa1111_dmamask,
.coherent_dma_mask = 0xffffffff,
},
.num_resources = ARRAY_SIZE(sa1111_resources),
.resource = sa1111_resources,
......
......@@ -185,8 +185,8 @@ config CPU_ARM1026
# SA110
config CPU_SA110
bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && !ARCH_ANAKIN && ARCH_RPC
default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI || ARCH_ANAKIN
bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && ARCH_RPC
default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI
select CPU_32v3 if ARCH_RPC
select CPU_32v4 if !ARCH_RPC
select CPU_ABRT_EV4
......
......@@ -164,8 +164,6 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -174,32 +174,6 @@ config SERIAL_8250_ACORN
system, say Y to this option. The driver can handle 1, 2, or 3 port
cards. If unsure, say N.
config SERIAL_ANAKIN
bool "Anakin serial port support"
depends on ARM && ARCH_ANAKIN
select SERIAL_CORE
help
::: To be written :::
config SERIAL_ANAKIN_CONSOLE
bool "Console on Anakin serial port"
depends on SERIAL_ANAKIN
select SERIAL_CORE_CONSOLE
help
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
you can alter that using a kernel command line option such as
"console=ttyAN0". (Try "man bootparam" or see the documentation of
your boot loader (lilo or loadlin) about how to pass options to the
kernel at boot time.)
config ANAKIN_DEFAULT_BAUDRATE
int "Default Anakin serial baudrate"
depends on SERIAL_ANAKIN
default "9600"
help
::: To be written :::
config SERIAL_AMBA
tristate "ARM AMBA serial port support"
depends on ARM_AMBA
......
......@@ -16,7 +16,6 @@ obj-$(CONFIG_SERIAL_21285) += 21285.o
obj-$(CONFIG_SERIAL_8250) += 8250.o $(serial-8250-y)
obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o
obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o
obj-$(CONFIG_SERIAL_ANAKIN) += anakin.o
obj-$(CONFIG_SERIAL_AMBA) += amba.o
obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
obj-$(CONFIG_SERIAL_PXA) += pxa.o
......
/*
* linux/drivers/char/anakin.c
*
* Based on driver for AMBA serial ports, by ARM Limited,
* Deep Blue Solutions Ltd., Linus Torvalds and Theodore Ts'o.
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* Copyright (C) 2001 Blue Mug, Inc. for Acunia N.V.
*
* 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.
*
* Changelog:
* 20-Apr-2001 TTC Created
* 05-May-2001 W/TTC Updated for serial_core.c
* 27-Jun-2001 jonm Minor changes; add mctrl support, switch to
* SA_INTERRUPT. Works reliably now. No longer requires
* changes to the serial_core API.
*
* $Id: anakin.c,v 1.32 2002/07/28 10:03:27 rmk Exp $
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/serial_core.h>
#include <asm/arch/serial_reg.h>
#define UART_NR 5
#define SERIAL_ANAKIN_NAME "ttyAN"
#define SERIAL_ANAKIN_MAJOR 204
#define SERIAL_ANAKIN_MINOR 32
static unsigned int txenable[NR_IRQS]; /* Software interrupt register */
static inline unsigned int
anakin_in(struct uart_port *port, unsigned int offset)
{
return __raw_readl(port->base + offset);
}
static inline void
anakin_out(struct uart_port *port, unsigned int offset, unsigned int value)
{
__raw_writel(value, port->base + offset);
}
static void
anakin_stop_tx(struct uart_port *port, unsigned int tty_stop)
{
txenable[port->irq] = 0;
}
static inline void
anakin_transmit_buffer(struct uart_port *port)
{
struct circ_buf *xmit = &port->info->xmit;
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x14, xmit->buf[xmit->tail]);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
port->icount.tx++;
if (uart_circ_empty(xmit))
anakin_stop_tx(port, 0);
}
static inline void
anakin_transmit_x_char(struct uart_port *port)
{
anakin_out(port, 0x14, port->x_char);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
port->icount.tx++;
port->x_char = 0;
}
static void
anakin_start_tx(struct uart_port *port, unsigned int tty_start)
{
// is it this... or below
if (!txenable[port->irq]) {
txenable[port->irq] = TXENABLE;
if ((anakin_in(port, 0x10) & TXEMPTY)) {
anakin_transmit_buffer(port);
}
}
}
static void
anakin_stop_rx(struct uart_port *port)
{
while (anakin_in(port, 0x10) & RXRELEASE)
anakin_in(port, 0x14);
anakin_out(port, 0x18, anakin_in(port, 0x18) | BLOCKRX);
}
static void
anakin_enable_ms(struct uart_port *port)
{
}
static inline void
anakin_rx_chars(struct uart_port *port)
{
unsigned int ch;
struct tty_struct *tty = port->info->tty;
if (!(anakin_in(port, 0x10) & RXRELEASE))
return;
ch = anakin_in(port, 0x14) & 0xff;
if (tty->flip.count < TTY_FLIPBUF_SIZE) {
*tty->flip.char_buf_ptr++ = ch;
*tty->flip.flag_buf_ptr++ = TTY_NORMAL;
port->icount.rx++;
tty->flip.count++;
}
tty_flip_buffer_push(tty);
}
static inline void
anakin_overrun_chars(struct uart_port *port)
{
unsigned int ch;
ch = anakin_in(port, 0x14);
port->icount.overrun++;
}
static inline void
anakin_tx_chars(struct uart_port *port)
{
struct circ_buf *xmit = &port->info->xmit;
if (port->x_char) {
anakin_transmit_x_char(port);
return;
}
if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
anakin_stop_tx(port, 0);
return;
}
anakin_transmit_buffer(port);
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(port);
}
static void
anakin_int(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned int status;
struct uart_port *port = dev_id;
status = anakin_in(port, 0x1c);
if (status & RX)
anakin_rx_chars(port);
if (status & OVERRUN)
anakin_overrun_chars(port);
if (txenable[port->irq] && (status & TX))
anakin_tx_chars(port);
}
static unsigned int
anakin_tx_empty(struct uart_port *port)
{
return anakin_in(port, 0x10) & TXEMPTY ? TIOCSER_TEMT : 0;
}
static unsigned int
anakin_get_mctrl(struct uart_port *port)
{
unsigned int status = 0;
status |= (anakin_in(port, 0x10) & CTS ? TIOCM_CTS : 0);
status |= (anakin_in(port, 0x18) & DCD ? TIOCM_CAR : 0);
status |= (anakin_in(port, 0x18) & DTR ? TIOCM_DTR : 0);
status |= (anakin_in(port, 0x18) & RTS ? TIOCM_RTS : 0);
return status;
}
static void
anakin_set_mctrl(struct uart_port *port, unsigned int mctrl)
{
unsigned int status;
status = anakin_in(port, 0x18);
if (mctrl & TIOCM_RTS)
status |= RTS;
else
status &= ~RTS;
if (mctrl & TIOCM_CAR)
status |= DCD;
else
status &= ~DCD;
anakin_out(port, 0x18, status);
}
static void
anakin_break_ctl(struct uart_port *port, int break_state)
{
unsigned long flags;
unsigned int status;
spin_lock_irqsave(&port->lock, flags);
status = anakin_in(port, 0x20);
if (break_state == -1)
status |= SETBREAK;
else
status &= ~SETBREAK;
anakin_out(port, 0x20, status);
spin_unlock_irqrestore(&port->lock, flags);
}
static int anakin_startup(struct uart_port *port)
{
int retval;
unsigned int read,write;
/*
* Allocate the IRQ
*/
retval = request_irq(port->irq, anakin_int, SA_INTERRUPT,
"serial_anakin", port);
if (retval)
return retval;
/*
* initialise the old status of the modem signals
*/
port->old_status = 0;
/*
* Finally, disable IRQ and softIRQs for first byte)
*/
txenable[port->irq] = 0;
read = anakin_in(port, 0x18);
write = (read & ~(RTS | DTR | BLOCKRX)) | IRQENABLE;
anakin_out(port, 0x18, write);
return 0;
}
static void anakin_shutdown(struct uart_port *port)
{
/*
* Free the interrupt
*/
free_irq(port->irq, port);
/*
* disable all interrupts, disable the port
*/
anakin_out(port, 0x18, anakin_in(port, 0x18) & ~IRQENABLE);
}
static void
anakin_set_termios(struct uart_port *port, struct termios *termios,
struct termios *old)
{
unsigned long flags;
unsigned int baud, quot;
/*
* We don't support parity, stop bits, or anything other
* than 8 bits, so clear these termios flags.
*/
termios->c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD | CREAD);
termios->c_cflag |= CS8;
/*
* We don't appear to support any error conditions either.
*/
termios->c_iflag &= ~(INPCK | IGNPAR | IGNBRK | BRKINT);
/*
* Ask the core to calculate the divisor for us.
*/
baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
quot = uart_get_divisor(port, baud);
spin_lock_irqsave(&port->lock, flags);
uart_update_timeout(port, termios->c_cflag, baud);
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x10, (anakin_in(port, 0x10) & ~PRESCALER)
| (quot << 3));
//parity always set to none
anakin_out(port, 0x18, anakin_in(port, 0x18) & ~PARITY);
spin_unlock_irqrestore(&port->lock, flags);
}
static const char *anakin_type(struct port *port)
{
return port->type == PORT_ANAKIN ? "ANAKIN" : NULL;
}
static struct uart_ops anakin_pops = {
.tx_empty = anakin_tx_empty,
.set_mctrl = anakin_set_mctrl,
.get_mctrl = anakin_get_mctrl,
.stop_tx = anakin_stop_tx,
.start_tx = anakin_start_tx,
.stop_rx = anakin_stop_rx,
.enable_ms = anakin_enable_ms,
.break_ctl = anakin_break_ctl,
.startup = anakin_startup,
.shutdown = anakin_shutdown,
.set_termios = anakin_set_termios,
.type = anakin_type,
};
static struct uart_port anakin_ports[UART_NR] = {
{
.base = IO_BASE + UART0,
.irq = IRQ_UART0,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 0,
},
{
.base = IO_BASE + UART1,
.irq = IRQ_UART1,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 1,
},
{
.base = IO_BASE + UART2,
.irq = IRQ_UART2,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 2,
},
{
.base = IO_BASE + UART3,
.irq = IRQ_UART3,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 3,
},
{
.base = IO_BASE + UART4,
.irq = IRQ_UART4,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 4,
},
};
#ifdef CONFIG_SERIAL_ANAKIN_CONSOLE
static void
anakin_console_write(struct console *co, const char *s, unsigned int count)
{
struct uart_port *port = &anakin_ports[co->index];
unsigned int flags, status, i;
/*
* First save the status then disable the interrupts
*/
local_irq_save(flags);
status = anakin_in(port, 0x18);
anakin_out(port, 0x18, status & ~IRQENABLE);
local_irq_restore(flags);
/*
* Now, do each character
*/
for (i = 0; i < count; i++, s++) {
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
/*
* Send the character out.
* If a LF, also do CR...
*/
anakin_out(port, 0x14, *s);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
if (*s == 10) {
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x14, 13);
anakin_out(port, 0x18, anakin_in(port, 0x18)
| SENDREQUEST);
}
}
/*
* Finally, wait for transmitter to become empty
* and restore the interrupts
*/
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
if (status & IRQENABLE) {
local_irq_save(flags);
anakin_out(port, 0x18, anakin_in(port, 0x18) | IRQENABLE);
local_irq_restore(flags);
}
}
/*
* Read the current UART setup.
*/
static void __init
anakin_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits)
{
int paritycode;
*baud = GETBAUD (anakin_in(port, 0x10) & PRESCALER);
paritycode = GETPARITY(anakin_in(port, 0x18) & PARITY);
switch (paritycode) {
case NONEPARITY: *parity = 'n'; break;
case ODDPARITY: *parity = 'o'; break;
case EVENPARITY: *parity = 'e'; break;
}
*bits = 8;
}
static int __init
anakin_console_setup(struct console *co, char *options)
{
struct uart_port *port;
int baud = CONFIG_ANAKIN_DEFAULT_BAUDRATE;
int bits = 8;
int parity = 'n';
/*
* Check whether an invalid uart number has been specified, and
* if so, search for the first available port that does have
* console support.
*/
if (co->index >= UART_NR)
co->index = 0;
port = &anakin_ports[co->index];
if (options)
uart_parse_options(options, &baud, &parity, &bits);
else
anakin_console_get_options(port, &baud, &parity, &bits);
return uart_set_options(port, co, baud, parity, bits);
}
extern struct uart_driver anakin_reg;
static struct console anakin_console = {
.name = SERIAL_ANAKIN_NAME,
.write = anakin_console_write,
.device = uart_console_device,
.setup = anakin_console_setup,
.flags = CON_PRINTBUFFER,
.index = -1,
};
static int __init anakin_console_init(void)
{
register_console(&anakin_console);
return 0;
}
console_initcall(anakin_console_init);
#define ANAKIN_CONSOLE &anakin_console
#else
#define ANAKIN_CONSOLE NULL
#endif
static struct uart_driver anakin_reg = {
.driver_name = SERIAL_ANAKIN_NAME,
.dev_name = SERIAL_ANAKIN_NAME,
.major = SERIAL_ANAKIN_MAJOR,
.minor = SERIAL_ANAKIN_MINOR,
.nr = UART_NR,
.cons = ANAKIN_CONSOLE,
};
static int __init
anakin_init(void)
{
int ret;
printk(KERN_INFO "Serial: Anakin driver $Revision: 1.32 $\n");
ret = uart_register_driver(&anakin_reg);
if (ret == 0) {
int i;
for (i = 0; i < UART_NR; i++)
uart_add_one_port(&anakin_reg, &anakin_ports[i]);
}
return ret;
}
__initcall(anakin_init);
MODULE_DESCRIPTION("Anakin serial driver");
MODULE_AUTHOR("Tak-Shing Chan <chan@aleph1.co.uk>");
MODULE_SUPPORTED_DEVICE("ttyAN");
MODULE_LICENSE("GPL");
MODULE_ALIAS_CHARDEV(SERIAL_ANAKIN_MAJOR, SERIAL_ANAKIN_MINOR);
......@@ -76,10 +76,6 @@ config FB_ACORN
hardware found in Acorn RISC PCs and other ARM-based machines. If
unsure, say N.
config FB_ANAKIN
bool "Anakin LCD support"
depends on FB && ARM && ARCH_ANAKIN
config FB_CLPS711X
bool "CLPS711X LCD support"
depends on FB && ARM && ARCH_CLPS711X
......
......@@ -28,7 +28,6 @@ obj-$(CONFIG_FB_CONTROL) += controlfb.o macmodes.o cfbfillrect.o cfbcop
obj-$(CONFIG_FB_PLATINUM) += platinumfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CT65550) += chipsfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_ANAKIN) += anakinfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CYBER) += cyberfb.o
obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
......
/*
* linux/drivers/video/anakinfb.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 23-Apr-2001 TTC Created
*/
#include <linux/types.h>
#include <linux/fb.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/module.h>
#include <asm/io.h>
static u32 colreg[17];
static struct fb_info fb_info;
static struct fb_var_screeninfo anakinfb_var = {
.xres = 400,
.yres = 234,
.xres_virtual = 400,
.yres_virtual = 234,
.bits_per_pixel = 16,
.red = { 11, 5, 0 },
.green = { 5, 6, 0 },
.blue = { 0, 5, 0 },
.activate = FB_ACTIVATE_NOW,
.height = -1,
.width = -1,
.vmode = FB_VMODE_NONINTERLACED,
};
static struct fb_fix_screeninfo anakinfb_fix = {
.id = "AnakinFB",
.smem_start = VGA_START,
.smem_len = VGA_SIZE,
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
.line_length = 400*2,
.accel = FB_ACCEL_NONE,
};
static int
anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
u_int transp, struct fb_info *info)
{
if (regno > 15)
return 1;
((u16 *)(info->pseudo_palette))[regno] = (red & 0xf800) | (green & 0xfc00 >> 5) | (blue & 0xf800 >> 11);
return 0;
}
static struct fb_ops anakinfb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = anakinfb_setcolreg,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
.fb_cursor = soft_cursor,
};
int __init
anakinfb_init(void)
{
memset(&fb_info, 0, sizeof(struct fb_info));
fb_info.flags = FBINFO_FLAG_DEFAULT;
fb_info.fbops = &anakinfb_ops;
fb_info.var = anakinfb_var;
fb_info.fix = anakinfb_fix;
fb_info.psuedo_palette = colreg;
if (!(request_mem_region(VGA_START, VGA_SIZE, "vga")))
return -ENOMEM;
if (fb_info.screen_base = ioremap(VGA_START, VGA_SIZE)) {
release_mem_region(VGA_START, VGA_SIZE);
return -EIO;
}
fb_alloc_cmap(&fb_info.cmap, 16, 0);
if (register_framebuffer(&fb_info) < 0) {
iounmap(fb_info.screen_base);
release_mem_region(VGA_START, VGA_SIZE);
return -EINVAL;
}
MOD_INC_USE_COUNT;
return 0;
}
MODULE_AUTHOR("Tak-Shing Chan <chan@aleph1.co.uk>");
MODULE_DESCRIPTION("Anakin framebuffer driver");
MODULE_SUPPORTED_DEVICE("fb");
......@@ -55,7 +55,6 @@ extern int acornfb_init(void);
extern int acornfb_setup(char*);
extern int amifb_init(void);
extern int amifb_setup(char*);
extern int anakinfb_init(void);
extern int atafb_init(void);
extern int atafb_setup(char*);
extern int macfb_init(void);
......@@ -180,9 +179,6 @@ static struct {
#ifdef CONFIG_FB_AMIGA
{ "amifb", amifb_init, amifb_setup },
#endif
#ifdef CONFIG_FB_ANAKIN
{ "anakinfb", anakinfb_init, NULL },
#endif
#ifdef CONFIG_FB_CLPS711X
{ "clps711xfb", clps711xfb_init, NULL },
#endif
......
/*
* linux/include/asm-arm/arch-anakin/dma.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#ifndef __ASM_ARCH_DMA_H
#define __ASM_ARCH_DMA_H
#define MAX_DMA_ADDRESS 0xffffffff
#define MAX_DMA_CHANNELS 0
#endif
/*
* linux/include/asm-arm/arch-anakin/hardware.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_HARDWARE_H
#define __ASM_ARCH_HARDWARE_H
/*
* Memory map
*/
#define SRAM_START 0x00000000
#define SRAM_SIZE 0x00100000
#define SRAM_BASE 0xdf000000
#define SDRAM_START 0x20000000
#define SDRAM_SIZE 0x04000000
#define SDRAM_BASE 0xc0000000
#define IO_START 0x40000000
#define IO_SIZE 0x00100000
#define IO_BASE 0xe0000000
#define FLASH_START 0x60000000
#define FLASH_SIZE 0x00080000
#define FLASH_BASE 0xe8000000
#define VGA_START 0x80000000
#define VGA_SIZE 0x0002db40
#define VGA_BASE 0xf0000000
/*
* IO map
*/
#define IO_CONTROLLER 0x00000
#define INTERRUPT_CONTROLLER 0x02000
#define UART0 0x04000
#define UART1 0x06000
#define UART2 0x08000
#define CODEC 0x0a000
#define UART4 0x0c000
#define UART3 0x0e000
#define DISPLAY_CONTROLLER 0x10000
#define DAB 0x12000
#define STATE_CONTROLLER 0x14000
#define CAN 0x23000
#define COMPACTFLASH 0x24000
/*
* Use SRAM for D-cache flush
*/
#define FLUSH_BASE_PHYS SRAM_START
#define FLUSH_BASE SRAM_BASE
#define UNCACHEABLE_ADDR (SRAM_BASE + 0x10000)
/*
* Use SDRAM for memory
*/
#define MEM_SIZE SDRAM_SIZE
#endif
/*
* linux/include/asm-arm/arch-anakin/ide.h
*
* Copyright 2001 Blue Mug Inc. for Acunia N.V.
*
* 08-jun-2001: Initial clone of arch-sa1100/ide.h by Jon McClintock
* (jonm@bluemug.com).
*/
#include <asm/irq.h>
#include <asm/hardware.h>
/*
* Set up a hw structure for a specified data port, control port and IRQ.
* This should follow whatever the default interface uses.
*/
static __inline__ void
ide_init_hwif_ports(hw_regs_t *hw, int data_port, int ctrl_port, int *irq)
{
ide_ioreg_t reg;
int i;
int regincr = 4;
memset(hw, 0, sizeof(*hw));
reg = (ide_ioreg_t)data_port;
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
hw->io_ports[i] = reg;
reg += regincr;
}
hw->io_ports[IDE_CONTROL_OFFSET] = (ide_ioreg_t) ctrl_port;
if (irq)
*irq = 0;
}
/*
* This registers the standard ports for this architecture with the IDE
* driver.
*/
static __inline__ void
ide_init_default_hwifs(void)
{
hw_regs_t hw;
ide_init_hwif_ports(&hw, IO_BASE + COMPACTFLASH,
IO_BASE + COMPACTFLASH + IDE_CONTROL_OFFSET, NULL);
hw.irq = IRQ_COMPACTFLASH;
ide_register_hw(&hw);
}
/*
* linux/include/asm-arm/arch-anakin/io.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xffffffff
#define __io(a) (a)
/*
* We don't support ins[lb]/outs[lb]. Make them fault.
*/
#define __raw_readsb(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_readsl(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_writesb(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_writesl(p,d,l) do { *(int *)0 = 0; } while (0)
#endif
/*
* linux/include/asm-arm/arch-anakin/irqs.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_IRQS_H
#define __ASM_ARCH_IRQS_H
#define NR_IRQS 16
#define IRQ_UART0 0
#define IRQ_UART1 1
#define IRQ_UART2 2
#define IRQ_TICK 3
#define IRQ_CODEC 4
#define IRQ_UART4 5
#define IRQ_TOUCHSCREEN 6
#define IRQ_UART3 7
#define IRQ_FIFO 8
#define IRQ_CAN 9
#define IRQ_COMPACTFLASH 10
#define IRQ_BOSH 12
#define IRQ_ANAKIN 15
#endif
/*
* linux/include/asm-arm/arch-anakin/memory.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_MEMORY_H
#define __ASM_ARCH_MEMORY_H
#define TASK_SIZE (0xbf000000)
#define TASK_SIZE_26 (64u * 1024 * 1024)
#define TASK_UNMAPPED_BASE (0x40000000)
#define PAGE_OFFSET 0xc0000000
#define PHYS_OFFSET 0x20000000
#define __virt_to_phys(a) ((a) - PAGE_OFFSET + PHYS_OFFSET)
#define __phys_to_virt(a) ((a) + PAGE_OFFSET - PHYS_OFFSET)
#define __virt_to_bus(a) __virt_to_phys(a)
#define __bus_to_virt(a) __phys_to_virt(a)
#define __virt_to_phys__is_a_macro
#define __phys_to_virt__is_a_macro
#define __virt_to_bus__is_a_macro
#define __bus_to_virt__is_a_macro
#endif
/*
* linux/include/asm-arm/arch-anakin/param.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 11-Apr-2001 TTC Created
*/
/*
* Reserved for future use
*/
/*
* linux/include/asm-arm/arch-anakin/serial.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 11-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_SERIAL_H
#define __ASM_ARCH_SERIAL_H
#include <asm/io.h>
#include <asm/irq.h>
/*
* UART3 and UART4 are not supported yet
*/
#define STD_SERIAL_PORT_DEFNS \
{ 0, 0, IO_BASE + UART0, IRQ_UART0, 0 }, \
{ 0, 0, IO_BASE + UART1, IRQ_UART1, 0 }, \
{ 0, 0, IO_BASE + UART2, IRQ_UART2, 0 }
#define EXTRA_SERIAL_PORT_DEFNS
#endif
/*
* linux/include/asm-arm/arch-anakin/serial_reg.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef ASM_ARCH_SERIAL_REG_H
#define ASM_ARCH_SERIAL_REG_H
/*
* Serial registers (other than tx/rx)
*/
/*
* [UARTx + 0x10]
*/
#define RXRELEASE (1 << 0)
#define TXEMPTY (1 << 1)
#define CTS (1 << 2)
#define PRESCALER (31 << 3)
#define SETBAUD(baud) ((230400 / (baud) - 1) << 3)
#define GETBAUD(prescaler) (230400 / (((prescaler) >> 3) + 1))
/*
* [UARTx + 0x18]
*/
#define IRQENABLE (1 << 0)
#define SENDREQUEST (1 << 1)
#define RTS (1 << 2)
#define DTR (1 << 3)
#define DCD (1 << 4)
#define BLOCKRX (1 << 5)
#define PARITY (3 << 6)
#define SETPARITY(parity) ((parity) << 6)
#define GETPARITY(parity) ((parity) >> 6)
#define NONEPARITY (0)
#define ODDPARITY (1)
#define EVENPARITY (2)
/*
* [UARTx + 0x1c]
*/
#define TX (1 << 0)
#define RX (1 << 1)
#define OVERRUN (1 << 2)
/*
* [UARTx + 0x20]
*/
#define SETBREAK (1 << 0)
/*
* Software interrupt register
*/
#define TXENABLE (1 << 0)
#endif
/*
* linux/include/asm-arm/arch-anakin/system.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 11-Apr-2001 TTC Created
* 04-May-2001 W/PB Removed cpu_do_idle()
*/
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H
static inline void arch_idle(void)
{
}
static inline void
arch_reset(char mode)
{
cpu_reset(0);
}
#endif
/*
* linux/include/asm-arm/arch-anakin/time.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_TIME_H
#define __ASM_ARCH_TIME_H
static irqreturn_t
anakin_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
do_timer(regs);
return IRQ_HANDLED;
}
void __init time_init(void)
{
timer_irq.handler = anakin_timer_interrupt;
setup_irq(IRQ_TICK, &timer_irq);
}
#endif
/*
* linux/include/asm-arm/arch-anakin/timex.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_TIMEX_H
#define __ASM_ARCH_TIMEX_H
/*
* Timex specification for Anakin
*/
#define CLOCK_TICK_RATE (1000 / 8)
#endif
/*
* linux/include/asm-arm/arch-anakin/uncompress.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_UNCOMPRESS_H
#define __ASM_ARCH_UNCOMPRESS_H
#include <linux/config.h>
#include <asm/io.h>
#include <asm/arch/serial_reg.h>
#ifndef CONFIG_ANAKIN_DEFAULT_BAUDRATE
#define CONFIG_ANAKIN_DEFAULT_BAUDRATE 9600
#endif
static inline void
putc(int c)
{
while (!(__raw_readl(IO_START + UART0 + 0x10) & TXEMPTY));
__raw_writel(c, IO_START + UART0 + 0x14);
__raw_writel(__raw_readl(IO_START + UART0 + 0x18)
| SENDREQUEST, IO_START + UART0 + 0x18);
}
static void
puts(const char *s)
{
int c;
while ((c = *s++)) {
putc(c);
if (c == '\n') putc('\r');
}
}
static void
arch_decomp_setup(void)
{
__raw_writel(__raw_readl(IO_START + UART0 + 0x10) & ~PRESCALER
| SETBAUD(CONFIG_ANAKIN_DEFAULT_BAUDRATE),
IO_START + UART0 + 0x10);
__raw_writel(__raw_readl(IO_START + UART0 + 0x18) & ~(IRQENABLE
| RTS | DTR | BLOCKRX | PARITY),
IO_START + UART0 + 0x18);
}
#define arch_decomp_wdog()
#endif
/*
* linux/include/asm-arm/arch-anakin/vmalloc.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* 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.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_VMALLOC_H
#define __ASM_ARCH_VMALLOC_H
/*
* VMALLOC_ARCH_OFFSET must be set to VMALLOC_OFFSET (check
* linux/arch/arm/kernel/traps.c)
*/
#define VMALLOC_ARCH_OFFSET (8 * 1024 * 1024)
#define VMALLOC_START (((unsigned long) (high_memory) + VMALLOC_ARCH_OFFSET) & ~(VMALLOC_ARCH_OFFSET - 1))
#define VMALLOC_END (PAGE_OFFSET + 0x10000000)
#define MODULE_START (PAGE_OFFSET - 16*1048576)
#define MODULE_END (PAGE_OFFSET)
#endif
......@@ -352,5 +352,13 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents,
}
}
/*
* DMA errors are defined by all-bits-set in the DMA address.
*/
static inline int dma_mapping_error(dma_addr_t dma_addr)
{
return dma_addr == ~0;
}
#endif /* __KERNEL__ */
#endif
......@@ -15,6 +15,7 @@
struct amba_device {
struct device dev;
struct resource res;
u64 dma_mask;
unsigned int periphid;
unsigned int irq[AMBA_NR_IRQS];
};
......
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