mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
ipl for the cua
config.DoC sample
This commit is contained in:
parent
8eb557da83
commit
359a95ff2b
2 changed files with 549 additions and 0 deletions
38
src/mainboard/asus/cua/config.DoC
Normal file
38
src/mainboard/asus/cua/config.DoC
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Sample config file for ACER M1631 CHIPSET ON A ASUS
|
||||
# with DoC Millennium (as root)
|
||||
|
||||
# This will make a target directory of ./asus-cua
|
||||
target asus-cua
|
||||
|
||||
# ASUS CUA main board
|
||||
mainboard asus/cua
|
||||
|
||||
# ****************** NEED CORRECT DOC IPL
|
||||
# use DOC MIL
|
||||
option USE_DOC_MIL
|
||||
docipl northbridge/acer/m1631/ipl.S
|
||||
|
||||
# Enable Serial Console for debugging
|
||||
option SERIAL_CONSOLE
|
||||
|
||||
# Enable MicroCode update and L2 Cache init for PII and PIII
|
||||
#option UPDATE_MICROCODE
|
||||
#option CONFIGURE_L2_CACHE
|
||||
|
||||
# Use the internal VGA frame buffer device
|
||||
#option HAVE_FRAMEBUFFER
|
||||
|
||||
# I want that floppy ...
|
||||
option MUST_ENABLE_FLOPPY
|
||||
|
||||
# *****************MODIFIED BY BHARATH********************
|
||||
# Path to your kernel (vmlinux)
|
||||
linux /usr/src/linux-2.4.7
|
||||
|
||||
# Kernel command line parameters
|
||||
#commandline root=/dev/hda2 console=ttyS0,115200 console=tty0 single
|
||||
# *******************MODIFIED BY BHARATH (root=/dev/hda5 and floppy=nodma)****************
|
||||
commandline root=/dev/hda5 console=ttyS0,115200 floppy=nodma console=tty0 video=sisfb:1024x768-8@60
|
||||
|
||||
|
||||
|
511
src/mainboard/asus/cua/ipl.S
Normal file
511
src/mainboard/asus/cua/ipl.S
Normal file
|
@ -0,0 +1,511 @@
|
|||
/*
|
||||
* ipl.S: Initial Program Loader (IPL) for M1535D and M-System DoC Millennium
|
||||
*
|
||||
* MODIFIED BY BHARATH ON 09/12/01
|
||||
*
|
||||
* ORIGINAL Reference:
|
||||
* 1. SiS 630 Specification
|
||||
* 2. System Management Bus Specification Rev 1.1
|
||||
* 3. PC SDRAM Serial Presence Detect (SPD) Specification Rev 1.2B
|
||||
* 4. Booting From the DiskOnChip Millennium, M-Systems Application Note Ap-DOC-044
|
||||
* APR-2000, 93-SR-001-44-7L REV. 1.0
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include "ipl.h"
|
||||
/*
|
||||
.org 0xfe000
|
||||
*/
|
||||
.code16
|
||||
|
||||
ali_start:
|
||||
/* Must set regs on North Bridge (device 0) */
|
||||
|
||||
movw $0x00f9, %cx /*f9h*/
|
||||
movb $0x08, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
movb $0x8c,%al /* 8eh */
|
||||
movb $0xf8,%dl
|
||||
outl %eax,%dx
|
||||
movb $0xfe,%dl
|
||||
inb %dx,%al
|
||||
orb $0x08,%al
|
||||
# movb $0xeb, %al
|
||||
outb %al,%dx
|
||||
|
||||
|
||||
movb $0x82, %cl /* 82h */
|
||||
movb $0x10, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
/* CHANGED TO 0x88e3 BY BHARATH FOR M7101 */
|
||||
|
||||
movw $0x88e3, %cx /* M7101 e3h*/
|
||||
movb $0x50, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
/* COMMENTED OUT BY BHARATH - NOT NEEDED FOR M1535D */
|
||||
|
||||
/*
|
||||
movb $0x04, %cl
|
||||
movb $0x01, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
movw $0x88e0, %ax
|
||||
movb $0xf8, %dl
|
||||
outl %eax, %dx
|
||||
movb $0xff, %dl
|
||||
inb %dx, %al
|
||||
outb %al, $0x80 cheng 0615 test
|
||||
movb $0x66, %al
|
||||
outb %al, $0x80
|
||||
*/
|
||||
|
||||
/*
|
||||
movb $0xe2, %cl
|
||||
movb $0x00, %al
|
||||
CALL_SP(SET_PCI)
|
||||
*/
|
||||
|
||||
/* UNCOMMENTED BY BHARATH - NEEDED FOR M1535D */
|
||||
|
||||
movb $0xd1, %cl /*1535d d1 reg and 1543c have not same*/
|
||||
movb $0x46, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
/* CHANGED TO f0 BY BHARATH */
|
||||
|
||||
movb $0xf0, %cl /*1535d f0 reg 1543c e0 reg*/
|
||||
movb $0x01, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
/* COMMENTED OUT BY BHARATH - NOT NEEDED FOR M1535D */
|
||||
|
||||
/*
|
||||
movb $0xe2, %cl
|
||||
movb $0x20, %al
|
||||
CALL_SP(SET_PCI) */
|
||||
|
||||
#if 0
|
||||
/* UNCOMMENTED BY BHARATH - NEEDED FOR M1535D */
|
||||
/* but we don't have much room. */
|
||||
|
||||
movb $0x80, %cl
|
||||
movb $0x3e, %al
|
||||
CALL_SP(SET_PCI)
|
||||
#endif
|
||||
/* OK, we need to disable some GPOs (!@#$?)
|
||||
Ron also figured the input in AL should be 0x40*/
|
||||
|
||||
movb $0xb8,%cl
|
||||
movb $0x40,%al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
movw $0x3847, %cx
|
||||
movb $0x40, %al
|
||||
CALL_SP(SET_PCI)
|
||||
/*--------------------------sizing loop start---------------------*/
|
||||
|
||||
movw $0xa16e, %si #cheng0607 as table before
|
||||
sizing_loop_start:
|
||||
cli # Disables the maskable
|
||||
# hardware interrupts.
|
||||
movw %cs, %ax # makes data segment ==
|
||||
movw %ax, %ds # code segment
|
||||
|
||||
movw %si, %bx
|
||||
|
||||
movb $0x02, %bl
|
||||
CALL_SP(I2C_read_byte)
|
||||
|
||||
cmpb $0x04, %al /*exist dram ?*/
|
||||
jnz sizing_end
|
||||
|
||||
addb $0x02, %bl
|
||||
CALL_SP(I2C_read_byte)
|
||||
|
||||
movb %al, %ah /*ah=column address bits*/
|
||||
subb $0x08, %ah /*convert to data sheet value*/
|
||||
|
||||
addb $0x01, %bl
|
||||
CALL_SP(I2C_read_byte)
|
||||
|
||||
shlb $0x04, %ah /*ah[7,6,5,4]=ca type*/
|
||||
movb %al, %bl /*bl=al=number of row*/
|
||||
|
||||
movb $0x0c, %al
|
||||
cmpb $0x01, %bl
|
||||
jz row_ok /*1 row*/
|
||||
movb $0x0f, %al
|
||||
# cmpb $0x02, %bl
|
||||
# jz row_ok /*2 rows*/
|
||||
# jmp sizing_end /*no rows*/
|
||||
|
||||
row_ok:
|
||||
orb %al, %ah /*ah=[ca type][number of rows]*/
|
||||
|
||||
/*get size*/
|
||||
movb $0x01f, %bl
|
||||
CALL_SP(I2C_read_byte) /*get row size*/
|
||||
|
||||
clc #convert spd value to data sheet value
|
||||
movb $0x00, %cl #chang on 0607 by cheng
|
||||
aa:
|
||||
shrb $0x01, %al
|
||||
jc size_ok
|
||||
inc %cl
|
||||
jmp aa
|
||||
|
||||
size_ok:
|
||||
movb %cl, %al /*bit: 15...12 11...........8 7......0 */
|
||||
/*ax= [ca type][number of rows][row size]*/
|
||||
movw %ax, %di /*di= [ca type][number of rows][row size]*/
|
||||
|
||||
movw %si, %cx
|
||||
xorb %ch, %ch /*cheng0606 movw $M1631, %cx */
|
||||
/*;as up mov cl, cs:[Dis_Row_Tbl][si] /cl=6eh/72h/76h */
|
||||
|
||||
movw %di, %bx
|
||||
andb $0x01, %bh
|
||||
shlb $0x03, %bh
|
||||
orb %bh, %bl /*bl= bit23-20*/
|
||||
movb %bl, %al /*al= bit23-20*/
|
||||
/*bit: 15.........12 11....4 3....0 */
|
||||
rorw $0x0c, %di /*di= [number of rows][row size][ca type]*/
|
||||
movw %di, %bx
|
||||
andb $0x0f, %bl /*bl=ca type*/
|
||||
shlb $0x04, %al
|
||||
orb %bl, %al /*al=reg:6eh/72h/76h value*/
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
inc %cl
|
||||
/*;;; ROM_CALL Get_PCI */
|
||||
/*;;; and al, 11100000b */
|
||||
/*;;; or al, 00010000b /set sdram */
|
||||
movb $0xf0, %al /*set bit[31-27]*/
|
||||
shrb $5, %bh
|
||||
orb %bh, %al
|
||||
|
||||
# outb %al, $0x80 /*-----cheng 0618-----*/
|
||||
|
||||
CALL_SP(SET_PCI)
|
||||
jmp chk_loop
|
||||
|
||||
/*if error, go here*/
|
||||
sizing_end:
|
||||
movw %si, %cx
|
||||
#cheng0606 movw $M1631, %cx
|
||||
xorb %ch, %ch
|
||||
Dis_Next_Row_Data:
|
||||
|
||||
/*;as up mov cl, cs:[Dis_Row_Tbl][si]*/
|
||||
#cheng 0615 movb $0x00, %al
|
||||
#cheng 0615 CALL_SP(SET_PCI)
|
||||
|
||||
addb $0x01, %cl
|
||||
|
||||
# movb %cl, %al /*cheng 0621*/
|
||||
# outb %al, $0x80 /*cheng 0621*/
|
||||
|
||||
movb $0xe0, %al
|
||||
CALL_SP(SET_PCI)
|
||||
|
||||
chk_loop:
|
||||
# movw %si, %ax
|
||||
# outb %al, $0x80 #cheng0608 for test
|
||||
|
||||
addw $0x0204, %si
|
||||
cmpw $0xa77a, %si
|
||||
jnz sizing_loop_start
|
||||
|
||||
# movw %si, %ax
|
||||
# outb %al, $0x80
|
||||
movb $0x7e, %cl
|
||||
movb $0x2f, %al /*cheng 0628 ago is 28h*/
|
||||
CALL_SP(SET_PCI) /*cheng 0617 refresh on */
|
||||
|
||||
jmp ipl_start
|
||||
# nop
|
||||
|
||||
/*cheng0605 start------------------------------------------------*/
|
||||
|
||||
SET_PCI:
|
||||
# movb $0x22, %al
|
||||
# outb %al, $0x80 #cheng0611
|
||||
|
||||
rorl $16, %ecx
|
||||
movw %ax, %cx
|
||||
rorl $16, %ecx
|
||||
movl $0x80000000, %eax
|
||||
movw %cx, %ax
|
||||
andb $0x0fc, %al
|
||||
|
||||
movw $0x0cf8, %dx /*index is 0cf8h*/
|
||||
outl %eax, %dx
|
||||
addb $4, %dl /*start from 0cfch*/
|
||||
movb %cl, %al
|
||||
andb $0x03, %al
|
||||
addb %al, %dl /*byte index to read*/
|
||||
rorl $16, %ecx
|
||||
movw %cx, %ax
|
||||
rorl $16, %ecx
|
||||
outb %al, %dx
|
||||
RET_SP
|
||||
|
||||
/*
|
||||
* ipl.S: Initial Program Loader (IPL) for SiS 630 and M-System DoC Millennium
|
||||
*
|
||||
*
|
||||
* Copyright 2000 Silicon Integrated Systems Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
*
|
||||
* Reference:
|
||||
* 1. SiS 630 Specification
|
||||
* 2. System Management Bus Specification Rev 1.1
|
||||
* 3. PC SDRAM Serial Presence Detect (SPD) Specification Rev 1.2B
|
||||
* 4. Booting From the DiskOnChip Millennium, M-Systems Application Note Ap-DOC-044
|
||||
* APR-2000, 93-SR-001-44-7L REV. 1.0
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
/*
|
||||
.code32
|
||||
*/
|
||||
ipl_start:
|
||||
# movb $0x55, %al
|
||||
# outb %al, $0x80 /* cheng 0617 test */
|
||||
|
||||
/*#if 0*/
|
||||
/* stack and es already set. */
|
||||
/* O.K. we have DRAM now, so set up STACK for CALL/RET */
|
||||
movw $DOC_STACK_SEG, %ax
|
||||
movw %ax, %ss
|
||||
movw $SPL_RAM_SEG, %ax
|
||||
movw %ax, %es
|
||||
/* movl $DOC_STACK_SEG, %esp # set %sp */
|
||||
/*#endif*/
|
||||
/* NOTE: in ollie's original code, %ds was at 0xfe00, i.e.
|
||||
* 0xfe000, i.e. base of DoC. We have to adjust for that when
|
||||
* we set %edi and %si
|
||||
*/
|
||||
# movl $DOC_STACK, %esp # set %sp
|
||||
# movl $SPL_RAM, %edx # start of RAM
|
||||
# xorl %ecx, %ecx # clear %ecx
|
||||
xorw %sp, %sp /*cheng 0619*/
|
||||
xorw %dx, %dx /*cheng 0619*/
|
||||
|
||||
movw $0x800, %si # point %si to CDSN Data area
|
||||
movw $0x1000, %di # point %di to CDSN Control area
|
||||
movw $DOC_SPL_START_BLK, %bp # start page of LinuxBIOS
|
||||
|
||||
movb $0x84, %al # Reset DOC Millennium
|
||||
call doc_reset
|
||||
|
||||
movb $0x85, %al # Turn into Normal Mode
|
||||
call doc_reset
|
||||
|
||||
read_next_page:
|
||||
movw $0x1000, %di # point %di to CDSN Control area
|
||||
|
||||
flash_command:
|
||||
movb $0x03, 0x04(%di) # start command cycle
|
||||
movb $0x00, (%si) # issue flash command Read00
|
||||
call doc_cycle_end
|
||||
|
||||
movw %bp, %bx # %bp is current page number
|
||||
|
||||
flash_address:
|
||||
shll $0x08, %ebx
|
||||
movb $0x03, %cl # this one is DANGEROUS but I am
|
||||
# sure the upper 3 bytes == 0x00
|
||||
|
||||
movb $0x05, 0x04(%di) # start address cycle
|
||||
0:
|
||||
movb %bl, (%si) # write address to CDSNIO
|
||||
shrw $0x08, %bx # shift next address byte
|
||||
loop 0b
|
||||
|
||||
call doc_cycle_end
|
||||
|
||||
wait_for_flash_ready:
|
||||
/* delay by reding NOP register before polling the FLASH READY bit,
|
||||
this is inlined to save a call/ret pair */
|
||||
doc_delay:
|
||||
movb $0x04, %cl # this one is DANGEROUS but I am
|
||||
# sure the upper 3 bytes == 0x00
|
||||
# movb $0x33, %al
|
||||
# outb %al, $0x80 /*0618 test*/
|
||||
|
||||
0:
|
||||
movb 0x20(%di), %al # read DOC NOP retisger
|
||||
loop 0b # four times
|
||||
# outb %al, $0x80 /*0618 test*/
|
||||
|
||||
testb $0x80, 0x04(%di) # is flash ready ?
|
||||
jz wait_for_flash_ready
|
||||
|
||||
# movb $0x33, %al
|
||||
# outb %al, $0x80 /*---cheng 0618 test---*/
|
||||
|
||||
movb 0x1d(%di), %al # init read pipeline
|
||||
movw $0x100, %cx # 1 page = 512 bytes
|
||||
movw $0x800, %si # point %si to CDSN Data area
|
||||
movw %dx, %di # restore saved current destination
|
||||
rep
|
||||
movsw
|
||||
|
||||
movw %di, %dx # save current destination
|
||||
incw %bp # increse current page number
|
||||
cmpw $128, %bp # moved 63 KB ??
|
||||
jl read_next_page # no, read next page
|
||||
|
||||
sis630ipl_end:
|
||||
# jmp to 8000:0000, where SPL
|
||||
# (LinuxBIOS) starts in RAM
|
||||
# ljmp $0x10,$0x8000
|
||||
|
||||
# movb $0x66, %al
|
||||
# outb %al, $0x80 /*0618 test*/
|
||||
|
||||
jmp spl_vector
|
||||
|
||||
/* ------------------------------------------------------------------------------------------*/
|
||||
doc_reset:
|
||||
/* Input: AL = value write to DOC_CONTROL register
|
||||
Clobberd: CX */
|
||||
movb %al, 0x02(%di) # write DoC Control retister
|
||||
movb %al, 0x02(%di) # twice
|
||||
ret # End of doc_reset
|
||||
|
||||
doc_cycle_end:
|
||||
movb $0x00, 0x1e(%di) # flush write pepeline
|
||||
movb $0x01, 0x04(%di) # end command cycle
|
||||
ret
|
||||
|
||||
|
||||
/*---------------------------------------table--------------------*/
|
||||
/* dimm 0 1 2 */
|
||||
/*
|
||||
dimm_tbl:
|
||||
.byte 0x0a1, 0x0a3, 0x0a5
|
||||
size_tbl:
|
||||
.byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
|
||||
Dis_Row_Tbl:
|
||||
.byte 0x06e, 0x072, 0x076
|
||||
*/
|
||||
/*
|
||||
;=============================================
|
||||
; =
|
||||
; Read SPD value for Dram sizing = CHENG 3.7.2001
|
||||
; =
|
||||
; INPUT bl := offset to read =
|
||||
; bh := eeprom ID =
|
||||
; =
|
||||
; OUTPUT al := data =
|
||||
; carry clear = read successful =
|
||||
; carry set = read failed =
|
||||
; =
|
||||
; CHANGES REGISTERS: cx, dx, al =
|
||||
; =
|
||||
;=============================================
|
||||
*/
|
||||
I2C_read_byte:
|
||||
movw $0x5000, %dx
|
||||
movb $0x0ff, %al
|
||||
outb %al, %dx #clear status
|
||||
# movb $0x77, %al /*cheng 0615 test */
|
||||
# outb %al, $0x80
|
||||
|
||||
1:
|
||||
inb %dx, %al
|
||||
# nop
|
||||
# jmp c0
|
||||
#c0:
|
||||
testb $0x04, %al
|
||||
jz 1b #wait till idle
|
||||
|
||||
movb $0x03, %dl
|
||||
movb %bh, %al
|
||||
outb %al, %dx #spd address
|
||||
# nop
|
||||
# jmp c1
|
||||
#c1:
|
||||
movb $0x01, %dl
|
||||
movb $0x20, %al
|
||||
outb %al, %dx #set read/write byte command
|
||||
# nop
|
||||
# jmp c2
|
||||
#c2:
|
||||
movb $0x07, %dl
|
||||
movb %bl, %al
|
||||
outb %al, %dx #set the offset of register
|
||||
# nop
|
||||
# jmp c3
|
||||
#c3:
|
||||
movb $0x02, %dl
|
||||
movb $0x0ff, %al
|
||||
outb %al, %dx #start command
|
||||
# nop
|
||||
# jmp c4
|
||||
#c4:
|
||||
/*;wait for command complete*/
|
||||
movw $0x100, %cx #loop count
|
||||
movb $0x00, %dl
|
||||
chk_status_final:
|
||||
inb %dx, %al
|
||||
# nop
|
||||
# jmp c5
|
||||
#c5:
|
||||
testb $0x10, %al
|
||||
jnz send_ok
|
||||
loop chk_status_final
|
||||
/*;read failed*/
|
||||
#cheng0606 stc
|
||||
jmp spd_end
|
||||
send_ok:
|
||||
movb $0x04, %dl
|
||||
inb %dx, %al
|
||||
# nop
|
||||
# jmp c6
|
||||
#c6:
|
||||
#cheng0606 clc
|
||||
spd_end:
|
||||
RET_SP
|
||||
|
||||
/*cheng0605 end-----------------------------------------------*/
|
||||
|
||||
.org 0x01f0
|
||||
|
||||
reset_vector:
|
||||
.byte 0xea # jmp to fe00:0000, where IPL
|
||||
.word 0x0000, DOC_WIN_SEG # starts in DoC
|
||||
#.code32
|
||||
spl_vector:
|
||||
# movb $0x55, %al
|
||||
# outb %al, $0x80 /* cheng 0617 test */
|
||||
|
||||
.byte 0xea
|
||||
.word 0x0000, 0x8000
|
||||
|
||||
# invd
|
||||
# jmpl $0x10, $0x80000
|
||||
# jmpl $0x80000
|
||||
# put this here to buy some room!
|
||||
pad: .byte 0,0,0,0,0,0
|
Loading…
Add table
Reference in a new issue