adl855pc support
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1772 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
132368b4c5
commit
52c2277a1b
|
@ -1,4 +1,4 @@
|
||||||
extern struct chip_operations cpu_intel_socket_mPGA479_control;
|
extern struct chip_operations cpu_intel_socket_mPGA479M_ops;
|
||||||
|
|
||||||
struct cpu_intel_socket_mPGA479_config {
|
struct cpu_intel_socket_mPGA479M_config {
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
|
|
||||||
|
|
||||||
struct chip_opertations cpu_intel_socket_mPGA479M_control = {
|
struct chip_operations cpu_intel_socket_mPGA479M_ops = {
|
||||||
CHIP_NAME("socket mPGA479M")
|
CHIP_NAME("socket mPGA479M")
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,4 +2,4 @@ struct northbridge_intel_i855pm_config
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct chip_operations northbridge_intel_i855pm_control;
|
extern struct chip_operations northbridge_intel_i855pm_ops;
|
||||||
|
|
|
@ -156,7 +156,7 @@ static void enable_dev(struct device *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct chip_operations northbridge_intel_i855pm_control = {
|
struct chip_operations northbridge_intel_i855pm_ops = {
|
||||||
CHIP_NAME("intel i855pm Northbridge")
|
CHIP_NAME("intel i855pm Northbridge")
|
||||||
.enable_dev = enable_dev,
|
.enable_dev = enable_dev,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/* This was originally for the e7500, modified for i855pm
|
/* This was originally for the e7500, modified for i855pm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -44,8 +43,8 @@
|
||||||
#define BURST_LENGTH BURST_4
|
#define BURST_LENGTH BURST_4
|
||||||
#define BURST_TYPE BURST_INTERLEAVED
|
#define BURST_TYPE BURST_INTERLEAVED
|
||||||
#define CAS_LATENCY CAS_2_0
|
#define CAS_LATENCY CAS_2_0
|
||||||
//#define CAS_LATENCY CAS_2_5
|
/*#define CAS_LATENCY CAS_2_5*/
|
||||||
//#define CAS_LATENCY CAS_1_5
|
/*#define CAS_LATENCY CAS_1_5*/
|
||||||
|
|
||||||
/* WOW! this could be bad! sets casl to 2 without checking! */
|
/* WOW! this could be bad! sets casl to 2 without checking! */
|
||||||
#define MRS_VALUE (MODE_NORM | CAS_LATENCY | BURST_TYPE | BURST_LENGTH)
|
#define MRS_VALUE (MODE_NORM | CAS_LATENCY | BURST_TYPE | BURST_LENGTH)
|
||||||
|
@ -75,7 +74,7 @@ static inline void do_ram_command (const struct mem_controller *ctrl, uint32_t v
|
||||||
/* %ecx - initial address to read from */
|
/* %ecx - initial address to read from */
|
||||||
/* Compute the offset */
|
/* Compute the offset */
|
||||||
dword = value >> 16;
|
dword = value >> 16;
|
||||||
// for(i=0;i<4;i++) {
|
/* for(i=0;i<4;i++) {*/
|
||||||
for(i=0;i<1;i++) {
|
for(i=0;i<1;i++) {
|
||||||
/* Set the ram command */
|
/* Set the ram command */
|
||||||
byte = pci_read_config8(ctrl->d0, 0x70);
|
byte = pci_read_config8(ctrl->d0, 0x70);
|
||||||
|
@ -131,6 +130,8 @@ static inline void ram_mrs(const struct mem_controller *ctrl, uint32_t value){
|
||||||
/* Transform it into the form expected by SDRAM */
|
/* Transform it into the form expected by SDRAM */
|
||||||
dword = ram_cas_latency[(byte>>5) & 1];
|
dword = ram_cas_latency[(byte>>5) & 1];
|
||||||
#warning RAM_MRS -- using BROKEN hard-wired CAS 2.0. FIX ME SOON
|
#warning RAM_MRS -- using BROKEN hard-wired CAS 2.0. FIX ME SOON
|
||||||
|
/*
|
||||||
|
*/
|
||||||
value |= (dword<<(16+MD_SHIFT));
|
value |= (dword<<(16+MD_SHIFT));
|
||||||
|
|
||||||
value |= (MODE_NORM | BURST_TYPE | BURST_LENGTH) << (16+MD_SHIFT);
|
value |= (MODE_NORM | BURST_TYPE | BURST_LENGTH) << (16+MD_SHIFT);
|
||||||
|
@ -290,8 +291,8 @@ static const long register_values[] = {
|
||||||
* 10 == Write Only (Writes to DRAM, Reads to memory mapped I/O space)
|
* 10 == Write Only (Writes to DRAM, Reads to memory mapped I/O space)
|
||||||
* 11 == Normal (All Access go to DRAM)
|
* 11 == Normal (All Access go to DRAM)
|
||||||
*/
|
*/
|
||||||
// 0x90, 0xcccccf7f, (0x00 << 0) | (0x30 << 8) | (0x33 << 16) | (0x33 << 24),
|
/* 0x90, 0xcccccf7f, (0x00 << 0) | (0x30 << 8) | (0x33 << 16) | (0x33 << 24),*/
|
||||||
//0x94, 0xcccccccc, (0x33 << 0) | (0x33 << 8) | (0x33 << 16) | (0x33 << 24),
|
/*0x94, 0xcccccccc, (0x33 << 0) | (0x33 << 8) | (0x33 << 16) | (0x33 << 24),*/
|
||||||
|
|
||||||
|
|
||||||
/* FIXME why was I attempting to set a reserved bit? */
|
/* FIXME why was I attempting to set a reserved bit? */
|
||||||
|
@ -373,7 +374,7 @@ static void write_8dwords(uint32_t src_addr, uint32_t dst_addr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define SLOW_DOWN_IO inb(0x80);
|
/*#define SLOW_DOWN_IO inb(0x80);*/
|
||||||
#define SLOW_DOWN_IO udelay(40);
|
#define SLOW_DOWN_IO udelay(40);
|
||||||
|
|
||||||
|
|
||||||
|
@ -602,58 +603,6 @@ static struct dimm_size spd_get_dimm_size(unsigned device)
|
||||||
print_debug("\r\n");
|
print_debug("\r\n");
|
||||||
#endif
|
#endif
|
||||||
goto out;
|
goto out;
|
||||||
#if 0
|
|
||||||
value = spd_read_byte(device, 3); /* rows */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
// if ((value & 0xf) == 0) goto val_err;
|
|
||||||
sz.side1 += value & 0xf;
|
|
||||||
|
|
||||||
value = spd_read_byte(device, 4); /* columns */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
// if ((value & 0xf) == 0) goto val_err;
|
|
||||||
sz.side1 += value & 0xf;
|
|
||||||
|
|
||||||
value = spd_read_byte(device, 17); /* banks */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
// if ((value & 0xff) == 0) goto val_err;
|
|
||||||
value &=0xff;
|
|
||||||
sz.side1 += log2(value);
|
|
||||||
|
|
||||||
/* Get the module data width and convert it to a power of two */
|
|
||||||
value = spd_read_byte(device, 7); /* (high byte) */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
value &= 0xff;
|
|
||||||
value <<= 8;
|
|
||||||
|
|
||||||
low = spd_read_byte(device, 6); /* (low byte) */
|
|
||||||
if (low < 0) goto hw_err;
|
|
||||||
value |= (low & 0xff);
|
|
||||||
// if ((value != 72) && (value != 64)) goto val_err;
|
|
||||||
sz.side1 += log2(value);
|
|
||||||
|
|
||||||
/* side 2 */
|
|
||||||
value = spd_read_byte(device, 5); /* number of physical banks */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
if (value == 1) goto out;
|
|
||||||
// if (value != 2) goto val_err;
|
|
||||||
|
|
||||||
/* Start with the symmetrical case */
|
|
||||||
sz.side2 = sz.side1;
|
|
||||||
|
|
||||||
value = spd_read_byte(device, 3); /* rows */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
if ((value & 0xf0) == 0) goto out; /* If symmetrical we are done */
|
|
||||||
sz.side2 -= (value & 0x0f); /* Subtract out rows on side 1 */
|
|
||||||
sz.side2 += ((value >> 4) & 0x0f); /* Add in rows on side 2 */
|
|
||||||
|
|
||||||
value = spd_read_byte(device, 4); /* columns */
|
|
||||||
if (value < 0) goto hw_err;
|
|
||||||
// if ((value & 0xff) == 0) goto val_err;
|
|
||||||
sz.side2 -= (value & 0x0f); /* Subtract out columns on side 1 */
|
|
||||||
sz.side2 += ((value >> 4) & 0x0f); /* Add in columsn on side 2 */
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
val_err:
|
val_err:
|
||||||
die("Bad SPD value\r\n");
|
die("Bad SPD value\r\n");
|
||||||
/* If an hw_error occurs report that I have no memory */
|
/* If an hw_error occurs report that I have no memory */
|
||||||
|
@ -731,7 +680,7 @@ static long spd_set_row_attributes(const struct mem_controller *ctrl, long dimm_
|
||||||
*/
|
*/
|
||||||
sz.side1-=14;
|
sz.side1-=14;
|
||||||
|
|
||||||
/* Place in the %ebp the dra place holder */ //i
|
/* Place in the %ebp the dra place holder */ /*i*/
|
||||||
word &= ~(7<<i);
|
word &= ~(7<<i);
|
||||||
word |= sz.side1<<(i<<3);
|
word |= sz.side1<<(i<<3);
|
||||||
|
|
||||||
|
@ -747,7 +696,7 @@ static long spd_set_row_attributes(const struct mem_controller *ctrl, long dimm_
|
||||||
/* Convert to the format needed for the DRA register */
|
/* Convert to the format needed for the DRA register */
|
||||||
sz.side2-=14;
|
sz.side2-=14;
|
||||||
|
|
||||||
/* Place in the %ebp the dra place holder */ //i
|
/* Place in the %ebp the dra place holder */ /*i*/
|
||||||
word &= ~(7<<i);
|
word &= ~(7<<i);
|
||||||
word |= sz.side2<<((i<<3) + 4 );
|
word |= sz.side2<<((i<<3) + 4 );
|
||||||
|
|
||||||
|
@ -762,241 +711,6 @@ static long spd_set_row_attributes(const struct mem_controller *ctrl, long dimm_
|
||||||
return dimm_mask;
|
return dimm_mask;
|
||||||
|
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Routine: sdram_read_paired_byte
|
|
||||||
* Arguments: %esp return address
|
|
||||||
* %bl device on the smbus to read from
|
|
||||||
* %bh address on the smbus to read
|
|
||||||
* Results:
|
|
||||||
* zf clear
|
|
||||||
* byte read in %al
|
|
||||||
* On Error:
|
|
||||||
* zf set
|
|
||||||
* %eax trashed
|
|
||||||
*
|
|
||||||
* Preserved: %ebx, %esi, %edi
|
|
||||||
*
|
|
||||||
* Trashed: %eax, %ecx, %edx, %ebp, %esp, %eflags
|
|
||||||
* Used: %eax, %ebx, %ecx, %edx, %esp, %eflags
|
|
||||||
*
|
|
||||||
* Effects: Reads two spd bytes from both ram channesl
|
|
||||||
* and errors if they are not equal.
|
|
||||||
* It then returns the equal result.
|
|
||||||
*/
|
|
||||||
static spd_read_paired_byte () {
|
|
||||||
movl %esp, %ebp
|
|
||||||
CALLSP(smbus_read_byte)
|
|
||||||
setnz %cl
|
|
||||||
movb %al, %ch
|
|
||||||
addb $(SMBUS_MEM_CHANNEL_OFF), %bl
|
|
||||||
CALLSP(smbus_read_byte)
|
|
||||||
movb %ch, %ah
|
|
||||||
setnz %ch
|
|
||||||
subb $(SMBUS_MEM_CHANNEL_OFF), %bl
|
|
||||||
|
|
||||||
/* See if dimms on both sides are equally present */
|
|
||||||
cmp %cl, %ch
|
|
||||||
jne sdram_presence_mismatch
|
|
||||||
|
|
||||||
/* Leave if I have no data */
|
|
||||||
testb %cl, %cl
|
|
||||||
jz spd_verify_byte_out
|
|
||||||
|
|
||||||
/* Verify the data is identical */
|
|
||||||
cmp %ah, %al
|
|
||||||
jne sdram_value_mismatch
|
|
||||||
|
|
||||||
/* Clear the zero flag */
|
|
||||||
testb %cl, %cl
|
|
||||||
spd_verify_byte_out:
|
|
||||||
movl %ebp, %esp
|
|
||||||
RETSP
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Routine: spd_verify_dimms
|
|
||||||
* Arguments: none
|
|
||||||
* Results: none
|
|
||||||
* Preserved: none
|
|
||||||
* Trashed: %eax, %ebx, %ecx, %edx, %ebp, %esi, %edi, %esp, %eflags
|
|
||||||
* Used: %eax, %ebx, %ecx, %edx, %ebp, %esi, %edi, %esp, %eflags
|
|
||||||
*
|
|
||||||
* Effects:
|
|
||||||
* - Verify all interesting spd information
|
|
||||||
* matches for both dimm channels.
|
|
||||||
* - Additional error checks that can be easily done
|
|
||||||
* here are computed as well, so I don't need to
|
|
||||||
* worry about them later.
|
|
||||||
*/
|
|
||||||
static spd_verify_dimms() {
|
|
||||||
movl $(SMBUS_MEM_DEVICE_START), %ebx
|
|
||||||
spd_verify_dimm:
|
|
||||||
/* Verify this is DDR SDRAM */
|
|
||||||
movb $2, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_verify_next_dimm
|
|
||||||
cmpb $7, %al
|
|
||||||
jne invalid_dimm_type
|
|
||||||
|
|
||||||
/* Verify the row addresses */
|
|
||||||
movb $3, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $0x0f, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
/* Column addresses */
|
|
||||||
movb $4, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $0xf, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
/* Physical Banks */
|
|
||||||
movb $5, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
cmp $1, %al
|
|
||||||
jb spd_invalid_data
|
|
||||||
cmp $2, %al
|
|
||||||
ja spd_invalid_data
|
|
||||||
|
|
||||||
/* Module Data Width */
|
|
||||||
movb $7, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
cmpb $0, %al
|
|
||||||
jne spd_invalid_data
|
|
||||||
|
|
||||||
movb $6, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
cmpb $64, %al
|
|
||||||
je 1f
|
|
||||||
cmpb $72, %al
|
|
||||||
je 1f
|
|
||||||
jmp spd_unsupported_data
|
|
||||||
1:
|
|
||||||
|
|
||||||
/* Cycle time at highest CAS latency CL=X */
|
|
||||||
movb $9, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
/* SDRAM type */
|
|
||||||
movb $11, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
/* Refresh Interval */
|
|
||||||
movb $12, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
/* SDRAM Width */
|
|
||||||
movb $13, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
andb $0x7f, %al
|
|
||||||
cmpb $4, %al
|
|
||||||
je 1f
|
|
||||||
cmpb $8, %al
|
|
||||||
je 1f
|
|
||||||
jmp spd_unsupported_data
|
|
||||||
1:
|
|
||||||
|
|
||||||
/* Back-to-Back Random Column Accesses */
|
|
||||||
movb $15, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb %al, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
cmpb $4, %al
|
|
||||||
ja spd_unsupported_data
|
|
||||||
|
|
||||||
/* Burst Lengths */
|
|
||||||
movb $16, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $(1<<2), %al
|
|
||||||
jz spd_unsupported_data
|
|
||||||
|
|
||||||
/* Logical Banks */
|
|
||||||
movb $17, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb %al, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
/* Supported CAS Latencies */
|
|
||||||
movb $18, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $(1 << 1), %al /* CL 1.5 */
|
|
||||||
jnz 1f
|
|
||||||
testb $(1 << 2), %al /* CL 2.0 */
|
|
||||||
jnz 1f
|
|
||||||
testb $(1 << 3), %al /* CL 2.5 */
|
|
||||||
jnz 1f
|
|
||||||
jmp spd_unsupported_data
|
|
||||||
1:
|
|
||||||
|
|
||||||
/* Cycle time at Cas Latency (CLX - 0.5) */
|
|
||||||
movb $23, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
/* Cycle time at Cas Latency (CLX - 1.0) */
|
|
||||||
movb $26, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
/* tRP Row precharge time */
|
|
||||||
movb $27, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $0xfc, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
|
|
||||||
/* tRCD RAS to CAS */
|
|
||||||
movb $29, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $0xfc, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
/* tRAS Activate to Precharge */
|
|
||||||
movb $30, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb %al, %al
|
|
||||||
jz spd_invalid_data
|
|
||||||
|
|
||||||
/* Module Bank Density */
|
|
||||||
movb $31, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
testb $(1<<2), %al /* 16MB */
|
|
||||||
jnz spd_unsupported_data
|
|
||||||
testb $(1<<3), %al
|
|
||||||
jnz spd_unsupported_data /* 32MB */
|
|
||||||
|
|
||||||
/* Address and Command Hold Time After Clock */
|
|
||||||
movb $33, %bh
|
|
||||||
CALLSP(spd_read_paired_byte)
|
|
||||||
jz spd_missing_data
|
|
||||||
|
|
||||||
spd_verify_next_dimm:
|
|
||||||
/* go to the next DIMM */
|
|
||||||
addb $(SMBUS_MEM_DEVICE_INC), %bl /* increment the smbus device */
|
|
||||||
cmpb $SMBUS_MEM_DEVICE_END, %bl
|
|
||||||
jbe spd_verify_dimm
|
|
||||||
spd_verify_dimms_out:
|
|
||||||
RET_LABEL(spd_verify_dimms)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#define spd_pre_init "Reading SPD data...\r\n"
|
#define spd_pre_init "Reading SPD data...\r\n"
|
||||||
#define spd_pre_set "setting based on SPD data...\r\n"
|
#define spd_pre_set "setting based on SPD data...\r\n"
|
||||||
#define spd_post_init "done\r\n"
|
#define spd_post_init "done\r\n"
|
||||||
|
@ -1037,9 +751,9 @@ static long spd_set_dram_controller_mode (const struct mem_controller *ctrl, lon
|
||||||
|
|
||||||
/* Read the inititial state */
|
/* Read the inititial state */
|
||||||
dword = pci_read_config32(ctrl->d0, 0x70);
|
dword = pci_read_config32(ctrl->d0, 0x70);
|
||||||
// WTF?
|
/* WTF? */
|
||||||
//dword |= 0x10000;
|
/*dword |= 0x10000;*/
|
||||||
#if 0 // DEBUG_RAM_CONFIG
|
#if 0 /* DEBUG_RAM_CONFIG*/
|
||||||
print_debug("spd_detect_dimms: 0x70.l is:");
|
print_debug("spd_detect_dimms: 0x70.l is:");
|
||||||
print_debug_hex32(dword);
|
print_debug_hex32(dword);
|
||||||
print_debug("\r\n");
|
print_debug("\r\n");
|
||||||
|
@ -1047,13 +761,7 @@ static long spd_set_dram_controller_mode (const struct mem_controller *ctrl, lon
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* Test if ECC cmos option is enabled */
|
/* Test if ECC cmos option is enabled */
|
||||||
movb $RTC_BOOT_BYTE, %al
|
|
||||||
outb %al, $0x70
|
|
||||||
inb $0x71, %al
|
|
||||||
testb $(1<<2), %al
|
|
||||||
jnz 1f
|
|
||||||
/* Clear the ecc enable */
|
/* Clear the ecc enable */
|
||||||
andl $~(3 << 20), %esi
|
|
||||||
1:
|
1:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1087,7 +795,7 @@ static long spd_set_dram_controller_mode (const struct mem_controller *ctrl, lon
|
||||||
if(value < 0 ) continue;
|
if(value < 0 ) continue;
|
||||||
value &= 0x7f;
|
value &= 0x7f;
|
||||||
if(value > MAX_SPD_REFRESH_RATE) { print_err("unsupported refresh rate\r\n");}
|
if(value > MAX_SPD_REFRESH_RATE) { print_err("unsupported refresh rate\r\n");}
|
||||||
// if(value == 0xff) { print_err("unsupported refresh rate\r\n");}
|
/* if(value == 0xff) { print_err("unsupported refresh rate\r\n");}*/
|
||||||
|
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
print_debug("spd_detect_dimms: ref rate index:");
|
print_debug("spd_detect_dimms: ref rate index:");
|
||||||
|
@ -1131,12 +839,11 @@ static long spd_enable_clocks(const struct mem_controller *ctrl, long dimm_mask)
|
||||||
|
|
||||||
/* Read the inititial state */
|
/* Read the inititial state */
|
||||||
dword = pci_read_config32(ctrl->d0, 0x8c);
|
dword = pci_read_config32(ctrl->d0, 0x8c);
|
||||||
#if 0
|
/*
|
||||||
# Intel clears top bit here, should we?
|
Intel clears top bit here, should we?
|
||||||
# No the default is on and for normal timming it should be on. Tom Z
|
No the default is on and for normal timming it should be on. Tom Z
|
||||||
andl $0x7f, %esi
|
andl $0x7f, %esi
|
||||||
#endif
|
*/
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < DIMM_SOCKETS; i++) {
|
for(i = 0; i < DIMM_SOCKETS; i++) {
|
||||||
if (!(dimm_mask & (1 << i))) {
|
if (!(dimm_mask & (1 << i))) {
|
||||||
|
@ -1166,8 +873,8 @@ static const uint16_t cas_latency_80[] = {
|
||||||
* Steven James 02/06/2003
|
* Steven James 02/06/2003
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//# .byte 0x05, 0x01, 0x06
|
/*# .byte 0x05, 0x01, 0x06 */
|
||||||
//# .byte 0xb5, 0xb1, 0xb6
|
/*# .byte 0xb5, 0xb1, 0xb6 */
|
||||||
0x0, 0x0bb1, 0x0662 /* RCVEN */
|
0x0, 0x0bb1, 0x0662 /* RCVEN */
|
||||||
};
|
};
|
||||||
static const uint16_t cas_latency_80_4dimms[] = {
|
static const uint16_t cas_latency_80_4dimms[] = {
|
||||||
|
@ -1187,7 +894,7 @@ static long spd_set_cas_latency(const struct mem_controller *ctrl, long dimm_mas
|
||||||
/* Initially allow cas latencies 2.5, 2.0
|
/* Initially allow cas latencies 2.5, 2.0
|
||||||
* which the chipset supports.
|
* which the chipset supports.
|
||||||
*/
|
*/
|
||||||
uint32_t dword = (1<<3)| (1<<2);// esi
|
uint32_t dword = (1<<3)| (1<<2);/* esi*/
|
||||||
uint32_t edi;
|
uint32_t edi;
|
||||||
uint32_t ecx;
|
uint32_t ecx;
|
||||||
unsigned device;
|
unsigned device;
|
||||||
|
@ -1248,7 +955,7 @@ static long spd_set_cas_latency(const struct mem_controller *ctrl, long dimm_mas
|
||||||
/* After all of the arduous calculation setup with the fastest
|
/* After all of the arduous calculation setup with the fastest
|
||||||
* cas latency I can use.
|
* cas latency I can use.
|
||||||
*/
|
*/
|
||||||
value = __builtin_bsf(dword); // bsrl = log2 how about bsfl?
|
value = __builtin_bsf(dword); /* bsrl = log2 how about bsfl?*/
|
||||||
if(value ==0 ) return -1;
|
if(value ==0 ) return -1;
|
||||||
ecx = value -1;
|
ecx = value -1;
|
||||||
|
|
||||||
|
@ -1262,7 +969,7 @@ static long spd_set_cas_latency(const struct mem_controller *ctrl, long dimm_mas
|
||||||
dword |= (1<<26);
|
dword |= (1<<26);
|
||||||
|
|
||||||
/* the rest of the references are words */
|
/* the rest of the references are words */
|
||||||
// ecx<<=1; // don't need shift left, because we already define that in u16 array
|
/* ecx<<=1; // don't need shift left, because we already define that in u16 array*/
|
||||||
pci_write_config32(ctrl->d0, 0x88, dword);
|
pci_write_config32(ctrl->d0, 0x88, dword);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1364,14 +1071,14 @@ static long spd_set_dram_timing(const struct mem_controller *ctrl, long dimm_mas
|
||||||
pci_write_config32(ctrl->d0, 0x60, 0x2a004425);
|
pci_write_config32(ctrl->d0, 0x60, 0x2a004425);
|
||||||
return dimm_mask;
|
return dimm_mask;
|
||||||
|
|
||||||
#if 0
|
/*
|
||||||
# Intel clears top bit here, should we?
|
Intel clears top bit here, should we?
|
||||||
# No the default is on and for normal timming it should be on. Tom Z
|
No the default is on and for normal timming it should be on. Tom Z
|
||||||
andl $0x7f, %esi
|
andl $0x7f, %esi
|
||||||
#endif
|
*/
|
||||||
|
|
||||||
|
|
||||||
// HERE. WHat's the frequency kenneth?
|
/* HERE. WHat's the frequency kenneth? */
|
||||||
for(i = 0; i < DIMM_SOCKETS; i++) {
|
for(i = 0; i < DIMM_SOCKETS; i++) {
|
||||||
if (!(dimm_mask & (1 << i))) {
|
if (!(dimm_mask & (1 << i))) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1564,8 +1271,8 @@ static long spd_set_ram_size(const struct mem_controller *ctrl, long dimm_mask)
|
||||||
#if 0
|
#if 0
|
||||||
/* For now hardset everything at 128MB boundaries */
|
/* For now hardset everything at 128MB boundaries */
|
||||||
/* %ebp has the ram size in multiples of 64MB */
|
/* %ebp has the ram size in multiples of 64MB */
|
||||||
// cmpl $0, %ebp /* test if there is no mem - smbus went bad */
|
/* cmpl $0, %ebp /* test if there is no mem - smbus went bad */*/
|
||||||
// jz no_memory_bad_smbus
|
/* jz no_memory_bad_smbus*/
|
||||||
if(memsz < 0x30) {
|
if(memsz < 0x30) {
|
||||||
/* I should really adjust all of this in C after I have resources
|
/* I should really adjust all of this in C after I have resources
|
||||||
* to all of the pcie devices.
|
* to all of the pcie devices.
|
||||||
|
@ -1603,7 +1310,7 @@ static void sdram_set_spd_registers(const struct mem_controller *ctrl) {
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
print_debug(spd_pre_init);
|
print_debug(spd_pre_init);
|
||||||
#endif
|
#endif
|
||||||
//activate_spd_rom(ctrl);
|
/*activate_spd_rom(ctrl);*/
|
||||||
dimm_mask = spd_detect_dimms(ctrl);
|
dimm_mask = spd_detect_dimms(ctrl);
|
||||||
if (!(dimm_mask & ((1 << DIMM_SOCKETS) - 1))) {
|
if (!(dimm_mask & ((1 << DIMM_SOCKETS) - 1))) {
|
||||||
print_debug("No memory for this controller\n");
|
print_debug("No memory for this controller\n");
|
||||||
|
@ -1612,7 +1319,7 @@ static void sdram_set_spd_registers(const struct mem_controller *ctrl) {
|
||||||
dimm_mask = spd_enable_clocks(ctrl, dimm_mask);
|
dimm_mask = spd_enable_clocks(ctrl, dimm_mask);
|
||||||
if (dimm_mask < 0)
|
if (dimm_mask < 0)
|
||||||
goto hw_spd_err;
|
goto hw_spd_err;
|
||||||
//spd_verify_dimms(ctrl);
|
/*spd_verify_dimms(ctrl);*/
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
print_debug(spd_pre_set);
|
print_debug(spd_pre_set);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1638,7 +1345,7 @@ static void sdram_set_spd_registers(const struct mem_controller *ctrl) {
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
print_debug(spd_post_init);
|
print_debug(spd_post_init);
|
||||||
#endif
|
#endif
|
||||||
//moved from dram_post_init
|
/*moved from dram_post_init*/
|
||||||
spd_set_ram_size(ctrl, dimm_mask);
|
spd_set_ram_size(ctrl, dimm_mask);
|
||||||
dump_pci_device(PCI_DEV(0,0,1));
|
dump_pci_device(PCI_DEV(0,0,1));
|
||||||
return;
|
return;
|
||||||
|
@ -1663,76 +1370,17 @@ static void sdram_set_spd_registers(const struct mem_controller *ctrl) {
|
||||||
* Only 64M of each side of each DIMM is currently mapped,
|
* Only 64M of each side of each DIMM is currently mapped,
|
||||||
* so we can handle > 4GB of ram here.
|
* so we can handle > 4GB of ram here.
|
||||||
*/
|
*/
|
||||||
#if 0
|
|
||||||
#define bank_msg "Bank "
|
|
||||||
#define side_msg " Side "
|
|
||||||
static void verify_ram() {
|
|
||||||
xorl %ecx, %ecx
|
|
||||||
/* Check to see if the RAM is present,
|
|
||||||
* in the specified bank and side.
|
|
||||||
*/
|
|
||||||
1: movl %ecx, %ebx
|
|
||||||
shrl $1, %ebx
|
|
||||||
addl $((5<<8) | SMBUS_MEM_DEVICE_START), %ebx
|
|
||||||
CALLSP(smbus_read_byte)
|
|
||||||
jz 5f
|
|
||||||
testl $1, %ecx
|
|
||||||
jz 2f
|
|
||||||
cmpb $2, %al
|
|
||||||
jne 5f
|
|
||||||
|
|
||||||
/* Display the bank and side we are spot checking.
|
|
||||||
*/
|
|
||||||
2: CONSOLE_INFO_TX_STRING($bank_msg)
|
|
||||||
movl %ecx, %ebx
|
|
||||||
shrl $1, %ebx
|
|
||||||
incl %ebx
|
|
||||||
CONSOLE_INFO_TX_HEX8(%bl)
|
|
||||||
CONSOLE_INFO_TX_STRING($side_msg)
|
|
||||||
movl %ecx, %ebx
|
|
||||||
andl $1, %ebx
|
|
||||||
CONSOLE_INFO_TX_HEX8(%bl)
|
|
||||||
|
|
||||||
/* Compute the memory address to spot check. */
|
|
||||||
movl %ecx, %ebx
|
|
||||||
xorl %eax, %eax
|
|
||||||
3: testl %ebx, %ebx
|
|
||||||
jz 4f
|
|
||||||
addl $0x04000000, %eax
|
|
||||||
decl %ebx
|
|
||||||
jmp 3b
|
|
||||||
4:
|
|
||||||
/* Spot check 512K of RAM */
|
|
||||||
movl %eax, %ebx
|
|
||||||
addl $0x0007ffff, %ebx
|
|
||||||
CALLSP(spot_check)
|
|
||||||
5:
|
|
||||||
/* Now find the next bank and side to spot check */
|
|
||||||
incl %ecx
|
|
||||||
cmpl $((SMBUS_MEM_DEVICE_END - SMBUS_MEM_DEVICE_START)<<1), %ecx
|
|
||||||
jb 1b
|
|
||||||
RET_LABEL(verify_ram)
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
static void ram_postinit(const struct mem_controller *ctrl) {
|
static void ram_postinit(const struct mem_controller *ctrl) {
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
dumpnorth();
|
dumpnorth();
|
||||||
#endif
|
#endif
|
||||||
/* Include a test to verify that memory is more or less working o.k.
|
/*spd_set_ram_size(ctrl);*/
|
||||||
* This test is to catch programming errors and hardware that is out of
|
|
||||||
* spec, not a test to see if the memory dimms are working 100%
|
|
||||||
*/
|
|
||||||
//# CALL_LABEL(verify_ram)
|
|
||||||
spd_set_ram_size(ctrl);
|
|
||||||
}
|
}
|
||||||
#define FIRST_NORMAL_REFERENCE() CALL_LABEL(ram_postinit)
|
#define FIRST_NORMAL_REFERENCE() CALL_LABEL(ram_postinit)
|
||||||
|
|
||||||
#define SPECIAL_FINISHUP() CALL_LABEL(dram_finish)
|
#define SPECIAL_FINISHUP() CALL_LABEL(dram_finish)
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ecc_pre_init "Initializing ECC state...\r\n"
|
#define ecc_pre_init "Initializing ECC state...\r\n"
|
||||||
#define ecc_post_init "ECC state initialized.\r\n"
|
#define ecc_post_init "ECC state initialized.\r\n"
|
||||||
|
@ -1754,11 +1402,9 @@ static void dram_finish(const struct mem_controller *ctrl)
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
#if 0
|
||||||
/* Clear the ECC error bits */
|
/* Clear the ECC error bits */
|
||||||
/*
|
|
||||||
dword = pci_read_config32(ctrl->d0, 0x7c); /* FCS_EN */
|
dword = pci_read_config32(ctrl->d0, 0x7c); /* FCS_EN */
|
||||||
dword |= (1<<17);
|
dword |= (1<<17);
|
||||||
pci_write_config32(ctrl->d0, 0x7c, dword);
|
pci_write_config32(ctrl->d0, 0x7c, dword);
|
||||||
*/
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1766,44 +1412,8 @@ static void dram_finish(const struct mem_controller *ctrl)
|
||||||
dumpnorth();
|
dumpnorth();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// verify_ram();
|
/* verify_ram(); */
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
#define ERRFUNC(x, str) mem_err(x, str)
|
|
||||||
|
|
||||||
|
|
||||||
ERRFUNC(invalid_dimm_type, "Invalid dimm type")
|
|
||||||
ERRFUNC(spd_missing_data, "Missing sdram spd data")
|
|
||||||
ERRFUNC(spd_invalid_data, "Invalid sdram spd data")
|
|
||||||
ERRFUNC(spd_unsupported_data, "Unsupported sdram spd value")
|
|
||||||
ERRFUNC(unsupported_page_size, "Unsupported page size")
|
|
||||||
ERRFUNC(sdram_presence_mismatch, "DIMM presence mismatch")
|
|
||||||
ERRFUNC(sdram_value_mismatch, "spd data does not match")
|
|
||||||
ERRFUNC(unsupported_refresh_rate, "Unsuported spd refresh rate")
|
|
||||||
ERRFUNC(inconsistent_cas_latencies, "No cas latency supported by all dimms")
|
|
||||||
ERRFUNC(unsupported_rcd, "Unsupported ras to cas delay")
|
|
||||||
#undef ERRFUNC
|
|
||||||
|
|
||||||
#define mem_err_err "ERROR: "
|
|
||||||
#define mem_err_pair " on dimm pair "
|
|
||||||
#define mem_err_byte " spd byte "
|
|
||||||
static void mem_err {
|
|
||||||
movl %ebx, %edi
|
|
||||||
CONSOLE_ERR_TX_STRING($mem_err_err)
|
|
||||||
CONSOLE_ERR_TX_STRING(%esi)
|
|
||||||
CONSOLE_ERR_TX_STRING($mem_err_pair)
|
|
||||||
movl %edi, %ebx
|
|
||||||
subb $(SMBUS_MEM_DEVICE_START), %bl
|
|
||||||
CONSOLE_ERR_TX_HEX8(%bl)
|
|
||||||
CONSOLE_ERR_TX_STRING($mem_err_byte)
|
|
||||||
movl %edi, %ebx
|
|
||||||
CONSOLE_ERR_TX_HEX8(%bh)
|
|
||||||
jmp mem_stop
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if ASM_CONSOLE_LOGLEVEL > BIOS_DEBUG
|
#if ASM_CONSOLE_LOGLEVEL > BIOS_DEBUG
|
||||||
#define ram_enable_1 "Ram Enable 1\r\n"
|
#define ram_enable_1 "Ram Enable 1\r\n"
|
||||||
|
@ -1821,10 +1431,24 @@ static void mem_err {
|
||||||
|
|
||||||
/* Estimate that SLOW_DOWN_IO takes about 50&76us*/
|
/* Estimate that SLOW_DOWN_IO takes about 50&76us*/
|
||||||
/* delay for 200us */
|
/* delay for 200us */
|
||||||
|
void udelay(int usecs)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < usecs; i++)
|
||||||
|
outb(i&0xff, 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
#define DO_DELAY \
|
|
||||||
|
#if 0
|
||||||
|
static void DO_DELAY(void){
|
||||||
udelay(200);
|
udelay(200);
|
||||||
// for(i=0; i<16;i++) { SLOW_DOWN_IO }
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DO_DELAY udelay(200);
|
||||||
|
/*
|
||||||
|
for(i=0; i<16;i++) { SLOW_DOWN_IO }
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define EXTRA_DELAY DO_DELAY
|
#define EXTRA_DELAY DO_DELAY
|
||||||
|
@ -1866,11 +1490,13 @@ static void sdram_enable(int controllers, const struct mem_controller *ctrl)
|
||||||
#endif
|
#endif
|
||||||
RAM_NOP(ctrl);
|
RAM_NOP(ctrl);
|
||||||
EXTRA_DELAY
|
EXTRA_DELAY
|
||||||
|
#undef DEBUG_RAM_CONFIG
|
||||||
#define DEBUG_RAM_CONFIG 0
|
#define DEBUG_RAM_CONFIG 0
|
||||||
/* 4 Precharge all */
|
/* 4 Precharge all */
|
||||||
#if DEBUG_RAM_CONFIG
|
#if DEBUG_RAM_CONFIG
|
||||||
print_debug(ram_enable_4);
|
print_debug(ram_enable_4);
|
||||||
#endif
|
#endif
|
||||||
|
#undef DEBUG_RAM_CONFIG
|
||||||
#define DEBUG_RAM_CONFIG 0
|
#define DEBUG_RAM_CONFIG 0
|
||||||
RAM_PRECHARGE(ctrl);
|
RAM_PRECHARGE(ctrl);
|
||||||
EXTRA_DELAY
|
EXTRA_DELAY
|
||||||
|
@ -1947,14 +1573,14 @@ static void sdram_enable(int controllers, const struct mem_controller *ctrl)
|
||||||
RAM_NORMAL(ctrl);
|
RAM_NORMAL(ctrl);
|
||||||
|
|
||||||
|
|
||||||
// special from v1
|
/* special from v1*/
|
||||||
//FIRST_NORMAL_REFERENCE();
|
/*FIRST_NORMAL_REFERENCE();*/
|
||||||
//spd_set_ram_size(ctrl, 0x03);
|
/*spd_set_ram_size(ctrl, 0x03);*/
|
||||||
|
|
||||||
/* Finally enable refresh */
|
/* Finally enable refresh */
|
||||||
ENABLE_REFRESH(ctrl);
|
ENABLE_REFRESH(ctrl);
|
||||||
|
|
||||||
//SPECIAL_FINISHUP();
|
/*SPECIAL_FINISHUP();*/
|
||||||
dram_finish(ctrl);
|
dram_finish(ctrl);
|
||||||
{ char *c = (char *) 0;
|
{ char *c = (char *) 0;
|
||||||
*c = 'a';
|
*c = 'a';
|
||||||
|
|
|
@ -1,96 +1,13 @@
|
||||||
# Sample config file for adl855pc
|
# Sample config file for adl855pc
|
||||||
# This will make a target directory of ./adl855pc
|
# This will make a target directory of ./adl855pc
|
||||||
|
|
||||||
loadoptions
|
|
||||||
|
|
||||||
target adl855pc
|
target adl855pc
|
||||||
|
mainboard digitallogic/adl855pc
|
||||||
|
|
||||||
uses ARCH
|
|
||||||
uses CONFIG_COMPRESS
|
|
||||||
uses CONFIG_IOAPIC
|
|
||||||
uses CONFIG_ROM_STREAM
|
|
||||||
uses CONFIG_ROM_STREAM_START
|
|
||||||
uses CONFIG_UDELAY_TSC
|
|
||||||
uses CPU_FIXUP
|
|
||||||
uses FALLBACK_SIZE
|
|
||||||
uses HAVE_FALLBACK_BOOT
|
|
||||||
uses HAVE_MP_TABLE
|
|
||||||
uses HAVE_PIRQ_TABLE
|
|
||||||
uses HAVE_HARD_RESET
|
|
||||||
uses i586
|
|
||||||
uses i686
|
|
||||||
uses INTEL_PPRO_MTRR
|
|
||||||
uses HEAP_SIZE
|
|
||||||
uses IRQ_SLOT_COUNT
|
|
||||||
uses MAINBOARD_PART_NUMBER
|
|
||||||
uses MAINBOARD_VENDOR
|
|
||||||
uses CONFIG_SMP
|
|
||||||
uses CONFIG_MAX_CPUS
|
|
||||||
uses MEMORY_HOLE
|
|
||||||
uses PAYLOAD_SIZE
|
|
||||||
uses _RAMBASE
|
|
||||||
uses _ROMBASE
|
|
||||||
uses ROM_IMAGE_SIZE
|
|
||||||
uses ROM_SECTION_OFFSET
|
|
||||||
uses ROM_SECTION_SIZE
|
|
||||||
uses ROM_SIZE
|
|
||||||
uses STACK_SIZE
|
|
||||||
uses USE_FALLBACK_IMAGE
|
|
||||||
uses USE_OPTION_TABLE
|
|
||||||
uses HAVE_OPTION_TABLE
|
|
||||||
uses MAXIMUM_CONSOLE_LOGLEVEL
|
|
||||||
uses DEFAULT_CONSOLE_LOGLEVEL
|
|
||||||
uses CONFIG_CONSOLE_SERIAL8250
|
|
||||||
uses MAINBOARD
|
|
||||||
uses CONFIG_CHIP_CONFIGURE
|
|
||||||
uses XIP_ROM_SIZE
|
|
||||||
uses XIP_ROM_BASE
|
|
||||||
uses LINUXBIOS_EXTRA_VERSION
|
|
||||||
uses TTYS0_BAUD
|
|
||||||
|
|
||||||
option TTYS0_BAUD=115200
|
|
||||||
|
|
||||||
option CONFIG_CHIP_CONFIGURE=1
|
|
||||||
|
|
||||||
option MAXIMUM_CONSOLE_LOGLEVEL=9
|
|
||||||
option DEFAULT_CONSOLE_LOGLEVEL=9
|
|
||||||
option CONFIG_CONSOLE_SERIAL8250=1
|
|
||||||
|
|
||||||
option CPU_FIXUP=1
|
|
||||||
option CONFIG_UDELAY_TSC=0
|
|
||||||
option i686=1
|
|
||||||
option i586=1
|
|
||||||
option INTEL_PPRO_MTRR=1
|
|
||||||
option ROM_SIZE=1024*1024
|
|
||||||
|
|
||||||
option HAVE_OPTION_TABLE=1
|
|
||||||
option CONFIG_ROM_STREAM=1
|
|
||||||
option HAVE_FALLBACK_BOOT=1
|
|
||||||
|
|
||||||
###
|
|
||||||
### Compute the location and size of where this firmware image
|
|
||||||
### (linuxBIOS plus bootloader) will live in the boot rom chip.
|
|
||||||
###
|
|
||||||
option FALLBACK_SIZE=131072
|
|
||||||
|
|
||||||
## LinuxBIOS C code runs at this location in RAM
|
|
||||||
option _RAMBASE=0x00004000
|
|
||||||
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Compute the start location and size size of
|
|
||||||
### The linuxBIOS bootloader.
|
|
||||||
###
|
|
||||||
|
|
||||||
#
|
|
||||||
romimage "normal"
|
romimage "normal"
|
||||||
option USE_FALLBACK_IMAGE=0
|
option USE_FALLBACK_IMAGE=0
|
||||||
option ROM_IMAGE_SIZE=0x10000
|
option ROM_IMAGE_SIZE=0x10000
|
||||||
option LINUXBIOS_EXTRA_VERSION=".0Normal"
|
option LINUXBIOS_EXTRA_VERSION=".0Normal"
|
||||||
mainboard digitallogic/adl855pc
|
|
||||||
# payload /usr/share/etherboot/5.1.9pre2-lnxi-lb/tg3--ide_disk.zelf
|
|
||||||
# payload ../../../../tg3--ide_disk.zelf
|
|
||||||
# payload ../../../../../lnxieepro100.ebi
|
|
||||||
payload /etc/hosts
|
payload /etc/hosts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,10 +15,6 @@ romimage "fallback"
|
||||||
option USE_FALLBACK_IMAGE=1
|
option USE_FALLBACK_IMAGE=1
|
||||||
option ROM_IMAGE_SIZE=0x10000
|
option ROM_IMAGE_SIZE=0x10000
|
||||||
option LINUXBIOS_EXTRA_VERSION=".0Fallback"
|
option LINUXBIOS_EXTRA_VERSION=".0Fallback"
|
||||||
mainboard digitallogic/adl855pc
|
|
||||||
# payload /usr/share/etherboot/5.1.9pre2-lnxi-lb/tg3--ide_disk.zelf
|
|
||||||
# payload ../../../../tg3--ide_disk.zelf
|
|
||||||
# payload ../../../../../lnxieepro100.ebi
|
|
||||||
payload /etc/hosts
|
payload /etc/hosts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue