[coreboot-gerrit] New patch to review for coreboot: 140518c AMD K8 fam10: Add ht_route_link()
Kyösti Mälkki (kyosti.malkki@gmail.com)
gerrit at coreboot.org
Sat Feb 28 15:22:31 CET 2015
Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8556
-gerrit
commit 140518c33c292a8e526f101a96424519b5cb6412
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date: Mon Feb 23 12:05:33 2015 +0200
AMD K8 fam10: Add ht_route_link()
Change-Id: I41aeb80121f120641b65759c8502150ce89caa30
Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
src/northbridge/amd/amdfam10/northbridge.c | 29 +++++++++++-----------
src/northbridge/amd/amdk8/northbridge.c | 40 ++++++++++++++++--------------
2 files changed, 36 insertions(+), 33 deletions(-)
diff --git a/src/northbridge/amd/amdfam10/northbridge.c b/src/northbridge/amd/amdfam10/northbridge.c
index 49a28de..709bd0e 100644
--- a/src/northbridge/amd/amdfam10/northbridge.c
+++ b/src/northbridge/amd/amdfam10/northbridge.c
@@ -155,6 +155,20 @@ static bool is_non_coherent_link(struct device *dev, struct bus *link)
return !!(link_type & NonCoherent);
}
+static void ht_route_link(struct bus *link)
+{
+ u32 busses;
+
+ /* Configure the bus numbers for this bridge: the configuration
+ * transactions will not be propagated by the bridge if it is
+ * not correctly configured
+ */
+ busses = pci_read_config32(link->dev, link->cap + 0x14);
+ busses &= 0xffff00ff;
+ busses |= ((u32)(link->secondary) << 8);
+ pci_write_config32(link->dev, link->cap + 0x14, busses);
+}
+
static u32 amdfam10_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool is_sblink,
u32 max)
{
@@ -166,7 +180,6 @@ static u32 amdfam10_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool
u32 ht_unitid_base[4]; // here assume only 4 HT device on chain
u32 max_bus;
u32 min_bus;
- u32 busses;
#if CONFIG_SB_HT_CHAIN_ON_BUS0 > 1
u32 busn = max&0xff;
#endif
@@ -215,19 +228,7 @@ static u32 amdfam10_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool
link->secondary = min_bus;
link->subordinate = max_bus;
- /* Read the existing primary/secondary/subordinate bus
- * number configuration.
- */
- busses = pci_read_config32(dev, link->cap + 0x14);
-
- /* Configure the bus numbers for this bridge: the configuration
- * transactions will not be propagates by the bridge if it is
- * not correctly configured
- */
- busses &= 0xffff00ff;
- busses |= ((u32)(link->secondary) << 8);
- pci_write_config32(dev, link->cap + 0x14, busses);
-
+ ht_route_link(link);
/* set the config map space */
diff --git a/src/northbridge/amd/amdk8/northbridge.c b/src/northbridge/amd/amdk8/northbridge.c
index a17aa65..208970e 100644
--- a/src/northbridge/amd/amdk8/northbridge.c
+++ b/src/northbridge/amd/amdk8/northbridge.c
@@ -96,6 +96,22 @@ static bool is_non_coherent_link(struct device *dev, struct bus *link)
return !!(link_type & NonCoherent);
}
+static void ht_route_link(struct bus *link)
+{
+ u32 busses;
+
+ /* Configure the bus numbers for this bridge: the configuration
+ * transactions will not be propagated by the bridge if it is
+ * not correctly configured
+ */
+ busses = pci_read_config32(link->dev, link->cap + 0x14);
+ busses &= 0xff000000;
+ busses |= (((unsigned int)(dev->bus->secondary) << 0) |
+ ((unsigned int)(link->secondary) << 8) |
+ ((unsigned int)(link->subordinate) << 16));
+ pci_write_config32(link->dev, link->cap + 0x14, busses);
+}
+
static u32 amdk8_nodeid(device_t dev)
{
return (dev->path.pci.devfn >> 3) - 0x18;
@@ -105,7 +121,7 @@ static u32 amdk8_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool is_
u32 max)
{
int i;
- u32 busses, config_busses;
+ u32 config_busses;
u32 free_reg, config_reg;
u32 ht_unitid_base[4]; // here assume only 4 HT device on chain
u32 max_bus;
@@ -172,22 +188,9 @@ static u32 amdk8_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool is_
link->secondary = min_bus;
link->subordinate = max_bus;
- /* Read the existing primary/secondary/subordinate bus
- * number configuration.
- */
- busses = pci_read_config32(dev, link->cap + 0x14);
- config_busses = f1_read_config32(config_reg);
-
- /* Configure the bus numbers for this bridge: the configuration
- * transactions will not be propagates by the bridge if it is
- * not correctly configured
- */
- busses &= 0xff000000;
- busses |= (((unsigned int)(dev->bus->secondary) << 0) |
- ((unsigned int)(link->secondary) << 8) |
- ((unsigned int)(link->subordinate) << 16));
- pci_write_config32(dev, link->cap + 0x14, busses);
+ ht_route_link(link);
+ config_busses = f1_read_config32(config_reg);
config_busses &= 0x000fc88;
config_busses |=
(3 << 0) | /* rw enable, no device compare */
@@ -215,9 +218,8 @@ static u32 amdk8_scan_chain(device_t dev, u32 nodeid, struct bus *link, bool is_
* subordinate bus number to it's real value
*/
link->subordinate = max;
- busses = (busses & 0xff00ffff) |
- ((unsigned int) (link->subordinate) << 16);
- pci_write_config32(dev, link->cap + 0x14, busses);
+
+ ht_route_link(link);
config_busses = (config_busses & 0x00ffffff) |
(link->subordinate << 24);
More information about the coreboot-gerrit
mailing list