diff --git a/src/drivers/pci/Makefile.inc b/src/drivers/pci/Makefile.inc new file mode 100644 index 0000000000..09ac260c9c --- /dev/null +++ b/src/drivers/pci/Makefile.inc @@ -0,0 +1 @@ +subdirs-y += onboard diff --git a/src/drivers/pci/onboard/Config.lb b/src/drivers/pci/onboard/Config.lb new file mode 100644 index 0000000000..d249df4658 --- /dev/null +++ b/src/drivers/pci/onboard/Config.lb @@ -0,0 +1,4 @@ +config chip.h + +object onboard.o + diff --git a/src/drivers/pci/onboard/Makefile.inc b/src/drivers/pci/onboard/Makefile.inc new file mode 100644 index 0000000000..5a16314cce --- /dev/null +++ b/src/drivers/pci/onboard/Makefile.inc @@ -0,0 +1 @@ +obj-y += onboard.o diff --git a/src/drivers/pci/onboard/chip.h b/src/drivers/pci/onboard/chip.h new file mode 100644 index 0000000000..f06f53ec7a --- /dev/null +++ b/src/drivers/pci/onboard/chip.h @@ -0,0 +1,11 @@ +#ifndef PCI_ONBOARD_H +#define PCI_ONBOARD_H + +struct drivers_pci_onboard_config +{ + unsigned long rom_address; +}; +struct chip_operations; +extern struct chip_operations drivers_pci_onboard_ops; + +#endif diff --git a/src/drivers/pci/onboard/onboard.c b/src/drivers/pci/onboard/onboard.c new file mode 100644 index 0000000000..58e6816f23 --- /dev/null +++ b/src/drivers/pci/onboard/onboard.c @@ -0,0 +1,78 @@ +/* + * Copyright 2004 Tyan Computer + * by yhlu@tyan.com + */ + +#include + +#include +#include +#include +#include +#include "chip.h" + +/* + * How to use the onboard device driver for option rom execution: + * + * 1. You need to add the driver to your mainboard Config.lb: + * + * chip drivers/pci/onboard + * device pci x.0 on end + * register "rom_address" = "0xfff80000" + * end + * 2. Reduce the size of your normal (or fallback) image, by adding the + * following lines to your target Config.lb, after romimage "normal" + * # 48K for SCSI FW or ATI ROM + * option CONFIG_ROM_SIZE = 512*1024-48*1024 + * 3. Create your vgabios.bin, for example using awardeco and put it in the + * directory of your target Config.lb. You can also read an option rom from + * a running system, but this is unreliable, as some option roms are changed + * during execution: + * # dd if=/dev/mem of=atix.rom skip=1536 count=96 + * 4. After you built coreboot.rom, attach the option rom to your coreboot + * image: + * # cat ../atix.rom ./normal/coreboot.rom ./fallback/coreboot.rom > coreboot.rom + * + * Alternatively you can use the following script "nsxv" to build your image + * Usage: + * # ./nsxv s2850 + * + * #!/bin/bash + * MBVENDOR=tyan + * MBMODEL=$1 + * LBROOT=/home/yhlu/xx/xx + * + * echo $1 + * date + * + * cd "$LBROOT/freebios2/targets" + * rm -rf "$MBVENDOR/$MBMODEL/$MBMODEL" + * ./buildtarget "$MBVENDOR/$MBMODEL" &> "$LBROOT/x_b.txt" + * cd "$MBVENDOR/$MBMODEL/$MBMODEL" + * #make clean + * eval make &> "$LBROOT/x_m.txt" + * if [ $? -eq 0 ]; then + * echo "ok." + * else + * echo "FAILED! Log excerpt:" + * tail -n 15 "$LBROOT/x_m.txt" + * exit + * fi + * cat ../atix.rom ./normal/coreboot.rom ./fallback/coreboot.rom > "$LBROOT/rom/"$MBMODEL"_coreboot.rom" + * cp -f "$LBROOT/rom/"$MBMODEL"_coreboot.rom" /home/yhlu/ + * + * date + * + */ + +static void onboard_enable(device_t dev) +{ + struct drivers_pci_onboard_config *conf; + conf = dev->chip_info; + dev->rom_address = conf->rom_address; +} + +struct chip_operations drivers_pci_onboard_ops = { + CHIP_NAME("Onboard PCI") + .enable_dev = onboard_enable, +};