102d5b0aaSJacek Lawrynowicz /* SPDX-License-Identifier: MIT */ 202d5b0aaSJacek Lawrynowicz /* 3*a4293cc7SAndrzej Kacprowski * Copyright (c) 2020-2024, Intel Corporation. 402d5b0aaSJacek Lawrynowicz */ 502d5b0aaSJacek Lawrynowicz 602d5b0aaSJacek Lawrynowicz #ifndef VPU_BOOT_API_H 702d5b0aaSJacek Lawrynowicz #define VPU_BOOT_API_H 802d5b0aaSJacek Lawrynowicz 902d5b0aaSJacek Lawrynowicz /* 10284a8908SAndrew Kreimer * The below values will be used to construct the version info this way: 1102d5b0aaSJacek Lawrynowicz * fw_bin_header->api_version[VPU_BOOT_API_VER_ID] = (VPU_BOOT_API_VER_MAJOR << 16) | 1202d5b0aaSJacek Lawrynowicz * VPU_BOOT_API_VER_MINOR; 138c63b474SKrystian Pradzynski * VPU_BOOT_API_VER_PATCH will be ignored. KMD and compatibility is not affected if this changes 148c63b474SKrystian Pradzynski * This information is collected by using vpuip_2/application/vpuFirmware/make_std_fw_image.py 158c63b474SKrystian Pradzynski * If a header is missing this info we ignore the header, if a header is missing or contains 168c63b474SKrystian Pradzynski * partial info a build error will be generated. 1702d5b0aaSJacek Lawrynowicz */ 1802d5b0aaSJacek Lawrynowicz 1902d5b0aaSJacek Lawrynowicz /* 2002d5b0aaSJacek Lawrynowicz * Major version changes that break backward compatibility. 2102d5b0aaSJacek Lawrynowicz * Major version must start from 1 and can only be incremented. 2202d5b0aaSJacek Lawrynowicz */ 2302d5b0aaSJacek Lawrynowicz #define VPU_BOOT_API_VER_MAJOR 3 2402d5b0aaSJacek Lawrynowicz 2502d5b0aaSJacek Lawrynowicz /* 2602d5b0aaSJacek Lawrynowicz * Minor version changes when API backward compatibility is preserved. 2702d5b0aaSJacek Lawrynowicz * Resets to 0 if Major version is incremented. 2802d5b0aaSJacek Lawrynowicz */ 29*a4293cc7SAndrzej Kacprowski #define VPU_BOOT_API_VER_MINOR 28 3002d5b0aaSJacek Lawrynowicz 3102d5b0aaSJacek Lawrynowicz /* 3202d5b0aaSJacek Lawrynowicz * API header changed (field names, documentation, formatting) but API itself has not been changed 3302d5b0aaSJacek Lawrynowicz */ 34*a4293cc7SAndrzej Kacprowski #define VPU_BOOT_API_VER_PATCH 3 3502d5b0aaSJacek Lawrynowicz 3602d5b0aaSJacek Lawrynowicz /* 3702d5b0aaSJacek Lawrynowicz * Index in the API version table 3802d5b0aaSJacek Lawrynowicz * Must be unique for each API 3902d5b0aaSJacek Lawrynowicz */ 4002d5b0aaSJacek Lawrynowicz #define VPU_BOOT_API_VER_INDEX 0 4102d5b0aaSJacek Lawrynowicz 423bd0edf8SJacek Lawrynowicz #pragma pack(push, 4) 4302d5b0aaSJacek Lawrynowicz 4402d5b0aaSJacek Lawrynowicz /* 4502d5b0aaSJacek Lawrynowicz * Firmware image header format 4602d5b0aaSJacek Lawrynowicz */ 4702d5b0aaSJacek Lawrynowicz #define VPU_FW_HEADER_SIZE 4096 4802d5b0aaSJacek Lawrynowicz #define VPU_FW_HEADER_VERSION 0x1 4902d5b0aaSJacek Lawrynowicz #define VPU_FW_VERSION_SIZE 32 5002d5b0aaSJacek Lawrynowicz #define VPU_FW_API_VER_NUM 16 5102d5b0aaSJacek Lawrynowicz 5202d5b0aaSJacek Lawrynowicz struct vpu_firmware_header { 5302d5b0aaSJacek Lawrynowicz u32 header_version; 5402d5b0aaSJacek Lawrynowicz u32 image_format; 5502d5b0aaSJacek Lawrynowicz u64 image_load_address; 5602d5b0aaSJacek Lawrynowicz u32 image_size; 5702d5b0aaSJacek Lawrynowicz u64 entry_point; 5802d5b0aaSJacek Lawrynowicz u8 vpu_version[VPU_FW_VERSION_SIZE]; 5902d5b0aaSJacek Lawrynowicz u32 compression_type; 6002d5b0aaSJacek Lawrynowicz u64 firmware_version_load_address; 6102d5b0aaSJacek Lawrynowicz u32 firmware_version_size; 6202d5b0aaSJacek Lawrynowicz u64 boot_params_load_address; 6302d5b0aaSJacek Lawrynowicz u32 api_version[VPU_FW_API_VER_NUM]; 6402d5b0aaSJacek Lawrynowicz /* Size of memory require for firmware execution */ 6502d5b0aaSJacek Lawrynowicz u32 runtime_size; 6602d5b0aaSJacek Lawrynowicz u32 shave_nn_fw_size; 673bd0edf8SJacek Lawrynowicz /* 683bd0edf8SJacek Lawrynowicz * Size of primary preemption buffer, assuming a 2-job submission queue. 693bd0edf8SJacek Lawrynowicz * NOTE: host driver is expected to adapt size accordingly to actual 703bd0edf8SJacek Lawrynowicz * submission queue size and device capabilities. 713bd0edf8SJacek Lawrynowicz */ 728c63b474SKrystian Pradzynski u32 preemption_buffer_1_size; 733bd0edf8SJacek Lawrynowicz /* 743bd0edf8SJacek Lawrynowicz * Size of secondary preemption buffer, assuming a 2-job submission queue. 753bd0edf8SJacek Lawrynowicz * NOTE: host driver is expected to adapt size accordingly to actual 763bd0edf8SJacek Lawrynowicz * submission queue size and device capabilities. 773bd0edf8SJacek Lawrynowicz */ 788c63b474SKrystian Pradzynski u32 preemption_buffer_2_size; 798c63b474SKrystian Pradzynski /* 808c63b474SKrystian Pradzynski * Maximum preemption buffer size that the FW can use: no need for the host 81f1432983SWachowski, Karol * driver to allocate more space than that specified by these fields. 82f1432983SWachowski, Karol * A value of 0 means no declared limit. 83f1432983SWachowski, Karol */ 84f1432983SWachowski, Karol u32 preemption_buffer_1_max_size; 85f1432983SWachowski, Karol u32 preemption_buffer_2_max_size; 8602d5b0aaSJacek Lawrynowicz /* Space reserved for future preemption-related fields. */ 8702d5b0aaSJacek Lawrynowicz u32 preemption_reserved[4]; 8802d5b0aaSJacek Lawrynowicz /* FW image read only section start address, 4KB aligned */ 8902d5b0aaSJacek Lawrynowicz u64 ro_section_start_address; 9002d5b0aaSJacek Lawrynowicz /* FW image read only section size, 4KB aligned */ 9102d5b0aaSJacek Lawrynowicz u32 ro_section_size; 9202d5b0aaSJacek Lawrynowicz u32 reserved; 9302d5b0aaSJacek Lawrynowicz }; 9402d5b0aaSJacek Lawrynowicz 9502d5b0aaSJacek Lawrynowicz /* 9602d5b0aaSJacek Lawrynowicz * Firmware boot parameters format 9702d5b0aaSJacek Lawrynowicz */ 9802d5b0aaSJacek Lawrynowicz 9902d5b0aaSJacek Lawrynowicz #define VPU_BOOT_PLL_COUNT 3 10002d5b0aaSJacek Lawrynowicz #define VPU_BOOT_PLL_OUT_COUNT 4 10102d5b0aaSJacek Lawrynowicz 10202d5b0aaSJacek Lawrynowicz /** Values for boot_type field */ 10302d5b0aaSJacek Lawrynowicz #define VPU_BOOT_TYPE_COLDBOOT 0 10402d5b0aaSJacek Lawrynowicz #define VPU_BOOT_TYPE_WARMBOOT 1 10502d5b0aaSJacek Lawrynowicz 10602d5b0aaSJacek Lawrynowicz /** Value for magic filed */ 10702d5b0aaSJacek Lawrynowicz #define VPU_BOOT_PARAMS_MAGIC 0x10000 10802d5b0aaSJacek Lawrynowicz 10902d5b0aaSJacek Lawrynowicz /** VPU scheduling mode. By default, OS scheduling is used. */ 11002d5b0aaSJacek Lawrynowicz #define VPU_SCHEDULING_MODE_OS 0 11102d5b0aaSJacek Lawrynowicz #define VPU_SCHEDULING_MODE_HW 1 1128c63b474SKrystian Pradzynski 1138c63b474SKrystian Pradzynski enum VPU_BOOT_L2_CACHE_CFG_TYPE { 1148c63b474SKrystian Pradzynski VPU_BOOT_L2_CACHE_CFG_UPA = 0, 1158c63b474SKrystian Pradzynski VPU_BOOT_L2_CACHE_CFG_NN = 1, 1168c63b474SKrystian Pradzynski VPU_BOOT_L2_CACHE_CFG_NUM = 2 1178c63b474SKrystian Pradzynski }; 1188c63b474SKrystian Pradzynski 1198c63b474SKrystian Pradzynski /** VPU MCA ECC signalling mode. By default, no signalling is used */ 12002d5b0aaSJacek Lawrynowicz enum VPU_BOOT_MCA_ECC_SIGNAL_TYPE { 12102d5b0aaSJacek Lawrynowicz VPU_BOOT_MCA_ECC_NONE = 0, 12202d5b0aaSJacek Lawrynowicz VPU_BOOT_MCA_ECC_CORR = 1, 12302d5b0aaSJacek Lawrynowicz VPU_BOOT_MCA_ECC_FATAL = 2, 12402d5b0aaSJacek Lawrynowicz VPU_BOOT_MCA_ECC_BOTH = 3 12502d5b0aaSJacek Lawrynowicz }; 12602d5b0aaSJacek Lawrynowicz 12702d5b0aaSJacek Lawrynowicz /** 12802d5b0aaSJacek Lawrynowicz * Logging destinations. 12902d5b0aaSJacek Lawrynowicz * 13002d5b0aaSJacek Lawrynowicz * Logging output can be directed to different logging destinations. This enum 13102d5b0aaSJacek Lawrynowicz * defines the list of logging destinations supported by the VPU firmware (NOTE: 13202d5b0aaSJacek Lawrynowicz * a specific VPU FW binary may support only a subset of such output 13302d5b0aaSJacek Lawrynowicz * destinations, depending on the target platform and compile options). 13402d5b0aaSJacek Lawrynowicz */ 13502d5b0aaSJacek Lawrynowicz enum vpu_trace_destination { 13602d5b0aaSJacek Lawrynowicz VPU_TRACE_DESTINATION_PIPEPRINT = 0x1, 13702d5b0aaSJacek Lawrynowicz VPU_TRACE_DESTINATION_VERBOSE_TRACING = 0x2, 13802d5b0aaSJacek Lawrynowicz VPU_TRACE_DESTINATION_NORTH_PEAK = 0x4, 13902d5b0aaSJacek Lawrynowicz }; 14002d5b0aaSJacek Lawrynowicz 14102d5b0aaSJacek Lawrynowicz /* 14202d5b0aaSJacek Lawrynowicz * Processor bit shifts (for loggable HW components). 14302d5b0aaSJacek Lawrynowicz */ 14402d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_RESERVED 0 14502d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_LRT 1 14602d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_LNN 2 14702d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_0 3 14802d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_1 4 14902d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_2 5 15002d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_3 6 15102d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_4 7 15202d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_5 8 15302d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_6 9 15402d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_7 10 15502d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_8 11 15602d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_9 12 15702d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_10 13 15802d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_11 14 15902d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_12 15 16002d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_13 16 16102d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_SHV_14 17 1628c63b474SKrystian Pradzynski #define VPU_TRACE_PROC_BIT_SHV_15 18 1638c63b474SKrystian Pradzynski #define VPU_TRACE_PROC_BIT_ACT_SHV_0 19 1648c63b474SKrystian Pradzynski #define VPU_TRACE_PROC_BIT_ACT_SHV_1 20 16502d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_ACT_SHV_2 21 16602d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_ACT_SHV_3 22 16702d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_NO_OF_HW_DEVS 23 16802d5b0aaSJacek Lawrynowicz 16902d5b0aaSJacek Lawrynowicz /* VPU 30xx HW component IDs are sequential, so define first and last IDs. */ 17002d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_30XX_FIRST VPU_TRACE_PROC_BIT_LRT 17102d5b0aaSJacek Lawrynowicz #define VPU_TRACE_PROC_BIT_30XX_LAST VPU_TRACE_PROC_BIT_SHV_15 17202d5b0aaSJacek Lawrynowicz 17302d5b0aaSJacek Lawrynowicz struct vpu_boot_l2_cache_config { 17402d5b0aaSJacek Lawrynowicz u8 use; 17502d5b0aaSJacek Lawrynowicz u8 cfg; 17602d5b0aaSJacek Lawrynowicz }; 17702d5b0aaSJacek Lawrynowicz 17802d5b0aaSJacek Lawrynowicz struct vpu_warm_boot_section { 1798c63b474SKrystian Pradzynski u32 src; 1808c63b474SKrystian Pradzynski u32 dst; 1818c63b474SKrystian Pradzynski u32 size; 1828c63b474SKrystian Pradzynski u32 core_id; 1838c63b474SKrystian Pradzynski u32 is_clear_op; 1848c63b474SKrystian Pradzynski }; 1858c63b474SKrystian Pradzynski 1868c63b474SKrystian Pradzynski /* 1878c63b474SKrystian Pradzynski * When HW scheduling mode is enabled, a present period is defined. 1888c63b474SKrystian Pradzynski * It will be used by VPU to swap between normal and focus priorities 1898c63b474SKrystian Pradzynski * to prevent starving of normal priority band (when implemented). 1908c63b474SKrystian Pradzynski * Host must provide a valid value at boot time in 1918c63b474SKrystian Pradzynski * `vpu_focus_present_timer_ms`. If the value provided by the host is not within the 1928c63b474SKrystian Pradzynski * defined range a default value will be used. Here we define the min. and max. 1933bd0edf8SJacek Lawrynowicz * allowed values and the and default value of the present period. Units are milliseconds. 1948c63b474SKrystian Pradzynski */ 1958c63b474SKrystian Pradzynski #define VPU_PRESENT_CALL_PERIOD_MS_DEFAULT 50 1963bd0edf8SJacek Lawrynowicz #define VPU_PRESENT_CALL_PERIOD_MS_MIN 16 1978c63b474SKrystian Pradzynski #define VPU_PRESENT_CALL_PERIOD_MS_MAX 10000 198*a4293cc7SAndrzej Kacprowski 199*a4293cc7SAndrzej Kacprowski /** 200*a4293cc7SAndrzej Kacprowski * Macros to enable various power profiles within the NPU. 201*a4293cc7SAndrzej Kacprowski * To be defined as part of 32 bit mask. 202*a4293cc7SAndrzej Kacprowski */ 203*a4293cc7SAndrzej Kacprowski #define POWER_PROFILE_SURVIVABILITY 0x1 204*a4293cc7SAndrzej Kacprowski 205*a4293cc7SAndrzej Kacprowski /** 206*a4293cc7SAndrzej Kacprowski * Enum for dvfs_mode boot param. 207*a4293cc7SAndrzej Kacprowski */ 208*a4293cc7SAndrzej Kacprowski enum vpu_governor { 20902d5b0aaSJacek Lawrynowicz VPU_GOV_DEFAULT = 0, /* Default Governor for the system */ 21002d5b0aaSJacek Lawrynowicz VPU_GOV_MAX_PERFORMANCE = 1, /* Maximum performance governor */ 21102d5b0aaSJacek Lawrynowicz VPU_GOV_ON_DEMAND = 2, /* On Demand frequency control governor */ 21202d5b0aaSJacek Lawrynowicz VPU_GOV_POWER_SAVE = 3, /* Power save governor */ 21302d5b0aaSJacek Lawrynowicz VPU_GOV_ON_DEMAND_PRIORITY_AWARE = 4 /* On Demand priority based governor */ 21402d5b0aaSJacek Lawrynowicz }; 21502d5b0aaSJacek Lawrynowicz 21602d5b0aaSJacek Lawrynowicz struct vpu_boot_params { 21702d5b0aaSJacek Lawrynowicz u32 magic; 21802d5b0aaSJacek Lawrynowicz u32 vpu_id; 21902d5b0aaSJacek Lawrynowicz u32 vpu_count; 22002d5b0aaSJacek Lawrynowicz u32 pad0[5]; 22102d5b0aaSJacek Lawrynowicz /* Clock frequencies: 0x20 - 0xFF */ 22202d5b0aaSJacek Lawrynowicz u32 frequency; 22302d5b0aaSJacek Lawrynowicz u32 pll[VPU_BOOT_PLL_COUNT][VPU_BOOT_PLL_OUT_COUNT]; 22402d5b0aaSJacek Lawrynowicz u32 perf_clk_frequency; 22502d5b0aaSJacek Lawrynowicz u32 pad1[42]; 22602d5b0aaSJacek Lawrynowicz /* Memory regions: 0x100 - 0x1FF */ 22702d5b0aaSJacek Lawrynowicz u64 ipc_header_area_start; 22802d5b0aaSJacek Lawrynowicz u32 ipc_header_area_size; 22902d5b0aaSJacek Lawrynowicz u64 shared_region_base; 23002d5b0aaSJacek Lawrynowicz u32 shared_region_size; 23102d5b0aaSJacek Lawrynowicz u64 ipc_payload_area_start; 23202d5b0aaSJacek Lawrynowicz u32 ipc_payload_area_size; 23302d5b0aaSJacek Lawrynowicz u64 global_aliased_pio_base; 23402d5b0aaSJacek Lawrynowicz u32 global_aliased_pio_size; 23502d5b0aaSJacek Lawrynowicz u32 autoconfig; 23602d5b0aaSJacek Lawrynowicz struct vpu_boot_l2_cache_config cache_defaults[VPU_BOOT_L2_CACHE_CFG_NUM]; 23702d5b0aaSJacek Lawrynowicz u64 global_memory_allocator_base; 23802d5b0aaSJacek Lawrynowicz u32 global_memory_allocator_size; 23902d5b0aaSJacek Lawrynowicz /** 24002d5b0aaSJacek Lawrynowicz * ShaveNN FW section VPU base address 24102d5b0aaSJacek Lawrynowicz * On VPU2.7 HW this address must be within 2GB range starting from L2C_PAGE_TABLE base 24202d5b0aaSJacek Lawrynowicz */ 24302d5b0aaSJacek Lawrynowicz u64 shave_nn_fw_base; 24402d5b0aaSJacek Lawrynowicz u64 save_restore_ret_address; /* stores the address of FW's restore entry point */ 24502d5b0aaSJacek Lawrynowicz u32 pad2[43]; 24602d5b0aaSJacek Lawrynowicz /* IRQ re-direct numbers: 0x200 - 0x2FF */ 24702d5b0aaSJacek Lawrynowicz s32 watchdog_irq_mss; 24802d5b0aaSJacek Lawrynowicz s32 watchdog_irq_nce; 24902d5b0aaSJacek Lawrynowicz /* ARM -> VPU doorbell interrupt. ARM is notifying VPU of async command or compute job. */ 25002d5b0aaSJacek Lawrynowicz u32 host_to_vpu_irq; 25102d5b0aaSJacek Lawrynowicz /* VPU -> ARM job done interrupt. VPU is notifying ARM of compute job completion. */ 25202d5b0aaSJacek Lawrynowicz u32 job_done_irq; 25302d5b0aaSJacek Lawrynowicz /* VPU -> ARM IRQ line to use to request MMU update. */ 25402d5b0aaSJacek Lawrynowicz u32 mmu_update_request_irq; 25502d5b0aaSJacek Lawrynowicz /* ARM -> VPU IRQ line to use to notify of MMU update completion. */ 25602d5b0aaSJacek Lawrynowicz u32 mmu_update_done_irq; 25702d5b0aaSJacek Lawrynowicz /* ARM -> VPU IRQ line to use to request power level change. */ 25802d5b0aaSJacek Lawrynowicz u32 set_power_level_irq; 25902d5b0aaSJacek Lawrynowicz /* VPU -> ARM IRQ line to use to notify of power level change completion. */ 26002d5b0aaSJacek Lawrynowicz u32 set_power_level_done_irq; 26102d5b0aaSJacek Lawrynowicz /* VPU -> ARM IRQ line to use to notify of VPU idle state change */ 26202d5b0aaSJacek Lawrynowicz u32 set_vpu_idle_update_irq; 26302d5b0aaSJacek Lawrynowicz /* VPU -> ARM IRQ line to use to request counter reset. */ 26402d5b0aaSJacek Lawrynowicz u32 metric_query_event_irq; 26502d5b0aaSJacek Lawrynowicz /* ARM -> VPU IRQ line to use to notify of counter reset completion. */ 26602d5b0aaSJacek Lawrynowicz u32 metric_query_event_done_irq; 26702d5b0aaSJacek Lawrynowicz /* VPU -> ARM IRQ line to use to notify of preemption completion. */ 26802d5b0aaSJacek Lawrynowicz u32 preemption_done_irq; 26902d5b0aaSJacek Lawrynowicz /* Padding. */ 27002d5b0aaSJacek Lawrynowicz u32 pad3[52]; 27102d5b0aaSJacek Lawrynowicz /* Silicon information: 0x300 - 0x3FF */ 27202d5b0aaSJacek Lawrynowicz u32 host_version_id; 27302d5b0aaSJacek Lawrynowicz u32 si_stepping; 27402d5b0aaSJacek Lawrynowicz u64 device_id; 27502d5b0aaSJacek Lawrynowicz u64 feature_exclusion; 27602d5b0aaSJacek Lawrynowicz u64 sku; 27702d5b0aaSJacek Lawrynowicz /** PLL ratio for minimum clock frequency */ 27802d5b0aaSJacek Lawrynowicz u32 min_freq_pll_ratio; 2798c63b474SKrystian Pradzynski /** PLL ratio for maximum clock frequency */ 28002d5b0aaSJacek Lawrynowicz u32 max_freq_pll_ratio; 28102d5b0aaSJacek Lawrynowicz /** 28202d5b0aaSJacek Lawrynowicz * Initial log level threshold (messages with log level severity less than 28302d5b0aaSJacek Lawrynowicz * the threshold will not be logged); applies to every enabled logging 28402d5b0aaSJacek Lawrynowicz * destination and loggable HW component. See 'mvLog_t' enum for acceptable 28502d5b0aaSJacek Lawrynowicz * values. 28602d5b0aaSJacek Lawrynowicz * TODO: EISW-33556: Move log level definition (mvLog_t) to this file. 28702d5b0aaSJacek Lawrynowicz */ 28802d5b0aaSJacek Lawrynowicz u32 default_trace_level; 28902d5b0aaSJacek Lawrynowicz u32 boot_type; 29002d5b0aaSJacek Lawrynowicz u64 punit_telemetry_sram_base; 29102d5b0aaSJacek Lawrynowicz u64 punit_telemetry_sram_size; 29202d5b0aaSJacek Lawrynowicz u32 vpu_telemetry_enable; 29302d5b0aaSJacek Lawrynowicz u64 crit_tracing_buff_addr; 29402d5b0aaSJacek Lawrynowicz u32 crit_tracing_buff_size; 29502d5b0aaSJacek Lawrynowicz u64 verbose_tracing_buff_addr; 29602d5b0aaSJacek Lawrynowicz u32 verbose_tracing_buff_size; 29702d5b0aaSJacek Lawrynowicz u64 verbose_tracing_sw_component_mask; /* TO BE REMOVED */ 29802d5b0aaSJacek Lawrynowicz /** 29902d5b0aaSJacek Lawrynowicz * Mask of destinations to which logging messages are delivered; bitwise OR 30002d5b0aaSJacek Lawrynowicz * of values defined in vpu_trace_destination enum. 30102d5b0aaSJacek Lawrynowicz */ 30202d5b0aaSJacek Lawrynowicz u32 trace_destination_mask; 30302d5b0aaSJacek Lawrynowicz /** 30402d5b0aaSJacek Lawrynowicz * Mask of hardware components for which logging is enabled; bitwise OR of 30502d5b0aaSJacek Lawrynowicz * bits defined by the VPU_TRACE_PROC_BIT_* macros. 30602d5b0aaSJacek Lawrynowicz */ 30702d5b0aaSJacek Lawrynowicz u64 trace_hw_component_mask; 30802d5b0aaSJacek Lawrynowicz /** Mask of trace message formats supported by the driver */ 30902d5b0aaSJacek Lawrynowicz u64 tracing_buff_message_format_mask; 31002d5b0aaSJacek Lawrynowicz u64 trace_reserved_1[2]; 311*a4293cc7SAndrzej Kacprowski /** 312*a4293cc7SAndrzej Kacprowski * Period at which the VPU reads the temp sensor values into MMIO, on 313*a4293cc7SAndrzej Kacprowski * platforms where that is necessary (in ms). 0 to disable reads. 314*a4293cc7SAndrzej Kacprowski */ 315*a4293cc7SAndrzej Kacprowski u32 temp_sensor_period_ms; 316*a4293cc7SAndrzej Kacprowski /** PLL ratio for efficient clock frequency */ 317*a4293cc7SAndrzej Kacprowski u32 pn_freq_pll_ratio; 318*a4293cc7SAndrzej Kacprowski /** 3198c63b474SKrystian Pradzynski * DVFS Mode: 3208c63b474SKrystian Pradzynski * 0 - Default, DVFS mode selected by the firmware 3218c63b474SKrystian Pradzynski * 1 - Max Performance 3228c63b474SKrystian Pradzynski * 2 - On Demand 3238c63b474SKrystian Pradzynski * 3 - Power Save 3248c63b474SKrystian Pradzynski * 4 - On Demand Priority Aware 3258c63b474SKrystian Pradzynski */ 3268c63b474SKrystian Pradzynski u32 dvfs_mode; 3278c63b474SKrystian Pradzynski /** 3288c63b474SKrystian Pradzynski * Depending on DVFS Mode: 3298c63b474SKrystian Pradzynski * On-demand: Default if 0. 3308c63b474SKrystian Pradzynski * Bit 0-7 - uint8_t: Highest residency percent 3318c63b474SKrystian Pradzynski * Bit 8-15 - uint8_t: High residency percent 3328c63b474SKrystian Pradzynski * Bit 16-23 - uint8_t: Low residency percent 3338c63b474SKrystian Pradzynski * Bit 24-31 - uint8_t: Lowest residency percent 3348c63b474SKrystian Pradzynski * Bit 32-35 - unsigned 4b: PLL Ratio increase amount on highest residency 3358c63b474SKrystian Pradzynski * Bit 36-39 - unsigned 4b: PLL Ratio increase amount on high residency 3368c63b474SKrystian Pradzynski * Bit 40-43 - unsigned 4b: PLL Ratio decrease amount on low residency 3378c63b474SKrystian Pradzynski * Bit 44-47 - unsigned 4b: PLL Ratio decrease amount on lowest frequency 3388c63b474SKrystian Pradzynski * Bit 48-55 - uint8_t: Period (ms) for residency decisions 3398c63b474SKrystian Pradzynski * Bit 56-63 - uint8_t: Averaging windows (as multiples of period. Max: 30 decimal) 3408c63b474SKrystian Pradzynski * Power Save/Max Performance: Unused 3418c63b474SKrystian Pradzynski */ 3428c63b474SKrystian Pradzynski u64 dvfs_param; 3438c63b474SKrystian Pradzynski /** 3448c63b474SKrystian Pradzynski * D0i3 delayed entry 3458c63b474SKrystian Pradzynski * Bit0: Disable CPU state save on D0i2 entry flow. 3468c63b474SKrystian Pradzynski * 0: Every D0i2 entry saves state. Save state IPC message ignored. 3473bd0edf8SJacek Lawrynowicz * 1: IPC message required to save state on D0i3 entry flow. 3483bd0edf8SJacek Lawrynowicz */ 349*a4293cc7SAndrzej Kacprowski u32 d0i3_delayed_entry; 350*a4293cc7SAndrzej Kacprowski /* Time spent by VPU in D0i3 state */ 3513bd0edf8SJacek Lawrynowicz u64 d0i3_residency_time_us; 3523bd0edf8SJacek Lawrynowicz /* Value of VPU perf counter at the time of entering D0i3 state . */ 3533bd0edf8SJacek Lawrynowicz u64 d0i3_entry_vpu_ts; 3543bd0edf8SJacek Lawrynowicz /* 355f1432983SWachowski, Karol * The system time of the host operating system in microseconds. 356f1432983SWachowski, Karol * E.g the number of microseconds since 1st of January 1970, or whatever 357f1432983SWachowski, Karol * date the host operating system uses to maintain system time. 358f1432983SWachowski, Karol * This value will be used to track system time on the VPU. 359f1432983SWachowski, Karol * The KMD is required to update this value on every VPU reset. 360f1432983SWachowski, Karol */ 361f1432983SWachowski, Karol u64 system_time_us; 362f1432983SWachowski, Karol u32 pad4[2]; 36302d5b0aaSJacek Lawrynowicz /* 36402d5b0aaSJacek Lawrynowicz * The delta between device monotonic time and the current value of the 36502d5b0aaSJacek Lawrynowicz * HW timestamp register, in ticks. Written by the firmware during boot. 36602d5b0aaSJacek Lawrynowicz * Can be used by the KMD to calculate device time. 36702d5b0aaSJacek Lawrynowicz */ 36802d5b0aaSJacek Lawrynowicz u64 device_time_delta_ticks; 36902d5b0aaSJacek Lawrynowicz u32 pad7[14]; 37002d5b0aaSJacek Lawrynowicz /* Warm boot information: 0x400 - 0x43F */ 37102d5b0aaSJacek Lawrynowicz u32 warm_boot_sections_count; 37202d5b0aaSJacek Lawrynowicz u32 warm_boot_start_address_reference; 37302d5b0aaSJacek Lawrynowicz u32 warm_boot_section_info_address_offset; 37402d5b0aaSJacek Lawrynowicz u32 pad5[13]; 37502d5b0aaSJacek Lawrynowicz /* Power States transitions timestamps: 0x440 - 0x46F*/ 37602d5b0aaSJacek Lawrynowicz struct { 37702d5b0aaSJacek Lawrynowicz /* VPU_IDLE -> VPU_ACTIVE transition initiated timestamp */ 37802d5b0aaSJacek Lawrynowicz u64 vpu_active_state_requested; 37902d5b0aaSJacek Lawrynowicz /* VPU_IDLE -> VPU_ACTIVE transition completed timestamp */ 38002d5b0aaSJacek Lawrynowicz u64 vpu_active_state_achieved; 38102d5b0aaSJacek Lawrynowicz /* VPU_ACTIVE -> VPU_IDLE transition initiated timestamp */ 38202d5b0aaSJacek Lawrynowicz u64 vpu_idle_state_requested; 38302d5b0aaSJacek Lawrynowicz /* VPU_ACTIVE -> VPU_IDLE transition completed timestamp */ 38402d5b0aaSJacek Lawrynowicz u64 vpu_idle_state_achieved; 38502d5b0aaSJacek Lawrynowicz /* VPU_IDLE -> VPU_STANDBY transition initiated timestamp */ 38602d5b0aaSJacek Lawrynowicz u64 vpu_standby_state_requested; 3878c63b474SKrystian Pradzynski /* VPU_IDLE -> VPU_STANDBY transition completed timestamp */ 3888c63b474SKrystian Pradzynski u64 vpu_standby_state_achieved; 3893bd0edf8SJacek Lawrynowicz } power_states_timestamps; 3903bd0edf8SJacek Lawrynowicz /* VPU scheduling mode. Values defined by VPU_SCHEDULING_MODE_* macros. */ 3913bd0edf8SJacek Lawrynowicz u32 vpu_scheduling_mode; 3923bd0edf8SJacek Lawrynowicz /* Present call period in milliseconds. */ 3933bd0edf8SJacek Lawrynowicz u32 vpu_focus_present_timer_ms; 3943bd0edf8SJacek Lawrynowicz /* VPU ECC Signaling */ 3953bd0edf8SJacek Lawrynowicz u32 vpu_uses_ecc_mca_signal; 3963bd0edf8SJacek Lawrynowicz /* Values defined by POWER_PROFILE* macros */ 39702d5b0aaSJacek Lawrynowicz u32 power_profile; 39802d5b0aaSJacek Lawrynowicz /* Microsecond value for DCT active cycle */ 399*a4293cc7SAndrzej Kacprowski u32 dct_active_us; 40002d5b0aaSJacek Lawrynowicz /* Microsecond value for DCT inactive cycle */ 40102d5b0aaSJacek Lawrynowicz u32 dct_inactive_us; 40202d5b0aaSJacek Lawrynowicz /* Unused/reserved: 0x488 - 0xFFF */ 40302d5b0aaSJacek Lawrynowicz u32 pad6[734]; 40402d5b0aaSJacek Lawrynowicz }; 40502d5b0aaSJacek Lawrynowicz 40602d5b0aaSJacek Lawrynowicz /* Magic numbers set between host and vpu to detect corruption of tracing init */ 40702d5b0aaSJacek Lawrynowicz #define VPU_TRACING_BUFFER_CANARY (0xCAFECAFE) 40802d5b0aaSJacek Lawrynowicz 40902d5b0aaSJacek Lawrynowicz /* Tracing buffer message format definitions */ 41002d5b0aaSJacek Lawrynowicz #define VPU_TRACING_FORMAT_STRING 0 41102d5b0aaSJacek Lawrynowicz #define VPU_TRACING_FORMAT_MIPI 2 41202d5b0aaSJacek Lawrynowicz /* 41302d5b0aaSJacek Lawrynowicz * Header of the tracing buffer. 41402d5b0aaSJacek Lawrynowicz * The below defined header will be stored at the beginning of 41502d5b0aaSJacek Lawrynowicz * each allocated tracing buffer, followed by a series of 256b 41602d5b0aaSJacek Lawrynowicz * of ASCII trace message entries. 41702d5b0aaSJacek Lawrynowicz */ 41802d5b0aaSJacek Lawrynowicz struct vpu_tracing_buffer_header { 419*a4293cc7SAndrzej Kacprowski /** 420*a4293cc7SAndrzej Kacprowski * Magic number set by host to detect corruption 421*a4293cc7SAndrzej Kacprowski * @see VPU_TRACING_BUFFER_CANARY 42202d5b0aaSJacek Lawrynowicz */ 42302d5b0aaSJacek Lawrynowicz u32 host_canary_start; 42402d5b0aaSJacek Lawrynowicz /* offset from start of buffer for trace entries */ 42502d5b0aaSJacek Lawrynowicz u32 read_index; 42602d5b0aaSJacek Lawrynowicz /* keeps track of wrapping on the reader side */ 42702d5b0aaSJacek Lawrynowicz u32 read_wrap_count; 42802d5b0aaSJacek Lawrynowicz u32 pad_to_cache_line_size_0[13]; 42902d5b0aaSJacek Lawrynowicz /* End of first cache line */ 43002d5b0aaSJacek Lawrynowicz 43102d5b0aaSJacek Lawrynowicz /** 43202d5b0aaSJacek Lawrynowicz * Magic number set by host to detect corruption 43302d5b0aaSJacek Lawrynowicz * @see VPU_TRACING_BUFFER_CANARY 43402d5b0aaSJacek Lawrynowicz */ 43502d5b0aaSJacek Lawrynowicz u32 vpu_canary_start; 43602d5b0aaSJacek Lawrynowicz /* offset from start of buffer from write start */ 43702d5b0aaSJacek Lawrynowicz u32 write_index; 43802d5b0aaSJacek Lawrynowicz /* counter for buffer wrapping */ 43902d5b0aaSJacek Lawrynowicz u32 wrap_count; 44002d5b0aaSJacek Lawrynowicz /* legacy field - do not use */ 44102d5b0aaSJacek Lawrynowicz u32 reserved_0; 44202d5b0aaSJacek Lawrynowicz /** 44302d5b0aaSJacek Lawrynowicz * Size of the log buffer include this header (@header_size) and space 44402d5b0aaSJacek Lawrynowicz * reserved for all messages. If @alignment` is greater that 0 the @Size 44502d5b0aaSJacek Lawrynowicz * must be multiple of @Alignment. 44602d5b0aaSJacek Lawrynowicz */ 44702d5b0aaSJacek Lawrynowicz u32 size; 44802d5b0aaSJacek Lawrynowicz /* Header version */ 44902d5b0aaSJacek Lawrynowicz u16 header_version; 45002d5b0aaSJacek Lawrynowicz /* Header size */ 45102d5b0aaSJacek Lawrynowicz u16 header_size; 45202d5b0aaSJacek Lawrynowicz /* 45302d5b0aaSJacek Lawrynowicz * Format of the messages in the trace buffer 45402d5b0aaSJacek Lawrynowicz * 0 - null terminated string 45502d5b0aaSJacek Lawrynowicz * 1 - size + null terminated string 45602d5b0aaSJacek Lawrynowicz * 2 - MIPI-SysT encoding 45702d5b0aaSJacek Lawrynowicz */ 45802d5b0aaSJacek Lawrynowicz u32 format; 45902d5b0aaSJacek Lawrynowicz /* 46002d5b0aaSJacek Lawrynowicz * Message alignment 46102d5b0aaSJacek Lawrynowicz * 0 - messages are place 1 after another 46202d5b0aaSJacek Lawrynowicz * n - every message starts and multiple on offset 46302d5b0aaSJacek Lawrynowicz */ 46402d5b0aaSJacek Lawrynowicz u32 alignment; /* 64, 128, 256 */ 46502d5b0aaSJacek Lawrynowicz /* Name of the logging entity, i.e "LRT", "LNN", "SHV0", etc */ 46602d5b0aaSJacek Lawrynowicz char name[16]; 467 u32 pad_to_cache_line_size_1[4]; 468 /* End of second cache line */ 469 }; 470 471 #pragma pack(pop) 472 473 #endif 474