132cd2512SLokesh Vutla /* SPDX-License-Identifier: BSD-3-Clause */ 232cd2512SLokesh Vutla /* 332cd2512SLokesh Vutla * Texas Instruments System Control Interface (TISCI) Protocol 432cd2512SLokesh Vutla * 532cd2512SLokesh Vutla * Communication protocol with TI SCI hardware 632cd2512SLokesh Vutla * The system works in a message response protocol 732cd2512SLokesh Vutla * See: http://processors.wiki.ti.com/index.php/TISCI for details 832cd2512SLokesh Vutla * 932cd2512SLokesh Vutla * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/ 1032cd2512SLokesh Vutla * Based on drivers/firmware/ti_sci.h from Linux. 1132cd2512SLokesh Vutla * 1232cd2512SLokesh Vutla */ 1332cd2512SLokesh Vutla 1432cd2512SLokesh Vutla #ifndef __TI_SCI_H 1532cd2512SLokesh Vutla #define __TI_SCI_H 1632cd2512SLokesh Vutla 1732cd2512SLokesh Vutla /* Generic Messages */ 1832cd2512SLokesh Vutla #define TI_SCI_MSG_ENABLE_WDT 0x0000 1932cd2512SLokesh Vutla #define TI_SCI_MSG_WAKE_RESET 0x0001 2032cd2512SLokesh Vutla #define TI_SCI_MSG_VERSION 0x0002 2132cd2512SLokesh Vutla #define TI_SCI_MSG_WAKE_REASON 0x0003 2232cd2512SLokesh Vutla #define TI_SCI_MSG_GOODBYE 0x0004 2332cd2512SLokesh Vutla #define TI_SCI_MSG_SYS_RESET 0x0005 2432cd2512SLokesh Vutla #define TI_SCI_MSG_BOARD_CONFIG 0x000b 25dcfc52adSAndreas Dannenberg #define TI_SCI_MSG_BOARD_CONFIG_RM 0x000c 26dcfc52adSAndreas Dannenberg #define TI_SCI_MSG_BOARD_CONFIG_SECURITY 0x000d 27dcfc52adSAndreas Dannenberg #define TI_SCI_MSG_BOARD_CONFIG_PM 0x000e 2832cd2512SLokesh Vutla 297bc33045SAndreas Dannenberg /* Device requests */ 307bc33045SAndreas Dannenberg #define TI_SCI_MSG_SET_DEVICE_STATE 0x0200 317bc33045SAndreas Dannenberg #define TI_SCI_MSG_GET_DEVICE_STATE 0x0201 327bc33045SAndreas Dannenberg #define TI_SCI_MSG_SET_DEVICE_RESETS 0x0202 337bc33045SAndreas Dannenberg 349b87181fSLokesh Vutla /* Clock requests */ 359b87181fSLokesh Vutla #define TI_SCI_MSG_SET_CLOCK_STATE 0x0100 369b87181fSLokesh Vutla #define TI_SCI_MSG_GET_CLOCK_STATE 0x0101 379b87181fSLokesh Vutla #define TI_SCI_MSG_SET_CLOCK_PARENT 0x0102 389b87181fSLokesh Vutla #define TI_SCI_MSG_GET_CLOCK_PARENT 0x0103 399b87181fSLokesh Vutla #define TI_SCI_MSG_GET_NUM_CLOCK_PARENTS 0x0104 409b87181fSLokesh Vutla #define TI_SCI_MSG_SET_CLOCK_FREQ 0x010c 419b87181fSLokesh Vutla #define TI_SCI_MSG_QUERY_CLOCK_FREQ 0x010d 429b87181fSLokesh Vutla #define TI_SCI_MSG_GET_CLOCK_FREQ 0x010e 439b87181fSLokesh Vutla 44*ccbc8b2fSLokesh Vutla /* Processor Control Messages */ 45*ccbc8b2fSLokesh Vutla #define TISCI_MSG_PROC_REQUEST 0xc000 46*ccbc8b2fSLokesh Vutla #define TISCI_MSG_PROC_RELEASE 0xc001 47*ccbc8b2fSLokesh Vutla #define TISCI_MSG_PROC_HANDOVER 0xc005 48*ccbc8b2fSLokesh Vutla #define TISCI_MSG_SET_PROC_BOOT_CONFIG 0xc100 49*ccbc8b2fSLokesh Vutla #define TISCI_MSG_SET_PROC_BOOT_CTRL 0xc101 50*ccbc8b2fSLokesh Vutla #define TISCI_MSG_PROC_AUTH_BOOT_IMIAGE 0xc120 51*ccbc8b2fSLokesh Vutla #define TISCI_MSG_GET_PROC_BOOT_STATUS 0xc400 52*ccbc8b2fSLokesh Vutla 5332cd2512SLokesh Vutla /** 5432cd2512SLokesh Vutla * struct ti_sci_msg_hdr - Generic Message Header for All messages and responses 5532cd2512SLokesh Vutla * @type: Type of messages: One of TI_SCI_MSG* values 5632cd2512SLokesh Vutla * @host: Host of the message 5732cd2512SLokesh Vutla * @seq: Message identifier indicating a transfer sequence 5832cd2512SLokesh Vutla * @flags: Flag for the message 5932cd2512SLokesh Vutla */ 6032cd2512SLokesh Vutla struct ti_sci_msg_hdr { 6132cd2512SLokesh Vutla u16 type; 6232cd2512SLokesh Vutla u8 host; 6332cd2512SLokesh Vutla u8 seq; 6432cd2512SLokesh Vutla #define TI_SCI_MSG_FLAG(val) (1 << (val)) 6532cd2512SLokesh Vutla #define TI_SCI_FLAG_REQ_GENERIC_NORESPONSE 0x0 6632cd2512SLokesh Vutla #define TI_SCI_FLAG_REQ_ACK_ON_RECEIVED TI_SCI_MSG_FLAG(0) 6732cd2512SLokesh Vutla #define TI_SCI_FLAG_REQ_ACK_ON_PROCESSED TI_SCI_MSG_FLAG(1) 6832cd2512SLokesh Vutla #define TI_SCI_FLAG_RESP_GENERIC_NACK 0x0 6932cd2512SLokesh Vutla #define TI_SCI_FLAG_RESP_GENERIC_ACK TI_SCI_MSG_FLAG(1) 7032cd2512SLokesh Vutla /* Additional Flags */ 7132cd2512SLokesh Vutla u32 flags; 7232cd2512SLokesh Vutla } __packed; 7332cd2512SLokesh Vutla 7432cd2512SLokesh Vutla /** 7532cd2512SLokesh Vutla * struct ti_sci_secure_msg_hdr - Header that prefixes all TISCI messages sent 7632cd2512SLokesh Vutla * via secure transport. 7732cd2512SLokesh Vutla * @checksum: crc16 checksum for the entire message 7832cd2512SLokesh Vutla * @reserved: Reserved for future use. 7932cd2512SLokesh Vutla */ 8032cd2512SLokesh Vutla struct ti_sci_secure_msg_hdr { 8132cd2512SLokesh Vutla u16 checksum; 8232cd2512SLokesh Vutla u16 reserved; 8332cd2512SLokesh Vutla } __packed; 8432cd2512SLokesh Vutla 8532cd2512SLokesh Vutla /** 8632cd2512SLokesh Vutla * struct ti_sci_msg_resp_version - Response for a message 8732cd2512SLokesh Vutla * @hdr: Generic header 8832cd2512SLokesh Vutla * @firmware_description: String describing the firmware 8932cd2512SLokesh Vutla * @firmware_revision: Firmware revision 9032cd2512SLokesh Vutla * @abi_major: Major version of the ABI that firmware supports 9132cd2512SLokesh Vutla * @abi_minor: Minor version of the ABI that firmware supports 9232cd2512SLokesh Vutla * 9332cd2512SLokesh Vutla * In general, ABI version changes follow the rule that minor version increments 9432cd2512SLokesh Vutla * are backward compatible. Major revision changes in ABI may not be 9532cd2512SLokesh Vutla * backward compatible. 9632cd2512SLokesh Vutla * 9732cd2512SLokesh Vutla * Response to a generic message with message type TI_SCI_MSG_VERSION 9832cd2512SLokesh Vutla */ 9932cd2512SLokesh Vutla struct ti_sci_msg_resp_version { 10032cd2512SLokesh Vutla struct ti_sci_msg_hdr hdr; 10132cd2512SLokesh Vutla char firmware_description[32]; 10232cd2512SLokesh Vutla u16 firmware_revision; 10332cd2512SLokesh Vutla u8 abi_major; 10432cd2512SLokesh Vutla u8 abi_minor; 10532cd2512SLokesh Vutla } __packed; 10632cd2512SLokesh Vutla 107dcfc52adSAndreas Dannenberg /** 108f369b0f2SAndreas Dannenberg * struct ti_sci_msg_req_reboot - Reboot the SoC 109f369b0f2SAndreas Dannenberg * @hdr: Generic Header 110f369b0f2SAndreas Dannenberg * 111f369b0f2SAndreas Dannenberg * Request type is TI_SCI_MSG_SYS_RESET, responded with a generic 112f369b0f2SAndreas Dannenberg * ACK/NACK message. 113f369b0f2SAndreas Dannenberg */ 114f369b0f2SAndreas Dannenberg struct ti_sci_msg_req_reboot { 115f369b0f2SAndreas Dannenberg struct ti_sci_msg_hdr hdr; 116f369b0f2SAndreas Dannenberg } __packed; 117f369b0f2SAndreas Dannenberg 118f369b0f2SAndreas Dannenberg /** 119dcfc52adSAndreas Dannenberg * struct ti_sci_msg_board_config - Board configuration message 120dcfc52adSAndreas Dannenberg * @hdr: Generic Header 121dcfc52adSAndreas Dannenberg * @boardcfgp_low: Lower 32 bit of the pointer pointing to the board 122dcfc52adSAndreas Dannenberg * configuration data 123dcfc52adSAndreas Dannenberg * @boardcfgp_high: Upper 32 bit of the pointer pointing to the board 124dcfc52adSAndreas Dannenberg * configuration data 125dcfc52adSAndreas Dannenberg * @boardcfg_size: Size of board configuration data object 126dcfc52adSAndreas Dannenberg * Request type is TI_SCI_MSG_BOARD_CONFIG, responded with a generic 127dcfc52adSAndreas Dannenberg * ACK/NACK message. 128dcfc52adSAndreas Dannenberg */ 129dcfc52adSAndreas Dannenberg struct ti_sci_msg_board_config { 130dcfc52adSAndreas Dannenberg struct ti_sci_msg_hdr hdr; 131dcfc52adSAndreas Dannenberg u32 boardcfgp_low; 132dcfc52adSAndreas Dannenberg u32 boardcfgp_high; 133dcfc52adSAndreas Dannenberg u16 boardcfg_size; 134dcfc52adSAndreas Dannenberg } __packed; 135dcfc52adSAndreas Dannenberg 1367bc33045SAndreas Dannenberg /** 1377bc33045SAndreas Dannenberg * struct ti_sci_msg_req_set_device_state - Set the desired state of the device 1387bc33045SAndreas Dannenberg * @hdr: Generic header 1397bc33045SAndreas Dannenberg * @id: Indicates which device to modify 1407bc33045SAndreas Dannenberg * @reserved: Reserved space in message, must be 0 for backward compatibility 1417bc33045SAndreas Dannenberg * @state: The desired state of the device. 1427bc33045SAndreas Dannenberg * 1437bc33045SAndreas Dannenberg * Certain flags can also be set to alter the device state: 1447bc33045SAndreas Dannenberg * + MSG_FLAG_DEVICE_WAKE_ENABLED - Configure the device to be a wake source. 1457bc33045SAndreas Dannenberg * The meaning of this flag will vary slightly from device to device and from 1467bc33045SAndreas Dannenberg * SoC to SoC but it generally allows the device to wake the SoC out of deep 1477bc33045SAndreas Dannenberg * suspend states. 1487bc33045SAndreas Dannenberg * + MSG_FLAG_DEVICE_RESET_ISO - Enable reset isolation for this device. 1497bc33045SAndreas Dannenberg * + MSG_FLAG_DEVICE_EXCLUSIVE - Claim this device exclusively. When passed 1507bc33045SAndreas Dannenberg * with STATE_RETENTION or STATE_ON, it will claim the device exclusively. 1517bc33045SAndreas Dannenberg * If another host already has this device set to STATE_RETENTION or STATE_ON, 1527bc33045SAndreas Dannenberg * the message will fail. Once successful, other hosts attempting to set 1537bc33045SAndreas Dannenberg * STATE_RETENTION or STATE_ON will fail. 1547bc33045SAndreas Dannenberg * 1557bc33045SAndreas Dannenberg * Request type is TI_SCI_MSG_SET_DEVICE_STATE, responded with a generic 1567bc33045SAndreas Dannenberg * ACK/NACK message. 1577bc33045SAndreas Dannenberg */ 1587bc33045SAndreas Dannenberg struct ti_sci_msg_req_set_device_state { 1597bc33045SAndreas Dannenberg /* Additional hdr->flags options */ 1607bc33045SAndreas Dannenberg #define MSG_FLAG_DEVICE_WAKE_ENABLED TI_SCI_MSG_FLAG(8) 1617bc33045SAndreas Dannenberg #define MSG_FLAG_DEVICE_RESET_ISO TI_SCI_MSG_FLAG(9) 1627bc33045SAndreas Dannenberg #define MSG_FLAG_DEVICE_EXCLUSIVE TI_SCI_MSG_FLAG(10) 1637bc33045SAndreas Dannenberg struct ti_sci_msg_hdr hdr; 1647bc33045SAndreas Dannenberg u32 id; 1657bc33045SAndreas Dannenberg u32 reserved; 1667bc33045SAndreas Dannenberg 1677bc33045SAndreas Dannenberg #define MSG_DEVICE_SW_STATE_AUTO_OFF 0 1687bc33045SAndreas Dannenberg #define MSG_DEVICE_SW_STATE_RETENTION 1 1697bc33045SAndreas Dannenberg #define MSG_DEVICE_SW_STATE_ON 2 1707bc33045SAndreas Dannenberg u8 state; 1717bc33045SAndreas Dannenberg } __packed; 1727bc33045SAndreas Dannenberg 1737bc33045SAndreas Dannenberg /** 1747bc33045SAndreas Dannenberg * struct ti_sci_msg_req_get_device_state - Request to get device. 1757bc33045SAndreas Dannenberg * @hdr: Generic header 1767bc33045SAndreas Dannenberg * @id: Device Identifier 1777bc33045SAndreas Dannenberg * 1787bc33045SAndreas Dannenberg * Request type is TI_SCI_MSG_GET_DEVICE_STATE, responded device state 1797bc33045SAndreas Dannenberg * information 1807bc33045SAndreas Dannenberg */ 1817bc33045SAndreas Dannenberg struct ti_sci_msg_req_get_device_state { 1827bc33045SAndreas Dannenberg struct ti_sci_msg_hdr hdr; 1837bc33045SAndreas Dannenberg u32 id; 1847bc33045SAndreas Dannenberg } __packed; 1857bc33045SAndreas Dannenberg 1867bc33045SAndreas Dannenberg /** 1877bc33045SAndreas Dannenberg * struct ti_sci_msg_resp_get_device_state - Response to get device request. 1887bc33045SAndreas Dannenberg * @hdr: Generic header 1897bc33045SAndreas Dannenberg * @context_loss_count: Indicates how many times the device has lost context. A 1907bc33045SAndreas Dannenberg * driver can use this monotonic counter to determine if the device has 1917bc33045SAndreas Dannenberg * lost context since the last time this message was exchanged. 1927bc33045SAndreas Dannenberg * @resets: Programmed state of the reset lines. 1937bc33045SAndreas Dannenberg * @programmed_state: The state as programmed by set_device. 1947bc33045SAndreas Dannenberg * - Uses the MSG_DEVICE_SW_* macros 1957bc33045SAndreas Dannenberg * @current_state: The actual state of the hardware. 1967bc33045SAndreas Dannenberg * 1977bc33045SAndreas Dannenberg * Response to request TI_SCI_MSG_GET_DEVICE_STATE. 1987bc33045SAndreas Dannenberg */ 1997bc33045SAndreas Dannenberg struct ti_sci_msg_resp_get_device_state { 2007bc33045SAndreas Dannenberg struct ti_sci_msg_hdr hdr; 2017bc33045SAndreas Dannenberg u32 context_loss_count; 2027bc33045SAndreas Dannenberg u32 resets; 2037bc33045SAndreas Dannenberg u8 programmed_state; 2047bc33045SAndreas Dannenberg #define MSG_DEVICE_HW_STATE_OFF 0 2057bc33045SAndreas Dannenberg #define MSG_DEVICE_HW_STATE_ON 1 2067bc33045SAndreas Dannenberg #define MSG_DEVICE_HW_STATE_TRANS 2 2077bc33045SAndreas Dannenberg u8 current_state; 2087bc33045SAndreas Dannenberg } __packed; 2097bc33045SAndreas Dannenberg 2107bc33045SAndreas Dannenberg /** 2117bc33045SAndreas Dannenberg * struct ti_sci_msg_req_set_device_resets - Set the desired resets 2127bc33045SAndreas Dannenberg * configuration of the device 2137bc33045SAndreas Dannenberg * @hdr: Generic header 2147bc33045SAndreas Dannenberg * @id: Indicates which device to modify 2157bc33045SAndreas Dannenberg * @resets: A bit field of resets for the device. The meaning, behavior, 2167bc33045SAndreas Dannenberg * and usage of the reset flags are device specific. 0 for a bit 2177bc33045SAndreas Dannenberg * indicates releasing the reset represented by that bit while 1 2187bc33045SAndreas Dannenberg * indicates keeping it held. 2197bc33045SAndreas Dannenberg * 2207bc33045SAndreas Dannenberg * Request type is TI_SCI_MSG_SET_DEVICE_RESETS, responded with a generic 2217bc33045SAndreas Dannenberg * ACK/NACK message. 2227bc33045SAndreas Dannenberg */ 2237bc33045SAndreas Dannenberg struct ti_sci_msg_req_set_device_resets { 2247bc33045SAndreas Dannenberg struct ti_sci_msg_hdr hdr; 2257bc33045SAndreas Dannenberg u32 id; 2267bc33045SAndreas Dannenberg u32 resets; 2277bc33045SAndreas Dannenberg } __packed; 2287bc33045SAndreas Dannenberg 2299b87181fSLokesh Vutla /** 2309b87181fSLokesh Vutla * struct ti_sci_msg_req_set_clock_state - Request to setup a Clock state 2319b87181fSLokesh Vutla * @hdr: Generic Header, Certain flags can be set specific to the clocks: 2329b87181fSLokesh Vutla * MSG_FLAG_CLOCK_ALLOW_SSC: Allow this clock to be modified 2339b87181fSLokesh Vutla * via spread spectrum clocking. 2349b87181fSLokesh Vutla * MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE: Allow this clock's 2359b87181fSLokesh Vutla * frequency to be changed while it is running so long as it 2369b87181fSLokesh Vutla * is within the min/max limits. 2379b87181fSLokesh Vutla * MSG_FLAG_CLOCK_INPUT_TERM: Enable input termination, this 2389b87181fSLokesh Vutla * is only applicable to clock inputs on the SoC pseudo-device. 2399b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 2409b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 2419b87181fSLokesh Vutla * Each device has it's own set of clock inputs. This indexes 2429b87181fSLokesh Vutla * which clock input to modify. 2439b87181fSLokesh Vutla * @request_state: Request the state for the clock to be set to. 2449b87181fSLokesh Vutla * MSG_CLOCK_SW_STATE_UNREQ: The IP does not require this clock, 2459b87181fSLokesh Vutla * it can be disabled, regardless of the state of the device 2469b87181fSLokesh Vutla * MSG_CLOCK_SW_STATE_AUTO: Allow the System Controller to 2479b87181fSLokesh Vutla * automatically manage the state of this clock. If the device 2489b87181fSLokesh Vutla * is enabled, then the clock is enabled. If the device is set 2499b87181fSLokesh Vutla * to off or retention, then the clock is internally set as not 2509b87181fSLokesh Vutla * being required by the device.(default) 2519b87181fSLokesh Vutla * MSG_CLOCK_SW_STATE_REQ: Configure the clock to be enabled, 2529b87181fSLokesh Vutla * regardless of the state of the device. 2539b87181fSLokesh Vutla * 2549b87181fSLokesh Vutla * Normally, all required clocks are managed by TISCI entity, this is used 2559b87181fSLokesh Vutla * only for specific control *IF* required. Auto managed state is 2569b87181fSLokesh Vutla * MSG_CLOCK_SW_STATE_AUTO, in other states, TISCI entity assume remote 2579b87181fSLokesh Vutla * will explicitly control. 2589b87181fSLokesh Vutla * 2599b87181fSLokesh Vutla * Request type is TI_SCI_MSG_SET_CLOCK_STATE, response is a generic 2609b87181fSLokesh Vutla * ACK or NACK message. 2619b87181fSLokesh Vutla */ 2629b87181fSLokesh Vutla struct ti_sci_msg_req_set_clock_state { 2639b87181fSLokesh Vutla /* Additional hdr->flags options */ 2649b87181fSLokesh Vutla #define MSG_FLAG_CLOCK_ALLOW_SSC TI_SCI_MSG_FLAG(8) 2659b87181fSLokesh Vutla #define MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE TI_SCI_MSG_FLAG(9) 2669b87181fSLokesh Vutla #define MSG_FLAG_CLOCK_INPUT_TERM TI_SCI_MSG_FLAG(10) 2679b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 2689b87181fSLokesh Vutla u32 dev_id; 2699b87181fSLokesh Vutla u8 clk_id; 2709b87181fSLokesh Vutla #define MSG_CLOCK_SW_STATE_UNREQ 0 2719b87181fSLokesh Vutla #define MSG_CLOCK_SW_STATE_AUTO 1 2729b87181fSLokesh Vutla #define MSG_CLOCK_SW_STATE_REQ 2 2739b87181fSLokesh Vutla u8 request_state; 2749b87181fSLokesh Vutla } __packed; 2759b87181fSLokesh Vutla 2769b87181fSLokesh Vutla /** 2779b87181fSLokesh Vutla * struct ti_sci_msg_req_get_clock_state - Request for clock state 2789b87181fSLokesh Vutla * @hdr: Generic Header 2799b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 2809b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 2819b87181fSLokesh Vutla * Each device has it's own set of clock inputs. This indexes 2829b87181fSLokesh Vutla * which clock input to get state of. 2839b87181fSLokesh Vutla * 2849b87181fSLokesh Vutla * Request type is TI_SCI_MSG_GET_CLOCK_STATE, response is state 2859b87181fSLokesh Vutla * of the clock 2869b87181fSLokesh Vutla */ 2879b87181fSLokesh Vutla struct ti_sci_msg_req_get_clock_state { 2889b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 2899b87181fSLokesh Vutla u32 dev_id; 2909b87181fSLokesh Vutla u8 clk_id; 2919b87181fSLokesh Vutla } __packed; 2929b87181fSLokesh Vutla 2939b87181fSLokesh Vutla /** 2949b87181fSLokesh Vutla * struct ti_sci_msg_resp_get_clock_state - Response to get clock state 2959b87181fSLokesh Vutla * @hdr: Generic Header 2969b87181fSLokesh Vutla * @programmed_state: Any programmed state of the clock. This is one of 2979b87181fSLokesh Vutla * MSG_CLOCK_SW_STATE* values. 2989b87181fSLokesh Vutla * @current_state: Current state of the clock. This is one of: 2999b87181fSLokesh Vutla * MSG_CLOCK_HW_STATE_NOT_READY: Clock is not ready 3009b87181fSLokesh Vutla * MSG_CLOCK_HW_STATE_READY: Clock is ready 3019b87181fSLokesh Vutla * 3029b87181fSLokesh Vutla * Response to TI_SCI_MSG_GET_CLOCK_STATE. 3039b87181fSLokesh Vutla */ 3049b87181fSLokesh Vutla struct ti_sci_msg_resp_get_clock_state { 3059b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3069b87181fSLokesh Vutla u8 programmed_state; 3079b87181fSLokesh Vutla #define MSG_CLOCK_HW_STATE_NOT_READY 0 3089b87181fSLokesh Vutla #define MSG_CLOCK_HW_STATE_READY 1 3099b87181fSLokesh Vutla u8 current_state; 3109b87181fSLokesh Vutla } __packed; 3119b87181fSLokesh Vutla 3129b87181fSLokesh Vutla /** 3139b87181fSLokesh Vutla * struct ti_sci_msg_req_set_clock_parent - Set the clock parent 3149b87181fSLokesh Vutla * @hdr: Generic Header 3159b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 3169b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 3179b87181fSLokesh Vutla * Each device has it's own set of clock inputs. This indexes 3189b87181fSLokesh Vutla * which clock input to modify. 3199b87181fSLokesh Vutla * @parent_id: The new clock parent is selectable by an index via this 3209b87181fSLokesh Vutla * parameter. 3219b87181fSLokesh Vutla * 3229b87181fSLokesh Vutla * Request type is TI_SCI_MSG_SET_CLOCK_PARENT, response is generic 3239b87181fSLokesh Vutla * ACK / NACK message. 3249b87181fSLokesh Vutla */ 3259b87181fSLokesh Vutla struct ti_sci_msg_req_set_clock_parent { 3269b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3279b87181fSLokesh Vutla u32 dev_id; 3289b87181fSLokesh Vutla u8 clk_id; 3299b87181fSLokesh Vutla u8 parent_id; 3309b87181fSLokesh Vutla } __packed; 3319b87181fSLokesh Vutla 3329b87181fSLokesh Vutla /** 3339b87181fSLokesh Vutla * struct ti_sci_msg_req_get_clock_parent - Get the clock parent 3349b87181fSLokesh Vutla * @hdr: Generic Header 3359b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 3369b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 3379b87181fSLokesh Vutla * Each device has it's own set of clock inputs. This indexes 3389b87181fSLokesh Vutla * which clock input to get the parent for. 3399b87181fSLokesh Vutla * 3409b87181fSLokesh Vutla * Request type is TI_SCI_MSG_GET_CLOCK_PARENT, response is parent information 3419b87181fSLokesh Vutla */ 3429b87181fSLokesh Vutla struct ti_sci_msg_req_get_clock_parent { 3439b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3449b87181fSLokesh Vutla u32 dev_id; 3459b87181fSLokesh Vutla u8 clk_id; 3469b87181fSLokesh Vutla } __packed; 3479b87181fSLokesh Vutla 3489b87181fSLokesh Vutla /** 3499b87181fSLokesh Vutla * struct ti_sci_msg_resp_get_clock_parent - Response with clock parent 3509b87181fSLokesh Vutla * @hdr: Generic Header 3519b87181fSLokesh Vutla * @parent_id: The current clock parent 3529b87181fSLokesh Vutla * 3539b87181fSLokesh Vutla * Response to TI_SCI_MSG_GET_CLOCK_PARENT. 3549b87181fSLokesh Vutla */ 3559b87181fSLokesh Vutla struct ti_sci_msg_resp_get_clock_parent { 3569b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3579b87181fSLokesh Vutla u8 parent_id; 3589b87181fSLokesh Vutla } __packed; 3599b87181fSLokesh Vutla 3609b87181fSLokesh Vutla /** 3619b87181fSLokesh Vutla * struct ti_sci_msg_req_get_clock_num_parents - Request to get clock parents 3629b87181fSLokesh Vutla * @hdr: Generic header 3639b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 3649b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 3659b87181fSLokesh Vutla * 3669b87181fSLokesh Vutla * This request provides information about how many clock parent options 3679b87181fSLokesh Vutla * are available for a given clock to a device. This is typically used 3689b87181fSLokesh Vutla * for input clocks. 3699b87181fSLokesh Vutla * 3709b87181fSLokesh Vutla * Request type is TI_SCI_MSG_GET_NUM_CLOCK_PARENTS, response is appropriate 3719b87181fSLokesh Vutla * message, or NACK in case of inability to satisfy request. 3729b87181fSLokesh Vutla */ 3739b87181fSLokesh Vutla struct ti_sci_msg_req_get_clock_num_parents { 3749b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3759b87181fSLokesh Vutla u32 dev_id; 3769b87181fSLokesh Vutla u8 clk_id; 3779b87181fSLokesh Vutla } __packed; 3789b87181fSLokesh Vutla 3799b87181fSLokesh Vutla /** 3809b87181fSLokesh Vutla * struct ti_sci_msg_resp_get_clock_num_parents - Response for get clk parents 3819b87181fSLokesh Vutla * @hdr: Generic header 3829b87181fSLokesh Vutla * @num_parents: Number of clock parents 3839b87181fSLokesh Vutla * 3849b87181fSLokesh Vutla * Response to TI_SCI_MSG_GET_NUM_CLOCK_PARENTS 3859b87181fSLokesh Vutla */ 3869b87181fSLokesh Vutla struct ti_sci_msg_resp_get_clock_num_parents { 3879b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 3889b87181fSLokesh Vutla u8 num_parents; 3899b87181fSLokesh Vutla } __packed; 3909b87181fSLokesh Vutla 3919b87181fSLokesh Vutla /** 3929b87181fSLokesh Vutla * struct ti_sci_msg_req_query_clock_freq - Request to query a frequency 3939b87181fSLokesh Vutla * @hdr: Generic Header 3949b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 3959b87181fSLokesh Vutla * @min_freq_hz: The minimum allowable frequency in Hz. This is the minimum 3969b87181fSLokesh Vutla * allowable programmed frequency and does not account for clock 3979b87181fSLokesh Vutla * tolerances and jitter. 3989b87181fSLokesh Vutla * @target_freq_hz: The target clock frequency. A frequency will be found 3999b87181fSLokesh Vutla * as close to this target frequency as possible. 4009b87181fSLokesh Vutla * @max_freq_hz: The maximum allowable frequency in Hz. This is the maximum 4019b87181fSLokesh Vutla * allowable programmed frequency and does not account for clock 4029b87181fSLokesh Vutla * tolerances and jitter. 4039b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 4049b87181fSLokesh Vutla * 4059b87181fSLokesh Vutla * NOTE: Normally clock frequency management is automatically done by TISCI 4069b87181fSLokesh Vutla * entity. In case of specific requests, TISCI evaluates capability to achieve 4079b87181fSLokesh Vutla * requested frequency within provided range and responds with 4089b87181fSLokesh Vutla * result message. 4099b87181fSLokesh Vutla * 4109b87181fSLokesh Vutla * Request type is TI_SCI_MSG_QUERY_CLOCK_FREQ, response is appropriate message, 4119b87181fSLokesh Vutla * or NACK in case of inability to satisfy request. 4129b87181fSLokesh Vutla */ 4139b87181fSLokesh Vutla struct ti_sci_msg_req_query_clock_freq { 4149b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 4159b87181fSLokesh Vutla u32 dev_id; 4169b87181fSLokesh Vutla u64 min_freq_hz; 4179b87181fSLokesh Vutla u64 target_freq_hz; 4189b87181fSLokesh Vutla u64 max_freq_hz; 4199b87181fSLokesh Vutla u8 clk_id; 4209b87181fSLokesh Vutla } __packed; 4219b87181fSLokesh Vutla 4229b87181fSLokesh Vutla /** 4239b87181fSLokesh Vutla * struct ti_sci_msg_resp_query_clock_freq - Response to a clock frequency query 4249b87181fSLokesh Vutla * @hdr: Generic Header 4259b87181fSLokesh Vutla * @freq_hz: Frequency that is the best match in Hz. 4269b87181fSLokesh Vutla * 4279b87181fSLokesh Vutla * Response to request type TI_SCI_MSG_QUERY_CLOCK_FREQ. NOTE: if the request 4289b87181fSLokesh Vutla * cannot be satisfied, the message will be of type NACK. 4299b87181fSLokesh Vutla */ 4309b87181fSLokesh Vutla struct ti_sci_msg_resp_query_clock_freq { 4319b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 4329b87181fSLokesh Vutla u64 freq_hz; 4339b87181fSLokesh Vutla } __packed; 4349b87181fSLokesh Vutla 4359b87181fSLokesh Vutla /** 4369b87181fSLokesh Vutla * struct ti_sci_msg_req_set_clock_freq - Request to setup a clock frequency 4379b87181fSLokesh Vutla * @hdr: Generic Header 4389b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 4399b87181fSLokesh Vutla * @min_freq_hz: The minimum allowable frequency in Hz. This is the minimum 4409b87181fSLokesh Vutla * allowable programmed frequency and does not account for clock 4419b87181fSLokesh Vutla * tolerances and jitter. 4429b87181fSLokesh Vutla * @target_freq_hz: The target clock frequency. The clock will be programmed 4439b87181fSLokesh Vutla * at a rate as close to this target frequency as possible. 4449b87181fSLokesh Vutla * @max_freq_hz: The maximum allowable frequency in Hz. This is the maximum 4459b87181fSLokesh Vutla * allowable programmed frequency and does not account for clock 4469b87181fSLokesh Vutla * tolerances and jitter. 4479b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 4489b87181fSLokesh Vutla * 4499b87181fSLokesh Vutla * NOTE: Normally clock frequency management is automatically done by TISCI 4509b87181fSLokesh Vutla * entity. In case of specific requests, TISCI evaluates capability to achieve 4519b87181fSLokesh Vutla * requested range and responds with success/failure message. 4529b87181fSLokesh Vutla * 4539b87181fSLokesh Vutla * This sets the desired frequency for a clock within an allowable 4549b87181fSLokesh Vutla * range. This message will fail on an enabled clock unless 4559b87181fSLokesh Vutla * MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE is set for the clock. Additionally, 4569b87181fSLokesh Vutla * if other clocks have their frequency modified due to this message, 4579b87181fSLokesh Vutla * they also must have the MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE or be disabled. 4589b87181fSLokesh Vutla * 4599b87181fSLokesh Vutla * Calling set frequency on a clock input to the SoC pseudo-device will 4609b87181fSLokesh Vutla * inform the PMMC of that clock's frequency. Setting a frequency of 4619b87181fSLokesh Vutla * zero will indicate the clock is disabled. 4629b87181fSLokesh Vutla * 4639b87181fSLokesh Vutla * Calling set frequency on clock outputs from the SoC pseudo-device will 4649b87181fSLokesh Vutla * function similarly to setting the clock frequency on a device. 4659b87181fSLokesh Vutla * 4669b87181fSLokesh Vutla * Request type is TI_SCI_MSG_SET_CLOCK_FREQ, response is a generic ACK/NACK 4679b87181fSLokesh Vutla * message. 4689b87181fSLokesh Vutla */ 4699b87181fSLokesh Vutla struct ti_sci_msg_req_set_clock_freq { 4709b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 4719b87181fSLokesh Vutla u32 dev_id; 4729b87181fSLokesh Vutla u64 min_freq_hz; 4739b87181fSLokesh Vutla u64 target_freq_hz; 4749b87181fSLokesh Vutla u64 max_freq_hz; 4759b87181fSLokesh Vutla u8 clk_id; 4769b87181fSLokesh Vutla } __packed; 4779b87181fSLokesh Vutla 4789b87181fSLokesh Vutla /** 4799b87181fSLokesh Vutla * struct ti_sci_msg_req_get_clock_freq - Request to get the clock frequency 4809b87181fSLokesh Vutla * @hdr: Generic Header 4819b87181fSLokesh Vutla * @dev_id: Device identifier this request is for 4829b87181fSLokesh Vutla * @clk_id: Clock identifier for the device for this request. 4839b87181fSLokesh Vutla * 4849b87181fSLokesh Vutla * NOTE: Normally clock frequency management is automatically done by TISCI 4859b87181fSLokesh Vutla * entity. In some cases, clock frequencies are configured by host. 4869b87181fSLokesh Vutla * 4879b87181fSLokesh Vutla * Request type is TI_SCI_MSG_GET_CLOCK_FREQ, responded with clock frequency 4889b87181fSLokesh Vutla * that the clock is currently at. 4899b87181fSLokesh Vutla */ 4909b87181fSLokesh Vutla struct ti_sci_msg_req_get_clock_freq { 4919b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 4929b87181fSLokesh Vutla u32 dev_id; 4939b87181fSLokesh Vutla u8 clk_id; 4949b87181fSLokesh Vutla } __packed; 4959b87181fSLokesh Vutla 4969b87181fSLokesh Vutla /** 4979b87181fSLokesh Vutla * struct ti_sci_msg_resp_get_clock_freq - Response of clock frequency request 4989b87181fSLokesh Vutla * @hdr: Generic Header 4999b87181fSLokesh Vutla * @freq_hz: Frequency that the clock is currently on, in Hz. 5009b87181fSLokesh Vutla * 5019b87181fSLokesh Vutla * Response to request type TI_SCI_MSG_GET_CLOCK_FREQ. 5029b87181fSLokesh Vutla */ 5039b87181fSLokesh Vutla struct ti_sci_msg_resp_get_clock_freq { 5049b87181fSLokesh Vutla struct ti_sci_msg_hdr hdr; 5059b87181fSLokesh Vutla u64 freq_hz; 5069b87181fSLokesh Vutla } __packed; 5079b87181fSLokesh Vutla 508*ccbc8b2fSLokesh Vutla #define TISCI_ADDR_LOW_MASK GENMASK_ULL(31, 0) 509*ccbc8b2fSLokesh Vutla #define TISCI_ADDR_HIGH_MASK GENMASK_ULL(63, 32) 510*ccbc8b2fSLokesh Vutla #define TISCI_ADDR_HIGH_SHIFT 32 511*ccbc8b2fSLokesh Vutla 512*ccbc8b2fSLokesh Vutla /** 513*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_proc_request - Request a processor 514*ccbc8b2fSLokesh Vutla * 515*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 516*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 517*ccbc8b2fSLokesh Vutla * 518*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_PROC_REQUEST, response is a generic ACK/NACK 519*ccbc8b2fSLokesh Vutla * message. 520*ccbc8b2fSLokesh Vutla */ 521*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_proc_request { 522*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 523*ccbc8b2fSLokesh Vutla u8 processor_id; 524*ccbc8b2fSLokesh Vutla } __packed; 525*ccbc8b2fSLokesh Vutla 526*ccbc8b2fSLokesh Vutla /** 527*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_proc_release - Release a processor 528*ccbc8b2fSLokesh Vutla * 529*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 530*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 531*ccbc8b2fSLokesh Vutla * 532*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_PROC_RELEASE, response is a generic ACK/NACK 533*ccbc8b2fSLokesh Vutla * message. 534*ccbc8b2fSLokesh Vutla */ 535*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_proc_release { 536*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 537*ccbc8b2fSLokesh Vutla u8 processor_id; 538*ccbc8b2fSLokesh Vutla } __packed; 539*ccbc8b2fSLokesh Vutla 540*ccbc8b2fSLokesh Vutla /** 541*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_proc_handover - Handover a processor to a host 542*ccbc8b2fSLokesh Vutla * 543*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 544*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 545*ccbc8b2fSLokesh Vutla * @host_id: New Host we want to give control to 546*ccbc8b2fSLokesh Vutla * 547*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_PROC_HANDOVER, response is a generic ACK/NACK 548*ccbc8b2fSLokesh Vutla * message. 549*ccbc8b2fSLokesh Vutla */ 550*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_proc_handover { 551*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 552*ccbc8b2fSLokesh Vutla u8 processor_id; 553*ccbc8b2fSLokesh Vutla u8 host_id; 554*ccbc8b2fSLokesh Vutla } __packed; 555*ccbc8b2fSLokesh Vutla 556*ccbc8b2fSLokesh Vutla /* A53 Config Flags */ 557*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_ARMV8_DBG_EN 0x00000001 558*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_ARMV8_DBG_NIDEN 0x00000002 559*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_ARMV8_DBG_SPIDEN 0x00000004 560*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_ARMV8_DBG_SPNIDEN 0x00000008 561*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_ARMV8_AARCH32 0x00000100 562*ccbc8b2fSLokesh Vutla 563*ccbc8b2fSLokesh Vutla /* R5 Config Flags */ 564*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_DBG_EN 0x00000001 565*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_DBG_NIDEN 0x00000002 566*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_LOCKSTEP 0x00000100 567*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_TEINIT 0x00000200 568*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_NMFI_EN 0x00000400 569*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_TCM_RSTBASE 0x00000800 570*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_BTCM_EN 0x00001000 571*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CFG_FLAG_R5_ATCM_EN 0x00002000 572*ccbc8b2fSLokesh Vutla 573*ccbc8b2fSLokesh Vutla /** 574*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_set_proc_boot_config - Set Processor boot configuration 575*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 576*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 577*ccbc8b2fSLokesh Vutla * @bootvector_low: Lower 32bit (Little Endian) of boot vector 578*ccbc8b2fSLokesh Vutla * @bootvector_high: Higher 32bit (Little Endian) of boot vector 579*ccbc8b2fSLokesh Vutla * @config_flags_set: Optional Processor specific Config Flags to set. 580*ccbc8b2fSLokesh Vutla * Setting a bit here implies required bit sets to 1. 581*ccbc8b2fSLokesh Vutla * @config_flags_clear: Optional Processor specific Config Flags to clear. 582*ccbc8b2fSLokesh Vutla * Setting a bit here implies required bit gets cleared. 583*ccbc8b2fSLokesh Vutla * 584*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_SET_PROC_BOOT_CONFIG, response is a generic 585*ccbc8b2fSLokesh Vutla * ACK/NACK message. 586*ccbc8b2fSLokesh Vutla */ 587*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_set_proc_boot_config { 588*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 589*ccbc8b2fSLokesh Vutla u8 processor_id; 590*ccbc8b2fSLokesh Vutla u32 bootvector_low; 591*ccbc8b2fSLokesh Vutla u32 bootvector_high; 592*ccbc8b2fSLokesh Vutla u32 config_flags_set; 593*ccbc8b2fSLokesh Vutla u32 config_flags_clear; 594*ccbc8b2fSLokesh Vutla } __packed; 595*ccbc8b2fSLokesh Vutla 596*ccbc8b2fSLokesh Vutla /* R5 Control Flags */ 597*ccbc8b2fSLokesh Vutla #define PROC_BOOT_CTRL_FLAG_R5_CORE_HALT 0x00000001 598*ccbc8b2fSLokesh Vutla 599*ccbc8b2fSLokesh Vutla /** 600*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_set_proc_boot_ctrl - Set Processor boot control flags 601*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 602*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 603*ccbc8b2fSLokesh Vutla * @control_flags_set: Optional Processor specific Control Flags to set. 604*ccbc8b2fSLokesh Vutla * Setting a bit here implies required bit sets to 1. 605*ccbc8b2fSLokesh Vutla * @control_flags_clear:Optional Processor specific Control Flags to clear. 606*ccbc8b2fSLokesh Vutla * Setting a bit here implies required bit gets cleared. 607*ccbc8b2fSLokesh Vutla * 608*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_SET_PROC_BOOT_CTRL, response is a generic ACK/NACK 609*ccbc8b2fSLokesh Vutla * message. 610*ccbc8b2fSLokesh Vutla */ 611*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_set_proc_boot_ctrl { 612*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 613*ccbc8b2fSLokesh Vutla u8 processor_id; 614*ccbc8b2fSLokesh Vutla u32 control_flags_set; 615*ccbc8b2fSLokesh Vutla u32 control_flags_clear; 616*ccbc8b2fSLokesh Vutla } __packed; 617*ccbc8b2fSLokesh Vutla 618*ccbc8b2fSLokesh Vutla /** 619*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_proc_auth_start_image - Authenticate and start image 620*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 621*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 622*ccbc8b2fSLokesh Vutla * @cert_addr_low: Lower 32bit (Little Endian) of certificate 623*ccbc8b2fSLokesh Vutla * @cert_addr_high: Higher 32bit (Little Endian) of certificate 624*ccbc8b2fSLokesh Vutla * 625*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_PROC_AUTH_BOOT_IMAGE, response is a generic 626*ccbc8b2fSLokesh Vutla * ACK/NACK message. 627*ccbc8b2fSLokesh Vutla */ 628*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_proc_auth_boot_image { 629*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 630*ccbc8b2fSLokesh Vutla u8 processor_id; 631*ccbc8b2fSLokesh Vutla u32 cert_addr_low; 632*ccbc8b2fSLokesh Vutla u32 cert_addr_high; 633*ccbc8b2fSLokesh Vutla } __packed; 634*ccbc8b2fSLokesh Vutla 635*ccbc8b2fSLokesh Vutla /** 636*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_req_get_proc_boot_status - Get processor boot status 637*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 638*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 639*ccbc8b2fSLokesh Vutla * 640*ccbc8b2fSLokesh Vutla * Request type is TISCI_MSG_GET_PROC_BOOT_STATUS, response is appropriate 641*ccbc8b2fSLokesh Vutla * message, or NACK in case of inability to satisfy request. 642*ccbc8b2fSLokesh Vutla */ 643*ccbc8b2fSLokesh Vutla struct ti_sci_msg_req_get_proc_boot_status { 644*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 645*ccbc8b2fSLokesh Vutla u8 processor_id; 646*ccbc8b2fSLokesh Vutla } __packed; 647*ccbc8b2fSLokesh Vutla 648*ccbc8b2fSLokesh Vutla /* ARMv8 Status Flags */ 649*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_ARMV8_WFE 0x00000001 650*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_ARMV8_WFI 0x00000002 651*ccbc8b2fSLokesh Vutla 652*ccbc8b2fSLokesh Vutla /* R5 Status Flags */ 653*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_R5_WFE 0x00000001 654*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_R5_WFI 0x00000002 655*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_R5_CLK_GATED 0x00000004 656*ccbc8b2fSLokesh Vutla #define PROC_BOOT_STATUS_FLAG_R5_LOCKSTEP_PERMITTED 0x00000100 657*ccbc8b2fSLokesh Vutla 658*ccbc8b2fSLokesh Vutla /** 659*ccbc8b2fSLokesh Vutla * struct ti_sci_msg_resp_get_proc_boot_status - Processor boot status response 660*ccbc8b2fSLokesh Vutla * @hdr: Generic Header 661*ccbc8b2fSLokesh Vutla * @processor_id: ID of processor 662*ccbc8b2fSLokesh Vutla * @bootvector_low: Lower 32bit (Little Endian) of boot vector 663*ccbc8b2fSLokesh Vutla * @bootvector_high: Higher 32bit (Little Endian) of boot vector 664*ccbc8b2fSLokesh Vutla * @config_flags: Optional Processor specific Config Flags set. 665*ccbc8b2fSLokesh Vutla * @control_flags: Optional Processor specific Control Flags. 666*ccbc8b2fSLokesh Vutla * @status_flags: Optional Processor specific Status Flags set. 667*ccbc8b2fSLokesh Vutla * 668*ccbc8b2fSLokesh Vutla * Response to TISCI_MSG_GET_PROC_BOOT_STATUS. 669*ccbc8b2fSLokesh Vutla */ 670*ccbc8b2fSLokesh Vutla struct ti_sci_msg_resp_get_proc_boot_status { 671*ccbc8b2fSLokesh Vutla struct ti_sci_msg_hdr hdr; 672*ccbc8b2fSLokesh Vutla u8 processor_id; 673*ccbc8b2fSLokesh Vutla u32 bootvector_low; 674*ccbc8b2fSLokesh Vutla u32 bootvector_high; 675*ccbc8b2fSLokesh Vutla u32 config_flags; 676*ccbc8b2fSLokesh Vutla u32 control_flags; 677*ccbc8b2fSLokesh Vutla u32 status_flags; 678*ccbc8b2fSLokesh Vutla } __packed; 679*ccbc8b2fSLokesh Vutla 68032cd2512SLokesh Vutla #endif /* __TI_SCI_H */ 681