162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2014-2022, NVIDIA CORPORATION. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef ABI_BPMP_ABI_H 762306a36Sopenharmony_ci#define ABI_BPMP_ABI_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#if defined(LK) || defined(BPMP_ABI_HAVE_STDC) 1062306a36Sopenharmony_ci#include <stddef.h> 1162306a36Sopenharmony_ci#include <stdint.h> 1262306a36Sopenharmony_ci#endif 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef BPMP_ABI_PACKED 1562306a36Sopenharmony_ci#ifdef __ABI_PACKED 1662306a36Sopenharmony_ci#define BPMP_ABI_PACKED __ABI_PACKED 1762306a36Sopenharmony_ci#else 1862306a36Sopenharmony_ci#define BPMP_ABI_PACKED __attribute__((packed)) 1962306a36Sopenharmony_ci#endif 2062306a36Sopenharmony_ci#endif 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#ifdef NO_GCC_EXTENSIONS 2362306a36Sopenharmony_ci#define BPMP_ABI_EMPTY char empty; 2462306a36Sopenharmony_ci#define BPMP_ABI_EMPTY_ARRAY 1 2562306a36Sopenharmony_ci#else 2662306a36Sopenharmony_ci#define BPMP_ABI_EMPTY 2762306a36Sopenharmony_ci#define BPMP_ABI_EMPTY_ARRAY 0 2862306a36Sopenharmony_ci#endif 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#ifndef BPMP_UNION_ANON 3162306a36Sopenharmony_ci#ifdef __UNION_ANON 3262306a36Sopenharmony_ci#define BPMP_UNION_ANON __UNION_ANON 3362306a36Sopenharmony_ci#else 3462306a36Sopenharmony_ci#define BPMP_UNION_ANON 3562306a36Sopenharmony_ci#endif 3662306a36Sopenharmony_ci#endif 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci/** 3962306a36Sopenharmony_ci * @file 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci/** 4362306a36Sopenharmony_ci * @defgroup MRQ MRQ Messages 4462306a36Sopenharmony_ci * @brief Messages sent to/from BPMP via IPC 4562306a36Sopenharmony_ci * @{ 4662306a36Sopenharmony_ci * @defgroup MRQ_Format Message Format 4762306a36Sopenharmony_ci * @defgroup MRQ_Codes Message Request (MRQ) Codes 4862306a36Sopenharmony_ci * @defgroup MRQ_Payloads Message Payloads 4962306a36Sopenharmony_ci * @defgroup Error_Codes Error Codes 5062306a36Sopenharmony_ci * @} 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/** 5462306a36Sopenharmony_ci * @addtogroup MRQ_Format 5562306a36Sopenharmony_ci * @{ 5662306a36Sopenharmony_ci * The CPU requests the BPMP to perform a particular service by 5762306a36Sopenharmony_ci * sending it an IVC frame containing a single MRQ message. An MRQ 5862306a36Sopenharmony_ci * message consists of a @ref mrq_request followed by a payload whose 5962306a36Sopenharmony_ci * format depends on mrq_request::mrq. 6062306a36Sopenharmony_ci * 6162306a36Sopenharmony_ci * The BPMP processes the data and replies with an IVC frame (on the 6262306a36Sopenharmony_ci * same IVC channel) containing and MRQ response. An MRQ response 6362306a36Sopenharmony_ci * consists of a @ref mrq_response followed by a payload whose format 6462306a36Sopenharmony_ci * depends on the associated mrq_request::mrq. 6562306a36Sopenharmony_ci * 6662306a36Sopenharmony_ci * A well-defined subset of the MRQ messages that the CPU sends to the 6762306a36Sopenharmony_ci * BPMP can lead to BPMP eventually sending an MRQ message to the 6862306a36Sopenharmony_ci * CPU. For example, when the CPU uses an #MRQ_THERMAL message to set 6962306a36Sopenharmony_ci * a thermal trip point, the BPMP may eventually send a single 7062306a36Sopenharmony_ci * #MRQ_THERMAL message of its own to the CPU indicating that the trip 7162306a36Sopenharmony_ci * point has been crossed. 7262306a36Sopenharmony_ci * @} 7362306a36Sopenharmony_ci */ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci/** 7662306a36Sopenharmony_ci * @ingroup MRQ_Format 7762306a36Sopenharmony_ci * Request an answer from the peer. 7862306a36Sopenharmony_ci * This should be set in mrq_request::flags for all requests targetted 7962306a36Sopenharmony_ci * at BPMP. For requests originating in BPMP, this flag is optional except 8062306a36Sopenharmony_ci * for messages targeting MCE, for which the field must be set. 8162306a36Sopenharmony_ci * When this flag is not set, the remote peer must not send a response 8262306a36Sopenharmony_ci * back. 8362306a36Sopenharmony_ci */ 8462306a36Sopenharmony_ci#define BPMP_MAIL_DO_ACK (1U << 0U) 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci/** 8762306a36Sopenharmony_ci * @ingroup MRQ_Format 8862306a36Sopenharmony_ci * Ring the sender's doorbell when responding. This should be set unless 8962306a36Sopenharmony_ci * the sender wants to poll the underlying communications layer directly. 9062306a36Sopenharmony_ci * 9162306a36Sopenharmony_ci * An optional direction that can be specified in mrq_request::flags. 9262306a36Sopenharmony_ci */ 9362306a36Sopenharmony_ci#define BPMP_MAIL_RING_DB (1U << 1U) 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci/** 9662306a36Sopenharmony_ci * @ingroup MRQ_Format 9762306a36Sopenharmony_ci * CRC present 9862306a36Sopenharmony_ci */ 9962306a36Sopenharmony_ci#define BPMP_MAIL_CRC_PRESENT (1U << 2U) 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci/** 10262306a36Sopenharmony_ci * @ingroup MRQ_Format 10362306a36Sopenharmony_ci * @brief Header for an MRQ message 10462306a36Sopenharmony_ci * 10562306a36Sopenharmony_ci * Provides the MRQ number for the MRQ message: #mrq. The remainder of 10662306a36Sopenharmony_ci * the MRQ message is a payload (immediately following the 10762306a36Sopenharmony_ci * mrq_request) whose format depends on mrq. 10862306a36Sopenharmony_ci */ 10962306a36Sopenharmony_cistruct mrq_request { 11062306a36Sopenharmony_ci /** @brief MRQ number of the request */ 11162306a36Sopenharmony_ci uint32_t mrq; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci /** 11462306a36Sopenharmony_ci * @brief 32bit word containing a number of fields as follows: 11562306a36Sopenharmony_ci * 11662306a36Sopenharmony_ci * struct { 11762306a36Sopenharmony_ci * uint8_t options:4; 11862306a36Sopenharmony_ci * uint8_t xid:4; 11962306a36Sopenharmony_ci * uint8_t payload_length; 12062306a36Sopenharmony_ci * uint16_t crc16; 12162306a36Sopenharmony_ci * }; 12262306a36Sopenharmony_ci * 12362306a36Sopenharmony_ci * **options** directions to the receiver and indicates CRC presence. 12462306a36Sopenharmony_ci * 12562306a36Sopenharmony_ci * #BPMP_MAIL_DO_ACK and #BPMP_MAIL_RING_DB see documentation of respective options. 12662306a36Sopenharmony_ci * #BPMP_MAIL_CRC_PRESENT is supported on T234 and later platforms. It indicates the 12762306a36Sopenharmony_ci * crc16, xid and length fields are present when set. 12862306a36Sopenharmony_ci * Some platform configurations, especially when targeted to applications requiring 12962306a36Sopenharmony_ci * functional safety, mandate this option being set or otherwise will respond with 13062306a36Sopenharmony_ci * -BPMP_EBADMSG and ignore the request. 13162306a36Sopenharmony_ci * 13262306a36Sopenharmony_ci * **xid** is a transaction ID. 13362306a36Sopenharmony_ci * 13462306a36Sopenharmony_ci * Only used when #BPMP_MAIL_CRC_PRESENT is set. 13562306a36Sopenharmony_ci * 13662306a36Sopenharmony_ci * **payload_length** of the message expressed in bytes without the size of this header. 13762306a36Sopenharmony_ci * See table below for minimum accepted payload lengths for each MRQ. 13862306a36Sopenharmony_ci * Note: For DMCE communication, this field expresses the length as a multiple of 4 bytes 13962306a36Sopenharmony_ci * rather than bytes. 14062306a36Sopenharmony_ci * 14162306a36Sopenharmony_ci * Only used when #BPMP_MAIL_CRC_PRESENT is set. 14262306a36Sopenharmony_ci * 14362306a36Sopenharmony_ci * | MRQ | CMD | minimum payload length 14462306a36Sopenharmony_ci * | -------------------- | ------------------------------------ | ------------------------------------------ | 14562306a36Sopenharmony_ci * | MRQ_PING | | 4 | 14662306a36Sopenharmony_ci * | MRQ_THREADED_PING | | 4 | 14762306a36Sopenharmony_ci * | MRQ_RESET | any | 8 | 14862306a36Sopenharmony_ci * | MRQ_I2C | | 12 + cmd_i2c_xfer_request.data_size | 14962306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_GET_RATE | 4 | 15062306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_SET_RATE | 16 | 15162306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_ROUND_RATE | 16 | 15262306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_GET_PARENT | 4 | 15362306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_SET_PARENT | 8 | 15462306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_ENABLE | 4 | 15562306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_DISABLE | 4 | 15662306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_IS_ENABLED | 4 | 15762306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_GET_ALL_INFO | 4 | 15862306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_GET_MAX_CLK_ID | 4 | 15962306a36Sopenharmony_ci * | MRQ_CLK | CMD_CLK_GET_FMAX_AT_VMIN | 4 | 16062306a36Sopenharmony_ci * | MRQ_QUERY_ABI | | 4 | 16162306a36Sopenharmony_ci * | MRQ_PG | CMD_PG_QUERY_ABI | 12 | 16262306a36Sopenharmony_ci * | MRQ_PG | CMD_PG_SET_STATE | 12 | 16362306a36Sopenharmony_ci * | MRQ_PG | CMD_PG_GET_STATE | 8 | 16462306a36Sopenharmony_ci * | MRQ_PG | CMD_PG_GET_NAME | 8 | 16562306a36Sopenharmony_ci * | MRQ_PG | CMD_PG_GET_MAX_ID | 8 | 16662306a36Sopenharmony_ci * | MRQ_THERMAL | CMD_THERMAL_QUERY_ABI | 8 | 16762306a36Sopenharmony_ci * | MRQ_THERMAL | CMD_THERMAL_GET_TEMP | 8 | 16862306a36Sopenharmony_ci * | MRQ_THERMAL | CMD_THERMAL_SET_TRIP | 20 | 16962306a36Sopenharmony_ci * | MRQ_THERMAL | CMD_THERMAL_GET_NUM_ZONES | 4 | 17062306a36Sopenharmony_ci * | MRQ_THERMAL | CMD_THERMAL_GET_THERMTRIP | 8 | 17162306a36Sopenharmony_ci * | MRQ_CPU_VHINT | | 8 | 17262306a36Sopenharmony_ci * | MRQ_ABI_RATCHET | | 2 | 17362306a36Sopenharmony_ci * | MRQ_EMC_DVFS_LATENCY | | 8 | 17462306a36Sopenharmony_ci * | MRQ_EMC_DVFS_EMCHUB | | 8 | 17562306a36Sopenharmony_ci * | MRQ_EMC_DISP_RFL | | 4 | 17662306a36Sopenharmony_ci * | MRQ_BWMGR | CMD_BWMGR_QUERY_ABI | 8 | 17762306a36Sopenharmony_ci * | MRQ_BWMGR | CMD_BWMGR_CALC_RATE | 8 + 8 * bwmgr_rate_req.num_iso_clients | 17862306a36Sopenharmony_ci * | MRQ_ISO_CLIENT | CMD_ISO_CLIENT_QUERY_ABI | 8 | 17962306a36Sopenharmony_ci * | MRQ_ISO_CLIENT | CMD_ISO_CLIENT_CALCULATE_LA | 16 | 18062306a36Sopenharmony_ci * | MRQ_ISO_CLIENT | CMD_ISO_CLIENT_SET_LA | 16 | 18162306a36Sopenharmony_ci * | MRQ_ISO_CLIENT | CMD_ISO_CLIENT_GET_MAX_BW | 8 | 18262306a36Sopenharmony_ci * | MRQ_CPU_NDIV_LIMITS | | 4 | 18362306a36Sopenharmony_ci * | MRQ_CPU_AUTO_CC3 | | 4 | 18462306a36Sopenharmony_ci * | MRQ_RINGBUF_CONSOLE | CMD_RINGBUF_CONSOLE_QUERY_ABI | 8 | 18562306a36Sopenharmony_ci * | MRQ_RINGBUF_CONSOLE | CMD_RINGBUF_CONSOLE_READ | 5 | 18662306a36Sopenharmony_ci * | MRQ_RINGBUF_CONSOLE | CMD_RINGBUF_CONSOLE_WRITE | 5 + cmd_ringbuf_console_write_req.len | 18762306a36Sopenharmony_ci * | MRQ_RINGBUF_CONSOLE | CMD_RINGBUF_CONSOLE_GET_FIFO | 4 | 18862306a36Sopenharmony_ci * | MRQ_STRAP | STRAP_SET | 12 | 18962306a36Sopenharmony_ci * | MRQ_UPHY | CMD_UPHY_PCIE_LANE_MARGIN_CONTROL | 24 | 19062306a36Sopenharmony_ci * | MRQ_UPHY | CMD_UPHY_PCIE_LANE_MARGIN_STATUS | 4 | 19162306a36Sopenharmony_ci * | MRQ_UPHY | CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT | 5 | 19262306a36Sopenharmony_ci * | MRQ_UPHY | CMD_UPHY_PCIE_CONTROLLER_STATE | 6 | 19362306a36Sopenharmony_ci * | MRQ_UPHY | CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF | 5 | 19462306a36Sopenharmony_ci * | MRQ_FMON | CMD_FMON_GEAR_CLAMP | 16 | 19562306a36Sopenharmony_ci * | MRQ_FMON | CMD_FMON_GEAR_FREE | 4 | 19662306a36Sopenharmony_ci * | MRQ_FMON | CMD_FMON_GEAR_GET | 4 | 19762306a36Sopenharmony_ci * | MRQ_FMON | CMD_FMON_FAULT_STS_GET | 8 | 19862306a36Sopenharmony_ci * | MRQ_EC | CMD_EC_STATUS_EX_GET | 12 | 19962306a36Sopenharmony_ci * | MRQ_QUERY_FW_TAG | | 0 | 20062306a36Sopenharmony_ci * | MRQ_DEBUG | CMD_DEBUG_OPEN_RO | 4 + length of cmd_debug_fopen_request.name | 20162306a36Sopenharmony_ci * | MRQ_DEBUG | CMD_DEBUG_OPEN_WO | 4 + length of cmd_debug_fopen_request.name | 20262306a36Sopenharmony_ci * | MRQ_DEBUG | CMD_DEBUG_READ | 8 | 20362306a36Sopenharmony_ci * | MRQ_DEBUG | CMD_DEBUG_WRITE | 12 + cmd_debug_fwrite_request.datalen | 20462306a36Sopenharmony_ci * | MRQ_DEBUG | CMD_DEBUG_CLOSE | 8 | 20562306a36Sopenharmony_ci * | MRQ_TELEMETRY | | 8 | 20662306a36Sopenharmony_ci * | MRQ_PWR_LIMIT | CMD_PWR_LIMIT_QUERY_ABI | 8 | 20762306a36Sopenharmony_ci * | MRQ_PWR_LIMIT | CMD_PWR_LIMIT_SET | 20 | 20862306a36Sopenharmony_ci * | MRQ_PWR_LIMIT | CMD_PWR_LIMIT_GET | 16 | 20962306a36Sopenharmony_ci * | MRQ_PWR_LIMIT | CMD_PWR_LIMIT_CURR_CAP | 8 | 21062306a36Sopenharmony_ci * | MRQ_GEARS | | 0 | 21162306a36Sopenharmony_ci * | MRQ_BWMGR_INT | CMD_BWMGR_INT_QUERY_ABI | 8 | 21262306a36Sopenharmony_ci * | MRQ_BWMGR_INT | CMD_BWMGR_INT_CALC_AND_SET | 16 | 21362306a36Sopenharmony_ci * | MRQ_BWMGR_INT | CMD_BWMGR_INT_CAP_SET | 8 | 21462306a36Sopenharmony_ci * | MRQ_OC_STATUS | | 0 | 21562306a36Sopenharmony_ci * 21662306a36Sopenharmony_ci * **crc16** 21762306a36Sopenharmony_ci * 21862306a36Sopenharmony_ci * CRC16 using polynomial x^16 + x^14 + x^12 + x^11 + x^8 + x^5 + x^4 + x^2 + 1 21962306a36Sopenharmony_ci * and initialization value 0x4657. The CRC is calculated over all bytes of the message 22062306a36Sopenharmony_ci * including this header. However the crc16 field is considered to be set to 0 when 22162306a36Sopenharmony_ci * calculating the CRC. Only used when #BPMP_MAIL_CRC_PRESENT is set. If 22262306a36Sopenharmony_ci * #BPMP_MAIL_CRC_PRESENT is set and this field does not match the CRC as 22362306a36Sopenharmony_ci * calculated by BPMP, -BPMP_EBADMSG will be returned and the request will 22462306a36Sopenharmony_ci * be ignored. See code snippet below on how to calculate the CRC. 22562306a36Sopenharmony_ci * 22662306a36Sopenharmony_ci * @code 22762306a36Sopenharmony_ci * uint16_t calc_crc_digest(uint16_t crc, uint8_t *data, size_t size) 22862306a36Sopenharmony_ci * { 22962306a36Sopenharmony_ci * for (size_t i = 0; i < size; i++) { 23062306a36Sopenharmony_ci * crc ^= data[i] << 8; 23162306a36Sopenharmony_ci * for (size_t j = 0; j < 8; j++) { 23262306a36Sopenharmony_ci * if ((crc & 0x8000) == 0x8000) { 23362306a36Sopenharmony_ci * crc = (crc << 1) ^ 0xAC9A; 23462306a36Sopenharmony_ci * } else { 23562306a36Sopenharmony_ci * crc = (crc << 1); 23662306a36Sopenharmony_ci * } 23762306a36Sopenharmony_ci * } 23862306a36Sopenharmony_ci * } 23962306a36Sopenharmony_ci * return crc; 24062306a36Sopenharmony_ci * } 24162306a36Sopenharmony_ci * 24262306a36Sopenharmony_ci * uint16_t calc_crc(uint8_t *data, size_t size) 24362306a36Sopenharmony_ci * { 24462306a36Sopenharmony_ci * return calc_crc_digest(0x4657, data, size); 24562306a36Sopenharmony_ci * } 24662306a36Sopenharmony_ci * @endcode 24762306a36Sopenharmony_ci */ 24862306a36Sopenharmony_ci uint32_t flags; 24962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci/** 25262306a36Sopenharmony_ci * @ingroup MRQ_Format 25362306a36Sopenharmony_ci * @brief Header for an MRQ response 25462306a36Sopenharmony_ci * 25562306a36Sopenharmony_ci * Provides an error code for the associated MRQ message. The 25662306a36Sopenharmony_ci * remainder of the MRQ response is a payload (immediately following 25762306a36Sopenharmony_ci * the mrq_response) whose format depends on the associated 25862306a36Sopenharmony_ci * mrq_request::mrq 25962306a36Sopenharmony_ci */ 26062306a36Sopenharmony_cistruct mrq_response { 26162306a36Sopenharmony_ci /** @brief Error code for the MRQ request itself */ 26262306a36Sopenharmony_ci int32_t err; 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci /** 26562306a36Sopenharmony_ci * @brief 32bit word containing a number of fields as follows: 26662306a36Sopenharmony_ci * 26762306a36Sopenharmony_ci * struct { 26862306a36Sopenharmony_ci * uint8_t options:4; 26962306a36Sopenharmony_ci * uint8_t xid:4; 27062306a36Sopenharmony_ci * uint8_t payload_length; 27162306a36Sopenharmony_ci * uint16_t crc16; 27262306a36Sopenharmony_ci * }; 27362306a36Sopenharmony_ci * 27462306a36Sopenharmony_ci * **options** indicates CRC presence. 27562306a36Sopenharmony_ci * 27662306a36Sopenharmony_ci * #BPMP_MAIL_CRC_PRESENT is supported on T234 and later platforms and 27762306a36Sopenharmony_ci * indicates the crc16 related fields are present when set. 27862306a36Sopenharmony_ci * 27962306a36Sopenharmony_ci * **xid** is the transaction ID as sent by the requestor. 28062306a36Sopenharmony_ci * 28162306a36Sopenharmony_ci * **length** of the message expressed in bytes without the size of this header. 28262306a36Sopenharmony_ci * Note: For DMCE communication, this field expresses the length as a multiple of 4 bytes 28362306a36Sopenharmony_ci * rather than bytes. 28462306a36Sopenharmony_ci * 28562306a36Sopenharmony_ci * **crc16** 28662306a36Sopenharmony_ci * 28762306a36Sopenharmony_ci * CRC16 using polynomial x^16 + x^14 + x^12 + x^11 + x^8 + x^5 + x^4 + x^2 + 1 28862306a36Sopenharmony_ci * and initialization value 0x4657. The CRC is calculated over all bytes of the message 28962306a36Sopenharmony_ci * including this header. However the crc16 field is considered to be set to 0 when 29062306a36Sopenharmony_ci * calculating the CRC. Only used when #BPMP_MAIL_CRC_PRESENT is set. 29162306a36Sopenharmony_ci */ 29262306a36Sopenharmony_ci uint32_t flags; 29362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci/** 29662306a36Sopenharmony_ci * @ingroup MRQ_Format 29762306a36Sopenharmony_ci * Minimum needed size for an IPC message buffer 29862306a36Sopenharmony_ci */ 29962306a36Sopenharmony_ci#define MSG_MIN_SZ 128U 30062306a36Sopenharmony_ci/** 30162306a36Sopenharmony_ci * @ingroup MRQ_Format 30262306a36Sopenharmony_ci * Minimum size guaranteed for data in an IPC message buffer 30362306a36Sopenharmony_ci */ 30462306a36Sopenharmony_ci#define MSG_DATA_MIN_SZ 120U 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci/** 30762306a36Sopenharmony_ci * @ingroup MRQ_Codes 30862306a36Sopenharmony_ci * @name Legal MRQ codes 30962306a36Sopenharmony_ci * These are the legal values for mrq_request::mrq 31062306a36Sopenharmony_ci * @{ 31162306a36Sopenharmony_ci */ 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci#define MRQ_PING 0U 31462306a36Sopenharmony_ci#define MRQ_QUERY_TAG 1U 31562306a36Sopenharmony_ci#define MRQ_THREADED_PING 9U 31662306a36Sopenharmony_ci#define MRQ_DEBUGFS 19U 31762306a36Sopenharmony_ci#define MRQ_RESET 20U 31862306a36Sopenharmony_ci#define MRQ_I2C 21U 31962306a36Sopenharmony_ci#define MRQ_CLK 22U 32062306a36Sopenharmony_ci#define MRQ_QUERY_ABI 23U 32162306a36Sopenharmony_ci#define MRQ_THERMAL 27U 32262306a36Sopenharmony_ci#define MRQ_CPU_VHINT 28U 32362306a36Sopenharmony_ci#define MRQ_ABI_RATCHET 29U 32462306a36Sopenharmony_ci#define MRQ_EMC_DVFS_LATENCY 31U 32562306a36Sopenharmony_ci#define MRQ_RINGBUF_CONSOLE 65U 32662306a36Sopenharmony_ci#define MRQ_PG 66U 32762306a36Sopenharmony_ci#define MRQ_CPU_NDIV_LIMITS 67U 32862306a36Sopenharmony_ci#define MRQ_STRAP 68U 32962306a36Sopenharmony_ci#define MRQ_UPHY 69U 33062306a36Sopenharmony_ci#define MRQ_CPU_AUTO_CC3 70U 33162306a36Sopenharmony_ci#define MRQ_QUERY_FW_TAG 71U 33262306a36Sopenharmony_ci#define MRQ_FMON 72U 33362306a36Sopenharmony_ci#define MRQ_EC 73U 33462306a36Sopenharmony_ci#define MRQ_DEBUG 75U 33562306a36Sopenharmony_ci#define MRQ_EMC_DVFS_EMCHUB 76U 33662306a36Sopenharmony_ci#define MRQ_BWMGR 77U 33762306a36Sopenharmony_ci#define MRQ_ISO_CLIENT 78U 33862306a36Sopenharmony_ci#define MRQ_EMC_DISP_RFL 79U 33962306a36Sopenharmony_ci#define MRQ_TELEMETRY 80U 34062306a36Sopenharmony_ci#define MRQ_PWR_LIMIT 81U 34162306a36Sopenharmony_ci#define MRQ_GEARS 82U 34262306a36Sopenharmony_ci#define MRQ_BWMGR_INT 83U 34362306a36Sopenharmony_ci#define MRQ_OC_STATUS 84U 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci/** @cond DEPRECATED */ 34662306a36Sopenharmony_ci#define MRQ_RESERVED_2 2U 34762306a36Sopenharmony_ci#define MRQ_RESERVED_3 3U 34862306a36Sopenharmony_ci#define MRQ_RESERVED_4 4U 34962306a36Sopenharmony_ci#define MRQ_RESERVED_5 5U 35062306a36Sopenharmony_ci#define MRQ_RESERVED_6 6U 35162306a36Sopenharmony_ci#define MRQ_RESERVED_7 7U 35262306a36Sopenharmony_ci#define MRQ_RESERVED_8 8U 35362306a36Sopenharmony_ci#define MRQ_RESERVED_10 10U 35462306a36Sopenharmony_ci#define MRQ_RESERVED_11 11U 35562306a36Sopenharmony_ci#define MRQ_RESERVED_12 12U 35662306a36Sopenharmony_ci#define MRQ_RESERVED_13 13U 35762306a36Sopenharmony_ci#define MRQ_RESERVED_14 14U 35862306a36Sopenharmony_ci#define MRQ_RESERVED_15 15U 35962306a36Sopenharmony_ci#define MRQ_RESERVED_16 16U 36062306a36Sopenharmony_ci#define MRQ_RESERVED_17 17U 36162306a36Sopenharmony_ci#define MRQ_RESERVED_18 18U 36262306a36Sopenharmony_ci#define MRQ_RESERVED_24 24U 36362306a36Sopenharmony_ci#define MRQ_RESERVED_25 25U 36462306a36Sopenharmony_ci#define MRQ_RESERVED_26 26U 36562306a36Sopenharmony_ci#define MRQ_RESERVED_30 30U 36662306a36Sopenharmony_ci#define MRQ_RESERVED_64 64U 36762306a36Sopenharmony_ci#define MRQ_RESERVED_74 74U 36862306a36Sopenharmony_ci/** @endcond DEPRECATED */ 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci/** @} */ 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci/** 37362306a36Sopenharmony_ci * @ingroup MRQ_Codes 37462306a36Sopenharmony_ci * @brief Maximum MRQ code to be sent by CPU software to 37562306a36Sopenharmony_ci * BPMP. Subject to change in future 37662306a36Sopenharmony_ci */ 37762306a36Sopenharmony_ci#define MAX_CPU_MRQ_ID 84U 37862306a36Sopenharmony_ci 37962306a36Sopenharmony_ci/** 38062306a36Sopenharmony_ci * @addtogroup MRQ_Payloads 38162306a36Sopenharmony_ci * @{ 38262306a36Sopenharmony_ci * @defgroup Ping Ping 38362306a36Sopenharmony_ci * @defgroup Query_Tag Query Tag 38462306a36Sopenharmony_ci * @defgroup Module Loadable Modules 38562306a36Sopenharmony_ci * @defgroup Trace Trace 38662306a36Sopenharmony_ci * @defgroup Debugfs Debug File System 38762306a36Sopenharmony_ci * @defgroup Reset Reset 38862306a36Sopenharmony_ci * @defgroup I2C I2C 38962306a36Sopenharmony_ci * @defgroup Clocks Clocks 39062306a36Sopenharmony_ci * @defgroup ABI_info ABI Info 39162306a36Sopenharmony_ci * @defgroup Powergating Power Gating 39262306a36Sopenharmony_ci * @defgroup Thermal Thermal 39362306a36Sopenharmony_ci * @defgroup OC_status OC status 39462306a36Sopenharmony_ci * @defgroup Vhint CPU Voltage hint 39562306a36Sopenharmony_ci * @defgroup EMC EMC 39662306a36Sopenharmony_ci * @defgroup BWMGR BWMGR 39762306a36Sopenharmony_ci * @defgroup ISO_CLIENT ISO_CLIENT 39862306a36Sopenharmony_ci * @defgroup CPU NDIV Limits 39962306a36Sopenharmony_ci * @defgroup RingbufConsole Ring Buffer Console 40062306a36Sopenharmony_ci * @defgroup Strap Straps 40162306a36Sopenharmony_ci * @defgroup UPHY UPHY 40262306a36Sopenharmony_ci * @defgroup CC3 Auto-CC3 40362306a36Sopenharmony_ci * @defgroup FMON FMON 40462306a36Sopenharmony_ci * @defgroup EC EC 40562306a36Sopenharmony_ci * @defgroup Telemetry Telemetry 40662306a36Sopenharmony_ci * @defgroup Pwrlimit PWR_LIMIT 40762306a36Sopenharmony_ci * @defgroup Gears Gears 40862306a36Sopenharmony_ci * @defgroup BWMGR_INT Bandwidth Manager Integrated 40962306a36Sopenharmony_ci * @} MRQ_Payloads 41062306a36Sopenharmony_ci */ 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci/** 41362306a36Sopenharmony_ci * @ingroup MRQ_Codes 41462306a36Sopenharmony_ci * @def MRQ_PING 41562306a36Sopenharmony_ci * @brief A simple ping 41662306a36Sopenharmony_ci * 41762306a36Sopenharmony_ci * * Platforms: All 41862306a36Sopenharmony_ci * * Initiators: Any 41962306a36Sopenharmony_ci * * Targets: Any 42062306a36Sopenharmony_ci * * Request Payload: @ref mrq_ping_request 42162306a36Sopenharmony_ci * * Response Payload: @ref mrq_ping_response 42262306a36Sopenharmony_ci * 42362306a36Sopenharmony_ci * @ingroup MRQ_Codes 42462306a36Sopenharmony_ci * @def MRQ_THREADED_PING 42562306a36Sopenharmony_ci * @brief A deeper ping 42662306a36Sopenharmony_ci * 42762306a36Sopenharmony_ci * * Platforms: All 42862306a36Sopenharmony_ci * * Initiators: Any 42962306a36Sopenharmony_ci * * Targets: BPMP 43062306a36Sopenharmony_ci * * Request Payload: @ref mrq_ping_request 43162306a36Sopenharmony_ci * * Response Payload: @ref mrq_ping_response 43262306a36Sopenharmony_ci * 43362306a36Sopenharmony_ci * Behavior is equivalent to a simple #MRQ_PING except that BPMP 43462306a36Sopenharmony_ci * responds from a thread context (providing a slightly more robust 43562306a36Sopenharmony_ci * sign of life). 43662306a36Sopenharmony_ci * 43762306a36Sopenharmony_ci */ 43862306a36Sopenharmony_ci 43962306a36Sopenharmony_ci/** 44062306a36Sopenharmony_ci * @ingroup Ping 44162306a36Sopenharmony_ci * @brief Request with #MRQ_PING 44262306a36Sopenharmony_ci * 44362306a36Sopenharmony_ci * Used by the sender of an #MRQ_PING message to request a pong from 44462306a36Sopenharmony_ci * recipient. The response from the recipient is computed based on 44562306a36Sopenharmony_ci * #challenge. 44662306a36Sopenharmony_ci */ 44762306a36Sopenharmony_cistruct mrq_ping_request { 44862306a36Sopenharmony_ci/** @brief Arbitrarily chosen value */ 44962306a36Sopenharmony_ci uint32_t challenge; 45062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci/** 45362306a36Sopenharmony_ci * @ingroup Ping 45462306a36Sopenharmony_ci * @brief Response to #MRQ_PING 45562306a36Sopenharmony_ci * 45662306a36Sopenharmony_ci * Sent in response to an #MRQ_PING message. #reply should be the 45762306a36Sopenharmony_ci * mrq_ping_request challenge left shifted by 1 with the carry-bit 45862306a36Sopenharmony_ci * dropped. 45962306a36Sopenharmony_ci * 46062306a36Sopenharmony_ci */ 46162306a36Sopenharmony_cistruct mrq_ping_response { 46262306a36Sopenharmony_ci /** @brief Response to the MRQ_PING challege */ 46362306a36Sopenharmony_ci uint32_t reply; 46462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_ci/** 46762306a36Sopenharmony_ci * @ingroup MRQ_Codes 46862306a36Sopenharmony_ci * @def MRQ_QUERY_TAG 46962306a36Sopenharmony_ci * @brief Query BPMP firmware's tag (i.e. unique identifer) 47062306a36Sopenharmony_ci * 47162306a36Sopenharmony_ci * @deprecated Use #MRQ_QUERY_FW_TAG instead. 47262306a36Sopenharmony_ci * 47362306a36Sopenharmony_ci * * Platforms: All 47462306a36Sopenharmony_ci * * Initiators: CCPLEX 47562306a36Sopenharmony_ci * * Targets: BPMP 47662306a36Sopenharmony_ci * * Request Payload: @ref mrq_query_tag_request 47762306a36Sopenharmony_ci * * Response Payload: N/A 47862306a36Sopenharmony_ci * 47962306a36Sopenharmony_ci */ 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_ci/** 48262306a36Sopenharmony_ci * @ingroup Query_Tag 48362306a36Sopenharmony_ci * @brief Request with #MRQ_QUERY_TAG 48462306a36Sopenharmony_ci * 48562306a36Sopenharmony_ci * @deprecated This structure will be removed in future version. 48662306a36Sopenharmony_ci * Use MRQ_QUERY_FW_TAG instead. 48762306a36Sopenharmony_ci */ 48862306a36Sopenharmony_cistruct mrq_query_tag_request { 48962306a36Sopenharmony_ci /** @brief Base address to store the firmware tag */ 49062306a36Sopenharmony_ci uint32_t addr; 49162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci/** 49562306a36Sopenharmony_ci * @ingroup MRQ_Codes 49662306a36Sopenharmony_ci * @def MRQ_QUERY_FW_TAG 49762306a36Sopenharmony_ci * @brief Query BPMP firmware's tag (i.e. unique identifier) 49862306a36Sopenharmony_ci * 49962306a36Sopenharmony_ci * * Platforms: All 50062306a36Sopenharmony_ci * * Initiators: Any 50162306a36Sopenharmony_ci * * Targets: BPMP 50262306a36Sopenharmony_ci * * Request Payload: N/A 50362306a36Sopenharmony_ci * * Response Payload: @ref mrq_query_fw_tag_response 50462306a36Sopenharmony_ci * 50562306a36Sopenharmony_ci */ 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci/** 50862306a36Sopenharmony_ci * @ingroup Query_Tag 50962306a36Sopenharmony_ci * @brief Response to #MRQ_QUERY_FW_TAG 51062306a36Sopenharmony_ci * 51162306a36Sopenharmony_ci * Sent in response to #MRQ_QUERY_FW_TAG message. #tag contains the unique 51262306a36Sopenharmony_ci * identifier for the version of firmware issuing the reply. 51362306a36Sopenharmony_ci * 51462306a36Sopenharmony_ci */ 51562306a36Sopenharmony_cistruct mrq_query_fw_tag_response { 51662306a36Sopenharmony_ci /** @brief Array to store tag information */ 51762306a36Sopenharmony_ci uint8_t tag[32]; 51862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ci/** @private */ 52162306a36Sopenharmony_cistruct mrq_threaded_ping_request { 52262306a36Sopenharmony_ci uint32_t challenge; 52362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci/** @private */ 52662306a36Sopenharmony_cistruct mrq_threaded_ping_response { 52762306a36Sopenharmony_ci uint32_t reply; 52862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci/** 53162306a36Sopenharmony_ci * @ingroup MRQ_Codes 53262306a36Sopenharmony_ci * @def MRQ_DEBUGFS 53362306a36Sopenharmony_ci * @brief Interact with BPMP's debugfs file nodes 53462306a36Sopenharmony_ci * 53562306a36Sopenharmony_ci * @deprecated use MRQ_DEBUG instead. 53662306a36Sopenharmony_ci * 53762306a36Sopenharmony_ci * * Platforms: T186, T194 53862306a36Sopenharmony_ci * * Initiators: Any 53962306a36Sopenharmony_ci * * Targets: BPMP 54062306a36Sopenharmony_ci * * Request Payload: @ref mrq_debugfs_request 54162306a36Sopenharmony_ci * * Response Payload: @ref mrq_debugfs_response 54262306a36Sopenharmony_ci */ 54362306a36Sopenharmony_ci 54462306a36Sopenharmony_ci/** 54562306a36Sopenharmony_ci * @addtogroup Debugfs 54662306a36Sopenharmony_ci * @{ 54762306a36Sopenharmony_ci * 54862306a36Sopenharmony_ci * The BPMP firmware implements a pseudo-filesystem called 54962306a36Sopenharmony_ci * debugfs. Any driver within the firmware may register with debugfs 55062306a36Sopenharmony_ci * to expose an arbitrary set of "files" in the filesystem. When 55162306a36Sopenharmony_ci * software on the CPU writes to a debugfs file, debugfs passes the 55262306a36Sopenharmony_ci * written data to a callback provided by the driver. When software on 55362306a36Sopenharmony_ci * the CPU reads a debugfs file, debugfs queries the driver for the 55462306a36Sopenharmony_ci * data to return to the CPU. The intention of the debugfs filesystem 55562306a36Sopenharmony_ci * is to provide information useful for debugging the system at 55662306a36Sopenharmony_ci * runtime. 55762306a36Sopenharmony_ci * 55862306a36Sopenharmony_ci * @note The files exposed via debugfs are not part of the 55962306a36Sopenharmony_ci * BPMP firmware's ABI. debugfs files may be added or removed in any 56062306a36Sopenharmony_ci * given version of the firmware. Typically the semantics of a debugfs 56162306a36Sopenharmony_ci * file are consistent from version to version but even that is not 56262306a36Sopenharmony_ci * guaranteed. 56362306a36Sopenharmony_ci * 56462306a36Sopenharmony_ci * @} 56562306a36Sopenharmony_ci */ 56662306a36Sopenharmony_ci 56762306a36Sopenharmony_ci/** @ingroup Debugfs */ 56862306a36Sopenharmony_cienum mrq_debugfs_commands { 56962306a36Sopenharmony_ci /** @brief Perform read */ 57062306a36Sopenharmony_ci CMD_DEBUGFS_READ = 1, 57162306a36Sopenharmony_ci /** @brief Perform write */ 57262306a36Sopenharmony_ci CMD_DEBUGFS_WRITE = 2, 57362306a36Sopenharmony_ci /** @brief Perform dumping directory */ 57462306a36Sopenharmony_ci CMD_DEBUGFS_DUMPDIR = 3, 57562306a36Sopenharmony_ci /** @brief Not a command */ 57662306a36Sopenharmony_ci CMD_DEBUGFS_MAX 57762306a36Sopenharmony_ci}; 57862306a36Sopenharmony_ci 57962306a36Sopenharmony_ci/** 58062306a36Sopenharmony_ci * @ingroup Debugfs 58162306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUGFS_READ/WRITE command 58262306a36Sopenharmony_ci */ 58362306a36Sopenharmony_cistruct cmd_debugfs_fileop_request { 58462306a36Sopenharmony_ci /** @brief Physical address pointing at filename */ 58562306a36Sopenharmony_ci uint32_t fnameaddr; 58662306a36Sopenharmony_ci /** @brief Length in bytes of filename buffer */ 58762306a36Sopenharmony_ci uint32_t fnamelen; 58862306a36Sopenharmony_ci /** @brief Physical address pointing to data buffer */ 58962306a36Sopenharmony_ci uint32_t dataaddr; 59062306a36Sopenharmony_ci /** @brief Length in bytes of data buffer */ 59162306a36Sopenharmony_ci uint32_t datalen; 59262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 59362306a36Sopenharmony_ci 59462306a36Sopenharmony_ci/** 59562306a36Sopenharmony_ci * @ingroup Debugfs 59662306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUGFS_READ/WRITE command 59762306a36Sopenharmony_ci */ 59862306a36Sopenharmony_cistruct cmd_debugfs_dumpdir_request { 59962306a36Sopenharmony_ci /** @brief Physical address pointing to data buffer */ 60062306a36Sopenharmony_ci uint32_t dataaddr; 60162306a36Sopenharmony_ci /** @brief Length in bytes of data buffer */ 60262306a36Sopenharmony_ci uint32_t datalen; 60362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci/** 60662306a36Sopenharmony_ci * @ingroup Debugfs 60762306a36Sopenharmony_ci * @brief Response data for CMD_DEBUGFS_READ/WRITE command 60862306a36Sopenharmony_ci */ 60962306a36Sopenharmony_cistruct cmd_debugfs_fileop_response { 61062306a36Sopenharmony_ci /** @brief Always 0 */ 61162306a36Sopenharmony_ci uint32_t reserved; 61262306a36Sopenharmony_ci /** @brief Number of bytes read from or written to data buffer */ 61362306a36Sopenharmony_ci uint32_t nbytes; 61462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 61562306a36Sopenharmony_ci 61662306a36Sopenharmony_ci/** 61762306a36Sopenharmony_ci * @ingroup Debugfs 61862306a36Sopenharmony_ci * @brief Response data for CMD_DEBUGFS_DUMPDIR command 61962306a36Sopenharmony_ci */ 62062306a36Sopenharmony_cistruct cmd_debugfs_dumpdir_response { 62162306a36Sopenharmony_ci /** @brief Always 0 */ 62262306a36Sopenharmony_ci uint32_t reserved; 62362306a36Sopenharmony_ci /** @brief Number of bytes read from or written to data buffer */ 62462306a36Sopenharmony_ci uint32_t nbytes; 62562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 62662306a36Sopenharmony_ci 62762306a36Sopenharmony_ci/** 62862306a36Sopenharmony_ci * @ingroup Debugfs 62962306a36Sopenharmony_ci * @brief Request with #MRQ_DEBUGFS. 63062306a36Sopenharmony_ci * 63162306a36Sopenharmony_ci * The sender of an MRQ_DEBUGFS message uses #cmd to specify a debugfs 63262306a36Sopenharmony_ci * command to execute. Legal commands are the values of @ref 63362306a36Sopenharmony_ci * mrq_debugfs_commands. Each command requires a specific additional 63462306a36Sopenharmony_ci * payload of data. 63562306a36Sopenharmony_ci * 63662306a36Sopenharmony_ci * |command |payload| 63762306a36Sopenharmony_ci * |-------------------|-------| 63862306a36Sopenharmony_ci * |CMD_DEBUGFS_READ |fop | 63962306a36Sopenharmony_ci * |CMD_DEBUGFS_WRITE |fop | 64062306a36Sopenharmony_ci * |CMD_DEBUGFS_DUMPDIR|dumpdir| 64162306a36Sopenharmony_ci */ 64262306a36Sopenharmony_cistruct mrq_debugfs_request { 64362306a36Sopenharmony_ci /** @brief Sub-command (@ref mrq_debugfs_commands) */ 64462306a36Sopenharmony_ci uint32_t cmd; 64562306a36Sopenharmony_ci union { 64662306a36Sopenharmony_ci struct cmd_debugfs_fileop_request fop; 64762306a36Sopenharmony_ci struct cmd_debugfs_dumpdir_request dumpdir; 64862306a36Sopenharmony_ci } BPMP_UNION_ANON; 64962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_ci/** 65262306a36Sopenharmony_ci * @ingroup Debugfs 65362306a36Sopenharmony_ci */ 65462306a36Sopenharmony_cistruct mrq_debugfs_response { 65562306a36Sopenharmony_ci /** @brief Always 0 */ 65662306a36Sopenharmony_ci int32_t reserved; 65762306a36Sopenharmony_ci union { 65862306a36Sopenharmony_ci /** @brief Response data for CMD_DEBUGFS_READ OR 65962306a36Sopenharmony_ci * CMD_DEBUGFS_WRITE command 66062306a36Sopenharmony_ci */ 66162306a36Sopenharmony_ci struct cmd_debugfs_fileop_response fop; 66262306a36Sopenharmony_ci /** @brief Response data for CMD_DEBUGFS_DUMPDIR command */ 66362306a36Sopenharmony_ci struct cmd_debugfs_dumpdir_response dumpdir; 66462306a36Sopenharmony_ci } BPMP_UNION_ANON; 66562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 66662306a36Sopenharmony_ci 66762306a36Sopenharmony_ci/** 66862306a36Sopenharmony_ci * @addtogroup Debugfs 66962306a36Sopenharmony_ci * @{ 67062306a36Sopenharmony_ci */ 67162306a36Sopenharmony_ci#define DEBUGFS_S_ISDIR (1 << 9) 67262306a36Sopenharmony_ci#define DEBUGFS_S_IRUSR (1 << 8) 67362306a36Sopenharmony_ci#define DEBUGFS_S_IWUSR (1 << 7) 67462306a36Sopenharmony_ci/** @} Debugfs */ 67562306a36Sopenharmony_ci 67662306a36Sopenharmony_ci/** 67762306a36Sopenharmony_ci * @ingroup MRQ_Codes 67862306a36Sopenharmony_ci * @def MRQ_DEBUG 67962306a36Sopenharmony_ci * @brief Interact with BPMP's debugfs file nodes. Use message payload 68062306a36Sopenharmony_ci * for exchanging data. This is functionally equivalent to 68162306a36Sopenharmony_ci * @ref MRQ_DEBUGFS. But the way in which data is exchanged is different. 68262306a36Sopenharmony_ci * When software running on CPU tries to read a debugfs file, 68362306a36Sopenharmony_ci * the file path and read data will be stored in message payload. 68462306a36Sopenharmony_ci * Since the message payload size is limited, a debugfs file 68562306a36Sopenharmony_ci * transaction might require multiple frames of data exchanged 68662306a36Sopenharmony_ci * between BPMP and CPU until the transaction completes. 68762306a36Sopenharmony_ci * 68862306a36Sopenharmony_ci * * Platforms: T194 68962306a36Sopenharmony_ci * * Initiators: Any 69062306a36Sopenharmony_ci * * Targets: BPMP 69162306a36Sopenharmony_ci * * Request Payload: @ref mrq_debug_request 69262306a36Sopenharmony_ci * * Response Payload: @ref mrq_debug_response 69362306a36Sopenharmony_ci */ 69462306a36Sopenharmony_ci 69562306a36Sopenharmony_ci/** @ingroup Debugfs */ 69662306a36Sopenharmony_cienum mrq_debug_commands { 69762306a36Sopenharmony_ci /** @brief Open required file for read operation */ 69862306a36Sopenharmony_ci CMD_DEBUG_OPEN_RO = 0, 69962306a36Sopenharmony_ci /** @brief Open required file for write operation */ 70062306a36Sopenharmony_ci CMD_DEBUG_OPEN_WO = 1, 70162306a36Sopenharmony_ci /** @brief Perform read */ 70262306a36Sopenharmony_ci CMD_DEBUG_READ = 2, 70362306a36Sopenharmony_ci /** @brief Perform write */ 70462306a36Sopenharmony_ci CMD_DEBUG_WRITE = 3, 70562306a36Sopenharmony_ci /** @brief Close file */ 70662306a36Sopenharmony_ci CMD_DEBUG_CLOSE = 4, 70762306a36Sopenharmony_ci /** @brief Not a command */ 70862306a36Sopenharmony_ci CMD_DEBUG_MAX 70962306a36Sopenharmony_ci}; 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci/** 71262306a36Sopenharmony_ci * @ingroup Debugfs 71362306a36Sopenharmony_ci * @brief Maximum number of files that can be open at a given time 71462306a36Sopenharmony_ci */ 71562306a36Sopenharmony_ci#define DEBUG_MAX_OPEN_FILES 1 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci/** 71862306a36Sopenharmony_ci * @ingroup Debugfs 71962306a36Sopenharmony_ci * @brief Maximum size of null-terminated file name string in bytes. 72062306a36Sopenharmony_ci * Value is derived from memory available in message payload while 72162306a36Sopenharmony_ci * using @ref cmd_debug_fopen_request 72262306a36Sopenharmony_ci * Value 4 corresponds to size of @ref mrq_debug_commands 72362306a36Sopenharmony_ci * in @ref mrq_debug_request. 72462306a36Sopenharmony_ci * 120 - 4 dbg_cmd(32bit) = 116 72562306a36Sopenharmony_ci */ 72662306a36Sopenharmony_ci#define DEBUG_FNAME_MAX_SZ (MSG_DATA_MIN_SZ - 4) 72762306a36Sopenharmony_ci 72862306a36Sopenharmony_ci/** 72962306a36Sopenharmony_ci * @ingroup Debugfs 73062306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUG_OPEN command 73162306a36Sopenharmony_ci */ 73262306a36Sopenharmony_cistruct cmd_debug_fopen_request { 73362306a36Sopenharmony_ci /** @brief File name - Null-terminated string with maximum 73462306a36Sopenharmony_ci * length @ref DEBUG_FNAME_MAX_SZ 73562306a36Sopenharmony_ci */ 73662306a36Sopenharmony_ci char name[DEBUG_FNAME_MAX_SZ]; 73762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 73862306a36Sopenharmony_ci 73962306a36Sopenharmony_ci/** 74062306a36Sopenharmony_ci * @ingroup Debugfs 74162306a36Sopenharmony_ci * @brief Response data for CMD_DEBUG_OPEN_RO/WO command 74262306a36Sopenharmony_ci */ 74362306a36Sopenharmony_cistruct cmd_debug_fopen_response { 74462306a36Sopenharmony_ci /** @brief Identifier for file access */ 74562306a36Sopenharmony_ci uint32_t fd; 74662306a36Sopenharmony_ci /** @brief Data length. File data size for READ command. 74762306a36Sopenharmony_ci * Maximum allowed length for WRITE command 74862306a36Sopenharmony_ci */ 74962306a36Sopenharmony_ci uint32_t datalen; 75062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 75162306a36Sopenharmony_ci 75262306a36Sopenharmony_ci/** 75362306a36Sopenharmony_ci * @ingroup Debugfs 75462306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUG_READ command 75562306a36Sopenharmony_ci */ 75662306a36Sopenharmony_cistruct cmd_debug_fread_request { 75762306a36Sopenharmony_ci /** @brief File access identifier received in response 75862306a36Sopenharmony_ci * to CMD_DEBUG_OPEN_RO request 75962306a36Sopenharmony_ci */ 76062306a36Sopenharmony_ci uint32_t fd; 76162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 76262306a36Sopenharmony_ci 76362306a36Sopenharmony_ci/** 76462306a36Sopenharmony_ci * @ingroup Debugfs 76562306a36Sopenharmony_ci * @brief Maximum size of read data in bytes. 76662306a36Sopenharmony_ci * Value is derived from memory available in message payload while 76762306a36Sopenharmony_ci * using @ref cmd_debug_fread_response. 76862306a36Sopenharmony_ci */ 76962306a36Sopenharmony_ci#define DEBUG_READ_MAX_SZ (MSG_DATA_MIN_SZ - 4) 77062306a36Sopenharmony_ci 77162306a36Sopenharmony_ci/** 77262306a36Sopenharmony_ci * @ingroup Debugfs 77362306a36Sopenharmony_ci * @brief Response data for CMD_DEBUG_READ command 77462306a36Sopenharmony_ci */ 77562306a36Sopenharmony_cistruct cmd_debug_fread_response { 77662306a36Sopenharmony_ci /** @brief Size of data provided in this response in bytes */ 77762306a36Sopenharmony_ci uint32_t readlen; 77862306a36Sopenharmony_ci /** @brief File data from seek position */ 77962306a36Sopenharmony_ci char data[DEBUG_READ_MAX_SZ]; 78062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 78162306a36Sopenharmony_ci 78262306a36Sopenharmony_ci/** 78362306a36Sopenharmony_ci * @ingroup Debugfs 78462306a36Sopenharmony_ci * @brief Maximum size of write data in bytes. 78562306a36Sopenharmony_ci * Value is derived from memory available in message payload while 78662306a36Sopenharmony_ci * using @ref cmd_debug_fwrite_request. 78762306a36Sopenharmony_ci */ 78862306a36Sopenharmony_ci#define DEBUG_WRITE_MAX_SZ (MSG_DATA_MIN_SZ - 12) 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_ci/** 79162306a36Sopenharmony_ci * @ingroup Debugfs 79262306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUG_WRITE command 79362306a36Sopenharmony_ci */ 79462306a36Sopenharmony_cistruct cmd_debug_fwrite_request { 79562306a36Sopenharmony_ci /** @brief File access identifier received in response 79662306a36Sopenharmony_ci * to CMD_DEBUG_OPEN_RO request 79762306a36Sopenharmony_ci */ 79862306a36Sopenharmony_ci uint32_t fd; 79962306a36Sopenharmony_ci /** @brief Size of write data in bytes */ 80062306a36Sopenharmony_ci uint32_t datalen; 80162306a36Sopenharmony_ci /** @brief Data to be written */ 80262306a36Sopenharmony_ci char data[DEBUG_WRITE_MAX_SZ]; 80362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 80462306a36Sopenharmony_ci 80562306a36Sopenharmony_ci/** 80662306a36Sopenharmony_ci * @ingroup Debugfs 80762306a36Sopenharmony_ci * @brief Parameters for CMD_DEBUG_CLOSE command 80862306a36Sopenharmony_ci */ 80962306a36Sopenharmony_cistruct cmd_debug_fclose_request { 81062306a36Sopenharmony_ci /** @brief File access identifier received in response 81162306a36Sopenharmony_ci * to CMD_DEBUG_OPEN_RO request 81262306a36Sopenharmony_ci */ 81362306a36Sopenharmony_ci uint32_t fd; 81462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 81562306a36Sopenharmony_ci 81662306a36Sopenharmony_ci/** 81762306a36Sopenharmony_ci * @ingroup Debugfs 81862306a36Sopenharmony_ci * @brief Request with #MRQ_DEBUG. 81962306a36Sopenharmony_ci * 82062306a36Sopenharmony_ci * The sender of an MRQ_DEBUG message uses #cmd to specify a debugfs 82162306a36Sopenharmony_ci * command to execute. Legal commands are the values of @ref 82262306a36Sopenharmony_ci * mrq_debug_commands. Each command requires a specific additional 82362306a36Sopenharmony_ci * payload of data. 82462306a36Sopenharmony_ci * 82562306a36Sopenharmony_ci * |command |payload| 82662306a36Sopenharmony_ci * |-------------------|-------| 82762306a36Sopenharmony_ci * |CMD_DEBUG_OPEN_RO |fop | 82862306a36Sopenharmony_ci * |CMD_DEBUG_OPEN_WO |fop | 82962306a36Sopenharmony_ci * |CMD_DEBUG_READ |frd | 83062306a36Sopenharmony_ci * |CMD_DEBUG_WRITE |fwr | 83162306a36Sopenharmony_ci * |CMD_DEBUG_CLOSE |fcl | 83262306a36Sopenharmony_ci */ 83362306a36Sopenharmony_cistruct mrq_debug_request { 83462306a36Sopenharmony_ci /** @brief Sub-command (@ref mrq_debug_commands) */ 83562306a36Sopenharmony_ci uint32_t cmd; 83662306a36Sopenharmony_ci union { 83762306a36Sopenharmony_ci /** @brief Request payload for CMD_DEBUG_OPEN_RO/WO command */ 83862306a36Sopenharmony_ci struct cmd_debug_fopen_request fop; 83962306a36Sopenharmony_ci /** @brief Request payload for CMD_DEBUG_READ command */ 84062306a36Sopenharmony_ci struct cmd_debug_fread_request frd; 84162306a36Sopenharmony_ci /** @brief Request payload for CMD_DEBUG_WRITE command */ 84262306a36Sopenharmony_ci struct cmd_debug_fwrite_request fwr; 84362306a36Sopenharmony_ci /** @brief Request payload for CMD_DEBUG_CLOSE command */ 84462306a36Sopenharmony_ci struct cmd_debug_fclose_request fcl; 84562306a36Sopenharmony_ci } BPMP_UNION_ANON; 84662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_ci/** 84962306a36Sopenharmony_ci * @ingroup Debugfs 85062306a36Sopenharmony_ci */ 85162306a36Sopenharmony_cistruct mrq_debug_response { 85262306a36Sopenharmony_ci union { 85362306a36Sopenharmony_ci /** @brief Response data for CMD_DEBUG_OPEN_RO/WO command */ 85462306a36Sopenharmony_ci struct cmd_debug_fopen_response fop; 85562306a36Sopenharmony_ci /** @brief Response data for CMD_DEBUG_READ command */ 85662306a36Sopenharmony_ci struct cmd_debug_fread_response frd; 85762306a36Sopenharmony_ci } BPMP_UNION_ANON; 85862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 85962306a36Sopenharmony_ci 86062306a36Sopenharmony_ci/** 86162306a36Sopenharmony_ci * @ingroup MRQ_Codes 86262306a36Sopenharmony_ci * @def MRQ_RESET 86362306a36Sopenharmony_ci * @brief Reset an IP block 86462306a36Sopenharmony_ci * 86562306a36Sopenharmony_ci * * Platforms: T186, T194 86662306a36Sopenharmony_ci * * Initiators: Any 86762306a36Sopenharmony_ci * * Targets: BPMP 86862306a36Sopenharmony_ci * * Request Payload: @ref mrq_reset_request 86962306a36Sopenharmony_ci * * Response Payload: @ref mrq_reset_response 87062306a36Sopenharmony_ci * 87162306a36Sopenharmony_ci * @addtogroup Reset 87262306a36Sopenharmony_ci * @{ 87362306a36Sopenharmony_ci */ 87462306a36Sopenharmony_ci 87562306a36Sopenharmony_cienum mrq_reset_commands { 87662306a36Sopenharmony_ci /** 87762306a36Sopenharmony_ci * @brief Assert module reset 87862306a36Sopenharmony_ci * 87962306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 88062306a36Sopenharmony_ci * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 88162306a36Sopenharmony_ci * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 88262306a36Sopenharmony_ci * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 88362306a36Sopenharmony_ci */ 88462306a36Sopenharmony_ci CMD_RESET_ASSERT = 1, 88562306a36Sopenharmony_ci /** 88662306a36Sopenharmony_ci * @brief Deassert module reset 88762306a36Sopenharmony_ci * 88862306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 88962306a36Sopenharmony_ci * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 89062306a36Sopenharmony_ci * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 89162306a36Sopenharmony_ci * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 89262306a36Sopenharmony_ci */ 89362306a36Sopenharmony_ci CMD_RESET_DEASSERT = 2, 89462306a36Sopenharmony_ci /** 89562306a36Sopenharmony_ci * @brief Assert and deassert the module reset 89662306a36Sopenharmony_ci * 89762306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 89862306a36Sopenharmony_ci * -#BPMP_EINVAL if mrq_reset_request::reset_id is invalid @n 89962306a36Sopenharmony_ci * -#BPMP_EACCES if mrq master is not an owner of target domain reset @n 90062306a36Sopenharmony_ci * -#BPMP_ENOTSUP if target domain h/w state does not allow reset 90162306a36Sopenharmony_ci */ 90262306a36Sopenharmony_ci CMD_RESET_MODULE = 3, 90362306a36Sopenharmony_ci /** 90462306a36Sopenharmony_ci * @brief Get the highest reset ID 90562306a36Sopenharmony_ci * 90662306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 90762306a36Sopenharmony_ci * -#BPMP_ENODEV if no reset domains are supported (number of IDs is 0) 90862306a36Sopenharmony_ci */ 90962306a36Sopenharmony_ci CMD_RESET_GET_MAX_ID = 4, 91062306a36Sopenharmony_ci 91162306a36Sopenharmony_ci /** @brief Not part of ABI and subject to change */ 91262306a36Sopenharmony_ci CMD_RESET_MAX, 91362306a36Sopenharmony_ci}; 91462306a36Sopenharmony_ci 91562306a36Sopenharmony_ci/** 91662306a36Sopenharmony_ci * @brief Request with MRQ_RESET 91762306a36Sopenharmony_ci * 91862306a36Sopenharmony_ci * Used by the sender of an #MRQ_RESET message to request BPMP to 91962306a36Sopenharmony_ci * assert or or deassert a given reset line. 92062306a36Sopenharmony_ci */ 92162306a36Sopenharmony_cistruct mrq_reset_request { 92262306a36Sopenharmony_ci /** @brief Reset action to perform (@ref mrq_reset_commands) */ 92362306a36Sopenharmony_ci uint32_t cmd; 92462306a36Sopenharmony_ci /** @brief Id of the reset to affected */ 92562306a36Sopenharmony_ci uint32_t reset_id; 92662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 92762306a36Sopenharmony_ci 92862306a36Sopenharmony_ci/** 92962306a36Sopenharmony_ci * @brief Response for MRQ_RESET sub-command CMD_RESET_GET_MAX_ID. When 93062306a36Sopenharmony_ci * this sub-command is not supported, firmware will return -BPMP_EBADCMD 93162306a36Sopenharmony_ci * in mrq_response::err. 93262306a36Sopenharmony_ci */ 93362306a36Sopenharmony_cistruct cmd_reset_get_max_id_response { 93462306a36Sopenharmony_ci /** @brief Max reset id */ 93562306a36Sopenharmony_ci uint32_t max_id; 93662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_ci/** 93962306a36Sopenharmony_ci * @brief Response with MRQ_RESET 94062306a36Sopenharmony_ci * 94162306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_reset_request may return 94262306a36Sopenharmony_ci * sub-command-specific data. Some do and some do not as indicated 94362306a36Sopenharmony_ci * in the following table 94462306a36Sopenharmony_ci * 94562306a36Sopenharmony_ci * | sub-command | payload | 94662306a36Sopenharmony_ci * |----------------------|------------------| 94762306a36Sopenharmony_ci * | CMD_RESET_ASSERT | - | 94862306a36Sopenharmony_ci * | CMD_RESET_DEASSERT | - | 94962306a36Sopenharmony_ci * | CMD_RESET_MODULE | - | 95062306a36Sopenharmony_ci * | CMD_RESET_GET_MAX_ID | reset_get_max_id | 95162306a36Sopenharmony_ci */ 95262306a36Sopenharmony_cistruct mrq_reset_response { 95362306a36Sopenharmony_ci union { 95462306a36Sopenharmony_ci struct cmd_reset_get_max_id_response reset_get_max_id; 95562306a36Sopenharmony_ci } BPMP_UNION_ANON; 95662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 95762306a36Sopenharmony_ci 95862306a36Sopenharmony_ci/** @} Reset */ 95962306a36Sopenharmony_ci 96062306a36Sopenharmony_ci/** 96162306a36Sopenharmony_ci * @ingroup MRQ_Codes 96262306a36Sopenharmony_ci * @def MRQ_I2C 96362306a36Sopenharmony_ci * @brief Issue an i2c transaction 96462306a36Sopenharmony_ci * 96562306a36Sopenharmony_ci * * Platforms: T186, T194 96662306a36Sopenharmony_ci * * Initiators: Any 96762306a36Sopenharmony_ci * * Targets: BPMP 96862306a36Sopenharmony_ci * * Request Payload: @ref mrq_i2c_request 96962306a36Sopenharmony_ci * * Response Payload: @ref mrq_i2c_response 97062306a36Sopenharmony_ci * 97162306a36Sopenharmony_ci * @addtogroup I2C 97262306a36Sopenharmony_ci * @{ 97362306a36Sopenharmony_ci */ 97462306a36Sopenharmony_ci#define TEGRA_I2C_IPC_MAX_IN_BUF_SIZE (MSG_DATA_MIN_SZ - 12U) 97562306a36Sopenharmony_ci#define TEGRA_I2C_IPC_MAX_OUT_BUF_SIZE (MSG_DATA_MIN_SZ - 4U) 97662306a36Sopenharmony_ci 97762306a36Sopenharmony_ci#define SERIALI2C_TEN 0x0010U 97862306a36Sopenharmony_ci#define SERIALI2C_RD 0x0001U 97962306a36Sopenharmony_ci#define SERIALI2C_STOP 0x8000U 98062306a36Sopenharmony_ci#define SERIALI2C_NOSTART 0x4000U 98162306a36Sopenharmony_ci#define SERIALI2C_REV_DIR_ADDR 0x2000U 98262306a36Sopenharmony_ci#define SERIALI2C_IGNORE_NAK 0x1000U 98362306a36Sopenharmony_ci#define SERIALI2C_NO_RD_ACK 0x0800U 98462306a36Sopenharmony_ci#define SERIALI2C_RECV_LEN 0x0400U 98562306a36Sopenharmony_ci 98662306a36Sopenharmony_cienum { 98762306a36Sopenharmony_ci CMD_I2C_XFER = 1 98862306a36Sopenharmony_ci}; 98962306a36Sopenharmony_ci 99062306a36Sopenharmony_ci/** 99162306a36Sopenharmony_ci * @brief Serializable i2c request 99262306a36Sopenharmony_ci * 99362306a36Sopenharmony_ci * Instances of this structure are packed (little-endian) into 99462306a36Sopenharmony_ci * cmd_i2c_xfer_request::data_buf. Each instance represents a single 99562306a36Sopenharmony_ci * transaction (or a portion of a transaction with repeated starts) on 99662306a36Sopenharmony_ci * an i2c bus. 99762306a36Sopenharmony_ci * 99862306a36Sopenharmony_ci * Because these structures are packed, some instances are likely to 99962306a36Sopenharmony_ci * be misaligned. Additionally because #data is variable length, it is 100062306a36Sopenharmony_ci * not possible to iterate through a serialized list of these 100162306a36Sopenharmony_ci * structures without inspecting #len in each instance. It may be 100262306a36Sopenharmony_ci * easier to serialize or deserialize cmd_i2c_xfer_request::data_buf 100362306a36Sopenharmony_ci * manually rather than using this structure definition. 100462306a36Sopenharmony_ci*/ 100562306a36Sopenharmony_cistruct serial_i2c_request { 100662306a36Sopenharmony_ci /** @brief I2C slave address */ 100762306a36Sopenharmony_ci uint16_t addr; 100862306a36Sopenharmony_ci /** @brief Bitmask of SERIALI2C_ flags */ 100962306a36Sopenharmony_ci uint16_t flags; 101062306a36Sopenharmony_ci /** @brief Length of I2C transaction in bytes */ 101162306a36Sopenharmony_ci uint16_t len; 101262306a36Sopenharmony_ci /** @brief For write transactions only, #len bytes of data */ 101362306a36Sopenharmony_ci uint8_t data[]; 101462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci/** 101762306a36Sopenharmony_ci * @brief Trigger one or more i2c transactions 101862306a36Sopenharmony_ci */ 101962306a36Sopenharmony_cistruct cmd_i2c_xfer_request { 102062306a36Sopenharmony_ci /** 102162306a36Sopenharmony_ci * @brief Tegra PWR_I2C bus identifier 102262306a36Sopenharmony_ci * 102362306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_t194) 102462306a36Sopenharmony_ci * Must be set to 5. 102562306a36Sopenharmony_ci * @endcond (bpmp_t234 || bpmp_t239 || bpmp_t194) 102662306a36Sopenharmony_ci * @cond bpmp_th500 102762306a36Sopenharmony_ci * Must be set to 1. 102862306a36Sopenharmony_ci * @endcond bpmp_th500 102962306a36Sopenharmony_ci * 103062306a36Sopenharmony_ci */ 103162306a36Sopenharmony_ci uint32_t bus_id; 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_ci /** @brief Count of valid bytes in #data_buf*/ 103462306a36Sopenharmony_ci uint32_t data_size; 103562306a36Sopenharmony_ci 103662306a36Sopenharmony_ci /** @brief Serialized packed instances of @ref serial_i2c_request*/ 103762306a36Sopenharmony_ci uint8_t data_buf[TEGRA_I2C_IPC_MAX_IN_BUF_SIZE]; 103862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 103962306a36Sopenharmony_ci 104062306a36Sopenharmony_ci/** 104162306a36Sopenharmony_ci * @brief Container for data read from the i2c bus 104262306a36Sopenharmony_ci * 104362306a36Sopenharmony_ci * Processing an cmd_i2c_xfer_request::data_buf causes BPMP to execute 104462306a36Sopenharmony_ci * zero or more I2C reads. The data read from the bus is serialized 104562306a36Sopenharmony_ci * into #data_buf. 104662306a36Sopenharmony_ci */ 104762306a36Sopenharmony_cistruct cmd_i2c_xfer_response { 104862306a36Sopenharmony_ci /** @brief Count of valid bytes in #data_buf*/ 104962306a36Sopenharmony_ci uint32_t data_size; 105062306a36Sopenharmony_ci /** @brief I2c read data */ 105162306a36Sopenharmony_ci uint8_t data_buf[TEGRA_I2C_IPC_MAX_OUT_BUF_SIZE]; 105262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 105362306a36Sopenharmony_ci 105462306a36Sopenharmony_ci/** 105562306a36Sopenharmony_ci * @brief Request with #MRQ_I2C 105662306a36Sopenharmony_ci */ 105762306a36Sopenharmony_cistruct mrq_i2c_request { 105862306a36Sopenharmony_ci /** @brief Always CMD_I2C_XFER (i.e. 1) */ 105962306a36Sopenharmony_ci uint32_t cmd; 106062306a36Sopenharmony_ci /** @brief Parameters of the transfer request */ 106162306a36Sopenharmony_ci struct cmd_i2c_xfer_request xfer; 106262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 106362306a36Sopenharmony_ci 106462306a36Sopenharmony_ci/** 106562306a36Sopenharmony_ci * @brief Response to #MRQ_I2C 106662306a36Sopenharmony_ci * 106762306a36Sopenharmony_ci * mrq_response:err is 106862306a36Sopenharmony_ci * 0: Success 106962306a36Sopenharmony_ci * -#BPMP_EBADCMD: if mrq_i2c_request::cmd is other than 1 107062306a36Sopenharmony_ci * -#BPMP_EINVAL: if cmd_i2c_xfer_request does not contain correctly formatted request 107162306a36Sopenharmony_ci * -#BPMP_ENODEV: if cmd_i2c_xfer_request::bus_id is not supported by BPMP 107262306a36Sopenharmony_ci * -#BPMP_EACCES: if i2c transaction is not allowed due to firewall rules 107362306a36Sopenharmony_ci * -#BPMP_ETIMEDOUT: if i2c transaction times out 107462306a36Sopenharmony_ci * -#BPMP_ENXIO: if i2c slave device does not reply with ACK to the transaction 107562306a36Sopenharmony_ci * -#BPMP_EAGAIN: if ARB_LOST condition is detected by the i2c controller 107662306a36Sopenharmony_ci * -#BPMP_EIO: any other i2c controller error code than NO_ACK or ARB_LOST 107762306a36Sopenharmony_ci */ 107862306a36Sopenharmony_cistruct mrq_i2c_response { 107962306a36Sopenharmony_ci struct cmd_i2c_xfer_response xfer; 108062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 108162306a36Sopenharmony_ci 108262306a36Sopenharmony_ci/** @} I2C */ 108362306a36Sopenharmony_ci 108462306a36Sopenharmony_ci/** 108562306a36Sopenharmony_ci * @ingroup MRQ_Codes 108662306a36Sopenharmony_ci * @def MRQ_CLK 108762306a36Sopenharmony_ci * @brief Perform a clock operation 108862306a36Sopenharmony_ci * 108962306a36Sopenharmony_ci * * Platforms: T186, T194 109062306a36Sopenharmony_ci * * Initiators: Any 109162306a36Sopenharmony_ci * * Targets: BPMP 109262306a36Sopenharmony_ci * * Request Payload: @ref mrq_clk_request 109362306a36Sopenharmony_ci * * Response Payload: @ref mrq_clk_response 109462306a36Sopenharmony_ci * 109562306a36Sopenharmony_ci * @addtogroup Clocks 109662306a36Sopenharmony_ci * @{ 109762306a36Sopenharmony_ci */ 109862306a36Sopenharmony_cienum { 109962306a36Sopenharmony_ci CMD_CLK_GET_RATE = 1, 110062306a36Sopenharmony_ci CMD_CLK_SET_RATE = 2, 110162306a36Sopenharmony_ci CMD_CLK_ROUND_RATE = 3, 110262306a36Sopenharmony_ci CMD_CLK_GET_PARENT = 4, 110362306a36Sopenharmony_ci CMD_CLK_SET_PARENT = 5, 110462306a36Sopenharmony_ci CMD_CLK_IS_ENABLED = 6, 110562306a36Sopenharmony_ci CMD_CLK_ENABLE = 7, 110662306a36Sopenharmony_ci CMD_CLK_DISABLE = 8, 110762306a36Sopenharmony_ci/** @cond DEPRECATED */ 110862306a36Sopenharmony_ci CMD_CLK_PROPERTIES = 9, 110962306a36Sopenharmony_ci CMD_CLK_POSSIBLE_PARENTS = 10, 111062306a36Sopenharmony_ci CMD_CLK_NUM_POSSIBLE_PARENTS = 11, 111162306a36Sopenharmony_ci CMD_CLK_GET_POSSIBLE_PARENT = 12, 111262306a36Sopenharmony_ci CMD_CLK_RESET_REFCOUNTS = 13, 111362306a36Sopenharmony_ci/** @endcond DEPRECATED */ 111462306a36Sopenharmony_ci CMD_CLK_GET_ALL_INFO = 14, 111562306a36Sopenharmony_ci CMD_CLK_GET_MAX_CLK_ID = 15, 111662306a36Sopenharmony_ci CMD_CLK_GET_FMAX_AT_VMIN = 16, 111762306a36Sopenharmony_ci CMD_CLK_MAX, 111862306a36Sopenharmony_ci}; 111962306a36Sopenharmony_ci 112062306a36Sopenharmony_ci#define BPMP_CLK_HAS_MUX (1U << 0U) 112162306a36Sopenharmony_ci#define BPMP_CLK_HAS_SET_RATE (1U << 1U) 112262306a36Sopenharmony_ci#define BPMP_CLK_IS_ROOT (1U << 2U) 112362306a36Sopenharmony_ci#define BPMP_CLK_IS_VAR_ROOT (1U << 3U) 112462306a36Sopenharmony_ci/** 112562306a36Sopenharmony_ci * @brief Protection against rate and parent changes 112662306a36Sopenharmony_ci * 112762306a36Sopenharmony_ci * #MRQ_CLK command #CMD_CLK_SET_RATE or #MRQ_CLK command #CMD_CLK_SET_PARENT will return 112862306a36Sopenharmony_ci * -#BPMP_EACCES. 112962306a36Sopenharmony_ci */ 113062306a36Sopenharmony_ci#define BPMP_CLK_RATE_PARENT_CHANGE_DENIED (1U << 30) 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci/** 113362306a36Sopenharmony_ci * @brief Protection against state changes 113462306a36Sopenharmony_ci * 113562306a36Sopenharmony_ci * #MRQ_CLK command #CMD_CLK_ENABLE or #MRQ_CLK command #CMD_CLK_DISABLE will return 113662306a36Sopenharmony_ci * -#BPMP_EACCES. 113762306a36Sopenharmony_ci */ 113862306a36Sopenharmony_ci#define BPMP_CLK_STATE_CHANGE_DENIED (1U << 31) 113962306a36Sopenharmony_ci 114062306a36Sopenharmony_ci#define MRQ_CLK_NAME_MAXLEN 40U 114162306a36Sopenharmony_ci#define MRQ_CLK_MAX_PARENTS 16U 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_ci/** @private */ 114462306a36Sopenharmony_cistruct cmd_clk_get_rate_request { 114562306a36Sopenharmony_ci BPMP_ABI_EMPTY 114662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 114762306a36Sopenharmony_ci 114862306a36Sopenharmony_cistruct cmd_clk_get_rate_response { 114962306a36Sopenharmony_ci int64_t rate; 115062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 115162306a36Sopenharmony_ci 115262306a36Sopenharmony_cistruct cmd_clk_set_rate_request { 115362306a36Sopenharmony_ci int32_t unused; 115462306a36Sopenharmony_ci int64_t rate; 115562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 115662306a36Sopenharmony_ci 115762306a36Sopenharmony_cistruct cmd_clk_set_rate_response { 115862306a36Sopenharmony_ci int64_t rate; 115962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 116062306a36Sopenharmony_ci 116162306a36Sopenharmony_cistruct cmd_clk_round_rate_request { 116262306a36Sopenharmony_ci int32_t unused; 116362306a36Sopenharmony_ci int64_t rate; 116462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 116562306a36Sopenharmony_ci 116662306a36Sopenharmony_cistruct cmd_clk_round_rate_response { 116762306a36Sopenharmony_ci int64_t rate; 116862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_ci/** @private */ 117162306a36Sopenharmony_cistruct cmd_clk_get_parent_request { 117262306a36Sopenharmony_ci BPMP_ABI_EMPTY 117362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 117462306a36Sopenharmony_ci 117562306a36Sopenharmony_cistruct cmd_clk_get_parent_response { 117662306a36Sopenharmony_ci uint32_t parent_id; 117762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_cistruct cmd_clk_set_parent_request { 118062306a36Sopenharmony_ci uint32_t parent_id; 118162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 118262306a36Sopenharmony_ci 118362306a36Sopenharmony_cistruct cmd_clk_set_parent_response { 118462306a36Sopenharmony_ci uint32_t parent_id; 118562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 118662306a36Sopenharmony_ci 118762306a36Sopenharmony_ci/** @private */ 118862306a36Sopenharmony_cistruct cmd_clk_is_enabled_request { 118962306a36Sopenharmony_ci BPMP_ABI_EMPTY 119062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 119162306a36Sopenharmony_ci 119262306a36Sopenharmony_ci/** 119362306a36Sopenharmony_ci * @brief Response data to #MRQ_CLK sub-command CMD_CLK_IS_ENABLED 119462306a36Sopenharmony_ci */ 119562306a36Sopenharmony_cistruct cmd_clk_is_enabled_response { 119662306a36Sopenharmony_ci /** 119762306a36Sopenharmony_ci * @brief The state of the clock that has been succesfully 119862306a36Sopenharmony_ci * requested with CMD_CLK_ENABLE or CMD_CLK_DISABLE by the 119962306a36Sopenharmony_ci * master invoking the command earlier. 120062306a36Sopenharmony_ci * 120162306a36Sopenharmony_ci * The state may not reflect the physical state of the clock 120262306a36Sopenharmony_ci * if there are some other masters requesting it to be 120362306a36Sopenharmony_ci * enabled. 120462306a36Sopenharmony_ci * 120562306a36Sopenharmony_ci * Value 0 is disabled, all other values indicate enabled. 120662306a36Sopenharmony_ci */ 120762306a36Sopenharmony_ci int32_t state; 120862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_ci/** @private */ 121162306a36Sopenharmony_cistruct cmd_clk_enable_request { 121262306a36Sopenharmony_ci BPMP_ABI_EMPTY 121362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 121462306a36Sopenharmony_ci 121562306a36Sopenharmony_ci/** @private */ 121662306a36Sopenharmony_cistruct cmd_clk_enable_response { 121762306a36Sopenharmony_ci BPMP_ABI_EMPTY 121862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 121962306a36Sopenharmony_ci 122062306a36Sopenharmony_ci/** @private */ 122162306a36Sopenharmony_cistruct cmd_clk_disable_request { 122262306a36Sopenharmony_ci BPMP_ABI_EMPTY 122362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 122462306a36Sopenharmony_ci 122562306a36Sopenharmony_ci/** @private */ 122662306a36Sopenharmony_cistruct cmd_clk_disable_response { 122762306a36Sopenharmony_ci BPMP_ABI_EMPTY 122862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 122962306a36Sopenharmony_ci 123062306a36Sopenharmony_ci/** @cond DEPRECATED */ 123162306a36Sopenharmony_ci/** @private */ 123262306a36Sopenharmony_cistruct cmd_clk_properties_request { 123362306a36Sopenharmony_ci BPMP_ABI_EMPTY 123462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 123562306a36Sopenharmony_ci 123662306a36Sopenharmony_ci/** @todo flags need to be spelled out here */ 123762306a36Sopenharmony_cistruct cmd_clk_properties_response { 123862306a36Sopenharmony_ci uint32_t flags; 123962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 124062306a36Sopenharmony_ci 124162306a36Sopenharmony_ci/** @private */ 124262306a36Sopenharmony_cistruct cmd_clk_possible_parents_request { 124362306a36Sopenharmony_ci BPMP_ABI_EMPTY 124462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 124562306a36Sopenharmony_ci 124662306a36Sopenharmony_cistruct cmd_clk_possible_parents_response { 124762306a36Sopenharmony_ci uint8_t num_parents; 124862306a36Sopenharmony_ci uint8_t reserved[3]; 124962306a36Sopenharmony_ci uint32_t parent_id[MRQ_CLK_MAX_PARENTS]; 125062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 125162306a36Sopenharmony_ci 125262306a36Sopenharmony_ci/** @private */ 125362306a36Sopenharmony_cistruct cmd_clk_num_possible_parents_request { 125462306a36Sopenharmony_ci BPMP_ABI_EMPTY 125562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 125662306a36Sopenharmony_ci 125762306a36Sopenharmony_cistruct cmd_clk_num_possible_parents_response { 125862306a36Sopenharmony_ci uint8_t num_parents; 125962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 126062306a36Sopenharmony_ci 126162306a36Sopenharmony_cistruct cmd_clk_get_possible_parent_request { 126262306a36Sopenharmony_ci uint8_t parent_idx; 126362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 126462306a36Sopenharmony_ci 126562306a36Sopenharmony_cistruct cmd_clk_get_possible_parent_response { 126662306a36Sopenharmony_ci uint32_t parent_id; 126762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 126862306a36Sopenharmony_ci/** @endcond DEPRECATED */ 126962306a36Sopenharmony_ci 127062306a36Sopenharmony_ci/** @private */ 127162306a36Sopenharmony_cistruct cmd_clk_get_all_info_request { 127262306a36Sopenharmony_ci BPMP_ABI_EMPTY 127362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 127462306a36Sopenharmony_ci 127562306a36Sopenharmony_cistruct cmd_clk_get_all_info_response { 127662306a36Sopenharmony_ci uint32_t flags; 127762306a36Sopenharmony_ci uint32_t parent; 127862306a36Sopenharmony_ci uint32_t parents[MRQ_CLK_MAX_PARENTS]; 127962306a36Sopenharmony_ci uint8_t num_parents; 128062306a36Sopenharmony_ci uint8_t name[MRQ_CLK_NAME_MAXLEN]; 128162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 128262306a36Sopenharmony_ci 128362306a36Sopenharmony_ci/** @private */ 128462306a36Sopenharmony_cistruct cmd_clk_get_max_clk_id_request { 128562306a36Sopenharmony_ci BPMP_ABI_EMPTY 128662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 128762306a36Sopenharmony_ci 128862306a36Sopenharmony_cistruct cmd_clk_get_max_clk_id_response { 128962306a36Sopenharmony_ci uint32_t max_id; 129062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 129162306a36Sopenharmony_ci 129262306a36Sopenharmony_ci/** @private */ 129362306a36Sopenharmony_cistruct cmd_clk_get_fmax_at_vmin_request { 129462306a36Sopenharmony_ci BPMP_ABI_EMPTY 129562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 129662306a36Sopenharmony_ci 129762306a36Sopenharmony_cistruct cmd_clk_get_fmax_at_vmin_response { 129862306a36Sopenharmony_ci int64_t rate; 129962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 130062306a36Sopenharmony_ci 130162306a36Sopenharmony_ci 130262306a36Sopenharmony_ci/** 130362306a36Sopenharmony_ci * @ingroup Clocks 130462306a36Sopenharmony_ci * @brief Request with #MRQ_CLK 130562306a36Sopenharmony_ci * 130662306a36Sopenharmony_ci * Used by the sender of an #MRQ_CLK message to control clocks. The 130762306a36Sopenharmony_ci * clk_request is split into several sub-commands. Some sub-commands 130862306a36Sopenharmony_ci * require no additional data. Others have a sub-command specific 130962306a36Sopenharmony_ci * payload 131062306a36Sopenharmony_ci * 131162306a36Sopenharmony_ci * |sub-command |payload | 131262306a36Sopenharmony_ci * |----------------------------|-----------------------| 131362306a36Sopenharmony_ci * |CMD_CLK_GET_RATE |- | 131462306a36Sopenharmony_ci * |CMD_CLK_SET_RATE |clk_set_rate | 131562306a36Sopenharmony_ci * |CMD_CLK_ROUND_RATE |clk_round_rate | 131662306a36Sopenharmony_ci * |CMD_CLK_GET_PARENT |- | 131762306a36Sopenharmony_ci * |CMD_CLK_SET_PARENT |clk_set_parent | 131862306a36Sopenharmony_ci * |CMD_CLK_IS_ENABLED |- | 131962306a36Sopenharmony_ci * |CMD_CLK_ENABLE |- | 132062306a36Sopenharmony_ci * |CMD_CLK_DISABLE |- | 132162306a36Sopenharmony_ci * |CMD_CLK_GET_ALL_INFO |- | 132262306a36Sopenharmony_ci * |CMD_CLK_GET_MAX_CLK_ID |- | 132362306a36Sopenharmony_ci * |CMD_CLK_GET_FMAX_AT_VMIN |- 132462306a36Sopenharmony_ci * | 132562306a36Sopenharmony_ci * 132662306a36Sopenharmony_ci */ 132762306a36Sopenharmony_ci 132862306a36Sopenharmony_ci/** @cond DEPRECATED 132962306a36Sopenharmony_ci * 133062306a36Sopenharmony_ci * Older versions of firmware also supported following sub-commands: 133162306a36Sopenharmony_ci * |CMD_CLK_PROPERTIES |- | 133262306a36Sopenharmony_ci * |CMD_CLK_POSSIBLE_PARENTS |- | 133362306a36Sopenharmony_ci * |CMD_CLK_NUM_POSSIBLE_PARENTS|- | 133462306a36Sopenharmony_ci * |CMD_CLK_GET_POSSIBLE_PARENT |clk_get_possible_parent| 133562306a36Sopenharmony_ci * |CMD_CLK_RESET_REFCOUNTS |- | 133662306a36Sopenharmony_ci * 133762306a36Sopenharmony_ci * @endcond DEPRECATED */ 133862306a36Sopenharmony_ci 133962306a36Sopenharmony_cistruct mrq_clk_request { 134062306a36Sopenharmony_ci /** @brief Sub-command and clock id concatenated to 32-bit word. 134162306a36Sopenharmony_ci * - bits[31..24] is the sub-cmd. 134262306a36Sopenharmony_ci * - bits[23..0] is the clock id 134362306a36Sopenharmony_ci */ 134462306a36Sopenharmony_ci uint32_t cmd_and_id; 134562306a36Sopenharmony_ci 134662306a36Sopenharmony_ci union { 134762306a36Sopenharmony_ci /** @private */ 134862306a36Sopenharmony_ci struct cmd_clk_get_rate_request clk_get_rate; 134962306a36Sopenharmony_ci struct cmd_clk_set_rate_request clk_set_rate; 135062306a36Sopenharmony_ci struct cmd_clk_round_rate_request clk_round_rate; 135162306a36Sopenharmony_ci /** @private */ 135262306a36Sopenharmony_ci struct cmd_clk_get_parent_request clk_get_parent; 135362306a36Sopenharmony_ci struct cmd_clk_set_parent_request clk_set_parent; 135462306a36Sopenharmony_ci /** @private */ 135562306a36Sopenharmony_ci struct cmd_clk_enable_request clk_enable; 135662306a36Sopenharmony_ci /** @private */ 135762306a36Sopenharmony_ci struct cmd_clk_disable_request clk_disable; 135862306a36Sopenharmony_ci /** @private */ 135962306a36Sopenharmony_ci struct cmd_clk_is_enabled_request clk_is_enabled; 136062306a36Sopenharmony_ci /** @cond DEPRECATED */ 136162306a36Sopenharmony_ci /** @private */ 136262306a36Sopenharmony_ci struct cmd_clk_properties_request clk_properties; 136362306a36Sopenharmony_ci /** @private */ 136462306a36Sopenharmony_ci struct cmd_clk_possible_parents_request clk_possible_parents; 136562306a36Sopenharmony_ci /** @private */ 136662306a36Sopenharmony_ci struct cmd_clk_num_possible_parents_request clk_num_possible_parents; 136762306a36Sopenharmony_ci struct cmd_clk_get_possible_parent_request clk_get_possible_parent; 136862306a36Sopenharmony_ci /** @endcond DEPRECATED */ 136962306a36Sopenharmony_ci /** @private */ 137062306a36Sopenharmony_ci struct cmd_clk_get_all_info_request clk_get_all_info; 137162306a36Sopenharmony_ci /** @private */ 137262306a36Sopenharmony_ci struct cmd_clk_get_max_clk_id_request clk_get_max_clk_id; 137362306a36Sopenharmony_ci /** @private */ 137462306a36Sopenharmony_ci struct cmd_clk_get_fmax_at_vmin_request clk_get_fmax_at_vmin; 137562306a36Sopenharmony_ci } BPMP_UNION_ANON; 137662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 137762306a36Sopenharmony_ci 137862306a36Sopenharmony_ci/** 137962306a36Sopenharmony_ci * @ingroup Clocks 138062306a36Sopenharmony_ci * @brief Response to MRQ_CLK 138162306a36Sopenharmony_ci * 138262306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_clk_request may return 138362306a36Sopenharmony_ci * sub-command-specific data. Some do and some do not as indicated in 138462306a36Sopenharmony_ci * the following table 138562306a36Sopenharmony_ci * 138662306a36Sopenharmony_ci * |sub-command |payload | 138762306a36Sopenharmony_ci * |----------------------------|------------------------| 138862306a36Sopenharmony_ci * |CMD_CLK_GET_RATE |clk_get_rate | 138962306a36Sopenharmony_ci * |CMD_CLK_SET_RATE |clk_set_rate | 139062306a36Sopenharmony_ci * |CMD_CLK_ROUND_RATE |clk_round_rate | 139162306a36Sopenharmony_ci * |CMD_CLK_GET_PARENT |clk_get_parent | 139262306a36Sopenharmony_ci * |CMD_CLK_SET_PARENT |clk_set_parent | 139362306a36Sopenharmony_ci * |CMD_CLK_IS_ENABLED |clk_is_enabled | 139462306a36Sopenharmony_ci * |CMD_CLK_ENABLE |- | 139562306a36Sopenharmony_ci * |CMD_CLK_DISABLE |- | 139662306a36Sopenharmony_ci * |CMD_CLK_GET_ALL_INFO |clk_get_all_info | 139762306a36Sopenharmony_ci * |CMD_CLK_GET_MAX_CLK_ID |clk_get_max_id | 139862306a36Sopenharmony_ci * |CMD_CLK_GET_FMAX_AT_VMIN |clk_get_fmax_at_vmin | 139962306a36Sopenharmony_ci * 140062306a36Sopenharmony_ci */ 140162306a36Sopenharmony_ci 140262306a36Sopenharmony_ci/** @cond DEPRECATED 140362306a36Sopenharmony_ci * 140462306a36Sopenharmony_ci * Older versions of firmware also supported following sub-commands: 140562306a36Sopenharmony_ci * |CMD_CLK_PROPERTIES |clk_properties | 140662306a36Sopenharmony_ci * |CMD_CLK_POSSIBLE_PARENTS |clk_possible_parents | 140762306a36Sopenharmony_ci * |CMD_CLK_NUM_POSSIBLE_PARENTS|clk_num_possible_parents| 140862306a36Sopenharmony_ci * |CMD_CLK_GET_POSSIBLE_PARENT |clk_get_possible_parents| 140962306a36Sopenharmony_ci * |CMD_CLK_RESET_REFCOUNTS |- | 141062306a36Sopenharmony_ci * 141162306a36Sopenharmony_ci * @endcond DEPRECATED */ 141262306a36Sopenharmony_ci 141362306a36Sopenharmony_cistruct mrq_clk_response { 141462306a36Sopenharmony_ci union { 141562306a36Sopenharmony_ci struct cmd_clk_get_rate_response clk_get_rate; 141662306a36Sopenharmony_ci struct cmd_clk_set_rate_response clk_set_rate; 141762306a36Sopenharmony_ci struct cmd_clk_round_rate_response clk_round_rate; 141862306a36Sopenharmony_ci struct cmd_clk_get_parent_response clk_get_parent; 141962306a36Sopenharmony_ci struct cmd_clk_set_parent_response clk_set_parent; 142062306a36Sopenharmony_ci /** @private */ 142162306a36Sopenharmony_ci struct cmd_clk_enable_response clk_enable; 142262306a36Sopenharmony_ci /** @private */ 142362306a36Sopenharmony_ci struct cmd_clk_disable_response clk_disable; 142462306a36Sopenharmony_ci struct cmd_clk_is_enabled_response clk_is_enabled; 142562306a36Sopenharmony_ci /** @cond DEPRECATED */ 142662306a36Sopenharmony_ci struct cmd_clk_properties_response clk_properties; 142762306a36Sopenharmony_ci struct cmd_clk_possible_parents_response clk_possible_parents; 142862306a36Sopenharmony_ci struct cmd_clk_num_possible_parents_response clk_num_possible_parents; 142962306a36Sopenharmony_ci struct cmd_clk_get_possible_parent_response clk_get_possible_parent; 143062306a36Sopenharmony_ci /** @endcond DEPRECATED */ 143162306a36Sopenharmony_ci struct cmd_clk_get_all_info_response clk_get_all_info; 143262306a36Sopenharmony_ci struct cmd_clk_get_max_clk_id_response clk_get_max_clk_id; 143362306a36Sopenharmony_ci struct cmd_clk_get_fmax_at_vmin_response clk_get_fmax_at_vmin; 143462306a36Sopenharmony_ci } BPMP_UNION_ANON; 143562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 143662306a36Sopenharmony_ci 143762306a36Sopenharmony_ci/** @} Clocks */ 143862306a36Sopenharmony_ci 143962306a36Sopenharmony_ci/** 144062306a36Sopenharmony_ci * @ingroup MRQ_Codes 144162306a36Sopenharmony_ci * @def MRQ_QUERY_ABI 144262306a36Sopenharmony_ci * @brief Check if an MRQ is implemented 144362306a36Sopenharmony_ci * 144462306a36Sopenharmony_ci * * Platforms: All 144562306a36Sopenharmony_ci * * Initiators: Any 144662306a36Sopenharmony_ci * * Targets: Any except DMCE 144762306a36Sopenharmony_ci * * Request Payload: @ref mrq_query_abi_request 144862306a36Sopenharmony_ci * * Response Payload: @ref mrq_query_abi_response 144962306a36Sopenharmony_ci */ 145062306a36Sopenharmony_ci 145162306a36Sopenharmony_ci/** 145262306a36Sopenharmony_ci * @ingroup ABI_info 145362306a36Sopenharmony_ci * @brief Request with MRQ_QUERY_ABI 145462306a36Sopenharmony_ci * 145562306a36Sopenharmony_ci * Used by #MRQ_QUERY_ABI call to check if MRQ code #mrq is supported 145662306a36Sopenharmony_ci * by the recipient. 145762306a36Sopenharmony_ci */ 145862306a36Sopenharmony_cistruct mrq_query_abi_request { 145962306a36Sopenharmony_ci /** @brief MRQ code to query */ 146062306a36Sopenharmony_ci uint32_t mrq; 146162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 146262306a36Sopenharmony_ci 146362306a36Sopenharmony_ci/** 146462306a36Sopenharmony_ci * @ingroup ABI_info 146562306a36Sopenharmony_ci * @brief Response to MRQ_QUERY_ABI 146662306a36Sopenharmony_ci * 146762306a36Sopenharmony_ci * @note mrq_response::err of 0 indicates that the query was 146862306a36Sopenharmony_ci * successful, not that the MRQ itself is supported! 146962306a36Sopenharmony_ci */ 147062306a36Sopenharmony_cistruct mrq_query_abi_response { 147162306a36Sopenharmony_ci /** @brief 0 if queried MRQ is supported. Else, -#BPMP_ENODEV */ 147262306a36Sopenharmony_ci int32_t status; 147362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 147462306a36Sopenharmony_ci 147562306a36Sopenharmony_ci/** 147662306a36Sopenharmony_ci * 147762306a36Sopenharmony_ci * @ingroup MRQ_Codes 147862306a36Sopenharmony_ci * @def MRQ_PG 147962306a36Sopenharmony_ci * @brief Control power-gating state of a partition. In contrast to 148062306a36Sopenharmony_ci * MRQ_PG_UPDATE_STATE, operations that change the power partition 148162306a36Sopenharmony_ci * state are NOT reference counted 148262306a36Sopenharmony_ci * 148362306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t186) 148462306a36Sopenharmony_ci * @note On T194 and earlier BPMP-FW forcefully turns off some partitions as 148562306a36Sopenharmony_ci * part of SC7 entry because their state cannot be adequately restored on exit. 148662306a36Sopenharmony_ci * Therefore, it is recommended to power off all domains via MRQ_PG prior to SC7 148762306a36Sopenharmony_ci * entry. 148862306a36Sopenharmony_ci * See @ref bpmp_pdomain_ids for further detail. 148962306a36Sopenharmony_ci * @endcond (bpmp_t194 || bpmp_t186) 149062306a36Sopenharmony_ci * 149162306a36Sopenharmony_ci * * Platforms: T186, T194 149262306a36Sopenharmony_ci * * Initiators: Any 149362306a36Sopenharmony_ci * * Targets: BPMP 149462306a36Sopenharmony_ci * * Request Payload: @ref mrq_pg_request 149562306a36Sopenharmony_ci * * Response Payload: @ref mrq_pg_response 149662306a36Sopenharmony_ci * 149762306a36Sopenharmony_ci * @addtogroup Powergating 149862306a36Sopenharmony_ci * @{ 149962306a36Sopenharmony_ci */ 150062306a36Sopenharmony_cienum mrq_pg_cmd { 150162306a36Sopenharmony_ci /** 150262306a36Sopenharmony_ci * @brief Check whether the BPMP driver supports the specified 150362306a36Sopenharmony_ci * request type 150462306a36Sopenharmony_ci * 150562306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 150662306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 150762306a36Sopenharmony_ci */ 150862306a36Sopenharmony_ci CMD_PG_QUERY_ABI = 0, 150962306a36Sopenharmony_ci 151062306a36Sopenharmony_ci /** 151162306a36Sopenharmony_ci * @brief Set the current state of specified power domain. The 151262306a36Sopenharmony_ci * possible values for power domains are defined in enum 151362306a36Sopenharmony_ci * pg_states 151462306a36Sopenharmony_ci * 151562306a36Sopenharmony_ci * mrq_response:err is 151662306a36Sopenharmony_ci * 0: Success 151762306a36Sopenharmony_ci * -#BPMP_EINVAL: Invalid request parameters 151862306a36Sopenharmony_ci */ 151962306a36Sopenharmony_ci CMD_PG_SET_STATE = 1, 152062306a36Sopenharmony_ci 152162306a36Sopenharmony_ci /** 152262306a36Sopenharmony_ci * @brief Get the current state of specified power domain. The 152362306a36Sopenharmony_ci * possible values for power domains are defined in enum 152462306a36Sopenharmony_ci * pg_states 152562306a36Sopenharmony_ci * 152662306a36Sopenharmony_ci * mrq_response:err is 152762306a36Sopenharmony_ci * 0: Success 152862306a36Sopenharmony_ci * -#BPMP_EINVAL: Invalid request parameters 152962306a36Sopenharmony_ci */ 153062306a36Sopenharmony_ci CMD_PG_GET_STATE = 2, 153162306a36Sopenharmony_ci 153262306a36Sopenharmony_ci /** 153362306a36Sopenharmony_ci * @brief Get the name string of specified power domain id. 153462306a36Sopenharmony_ci * 153562306a36Sopenharmony_ci * mrq_response:err is 153662306a36Sopenharmony_ci * 0: Success 153762306a36Sopenharmony_ci * -#BPMP_EINVAL: Invalid request parameters 153862306a36Sopenharmony_ci */ 153962306a36Sopenharmony_ci CMD_PG_GET_NAME = 3, 154062306a36Sopenharmony_ci 154162306a36Sopenharmony_ci 154262306a36Sopenharmony_ci /** 154362306a36Sopenharmony_ci * @brief Get the highest power domain id in the system. Not 154462306a36Sopenharmony_ci * all IDs between 0 and max_id are valid IDs. 154562306a36Sopenharmony_ci * 154662306a36Sopenharmony_ci * mrq_response:err is 154762306a36Sopenharmony_ci * 0: Success 154862306a36Sopenharmony_ci * -#BPMP_EINVAL: Invalid request parameters 154962306a36Sopenharmony_ci */ 155062306a36Sopenharmony_ci CMD_PG_GET_MAX_ID = 4, 155162306a36Sopenharmony_ci}; 155262306a36Sopenharmony_ci 155362306a36Sopenharmony_ci#define MRQ_PG_NAME_MAXLEN 40 155462306a36Sopenharmony_ci 155562306a36Sopenharmony_cienum pg_states { 155662306a36Sopenharmony_ci /** @brief Power domain is OFF */ 155762306a36Sopenharmony_ci PG_STATE_OFF = 0, 155862306a36Sopenharmony_ci /** @brief Power domain is ON */ 155962306a36Sopenharmony_ci PG_STATE_ON = 1, 156062306a36Sopenharmony_ci /** 156162306a36Sopenharmony_ci * @brief a legacy state where power domain and the clock 156262306a36Sopenharmony_ci * associated to the domain are ON. 156362306a36Sopenharmony_ci * This state is only supported in T186, and the use of it is 156462306a36Sopenharmony_ci * deprecated. 156562306a36Sopenharmony_ci */ 156662306a36Sopenharmony_ci PG_STATE_RUNNING = 2, 156762306a36Sopenharmony_ci}; 156862306a36Sopenharmony_ci 156962306a36Sopenharmony_cistruct cmd_pg_query_abi_request { 157062306a36Sopenharmony_ci /** @ref mrq_pg_cmd */ 157162306a36Sopenharmony_ci uint32_t type; 157262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 157362306a36Sopenharmony_ci 157462306a36Sopenharmony_cistruct cmd_pg_set_state_request { 157562306a36Sopenharmony_ci /** @ref pg_states */ 157662306a36Sopenharmony_ci uint32_t state; 157762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 157862306a36Sopenharmony_ci 157962306a36Sopenharmony_ci/** 158062306a36Sopenharmony_ci * @brief Response data to #MRQ_PG sub command #CMD_PG_GET_STATE 158162306a36Sopenharmony_ci */ 158262306a36Sopenharmony_cistruct cmd_pg_get_state_response { 158362306a36Sopenharmony_ci /** 158462306a36Sopenharmony_ci * @brief The state of the power partition that has been 158562306a36Sopenharmony_ci * succesfuly requested by the master earlier using #MRQ_PG 158662306a36Sopenharmony_ci * command #CMD_PG_SET_STATE. 158762306a36Sopenharmony_ci * 158862306a36Sopenharmony_ci * The state may not reflect the physical state of the power 158962306a36Sopenharmony_ci * partition if there are some other masters requesting it to 159062306a36Sopenharmony_ci * be enabled. 159162306a36Sopenharmony_ci * 159262306a36Sopenharmony_ci * See @ref pg_states for possible values 159362306a36Sopenharmony_ci */ 159462306a36Sopenharmony_ci uint32_t state; 159562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 159662306a36Sopenharmony_ci 159762306a36Sopenharmony_cistruct cmd_pg_get_name_response { 159862306a36Sopenharmony_ci uint8_t name[MRQ_PG_NAME_MAXLEN]; 159962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 160062306a36Sopenharmony_ci 160162306a36Sopenharmony_cistruct cmd_pg_get_max_id_response { 160262306a36Sopenharmony_ci uint32_t max_id; 160362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 160462306a36Sopenharmony_ci 160562306a36Sopenharmony_ci/** 160662306a36Sopenharmony_ci * @brief Request with #MRQ_PG 160762306a36Sopenharmony_ci * 160862306a36Sopenharmony_ci * Used by the sender of an #MRQ_PG message to control power 160962306a36Sopenharmony_ci * partitions. The pg_request is split into several sub-commands. Some 161062306a36Sopenharmony_ci * sub-commands require no additional data. Others have a sub-command 161162306a36Sopenharmony_ci * specific payload 161262306a36Sopenharmony_ci * 161362306a36Sopenharmony_ci * |sub-command |payload | 161462306a36Sopenharmony_ci * |----------------------------|-----------------------| 161562306a36Sopenharmony_ci * |CMD_PG_QUERY_ABI | query_abi | 161662306a36Sopenharmony_ci * |CMD_PG_SET_STATE | set_state | 161762306a36Sopenharmony_ci * |CMD_PG_GET_STATE | - | 161862306a36Sopenharmony_ci * |CMD_PG_GET_NAME | - | 161962306a36Sopenharmony_ci * |CMD_PG_GET_MAX_ID | - | 162062306a36Sopenharmony_ci * 162162306a36Sopenharmony_ci */ 162262306a36Sopenharmony_cistruct mrq_pg_request { 162362306a36Sopenharmony_ci uint32_t cmd; 162462306a36Sopenharmony_ci uint32_t id; 162562306a36Sopenharmony_ci union { 162662306a36Sopenharmony_ci struct cmd_pg_query_abi_request query_abi; 162762306a36Sopenharmony_ci struct cmd_pg_set_state_request set_state; 162862306a36Sopenharmony_ci } BPMP_UNION_ANON; 162962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 163062306a36Sopenharmony_ci 163162306a36Sopenharmony_ci/** 163262306a36Sopenharmony_ci * @brief Response to MRQ_PG 163362306a36Sopenharmony_ci * 163462306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_pg_request may return 163562306a36Sopenharmony_ci * sub-command-specific data. Some do and some do not as indicated in 163662306a36Sopenharmony_ci * the following table 163762306a36Sopenharmony_ci * 163862306a36Sopenharmony_ci * |sub-command |payload | 163962306a36Sopenharmony_ci * |----------------------------|-----------------------| 164062306a36Sopenharmony_ci * |CMD_PG_QUERY_ABI | - | 164162306a36Sopenharmony_ci * |CMD_PG_SET_STATE | - | 164262306a36Sopenharmony_ci * |CMD_PG_GET_STATE | get_state | 164362306a36Sopenharmony_ci * |CMD_PG_GET_NAME | get_name | 164462306a36Sopenharmony_ci * |CMD_PG_GET_MAX_ID | get_max_id | 164562306a36Sopenharmony_ci */ 164662306a36Sopenharmony_cistruct mrq_pg_response { 164762306a36Sopenharmony_ci union { 164862306a36Sopenharmony_ci struct cmd_pg_get_state_response get_state; 164962306a36Sopenharmony_ci struct cmd_pg_get_name_response get_name; 165062306a36Sopenharmony_ci struct cmd_pg_get_max_id_response get_max_id; 165162306a36Sopenharmony_ci } BPMP_UNION_ANON; 165262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 165362306a36Sopenharmony_ci 165462306a36Sopenharmony_ci/** @} Powergating */ 165562306a36Sopenharmony_ci 165662306a36Sopenharmony_ci/** 165762306a36Sopenharmony_ci * @ingroup MRQ_Codes 165862306a36Sopenharmony_ci * @def MRQ_THERMAL 165962306a36Sopenharmony_ci * @brief Interact with BPMP thermal framework 166062306a36Sopenharmony_ci * 166162306a36Sopenharmony_ci * * Platforms: T186, T194 166262306a36Sopenharmony_ci * * Initiators: Any 166362306a36Sopenharmony_ci * * Targets: Any 166462306a36Sopenharmony_ci * * Request Payload: TODO 166562306a36Sopenharmony_ci * * Response Payload: TODO 166662306a36Sopenharmony_ci * 166762306a36Sopenharmony_ci * @addtogroup Thermal 166862306a36Sopenharmony_ci * 166962306a36Sopenharmony_ci * The BPMP firmware includes a thermal framework. Drivers within the 167062306a36Sopenharmony_ci * bpmp firmware register with the framework to provide thermal 167162306a36Sopenharmony_ci * zones. Each thermal zone corresponds to an entity whose temperature 167262306a36Sopenharmony_ci * can be measured. The framework also has a notion of trip points. A 167362306a36Sopenharmony_ci * trip point consists of a thermal zone id, a temperature, and a 167462306a36Sopenharmony_ci * callback routine. The framework invokes the callback when the zone 167562306a36Sopenharmony_ci * hits the indicated temperature. The BPMP firmware uses this thermal 167662306a36Sopenharmony_ci * framework interally to implement various temperature-dependent 167762306a36Sopenharmony_ci * functions. 167862306a36Sopenharmony_ci * 167962306a36Sopenharmony_ci * Software on the CPU can use #MRQ_THERMAL (with payload @ref 168062306a36Sopenharmony_ci * mrq_thermal_host_to_bpmp_request) to interact with the BPMP thermal 168162306a36Sopenharmony_ci * framework. The CPU must It can query the number of supported zones, 168262306a36Sopenharmony_ci * query zone temperatures, and set trip points. 168362306a36Sopenharmony_ci * 168462306a36Sopenharmony_ci * When a trip point set by the CPU gets crossed, BPMP firmware issues 168562306a36Sopenharmony_ci * an IPC to the CPU having mrq_request::mrq = #MRQ_THERMAL and a 168662306a36Sopenharmony_ci * payload of @ref mrq_thermal_bpmp_to_host_request. 168762306a36Sopenharmony_ci * @{ 168862306a36Sopenharmony_ci */ 168962306a36Sopenharmony_cienum mrq_thermal_host_to_bpmp_cmd { 169062306a36Sopenharmony_ci /** 169162306a36Sopenharmony_ci * @brief Check whether the BPMP driver supports the specified 169262306a36Sopenharmony_ci * request type. 169362306a36Sopenharmony_ci * 169462306a36Sopenharmony_ci * Host needs to supply request parameters. 169562306a36Sopenharmony_ci * 169662306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 169762306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 169862306a36Sopenharmony_ci */ 169962306a36Sopenharmony_ci CMD_THERMAL_QUERY_ABI = 0, 170062306a36Sopenharmony_ci 170162306a36Sopenharmony_ci /** 170262306a36Sopenharmony_ci * @brief Get the current temperature of the specified zone. 170362306a36Sopenharmony_ci * 170462306a36Sopenharmony_ci * Host needs to supply request parameters. 170562306a36Sopenharmony_ci * 170662306a36Sopenharmony_ci * mrq_response::err is 170762306a36Sopenharmony_ci * * 0: Temperature query succeeded. 170862306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 170962306a36Sopenharmony_ci * * -#BPMP_ENOENT: No driver registered for thermal zone.. 171062306a36Sopenharmony_ci * * -#BPMP_EFAULT: Problem reading temperature measurement. 171162306a36Sopenharmony_ci */ 171262306a36Sopenharmony_ci CMD_THERMAL_GET_TEMP = 1, 171362306a36Sopenharmony_ci 171462306a36Sopenharmony_ci /** 171562306a36Sopenharmony_ci * @brief Enable or disable and set the lower and upper 171662306a36Sopenharmony_ci * thermal limits for a thermal trip point. Each zone has 171762306a36Sopenharmony_ci * one trip point. 171862306a36Sopenharmony_ci * 171962306a36Sopenharmony_ci * Host needs to supply request parameters. Once the 172062306a36Sopenharmony_ci * temperature hits a trip point, the BPMP will send a message 172162306a36Sopenharmony_ci * to the CPU having MRQ=MRQ_THERMAL and 172262306a36Sopenharmony_ci * type=CMD_THERMAL_HOST_TRIP_REACHED 172362306a36Sopenharmony_ci * 172462306a36Sopenharmony_ci * mrq_response::err is 172562306a36Sopenharmony_ci * * 0: Trip successfully set. 172662306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 172762306a36Sopenharmony_ci * * -#BPMP_ENOENT: No driver registered for thermal zone. 172862306a36Sopenharmony_ci * * -#BPMP_EFAULT: Problem setting trip point. 172962306a36Sopenharmony_ci */ 173062306a36Sopenharmony_ci CMD_THERMAL_SET_TRIP = 2, 173162306a36Sopenharmony_ci 173262306a36Sopenharmony_ci /** 173362306a36Sopenharmony_ci * @brief Get the number of supported thermal zones. 173462306a36Sopenharmony_ci * 173562306a36Sopenharmony_ci * No request parameters required. 173662306a36Sopenharmony_ci * 173762306a36Sopenharmony_ci * mrq_response::err is always 0, indicating success. 173862306a36Sopenharmony_ci */ 173962306a36Sopenharmony_ci CMD_THERMAL_GET_NUM_ZONES = 3, 174062306a36Sopenharmony_ci 174162306a36Sopenharmony_ci /** 174262306a36Sopenharmony_ci * @brief Get the thermtrip of the specified zone. 174362306a36Sopenharmony_ci * 174462306a36Sopenharmony_ci * Host needs to supply request parameters. 174562306a36Sopenharmony_ci * 174662306a36Sopenharmony_ci * mrq_response::err is 174762306a36Sopenharmony_ci * * 0: Valid zone information returned. 174862306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 174962306a36Sopenharmony_ci * * -#BPMP_ENOENT: No driver registered for thermal zone. 175062306a36Sopenharmony_ci * * -#BPMP_ERANGE if thermtrip is invalid or disabled. 175162306a36Sopenharmony_ci * * -#BPMP_EFAULT: Problem reading zone information. 175262306a36Sopenharmony_ci */ 175362306a36Sopenharmony_ci CMD_THERMAL_GET_THERMTRIP = 4, 175462306a36Sopenharmony_ci 175562306a36Sopenharmony_ci /** @brief: number of supported host-to-bpmp commands. May 175662306a36Sopenharmony_ci * increase in future 175762306a36Sopenharmony_ci */ 175862306a36Sopenharmony_ci CMD_THERMAL_HOST_TO_BPMP_NUM 175962306a36Sopenharmony_ci}; 176062306a36Sopenharmony_ci 176162306a36Sopenharmony_cienum mrq_thermal_bpmp_to_host_cmd { 176262306a36Sopenharmony_ci /** 176362306a36Sopenharmony_ci * @brief Indication that the temperature for a zone has 176462306a36Sopenharmony_ci * exceeded the range indicated in the thermal trip point 176562306a36Sopenharmony_ci * for the zone. 176662306a36Sopenharmony_ci * 176762306a36Sopenharmony_ci * BPMP needs to supply request parameters. Host only needs to 176862306a36Sopenharmony_ci * acknowledge. 176962306a36Sopenharmony_ci */ 177062306a36Sopenharmony_ci CMD_THERMAL_HOST_TRIP_REACHED = 100, 177162306a36Sopenharmony_ci 177262306a36Sopenharmony_ci /** @brief: number of supported bpmp-to-host commands. May 177362306a36Sopenharmony_ci * increase in future 177462306a36Sopenharmony_ci */ 177562306a36Sopenharmony_ci CMD_THERMAL_BPMP_TO_HOST_NUM 177662306a36Sopenharmony_ci}; 177762306a36Sopenharmony_ci 177862306a36Sopenharmony_ci/* 177962306a36Sopenharmony_ci * Host->BPMP request data for request type CMD_THERMAL_QUERY_ABI 178062306a36Sopenharmony_ci * 178162306a36Sopenharmony_ci * zone: Request type for which to check existence. 178262306a36Sopenharmony_ci */ 178362306a36Sopenharmony_cistruct cmd_thermal_query_abi_request { 178462306a36Sopenharmony_ci uint32_t type; 178562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 178662306a36Sopenharmony_ci 178762306a36Sopenharmony_ci/* 178862306a36Sopenharmony_ci * Host->BPMP request data for request type CMD_THERMAL_GET_TEMP 178962306a36Sopenharmony_ci * 179062306a36Sopenharmony_ci * zone: Number of thermal zone. 179162306a36Sopenharmony_ci */ 179262306a36Sopenharmony_cistruct cmd_thermal_get_temp_request { 179362306a36Sopenharmony_ci uint32_t zone; 179462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 179562306a36Sopenharmony_ci 179662306a36Sopenharmony_ci/* 179762306a36Sopenharmony_ci * BPMP->Host reply data for request CMD_THERMAL_GET_TEMP 179862306a36Sopenharmony_ci * 179962306a36Sopenharmony_ci * error: 0 if request succeeded. 180062306a36Sopenharmony_ci * -BPMP_EINVAL if request parameters were invalid. 180162306a36Sopenharmony_ci * -BPMP_ENOENT if no driver was registered for the specified thermal zone. 180262306a36Sopenharmony_ci * -BPMP_EFAULT for other thermal zone driver errors. 180362306a36Sopenharmony_ci * temp: Current temperature in millicelsius. 180462306a36Sopenharmony_ci */ 180562306a36Sopenharmony_cistruct cmd_thermal_get_temp_response { 180662306a36Sopenharmony_ci int32_t temp; 180762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 180862306a36Sopenharmony_ci 180962306a36Sopenharmony_ci/* 181062306a36Sopenharmony_ci * Host->BPMP request data for request type CMD_THERMAL_SET_TRIP 181162306a36Sopenharmony_ci * 181262306a36Sopenharmony_ci * zone: Number of thermal zone. 181362306a36Sopenharmony_ci * low: Temperature of lower trip point in millicelsius 181462306a36Sopenharmony_ci * high: Temperature of upper trip point in millicelsius 181562306a36Sopenharmony_ci * enabled: 1 to enable trip point, 0 to disable trip point 181662306a36Sopenharmony_ci */ 181762306a36Sopenharmony_cistruct cmd_thermal_set_trip_request { 181862306a36Sopenharmony_ci uint32_t zone; 181962306a36Sopenharmony_ci int32_t low; 182062306a36Sopenharmony_ci int32_t high; 182162306a36Sopenharmony_ci uint32_t enabled; 182262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 182362306a36Sopenharmony_ci 182462306a36Sopenharmony_ci/* 182562306a36Sopenharmony_ci * BPMP->Host request data for request type CMD_THERMAL_HOST_TRIP_REACHED 182662306a36Sopenharmony_ci * 182762306a36Sopenharmony_ci * zone: Number of thermal zone where trip point was reached. 182862306a36Sopenharmony_ci */ 182962306a36Sopenharmony_cistruct cmd_thermal_host_trip_reached_request { 183062306a36Sopenharmony_ci uint32_t zone; 183162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 183262306a36Sopenharmony_ci 183362306a36Sopenharmony_ci/* 183462306a36Sopenharmony_ci * BPMP->Host reply data for request type CMD_THERMAL_GET_NUM_ZONES 183562306a36Sopenharmony_ci * 183662306a36Sopenharmony_ci * num: Number of supported thermal zones. The thermal zones are indexed 183762306a36Sopenharmony_ci * starting from zero. 183862306a36Sopenharmony_ci */ 183962306a36Sopenharmony_cistruct cmd_thermal_get_num_zones_response { 184062306a36Sopenharmony_ci uint32_t num; 184162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 184262306a36Sopenharmony_ci 184362306a36Sopenharmony_ci/* 184462306a36Sopenharmony_ci * Host->BPMP request data for request type CMD_THERMAL_GET_THERMTRIP 184562306a36Sopenharmony_ci * 184662306a36Sopenharmony_ci * zone: Number of thermal zone. 184762306a36Sopenharmony_ci */ 184862306a36Sopenharmony_cistruct cmd_thermal_get_thermtrip_request { 184962306a36Sopenharmony_ci uint32_t zone; 185062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 185162306a36Sopenharmony_ci 185262306a36Sopenharmony_ci/* 185362306a36Sopenharmony_ci * BPMP->Host reply data for request CMD_THERMAL_GET_THERMTRIP 185462306a36Sopenharmony_ci * 185562306a36Sopenharmony_ci * thermtrip: HW shutdown temperature in millicelsius. 185662306a36Sopenharmony_ci */ 185762306a36Sopenharmony_cistruct cmd_thermal_get_thermtrip_response { 185862306a36Sopenharmony_ci int32_t thermtrip; 185962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 186062306a36Sopenharmony_ci 186162306a36Sopenharmony_ci/* 186262306a36Sopenharmony_ci * Host->BPMP request data. 186362306a36Sopenharmony_ci * 186462306a36Sopenharmony_ci * Reply type is union mrq_thermal_bpmp_to_host_response. 186562306a36Sopenharmony_ci * 186662306a36Sopenharmony_ci * type: Type of request. Values listed in enum mrq_thermal_type. 186762306a36Sopenharmony_ci * data: Request type specific parameters. 186862306a36Sopenharmony_ci */ 186962306a36Sopenharmony_cistruct mrq_thermal_host_to_bpmp_request { 187062306a36Sopenharmony_ci uint32_t type; 187162306a36Sopenharmony_ci union { 187262306a36Sopenharmony_ci struct cmd_thermal_query_abi_request query_abi; 187362306a36Sopenharmony_ci struct cmd_thermal_get_temp_request get_temp; 187462306a36Sopenharmony_ci struct cmd_thermal_set_trip_request set_trip; 187562306a36Sopenharmony_ci struct cmd_thermal_get_thermtrip_request get_thermtrip; 187662306a36Sopenharmony_ci } BPMP_UNION_ANON; 187762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 187862306a36Sopenharmony_ci 187962306a36Sopenharmony_ci/* 188062306a36Sopenharmony_ci * BPMP->Host request data. 188162306a36Sopenharmony_ci * 188262306a36Sopenharmony_ci * type: Type of request. Values listed in enum mrq_thermal_type. 188362306a36Sopenharmony_ci * data: Request type specific parameters. 188462306a36Sopenharmony_ci */ 188562306a36Sopenharmony_cistruct mrq_thermal_bpmp_to_host_request { 188662306a36Sopenharmony_ci uint32_t type; 188762306a36Sopenharmony_ci union { 188862306a36Sopenharmony_ci struct cmd_thermal_host_trip_reached_request host_trip_reached; 188962306a36Sopenharmony_ci } BPMP_UNION_ANON; 189062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 189162306a36Sopenharmony_ci 189262306a36Sopenharmony_ci/* 189362306a36Sopenharmony_ci * Data in reply to a Host->BPMP request. 189462306a36Sopenharmony_ci */ 189562306a36Sopenharmony_ciunion mrq_thermal_bpmp_to_host_response { 189662306a36Sopenharmony_ci struct cmd_thermal_get_temp_response get_temp; 189762306a36Sopenharmony_ci struct cmd_thermal_get_thermtrip_response get_thermtrip; 189862306a36Sopenharmony_ci struct cmd_thermal_get_num_zones_response get_num_zones; 189962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 190062306a36Sopenharmony_ci 190162306a36Sopenharmony_ci/** @} Thermal */ 190262306a36Sopenharmony_ci 190362306a36Sopenharmony_ci/** 190462306a36Sopenharmony_ci * @ingroup MRQ_Codes 190562306a36Sopenharmony_ci * @def MRQ_OC_STATUS 190662306a36Sopenharmony_ci * @brief Query over current status 190762306a36Sopenharmony_ci * 190862306a36Sopenharmony_ci * * Platforms: T234 190962306a36Sopenharmony_ci * @cond bpmp_t234 191062306a36Sopenharmony_ci * * Initiators: CCPLEX 191162306a36Sopenharmony_ci * * Targets: BPMP 191262306a36Sopenharmony_ci * * Request Payload: N/A 191362306a36Sopenharmony_ci * * Response Payload: @ref mrq_oc_status_response 191462306a36Sopenharmony_ci * 191562306a36Sopenharmony_ci * @addtogroup OC_status 191662306a36Sopenharmony_ci * @{ 191762306a36Sopenharmony_ci */ 191862306a36Sopenharmony_ci 191962306a36Sopenharmony_ci#define OC_STATUS_MAX_SIZE 24U 192062306a36Sopenharmony_ci 192162306a36Sopenharmony_ci/* 192262306a36Sopenharmony_ci * @brief Response to #MRQ_OC_STATUS 192362306a36Sopenharmony_ci * 192462306a36Sopenharmony_ci * throt_en: Value for each OC alarm where zero signifies throttle is 192562306a36Sopenharmony_ci * disabled, and non-zero throttle is enabled. 192662306a36Sopenharmony_ci * event_cnt: Total number of OC events for each OC alarm. 192762306a36Sopenharmony_ci * 192862306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful and 192962306a36Sopenharmony_ci * -#BPMP_ENODEV otherwise. 193062306a36Sopenharmony_ci */ 193162306a36Sopenharmony_cistruct mrq_oc_status_response { 193262306a36Sopenharmony_ci uint8_t throt_en[OC_STATUS_MAX_SIZE]; 193362306a36Sopenharmony_ci uint32_t event_cnt[OC_STATUS_MAX_SIZE]; 193462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 193562306a36Sopenharmony_ci 193662306a36Sopenharmony_ci/** @} OC_status */ 193762306a36Sopenharmony_ci/** @endcond bpmp_t234 */ 193862306a36Sopenharmony_ci 193962306a36Sopenharmony_ci/** 194062306a36Sopenharmony_ci * @ingroup MRQ_Codes 194162306a36Sopenharmony_ci * @def MRQ_CPU_VHINT 194262306a36Sopenharmony_ci * @brief Query CPU voltage hint data 194362306a36Sopenharmony_ci * 194462306a36Sopenharmony_ci * * Platforms: T186 194562306a36Sopenharmony_ci * @cond bpmp_t186 194662306a36Sopenharmony_ci * * Initiators: CCPLEX 194762306a36Sopenharmony_ci * * Targets: BPMP 194862306a36Sopenharmony_ci * * Request Payload: @ref mrq_cpu_vhint_request 194962306a36Sopenharmony_ci * * Response Payload: N/A 195062306a36Sopenharmony_ci * 195162306a36Sopenharmony_ci * @addtogroup Vhint 195262306a36Sopenharmony_ci * @{ 195362306a36Sopenharmony_ci */ 195462306a36Sopenharmony_ci 195562306a36Sopenharmony_ci/** 195662306a36Sopenharmony_ci * @brief Request with #MRQ_CPU_VHINT 195762306a36Sopenharmony_ci * 195862306a36Sopenharmony_ci * Used by #MRQ_CPU_VHINT call by CCPLEX to retrieve voltage hint data 195962306a36Sopenharmony_ci * from BPMP to memory space pointed by #addr. CCPLEX is responsible 196062306a36Sopenharmony_ci * to allocate sizeof(cpu_vhint_data) sized block of memory and 196162306a36Sopenharmony_ci * appropriately map it for BPMP before sending the request. 196262306a36Sopenharmony_ci */ 196362306a36Sopenharmony_cistruct mrq_cpu_vhint_request { 196462306a36Sopenharmony_ci /** @brief IOVA address for the #cpu_vhint_data */ 196562306a36Sopenharmony_ci uint32_t addr; 196662306a36Sopenharmony_ci /** @brief ID of the cluster whose data is requested */ 196762306a36Sopenharmony_ci uint32_t cluster_id; 196862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 196962306a36Sopenharmony_ci 197062306a36Sopenharmony_ci/** 197162306a36Sopenharmony_ci * @brief Description of the CPU v/f relation 197262306a36Sopenharmony_ci * 197362306a36Sopenharmony_ci * Used by #MRQ_CPU_VHINT call to carry data pointed by 197462306a36Sopenharmony_ci * #mrq_cpu_vhint_request::addr 197562306a36Sopenharmony_ci */ 197662306a36Sopenharmony_cistruct cpu_vhint_data { 197762306a36Sopenharmony_ci uint32_t ref_clk_hz; /**< reference frequency in Hz */ 197862306a36Sopenharmony_ci uint16_t pdiv; /**< post divider value */ 197962306a36Sopenharmony_ci uint16_t mdiv; /**< input divider value */ 198062306a36Sopenharmony_ci uint16_t ndiv_max; /**< fMAX expressed with max NDIV value */ 198162306a36Sopenharmony_ci /** table of ndiv values as a function of vINDEX (voltage index) */ 198262306a36Sopenharmony_ci uint16_t ndiv[80]; 198362306a36Sopenharmony_ci /** minimum allowed NDIV value */ 198462306a36Sopenharmony_ci uint16_t ndiv_min; 198562306a36Sopenharmony_ci /** minimum allowed voltage hint value (as in vINDEX) */ 198662306a36Sopenharmony_ci uint16_t vfloor; 198762306a36Sopenharmony_ci /** maximum allowed voltage hint value (as in vINDEX) */ 198862306a36Sopenharmony_ci uint16_t vceil; 198962306a36Sopenharmony_ci /** post-multiplier for vindex value */ 199062306a36Sopenharmony_ci uint16_t vindex_mult; 199162306a36Sopenharmony_ci /** post-divider for vindex value */ 199262306a36Sopenharmony_ci uint16_t vindex_div; 199362306a36Sopenharmony_ci /** reserved for future use */ 199462306a36Sopenharmony_ci uint16_t reserved[328]; 199562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 199662306a36Sopenharmony_ci 199762306a36Sopenharmony_ci/** @} Vhint */ 199862306a36Sopenharmony_ci/** @endcond bpmp_t186 */ 199962306a36Sopenharmony_ci 200062306a36Sopenharmony_ci/** 200162306a36Sopenharmony_ci * @ingroup MRQ_Codes 200262306a36Sopenharmony_ci * @def MRQ_ABI_RATCHET 200362306a36Sopenharmony_ci * @brief ABI ratchet value query 200462306a36Sopenharmony_ci * 200562306a36Sopenharmony_ci * * Platforms: T186, T194 200662306a36Sopenharmony_ci * * Initiators: Any 200762306a36Sopenharmony_ci * * Targets: BPMP 200862306a36Sopenharmony_ci * * Request Payload: @ref mrq_abi_ratchet_request 200962306a36Sopenharmony_ci * * Response Payload: @ref mrq_abi_ratchet_response 201062306a36Sopenharmony_ci * @addtogroup ABI_info 201162306a36Sopenharmony_ci * @{ 201262306a36Sopenharmony_ci */ 201362306a36Sopenharmony_ci 201462306a36Sopenharmony_ci/** 201562306a36Sopenharmony_ci * @brief An ABI compatibility mechanism 201662306a36Sopenharmony_ci * 201762306a36Sopenharmony_ci * BPMP_ABI_RATCHET_VALUE may increase for various reasons in a future 201862306a36Sopenharmony_ci * revision of this header file. 201962306a36Sopenharmony_ci * 1. That future revision deprecates some MRQ 202062306a36Sopenharmony_ci * 2. That future revision introduces a breaking change to an existing 202162306a36Sopenharmony_ci * MRQ or 202262306a36Sopenharmony_ci * 3. A bug is discovered in an existing implementation of the BPMP-FW 202362306a36Sopenharmony_ci * (or possibly one of its clients) which warrants deprecating that 202462306a36Sopenharmony_ci * implementation. 202562306a36Sopenharmony_ci */ 202662306a36Sopenharmony_ci#define BPMP_ABI_RATCHET_VALUE 3 202762306a36Sopenharmony_ci 202862306a36Sopenharmony_ci/** 202962306a36Sopenharmony_ci * @brief Request with #MRQ_ABI_RATCHET. 203062306a36Sopenharmony_ci * 203162306a36Sopenharmony_ci * #ratchet should be #BPMP_ABI_RATCHET_VALUE from the ABI header 203262306a36Sopenharmony_ci * against which the requester was compiled. 203362306a36Sopenharmony_ci * 203462306a36Sopenharmony_ci * If ratchet is less than BPMP's #BPMP_ABI_RATCHET_VALUE, BPMP may 203562306a36Sopenharmony_ci * reply with mrq_response::err = -#BPMP_ERANGE to indicate that 203662306a36Sopenharmony_ci * BPMP-FW cannot interoperate correctly with the requester. Requester 203762306a36Sopenharmony_ci * should cease further communication with BPMP. 203862306a36Sopenharmony_ci * 203962306a36Sopenharmony_ci * Otherwise, err shall be 0. 204062306a36Sopenharmony_ci */ 204162306a36Sopenharmony_cistruct mrq_abi_ratchet_request { 204262306a36Sopenharmony_ci /** @brief Requester's ratchet value */ 204362306a36Sopenharmony_ci uint16_t ratchet; 204462306a36Sopenharmony_ci}; 204562306a36Sopenharmony_ci 204662306a36Sopenharmony_ci/** 204762306a36Sopenharmony_ci * @brief Response to #MRQ_ABI_RATCHET 204862306a36Sopenharmony_ci * 204962306a36Sopenharmony_ci * #ratchet shall be #BPMP_ABI_RATCHET_VALUE from the ABI header 205062306a36Sopenharmony_ci * against which BPMP firwmare was compiled. 205162306a36Sopenharmony_ci * 205262306a36Sopenharmony_ci * If #ratchet is less than the requester's #BPMP_ABI_RATCHET_VALUE, 205362306a36Sopenharmony_ci * the requster must either interoperate with BPMP according to an ABI 205462306a36Sopenharmony_ci * header version with BPMP_ABI_RATCHET_VALUE = ratchet or cease 205562306a36Sopenharmony_ci * communication with BPMP. 205662306a36Sopenharmony_ci * 205762306a36Sopenharmony_ci * If mrq_response::err is 0 and ratchet is greater than or equal to the 205862306a36Sopenharmony_ci * requester's BPMP_ABI_RATCHET_VALUE, the requester should continue 205962306a36Sopenharmony_ci * normal operation. 206062306a36Sopenharmony_ci */ 206162306a36Sopenharmony_cistruct mrq_abi_ratchet_response { 206262306a36Sopenharmony_ci /** @brief BPMP's ratchet value */ 206362306a36Sopenharmony_ci uint16_t ratchet; 206462306a36Sopenharmony_ci}; 206562306a36Sopenharmony_ci 206662306a36Sopenharmony_ci/** @} ABI_info */ 206762306a36Sopenharmony_ci 206862306a36Sopenharmony_ci/** 206962306a36Sopenharmony_ci * @ingroup MRQ_Codes 207062306a36Sopenharmony_ci * @def MRQ_EMC_DVFS_LATENCY 207162306a36Sopenharmony_ci * @brief Query frequency dependent EMC DVFS latency 207262306a36Sopenharmony_ci * 207362306a36Sopenharmony_ci * * Platforms: T186, T194, T234 207462306a36Sopenharmony_ci * * Initiators: CCPLEX 207562306a36Sopenharmony_ci * * Targets: BPMP 207662306a36Sopenharmony_ci * * Request Payload: N/A 207762306a36Sopenharmony_ci * * Response Payload: @ref mrq_emc_dvfs_latency_response 207862306a36Sopenharmony_ci * @addtogroup EMC 207962306a36Sopenharmony_ci * @{ 208062306a36Sopenharmony_ci */ 208162306a36Sopenharmony_ci 208262306a36Sopenharmony_ci/** 208362306a36Sopenharmony_ci * @brief Used by @ref mrq_emc_dvfs_latency_response 208462306a36Sopenharmony_ci */ 208562306a36Sopenharmony_cistruct emc_dvfs_latency { 208662306a36Sopenharmony_ci /** @brief EMC DVFS node frequency in kHz */ 208762306a36Sopenharmony_ci uint32_t freq; 208862306a36Sopenharmony_ci /** @brief EMC DVFS latency in nanoseconds */ 208962306a36Sopenharmony_ci uint32_t latency; 209062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 209162306a36Sopenharmony_ci 209262306a36Sopenharmony_ci#define EMC_DVFS_LATENCY_MAX_SIZE 14 209362306a36Sopenharmony_ci/** 209462306a36Sopenharmony_ci * @brief Response to #MRQ_EMC_DVFS_LATENCY 209562306a36Sopenharmony_ci */ 209662306a36Sopenharmony_cistruct mrq_emc_dvfs_latency_response { 209762306a36Sopenharmony_ci /** @brief The number valid entries in #pairs */ 209862306a36Sopenharmony_ci uint32_t num_pairs; 209962306a36Sopenharmony_ci /** @brief EMC DVFS node <frequency, latency> information */ 210062306a36Sopenharmony_ci struct emc_dvfs_latency pairs[EMC_DVFS_LATENCY_MAX_SIZE]; 210162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 210262306a36Sopenharmony_ci 210362306a36Sopenharmony_ci/** @} EMC */ 210462306a36Sopenharmony_ci 210562306a36Sopenharmony_ci/** 210662306a36Sopenharmony_ci * @ingroup MRQ_Codes 210762306a36Sopenharmony_ci * @def MRQ_EMC_DVFS_EMCHUB 210862306a36Sopenharmony_ci * @brief Query EMC HUB frequencies 210962306a36Sopenharmony_ci * 211062306a36Sopenharmony_ci * * Platforms: T234 onwards 211162306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_th500) 211262306a36Sopenharmony_ci * * Initiators: CCPLEX 211362306a36Sopenharmony_ci * * Targets: BPMP 211462306a36Sopenharmony_ci * * Request Payload: N/A 211562306a36Sopenharmony_ci * * Response Payload: @ref mrq_emc_dvfs_emchub_response 211662306a36Sopenharmony_ci * @addtogroup EMC 211762306a36Sopenharmony_ci * @{ 211862306a36Sopenharmony_ci */ 211962306a36Sopenharmony_ci 212062306a36Sopenharmony_ci/** 212162306a36Sopenharmony_ci * @brief Used by @ref mrq_emc_dvfs_emchub_response 212262306a36Sopenharmony_ci */ 212362306a36Sopenharmony_cistruct emc_dvfs_emchub { 212462306a36Sopenharmony_ci /** @brief EMC DVFS node frequency in kHz */ 212562306a36Sopenharmony_ci uint32_t freq; 212662306a36Sopenharmony_ci /** @brief EMC HUB frequency in kHz */ 212762306a36Sopenharmony_ci uint32_t hub_freq; 212862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 212962306a36Sopenharmony_ci 213062306a36Sopenharmony_ci#define EMC_DVFS_EMCHUB_MAX_SIZE EMC_DVFS_LATENCY_MAX_SIZE 213162306a36Sopenharmony_ci/** 213262306a36Sopenharmony_ci * @brief Response to #MRQ_EMC_DVFS_EMCHUB 213362306a36Sopenharmony_ci */ 213462306a36Sopenharmony_cistruct mrq_emc_dvfs_emchub_response { 213562306a36Sopenharmony_ci /** @brief The number valid entries in #pairs */ 213662306a36Sopenharmony_ci uint32_t num_pairs; 213762306a36Sopenharmony_ci /** @brief EMC DVFS node <frequency, hub frequency> information */ 213862306a36Sopenharmony_ci struct emc_dvfs_emchub pairs[EMC_DVFS_EMCHUB_MAX_SIZE]; 213962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 214062306a36Sopenharmony_ci 214162306a36Sopenharmony_ci/** @} EMC */ 214262306a36Sopenharmony_ci/** @endcond (bpmp_t234 || bpmp_t239 || bpmp_th500) */ 214362306a36Sopenharmony_ci 214462306a36Sopenharmony_ci/** 214562306a36Sopenharmony_ci * @ingroup MRQ_Codes 214662306a36Sopenharmony_ci * @def MRQ_EMC_DISP_RFL 214762306a36Sopenharmony_ci * @brief Set EMC display RFL handshake mode of operations 214862306a36Sopenharmony_ci * 214962306a36Sopenharmony_ci * * Platforms: T234 onwards 215062306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_th500) 215162306a36Sopenharmony_ci * * Initiators: CCPLEX 215262306a36Sopenharmony_ci * * Targets: BPMP 215362306a36Sopenharmony_ci * * Request Payload: @ref mrq_emc_disp_rfl_request 215462306a36Sopenharmony_ci * * Response Payload: N/A 215562306a36Sopenharmony_ci * 215662306a36Sopenharmony_ci * @addtogroup EMC 215762306a36Sopenharmony_ci * @{ 215862306a36Sopenharmony_ci */ 215962306a36Sopenharmony_ci 216062306a36Sopenharmony_cienum mrq_emc_disp_rfl_mode { 216162306a36Sopenharmony_ci /** @brief EMC display RFL handshake disabled */ 216262306a36Sopenharmony_ci EMC_DISP_RFL_MODE_DISABLED = 0, 216362306a36Sopenharmony_ci /** @brief EMC display RFL handshake enabled */ 216462306a36Sopenharmony_ci EMC_DISP_RFL_MODE_ENABLED = 1, 216562306a36Sopenharmony_ci}; 216662306a36Sopenharmony_ci 216762306a36Sopenharmony_ci/** 216862306a36Sopenharmony_ci * @ingroup EMC 216962306a36Sopenharmony_ci * @brief Request with #MRQ_EMC_DISP_RFL 217062306a36Sopenharmony_ci * 217162306a36Sopenharmony_ci * Used by the sender of an #MRQ_EMC_DISP_RFL message to 217262306a36Sopenharmony_ci * request the mode of EMC display RFL handshake. 217362306a36Sopenharmony_ci * 217462306a36Sopenharmony_ci * mrq_response::err is 217562306a36Sopenharmony_ci * * 0: RFL mode is set successfully 217662306a36Sopenharmony_ci * * -#BPMP_EINVAL: invalid mode requested 217762306a36Sopenharmony_ci * * -#BPMP_ENOSYS: RFL handshake is not supported 217862306a36Sopenharmony_ci * * -#BPMP_EACCES: Permission denied 217962306a36Sopenharmony_ci * * -#BPMP_ENODEV: if disp rfl mrq is not supported by BPMP-FW 218062306a36Sopenharmony_ci */ 218162306a36Sopenharmony_cistruct mrq_emc_disp_rfl_request { 218262306a36Sopenharmony_ci /** @brief EMC display RFL mode (@ref mrq_emc_disp_rfl_mode) */ 218362306a36Sopenharmony_ci uint32_t mode; 218462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 218562306a36Sopenharmony_ci 218662306a36Sopenharmony_ci/** @} EMC */ 218762306a36Sopenharmony_ci/** @endcond (bpmp_t234 || bpmp_t239 || bpmp_th500) */ 218862306a36Sopenharmony_ci 218962306a36Sopenharmony_ci/** 219062306a36Sopenharmony_ci * @ingroup MRQ_Codes 219162306a36Sopenharmony_ci * @def MRQ_BWMGR 219262306a36Sopenharmony_ci * @brief bwmgr requests 219362306a36Sopenharmony_ci * 219462306a36Sopenharmony_ci * * Platforms: T234 onwards 219562306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_th500) 219662306a36Sopenharmony_ci * * Initiators: CCPLEX 219762306a36Sopenharmony_ci * * Targets: BPMP 219862306a36Sopenharmony_ci * * Request Payload: @ref mrq_bwmgr_request 219962306a36Sopenharmony_ci * * Response Payload: @ref mrq_bwmgr_response 220062306a36Sopenharmony_ci * 220162306a36Sopenharmony_ci * @addtogroup BWMGR 220262306a36Sopenharmony_ci * 220362306a36Sopenharmony_ci * @{ 220462306a36Sopenharmony_ci */ 220562306a36Sopenharmony_ci 220662306a36Sopenharmony_cienum mrq_bwmgr_cmd { 220762306a36Sopenharmony_ci /** 220862306a36Sopenharmony_ci * @brief Check whether the BPMP driver supports the specified 220962306a36Sopenharmony_ci * request type 221062306a36Sopenharmony_ci * 221162306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 221262306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 221362306a36Sopenharmony_ci */ 221462306a36Sopenharmony_ci CMD_BWMGR_QUERY_ABI = 0, 221562306a36Sopenharmony_ci 221662306a36Sopenharmony_ci /** 221762306a36Sopenharmony_ci * @brief Determine dram rate to satisfy iso/niso bw requests 221862306a36Sopenharmony_ci * 221962306a36Sopenharmony_ci * mrq_response::err is 222062306a36Sopenharmony_ci * * 0: calc_rate succeeded. 222162306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 222262306a36Sopenharmony_ci * * -#BPMP_ENOTSUP: Requested bw is not available. 222362306a36Sopenharmony_ci */ 222462306a36Sopenharmony_ci CMD_BWMGR_CALC_RATE = 1 222562306a36Sopenharmony_ci}; 222662306a36Sopenharmony_ci 222762306a36Sopenharmony_ci/* 222862306a36Sopenharmony_ci * request data for request type CMD_BWMGR_QUERY_ABI 222962306a36Sopenharmony_ci * 223062306a36Sopenharmony_ci * type: Request type for which to check existence. 223162306a36Sopenharmony_ci */ 223262306a36Sopenharmony_cistruct cmd_bwmgr_query_abi_request { 223362306a36Sopenharmony_ci uint32_t type; 223462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 223562306a36Sopenharmony_ci 223662306a36Sopenharmony_ci/** 223762306a36Sopenharmony_ci * @brief Used by @ref cmd_bwmgr_calc_rate_request 223862306a36Sopenharmony_ci */ 223962306a36Sopenharmony_cistruct iso_req { 224062306a36Sopenharmony_ci /* @brief bwmgr client ID @ref bpmp_bwmgr_ids */ 224162306a36Sopenharmony_ci uint32_t id; 224262306a36Sopenharmony_ci /* @brief bw in kBps requested by client */ 224362306a36Sopenharmony_ci uint32_t iso_bw; 224462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 224562306a36Sopenharmony_ci 224662306a36Sopenharmony_ci#define MAX_ISO_CLIENTS 13U 224762306a36Sopenharmony_ci/* 224862306a36Sopenharmony_ci * request data for request type CMD_BWMGR_CALC_RATE 224962306a36Sopenharmony_ci */ 225062306a36Sopenharmony_cistruct cmd_bwmgr_calc_rate_request { 225162306a36Sopenharmony_ci /* @brief total bw in kBps requested by all niso clients */ 225262306a36Sopenharmony_ci uint32_t sum_niso_bw; 225362306a36Sopenharmony_ci /* @brief The number of iso clients */ 225462306a36Sopenharmony_ci uint32_t num_iso_clients; 225562306a36Sopenharmony_ci /* @brief iso_req <id, iso_bw> information */ 225662306a36Sopenharmony_ci struct iso_req isobw_reqs[MAX_ISO_CLIENTS]; 225762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 225862306a36Sopenharmony_ci 225962306a36Sopenharmony_ci/* 226062306a36Sopenharmony_ci * response data for request type CMD_BWMGR_CALC_RATE 226162306a36Sopenharmony_ci * 226262306a36Sopenharmony_ci * iso_rate_min: min dram data clk rate in kHz to satisfy all iso bw reqs 226362306a36Sopenharmony_ci * total_rate_min: min dram data clk rate in kHz to satisfy all bw reqs 226462306a36Sopenharmony_ci */ 226562306a36Sopenharmony_cistruct cmd_bwmgr_calc_rate_response { 226662306a36Sopenharmony_ci uint32_t iso_rate_min; 226762306a36Sopenharmony_ci uint32_t total_rate_min; 226862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 226962306a36Sopenharmony_ci 227062306a36Sopenharmony_ci/* 227162306a36Sopenharmony_ci * @brief Request with #MRQ_BWMGR 227262306a36Sopenharmony_ci * 227362306a36Sopenharmony_ci * 227462306a36Sopenharmony_ci * |sub-command |payload | 227562306a36Sopenharmony_ci * |----------------------------|------------------------------| 227662306a36Sopenharmony_ci * |CMD_BWMGR_QUERY_ABI | cmd_bwmgr_query_abi_request | 227762306a36Sopenharmony_ci * |CMD_BWMGR_CALC_RATE | cmd_bwmgr_calc_rate_request | 227862306a36Sopenharmony_ci * 227962306a36Sopenharmony_ci */ 228062306a36Sopenharmony_cistruct mrq_bwmgr_request { 228162306a36Sopenharmony_ci uint32_t cmd; 228262306a36Sopenharmony_ci union { 228362306a36Sopenharmony_ci struct cmd_bwmgr_query_abi_request query_abi; 228462306a36Sopenharmony_ci struct cmd_bwmgr_calc_rate_request bwmgr_rate_req; 228562306a36Sopenharmony_ci } BPMP_UNION_ANON; 228662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 228762306a36Sopenharmony_ci 228862306a36Sopenharmony_ci/* 228962306a36Sopenharmony_ci * @brief Response to MRQ_BWMGR 229062306a36Sopenharmony_ci * 229162306a36Sopenharmony_ci * |sub-command |payload | 229262306a36Sopenharmony_ci * |----------------------------|------------------------------| 229362306a36Sopenharmony_ci * |CMD_BWMGR_CALC_RATE | cmd_bwmgr_calc_rate_response | 229462306a36Sopenharmony_ci */ 229562306a36Sopenharmony_cistruct mrq_bwmgr_response { 229662306a36Sopenharmony_ci union { 229762306a36Sopenharmony_ci struct cmd_bwmgr_calc_rate_response bwmgr_rate_resp; 229862306a36Sopenharmony_ci } BPMP_UNION_ANON; 229962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 230062306a36Sopenharmony_ci 230162306a36Sopenharmony_ci/** @} BWMGR */ 230262306a36Sopenharmony_ci/** @endcond (bpmp_t234 || bpmp_t239 || bpmp_th500) */ 230362306a36Sopenharmony_ci 230462306a36Sopenharmony_ci/** 230562306a36Sopenharmony_ci * @ingroup MRQ_Codes 230662306a36Sopenharmony_ci * @def MRQ_BWMGR_INT 230762306a36Sopenharmony_ci * @brief bpmp-integrated bwmgr requests 230862306a36Sopenharmony_ci * 230962306a36Sopenharmony_ci * * Platforms: T234 onwards 231062306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_th500) 231162306a36Sopenharmony_ci * * Initiators: CCPLEX 231262306a36Sopenharmony_ci * * Targets: BPMP 231362306a36Sopenharmony_ci * * Request Payload: @ref mrq_bwmgr_int_request 231462306a36Sopenharmony_ci * * Response Payload: @ref mrq_bwmgr_int_response 231562306a36Sopenharmony_ci * 231662306a36Sopenharmony_ci * @addtogroup BWMGR_INT 231762306a36Sopenharmony_ci * @{ 231862306a36Sopenharmony_ci */ 231962306a36Sopenharmony_ci 232062306a36Sopenharmony_cienum mrq_bwmgr_int_cmd { 232162306a36Sopenharmony_ci /** 232262306a36Sopenharmony_ci * @brief Check whether the BPMP-FW supports the specified 232362306a36Sopenharmony_ci * request type 232462306a36Sopenharmony_ci * 232562306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 232662306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 232762306a36Sopenharmony_ci */ 232862306a36Sopenharmony_ci CMD_BWMGR_INT_QUERY_ABI = 1, 232962306a36Sopenharmony_ci 233062306a36Sopenharmony_ci /** 233162306a36Sopenharmony_ci * @brief Determine and set dram rate to satisfy iso/niso bw request 233262306a36Sopenharmony_ci * 233362306a36Sopenharmony_ci * mrq_response::err is 233462306a36Sopenharmony_ci * * 0: request succeeded. 233562306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 233662306a36Sopenharmony_ci * set_frequency in @ref cmd_bwmgr_int_calc_and_set_response 233762306a36Sopenharmony_ci * will not be set. 233862306a36Sopenharmony_ci * * -#BPMP_ENOTSUP: Requested bw is not available. 233962306a36Sopenharmony_ci * set_frequency in @ref cmd_bwmgr_int_calc_and_set_response 234062306a36Sopenharmony_ci * will be current dram-clk rate. 234162306a36Sopenharmony_ci */ 234262306a36Sopenharmony_ci CMD_BWMGR_INT_CALC_AND_SET = 2, 234362306a36Sopenharmony_ci 234462306a36Sopenharmony_ci /** 234562306a36Sopenharmony_ci * @brief Set a max DRAM frequency for the bandwidth-manager 234662306a36Sopenharmony_ci * 234762306a36Sopenharmony_ci * mrq_response::err is 234862306a36Sopenharmony_ci * * 0: request succeeded. 234962306a36Sopenharmony_ci * * -#BPMP_ENOTSUP: Requested cap frequency is not possible. 235062306a36Sopenharmony_ci */ 235162306a36Sopenharmony_ci CMD_BWMGR_INT_CAP_SET = 3 235262306a36Sopenharmony_ci}; 235362306a36Sopenharmony_ci 235462306a36Sopenharmony_ci/* 235562306a36Sopenharmony_ci * request structure for request type CMD_BWMGR_QUERY_ABI 235662306a36Sopenharmony_ci * 235762306a36Sopenharmony_ci * type: Request type for which to check existence. 235862306a36Sopenharmony_ci */ 235962306a36Sopenharmony_cistruct cmd_bwmgr_int_query_abi_request { 236062306a36Sopenharmony_ci /* @brief request type determined by @ref mrq_bwmgr_int_cmd */ 236162306a36Sopenharmony_ci uint32_t type; 236262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 236362306a36Sopenharmony_ci 236462306a36Sopenharmony_ci/** 236562306a36Sopenharmony_ci * @defgroup bwmgr_int_unit_type BWMGR_INT floor unit-types 236662306a36Sopenharmony_ci * @addtogroup bwmgr_int_unit_type 236762306a36Sopenharmony_ci * @{ 236862306a36Sopenharmony_ci */ 236962306a36Sopenharmony_ci/** @brief kilobytes per second unit-type */ 237062306a36Sopenharmony_ci#define BWMGR_INT_UNIT_KBPS 0U 237162306a36Sopenharmony_ci/** @brief kilohertz unit-type */ 237262306a36Sopenharmony_ci#define BWMGR_INT_UNIT_KHZ 1U 237362306a36Sopenharmony_ci 237462306a36Sopenharmony_ci/** @} bwmgr_int_unit_type */ 237562306a36Sopenharmony_ci 237662306a36Sopenharmony_ci/* 237762306a36Sopenharmony_ci * request data for request type CMD_BWMGR_INT_CALC_AND_SET 237862306a36Sopenharmony_ci */ 237962306a36Sopenharmony_cistruct cmd_bwmgr_int_calc_and_set_request { 238062306a36Sopenharmony_ci /* @brief bwmgr client ID @ref bpmp_bwmgr_ids */ 238162306a36Sopenharmony_ci uint32_t client_id; 238262306a36Sopenharmony_ci /* @brief average niso bw usage in kBps requested by client. */ 238362306a36Sopenharmony_ci uint32_t niso_bw; 238462306a36Sopenharmony_ci /* 238562306a36Sopenharmony_ci * @brief average iso bw usage in kBps requested by client. 238662306a36Sopenharmony_ci * Value is ignored if client is niso. Determined by client_id. 238762306a36Sopenharmony_ci */ 238862306a36Sopenharmony_ci uint32_t iso_bw; 238962306a36Sopenharmony_ci /* 239062306a36Sopenharmony_ci * @brief memory clock floor requested by client. 239162306a36Sopenharmony_ci * Unit determined by floor_unit. 239262306a36Sopenharmony_ci */ 239362306a36Sopenharmony_ci uint32_t mc_floor; 239462306a36Sopenharmony_ci /* 239562306a36Sopenharmony_ci * @brief toggle to determine the unit-type of floor value. 239662306a36Sopenharmony_ci * See @ref bwmgr_int_unit_type definitions for unit-type mappings. 239762306a36Sopenharmony_ci */ 239862306a36Sopenharmony_ci uint8_t floor_unit; 239962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 240062306a36Sopenharmony_ci 240162306a36Sopenharmony_cistruct cmd_bwmgr_int_cap_set_request { 240262306a36Sopenharmony_ci /* @brief requested cap frequency in Hz. */ 240362306a36Sopenharmony_ci uint64_t rate; 240462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 240562306a36Sopenharmony_ci 240662306a36Sopenharmony_ci/* 240762306a36Sopenharmony_ci * response data for request type CMD_BWMGR_CALC_AND_SET 240862306a36Sopenharmony_ci */ 240962306a36Sopenharmony_cistruct cmd_bwmgr_int_calc_and_set_response { 241062306a36Sopenharmony_ci /* @brief current set memory clock frequency in Hz */ 241162306a36Sopenharmony_ci uint64_t rate; 241262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 241362306a36Sopenharmony_ci 241462306a36Sopenharmony_ci/* 241562306a36Sopenharmony_ci * @brief Request with #MRQ_BWMGR_INT 241662306a36Sopenharmony_ci * 241762306a36Sopenharmony_ci * 241862306a36Sopenharmony_ci * |sub-command |payload | 241962306a36Sopenharmony_ci * |----------------------------|-----------------------------------| 242062306a36Sopenharmony_ci * |CMD_BWMGR_INT_QUERY_ABI | cmd_bwmgr_int_query_abi_request | 242162306a36Sopenharmony_ci * |CMD_BWMGR_INT_CALC_AND_SET | cmd_bwmgr_int_calc_and_set_request| 242262306a36Sopenharmony_ci * |CMD_BWMGR_INT_CAP_SET | cmd_bwmgr_int_cap_set_request | 242362306a36Sopenharmony_ci * 242462306a36Sopenharmony_ci */ 242562306a36Sopenharmony_cistruct mrq_bwmgr_int_request { 242662306a36Sopenharmony_ci uint32_t cmd; 242762306a36Sopenharmony_ci union { 242862306a36Sopenharmony_ci struct cmd_bwmgr_int_query_abi_request query_abi; 242962306a36Sopenharmony_ci struct cmd_bwmgr_int_calc_and_set_request bwmgr_calc_set_req; 243062306a36Sopenharmony_ci struct cmd_bwmgr_int_cap_set_request bwmgr_cap_set_req; 243162306a36Sopenharmony_ci } BPMP_UNION_ANON; 243262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 243362306a36Sopenharmony_ci 243462306a36Sopenharmony_ci/* 243562306a36Sopenharmony_ci * @brief Response to MRQ_BWMGR_INT 243662306a36Sopenharmony_ci * 243762306a36Sopenharmony_ci * |sub-command |payload | 243862306a36Sopenharmony_ci * |----------------------------|---------------------------------------| 243962306a36Sopenharmony_ci * |CMD_BWMGR_INT_CALC_AND_SET | cmd_bwmgr_int_calc_and_set_response | 244062306a36Sopenharmony_ci */ 244162306a36Sopenharmony_cistruct mrq_bwmgr_int_response { 244262306a36Sopenharmony_ci union { 244362306a36Sopenharmony_ci struct cmd_bwmgr_int_calc_and_set_response bwmgr_calc_set_resp; 244462306a36Sopenharmony_ci } BPMP_UNION_ANON; 244562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 244662306a36Sopenharmony_ci 244762306a36Sopenharmony_ci/** @} BWMGR_INT */ 244862306a36Sopenharmony_ci/** @endcond (bpmp_t234 || bpmp_t239 || bpmp_th500) */ 244962306a36Sopenharmony_ci 245062306a36Sopenharmony_ci/** 245162306a36Sopenharmony_ci * @ingroup MRQ_Codes 245262306a36Sopenharmony_ci * @def MRQ_ISO_CLIENT 245362306a36Sopenharmony_ci * @brief ISO client requests 245462306a36Sopenharmony_ci * 245562306a36Sopenharmony_ci * * Platforms: T234 onwards 245662306a36Sopenharmony_ci * @cond (bpmp_t234 || bpmp_t239 || bpmp_th500) 245762306a36Sopenharmony_ci * * Initiators: CCPLEX 245862306a36Sopenharmony_ci * * Targets: BPMP 245962306a36Sopenharmony_ci * * Request Payload: @ref mrq_iso_client_request 246062306a36Sopenharmony_ci * * Response Payload: @ref mrq_iso_client_response 246162306a36Sopenharmony_ci * 246262306a36Sopenharmony_ci * @addtogroup ISO_CLIENT 246362306a36Sopenharmony_ci * @{ 246462306a36Sopenharmony_ci */ 246562306a36Sopenharmony_ci 246662306a36Sopenharmony_cienum mrq_iso_client_cmd { 246762306a36Sopenharmony_ci /** 246862306a36Sopenharmony_ci * @brief Check whether the BPMP driver supports the specified 246962306a36Sopenharmony_ci * request type 247062306a36Sopenharmony_ci * 247162306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 247262306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 247362306a36Sopenharmony_ci */ 247462306a36Sopenharmony_ci CMD_ISO_CLIENT_QUERY_ABI = 0, 247562306a36Sopenharmony_ci 247662306a36Sopenharmony_ci /* 247762306a36Sopenharmony_ci * @brief check for legal LA for the iso client. Without programming 247862306a36Sopenharmony_ci * LA MC registers, calculate and ensure that legal LA is possible for 247962306a36Sopenharmony_ci * iso bw requested by the ISO client. 248062306a36Sopenharmony_ci * 248162306a36Sopenharmony_ci * mrq_response::err is 248262306a36Sopenharmony_ci * * 0: check la succeeded. 248362306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 248462306a36Sopenharmony_ci * * -#BPMP_EFAULT: Legal LA is not possible for client requested iso_bw 248562306a36Sopenharmony_ci */ 248662306a36Sopenharmony_ci CMD_ISO_CLIENT_CALCULATE_LA = 1, 248762306a36Sopenharmony_ci 248862306a36Sopenharmony_ci /* 248962306a36Sopenharmony_ci * @brief set LA for the iso client. Calculate and program the LA/PTSA 249062306a36Sopenharmony_ci * MC registers corresponding to the client making bw request 249162306a36Sopenharmony_ci * 249262306a36Sopenharmony_ci * mrq_response::err is 249362306a36Sopenharmony_ci * * 0: set la succeeded. 249462306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 249562306a36Sopenharmony_ci * * -#BPMP_EFAULT: Failed to calculate or program MC registers. 249662306a36Sopenharmony_ci */ 249762306a36Sopenharmony_ci CMD_ISO_CLIENT_SET_LA = 2, 249862306a36Sopenharmony_ci 249962306a36Sopenharmony_ci /* 250062306a36Sopenharmony_ci * @brief Get max possible bw for iso client 250162306a36Sopenharmony_ci * 250262306a36Sopenharmony_ci * mrq_response::err is 250362306a36Sopenharmony_ci * * 0: get_max_bw succeeded. 250462306a36Sopenharmony_ci * * -#BPMP_EINVAL: Invalid request parameters. 250562306a36Sopenharmony_ci */ 250662306a36Sopenharmony_ci CMD_ISO_CLIENT_GET_MAX_BW = 3 250762306a36Sopenharmony_ci}; 250862306a36Sopenharmony_ci 250962306a36Sopenharmony_ci/* 251062306a36Sopenharmony_ci * request data for request type CMD_ISO_CLIENT_QUERY_ABI 251162306a36Sopenharmony_ci * 251262306a36Sopenharmony_ci * type: Request type for which to check existence. 251362306a36Sopenharmony_ci */ 251462306a36Sopenharmony_cistruct cmd_iso_client_query_abi_request { 251562306a36Sopenharmony_ci uint32_t type; 251662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 251762306a36Sopenharmony_ci 251862306a36Sopenharmony_ci/* 251962306a36Sopenharmony_ci * request data for request type CMD_ISO_CLIENT_CALCULATE_LA 252062306a36Sopenharmony_ci * 252162306a36Sopenharmony_ci * id: client ID in @ref bpmp_bwmgr_ids 252262306a36Sopenharmony_ci * bw: bw requested in kBps by client ID. 252362306a36Sopenharmony_ci * init_bw_floor: initial dram_bw_floor in kBps passed by client ID. 252462306a36Sopenharmony_ci * ISO client will perform mempool allocation and DVFS buffering based 252562306a36Sopenharmony_ci * on this dram_bw_floor. 252662306a36Sopenharmony_ci */ 252762306a36Sopenharmony_cistruct cmd_iso_client_calculate_la_request { 252862306a36Sopenharmony_ci uint32_t id; 252962306a36Sopenharmony_ci uint32_t bw; 253062306a36Sopenharmony_ci uint32_t init_bw_floor; 253162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 253262306a36Sopenharmony_ci 253362306a36Sopenharmony_ci/* 253462306a36Sopenharmony_ci * request data for request type CMD_ISO_CLIENT_SET_LA 253562306a36Sopenharmony_ci * 253662306a36Sopenharmony_ci * id: client ID in @ref bpmp_bwmgr_ids 253762306a36Sopenharmony_ci * bw: bw requested in kBps by client ID. 253862306a36Sopenharmony_ci * final_bw_floor: final dram_bw_floor in kBps. 253962306a36Sopenharmony_ci * Sometimes the initial dram_bw_floor passed by ISO client may need to be 254062306a36Sopenharmony_ci * updated by considering higher dram freq's. This is the final dram_bw_floor 254162306a36Sopenharmony_ci * used to calculate and program MC registers. 254262306a36Sopenharmony_ci */ 254362306a36Sopenharmony_cistruct cmd_iso_client_set_la_request { 254462306a36Sopenharmony_ci uint32_t id; 254562306a36Sopenharmony_ci uint32_t bw; 254662306a36Sopenharmony_ci uint32_t final_bw_floor; 254762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 254862306a36Sopenharmony_ci 254962306a36Sopenharmony_ci/* 255062306a36Sopenharmony_ci * request data for request type CMD_ISO_CLIENT_GET_MAX_BW 255162306a36Sopenharmony_ci * 255262306a36Sopenharmony_ci * id: client ID in @ref bpmp_bwmgr_ids 255362306a36Sopenharmony_ci */ 255462306a36Sopenharmony_cistruct cmd_iso_client_get_max_bw_request { 255562306a36Sopenharmony_ci uint32_t id; 255662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 255762306a36Sopenharmony_ci 255862306a36Sopenharmony_ci/* 255962306a36Sopenharmony_ci * response data for request type CMD_ISO_CLIENT_CALCULATE_LA 256062306a36Sopenharmony_ci * 256162306a36Sopenharmony_ci * la_rate_floor: minimum dram_rate_floor in kHz at which a legal la is possible 256262306a36Sopenharmony_ci * iso_client_only_rate: Minimum dram freq in kHz required to satisfy this clients 256362306a36Sopenharmony_ci * iso bw request, assuming all other iso clients are inactive 256462306a36Sopenharmony_ci */ 256562306a36Sopenharmony_cistruct cmd_iso_client_calculate_la_response { 256662306a36Sopenharmony_ci uint32_t la_rate_floor; 256762306a36Sopenharmony_ci uint32_t iso_client_only_rate; 256862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 256962306a36Sopenharmony_ci 257062306a36Sopenharmony_ci/** 257162306a36Sopenharmony_ci * @brief Used by @ref cmd_iso_client_get_max_bw_response 257262306a36Sopenharmony_ci */ 257362306a36Sopenharmony_cistruct iso_max_bw { 257462306a36Sopenharmony_ci /* @brief dram frequency in kHz */ 257562306a36Sopenharmony_ci uint32_t freq; 257662306a36Sopenharmony_ci /* @brief max possible iso-bw in kBps */ 257762306a36Sopenharmony_ci uint32_t iso_bw; 257862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 257962306a36Sopenharmony_ci 258062306a36Sopenharmony_ci#define ISO_MAX_BW_MAX_SIZE 14U 258162306a36Sopenharmony_ci/* 258262306a36Sopenharmony_ci * response data for request type CMD_ISO_CLIENT_GET_MAX_BW 258362306a36Sopenharmony_ci */ 258462306a36Sopenharmony_cistruct cmd_iso_client_get_max_bw_response { 258562306a36Sopenharmony_ci /* @brief The number valid entries in iso_max_bw pairs */ 258662306a36Sopenharmony_ci uint32_t num_pairs; 258762306a36Sopenharmony_ci /* @brief max ISOBW <dram freq, max bw> information */ 258862306a36Sopenharmony_ci struct iso_max_bw pairs[ISO_MAX_BW_MAX_SIZE]; 258962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 259062306a36Sopenharmony_ci 259162306a36Sopenharmony_ci/** 259262306a36Sopenharmony_ci * @brief Request with #MRQ_ISO_CLIENT 259362306a36Sopenharmony_ci * 259462306a36Sopenharmony_ci * Used by the sender of an #MRQ_ISO_CLIENT message. 259562306a36Sopenharmony_ci * 259662306a36Sopenharmony_ci * |sub-command |payload | 259762306a36Sopenharmony_ci * |------------------------------------ |----------------------------------------| 259862306a36Sopenharmony_ci * |CMD_ISO_CLIENT_QUERY_ABI |cmd_iso_client_query_abi_request | 259962306a36Sopenharmony_ci * |CMD_ISO_CLIENT_CALCULATE_LA |cmd_iso_client_calculate_la_request | 260062306a36Sopenharmony_ci * |CMD_ISO_CLIENT_SET_LA |cmd_iso_client_set_la_request | 260162306a36Sopenharmony_ci * |CMD_ISO_CLIENT_GET_MAX_BW |cmd_iso_client_get_max_bw_request | 260262306a36Sopenharmony_ci * 260362306a36Sopenharmony_ci */ 260462306a36Sopenharmony_ci 260562306a36Sopenharmony_cistruct mrq_iso_client_request { 260662306a36Sopenharmony_ci /* Type of request. Values listed in enum mrq_iso_client_cmd */ 260762306a36Sopenharmony_ci uint32_t cmd; 260862306a36Sopenharmony_ci union { 260962306a36Sopenharmony_ci struct cmd_iso_client_query_abi_request query_abi; 261062306a36Sopenharmony_ci struct cmd_iso_client_calculate_la_request calculate_la_req; 261162306a36Sopenharmony_ci struct cmd_iso_client_set_la_request set_la_req; 261262306a36Sopenharmony_ci struct cmd_iso_client_get_max_bw_request max_isobw_req; 261362306a36Sopenharmony_ci } BPMP_UNION_ANON; 261462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 261562306a36Sopenharmony_ci 261662306a36Sopenharmony_ci/** 261762306a36Sopenharmony_ci * @brief Response to MRQ_ISO_CLIENT 261862306a36Sopenharmony_ci * 261962306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_iso_client_request may return 262062306a36Sopenharmony_ci * sub-command-specific data. Some do and some do not as indicated in 262162306a36Sopenharmony_ci * the following table 262262306a36Sopenharmony_ci * 262362306a36Sopenharmony_ci * |sub-command |payload | 262462306a36Sopenharmony_ci * |---------------------------- |------------------------------------| 262562306a36Sopenharmony_ci * |CMD_ISO_CLIENT_CALCULATE_LA |cmd_iso_client_calculate_la_response| 262662306a36Sopenharmony_ci * |CMD_ISO_CLIENT_SET_LA |N/A | 262762306a36Sopenharmony_ci * |CMD_ISO_CLIENT_GET_MAX_BW |cmd_iso_client_get_max_bw_response | 262862306a36Sopenharmony_ci * 262962306a36Sopenharmony_ci */ 263062306a36Sopenharmony_ci 263162306a36Sopenharmony_cistruct mrq_iso_client_response { 263262306a36Sopenharmony_ci union { 263362306a36Sopenharmony_ci struct cmd_iso_client_calculate_la_response calculate_la_resp; 263462306a36Sopenharmony_ci struct cmd_iso_client_get_max_bw_response max_isobw_resp; 263562306a36Sopenharmony_ci } BPMP_UNION_ANON; 263662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 263762306a36Sopenharmony_ci 263862306a36Sopenharmony_ci/** @} ISO_CLIENT */ 263962306a36Sopenharmony_ci/** @endcond (bpmp_t234 || bpmp_t239 || bpmp_th500) */ 264062306a36Sopenharmony_ci 264162306a36Sopenharmony_ci/** 264262306a36Sopenharmony_ci * @ingroup MRQ_Codes 264362306a36Sopenharmony_ci * @def MRQ_CPU_NDIV_LIMITS 264462306a36Sopenharmony_ci * @brief CPU freq. limits in ndiv 264562306a36Sopenharmony_ci * 264662306a36Sopenharmony_ci * * Platforms: T194 onwards 264762306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) 264862306a36Sopenharmony_ci * * Initiators: CCPLEX 264962306a36Sopenharmony_ci * * Targets: BPMP 265062306a36Sopenharmony_ci * * Request Payload: @ref mrq_cpu_ndiv_limits_request 265162306a36Sopenharmony_ci * * Response Payload: @ref mrq_cpu_ndiv_limits_response 265262306a36Sopenharmony_ci * @addtogroup CPU 265362306a36Sopenharmony_ci * @{ 265462306a36Sopenharmony_ci */ 265562306a36Sopenharmony_ci 265662306a36Sopenharmony_ci/** 265762306a36Sopenharmony_ci * @brief Request for ndiv limits of a cluster 265862306a36Sopenharmony_ci */ 265962306a36Sopenharmony_cistruct mrq_cpu_ndiv_limits_request { 266062306a36Sopenharmony_ci /** @brief Enum cluster_id */ 266162306a36Sopenharmony_ci uint32_t cluster_id; 266262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 266362306a36Sopenharmony_ci 266462306a36Sopenharmony_ci/** 266562306a36Sopenharmony_ci * @brief Response to #MRQ_CPU_NDIV_LIMITS 266662306a36Sopenharmony_ci */ 266762306a36Sopenharmony_cistruct mrq_cpu_ndiv_limits_response { 266862306a36Sopenharmony_ci /** @brief Reference frequency in Hz */ 266962306a36Sopenharmony_ci uint32_t ref_clk_hz; 267062306a36Sopenharmony_ci /** @brief Post divider value */ 267162306a36Sopenharmony_ci uint16_t pdiv; 267262306a36Sopenharmony_ci /** @brief Input divider value */ 267362306a36Sopenharmony_ci uint16_t mdiv; 267462306a36Sopenharmony_ci /** @brief FMAX expressed with max NDIV value */ 267562306a36Sopenharmony_ci uint16_t ndiv_max; 267662306a36Sopenharmony_ci /** @brief Minimum allowed NDIV value */ 267762306a36Sopenharmony_ci uint16_t ndiv_min; 267862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 267962306a36Sopenharmony_ci 268062306a36Sopenharmony_ci/** @} CPU */ 268162306a36Sopenharmony_ci/** @endcond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) */ 268262306a36Sopenharmony_ci 268362306a36Sopenharmony_ci/** 268462306a36Sopenharmony_ci * @ingroup MRQ_Codes 268562306a36Sopenharmony_ci * @def MRQ_CPU_AUTO_CC3 268662306a36Sopenharmony_ci * @brief Query CPU cluster auto-CC3 configuration 268762306a36Sopenharmony_ci * 268862306a36Sopenharmony_ci * * Platforms: T194 268962306a36Sopenharmony_ci * @cond bpmp_t194 269062306a36Sopenharmony_ci * * Initiators: CCPLEX 269162306a36Sopenharmony_ci * * Targets: BPMP 269262306a36Sopenharmony_ci * * Request Payload: @ref mrq_cpu_auto_cc3_request 269362306a36Sopenharmony_ci * * Response Payload: @ref mrq_cpu_auto_cc3_response 269462306a36Sopenharmony_ci * @addtogroup CC3 269562306a36Sopenharmony_ci * 269662306a36Sopenharmony_ci * Queries from BPMP auto-CC3 configuration (allowed/not allowed) for a 269762306a36Sopenharmony_ci * specified cluster. CCPLEX s/w uses this information to override its own 269862306a36Sopenharmony_ci * device tree auto-CC3 settings, so that BPMP device tree is a single source of 269962306a36Sopenharmony_ci * auto-CC3 platform configuration. 270062306a36Sopenharmony_ci * 270162306a36Sopenharmony_ci * @{ 270262306a36Sopenharmony_ci */ 270362306a36Sopenharmony_ci 270462306a36Sopenharmony_ci/** 270562306a36Sopenharmony_ci * @brief Request for auto-CC3 configuration of a cluster 270662306a36Sopenharmony_ci */ 270762306a36Sopenharmony_cistruct mrq_cpu_auto_cc3_request { 270862306a36Sopenharmony_ci /** @brief Enum cluster_id (logical cluster id, known to CCPLEX s/w) */ 270962306a36Sopenharmony_ci uint32_t cluster_id; 271062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 271162306a36Sopenharmony_ci 271262306a36Sopenharmony_ci/** 271362306a36Sopenharmony_ci * @brief Response to #MRQ_CPU_AUTO_CC3 271462306a36Sopenharmony_ci */ 271562306a36Sopenharmony_cistruct mrq_cpu_auto_cc3_response { 271662306a36Sopenharmony_ci /** 271762306a36Sopenharmony_ci * @brief auto-CC3 configuration 271862306a36Sopenharmony_ci * 271962306a36Sopenharmony_ci * - bits[31..10] reserved. 272062306a36Sopenharmony_ci * - bits[9..1] cc3 ndiv 272162306a36Sopenharmony_ci * - bit [0] if "1" auto-CC3 is allowed, if "0" auto-CC3 is not allowed 272262306a36Sopenharmony_ci */ 272362306a36Sopenharmony_ci uint32_t auto_cc3_config; 272462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 272562306a36Sopenharmony_ci 272662306a36Sopenharmony_ci/** @} CC3 */ 272762306a36Sopenharmony_ci/** @endcond bpmp_t194 */ 272862306a36Sopenharmony_ci 272962306a36Sopenharmony_ci/** 273062306a36Sopenharmony_ci * @ingroup MRQ_Codes 273162306a36Sopenharmony_ci * @def MRQ_RINGBUF_CONSOLE 273262306a36Sopenharmony_ci * @brief A ring buffer debug console for BPMP 273362306a36Sopenharmony_ci * @addtogroup RingbufConsole 273462306a36Sopenharmony_ci * 273562306a36Sopenharmony_ci * The ring buffer debug console aims to be a substitute for the UART debug 273662306a36Sopenharmony_ci * console. The debug console is implemented with two ring buffers in the 273762306a36Sopenharmony_ci * BPMP-FW, the RX (receive) and TX (transmit) buffers. Characters can be read 273862306a36Sopenharmony_ci * and written to the buffers by the host via the MRQ interface. 273962306a36Sopenharmony_ci * 274062306a36Sopenharmony_ci * @{ 274162306a36Sopenharmony_ci */ 274262306a36Sopenharmony_ci 274362306a36Sopenharmony_ci/** 274462306a36Sopenharmony_ci * @brief Maximum number of bytes transferred in a single write command to the 274562306a36Sopenharmony_ci * BPMP 274662306a36Sopenharmony_ci * 274762306a36Sopenharmony_ci * This is determined by the number of free bytes in the message struct, 274862306a36Sopenharmony_ci * rounded down to a multiple of four. 274962306a36Sopenharmony_ci */ 275062306a36Sopenharmony_ci#define MRQ_RINGBUF_CONSOLE_MAX_WRITE_LEN 112 275162306a36Sopenharmony_ci 275262306a36Sopenharmony_ci/** 275362306a36Sopenharmony_ci * @brief Maximum number of bytes transferred in a single read command to the 275462306a36Sopenharmony_ci * BPMP 275562306a36Sopenharmony_ci * 275662306a36Sopenharmony_ci * This is determined by the number of free bytes in the message struct, 275762306a36Sopenharmony_ci * rounded down to a multiple of four. 275862306a36Sopenharmony_ci */ 275962306a36Sopenharmony_ci#define MRQ_RINGBUF_CONSOLE_MAX_READ_LEN 116 276062306a36Sopenharmony_ci 276162306a36Sopenharmony_cienum mrq_ringbuf_console_host_to_bpmp_cmd { 276262306a36Sopenharmony_ci /** 276362306a36Sopenharmony_ci * @brief Check whether the BPMP driver supports the specified request 276462306a36Sopenharmony_ci * type 276562306a36Sopenharmony_ci * 276662306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is supported and 276762306a36Sopenharmony_ci * -#BPMP_ENODEV otherwise 276862306a36Sopenharmony_ci */ 276962306a36Sopenharmony_ci CMD_RINGBUF_CONSOLE_QUERY_ABI = 0, 277062306a36Sopenharmony_ci /** 277162306a36Sopenharmony_ci * @brief Perform a read operation on the BPMP TX buffer 277262306a36Sopenharmony_ci * 277362306a36Sopenharmony_ci * mrq_response::err is 0 277462306a36Sopenharmony_ci */ 277562306a36Sopenharmony_ci CMD_RINGBUF_CONSOLE_READ = 1, 277662306a36Sopenharmony_ci /** 277762306a36Sopenharmony_ci * @brief Perform a write operation on the BPMP RX buffer 277862306a36Sopenharmony_ci * 277962306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful and 278062306a36Sopenharmony_ci * -#BPMP_ENODEV otherwise 278162306a36Sopenharmony_ci */ 278262306a36Sopenharmony_ci CMD_RINGBUF_CONSOLE_WRITE = 2, 278362306a36Sopenharmony_ci /** 278462306a36Sopenharmony_ci * @brief Get the length of the buffer and the physical addresses of 278562306a36Sopenharmony_ci * the buffer data and the head and tail counters 278662306a36Sopenharmony_ci * 278762306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful and 278862306a36Sopenharmony_ci * -#BPMP_ENODEV otherwise 278962306a36Sopenharmony_ci */ 279062306a36Sopenharmony_ci CMD_RINGBUF_CONSOLE_GET_FIFO = 3, 279162306a36Sopenharmony_ci}; 279262306a36Sopenharmony_ci 279362306a36Sopenharmony_ci/** 279462306a36Sopenharmony_ci * @ingroup RingbufConsole 279562306a36Sopenharmony_ci * @brief Host->BPMP request data for request type 279662306a36Sopenharmony_ci * #CMD_RINGBUF_CONSOLE_QUERY_ABI 279762306a36Sopenharmony_ci */ 279862306a36Sopenharmony_cistruct cmd_ringbuf_console_query_abi_req { 279962306a36Sopenharmony_ci /** @brief Command identifier to be queried */ 280062306a36Sopenharmony_ci uint32_t cmd; 280162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 280262306a36Sopenharmony_ci 280362306a36Sopenharmony_ci/** @private */ 280462306a36Sopenharmony_cistruct cmd_ringbuf_console_query_abi_resp { 280562306a36Sopenharmony_ci BPMP_ABI_EMPTY 280662306a36Sopenharmony_ci} BPMP_ABI_PACKED; 280762306a36Sopenharmony_ci 280862306a36Sopenharmony_ci/** 280962306a36Sopenharmony_ci * @ingroup RingbufConsole 281062306a36Sopenharmony_ci * @brief Host->BPMP request data for request type #CMD_RINGBUF_CONSOLE_READ 281162306a36Sopenharmony_ci */ 281262306a36Sopenharmony_cistruct cmd_ringbuf_console_read_req { 281362306a36Sopenharmony_ci /** 281462306a36Sopenharmony_ci * @brief Number of bytes requested to be read from the BPMP TX buffer 281562306a36Sopenharmony_ci */ 281662306a36Sopenharmony_ci uint8_t len; 281762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 281862306a36Sopenharmony_ci 281962306a36Sopenharmony_ci/** 282062306a36Sopenharmony_ci * @ingroup RingbufConsole 282162306a36Sopenharmony_ci * @brief BPMP->Host response data for request type #CMD_RINGBUF_CONSOLE_READ 282262306a36Sopenharmony_ci */ 282362306a36Sopenharmony_cistruct cmd_ringbuf_console_read_resp { 282462306a36Sopenharmony_ci /** @brief The actual data read from the BPMP TX buffer */ 282562306a36Sopenharmony_ci uint8_t data[MRQ_RINGBUF_CONSOLE_MAX_READ_LEN]; 282662306a36Sopenharmony_ci /** @brief Number of bytes in cmd_ringbuf_console_read_resp::data */ 282762306a36Sopenharmony_ci uint8_t len; 282862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 282962306a36Sopenharmony_ci 283062306a36Sopenharmony_ci/** 283162306a36Sopenharmony_ci * @ingroup RingbufConsole 283262306a36Sopenharmony_ci * @brief Host->BPMP request data for request type #CMD_RINGBUF_CONSOLE_WRITE 283362306a36Sopenharmony_ci */ 283462306a36Sopenharmony_cistruct cmd_ringbuf_console_write_req { 283562306a36Sopenharmony_ci /** @brief The actual data to be written to the BPMP RX buffer */ 283662306a36Sopenharmony_ci uint8_t data[MRQ_RINGBUF_CONSOLE_MAX_WRITE_LEN]; 283762306a36Sopenharmony_ci /** @brief Number of bytes in cmd_ringbuf_console_write_req::data */ 283862306a36Sopenharmony_ci uint8_t len; 283962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 284062306a36Sopenharmony_ci 284162306a36Sopenharmony_ci/** 284262306a36Sopenharmony_ci * @ingroup RingbufConsole 284362306a36Sopenharmony_ci * @brief BPMP->Host response data for request type #CMD_RINGBUF_CONSOLE_WRITE 284462306a36Sopenharmony_ci */ 284562306a36Sopenharmony_cistruct cmd_ringbuf_console_write_resp { 284662306a36Sopenharmony_ci /** @brief Number of bytes of available space in the BPMP RX buffer */ 284762306a36Sopenharmony_ci uint32_t space_avail; 284862306a36Sopenharmony_ci /** @brief Number of bytes that were written to the BPMP RX buffer */ 284962306a36Sopenharmony_ci uint8_t len; 285062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 285162306a36Sopenharmony_ci 285262306a36Sopenharmony_ci/** @private */ 285362306a36Sopenharmony_cistruct cmd_ringbuf_console_get_fifo_req { 285462306a36Sopenharmony_ci BPMP_ABI_EMPTY 285562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 285662306a36Sopenharmony_ci 285762306a36Sopenharmony_ci/** 285862306a36Sopenharmony_ci * @ingroup RingbufConsole 285962306a36Sopenharmony_ci * @brief BPMP->Host reply data for request type #CMD_RINGBUF_CONSOLE_GET_FIFO 286062306a36Sopenharmony_ci */ 286162306a36Sopenharmony_cistruct cmd_ringbuf_console_get_fifo_resp { 286262306a36Sopenharmony_ci /** @brief Physical address of the BPMP TX buffer */ 286362306a36Sopenharmony_ci uint64_t bpmp_tx_buf_addr; 286462306a36Sopenharmony_ci /** @brief Physical address of the BPMP TX buffer head counter */ 286562306a36Sopenharmony_ci uint64_t bpmp_tx_head_addr; 286662306a36Sopenharmony_ci /** @brief Physical address of the BPMP TX buffer tail counter */ 286762306a36Sopenharmony_ci uint64_t bpmp_tx_tail_addr; 286862306a36Sopenharmony_ci /** @brief Length of the BPMP TX buffer */ 286962306a36Sopenharmony_ci uint32_t bpmp_tx_buf_len; 287062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 287162306a36Sopenharmony_ci 287262306a36Sopenharmony_ci/** 287362306a36Sopenharmony_ci * @ingroup RingbufConsole 287462306a36Sopenharmony_ci * @brief Host->BPMP request data. 287562306a36Sopenharmony_ci * 287662306a36Sopenharmony_ci * Reply type is union #mrq_ringbuf_console_bpmp_to_host_response . 287762306a36Sopenharmony_ci */ 287862306a36Sopenharmony_cistruct mrq_ringbuf_console_host_to_bpmp_request { 287962306a36Sopenharmony_ci /** 288062306a36Sopenharmony_ci * @brief Type of request. Values listed in enum 288162306a36Sopenharmony_ci * #mrq_ringbuf_console_host_to_bpmp_cmd. 288262306a36Sopenharmony_ci */ 288362306a36Sopenharmony_ci uint32_t type; 288462306a36Sopenharmony_ci /** @brief request type specific parameters. */ 288562306a36Sopenharmony_ci union { 288662306a36Sopenharmony_ci struct cmd_ringbuf_console_query_abi_req query_abi; 288762306a36Sopenharmony_ci struct cmd_ringbuf_console_read_req read; 288862306a36Sopenharmony_ci struct cmd_ringbuf_console_write_req write; 288962306a36Sopenharmony_ci struct cmd_ringbuf_console_get_fifo_req get_fifo; 289062306a36Sopenharmony_ci } BPMP_UNION_ANON; 289162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 289262306a36Sopenharmony_ci 289362306a36Sopenharmony_ci/** 289462306a36Sopenharmony_ci * @ingroup RingbufConsole 289562306a36Sopenharmony_ci * @brief Host->BPMP reply data 289662306a36Sopenharmony_ci * 289762306a36Sopenharmony_ci * In response to struct #mrq_ringbuf_console_host_to_bpmp_request. 289862306a36Sopenharmony_ci */ 289962306a36Sopenharmony_ciunion mrq_ringbuf_console_bpmp_to_host_response { 290062306a36Sopenharmony_ci struct cmd_ringbuf_console_query_abi_resp query_abi; 290162306a36Sopenharmony_ci struct cmd_ringbuf_console_read_resp read; 290262306a36Sopenharmony_ci struct cmd_ringbuf_console_write_resp write; 290362306a36Sopenharmony_ci struct cmd_ringbuf_console_get_fifo_resp get_fifo; 290462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 290562306a36Sopenharmony_ci 290662306a36Sopenharmony_ci/** @} RingbufConsole */ 290762306a36Sopenharmony_ci 290862306a36Sopenharmony_ci/** 290962306a36Sopenharmony_ci * @ingroup MRQ_Codes 291062306a36Sopenharmony_ci * @def MRQ_STRAP 291162306a36Sopenharmony_ci * @brief Set a strap value controlled by BPMP 291262306a36Sopenharmony_ci * 291362306a36Sopenharmony_ci * * Platforms: T194 onwards 291462306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) 291562306a36Sopenharmony_ci * * Initiators: CCPLEX 291662306a36Sopenharmony_ci * * Targets: BPMP 291762306a36Sopenharmony_ci * * Request Payload: @ref mrq_strap_request 291862306a36Sopenharmony_ci * * Response Payload: N/A 291962306a36Sopenharmony_ci * @addtogroup Strap 292062306a36Sopenharmony_ci * 292162306a36Sopenharmony_ci * A strap is an input that is sampled by a hardware unit during the 292262306a36Sopenharmony_ci * unit's startup process. The sampled value of a strap affects the 292362306a36Sopenharmony_ci * behavior of the unit until the unit is restarted. Many hardware 292462306a36Sopenharmony_ci * units sample their straps at the instant that their resets are 292562306a36Sopenharmony_ci * deasserted. 292662306a36Sopenharmony_ci * 292762306a36Sopenharmony_ci * BPMP owns registers which act as straps to various units. It 292862306a36Sopenharmony_ci * exposes limited control of those straps via #MRQ_STRAP. 292962306a36Sopenharmony_ci * 293062306a36Sopenharmony_ci * @{ 293162306a36Sopenharmony_ci */ 293262306a36Sopenharmony_cienum mrq_strap_cmd { 293362306a36Sopenharmony_ci /** @private */ 293462306a36Sopenharmony_ci STRAP_RESERVED = 0, 293562306a36Sopenharmony_ci /** @brief Set a strap value */ 293662306a36Sopenharmony_ci STRAP_SET = 1 293762306a36Sopenharmony_ci}; 293862306a36Sopenharmony_ci 293962306a36Sopenharmony_ci/** 294062306a36Sopenharmony_ci * @brief Request with #MRQ_STRAP 294162306a36Sopenharmony_ci */ 294262306a36Sopenharmony_cistruct mrq_strap_request { 294362306a36Sopenharmony_ci /** @brief @ref mrq_strap_cmd */ 294462306a36Sopenharmony_ci uint32_t cmd; 294562306a36Sopenharmony_ci /** @brief Strap ID from @ref Strap_Identifiers */ 294662306a36Sopenharmony_ci uint32_t id; 294762306a36Sopenharmony_ci /** @brief Desired value for strap (if cmd is #STRAP_SET) */ 294862306a36Sopenharmony_ci uint32_t value; 294962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 295062306a36Sopenharmony_ci 295162306a36Sopenharmony_ci/** @} Strap */ 295262306a36Sopenharmony_ci/** @endcond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) */ 295362306a36Sopenharmony_ci 295462306a36Sopenharmony_ci/** 295562306a36Sopenharmony_ci * @ingroup MRQ_Codes 295662306a36Sopenharmony_ci * @def MRQ_UPHY 295762306a36Sopenharmony_ci * @brief Perform a UPHY operation 295862306a36Sopenharmony_ci * 295962306a36Sopenharmony_ci * * Platforms: T194 onwards 296062306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) 296162306a36Sopenharmony_ci * * Initiators: CCPLEX 296262306a36Sopenharmony_ci * * Targets: BPMP 296362306a36Sopenharmony_ci * * Request Payload: @ref mrq_uphy_request 296462306a36Sopenharmony_ci * * Response Payload: @ref mrq_uphy_response 296562306a36Sopenharmony_ci * 296662306a36Sopenharmony_ci * @addtogroup UPHY 296762306a36Sopenharmony_ci * @{ 296862306a36Sopenharmony_ci */ 296962306a36Sopenharmony_cienum { 297062306a36Sopenharmony_ci CMD_UPHY_PCIE_LANE_MARGIN_CONTROL = 1, 297162306a36Sopenharmony_ci CMD_UPHY_PCIE_LANE_MARGIN_STATUS = 2, 297262306a36Sopenharmony_ci CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT = 3, 297362306a36Sopenharmony_ci CMD_UPHY_PCIE_CONTROLLER_STATE = 4, 297462306a36Sopenharmony_ci CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF = 5, 297562306a36Sopenharmony_ci CMD_UPHY_DISPLAY_PORT_INIT = 6, 297662306a36Sopenharmony_ci CMD_UPHY_DISPLAY_PORT_OFF = 7, 297762306a36Sopenharmony_ci CMD_UPHY_XUSB_DYN_LANES_RESTORE = 8, 297862306a36Sopenharmony_ci CMD_UPHY_MAX, 297962306a36Sopenharmony_ci}; 298062306a36Sopenharmony_ci 298162306a36Sopenharmony_cistruct cmd_uphy_margin_control_request { 298262306a36Sopenharmony_ci /** @brief Enable margin */ 298362306a36Sopenharmony_ci int32_t en; 298462306a36Sopenharmony_ci /** @brief Clear the number of error and sections */ 298562306a36Sopenharmony_ci int32_t clr; 298662306a36Sopenharmony_ci /** @brief Set x offset (1's complement) for left/right margin type (y should be 0) */ 298762306a36Sopenharmony_ci uint32_t x; 298862306a36Sopenharmony_ci /** @brief Set y offset (1's complement) for left/right margin type (x should be 0) */ 298962306a36Sopenharmony_ci uint32_t y; 299062306a36Sopenharmony_ci /** @brief Set number of bit blocks for each margin section */ 299162306a36Sopenharmony_ci uint32_t nblks; 299262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 299362306a36Sopenharmony_ci 299462306a36Sopenharmony_cistruct cmd_uphy_margin_status_response { 299562306a36Sopenharmony_ci /** @brief Number of errors observed */ 299662306a36Sopenharmony_ci uint32_t status; 299762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 299862306a36Sopenharmony_ci 299962306a36Sopenharmony_cistruct cmd_uphy_ep_controller_pll_init_request { 300062306a36Sopenharmony_ci /** @brief EP controller number, T194 valid: 0, 4, 5; T234 valid: 5, 6, 7, 10; T239 valid: 0 */ 300162306a36Sopenharmony_ci uint8_t ep_controller; 300262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 300362306a36Sopenharmony_ci 300462306a36Sopenharmony_cistruct cmd_uphy_pcie_controller_state_request { 300562306a36Sopenharmony_ci /** @brief PCIE controller number, T194 valid: 0-4; T234 valid: 0-10; T239 valid: 0-3 */ 300662306a36Sopenharmony_ci uint8_t pcie_controller; 300762306a36Sopenharmony_ci uint8_t enable; 300862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 300962306a36Sopenharmony_ci 301062306a36Sopenharmony_cistruct cmd_uphy_ep_controller_pll_off_request { 301162306a36Sopenharmony_ci /** @brief EP controller number, T194 valid: 0, 4, 5; T234 valid: 5, 6, 7, 10; T239 valid: 0 */ 301262306a36Sopenharmony_ci uint8_t ep_controller; 301362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 301462306a36Sopenharmony_ci 301562306a36Sopenharmony_cistruct cmd_uphy_display_port_init_request { 301662306a36Sopenharmony_ci /** @brief DisplayPort link rate, T239 valid: 1620, 2700, 5400, 8100, 2160, 2430, 3240, 4320, 6750 */ 301762306a36Sopenharmony_ci uint16_t link_rate; 301862306a36Sopenharmony_ci /** @brief 1: lane 0; 2: lane 1; 3: lane 0 and 1 */ 301962306a36Sopenharmony_ci uint16_t lanes_bitmap; 302062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 302162306a36Sopenharmony_ci 302262306a36Sopenharmony_cistruct cmd_uphy_xusb_dyn_lanes_restore_request { 302362306a36Sopenharmony_ci /** @brief 1: lane 0; 2: lane 1; 3: lane 0 and 1 */ 302462306a36Sopenharmony_ci uint16_t lanes_bitmap; 302562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 302662306a36Sopenharmony_ci 302762306a36Sopenharmony_ci/** 302862306a36Sopenharmony_ci * @ingroup UPHY 302962306a36Sopenharmony_ci * @brief Request with #MRQ_UPHY 303062306a36Sopenharmony_ci * 303162306a36Sopenharmony_ci * Used by the sender of an #MRQ_UPHY message to control UPHY. 303262306a36Sopenharmony_ci * The uphy_request is split into several sub-commands. CMD_UPHY_PCIE_LANE_MARGIN_STATUS 303362306a36Sopenharmony_ci * requires no additional data. Others have a sub-command specific payload. Below table 303462306a36Sopenharmony_ci * shows sub-commands with their corresponding payload data. 303562306a36Sopenharmony_ci * 303662306a36Sopenharmony_ci * |sub-command |payload | 303762306a36Sopenharmony_ci * |------------------------------------ |----------------------------------------| 303862306a36Sopenharmony_ci * |CMD_UPHY_PCIE_LANE_MARGIN_CONTROL |uphy_set_margin_control | 303962306a36Sopenharmony_ci * |CMD_UPHY_PCIE_LANE_MARGIN_STATUS | | 304062306a36Sopenharmony_ci * |CMD_UPHY_PCIE_EP_CONTROLLER_PLL_INIT |cmd_uphy_ep_controller_pll_init_request | 304162306a36Sopenharmony_ci * |CMD_UPHY_PCIE_CONTROLLER_STATE |cmd_uphy_pcie_controller_state_request | 304262306a36Sopenharmony_ci * |CMD_UPHY_PCIE_EP_CONTROLLER_PLL_OFF |cmd_uphy_ep_controller_pll_off_request | 304362306a36Sopenharmony_ci * |CMD_UPHY_PCIE_DISPLAY_PORT_INIT |cmd_uphy_display_port_init_request | 304462306a36Sopenharmony_ci * |CMD_UPHY_PCIE_DISPLAY_PORT_OFF | | 304562306a36Sopenharmony_ci * |CMD_UPHY_XUSB_DYN_LANES_RESTORE |cmd_uphy_xusb_dyn_lanes_restore_request | 304662306a36Sopenharmony_ci * 304762306a36Sopenharmony_ci */ 304862306a36Sopenharmony_ci 304962306a36Sopenharmony_cistruct mrq_uphy_request { 305062306a36Sopenharmony_ci /** @brief Lane number. */ 305162306a36Sopenharmony_ci uint16_t lane; 305262306a36Sopenharmony_ci /** @brief Sub-command id. */ 305362306a36Sopenharmony_ci uint16_t cmd; 305462306a36Sopenharmony_ci 305562306a36Sopenharmony_ci union { 305662306a36Sopenharmony_ci struct cmd_uphy_margin_control_request uphy_set_margin_control; 305762306a36Sopenharmony_ci struct cmd_uphy_ep_controller_pll_init_request ep_ctrlr_pll_init; 305862306a36Sopenharmony_ci struct cmd_uphy_pcie_controller_state_request controller_state; 305962306a36Sopenharmony_ci struct cmd_uphy_ep_controller_pll_off_request ep_ctrlr_pll_off; 306062306a36Sopenharmony_ci struct cmd_uphy_display_port_init_request display_port_init; 306162306a36Sopenharmony_ci struct cmd_uphy_xusb_dyn_lanes_restore_request xusb_dyn_lanes_restore; 306262306a36Sopenharmony_ci } BPMP_UNION_ANON; 306362306a36Sopenharmony_ci} BPMP_ABI_PACKED; 306462306a36Sopenharmony_ci 306562306a36Sopenharmony_ci/** 306662306a36Sopenharmony_ci * @ingroup UPHY 306762306a36Sopenharmony_ci * @brief Response to MRQ_UPHY 306862306a36Sopenharmony_ci * 306962306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_uphy_request may return 307062306a36Sopenharmony_ci * sub-command-specific data. Some do and some do not as indicated in 307162306a36Sopenharmony_ci * the following table 307262306a36Sopenharmony_ci * 307362306a36Sopenharmony_ci * |sub-command |payload | 307462306a36Sopenharmony_ci * |---------------------------- |------------------------| 307562306a36Sopenharmony_ci * |CMD_UPHY_PCIE_LANE_MARGIN_CONTROL | | 307662306a36Sopenharmony_ci * |CMD_UPHY_PCIE_LANE_MARGIN_STATUS |uphy_get_margin_status | 307762306a36Sopenharmony_ci * 307862306a36Sopenharmony_ci */ 307962306a36Sopenharmony_ci 308062306a36Sopenharmony_cistruct mrq_uphy_response { 308162306a36Sopenharmony_ci union { 308262306a36Sopenharmony_ci struct cmd_uphy_margin_status_response uphy_get_margin_status; 308362306a36Sopenharmony_ci } BPMP_UNION_ANON; 308462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 308562306a36Sopenharmony_ci 308662306a36Sopenharmony_ci/** @} UPHY */ 308762306a36Sopenharmony_ci/** @endcond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) */ 308862306a36Sopenharmony_ci 308962306a36Sopenharmony_ci/** 309062306a36Sopenharmony_ci * @ingroup MRQ_Codes 309162306a36Sopenharmony_ci * @def MRQ_FMON 309262306a36Sopenharmony_ci * @brief Perform a frequency monitor configuration operations 309362306a36Sopenharmony_ci * 309462306a36Sopenharmony_ci * * Platforms: T194 onwards 309562306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) 309662306a36Sopenharmony_ci * * Initiators: CCPLEX 309762306a36Sopenharmony_ci * * Targets: BPMP 309862306a36Sopenharmony_ci * * Request Payload: @ref mrq_fmon_request 309962306a36Sopenharmony_ci * * Response Payload: @ref mrq_fmon_response 310062306a36Sopenharmony_ci * @endcond (bpmp_t194 || bpmp_t234 || bpmp_t239 || bpmp_th500) 310162306a36Sopenharmony_ci * 310262306a36Sopenharmony_ci * @addtogroup FMON 310362306a36Sopenharmony_ci * @{ 310462306a36Sopenharmony_ci * @cond (bpmp_t194 || bpmp_t234) 310562306a36Sopenharmony_ci */ 310662306a36Sopenharmony_cienum { 310762306a36Sopenharmony_ci /** 310862306a36Sopenharmony_ci * @brief Clamp FMON configuration to specified rate. 310962306a36Sopenharmony_ci * 311062306a36Sopenharmony_ci * The monitored clock must be running for clamp to succeed. If 311162306a36Sopenharmony_ci * clamped, FMON configuration is preserved when clock rate 311262306a36Sopenharmony_ci * and/or state is changed. 311362306a36Sopenharmony_ci * 311462306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 311562306a36Sopenharmony_ci * -#BPMP_EACCES: FMON access error @n 311662306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported @n 311762306a36Sopenharmony_ci * -#BPMP_EBADSLT: clamp FMON on cluster with auto-CC3 enabled @n 311862306a36Sopenharmony_ci * -#BPMP_EBUSY: fmon is already clamped at different rate @n 311962306a36Sopenharmony_ci * -#BPMP_EFAULT: self-diagnostic error @n 312062306a36Sopenharmony_ci * -#BPMP_EINVAL: invalid FMON configuration @n 312162306a36Sopenharmony_ci * -#BPMP_EOPNOTSUPP: not in production mode @n 312262306a36Sopenharmony_ci * -#BPMP_ENODEV: invalid clk_id @n 312362306a36Sopenharmony_ci * -#BPMP_ENOENT: no calibration data, uninitialized @n 312462306a36Sopenharmony_ci * -#BPMP_ENOTSUP: avfs config not set @n 312562306a36Sopenharmony_ci * -#BPMP_ENOSYS: clamp FMON on cluster clock w/ no NAFLL @n 312662306a36Sopenharmony_ci * -#BPMP_ETIMEDOUT: operation timed out @n 312762306a36Sopenharmony_ci */ 312862306a36Sopenharmony_ci CMD_FMON_GEAR_CLAMP = 1, 312962306a36Sopenharmony_ci /** 313062306a36Sopenharmony_ci * @brief Release clamped FMON configuration. 313162306a36Sopenharmony_ci * 313262306a36Sopenharmony_ci * Allow FMON configuration to follow monitored clock rate 313362306a36Sopenharmony_ci * and/or state changes. 313462306a36Sopenharmony_ci * 313562306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 313662306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported @n 313762306a36Sopenharmony_ci * -#BPMP_ENODEV: invalid clk_id @n 313862306a36Sopenharmony_ci * -#BPMP_ENOENT: no calibration data, uninitialized @n 313962306a36Sopenharmony_ci * -#BPMP_ENOTSUP: avfs config not set @n 314062306a36Sopenharmony_ci * -#BPMP_EOPNOTSUPP: not in production mode @n 314162306a36Sopenharmony_ci */ 314262306a36Sopenharmony_ci CMD_FMON_GEAR_FREE = 2, 314362306a36Sopenharmony_ci /** 314462306a36Sopenharmony_ci * @brief Return rate FMON is clamped at, or 0 if FMON is not 314562306a36Sopenharmony_ci * clamped. 314662306a36Sopenharmony_ci * 314762306a36Sopenharmony_ci * Inherently racy, since clamp state can be changed 314862306a36Sopenharmony_ci * concurrently. Useful for testing. 314962306a36Sopenharmony_ci * 315062306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 315162306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported @n 315262306a36Sopenharmony_ci * -#BPMP_ENODEV: invalid clk_id @n 315362306a36Sopenharmony_ci * -#BPMP_ENOENT: no calibration data, uninitialized @n 315462306a36Sopenharmony_ci * -#BPMP_ENOTSUP: avfs config not set @n 315562306a36Sopenharmony_ci * -#BPMP_EOPNOTSUPP: not in production mode @n 315662306a36Sopenharmony_ci */ 315762306a36Sopenharmony_ci CMD_FMON_GEAR_GET = 3, 315862306a36Sopenharmony_ci /** 315962306a36Sopenharmony_ci * @brief Return current status of FMON faults detected by FMON 316062306a36Sopenharmony_ci * h/w or s/w since last invocation of this command. 316162306a36Sopenharmony_ci * Clears fault status. 316262306a36Sopenharmony_ci * 316362306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 316462306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported @n 316562306a36Sopenharmony_ci * -#BPMP_EINVAL: invalid fault type @n 316662306a36Sopenharmony_ci * -#BPMP_ENODEV: invalid clk_id @n 316762306a36Sopenharmony_ci * -#BPMP_ENOENT: no calibration data, uninitialized @n 316862306a36Sopenharmony_ci * -#BPMP_ENOTSUP: avfs config not set @n 316962306a36Sopenharmony_ci * -#BPMP_EOPNOTSUPP: not in production mode @n 317062306a36Sopenharmony_ci */ 317162306a36Sopenharmony_ci CMD_FMON_FAULT_STS_GET = 4, 317262306a36Sopenharmony_ci}; 317362306a36Sopenharmony_ci 317462306a36Sopenharmony_ci/** 317562306a36Sopenharmony_ci * @cond DEPRECATED 317662306a36Sopenharmony_ci * Kept for backward compatibility 317762306a36Sopenharmony_ci */ 317862306a36Sopenharmony_ci#define CMD_FMON_NUM 4 317962306a36Sopenharmony_ci 318062306a36Sopenharmony_ci/** @endcond DEPRECATED */ 318162306a36Sopenharmony_ci 318262306a36Sopenharmony_ci/** 318362306a36Sopenharmony_ci * @defgroup fmon_fault_type FMON fault type 318462306a36Sopenharmony_ci * @addtogroup fmon_fault_type 318562306a36Sopenharmony_ci * @{ 318662306a36Sopenharmony_ci */ 318762306a36Sopenharmony_ci/** @brief All detected FMON faults (h/w or s/w) */ 318862306a36Sopenharmony_ci#define FMON_FAULT_TYPE_ALL 0U 318962306a36Sopenharmony_ci/** @brief FMON faults detected by h/w */ 319062306a36Sopenharmony_ci#define FMON_FAULT_TYPE_HW 1U 319162306a36Sopenharmony_ci/** @brief FMON faults detected by s/w */ 319262306a36Sopenharmony_ci#define FMON_FAULT_TYPE_SW 2U 319362306a36Sopenharmony_ci 319462306a36Sopenharmony_ci/** @} fmon_fault_type */ 319562306a36Sopenharmony_ci 319662306a36Sopenharmony_ci 319762306a36Sopenharmony_cistruct cmd_fmon_gear_clamp_request { 319862306a36Sopenharmony_ci int32_t unused; 319962306a36Sopenharmony_ci int64_t rate; 320062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 320162306a36Sopenharmony_ci 320262306a36Sopenharmony_ci/** @private */ 320362306a36Sopenharmony_cistruct cmd_fmon_gear_clamp_response { 320462306a36Sopenharmony_ci BPMP_ABI_EMPTY 320562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 320662306a36Sopenharmony_ci 320762306a36Sopenharmony_ci/** @private */ 320862306a36Sopenharmony_cistruct cmd_fmon_gear_free_request { 320962306a36Sopenharmony_ci BPMP_ABI_EMPTY 321062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 321162306a36Sopenharmony_ci 321262306a36Sopenharmony_ci/** @private */ 321362306a36Sopenharmony_cistruct cmd_fmon_gear_free_response { 321462306a36Sopenharmony_ci BPMP_ABI_EMPTY 321562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 321662306a36Sopenharmony_ci 321762306a36Sopenharmony_ci/** @private */ 321862306a36Sopenharmony_cistruct cmd_fmon_gear_get_request { 321962306a36Sopenharmony_ci BPMP_ABI_EMPTY 322062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 322162306a36Sopenharmony_ci 322262306a36Sopenharmony_cistruct cmd_fmon_gear_get_response { 322362306a36Sopenharmony_ci int64_t rate; 322462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 322562306a36Sopenharmony_ci 322662306a36Sopenharmony_cistruct cmd_fmon_fault_sts_get_request { 322762306a36Sopenharmony_ci uint32_t fault_type; /**< @ref fmon_fault_type */ 322862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 322962306a36Sopenharmony_ci 323062306a36Sopenharmony_cistruct cmd_fmon_fault_sts_get_response { 323162306a36Sopenharmony_ci uint32_t fault_sts; 323262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 323362306a36Sopenharmony_ci 323462306a36Sopenharmony_ci/** 323562306a36Sopenharmony_ci * @ingroup FMON 323662306a36Sopenharmony_ci * @brief Request with #MRQ_FMON 323762306a36Sopenharmony_ci * 323862306a36Sopenharmony_ci * Used by the sender of an #MRQ_FMON message to configure clock 323962306a36Sopenharmony_ci * frequency monitors. The FMON request is split into several 324062306a36Sopenharmony_ci * sub-commands. Some sub-commands require no additional data. 324162306a36Sopenharmony_ci * Others have a sub-command specific payload 324262306a36Sopenharmony_ci * 324362306a36Sopenharmony_ci * |sub-command |payload | 324462306a36Sopenharmony_ci * |----------------------------|-----------------------| 324562306a36Sopenharmony_ci * |CMD_FMON_GEAR_CLAMP |fmon_gear_clamp | 324662306a36Sopenharmony_ci * |CMD_FMON_GEAR_FREE |- | 324762306a36Sopenharmony_ci * |CMD_FMON_GEAR_GET |- | 324862306a36Sopenharmony_ci * |CMD_FMON_FAULT_STS_GET |fmon_fault_sts_get | 324962306a36Sopenharmony_ci * 325062306a36Sopenharmony_ci */ 325162306a36Sopenharmony_cistruct mrq_fmon_request { 325262306a36Sopenharmony_ci /** @brief Sub-command and clock id concatenated to 32-bit word. 325362306a36Sopenharmony_ci * - bits[31..24] is the sub-cmd. 325462306a36Sopenharmony_ci * - bits[23..0] is monitored clock id used to select target 325562306a36Sopenharmony_ci * FMON 325662306a36Sopenharmony_ci */ 325762306a36Sopenharmony_ci uint32_t cmd_and_id; 325862306a36Sopenharmony_ci 325962306a36Sopenharmony_ci union { 326062306a36Sopenharmony_ci struct cmd_fmon_gear_clamp_request fmon_gear_clamp; 326162306a36Sopenharmony_ci /** @private */ 326262306a36Sopenharmony_ci struct cmd_fmon_gear_free_request fmon_gear_free; 326362306a36Sopenharmony_ci /** @private */ 326462306a36Sopenharmony_ci struct cmd_fmon_gear_get_request fmon_gear_get; 326562306a36Sopenharmony_ci struct cmd_fmon_fault_sts_get_request fmon_fault_sts_get; 326662306a36Sopenharmony_ci } BPMP_UNION_ANON; 326762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 326862306a36Sopenharmony_ci 326962306a36Sopenharmony_ci/** 327062306a36Sopenharmony_ci * @ingroup FMON 327162306a36Sopenharmony_ci * @brief Response to MRQ_FMON 327262306a36Sopenharmony_ci * 327362306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_fmon_request may 327462306a36Sopenharmony_ci * return sub-command-specific data as indicated below. 327562306a36Sopenharmony_ci * 327662306a36Sopenharmony_ci * |sub-command |payload | 327762306a36Sopenharmony_ci * |----------------------------|------------------------| 327862306a36Sopenharmony_ci * |CMD_FMON_GEAR_CLAMP |- | 327962306a36Sopenharmony_ci * |CMD_FMON_GEAR_FREE |- | 328062306a36Sopenharmony_ci * |CMD_FMON_GEAR_GET |fmon_gear_get | 328162306a36Sopenharmony_ci * |CMD_FMON_FAULT_STS_GET |fmon_fault_sts_get | 328262306a36Sopenharmony_ci * 328362306a36Sopenharmony_ci */ 328462306a36Sopenharmony_ci 328562306a36Sopenharmony_cistruct mrq_fmon_response { 328662306a36Sopenharmony_ci union { 328762306a36Sopenharmony_ci /** @private */ 328862306a36Sopenharmony_ci struct cmd_fmon_gear_clamp_response fmon_gear_clamp; 328962306a36Sopenharmony_ci /** @private */ 329062306a36Sopenharmony_ci struct cmd_fmon_gear_free_response fmon_gear_free; 329162306a36Sopenharmony_ci struct cmd_fmon_gear_get_response fmon_gear_get; 329262306a36Sopenharmony_ci struct cmd_fmon_fault_sts_get_response fmon_fault_sts_get; 329362306a36Sopenharmony_ci } BPMP_UNION_ANON; 329462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 329562306a36Sopenharmony_ci 329662306a36Sopenharmony_ci/** @endcond (bpmp_t194 || bpmp_t234) */ 329762306a36Sopenharmony_ci/** @} FMON */ 329862306a36Sopenharmony_ci 329962306a36Sopenharmony_ci/** 330062306a36Sopenharmony_ci * @ingroup MRQ_Codes 330162306a36Sopenharmony_ci * @def MRQ_EC 330262306a36Sopenharmony_ci * @brief Provide status information on faults reported by Error 330362306a36Sopenharmony_ci * Collator (EC) to HSM. 330462306a36Sopenharmony_ci * 330562306a36Sopenharmony_ci * * Platforms: T194 330662306a36Sopenharmony_ci * @cond bpmp_t194 330762306a36Sopenharmony_ci * * Initiators: CCPLEX 330862306a36Sopenharmony_ci * * Targets: BPMP 330962306a36Sopenharmony_ci * * Request Payload: @ref mrq_ec_request 331062306a36Sopenharmony_ci * * Response Payload: @ref mrq_ec_response 331162306a36Sopenharmony_ci * 331262306a36Sopenharmony_ci * @note This MRQ ABI is under construction, and subject to change 331362306a36Sopenharmony_ci * 331462306a36Sopenharmony_ci * @endcond bpmp_t194 331562306a36Sopenharmony_ci * @addtogroup EC 331662306a36Sopenharmony_ci * @{ 331762306a36Sopenharmony_ci * @cond bpmp_t194 331862306a36Sopenharmony_ci */ 331962306a36Sopenharmony_cienum { 332062306a36Sopenharmony_ci /** 332162306a36Sopenharmony_ci * @cond DEPRECATED 332262306a36Sopenharmony_ci * @brief Retrieve specified EC status. 332362306a36Sopenharmony_ci * 332462306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 332562306a36Sopenharmony_ci * -#BPMP_ENODEV if target EC is not owned by BPMP @n 332662306a36Sopenharmony_ci * -#BPMP_EACCES if target EC power domain is turned off @n 332762306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported 332862306a36Sopenharmony_ci * @endcond DEPRECATED 332962306a36Sopenharmony_ci */ 333062306a36Sopenharmony_ci CMD_EC_STATUS_GET = 1, /* deprecated */ 333162306a36Sopenharmony_ci 333262306a36Sopenharmony_ci /** 333362306a36Sopenharmony_ci * @brief Retrieve specified EC extended status (includes error 333462306a36Sopenharmony_ci * counter and user values). 333562306a36Sopenharmony_ci * 333662306a36Sopenharmony_ci * mrq_response::err is 0 if the operation was successful, or @n 333762306a36Sopenharmony_ci * -#BPMP_ENODEV if target EC is not owned by BPMP @n 333862306a36Sopenharmony_ci * -#BPMP_EACCES if target EC power domain is turned off @n 333962306a36Sopenharmony_ci * -#BPMP_EBADCMD if subcommand is not supported 334062306a36Sopenharmony_ci */ 334162306a36Sopenharmony_ci CMD_EC_STATUS_EX_GET = 2, 334262306a36Sopenharmony_ci CMD_EC_NUM, 334362306a36Sopenharmony_ci}; 334462306a36Sopenharmony_ci 334562306a36Sopenharmony_ci/** @brief BPMP ECs error types */ 334662306a36Sopenharmony_cienum bpmp_ec_err_type { 334762306a36Sopenharmony_ci /** @brief Parity error on internal data path 334862306a36Sopenharmony_ci * 334962306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 335062306a36Sopenharmony_ci */ 335162306a36Sopenharmony_ci EC_ERR_TYPE_PARITY_INTERNAL = 1, 335262306a36Sopenharmony_ci 335362306a36Sopenharmony_ci /** @brief ECC SEC error on internal data path 335462306a36Sopenharmony_ci * 335562306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 335662306a36Sopenharmony_ci */ 335762306a36Sopenharmony_ci EC_ERR_TYPE_ECC_SEC_INTERNAL = 2, 335862306a36Sopenharmony_ci 335962306a36Sopenharmony_ci /** @brief ECC DED error on internal data path 336062306a36Sopenharmony_ci * 336162306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 336262306a36Sopenharmony_ci */ 336362306a36Sopenharmony_ci EC_ERR_TYPE_ECC_DED_INTERNAL = 3, 336462306a36Sopenharmony_ci 336562306a36Sopenharmony_ci /** @brief Comparator error 336662306a36Sopenharmony_ci * 336762306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 336862306a36Sopenharmony_ci */ 336962306a36Sopenharmony_ci EC_ERR_TYPE_COMPARATOR = 4, 337062306a36Sopenharmony_ci 337162306a36Sopenharmony_ci /** @brief Register parity error 337262306a36Sopenharmony_ci * 337362306a36Sopenharmony_ci * Error descriptor @ref ec_err_reg_parity_desc. 337462306a36Sopenharmony_ci */ 337562306a36Sopenharmony_ci EC_ERR_TYPE_REGISTER_PARITY = 5, 337662306a36Sopenharmony_ci 337762306a36Sopenharmony_ci /** @brief Parity error from on-chip SRAM/FIFO 337862306a36Sopenharmony_ci * 337962306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 338062306a36Sopenharmony_ci */ 338162306a36Sopenharmony_ci EC_ERR_TYPE_PARITY_SRAM = 6, 338262306a36Sopenharmony_ci 338362306a36Sopenharmony_ci /** @brief Clock Monitor error 338462306a36Sopenharmony_ci * 338562306a36Sopenharmony_ci * Error descriptor @ref ec_err_fmon_desc. 338662306a36Sopenharmony_ci */ 338762306a36Sopenharmony_ci EC_ERR_TYPE_CLOCK_MONITOR = 9, 338862306a36Sopenharmony_ci 338962306a36Sopenharmony_ci /** @brief Voltage Monitor error 339062306a36Sopenharmony_ci * 339162306a36Sopenharmony_ci * Error descriptor @ref ec_err_vmon_desc. 339262306a36Sopenharmony_ci */ 339362306a36Sopenharmony_ci EC_ERR_TYPE_VOLTAGE_MONITOR = 10, 339462306a36Sopenharmony_ci 339562306a36Sopenharmony_ci /** @brief SW Correctable error 339662306a36Sopenharmony_ci * 339762306a36Sopenharmony_ci * Error descriptor @ref ec_err_sw_error_desc. 339862306a36Sopenharmony_ci */ 339962306a36Sopenharmony_ci EC_ERR_TYPE_SW_CORRECTABLE = 16, 340062306a36Sopenharmony_ci 340162306a36Sopenharmony_ci /** @brief SW Uncorrectable error 340262306a36Sopenharmony_ci * 340362306a36Sopenharmony_ci * Error descriptor @ref ec_err_sw_error_desc. 340462306a36Sopenharmony_ci */ 340562306a36Sopenharmony_ci EC_ERR_TYPE_SW_UNCORRECTABLE = 17, 340662306a36Sopenharmony_ci 340762306a36Sopenharmony_ci /** @brief Other HW Correctable error 340862306a36Sopenharmony_ci * 340962306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 341062306a36Sopenharmony_ci */ 341162306a36Sopenharmony_ci EC_ERR_TYPE_OTHER_HW_CORRECTABLE = 32, 341262306a36Sopenharmony_ci 341362306a36Sopenharmony_ci /** @brief Other HW Uncorrectable error 341462306a36Sopenharmony_ci * 341562306a36Sopenharmony_ci * Error descriptor @ref ec_err_simple_desc. 341662306a36Sopenharmony_ci */ 341762306a36Sopenharmony_ci EC_ERR_TYPE_OTHER_HW_UNCORRECTABLE = 33, 341862306a36Sopenharmony_ci}; 341962306a36Sopenharmony_ci 342062306a36Sopenharmony_ci/** @brief Group of registers with parity error. */ 342162306a36Sopenharmony_cienum ec_registers_group { 342262306a36Sopenharmony_ci /** @brief Functional registers group */ 342362306a36Sopenharmony_ci EC_ERR_GROUP_FUNC_REG = 0U, 342462306a36Sopenharmony_ci /** @brief SCR registers group */ 342562306a36Sopenharmony_ci EC_ERR_GROUP_SCR_REG = 1U, 342662306a36Sopenharmony_ci}; 342762306a36Sopenharmony_ci 342862306a36Sopenharmony_ci/** 342962306a36Sopenharmony_ci * @defgroup bpmp_ec_status_flags EC Status Flags 343062306a36Sopenharmony_ci * @addtogroup bpmp_ec_status_flags 343162306a36Sopenharmony_ci * @{ 343262306a36Sopenharmony_ci */ 343362306a36Sopenharmony_ci/** @brief No EC error found flag */ 343462306a36Sopenharmony_ci#define EC_STATUS_FLAG_NO_ERROR 0x0001U 343562306a36Sopenharmony_ci/** @brief Last EC error found flag */ 343662306a36Sopenharmony_ci#define EC_STATUS_FLAG_LAST_ERROR 0x0002U 343762306a36Sopenharmony_ci/** @brief EC latent error flag */ 343862306a36Sopenharmony_ci#define EC_STATUS_FLAG_LATENT_ERROR 0x0004U 343962306a36Sopenharmony_ci 344062306a36Sopenharmony_ci/** @} bpmp_ec_status_flags */ 344162306a36Sopenharmony_ci 344262306a36Sopenharmony_ci/** 344362306a36Sopenharmony_ci * @defgroup bpmp_ec_desc_flags EC Descriptor Flags 344462306a36Sopenharmony_ci * @addtogroup bpmp_ec_desc_flags 344562306a36Sopenharmony_ci * @{ 344662306a36Sopenharmony_ci */ 344762306a36Sopenharmony_ci/** @brief EC descriptor error resolved flag */ 344862306a36Sopenharmony_ci#define EC_DESC_FLAG_RESOLVED 0x0001U 344962306a36Sopenharmony_ci/** @brief EC descriptor failed to retrieve id flag */ 345062306a36Sopenharmony_ci#define EC_DESC_FLAG_NO_ID 0x0002U 345162306a36Sopenharmony_ci 345262306a36Sopenharmony_ci/** @} bpmp_ec_desc_flags */ 345362306a36Sopenharmony_ci 345462306a36Sopenharmony_ci/** 345562306a36Sopenharmony_ci * |error type | fmon_clk_id values | 345662306a36Sopenharmony_ci * |---------------------------------|---------------------------| 345762306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_CLOCK_MONITOR |@ref bpmp_clock_ids | 345862306a36Sopenharmony_ci */ 345962306a36Sopenharmony_cistruct ec_err_fmon_desc { 346062306a36Sopenharmony_ci /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 346162306a36Sopenharmony_ci uint16_t desc_flags; 346262306a36Sopenharmony_ci /** @brief FMON monitored clock id */ 346362306a36Sopenharmony_ci uint16_t fmon_clk_id; 346462306a36Sopenharmony_ci /** 346562306a36Sopenharmony_ci * @brief Bitmask of fault flags 346662306a36Sopenharmony_ci * 346762306a36Sopenharmony_ci * @ref bpmp_fmon_faults_flags 346862306a36Sopenharmony_ci */ 346962306a36Sopenharmony_ci uint32_t fmon_faults; 347062306a36Sopenharmony_ci /** @brief FMON faults access error */ 347162306a36Sopenharmony_ci int32_t fmon_access_error; 347262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 347362306a36Sopenharmony_ci 347462306a36Sopenharmony_ci/** 347562306a36Sopenharmony_ci * | error type | vmon_adc_id values | 347662306a36Sopenharmony_ci * |---------------------------------|---------------------------| 347762306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_VOLTAGE_MONITOR |@ref bpmp_adc_ids | 347862306a36Sopenharmony_ci */ 347962306a36Sopenharmony_cistruct ec_err_vmon_desc { 348062306a36Sopenharmony_ci /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 348162306a36Sopenharmony_ci uint16_t desc_flags; 348262306a36Sopenharmony_ci /** @brief VMON rail adc id */ 348362306a36Sopenharmony_ci uint16_t vmon_adc_id; 348462306a36Sopenharmony_ci /** @brief Bitmask of bpmp_vmon_faults_flags */ 348562306a36Sopenharmony_ci uint32_t vmon_faults; 348662306a36Sopenharmony_ci /** @brief VMON faults access error */ 348762306a36Sopenharmony_ci int32_t vmon_access_error; 348862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 348962306a36Sopenharmony_ci 349062306a36Sopenharmony_ci/** 349162306a36Sopenharmony_ci * |error type | reg_id values | 349262306a36Sopenharmony_ci * |---------------------------------|-----------------------| 349362306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_REGISTER_PARITY | bpmp_ec_registers_ids | 349462306a36Sopenharmony_ci */ 349562306a36Sopenharmony_cistruct ec_err_reg_parity_desc { 349662306a36Sopenharmony_ci /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 349762306a36Sopenharmony_ci uint16_t desc_flags; 349862306a36Sopenharmony_ci /** @brief Register id */ 349962306a36Sopenharmony_ci uint16_t reg_id; 350062306a36Sopenharmony_ci /** @brief Register group @ref ec_registers_group */ 350162306a36Sopenharmony_ci uint16_t reg_group; 350262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 350362306a36Sopenharmony_ci 350462306a36Sopenharmony_ci/** 350562306a36Sopenharmony_ci * |error type | err_source_id values | 350662306a36Sopenharmony_ci * |--------------------------------- |----------------------| 350762306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_SW_CORRECTABLE | bpmp_ec_ce_swd_ids | 350862306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_SW_UNCORRECTABLE | bpmp_ec_ue_swd_ids | 350962306a36Sopenharmony_ci */ 351062306a36Sopenharmony_cistruct ec_err_sw_error_desc { 351162306a36Sopenharmony_ci /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 351262306a36Sopenharmony_ci uint16_t desc_flags; 351362306a36Sopenharmony_ci /** @brief Error source id */ 351462306a36Sopenharmony_ci uint16_t err_source_id; 351562306a36Sopenharmony_ci /** @brief Sw error data */ 351662306a36Sopenharmony_ci uint32_t sw_error_data; 351762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 351862306a36Sopenharmony_ci 351962306a36Sopenharmony_ci/** 352062306a36Sopenharmony_ci * |error type | err_source_id values | 352162306a36Sopenharmony_ci * |----------------------------------------|------------------------| 352262306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_PARITY_INTERNAL | bpmp_ec_ipath_ids | 352362306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_ECC_SEC_INTERNAL | bpmp_ec_ipath_ids | 352462306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_ECC_DED_INTERNAL | bpmp_ec_ipath_ids | 352562306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_COMPARATOR | bpmp_ec_comparator_ids| 352662306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_OTHER_HW_CORRECTABLE | bpmp_ec_misc_hwd_ids | 352762306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_OTHER_HW_UNCORRECTABLE | bpmp_ec_misc_hwd_ids | 352862306a36Sopenharmony_ci * |@ref EC_ERR_TYPE_PARITY_SRAM | bpmp_clock_ids | 352962306a36Sopenharmony_ci */ 353062306a36Sopenharmony_cistruct ec_err_simple_desc { 353162306a36Sopenharmony_ci /** @brief Bitmask of @ref bpmp_ec_desc_flags */ 353262306a36Sopenharmony_ci uint16_t desc_flags; 353362306a36Sopenharmony_ci /** @brief Error source id. Id space depends on error type. */ 353462306a36Sopenharmony_ci uint16_t err_source_id; 353562306a36Sopenharmony_ci} BPMP_ABI_PACKED; 353662306a36Sopenharmony_ci 353762306a36Sopenharmony_ci/** @brief Union of EC error descriptors */ 353862306a36Sopenharmony_ciunion ec_err_desc { 353962306a36Sopenharmony_ci struct ec_err_fmon_desc fmon_desc; 354062306a36Sopenharmony_ci struct ec_err_vmon_desc vmon_desc; 354162306a36Sopenharmony_ci struct ec_err_reg_parity_desc reg_parity_desc; 354262306a36Sopenharmony_ci struct ec_err_sw_error_desc sw_error_desc; 354362306a36Sopenharmony_ci struct ec_err_simple_desc simple_desc; 354462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 354562306a36Sopenharmony_ci 354662306a36Sopenharmony_cistruct cmd_ec_status_get_request { 354762306a36Sopenharmony_ci /** @brief HSM error line number that identifies target EC. */ 354862306a36Sopenharmony_ci uint32_t ec_hsm_id; 354962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 355062306a36Sopenharmony_ci 355162306a36Sopenharmony_ci/** EC status maximum number of descriptors */ 355262306a36Sopenharmony_ci#define EC_ERR_STATUS_DESC_MAX_NUM 4U 355362306a36Sopenharmony_ci 355462306a36Sopenharmony_ci/** 355562306a36Sopenharmony_ci * @cond DEPRECATED 355662306a36Sopenharmony_ci */ 355762306a36Sopenharmony_cistruct cmd_ec_status_get_response { 355862306a36Sopenharmony_ci /** @brief Target EC id (the same id received with request). */ 355962306a36Sopenharmony_ci uint32_t ec_hsm_id; 356062306a36Sopenharmony_ci /** 356162306a36Sopenharmony_ci * @brief Bitmask of @ref bpmp_ec_status_flags 356262306a36Sopenharmony_ci * 356362306a36Sopenharmony_ci * If NO_ERROR flag is set, error_ fields should be ignored 356462306a36Sopenharmony_ci */ 356562306a36Sopenharmony_ci uint32_t ec_status_flags; 356662306a36Sopenharmony_ci /** @brief Found EC error index. */ 356762306a36Sopenharmony_ci uint32_t error_idx; 356862306a36Sopenharmony_ci /** @brief Found EC error type @ref bpmp_ec_err_type. */ 356962306a36Sopenharmony_ci uint32_t error_type; 357062306a36Sopenharmony_ci /** @brief Number of returned EC error descriptors */ 357162306a36Sopenharmony_ci uint32_t error_desc_num; 357262306a36Sopenharmony_ci /** @brief EC error descriptors */ 357362306a36Sopenharmony_ci union ec_err_desc error_descs[EC_ERR_STATUS_DESC_MAX_NUM]; 357462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 357562306a36Sopenharmony_ci/** @endcond DEPRECATED */ 357662306a36Sopenharmony_ci 357762306a36Sopenharmony_cistruct cmd_ec_status_ex_get_response { 357862306a36Sopenharmony_ci /** @brief Target EC id (the same id received with request). */ 357962306a36Sopenharmony_ci uint32_t ec_hsm_id; 358062306a36Sopenharmony_ci /** 358162306a36Sopenharmony_ci * @brief Bitmask of @ref bpmp_ec_status_flags 358262306a36Sopenharmony_ci * 358362306a36Sopenharmony_ci * If NO_ERROR flag is set, error_ fields should be ignored 358462306a36Sopenharmony_ci */ 358562306a36Sopenharmony_ci uint32_t ec_status_flags; 358662306a36Sopenharmony_ci /** @brief Found EC error index. */ 358762306a36Sopenharmony_ci uint32_t error_idx; 358862306a36Sopenharmony_ci /** @brief Found EC error type @ref bpmp_ec_err_type. */ 358962306a36Sopenharmony_ci uint32_t error_type; 359062306a36Sopenharmony_ci /** @brief Found EC mission error counter value */ 359162306a36Sopenharmony_ci uint32_t error_counter; 359262306a36Sopenharmony_ci /** @brief Found EC mission error user value */ 359362306a36Sopenharmony_ci uint32_t error_uval; 359462306a36Sopenharmony_ci /** @brief Reserved entry */ 359562306a36Sopenharmony_ci uint32_t reserved; 359662306a36Sopenharmony_ci /** @brief Number of returned EC error descriptors */ 359762306a36Sopenharmony_ci uint32_t error_desc_num; 359862306a36Sopenharmony_ci /** @brief EC error descriptors */ 359962306a36Sopenharmony_ci union ec_err_desc error_descs[EC_ERR_STATUS_DESC_MAX_NUM]; 360062306a36Sopenharmony_ci} BPMP_ABI_PACKED; 360162306a36Sopenharmony_ci 360262306a36Sopenharmony_ci/** 360362306a36Sopenharmony_ci * @ingroup EC 360462306a36Sopenharmony_ci * @brief Request with #MRQ_EC 360562306a36Sopenharmony_ci * 360662306a36Sopenharmony_ci * Used by the sender of an #MRQ_EC message to access ECs owned 360762306a36Sopenharmony_ci * by BPMP. 360862306a36Sopenharmony_ci * 360962306a36Sopenharmony_ci * @cond DEPRECATED 361062306a36Sopenharmony_ci * |sub-command |payload | 361162306a36Sopenharmony_ci * |----------------------------|-----------------------| 361262306a36Sopenharmony_ci * |@ref CMD_EC_STATUS_GET |ec_status_get | 361362306a36Sopenharmony_ci * @endcond DEPRECATED 361462306a36Sopenharmony_ci * 361562306a36Sopenharmony_ci * |sub-command |payload | 361662306a36Sopenharmony_ci * |----------------------------|-----------------------| 361762306a36Sopenharmony_ci * |@ref CMD_EC_STATUS_EX_GET |ec_status_get | 361862306a36Sopenharmony_ci * 361962306a36Sopenharmony_ci */ 362062306a36Sopenharmony_ci 362162306a36Sopenharmony_cistruct mrq_ec_request { 362262306a36Sopenharmony_ci /** @brief Sub-command id. */ 362362306a36Sopenharmony_ci uint32_t cmd_id; 362462306a36Sopenharmony_ci 362562306a36Sopenharmony_ci union { 362662306a36Sopenharmony_ci struct cmd_ec_status_get_request ec_status_get; 362762306a36Sopenharmony_ci } BPMP_UNION_ANON; 362862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 362962306a36Sopenharmony_ci 363062306a36Sopenharmony_ci/** 363162306a36Sopenharmony_ci * @ingroup EC 363262306a36Sopenharmony_ci * @brief Response to MRQ_EC 363362306a36Sopenharmony_ci * 363462306a36Sopenharmony_ci * Each sub-command supported by @ref mrq_ec_request may return 363562306a36Sopenharmony_ci * sub-command-specific data as indicated below. 363662306a36Sopenharmony_ci * 363762306a36Sopenharmony_ci * @cond DEPRECATED 363862306a36Sopenharmony_ci * |sub-command |payload | 363962306a36Sopenharmony_ci * |----------------------------|------------------------| 364062306a36Sopenharmony_ci * |@ref CMD_EC_STATUS_GET |ec_status_get | 364162306a36Sopenharmony_ci * @endcond DEPRECATED 364262306a36Sopenharmony_ci * 364362306a36Sopenharmony_ci * |sub-command |payload | 364462306a36Sopenharmony_ci * |----------------------------|------------------------| 364562306a36Sopenharmony_ci * |@ref CMD_EC_STATUS_EX_GET |ec_status_ex_get | 364662306a36Sopenharmony_ci * 364762306a36Sopenharmony_ci */ 364862306a36Sopenharmony_ci 364962306a36Sopenharmony_cistruct mrq_ec_response { 365062306a36Sopenharmony_ci union { 365162306a36Sopenharmony_ci /** 365262306a36Sopenharmony_ci * @cond DEPRECATED 365362306a36Sopenharmony_ci */ 365462306a36Sopenharmony_ci struct cmd_ec_status_get_response ec_status_get; 365562306a36Sopenharmony_ci /** @endcond DEPRECATED */ 365662306a36Sopenharmony_ci struct cmd_ec_status_ex_get_response ec_status_ex_get; 365762306a36Sopenharmony_ci } BPMP_UNION_ANON; 365862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 365962306a36Sopenharmony_ci 366062306a36Sopenharmony_ci/** @endcond bpmp_t194 */ 366162306a36Sopenharmony_ci/** @} EC */ 366262306a36Sopenharmony_ci 366362306a36Sopenharmony_ci/** 366462306a36Sopenharmony_ci * @ingroup MRQ_Codes 366562306a36Sopenharmony_ci * @def MRQ_TELEMETRY 366662306a36Sopenharmony_ci * @brief Get address of memory buffer refreshed with recently sampled 366762306a36Sopenharmony_ci * telemetry data 366862306a36Sopenharmony_ci * 366962306a36Sopenharmony_ci * * Platforms: TH500 onwards 367062306a36Sopenharmony_ci * @cond bpmp_th500 367162306a36Sopenharmony_ci * * Initiators: CCPLEX 367262306a36Sopenharmony_ci * * Targets: BPMP 367362306a36Sopenharmony_ci * * Request Payload: N/A 367462306a36Sopenharmony_ci * * Response Payload: @ref mrq_telemetry_response 367562306a36Sopenharmony_ci * @addtogroup Telemetry 367662306a36Sopenharmony_ci * @{ 367762306a36Sopenharmony_ci */ 367862306a36Sopenharmony_ci 367962306a36Sopenharmony_ci/** 368062306a36Sopenharmony_ci * @brief Response to #MRQ_TELEMETRY 368162306a36Sopenharmony_ci * 368262306a36Sopenharmony_ci * mrq_response::err is 368362306a36Sopenharmony_ci * * 0: Telemetry data is available at returned address 368462306a36Sopenharmony_ci * * -#BPMP_EACCES: MRQ master is not allowed to request buffer refresh 368562306a36Sopenharmony_ci * * -#BPMP_ENAVAIL: Telemetry buffer cannot be refreshed via this MRQ channel 368662306a36Sopenharmony_ci * * -#BPMP_ENOTSUP: Telemetry buffer is not supported by BPMP-FW 368762306a36Sopenharmony_ci * * -#BPMP_ENODEV: Telemetry mrq is not supported by BPMP-FW 368862306a36Sopenharmony_ci */ 368962306a36Sopenharmony_cistruct mrq_telemetry_response { 369062306a36Sopenharmony_ci /** @brief Physical address of telemetry data buffer */ 369162306a36Sopenharmony_ci uint64_t data_buf_addr; /**< see @ref bpmp_telemetry_layout */ 369262306a36Sopenharmony_ci} BPMP_ABI_PACKED; 369362306a36Sopenharmony_ci 369462306a36Sopenharmony_ci/** @} Telemetry */ 369562306a36Sopenharmony_ci/** @endcond bpmp_th500 */ 369662306a36Sopenharmony_ci 369762306a36Sopenharmony_ci/** 369862306a36Sopenharmony_ci * @ingroup MRQ_Codes 369962306a36Sopenharmony_ci * @def MRQ_PWR_LIMIT 370062306a36Sopenharmony_ci * @brief Control power limits. 370162306a36Sopenharmony_ci * 370262306a36Sopenharmony_ci * * Platforms: TH500 onwards 370362306a36Sopenharmony_ci * @cond bpmp_th500 370462306a36Sopenharmony_ci * * Initiators: Any 370562306a36Sopenharmony_ci * * Targets: BPMP 370662306a36Sopenharmony_ci * * Request Payload: @ref mrq_pwr_limit_request 370762306a36Sopenharmony_ci * * Response Payload: @ref mrq_pwr_limit_response 370862306a36Sopenharmony_ci * 370962306a36Sopenharmony_ci * @addtogroup Pwrlimit 371062306a36Sopenharmony_ci * @{ 371162306a36Sopenharmony_ci */ 371262306a36Sopenharmony_cienum mrq_pwr_limit_cmd { 371362306a36Sopenharmony_ci /** 371462306a36Sopenharmony_ci * @brief Check whether the BPMP-FW supports the specified 371562306a36Sopenharmony_ci * command 371662306a36Sopenharmony_ci * 371762306a36Sopenharmony_ci * mrq_response::err is 0 if the specified request is 371862306a36Sopenharmony_ci * supported and -#BPMP_ENODEV otherwise. 371962306a36Sopenharmony_ci */ 372062306a36Sopenharmony_ci CMD_PWR_LIMIT_QUERY_ABI = 0, 372162306a36Sopenharmony_ci 372262306a36Sopenharmony_ci /** 372362306a36Sopenharmony_ci * @brief Set power limit 372462306a36Sopenharmony_ci * 372562306a36Sopenharmony_ci * mrq_response:err is 372662306a36Sopenharmony_ci * * 0: Success 372762306a36Sopenharmony_ci * * -#BPMP_ENODEV: Pwr limit mrq is not supported by BPMP-FW 372862306a36Sopenharmony_ci * * -#BPMP_ENAVAIL: Invalid request parameters 372962306a36Sopenharmony_ci * * -#BPMP_EACCES: Request is not accepted 373062306a36Sopenharmony_ci */ 373162306a36Sopenharmony_ci CMD_PWR_LIMIT_SET = 1, 373262306a36Sopenharmony_ci 373362306a36Sopenharmony_ci /** 373462306a36Sopenharmony_ci * @brief Get power limit setting 373562306a36Sopenharmony_ci * 373662306a36Sopenharmony_ci * mrq_response:err is 373762306a36Sopenharmony_ci * * 0: Success 373862306a36Sopenharmony_ci * * -#BPMP_ENODEV: Pwr limit mrq is not supported by BPMP-FW 373962306a36Sopenharmony_ci * * -#BPMP_ENAVAIL: Invalid request parameters 374062306a36Sopenharmony_ci */ 374162306a36Sopenharmony_ci CMD_PWR_LIMIT_GET = 2, 374262306a36Sopenharmony_ci 374362306a36Sopenharmony_ci /** 374462306a36Sopenharmony_ci * @brief Get current power cap 374562306a36Sopenharmony_ci * 374662306a36Sopenharmony_ci * mrq_response:err is 374762306a36Sopenharmony_ci * * 0: Success 374862306a36Sopenharmony_ci * * -#BPMP_ENODEV: Pwr limit mrq is not supported by BPMP-FW 374962306a36Sopenharmony_ci * * -#BPMP_ENAVAIL: Invalid request parameters 375062306a36Sopenharmony_ci */ 375162306a36Sopenharmony_ci CMD_PWR_LIMIT_CURR_CAP = 3, 375262306a36Sopenharmony_ci}; 375362306a36Sopenharmony_ci 375462306a36Sopenharmony_ci/** 375562306a36Sopenharmony_ci * @defgroup bpmp_pwr_limit_type PWR_LIMIT TYPEs 375662306a36Sopenharmony_ci * @{ 375762306a36Sopenharmony_ci */ 375862306a36Sopenharmony_ci/** @brief Limit value specifies traget cap */ 375962306a36Sopenharmony_ci#define PWR_LIMIT_TYPE_TARGET_CAP 0U 376062306a36Sopenharmony_ci/** @brief Limit value specifies maximum possible target cap */ 376162306a36Sopenharmony_ci#define PWR_LIMIT_TYPE_BOUND_MAX 1U 376262306a36Sopenharmony_ci/** @brief Limit value specifies minimum possible target cap */ 376362306a36Sopenharmony_ci#define PWR_LIMIT_TYPE_BOUND_MIN 2U 376462306a36Sopenharmony_ci/** @brief Number of limit types supported by mrq interface */ 376562306a36Sopenharmony_ci#define PWR_LIMIT_TYPE_NUM 3U 376662306a36Sopenharmony_ci 376762306a36Sopenharmony_ci/** @} bpmp_pwr_limit_type */ 376862306a36Sopenharmony_ci 376962306a36Sopenharmony_ci/** 377062306a36Sopenharmony_ci * @brief Request data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_QUERY_ABI 377162306a36Sopenharmony_ci */ 377262306a36Sopenharmony_cistruct cmd_pwr_limit_query_abi_request { 377362306a36Sopenharmony_ci uint32_t cmd_code; /**< @ref mrq_pwr_limit_cmd */ 377462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 377562306a36Sopenharmony_ci 377662306a36Sopenharmony_ci/** 377762306a36Sopenharmony_ci * @brief Request data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_SET 377862306a36Sopenharmony_ci * 377962306a36Sopenharmony_ci * Set specified limit of specified type from specified source. The success of 378062306a36Sopenharmony_ci * the request means that specified value is accepted as input to arbitration 378162306a36Sopenharmony_ci * with other sources settings for the same limit of the same type. Zero limit 378262306a36Sopenharmony_ci * is ignored by the arbitration (i.e., indicates "no limit set"). 378362306a36Sopenharmony_ci */ 378462306a36Sopenharmony_cistruct cmd_pwr_limit_set_request { 378562306a36Sopenharmony_ci uint32_t limit_id; /**< @ref bpmp_pwr_limit_id */ 378662306a36Sopenharmony_ci uint32_t limit_src; /**< @ref bpmp_pwr_limit_src */ 378762306a36Sopenharmony_ci uint32_t limit_type; /**< @ref bpmp_pwr_limit_type */ 378862306a36Sopenharmony_ci uint32_t limit_setting; 378962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 379062306a36Sopenharmony_ci 379162306a36Sopenharmony_ci/** 379262306a36Sopenharmony_ci * @brief Request data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_GET 379362306a36Sopenharmony_ci * 379462306a36Sopenharmony_ci * Get previously set from specified source specified limit value of specified 379562306a36Sopenharmony_ci * type. 379662306a36Sopenharmony_ci */ 379762306a36Sopenharmony_cistruct cmd_pwr_limit_get_request { 379862306a36Sopenharmony_ci uint32_t limit_id; /**< @ref bpmp_pwr_limit_id */ 379962306a36Sopenharmony_ci uint32_t limit_src; /**< @ref bpmp_pwr_limit_src */ 380062306a36Sopenharmony_ci uint32_t limit_type; /**< @ref bpmp_pwr_limit_type */ 380162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 380262306a36Sopenharmony_ci 380362306a36Sopenharmony_ci/** 380462306a36Sopenharmony_ci * @brief Response data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_GET 380562306a36Sopenharmony_ci */ 380662306a36Sopenharmony_cistruct cmd_pwr_limit_get_response { 380762306a36Sopenharmony_ci uint32_t limit_setting; 380862306a36Sopenharmony_ci} BPMP_ABI_PACKED; 380962306a36Sopenharmony_ci 381062306a36Sopenharmony_ci/** 381162306a36Sopenharmony_ci * @brief Request data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_CURR_CAP 381262306a36Sopenharmony_ci * 381362306a36Sopenharmony_ci * For specified limit get current power cap aggregated from all sources. 381462306a36Sopenharmony_ci */ 381562306a36Sopenharmony_cistruct cmd_pwr_limit_curr_cap_request { 381662306a36Sopenharmony_ci uint32_t limit_id; /**< @ref bpmp_pwr_limit_id */ 381762306a36Sopenharmony_ci} BPMP_ABI_PACKED; 381862306a36Sopenharmony_ci 381962306a36Sopenharmony_ci/** 382062306a36Sopenharmony_ci * @brief Response data for #MRQ_PWR_LIMIT command CMD_PWR_LIMIT_CURR_CAP 382162306a36Sopenharmony_ci */ 382262306a36Sopenharmony_cistruct cmd_pwr_limit_curr_cap_response { 382362306a36Sopenharmony_ci uint32_t curr_cap; 382462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 382562306a36Sopenharmony_ci 382662306a36Sopenharmony_ci/** 382762306a36Sopenharmony_ci * @brief Request with #MRQ_PWR_LIMIT 382862306a36Sopenharmony_ci * 382962306a36Sopenharmony_ci * |sub-command |payload | 383062306a36Sopenharmony_ci * |----------------------------|---------------------------------| 383162306a36Sopenharmony_ci * |CMD_PWR_LIMIT_QUERY_ABI | cmd_pwr_limit_query_abi_request | 383262306a36Sopenharmony_ci * |CMD_PWR_LIMIT_SET | cmd_pwr_limit_set_request | 383362306a36Sopenharmony_ci * |CMD_PWR_LIMIT_GET | cmd_pwr_limit_get_request | 383462306a36Sopenharmony_ci * |CMD_PWR_LIMIT_CURR_CAP | cmd_pwr_limit_curr_cap_request | 383562306a36Sopenharmony_ci */ 383662306a36Sopenharmony_cistruct mrq_pwr_limit_request { 383762306a36Sopenharmony_ci uint32_t cmd; 383862306a36Sopenharmony_ci union { 383962306a36Sopenharmony_ci struct cmd_pwr_limit_query_abi_request pwr_limit_query_abi_req; 384062306a36Sopenharmony_ci struct cmd_pwr_limit_set_request pwr_limit_set_req; 384162306a36Sopenharmony_ci struct cmd_pwr_limit_get_request pwr_limit_get_req; 384262306a36Sopenharmony_ci struct cmd_pwr_limit_curr_cap_request pwr_limit_curr_cap_req; 384362306a36Sopenharmony_ci } BPMP_UNION_ANON; 384462306a36Sopenharmony_ci} BPMP_ABI_PACKED; 384562306a36Sopenharmony_ci 384662306a36Sopenharmony_ci/** 384762306a36Sopenharmony_ci * @brief Response to MRQ_PWR_LIMIT 384862306a36Sopenharmony_ci * 384962306a36Sopenharmony_ci * |sub-command |payload | 385062306a36Sopenharmony_ci * |----------------------------|---------------------------------| 385162306a36Sopenharmony_ci * |CMD_PWR_LIMIT_QUERY_ABI | - | 385262306a36Sopenharmony_ci * |CMD_PWR_LIMIT_SET | - | 385362306a36Sopenharmony_ci * |CMD_PWR_LIMIT_GET | cmd_pwr_limit_get_response | 385462306a36Sopenharmony_ci * |CMD_PWR_LIMIT_CURR_CAP | cmd_pwr_limit_curr_cap_response | 385562306a36Sopenharmony_ci */ 385662306a36Sopenharmony_cistruct mrq_pwr_limit_response { 385762306a36Sopenharmony_ci union { 385862306a36Sopenharmony_ci struct cmd_pwr_limit_get_response pwr_limit_get_rsp; 385962306a36Sopenharmony_ci struct cmd_pwr_limit_curr_cap_response pwr_limit_curr_cap_rsp; 386062306a36Sopenharmony_ci } BPMP_UNION_ANON; 386162306a36Sopenharmony_ci} BPMP_ABI_PACKED; 386262306a36Sopenharmony_ci 386362306a36Sopenharmony_ci/** @} PwrLimit */ 386462306a36Sopenharmony_ci/** @endcond bpmp_th500 */ 386562306a36Sopenharmony_ci 386662306a36Sopenharmony_ci 386762306a36Sopenharmony_ci/** 386862306a36Sopenharmony_ci * @ingroup MRQ_Codes 386962306a36Sopenharmony_ci * @def MRQ_GEARS 387062306a36Sopenharmony_ci * @brief Get thresholds for NDIV offset switching 387162306a36Sopenharmony_ci * 387262306a36Sopenharmony_ci * * Platforms: TH500 onwards 387362306a36Sopenharmony_ci * @cond bpmp_th500 387462306a36Sopenharmony_ci * * Initiators: CCPLEX 387562306a36Sopenharmony_ci * * Targets: BPMP 387662306a36Sopenharmony_ci * * Request Payload: N/A 387762306a36Sopenharmony_ci * * Response Payload: @ref mrq_gears_response 387862306a36Sopenharmony_ci * @addtogroup Gears 387962306a36Sopenharmony_ci * @{ 388062306a36Sopenharmony_ci */ 388162306a36Sopenharmony_ci 388262306a36Sopenharmony_ci/** 388362306a36Sopenharmony_ci * @brief Response to #MRQ_GEARS 388462306a36Sopenharmony_ci * 388562306a36Sopenharmony_ci * Used by the sender of an #MRQ_GEARS message to request thresholds 388662306a36Sopenharmony_ci * for NDIV offset switching. 388762306a36Sopenharmony_ci * 388862306a36Sopenharmony_ci * The mrq_gears_response::ncpu array defines four thresholds in units 388962306a36Sopenharmony_ci * of number of online CPUS to be used for choosing between five different 389062306a36Sopenharmony_ci * NDIV offset settings for CCPLEX cluster NAFLLs 389162306a36Sopenharmony_ci * 389262306a36Sopenharmony_ci * 1. If number of online CPUs < ncpu[0] use offset0 389362306a36Sopenharmony_ci * 2. If number of online CPUs < ncpu[1] use offset1 389462306a36Sopenharmony_ci * 3. If number of online CPUs < ncpu[2] use offset2 389562306a36Sopenharmony_ci * 4. If number of online CPUs < ncpu[3] use offset3 389662306a36Sopenharmony_ci * 5. If number of online CPUs >= ncpu[3] disable offsetting 389762306a36Sopenharmony_ci * 389862306a36Sopenharmony_ci * For TH500 mrq_gears_response::ncpu array has four valid entries. 389962306a36Sopenharmony_ci * 390062306a36Sopenharmony_ci * mrq_response::err is 390162306a36Sopenharmony_ci * * 0: gears defined and response data valid 390262306a36Sopenharmony_ci * * -#BPMP_ENODEV: MRQ is not supported by BPMP-FW 390362306a36Sopenharmony_ci * * -#BPMP_EACCES: Operation not permitted for the MRQ master 390462306a36Sopenharmony_ci * * -#BPMP_ENAVAIL: NDIV offsetting is disabled 390562306a36Sopenharmony_ci */ 390662306a36Sopenharmony_cistruct mrq_gears_response { 390762306a36Sopenharmony_ci /** @brief number of online CPUs for each gear */ 390862306a36Sopenharmony_ci uint32_t ncpu[16]; 390962306a36Sopenharmony_ci} BPMP_ABI_PACKED; 391062306a36Sopenharmony_ci 391162306a36Sopenharmony_ci/** @} Gears */ 391262306a36Sopenharmony_ci/** @endcond bpmp_th500 */ 391362306a36Sopenharmony_ci 391462306a36Sopenharmony_ci/** 391562306a36Sopenharmony_ci * @addtogroup Error_Codes 391662306a36Sopenharmony_ci * Negative values for mrq_response::err generally indicate some 391762306a36Sopenharmony_ci * error. The ABI defines the following error codes. Negating these 391862306a36Sopenharmony_ci * defines is an exercise left to the user. 391962306a36Sopenharmony_ci * @{ 392062306a36Sopenharmony_ci */ 392162306a36Sopenharmony_ci 392262306a36Sopenharmony_ci/** @brief Operation not permitted */ 392362306a36Sopenharmony_ci#define BPMP_EPERM 1 392462306a36Sopenharmony_ci/** @brief No such file or directory */ 392562306a36Sopenharmony_ci#define BPMP_ENOENT 2 392662306a36Sopenharmony_ci/** @brief No MRQ handler */ 392762306a36Sopenharmony_ci#define BPMP_ENOHANDLER 3 392862306a36Sopenharmony_ci/** @brief I/O error */ 392962306a36Sopenharmony_ci#define BPMP_EIO 5 393062306a36Sopenharmony_ci/** @brief Bad sub-MRQ command */ 393162306a36Sopenharmony_ci#define BPMP_EBADCMD 6 393262306a36Sopenharmony_ci/** @brief Resource temporarily unavailable */ 393362306a36Sopenharmony_ci#define BPMP_EAGAIN 11 393462306a36Sopenharmony_ci/** @brief Not enough memory */ 393562306a36Sopenharmony_ci#define BPMP_ENOMEM 12 393662306a36Sopenharmony_ci/** @brief Permission denied */ 393762306a36Sopenharmony_ci#define BPMP_EACCES 13 393862306a36Sopenharmony_ci/** @brief Bad address */ 393962306a36Sopenharmony_ci#define BPMP_EFAULT 14 394062306a36Sopenharmony_ci/** @brief Resource busy */ 394162306a36Sopenharmony_ci#define BPMP_EBUSY 16 394262306a36Sopenharmony_ci/** @brief No such device */ 394362306a36Sopenharmony_ci#define BPMP_ENODEV 19 394462306a36Sopenharmony_ci/** @brief Argument is a directory */ 394562306a36Sopenharmony_ci#define BPMP_EISDIR 21 394662306a36Sopenharmony_ci/** @brief Invalid argument */ 394762306a36Sopenharmony_ci#define BPMP_EINVAL 22 394862306a36Sopenharmony_ci/** @brief Timeout during operation */ 394962306a36Sopenharmony_ci#define BPMP_ETIMEDOUT 23 395062306a36Sopenharmony_ci/** @brief Out of range */ 395162306a36Sopenharmony_ci#define BPMP_ERANGE 34 395262306a36Sopenharmony_ci/** @brief Function not implemented */ 395362306a36Sopenharmony_ci#define BPMP_ENOSYS 38 395462306a36Sopenharmony_ci/** @brief Invalid slot */ 395562306a36Sopenharmony_ci#define BPMP_EBADSLT 57 395662306a36Sopenharmony_ci/** @brief Invalid message */ 395762306a36Sopenharmony_ci#define BPMP_EBADMSG 77 395862306a36Sopenharmony_ci/** @brief Operation not supported */ 395962306a36Sopenharmony_ci#define BPMP_EOPNOTSUPP 95 396062306a36Sopenharmony_ci/** @brief Targeted resource not available */ 396162306a36Sopenharmony_ci#define BPMP_ENAVAIL 119 396262306a36Sopenharmony_ci/** @brief Not supported */ 396362306a36Sopenharmony_ci#define BPMP_ENOTSUP 134 396462306a36Sopenharmony_ci/** @brief No such device or address */ 396562306a36Sopenharmony_ci#define BPMP_ENXIO 140 396662306a36Sopenharmony_ci 396762306a36Sopenharmony_ci/** @} Error_Codes */ 396862306a36Sopenharmony_ci 396962306a36Sopenharmony_ci#if defined(BPMP_ABI_CHECKS) 397062306a36Sopenharmony_ci#include "bpmp_abi_checks.h" 397162306a36Sopenharmony_ci#endif 397262306a36Sopenharmony_ci 397362306a36Sopenharmony_ci#endif 3974