root/include/linux/firmware/intel/stratix10-svc-client.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Copyright (C) 2017-2018, Intel Corporation
   4  */
   5 
   6 #ifndef __STRATIX10_SVC_CLIENT_H
   7 #define __STRATIX10_SVC_CLIENT_H
   8 
   9 /**
  10  * Service layer driver supports client names
  11  *
  12  * fpga: for FPGA configuration
  13  * rsu: for remote status update
  14  */
  15 #define SVC_CLIENT_FPGA                 "fpga"
  16 #define SVC_CLIENT_RSU                  "rsu"
  17 
  18 /**
  19  * Status of the sent command, in bit number
  20  *
  21  * SVC_COMMAND_STATUS_RECONFIG_REQUEST_OK:
  22  * Secure firmware accepts the request of FPGA reconfiguration.
  23  *
  24  * SVC_STATUS_RECONFIG_BUFFER_SUBMITTED:
  25  * Service client successfully submits FPGA configuration
  26  * data buffer to secure firmware.
  27  *
  28  * SVC_COMMAND_STATUS_RECONFIG_BUFFER_DONE:
  29  * Secure firmware completes data process, ready to accept the
  30  * next WRITE transaction.
  31  *
  32  * SVC_COMMAND_STATUS_RECONFIG_COMPLETED:
  33  * Secure firmware completes FPGA configuration successfully, FPGA should
  34  * be in user mode.
  35  *
  36  * SVC_COMMAND_STATUS_RECONFIG_BUSY:
  37  * FPGA configuration is still in process.
  38  *
  39  * SVC_COMMAND_STATUS_RECONFIG_ERROR:
  40  * Error encountered during FPGA configuration.
  41  *
  42  * SVC_STATUS_RSU_OK:
  43  * Secure firmware accepts the request of remote status update (RSU).
  44  */
  45 #define SVC_STATUS_RECONFIG_REQUEST_OK          0
  46 #define SVC_STATUS_RECONFIG_BUFFER_SUBMITTED    1
  47 #define SVC_STATUS_RECONFIG_BUFFER_DONE         2
  48 #define SVC_STATUS_RECONFIG_COMPLETED           3
  49 #define SVC_STATUS_RECONFIG_BUSY                4
  50 #define SVC_STATUS_RECONFIG_ERROR               5
  51 #define SVC_STATUS_RSU_OK                       6
  52 #define SVC_STATUS_RSU_ERROR                    7
  53 /**
  54  * Flag bit for COMMAND_RECONFIG
  55  *
  56  * COMMAND_RECONFIG_FLAG_PARTIAL:
  57  * Set to FPGA configuration type (full or partial), the default
  58  * is full reconfig.
  59  */
  60 #define COMMAND_RECONFIG_FLAG_PARTIAL   0
  61 
  62 /**
  63  * Timeout settings for service clients:
  64  * timeout value used in Stratix10 FPGA manager driver.
  65  * timeout value used in RSU driver
  66  */
  67 #define SVC_RECONFIG_REQUEST_TIMEOUT_MS         100
  68 #define SVC_RECONFIG_BUFFER_TIMEOUT_MS          240
  69 #define SVC_RSU_REQUEST_TIMEOUT_MS              300
  70 
  71 struct stratix10_svc_chan;
  72 
  73 /**
  74  * enum stratix10_svc_command_code - supported service commands
  75  *
  76  * @COMMAND_NOOP: do 'dummy' request for integration/debug/trouble-shooting
  77  *
  78  * @COMMAND_RECONFIG: ask for FPGA configuration preparation, return status
  79  * is SVC_STATUS_RECONFIG_REQUEST_OK
  80  *
  81  * @COMMAND_RECONFIG_DATA_SUBMIT: submit buffer(s) of bit-stream data for the
  82  * FPGA configuration, return status is SVC_STATUS_RECONFIG_BUFFER_SUBMITTED,
  83  * or SVC_STATUS_RECONFIG_ERROR
  84  *
  85  * @COMMAND_RECONFIG_DATA_CLAIM: check the status of the configuration, return
  86  * status is SVC_STATUS_RECONFIG_COMPLETED, or SVC_STATUS_RECONFIG_BUSY, or
  87  * SVC_STATUS_RECONFIG_ERROR
  88  *
  89  * @COMMAND_RECONFIG_STATUS: check the status of the configuration, return
  90  * status is SVC_STATUS_RECONFIG_COMPLETED, or  SVC_STATUS_RECONFIG_BUSY, or
  91  * SVC_STATUS_RECONFIG_ERROR
  92  *
  93  * @COMMAND_RSU_STATUS: request remote system update boot log, return status
  94  * is log data or SVC_STATUS_RSU_ERROR
  95  *
  96  * @COMMAND_RSU_UPDATE: set the offset of the bitstream to boot after reboot,
  97  * return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
  98  *
  99  * @COMMAND_RSU_NOTIFY: report the status of hard processor system
 100  * software to firmware, return status is SVC_STATUS_RSU_OK or
 101  * SVC_STATUS_RSU_ERROR
 102  *
 103  * @COMMAND_RSU_RETRY: query firmware for the current image's retry counter,
 104  * return status is SVC_STATUS_RSU_OK or SVC_STATUS_RSU_ERROR
 105  */
 106 enum stratix10_svc_command_code {
 107         COMMAND_NOOP = 0,
 108         COMMAND_RECONFIG,
 109         COMMAND_RECONFIG_DATA_SUBMIT,
 110         COMMAND_RECONFIG_DATA_CLAIM,
 111         COMMAND_RECONFIG_STATUS,
 112         COMMAND_RSU_STATUS,
 113         COMMAND_RSU_UPDATE,
 114         COMMAND_RSU_NOTIFY,
 115         COMMAND_RSU_RETRY,
 116 };
 117 
 118 /**
 119  * struct stratix10_svc_client_msg - message sent by client to service
 120  * @payload: starting address of data need be processed
 121  * @payload_length: data size in bytes
 122  * @command: service command
 123  * @arg: args to be passed via registers and not physically mapped buffers
 124  */
 125 struct stratix10_svc_client_msg {
 126         void *payload;
 127         size_t payload_length;
 128         enum stratix10_svc_command_code command;
 129         u64 arg[3];
 130 };
 131 
 132 /**
 133  * struct stratix10_svc_command_config_type - config type
 134  * @flags: flag bit for the type of FPGA configuration
 135  */
 136 struct stratix10_svc_command_config_type {
 137         u32 flags;
 138 };
 139 
 140 /**
 141  * struct stratix10_svc_cb_data - callback data structure from service layer
 142  * @status: the status of sent command
 143  * @kaddr1: address of 1st completed data block
 144  * @kaddr2: address of 2nd completed data block
 145  * @kaddr3: address of 3rd completed data block
 146  */
 147 struct stratix10_svc_cb_data {
 148         u32 status;
 149         void *kaddr1;
 150         void *kaddr2;
 151         void *kaddr3;
 152 };
 153 
 154 /**
 155  * struct stratix10_svc_client - service client structure
 156  * @dev: the client device
 157  * @receive_cb: callback to provide service client the received data
 158  * @priv: client private data
 159  */
 160 struct stratix10_svc_client {
 161         struct device *dev;
 162         void (*receive_cb)(struct stratix10_svc_client *client,
 163                            struct stratix10_svc_cb_data *cb_data);
 164         void *priv;
 165 };
 166 
 167 /**
 168  * stratix10_svc_request_channel_byname() - request service channel
 169  * @client: identity of the client requesting the channel
 170  * @name: supporting client name defined above
 171  *
 172  * Return: a pointer to channel assigned to the client on success,
 173  * or ERR_PTR() on error.
 174  */
 175 struct stratix10_svc_chan
 176 *stratix10_svc_request_channel_byname(struct stratix10_svc_client *client,
 177         const char *name);
 178 
 179 /**
 180  * stratix10_svc_free_channel() - free service channel.
 181  * @chan: service channel to be freed
 182  */
 183 void stratix10_svc_free_channel(struct stratix10_svc_chan *chan);
 184 
 185 /**
 186  * stratix10_svc_allocate_memory() - allocate the momory
 187  * @chan: service channel assigned to the client
 188  * @size: number of bytes client requests
 189  *
 190  * Service layer allocates the requested number of bytes from the memory
 191  * pool for the client.
 192  *
 193  * Return: the starting address of allocated memory on success, or
 194  * ERR_PTR() on error.
 195  */
 196 void *stratix10_svc_allocate_memory(struct stratix10_svc_chan *chan,
 197                                     size_t size);
 198 
 199 /**
 200  * stratix10_svc_free_memory() - free allocated memory
 201  * @chan: service channel assigned to the client
 202  * @kaddr: starting address of memory to be free back to pool
 203  */
 204 void stratix10_svc_free_memory(struct stratix10_svc_chan *chan, void *kaddr);
 205 
 206 /**
 207  * stratix10_svc_send() - send a message to the remote
 208  * @chan: service channel assigned to the client
 209  * @msg: message data to be sent, in the format of
 210  * struct stratix10_svc_client_msg
 211  *
 212  * Return: 0 for success, -ENOMEM or -ENOBUFS on error.
 213  */
 214 int stratix10_svc_send(struct stratix10_svc_chan *chan, void *msg);
 215 
 216 /**
 217  * intel_svc_done() - complete service request
 218  * @chan: service channel assigned to the client
 219  *
 220  * This function is used by service client to inform service layer that
 221  * client's service requests are completed, or there is an error in the
 222  * request process.
 223  */
 224 void stratix10_svc_done(struct stratix10_svc_chan *chan);
 225 #endif
 226 

/* [<][>][^][v][top][bottom][index][help] */