[SWDEV-463213] Add partition ID fallback + new API
Changes: - Added rsmi_dev_partition_id_get() -> uses fallback described below for devices which support partition updates. - Updated/added to tests for partitions to reflect these changes. Due to driver changes in KFD, some devices may report bits [31:28] or [2:0]. bits [63:32] = domain bits [31:28] = partition id bits [27:16] = reserved bits [15:8] = Bus bits [7:3] = Device bits [2:0] = Function (partition id maybe in bits [2:0]) <-- Fallback for non SPX modes Change-Id: Ia5641cfb8dbe2d1bff52f8eb81d5a159954528d3 Signed-off-by: Charis Poag <Charis.Poag@amd.com>
Этот коммит содержится в:
@@ -196,9 +196,11 @@ def getBus(device, silent=False):
|
||||
# BDFID = ((DOMAIN & 0xFFFFFFFF) << 32) | ((PARTITION_ID & 0xF) << 28) | ((BUS & 0xFF) << 8) |
|
||||
# ((DEVICE & 0x1F) <<3 ) | (FUNCTION & 0x7)
|
||||
# bits [63:32] = domain
|
||||
# bits [31:28] = partition id
|
||||
# bits [31:28] or bits [2:0] = partition id
|
||||
# bits [27:16] = reserved
|
||||
# bits [15: 0] = pci bus/device/function
|
||||
# bits [15:8] = Bus
|
||||
# bits [7:3] = Device
|
||||
# bits [2:0] = Function (partition id maybe in bits [2:0]) <-- Fallback for non SPX modes
|
||||
domain = (bdfid.value >> 32) & 0xffffffff
|
||||
bus = (bdfid.value >> 8) & 0xff
|
||||
device = (bdfid.value >> 3) & 0x1f
|
||||
@@ -215,19 +217,19 @@ def getPartitionId(device, silent=False):
|
||||
:param silent: Turn on to silence error output
|
||||
(you plan to handle manually). Default is off.
|
||||
"""
|
||||
bdfid = c_uint64(0)
|
||||
ret = rocmsmi.rsmi_dev_pci_id_get(device, byref(bdfid))
|
||||
partition_id = c_uint32(0)
|
||||
ret = rocmsmi.rsmi_dev_partition_id_get(device, byref(partition_id))
|
||||
|
||||
# BDFID = ((DOMAIN & 0xFFFFFFFF) << 32) | ((PARTITION_ID & 0xF) << 28) | ((BUS & 0xFF) << 8) |
|
||||
# ((DEVICE & 0x1F) <<3 ) | (FUNCTION & 0x7)
|
||||
# bits [63:32] = domain
|
||||
# bits [31:28] = partition id
|
||||
# bits [27:16] = reserved
|
||||
# bits [15: 0] = pci bus/device/function
|
||||
partition_num = (bdfid.value >> 28) & 0xf
|
||||
pci_id = bdfid.value
|
||||
partition_id = '{:d}'.format(partition_num)
|
||||
if rsmi_ret_ok(ret, device, 'get_pci_id', silent):
|
||||
# bits [31:28] or bits [2:0] = partition id
|
||||
# bits [27:16] = reserved
|
||||
# bits [15:8] = Bus
|
||||
# bits [7:3] = Device
|
||||
# bits [2:0] = Function (partition id maybe in bits [2:0]) <-- Fallback for non SPX modes
|
||||
partition_id = '{:d}'.format(partition_id.value)
|
||||
if rsmi_ret_ok(ret, device, 'rsmi_dev_partition_id_get', silent):
|
||||
return partition_id
|
||||
|
||||
|
||||
|
||||
@@ -583,19 +583,19 @@ class rsmi_func_id_value_t(Union):
|
||||
|
||||
class rsmi_compute_partition_type_t(c_int):
|
||||
RSMI_COMPUTE_PARTITION_INVALID = 0
|
||||
RSMI_COMPUTE_PARTITION_CPX = 1
|
||||
RSMI_COMPUTE_PARTITION_SPX = 2
|
||||
RSMI_COMPUTE_PARTITION_DPX = 3
|
||||
RSMI_COMPUTE_PARTITION_TPX = 4
|
||||
RSMI_COMPUTE_PARTITION_QPX = 5
|
||||
RSMI_COMPUTE_PARTITION_SPX = 1
|
||||
RSMI_COMPUTE_PARTITION_DPX = 2
|
||||
RSMI_COMPUTE_PARTITION_TPX = 3
|
||||
RSMI_COMPUTE_PARTITION_QPX = 4
|
||||
RSMI_COMPUTE_PARTITION_CPX = 5
|
||||
|
||||
rsmi_compute_partition_type_dict = {
|
||||
#'RSMI_COMPUTE_PARTITION_INVALID': 0,
|
||||
'CPX': 1,
|
||||
'SPX': 2,
|
||||
'DPX': 3,
|
||||
'TPX': 4,
|
||||
'QPX': 5
|
||||
'SPX': 1,
|
||||
'DPX': 2,
|
||||
'TPX': 3,
|
||||
'QPX': 4,
|
||||
'CPX': 5,
|
||||
}
|
||||
|
||||
rsmi_compute_partition_type = rsmi_compute_partition_type_t
|
||||
@@ -604,7 +604,7 @@ rsmi_compute_partition_type = rsmi_compute_partition_type_t
|
||||
# Usage example to get corresponding names:
|
||||
# compute_partition_type_l[rsmi_compute_partition_type_t.RSMI_COMPUTE_PARTITION_CPX]
|
||||
# will return string 'CPX'
|
||||
compute_partition_type_l = ['CPX', 'SPX', 'DPX', 'TPX', 'QPX']
|
||||
compute_partition_type_l = ['SPX', 'DPX', 'TPX', 'QPX', 'CPX']
|
||||
|
||||
class rsmi_memory_partition_type_t(c_int):
|
||||
RSMI_MEMORY_PARTITION_UNKNOWN = 0
|
||||
|
||||
Ссылка в новой задаче
Block a user