cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ti_sci.h (54378B)


      1/* SPDX-License-Identifier: BSD-3-Clause */
      2/*
      3 * Texas Instruments System Control Interface (TISCI) Protocol
      4 *
      5 * Communication protocol with TI SCI hardware
      6 * The system works in a message response protocol
      7 * See: http://processors.wiki.ti.com/index.php/TISCI for details
      8 *
      9 * Copyright (C)  2015-2016 Texas Instruments Incorporated - https://www.ti.com/
     10 */
     11
     12#ifndef __TI_SCI_H
     13#define __TI_SCI_H
     14
     15/* Generic Messages */
     16#define TI_SCI_MSG_ENABLE_WDT	0x0000
     17#define TI_SCI_MSG_WAKE_RESET	0x0001
     18#define TI_SCI_MSG_VERSION	0x0002
     19#define TI_SCI_MSG_WAKE_REASON	0x0003
     20#define TI_SCI_MSG_GOODBYE	0x0004
     21#define TI_SCI_MSG_SYS_RESET	0x0005
     22
     23/* Device requests */
     24#define TI_SCI_MSG_SET_DEVICE_STATE	0x0200
     25#define TI_SCI_MSG_GET_DEVICE_STATE	0x0201
     26#define TI_SCI_MSG_SET_DEVICE_RESETS	0x0202
     27
     28/* Clock requests */
     29#define TI_SCI_MSG_SET_CLOCK_STATE	0x0100
     30#define TI_SCI_MSG_GET_CLOCK_STATE	0x0101
     31#define TI_SCI_MSG_SET_CLOCK_PARENT	0x0102
     32#define TI_SCI_MSG_GET_CLOCK_PARENT	0x0103
     33#define TI_SCI_MSG_GET_NUM_CLOCK_PARENTS 0x0104
     34#define TI_SCI_MSG_SET_CLOCK_FREQ	0x010c
     35#define TI_SCI_MSG_QUERY_CLOCK_FREQ	0x010d
     36#define TI_SCI_MSG_GET_CLOCK_FREQ	0x010e
     37
     38/* Resource Management Requests */
     39#define TI_SCI_MSG_GET_RESOURCE_RANGE	0x1500
     40
     41/* IRQ requests */
     42#define TI_SCI_MSG_SET_IRQ		0x1000
     43#define TI_SCI_MSG_FREE_IRQ		0x1001
     44
     45/* NAVSS resource management */
     46/* Ringacc requests */
     47#define TI_SCI_MSG_RM_RING_ALLOCATE		0x1100
     48#define TI_SCI_MSG_RM_RING_FREE			0x1101
     49#define TI_SCI_MSG_RM_RING_RECONFIG		0x1102
     50#define TI_SCI_MSG_RM_RING_RESET		0x1103
     51#define TI_SCI_MSG_RM_RING_CFG			0x1110
     52
     53/* PSI-L requests */
     54#define TI_SCI_MSG_RM_PSIL_PAIR			0x1280
     55#define TI_SCI_MSG_RM_PSIL_UNPAIR		0x1281
     56
     57#define TI_SCI_MSG_RM_UDMAP_TX_ALLOC		0x1200
     58#define TI_SCI_MSG_RM_UDMAP_TX_FREE		0x1201
     59#define TI_SCI_MSG_RM_UDMAP_RX_ALLOC		0x1210
     60#define TI_SCI_MSG_RM_UDMAP_RX_FREE		0x1211
     61#define TI_SCI_MSG_RM_UDMAP_FLOW_CFG		0x1220
     62#define TI_SCI_MSG_RM_UDMAP_OPT_FLOW_CFG	0x1221
     63
     64#define TISCI_MSG_RM_UDMAP_TX_CH_CFG		0x1205
     65#define TISCI_MSG_RM_UDMAP_TX_CH_GET_CFG	0x1206
     66#define TISCI_MSG_RM_UDMAP_RX_CH_CFG		0x1215
     67#define TISCI_MSG_RM_UDMAP_RX_CH_GET_CFG	0x1216
     68#define TISCI_MSG_RM_UDMAP_FLOW_CFG		0x1230
     69#define TISCI_MSG_RM_UDMAP_FLOW_SIZE_THRESH_CFG	0x1231
     70#define TISCI_MSG_RM_UDMAP_FLOW_GET_CFG		0x1232
     71#define TISCI_MSG_RM_UDMAP_FLOW_SIZE_THRESH_GET_CFG	0x1233
     72
     73/* Processor Control requests */
     74#define TI_SCI_MSG_PROC_REQUEST		0xc000
     75#define TI_SCI_MSG_PROC_RELEASE		0xc001
     76#define TI_SCI_MSG_PROC_HANDOVER	0xc005
     77#define TI_SCI_MSG_SET_CONFIG		0xc100
     78#define TI_SCI_MSG_SET_CTRL		0xc101
     79#define TI_SCI_MSG_GET_STATUS		0xc400
     80
     81/**
     82 * struct ti_sci_msg_hdr - Generic Message Header for All messages and responses
     83 * @type:	Type of messages: One of TI_SCI_MSG* values
     84 * @host:	Host of the message
     85 * @seq:	Message identifier indicating a transfer sequence
     86 * @flags:	Flag for the message
     87 */
     88struct ti_sci_msg_hdr {
     89	u16 type;
     90	u8 host;
     91	u8 seq;
     92#define TI_SCI_MSG_FLAG(val)			(1 << (val))
     93#define TI_SCI_FLAG_REQ_GENERIC_NORESPONSE	0x0
     94#define TI_SCI_FLAG_REQ_ACK_ON_RECEIVED		TI_SCI_MSG_FLAG(0)
     95#define TI_SCI_FLAG_REQ_ACK_ON_PROCESSED	TI_SCI_MSG_FLAG(1)
     96#define TI_SCI_FLAG_RESP_GENERIC_NACK		0x0
     97#define TI_SCI_FLAG_RESP_GENERIC_ACK		TI_SCI_MSG_FLAG(1)
     98	/* Additional Flags */
     99	u32 flags;
    100} __packed;
    101
    102/**
    103 * struct ti_sci_msg_resp_version - Response for a message
    104 * @hdr:		Generic header
    105 * @firmware_description: String describing the firmware
    106 * @firmware_revision:	Firmware revision
    107 * @abi_major:		Major version of the ABI that firmware supports
    108 * @abi_minor:		Minor version of the ABI that firmware supports
    109 *
    110 * In general, ABI version changes follow the rule that minor version increments
    111 * are backward compatible. Major revision changes in ABI may not be
    112 * backward compatible.
    113 *
    114 * Response to a generic message with message type TI_SCI_MSG_VERSION
    115 */
    116struct ti_sci_msg_resp_version {
    117	struct ti_sci_msg_hdr hdr;
    118	char firmware_description[32];
    119	u16 firmware_revision;
    120	u8 abi_major;
    121	u8 abi_minor;
    122} __packed;
    123
    124/**
    125 * struct ti_sci_msg_req_reboot - Reboot the SoC
    126 * @hdr:	Generic Header
    127 *
    128 * Request type is TI_SCI_MSG_SYS_RESET, responded with a generic
    129 * ACK/NACK message.
    130 */
    131struct ti_sci_msg_req_reboot {
    132	struct ti_sci_msg_hdr hdr;
    133} __packed;
    134
    135/**
    136 * struct ti_sci_msg_req_set_device_state - Set the desired state of the device
    137 * @hdr:		Generic header
    138 * @id:	Indicates which device to modify
    139 * @reserved: Reserved space in message, must be 0 for backward compatibility
    140 * @state: The desired state of the device.
    141 *
    142 * Certain flags can also be set to alter the device state:
    143 * + MSG_FLAG_DEVICE_WAKE_ENABLED - Configure the device to be a wake source.
    144 * The meaning of this flag will vary slightly from device to device and from
    145 * SoC to SoC but it generally allows the device to wake the SoC out of deep
    146 * suspend states.
    147 * + MSG_FLAG_DEVICE_RESET_ISO - Enable reset isolation for this device.
    148 * + MSG_FLAG_DEVICE_EXCLUSIVE - Claim this device exclusively. When passed
    149 * with STATE_RETENTION or STATE_ON, it will claim the device exclusively.
    150 * If another host already has this device set to STATE_RETENTION or STATE_ON,
    151 * the message will fail. Once successful, other hosts attempting to set
    152 * STATE_RETENTION or STATE_ON will fail.
    153 *
    154 * Request type is TI_SCI_MSG_SET_DEVICE_STATE, responded with a generic
    155 * ACK/NACK message.
    156 */
    157struct ti_sci_msg_req_set_device_state {
    158	/* Additional hdr->flags options */
    159#define MSG_FLAG_DEVICE_WAKE_ENABLED	TI_SCI_MSG_FLAG(8)
    160#define MSG_FLAG_DEVICE_RESET_ISO	TI_SCI_MSG_FLAG(9)
    161#define MSG_FLAG_DEVICE_EXCLUSIVE	TI_SCI_MSG_FLAG(10)
    162	struct ti_sci_msg_hdr hdr;
    163	u32 id;
    164	u32 reserved;
    165
    166#define MSG_DEVICE_SW_STATE_AUTO_OFF	0
    167#define MSG_DEVICE_SW_STATE_RETENTION	1
    168#define MSG_DEVICE_SW_STATE_ON		2
    169	u8 state;
    170} __packed;
    171
    172/**
    173 * struct ti_sci_msg_req_get_device_state - Request to get device.
    174 * @hdr:		Generic header
    175 * @id:		Device Identifier
    176 *
    177 * Request type is TI_SCI_MSG_GET_DEVICE_STATE, responded device state
    178 * information
    179 */
    180struct ti_sci_msg_req_get_device_state {
    181	struct ti_sci_msg_hdr hdr;
    182	u32 id;
    183} __packed;
    184
    185/**
    186 * struct ti_sci_msg_resp_get_device_state - Response to get device request.
    187 * @hdr:		Generic header
    188 * @context_loss_count: Indicates how many times the device has lost context. A
    189 *	driver can use this monotonic counter to determine if the device has
    190 *	lost context since the last time this message was exchanged.
    191 * @resets: Programmed state of the reset lines.
    192 * @programmed_state:	The state as programmed by set_device.
    193 *			- Uses the MSG_DEVICE_SW_* macros
    194 * @current_state:	The actual state of the hardware.
    195 *
    196 * Response to request TI_SCI_MSG_GET_DEVICE_STATE.
    197 */
    198struct ti_sci_msg_resp_get_device_state {
    199	struct ti_sci_msg_hdr hdr;
    200	u32 context_loss_count;
    201	u32 resets;
    202	u8 programmed_state;
    203#define MSG_DEVICE_HW_STATE_OFF		0
    204#define MSG_DEVICE_HW_STATE_ON		1
    205#define MSG_DEVICE_HW_STATE_TRANS	2
    206	u8 current_state;
    207} __packed;
    208
    209/**
    210 * struct ti_sci_msg_req_set_device_resets - Set the desired resets
    211 *				configuration of the device
    212 * @hdr:		Generic header
    213 * @id:	Indicates which device to modify
    214 * @resets: A bit field of resets for the device. The meaning, behavior,
    215 *	and usage of the reset flags are device specific. 0 for a bit
    216 *	indicates releasing the reset represented by that bit while 1
    217 *	indicates keeping it held.
    218 *
    219 * Request type is TI_SCI_MSG_SET_DEVICE_RESETS, responded with a generic
    220 * ACK/NACK message.
    221 */
    222struct ti_sci_msg_req_set_device_resets {
    223	struct ti_sci_msg_hdr hdr;
    224	u32 id;
    225	u32 resets;
    226} __packed;
    227
    228/**
    229 * struct ti_sci_msg_req_set_clock_state - Request to setup a Clock state
    230 * @hdr:	Generic Header, Certain flags can be set specific to the clocks:
    231 *		MSG_FLAG_CLOCK_ALLOW_SSC: Allow this clock to be modified
    232 *		via spread spectrum clocking.
    233 *		MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE: Allow this clock's
    234 *		frequency to be changed while it is running so long as it
    235 *		is within the min/max limits.
    236 *		MSG_FLAG_CLOCK_INPUT_TERM: Enable input termination, this
    237 *		is only applicable to clock inputs on the SoC pseudo-device.
    238 * @dev_id:	Device identifier this request is for
    239 * @clk_id:	Clock identifier for the device for this request.
    240 *		Each device has it's own set of clock inputs. This indexes
    241 *		which clock input to modify. Set to 255 if clock ID is
    242 *		greater than or equal to 255.
    243 * @request_state: Request the state for the clock to be set to.
    244 *		MSG_CLOCK_SW_STATE_UNREQ: The IP does not require this clock,
    245 *		it can be disabled, regardless of the state of the device
    246 *		MSG_CLOCK_SW_STATE_AUTO: Allow the System Controller to
    247 *		automatically manage the state of this clock. If the device
    248 *		is enabled, then the clock is enabled. If the device is set
    249 *		to off or retention, then the clock is internally set as not
    250 *		being required by the device.(default)
    251 *		MSG_CLOCK_SW_STATE_REQ:  Configure the clock to be enabled,
    252 *		regardless of the state of the device.
    253 * @clk_id_32:	Clock identifier for the device for this request.
    254 *		Only to be used if the clock ID is greater than or equal to
    255 *		255.
    256 *
    257 * Normally, all required clocks are managed by TISCI entity, this is used
    258 * only for specific control *IF* required. Auto managed state is
    259 * MSG_CLOCK_SW_STATE_AUTO, in other states, TISCI entity assume remote
    260 * will explicitly control.
    261 *
    262 * Request type is TI_SCI_MSG_SET_CLOCK_STATE, response is a generic
    263 * ACK or NACK message.
    264 */
    265struct ti_sci_msg_req_set_clock_state {
    266	/* Additional hdr->flags options */
    267#define MSG_FLAG_CLOCK_ALLOW_SSC		TI_SCI_MSG_FLAG(8)
    268#define MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE	TI_SCI_MSG_FLAG(9)
    269#define MSG_FLAG_CLOCK_INPUT_TERM		TI_SCI_MSG_FLAG(10)
    270	struct ti_sci_msg_hdr hdr;
    271	u32 dev_id;
    272	u8 clk_id;
    273#define MSG_CLOCK_SW_STATE_UNREQ	0
    274#define MSG_CLOCK_SW_STATE_AUTO		1
    275#define MSG_CLOCK_SW_STATE_REQ		2
    276	u8 request_state;
    277	u32 clk_id_32;
    278} __packed;
    279
    280/**
    281 * struct ti_sci_msg_req_get_clock_state - Request for clock state
    282 * @hdr:	Generic Header
    283 * @dev_id:	Device identifier this request is for
    284 * @clk_id:	Clock identifier for the device for this request.
    285 *		Each device has it's own set of clock inputs. This indexes
    286 *		which clock input to get state of. Set to 255 if the clock
    287 *		ID is greater than or equal to 255.
    288 * @clk_id_32:	Clock identifier for the device for the request.
    289 *		Only to be used if the clock ID is greater than or equal to
    290 *		255.
    291 *
    292 * Request type is TI_SCI_MSG_GET_CLOCK_STATE, response is state
    293 * of the clock
    294 */
    295struct ti_sci_msg_req_get_clock_state {
    296	struct ti_sci_msg_hdr hdr;
    297	u32 dev_id;
    298	u8 clk_id;
    299	u32 clk_id_32;
    300} __packed;
    301
    302/**
    303 * struct ti_sci_msg_resp_get_clock_state - Response to get clock state
    304 * @hdr:	Generic Header
    305 * @programmed_state: Any programmed state of the clock. This is one of
    306 *		MSG_CLOCK_SW_STATE* values.
    307 * @current_state: Current state of the clock. This is one of:
    308 *		MSG_CLOCK_HW_STATE_NOT_READY: Clock is not ready
    309 *		MSG_CLOCK_HW_STATE_READY: Clock is ready
    310 *
    311 * Response to TI_SCI_MSG_GET_CLOCK_STATE.
    312 */
    313struct ti_sci_msg_resp_get_clock_state {
    314	struct ti_sci_msg_hdr hdr;
    315	u8 programmed_state;
    316#define MSG_CLOCK_HW_STATE_NOT_READY	0
    317#define MSG_CLOCK_HW_STATE_READY	1
    318	u8 current_state;
    319} __packed;
    320
    321/**
    322 * struct ti_sci_msg_req_set_clock_parent - Set the clock parent
    323 * @hdr:	Generic Header
    324 * @dev_id:	Device identifier this request is for
    325 * @clk_id:	Clock identifier for the device for this request.
    326 *		Each device has it's own set of clock inputs. This indexes
    327 *		which clock input to modify. Set to 255 if clock ID is
    328 *		greater than or equal to 255.
    329 * @parent_id:	The new clock parent is selectable by an index via this
    330 *		parameter. Set to 255 if clock ID is greater than or
    331 *		equal to 255.
    332 * @clk_id_32:	Clock identifier if @clk_id field is 255.
    333 * @parent_id_32:	Parent identifier if @parent_id is 255.
    334 *
    335 * Request type is TI_SCI_MSG_SET_CLOCK_PARENT, response is generic
    336 * ACK / NACK message.
    337 */
    338struct ti_sci_msg_req_set_clock_parent {
    339	struct ti_sci_msg_hdr hdr;
    340	u32 dev_id;
    341	u8 clk_id;
    342	u8 parent_id;
    343	u32 clk_id_32;
    344	u32 parent_id_32;
    345} __packed;
    346
    347/**
    348 * struct ti_sci_msg_req_get_clock_parent - Get the clock parent
    349 * @hdr:	Generic Header
    350 * @dev_id:	Device identifier this request is for
    351 * @clk_id:	Clock identifier for the device for this request.
    352 *		Each device has it's own set of clock inputs. This indexes
    353 *		which clock input to get the parent for. If this field
    354 *		contains 255, the actual clock identifier is stored in
    355 *		@clk_id_32.
    356 * @clk_id_32:	Clock identifier if the @clk_id field contains 255.
    357 *
    358 * Request type is TI_SCI_MSG_GET_CLOCK_PARENT, response is parent information
    359 */
    360struct ti_sci_msg_req_get_clock_parent {
    361	struct ti_sci_msg_hdr hdr;
    362	u32 dev_id;
    363	u8 clk_id;
    364	u32 clk_id_32;
    365} __packed;
    366
    367/**
    368 * struct ti_sci_msg_resp_get_clock_parent - Response with clock parent
    369 * @hdr:	Generic Header
    370 * @parent_id:	The current clock parent. If set to 255, the current parent
    371 *		ID can be found from the @parent_id_32 field.
    372 * @parent_id_32:	Current clock parent if @parent_id field is set to
    373 *			255.
    374 *
    375 * Response to TI_SCI_MSG_GET_CLOCK_PARENT.
    376 */
    377struct ti_sci_msg_resp_get_clock_parent {
    378	struct ti_sci_msg_hdr hdr;
    379	u8 parent_id;
    380	u32 parent_id_32;
    381} __packed;
    382
    383/**
    384 * struct ti_sci_msg_req_get_clock_num_parents - Request to get clock parents
    385 * @hdr:	Generic header
    386 * @dev_id:	Device identifier this request is for
    387 * @clk_id:	Clock identifier for the device for this request. Set to
    388 *		255 if clock ID is greater than or equal to 255.
    389 * @clk_id_32:	Clock identifier if the @clk_id field contains 255.
    390 *
    391 * This request provides information about how many clock parent options
    392 * are available for a given clock to a device. This is typically used
    393 * for input clocks.
    394 *
    395 * Request type is TI_SCI_MSG_GET_NUM_CLOCK_PARENTS, response is appropriate
    396 * message, or NACK in case of inability to satisfy request.
    397 */
    398struct ti_sci_msg_req_get_clock_num_parents {
    399	struct ti_sci_msg_hdr hdr;
    400	u32 dev_id;
    401	u8 clk_id;
    402	u32 clk_id_32;
    403} __packed;
    404
    405/**
    406 * struct ti_sci_msg_resp_get_clock_num_parents - Response for get clk parents
    407 * @hdr:		Generic header
    408 * @num_parents:	Number of clock parents. If set to 255, the actual
    409 *			number of parents is stored into @num_parents_32
    410 *			field instead.
    411 * @num_parents_32:	Number of clock parents if @num_parents field is
    412 *			set to 255.
    413 *
    414 * Response to TI_SCI_MSG_GET_NUM_CLOCK_PARENTS
    415 */
    416struct ti_sci_msg_resp_get_clock_num_parents {
    417	struct ti_sci_msg_hdr hdr;
    418	u8 num_parents;
    419	u32 num_parents_32;
    420} __packed;
    421
    422/**
    423 * struct ti_sci_msg_req_query_clock_freq - Request to query a frequency
    424 * @hdr:	Generic Header
    425 * @dev_id:	Device identifier this request is for
    426 * @min_freq_hz: The minimum allowable frequency in Hz. This is the minimum
    427 *		allowable programmed frequency and does not account for clock
    428 *		tolerances and jitter.
    429 * @target_freq_hz: The target clock frequency. A frequency will be found
    430 *		as close to this target frequency as possible.
    431 * @max_freq_hz: The maximum allowable frequency in Hz. This is the maximum
    432 *		allowable programmed frequency and does not account for clock
    433 *		tolerances and jitter.
    434 * @clk_id:	Clock identifier for the device for this request. Set to
    435 *		255 if clock identifier is greater than or equal to 255.
    436 * @clk_id_32:	Clock identifier if @clk_id is set to 255.
    437 *
    438 * NOTE: Normally clock frequency management is automatically done by TISCI
    439 * entity. In case of specific requests, TISCI evaluates capability to achieve
    440 * requested frequency within provided range and responds with
    441 * result message.
    442 *
    443 * Request type is TI_SCI_MSG_QUERY_CLOCK_FREQ, response is appropriate message,
    444 * or NACK in case of inability to satisfy request.
    445 */
    446struct ti_sci_msg_req_query_clock_freq {
    447	struct ti_sci_msg_hdr hdr;
    448	u32 dev_id;
    449	u64 min_freq_hz;
    450	u64 target_freq_hz;
    451	u64 max_freq_hz;
    452	u8 clk_id;
    453	u32 clk_id_32;
    454} __packed;
    455
    456/**
    457 * struct ti_sci_msg_resp_query_clock_freq - Response to a clock frequency query
    458 * @hdr:	Generic Header
    459 * @freq_hz:	Frequency that is the best match in Hz.
    460 *
    461 * Response to request type TI_SCI_MSG_QUERY_CLOCK_FREQ. NOTE: if the request
    462 * cannot be satisfied, the message will be of type NACK.
    463 */
    464struct ti_sci_msg_resp_query_clock_freq {
    465	struct ti_sci_msg_hdr hdr;
    466	u64 freq_hz;
    467} __packed;
    468
    469/**
    470 * struct ti_sci_msg_req_set_clock_freq - Request to setup a clock frequency
    471 * @hdr:	Generic Header
    472 * @dev_id:	Device identifier this request is for
    473 * @min_freq_hz: The minimum allowable frequency in Hz. This is the minimum
    474 *		allowable programmed frequency and does not account for clock
    475 *		tolerances and jitter.
    476 * @target_freq_hz: The target clock frequency. The clock will be programmed
    477 *		at a rate as close to this target frequency as possible.
    478 * @max_freq_hz: The maximum allowable frequency in Hz. This is the maximum
    479 *		allowable programmed frequency and does not account for clock
    480 *		tolerances and jitter.
    481 * @clk_id:	Clock identifier for the device for this request. Set to
    482 *		255 if clock ID is greater than or equal to 255.
    483 * @clk_id_32:	Clock identifier if @clk_id field is set to 255.
    484 *
    485 * NOTE: Normally clock frequency management is automatically done by TISCI
    486 * entity. In case of specific requests, TISCI evaluates capability to achieve
    487 * requested range and responds with success/failure message.
    488 *
    489 * This sets the desired frequency for a clock within an allowable
    490 * range. This message will fail on an enabled clock unless
    491 * MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE is set for the clock. Additionally,
    492 * if other clocks have their frequency modified due to this message,
    493 * they also must have the MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE or be disabled.
    494 *
    495 * Calling set frequency on a clock input to the SoC pseudo-device will
    496 * inform the PMMC of that clock's frequency. Setting a frequency of
    497 * zero will indicate the clock is disabled.
    498 *
    499 * Calling set frequency on clock outputs from the SoC pseudo-device will
    500 * function similarly to setting the clock frequency on a device.
    501 *
    502 * Request type is TI_SCI_MSG_SET_CLOCK_FREQ, response is a generic ACK/NACK
    503 * message.
    504 */
    505struct ti_sci_msg_req_set_clock_freq {
    506	struct ti_sci_msg_hdr hdr;
    507	u32 dev_id;
    508	u64 min_freq_hz;
    509	u64 target_freq_hz;
    510	u64 max_freq_hz;
    511	u8 clk_id;
    512	u32 clk_id_32;
    513} __packed;
    514
    515/**
    516 * struct ti_sci_msg_req_get_clock_freq - Request to get the clock frequency
    517 * @hdr:	Generic Header
    518 * @dev_id:	Device identifier this request is for
    519 * @clk_id:	Clock identifier for the device for this request. Set to
    520 *		255 if clock ID is greater than or equal to 255.
    521 * @clk_id_32:	Clock identifier if @clk_id field is set to 255.
    522 *
    523 * NOTE: Normally clock frequency management is automatically done by TISCI
    524 * entity. In some cases, clock frequencies are configured by host.
    525 *
    526 * Request type is TI_SCI_MSG_GET_CLOCK_FREQ, responded with clock frequency
    527 * that the clock is currently at.
    528 */
    529struct ti_sci_msg_req_get_clock_freq {
    530	struct ti_sci_msg_hdr hdr;
    531	u32 dev_id;
    532	u8 clk_id;
    533	u32 clk_id_32;
    534} __packed;
    535
    536/**
    537 * struct ti_sci_msg_resp_get_clock_freq - Response of clock frequency request
    538 * @hdr:	Generic Header
    539 * @freq_hz:	Frequency that the clock is currently on, in Hz.
    540 *
    541 * Response to request type TI_SCI_MSG_GET_CLOCK_FREQ.
    542 */
    543struct ti_sci_msg_resp_get_clock_freq {
    544	struct ti_sci_msg_hdr hdr;
    545	u64 freq_hz;
    546} __packed;
    547
    548#define TI_SCI_IRQ_SECONDARY_HOST_INVALID	0xff
    549
    550/**
    551 * struct ti_sci_msg_req_get_resource_range - Request to get a host's assigned
    552 *					      range of resources.
    553 * @hdr:		Generic Header
    554 * @type:		Unique resource assignment type
    555 * @subtype:		Resource assignment subtype within the resource type.
    556 * @secondary_host:	Host processing entity to which the resources are
    557 *			allocated. This is required only when the destination
    558 *			host id id different from ti sci interface host id,
    559 *			else TI_SCI_IRQ_SECONDARY_HOST_INVALID can be passed.
    560 *
    561 * Request type is TI_SCI_MSG_GET_RESOURCE_RANGE. Responded with requested
    562 * resource range which is of type TI_SCI_MSG_GET_RESOURCE_RANGE.
    563 */
    564struct ti_sci_msg_req_get_resource_range {
    565	struct ti_sci_msg_hdr hdr;
    566#define MSG_RM_RESOURCE_TYPE_MASK	GENMASK(9, 0)
    567#define MSG_RM_RESOURCE_SUBTYPE_MASK	GENMASK(5, 0)
    568	u16 type;
    569	u8 subtype;
    570	u8 secondary_host;
    571} __packed;
    572
    573/**
    574 * struct ti_sci_msg_resp_get_resource_range - Response to resource get range.
    575 * @hdr:		Generic Header
    576 * @range_start:	Start index of the first resource range.
    577 * @range_num:		Number of resources in the first range.
    578 * @range_start_sec:	Start index of the second resource range.
    579 * @range_num_sec:	Number of resources in the second range.
    580 *
    581 * Response to request TI_SCI_MSG_GET_RESOURCE_RANGE.
    582 */
    583struct ti_sci_msg_resp_get_resource_range {
    584	struct ti_sci_msg_hdr hdr;
    585	u16 range_start;
    586	u16 range_num;
    587	u16 range_start_sec;
    588	u16 range_num_sec;
    589} __packed;
    590
    591/**
    592 * struct ti_sci_msg_req_manage_irq - Request to configure/release the route
    593 *					between the dev and the host.
    594 * @hdr:		Generic Header
    595 * @valid_params:	Bit fields defining the validity of interrupt source
    596 *			parameters. If a bit is not set, then corresponding
    597 *			field is not valid and will not be used for route set.
    598 *			Bit field definitions:
    599 *			0 - Valid bit for @dst_id
    600 *			1 - Valid bit for @dst_host_irq
    601 *			2 - Valid bit for @ia_id
    602 *			3 - Valid bit for @vint
    603 *			4 - Valid bit for @global_event
    604 *			5 - Valid bit for @vint_status_bit_index
    605 *			31 - Valid bit for @secondary_host
    606 * @src_id:		IRQ source peripheral ID.
    607 * @src_index:		IRQ source index within the peripheral
    608 * @dst_id:		IRQ Destination ID. Based on the architecture it can be
    609 *			IRQ controller or host processor ID.
    610 * @dst_host_irq:	IRQ number of the destination host IRQ controller
    611 * @ia_id:		Device ID of the interrupt aggregator in which the
    612 *			vint resides.
    613 * @vint:		Virtual interrupt number if the interrupt route
    614 *			is through an interrupt aggregator.
    615 * @global_event:	Global event that is to be mapped to interrupt
    616 *			aggregator virtual interrupt status bit.
    617 * @vint_status_bit:	Virtual interrupt status bit if the interrupt route
    618 *			utilizes an interrupt aggregator status bit.
    619 * @secondary_host:	Host ID of the IRQ destination computing entity. This is
    620 *			required only when destination host id is different
    621 *			from ti sci interface host id.
    622 *
    623 * Request type is TI_SCI_MSG_SET/RELEASE_IRQ.
    624 * Response is generic ACK / NACK message.
    625 */
    626struct ti_sci_msg_req_manage_irq {
    627	struct ti_sci_msg_hdr hdr;
    628#define MSG_FLAG_DST_ID_VALID			TI_SCI_MSG_FLAG(0)
    629#define MSG_FLAG_DST_HOST_IRQ_VALID		TI_SCI_MSG_FLAG(1)
    630#define MSG_FLAG_IA_ID_VALID			TI_SCI_MSG_FLAG(2)
    631#define MSG_FLAG_VINT_VALID			TI_SCI_MSG_FLAG(3)
    632#define MSG_FLAG_GLB_EVNT_VALID			TI_SCI_MSG_FLAG(4)
    633#define MSG_FLAG_VINT_STS_BIT_VALID		TI_SCI_MSG_FLAG(5)
    634#define MSG_FLAG_SHOST_VALID			TI_SCI_MSG_FLAG(31)
    635	u32 valid_params;
    636	u16 src_id;
    637	u16 src_index;
    638	u16 dst_id;
    639	u16 dst_host_irq;
    640	u16 ia_id;
    641	u16 vint;
    642	u16 global_event;
    643	u8 vint_status_bit;
    644	u8 secondary_host;
    645} __packed;
    646
    647/**
    648 * struct ti_sci_msg_rm_ring_cfg_req - Configure a Navigator Subsystem ring
    649 *
    650 * Configures the non-real-time registers of a Navigator Subsystem ring.
    651 * @hdr:	Generic Header
    652 * @valid_params: Bitfield defining validity of ring configuration parameters.
    653 *	The ring configuration fields are not valid, and will not be used for
    654 *	ring configuration, if their corresponding valid bit is zero.
    655 *	Valid bit usage:
    656 *	0 - Valid bit for @tisci_msg_rm_ring_cfg_req addr_lo
    657 *	1 - Valid bit for @tisci_msg_rm_ring_cfg_req addr_hi
    658 *	2 - Valid bit for @tisci_msg_rm_ring_cfg_req count
    659 *	3 - Valid bit for @tisci_msg_rm_ring_cfg_req mode
    660 *	4 - Valid bit for @tisci_msg_rm_ring_cfg_req size
    661 *	5 - Valid bit for @tisci_msg_rm_ring_cfg_req order_id
    662 *	6 - Valid bit for @tisci_msg_rm_ring_cfg_req virtid
    663 *	7 - Valid bit for @tisci_msg_rm_ring_cfg_req ASEL
    664 * @nav_id: Device ID of Navigator Subsystem from which the ring is allocated
    665 * @index: ring index to be configured.
    666 * @addr_lo: 32 LSBs of ring base address to be programmed into the ring's
    667 *	RING_BA_LO register
    668 * @addr_hi: 16 MSBs of ring base address to be programmed into the ring's
    669 *	RING_BA_HI register.
    670 * @count: Number of ring elements. Must be even if mode is CREDENTIALS or QM
    671 *	modes.
    672 * @mode: Specifies the mode the ring is to be configured.
    673 * @size: Specifies encoded ring element size. To calculate the encoded size use
    674 *	the formula (log2(size_bytes) - 2), where size_bytes cannot be
    675 *	greater than 256.
    676 * @order_id: Specifies the ring's bus order ID.
    677 * @virtid: Ring virt ID value
    678 * @asel: Ring ASEL (address select) value to be set into the ASEL field of the
    679 *	ring's RING_BA_HI register.
    680 */
    681struct ti_sci_msg_rm_ring_cfg_req {
    682	struct ti_sci_msg_hdr hdr;
    683	u32 valid_params;
    684	u16 nav_id;
    685	u16 index;
    686	u32 addr_lo;
    687	u32 addr_hi;
    688	u32 count;
    689	u8 mode;
    690	u8 size;
    691	u8 order_id;
    692	u16 virtid;
    693	u8 asel;
    694} __packed;
    695
    696/**
    697 * struct ti_sci_msg_psil_pair - Pairs a PSI-L source thread to a destination
    698 *				 thread
    699 * @hdr:	Generic Header
    700 * @nav_id:	SoC Navigator Subsystem device ID whose PSI-L config proxy is
    701 *		used to pair the source and destination threads.
    702 * @src_thread:	PSI-L source thread ID within the PSI-L System thread map.
    703 *
    704 * UDMAP transmit channels mapped to source threads will have their
    705 * TCHAN_THRD_ID register programmed with the destination thread if the pairing
    706 * is successful.
    707
    708 * @dst_thread: PSI-L destination thread ID within the PSI-L System thread map.
    709 * PSI-L destination threads start at index 0x8000.  The request is NACK'd if
    710 * the destination thread is not greater than or equal to 0x8000.
    711 *
    712 * UDMAP receive channels mapped to destination threads will have their
    713 * RCHAN_THRD_ID register programmed with the source thread if the pairing
    714 * is successful.
    715 *
    716 * Request type is TI_SCI_MSG_RM_PSIL_PAIR, response is a generic ACK or NACK
    717 * message.
    718 */
    719struct ti_sci_msg_psil_pair {
    720	struct ti_sci_msg_hdr hdr;
    721	u32 nav_id;
    722	u32 src_thread;
    723	u32 dst_thread;
    724} __packed;
    725
    726/**
    727 * struct ti_sci_msg_psil_unpair - Unpairs a PSI-L source thread from a
    728 *				   destination thread
    729 * @hdr:	Generic Header
    730 * @nav_id:	SoC Navigator Subsystem device ID whose PSI-L config proxy is
    731 *		used to unpair the source and destination threads.
    732 * @src_thread:	PSI-L source thread ID within the PSI-L System thread map.
    733 *
    734 * UDMAP transmit channels mapped to source threads will have their
    735 * TCHAN_THRD_ID register cleared if the unpairing is successful.
    736 *
    737 * @dst_thread: PSI-L destination thread ID within the PSI-L System thread map.
    738 * PSI-L destination threads start at index 0x8000.  The request is NACK'd if
    739 * the destination thread is not greater than or equal to 0x8000.
    740 *
    741 * UDMAP receive channels mapped to destination threads will have their
    742 * RCHAN_THRD_ID register cleared if the unpairing is successful.
    743 *
    744 * Request type is TI_SCI_MSG_RM_PSIL_UNPAIR, response is a generic ACK or NACK
    745 * message.
    746 */
    747struct ti_sci_msg_psil_unpair {
    748	struct ti_sci_msg_hdr hdr;
    749	u32 nav_id;
    750	u32 src_thread;
    751	u32 dst_thread;
    752} __packed;
    753
    754/**
    755 * struct ti_sci_msg_udmap_rx_flow_cfg -  UDMAP receive flow configuration
    756 *					  message
    757 * @hdr: Generic Header
    758 * @nav_id: SoC Navigator Subsystem device ID from which the receive flow is
    759 *	allocated
    760 * @flow_index: UDMAP receive flow index for non-optional configuration.
    761 * @rx_ch_index: Specifies the index of the receive channel using the flow_index
    762 * @rx_einfo_present: UDMAP receive flow extended packet info present.
    763 * @rx_psinfo_present: UDMAP receive flow PS words present.
    764 * @rx_error_handling: UDMAP receive flow error handling configuration. Valid
    765 *	values are TI_SCI_RM_UDMAP_RX_FLOW_ERR_DROP/RETRY.
    766 * @rx_desc_type: UDMAP receive flow descriptor type. It can be one of
    767 *	TI_SCI_RM_UDMAP_RX_FLOW_DESC_HOST/MONO.
    768 * @rx_sop_offset: UDMAP receive flow start of packet offset.
    769 * @rx_dest_qnum: UDMAP receive flow destination queue number.
    770 * @rx_ps_location: UDMAP receive flow PS words location.
    771 *	0 - end of packet descriptor
    772 *	1 - Beginning of the data buffer
    773 * @rx_src_tag_hi: UDMAP receive flow source tag high byte constant
    774 * @rx_src_tag_lo: UDMAP receive flow source tag low byte constant
    775 * @rx_dest_tag_hi: UDMAP receive flow destination tag high byte constant
    776 * @rx_dest_tag_lo: UDMAP receive flow destination tag low byte constant
    777 * @rx_src_tag_hi_sel: UDMAP receive flow source tag high byte selector
    778 * @rx_src_tag_lo_sel: UDMAP receive flow source tag low byte selector
    779 * @rx_dest_tag_hi_sel: UDMAP receive flow destination tag high byte selector
    780 * @rx_dest_tag_lo_sel: UDMAP receive flow destination tag low byte selector
    781 * @rx_size_thresh_en: UDMAP receive flow packet size based free buffer queue
    782 *	enable. If enabled, the ti_sci_rm_udmap_rx_flow_opt_cfg also need to be
    783 *	configured and sent.
    784 * @rx_fdq0_sz0_qnum: UDMAP receive flow free descriptor queue 0.
    785 * @rx_fdq1_qnum: UDMAP receive flow free descriptor queue 1.
    786 * @rx_fdq2_qnum: UDMAP receive flow free descriptor queue 2.
    787 * @rx_fdq3_qnum: UDMAP receive flow free descriptor queue 3.
    788 *
    789 * For detailed information on the settings, see the UDMAP section of the TRM.
    790 */
    791struct ti_sci_msg_udmap_rx_flow_cfg {
    792	struct ti_sci_msg_hdr hdr;
    793	u32 nav_id;
    794	u32 flow_index;
    795	u32 rx_ch_index;
    796	u8 rx_einfo_present;
    797	u8 rx_psinfo_present;
    798	u8 rx_error_handling;
    799	u8 rx_desc_type;
    800	u16 rx_sop_offset;
    801	u16 rx_dest_qnum;
    802	u8 rx_ps_location;
    803	u8 rx_src_tag_hi;
    804	u8 rx_src_tag_lo;
    805	u8 rx_dest_tag_hi;
    806	u8 rx_dest_tag_lo;
    807	u8 rx_src_tag_hi_sel;
    808	u8 rx_src_tag_lo_sel;
    809	u8 rx_dest_tag_hi_sel;
    810	u8 rx_dest_tag_lo_sel;
    811	u8 rx_size_thresh_en;
    812	u16 rx_fdq0_sz0_qnum;
    813	u16 rx_fdq1_qnum;
    814	u16 rx_fdq2_qnum;
    815	u16 rx_fdq3_qnum;
    816} __packed;
    817
    818/**
    819 * struct rm_ti_sci_msg_udmap_rx_flow_opt_cfg - parameters for UDMAP receive
    820 *						flow optional configuration
    821 * @hdr: Generic Header
    822 * @nav_id: SoC Navigator Subsystem device ID from which the receive flow is
    823 *	allocated
    824 * @flow_index: UDMAP receive flow index for optional configuration.
    825 * @rx_ch_index: Specifies the index of the receive channel using the flow_index
    826 * @rx_size_thresh0: UDMAP receive flow packet size threshold 0.
    827 * @rx_size_thresh1: UDMAP receive flow packet size threshold 1.
    828 * @rx_size_thresh2: UDMAP receive flow packet size threshold 2.
    829 * @rx_fdq0_sz1_qnum: UDMAP receive flow free descriptor queue for size
    830 *	threshold 1.
    831 * @rx_fdq0_sz2_qnum: UDMAP receive flow free descriptor queue for size
    832 *	threshold 2.
    833 * @rx_fdq0_sz3_qnum: UDMAP receive flow free descriptor queue for size
    834 *	threshold 3.
    835 *
    836 * For detailed information on the settings, see the UDMAP section of the TRM.
    837 */
    838struct rm_ti_sci_msg_udmap_rx_flow_opt_cfg {
    839	struct ti_sci_msg_hdr hdr;
    840	u32 nav_id;
    841	u32 flow_index;
    842	u32 rx_ch_index;
    843	u16 rx_size_thresh0;
    844	u16 rx_size_thresh1;
    845	u16 rx_size_thresh2;
    846	u16 rx_fdq0_sz1_qnum;
    847	u16 rx_fdq0_sz2_qnum;
    848	u16 rx_fdq0_sz3_qnum;
    849} __packed;
    850
    851/**
    852 * Configures a Navigator Subsystem UDMAP transmit channel
    853 *
    854 * Configures the non-real-time registers of a Navigator Subsystem UDMAP
    855 * transmit channel.  The channel index must be assigned to the host defined
    856 * in the TISCI header via the RM board configuration resource assignment
    857 * range list.
    858 *
    859 * @hdr: Generic Header
    860 *
    861 * @valid_params: Bitfield defining validity of tx channel configuration
    862 * parameters. The tx channel configuration fields are not valid, and will not
    863 * be used for ch configuration, if their corresponding valid bit is zero.
    864 * Valid bit usage:
    865 *    0 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_pause_on_err
    866 *    1 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_atype
    867 *    2 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_chan_type
    868 *    3 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_fetch_size
    869 *    4 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::txcq_qnum
    870 *    5 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_priority
    871 *    6 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_qos
    872 *    7 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_orderid
    873 *    8 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_sched_priority
    874 *    9 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_filt_einfo
    875 *   10 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_filt_pswords
    876 *   11 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_supr_tdpkt
    877 *   12 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_credit_count
    878 *   13 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::fdepth
    879 *   14 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_burst_size
    880 *   15 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::tx_tdtype
    881 *   16 - Valid bit for @ref ti_sci_msg_rm_udmap_tx_ch_cfg::extended_ch_type
    882 *
    883 * @nav_id: SoC device ID of Navigator Subsystem where tx channel is located
    884 *
    885 * @index: UDMAP transmit channel index.
    886 *
    887 * @tx_pause_on_err: UDMAP transmit channel pause on error configuration to
    888 * be programmed into the tx_pause_on_err field of the channel's TCHAN_TCFG
    889 * register.
    890 *
    891 * @tx_filt_einfo: UDMAP transmit channel extended packet information passing
    892 * configuration to be programmed into the tx_filt_einfo field of the
    893 * channel's TCHAN_TCFG register.
    894 *
    895 * @tx_filt_pswords: UDMAP transmit channel protocol specific word passing
    896 * configuration to be programmed into the tx_filt_pswords field of the
    897 * channel's TCHAN_TCFG register.
    898 *
    899 * @tx_atype: UDMAP transmit channel non Ring Accelerator access pointer
    900 * interpretation configuration to be programmed into the tx_atype field of
    901 * the channel's TCHAN_TCFG register.
    902 *
    903 * @tx_chan_type: UDMAP transmit channel functional channel type and work
    904 * passing mechanism configuration to be programmed into the tx_chan_type
    905 * field of the channel's TCHAN_TCFG register.
    906 *
    907 * @tx_supr_tdpkt: UDMAP transmit channel teardown packet generation suppression
    908 * configuration to be programmed into the tx_supr_tdpkt field of the channel's
    909 * TCHAN_TCFG register.
    910 *
    911 * @tx_fetch_size: UDMAP transmit channel number of 32-bit descriptor words to
    912 * fetch configuration to be programmed into the tx_fetch_size field of the
    913 * channel's TCHAN_TCFG register.  The user must make sure to set the maximum
    914 * word count that can pass through the channel for any allowed descriptor type.
    915 *
    916 * @tx_credit_count: UDMAP transmit channel transfer request credit count
    917 * configuration to be programmed into the count field of the TCHAN_TCREDIT
    918 * register.  Specifies how many credits for complete TRs are available.
    919 *
    920 * @txcq_qnum: UDMAP transmit channel completion queue configuration to be
    921 * programmed into the txcq_qnum field of the TCHAN_TCQ register. The specified
    922 * completion queue must be assigned to the host, or a subordinate of the host,
    923 * requesting configuration of the transmit channel.
    924 *
    925 * @tx_priority: UDMAP transmit channel transmit priority value to be programmed
    926 * into the priority field of the channel's TCHAN_TPRI_CTRL register.
    927 *
    928 * @tx_qos: UDMAP transmit channel transmit qos value to be programmed into the
    929 * qos field of the channel's TCHAN_TPRI_CTRL register.
    930 *
    931 * @tx_orderid: UDMAP transmit channel bus order id value to be programmed into
    932 * the orderid field of the channel's TCHAN_TPRI_CTRL register.
    933 *
    934 * @fdepth: UDMAP transmit channel FIFO depth configuration to be programmed
    935 * into the fdepth field of the TCHAN_TFIFO_DEPTH register. Sets the number of
    936 * Tx FIFO bytes which are allowed to be stored for the channel. Check the UDMAP
    937 * section of the TRM for restrictions regarding this parameter.
    938 *
    939 * @tx_sched_priority: UDMAP transmit channel tx scheduling priority
    940 * configuration to be programmed into the priority field of the channel's
    941 * TCHAN_TST_SCHED register.
    942 *
    943 * @tx_burst_size: UDMAP transmit channel burst size configuration to be
    944 * programmed into the tx_burst_size field of the TCHAN_TCFG register.
    945 *
    946 * @tx_tdtype: UDMAP transmit channel teardown type configuration to be
    947 * programmed into the tdtype field of the TCHAN_TCFG register:
    948 * 0 - Return immediately
    949 * 1 - Wait for completion message from remote peer
    950 *
    951 * @extended_ch_type: Valid for BCDMA.
    952 * 0 - the channel is split tx channel (tchan)
    953 * 1 - the channel is block copy channel (bchan)
    954 */
    955struct ti_sci_msg_rm_udmap_tx_ch_cfg_req {
    956	struct ti_sci_msg_hdr hdr;
    957	u32 valid_params;
    958	u16 nav_id;
    959	u16 index;
    960	u8 tx_pause_on_err;
    961	u8 tx_filt_einfo;
    962	u8 tx_filt_pswords;
    963	u8 tx_atype;
    964	u8 tx_chan_type;
    965	u8 tx_supr_tdpkt;
    966	u16 tx_fetch_size;
    967	u8 tx_credit_count;
    968	u16 txcq_qnum;
    969	u8 tx_priority;
    970	u8 tx_qos;
    971	u8 tx_orderid;
    972	u16 fdepth;
    973	u8 tx_sched_priority;
    974	u8 tx_burst_size;
    975	u8 tx_tdtype;
    976	u8 extended_ch_type;
    977} __packed;
    978
    979/**
    980 * Configures a Navigator Subsystem UDMAP receive channel
    981 *
    982 * Configures the non-real-time registers of a Navigator Subsystem UDMAP
    983 * receive channel.  The channel index must be assigned to the host defined
    984 * in the TISCI header via the RM board configuration resource assignment
    985 * range list.
    986 *
    987 * @hdr: Generic Header
    988 *
    989 * @valid_params: Bitfield defining validity of rx channel configuration
    990 * parameters.
    991 * The rx channel configuration fields are not valid, and will not be used for
    992 * ch configuration, if their corresponding valid bit is zero.
    993 * Valid bit usage:
    994 *    0 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_pause_on_err
    995 *    1 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_atype
    996 *    2 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_chan_type
    997 *    3 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_fetch_size
    998 *    4 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rxcq_qnum
    999 *    5 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_priority
   1000 *    6 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_qos
   1001 *    7 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_orderid
   1002 *    8 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_sched_priority
   1003 *    9 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::flowid_start
   1004 *   10 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::flowid_cnt
   1005 *   11 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_ignore_short
   1006 *   12 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_ignore_long
   1007 *   14 - Valid bit for @ti_sci_msg_rm_udmap_rx_ch_cfg_req::rx_burst_size
   1008 *
   1009 * @nav_id: SoC device ID of Navigator Subsystem where rx channel is located
   1010 *
   1011 * @index: UDMAP receive channel index.
   1012 *
   1013 * @rx_fetch_size: UDMAP receive channel number of 32-bit descriptor words to
   1014 * fetch configuration to be programmed into the rx_fetch_size field of the
   1015 * channel's RCHAN_RCFG register.
   1016 *
   1017 * @rxcq_qnum: UDMAP receive channel completion queue configuration to be
   1018 * programmed into the rxcq_qnum field of the RCHAN_RCQ register.
   1019 * The specified completion queue must be assigned to the host, or a subordinate
   1020 * of the host, requesting configuration of the receive channel.
   1021 *
   1022 * @rx_priority: UDMAP receive channel receive priority value to be programmed
   1023 * into the priority field of the channel's RCHAN_RPRI_CTRL register.
   1024 *
   1025 * @rx_qos: UDMAP receive channel receive qos value to be programmed into the
   1026 * qos field of the channel's RCHAN_RPRI_CTRL register.
   1027 *
   1028 * @rx_orderid: UDMAP receive channel bus order id value to be programmed into
   1029 * the orderid field of the channel's RCHAN_RPRI_CTRL register.
   1030 *
   1031 * @rx_sched_priority: UDMAP receive channel rx scheduling priority
   1032 * configuration to be programmed into the priority field of the channel's
   1033 * RCHAN_RST_SCHED register.
   1034 *
   1035 * @flowid_start: UDMAP receive channel additional flows starting index
   1036 * configuration to program into the flow_start field of the RCHAN_RFLOW_RNG
   1037 * register. Specifies the starting index for flow IDs the receive channel is to
   1038 * make use of beyond the default flow. flowid_start and @ref flowid_cnt must be
   1039 * set as valid and configured together. The starting flow ID set by
   1040 * @ref flowid_cnt must be a flow index within the Navigator Subsystem's subset
   1041 * of flows beyond the default flows statically mapped to receive channels.
   1042 * The additional flows must be assigned to the host, or a subordinate of the
   1043 * host, requesting configuration of the receive channel.
   1044 *
   1045 * @flowid_cnt: UDMAP receive channel additional flows count configuration to
   1046 * program into the flowid_cnt field of the RCHAN_RFLOW_RNG register.
   1047 * This field specifies how many flow IDs are in the additional contiguous range
   1048 * of legal flow IDs for the channel.  @ref flowid_start and flowid_cnt must be
   1049 * set as valid and configured together. Disabling the valid_params field bit
   1050 * for flowid_cnt indicates no flow IDs other than the default are to be
   1051 * allocated and used by the receive channel. @ref flowid_start plus flowid_cnt
   1052 * cannot be greater than the number of receive flows in the receive channel's
   1053 * Navigator Subsystem.  The additional flows must be assigned to the host, or a
   1054 * subordinate of the host, requesting configuration of the receive channel.
   1055 *
   1056 * @rx_pause_on_err: UDMAP receive channel pause on error configuration to be
   1057 * programmed into the rx_pause_on_err field of the channel's RCHAN_RCFG
   1058 * register.
   1059 *
   1060 * @rx_atype: UDMAP receive channel non Ring Accelerator access pointer
   1061 * interpretation configuration to be programmed into the rx_atype field of the
   1062 * channel's RCHAN_RCFG register.
   1063 *
   1064 * @rx_chan_type: UDMAP receive channel functional channel type and work passing
   1065 * mechanism configuration to be programmed into the rx_chan_type field of the
   1066 * channel's RCHAN_RCFG register.
   1067 *
   1068 * @rx_ignore_short: UDMAP receive channel short packet treatment configuration
   1069 * to be programmed into the rx_ignore_short field of the RCHAN_RCFG register.
   1070 *
   1071 * @rx_ignore_long: UDMAP receive channel long packet treatment configuration to
   1072 * be programmed into the rx_ignore_long field of the RCHAN_RCFG register.
   1073 *
   1074 * @rx_burst_size: UDMAP receive channel burst size configuration to be
   1075 * programmed into the rx_burst_size field of the RCHAN_RCFG register.
   1076 */
   1077struct ti_sci_msg_rm_udmap_rx_ch_cfg_req {
   1078	struct ti_sci_msg_hdr hdr;
   1079	u32 valid_params;
   1080	u16 nav_id;
   1081	u16 index;
   1082	u16 rx_fetch_size;
   1083	u16 rxcq_qnum;
   1084	u8 rx_priority;
   1085	u8 rx_qos;
   1086	u8 rx_orderid;
   1087	u8 rx_sched_priority;
   1088	u16 flowid_start;
   1089	u16 flowid_cnt;
   1090	u8 rx_pause_on_err;
   1091	u8 rx_atype;
   1092	u8 rx_chan_type;
   1093	u8 rx_ignore_short;
   1094	u8 rx_ignore_long;
   1095	u8 rx_burst_size;
   1096} __packed;
   1097
   1098/**
   1099 * Configures a Navigator Subsystem UDMAP receive flow
   1100 *
   1101 * Configures a Navigator Subsystem UDMAP receive flow's registers.
   1102 * Configuration does not include the flow registers which handle size-based
   1103 * free descriptor queue routing.
   1104 *
   1105 * The flow index must be assigned to the host defined in the TISCI header via
   1106 * the RM board configuration resource assignment range list.
   1107 *
   1108 * @hdr: Standard TISCI header
   1109 *
   1110 * @valid_params
   1111 * Bitfield defining validity of rx flow configuration parameters.  The
   1112 * rx flow configuration fields are not valid, and will not be used for flow
   1113 * configuration, if their corresponding valid bit is zero.  Valid bit usage:
   1114 *     0 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_einfo_present
   1115 *     1 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_psinfo_present
   1116 *     2 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_error_handling
   1117 *     3 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_desc_type
   1118 *     4 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_sop_offset
   1119 *     5 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_dest_qnum
   1120 *     6 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_src_tag_hi
   1121 *     7 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_src_tag_lo
   1122 *     8 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_dest_tag_hi
   1123 *     9 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_dest_tag_lo
   1124 *    10 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_src_tag_hi_sel
   1125 *    11 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_src_tag_lo_sel
   1126 *    12 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_dest_tag_hi_sel
   1127 *    13 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_dest_tag_lo_sel
   1128 *    14 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_fdq0_sz0_qnum
   1129 *    15 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_fdq1_sz0_qnum
   1130 *    16 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_fdq2_sz0_qnum
   1131 *    17 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_fdq3_sz0_qnum
   1132 *    18 - Valid bit for @tisci_msg_rm_udmap_flow_cfg_req::rx_ps_location
   1133 *
   1134 * @nav_id: SoC device ID of Navigator Subsystem from which the receive flow is
   1135 * allocated
   1136 *
   1137 * @flow_index: UDMAP receive flow index for non-optional configuration.
   1138 *
   1139 * @rx_einfo_present:
   1140 * UDMAP receive flow extended packet info present configuration to be
   1141 * programmed into the rx_einfo_present field of the flow's RFLOW_RFA register.
   1142 *
   1143 * @rx_psinfo_present:
   1144 * UDMAP receive flow PS words present configuration to be programmed into the
   1145 * rx_psinfo_present field of the flow's RFLOW_RFA register.
   1146 *
   1147 * @rx_error_handling:
   1148 * UDMAP receive flow error handling configuration to be programmed into the
   1149 * rx_error_handling field of the flow's RFLOW_RFA register.
   1150 *
   1151 * @rx_desc_type:
   1152 * UDMAP receive flow descriptor type configuration to be programmed into the
   1153 * rx_desc_type field field of the flow's RFLOW_RFA register.
   1154 *
   1155 * @rx_sop_offset:
   1156 * UDMAP receive flow start of packet offset configuration to be programmed
   1157 * into the rx_sop_offset field of the RFLOW_RFA register.  See the UDMAP
   1158 * section of the TRM for more information on this setting.  Valid values for
   1159 * this field are 0-255 bytes.
   1160 *
   1161 * @rx_dest_qnum:
   1162 * UDMAP receive flow destination queue configuration to be programmed into the
   1163 * rx_dest_qnum field of the flow's RFLOW_RFA register.  The specified
   1164 * destination queue must be valid within the Navigator Subsystem and must be
   1165 * owned by the host, or a subordinate of the host, requesting allocation and
   1166 * configuration of the receive flow.
   1167 *
   1168 * @rx_src_tag_hi:
   1169 * UDMAP receive flow source tag high byte constant configuration to be
   1170 * programmed into the rx_src_tag_hi field of the flow's RFLOW_RFB register.
   1171 * See the UDMAP section of the TRM for more information on this setting.
   1172 *
   1173 * @rx_src_tag_lo:
   1174 * UDMAP receive flow source tag low byte constant configuration to be
   1175 * programmed into the rx_src_tag_lo field of the flow's RFLOW_RFB register.
   1176 * See the UDMAP section of the TRM for more information on this setting.
   1177 *
   1178 * @rx_dest_tag_hi:
   1179 * UDMAP receive flow destination tag high byte constant configuration to be
   1180 * programmed into the rx_dest_tag_hi field of the flow's RFLOW_RFB register.
   1181 * See the UDMAP section of the TRM for more information on this setting.
   1182 *
   1183 * @rx_dest_tag_lo:
   1184 * UDMAP receive flow destination tag low byte constant configuration to be
   1185 * programmed into the rx_dest_tag_lo field of the flow's RFLOW_RFB register.
   1186 * See the UDMAP section of the TRM for more information on this setting.
   1187 *
   1188 * @rx_src_tag_hi_sel:
   1189 * UDMAP receive flow source tag high byte selector configuration to be
   1190 * programmed into the rx_src_tag_hi_sel field of the RFLOW_RFC register.  See
   1191 * the UDMAP section of the TRM for more information on this setting.
   1192 *
   1193 * @rx_src_tag_lo_sel:
   1194 * UDMAP receive flow source tag low byte selector configuration to be
   1195 * programmed into the rx_src_tag_lo_sel field of the RFLOW_RFC register.  See
   1196 * the UDMAP section of the TRM for more information on this setting.
   1197 *
   1198 * @rx_dest_tag_hi_sel:
   1199 * UDMAP receive flow destination tag high byte selector configuration to be
   1200 * programmed into the rx_dest_tag_hi_sel field of the RFLOW_RFC register.  See
   1201 * the UDMAP section of the TRM for more information on this setting.
   1202 *
   1203 * @rx_dest_tag_lo_sel:
   1204 * UDMAP receive flow destination tag low byte selector configuration to be
   1205 * programmed into the rx_dest_tag_lo_sel field of the RFLOW_RFC register.  See
   1206 * the UDMAP section of the TRM for more information on this setting.
   1207 *
   1208 * @rx_fdq0_sz0_qnum:
   1209 * UDMAP receive flow free descriptor queue 0 configuration to be programmed
   1210 * into the rx_fdq0_sz0_qnum field of the flow's RFLOW_RFD register.  See the
   1211 * UDMAP section of the TRM for more information on this setting. The specified
   1212 * free queue must be valid within the Navigator Subsystem and must be owned
   1213 * by the host, or a subordinate of the host, requesting allocation and
   1214 * configuration of the receive flow.
   1215 *
   1216 * @rx_fdq1_qnum:
   1217 * UDMAP receive flow free descriptor queue 1 configuration to be programmed
   1218 * into the rx_fdq1_qnum field of the flow's RFLOW_RFD register.  See the
   1219 * UDMAP section of the TRM for more information on this setting.  The specified
   1220 * free queue must be valid within the Navigator Subsystem and must be owned
   1221 * by the host, or a subordinate of the host, requesting allocation and
   1222 * configuration of the receive flow.
   1223 *
   1224 * @rx_fdq2_qnum:
   1225 * UDMAP receive flow free descriptor queue 2 configuration to be programmed
   1226 * into the rx_fdq2_qnum field of the flow's RFLOW_RFE register.  See the
   1227 * UDMAP section of the TRM for more information on this setting.  The specified
   1228 * free queue must be valid within the Navigator Subsystem and must be owned
   1229 * by the host, or a subordinate of the host, requesting allocation and
   1230 * configuration of the receive flow.
   1231 *
   1232 * @rx_fdq3_qnum:
   1233 * UDMAP receive flow free descriptor queue 3 configuration to be programmed
   1234 * into the rx_fdq3_qnum field of the flow's RFLOW_RFE register.  See the
   1235 * UDMAP section of the TRM for more information on this setting.  The specified
   1236 * free queue must be valid within the Navigator Subsystem and must be owned
   1237 * by the host, or a subordinate of the host, requesting allocation and
   1238 * configuration of the receive flow.
   1239 *
   1240 * @rx_ps_location:
   1241 * UDMAP receive flow PS words location configuration to be programmed into the
   1242 * rx_ps_location field of the flow's RFLOW_RFA register.
   1243 */
   1244struct ti_sci_msg_rm_udmap_flow_cfg_req {
   1245	struct ti_sci_msg_hdr hdr;
   1246	u32 valid_params;
   1247	u16 nav_id;
   1248	u16 flow_index;
   1249	u8 rx_einfo_present;
   1250	u8 rx_psinfo_present;
   1251	u8 rx_error_handling;
   1252	u8 rx_desc_type;
   1253	u16 rx_sop_offset;
   1254	u16 rx_dest_qnum;
   1255	u8 rx_src_tag_hi;
   1256	u8 rx_src_tag_lo;
   1257	u8 rx_dest_tag_hi;
   1258	u8 rx_dest_tag_lo;
   1259	u8 rx_src_tag_hi_sel;
   1260	u8 rx_src_tag_lo_sel;
   1261	u8 rx_dest_tag_hi_sel;
   1262	u8 rx_dest_tag_lo_sel;
   1263	u16 rx_fdq0_sz0_qnum;
   1264	u16 rx_fdq1_qnum;
   1265	u16 rx_fdq2_qnum;
   1266	u16 rx_fdq3_qnum;
   1267	u8 rx_ps_location;
   1268} __packed;
   1269
   1270/**
   1271 * struct ti_sci_msg_req_proc_request - Request a processor
   1272 * @hdr:		Generic Header
   1273 * @processor_id:	ID of processor being requested
   1274 *
   1275 * Request type is TI_SCI_MSG_PROC_REQUEST, response is a generic ACK/NACK
   1276 * message.
   1277 */
   1278struct ti_sci_msg_req_proc_request {
   1279	struct ti_sci_msg_hdr hdr;
   1280	u8 processor_id;
   1281} __packed;
   1282
   1283/**
   1284 * struct ti_sci_msg_req_proc_release - Release a processor
   1285 * @hdr:		Generic Header
   1286 * @processor_id:	ID of processor being released
   1287 *
   1288 * Request type is TI_SCI_MSG_PROC_RELEASE, response is a generic ACK/NACK
   1289 * message.
   1290 */
   1291struct ti_sci_msg_req_proc_release {
   1292	struct ti_sci_msg_hdr hdr;
   1293	u8 processor_id;
   1294} __packed;
   1295
   1296/**
   1297 * struct ti_sci_msg_req_proc_handover - Handover a processor to a host
   1298 * @hdr:		Generic Header
   1299 * @processor_id:	ID of processor being handed over
   1300 * @host_id:		Host ID the control needs to be transferred to
   1301 *
   1302 * Request type is TI_SCI_MSG_PROC_HANDOVER, response is a generic ACK/NACK
   1303 * message.
   1304 */
   1305struct ti_sci_msg_req_proc_handover {
   1306	struct ti_sci_msg_hdr hdr;
   1307	u8 processor_id;
   1308	u8 host_id;
   1309} __packed;
   1310
   1311/* Boot Vector masks */
   1312#define TI_SCI_ADDR_LOW_MASK			GENMASK_ULL(31, 0)
   1313#define TI_SCI_ADDR_HIGH_MASK			GENMASK_ULL(63, 32)
   1314#define TI_SCI_ADDR_HIGH_SHIFT			32
   1315
   1316/**
   1317 * struct ti_sci_msg_req_set_config - Set Processor boot configuration
   1318 * @hdr:		Generic Header
   1319 * @processor_id:	ID of processor being configured
   1320 * @bootvector_low:	Lower 32 bit address (Little Endian) of boot vector
   1321 * @bootvector_high:	Higher 32 bit address (Little Endian) of boot vector
   1322 * @config_flags_set:	Optional Processor specific Config Flags to set.
   1323 *			Setting a bit here implies the corresponding mode
   1324 *			will be set
   1325 * @config_flags_clear:	Optional Processor specific Config Flags to clear.
   1326 *			Setting a bit here implies the corresponding mode
   1327 *			will be cleared
   1328 *
   1329 * Request type is TI_SCI_MSG_PROC_HANDOVER, response is a generic ACK/NACK
   1330 * message.
   1331 */
   1332struct ti_sci_msg_req_set_config {
   1333	struct ti_sci_msg_hdr hdr;
   1334	u8 processor_id;
   1335	u32 bootvector_low;
   1336	u32 bootvector_high;
   1337	u32 config_flags_set;
   1338	u32 config_flags_clear;
   1339} __packed;
   1340
   1341/**
   1342 * struct ti_sci_msg_req_set_ctrl - Set Processor boot control flags
   1343 * @hdr:		Generic Header
   1344 * @processor_id:	ID of processor being configured
   1345 * @control_flags_set:	Optional Processor specific Control Flags to set.
   1346 *			Setting a bit here implies the corresponding mode
   1347 *			will be set
   1348 * @control_flags_clear:Optional Processor specific Control Flags to clear.
   1349 *			Setting a bit here implies the corresponding mode
   1350 *			will be cleared
   1351 *
   1352 * Request type is TI_SCI_MSG_SET_CTRL, response is a generic ACK/NACK
   1353 * message.
   1354 */
   1355struct ti_sci_msg_req_set_ctrl {
   1356	struct ti_sci_msg_hdr hdr;
   1357	u8 processor_id;
   1358	u32 control_flags_set;
   1359	u32 control_flags_clear;
   1360} __packed;
   1361
   1362/**
   1363 * struct ti_sci_msg_req_get_status - Processor boot status request
   1364 * @hdr:		Generic Header
   1365 * @processor_id:	ID of processor whose status is being requested
   1366 *
   1367 * Request type is TI_SCI_MSG_GET_STATUS, response is an appropriate
   1368 * message, or NACK in case of inability to satisfy request.
   1369 */
   1370struct ti_sci_msg_req_get_status {
   1371	struct ti_sci_msg_hdr hdr;
   1372	u8 processor_id;
   1373} __packed;
   1374
   1375/**
   1376 * struct ti_sci_msg_resp_get_status - Processor boot status response
   1377 * @hdr:		Generic Header
   1378 * @processor_id:	ID of processor whose status is returned
   1379 * @bootvector_low:	Lower 32 bit address (Little Endian) of boot vector
   1380 * @bootvector_high:	Higher 32 bit address (Little Endian) of boot vector
   1381 * @config_flags:	Optional Processor specific Config Flags set currently
   1382 * @control_flags:	Optional Processor specific Control Flags set currently
   1383 * @status_flags:	Optional Processor specific Status Flags set currently
   1384 *
   1385 * Response structure to a TI_SCI_MSG_GET_STATUS request.
   1386 */
   1387struct ti_sci_msg_resp_get_status {
   1388	struct ti_sci_msg_hdr hdr;
   1389	u8 processor_id;
   1390	u32 bootvector_low;
   1391	u32 bootvector_high;
   1392	u32 config_flags;
   1393	u32 control_flags;
   1394	u32 status_flags;
   1395} __packed;
   1396
   1397#endif /* __TI_SCI_H */