SI Class code check
authorYinghai Lu <yinghailu@gmail.com>
Thu, 4 Nov 2004 21:00:13 +0000 (21:00 +0000)
committerYinghai Lu <yinghailu@gmail.com>
Thu, 4 Nov 2004 21:00:13 +0000 (21:00 +0000)
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1742 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

src/drivers/si/3114/si_sata.c
src/mainboard/tyan/s2735/mainboard.c
src/mainboard/tyan/s2850/mainboard.c
src/mainboard/tyan/s2875/mainboard.c
src/mainboard/tyan/s2880/mainboard.c
src/mainboard/tyan/s2881/mainboard.c
src/mainboard/tyan/s2882/mainboard.c
src/mainboard/tyan/s2885/Config.lb
src/mainboard/tyan/s2885/mainboard.c
src/mainboard/tyan/s4880/mainboard.c
src/mainboard/tyan/s4882/mainboard.c

index 276dbe20f05f184de2d6b2bb77540d958b49e5d8..611ee5b8dd0ddf43686d2648e25c2c8727958514 100644 (file)
@@ -1,6 +1,6 @@
-/* Copyright 2003 Tyan */
+/* Copyright 2003-2004 Tyan Computer*/
 
-/* Author: Yinghai Lu 
+/* Author: Yinghai Lu yhlu@tyan.com
  *
  */
 
 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
 
-       printk_debug("SI_SATA_FIXUP:  done  \n");
+       /* 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");
+
+       }
+
+       
+}
 static struct device_operations si_sata_ops  = {
        .read_resources   = pci_dev_read_resources,
        .set_resources    = pci_dev_set_resources,
index c2a68f341d7b57daeff1cf238dbefad2023018cc..479e02d0f89965c5601145d1a31782da28f743d2 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2735_ops = {
        CHIP_NAME("Tyan s2735 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index 6ddd3e9727eb533a2b894c2bffe6c38f18ee1f2c..c3aadd9bd35fbf699a239becff14d8c6af98e5f4 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2850_ops = {
        CHIP_NAME("Tyan s2850 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index 81ce181e15f555f84dbec532f0d410896f993032..1fb9ac36554697d58e80b5060d6abdee489da3d9 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2875_ops = {
        CHIP_NAME("Tyan s2875 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index 655f6ee3a019618964621d95abab8965e5dda969..504c3ad2fbac75d40d2ba8542ef0ceac9eb97b6e 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2880_ops = {
-       CHIP_NAME("Tayn s2880 mainboard")
+       CHIP_NAME("Tyan s2880 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index fb9b9c8b8ad10e4974ebf34113c7e3180584144c..666f89632e9d0c4ddf72683e3e48f24b3cc3f2a6 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2881_ops = {
        CHIP_NAME("Tyan s2881 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index a910114263ccc37ded2e0fef01001d0328aff5cd..ea8824c745e0a2430f12395484291cc0c56f22a4 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2882_ops = {
        CHIP_NAME("Tyan s2882 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index 5b8ad9c3fa351588d41af8e16035a5ae0b7835cc..1ece31112547b80169421e2829802a53921593a2 100644 (file)
@@ -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
index 3c7583dca9191d14cf05f5e3901b8444557bfd42..3da6934b5314b98ed9f7493ec24bb6566d744a87 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s2885_ops = {
        CHIP_NAME("Tyan s2885 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index fac83b534fef7e5e70f8be6f9e1680b3d828bf98..9693a3a46e7f6df0594f3eae97986d58d4013b99 100644 (file)
@@ -5,6 +5,137 @@
 #include <device/pci_ops.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_s4880_ops = {
        CHIP_NAME("Tyan s4880 mainboard")
+#if DEBUG
+       .enable_dev = enable_dev, 
+#endif
 };
index 1aabf1ed0018ece48b78264348cd061790eddddf..00889013287aac2d8f940d6b490a7d044948a070 100644 (file)
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <device/pci_ops.h>
-#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
 };