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 @@ ...@@ -171,7 +171,7 @@
with 'isa_' and are <function>isa_readb</function>, with 'isa_' and are <function>isa_readb</function>,
<function>isa_writeb</function>, <function>isa_readw</function>, <function>isa_writeb</function>, <function>isa_readw</function>,
<function>isa_writew</function>, <function>isa_readl</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> and <function>isa_memcpy_toio</function>
</para> </para>
<para> <para>
......
Linux 2.4 on the CRIS architecture 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 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 network CPU. For more information about CRIS and ETRAX please see further
below. 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 ? What is CRIS ?
-------------- --------------
...@@ -97,7 +103,7 @@ block: queued sectors max/low 9109kB/3036kB, 64 slots per queue ...@@ -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 ETRAX 100LX 10/100MBit ethernet v2.0 (c) 2000 Axis Communications AB
eth0 initialized eth0 initialized
eth0: changed MAC to 00:40:8C:CD:00:00 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 ttyS0 at 0xb0000060 is a builtin UART with DMA
ttyS1 at 0xb0000068 is a builtin UART with DMA ttyS1 at 0xb0000068 is a builtin UART with DMA
ttyS2 at 0xb0000070 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 ...@@ -127,7 +133,7 @@ Default gateway is 10.13.9.1
Hostname is bbox1 Hostname is bbox1
Telnetd starting, using port 23. Telnetd starting, using port 23.
using /bin/sash as shell. 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. ...@@ -765,7 +765,7 @@ Your cooperation is appreciated.
36 char Netlink support 36 char Netlink support
0 = /dev/route Routing, device updates, kernel to user 0 = /dev/route Routing, device updates, kernel to user
1 = /dev/skip enSKIP security cache control 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 16 = /dev/tap0 First Ethertap device
... ...
31 = /dev/tap15 16th Ethertap device 31 = /dev/tap15 16th Ethertap device
...@@ -2436,7 +2436,7 @@ Your cooperation is appreciated. ...@@ -2436,7 +2436,7 @@ Your cooperation is appreciated.
224 char A2232 serial card 224 char A2232 serial card
0 = /dev/ttyY0 First A2232 port 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) 225 char A2232 serial card (alternate devices)
......
...@@ -238,8 +238,8 @@ using this version of the device driver. ...@@ -238,8 +238,8 @@ using this version of the device driver.
open(const char * filename, int flags) open(const char * filename, int flags)
-------------------------------------- --------------------------------------
The filename should be an 'sg' device such as The filename should be an 'sg' device such as
/dev/sg[a-z]
/dev/sg[0,1,2,...] /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 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 .] 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 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> From: Shaw Carruthers <shaw@shawc.demon.co.uk>
I have been using mad16 sound for some time now with no problems, current 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] ...@@ -14,9 +16,9 @@ sound 61928 0 [mad16 sb uart401 ad1848]
.config has: .config has:
CONFIG_SOUND=m CONFIG_SOUND=m
CONFIG_ADLIB=m CONFIG_SOUND_ADLIB=m
CONFIG_MAD16=m CONFIG_SOUND_MAD16=m
CONFIG_YM3812=m CONFIG_SOUND_YM3812=m
modules.conf has: modules.conf has:
......
...@@ -29,21 +29,21 @@ the kernel. ...@@ -29,21 +29,21 @@ the kernel.
Sound card support should be enabled as a module (chose m). Sound card support should be enabled as a module (chose m).
Answer 'm' for these items: Answer 'm' for these items:
Generic OPL2/OPL3 FM synthesizer support (CONFIG_ADLIB) Generic OPL2/OPL3 FM synthesizer support (CONFIG_SOUND_ADLIB)
Microsoft Sound System support (CONFIG_MSS) Microsoft Sound System support (CONFIG_SOUND_MSS)
Support for OPTi MAD16 and/or Mozart based cards (CONFIG_MAD16) Support for OPTi MAD16 and/or Mozart based cards (CONFIG_SOUND_MAD16)
FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812) FM synthesizer (YM3812/OPL-3) support (CONFIG_SOUND_YM3812)
The configuration menu may ask for addresses, IRQ lines or DMA The configuration menu may ask for addresses, IRQ lines or DMA
channels. If the card is used as a module the module loading channels. If the card is used as a module the module loading
options will override these values. options will override these values.
For the OPTi 931 you can answer 'n' to: 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 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 need to answer 'm' to the above question. In that case you will
also need to answer 'm' to: 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. Go on and compile your kernel and modules. Install the modules. Run depmod -a.
......
...@@ -161,7 +161,7 @@ S: Supported ...@@ -161,7 +161,7 @@ S: Supported
APPLETALK NETWORK LAYER APPLETALK NETWORK LAYER
P: Jay Schulist P: Jay Schulist
M: jschlst@turbolinux.com M: jschlst@turbolinux.com
L: linux-atalk@netspace.org L: linux-atalk@lists.netspace.org
S: Maintained S: Maintained
ARM MFM AND FLOPPY DRIVERS ARM MFM AND FLOPPY DRIVERS
...@@ -280,13 +280,17 @@ S: Supported ...@@ -280,13 +280,17 @@ S: Supported
CONFIGURE, MENUCONFIG, XCONFIG CONFIGURE, MENUCONFIG, XCONFIG
P: Michael Elizabeth Chastain P: Michael Elizabeth Chastain
M: mec@shout.net M: mec@shout.net
L: linux-kbuild@torque.net L: kbuild-devel@lists.sourceforge.net
W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/ W: http://kbuild.sourceforge.net
S: Maintained S: Maintained
CONFIGURE.HELP CONFIGURE.HELP
P: Axel Boldt P: Steven P. Cole
M: axel@uni-paderborn.de 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 S: Maintained
COSA/SRP SYNC SERIAL DRIVER COSA/SRP SYNC SERIAL DRIVER
...@@ -393,7 +397,7 @@ S: Supported ...@@ -393,7 +397,7 @@ S: Supported
DISK GEOMETRY AND PARTITION HANDLING DISK GEOMETRY AND PARTITION HANDLING
P: Andries Brouwer 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/Large-Disk.html
W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.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 W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
...@@ -548,22 +552,6 @@ L: linux-hams@vger.kernel.org ...@@ -548,22 +552,6 @@ L: linux-hams@vger.kernel.org
W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/ W: http://www.nt.tuwien.ac.at/~kkudielk/Linux/
S: Maintained 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 HIPPI
P: Jes Sorensen P: Jes Sorensen
M: jes@linuxcare.com M: jes@linuxcare.com
...@@ -759,6 +747,15 @@ M: jeremy@goop.org ...@@ -759,6 +747,15 @@ M: jeremy@goop.org
L: autofs@linux.kernel.org L: autofs@linux.kernel.org
S: Maintained 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 KERNEL NFSD
P: Neil Brown P: Neil Brown
M: neilb@cse.unsw.edu.au M: neilb@cse.unsw.edu.au
...@@ -793,6 +790,13 @@ W: http://www.linuxppc.org/ ...@@ -793,6 +790,13 @@ W: http://www.linuxppc.org/
L: linuxppc-dev@lists.linuxppc.org L: linuxppc-dev@lists.linuxppc.org
S: Maintained 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 M68K
P: Jes Sorensen P: Jes Sorensen
M: jes@linuxcare.com M: jes@linuxcare.com
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 4 SUBLEVEL = 5
EXTRAVERSION = EXTRAVERSION =-pre1
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) 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 # cris/Makefile
# #
# This file is included by the global makefile so that you can add your own # 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 ...@@ -25,8 +25,8 @@ LD_SCRIPT=$(TOPDIR)/arch/cris/cris.ld
# regenerating stuff (even for incremental linking of subsystems!) is # regenerating stuff (even for incremental linking of subsystems!) is
# even more nauseating. # even more nauseating.
LD = if [ ! -e $(LD_SCRIPT).tmp -o $(LD_SCRIPT) -nt $(LD_SCRIPT).tmp ]; then \ 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)/ \ sed -e s/@CONFIG_ETRAX_DRAM_VIRTUAL_BASE@/0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE)/ \
-e s/@ETRAX_DRAM_SIZE_M@/$(ETRAX_DRAM_SIZE)/ \ -e s/@CONFIG_ETRAX_DRAM_SIZE_M@/$(CONFIG_ETRAX_DRAM_SIZE)/ \
< $(LD_SCRIPT) > $(LD_SCRIPT).tmp; \ < $(LD_SCRIPT) > $(LD_SCRIPT).tmp; \
else true; \ else true; \
fi && $(CROSS_COMPILE)ld -mcriself fi && $(CROSS_COMPILE)ld -mcriself
...@@ -42,7 +42,7 @@ OBJCOPY := $(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S ...@@ -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__ 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 := $(subst -fomit-frame-pointer,,$(CFLAGS)) -g
CFLAGS += -fno-omit-frame-pointer CFLAGS += -fno-omit-frame-pointer
endif endif
...@@ -76,7 +76,7 @@ simimage: timage ...@@ -76,7 +76,7 @@ simimage: timage
cramfs: cramfs:
## cramfs - Creates a cramfs image ## 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 cat vmlinux.bin cramfs.img >timage
clinux: vmlinux.bin decompress.bin rescue.bin clinux: vmlinux.bin decompress.bin rescue.bin
......
...@@ -24,7 +24,7 @@ decompress.bin: $(OBJECTS) ...@@ -24,7 +24,7 @@ decompress.bin: $(OBJECTS)
vmlinuz: piggy.img decompress.bin vmlinuz: piggy.img decompress.bin
cat decompress.bin piggy.img $(TOPDIR)/cramfs.img > vmlinuz cat decompress.bin piggy.img > vmlinuz
rm -f piggy.img rm -f piggy.img
head.o: head.S 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 * Code that sets up the DRAM registers, calls the
* decompressor to unpack the piggybacked kernel, and jumps. * decompressor to unpack the piggybacked kernel, and jumps.
* *
*/ */
#include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h> #include <asm/sv_addr_ag.h>
#define RAM_INIT_MAGIC 0x56902387
;; Exported symbols ;; Exported symbols
.globl _input_data .globl _input_data
...@@ -21,23 +24,28 @@ ...@@ -21,23 +24,28 @@
nop nop
di 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
#include "../../lib/dram_init.S"
dram_init_finished: 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 ;; 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 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 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 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] move.b r0, [R_PORT_PB_DIR]
;; Setup the stack to a suitably high address. ;; Setup the stack to a suitably high address.
...@@ -70,6 +78,7 @@ basse: move.d pc, r5 ...@@ -70,6 +78,7 @@ basse: move.d pc, r5
move.d r5, [_input_data] ; for the decompressor move.d r5, [_input_data] ; for the decompressor
;; Clear the decompressors BSS (between _edata and _end) ;; Clear the decompressors BSS (between _edata and _end)
moveq 0, r0 moveq 0, r0
...@@ -81,19 +90,22 @@ basse: move.d pc, r5 ...@@ -81,19 +90,22 @@ basse: move.d pc, r5
nop nop
;; Do the decompression and save compressed size in _inptr ;; Do the decompression and save compressed size in _inptr
jsr _decompress_kernel 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 ;; when mounting from flash
move.d [_input_data], r9 ; flash address of compressed kernel move.d [_input_data], r9 ; flash address of compressed kernel
add.d [_inptr], r9 ; size of compressed kernel add.d [_inptr], r9 ; size of compressed kernel
;; Enter the decompressed 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 jump 0x40004000 ; kernel is linked to this address
.data .data
_input_data: _input_data:
.dword 0 ; used by the decompressor .dword 0 ; used by the decompressor
#include "../../lib/hw_settings.S"
/* /*
* misc.c * 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 * This is a collection of several routines from gzip-1.0.3
* adapted for Linux. * adapted for Linux.
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#define KERNEL_LOAD_ADR 0x40004000 #define KERNEL_LOAD_ADR 0x40004000
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h> #include <linux/types.h>
#include <asm/svinto.h> #include <asm/svinto.h>
...@@ -143,21 +144,21 @@ static void gzip_release(void **ptr) ...@@ -143,21 +144,21 @@ static void gzip_release(void **ptr)
static void static void
puts(const char *s) puts(const char *s)
{ {
#ifndef CONFIG_DEBUG_PORT_NULL #ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
while(*s) { while(*s) {
#ifdef CONFIG_DEBUG_PORT0 #ifdef CONFIG_ETRAX_DEBUG_PORT0
while(!(*R_SERIAL0_STATUS & (1 << 5))) ; while(!(*R_SERIAL0_STATUS & (1 << 5))) ;
*R_SERIAL0_TR_DATA = *s++; *R_SERIAL0_TR_DATA = *s++;
#endif #endif
#ifdef CONFIG_DEBUG_PORT1 #ifdef CONFIG_ETRAX_DEBUG_PORT1
while(!(*R_SERIAL1_STATUS & (1 << 5))) ; while(!(*R_SERIAL1_STATUS & (1 << 5))) ;
*R_SERIAL1_TR_DATA = *s++; *R_SERIAL1_TR_DATA = *s++;
#endif #endif
#ifdef CONFIG_DEBUG_PORT2 #ifdef CONFIG_ETRAX_DEBUG_PORT2
while(!(*R_SERIAL2_STATUS & (1 << 5))) ; while(!(*R_SERIAL2_STATUS & (1 << 5))) ;
*R_SERIAL2_TR_DATA = *s++; *R_SERIAL2_TR_DATA = *s++;
#endif #endif
#ifdef CONFIG_DEBUG_PORT3 #ifdef CONFIG_ETRAX_DEBUG_PORT3
while(!(*R_SERIAL3_STATUS & (1 << 5))) ; while(!(*R_SERIAL3_STATUS & (1 << 5))) ;
*R_SERIAL3_TR_DATA = *s++; *R_SERIAL3_TR_DATA = *s++;
#endif #endif
...@@ -227,33 +228,45 @@ setup_normal_output_buffer() ...@@ -227,33 +228,45 @@ setup_normal_output_buffer()
void void
decompress_kernel() decompress_kernel()
{ {
char revision;
/* input_data is set in head.S */ /* input_data is set in head.S */
inbuf = input_data; inbuf = input_data;
#ifdef CONFIG_DEBUG_PORT0 #ifdef CONFIG_ETRAX_DEBUG_PORT0
*R_SERIAL0_XOFF = 0; *R_SERIAL0_XOFF = 0;
*R_SERIAL0_BAUD = 0x99; *R_SERIAL0_BAUD = 0x99;
*R_SERIAL0_TR_CTRL = 0x40; *R_SERIAL0_TR_CTRL = 0x40;
#endif #endif
#ifdef CONFIG_DEBUG_PORT1 #ifdef CONFIG_ETRAX_DEBUG_PORT1
*R_SERIAL1_XOFF = 0; *R_SERIAL1_XOFF = 0;
*R_SERIAL1_BAUD = 0x99; *R_SERIAL1_BAUD = 0x99;
*R_SERIAL1_TR_CTRL = 0x40; *R_SERIAL1_TR_CTRL = 0x40;
#endif #endif
#ifdef CONFIG_DEBUG_PORT2 #ifdef CONFIG_ETRAX_DEBUG_PORT2
*R_GEN_CONFIG = 0x08;
*R_SERIAL2_XOFF = 0; *R_SERIAL2_XOFF = 0;
*R_SERIAL2_BAUD = 0x99; *R_SERIAL2_BAUD = 0x99;
*R_SERIAL2_TR_CTRL = 0x40; *R_SERIAL2_TR_CTRL = 0x40;
#endif #endif
#ifdef CONFIG_DEBUG_PORT3 #ifdef CONFIG_ETRAX_DEBUG_PORT3
*R_GEN_CONFIG = 0x100;
*R_SERIAL3_XOFF = 0; *R_SERIAL3_XOFF = 0;
*R_SERIAL3_BAUD = 0x99; *R_SERIAL3_BAUD = 0x99;
*R_SERIAL3_TR_CTRL = 0x40; *R_SERIAL3_TR_CTRL = 0x40;
#endif #endif
setup_normal_output_buffer(); setup_normal_output_buffer();
makecrc(); 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"); puts("Uncompressing Linux...\n");
gunzip(); gunzip();
puts("Done. Now booting the kernel.\n"); puts("Done. Now booting the kernel.\n");
......
;; $Id: head.S,v 1.3 2001/02/14 16:57:25 larsv Exp $ /* $Id: head.S,v 1.7 2001/04/18 12:05:07 bjornw Exp $
;; *
;; Rescue code, made to reside at the beginning of the * Rescue code, made to reside at the beginning of the
;; flash-memory. when it starts, it checks a partition * flash-memory. when it starts, it checks a partition
;; table at the first sector after the rescue sector. * table at the first sector after the rescue sector.
;; the partition table was generated by the product builder * the partition table was generated by the product builder
;; script and contains offsets, lengths, types and checksums * script and contains offsets, lengths, types and checksums
;; for each partition that this code should check. * for each partition that this code should check.
;; *
;; If any of the checksums fail, we assume the flash is so * If any of the checksums fail, we assume the flash is so
;; corrupt that we cant use it to boot into the ftp flash * corrupt that we cant use it to boot into the ftp flash
;; loader, and instead we initialize the serial port to * loader, and instead we initialize the serial port to
;; receive a flash-loader and new flash image. we dont include * receive a flash-loader and new flash image. we dont include
;; any flash code here, but just accept a certain amount of * any flash code here, but just accept a certain amount of
;; bytes from the serial port and jump into it. the downloaded * bytes from the serial port and jump into it. the downloaded
;; code is put in the cache. * code is put in the cache.
;; *
;; The partitiontable is designed so that it is transparent to * The partitiontable is designed so that it is transparent to
;; code execution - it has a relative branch opcode in the * code execution - it has a relative branch opcode in the
;; beginning that jumps over it. each entry contains extra * beginning that jumps over it. each entry contains extra
;; data so we can add stuff later. * data so we can add stuff later.
;; *
;; Partition table format: * Partition table format:
;; *
;; Code transparency: * Code transparency:
;; *
;; 2 bytes [opcode 'nop'] * 2 bytes [opcode 'nop']
;; 2 bytes [opcode 'di'] * 2 bytes [opcode 'di']
;; 4 bytes [opcode 'ba <offset>', 8-bit or 16-bit version] * 4 bytes [opcode 'ba <offset>', 8-bit or 16-bit version]
;; 2 bytes [opcode 'nop', delay slot] * 2 bytes [opcode 'nop', delay slot]
;; *
;; Table validation (at +10): * Table validation (at +10):
;; *
;; 2 bytes [magic/version word for partitiontable - 0xef, 0xbe] * 2 bytes [magic/version word for partitiontable - 0xef, 0xbe]
;; 2 bytes [length of all entries plus the end marker] * 2 bytes [length of all entries plus the end marker]
;; 4 bytes [checksum for the partitiontable itself] * 4 bytes [checksum for the partitiontable itself]
;; *
;; Entries, each with the following format, last has offset -1: * Entries, each with the following format, last has offset -1:
;; *
;; 4 bytes [offset in bytes, from start of flash] * 4 bytes [offset in bytes, from start of flash]
;; 4 bytes [length in bytes of partition] * 4 bytes [length in bytes of partition]
;; 4 bytes [checksum, simple longword sum] * 4 bytes [checksum, simple longword sum]
;; 2 bytes [partition type] * 2 bytes [partition type]
;; 2 bytes [flags, only bit 0 used, ro/rw = 1/0] * 2 bytes [flags, only bit 0 used, ro/rw = 1/0]
;; 16 bytes [reserved for future use] * 16 bytes [reserved for future use]
;; *
;; End marker * End marker
;; *
;; 4 bytes [-1] * 4 bytes [-1]
;; *
;; 10 bytes [0, padding] * 10 bytes [0, padding]
;; *
;; Bit 0 in flags signifies RW or RO. The rescue code only bothers * Bit 0 in flags signifies RW or RO. The rescue code only bothers
;; to check the checksum for RO partitions, since the others will * to check the checksum for RO partitions, since the others will
;; change its data without updating the checksums. A 1 in bit 0 * 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 * 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 * in RO mode initially, and later mark it as RW, since you can always
;; write 0's to the flash. * write 0's to the flash.
;; *
;; During the wait for serial input, the status LED will flash so the * During the wait for serial input, the status LED will flash so the
;; user knows something went wrong. * user knows something went wrong.
;; *
;; Copyright (C) 1999 Axis Communications AB * Copyright (C) 1999,2001 Axis Communications AB
*/
#include <linux/config.h> #include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
...@@ -69,7 +70,7 @@ ...@@ -69,7 +70,7 @@
;; The partitiontable is looked for at the first sector after the boot ;; The partitiontable is looked for at the first sector after the boot
;; sector. Sector size is 65536 bytes in all flashes we use. ;; 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 #define PTABLE_MAGIC 0xbeef
;; The normal Etrax100 on-chip boot ROM does serial boot at 0x380000f0. ;; The normal Etrax100 on-chip boot ROM does serial boot at 0x380000f0.
...@@ -82,28 +83,28 @@ ...@@ -82,28 +83,28 @@
#define CODE_START 0x40000000 #define CODE_START 0x40000000
#define CODE_LENGTH 784 #define CODE_LENGTH 784
#ifdef CONFIG_RESCUE_SER0 #ifdef CONFIG_ETRAX_RESCUE_SER0
#define SERXOFF R_SERIAL0_XOFF #define SERXOFF R_SERIAL0_XOFF
#define SERBAUD R_SERIAL0_BAUD #define SERBAUD R_SERIAL0_BAUD
#define SERRECC R_SERIAL0_REC_CTRL #define SERRECC R_SERIAL0_REC_CTRL
#define SERRDAT R_SERIAL0_REC_DATA #define SERRDAT R_SERIAL0_REC_DATA
#define SERSTAT R_SERIAL0_STATUS #define SERSTAT R_SERIAL0_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER1 #ifdef CONFIG_ETRAX_RESCUE_SER1
#define SERXOFF R_SERIAL1_XOFF #define SERXOFF R_SERIAL1_XOFF
#define SERBAUD R_SERIAL1_BAUD #define SERBAUD R_SERIAL1_BAUD
#define SERRECC R_SERIAL1_REC_CTRL #define SERRECC R_SERIAL1_REC_CTRL
#define SERRDAT R_SERIAL1_REC_DATA #define SERRDAT R_SERIAL1_REC_DATA
#define SERSTAT R_SERIAL1_STATUS #define SERSTAT R_SERIAL1_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER2 #ifdef CONFIG_ETRAX_RESCUE_SER2
#define SERXOFF R_SERIAL2_XOFF #define SERXOFF R_SERIAL2_XOFF
#define SERBAUD R_SERIAL2_BAUD #define SERBAUD R_SERIAL2_BAUD
#define SERRECC R_SERIAL2_REC_CTRL #define SERRECC R_SERIAL2_REC_CTRL
#define SERRDAT R_SERIAL2_REC_DATA #define SERRDAT R_SERIAL2_REC_DATA
#define SERSTAT R_SERIAL2_STATUS #define SERSTAT R_SERIAL2_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER3 #ifdef CONFIG_ETRAX_RESCUE_SER3
#define SERXOFF R_SERIAL3_XOFF #define SERXOFF R_SERIAL3_XOFF
#define SERBAUD R_SERIAL3_BAUD #define SERBAUD R_SERIAL3_BAUD
#define SERRECC R_SERIAL3_REC_CTRL #define SERRECC R_SERIAL3_REC_CTRL
...@@ -112,7 +113,8 @@ ...@@ -112,7 +113,8 @@
#endif #endif
#define NOP_DI 0xf025050f #define NOP_DI 0xf025050f
#define RAM_INIT_MAGIC 0x56902387
.text .text
;; This is the entry point of the rescue code ;; This is the entry point of the rescue code
...@@ -221,14 +223,14 @@ do_rescue: ...@@ -221,14 +223,14 @@ do_rescue:
;; setup port PA and PB default initial directions and data ;; setup port PA and PB default initial directions and data
;; (so we can flash LEDs, and so that DTR and others are set) ;; (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 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 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 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] move.b r0, [R_PORT_PB_DATA]
;; setup the serial port at 115200 baud ;; setup the serial port at 115200 baud
...@@ -250,10 +252,10 @@ wait_ser: ...@@ -250,10 +252,10 @@ wait_ser:
addq 1, r1 addq 1, r1
#ifndef CONFIG_ETRAX_NO_LEDS #ifndef CONFIG_ETRAX_NO_LEDS
#ifdef CONFIG_ETRAX_PA_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 #endif
#ifdef CONFIG_ETRAX_PB_LEDS #ifdef CONFIG_ETRAX_PB_LEDS
move.b DEF_R_PORT_PB_DATA, r2 move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r2
#endif #endif
move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0 move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0
btstq 16, r1 btstq 16, r1
...@@ -293,7 +295,8 @@ wait_ser: ...@@ -293,7 +295,8 @@ wait_ser:
nop nop
;; jump into downloaded code ;; jump into downloaded code
move.d RAM_INIT_MAGIC, r8 ; Tell next product that DRAM is initialized
jump CODE_START jump CODE_START
flash_ok: flash_ok:
...@@ -303,7 +306,8 @@ flash_ok: ...@@ -303,7 +306,8 @@ flash_ok:
bne 1f bne 1f
nop nop
move.d PTABLE_START, r7; otherwise use the ptable start move.d PTABLE_START, r7; otherwise use the ptable start
1: 1:
move.d RAM_INIT_MAGIC, r8 ; Tell next product that DRAM is initialized
jump r7 ; boot! jump r7 ; boot!
......
;; $Id: kimagerescue.S,v 1.2 2001/02/14 16:57:25 larsv Exp $ /* $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 code to be prepended on a kimage and copied to the
;; rescue serial port. * rescue serial port.
;; This is called from the rescue code, it will copy received data to * This is called from the rescue code, it will copy received data to
;; 4000500 and after a timeout jump to it. * 4004000 and after a timeout jump to it.
*/
#include <linux/config.h> #include <linux/config.h>
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h> #include <asm/sv_addr_ag.h>
#define CODE_START 0x40000500 #define CODE_START 0x40004000
#define CODE_LENGTH 784 #define CODE_LENGTH 784
#define TIMEOUT_VALUE 1000 #define TIMEOUT_VALUE 1000
#ifdef CONFIG_RESCUE_SER0 #ifdef CONFIG_ETRAX_RESCUE_SER0
#define SERXOFF R_SERIAL0_XOFF #define SERXOFF R_SERIAL0_XOFF
#define SERBAUD R_SERIAL0_BAUD #define SERBAUD R_SERIAL0_BAUD
#define SERRECC R_SERIAL0_REC_CTRL #define SERRECC R_SERIAL0_REC_CTRL
#define SERRDAT R_SERIAL0_REC_DATA #define SERRDAT R_SERIAL0_REC_DATA
#define SERSTAT R_SERIAL0_STATUS #define SERSTAT R_SERIAL0_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER1 #ifdef CONFIG_ETRAX_RESCUE_SER1
#define SERXOFF R_SERIAL1_XOFF #define SERXOFF R_SERIAL1_XOFF
#define SERBAUD R_SERIAL1_BAUD #define SERBAUD R_SERIAL1_BAUD
#define SERRECC R_SERIAL1_REC_CTRL #define SERRECC R_SERIAL1_REC_CTRL
#define SERRDAT R_SERIAL1_REC_DATA #define SERRDAT R_SERIAL1_REC_DATA
#define SERSTAT R_SERIAL1_STATUS #define SERSTAT R_SERIAL1_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER2 #ifdef CONFIG_ETRAX_RESCUE_SER2
#define SERXOFF R_SERIAL2_XOFF #define SERXOFF R_SERIAL2_XOFF
#define SERBAUD R_SERIAL2_BAUD #define SERBAUD R_SERIAL2_BAUD
#define SERRECC R_SERIAL2_REC_CTRL #define SERRECC R_SERIAL2_REC_CTRL
#define SERRDAT R_SERIAL2_REC_DATA #define SERRDAT R_SERIAL2_REC_DATA
#define SERSTAT R_SERIAL2_STATUS #define SERSTAT R_SERIAL2_STATUS
#endif #endif
#ifdef CONFIG_RESCUE_SER3 #ifdef CONFIG_ETRAX_RESCUE_SER3
#define SERXOFF R_SERIAL3_XOFF #define SERXOFF R_SERIAL3_XOFF
#define SERBAUD R_SERIAL3_BAUD #define SERBAUD R_SERIAL3_BAUD
#define SERRECC R_SERIAL3_REC_CTRL #define SERRECC R_SERIAL3_REC_CTRL
...@@ -55,14 +56,14 @@ ...@@ -55,14 +56,14 @@
;; setup port PA and PB default initial directions and data ;; setup port PA and PB default initial directions and data
;; (so we can flash LEDs, and so that DTR and others are set) ;; (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 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 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 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] move.b r0, [R_PORT_PB_DATA]
;; We need to setup the bus registers before we start using the DRAM ;; We need to setup the bus registers before we start using the DRAM
...@@ -99,10 +100,10 @@ wait_ser: ...@@ -99,10 +100,10 @@ wait_ser:
nop nop
#ifndef CONFIG_ETRAX_NO_LEDS #ifndef CONFIG_ETRAX_NO_LEDS
#ifdef CONFIG_ETRAX_PA_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 #endif
#ifdef CONFIG_ETRAX_PB_LEDS #ifdef CONFIG_ETRAX_PB_LEDS
move.b DEF_R_PORT_PB_DATA, r2 move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, r2
#endif #endif
move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0 move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), r0
btstq 16, r1 btstq 16, r1
......
;; $Id: testrescue.S,v 1.1 2001/01/31 15:32:09 johana Exp $ /* $Id: testrescue.S,v 1.2 2001/04/18 12:05:07 bjornw Exp $
;; *
;; Simple testcode to download by the rescue block. * Simple testcode to download by the rescue block.
;; Just lits some LEDs to show it was downloaded correctly. * Just lits some LEDs to show it was downloaded correctly.
;; *
;; Copyright (C) 1999 Axis Communications AB * Copyright (C) 1999 Axis Communications AB
*/
#define ASSEMBLER_MACROS_ONLY #define ASSEMBLER_MACROS_ONLY
#include <asm/sv_addr_ag.h> #include <asm/sv_addr_ag.h>
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <unistd.h> /* contains read/write */ #include <unistd.h> /* contains read/write */
#include <fcntl.h> #include <fcntl.h>
#include <linux/a.out.h> #include <linux/a.out.h>
#include <linux/config.h>
#include <errno.h> #include <errno.h>
#define MINIX_HEADER 32 #define MINIX_HEADER 32
......
...@@ -24,14 +24,10 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then ...@@ -24,14 +24,10 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Kernel support for JAVA binaries' CONFIG_BINFMT_JAVA tristate 'Kernel support for JAVA binaries' CONFIG_BINFMT_JAVA
fi fi
bool 'Use kernel gdb debugger' CONFIG_KGDB bool 'Use kernel gdb debugger' CONFIG_ETRAX_KGDB
bool 'Enable Etrax100 watchdog' CONFIG_ETRAX_WATCHDOG 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 endmenu
mainmenu_option next_comment mainmenu_option next_comment
...@@ -46,20 +42,19 @@ choice 'Processor type' \ ...@@ -46,20 +42,19 @@ choice 'Processor type' \
if [ "$CONFIG_ETRAX100LX" = "y" -o "$CONFIG_SVINTO_SIM" = "y" ]; then if [ "$CONFIG_ETRAX100LX" = "y" -o "$CONFIG_SVINTO_SIM" = "y" ]; then
define_bool CONFIG_CRIS_LOW_MAP y define_bool CONFIG_CRIS_LOW_MAP y
define_hex ETRAX_DRAM_VIRTUAL_BASE 60000000 define_hex CONFIG_ETRAX_DRAM_VIRTUAL_BASE 60000000
else else
define_hex ETRAX_DRAM_VIRTUAL_BASE c0000000 define_hex CONFIG_ETRAX_DRAM_VIRTUAL_BASE c0000000
fi 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 int 'Buswidth of flash in bytes' CONFIG_ETRAX_FLASH_BUSWIDTH 2
choice 'Product LED port' \ choice 'Product LED port' \
"Port-PA-LEDs CONFIG_ETRAX_PA_LEDS \ "Port-PA-LEDs CONFIG_ETRAX_PA_LEDS \
Port-PB-LEDs CONFIG_ETRAX_PB_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 None CONFIG_ETRAX_NO_LEDS" Port-PA-LEDs
if [ "$CONFIG_ETRAX_NO_LEDS" != "y" ]; then if [ "$CONFIG_ETRAX_NO_LEDS" != "y" ]; then
...@@ -71,38 +66,54 @@ 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 int ' Third red LED bit' CONFIG_ETRAX_LED3G 2
fi 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' \ choice 'Product debug-port' \
"Serial-0 CONFIG_DEBUG_PORT0 \ "Serial-0 CONFIG_ETRAX_DEBUG_PORT0 \
Serial-1 CONFIG_DEBUG_PORT1 \ Serial-1 CONFIG_ETRAX_DEBUG_PORT1 \
Serial-2 CONFIG_DEBUG_PORT2 \ Serial-2 CONFIG_ETRAX_DEBUG_PORT2 \
Serial-3 CONFIG_DEBUG_PORT3 \ Serial-3 CONFIG_ETRAX_DEBUG_PORT3 \
disabled CONFIG_DEBUG_PORT_NULL" Serial-0 disabled CONFIG_ETRAX_DEBUG_PORT_NULL" Serial-0
choice 'Product rescue-port' \ choice 'Product rescue-port' \
"Serial-0 CONFIG_RESCUE_SER0 \ "Serial-0 CONFIG_ETRAX_RESCUE_SER0 \
Serial-1 CONFIG_RESCUE_SER1 \ Serial-1 CONFIG_ETRAX_RESCUE_SER1 \
Serial-2 CONFIG_RESCUE_SER2 \ Serial-2 CONFIG_ETRAX_RESCUE_SER2 \
Serial-3 CONFIG_RESCUE_SER3" Serial-0 Serial-3 CONFIG_ETRAX_RESCUE_SER3" Serial-0
hex 'R_WAITSTATES' DEF_R_WAITSTATES 95a6 hex 'R_WAITSTATES' CONFIG_ETRAX_DEF_R_WAITSTATES 95a6
hex 'R_BUS_CONFIG' DEF_R_BUS_CONFIG 104 hex 'R_BUS_CONFIG' CONFIG_ETRAX_DEF_R_BUS_CONFIG 104
bool 'SDRAM support' CONFIG_SDRAM n bool 'SDRAM support' CONFIG_ETRAX_SDRAM n
if [ "$CONFIG_SDRAM" = "n" ]; then if [ "$CONFIG_ETRAX_SDRAM" = "n" ]; then
hex 'R_DRAM_CONFIG' DEF_R_DRAM_CONFIG 1a200040 hex 'R_DRAM_CONFIG' CONFIG_ETRAX_DEF_R_DRAM_CONFIG 1a200040
hex 'R_DRAM_TIMING' DEF_R_DRAM_TIMING 5611 hex 'R_DRAM_TIMING' CONFIG_ETRAX_DEF_R_DRAM_TIMING 5611
fi fi
if [ "$CONFIG_SDRAM" = "y" ]; then if [ "$CONFIG_ETRAX_SDRAM" = "y" ]; then
hex 'R_SDRAM_CONFIG' DEF_R_SDRAM_CONFIG d2fa7878 hex 'R_SDRAM_CONFIG' CONFIG_ETRAX_DEF_R_SDRAM_CONFIG d2fa7878
hex 'R_SDRAM_TIMING' DEF_R_SDRAM_TIMING 80004801 hex 'R_SDRAM_TIMING' CONFIG_ETRAX_DEF_R_SDRAM_TIMING 80004801
fi fi
hex 'R_PORT_PA_DIR' DEF_R_PORT_PA_DIR 1c hex 'R_PORT_PA_DIR' CONFIG_ETRAX_DEF_R_PORT_PA_DIR 1c
hex 'R_PORT_PA_DATA' DEF_R_PORT_PA_DATA 00 hex 'R_PORT_PA_DATA' CONFIG_ETRAX_DEF_R_PORT_PA_DATA 00
hex 'R_PORT_PB_CONFIG' DEF_R_PORT_PB_CONFIG 00 hex 'R_PORT_PB_CONFIG' CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG 00
hex 'R_PORT_PB_DIR' DEF_R_PORT_PB_DIR 00 hex 'R_PORT_PB_DIR' CONFIG_ETRAX_DEF_R_PORT_PB_DIR 00
hex 'R_PORT_PB_DATA' DEF_R_PORT_PB_DATA ff hex 'R_PORT_PB_DATA' CONFIG_ETRAX_DEF_R_PORT_PB_DATA ff
endmenu endmenu
......
/* ld script to make the Linux/CRIS kernel /* ld script to make the Linux/CRIS kernel
* Authors: Bjorn Wesen (bjornw@axis.com) * 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 SECTIONS
{ {
. = @ETRAX_DRAM_VIRTUAL_BASE@; . = @CONFIG_ETRAX_DRAM_VIRTUAL_BASE@;
_dram_start = .; _dram_start = .;
_ibr_start = .; _ibr_start = .;
. = . + 0x4000; /* see head.S and pages reserved at the start */ . = . + 0x4000; /* see head.S and pages reserved at the start */
...@@ -75,5 +81,5 @@ SECTIONS ...@@ -75,5 +81,5 @@ SECTIONS
*(.exitcall.exit) *(.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 ...@@ -15,10 +15,8 @@ CONFIG_NET=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_JAVA is not set # CONFIG_BINFMT_JAVA is not set
# CONFIG_KGDB is not set # CONFIG_ETRAX_KGDB is not set
# CONFIG_ETRAX_WATCHDOG is not set # CONFIG_ETRAX_WATCHDOG is not set
CONFIG_USE_SERIAL_CONSOLE=y
# CONFIG_KERNEL_IFCONFIG is not set
# #
# Hardware setup # Hardware setup
...@@ -27,8 +25,8 @@ CONFIG_ETRAX100LX=y ...@@ -27,8 +25,8 @@ CONFIG_ETRAX100LX=y
# CONFIG_ETRAX100LX_V2 is not set # CONFIG_ETRAX100LX_V2 is not set
# CONFIG_SVINTO_SIM is not set # CONFIG_SVINTO_SIM is not set
CONFIG_CRIS_LOW_MAP=y CONFIG_CRIS_LOW_MAP=y
ETRAX_DRAM_VIRTUAL_BASE=60000000 CONFIG_ETRAX_DRAM_VIRTUAL_BASE=60000000
ETRAX_DRAM_SIZE=8 CONFIG_ETRAX_DRAM_SIZE=8
CONFIG_ETRAX_FLASH_LENGTH=2 CONFIG_ETRAX_FLASH_LENGTH=2
CONFIG_ETRAX_FLASH_BUSWIDTH=2 CONFIG_ETRAX_FLASH_BUSWIDTH=2
CONFIG_ETRAX_PA_LEDS=y CONFIG_ETRAX_PA_LEDS=y
...@@ -39,24 +37,24 @@ CONFIG_ETRAX_LED1G=2 ...@@ -39,24 +37,24 @@ CONFIG_ETRAX_LED1G=2
CONFIG_ETRAX_LED1R=2 CONFIG_ETRAX_LED1R=2
CONFIG_ETRAX_LED2G=2 CONFIG_ETRAX_LED2G=2
CONFIG_ETRAX_LED2R=2 CONFIG_ETRAX_LED2R=2
CONFIG_DEBUG_PORT0=y CONFIG_ETRAX_DEBUG_PORT0=y
# CONFIG_DEBUG_PORT1 is not set # CONFIG_ETRAX_DEBUG_PORT1 is not set
# CONFIG_DEBUG_PORT2 is not set # CONFIG_ETRAX_DEBUG_PORT2 is not set
# CONFIG_DEBUG_PORT3 is not set # CONFIG_ETRAX_DEBUG_PORT3 is not set
CONFIG_RESCUE_SER0=y CONFIG_ETRAX_RESCUE_SER0=y
# CONFIG_RESCUE_SER1 is not set # CONFIG_ETRAX_RESCUE_SER1 is not set
# CONFIG_RESCUE_SER2 is not set # CONFIG_ETRAX_RESCUE_SER2 is not set
# CONFIG_RESCUE_SER3 is not set # CONFIG_ETRAX_RESCUE_SER3 is not set
DEF_R_WAITSTATES=95a6 CONFIG_ETRAX_DEF_R_WAITSTATES=95a6
DEF_R_BUS_CONFIG=104 CONFIG_ETRAX_DEF_R_BUS_CONFIG=104
# CONFIG_SDRAM is not set # CONFIG_ETRAX_SDRAM is not set
DEF_R_DRAM_CONFIG=1a200040 CONFIG_ETRAX_DEF_R_DRAM_CONFIG=1a200040
DEF_R_DRAM_TIMING=5611 CONFIG_ETRAX_DEF_R_DRAM_TIMING=5611
DEF_R_PORT_PA_DIR=1d CONFIG_ETRAX_DEF_R_PORT_PA_DIR=1d
DEF_R_PORT_PA_DATA=f0 CONFIG_ETRAX_DEF_R_PORT_PA_DATA=f0
DEF_R_PORT_PB_CONFIG=00 CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG=00
DEF_R_PORT_PB_DIR=1e CONFIG_ETRAX_DEF_R_PORT_PB_DIR=1e
DEF_R_PORT_PB_DATA=f3 CONFIG_ETRAX_DEF_R_PORT_PB_DATA=f3
# #
# Drivers for Etrax built-in interfaces # Drivers for Etrax built-in interfaces
...@@ -69,7 +67,7 @@ CONFIG_ETRAX_SERIAL_PORT1=y ...@@ -69,7 +67,7 @@ CONFIG_ETRAX_SERIAL_PORT1=y
# CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_ON_PB is not set # CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_ON_PB is not set
# CONFIG_ETRAX_SERIAL_PORT2 is not set # CONFIG_ETRAX_SERIAL_PORT2 is not set
# CONFIG_ETRAX_SERIAL_PORT3 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_SYNCHRONOUS_SERIAL is not set
# CONFIG_ETRAX_IDE is not set # CONFIG_ETRAX_IDE is not set
CONFIG_ETRAX_AXISFLASHMAP=y CONFIG_ETRAX_AXISFLASHMAP=y
...@@ -84,15 +82,10 @@ CONFIG_ETRAX_I2C=y ...@@ -84,15 +82,10 @@ CONFIG_ETRAX_I2C=y
CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C=y CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C=y
CONFIG_ETRAX_GPIO=y CONFIG_ETRAX_GPIO=y
CONFIG_ETRAX_PA_BUTTON_BITMASK=02 CONFIG_ETRAX_PA_BUTTON_BITMASK=02
CONFIG_PA_CHANGEABLE_DIR=00 CONFIG_ETRAX_PA_CHANGEABLE_DIR=00
CONFIG_PA_CHANGEABLE_BITS=FF CONFIG_ETRAX_PA_CHANGEABLE_BITS=FF
CONFIG_PB_CHANGEABLE_DIR=00 CONFIG_ETRAX_PB_CHANGEABLE_DIR=00
CONFIG_PB_CHANGEABLE_BITS=FF CONFIG_ETRAX_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_USB_HOST is not set # CONFIG_ETRAX_USB_HOST is not set
# #
......
mainmenu_option next_comment 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 bool 'Ethernet support' CONFIG_ETRAX_ETHERNET
if [ "$CONFIG_ETRAX_ETHERNET" = "y" ]; then if [ "$CONFIG_ETRAX_ETHERNET" = "y" ]; then
...@@ -46,13 +46,13 @@ if [ "$CONFIG_ETRAX_SERIAL" = "y" ]; then ...@@ -46,13 +46,13 @@ if [ "$CONFIG_ETRAX_SERIAL" = "y" ]; then
fi fi
fi fi
bool ' Serial port 3 enabled' CONFIG_ETRAX_SERIAL_PORT3 bool ' Serial port 3 enabled' CONFIG_ETRAX_SERIAL_PORT3
bool ' RS-485 support' CONFIG_RS485 bool ' RS-485 support' CONFIG_ETRAX_RS485
if [ "$CONFIG_RS485" = "y" ]; then if [ "$CONFIG_ETRAX_RS485" = "y" ]; then
bool ' RS-485 mode on PA' CONFIG_RS485_ON_PA bool ' RS-485 mode on PA' CONFIG_ETRAX_RS485_ON_PA
if [ "$CONFIG_RS485_ON_PA" = "y" ]; then if [ "$CONFIG_ETRAX_RS485_ON_PA" = "y" ]; then
int ' RS-485 mode on PA bit' CONFIG_RS485_ON_PA_BIT 3 int ' RS-485 mode on PA bit' CONFIG_ETRAX_RS485_ON_PA_BIT 3
fi fi
bool ' Disable serial receiver' CONFIG_RS485_DISABLE_RECEIVER bool ' Disable serial receiver' CONFIG_ETRAX_RS485_DISABLE_RECEIVER
fi fi
fi fi
...@@ -60,14 +60,29 @@ bool 'Synchronous serial port support' CONFIG_ETRAX_SYNCHRONOUS_SERIAL ...@@ -60,14 +60,29 @@ bool 'Synchronous serial port support' CONFIG_ETRAX_SYNCHRONOUS_SERIAL
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL" = "y" ]; then if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL" = "y" ]; then
bool ' Synchronous serial port 0 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0 bool ' Synchronous serial port 0 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0" = "y" ]; then 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 fi
bool ' Synchronous serial port 1 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1 bool ' Synchronous serial port 1 enabled' CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1
if [ "$CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1" = "y" ]; then 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
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 bool 'ATA/IDE support' CONFIG_ETRAX_IDE
if [ "$CONFIG_ETRAX_IDE" = "y" ]; then if [ "$CONFIG_ETRAX_IDE" = "y" ]; then
...@@ -89,7 +104,8 @@ if [ "$CONFIG_ETRAX_IDE" = "y" ]; then ...@@ -89,7 +104,8 @@ if [ "$CONFIG_ETRAX_IDE" = "y" ]; then
choice 'IDE reset pin' \ choice 'IDE reset pin' \
"Port_PB_Bit_7 CONFIG_ETRAX_IDE_PB7_RESET\ "Port_PB_Bit_7 CONFIG_ETRAX_IDE_PB7_RESET\
Port_G_Bit_27 CONFIG_ETRAX_IDE_G27_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 else
define_bool CONFIG_IDE n define_bool CONFIG_IDE n
fi fi
...@@ -97,6 +113,7 @@ fi ...@@ -97,6 +113,7 @@ fi
bool 'Axis flash-map support' CONFIG_ETRAX_AXISFLASHMAP bool 'Axis flash-map support' CONFIG_ETRAX_AXISFLASHMAP
if [ "$CONFIG_ETRAX_AXISFLASHMAP" = "y" ]; then 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 # here we define the CONFIG_'s necessary to enable MTD support
# for the flash # for the flash
define_bool CONFIG_MTD y define_bool CONFIG_MTD y
...@@ -118,16 +135,25 @@ if [ "$CONFIG_ETRAX_I2C" = "y" ]; then ...@@ -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 bool 'I2C uses PB not PB-I2C' CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C
fi 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 bool 'GPIO support' CONFIG_ETRAX_GPIO
if [ "$CONFIG_ETRAX_GPIO" = "y" ]; then if [ "$CONFIG_ETRAX_GPIO" = "y" ]; then
hex ' PA-buttons bitmask' CONFIG_ETRAX_PA_BUTTON_BITMASK 02 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 dir mask' CONFIG_ETRAX_PA_CHANGEABLE_DIR 00
hex ' PA user changeable bits mask' CONFIG_PA_CHANGEABLE_BITS FF hex ' PA user changeable bits mask' CONFIG_ETRAX_PA_CHANGEABLE_BITS FF
hex ' PB user changeable dir mask' CONFIG_PB_CHANGEABLE_DIR 00 hex ' PB user changeable dir mask' CONFIG_ETRAX_PB_CHANGEABLE_DIR 00
hex ' PB user changeable bits mask' CONFIG_PB_CHANGEABLE_BITS FF hex ' PB user changeable bits mask' CONFIG_ETRAX_PB_CHANGEABLE_BITS FF
fi fi
bool 'Juliette support' CONFIG_JULIETTE n bool 'ARTPEC-1 support' CONFIG_JULIETTE
if [ "$CONFIG_JULIETTE" = "y" ]; then if [ "$CONFIG_JULIETTE" = "y" ]; then
source arch/cris/drivers/juliette/Config.in source arch/cris/drivers/juliette/Config.in
...@@ -136,8 +162,18 @@ fi ...@@ -136,8 +162,18 @@ fi
bool 'USB host' CONFIG_ETRAX_USB_HOST bool 'USB host' CONFIG_ETRAX_USB_HOST
if [ "$CONFIG_ETRAX_USB_HOST" = "y" ]; then if [ "$CONFIG_ETRAX_USB_HOST" = "y" ]; then
define_bool CONFIG_USB y define_bool CONFIG_USB y
bool ' USB port 1 enabled' CONFIG_ETRAX_USB_HOST_PORT1 n bool ' USB port 1 enabled' CONFIG_ETRAX_USB_HOST_PORT1
bool ' USB port 2 enabled' CONFIG_ETRAX_USB_HOST_PORT2 n 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 fi
endmenu endmenu
...@@ -12,10 +12,13 @@ obj-$(CONFIG_ETRAX_SERIAL) += serial.o ...@@ -12,10 +12,13 @@ obj-$(CONFIG_ETRAX_SERIAL) += serial.o
obj-$(CONFIG_ETRAX_IDE) += ide.o obj-$(CONFIG_ETRAX_IDE) += ide.o
obj-$(CONFIG_ETRAX_AXISFLASHMAP) += axisflashmap.o obj-$(CONFIG_ETRAX_AXISFLASHMAP) += axisflashmap.o
obj-$(CONFIG_ETRAX_I2C) += i2c.o obj-$(CONFIG_ETRAX_I2C) += i2c.o
obj-$(CONFIG_ETRAX_I2C_EEPROM) += eeprom.o
obj-$(CONFIG_ETRAX_GPIO) += gpio.o obj-$(CONFIG_ETRAX_GPIO) += gpio.o
obj-$(CONFIG_ETRAX_USB_HOST) += usb-host.o obj-$(CONFIG_ETRAX_USB_HOST) += usb-host.o
obj-$(CONFIG_ETRAX_SYNCHRONOUS_SERIAL) += sync_serial.o obj-$(CONFIG_ETRAX_SYNCHRONOUS_SERIAL) += sync_serial.o
obj-$(CONFIG_JULIETTE) += juliette/juliette.o obj-$(CONFIG_ETRAX_PARPORT) += parport.o
subdir-$(CONFIG_JULIETTE) += juliette obj-$(CONFIG_ETRAX_DS1302) += ds1302.o
include $(TOPDIR)/Rules.make include $(TOPDIR)/Rules.make
...@@ -11,6 +11,15 @@ ...@@ -11,6 +11,15 @@
* partition split defined below. * partition split defined below.
* *
* $Log: axisflashmap.c,v $ * $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 * Revision 1.4 2001/02/23 12:47:15 bjornw
* Uncached flash in LOW_MAP moved from 0xe to 0x8 * Uncached flash in LOW_MAP moved from 0xe to 0x8
* *
...@@ -50,19 +59,13 @@ ...@@ -50,19 +59,13 @@
#endif #endif
/* /*
* WINDOW_SIZE is the total size where the flash chips are mapped, * WINDOW_SIZE is the total size where the flash chips may be mapped.
* my guess is that this can be the total memory area even if there * MTD probes should find all devices there and it does not matter
* are many flash chips inside the area or if they are not all mounted. * if there are unmapped gaps or aliases (mirrors of flash devices).
* So possibly we can get rid of the CONFIG_ here and just write something * The MTD probes will ignore them.
* like 32 MB always.
*/
#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 * Map driver
...@@ -70,8 +73,6 @@ ...@@ -70,8 +73,6 @@
* Ok this is the scoop - we need to access the flash both with and without * 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 * 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. * 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) 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) ...@@ -110,12 +111,6 @@ static void flash_write32(struct map_info *map, __u32 d, unsigned long adr)
*(__u32 *)(FLASH_UNCACHED_ADDR + adr) = d; *(__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 = { static struct map_info axis_map = {
name: "Axis flash", name: "Axis flash",
size: WINDOW_SIZE, size: WINDOW_SIZE,
...@@ -127,7 +122,6 @@ static struct map_info axis_map = { ...@@ -127,7 +122,6 @@ static struct map_info axis_map = {
write8: flash_write8, write8: flash_write8,
write16: flash_write16, write16: flash_write16,
write32: flash_write32, write32: flash_write32,
copy_to: flash_copy_to
}; };
/* If no partition-table was found, we use this default-set. /* If no partition-table was found, we use this default-set.
...@@ -139,18 +133,18 @@ static struct map_info axis_map = { ...@@ -139,18 +133,18 @@ static struct map_info axis_map = {
static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = {
{ {
name: "boot firmware", name: "boot firmware",
size: PTABLE_SECTOR, size: CONFIG_ETRAX_PTABLE_SECTOR,
offset: 0 offset: 0
}, },
{ {
name: "kernel", name: "kernel",
size: 0x1a0000, size: 0x1a0000,
offset: PTABLE_SECTOR offset: CONFIG_ETRAX_PTABLE_SECTOR
}, },
{ {
name: "filesystem", name: "filesystem",
size: 0x50000, size: 0x50000,
offset: (0x1a0000 + PTABLE_SECTOR) offset: (0x1a0000 + CONFIG_ETRAX_PTABLE_SECTOR)
} }
}; };
...@@ -214,11 +208,11 @@ init_axis_flash(void) ...@@ -214,11 +208,11 @@ init_axis_flash(void)
printk(KERN_NOTICE "Axis flash mapping: %x at %x\n", printk(KERN_NOTICE "Axis flash mapping: %x at %x\n",
WINDOW_SIZE, FLASH_CACHED_ADDR); WINDOW_SIZE, FLASH_CACHED_ADDR);
mymtd = do_cfi_probe(&axis_map); mymtd = (struct mtd_info *)do_cfi_probe(&axis_map);
#ifdef CONFIG_MTD_AMDSTD #ifdef CONFIG_MTD_AMDSTD
if (!mymtd) { if (!mymtd) {
mymtd = do_amd_flash_probe(&axis_map); mymtd = (struct mtd_info *)do_amd_flash_probe(&axis_map);
} }
#endif #endif
...@@ -236,18 +230,15 @@ init_axis_flash(void) ...@@ -236,18 +230,15 @@ init_axis_flash(void)
*/ */
ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR + 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 */ pidx++; /* first partition is always set to the default */
if ((ptable_head->magic == PARTITION_TABLE_MAGIC) if ((ptable_head->magic == PARTITION_TABLE_MAGIC)
&& (ptable_head->size && (ptable_head->size <
< (MAX_PARTITIONS (MAX_PARTITIONS * sizeof(struct partitiontable_entry) + 4))
* sizeof(struct partitiontable_entry) + 4)) && (*(unsigned long*)((void*)ptable_head + sizeof(*ptable_head) +
&& (*(unsigned long*) ptable_head->size - 4)
((void*)ptable_head == PARTITIONTABLE_END_MARKER)) {
+ sizeof(*ptable_head)
+ ptable_head->size - 4)
== PARTITIONTABLE_END_MARKER)) {
/* Looks like a start, sane length and end of a /* Looks like a start, sane length and end of a
* partition table, lets check csum etc. * partition table, lets check csum etc.
*/ */
...@@ -256,7 +247,7 @@ init_axis_flash(void) ...@@ -256,7 +247,7 @@ init_axis_flash(void)
(struct partitiontable_entry *) (struct partitiontable_entry *)
((unsigned long)ptable_head + sizeof(*ptable_head) + ((unsigned long)ptable_head + sizeof(*ptable_head) +
ptable_head->size); ptable_head->size);
unsigned long offset = PTABLE_SECTOR; unsigned long offset = CONFIG_ETRAX_PTABLE_SECTOR;
unsigned char *p; unsigned char *p;
unsigned long csum = 0; unsigned long csum = 0;
...@@ -293,16 +284,7 @@ init_axis_flash(void) ...@@ -293,16 +284,7 @@ init_axis_flash(void)
&& ptable->offset != 0xffffffff && ptable->offset != 0xffffffff
&& ptable < max_addr && ptable < max_addr
&& pidx < MAX_PARTITIONS) { && 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].offset = offset + ptable->offset;
axis_partitions[pidx].size = ptable->size; 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 @@ ...@@ -25,26 +25,26 @@
struct e100_serial { struct e100_serial {
int baud; int baud;
volatile unsigned char * port; /* R_SERIALx_CTRL */ volatile u8 *port; /* R_SERIALx_CTRL */
unsigned long irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */
volatile char *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR, output */ volatile u8 *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR, output */
volatile unsigned long *ofirstadr; /* adr to R_DMA_CHx_FIRST, output */ volatile u32 *ofirstadr; /* adr to R_DMA_CHx_FIRST, output */
volatile char *ocmdadr; /* adr to R_DMA_CHx_CMD, output */ volatile u8 *ocmdadr; /* adr to R_DMA_CHx_CMD, output */
const volatile unsigned short *ostatusadr; /* adr to R_DMA_CHx_STATUS, output */ const volatile u8 *ostatusadr; /* adr to R_DMA_CHx_STATUS, output */
volatile unsigned long *ohwswadr; /* adr to R_DMA_CHx_HWSW, output */ volatile u32 *ohwswadr; /* adr to R_DMA_CHx_HWSW, output */
volatile char *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR, input */ volatile u8 *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR, input */
volatile unsigned long *ifirstadr; /* adr to R_DMA_CHx_FIRST, input */ volatile u32 *ifirstadr; /* adr to R_DMA_CHx_FIRST, input */
volatile char *icmdadr; /* adr to R_DMA_CHx_CMD, input */ volatile u8 *icmdadr; /* adr to R_DMA_CHx_CMD, input */
const volatile unsigned short *istatusadr; /* adr to R_DMA_CHx_STATUS, input */ const volatile u8 *istatusadr; /* adr to R_DMA_CHx_STATUS, input */
volatile unsigned long *ihwswadr; /* adr to R_DMA_CHx_HWSW, input */ volatile u32 *ihwswadr; /* adr to R_DMA_CHx_HWSW, input */
int flags; /* defined in tty.h */ int flags; /* defined in tty.h */
unsigned char rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */ u8 rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */
unsigned char tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */ u8 tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */
unsigned char iseteop; /* bit number for R_SET_EOP for the input dma */ u8 iseteop; /* bit number for R_SET_EOP for the input dma */
/* end of fields defined in rs_table[] in .c-file */ /* end of fields defined in rs_table[] in .c-file */
unsigned char fifo_didmagic; /* a fifo eop has been forced */ 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) ...@@ -623,7 +623,7 @@ static int etrax_usb_submit_intr_urb(urb_t *urb)
traffic_ep->nep = tmp_ep->nep; traffic_ep->nep = tmp_ep->nep;
tmp_ep->nep = virt_to_phys(traffic_ep); tmp_ep->nep = virt_to_phys(traffic_ep);
dbg_intr("One ep successfully inserted"); dbg_intr("One ep sucessfully inserted");
} }
i++; i++;
} }
...@@ -1804,7 +1804,7 @@ static void etrax_usb_hc_intr_bottom_half(void *data) ...@@ -1804,7 +1804,7 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
r_usb_ept_data); r_usb_ept_data);
if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, no_error)) { 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*/ some undefinde error*/
if (IO_EXTRACT(R_USB_EPT_DATA, error_count_out, r_usb_ept_data) == 3 || 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) ...@@ -1888,9 +1888,9 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
/* /*
This means that the endpoint has no error, is disabled This means that the endpoint has no error, is disabled
and had inserted traffic, 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); handle_control_transfer_attn(epid, 0);
} }
} }
...@@ -1905,9 +1905,9 @@ static void etrax_usb_hc_intr_bottom_half(void *data) ...@@ -1905,9 +1905,9 @@ static void etrax_usb_hc_intr_bottom_half(void *data)
/* /*
This means that the endpoint has no error, is disabled This means that the endpoint has no error, is disabled
and had inserted traffic, 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); 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. # Makefile for the linux kernel.
# #
...@@ -18,7 +18,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \ ...@@ -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 \ ptrace.o setup.o time.o sys_cris.o shadows.o \
debugport.o semaphore.o debugport.o semaphore.o
obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_ETRAX_KGDB) += kgdb.o
clean: clean:
......
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
* init_etrax_debug() * init_etrax_debug()
* *
* $Log: debugport.c,v $ * $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 * Revision 1.4 2000/10/06 12:37:26 bjornw
* Use physical addresses when talking to DMA * Use physical addresses when talking to DMA
* *
...@@ -29,7 +35,7 @@ ...@@ -29,7 +35,7 @@
/* Which serial-port is our debug port ? */ /* 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_PORT_IDX 0
#define DEBUG_OCMD R_DMA_CH6_CMD #define DEBUG_OCMD R_DMA_CH6_CMD
#define DEBUG_FIRST R_DMA_CH6_FIRST #define DEBUG_FIRST R_DMA_CH6_FIRST
...@@ -43,7 +49,7 @@ ...@@ -43,7 +49,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma6_descr, clr) #define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma6_descr, clr)
#endif #endif
#ifdef CONFIG_DEBUG_PORT1 #ifdef CONFIG_ETRAX_DEBUG_PORT1
#define DEBUG_PORT_IDX 1 #define DEBUG_PORT_IDX 1
#define DEBUG_OCMD R_DMA_CH8_CMD #define DEBUG_OCMD R_DMA_CH8_CMD
#define DEBUG_FIRST R_DMA_CH8_FIRST #define DEBUG_FIRST R_DMA_CH8_FIRST
...@@ -57,7 +63,7 @@ ...@@ -57,7 +63,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma8_descr, clr) #define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma8_descr, clr)
#endif #endif
#ifdef CONFIG_DEBUG_PORT2 #ifdef CONFIG_ETRAX_DEBUG_PORT2
#define DEBUG_PORT_IDX 2 #define DEBUG_PORT_IDX 2
#define DEBUG_OCMD R_DMA_CH2_CMD #define DEBUG_OCMD R_DMA_CH2_CMD
#define DEBUG_FIRST R_DMA_CH2_FIRST #define DEBUG_FIRST R_DMA_CH2_FIRST
...@@ -71,7 +77,7 @@ ...@@ -71,7 +77,7 @@
#define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma2_descr, clr) #define DEBUG_DMA_IRQ_CLR IO_STATE(R_IRQ_MASK2_CLR, dma2_descr, clr)
#endif #endif
#ifdef CONFIG_DEBUG_PORT3 #ifdef CONFIG_ETRAX_DEBUG_PORT3
#define DEBUG_PORT_IDX 3 #define DEBUG_PORT_IDX 3
#define DEBUG_OCMD R_DMA_CH4_CMD #define DEBUG_OCMD R_DMA_CH4_CMD
#define DEBUG_FIRST R_DMA_CH4_FIRST #define DEBUG_FIRST R_DMA_CH4_FIRST
...@@ -97,7 +103,7 @@ console_write(struct console *co, const char *buf, unsigned int len) ...@@ -97,7 +103,7 @@ console_write(struct console *co, const char *buf, unsigned int len)
unsigned long flags; unsigned long flags;
int in_progress; int in_progress;
#ifdef CONFIG_DEBUG_PORT_NULL #ifdef CONFIG_ETRAX_DEBUG_PORT_NULL
/* no debug printout at all */ /* no debug printout at all */
return; return;
#endif #endif
...@@ -111,7 +117,7 @@ console_write(struct console *co, const char *buf, unsigned int len) ...@@ -111,7 +117,7 @@ console_write(struct console *co, const char *buf, unsigned int len)
save_flags(flags); save_flags(flags);
cli(); cli();
#ifdef CONFIG_KGDB #ifdef CONFIG_ETRAX_KGDB
/* kgdb needs to output debug info using the gdb protocol */ /* kgdb needs to output debug info using the gdb protocol */
putDebugString(buf, len); putDebugString(buf, len);
restore_flags(flags); restore_flags(flags);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -676,6 +676,7 @@ CONFIG_USB_UHCI_ALT=y ...@@ -676,6 +676,7 @@ CONFIG_USB_UHCI_ALT=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set # CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_FREECOM is not set # CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_ACM is not set # CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set # CONFIG_USB_PRINTER is not set
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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