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