* 2.6.0 incorrect memory sizing (without a full BIOS)..
@ 2003-12-19 5:04 Dave Airlie
2003-12-19 8:31 ` William Lee Irwin III
0 siblings, 1 reply; 4+ messages in thread
From: Dave Airlie @ 2003-12-19 5:04 UTC (permalink / raw)
To: linux-kernel
Hi all,
I've got an internal development board based on the Intel 815
chipset and the Intel ACSFL mini-BIOS for embedded systems, and then using
grub 0.93 to boot Linux.
under 2.4 my memory is correctly sized at 256MB, but under 2.6 I'm only
seeing 64MB,
2.6 gives:
BIOS-provided physical RAM map:
BIOS-88: 0000000000000000 - 000000000009f000 (usable)
BIOS-88: 0000000000100000 - 00000000040ffc00 (usable)
64MB LOWMEM available
2.4 gives:
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 00000000000a0000 (usable)
BIOS-e820: 00000000000e0000 - 0000000000100000 type 5
BIOS-e820: 0000000000100000 - 000000000ff00000 (usable)
BIOS-e820: 000000000ff00000 - 0000000010000000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fec00400 type 6
BIOS-e820: 00000000fee00000 - 00000000fee00400 type 7
BIOS-e820: 00000000fff00000 - 0000000100000000 type 5
So is this 2.6 just being more fussy about the contents of the e820 that
my "BIOS" is supplying and falling back to the old style detection?
Dave.
--
David Airlie, Software Engineer
http://www.skynet.ie/~airlied / airlied at skynet.ie
pam_smb / Linux DECstation / Linux VAX / ILUG person
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 2.6.0 incorrect memory sizing (without a full BIOS)..
2003-12-19 5:04 2.6.0 incorrect memory sizing (without a full BIOS) Dave Airlie
@ 2003-12-19 8:31 ` William Lee Irwin III
2003-12-22 17:41 ` Randy.Dunlap
0 siblings, 1 reply; 4+ messages in thread
From: William Lee Irwin III @ 2003-12-19 8:31 UTC (permalink / raw)
To: Dave Airlie; +Cc: linux-kernel
On Fri, Dec 19, 2003 at 05:04:25AM +0000, Dave Airlie wrote:
> I've got an internal development board based on the Intel 815
> chipset and the Intel ACSFL mini-BIOS for embedded systems, and then using
> grub 0.93 to boot Linux.
> under 2.4 my memory is correctly sized at 256MB, but under 2.6 I'm only
> seeing 64MB,
[... e88/e820 snipped ...]
> So is this 2.6 just being more fussy about the contents of the e820 that
> my "BIOS" is supplying and falling back to the old style detection?
We've had one other report of something like this. I don't see any
obvious reason why setup.S should be failing in 2.6; diff below. It
could be some kind of binutils issue.
Could I get dmesg and .config from 2.4 and 2.5?
-- wli
The relevant code starts around line 293 and is untouched.
--- linux-2.4/arch/i386/boot/setup.S 2003-12-07 06:38:32.000000000 -0800
+++ linux-2.5/arch/i386/boot/setup.S 2003-12-05 18:58:56.000000000 -0800
@@ -44,13 +44,11 @@
*
* New A20 code ported from SYSLINUX by H. Peter Anvin. AMD Elan bugfixes
* by Robert Schwebel, December 2001 <robert@schwebel.de>
- *
+ *
* BIOS Enhanced Disk Drive support
* by Matt Domsch <Matt_Domsch@dell.com> October 2002
* conformant to T13 Committee www.t13.org
* projects 1572D, 1484D, 1386D, 1226DT
- * disk signature read by Matt Domsch <Matt_Domsch@dell.com>
- * and Andrew Wilks <Andrew_Wilks@dell.com> September 2003
*/
#include <linux/config.h>
@@ -59,7 +57,7 @@
#include <linux/compile.h>
#include <asm/boot.h>
#include <asm/e820.h>
-#include <asm/edd.h>
+#include <asm/edd.h>
#include <asm/page.h>
/* Signature words to ensure LILO loaded us right */
@@ -164,7 +162,7 @@
# can be located anywhere in
# low memory 0x10000 or higher.
-ramdisk_max: .long __MAXMEM-1 # (Header version 0x0203 or later)
+ramdisk_max: .long MAXMEM-1 # (Header version 0x0203 or later)
# The highest safe address for
# the contents of an initrd
@@ -215,7 +213,7 @@
# Part of above routine, this one just prints ascii al
prtchr: pushw %ax
pushw %cx
- xorb %bh, %bh
+ movw $7,%bx
movw $0x01, %cx
movb $0x0e, %ah
int $0x10
@@ -478,6 +476,24 @@
movsb
popw %ds
no_mca:
+#ifdef CONFIG_X86_VOYAGER
+ movb $0xff, 0x40 # flag on config found
+ movb $0xc0, %al
+ mov $0xff, %ah
+ int $0x15 # put voyager config info at es:di
+ jc no_voyager
+ movw $0x40, %si # place voyager info in apm table
+ cld
+ movw $7, %cx
+voyager_rep:
+ movb %es:(%di), %al
+ movb %al,(%si)
+ incw %di
+ incw %si
+ decw %cx
+ jnz voyager_rep
+no_voyager:
+#endif
# Check for PS/2 pointing device
movw %cs, %ax # aka SETUPSEG
subw $DELTA_INITSEG, %ax # aka INITSEG
@@ -490,6 +506,17 @@
movw $0xAA, (0x1ff) # device present
no_psmouse:
+#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
+ movl $0x0000E980, %eax # IST Support
+ movl $0x47534943, %edx # Request value
+ int $0x15
+
+ movl %eax, (96)
+ movl %ebx, (100)
+ movl %ecx, (104)
+ movl %edx, (108)
+#endif
+
#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE)
# Then check for an APM BIOS...
# %ds points to the bootsector
@@ -551,25 +578,6 @@
#endif
#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
-# Read the first sector of device 80h and store the 4-byte signature
- movl $0xFFFFFFFF, %eax
- movl %eax, (DISK80_SIG_BUFFER) # assume failure
- movb $READ_SECTORS, %ah
- movb $1, %al # read 1 sector
- movb $0x80, %dl # from device 80
- movb $0, %dh # at head 0
- movw $1, %cx # cylinder 0, sector 0
- pushw %es
- pushw %ds
- popw %es
- movw $EDDBUF, %bx
- int $0x13
- jc disk_sig_done
- movl (EDDBUF+MBR_SIG_OFFSET), %eax
- movl %eax, (DISK80_SIG_BUFFER) # store success
-disk_sig_done:
- popw %es
-
# Do the BIOS Enhanced Disk Drive calls
# This consists of two calls:
# int 13h ah=41h "Check Extensions Present"
@@ -591,13 +599,13 @@
# A second one-byte buffer, EDDNR, in the empty_zero_page stores
# the number of BIOS devices which exist, up to EDDMAXNR.
# In setup.c, copy_edd() stores both empty_zero_page buffers away
-# for later use, as they would get overwritten otherwise.
+# for later use, as they would get overwritten otherwise.
# This code is sensitive to the size of the structs in edd.h
-edd_start:
+edd_start:
# %ds points to the bootsector
# result buffer for fn48
movw $EDDBUF+EDDEXTSIZE, %si # in ds:si, fn41 results
- # kept just before that
+ # kept just before that
movb $0, (EDDNR) # zero value at EDDNR
movb $0x80, %dl # BIOS device 0x80
@@ -614,8 +622,8 @@
movb %ah, %ds:-3(%si) # store version
movw %cx, %ds:-2(%si) # store extensions
incb (EDDNR) # note that we stored something
-
-edd_get_device_params:
+
+edd_get_device_params:
movw $EDDPARMSIZE, %ds:(%si) # put size
movb $GETDEVICEPARAMETERS, %ah # Function 48
int $0x13 # make the call
@@ -629,15 +637,15 @@
incb %dl # increment to next device
cmpb $EDDMAXNR, (EDDNR) # Out of space?
jb edd_check_ext # keep looping
-
-edd_done:
+
+edd_done:
#endif
# Now we want to move to protected mode ...
cmpw $0, %cs:realmode_swtch
jz rmodeswtch_normal
- lcall %cs:realmode_swtch
+ lcall *%cs:realmode_swtch
jmp rmodeswtch_end
@@ -751,8 +759,8 @@
movb $0x02, %al # alternate A20 gate
outb %al, $0x92 # this works on SC410/SC520
a20_elan_wait:
- call a20_test
- jz a20_elan_wait
+ call a20_test
+ jz a20_elan_wait
jmp a20_done
#endif
@@ -761,6 +769,7 @@
A20_ENABLE_LOOPS = 255 # Total loops to try
+#ifndef CONFIG_X86_VOYAGER
a20_try_loop:
# First, see if we are on a system with no A20 gate.
@@ -779,11 +788,14 @@
jnz a20_done
# Try enabling A20 through the keyboard controller
+#endif /* CONFIG_X86_VOYAGER */
a20_kbc:
call empty_8042
+#ifndef CONFIG_X86_VOYAGER
call a20_test # Just in case the BIOS worked
jnz a20_done # but had a delayed reaction.
+#endif
movb $0xD1, %al # command write
outb %al, $0x64
@@ -793,6 +805,7 @@
outb %al, $0x60
call empty_8042
+#ifndef CONFIG_X86_VOYAGER
# Wait until a20 really *is* enabled; it can take a fair amount of
# time on certain systems; Toshiba Tecras are known to have this
# problem.
@@ -840,6 +853,7 @@
# If we get here, all is good
a20_done:
+#endif /* CONFIG_X86_VOYAGER */
# set up gdt and idt
lidt idt_48 # load idt with 0,0
xorl %eax, %eax # Compute gdt_base
@@ -890,8 +904,11 @@
movw %cs, %si
subw $DELTA_INITSEG, %si
shll $4, %esi # Convert to 32-bit pointer
+
+# jump to startup_32 in arch/i386/kernel/head.S
+#
# NOTE: For high loaded big kernels we need a
-# jmpi 0x100000,__KERNEL_CS
+# jmpi 0x100000,__BOOT_CS
#
# but we yet haven't reloaded the CS register, so the default size
# of the target offset still is 16 bit.
@@ -902,7 +919,7 @@
.byte 0x66, 0xea # prefix + jmpi-opcode
code32: .long 0x1000 # will be set to 0x100000
# for big kernels
- .word __KERNEL_CS
+ .word __BOOT_CS
# Here's a bunch of information about your current kernel..
kernel_version: .ascii UTS_RELEASE
@@ -1006,6 +1023,7 @@
.string "INT15 refuses to access high mem, giving up."
+#ifndef CONFIG_X86_VOYAGER
# This routine tests whether or not A20 is enabled. If so, it
# exits with zf = 0.
#
@@ -1036,6 +1054,8 @@
popw %cx
ret
+#endif /* CONFIG_X86_VOYAGER */
+
# This routine checks that the keyboard command queue is empty
# (after emptying the output buffers)
#
@@ -1095,9 +1115,20 @@
ret
# Descriptor tables
+#
+# NOTE: The intel manual says gdt should be sixteen bytes aligned for
+# efficiency reasons. However, there are machines which are known not
+# to boot with misaligned GDTs, so alter this at your peril! If you alter
+# GDT_ENTRY_BOOT_CS (in asm/segment.h) remember to leave at least two
+# empty GDT entries (one for NULL and one reserved).
+#
+# NOTE: On some CPUs, the GDT must be 8 byte aligned. This is
+# true for the Voyager Quad CPU card which will not boot without
+# This directive. 16 byte aligment is recommended by intel.
+#
+ .align 16
gdt:
- .word 0, 0, 0, 0 # dummy
- .word 0, 0, 0, 0 # unused
+ .fill GDT_ENTRY_BOOT_CS,8,0
.word 0xFFFF # 4Gb - (0x100000*0x1000 = 4Gb)
.word 0 # base address = 0
@@ -1110,13 +1141,17 @@
.word 0x9200 # data read/write
.word 0x00CF # granularity = 4096, 386
# (+5th nibble of limit)
+gdt_end:
+ .align 4
+
+ .word 0 # alignment byte
idt_48:
.word 0 # idt limit = 0
.word 0, 0 # idt base = 0L
-gdt_48:
- .word 0x8000 # gdt limit=2048,
- # 256 GDT entries
+ .word 0 # alignment byte
+gdt_48:
+ .word gdt_end - gdt - 1 # gdt limit
.word 0, 0 # gdt base (filled in later)
# Include video setup & detection code
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 2.6.0 incorrect memory sizing (without a full BIOS)..
2003-12-19 8:31 ` William Lee Irwin III
@ 2003-12-22 17:41 ` Randy.Dunlap
2003-12-22 17:56 ` William Lee Irwin III
0 siblings, 1 reply; 4+ messages in thread
From: Randy.Dunlap @ 2003-12-22 17:41 UTC (permalink / raw)
To: William Lee Irwin III; +Cc: airlied, linux-kernel
On Fri, 19 Dec 2003 00:31:48 -0800 William Lee Irwin III <wli@holomorphy.com> wrote:
| On Fri, Dec 19, 2003 at 05:04:25AM +0000, Dave Airlie wrote:
| > I've got an internal development board based on the Intel 815
| > chipset and the Intel ACSFL mini-BIOS for embedded systems, and then using
| > grub 0.93 to boot Linux.
| > under 2.4 my memory is correctly sized at 256MB, but under 2.6 I'm only
| > seeing 64MB,
| [... e88/e820 snipped ...]
| > So is this 2.6 just being more fussy about the contents of the e820 that
| > my "BIOS" is supplying and falling back to the old style detection?
|
| We've had one other report of something like this. I don't see any
| obvious reason why setup.S should be failing in 2.6; diff below. It
| could be some kind of binutils issue.
|
| Could I get dmesg and .config from 2.4 and 2.5?
Did we ever get these message logs and config files?
--
~Randy
MOTD: Always include version info.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: 2.6.0 incorrect memory sizing (without a full BIOS)..
2003-12-22 17:41 ` Randy.Dunlap
@ 2003-12-22 17:56 ` William Lee Irwin III
0 siblings, 0 replies; 4+ messages in thread
From: William Lee Irwin III @ 2003-12-22 17:56 UTC (permalink / raw)
To: Randy.Dunlap; +Cc: airlied, linux-kernel
On Fri, 19 Dec 2003 00:31:48 -0800 William Lee Irwin III <wli@holomorphy.com> wrote:
> | Could I get dmesg and .config from 2.4 and 2.5?
>
On Mon, Dec 22, 2003 at 09:41:10AM -0800, Randy.Dunlap wrote:
> Did we ever get these message logs and config files?
He told me he was imminently leaving for some kind of travel and
wouldn't be back for a few weeks.
-- wli
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-12-22 17:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-12-19 5:04 2.6.0 incorrect memory sizing (without a full BIOS) Dave Airlie
2003-12-19 8:31 ` William Lee Irwin III
2003-12-22 17:41 ` Randy.Dunlap
2003-12-22 17:56 ` William Lee Irwin III
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.