Commit 236e6127 authored by Linus Torvalds's avatar Linus Torvalds

v2.4.4 -> v2.4.4.1

  - Al Viro: clean up driver "invalidate_device()" mess
  - Andries Brouwer: make sd.c work with USB Dane-Elec CompactFlash Card
  Reader
  - me: fix nasty lazy kernel page table update problem
  - me: undo fork changes. Too many user-level bugs and unresolved issues.
  - Peter Anvin: iso9660 cleanups
  - Alan Cox: big merge
  - Johannes Erdfelt: UHCI pci DMA setup fix
parent 7216d3e9
......@@ -171,7 +171,7 @@
with 'isa_' and are <function>isa_readb</function>,
<function>isa_writeb</function>, <function>isa_readw</function>,
<function>isa_writew</function>, <function>isa_readl</function>,
<function>isa_writel</function), <function>isa_memcpy_fromio</function>
<function>isa_writel</function>, <function>isa_memcpy_fromio</function>
and <function>isa_memcpy_toio</function>
</para>
<para>
......
Linux 2.4 on the CRIS architecture
==================================
$Id: README,v 1.6 2001/02/21 15:27:25 bjornw Exp $
$Id: README,v 1.7 2001/04/19 12:38:32 bjornw Exp $
This is a port of Linux 2.4 to Axis Communications ETRAX 100LX embedded
network CPU. For more information about CRIS and ETRAX please see further
below.
<to come: instructions on how to grab the right gcc, compiling and booting>
In order to compile this you need a version of gcc with support for the
ETRAX chip family. Please see this link for more information on how to
download the compiler and other tools useful when building and booting
software for the ETRAX platform:
http://developer.axis.com/doc/software/devboard_lx/install-howto.html
<more specific information should come in this document later>
What is CRIS ?
--------------
......@@ -97,7 +103,7 @@ block: queued sectors max/low 9109kB/3036kB, 64 slots per queue
ETRAX 100LX 10/100MBit ethernet v2.0 (c) 2000 Axis Communications AB
eth0 initialized
eth0: changed MAC to 00:40:8C:CD:00:00
ETRAX 100LX serial-driver $Revision: 1.6 $, (c) 2000 Axis Communications AB
ETRAX 100LX serial-driver $Revision: 1.7 $, (c) 2000 Axis Communications AB
ttyS0 at 0xb0000060 is a builtin UART with DMA
ttyS1 at 0xb0000068 is a builtin UART with DMA
ttyS2 at 0xb0000070 is a builtin UART with DMA
......@@ -127,7 +133,7 @@ Default gateway is 10.13.9.1
Hostname is bbox1
Telnetd starting, using port 23.
using /bin/sash as shell.
sftpd[15]: sftpd $Revision: 1.6 $ starting up
sftpd[15]: sftpd $Revision: 1.7 $ starting up
......
......@@ -765,7 +765,7 @@ Your cooperation is appreciated.
36 char Netlink support
0 = /dev/route Routing, device updates, kernel to user
1 = /dev/skip enSKIP security cache control
3 = /dec/fwmonitor Firewall packet copies
3 = /dev/fwmonitor Firewall packet copies
16 = /dev/tap0 First Ethertap device
...
31 = /dev/tap15 16th Ethertap device
......@@ -2436,7 +2436,7 @@ Your cooperation is appreciated.
224 char A2232 serial card
0 = /dev/ttyY0 First A2232 port
1 = /dev/cuy0 Second A2232 port
1 = /dev/ttyY1 Second A2232 port
...
225 char A2232 serial card (alternate devices)
......
......@@ -238,8 +238,8 @@ using this version of the device driver.
open(const char * filename, int flags)
--------------------------------------
The filename should be an 'sg' device such as
/dev/sg[a-z]
/dev/sg[0,1,2,...]
/dev/sg[a-z] <<< now deprecated >>>
or a symbolic link to one of these. [Devfs has its own sub-directory for
sg devices with entries like: /dev/scsi/host1/bus2/target3/lun4/generic .]
It seems as though SCSI devices are allocated to sg minor numbers in the
......
(This recipe has been edited to update the configuration symbols.)
From: Shaw Carruthers <shaw@shawc.demon.co.uk>
I have been using mad16 sound for some time now with no problems, current
......@@ -14,9 +16,9 @@ sound 61928 0 [mad16 sb uart401 ad1848]
.config has:
CONFIG_SOUND=m
CONFIG_ADLIB=m
CONFIG_MAD16=m
CONFIG_YM3812=m
CONFIG_SOUND_ADLIB=m
CONFIG_SOUND_MAD16=m
CONFIG_SOUND_YM3812=m
modules.conf has:
......
......@@ -29,21 +29,21 @@ the kernel.
Sound card support should be enabled as a module (chose m).
Answer 'm' for these items:
Generic OPL2/OPL3 FM synthesizer support (CONFIG_ADLIB)
Microsoft Sound System support (CONFIG_MSS)
Support for OPTi MAD16 and/or Mozart based cards (CONFIG_MAD16)
FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812)
Generic OPL2/OPL3 FM synthesizer support (CONFIG_SOUND_ADLIB)
Microsoft Sound System support (CONFIG_SOUND_MSS)
Support for OPTi MAD16 and/or Mozart based cards (CONFIG_SOUND_MAD16)
FM synthesizer (YM3812/OPL-3) support (CONFIG_SOUND_YM3812)
The configuration menu may ask for addresses, IRQ lines or DMA
channels. If the card is used as a module the module loading
options will override these values.
For the OPTi 931 you can answer 'n' to:
Support MIDI in older MAD16 based cards (requires SB) (CONFIG_MAD16_OLDCARD)
Support MIDI in older MAD16 based cards (requires SB) (CONFIG_SOUND_MAD16_OLDCARD)
If you do need MIDI support in a Mozart or C928 based card you
need to answer 'm' to the above question. In that case you will
also need to answer 'm' to:
'100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' (CONFIG_SB)
'100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' (CONFIG_SOUND_SB)
Go on and compile your kernel and modules. Install the modules. Run depmod -a.
......
......@@ -161,7 +161,7 @@ S: Supported
APPLETALK NETWORK LAYER
P: Jay Schulist
M: jschlst@turbolinux.com
L: linux-atalk@netspace.org
L: linux-atalk@lists.netspace.org
S: Maintained
ARM MFM AND FLOPPY DRIVERS
......@@ -280,13 +280,17 @@ S: Supported
CONFIGURE, MENUCONFIG, XCONFIG
P: Michael Elizabeth Chastain
M: mec@shout.net
L: linux-kbuild@torque.net
W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/
L: kbuild-devel@lists.sourceforge.net
W: http://kbuild.sourceforge.net
S: Maintained
CONFIGURE.HELP
P: Axel Boldt
M: axel@uni-paderborn.de
P: Steven P. Cole
M: Steven P. Cole <elenstev@mesatop.com>
P: Eric S. Raymond
M: Eric S. Raymond <esr@thyrsus.com>
L: kbuild-devel@lists.sourceforge.net
W: http://kbuild.sourceforge.net
S: Maintained
COSA/SRP SYNC SERIAL DRIVER
......@@ -393,7 +397,7 @@ S: Supported
DISK GEOMETRY AND PARTITION HANDLING
P: Andries Brouwer
M: aeb@veritas.com
M: aeb@cwi.nl
W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html
W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
......@@ -548,22 +552,6 @@ L: linux-hams@vger.kernel.org
W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/
S: Maintained
KERNEL BUILD (Makefile, Rules.make, scripts/*)
P: Keith Owens
M: kaos@ocs.com.au
P: Michael Elizabeth Chastain
M: mec@shout.net
L: linux-kbuild@torque.net
W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/
S: Maintained
LOGICAL VOLUME MANAGER
P: Heinz Mauelshagen
M: linux-LVM@EZ-Darmstadt.Telekom.de
L: linux-LVM@msede.com
W: http://linux.msede.com/lvm
S: Maintained
HIPPI
P: Jes Sorensen
M: jes@linuxcare.com
......@@ -759,6 +747,15 @@ M: jeremy@goop.org
L: autofs@linux.kernel.org
S: Maintained
KERNEL BUILD (Makefile, Rules.make, scripts/*)
P: Keith Owens
M: kaos@ocs.com.au
P: Michael Elizabeth Chastain
M: mec@shout.net
L: linux-kbuild@torque.net
W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/
S: Maintained
KERNEL NFSD
P: Neil Brown
M: neilb@cse.unsw.edu.au
......@@ -793,6 +790,13 @@ W: http://www.linuxppc.org/
L: linuxppc-dev@lists.linuxppc.org
S: Maintained
LOGICAL VOLUME MANAGER
P: Heinz Mauelshagen
M: linux-LVM@EZ-Darmstadt.Telekom.de
L: linux-LVM@msede.com
W: http://linux.msede.com/lvm
S: Maintained
M68K
P: Jes Sorensen
M: jes@linuxcare.com
......
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 4
EXTRAVERSION =
SUBLEVEL = 5
EXTRAVERSION =-pre1
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
# $Id: Makefile,v 1.15 2001/02/16 17:50:04 larsv Exp $
# $Id: Makefile,v 1.18 2001/04/17 13:58:38 orjanf Exp $
# cris/Makefile
#
# This file is included by the global makefile so that you can add your own
......@@ -25,8 +25,8 @@ LD_SCRIPT=$(TOPDIR)/arch/cris/cris.ld
# regenerating stuff (even for incremental linking of subsystems!) is
# even more nauseating.
LD = if [ ! -e $(LD_SCRIPT).tmp -o $(LD_SCRIPT) -nt $(LD_SCRIPT).tmp ]; then \
sed -e s/@ETRAX_DRAM_VIRTUAL_BASE@/0x$(ETRAX_DRAM_VIRTUAL_BASE)/ \
-e s/@ETRAX_DRAM_SIZE_M@/$(ETRAX_DRAM_SIZE)/ \
sed -e s/@CONFIG_ETRAX_DRAM_VIRTUAL_BASE@/0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)/ \
-e s/@CONFIG_ETRAX_DRAM_SIZE_M@/$(CONFIG_ETRAX_DRAM_SIZE)/ \
< $(LD_SCRIPT) > $(LD_SCRIPT).tmp; \
else true; \
fi && $(CROSS_COMPILE)ld -mcriself
......@@ -42,7 +42,7 @@ OBJCOPY := $(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S
CFLAGS := $(CFLAGS) -march=v10 -fno-strict-aliasing -pipe -D__linux__
ifdef CONFIG_KGDB
ifdef CONFIG_ETRAX_KGDB
CFLAGS := $(subst -fomit-frame-pointer,,$(CFLAGS)) -g
CFLAGS += -fno-omit-frame-pointer
endif
......@@ -76,7 +76,7 @@ simimage: timage
cramfs:
## cramfs - Creates a cramfs image
mkcramfs -b 8192 root cramfs.img
mkcramfs -b 8192 -m romfs_meta.txt root cramfs.img
cat vmlinux.bin cramfs.img >timage
clinux: vmlinux.bin decompress.bin rescue.bin
......
......@@ -24,7 +24,7 @@ decompress.bin: $(OBJECTS)
vmlinuz: piggy.img decompress.bin
cat decompress.bin piggy.img $(TOPDIR)/cramfs.img > vmlinuz
cat decompress.bin piggy.img > vmlinuz
rm -f piggy.img
head.o: head.S
......
/*
* arch/etrax100/boot/compressed/head.S
* arch/cris/boot/compressed/head.S
*
* Copyright (C) 1999 Axis Communications AB
* Copyright (C) 1999, 2001 Axis Communications AB
*
* Code that sets up the DRAM registers, calls the
* decompressor to unpack the piggybacked kernel, and jumps.
*
*/
#include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h>
#define RAM_INIT_MAGIC 0x56902387
;; Exported symbols
.globl _input_data
......@@ -21,23 +24,28 @@
nop
di
;; We need to initialze DRAM registers before we start using the DRAM
;; We need to initialze DRAM registers before we start using the DRAM
cmp.d RAM_INIT_MAGIC, r8 ; Already initialized?
beq dram_init_finished
nop
#include "../../lib/dram_init.S"
dram_init_finished:
;; Initiate the PA and PB ports
move.b DEF_R_PORT_PA_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r0
move.b r0, [R_PORT_PA_DATA]
move.b DEF_R_PORT_PA_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DIR, r0
move.b r0, [R_PORT_PA_DIR]
move.b DEF_R_PORT_PB_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r0
move.b r0, [R_PORT_PB_DATA]
move.b DEF_R_PORT_PB_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DIR, r0
move.b r0, [R_PORT_PB_DIR]
;; Setup the stack to a suitably high address.
......@@ -70,6 +78,7 @@ basse: move.d pc, r5
move.d r5, [_input_data] ; for the decompressor
;; Clear the decompressors BSS (between _edata and _end)
moveq 0, r0
......@@ -84,16 +93,19 @@ basse: move.d pc, r5
jsr _decompress_kernel
;; Put start address of cramfs in r9 so the kernel can use it
;; Put start address of root partition in r9 so the kernel can use it
;; when mounting from flash
move.d [_input_data], r9 ; flash address of compressed kernel
add.d [_inptr], r9 ; size of compressed kernel
;; Enter the decompressed kernel
move.d RAM_INIT_MAGIC, r8 ; Tell kernel that DRAM is initialized
jump 0x40004000 ; kernel is linked to this address
.data
_input_data:
.dword 0 ; used by the decompressor
#include "../../lib/hw_settings.S"
/*
* misc.c
*
* $Id: misc.c,v 1.3 2001/01/17 15:54:18 jonashg Exp $
* $Id: misc.c,v 1.6 2001/04/09 10:00:21 starvik Exp $
*
* This is a collection of several routines from gzip-1.0.3
* adapted for Linux.
......@@ -21,6 +21,7 @@
#define KERNEL_LOAD_ADR 0x40004000
#include <linux/config.h>
#include <linux/types.h>
#include <asm/svinto.h>
......@@ -143,21 +144,21 @@ static void gzip_release(void **ptr)
static void
puts(const char *s)
{
#ifndef CONFIG_DEBUG_PORT_NULL
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
while(*s) {
#ifdef CONFIG_DEBUG_PORT0
#ifdef CONFIG_ETRAX_DEBUG_PORT0
while(!(*R_SERIAL0_STATUS & (1 << 5))) ;
*R_SERIAL0_TR_DATA = *s++;
#endif
#ifdef CONFIG_DEBUG_PORT1
#ifdef CONFIG_ETRAX_DEBUG_PORT1
while(!(*R_SERIAL1_STATUS & (1 << 5))) ;
*R_SERIAL1_TR_DATA = *s++;
#endif
#ifdef CONFIG_DEBUG_PORT2
#ifdef CONFIG_ETRAX_DEBUG_PORT2
while(!(*R_SERIAL2_STATUS & (1 << 5))) ;
*R_SERIAL2_TR_DATA = *s++;
#endif
#ifdef CONFIG_DEBUG_PORT3
#ifdef CONFIG_ETRAX_DEBUG_PORT3
while(!(*R_SERIAL3_STATUS & (1 << 5))) ;
*R_SERIAL3_TR_DATA = *s++;
#endif
......@@ -227,25 +228,29 @@ setup_normal_output_buffer()
void
decompress_kernel()
{
char revision;
/* input_data is set in head.S */
inbuf = input_data;
#ifdef CONFIG_DEBUG_PORT0
#ifdef CONFIG_ETRAX_DEBUG_PORT0
*R_SERIAL0_XOFF = 0;
*R_SERIAL0_BAUD = 0x99;
*R_SERIAL0_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_DEBUG_PORT1
#ifdef CONFIG_ETRAX_DEBUG_PORT1
*R_SERIAL1_XOFF = 0;
*R_SERIAL1_BAUD = 0x99;
*R_SERIAL1_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_DEBUG_PORT2
#ifdef CONFIG_ETRAX_DEBUG_PORT2
*R_GEN_CONFIG = 0x08;
*R_SERIAL2_XOFF = 0;
*R_SERIAL2_BAUD = 0x99;
*R_SERIAL2_TR_CTRL = 0x40;
#endif
#ifdef CONFIG_DEBUG_PORT3
#ifdef CONFIG_ETRAX_DEBUG_PORT3
*R_GEN_CONFIG = 0x100;
*R_SERIAL3_XOFF = 0;
*R_SERIAL3_BAUD = 0x99;
*R_SERIAL3_TR_CTRL = 0x40;
......@@ -254,6 +259,14 @@ decompress_kernel()
setup_normal_output_buffer();
makecrc();
__asm__ volatile ("move vr,%0" : "=rm" (revision));
if (revision < 10)
{
puts("You need an ETRAX 100LX to run linux 2.4\n");
while(1);
}
puts("Uncompressing Linux...\n");
gunzip();
puts("Done. Now booting the kernel.\n");
......
;; $Id: head.S,v 1.3 2001/02/14 16:57:25 larsv Exp $
;;
;; Rescue code, made to reside at the beginning of the
;; flash-memory. when it starts, it checks a partition
;; table at the first sector after the rescue sector.
;; the partition table was generated by the product builder
;; script and contains offsets, lengths, types and checksums
;; for each partition that this code should check.
;;
;; If any of the checksums fail, we assume the flash is so
;; corrupt that we cant use it to boot into the ftp flash
;; loader, and instead we initialize the serial port to
;; receive a flash-loader and new flash image. we dont include
;; any flash code here, but just accept a certain amount of
;; bytes from the serial port and jump into it. the downloaded
;; code is put in the cache.
;;
;; The partitiontable is designed so that it is transparent to
;; code execution - it has a relative branch opcode in the
;; beginning that jumps over it. each entry contains extra
;; data so we can add stuff later.
;;
;; Partition table format:
;;
;; Code transparency:
;;
;; 2 bytes [opcode 'nop']
;; 2 bytes [opcode 'di']
;; 4 bytes [opcode 'ba <offset>', 8-bit or 16-bit version]
;; 2 bytes [opcode 'nop', delay slot]
;;
;; Table validation (at +10):
;;
;; 2 bytes [magic/version word for partitiontable - 0xef, 0xbe]
;; 2 bytes [length of all entries plus the end marker]
;; 4 bytes [checksum for the partitiontable itself]
;;
;; Entries, each with the following format, last has offset -1:
;;
;; 4 bytes [offset in bytes, from start of flash]
;; 4 bytes [length in bytes of partition]
;; 4 bytes [checksum, simple longword sum]
;; 2 bytes [partition type]
;; 2 bytes [flags, only bit 0 used, ro/rw = 1/0]
;; 16 bytes [reserved for future use]
;;
;; End marker
;;
;; 4 bytes [-1]
;;
;; 10 bytes [0, padding]
;;
;; Bit 0 in flags signifies RW or RO. The rescue code only bothers
;; to check the checksum for RO partitions, since the others will
;; change its data without updating the checksums. A 1 in bit 0
;; means RO, 0 means RW. That way, it is possible to set a partition
;; in RO mode initially, and later mark it as RW, since you can always
;; write 0's to the flash.
;;
;; During the wait for serial input, the status LED will flash so the
;; user knows something went wrong.
;;
;; Copyright (C) 1999 Axis Communications AB
/* $Id: head.S,v 1.7 2001/04/18 12:05:07 bjornw Exp $
*
* Rescue code, made to reside at the beginning of the
* flash-memory. when it starts, it checks a partition
* table at the first sector after the rescue sector.
* the partition table was generated by the product builder
* script and contains offsets, lengths, types and checksums
* for each partition that this code should check.
*
* If any of the checksums fail, we assume the flash is so
* corrupt that we cant use it to boot into the ftp flash
* loader, and instead we initialize the serial port to
* receive a flash-loader and new flash image. we dont include
* any flash code here, but just accept a certain amount of
* bytes from the serial port and jump into it. the downloaded
* code is put in the cache.
*
* The partitiontable is designed so that it is transparent to
* code execution - it has a relative branch opcode in the
* beginning that jumps over it. each entry contains extra
* data so we can add stuff later.
*
* Partition table format:
*
* Code transparency:
*
* 2 bytes [opcode 'nop']
* 2 bytes [opcode 'di']
* 4 bytes [opcode 'ba <offset>', 8-bit or 16-bit version]
* 2 bytes [opcode 'nop', delay slot]
*
* Table validation (at +10):
*
* 2 bytes [magic/version word for partitiontable - 0xef, 0xbe]
* 2 bytes [length of all entries plus the end marker]
* 4 bytes [checksum for the partitiontable itself]
*
* Entries, each with the following format, last has offset -1:
*
* 4 bytes [offset in bytes, from start of flash]
* 4 bytes [length in bytes of partition]
* 4 bytes [checksum, simple longword sum]
* 2 bytes [partition type]
* 2 bytes [flags, only bit 0 used, ro/rw = 1/0]
* 16 bytes [reserved for future use]
*
* End marker
*
* 4 bytes [-1]
*
* 10 bytes [0, padding]
*
* Bit 0 in flags signifies RW or RO. The rescue code only bothers
* to check the checksum for RO partitions, since the others will
* change its data without updating the checksums. A 1 in bit 0
* means RO, 0 means RW. That way, it is possible to set a partition
* in RO mode initially, and later mark it as RW, since you can always
* write 0's to the flash.
*
* During the wait for serial input, the status LED will flash so the
* user knows something went wrong.
*
* Copyright (C) 1999,2001 Axis Communications AB
*/
#include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY
......@@ -69,7 +70,7 @@
;; The partitiontable is looked for at the first sector after the boot
;; sector. Sector size is 65536 bytes in all flashes we use.
#define PTABLE_START 0x10000
#define PTABLE_START CONFIG_ETRAX_PTABLE_SECTOR
#define PTABLE_MAGIC 0xbeef
;; The normal Etrax100 on-chip boot ROM does serial boot at 0x380000f0.
......@@ -82,28 +83,28 @@
#define CODE_START 0x40000000
#define CODE_LENGTH 784
#ifdef CONFIG_RESCUE_SER0
#ifdef CONFIG_ETRAX_RESCUE_SER0
#define SERXOFF R_SERIAL0_XOFF
#define SERBAUD R_SERIAL0_BAUD
#define SERRECC R_SERIAL0_REC_CTRL
#define SERRDAT R_SERIAL0_REC_DATA
#define SERSTAT R_SERIAL0_STATUS
#endif
#ifdef CONFIG_RESCUE_SER1
#ifdef CONFIG_ETRAX_RESCUE_SER1
#define SERXOFF R_SERIAL1_XOFF
#define SERBAUD R_SERIAL1_BAUD
#define SERRECC R_SERIAL1_REC_CTRL
#define SERRDAT R_SERIAL1_REC_DATA
#define SERSTAT R_SERIAL1_STATUS
#endif
#ifdef CONFIG_RESCUE_SER2
#ifdef CONFIG_ETRAX_RESCUE_SER2
#define SERXOFF R_SERIAL2_XOFF
#define SERBAUD R_SERIAL2_BAUD
#define SERRECC R_SERIAL2_REC_CTRL
#define SERRDAT R_SERIAL2_REC_DATA
#define SERSTAT R_SERIAL2_STATUS
#endif
#ifdef CONFIG_RESCUE_SER3
#ifdef CONFIG_ETRAX_RESCUE_SER3
#define SERXOFF R_SERIAL3_XOFF
#define SERBAUD R_SERIAL3_BAUD
#define SERRECC R_SERIAL3_REC_CTRL
......@@ -112,6 +113,7 @@
#endif
#define NOP_DI 0xf025050f
#define RAM_INIT_MAGIC 0x56902387
.text
......@@ -221,14 +223,14 @@ do_rescue:
;; setup port PA and PB default initial directions and data
;; (so we can flash LEDs, and so that DTR and others are set)
move.b DEF_R_PORT_PA_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DIR, r0
move.b r0, [R_PORT_PA_DIR]
move.b DEF_R_PORT_PA_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r0
move.b r0, [R_PORT_PA_DATA]
move.b DEF_R_PORT_PB_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DIR, r0
move.b r0, [R_PORT_PB_DIR]
move.b DEF_R_PORT_PB_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r0
move.b r0, [R_PORT_PB_DATA]
;; setup the serial port at 115200 baud
......@@ -250,10 +252,10 @@ wait_ser:
addq 1, r1
#ifndef CONFIG_ETRAX_NO_LEDS
#ifdef CONFIG_ETRAX_PA_LEDS
move.b DEF_R_PORT_PA_DATA, r2
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r2
#endif
#ifdef CONFIG_ETRAX_PB_LEDS
move.b DEF_R_PORT_PB_DATA, r2
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r2
#endif
move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0
btstq 16, r1
......@@ -294,6 +296,7 @@ wait_ser:
;; jump into downloaded code
move.d RAM_INIT_MAGIC, r8 ; Tell next product that DRAM is initialized
jump CODE_START
flash_ok:
......@@ -304,6 +307,7 @@ flash_ok:
nop
move.d PTABLE_START, r7; otherwise use the ptable start
1:
move.d RAM_INIT_MAGIC, r8 ; Tell next product that DRAM is initialized
jump r7 ; boot!
......
;; $Id: kimagerescue.S,v 1.2 2001/02/14 16:57:25 larsv Exp $
;;
;; Rescue code to be prepended on a kimage and copied to the
;; rescue serial port.
;; This is called from the rescue code, it will copy received data to
;; 4000500 and after a timeout jump to it.
/* $Id: kimagerescue.S,v 1.4 2001/04/18 12:04:46 bjornw Exp $
*
* Rescue code to be prepended on a kimage and copied to the
* rescue serial port.
* This is called from the rescue code, it will copy received data to
* 4004000 and after a timeout jump to it.
*/
#include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h>
#define CODE_START 0x40000500
#define CODE_START 0x40004000
#define CODE_LENGTH 784
#define TIMEOUT_VALUE 1000
#ifdef CONFIG_RESCUE_SER0
#ifdef CONFIG_ETRAX_RESCUE_SER0
#define SERXOFF R_SERIAL0_XOFF
#define SERBAUD R_SERIAL0_BAUD
#define SERRECC R_SERIAL0_REC_CTRL
#define SERRDAT R_SERIAL0_REC_DATA
#define SERSTAT R_SERIAL0_STATUS
#endif
#ifdef CONFIG_RESCUE_SER1
#ifdef CONFIG_ETRAX_RESCUE_SER1
#define SERXOFF R_SERIAL1_XOFF
#define SERBAUD R_SERIAL1_BAUD
#define SERRECC R_SERIAL1_REC_CTRL
#define SERRDAT R_SERIAL1_REC_DATA
#define SERSTAT R_SERIAL1_STATUS
#endif
#ifdef CONFIG_RESCUE_SER2
#ifdef CONFIG_ETRAX_RESCUE_SER2
#define SERXOFF R_SERIAL2_XOFF
#define SERBAUD R_SERIAL2_BAUD
#define SERRECC R_SERIAL2_REC_CTRL
#define SERRDAT R_SERIAL2_REC_DATA
#define SERSTAT R_SERIAL2_STATUS
#endif
#ifdef CONFIG_RESCUE_SER3
#ifdef CONFIG_ETRAX_RESCUE_SER3
#define SERXOFF R_SERIAL3_XOFF
#define SERBAUD R_SERIAL3_BAUD
#define SERRECC R_SERIAL3_REC_CTRL
......@@ -55,14 +56,14 @@
;; setup port PA and PB default initial directions and data
;; (so we can flash LEDs, and so that DTR and others are set)
move.b DEF_R_PORT_PA_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DIR, r0
move.b r0, [R_PORT_PA_DIR]
move.b DEF_R_PORT_PA_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r0
move.b r0, [R_PORT_PA_DATA]
move.b DEF_R_PORT_PB_DIR, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DIR, r0
move.b r0, [R_PORT_PB_DIR]
move.b DEF_R_PORT_PB_DATA, r0
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r0
move.b r0, [R_PORT_PB_DATA]
;; We need to setup the bus registers before we start using the DRAM
......@@ -99,10 +100,10 @@ wait_ser:
nop
#ifndef CONFIG_ETRAX_NO_LEDS
#ifdef CONFIG_ETRAX_PA_LEDS
move.b DEF_R_PORT_PA_DATA, r2
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, r2
#endif
#ifdef CONFIG_ETRAX_PB_LEDS
move.b DEF_R_PORT_PB_DATA, r2
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r2
#endif
move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0
btstq 16, r1
......
;; $Id: testrescue.S,v 1.1 2001/01/31 15:32:09 johana Exp $
;;
;; Simple testcode to download by the rescue block.
;; Just lits some LEDs to show it was downloaded correctly.
;;
;; Copyright (C) 1999 Axis Communications AB
/* $Id: testrescue.S,v 1.2 2001/04/18 12:05:07 bjornw Exp $
*
* Simple testcode to download by the rescue block.
* Just lits some LEDs to show it was downloaded correctly.
*
* Copyright (C) 1999 Axis Communications AB
*/
#define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h>
......
......@@ -31,6 +31,7 @@
#include <unistd.h> /* contains read/write */
#include <fcntl.h>
#include <linux/a.out.h>
#include <linux/config.h>
#include <errno.h>
#define MINIX_HEADER 32
......
......@@ -24,14 +24,10 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Kernel support for JAVA binaries' CONFIG_BINFMT_JAVA
fi
bool 'Use kernel gdb debugger' CONFIG_KGDB
bool 'Use kernel gdb debugger' CONFIG_ETRAX_KGDB
bool 'Enable Etrax100 watchdog' CONFIG_ETRAX_WATCHDOG
bool 'Use serial console (on the debug port)' CONFIG_USE_SERIAL_CONSOLE
bool 'Use in-kernel ifconfig/route setup' CONFIG_KERNEL_IFCONFIG
endmenu
mainmenu_option next_comment
......@@ -46,20 +42,19 @@ choice 'Processor type' \
if [ "$CONFIG_ETRAX100LX" = "y" -o "$CONFIG_SVINTO_SIM" = "y" ]; then
define_bool CONFIG_CRIS_LOW_MAP y
define_hex ETRAX_DRAM_VIRTUAL_BASE 60000000
define_hex CONFIG_ETRAX_DRAM_VIRTUAL_BASE 60000000
else
define_hex ETRAX_DRAM_VIRTUAL_BASE c0000000
define_hex CONFIG_ETRAX_DRAM_VIRTUAL_BASE c0000000
fi
int 'DRAM size (dec, in MB)' ETRAX_DRAM_SIZE 8
int 'DRAM size (dec, in MB)' CONFIG_ETRAX_DRAM_SIZE 8
int 'Max possible flash size (dec, in MB)' CONFIG_ETRAX_FLASH_LENGTH 2
int 'Buswidth of flash in bytes' CONFIG_ETRAX_FLASH_BUSWIDTH 2
choice 'Product LED port' \
"Port-PA-LEDs CONFIG_ETRAX_PA_LEDS \
Port-PB-LEDs CONFIG_ETRAX_PB_LEDS \
Mem-0x90000000-LEDs CONFIG_ETRAX_90000000_LEDS \
Port-CSP0-LEDs CONFIG_ETRAX_CSP0_LEDS \
None CONFIG_ETRAX_NO_LEDS" Port-PA-LEDs
if [ "$CONFIG_ETRAX_NO_LEDS" != "y" ]; then
......@@ -71,38 +66,54 @@ if [ "$CONFIG_ETRAX_NO_LEDS" != "y" ]; then
int ' Third red LED bit' CONFIG_ETRAX_LED3G 2
fi
if [ "$CONFIG_ETRAX_CSP0_LEDS" = "y" ]; then
int ' Fourth red LED bit' CONFIG_ETRAX_LED4R 2
int ' Fourth green LED bit' CONFIG_ETRAX_LED4G 2
int ' Fifth red LED bit' CONFIG_ETRAX_LED5R 2
int ' Fifth green LED bit' CONFIG_ETRAX_LED5G 2
int ' Sixth red LED bit' CONFIG_ETRAX_LED6R 2
int ' Sixth green LED bit' CONFIG_ETRAX_LED6G 2
int ' Seventh red LED bit' CONFIG_ETRAX_LED7R 2
int ' Seventh green LED bit' CONFIG_ETRAX_LED7G 2
int ' Eigth yellow LED bit' CONFIG_ETRAX_LED8Y 2
int ' Ninth yellow LED bit' CONFIG_ETRAX_LED9Y 2
int ' Tenth yellow LED bit' CONFIG_ETRAX_LED10Y 2
int ' Eleventh yellow LED bit' CONFIG_ETRAX_LED11Y 2
int ' Twelfth red LED bit' CONFIG_ETRAX_LED12R 2
fi
choice 'Product debug-port' \
"Serial-0 CONFIG_DEBUG_PORT0 \
Serial-1 CONFIG_DEBUG_PORT1 \
Serial-2 CONFIG_DEBUG_PORT2 \
Serial-3 CONFIG_DEBUG_PORT3 \
disabled CONFIG_DEBUG_PORT_NULL" Serial-0
"Serial-0 CONFIG_ETRAX_DEBUG_PORT0 \
Serial-1 CONFIG_ETRAX_DEBUG_PORT1 \
Serial-2 CONFIG_ETRAX_DEBUG_PORT2 \
Serial-3 CONFIG_ETRAX_DEBUG_PORT3 \
disabled CONFIG_ETRAX_DEBUG_PORT_NULL" Serial-0
choice 'Product rescue-port' \
"Serial-0 CONFIG_RESCUE_SER0 \
Serial-1 CONFIG_RESCUE_SER1 \
Serial-2 CONFIG_RESCUE_SER2 \
Serial-3 CONFIG_RESCUE_SER3" Serial-0
hex 'R_WAITSTATES' DEF_R_WAITSTATES 95a6
hex 'R_BUS_CONFIG' DEF_R_BUS_CONFIG 104
bool 'SDRAM support' CONFIG_SDRAM n
if [ "$CONFIG_SDRAM" = "n" ]; then
hex 'R_DRAM_CONFIG' DEF_R_DRAM_CONFIG 1a200040
hex 'R_DRAM_TIMING' DEF_R_DRAM_TIMING 5611
"Serial-0 CONFIG_ETRAX_RESCUE_SER0 \
Serial-1 CONFIG_ETRAX_RESCUE_SER1 \
Serial-2 CONFIG_ETRAX_RESCUE_SER2 \
Serial-3 CONFIG_ETRAX_RESCUE_SER3" Serial-0
hex 'R_WAITSTATES' CONFIG_ETRAX_DEF_R_WAITSTATES 95a6
hex 'R_BUS_CONFIG' CONFIG_ETRAX_DEF_R_BUS_CONFIG 104
bool 'SDRAM support' CONFIG_ETRAX_SDRAM n
if [ "$CONFIG_ETRAX_SDRAM" = "n" ]; then
hex 'R_DRAM_CONFIG' CONFIG_ETRAX_DEF_R_DRAM_CONFIG 1a200040
hex 'R_DRAM_TIMING' CONFIG_ETRAX_DEF_R_DRAM_TIMING 5611
fi
if [ "$CONFIG_SDRAM" = "y" ]; then
hex 'R_SDRAM_CONFIG' DEF_R_SDRAM_CONFIG d2fa7878
hex 'R_SDRAM_TIMING' DEF_R_SDRAM_TIMING 80004801
if [ "$CONFIG_ETRAX_SDRAM" = "y" ]; then
hex 'R_SDRAM_CONFIG' CONFIG_ETRAX_DEF_R_SDRAM_CONFIG d2fa7878
hex 'R_SDRAM_TIMING' CONFIG_ETRAX_DEF_R_SDRAM_TIMING 80004801
fi
hex 'R_PORT_PA_DIR' DEF_R_PORT_PA_DIR 1c
hex 'R_PORT_PA_DATA' DEF_R_PORT_PA_DATA 00
hex 'R_PORT_PB_CONFIG' DEF_R_PORT_PB_CONFIG 00
hex 'R_PORT_PB_DIR' DEF_R_PORT_PB_DIR 00
hex 'R_PORT_PB_DATA' DEF_R_PORT_PB_DATA ff
hex 'R_PORT_PA_DIR' CONFIG_ETRAX_DEF_R_PORT_PA_DIR 1c
hex 'R_PORT_PA_DATA' CONFIG_ETRAX_DEF_R_PORT_PA_DATA 00
hex 'R_PORT_PB_CONFIG' CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG 00
hex 'R_PORT_PB_DIR' CONFIG_ETRAX_DEF_R_PORT_PB_DIR 00
hex 'R_PORT_PB_DATA' CONFIG_ETRAX_DEF_R_PORT_PB_DATA ff
endmenu
......
/* ld script to make the Linux/CRIS kernel
* Authors: Bjorn Wesen (bjornw@axis.com)
*
* It is VERY DANGEROUS to fiddle around with the symbols in this
* script. It is for example quite vital that all generated sections
* that are used are actually named here, otherwise the linker will
* put them at the end, where the init stuff is which is FREED after
* the kernel has booted.
*/
SECTIONS
{
. = @ETRAX_DRAM_VIRTUAL_BASE@;
. = @CONFIG_ETRAX_DRAM_VIRTUAL_BASE@;
_dram_start = .;
_ibr_start = .;
. = . + 0x4000; /* see head.S and pages reserved at the start */
......@@ -75,5 +81,5 @@ SECTIONS
*(.exitcall.exit)
}
_dram_end = _dram_start + @ETRAX_DRAM_SIZE_M@*1024*1024;
_dram_end = _dram_start + @CONFIG_ETRAX_DRAM_SIZE_M@*1024*1024;
}
......@@ -15,10 +15,8 @@ CONFIG_NET=y
CONFIG_SYSVIPC=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_JAVA is not set
# CONFIG_KGDB is not set
# CONFIG_ETRAX_KGDB is not set
# CONFIG_ETRAX_WATCHDOG is not set
CONFIG_USE_SERIAL_CONSOLE=y
# CONFIG_KERNEL_IFCONFIG is not set
#
# Hardware setup
......@@ -27,8 +25,8 @@ CONFIG_ETRAX100LX=y
# CONFIG_ETRAX100LX_V2 is not set
# CONFIG_SVINTO_SIM is not set
CONFIG_CRIS_LOW_MAP=y
ETRAX_DRAM_VIRTUAL_BASE=60000000
ETRAX_DRAM_SIZE=8
CONFIG_ETRAX_DRAM_VIRTUAL_BASE=60000000
CONFIG_ETRAX_DRAM_SIZE=8
CONFIG_ETRAX_FLASH_LENGTH=2
CONFIG_ETRAX_FLASH_BUSWIDTH=2
CONFIG_ETRAX_PA_LEDS=y
......@@ -39,24 +37,24 @@ CONFIG_ETRAX_LED1G=2
CONFIG_ETRAX_LED1R=2
CONFIG_ETRAX_LED2G=2
CONFIG_ETRAX_LED2R=2
CONFIG_DEBUG_PORT0=y
# CONFIG_DEBUG_PORT1 is not set
# CONFIG_DEBUG_PORT2 is not set
# CONFIG_DEBUG_PORT3 is not set
CONFIG_RESCUE_SER0=y
# CONFIG_RESCUE_SER1 is not set
# CONFIG_RESCUE_SER2 is not set
# CONFIG_RESCUE_SER3 is not set
DEF_R_WAITSTATES=95a6
DEF_R_BUS_CONFIG=104
# CONFIG_SDRAM is not set
DEF_R_DRAM_CONFIG=1a200040
DEF_R_DRAM_TIMING=5611
DEF_R_PORT_PA_DIR=1d
DEF_R_PORT_PA_DATA=f0
DEF_R_PORT_PB_CONFIG=00
DEF_R_PORT_PB_DIR=1e
DEF_R_PORT_PB_DATA=f3
CONFIG_ETRAX_DEBUG_PORT0=y
# CONFIG_ETRAX_DEBUG_PORT1 is not set
# CONFIG_ETRAX_DEBUG_PORT2 is not set
# CONFIG_ETRAX_DEBUG_PORT3 is not set
CONFIG_ETRAX_RESCUE_SER0=y
# CONFIG_ETRAX_RESCUE_SER1 is not set
# CONFIG_ETRAX_RESCUE_SER2 is not set
# CONFIG_ETRAX_RESCUE_SER3 is not set
CONFIG_ETRAX_DEF_R_WAITSTATES=95a6
CONFIG_ETRAX_DEF_R_BUS_CONFIG=104
# CONFIG_ETRAX_SDRAM is not set
CONFIG_ETRAX_DEF_R_DRAM_CONFIG=1a200040
CONFIG_ETRAX_DEF_R_DRAM_TIMING=5611
CONFIG_ETRAX_DEF_R_PORT_PA_DIR=1d
CONFIG_ETRAX_DEF_R_PORT_PA_DATA=f0
CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG=00
CONFIG_ETRAX_DEF_R_PORT_PB_DIR=1e
CONFIG_ETRAX_DEF_R_PORT_PB_DATA=f3
#
# Drivers for Etrax built-in interfaces
......@@ -69,7 +67,7 @@ CONFIG_ETRAX_SERIAL_PORT1=y
# CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_ON_PB is not set
# CONFIG_ETRAX_SERIAL_PORT2 is not set
# CONFIG_ETRAX_SERIAL_PORT3 is not set
# CONFIG_RS485 is not set
# CONFIG_ETRAX_RS485 is not set
# CONFIG_ETRAX_SYNCHRONOUS_SERIAL is not set
# CONFIG_ETRAX_IDE is not set
CONFIG_ETRAX_AXISFLASHMAP=y
......@@ -84,15 +82,10 @@ CONFIG_ETRAX_I2C=y
CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C=y
CONFIG_ETRAX_GPIO=y
CONFIG_ETRAX_PA_BUTTON_BITMASK=02
CONFIG_PA_CHANGEABLE_DIR=00
CONFIG_PA_CHANGEABLE_BITS=FF
CONFIG_PB_CHANGEABLE_DIR=00
CONFIG_PB_CHANGEABLE_BITS=FF
# CONFIG_JULIETTE is not set
# CONFIG_JULIETTE_VIDEO is not set
# CONFIG_JULIETTE_CCD is not set
# CONFIG_JULIETTE_SS1M is not set
# CONFIG_JULIETTE_MEGCCD is not set
CONFIG_ETRAX_PA_CHANGEABLE_DIR=00
CONFIG_ETRAX_PA_CHANGEABLE_BITS=FF
CONFIG_ETRAX_PB_CHANGEABLE_DIR=00
CONFIG_ETRAX_PB_CHANGEABLE_BITS=FF
# CONFIG_ETRAX_USB_HOST is not set
#
......
mainmenu_option next_comment
comment 'Drivers for Etrax built-in interfaces'
comment 'Drivers for ETRAX 100LX built-in interfaces'
bool 'Ethernet support' CONFIG_ETRAX_ETHERNET
if [ "$CONFIG_ETRAX_ETHERNET" = "y" ]; then
......@@ -46,13 +46,13 @@ if [ "$CONFIG_ETRAX_SERIAL" = "y" ]; then
fi
fi
bool ' Serial port 3 enabled' CONFIG_ETRAX_SERIAL_PORT3
bool ' RS-485 support' CONFIG_RS485
if [ "$CONFIG_RS485" = "y" ]; then
bool ' RS-485 mode on PA' CONFIG_RS485_ON_PA
if [ "$CONFIG_RS485_ON_PA" = "y" ]; then
int ' RS-485 mode on PA bit' CONFIG_RS485_ON_PA_BIT 3
bool ' RS-485 support' CONFIG_ETRAX_RS485
if [ "$CONFIG_ETRAX_RS485" = "y" ]; then
bool ' RS-485 mode on PA' CONFIG_ETRAX_RS485_ON_PA
if [ "$CONFIG_ETRAX_RS485_ON_PA" = "y" ]; then
int ' RS-485 mode on PA bit' CONFIG_ETRAX_RS485_ON_PA_BIT 3
fi
bool ' Disable serial receiver' CONFIG_RS485_DISABLE_RECEIVER
bool ' Disable serial receiver' CONFIG_ETRAX_RS485_DISABLE_RECEIVER
fi
fi
......@@ -60,14 +60,29 @@ bool 'Synchronous serial port support' CONFIG_ETRAX_SYNCHRONOUS_SERIAL
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL" = "y" ]; then
bool ' Synchronous serial port 0 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0" = "y" ]; then
bool ' Synchronous serial port 0 uses DMA' CONFIG_ETRAX_SYNCHRONOUS_SERIAL0_DMA y
bool ' Synchronous serial port 0 uses DMA' CONFIG_ETRAX_SYNCHRONOUS_SERIAL0_DMA
fi
bool ' Synchronous serial port 1 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1" = "y" ]; then
bool ' Synchronous serial port 1 uses DMA' CONFIG_ETRAX_SYNCHRONOUS_SERIAL1_DMA y
bool ' Synchronous serial port 1 uses DMA' CONFIG_ETRAX_SYNCHRONOUS_SERIAL1_DMA
fi
fi
bool 'Parallel port support' CONFIG_ETRAX_PARPORT
if [ "$CONFIG_ETRAX_PARPORT" = "y" ]; then
bool ' Parallel port 0 enabled' CONFIG_ETRAX_PARALLEL_PORT0
bool ' Parallel port 1 enabled' CONFIG_ETRAX_PARALLEL_PORT1
# here we define the CONFIG_'s necessary to enable parallel port support
define_tristate CONFIG_PARPORT y
define_bool CONFIG_PARPORT_1284 y
define_tristate CONFIG_PRINTER y
else
define_tristate CONFIG_PARPORT n
define_bool CONFIG_PARPORT_1284 n
define_tristate CONFIG_PRINTER n
fi
bool 'ATA/IDE support' CONFIG_ETRAX_IDE
if [ "$CONFIG_ETRAX_IDE" = "y" ]; then
......@@ -89,7 +104,8 @@ if [ "$CONFIG_ETRAX_IDE" = "y" ]; then
choice 'IDE reset pin' \
"Port_PB_Bit_7 CONFIG_ETRAX_IDE_PB7_RESET\
Port_G_Bit_27 CONFIG_ETRAX_IDE_G27_RESET\
Port_CSE1_Bit_16 CONFIG_ETRAX_IDE_CSE1_16_RESET" Port_PB_Bit_7
Port_CSE1_Bit_16 CONFIG_ETRAX_IDE_CSE1_16_RESET\
Port_CSP0_Bit_08 CONFIG_ETRAX_IDE_CSP0_8_RESET" Port_PB_Bit_7
else
define_bool CONFIG_IDE n
fi
......@@ -97,6 +113,7 @@ fi
bool 'Axis flash-map support' CONFIG_ETRAX_AXISFLASHMAP
if [ "$CONFIG_ETRAX_AXISFLASHMAP" = "y" ]; then
int ' Byte-offset of partition table sector' CONFIG_ETRAX_PTABLE_SECTOR 65536
# here we define the CONFIG_'s necessary to enable MTD support
# for the flash
define_bool CONFIG_MTD y
......@@ -118,16 +135,25 @@ if [ "$CONFIG_ETRAX_I2C" = "y" ]; then
bool 'I2C uses PB not PB-I2C' CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C
fi
bool 'I2C EEPROM (non-volatile RAM) support' CONFIG_ETRAX_I2C_EEPROM
if [ "$CONFIG_ETRAX_I2C_EEPROM" = "y" ]; then
choice ' EEPROM size' \
"Probed CONFIG_ETRAX_I2C_EEPROM_PROBE \
2kB CONFIG_ETRAX_I2C_EEPROM_2KB \
8kB CONFIG_ETRAX_I2C_EEPROM_8KB \
16kB CONFIG_ETRAX_I2C_EEPROM_16KB" Probed
fi
bool 'GPIO support' CONFIG_ETRAX_GPIO
if [ "$CONFIG_ETRAX_GPIO" = "y" ]; then
hex ' PA-buttons bitmask' CONFIG_ETRAX_PA_BUTTON_BITMASK 02
hex ' PA user changeable dir mask' CONFIG_PA_CHANGEABLE_DIR 00
hex ' PA user changeable bits mask' CONFIG_PA_CHANGEABLE_BITS FF
hex ' PB user changeable dir mask' CONFIG_PB_CHANGEABLE_DIR 00
hex ' PB user changeable bits mask' CONFIG_PB_CHANGEABLE_BITS FF
hex ' PA user changeable dir mask' CONFIG_ETRAX_PA_CHANGEABLE_DIR 00
hex ' PA user changeable bits mask' CONFIG_ETRAX_PA_CHANGEABLE_BITS FF
hex ' PB user changeable dir mask' CONFIG_ETRAX_PB_CHANGEABLE_DIR 00
hex ' PB user changeable bits mask' CONFIG_ETRAX_PB_CHANGEABLE_BITS FF
fi
bool 'Juliette support' CONFIG_JULIETTE n
bool 'ARTPEC-1 support' CONFIG_JULIETTE
if [ "$CONFIG_JULIETTE" = "y" ]; then
source arch/cris/drivers/juliette/Config.in
......@@ -136,8 +162,18 @@ fi
bool 'USB host' CONFIG_ETRAX_USB_HOST
if [ "$CONFIG_ETRAX_USB_HOST" = "y" ]; then
define_bool CONFIG_USB y
bool ' USB port 1 enabled' CONFIG_ETRAX_USB_HOST_PORT1 n
bool ' USB port 2 enabled' CONFIG_ETRAX_USB_HOST_PORT2 n
bool ' USB port 1 enabled' CONFIG_ETRAX_USB_HOST_PORT1
bool ' USB port 2 enabled' CONFIG_ETRAX_USB_HOST_PORT2
else
define_bool CONFIG_USB n
fi
bool 'DS1302 Real Time Clock support' CONFIG_ETRAX_DS1302
if [ "$CONFIG_ETRAX_DS1302" = "y" ]; then
bool ' DS1302 RST on Generic Port' CONFIG_ETRAX_DS1302_RST_ON_GENERIC_PORT
int ' DS1302 RST bit number' CONFIG_ETRAX_DS1302_RSTBIT 2
int ' DS1302 SCL bit number' CONFIG_ETRAX_DS1302_SCLBIT 1
int ' DS1302 SDA bit number' CONFIG_ETRAX_DS1302_SDABIT 0
fi
endmenu
......@@ -12,10 +12,13 @@ obj-$(CONFIG_ETRAX_SERIAL) += serial.o
obj-$(CONFIG_ETRAX_IDE) += ide.o
obj-$(CONFIG_ETRAX_AXISFLASHMAP) += axisflashmap.o
obj-$(CONFIG_ETRAX_I2C) += i2c.o
obj-$(CONFIG_ETRAX_I2C_EEPROM) += eeprom.o
obj-$(CONFIG_ETRAX_GPIO) += gpio.o
obj-$(CONFIG_ETRAX_USB_HOST) += usb-host.o
obj-$(CONFIG_ETRAX_SYNCHRONOUS_SERIAL) += sync_serial.o
obj-$(CONFIG_JULIETTE) += juliette/juliette.o
subdir-$(CONFIG_JULIETTE) += juliette
obj-$(CONFIG_ETRAX_PARPORT) += parport.o
obj-$(CONFIG_ETRAX_DS1302) += ds1302.o
include $(TOPDIR)/Rules.make
......@@ -11,6 +11,15 @@
* partition split defined below.
*
* $Log: axisflashmap.c,v $
* Revision 1.7 2001/04/05 13:41:46 markusl
* Updated according to review remarks
*
* Revision 1.6 2001/03/07 09:21:21 bjornw
* No need to waste .data
*
* Revision 1.5 2001/03/06 16:27:01 jonashg
* Probe the entire flash area for flash devices.
*
* Revision 1.4 2001/02/23 12:47:15 bjornw
* Uncached flash in LOW_MAP moved from 0xe to 0x8
*
......@@ -50,19 +59,13 @@
#endif
/*
* WINDOW_SIZE is the total size where the flash chips are mapped,
* my guess is that this can be the total memory area even if there
* are many flash chips inside the area or if they are not all mounted.
* So possibly we can get rid of the CONFIG_ here and just write something
* like 32 MB always.
* WINDOW_SIZE is the total size where the flash chips may be mapped.
* MTD probes should find all devices there and it does not matter
* if there are unmapped gaps or aliases (mirrors of flash devices).
* The MTD probes will ignore them.
*/
#define WINDOW_SIZE (CONFIG_ETRAX_FLASH_LENGTH * 1024 * 1024)
/* Byte-offset where the partition-table is placed in the first chip
*/
#define PTABLE_SECTOR 65536
#define WINDOW_SIZE (128 * 1024 * 1024)
/*
* Map driver
......@@ -70,8 +73,6 @@
* Ok this is the scoop - we need to access the flash both with and without
* the cache - without when doing all the fancy flash interfacing, and with
* when we do actual copying because otherwise it will be slow like molasses.
* I hope this works the way it's intended, so that there won't be any cases
* of non-synchronicity because of the different access modes below...
*/
static __u8 flash_read8(struct map_info *map, unsigned long ofs)
......@@ -110,12 +111,6 @@ static void flash_write32(struct map_info *map, __u32 d, unsigned long adr)
*(__u32 *)(FLASH_UNCACHED_ADDR + adr) = d;
}
static void flash_copy_to(struct map_info *map, unsigned long to,
const void *from, ssize_t len)
{
memcpy((void *)(FLASH_CACHED_ADDR + to), from, len);
}
static struct map_info axis_map = {
name: "Axis flash",
size: WINDOW_SIZE,
......@@ -127,7 +122,6 @@ static struct map_info axis_map = {
write8: flash_write8,
write16: flash_write16,
write32: flash_write32,
copy_to: flash_copy_to
};
/* If no partition-table was found, we use this default-set.
......@@ -139,18 +133,18 @@ static struct map_info axis_map = {
static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = {
{
name: "boot firmware",
size: PTABLE_SECTOR,
size: CONFIG_ETRAX_PTABLE_SECTOR,
offset: 0
},
{
name: "kernel",
size: 0x1a0000,
offset: PTABLE_SECTOR
offset: CONFIG_ETRAX_PTABLE_SECTOR
},
{
name: "filesystem",
size: 0x50000,
offset: (0x1a0000 + PTABLE_SECTOR)
offset: (0x1a0000 + CONFIG_ETRAX_PTABLE_SECTOR)
}
};
......@@ -214,11 +208,11 @@ init_axis_flash(void)
printk(KERN_NOTICE "Axis flash mapping: %x at %x\n",
WINDOW_SIZE, FLASH_CACHED_ADDR);
mymtd = do_cfi_probe(&axis_map);
mymtd = (struct mtd_info *)do_cfi_probe(&axis_map);
#ifdef CONFIG_MTD_AMDSTD
if (!mymtd) {
mymtd = do_amd_flash_probe(&axis_map);
mymtd = (struct mtd_info *)do_amd_flash_probe(&axis_map);
}
#endif
......@@ -236,17 +230,14 @@ init_axis_flash(void)
*/
ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR +
PTABLE_SECTOR + PARTITION_TABLE_OFFSET);
CONFIG_ETRAX_PTABLE_SECTOR + PARTITION_TABLE_OFFSET);
pidx++; /* first partition is always set to the default */
if ((ptable_head->magic == PARTITION_TABLE_MAGIC)
&& (ptable_head->size
< (MAX_PARTITIONS
* sizeof(struct partitiontable_entry) + 4))
&& (*(unsigned long*)
((void*)ptable_head
+ sizeof(*ptable_head)
+ ptable_head->size - 4)
&& (ptable_head->size <
(MAX_PARTITIONS * sizeof(struct partitiontable_entry) + 4))
&& (*(unsigned long*)((void*)ptable_head + sizeof(*ptable_head) +
ptable_head->size - 4)
== PARTITIONTABLE_END_MARKER)) {
/* Looks like a start, sane length and end of a
* partition table, lets check csum etc.
......@@ -256,7 +247,7 @@ init_axis_flash(void)
(struct partitiontable_entry *)
((unsigned long)ptable_head + sizeof(*ptable_head) +
ptable_head->size);
unsigned long offset = PTABLE_SECTOR;
unsigned long offset = CONFIG_ETRAX_PTABLE_SECTOR;
unsigned char *p;
unsigned long csum = 0;
......@@ -293,16 +284,7 @@ init_axis_flash(void)
&& ptable->offset != 0xffffffff
&& ptable < max_addr
&& pidx < MAX_PARTITIONS) {
#if 0
/* wait with multi-chip support until we know
* how mtd detects multiple chips
*/
if ((offset + ptable->offset) >= chips[0].size) {
partitions[pidx].start
= offset + chips[1].start
+ ptable->offset - chips[0].size;
}
#endif
axis_partitions[pidx].offset = offset + ptable->offset;
axis_partitions[pidx].size = ptable->size;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -25,26 +25,26 @@
struct e100_serial {
int baud;
volatile unsigned char * port; /* R_SERIALx_CTRL */
unsigned long irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */
volatile u8 *port; /* R_SERIALx_CTRL */
u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */
volatile char *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR, output */
volatile unsigned long *ofirstadr; /* adr to R_DMA_CHx_FIRST, output */
volatile char *ocmdadr; /* adr to R_DMA_CHx_CMD, output */
const volatile unsigned short *ostatusadr; /* adr to R_DMA_CHx_STATUS, output */
volatile unsigned long *ohwswadr; /* adr to R_DMA_CHx_HWSW, output */
volatile u8 *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR, output */
volatile u32 *ofirstadr; /* adr to R_DMA_CHx_FIRST, output */
volatile u8 *ocmdadr; /* adr to R_DMA_CHx_CMD, output */
const volatile u8 *ostatusadr; /* adr to R_DMA_CHx_STATUS, output */
volatile u32 *ohwswadr; /* adr to R_DMA_CHx_HWSW, output */
volatile char *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR, input */
volatile unsigned long *ifirstadr; /* adr to R_DMA_CHx_FIRST, input */
volatile char *icmdadr; /* adr to R_DMA_CHx_CMD, input */
const volatile unsigned short *istatusadr; /* adr to R_DMA_CHx_STATUS, input */
volatile unsigned long *ihwswadr; /* adr to R_DMA_CHx_HWSW, input */
volatile u8 *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR, input */
volatile u32 *ifirstadr; /* adr to R_DMA_CHx_FIRST, input */
volatile u8 *icmdadr; /* adr to R_DMA_CHx_CMD, input */
const volatile u8 *istatusadr; /* adr to R_DMA_CHx_STATUS, input */
volatile u32 *ihwswadr; /* adr to R_DMA_CHx_HWSW, input */
int flags; /* defined in tty.h */
unsigned char rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */
unsigned char tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */
unsigned char iseteop; /* bit number for R_SET_EOP for the input dma */
u8 rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */
u8 tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */
u8 iseteop; /* bit number for R_SET_EOP for the input dma */
/* end of fields defined in rs_table[] in .c-file */
unsigned char fifo_didmagic; /* a fifo eop has been forced */
......
This diff is collapsed.
......@@ -623,7 +623,7 @@ static int etrax_usb_submit_intr_urb(urb_t *urb)
traffic_ep->nep = tmp_ep->nep;
tmp_ep->nep = virt_to_phys(traffic_ep);
dbg_intr("One ep successfully inserted");
dbg_intr("One ep sucessfully inserted");
}
i++;
}
......@@ -1804,7 +1804,7 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
r_usb_ept_data);
if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, no_error)) {
/* no_error means that this urb was successfully sent or that we have
/* no_error means that this urb was sucessfully sent or that we have
some undefinde error*/
if (IO_EXTRACT(R_USB_EPT_DATA, error_count_out, r_usb_ept_data) == 3 ||
......@@ -1888,9 +1888,9 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
/*
This means that the endpoint has no error, is disabled
and had inserted traffic,
i.e. transfer successfully completed
i.e. transfer sucessfully completed
*/
dbg_ctrl("Last SB for CTRL %d sent successfully", epid);
dbg_ctrl("Last SB for CTRL %d sent sucessfully", epid);
handle_control_transfer_attn(epid, 0);
}
}
......@@ -1905,9 +1905,9 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
/*
This means that the endpoint has no error, is disabled
and had inserted traffic,
i.e. transfer successfully completed
i.e. transfer sucessfully completed
*/
dbg_bulk("Last SB for BULK %d sent successfully", epid);
dbg_bulk("Last SB for BULK %d sent sucessfully", epid);
handle_bulk_transfer_attn(epid, 0);
}
}
......
# $Id: Makefile,v 1.3 2001/01/10 21:11:07 bjornw Exp $
# $Id: Makefile,v 1.4 2001/04/17 13:58:39 orjanf Exp $
#
# Makefile for the linux kernel.
#
......@@ -18,7 +18,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \
ptrace.o setup.o time.o sys_cris.o shadows.o \
debugport.o semaphore.o
obj-$(CONFIG_KGDB) += kgdb.o
obj-$(CONFIG_ETRAX_KGDB) += kgdb.o
clean:
......
......@@ -12,6 +12,12 @@
* init_etrax_debug()
*
* $Log: debugport.c,v $
* Revision 1.6 2001/04/17 13:58:39 orjanf
* * Renamed CONFIG_KGDB to CONFIG_ETRAX_KGDB.
*
* Revision 1.5 2001/03/26 14:22:05 bjornw
* Namechange of some config options
*
* Revision 1.4 2000/10/06 12:37:26 bjornw
* Use physical addresses when talking to DMA
*
......@@ -29,7 +35,7 @@
/* Which serial-port is our debug port ? */
#if defined(CONFIG_DEBUG_PORT0) || defined(CONFIG_DEBUG_PORT_NULL)
#if defined(CONFIG_ETRAX_DEBUG_PORT0) || defined(CONFIG_ETRAX_DEBUG_PORT_NULL)
#define DEBUG_PORT_IDX 0
#define DEBUG_OCMD R_DMA_CH6_CMD
#define DEBUG_FIRST R_DMA_CH6_FIRST
......@@ -43,7 +49,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma6_descr, clr)
#endif
#ifdef CONFIG_DEBUG_PORT1
#ifdef CONFIG_ETRAX_DEBUG_PORT1
#define DEBUG_PORT_IDX 1
#define DEBUG_OCMD R_DMA_CH8_CMD
#define DEBUG_FIRST R_DMA_CH8_FIRST
......@@ -57,7 +63,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma8_descr, clr)
#endif
#ifdef CONFIG_DEBUG_PORT2
#ifdef CONFIG_ETRAX_DEBUG_PORT2
#define DEBUG_PORT_IDX 2
#define DEBUG_OCMD R_DMA_CH2_CMD
#define DEBUG_FIRST R_DMA_CH2_FIRST
......@@ -71,7 +77,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma2_descr, clr)
#endif
#ifdef CONFIG_DEBUG_PORT3
#ifdef CONFIG_ETRAX_DEBUG_PORT3
#define DEBUG_PORT_IDX 3
#define DEBUG_OCMD R_DMA_CH4_CMD
#define DEBUG_FIRST R_DMA_CH4_FIRST
......@@ -97,7 +103,7 @@ console_write(struct console *co, const char *buf, unsigned int len)
unsigned long flags;
int in_progress;
#ifdef CONFIG_DEBUG_PORT_NULL
#ifdef CONFIG_ETRAX_DEBUG_PORT_NULL
/* no debug printout at all */
return;
#endif
......@@ -111,7 +117,7 @@ console_write(struct console *co, const char *buf, unsigned int len)
save_flags(flags);
cli();
#ifdef CONFIG_KGDB
#ifdef CONFIG_ETRAX_KGDB
/* kgdb needs to output debug info using the gdb protocol */
putDebugString(buf, len);
restore_flags(flags);
......
This diff is collapsed.
This diff is collapsed.
/* $Id: irq.c,v 1.11 2001/02/27 13:52:52 bjornw Exp $
/* $Id: irq.c,v 1.14 2001/04/17 13:58:39 orjanf Exp $
*
* linux/arch/cris/kernel/irq.c
*
......@@ -160,7 +160,7 @@ BUILD_IRQ(22, 0x400000)
BUILD_IRQ(23, 0x800000)
BUILD_IRQ(24, 0x1000000)
BUILD_IRQ(25, 0x2000000)
/* IRQ 26-30 are resereved */
/* IRQ 26-30 are reserved */
BUILD_IRQ(31, 0x80000000)
/*
......@@ -261,11 +261,11 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
irq_enter(cpu);
kstat.irqs[cpu][irq]++;
action = *(irq + irq_action);
action = irq_action[irq];
if (action) {
if (!(action->flags & SA_INTERRUPT))
__sti();
action = *(irq + irq_action);
action = irq_action[irq];
do_random = 0;
do {
do_random |= action->flags;
......@@ -396,7 +396,7 @@ void free_irq(unsigned int irq, void *dev_id)
save_flags(flags);
cli();
*p = action->next;
if (!irq[irq_action]) {
if (!irq_action[irq]) {
mask_irq(irq);
set_int_vector(irq, bad_interrupt[irq], 0);
}
......@@ -419,8 +419,8 @@ void weird_irq(void)
*/
void system_call(void); /* from entry.S */
void gdb_handle_breakpoint(void); /* from traps.c */
void do_sigtrap(void); /* also from traps.c */
void do_sigtrap(void); /* from entry.S */
void gdb_handle_breakpoint(void); /* from entry.S */
void init_IRQ(void)
{
......@@ -475,10 +475,10 @@ void init_IRQ(void)
/* setup a breakpoint handler for debugging used for both user and
kernel mode debugging (which is why it is not inside an ifdef
CONFIG_KGDB) */
CONFIG_ETRAX_KGDB) */
set_break_vector(8, gdb_handle_breakpoint);
#ifdef CONFIG_KGDB
#ifdef CONFIG_ETRAX_KGDB
/* setup kgdb if its enabled, and break into the debugger */
kgdb_init();
breakpoint();
......
......@@ -18,6 +18,9 @@
*! Jul 21 1999 Bjorn Wesen eLinux port
*!
*! $Log: kgdb.c,v $
*! Revision 1.5 2001/04/17 13:58:39 orjanf
*! * Renamed CONFIG_KGDB to CONFIG_ETRAX_KGDB.
*!
*! Revision 1.4 2001/02/23 13:45:19 bjornw
*! config.h check
*!
......@@ -49,7 +52,7 @@
*!
*!---------------------------------------------------------------------------
*!
*! $Id: kgdb.c,v 1.4 2001/02/23 13:45:19 bjornw Exp $
*! $Id: kgdb.c,v 1.5 2001/04/17 13:58:39 orjanf Exp $
*!
*! (C) Copyright 1999, Axis Communications AB, LUND, SWEDEN
*!
......@@ -60,8 +63,8 @@
* kgdb usage notes:
* -----------------
*
* If you select CONFIG_KGDB in the configuration, the kernel will be built
* with different gcc flags: "-g" is added to get debug infos, and
* If you select CONFIG_ETRAX_KGDB in the configuration, the kernel will be
* built with different gcc flags: "-g" is added to get debug infos, and
* "-fomit-frame-pointer" is omitted to make debugging easier. Since the
* resulting kernel will be quite big (approx. > 7 MB), it will be stripped
* before compresion. Such a kernel will behave just as usually, except if
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $Id: sys_cris.c,v 1.4 2001/01/31 14:55:58 perf Exp $
/* $Id: sys_cris.c,v 1.7 2001/04/17 11:52:15 orjanf Exp $
*
* linux/arch/cris/kernel/sys_etrax.c
* linux/arch/cris/kernel/sys_cris.c
*
* This file contains various random system calls that
* have a non-standard calling sequence on some platforms.
......@@ -177,20 +177,13 @@ asmlinkage int sys_ipc (uint call, int first, int second,
case MSGCTL:
return sys_msgctl (first, second, (struct msqid_ds *) ptr);
case SHMAT:
switch (version) {
default: {
case SHMAT: {
ulong raddr;
ret = sys_shmat (first, (char *) ptr, second, &raddr);
if (ret)
return ret;
return put_user (raddr, (ulong *) third);
}
case 1: /* iBCS2 emulator entry point */
if (!segment_eq(get_fs(), get_ds()))
return -EINVAL;
return sys_shmat (first, (char *) ptr, second, (ulong *) third);
}
case SHMDT:
return sys_shmdt ((char *)ptr);
case SHMGET:
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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