Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |