1 |
1275 |
phoenix |
Linux for the Q40
|
2 |
|
|
=================
|
3 |
|
|
|
4 |
|
|
You may try http://www.geocities.com/SiliconValley/Bay/2602/ for
|
5 |
|
|
some up to date information. Booter and other tools will be also
|
6 |
|
|
available from this place or ftp.uni-erlangen.de/linux/680x0/q40/
|
7 |
|
|
and mirrors.
|
8 |
|
|
|
9 |
|
|
Hints to documentation usually refer to the linux source tree in
|
10 |
|
|
/usr/src/linux/Documentation unless URL given.
|
11 |
|
|
|
12 |
|
|
It seems IRQ unmasking can't be safely done on a Q40. IRQ probing
|
13 |
|
|
is not implemented - do not try it! (See below)
|
14 |
|
|
|
15 |
|
|
For a list of kernel command-line options read the documentation for the
|
16 |
|
|
particular device drivers.
|
17 |
|
|
|
18 |
|
|
The floppy imposes a very high interrupt load on the CPU, approx 30K/s.
|
19 |
|
|
When something blocks interrupts (HD) it will loose some of them, so far
|
20 |
|
|
this is not known to have caused any data loss. On highly loaded systems
|
21 |
|
|
it can make the floppy very slow or practically stop. Other Q40 OS' simply
|
22 |
|
|
poll the floppy for this reason - something that can't be done in Linux.
|
23 |
|
|
Only possible cure is getting a 82072 controller with fifo instead of
|
24 |
|
|
the 8272A.
|
25 |
|
|
|
26 |
|
|
drivers used by the Q40, apart from the very obvious (console etc.):
|
27 |
|
|
drivers/char/q40_keyb.c # use PC keymaps for national keyboards
|
28 |
|
|
serial.c # normal PC driver - any speed
|
29 |
|
|
lp.c # printer driver
|
30 |
|
|
genrtc.c # RTC
|
31 |
|
|
char/joystick/* # most of this should work, not
|
32 |
|
|
# in default config.in
|
33 |
|
|
block/q40ide.c # startup for ide
|
34 |
|
|
ide* # see Documentation/ide.txt
|
35 |
|
|
floppy.c # normal PC driver, DMA emu in asm/floppy.h
|
36 |
|
|
# and arch/m68k/kernel/entry.S
|
37 |
|
|
# see drivers/block/README.fd
|
38 |
|
|
net/ne.c
|
39 |
|
|
video/q40fb.c
|
40 |
|
|
parport/*
|
41 |
|
|
sound/dmasound_core.c
|
42 |
|
|
dmasound_q40.c
|
43 |
|
|
|
44 |
|
|
Various other PC drivers can be enabled simply by adding them to
|
45 |
|
|
arch/m68k/config.in, especially 8 bit devices should be without any
|
46 |
|
|
problems. For cards using 16bit io/mem more care is required, like
|
47 |
|
|
checking byte order issues, hacking memcpy_*_io etc.
|
48 |
|
|
|
49 |
|
|
|
50 |
|
|
Debugging
|
51 |
|
|
=========
|
52 |
|
|
|
53 |
|
|
Upon startup the kernel will usually output "ABCQGHIJ" into the SRAM,
|
54 |
|
|
preceded by the booter signature. This is a trace just in case something
|
55 |
|
|
went wrong during earliest setup stages of head.S.
|
56 |
|
|
**Changed** to preserve SRAM contents by default, this is only done when
|
57 |
|
|
requested - SRAM must start with '%LX$' signature to do this. '-d' option
|
58 |
|
|
to 'lxx' loader enables this.
|
59 |
|
|
|
60 |
|
|
SRAM can also be used as additional console device, use debug=mem.
|
61 |
|
|
This will save kernel startup msgs into SRAM, the screen will display
|
62 |
|
|
only the penguin - and shell prompt if it gets that far..
|
63 |
|
|
Unfortunately only 2000 bytes are available.
|
64 |
|
|
|
65 |
|
|
Serial console works and can also be used for debugging, see loader_txt
|
66 |
|
|
|
67 |
|
|
Most problems seem to be caused by fawlty or badly configured io-cards or
|
68 |
|
|
hard drives anyway.
|
69 |
|
|
Make sure to configure the parallel port as SPP and remove IRQ/DMA jumpers
|
70 |
|
|
for first testing. The Q40 does not support DMA and may have trouble with
|
71 |
|
|
parallel ports version of interrupts.
|
72 |
|
|
|
73 |
|
|
|
74 |
|
|
Q40 Hardware Description
|
75 |
|
|
========================
|
76 |
|
|
|
77 |
|
|
This is just an overview, see asm-m68k/* for details ask if you have any
|
78 |
|
|
questions.
|
79 |
|
|
|
80 |
|
|
The Q40 consists of a 68040@40 MHz, 1MB video RAM, up to 32MB RAM, AT-style
|
81 |
|
|
keyboard interface, 1 Programmable LED, 2x8bit DACs and up to 1MB ROM, 1MB
|
82 |
|
|
shadow ROM.
|
83 |
|
|
The Q60 has any of 68060 or 68LC060 and up to 128 MB RAM.
|
84 |
|
|
|
85 |
|
|
Most interfacing like floppy, IDE, serial and parallel ports is done via ISA
|
86 |
|
|
slots. The ISA io and mem range is mapped (sparse&byteswapped!) into separate
|
87 |
|
|
regions of the memory.
|
88 |
|
|
The main interrupt register IIRQ_REG will indicate whether an IRQ was internal
|
89 |
|
|
or from some ISA devices, EIRQ_REG can distinguish up to 8 ISA IRQs.
|
90 |
|
|
|
91 |
|
|
The Q40 custom chip is programmable to provide 2 periodic timers:
|
92 |
|
|
- 50 or 200 Hz - level 2, !!THIS CANT BE DISABLED!!
|
93 |
|
|
- 10 or 20 KHz - level 4, used for dma-sound
|
94 |
|
|
|
95 |
|
|
Linux uses the 200 Hz interrupt for timer and beep by default.
|
96 |
|
|
|
97 |
|
|
|
98 |
|
|
Interrupts
|
99 |
|
|
==========
|
100 |
|
|
|
101 |
|
|
q40 master chip handles only a subset of level triggered interrupts.
|
102 |
|
|
|
103 |
|
|
Linux has some requirements wrt interrupt architecture, these are
|
104 |
|
|
to my knowledge:
|
105 |
|
|
(a) interrupt handler must not be reentered even when sti() is called
|
106 |
|
|
from within handler
|
107 |
|
|
(b) working enable/disable_irq
|
108 |
|
|
|
109 |
|
|
Luckily these requirements are only important for drivers shared
|
110 |
|
|
with other architectures - ide,serial,parallel, ethernet.
|
111 |
|
|
q40ints.c now contains a trivial hack for (a), (b) is more difficult
|
112 |
|
|
because only irq's 4-15 can be disabled - and only all of them at once.
|
113 |
|
|
Thus disable_irq() can effectively block the machine if the driver goes
|
114 |
|
|
asleep.
|
115 |
|
|
One thing to keep in mind when hacking around the interrupt code is
|
116 |
|
|
that there is no way to find out which IRQ caused a request, [EI]IRQ_REG
|
117 |
|
|
displays current state of the various IRQ lines.
|
118 |
|
|
|
119 |
|
|
Keyboard
|
120 |
|
|
========
|
121 |
|
|
|
122 |
|
|
q40 receives AT make/break codes from the keyboard, these are translated to
|
123 |
|
|
the PC scancodes x86 Linux uses. So by theory every national keyboard should
|
124 |
|
|
work just by loading the appropriate x86 keytable - see any national-HOWTO.
|
125 |
|
|
|
126 |
|
|
Unfortunately the AT->PC translation isn't quite trivial and even worse, my
|
127 |
|
|
documentation of it is absolutely minimal - thus some exotic keys may not
|
128 |
|
|
behave exactly as expected.
|
129 |
|
|
|
130 |
|
|
There is still hope that it can be fixed completely though. If you encounter
|
131 |
|
|
problems, email me ideally this:
|
132 |
|
|
- exact keypress/release sequence
|
133 |
|
|
- 'showkey -s' run on q40, non-X session
|
134 |
|
|
- 'showkey -s' run on a PC, non-X session
|
135 |
|
|
- AT codes as displayed by the q40 debugging ROM
|
136 |
|
|
btw if the showkey output from PC and Q40 doesn't differ then you have some
|
137 |
|
|
classic configuration problem - don't send me anything in this case
|
138 |
|
|
|