lkml.org 
[lkml]   [1997]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: 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..
-----------------------------------------------------------------------


\
 
 \ /
  Last update: 2005-03-22 13:39    [W:0.031 / U:0.096 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site