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