{cpu,drivers,nb,sb}/amd: Replace {MSR,MTRR} addresses with macros
Change-Id: I7e8de35dcdad52bb311b34bfa9b272d17ed3186b Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr> Reviewed-on: https://review.coreboot.org/29243 Reviewed-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Martin Roth
						Martin Roth
					
				
			
			
				
	
			
			
			
						parent
						
							50f2e4ccec
						
					
				
				
					commit
					8a643703b8
				
			| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| #include "amdlib.h" | #include "amdlib.h" | ||||||
| @@ -40,7 +41,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00DFFF00; | 	PciData = 0x00DFFF00; | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead(0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32) MsrReg; | 	PciData = (UINT32) MsrReg; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| #include "amdlib.h" | #include "amdlib.h" | ||||||
| @@ -51,7 +52,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00FECF00;	// last address before non-posted range | 	PciData = 0x00FECF00;	// last address before non-posted range | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead(0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32) MsrReg; | 	PciData = (UINT32) MsrReg; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| #include "amdlib.h" | #include "amdlib.h" | ||||||
| @@ -47,7 +48,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00FECF00; /* last address before non-posted range */ | 	PciData = 0x00FECF00; /* last address before non-posted range */ | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead (0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32)MsrReg; | 	PciData = (UINT32)MsrReg; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| #include "amdlib.h" | #include "amdlib.h" | ||||||
| @@ -47,7 +48,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00FECF00; /* last address before non-posted range */ | 	PciData = 0x00FECF00; /* last address before non-posted range */ | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead (0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO (0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32)MsrReg; | 	PciData = (UINT32)MsrReg; | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ static void model_10xxx_init(struct device *dev) | |||||||
| 		disable_cache(); | 		disable_cache(); | ||||||
|  |  | ||||||
| 		for (i = 0x2; i < 0x10; i++) { | 		for (i = 0x2; i < 0x10; i++) { | ||||||
| 			wrmsr(0x00000200 | i, msr); | 			wrmsr(MTRR_PHYS_BASE(0) | i, msr); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		enable_cache(); | 		enable_cache(); | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <Porting.h> | #include <Porting.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| @@ -52,7 +53,7 @@ void amd_initcpuio(void) | |||||||
| 	/* last address before non-posted range */ | 	/* last address before non-posted range */ | ||||||
| 	PciData = 0x00FECF00; | 	PciData = 0x00FECF00; | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead(0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32)MsrReg; | 	PciData = (UINT32)MsrReg; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <Porting.h> | #include <Porting.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| @@ -51,7 +52,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00FECF00; /* last address before non-posted range */ | 	PciData = 0x00FECF00; /* last address before non-posted range */ | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead(0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32)MsrReg; | 	PciData = (UINT32)MsrReg; | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ | |||||||
|  |  | ||||||
| #include <cpu/x86/mtrr.h> | #include <cpu/x86/mtrr.h> | ||||||
| #include <cpu/amd/msr.h> | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <northbridge/amd/agesa/agesa_helper.h> | #include <northbridge/amd/agesa/agesa_helper.h> | ||||||
| #include <Porting.h> | #include <Porting.h> | ||||||
| #include <AGESA.h> | #include <AGESA.h> | ||||||
| @@ -51,7 +52,7 @@ void amd_initcpuio(void) | |||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x8C); | ||||||
| 	PciData = 0x00FECF00; /* last address before non-posted range */ | 	PciData = 0x00FECF00; /* last address before non-posted range */ | ||||||
| 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | 	LibAmdPciWrite(AccessWidth32, PciAddress, &PciData, &StdHeader); | ||||||
| 	LibAmdMsrRead(0xC001001A, &MsrReg, &StdHeader); | 	LibAmdMsrRead(TOP_MEM, &MsrReg, &StdHeader); | ||||||
| 	MsrReg = (MsrReg >> 8) | 3; | 	MsrReg = (MsrReg >> 8) | 3; | ||||||
| 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | 	PciAddress.AddressValue = MAKE_SBDFO(0, 0, 0x18, 1, 0x88); | ||||||
| 	PciData = (UINT32)MsrReg; | 	PciData = (UINT32)MsrReg; | ||||||
|   | |||||||
| @@ -61,9 +61,9 @@ void backup_mtrr(void *mtrr_store, u32 *mtrr_store_size) | |||||||
| 	/* SYSCFG_MSR */ | 	/* SYSCFG_MSR */ | ||||||
| 	write_mtrr(&nvram_pos, SYSCFG_MSR); | 	write_mtrr(&nvram_pos, SYSCFG_MSR); | ||||||
| 	/* TOM */ | 	/* TOM */ | ||||||
| 	write_mtrr(&nvram_pos, 0xC001001A); | 	write_mtrr(&nvram_pos, TOP_MEM); | ||||||
| 	/* TOM2 */ | 	/* TOM2 */ | ||||||
| 	write_mtrr(&nvram_pos, 0xC001001D); | 	write_mtrr(&nvram_pos, TOP_MEM2); | ||||||
|  |  | ||||||
| 	*mtrr_store_size = nvram_pos - (u8*) mtrr_store; | 	*mtrr_store_size = nvram_pos - (u8*) mtrr_store; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,18 @@ | |||||||
| #ifndef CPU_AMD_MTRR_H | #ifndef CPU_AMD_MTRR_H | ||||||
| #define CPU_AMD_MTRR_H | #define CPU_AMD_MTRR_H | ||||||
|  |  | ||||||
|  | /* FIXME | ||||||
|  |  * Replace | ||||||
|  |  * #define IORR_FIRST 0xC0010016 | ||||||
|  |  * #define IORR_LAST  0xC0010019 | ||||||
|  |  * with | ||||||
|  |  * #define IORR0_BASE 0xC0010016 | ||||||
|  |  * #define IORR0_MASK 0xC0010017 | ||||||
|  |  * #define IORR1_BASE 0xC0010018 | ||||||
|  |  * #define IORR1_MASK 0xC0010019 | ||||||
|  |  * those are also defined in vendorcode <AGESA.h> file. | ||||||
|  |  */ | ||||||
|  |  | ||||||
| #define IORR_FIRST 0xC0010016 | #define IORR_FIRST 0xC0010016 | ||||||
| #define IORR_LAST  0xC0010019 | #define IORR_LAST  0xC0010019 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3255,7 +3255,7 @@ static void mct_init(struct MCTStatStruc *pMCTstat, | |||||||
| 	pDCTstat->DRPresent = 1; | 	pDCTstat->DRPresent = 1; | ||||||
|  |  | ||||||
| 	/* enable extend PCI configuration access */ | 	/* enable extend PCI configuration access */ | ||||||
| 	addr = 0xC001001F; | 	addr = NB_CFG_MSR; | ||||||
| 	_RDMSR(addr, &lo, &hi); | 	_RDMSR(addr, &lo, &hi); | ||||||
| 	if (hi & (1 << (46-32))) { | 	if (hi & (1 << (46-32))) { | ||||||
| 		pDCTstat->Status |= 1 << SB_ExtConfig; | 		pDCTstat->Status |= 1 << SB_ExtConfig; | ||||||
| @@ -3556,7 +3556,7 @@ static u8 CheckNBCOFEarlyArbEn(struct MCTStatStruc *pMCTstat, | |||||||
| 	 */ | 	 */ | ||||||
|  |  | ||||||
| 	/* 3*(Fn2xD4[NBFid]+4)/(2^NbDid)/(3+Fn2x94[MemClkFreq]) */ | 	/* 3*(Fn2xD4[NBFid]+4)/(2^NbDid)/(3+Fn2x94[MemClkFreq]) */ | ||||||
| 	_RDMSR(0xC0010071, &lo, &hi); | 	_RDMSR(MSR_COFVID_STS, &lo, &hi); | ||||||
| 	if (lo & (1 << 22)) | 	if (lo & (1 << 22)) | ||||||
| 		NbDid |= 1; | 		NbDid |= 1; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -816,7 +816,7 @@ void SetTargetWTIO_D(u32 TestAddr) | |||||||
| 	u32 lo, hi; | 	u32 lo, hi; | ||||||
| 	hi = TestAddr >> 24; | 	hi = TestAddr >> 24; | ||||||
| 	lo = TestAddr << 8; | 	lo = TestAddr << 8; | ||||||
| 	_WRMSR(0xC0010016, lo, hi);		/* IORR0 Base */ | 	_WRMSR(IORR_FIRST, lo, hi);		/* IORR0 Base */ | ||||||
| 	hi = 0xFF; | 	hi = 0xFF; | ||||||
| 	lo = 0xFC000800;			/* 64MB Mask */ | 	lo = 0xFC000800;			/* 64MB Mask */ | ||||||
| 	_WRMSR(0xC0010017, lo, hi);		/* IORR0 Mask */ | 	_WRMSR(0xC0010017, lo, hi);		/* IORR0 Mask */ | ||||||
|   | |||||||
| @@ -6789,7 +6789,7 @@ static void mct_InitialMCT_D(struct MCTStatStruc *pMCTstat, struct DCTStatStruc | |||||||
| 		boost_states = (Get_NB32(pDCTstat->dev_link, 0x15c) >> 2) & 0x7; | 		boost_states = (Get_NB32(pDCTstat->dev_link, 0x15c) >> 2) & 0x7; | ||||||
|  |  | ||||||
| 		/* Retrieve and store the TSC frequency (P0 COF) */ | 		/* Retrieve and store the TSC frequency (P0 COF) */ | ||||||
| 		p0_state_msr = rdmsr(0xc0010064 + boost_states); | 		p0_state_msr = rdmsr(PSTATE_0_MSR + boost_states); | ||||||
| 		cpu_fid = p0_state_msr.lo & 0x3f; | 		cpu_fid = p0_state_msr.lo & 0x3f; | ||||||
| 		cpu_did = (p0_state_msr.lo >> 6) & 0x7; | 		cpu_did = (p0_state_msr.lo >> 6) & 0x7; | ||||||
| 		cpu_divisor = (0x1 << cpu_did); | 		cpu_divisor = (0x1 << cpu_did); | ||||||
| @@ -6833,7 +6833,7 @@ static void mct_init(struct MCTStatStruc *pMCTstat, | |||||||
| 	pDCTstat->DRPresent = 1; | 	pDCTstat->DRPresent = 1; | ||||||
|  |  | ||||||
| 	/* enable extend PCI configuration access */ | 	/* enable extend PCI configuration access */ | ||||||
| 	addr = 0xC001001F; | 	addr = NB_CFG_MSR; | ||||||
| 	_RDMSR(addr, &lo, &hi); | 	_RDMSR(addr, &lo, &hi); | ||||||
| 	if (hi & (1 << (46-32))) { | 	if (hi & (1 << (46-32))) { | ||||||
| 		pDCTstat->Status |= 1 << SB_ExtConfig; | 		pDCTstat->Status |= 1 << SB_ExtConfig; | ||||||
| @@ -7333,7 +7333,7 @@ static u8 CheckNBCOFEarlyArbEn(struct MCTStatStruc *pMCTstat, | |||||||
| 	 */ | 	 */ | ||||||
|  |  | ||||||
| 	/* 3*(Fn2xD4[NBFid]+4)/(2^NbDid)/(3+Fn2x94[MemClkFreq]) */ | 	/* 3*(Fn2xD4[NBFid]+4)/(2^NbDid)/(3+Fn2x94[MemClkFreq]) */ | ||||||
| 	_RDMSR(0xC0010071, &lo, &hi); | 	_RDMSR(MSR_COFVID_STS, &lo, &hi); | ||||||
| 	if (lo & (1 << 22)) | 	if (lo & (1 << 22)) | ||||||
| 		NbDid |= 1; | 		NbDid |= 1; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2148,7 +2148,7 @@ void SetTargetWTIO_D(u32 TestAddr) | |||||||
| 	u32 lo, hi; | 	u32 lo, hi; | ||||||
| 	hi = TestAddr >> 24; | 	hi = TestAddr >> 24; | ||||||
| 	lo = TestAddr << 8; | 	lo = TestAddr << 8; | ||||||
| 	_WRMSR(0xC0010016, lo, hi);		/* IORR0 Base */ | 	_WRMSR(IORR_FIRST, lo, hi);		/* IORR0 Base */ | ||||||
| 	hi = 0xFF; | 	hi = 0xFF; | ||||||
| 	lo = 0xFC000800;			/* 64MB Mask */ | 	lo = 0xFC000800;			/* 64MB Mask */ | ||||||
| 	_WRMSR(0xC0010017, lo, hi);		/* IORR0 Mask */ | 	_WRMSR(0xC0010017, lo, hi);		/* IORR0 Mask */ | ||||||
|   | |||||||
| @@ -17,6 +17,9 @@ | |||||||
| #include <arch/cpu.h> | #include <arch/cpu.h> | ||||||
| #include <arch/acpi.h> | #include <arch/acpi.h> | ||||||
| #include <cpu/x86/msr.h> | #include <cpu/x86/msr.h> | ||||||
|  | #include <cpu/amd/msr.h> | ||||||
|  | #include <cpu/x86/mtrr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include <device/device.h> | #include <device/device.h> | ||||||
| #include <device/pci_def.h> | #include <device/pci_def.h> | ||||||
| #include <device/pci_ops.h> | #include <device/pci_ops.h> | ||||||
| @@ -358,17 +361,18 @@ void copy_mct_data_to_save_variable(struct amd_s3_persistent_data *persistent_da | |||||||
| 			data->f2x1b0 = pci_read_config32(dev_fn2, 0x1b0); | 			data->f2x1b0 = pci_read_config32(dev_fn2, 0x1b0); | ||||||
| 			data->f3x44 = pci_read_config32(dev_fn3, 0x44); | 			data->f3x44 = pci_read_config32(dev_fn3, 0x44); | ||||||
| 			for (i = 0; i < 16; i++) { | 			for (i = 0; i < 16; i++) { | ||||||
| 				data->msr0000020[i] = rdmsr_uint64_t(0x00000200 | i); | 				data->msr0000020[i] = | ||||||
|  | 					rdmsr_uint64_t(MTRR_PHYS_BASE(0) | i); | ||||||
| 			} | 			} | ||||||
| 			data->msr00000250 = rdmsr_uint64_t(0x00000250); | 			data->msr00000250 = rdmsr_uint64_t(MTRR_FIX_64K_00000); | ||||||
| 			data->msr00000258 = rdmsr_uint64_t(0x00000258); | 			data->msr00000258 = rdmsr_uint64_t(MTRR_FIX_16K_80000); | ||||||
| 			for (i = 0; i < 8; i++) | 			for (i = 0; i < 8; i++) | ||||||
| 				data->msr0000026[i] = rdmsr_uint64_t(0x00000260 | (i + 8)); | 				data->msr0000026[i] = rdmsr_uint64_t(0x00000260 | (i + 8)); | ||||||
| 			data->msr000002ff = rdmsr_uint64_t(0x000002ff); | 			data->msr000002ff = rdmsr_uint64_t(MTRR_DEF_TYPE_MSR); | ||||||
| 			data->msrc0010010 = rdmsr_uint64_t(0xc0010010); | 			data->msrc0010010 = rdmsr_uint64_t(SYSCFG_MSR); | ||||||
| 			data->msrc001001a = rdmsr_uint64_t(0xc001001a); | 			data->msrc001001a = rdmsr_uint64_t(TOP_MEM); | ||||||
| 			data->msrc001001d = rdmsr_uint64_t(0xc001001d); | 			data->msrc001001d = rdmsr_uint64_t(TOP_MEM2); | ||||||
| 			data->msrc001001f = rdmsr_uint64_t(0xc001001f); | 			data->msrc001001f = rdmsr_uint64_t(NB_CFG_MSR); | ||||||
|  |  | ||||||
| 			/* Stage 3 */ | 			/* Stage 3 */ | ||||||
| 			data->f2x40 = read_config32_dct(dev_fn2, node, channel, 0x40); | 			data->f2x40 = read_config32_dct(dev_fn2, node, channel, 0x40); | ||||||
| @@ -697,10 +701,11 @@ void restore_mct_data_from_save_variable(struct amd_s3_persistent_data *persiste | |||||||
| 			write_config32_dct(PCI_DEV(0, 0x18 + node, 2), node, channel, 0x1b0, data->f2x1b0); | 			write_config32_dct(PCI_DEV(0, 0x18 + node, 2), node, channel, 0x1b0, data->f2x1b0); | ||||||
| 			write_config32_dct(PCI_DEV(0, 0x18 + node, 3), node, channel, 0x44, data->f3x44); | 			write_config32_dct(PCI_DEV(0, 0x18 + node, 3), node, channel, 0x44, data->f3x44); | ||||||
| 			for (i = 0; i < 16; i++) { | 			for (i = 0; i < 16; i++) { | ||||||
| 				wrmsr_uint64_t(0x00000200 | i, data->msr0000020[i]); | 				wrmsr_uint64_t(MTRR_PHYS_BASE(0) | i, | ||||||
|  | 					       data->msr0000020[i]); | ||||||
| 			} | 			} | ||||||
| 			wrmsr_uint64_t(0x00000250, data->msr00000250); | 			wrmsr_uint64_t(MTRR_FIX_64K_00000, data->msr00000250); | ||||||
| 			wrmsr_uint64_t(0x00000258, data->msr00000258); | 			wrmsr_uint64_t(MTRR_FIX_16K_80000, data->msr00000258); | ||||||
| 			/* FIXME | 			/* FIXME | ||||||
| 			 * Restoring these MSRs causes a hang on resume due to | 			 * Restoring these MSRs causes a hang on resume due to | ||||||
| 			 * destroying CAR while still executing from CAR! | 			 * destroying CAR while still executing from CAR! | ||||||
| @@ -708,11 +713,11 @@ void restore_mct_data_from_save_variable(struct amd_s3_persistent_data *persiste | |||||||
| 			 */ | 			 */ | ||||||
| 			// for (i = 0; i < 8; i++) | 			// for (i = 0; i < 8; i++) | ||||||
| 			//	wrmsr_uint64_t(0x00000260 | (i + 8), data->msr0000026[i]); | 			//	wrmsr_uint64_t(0x00000260 | (i + 8), data->msr0000026[i]); | ||||||
| 			wrmsr_uint64_t(0x000002ff, data->msr000002ff); | 			wrmsr_uint64_t(MTRR_DEF_TYPE_MSR, data->msr000002ff); | ||||||
| 			wrmsr_uint64_t(0xc0010010, data->msrc0010010); | 			wrmsr_uint64_t(SYSCFG_MSR, data->msrc0010010); | ||||||
| 			wrmsr_uint64_t(0xc001001a, data->msrc001001a); | 			wrmsr_uint64_t(TOP_MEM, data->msrc001001a); | ||||||
| 			wrmsr_uint64_t(0xc001001d, data->msrc001001d); | 			wrmsr_uint64_t(TOP_MEM2, data->msrc001001d); | ||||||
| 			wrmsr_uint64_t(0xc001001f, data->msrc001001f); | 			wrmsr_uint64_t(NB_CFG_MSR, data->msrc001001f); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,6 +34,7 @@ | |||||||
| #include <device/pci_ops.h> | #include <device/pci_ops.h> | ||||||
| #include <delay.h> | #include <delay.h> | ||||||
| #include <cpu/x86/msr.h> | #include <cpu/x86/msr.h> | ||||||
|  | #include <cpu/amd/mtrr.h> | ||||||
| #include "rs780.h" | #include "rs780.h" | ||||||
|  |  | ||||||
| /* Trust the original resource allocation. Don't do it again. */ | /* Trust the original resource allocation. Don't do it again. */ | ||||||
| @@ -762,11 +763,11 @@ static void rs780_internal_gfx_enable(struct device *dev) | |||||||
| 	printk(BIOS_DEBUG, "rs780_internal_gfx_enable dev = 0x%p, nb_dev = 0x%p.\n", dev, nb_dev); | 	printk(BIOS_DEBUG, "rs780_internal_gfx_enable dev = 0x%p, nb_dev = 0x%p.\n", dev, nb_dev); | ||||||
|  |  | ||||||
| 	/* The system top memory in 780. */ | 	/* The system top memory in 780. */ | ||||||
| 	sysmem = rdmsr(0xc001001a); | 	sysmem = rdmsr(TOP_MEM); | ||||||
| 	printk(BIOS_DEBUG, "Sysmem TOM = %x_%x\n", sysmem.hi, sysmem.lo); | 	printk(BIOS_DEBUG, "Sysmem TOM = %x_%x\n", sysmem.hi, sysmem.lo); | ||||||
| 	pci_write_config32(nb_dev, 0x90, sysmem.lo); | 	pci_write_config32(nb_dev, 0x90, sysmem.lo); | ||||||
|  |  | ||||||
| 	sysmem = rdmsr(0xc001001D); | 	sysmem = rdmsr(TOP_MEM2); | ||||||
| 	printk(BIOS_DEBUG, "Sysmem TOM2 = %x_%x\n", sysmem.hi, sysmem.lo); | 	printk(BIOS_DEBUG, "Sysmem TOM2 = %x_%x\n", sysmem.hi, sysmem.lo); | ||||||
| 	htiu_write_index(nb_dev, 0x31, sysmem.hi); | 	htiu_write_index(nb_dev, 0x31, sysmem.hi); | ||||||
| 	htiu_write_index(nb_dev, 0x30, sysmem.lo | 1); | 	htiu_write_index(nb_dev, 0x30, sysmem.lo | 1); | ||||||
|   | |||||||
| @@ -304,11 +304,11 @@ void sr5650_set_tom(struct device *nb_dev) | |||||||
| 	msr_t sysmem; | 	msr_t sysmem; | ||||||
|  |  | ||||||
| 	/* The system top memory in SR56X0. */ | 	/* The system top memory in SR56X0. */ | ||||||
| 	sysmem = rdmsr(0xc001001A); | 	sysmem = rdmsr(TOP_MEM); | ||||||
| 	printk(BIOS_DEBUG, "Sysmem TOM = %x_%x\n", sysmem.hi, sysmem.lo); | 	printk(BIOS_DEBUG, "Sysmem TOM = %x_%x\n", sysmem.hi, sysmem.lo); | ||||||
| 	pci_write_config32(nb_dev, 0x90, sysmem.lo); | 	pci_write_config32(nb_dev, 0x90, sysmem.lo); | ||||||
|  |  | ||||||
| 	sysmem = rdmsr(0xc001001D); | 	sysmem = rdmsr(TOP_MEM2); | ||||||
| 	printk(BIOS_DEBUG, "Sysmem TOM2 = %x_%x\n", sysmem.hi, sysmem.lo); | 	printk(BIOS_DEBUG, "Sysmem TOM2 = %x_%x\n", sysmem.hi, sysmem.lo); | ||||||
| 	htiu_write_index(nb_dev, 0x31, sysmem.hi); | 	htiu_write_index(nb_dev, 0x31, sysmem.hi); | ||||||
| 	htiu_write_index(nb_dev, 0x30, sysmem.lo | 1); | 	htiu_write_index(nb_dev, 0x30, sysmem.lo | 1); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user