summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/Csm/CsmSupportLib
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2017-09-19 15:50:39 +0200
committerLaszlo Ersek <lersek@redhat.com>2017-09-20 20:24:26 +0200
commitba1d245f1d3d40c7d87db57dae76e19cbf289718 (patch)
tree093105fef1268b4725a81e2deb58ac04c6744761 /OvmfPkg/Csm/CsmSupportLib
parentb68c793144e8f239cf59fcc34ee6e35c1fdcd8a6 (diff)
downloadedk2-ba1d245f1d3d40c7d87db57dae76e19cbf289718.tar.gz
edk2-ba1d245f1d3d40c7d87db57dae76e19cbf289718.tar.bz2
edk2-ba1d245f1d3d40c7d87db57dae76e19cbf289718.zip
OvmfPkg/CsmSupportLib: move PAM register addresses to IndustryStandard
* Introduce the PIIX4_PAM* and MCH_PAM* macros under "OvmfPkg/Include/IndustryStandard". These macros capture the PAM register offsets (in PCI config space) on the respective Memory Controller B/D/F, from the respective data sheets. * Under IndustryStandard, introduce the PMC_REGISTER_PIIX4() macro for PIIX4. (For Q35, we already have DRAMC_REGISTER_Q35().) In both cases, the B/D/F is 0/0/0. * Under CsmSupportLib, replace the "PAMRegOffset" field (UINT8) in the PAM_REGISTER_VALUE structure with "PAMRegPciLibAddress" (UINTN). The new field contains the return value of the PCI_LIB_ADDRESS() macro. * Under CsmSupportLib, replace the "mRegisterValues440" elements as follows: REG_PAMx_OFFSET_440, ReadEnableData, WriteEnableData --> PMC_REGISTER_PIIX4 (PIIX4_PAMx), ReadEnableData, WriteEnableData * Under CsmSupportLib, replace the "mRegisterValuesQ35" elements as follows: REG_PAMx_OFFSET_Q35, ReadEnableData, WriteEnableData --> DRAMC_REGISTER_Q35 (MCH_PAMx), ReadEnableData, WriteEnableData * Under CsmSupportLib, update the register address calculations as follows (for all of PciOr8(), PciAnd8() and PciRead8()): PCI_LIB_ADDRESS ( PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset ) --> mRegisterValues[Index].PAMRegPciLibAddress * Under CsmSupportLib, remove the PAM_PCI_* and REG_PAM*_OFFSET_* macros. Technically speaking, these changes could be split into three patches (IndustryStandard macro additions, CsmSupportLib code updates, CsmSupportLib macro removals). However, the patch is not big, and in this case it is actually helpful to present the code movement / refactoring in one step, for easier verification. Cc: Aleksei Kovura <alex3kov@zoho.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Ref: https://bugs.launchpad.net/qemu/+bug/1715700 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Aleksei Kovura <alex3kov@zoho.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Diffstat (limited to 'OvmfPkg/Csm/CsmSupportLib')
-rw-r--r--OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c62
-rw-r--r--OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h22
2 files changed, 32 insertions, 52 deletions
diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c
index 8d5d2e58a9..c13d4bb88f 100644
--- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c
+++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.c
@@ -52,35 +52,35 @@ STATIC LEGACY_MEMORY_SECTION_INFO mSectionArray[] = {
};
STATIC PAM_REGISTER_VALUE mRegisterValues440[] = {
- {REG_PAM1_OFFSET_440, 0x01, 0x02},
- {REG_PAM1_OFFSET_440, 0x10, 0x20},
- {REG_PAM2_OFFSET_440, 0x01, 0x02},
- {REG_PAM2_OFFSET_440, 0x10, 0x20},
- {REG_PAM3_OFFSET_440, 0x01, 0x02},
- {REG_PAM3_OFFSET_440, 0x10, 0x20},
- {REG_PAM4_OFFSET_440, 0x01, 0x02},
- {REG_PAM4_OFFSET_440, 0x10, 0x20},
- {REG_PAM5_OFFSET_440, 0x01, 0x02},
- {REG_PAM5_OFFSET_440, 0x10, 0x20},
- {REG_PAM6_OFFSET_440, 0x01, 0x02},
- {REG_PAM6_OFFSET_440, 0x10, 0x20},
- {REG_PAM0_OFFSET_440, 0x10, 0x20}
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM1), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM2), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM3), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM4), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM5), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x01, 0x02},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM6), 0x10, 0x20},
+ {PMC_REGISTER_PIIX4 (PIIX4_PAM0), 0x10, 0x20}
};
STATIC PAM_REGISTER_VALUE mRegisterValuesQ35[] = {
- {REG_PAM1_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM1_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM2_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM2_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM3_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM3_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM4_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM4_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM5_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM5_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM6_OFFSET_Q35, 0x01, 0x02},
- {REG_PAM6_OFFSET_Q35, 0x10, 0x20},
- {REG_PAM0_OFFSET_Q35, 0x10, 0x20}
+ {DRAMC_REGISTER_Q35 (MCH_PAM1), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM1), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM2), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM2), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM3), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM3), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM4), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM4), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM5), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM5), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM6), 0x01, 0x02},
+ {DRAMC_REGISTER_Q35 (MCH_PAM6), 0x10, 0x20},
+ {DRAMC_REGISTER_Q35 (MCH_PAM0), 0x10, 0x20}
};
STATIC PAM_REGISTER_VALUE *mRegisterValues;
@@ -145,12 +145,12 @@ LegacyRegionManipulationInternal (
if (ReadEnable != NULL) {
if (*ReadEnable) {
PciOr8 (
- PCI_LIB_ADDRESS(PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset),
+ mRegisterValues[Index].PAMRegPciLibAddress,
mRegisterValues[Index].ReadEnableData
);
} else {
PciAnd8 (
- PCI_LIB_ADDRESS(PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset),
+ mRegisterValues[Index].PAMRegPciLibAddress,
(UINT8) (~mRegisterValues[Index].ReadEnableData)
);
}
@@ -158,12 +158,12 @@ LegacyRegionManipulationInternal (
if (WriteEnable != NULL) {
if (*WriteEnable) {
PciOr8 (
- PCI_LIB_ADDRESS(PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset),
+ mRegisterValues[Index].PAMRegPciLibAddress,
mRegisterValues[Index].WriteEnableData
);
} else {
PciAnd8 (
- PCI_LIB_ADDRESS(PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset),
+ mRegisterValues[Index].PAMRegPciLibAddress,
(UINT8) (~mRegisterValues[Index].WriteEnableData)
);
}
@@ -204,7 +204,7 @@ LegacyRegionGetInfoInternal (
//
*DescriptorCount = sizeof(mSectionArray) / sizeof (mSectionArray[0]);
for (Index = 0; Index < *DescriptorCount; Index++) {
- PamValue = PciRead8 (PCI_LIB_ADDRESS(PAM_PCI_BUS, PAM_PCI_DEV, PAM_PCI_FUNC, mRegisterValues[Index].PAMRegOffset));
+ PamValue = PciRead8 (mRegisterValues[Index].PAMRegPciLibAddress);
mSectionArray[Index].ReadEnabled = FALSE;
if ((PamValue & mRegisterValues[Index].ReadEnableData) != 0) {
mSectionArray[Index].ReadEnabled = TRUE;
diff --git a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h
index f755a2a359..01d3109a7d 100644
--- a/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h
+++ b/OvmfPkg/Csm/CsmSupportLib/LegacyRegion.h
@@ -30,26 +30,6 @@
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
-#define PAM_PCI_BUS 0
-#define PAM_PCI_DEV 0
-#define PAM_PCI_FUNC 0
-
-#define REG_PAM0_OFFSET_440 0x59 // Programmable Attribute Map 0
-#define REG_PAM1_OFFSET_440 0x5a // Programmable Attribute Map 1
-#define REG_PAM2_OFFSET_440 0x5b // Programmable Attribute Map 2
-#define REG_PAM3_OFFSET_440 0x5c // Programmable Attribute Map 3
-#define REG_PAM4_OFFSET_440 0x5d // Programmable Attribute Map 4
-#define REG_PAM5_OFFSET_440 0x5e // Programmable Attribute Map 5
-#define REG_PAM6_OFFSET_440 0x5f // Programmable Attribute Map 6
-
-#define REG_PAM0_OFFSET_Q35 0x90 // Programmable Attribute Map 0
-#define REG_PAM1_OFFSET_Q35 0x91 // Programmable Attribute Map 1
-#define REG_PAM2_OFFSET_Q35 0x92 // Programmable Attribute Map 2
-#define REG_PAM3_OFFSET_Q35 0x93 // Programmable Attribute Map 3
-#define REG_PAM4_OFFSET_Q35 0x94 // Programmable Attribute Map 4
-#define REG_PAM5_OFFSET_Q35 0x95 // Programmable Attribute Map 5
-#define REG_PAM6_OFFSET_Q35 0x96 // Programmable Attribute Map 6
-
#define PAM_BASE_ADDRESS 0xc0000
#define PAM_LIMIT_ADDRESS BASE_1MB
@@ -67,7 +47,7 @@ typedef struct {
// Provides a map of the PAM registers and bits used to set Read/Write access.
//
typedef struct {
- UINT8 PAMRegOffset;
+ UINTN PAMRegPciLibAddress;
UINT8 ReadEnableData;
UINT8 WriteEnableData;
} PAM_REGISTER_VALUE;