Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 831d9918 authored by Robert Richter's avatar Robert Richter Committed by Ingo Molnar
Browse files

x86: add PCI extended config space access for AMD Barcelona



This patch implements PCI extended configuration space access for
AMD's Barcelona CPUs. It extends the method using CF8/CFC IO
addresses. An x86 capability bit has been introduced that is set for
CPUs supporting PCI extended config space accesses.

Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 1c47cd63
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
#include <asm/apic.h>

#include <mach_apic.h>
#include "../setup.h"
#include "cpu.h"

/*
@@ -308,6 +309,9 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)

	if (cpu_has_xmm2)
		set_cpu_cap(c, X86_FEATURE_MFENCE_RDTSC);

	if (c->x86 == 0x10)
		amd_enable_pci_ext_cfg(c);
}

static unsigned int __cpuinit amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
+3 −0
Original line number Diff line number Diff line
@@ -217,6 +217,9 @@ void __cpuinit init_amd(struct cpuinfo_x86 *c)
	if (c->x86 == 0x10)
		fam10h_check_enable_mmcfg();

	if (c->x86 == 0x10)
		amd_enable_pci_ext_cfg(c);

	if (amd_apic_timer_broken())
		disable_apic_timer = 1;

+13 −0
Original line number Diff line number Diff line
@@ -136,4 +136,17 @@ void __init setup_per_cpu_areas(void)
	setup_cpumask_of_cpu();
}

#define ENABLE_CF8_EXT_CFG      (1ULL << 46)

void __cpuinit amd_enable_pci_ext_cfg(struct cpuinfo_x86 *c)
{
	u64 reg;
	rdmsrl(MSR_AMD64_NB_CFG, reg);
	if (!(reg & ENABLE_CF8_EXT_CFG)) {
		reg |= ENABLE_CF8_EXT_CFG;
		wrmsrl(MSR_AMD64_NB_CFG, reg);
	}
	set_cpu_cap(c, X86_FEATURE_PCI_EXT_CFG);
}

#endif
+26 −0
Original line number Diff line number Diff line
/*
 * Internal declarations for shared x86 setup code.
 *
 * Copyright (c) 2008 Advanced Micro Devices, Inc.
 * Contributed by Robert Richter <robert.richter@amd.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2 of the GNU General Public
 * License as published by the Free Software Foundation.
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA
 * 02111-1307 USA
 */

#ifndef _ARCH_X86_KERNEL_SETUP_H

extern void __cpuinit amd_enable_pci_ext_cfg(struct cpuinfo_x86 *c);

#endif	/* _ARCH_X86_KERNEL_SETUP_H */
+2 −0
Original line number Diff line number Diff line
@@ -73,6 +73,8 @@
#include <asm/pat.h>
#include <asm/mmconfig.h>

#include "setup.h"

#include <mach_apic.h>
#ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h>
Loading