On Fri, Apr 07, 2006 at 12:49:10PM -0700, Lu, Yinghai wrote:
> Can you send your cache_as_ram_auto.c and Config.lb in
> src/mainboard/tyan/s2881?

Sure, they are attached.

Thanks,
Ward.

-- 
Ward Vandewege <[EMAIL PROTECTED]>
Free Software Foundation - Senior System Administrator
#define ASSEMBLY 1
#define __ROMCC__

#define K8_4RANK_DIMM_SUPPORT 1

#if CONFIG_LOGICAL_CPUS==1
#define SET_NB_CFG_54 1
#endif
 
#include <stdint.h>
#include <device/pci_def.h>
#include <arch/io.h>
#include <device/pnp_def.h>
#include <arch/romcc_io.h>
#include <cpu/x86/lapic.h>
#include "option_table.h"
#include "pc80/mc146818rtc_early.c"
#include "pc80/serial.c"
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"

#include <cpu/amd/model_fxx_rev.h>
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
#include "northbridge/amd/amdk8/raminit.h"
#include "cpu/amd/model_fxx/apic_timer.c"
#include "lib/delay.c"

#if CONFIG_USE_INIT == 0
#include "lib/memcpy.c"
#endif

#include "cpu/x86/lapic/boot_cpu.c"
#include "northbridge/amd/amdk8/reset_test.c"
#include "northbridge/amd/amdk8/debug.c"
#include "superio/winbond/w83627hf/w83627hf_early_serial.c"

#include "cpu/amd/mtrr/amd_earlymtrr.c"
#include "cpu/x86/bist.h"

#include "northbridge/amd/amdk8/setup_resource_map.c"

#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)

#include "southbridge/amd/amd8111/amd8111_early_ctrl.c"

static void memreset_setup(void)
{
   if (is_cpu_pre_c0()) {
        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=0
   }
   else {
        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 16);  //REVC_MEMRST_EN=1
   }
        outb((0 << 7)|(0 << 6)|(0<<5)|(0<<4)|(1<<2)|(0<<0), SMBUS_IO_BASE + 0xc0 + 17);
}

static void memreset(int controllers, const struct mem_controller *ctrl)
{
   if (is_cpu_pre_c0()) {
        udelay(800);
        outb((0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0), SMBUS_IO_BASE + 0xc0 + 17); //REVB_MEMRST_L=1
        udelay(90);
   }
}

static inline void activate_spd_rom(const struct mem_controller *ctrl)
{
	/* nothing to do */
}

static inline int spd_read_byte(unsigned device, unsigned address)
{
	return smbus_read_byte(device, address);
}


#include "northbridge/amd/amdk8/raminit.c"
#include "resourcemap.c"
#include "northbridge/amd/amdk8/coherent_ht.c"
#include "sdram/generic_sdram.c"

#include "cpu/amd/dualcore/dualcore.c"


#include "cpu/amd/car/copy_and_run.c"

#include "cpu/amd/car/post_cache_as_ram.c"

#include "cpu/amd/model_fxx/init_cpus.c"


#if USE_FALLBACK_IMAGE == 1

#include "southbridge/amd/amd8111/amd8111_enable_rom.c"
#include "northbridge/amd/amdk8/early_ht.c"

void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
{
        unsigned last_boot_normal_x = last_boot_normal();

        /* Is this a cpu only reset? or Is this a secondary cpu? */
        if ((cpu_init_detectedx) || (!boot_cpu())) {
                if (last_boot_normal_x) {
                        goto normal_image;
                } else {
                        goto fallback_image;
                }
        }

        /* Nothing special needs to be done to find bus 0 */
        /* Allow the HT devices to be found */

        enumerate_ht_chain();

        amd8111_enable_rom();

        /* Is this a deliberate reset by the bios */
        if (bios_reset_detected() && last_boot_normal_x) {
                goto normal_image;
        }
        /* This is the primary cpu how should I boot? */
        else if (do_normal_boot()) {
                goto normal_image;
        }
        else {
                goto fallback_image;
        }
 normal_image:
        __asm__ volatile ("jmp __normal_image"
                : /* outputs */
                : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
                );

 fallback_image:
	;
}
#endif

void real_main(unsigned long bist, unsigned long cpu_init_detectedx);

void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
{

#if USE_FALLBACK_IMAGE == 1
        failover_process(bist, cpu_init_detectedx);
#endif
        real_main(bist, cpu_init_detectedx);

}

void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
{
	static const uint16_t spd_addr [] = {
			(0xa<<3)|0, (0xa<<3)|2, 0, 0,
			(0xa<<3)|1, (0xa<<3)|3, 0, 0,
#if CONFIG_MAX_PHYSICAL_CPUS > 1
			(0xa<<3)|4, (0xa<<3)|6, 0, 0,
			(0xa<<3)|5, (0xa<<3)|7, 0, 0,
#endif
	};

        int needs_reset;
        unsigned bsp_apicid = 0;

        struct mem_controller ctrl[8];
        unsigned nodes;

        if (bist == 0) {
                bsp_apicid = init_cpus(cpu_init_detectedx);
        }

	
 	w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
        uart_init();
        console_init();

	/* Halt if there was a built in self test failure */
	report_bist_failure(bist);

        setup_s2881_resource_map();

	needs_reset = setup_coherent_ht_domain();
	
#if CONFIG_LOGICAL_CPUS==1
        // It is said that we should start core1 after all core0 launched
	wait_all_core0_started();
        start_other_cores();
#endif

        wait_all_aps_started(bsp_apicid);

        needs_reset |= ht_setup_chains_x();

       	if (needs_reset) {
               	print_info("ht reset -\r\n");
               	soft_reset();
       	}

	enable_smbus();

        allow_all_aps_stop(bsp_apicid);

        nodes = get_nodes();
        //It's the time to set ctrl now;
        fill_mem_ctrl(nodes, ctrl, spd_addr);

        memreset_setup();
        sdram_initialize(nodes, ctrl);


	post_cache_as_ram();
}
##
## Compute the location and size of where this firmware image
## (linuxBIOS plus bootloader) will live in the boot rom chip.
##
if USE_FALLBACK_IMAGE
        default ROM_SECTION_SIZE   = FALLBACK_SIZE
        default ROM_SECTION_OFFSET = ( ROM_SIZE - FALLBACK_SIZE )
else
        default ROM_SECTION_SIZE   = ( ROM_SIZE - FALLBACK_SIZE )
        default ROM_SECTION_OFFSET = 0
end

##
## Compute the start location and size size of
## The linuxBIOS bootloader.
##
default PAYLOAD_SIZE            = ( ROM_SECTION_SIZE - ROM_IMAGE_SIZE )
default CONFIG_ROM_STREAM_START = (0xffffffff - ROM_SIZE + ROM_SECTION_OFFSET + 
1)

##
## Compute where this copy of linuxBIOS will start in the boot rom
##
default _ROMBASE      = ( CONFIG_ROM_STREAM_START + PAYLOAD_SIZE )

##
## Compute a range of ROM that can cached to speed up linuxBIOS,
## execution speed.
##
## XIP_ROM_SIZE must be a power of 2.
## XIP_ROM_BASE must be a multiple of XIP_ROM_SIZE
##
default XIP_ROM_SIZE=65536
default XIP_ROM_BASE = ( _ROMBASE + ROM_IMAGE_SIZE - XIP_ROM_SIZE )

arch i386 end 

##
## Build the objects we have code for in this directory.
##

driver mainboard.o

#dir /drivers/si/3114
object get_bus_conf.o
if HAVE_MP_TABLE object mptable.o end
if HAVE_PIRQ_TABLE object irq_tables.o end
if USE_DCACHE_RAM

if CONFIG_USE_INIT

makerule ./auto.o
        depends "$(MAINBOARD)/cache_as_ram_auto.c option_table.h"
        action "$(CC) -I$(TOP)/src -I. $(CPPFLAGS) 
$(MAINBOARD)/cache_as_ram_auto.c -Os -nostdinc -nostdlib -fno-builtin -Wall -c 
-o auto.o" 
end

else    
                
makerule ./auto.inc
        depends "$(MAINBOARD)/cache_as_ram_auto.c option_table.h"
        action "$(CC) -I$(TOP)/src -I. $(CPPFLAGS) 
$(MAINBOARD)/cache_as_ram_auto.c -Os -nostdinc -nostdlib -fno-builtin -Wall -c 
-S -o $@"         
        action "perl -e 's/.rodata/.rom.data/g' -pi $@"
        action "perl -e 's/.text/.section .rom.text/g' -pi $@"
end

end
else


##
## Romcc output
##
makerule ./failover.E
        depends "$(MAINBOARD)/failover.c ./romcc"
        action "./romcc -E -O --label-prefix=failover -I$(TOP)/src -I. 
$(CPPFLAGS) $(MAINBOARD)/failover.c -o $@"
end

makerule ./failover.inc
        depends "$(MAINBOARD)/failover.c ./romcc"
        action "./romcc    -O --label-prefix=failover -I$(TOP)/src -I. 
$(CPPFLAGS) $(MAINBOARD)/failover.c -o $@"
end

makerule ./auto.E
        depends "$(MAINBOARD)/auto.c option_table.h ./romcc"
        action  "./romcc -E -mcpu=k8 -O2 -I$(TOP)/src -I. $(CPPFLAGS) 
$(MAINBOARD)/auto.c -o $@"
end
makerule ./auto.inc
        depends "$(MAINBOARD)/auto.c option_table.h ./romcc"
        action  "./romcc    -mcpu=k8 -O2 -I$(TOP)/src -I. $(CPPFLAGS) 
$(MAINBOARD)/auto.c -o $@"
end

end
##
## Build our 16 bit and 32 bit linuxBIOS entry code
##
if USE_FALLBACK_IMAGE
        mainboardinit cpu/x86/16bit/entry16.inc
        ldscript /cpu/x86/16bit/entry16.lds
end

mainboardinit cpu/x86/32bit/entry32.inc

if USE_DCACHE_RAM
        if CONFIG_USE_INIT
                ldscript /cpu/x86/32bit/entry32.lds
        end

        if CONFIG_USE_INIT
                ldscript      /cpu/amd/car/cache_as_ram.lds
        end
end

##
## Build our reset vector (This is where linuxBIOS is entered)
##
if USE_FALLBACK_IMAGE 
        mainboardinit cpu/x86/16bit/reset16.inc 
        ldscript /cpu/x86/16bit/reset16.lds 
else
        mainboardinit cpu/x86/32bit/reset32.inc 
        ldscript /cpu/x86/32bit/reset32.lds 
end

if USE_DCACHE_RAM
else
### Should this be in the northbridge code?
mainboardinit arch/i386/lib/cpu_reset.inc
end

##
## Include an id string (For safe flashing)
##
mainboardinit arch/i386/lib/id.inc
ldscript /arch/i386/lib/id.lds

if USE_DCACHE_RAM
##
## Setup Cache-As-Ram
##
mainboardinit cpu/amd/car/cache_as_ram.inc
end

###
### This is the early phase of linuxBIOS startup 
### Things are delicate and we test to see if we should
### failover to another image.
###
if USE_FALLBACK_IMAGE
if USE_DCACHE_RAM
       ldscript /arch/i386/lib/failover.lds
else
       ldscript /arch/i386/lib/failover.lds
        mainboardinit ./failover.inc
end
end

###
### O.k. We aren't just an intermediary anymore!
###

##
## Setup RAM
##
if USE_DCACHE_RAM

if CONFIG_USE_INIT
initobject auto.o
else
mainboardinit ./auto.inc
end

else

##
## Setup RAM
##
mainboardinit cpu/x86/fpu/enable_fpu.inc
mainboardinit cpu/x86/mmx/enable_mmx.inc
mainboardinit cpu/x86/sse/enable_sse.inc
mainboardinit ./auto.inc
mainboardinit cpu/x86/sse/disable_sse.inc
mainboardinit cpu/x86/mmx/disable_mmx.inc

end

##
## Include the secondary Configuration files 
##
if CONFIG_CHIP_NAME
        config chip.h
end

# sample config for tyan/s2881
chip northbridge/amd/amdk8/root_complex
        device apic_cluster 0 on
                chip cpu/amd/socket_940
                        device apic 0 on end
                end
        end
        device pci_domain 0 on
                chip northbridge/amd/amdk8
                        device pci 18.0 on end # LDT0
                        device pci 18.0 on end # LDT1
                        device pci 18.0 on #  northbridge 
                                #  devices on link 2, link 2 == LDT 2
                                chip southbridge/amd/amd8131
                                        # the on/off keyword is mandatory
                                        device pci 0.0 on 
                                                chip drivers/pci/onboard
                                                        device pci 9.0 on end # 
Broadcom 5704
                                                        device pci 9.1 on end
                                                end
                                                chip drivers/pci/onboard
                                                        device pci a.0 on end # 
Adaptic
                                                        device pci a.1 on end
                                                end
                                        end
                                        device pci 0.1 on end
                                        device pci 1.0 on end
                                        device pci 1.1 on end
                                end
                                chip southbridge/amd/amd8111
                                        # this "device pci 0.0" is the parent 
the next one
                                        # PCI bridge
                                        device pci 0.0 on
                                                device pci 0.0 on end
                                                device pci 0.1 on end
                                                device pci 0.2 off end
                                                device pci 1.0 off end
                                                chip drivers/pci/onboard
                                                        device pci 5.0 on end # 
SiI
                                                end
                                                chip drivers/pci/onboard
                                                        device pci 6.0 on end
                                                        register "rom_address" 
= "0xfff80000"
                                                end
                                        end
                                        device pci 1.0 on
                                                chip superio/winbond/w83627hf
                                                        device pnp 2e.0 on #  
Floppy
                                                                io 0x60 = 0x3f0
                                                                irq 0x70 = 6
                                                                drq 0x74 = 2
                                                        end
                                                        device pnp 2e.1 off #  
Parallel Port
                                                                io 0x60 = 0x378
                                                                irq 0x70 = 7
                                                        end
                                                        device pnp 2e.2 on #  
Com1
                                                                io 0x60 = 0x3f8
                                                                irq 0x70 = 4
                                                        end
                                                        device pnp 2e.3 off #  
Com2
                                                                io 0x60 = 0x2f8
                                                                irq 0x70 = 3
                                                        end
                                                        device pnp 2e.5 on #  
Keyboard
                                                                io 0x60 = 0x60
                                                                io 0x62 = 0x64
                                                                irq 0x70 = 1
                                                                irq 0x72 = 12
                                                        end
                                                        device pnp 2e.6 off #  
CIR
                                                                io 0x60 = 0x100
                                                        end
                                                        device pnp 2e.7 off #  
GAME_MIDI_GIPO1
                                                                io 0x60 = 0x220
                                                                io 0x62 = 0x300
                                                                irq 0x70 = 9
                                                        end  
                                                        device pnp 2e.8 off end 
#  GPIO2
                                                        device pnp 2e.9 off end 
#  GPIO3
                                                        device pnp 2e.a off end 
#  ACPI
                                                        device pnp 2e.b on #  
HW Monitor
                                                                io 0x60 = 0x290
                                                                irq 0x70 = 5
                                                        end
                                                end
                                        end
                                        device pci 1.1 on end
                                        device pci 1.2 on end
                                        device pci 1.3 on 
                                                chip drivers/generic/generic 
#dimm 0-0-0
                                                        device i2c 50 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 0-0-1
                                                        device i2c 51 on end
                                                end     
                                                chip drivers/generic/generic 
#dimm 0-1-0
                                                        device i2c 52 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 0-1-1
                                                        device i2c 53 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 1-0-0
                                                        device i2c 54 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 1-0-1
                                                        device i2c 55 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 1-1-0
                                                        device i2c 56 on end
                                                end
                                                chip drivers/generic/generic 
#dimm 1-1-1
                                                        device i2c 57 on end
                                                end
                                                chip drivers/i2c/adm1027 # 
ADT7463A CPU0/1 temp, CPU1 vid, SYS FAN 1/2/3
                                                        device i2c 2d on end
                                                end
                                                chip drivers/generic/generic # 
Winbond HWM 0x54 CPU0/1 VRM temp, SYSFAN 4,CPU0 vid, CPU0/1 FAN
                                                        device i2c 2a on end
                                                end
                                                chip drivers/generic/generic # 
Winbond HWM 0x92
                                                        device i2c 49 on end
                                                end
                                                chip drivers/generic/generic # 
Winbond HWM 0x94
                                                        device i2c 4a on end
                                                end
                                        end # acpi
                                        device pci 1.5 off end
                                        device pci 1.6 off end
                                        register "ide0_enable" = "1"
                                        register "ide1_enable" = "1"
                                end
                        end #  device pci 18.0 
                        
                        device pci 18.1 on end
                        device pci 18.2 on end
                        device pci 18.3 on end
                end
        end 
end

-- 
linuxbios mailing list
[email protected]
http://www.openbios.org/mailman/listinfo/linuxbios

Reply via email to