[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>
Этот коммит содержится в:
Charis Poag
2024-06-20 19:36:23 -05:00
родитель 57e8e72b79
Коммит 323ab1105d
9 изменённых файлов: 491 добавлений и 115 удалений
+13 -11
Просмотреть файл
@@ -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
+11 -11
Просмотреть файл
@@ -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