From 8085f032f855474089e5b16fed16d689bf17550c Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Thu, 4 Nov 2004 21:00:13 +0000 Subject: [PATCH] SI Class code check git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1742 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/drivers/si/3114/si_sata.c | 32 ++++++- src/mainboard/tyan/s2735/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s2850/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s2875/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s2880/mainboard.c | 135 ++++++++++++++++++++++++++- src/mainboard/tyan/s2881/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s2882/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s2885/Config.lb | 3 + src/mainboard/tyan/s2885/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s4880/mainboard.c | 131 ++++++++++++++++++++++++++ src/mainboard/tyan/s4882/mainboard.c | 131 +++++++++++++++++++++++++- 11 files changed, 1210 insertions(+), 8 deletions(-) diff --git a/src/drivers/si/3114/si_sata.c b/src/drivers/si/3114/si_sata.c index 276dbe20f0..611ee5b8dd 100644 --- a/src/drivers/si/3114/si_sata.c +++ b/src/drivers/si/3114/si_sata.c @@ -1,6 +1,6 @@ -/* Copyright 2003 Tyan */ +/* Copyright 2003-2004 Tyan Computer*/ -/* Author: Yinghai Lu +/* Author: Yinghai Lu yhlu@tyan.com * */ @@ -20,15 +20,37 @@ static void si_sata_init(struct device *dev) { uint16_t word; - + uint32_t dword; +#if 0 word = pci_read_config16(dev, 0x4); word |= ((1 << 2) |(1<<4)); // Command: 3--> 17 pci_write_config16(dev, 0x4, word); +#endif + + /* some driver change class code to 0x104, but not change deviceid without reason*/ + /* restore it so we don't need to unplug AC power to restore it*/ + + word = pci_read_config16(dev, 0x0a); + if(word!=0x0180) { + /* enble change device id and class id*/ + dword = pci_read_config32(dev,0x40); + dword |= (1<<0); + pci_write_config32(dev, 0x40, dword); + + word = 0x0180; + pci_write_config16(dev, 0x0a, word); + + /* disable change device id and class id*/ + dword = pci_read_config32(dev,0x40); + dword &= ~(1<<0); + pci_write_config32(dev, 0x40, dword); + + printk_debug("Class code restored.\n"); + + } - printk_debug("SI_SATA_FIXUP: done \n"); } - static struct device_operations si_sata_ops = { .read_resources = pci_dev_read_resources, .set_resources = pci_dev_set_resources, diff --git a/src/mainboard/tyan/s2735/mainboard.c b/src/mainboard/tyan/s2735/mainboard.c index c2a68f341d..479e02d0f8 100644 --- a/src/mainboard/tyan/s2735/mainboard.c +++ b/src/mainboard/tyan/s2735/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2735_ops = { CHIP_NAME("Tyan s2735 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2850/mainboard.c b/src/mainboard/tyan/s2850/mainboard.c index 6ddd3e9727..c3aadd9bd3 100644 --- a/src/mainboard/tyan/s2850/mainboard.c +++ b/src/mainboard/tyan/s2850/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2850_ops = { CHIP_NAME("Tyan s2850 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2875/mainboard.c b/src/mainboard/tyan/s2875/mainboard.c index 81ce181e15..1fb9ac3655 100644 --- a/src/mainboard/tyan/s2875/mainboard.c +++ b/src/mainboard/tyan/s2875/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2875_ops = { CHIP_NAME("Tyan s2875 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2880/mainboard.c b/src/mainboard/tyan/s2880/mainboard.c index 655f6ee3a0..504c3ad2fb 100644 --- a/src/mainboard/tyan/s2880/mainboard.c +++ b/src/mainboard/tyan/s2880/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" -struct chip_operations mainboard_tyan_s2880_ops = { - CHIP_NAME("Tayn s2880 mainboard") +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + +struct chip_operations mainboard_tyan_s2880_ops = { + CHIP_NAME("Tyan s2880 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2881/mainboard.c b/src/mainboard/tyan/s2881/mainboard.c index fb9b9c8b8a..666f89632e 100644 --- a/src/mainboard/tyan/s2881/mainboard.c +++ b/src/mainboard/tyan/s2881/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2881_ops = { CHIP_NAME("Tyan s2881 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2882/mainboard.c b/src/mainboard/tyan/s2882/mainboard.c index a910114263..ea8824c745 100644 --- a/src/mainboard/tyan/s2882/mainboard.c +++ b/src/mainboard/tyan/s2882/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2882_ops = { CHIP_NAME("Tyan s2882 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s2885/Config.lb b/src/mainboard/tyan/s2885/Config.lb index 5b8ad9c3fa..1ece311125 100644 --- a/src/mainboard/tyan/s2885/Config.lb +++ b/src/mainboard/tyan/s2885/Config.lb @@ -39,6 +39,9 @@ arch i386 end ## driver mainboard.o + +dir /drivers/si/3114 + if HAVE_MP_TABLE object mptable.o end if HAVE_PIRQ_TABLE object irq_tables.o end #object reset.o diff --git a/src/mainboard/tyan/s2885/mainboard.c b/src/mainboard/tyan/s2885/mainboard.c index 3c7583dca9..3da6934b53 100644 --- a/src/mainboard/tyan/s2885/mainboard.c +++ b/src/mainboard/tyan/s2885/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s2885_ops = { CHIP_NAME("Tyan s2885 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s4880/mainboard.c b/src/mainboard/tyan/s4880/mainboard.c index fac83b534f..9693a3a46e 100644 --- a/src/mainboard/tyan/s4880/mainboard.c +++ b/src/mainboard/tyan/s4880/mainboard.c @@ -5,6 +5,137 @@ #include #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif + struct chip_operations mainboard_tyan_s4880_ops = { CHIP_NAME("Tyan s4880 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif }; diff --git a/src/mainboard/tyan/s4882/mainboard.c b/src/mainboard/tyan/s4882/mainboard.c index 1aabf1ed00..0088901328 100644 --- a/src/mainboard/tyan/s4882/mainboard.c +++ b/src/mainboard/tyan/s4882/mainboard.c @@ -3,10 +3,139 @@ #include #include #include -#include "../../../northbridge/amd/amdk8/northbridge.h" #include "chip.h" +#undef DEBUG +#define DEBUG 0 +#if DEBUG + +static void print_pci_regs(struct device *dev) +{ + uint8_t byte; + int i; + + for(i=0;i<256;i++) { + byte = pci_read_config8(dev, i); + + if((i & 0xf)==0) printk_debug("\n%02x:",i); + printk_debug(" %02x",byte); + } + printk_debug("\n"); + +} +static void print_mem(void) +{ + unsigned int i; + unsigned int start = 0xfffff000; + for(i=start;i<0xffffffff;i++) { + if((i & 0xf)==0) printk_debug("\n %08x:",i); + printk_debug(" %02x ",(unsigned char)*((unsigned char *)i)); + } + printk_debug(" %02x \n",(unsigned char)*((unsigned char *)i)); + + } +static void print_pci_regs_all(void) +{ + struct device *dev; + unsigned char i,j,k; + + for(i=0;i<=15;i++) { + for(j=0;j<=0x1f;j++) { + for (k=0;k<=6;k++){ + dev = dev_find_slot(i, PCI_DEVFN(j, k)); + if(!dev) { + continue; + } + if(!dev->enabled) { + continue; + } + printk_debug("\n%02x:%02x:%02x aka %s",i,j,k, dev_path(dev)); + print_pci_regs(dev); + } + } + } + +} + +static void debug_init(device_t dev) +{ + unsigned bus; + unsigned devfn; + +// print_pci_regs_all(); + + print_mem(); +#if 0 + msr_t msr; + unsigned index; + unsigned eax, ebx, ecx, edx; + index = 0x80000007; + printk_debug("calling cpuid 0x%08x\n", index); + asm volatile( + "cpuid" + : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) + : "a" (index) + ); + printk_debug("cpuid[%08x]: %08x %08x %08x %08x\n", + index, eax, ebx, ecx, edx); + if (edx & (3 << 1)) { + index = 0xC0010042; + printk_debug("Reading msr: 0x%08x\n", index); + msr = rdmsr(index); + printk_debug("msr[0x%08x]: 0x%08x%08x\n", + index, msr.hi, msr.hi); + } +#endif +} + +static void debug_noop(device_t dummy) +{ +} + +static struct device_operations debug_operations = { + .read_resources = debug_noop, + .set_resources = debug_noop, + .enable_resources = debug_noop, + .init = debug_init, +}; + +static unsigned int scan_root_bus(device_t root, unsigned int max) +{ + struct device_path path; + device_t debug; + max = root_dev_scan_bus(root, max); + path.type = DEVICE_PATH_PNP; + path.u.pnp.port = 0; + path.u.pnp.device = 0; + debug = alloc_dev(&root->link[1], &path); + debug->ops = &debug_operations; + return max; +} + + +static void mainboard_init(device_t dev) +{ + root_dev_init(dev); + // Do sth +} + +static struct device_operations mainboard_operations = { + .read_resources = root_dev_read_resources, + .set_resources = root_dev_set_resources, + .enable_resources = root_dev_enable_resources, + .init = mainboard_init, + .scan_bus = scan_root_bus, +}; + +static void enable_dev(struct device *dev) +{ + dev_root.ops = &mainboard_operations; +} +#endif struct chip_operations mainboard_tyan_s4882_ops = { CHIP_NAME("Tyan s4882 mainboard") +#if DEBUG + .enable_dev = enable_dev, +#endif };