Fixed a bug within the 440BX RAM size calculation. Since the DRB values
[coreboot.git] / src / devices / hypertransport.c
index 6d37ab5764880325d57f0a40337dd8376eee5df8..6d4836b87a0c204aa45cd1a15292916f2668da91 100644 (file)
@@ -1,9 +1,32 @@
 /*
-       2005.11 yhlu add let the real sb to use small uintid
+ * This file is part of the LinuxBIOS project.
+ *
+ * Copyright (C) 2003-2004 Linux Networx
+ * (Written by Eric Biederman <ebiederman@lnxi.com> for Linux Networx)
+ * Copyright (C) 2004 David Hendricks <sc@flagen.com>
+ * Copyright (C) 2004 Li-Ta Lo <ollie@lanl.gov>
+ * Copyright (C) 2005-2006 Tyan
+ * (Written by Yinghai Lu <yhlu@tyan.com> for Tyan)
+ * Copyright (C) 2005-2006 Stefan Reinauer <stepan@openbios.org>
+ *
+ * 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; version 2 of the License.
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
 
+/*
+       2005.11 yhlu add let the real sb to use small uintid
 */
 
-
 #include <bitops.h>
 #include <console/console.h>
 #include <device/device.h>
@@ -78,9 +101,11 @@ static unsigned ht_read_freq_cap(device_t dev, unsigned pos)
        /* AMD K8 Unsupported 1Ghz? */
        if ((dev->vendor == PCI_VENDOR_ID_AMD) && (dev->device == 0x1100)) {
 #if K8_HT_FREQ_1G_SUPPORT == 1 
+       #if K8_REV_F_SUPPORT == 0 
                if (is_cpu_pre_e0()) { // only e0 later suupport 1GHz HT
                        freq_cap &= ~(1 << HT_FREQ_1000Mhz);
                } 
+       #endif
 #else
                freq_cap &= ~(1 << HT_FREQ_1000Mhz);
 #endif
@@ -450,8 +475,8 @@ unsigned int hypertransport_scan_chain(struct bus *bus,
                }
 
                flags &= ~0x1f; /* mask out base Unit ID */
-                       flags |= next_unitid & 0x1f;
-                       pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
+                flags |= next_unitid & 0x1f;
+                pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
 
                /* Update the Unitd id in the device structure */
                static_count = 1;
@@ -490,7 +515,6 @@ unsigned int hypertransport_scan_chain(struct bus *bus,
                        dev->vendor, dev->device, 
                        (dev->enabled? "enabled": "disabled"), next_unitid);
 
-
        } while((last_unitid != next_unitid) && (next_unitid <= (max_devfn >> 3)));
  end_of_chain:
 #if OPT_HT_LINK == 1
@@ -560,9 +584,17 @@ unsigned int hypertransport_scan_chain(struct bus *bus,
  *
  * @return The maximum bus number found, after scanning all subordinate busses
  */
+unsigned int hypertransport_scan_chain_x(struct bus *bus,
+        unsigned min_devfn, unsigned max_devfn, unsigned int max)
+{
+       unsigned ht_unitid_base[4];
+       unsigned offset_unitid = 1;
+       return hypertransport_scan_chain(bus, min_devfn, max_devfn, max, ht_unitid_base, offset_unitid);
+}
+
 unsigned int ht_scan_bridge(struct device *dev, unsigned int max)
 {
-       return do_pci_scan_bridge(dev, max, hypertransport_scan_chain);
+       return do_pci_scan_bridge(dev, max, hypertransport_scan_chain_x);
 }