Messages in this thread Patch in this message | | | Date | Sun, 22 Jun 1997 11:47:24 +0200 (MEST) | From | Hubert Mantel <> | Subject | Re: bzImage kernels don't boot on some hardware |
| |
Hello,
On Sat, 21 Jun 1997, Bruce Perens wrote:
> Debian 1.3 uses a bzImage kernel on its installation floppy. I have reports > from a number of users that bzImage kernels don't boot on their hardware from > either floppy or hard disk, but zImage kernels do. One of these users has an > IBM ThinkPad 365X 16MB. I'm tracking down what the others have. > > Has anyone seen this?
Yes, it's a known problem. Interestingly, using loadlin instead of lilo helps on most of the affected machines. Disabling caches and/or adding waitstates may help on some machines, too.
There exists a kernel patch from Jens Maurer which cures the problem on some of the machines, but not on all.
> Thanks > > Bruce
Hubert mantel@suse.de
----------------------------------------------------------------------- --- linux/arch/i386/boot/setup.S.old Sat Mar 30 19:58:57 1996 +++ linux/arch/i386/boot/setup.S Thu Aug 8 11:50:32 1996 @@ -446,10 +449,7 @@ ! now we are at the right place end_move_self: - lidt idt_48 ! load idt with 0,0 - lgdt gdt_48 ! load gdt with whatever appropriate - -! that was painless, now we enable A20 +! now we enable A20 call empty_8042 mov al,#0xD1 ! command write @@ -458,6 +458,32 @@ mov al,#0xDF ! A20 on out #0x60,al call empty_8042 + +! On some machines, there are cache coherency problems with +! addresses above 0x100000 after enabling the A20 gate. +! ( observed on a Toshiba Tecra 710CDT ) +! The cache still contains invalid data for the new situation, +! because 0x100000 is no longer an alias for 0x000000. +! To deal with this we just read some bytes silently and hope that +! the cache is reloaded afterwards. (Jens Maurer) + seg cs + test byte ptr loadflags,#LOADED_HIGH + jz end_cache_kludge + mov ax,#0xffff ! ds:si = 0x100000 + mov ds,ax + mov si,#0x10 + cld + mov cx,#0x2000 ! 16 KB + rep + lodsw + mov ax,cs + mov ds,ax ! restore DS +end_cache_kludge: + +! setup descriptor tables + + lidt idt_48 ! load idt with 0,0 + lgdt gdt_48 ! load gdt with whatever appropriate ! make sure any possible coprocessor is properly reset.. -----------------------------------------------------------------------
| |