2020-03-06 11:09:57 +01:00
/*
2022-01-11 11:10:46 +05:30
* Copyright ( C ) 2020 - 2022 Intel Corporation
2020-03-06 11:09:57 +01:00
*
* SPDX - License - Identifier : MIT
*
*/
# include "level_zero/tools/source/sysman/sysman_imp.h"
2022-12-07 11:51:44 +00:00
# include "shared/source/device/sub_device.h"
2022-12-06 11:19:36 +00:00
# include "shared/source/helpers/hw_helper.h"
2022-10-21 10:50:55 +00:00
# include "shared/source/helpers/sleep.h"
2020-03-18 22:21:57 -07:00
# include "level_zero/core/source/driver/driver.h"
# include "level_zero/core/source/driver/driver_handle_imp.h"
2022-04-12 11:45:58 +00:00
# include "level_zero/tools/source/sysman/ecc/ecc_imp.h"
2020-10-09 11:04:35 +05:30
# include "level_zero/tools/source/sysman/events/events_imp.h"
2020-07-03 20:05:35 +05:30
# include "level_zero/tools/source/sysman/global_operations/global_operations_imp.h"
2020-03-22 08:52:57 +01:00
# include "level_zero/tools/source/sysman/pci/pci_imp.h"
2020-03-06 11:09:57 +01:00
# include "level_zero/tools/source/sysman/sysman.h"
# include <vector>
namespace L0 {
2020-07-03 20:05:35 +05:30
SysmanDeviceImp : : SysmanDeviceImp ( ze_device_handle_t hDevice ) {
hCoreDevice = hDevice ;
pOsSysman = OsSysman : : create ( this ) ;
UNRECOVERABLE_IF ( nullptr = = pOsSysman ) ;
2020-08-13 23:33:21 +05:30
pPci = new PciImp ( pOsSysman ) ;
2020-07-17 15:49:21 +05:30
pPowerHandleContext = new PowerHandleContext ( pOsSysman ) ;
2020-07-24 16:39:09 +05:30
pFrequencyHandleContext = new FrequencyHandleContext ( pOsSysman ) ;
2020-07-20 16:06:42 -04:00
pFabricPortHandleContext = new FabricPortHandleContext ( pOsSysman ) ;
2020-07-29 16:28:08 +05:30
pTempHandleContext = new TemperatureHandleContext ( pOsSysman ) ;
2020-07-15 00:06:12 +05:30
pStandbyHandleContext = new StandbyHandleContext ( pOsSysman ) ;
2020-07-30 18:01:57 +05:30
pEngineHandleContext = new EngineHandleContext ( pOsSysman ) ;
2020-07-31 16:04:29 +05:30
pSchedulerHandleContext = new SchedulerHandleContext ( pOsSysman ) ;
2020-08-05 00:52:42 +05:30
pRasHandleContext = new RasHandleContext ( pOsSysman ) ;
2020-08-13 23:33:21 +05:30
pMemoryHandleContext = new MemoryHandleContext ( pOsSysman ) ;
pGlobalOperations = new GlobalOperationsImp ( pOsSysman ) ;
2020-10-09 11:04:35 +05:30
pEvents = new EventsImp ( pOsSysman ) ;
2020-08-14 18:30:53 -07:00
pFanHandleContext = new FanHandleContext ( pOsSysman ) ;
2020-08-13 16:04:11 +05:30
pFirmwareHandleContext = new FirmwareHandleContext ( pOsSysman ) ;
2021-03-10 12:27:01 +05:30
pDiagnosticsHandleContext = new DiagnosticsHandleContext ( pOsSysman ) ;
2020-12-28 09:55:52 +05:30
pPerformanceHandleContext = new PerformanceHandleContext ( pOsSysman ) ;
2022-04-12 11:45:58 +00:00
pEcc = new EccImp ( pOsSysman ) ;
2020-07-03 20:05:35 +05:30
}
SysmanDeviceImp : : ~ SysmanDeviceImp ( ) {
2020-12-28 09:55:52 +05:30
freeResource ( pPerformanceHandleContext ) ;
2021-03-10 12:27:01 +05:30
freeResource ( pDiagnosticsHandleContext ) ;
2020-08-13 16:04:11 +05:30
freeResource ( pFirmwareHandleContext ) ;
2020-10-09 11:04:35 +05:30
freeResource ( pFanHandleContext ) ;
freeResource ( pEvents ) ;
2020-07-25 23:53:21 +05:30
freeResource ( pGlobalOperations ) ;
2020-08-06 19:27:43 -07:00
freeResource ( pMemoryHandleContext ) ;
2020-08-05 00:52:42 +05:30
freeResource ( pRasHandleContext ) ;
2020-07-31 16:04:29 +05:30
freeResource ( pSchedulerHandleContext ) ;
2020-07-30 18:01:57 +05:30
freeResource ( pEngineHandleContext ) ;
2020-07-15 00:06:12 +05:30
freeResource ( pStandbyHandleContext ) ;
2020-07-29 16:28:08 +05:30
freeResource ( pTempHandleContext ) ;
2020-07-20 16:06:42 -04:00
freeResource ( pFabricPortHandleContext ) ;
2020-07-23 07:04:28 +05:30
freeResource ( pPci ) ;
2020-07-24 16:39:09 +05:30
freeResource ( pFrequencyHandleContext ) ;
2020-07-29 16:28:08 +05:30
freeResource ( pPowerHandleContext ) ;
2022-04-12 11:45:58 +00:00
freeResource ( pEcc ) ;
2020-07-29 16:28:08 +05:30
freeResource ( pOsSysman ) ;
2020-07-03 20:05:35 +05:30
}
2021-10-11 15:34:03 +00:00
void SysmanDeviceImp : : updateSubDeviceHandlesLocally ( ) {
2020-09-10 10:54:55 +05:30
uint32_t subDeviceCount = 0 ;
2021-10-11 15:34:03 +00:00
deviceHandles . clear ( ) ;
2020-09-10 10:54:55 +05:30
Device : : fromHandle ( hCoreDevice ) - > getSubDevices ( & subDeviceCount , nullptr ) ;
if ( subDeviceCount = = 0 ) {
deviceHandles . resize ( 1 , hCoreDevice ) ;
} else {
deviceHandles . resize ( subDeviceCount , nullptr ) ;
Device : : fromHandle ( hCoreDevice ) - > getSubDevices ( & subDeviceCount , deviceHandles . data ( ) ) ;
}
2021-10-11 15:34:03 +00:00
}
2022-01-11 11:10:46 +05:30
void SysmanDeviceImp : : getSysmanDeviceInfo ( zes_device_handle_t hDevice , uint32_t & subdeviceId , ze_bool_t & onSubdevice ) {
NEO : : Device * neoDevice = Device : : fromHandle ( hDevice ) - > getNEODevice ( ) ;
onSubdevice = static_cast < ze_bool_t > ( false ) ;
if ( NEO : : HwHelper : : getSubDevicesCount ( & neoDevice - > getHardwareInfo ( ) ) > 1 ) {
onSubdevice = static_cast < ze_bool_t > ( true ) ;
}
if ( ! neoDevice - > isSubDevice ( ) ) { // To get physical device or subdeviceIndex Index in case when the device does not support tile architecture is single tile device
UNRECOVERABLE_IF ( neoDevice - > getDeviceBitfield ( ) . count ( ) ! = 1 ) // or the device is single tile device or AFFINITY_MASK only exposes single tile
subdeviceId = Math : : log2 ( static_cast < uint32_t > ( neoDevice - > getDeviceBitfield ( ) . to_ulong ( ) ) ) ;
} else {
subdeviceId = static_cast < NEO : : SubDevice * > ( neoDevice ) - > getSubDeviceIndex ( ) ;
}
}
2022-08-23 08:50:53 +00:00
PRODUCT_FAMILY SysmanDeviceImp : : getProductFamily ( Device * pDevice ) {
return pDevice - > getNEODevice ( ) - > getHardwareInfo ( ) . platform . eProductFamily ;
}
2021-10-11 15:34:03 +00:00
ze_result_t SysmanDeviceImp : : init ( ) {
// We received a device handle. Check for subdevices in this device
updateSubDeviceHandlesLocally ( ) ;
2020-09-10 10:54:55 +05:30
2021-09-15 17:20:49 +05:30
auto result = pOsSysman - > init ( ) ;
if ( ZE_RESULT_SUCCESS ! = result ) {
return result ;
}
return result ;
2020-07-03 20:05:35 +05:30
}
2020-07-24 16:39:09 +05:30
ze_result_t SysmanDeviceImp : : frequencyGet ( uint32_t * pCount , zes_freq_handle_t * phFrequency ) {
return pFrequencyHandleContext - > frequencyGet ( pCount , phFrequency ) ;
}
2020-07-25 23:53:21 +05:30
ze_result_t SysmanDeviceImp : : deviceGetProperties ( zes_device_properties_t * pProperties ) {
return pGlobalOperations - > deviceGetProperties ( pProperties ) ;
}
ze_result_t SysmanDeviceImp : : processesGetState ( uint32_t * pCount , zes_process_state_t * pProcesses ) {
return pGlobalOperations - > processesGetState ( pCount , pProcesses ) ;
}
ze_result_t SysmanDeviceImp : : deviceReset ( ze_bool_t force ) {
return pGlobalOperations - > reset ( force ) ;
}
2020-10-09 11:04:35 +05:30
ze_result_t SysmanDeviceImp : : deviceEventRegister ( zes_event_type_flags_t events ) {
return pEvents - > eventRegister ( events ) ;
}
2021-04-05 09:38:22 +05:30
bool SysmanDeviceImp : : deviceEventListen ( zes_event_type_flags_t & pEvent , uint64_t timeout ) {
2020-11-05 18:23:38 -08:00
return pEvents - > eventListen ( pEvent , timeout ) ;
2020-10-09 11:04:35 +05:30
}
2020-07-25 23:53:21 +05:30
ze_result_t SysmanDeviceImp : : deviceGetState ( zes_device_state_t * pState ) {
2020-10-07 13:07:58 +05:30
return pGlobalOperations - > deviceGetState ( pState ) ;
2020-07-25 23:53:21 +05:30
}
2020-07-23 07:04:28 +05:30
ze_result_t SysmanDeviceImp : : pciGetProperties ( zes_pci_properties_t * pProperties ) {
return pPci - > pciStaticProperties ( pProperties ) ;
}
ze_result_t SysmanDeviceImp : : pciGetState ( zes_pci_state_t * pState ) {
2020-08-14 01:19:58 -07:00
return pPci - > pciGetState ( pState ) ;
2020-07-23 07:04:28 +05:30
}
ze_result_t SysmanDeviceImp : : pciGetBars ( uint32_t * pCount , zes_pci_bar_properties_t * pProperties ) {
return pPci - > pciGetInitializedBars ( pCount , pProperties ) ;
}
ze_result_t SysmanDeviceImp : : pciGetStats ( zes_pci_stats_t * pStats ) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE ;
}
2022-04-05 12:29:27 +00:00
ze_result_t SysmanDeviceImp : : powerGetCardDomain ( zes_pwr_handle_t * phPower ) {
return pPowerHandleContext - > powerGetCardDomain ( phPower ) ;
}
2020-07-29 02:45:54 -07:00
ze_result_t SysmanDeviceImp : : powerGet ( uint32_t * pCount , zes_pwr_handle_t * phPower ) {
return pPowerHandleContext - > powerGet ( pCount , phPower ) ;
2020-03-06 11:09:57 +01:00
}
2020-07-30 18:01:57 +05:30
ze_result_t SysmanDeviceImp : : engineGet ( uint32_t * pCount , zes_engine_handle_t * phEngine ) {
return pEngineHandleContext - > engineGet ( pCount , phEngine ) ;
}
2020-07-15 00:06:12 +05:30
ze_result_t SysmanDeviceImp : : standbyGet ( uint32_t * pCount , zes_standby_handle_t * phStandby ) {
return pStandbyHandleContext - > standbyGet ( pCount , phStandby ) ;
}
2020-07-20 16:06:42 -04:00
ze_result_t SysmanDeviceImp : : fabricPortGet ( uint32_t * pCount , zes_fabric_port_handle_t * phPort ) {
return pFabricPortHandleContext - > fabricPortGet ( pCount , phPort ) ;
}
2020-07-29 16:28:08 +05:30
ze_result_t SysmanDeviceImp : : temperatureGet ( uint32_t * pCount , zes_temp_handle_t * phTemperature ) {
return pTempHandleContext - > temperatureGet ( pCount , phTemperature ) ;
}
2020-07-31 16:04:29 +05:30
ze_result_t SysmanDeviceImp : : schedulerGet ( uint32_t * pCount , zes_sched_handle_t * phScheduler ) {
return pSchedulerHandleContext - > schedulerGet ( pCount , phScheduler ) ;
}
2020-08-05 00:52:42 +05:30
ze_result_t SysmanDeviceImp : : rasGet ( uint32_t * pCount , zes_ras_handle_t * phRas ) {
return pRasHandleContext - > rasGet ( pCount , phRas ) ;
}
2020-08-13 16:04:11 +05:30
ze_result_t SysmanDeviceImp : : firmwareGet ( uint32_t * pCount , zes_firmware_handle_t * phFirmware ) {
return pFirmwareHandleContext - > firmwareGet ( pCount , phFirmware ) ;
}
2021-03-10 12:27:01 +05:30
ze_result_t SysmanDeviceImp : : diagnosticsGet ( uint32_t * pCount , zes_diag_handle_t * phDiagnostics ) {
return pDiagnosticsHandleContext - > diagnosticsGet ( pCount , phDiagnostics ) ;
}
2020-08-06 19:27:43 -07:00
ze_result_t SysmanDeviceImp : : memoryGet ( uint32_t * pCount , zes_mem_handle_t * phMemory ) {
return pMemoryHandleContext - > memoryGet ( pCount , phMemory ) ;
}
2020-08-14 18:30:53 -07:00
ze_result_t SysmanDeviceImp : : fanGet ( uint32_t * pCount , zes_fan_handle_t * phFan ) {
return pFanHandleContext - > fanGet ( pCount , phFan ) ;
}
2020-12-28 09:55:52 +05:30
ze_result_t SysmanDeviceImp : : performanceGet ( uint32_t * pCount , zes_perf_handle_t * phPerformance ) {
return pPerformanceHandleContext - > performanceGet ( pCount , phPerformance ) ;
}
2022-04-12 11:45:58 +00:00
ze_result_t SysmanDeviceImp : : deviceEccAvailable ( ze_bool_t * pAvailable ) {
return pEcc - > deviceEccAvailable ( pAvailable ) ;
}
ze_result_t SysmanDeviceImp : : deviceEccConfigurable ( ze_bool_t * pConfigurable ) {
return pEcc - > deviceEccConfigurable ( pConfigurable ) ;
}
ze_result_t SysmanDeviceImp : : deviceGetEccState ( zes_device_ecc_properties_t * pState ) {
return pEcc - > getEccState ( pState ) ;
}
ze_result_t SysmanDeviceImp : : deviceSetEccState ( const zes_device_ecc_desc_t * newState , zes_device_ecc_properties_t * pState ) {
return pEcc - > setEccState ( newState , pState ) ;
}
2020-03-06 11:09:57 +01:00
} // namespace L0