mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
fixup
This commit is contained in:
parent
6482626f89
commit
81cdc84943
1 changed files with 434 additions and 416 deletions
|
@ -3,6 +3,9 @@
|
||||||
***
|
***
|
||||||
***/
|
***/
|
||||||
|
|
||||||
|
/*** sungeun jump to start ***/
|
||||||
|
jmp raminit_start
|
||||||
|
|
||||||
/***
|
/***
|
||||||
*** BEGIN TABLES
|
*** BEGIN TABLES
|
||||||
***/
|
***/
|
||||||
|
@ -76,10 +79,12 @@ internal_bank_tbl:
|
||||||
*** BEGIN MACROS
|
*** BEGIN MACROS
|
||||||
***/
|
***/
|
||||||
|
|
||||||
|
|
||||||
#define cmos_data_in \
|
#define cmos_data_in \
|
||||||
out %al,$0x70 ; \
|
out %al,$0x70 ; \
|
||||||
in $0x71,%al
|
in $0x71,%al
|
||||||
|
|
||||||
|
|
||||||
#define pci_write_byte \
|
#define pci_write_byte \
|
||||||
mov $0x80000000,%edx ; \
|
mov $0x80000000,%edx ; \
|
||||||
or %ax,%dx ; \
|
or %ax,%dx ; \
|
||||||
|
@ -96,6 +101,7 @@ internal_bank_tbl:
|
||||||
mov %cl,%al ; \
|
mov %cl,%al ; \
|
||||||
out %al,%dx
|
out %al,%dx
|
||||||
|
|
||||||
|
|
||||||
#define pci_read_byte \
|
#define pci_read_byte \
|
||||||
mov $0x80000000,%edx ; \
|
mov $0x80000000,%edx ; \
|
||||||
or %dx,%ax ; \
|
or %dx,%ax ; \
|
||||||
|
@ -123,6 +129,7 @@ internal_bank_tbl:
|
||||||
mov %edi,%eax ; \
|
mov %edi,%eax ; \
|
||||||
out %eax,%dx
|
out %eax,%dx
|
||||||
|
|
||||||
|
|
||||||
#define pci_read_dword \
|
#define pci_read_dword \
|
||||||
mov $0,%ah ; \
|
mov $0,%ah ; \
|
||||||
mov $0x80000000,%edx ; \
|
mov $0x80000000,%edx ; \
|
||||||
|
@ -198,381 +205,6 @@ internal_bank_tbl:
|
||||||
pci_write_byte ; \
|
pci_write_byte ; \
|
||||||
mov %di,%sp
|
mov %di,%sp
|
||||||
|
|
||||||
#define DETECT_DRAM_TYPE \
|
|
||||||
;; \
|
|
||||||
movl $0x055555555,%es:(0x0) ; \
|
|
||||||
movl $0x0aaaaaaaa,%es:(0x8) ; \
|
|
||||||
cmpl $0x55555555,%es:(0) ; \
|
|
||||||
jnz detect_sdram ; \
|
|
||||||
cmpl $0x0aaaaaaaa,%es:(8) ; \
|
|
||||||
jnz detect_sdram ; \
|
|
||||||
mov $0x01,%cx ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
mov $0x01,%ch ; \
|
|
||||||
1: ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
jmp dram_type_detect_end ; \
|
|
||||||
detect_sdram: ; \
|
|
||||||
mov $0x7e,%ax ; \
|
|
||||||
mov (0b11110111 << 8)+0b00000000, %cx ; \
|
|
||||||
pci_read_write_byte ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
mov %al,%ah ; \
|
|
||||||
mov $0x42,%al ; \
|
|
||||||
cmos_data_in ; \
|
|
||||||
test $0b00010000,%al ; \
|
|
||||||
mov %ah,%al ; \
|
|
||||||
jz cas_2 ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
and $0x00000fffc,%edi ; \
|
|
||||||
test $0x010000,%ebx ; \
|
|
||||||
jz 1f ; \
|
|
||||||
or $0x0f6640000,%edi ; \
|
|
||||||
jmp configure_sdram_type ; \
|
|
||||||
1: ; \
|
|
||||||
or $0x0f1e40000,%edi ; \
|
|
||||||
jmp configure_sdram_type ; \
|
|
||||||
cas_2: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
and $0x00000fffc,%edi ; \
|
|
||||||
test $0x010000,%ebx ; \
|
|
||||||
jz 1f ; \
|
|
||||||
or $0x0d6640000,%edi ; \
|
|
||||||
jmp configure_sdram_type ; \
|
|
||||||
1: ; \
|
|
||||||
or $0x0d1e40000,%edi ; \
|
|
||||||
configure_sdram_type: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_dword ; \
|
|
||||||
mov $1000,%ax ; \
|
|
||||||
1: ; \
|
|
||||||
dec %ax ; \
|
|
||||||
jnz 1b ; \
|
|
||||||
movl $0x055555555,%es:(0x0) ; \
|
|
||||||
movl $0x0aaaaaaaa,%es:(0x8) ; \
|
|
||||||
cmpl $0x055555555,%es:(0x0) ; \
|
|
||||||
jnz chk_vc_sdram_type ; \
|
|
||||||
cmpl $0x0aaaaaaaa,%es:(0x8) ; \
|
|
||||||
jnz chk_vc_sdram_type ; \
|
|
||||||
mov $0x02,%cx ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
mov $01,%ch ; \
|
|
||||||
1: ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
jmp dram_type_detect_end ; \
|
|
||||||
chk_vc_sdram_type: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
and $0x0e7ffffff,%edi ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_dword ; \
|
|
||||||
mov $0x7e,%ax ; \
|
|
||||||
mov (0b11110111 << 8)+0b00000000,%cx ; \
|
|
||||||
pci_read_write_byte ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
test $0x010000,%ebx ; \
|
|
||||||
jz 1f ; \
|
|
||||||
and $0x00000d7f0,%edi ; \
|
|
||||||
or $0x0fe620000,%edi ; \
|
|
||||||
jmp configure_vc_sdram_type ; \
|
|
||||||
1: ; \
|
|
||||||
and $0x00000d7f0,%edi ; \
|
|
||||||
or $0x0f9e20000,%edi ; \
|
|
||||||
configure_vc_sdram_type: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_dword ; \
|
|
||||||
mov $1000,%ax ; \
|
|
||||||
1: ; \
|
|
||||||
dec %ax ; \
|
|
||||||
jnz 1b ; \
|
|
||||||
movl $0x055555555,%es:(0x0) ; \
|
|
||||||
movl $0x0aaaaaaaa,%es:(0x8) ; \
|
|
||||||
cmpl $0x055555555,%es:(0x0) ; \
|
|
||||||
jnz no_dram ; \
|
|
||||||
cmpl $0x0aaaaaaaa,%es:(0x8) ; \
|
|
||||||
jnz no_dram ; \
|
|
||||||
mov $0x03,%cx ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
mov $0x01,%ch ; \
|
|
||||||
1: ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
jmp dram_type_detect_end ; \
|
|
||||||
no_dram: ; \
|
|
||||||
memory_error ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jnz prepare_next_detect ; \
|
|
||||||
dram_type_detect_end: ; \
|
|
||||||
|
|
||||||
#define MA_DETECT \
|
|
||||||
;; \
|
|
||||||
test $0x40000,%ebx ; \
|
|
||||||
jnz vc_sdram_table ; \
|
|
||||||
movl $ma_table, %esi ; \
|
|
||||||
jmp detect_ma ; \
|
|
||||||
vc_sdram_table: ; \
|
|
||||||
movl $vc_ma_table,%esi ; \
|
|
||||||
detect_ma: ; \
|
|
||||||
add %ax,%si ; \
|
|
||||||
mov (%esi),%edx ; \
|
|
||||||
mov %edx,%esi ; \
|
|
||||||
movl $0x055555555,(%esi); \
|
|
||||||
movl $0x0aaaaaaaa,(%esi) ; \
|
|
||||||
cmpl $0x055555555,%esi; \
|
|
||||||
jz 1f ; \
|
|
||||||
jmp ma_detect_end ; \
|
|
||||||
1: ; \
|
|
||||||
movl $ma_table,%esi ; \
|
|
||||||
add %ax,%si ; \
|
|
||||||
mov 4(%esi),%dl ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jz 1f ; \
|
|
||||||
xor %ecx,%ecx ; \
|
|
||||||
mov %dl,%cl ; \
|
|
||||||
shl $16,%ecx ; \
|
|
||||||
jmp memory_sizing_sub ; \
|
|
||||||
;; \
|
|
||||||
1: ; \
|
|
||||||
ror $20,%ecx ; \
|
|
||||||
mov %dl,%cl ; \
|
|
||||||
rol $20,%ecx ; \
|
|
||||||
jmp memory_sizing_sub ; \
|
|
||||||
ma_detect_end: ; \
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CHECK_SUB \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
mov %bx,%ax ; \
|
|
||||||
and $0x03f,%ax ; \
|
|
||||||
mov %al,%ah ; \
|
|
||||||
and $0x07,%al ; \
|
|
||||||
shr $3,%ah ; \
|
|
||||||
cmp %al,%ah ; \
|
|
||||||
jz 2f ; \
|
|
||||||
set_no_dram ; \
|
|
||||||
jmp 1f ; \
|
|
||||||
2: ; \
|
|
||||||
shr $16,%ecx ; \
|
|
||||||
mov %cx,%ax ; \
|
|
||||||
and $0x0ff,%ax ; \
|
|
||||||
mov %al,%ah ; \
|
|
||||||
and $0x0f,%al ; \
|
|
||||||
shr $4,%ah ; \
|
|
||||||
cmp %al,%ah ; \
|
|
||||||
jz 1f ; \
|
|
||||||
set_no_dram ; \
|
|
||||||
1:
|
|
||||||
|
|
||||||
|
|
||||||
#define A_SUB \
|
|
||||||
mov $0x10,%ch ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
mov %al,%cl ; \
|
|
||||||
mov $0x11,%ch ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
mov %al,%ch ; \
|
|
||||||
mov %cx,%ax ; \
|
|
||||||
cmp $0x00,%al ; \
|
|
||||||
jz no_sdram ; \
|
|
||||||
cmp %ah,%al ; \
|
|
||||||
jz a_sub_end ; \
|
|
||||||
cmp $0x00,%ah ; \
|
|
||||||
jnz no_sdram ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
and $0x00000ffff,%edi ; \
|
|
||||||
mov $0x042,%al ; \
|
|
||||||
cmos_data_in ; \
|
|
||||||
test $0b00010000,%al ; \
|
|
||||||
jz cas_l_2 ; \
|
|
||||||
or $0x0e6000000,%edi ; \
|
|
||||||
jmp set_cas_end ; \
|
|
||||||
cas_l_2: ; \
|
|
||||||
or $0x0c6000000,%edi ; \
|
|
||||||
set_cas_end: ; \
|
|
||||||
ror $27,%edi ; \
|
|
||||||
and $0x0ff,%cx ; \
|
|
||||||
or %cx,%di ; \
|
|
||||||
rol $7,%edi ; \
|
|
||||||
shr $3,%bx ; \
|
|
||||||
and $0x07,%bx ; \
|
|
||||||
or %bx,%di ; \
|
|
||||||
rol $20,%edi ; \
|
|
||||||
and $0x0000f0000,%ecx ; \
|
|
||||||
or %ecx,%edi ; \
|
|
||||||
test $0x80000,%ebx ; \
|
|
||||||
jz set_single ; \
|
|
||||||
or $1,%edi ; \
|
|
||||||
set_single: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_dword ; \
|
|
||||||
jmp detect_block_again_end ; \
|
|
||||||
no_sdram: ; \
|
|
||||||
set_no_dram ; \
|
|
||||||
jmp detect_block_again_end ; \
|
|
||||||
a_sub_end:
|
|
||||||
|
|
||||||
|
|
||||||
#define bank_number \
|
|
||||||
and (~0x80000),%ebx ; \
|
|
||||||
test $0x40000,%ebx ; \
|
|
||||||
jnz configure_internal_bank_end ; \
|
|
||||||
mov %cx,%di ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
add $1,%al ; \
|
|
||||||
pci_read_byte ; \
|
|
||||||
and $0x0ef,%al ; \
|
|
||||||
mov %al,%cl ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
add $1,%al ; \
|
|
||||||
pci_write_byte ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_byte ; \
|
|
||||||
and $0x0fc,%al ; \
|
|
||||||
or $1,%al ; \
|
|
||||||
mov %al,%cl ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_byte ; \
|
|
||||||
mov %di,%cx ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jz 1f ; \
|
|
||||||
ror $16,%ecx ; \
|
|
||||||
jmp what_memory_ma ; \
|
|
||||||
1: ; \
|
|
||||||
ror $20,%ecx ; \
|
|
||||||
what_memory_ma: ; \
|
|
||||||
movl $0x055555555,%es:(0x0) ; \
|
|
||||||
mov %cx,%ax ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
rol $16,%ecx ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
rol $4,%ecx ; \
|
|
||||||
1: ; \
|
|
||||||
and $0x0f,%ax ; \
|
|
||||||
mov $4,%dl ; \
|
|
||||||
mul %dl ; \
|
|
||||||
mov %si,%di ; \
|
|
||||||
movl $internal_bank_tbl, %esi ; \
|
|
||||||
add %ax,%si ; \
|
|
||||||
movl (%esi),%edx ; \
|
|
||||||
mov %edx,%esi ; \
|
|
||||||
movl $0x0aaaaaaaa,(%esi) ; \
|
|
||||||
cmpl $0x055555555,%es:(0x0) ; \
|
|
||||||
mov %di,%si ; \
|
|
||||||
jz i_4_bank ; \
|
|
||||||
mov %cx,%di ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_byte ; \
|
|
||||||
and $0x0fc,%al ; \
|
|
||||||
mov %al,%cl ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_byte ; \
|
|
||||||
mov %di,%cx ; \
|
|
||||||
i_4_bank: ; \
|
|
||||||
or $0x80000,%ebx ; \
|
|
||||||
configure_internal_bank_end:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define MEMORY_SIZING \
|
|
||||||
mov %si,%di ; \
|
|
||||||
mov $10,%eax ; \
|
|
||||||
mov %cl,%dl ; \
|
|
||||||
and $0x0f,%dl ; \
|
|
||||||
mul %dl ; \
|
|
||||||
movl $sizing_table,%esi ; \
|
|
||||||
addw %ax,%si ; \
|
|
||||||
mov 8(%esi),%dl ; \
|
|
||||||
mov 8(%esi),%dh ; \
|
|
||||||
ror $16,%edx ; \
|
|
||||||
mov 9(%esi),%dl ; \
|
|
||||||
rol $16,%edx ; \
|
|
||||||
mov %esi,%eax ; \
|
|
||||||
mov %eax,%esi ; \
|
|
||||||
memory_sizing_loop: ; \
|
|
||||||
cmp %dl,%dh ; \
|
|
||||||
jz 1f ; \
|
|
||||||
cmpl $0x0aaaaaaaa,0(%esi) ; \
|
|
||||||
jz 1f ; \
|
|
||||||
memory_error ; \
|
|
||||||
mov %di,%si ; \
|
|
||||||
jmp prepare_next_detect ; \
|
|
||||||
1: ; \
|
|
||||||
movl $0x55555555,0(%esi) ; \
|
|
||||||
movl $0x0aaaaaaaa,0(%esi) ; \
|
|
||||||
cmpl $0x55555555,0(%esi) ; \
|
|
||||||
jz determine_size ; \
|
|
||||||
cmp $0,%dl ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
memory_error ; \
|
|
||||||
mov %di,%si ; \
|
|
||||||
jmp prepare_next_detect ; \
|
|
||||||
1: ; \
|
|
||||||
dec %dl ; \
|
|
||||||
ror $16,%edx ; \
|
|
||||||
mov %dl,%al ; \
|
|
||||||
rol $16,%edx ; \
|
|
||||||
cmp %al,%dl ; \
|
|
||||||
jnz 1f ; \
|
|
||||||
shr $1,%esi ; \
|
|
||||||
1: ; \
|
|
||||||
shr $1,%esi ; \
|
|
||||||
jmp memory_sizing_loop ; \
|
|
||||||
determine_size: ; \
|
|
||||||
sub %dl,%dh ; \
|
|
||||||
cmp $2,%dh ; \
|
|
||||||
jae 1f ; \
|
|
||||||
or $0x20000,%ebx ; \
|
|
||||||
1: ; \
|
|
||||||
xor %dx,%dx ; \
|
|
||||||
find_memory_size_offset: ; \
|
|
||||||
cmp $0x00200000,%esi ; \
|
|
||||||
jz 1f ; \
|
|
||||||
shr $1,%esi ; \
|
|
||||||
inc %dx ; \
|
|
||||||
jmp find_memory_size_offset ; \
|
|
||||||
1: ; \
|
|
||||||
movl $memory_size,%esi ; \
|
|
||||||
addw %dx,%si ; \
|
|
||||||
mov $0,%dx ; \
|
|
||||||
orb 0(%esi),%dl ; \
|
|
||||||
or %dx,%bx ; \
|
|
||||||
mov %di,%si ; \
|
|
||||||
test $0x10000,%ebx ; \
|
|
||||||
jz second_bank_number ; \
|
|
||||||
mov $0x10,%ch ; \
|
|
||||||
jmp read_dram_type ; \
|
|
||||||
second_bank_number: ; \
|
|
||||||
mov $0x11,%ch ; \
|
|
||||||
read_dram_type: ; \
|
|
||||||
save_dram_type ; \
|
|
||||||
cmp $0x01,%al ; \
|
|
||||||
jz EDO_T ; \
|
|
||||||
cmp $0x00,%al ; \
|
|
||||||
jz EDO_T ; \
|
|
||||||
cmp $0x02,%al ; \
|
|
||||||
jz determine_bank_number ; \
|
|
||||||
or $0x40000,%ebx ; \
|
|
||||||
determine_bank_number: ; \
|
|
||||||
bank_number ; \
|
|
||||||
EDO_T: ; \
|
|
||||||
and (~0x20000),%ebx ; \
|
|
||||||
and (~0x40000),%ebx ; \
|
|
||||||
|
|
||||||
|
|
||||||
#define DISABLE_BLOCK \
|
#define DISABLE_BLOCK \
|
||||||
mov (%esi),%al ; \
|
mov (%esi),%al ; \
|
||||||
|
@ -584,40 +216,6 @@ EDO_T: ; \
|
||||||
pci_read_dword
|
pci_read_dword
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CONFIGURE_MEMORY \
|
|
||||||
movl $dram_temp,%esi ; \
|
|
||||||
mov (%esi),%dl ; \
|
|
||||||
mov $0x094,%bl ; \
|
|
||||||
configure_next: ; \
|
|
||||||
xor %edi,%edi ; \
|
|
||||||
mov %bl,%al ; \
|
|
||||||
pci_read_byte ; \
|
|
||||||
cmp $0x00,%al ; \
|
|
||||||
jz 1f ; \
|
|
||||||
or $0x3,%di ; \
|
|
||||||
1: ; \
|
|
||||||
shl $2,%di ; \
|
|
||||||
inc %bl ; \
|
|
||||||
mov %bl,%al ; \
|
|
||||||
pci_read_byte ; \
|
|
||||||
inc %bl ; \
|
|
||||||
cmp $0x00,%al ; \
|
|
||||||
jz 1f ; \
|
|
||||||
or $0x03,%di ; \
|
|
||||||
1: ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_write_dword ; \
|
|
||||||
and $0x0f87fffff,%eax ; \
|
|
||||||
shl $23,%edi ; \
|
|
||||||
or %edi,%eax ; \
|
|
||||||
mov %eax,%edi ; \
|
|
||||||
mov (%esi),%al ; \
|
|
||||||
pci_read_dword ; \
|
|
||||||
inc %si ; \
|
|
||||||
cmpb $0x78,(%esi) ; \
|
|
||||||
jnz configure_next
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
*** END MACROS
|
*** END MACROS
|
||||||
***/
|
***/
|
||||||
|
@ -626,6 +224,7 @@ configure_next: ; \
|
||||||
/***
|
/***
|
||||||
*** START REAL STUFF
|
*** START REAL STUFF
|
||||||
***/
|
***/
|
||||||
|
raminit_start:
|
||||||
mov $0x81,%ax
|
mov $0x81,%ax
|
||||||
mov (0b01111111 << 8)+0b00000000,%cx
|
mov (0b01111111 << 8)+0b00000000,%cx
|
||||||
pci_read_write_byte
|
pci_read_write_byte
|
||||||
|
@ -666,10 +265,180 @@ odd_bank_detect:
|
||||||
mov $0x0e4,%cl
|
mov $0x0e4,%cl
|
||||||
pci_write_byte
|
pci_write_byte
|
||||||
detect_ma_size:
|
detect_ma_size:
|
||||||
DETECT_DRAM_TYPE
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro DETECT_DRAM_TYPE
|
||||||
|
***/
|
||||||
|
movl $0x055555555,%es:(0x0)
|
||||||
|
movl $0x0aaaaaaaa,%es:(0x8)
|
||||||
|
cmpl $0x55555555,%es:(0)
|
||||||
|
jnz detect_sdram
|
||||||
|
cmpl $0x0aaaaaaaa,%es:(8)
|
||||||
|
jnz detect_sdram
|
||||||
|
mov $0x01,%cx
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jnz 1f
|
||||||
|
mov $0x01,%ch
|
||||||
|
1:
|
||||||
|
save_dram_type
|
||||||
|
jmp dram_type_detect_end
|
||||||
|
detect_sdram:
|
||||||
|
mov $0x7e,%ax
|
||||||
|
mov (0b11110111 << 8)+0b00000000, %cx
|
||||||
|
pci_read_write_byte
|
||||||
|
mov (%esi),%al
|
||||||
|
mov %al,%ah
|
||||||
|
mov $0x42,%al
|
||||||
|
cmos_data_in
|
||||||
|
test $0b00010000,%al
|
||||||
|
mov %ah,%al
|
||||||
|
jz cas_2
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
mov %eax,%edi
|
||||||
|
and $0x00000fffc,%edi
|
||||||
|
test $0x010000,%ebx
|
||||||
|
jz 1f
|
||||||
|
or $0x0f6640000,%edi
|
||||||
|
jmp configure_sdram_type
|
||||||
|
1:
|
||||||
|
or $0x0f1e40000,%edi
|
||||||
|
jmp configure_sdram_type
|
||||||
|
cas_2:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
mov %eax,%edi
|
||||||
|
and $0x00000fffc,%edi
|
||||||
|
test $0x010000,%ebx
|
||||||
|
jz 1f
|
||||||
|
or $0x0d6640000,%edi
|
||||||
|
jmp configure_sdram_type
|
||||||
|
1:
|
||||||
|
or $0x0d1e40000,%edi
|
||||||
|
configure_sdram_type:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_dword
|
||||||
|
mov $1000,%ax
|
||||||
|
1:
|
||||||
|
dec %ax
|
||||||
|
jnz 1b
|
||||||
|
movl $0x055555555,%es:(0x0)
|
||||||
|
movl $0x0aaaaaaaa,%es:(0x8)
|
||||||
|
cmpl $0x055555555,%es:(0x0)
|
||||||
|
jnz chk_vc_sdram_type
|
||||||
|
cmpl $0x0aaaaaaaa,%es:(0x8)
|
||||||
|
jnz chk_vc_sdram_type
|
||||||
|
mov $0x02,%cx
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jnz 1f
|
||||||
|
mov $01,%ch
|
||||||
|
1:
|
||||||
|
save_dram_type
|
||||||
|
jmp dram_type_detect_end
|
||||||
|
chk_vc_sdram_type:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
mov %eax,%edi
|
||||||
|
and $0x0e7ffffff,%edi
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_dword
|
||||||
|
mov $0x7e,%ax
|
||||||
|
mov (0b11110111 << 8)+0b00000000,%cx
|
||||||
|
pci_read_write_byte
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
mov %eax,%edi
|
||||||
|
mov (%esi),%al
|
||||||
|
test $0x010000,%ebx
|
||||||
|
jz 1f
|
||||||
|
and $0x00000d7f0,%edi
|
||||||
|
or $0x0fe620000,%edi
|
||||||
|
jmp configure_vc_sdram_type
|
||||||
|
1:
|
||||||
|
and $0x00000d7f0,%edi
|
||||||
|
or $0x0f9e20000,%edi
|
||||||
|
configure_vc_sdram_type:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_dword
|
||||||
|
mov $1000,%ax
|
||||||
|
1:
|
||||||
|
dec %ax
|
||||||
|
jnz 1b
|
||||||
|
movl $0x055555555,%es:(0x0)
|
||||||
|
movl $0x0aaaaaaaa,%es:(0x8)
|
||||||
|
cmpl $0x055555555,%es:(0x0)
|
||||||
|
jnz no_dram
|
||||||
|
cmpl $0x0aaaaaaaa,%es:(0x8)
|
||||||
|
jnz no_dram
|
||||||
|
mov $0x03,%cx
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jnz 1f
|
||||||
|
mov $0x01,%ch
|
||||||
|
1:
|
||||||
|
save_dram_type
|
||||||
|
jmp dram_type_detect_end
|
||||||
|
no_dram:
|
||||||
|
memory_error
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jnz prepare_next_detect
|
||||||
|
dram_type_detect_end:
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro DETECT_DRAM_TYPE
|
||||||
|
***/
|
||||||
test $0x10000,%ebx
|
test $0x10000,%ebx
|
||||||
jnz 1f
|
jnz 1f
|
||||||
A_SUB
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro A_SUB
|
||||||
|
***/
|
||||||
|
mov $0x10,%ch
|
||||||
|
save_dram_type
|
||||||
|
mov %al,%cl
|
||||||
|
mov $0x11,%ch
|
||||||
|
save_dram_type
|
||||||
|
mov %al,%ch
|
||||||
|
mov %cx,%ax
|
||||||
|
cmp $0x00,%al
|
||||||
|
jz no_sdram
|
||||||
|
cmp %ah,%al
|
||||||
|
jz a_sub_end
|
||||||
|
cmp $0x00,%ah
|
||||||
|
jnz no_sdram
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
mov %eax,%edi
|
||||||
|
and $0x00000ffff,%edi
|
||||||
|
mov $0x042,%al
|
||||||
|
cmos_data_in
|
||||||
|
test $0b00010000,%al
|
||||||
|
jz cas_l_2
|
||||||
|
or $0x0e6000000,%edi
|
||||||
|
jmp set_cas_end
|
||||||
|
cas_l_2:
|
||||||
|
or $0x0c6000000,%edi
|
||||||
|
set_cas_end:
|
||||||
|
ror $27,%edi
|
||||||
|
and $0x0ff,%cx
|
||||||
|
or %cx,%di
|
||||||
|
rol $7,%edi
|
||||||
|
shr $3,%bx
|
||||||
|
and $0x07,%bx
|
||||||
|
or %bx,%di
|
||||||
|
rol $20,%edi
|
||||||
|
and $0x0000f0000,%ecx
|
||||||
|
or %ecx,%edi
|
||||||
|
test $0x80000,%ebx
|
||||||
|
jz set_single
|
||||||
|
or $1,%edi
|
||||||
|
set_single:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_dword
|
||||||
|
jmp detect_block_again_end
|
||||||
|
no_sdram:
|
||||||
|
set_no_dram
|
||||||
|
jmp detect_block_again_end
|
||||||
|
a_sub_end:
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro A_SUB
|
||||||
|
***/
|
||||||
1:
|
1:
|
||||||
mov $0x10,%ch
|
mov $0x10,%ch
|
||||||
save_dram_type
|
save_dram_type
|
||||||
|
@ -688,7 +457,43 @@ vcm_ma_type_set:
|
||||||
mov $10,%ax
|
mov $10,%ax
|
||||||
or $0x40000,%ebx
|
or $0x40000,%ebx
|
||||||
detect_ma_table:
|
detect_ma_table:
|
||||||
MA_DETECT
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro MA_DETECT
|
||||||
|
***/
|
||||||
|
test $0x40000,%ebx
|
||||||
|
jnz vc_sdram_table
|
||||||
|
movl $ma_table, %esi
|
||||||
|
jmp detect_ma
|
||||||
|
vc_sdram_table:
|
||||||
|
movl $vc_ma_table,%esi
|
||||||
|
detect_ma:
|
||||||
|
add %ax,%si
|
||||||
|
mov (%esi),%edx
|
||||||
|
mov %edx,%esi
|
||||||
|
movl $0x055555555,(%esi)
|
||||||
|
movl $0x0aaaaaaaa,(%esi)
|
||||||
|
cmpl $0x055555555,%esi
|
||||||
|
jz 1f
|
||||||
|
jmp ma_detect_end
|
||||||
|
1:
|
||||||
|
movl $ma_table,%esi
|
||||||
|
add %ax,%si
|
||||||
|
mov 4(%esi),%dl
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jz 1f
|
||||||
|
xor %ecx,%ecx
|
||||||
|
mov %dl,%cl
|
||||||
|
shl $16,%ecx
|
||||||
|
jmp memory_sizing_sub
|
||||||
|
1:
|
||||||
|
ror $20,%ecx
|
||||||
|
mov %dl,%cl
|
||||||
|
rol $20,%ecx
|
||||||
|
jmp memory_sizing_sub
|
||||||
|
ma_detect_end:
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro MA_DETECT
|
||||||
|
***/
|
||||||
add $5,%ax
|
add $5,%ax
|
||||||
cmp $25,%ax
|
cmp $25,%ax
|
||||||
jz 1f
|
jz 1f
|
||||||
|
@ -726,7 +531,157 @@ configure_ma:
|
||||||
add $2,%al
|
add $2,%al
|
||||||
pci_write_byte
|
pci_write_byte
|
||||||
|
|
||||||
MEMORY_SIZING
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro MEMORY_SIZING
|
||||||
|
***/
|
||||||
|
mov %si,%di
|
||||||
|
mov $10,%eax
|
||||||
|
mov %cl,%dl
|
||||||
|
and $0x0f,%dl
|
||||||
|
mul %dl
|
||||||
|
movl $sizing_table,%esi
|
||||||
|
addw %ax,%si
|
||||||
|
mov 8(%esi),%dl
|
||||||
|
mov 8(%esi),%dh
|
||||||
|
ror $16,%edx
|
||||||
|
mov 9(%esi),%dl
|
||||||
|
rol $16,%edx
|
||||||
|
mov %esi,%eax
|
||||||
|
mov %eax,%esi
|
||||||
|
memory_sizing_loop:
|
||||||
|
cmp %dl,%dh
|
||||||
|
jz 1f
|
||||||
|
cmpl $0x0aaaaaaaa,0(%esi)
|
||||||
|
jz 1f
|
||||||
|
memory_error
|
||||||
|
mov %di,%si
|
||||||
|
jmp prepare_next_detect
|
||||||
|
1:
|
||||||
|
movl $0x55555555,0(%esi)
|
||||||
|
movl $0x0aaaaaaaa,0(%esi)
|
||||||
|
cmpl $0x55555555,0(%esi)
|
||||||
|
jz determine_size
|
||||||
|
cmp $0,%dl
|
||||||
|
jnz 1f
|
||||||
|
memory_error
|
||||||
|
mov %di,%si
|
||||||
|
jmp prepare_next_detect
|
||||||
|
1:
|
||||||
|
dec %dl
|
||||||
|
ror $16,%edx
|
||||||
|
mov %dl,%al
|
||||||
|
rol $16,%edx
|
||||||
|
cmp %al,%dl
|
||||||
|
jnz 1f
|
||||||
|
shr $1,%esi
|
||||||
|
1:
|
||||||
|
shr $1,%esi
|
||||||
|
jmp memory_sizing_loop
|
||||||
|
determine_size:
|
||||||
|
sub %dl,%dh
|
||||||
|
cmp $2,%dh
|
||||||
|
jae 1f
|
||||||
|
or $0x20000,%ebx
|
||||||
|
1:
|
||||||
|
xor %dx,%dx
|
||||||
|
find_memory_size_offset:
|
||||||
|
cmp $0x00200000,%esi
|
||||||
|
jz 1f
|
||||||
|
shr $1,%esi
|
||||||
|
inc %dx
|
||||||
|
jmp find_memory_size_offset
|
||||||
|
1:
|
||||||
|
movl $memory_size,%esi
|
||||||
|
addw %dx,%si
|
||||||
|
mov $0,%dx
|
||||||
|
orb 0(%esi),%dl
|
||||||
|
or %dx,%bx
|
||||||
|
mov %di,%si
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jz second_bank_number
|
||||||
|
mov $0x10,%ch
|
||||||
|
jmp read_dram_type
|
||||||
|
second_bank_number:
|
||||||
|
mov $0x11,%ch
|
||||||
|
read_dram_type:
|
||||||
|
save_dram_type
|
||||||
|
cmp $0x01,%al
|
||||||
|
jz EDO_T
|
||||||
|
cmp $0x00,%al
|
||||||
|
jz EDO_T
|
||||||
|
cmp $0x02,%al
|
||||||
|
jz determine_bank_number
|
||||||
|
or $0x40000,%ebx
|
||||||
|
determine_bank_number:
|
||||||
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro bank_number
|
||||||
|
***/
|
||||||
|
and (~0x80000),%ebx
|
||||||
|
test $0x40000,%ebx
|
||||||
|
jnz configure_internal_bank_end
|
||||||
|
mov %cx,%di
|
||||||
|
mov (%esi),%al
|
||||||
|
add $1,%al
|
||||||
|
pci_read_byte
|
||||||
|
and $0x0ef,%al
|
||||||
|
mov %al,%cl
|
||||||
|
mov (%esi),%al
|
||||||
|
add $1,%al
|
||||||
|
pci_write_byte
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_byte
|
||||||
|
and $0x0fc,%al
|
||||||
|
or $1,%al
|
||||||
|
mov %al,%cl
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_byte
|
||||||
|
mov %di,%cx
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jz 1f
|
||||||
|
ror $16,%ecx
|
||||||
|
jmp what_memory_ma
|
||||||
|
1:
|
||||||
|
ror $20,%ecx
|
||||||
|
what_memory_ma:
|
||||||
|
movl $0x055555555,%es:(0x0)
|
||||||
|
mov %cx,%ax
|
||||||
|
test $0x10000,%ebx
|
||||||
|
rol $16,%ecx
|
||||||
|
jnz 1f
|
||||||
|
rol $4,%ecx
|
||||||
|
1:
|
||||||
|
and $0x0f,%ax
|
||||||
|
mov $4,%dl
|
||||||
|
mul %dl
|
||||||
|
mov %si,%di
|
||||||
|
movl $internal_bank_tbl, %esi
|
||||||
|
add %ax,%si
|
||||||
|
movl (%esi),%edx
|
||||||
|
mov %edx,%esi
|
||||||
|
movl $0x0aaaaaaaa,(%esi)
|
||||||
|
cmpl $0x055555555,%es:(0x0)
|
||||||
|
mov %di,%si
|
||||||
|
jz i_4_bank
|
||||||
|
mov %cx,%di
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_byte
|
||||||
|
and $0x0fc,%al
|
||||||
|
mov %al,%cl
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_byte
|
||||||
|
mov %di,%cx
|
||||||
|
i_4_bank:
|
||||||
|
or $0x80000,%ebx
|
||||||
|
configure_internal_bank_end:
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro bank_number
|
||||||
|
***/
|
||||||
|
EDO_T:
|
||||||
|
and (~0x20000),%ebx
|
||||||
|
and (~0x40000),%ebx
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro MEMORY_SIZING
|
||||||
|
***/
|
||||||
|
|
||||||
mov (%esi),%al
|
mov (%esi),%al
|
||||||
add $2,%al
|
add $2,%al
|
||||||
|
@ -739,8 +694,35 @@ configure_ma:
|
||||||
mov %al,%cl
|
mov %al,%cl
|
||||||
mov (%esi),%al
|
mov (%esi),%al
|
||||||
add $2,%al
|
add $2,%al
|
||||||
pci_write_byte
|
pci_write_byte
|
||||||
CHECK_SUB
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro CHECK_SUB
|
||||||
|
***/
|
||||||
|
test $0x10000,%ebx
|
||||||
|
jnz 1f
|
||||||
|
mov %bx,%ax
|
||||||
|
and $0x03f,%ax
|
||||||
|
mov %al,%ah
|
||||||
|
and $0x07,%al
|
||||||
|
shr $3,%ah
|
||||||
|
cmp %al,%ah
|
||||||
|
jz 2f
|
||||||
|
set_no_dram
|
||||||
|
jmp 1f
|
||||||
|
2:
|
||||||
|
shr $16,%ecx
|
||||||
|
mov %cx,%ax
|
||||||
|
and $0x0ff,%ax
|
||||||
|
mov %al,%ah
|
||||||
|
and $0x0f,%al
|
||||||
|
shr $4,%ah
|
||||||
|
cmp %al,%ah
|
||||||
|
jz 1f
|
||||||
|
set_no_dram
|
||||||
|
1:
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro CHECK_SUB
|
||||||
|
***/
|
||||||
prepare_next_detect:
|
prepare_next_detect:
|
||||||
test $0x10000,%ebx
|
test $0x10000,%ebx
|
||||||
jnz odd_bank_detect
|
jnz odd_bank_detect
|
||||||
|
@ -751,7 +733,43 @@ detect_block_again_end:
|
||||||
jz configure_memory_block
|
jz configure_memory_block
|
||||||
jmp detect_block_again
|
jmp detect_block_again
|
||||||
configure_memory_block:
|
configure_memory_block:
|
||||||
CONFIGURE_MEMORY
|
/***
|
||||||
|
*** sungeun *** BEGIN "inlined" macro CONFIGURE_MEMORY
|
||||||
|
***/
|
||||||
|
movl $dram_temp,%esi
|
||||||
|
mov (%esi),%dl
|
||||||
|
mov $0x094,%bl
|
||||||
|
configure_next:
|
||||||
|
xor %edi,%edi
|
||||||
|
mov %bl,%al
|
||||||
|
pci_read_byte
|
||||||
|
cmp $0x00,%al
|
||||||
|
jz 1f
|
||||||
|
or $0x3,%di
|
||||||
|
1:
|
||||||
|
shl $2,%di
|
||||||
|
inc %bl
|
||||||
|
mov %bl,%al
|
||||||
|
pci_read_byte
|
||||||
|
inc %bl
|
||||||
|
cmp $0x00,%al
|
||||||
|
jz 1f
|
||||||
|
or $0x03,%di
|
||||||
|
1:
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_write_dword
|
||||||
|
and $0x0f87fffff,%eax
|
||||||
|
shl $23,%edi
|
||||||
|
or %edi,%eax
|
||||||
|
mov %eax,%edi
|
||||||
|
mov (%esi),%al
|
||||||
|
pci_read_dword
|
||||||
|
inc %si
|
||||||
|
cmpb $0x78,(%esi)
|
||||||
|
jnz configure_next
|
||||||
|
/***
|
||||||
|
*** sungeun *** END "inlined" macro CONFIGURE_MEMORY
|
||||||
|
***/
|
||||||
mov $0x7e,%ax
|
mov $0x7e,%ax
|
||||||
mov (0b11110111 << 8)+0b00000000,%cx
|
mov (0b11110111 << 8)+0b00000000,%cx
|
||||||
pci_read_write_byte
|
pci_read_write_byte
|
||||||
|
|
Loading…
Add table
Reference in a new issue