northbridge/amd/pi/00730F01/northbridge.c: remove unneeded global variables

Remove global variables `sblink` and `node_nums` and add function
`get_node_nums()` which reads from PCI config once and returns a static
variable.

TEST=Boot Debian 11 on PC Engines apu3

Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com>
Change-Id: I20a47f967093ef91355377c164656cabadc30fe6
Signed-off-by: Michał Kopeć <michal.kopec@3mdeb.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/59870
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
Michał Kopeć 2021-12-03 15:17:46 +01:00 committed by Felix Held
parent b049eb2d99
commit ca1e8aaec4
1 changed files with 23 additions and 24 deletions

View File

@ -29,8 +29,6 @@
#define PCIE_CAP_AER BIT(5)
#define PCIE_CAP_ACS BIT(6)
static unsigned int node_nums;
static unsigned int sblink;
static struct device *__f0_dev[MAX_NODE_NUMS];
static struct device *__f1_dev[MAX_NODE_NUMS];
static struct device *__f2_dev[MAX_NODE_NUMS];
@ -42,6 +40,23 @@ static struct device *get_node_pci(u32 nodeid, u32 fn)
return pcidev_on_root(DEV_CDB + nodeid, fn);
}
static struct device *get_mc_dev(void)
{
return pcidev_on_root(DEV_CDB, 0);
}
static unsigned int get_node_nums(void)
{
static unsigned int node_nums;
if (node_nums)
return node_nums;
node_nums = ((pci_read_config32(get_mc_dev(), 0x60)>>4) & 7) + 1; //NodeCnt[2:0]
return node_nums;
}
static void get_fx_devs(void)
{
int i;
@ -164,6 +179,9 @@ static void nb_read_resources(struct device *dev)
static void create_vga_resource(struct device *dev, unsigned int nodeid)
{
struct bus *link;
unsigned int sblink;
sblink = (pci_read_config32(get_mc_dev(), 0x64)>>8) & 7; // don't forget sublink1
/* find out which link the VGA card is connected,
* we only deal with the 'first' vga card */
@ -724,7 +742,7 @@ static struct hw_mem_hole_info get_hw_mem_hole_info(void)
int i;
mem_hole.hole_startk = CONFIG_HW_MEM_HOLE_SIZEK;
mem_hole.node_id = -1;
for (i = 0; i < node_nums; i++) {
for (i = 0; i < get_node_nums(); i++) {
resource_t basek, limitk;
u32 hole;
if (!get_dram_base_limit(i, &basek, &limitk))
@ -742,7 +760,7 @@ static struct hw_mem_hole_info get_hw_mem_hole_info(void)
*/
if (mem_hole.node_id == -1) {
resource_t limitk_pri = 0;
for (i = 0; i < node_nums; i++) {
for (i = 0; i < get_node_nums(); i++) {
resource_t base_k, limit_k;
if (!get_dram_base_limit(i, &base_k, &limit_k))
continue; // no memory on this node
@ -788,7 +806,7 @@ static void domain_read_resources(struct device *dev)
#endif
idx = 0x10;
for (i = 0; i < node_nums; i++) {
for (i = 0; i < get_node_nums(); i++) {
resource_t basek, limitk, sizek; // 4 1T
if (!get_dram_base_limit(i, &basek, &limitk))
@ -856,24 +874,6 @@ static struct device_operations pci_domain_ops = {
.acpi_name = domain_acpi_name,
};
static void sysconf_init(struct device *dev) // first node
{
sblink = (pci_read_config32(dev, 0x64)>>8) & 7; // don't forget sublink1
node_nums = ((pci_read_config32(dev, 0x60)>>4) & 7) + 1; //NodeCnt[2:0]
}
static void cpu_bus_scan(struct device *dev)
{
struct device *dev_mc;
dev_mc = pcidev_on_root(DEV_CDB, 0);
if (!dev_mc) {
printk(BIOS_ERR, "0:%02x.0 not found", DEV_CDB);
die("");
}
sysconf_init(dev_mc);
}
static void pre_mp_init(void)
{
x86_setup_mtrrs_with_detect();
@ -906,7 +906,6 @@ static struct device_operations cpu_bus_ops = {
.read_resources = noop_read_resources,
.set_resources = noop_set_resources,
.init = mp_cpu_bus_init,
.scan_bus = cpu_bus_scan,
};
static void root_complex_enable_dev(struct device *dev)