2016-10-19 07:08:34 +08:00
|
|
|
/*
|
|
|
|
* Texas Instruments System Control Interface (TISCI) Protocol
|
|
|
|
*
|
|
|
|
* Communication protocol with TI SCI hardware
|
|
|
|
* The system works in a message response protocol
|
|
|
|
* See: http://processors.wiki.ti.com/index.php/TISCI for details
|
|
|
|
*
|
|
|
|
* Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
*
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the
|
|
|
|
* distribution.
|
|
|
|
*
|
|
|
|
* Neither the name of Texas Instruments Incorporated nor the names of
|
|
|
|
* its contributors may be used to endorse or promote products derived
|
|
|
|
* from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __TI_SCI_H
|
|
|
|
#define __TI_SCI_H
|
|
|
|
|
|
|
|
/* Generic Messages */
|
|
|
|
#define TI_SCI_MSG_ENABLE_WDT 0x0000
|
|
|
|
#define TI_SCI_MSG_WAKE_RESET 0x0001
|
|
|
|
#define TI_SCI_MSG_VERSION 0x0002
|
|
|
|
#define TI_SCI_MSG_WAKE_REASON 0x0003
|
|
|
|
#define TI_SCI_MSG_GOODBYE 0x0004
|
|
|
|
|
2016-10-19 07:08:35 +08:00
|
|
|
/* Device requests */
|
|
|
|
#define TI_SCI_MSG_SET_DEVICE_STATE 0x0200
|
|
|
|
#define TI_SCI_MSG_GET_DEVICE_STATE 0x0201
|
|
|
|
#define TI_SCI_MSG_SET_DEVICE_RESETS 0x0202
|
|
|
|
|
2016-10-19 07:08:34 +08:00
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_hdr - Generic Message Header for All messages and responses
|
|
|
|
* @type: Type of messages: One of TI_SCI_MSG* values
|
|
|
|
* @host: Host of the message
|
|
|
|
* @seq: Message identifier indicating a transfer sequence
|
|
|
|
* @flags: Flag for the message
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_hdr {
|
|
|
|
u16 type;
|
|
|
|
u8 host;
|
|
|
|
u8 seq;
|
|
|
|
#define TI_SCI_MSG_FLAG(val) (1 << (val))
|
|
|
|
#define TI_SCI_FLAG_REQ_GENERIC_NORESPONSE 0x0
|
|
|
|
#define TI_SCI_FLAG_REQ_ACK_ON_RECEIVED TI_SCI_MSG_FLAG(0)
|
|
|
|
#define TI_SCI_FLAG_REQ_ACK_ON_PROCESSED TI_SCI_MSG_FLAG(1)
|
|
|
|
#define TI_SCI_FLAG_RESP_GENERIC_NACK 0x0
|
|
|
|
#define TI_SCI_FLAG_RESP_GENERIC_ACK TI_SCI_MSG_FLAG(1)
|
|
|
|
/* Additional Flags */
|
|
|
|
u32 flags;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_resp_version - Response for a message
|
|
|
|
* @hdr: Generic header
|
|
|
|
* @firmware_description: String describing the firmware
|
|
|
|
* @firmware_revision: Firmware revision
|
|
|
|
* @abi_major: Major version of the ABI that firmware supports
|
|
|
|
* @abi_minor: Minor version of the ABI that firmware supports
|
|
|
|
*
|
|
|
|
* In general, ABI version changes follow the rule that minor version increments
|
|
|
|
* are backward compatible. Major revision changes in ABI may not be
|
|
|
|
* backward compatible.
|
|
|
|
*
|
|
|
|
* Response to a generic message with message type TI_SCI_MSG_VERSION
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_resp_version {
|
|
|
|
struct ti_sci_msg_hdr hdr;
|
|
|
|
char firmware_description[32];
|
|
|
|
u16 firmware_revision;
|
|
|
|
u8 abi_major;
|
|
|
|
u8 abi_minor;
|
|
|
|
} __packed;
|
|
|
|
|
2016-10-19 07:08:35 +08:00
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_req_set_device_state - Set the desired state of the device
|
|
|
|
* @hdr: Generic header
|
|
|
|
* @id: Indicates which device to modify
|
|
|
|
* @reserved: Reserved space in message, must be 0 for backward compatibility
|
|
|
|
* @state: The desired state of the device.
|
|
|
|
*
|
|
|
|
* Certain flags can also be set to alter the device state:
|
|
|
|
* + MSG_FLAG_DEVICE_WAKE_ENABLED - Configure the device to be a wake source.
|
|
|
|
* The meaning of this flag will vary slightly from device to device and from
|
|
|
|
* SoC to SoC but it generally allows the device to wake the SoC out of deep
|
|
|
|
* suspend states.
|
|
|
|
* + MSG_FLAG_DEVICE_RESET_ISO - Enable reset isolation for this device.
|
|
|
|
* + MSG_FLAG_DEVICE_EXCLUSIVE - Claim this device exclusively. When passed
|
|
|
|
* with STATE_RETENTION or STATE_ON, it will claim the device exclusively.
|
|
|
|
* If another host already has this device set to STATE_RETENTION or STATE_ON,
|
|
|
|
* the message will fail. Once successful, other hosts attempting to set
|
|
|
|
* STATE_RETENTION or STATE_ON will fail.
|
|
|
|
*
|
|
|
|
* Request type is TI_SCI_MSG_SET_DEVICE_STATE, responded with a generic
|
|
|
|
* ACK/NACK message.
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_req_set_device_state {
|
|
|
|
/* Additional hdr->flags options */
|
|
|
|
#define MSG_FLAG_DEVICE_WAKE_ENABLED TI_SCI_MSG_FLAG(8)
|
|
|
|
#define MSG_FLAG_DEVICE_RESET_ISO TI_SCI_MSG_FLAG(9)
|
|
|
|
#define MSG_FLAG_DEVICE_EXCLUSIVE TI_SCI_MSG_FLAG(10)
|
|
|
|
struct ti_sci_msg_hdr hdr;
|
|
|
|
u32 id;
|
|
|
|
u32 reserved;
|
|
|
|
|
|
|
|
#define MSG_DEVICE_SW_STATE_AUTO_OFF 0
|
|
|
|
#define MSG_DEVICE_SW_STATE_RETENTION 1
|
|
|
|
#define MSG_DEVICE_SW_STATE_ON 2
|
|
|
|
u8 state;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_req_get_device_state - Request to get device.
|
|
|
|
* @hdr: Generic header
|
|
|
|
* @id: Device Identifier
|
|
|
|
*
|
|
|
|
* Request type is TI_SCI_MSG_GET_DEVICE_STATE, responded device state
|
|
|
|
* information
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_req_get_device_state {
|
|
|
|
struct ti_sci_msg_hdr hdr;
|
|
|
|
u32 id;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_resp_get_device_state - Response to get device request.
|
|
|
|
* @hdr: Generic header
|
|
|
|
* @context_loss_count: Indicates how many times the device has lost context. A
|
|
|
|
* driver can use this monotonic counter to determine if the device has
|
|
|
|
* lost context since the last time this message was exchanged.
|
|
|
|
* @resets: Programmed state of the reset lines.
|
|
|
|
* @programmed_state: The state as programmed by set_device.
|
|
|
|
* - Uses the MSG_DEVICE_SW_* macros
|
|
|
|
* @current_state: The actual state of the hardware.
|
|
|
|
*
|
|
|
|
* Response to request TI_SCI_MSG_GET_DEVICE_STATE.
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_resp_get_device_state {
|
|
|
|
struct ti_sci_msg_hdr hdr;
|
|
|
|
u32 context_loss_count;
|
|
|
|
u32 resets;
|
|
|
|
u8 programmed_state;
|
|
|
|
#define MSG_DEVICE_HW_STATE_OFF 0
|
|
|
|
#define MSG_DEVICE_HW_STATE_ON 1
|
|
|
|
#define MSG_DEVICE_HW_STATE_TRANS 2
|
|
|
|
u8 current_state;
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct ti_sci_msg_req_set_device_resets - Set the desired resets
|
|
|
|
* configuration of the device
|
|
|
|
* @hdr: Generic header
|
|
|
|
* @id: Indicates which device to modify
|
|
|
|
* @resets: A bit field of resets for the device. The meaning, behavior,
|
|
|
|
* and usage of the reset flags are device specific. 0 for a bit
|
|
|
|
* indicates releasing the reset represented by that bit while 1
|
|
|
|
* indicates keeping it held.
|
|
|
|
*
|
|
|
|
* Request type is TI_SCI_MSG_SET_DEVICE_RESETS, responded with a generic
|
|
|
|
* ACK/NACK message.
|
|
|
|
*/
|
|
|
|
struct ti_sci_msg_req_set_device_resets {
|
|
|
|
struct ti_sci_msg_hdr hdr;
|
|
|
|
u32 id;
|
|
|
|
u32 resets;
|
|
|
|
} __packed;
|
|
|
|
|
2016-10-19 07:08:34 +08:00
|
|
|
#endif /* __TI_SCI_H */
|