[PCI] Add an option to allocate PCI PMEM resource first
This introduces an additional PCI Enumeration option. - self._PCI_ENUM_FLAG_ALLOC_PMEM_FIRST By deafult, the option will allocate PCI resource by ascending order (MEM32->PMEM32->MEM64->PMEM64). If it's set to 1, by reversed order. Signed-off-by: Aiden Park <aiden.park@intel.com>
This commit is contained in:
parent
c3d73ff4de
commit
680cab980b
|
@ -100,8 +100,13 @@
|
||||||
# } PCI_RES_DOWNGRADE;
|
# } PCI_RES_DOWNGRADE;
|
||||||
#
|
#
|
||||||
# typedef struct {
|
# typedef struct {
|
||||||
|
# UINT16 AllocPmemFirst : 1; // default:0 (Mem32->Pmem32->Mem64->Pmem64), 1 (Pmem64->Mem64->Pmem32->Mem32)
|
||||||
|
# UINT16 Reserved : 15; // 0 initialized
|
||||||
|
# } PCI_ENUM_FLAG;
|
||||||
|
#
|
||||||
|
# typedef struct {
|
||||||
# PCI_RES_DOWNGRADE Downgrade;
|
# PCI_RES_DOWNGRADE Downgrade;
|
||||||
# UINT16 Reserved;
|
# PCI_ENUM_FLAG Flag;
|
||||||
# UINT8 BusScanType; // default:0 (0: list, 1: range)
|
# UINT8 BusScanType; // default:0 (0: list, 1: range)
|
||||||
# UINT8 NumOfBus; // the number of BusScanItems
|
# UINT8 NumOfBus; // the number of BusScanItems
|
||||||
# UINT8 BusScanItems[0];
|
# UINT8 BusScanItems[0];
|
||||||
|
@ -112,6 +117,7 @@
|
||||||
# self._PCI_ENUM_DOWNGRADE_MEM64 = 0
|
# self._PCI_ENUM_DOWNGRADE_MEM64 = 0
|
||||||
# self._PCI_ENUM_DOWNGRADE_PMEM64 = 0
|
# self._PCI_ENUM_DOWNGRADE_PMEM64 = 0
|
||||||
# self._PCI_ENUM_DOWNGRADE_BUS0 = 0
|
# self._PCI_ENUM_DOWNGRADE_BUS0 = 0
|
||||||
|
# self._PCI_ENUM_FLAG_ALLOC_PMEM_FIRST = 1
|
||||||
# self._PCI_ENUM_BUS_SCAN_TYPE = 1
|
# self._PCI_ENUM_BUS_SCAN_TYPE = 1
|
||||||
# self._PCI_ENUM_BUS_SCAN_ITEMS = '0,0xff'
|
# self._PCI_ENUM_BUS_SCAN_ITEMS = '0,0xff'
|
||||||
gPlatformModuleTokenSpaceGuid.PcdPciEnumPolicyInfo | {0x00} | VOID* | 0x200000A5
|
gPlatformModuleTokenSpaceGuid.PcdPciEnumPolicyInfo | {0x00} | VOID* | 0x200000A5
|
||||||
|
|
|
@ -68,9 +68,14 @@ typedef struct {
|
||||||
UINT16 Reserved : 12;
|
UINT16 Reserved : 12;
|
||||||
} PCI_RES_DOWNGRADE;
|
} PCI_RES_DOWNGRADE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
UINT16 AllocPmemFirst : 1;
|
||||||
|
UINT16 Reserved : 15;
|
||||||
|
} PCI_ENUM_FLAG;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PCI_RES_DOWNGRADE Downgrade;
|
PCI_RES_DOWNGRADE Downgrade;
|
||||||
UINT16 Reserved;
|
PCI_ENUM_FLAG Flag;
|
||||||
UINT8 BusScanType;
|
UINT8 BusScanType;
|
||||||
UINT8 NumOfBus;
|
UINT8 NumOfBus;
|
||||||
UINT8 BusScanItems[0];
|
UINT8 BusScanItems[0];
|
||||||
|
|
|
@ -1479,6 +1479,9 @@ PciProgramResources (
|
||||||
CONST PCI_RES_ALLOC_RANGE *ResRange;
|
CONST PCI_RES_ALLOC_RANGE *ResRange;
|
||||||
UINT64 Address;
|
UINT64 Address;
|
||||||
PCI_BAR_TYPE BarType;
|
PCI_BAR_TYPE BarType;
|
||||||
|
PCI_BAR_TYPE BarTypeStart;
|
||||||
|
PCI_BAR_TYPE BarTypeEnd;
|
||||||
|
INT8 BarTypeStep;
|
||||||
UINT64 ResBase[3];
|
UINT64 ResBase[3];
|
||||||
UINT64 ResLimit[3];
|
UINT64 ResLimit[3];
|
||||||
UINT8 Index;
|
UINT8 Index;
|
||||||
|
@ -1495,7 +1498,17 @@ PciProgramResources (
|
||||||
ResBase[2] = ResRange->Mmio64Base;
|
ResBase[2] = ResRange->Mmio64Base;
|
||||||
ResLimit[2] = ResRange->Mmio64Limit;
|
ResLimit[2] = ResRange->Mmio64Limit;
|
||||||
|
|
||||||
for (BarType = PciBarTypeIo16; BarType <= PciBarTypePMem64; BarType++) {
|
if (EnumPolicy->Flag.AllocPmemFirst != 0) {
|
||||||
|
BarTypeStart = PciBarTypePMem64;
|
||||||
|
BarTypeEnd = PciBarTypeIo16 - 1;
|
||||||
|
BarTypeStep = -1;
|
||||||
|
} else {
|
||||||
|
BarTypeStart = PciBarTypeIo16;
|
||||||
|
BarTypeEnd = PciBarTypePMem64 + 1;
|
||||||
|
BarTypeStep = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (BarType = BarTypeStart; BarType != BarTypeEnd; BarType += BarTypeStep) {
|
||||||
if (((BarType == PciBarTypeIo32) && (EnumPolicy->Downgrade.Io32 != 0)) ||
|
if (((BarType == PciBarTypeIo32) && (EnumPolicy->Downgrade.Io32 != 0)) ||
|
||||||
((BarType == PciBarTypeMem64) && (EnumPolicy->Downgrade.Mem64 != 0)) ||
|
((BarType == PciBarTypeMem64) && (EnumPolicy->Downgrade.Mem64 != 0)) ||
|
||||||
((BarType == PciBarTypePMem64) && (EnumPolicy->Downgrade.PMem64 != 0))) {
|
((BarType == PciBarTypePMem64) && (EnumPolicy->Downgrade.PMem64 != 0))) {
|
||||||
|
|
|
@ -184,7 +184,8 @@ class PciEnumPolicyInfo(Structure):
|
||||||
('DowngradePMem64', c_uint16, 1),
|
('DowngradePMem64', c_uint16, 1),
|
||||||
('DowngradeBus0', c_uint16, 1),
|
('DowngradeBus0', c_uint16, 1),
|
||||||
('DowngradeReserved', c_uint16, 12),
|
('DowngradeReserved', c_uint16, 12),
|
||||||
('Reserved', c_uint16),
|
('FlagAllocPmemFirst', c_uint16, 1),
|
||||||
|
('FlagReserved', c_uint16, 15),
|
||||||
('BusScanType', c_uint8), # 0: list, 1: range
|
('BusScanType', c_uint8), # 0: list, 1: range
|
||||||
('NumOfBus', c_uint8),
|
('NumOfBus', c_uint8),
|
||||||
('BusScanItems', ARRAY(c_uint8, 0))
|
('BusScanItems', ARRAY(c_uint8, 0))
|
||||||
|
@ -196,6 +197,8 @@ class PciEnumPolicyInfo(Structure):
|
||||||
self.DowngradePMem64 = 1
|
self.DowngradePMem64 = 1
|
||||||
self.DowngradeBus0 = 1
|
self.DowngradeBus0 = 1
|
||||||
self.DowngradeReserved = 0
|
self.DowngradeReserved = 0
|
||||||
|
self.FlagAllocPmemFirst = 0
|
||||||
|
self.FlagReserved = 0
|
||||||
self.Reserved = 0
|
self.Reserved = 0
|
||||||
self.BusScanType = 0
|
self.BusScanType = 0
|
||||||
self.NumOfBus = 0
|
self.NumOfBus = 0
|
||||||
|
@ -1062,6 +1065,7 @@ def gen_pci_enum_policy_info (policy_dict):
|
||||||
policy_info.DowngradeMem64 = policy_dict['DOWNGRADE_MEM64']
|
policy_info.DowngradeMem64 = policy_dict['DOWNGRADE_MEM64']
|
||||||
policy_info.DowngradePMem64 = policy_dict['DOWNGRADE_PMEM64']
|
policy_info.DowngradePMem64 = policy_dict['DOWNGRADE_PMEM64']
|
||||||
policy_info.DowngradeBus0 = policy_dict['DOWNGRADE_BUS0']
|
policy_info.DowngradeBus0 = policy_dict['DOWNGRADE_BUS0']
|
||||||
|
policy_info.FlagAllocPmemFirst = policy_dict['FLAG_ALLOC_PMEM_FIRST']
|
||||||
policy_info.BusScanType = policy_dict['BUS_SCAN_TYPE']
|
policy_info.BusScanType = policy_dict['BUS_SCAN_TYPE']
|
||||||
bus_scan_items = policy_dict['BUS_SCAN_ITEMS']
|
bus_scan_items = policy_dict['BUS_SCAN_ITEMS']
|
||||||
|
|
||||||
|
|
|
@ -903,6 +903,7 @@ class Build(object):
|
||||||
'DOWNGRADE_MEM64',
|
'DOWNGRADE_MEM64',
|
||||||
'DOWNGRADE_PMEM64',
|
'DOWNGRADE_PMEM64',
|
||||||
'DOWNGRADE_BUS0',
|
'DOWNGRADE_BUS0',
|
||||||
|
'FLAG_ALLOC_PMEM_FIRST',
|
||||||
'BUS_SCAN_TYPE',
|
'BUS_SCAN_TYPE',
|
||||||
'BUS_SCAN_ITEMS'
|
'BUS_SCAN_ITEMS'
|
||||||
]
|
]
|
||||||
|
@ -911,12 +912,12 @@ class Build(object):
|
||||||
policy_name = '_PCI_ENUM_%s' % policy_list
|
policy_name = '_PCI_ENUM_%s' % policy_list
|
||||||
policy_value = None
|
policy_value = None
|
||||||
if not hasattr(self._board, policy_name):
|
if not hasattr(self._board, policy_name):
|
||||||
if policy_list == 'BUS_SCAN_TYPE':
|
if policy_list == 'BUS_SCAN_ITEMS':
|
||||||
policy_value = 0
|
|
||||||
elif policy_list == 'BUS_SCAN_ITEMS':
|
|
||||||
policy_value = '0'
|
policy_value = '0'
|
||||||
else:
|
elif 'DOWNGRADE' in policy_list:
|
||||||
policy_value = 1
|
policy_value = 1
|
||||||
|
else:
|
||||||
|
policy_value = 0
|
||||||
else:
|
else:
|
||||||
policy_value = getattr(self._board, policy_name)
|
policy_value = getattr(self._board, policy_name)
|
||||||
pci_enum_policy_dict[policy_list] = policy_value
|
pci_enum_policy_dict[policy_list] = policy_value
|
||||||
|
|
Loading…
Reference in New Issue