diff options
Diffstat (limited to 'arch/m68k/q40/README')
-rw-r--r-- | arch/m68k/q40/README | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/arch/m68k/q40/README b/arch/m68k/q40/README new file mode 100644 index 000000000000..6bdbf4879570 --- /dev/null +++ b/arch/m68k/q40/README | |||
@@ -0,0 +1,138 @@ | |||
1 | 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 lose 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 | |||