tisci: Add support for handling devices
[k3conf/k3conf.git] / include / tisci_protocol.h
1 /*
2  * TISCI Protocol header file.
3  *
4  * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
5  *      Lokesh Vutla <lokeshvutla@ti.com>
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *    Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  *
14  *    Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the
17  *    distribution.
18  *
19  *    Neither the name of Texas Instruments Incorporated nor the names of
20  *    its contributors may be used to endorse or promote products derived
21  *    from this software without specific prior written permission.
22  *
23  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
36 #ifndef __TISCI_P_H
37 #define __TISCI_P_H
39 #include <stdint.h>
40 #include <sec_proxy.h>
42 #define TI_SCI_MSG_VERSION              0x0002
43 /* Device requests */
44 #define TI_SCI_MSG_SET_DEVICE_STATE     0x0200
45 #define TI_SCI_MSG_GET_DEVICE_STATE     0x0201
47 #define TI_SCI_MSG_FLAG(val)                    (1 << (val))
48 #define TI_SCI_FLAG_REQ_GENERIC_NORESPONSE      0x0
49 #define TI_SCI_FLAG_REQ_ACK_ON_RECEIVED         TI_SCI_MSG_FLAG(0)
50 #define TI_SCI_FLAG_REQ_ACK_ON_PROCESSED        TI_SCI_MSG_FLAG(1)
51 #define TI_SCI_FLAG_RESP_GENERIC_NACK           0x0
52 #define TI_SCI_FLAG_RESP_GENERIC_ACK            TI_SCI_MSG_FLAG(1)
54 struct ti_sci_msg_hdr {
55         uint16_t type;
56         uint8_t host;
57         uint8_t seq;
58         uint32_t flags;
59 } __attribute__ ((__packed__));
61 struct ti_sci_msg_resp_version {
62         struct ti_sci_msg_hdr hdr;
63         char firmware_description[32];
64         uint16_t version;
65         uint8_t abi_major;
66         uint8_t abi_minor;
67 } __attribute__ ((__packed__));
69 struct ti_sci_secure_msg_hdr {
70         uint16_t checksum;
71         uint16_t reserved;
72 } __attribute__ ((__packed__));
74 struct ti_sci_msg_req_set_device_state {
75         /* Additional hdr->flags options */
76 #define MSG_FLAG_DEVICE_WAKE_ENABLED    TI_SCI_MSG_FLAG(8)
77 #define MSG_FLAG_DEVICE_RESET_ISO       TI_SCI_MSG_FLAG(9)
78 #define MSG_FLAG_DEVICE_EXCLUSIVE       TI_SCI_MSG_FLAG(10)
79         struct ti_sci_msg_hdr hdr;
80         uint32_t id;
81         uint32_t reserved;
82 #define MSG_DEVICE_SW_STATE_AUTO_OFF    0
83 #define MSG_DEVICE_SW_STATE_RETENTION   1
84 #define MSG_DEVICE_SW_STATE_ON          2
85         uint8_t state;
86 } __attribute__ ((__packed__));
88 struct ti_sci_msg_req_get_device_state {
89         struct ti_sci_msg_hdr hdr;
90         uint32_t id;
91 } __attribute__ ((__packed__));
93 struct ti_sci_msg_resp_get_device_state {
94         struct ti_sci_msg_hdr hdr;
95         uint32_t context_loss_count;
96         uint32_t resets;
97         uint8_t programmed_state;
98 #define MSG_DEVICE_HW_STATE_OFF         0
99 #define MSG_DEVICE_HW_STATE_ON          1
100 #define MSG_DEVICE_HW_STATE_TRANS       2
101 #define MAX_DEVICE_HW_STATES            3
102         uint8_t current_state;
103 } __attribute__ ((__packed__));
105 void ti_sci_setup_header(struct ti_sci_msg_hdr *hdr, uint16_t type,
106                          uint32_t flags);
107 int ti_sci_xfer_msg(struct k3_sec_proxy_msg *msg);
109 static inline uint8_t ti_sci_is_response_ack(uint8_t *resp)
111         struct ti_sci_msg_hdr *hdr = (struct ti_sci_msg_hdr *)resp;
113         return hdr->flags & TI_SCI_FLAG_RESP_GENERIC_ACK ? 1 : 0;
116 #endif