1*d09adcbaSHadi Asyrafi /* 2*d09adcbaSHadi Asyrafi * Copyright (c) 2019, Intel Corporation. All rights reserved. 3*d09adcbaSHadi Asyrafi * 4*d09adcbaSHadi Asyrafi * SPDX-License-Identifier: BSD-3-Clause 5*d09adcbaSHadi Asyrafi */ 6*d09adcbaSHadi Asyrafi 7*d09adcbaSHadi Asyrafi #ifndef SOCFPGA_MBOX_H 8*d09adcbaSHadi Asyrafi #define SOCFPGA_MBOX_H 9*d09adcbaSHadi Asyrafi 10*d09adcbaSHadi Asyrafi #include <lib/utils_def.h> 11*d09adcbaSHadi Asyrafi 12*d09adcbaSHadi Asyrafi #define MBOX_OFFSET 0xffa30000 13*d09adcbaSHadi Asyrafi 14*d09adcbaSHadi Asyrafi #define MBOX_ATF_CLIENT_ID 0x1 15*d09adcbaSHadi Asyrafi #define MBOX_JOB_ID 0x1 16*d09adcbaSHadi Asyrafi 17*d09adcbaSHadi Asyrafi /* Mailbox interrupt flags and masks */ 18*d09adcbaSHadi Asyrafi #define MBOX_INT_FLAG_COE 0x1 19*d09adcbaSHadi Asyrafi #define MBOX_INT_FLAG_RIE 0x2 20*d09adcbaSHadi Asyrafi #define MBOX_INT_FLAG_UAE 0x100 21*d09adcbaSHadi Asyrafi #define MBOX_COE_BIT(INTERRUPT) ((INTERRUPT) & 0x3) 22*d09adcbaSHadi Asyrafi #define MBOX_UAE_BIT(INTERRUPT) (((INTERRUPT) & (1<<8))) 23*d09adcbaSHadi Asyrafi 24*d09adcbaSHadi Asyrafi /* Mailbox response and status */ 25*d09adcbaSHadi Asyrafi #define MBOX_RESP_BUFFER_SIZE 16 26*d09adcbaSHadi Asyrafi #define MBOX_RESP_ERR(BUFFER) ((BUFFER) & 0x00000fff) 27*d09adcbaSHadi Asyrafi #define MBOX_RESP_LEN(BUFFER) (((BUFFER) & 0x007ff000) >> 12) 28*d09adcbaSHadi Asyrafi #define MBOX_RESP_CLIENT_ID(BUFFER) (((BUFFER) & 0xf0000000) >> 28) 29*d09adcbaSHadi Asyrafi #define MBOX_RESP_JOB_ID(BUFFER) (((BUFFER) & 0x0f000000) >> 24) 30*d09adcbaSHadi Asyrafi #define MBOX_STATUS_UA_MASK (1<<8) 31*d09adcbaSHadi Asyrafi 32*d09adcbaSHadi Asyrafi /* Mailbox command and response */ 33*d09adcbaSHadi Asyrafi #define MBOX_CMD_FREE_OFFSET 0x14 34*d09adcbaSHadi Asyrafi #define MBOX_CMD_BUFFER_SIZE 32 35*d09adcbaSHadi Asyrafi #define MBOX_CLIENT_ID_CMD(CLIENT_ID) ((CLIENT_ID) << 28) 36*d09adcbaSHadi Asyrafi #define MBOX_JOB_ID_CMD(JOB_ID) (JOB_ID<<24) 37*d09adcbaSHadi Asyrafi #define MBOX_CMD_LEN_CMD(CMD_LEN) ((CMD_LEN) << 12) 38*d09adcbaSHadi Asyrafi #define MBOX_INDIRECT (1 << 11) 39*d09adcbaSHadi Asyrafi #define MBOX_INSUFFICIENT_BUFFER -2 40*d09adcbaSHadi Asyrafi #define MBOX_CIN 0x00 41*d09adcbaSHadi Asyrafi #define MBOX_ROUT 0x04 42*d09adcbaSHadi Asyrafi #define MBOX_URG 0x08 43*d09adcbaSHadi Asyrafi #define MBOX_INT 0x0C 44*d09adcbaSHadi Asyrafi #define MBOX_COUT 0x20 45*d09adcbaSHadi Asyrafi #define MBOX_RIN 0x24 46*d09adcbaSHadi Asyrafi #define MBOX_STATUS 0x2C 47*d09adcbaSHadi Asyrafi #define MBOX_CMD_BUFFER 0x40 48*d09adcbaSHadi Asyrafi #define MBOX_RESP_BUFFER 0xC0 49*d09adcbaSHadi Asyrafi 50*d09adcbaSHadi Asyrafi #define MBOX_RESP_BUFFER_SIZE 16 51*d09adcbaSHadi Asyrafi #define MBOX_RESP_OK 0 52*d09adcbaSHadi Asyrafi #define MBOX_RESP_INVALID_CMD 1 53*d09adcbaSHadi Asyrafi #define MBOX_RESP_UNKNOWN_BR 2 54*d09adcbaSHadi Asyrafi #define MBOX_RESP_UNKNOWN 3 55*d09adcbaSHadi Asyrafi #define MBOX_RESP_NOT_CONFIGURED 256 56*d09adcbaSHadi Asyrafi 57*d09adcbaSHadi Asyrafi /* Mailbox SDM doorbell */ 58*d09adcbaSHadi Asyrafi #define MBOX_DOORBELL_TO_SDM 0x400 59*d09adcbaSHadi Asyrafi #define MBOX_DOORBELL_FROM_SDM 0x480 60*d09adcbaSHadi Asyrafi 61*d09adcbaSHadi Asyrafi /* Mailbox QSPI commands */ 62*d09adcbaSHadi Asyrafi #define MBOX_CMD_RESTART 2 63*d09adcbaSHadi Asyrafi #define MBOX_CMD_QSPI_OPEN 50 64*d09adcbaSHadi Asyrafi #define MBOX_CMD_QSPI_CLOSE 51 65*d09adcbaSHadi Asyrafi #define MBOX_CMD_QSPI_DIRECT 59 66*d09adcbaSHadi Asyrafi #define MBOX_CMD_GET_IDCODE 16 67*d09adcbaSHadi Asyrafi #define MBOX_CMD_QSPI_SET_CS 52 68*d09adcbaSHadi Asyrafi 69*d09adcbaSHadi Asyrafi /* Mailbox REBOOT commands */ 70*d09adcbaSHadi Asyrafi #define MBOX_CMD_REBOOT_HPS 71 71*d09adcbaSHadi Asyrafi 72*d09adcbaSHadi Asyrafi /* Generic error handling */ 73*d09adcbaSHadi Asyrafi #define MBOX_TIMEOUT -2047 74*d09adcbaSHadi Asyrafi #define MBOX_NO_RESPONSE -2 75*d09adcbaSHadi Asyrafi #define MBOX_WRONG_ID -3 76*d09adcbaSHadi Asyrafi 77*d09adcbaSHadi Asyrafi /* Mailbox status */ 78*d09adcbaSHadi Asyrafi #define RECONFIG_STATUS_STATE 0 79*d09adcbaSHadi Asyrafi #define RECONFIG_STATUS_PIN_STATUS 2 80*d09adcbaSHadi Asyrafi #define RECONFIG_STATUS_SOFTFUNC_STATUS 3 81*d09adcbaSHadi Asyrafi #define PIN_STATUS_NSTATUS (U(1) << 31) 82*d09adcbaSHadi Asyrafi #define SOFTFUNC_STATUS_SEU_ERROR (1 << 3) 83*d09adcbaSHadi Asyrafi #define SOFTFUNC_STATUS_INIT_DONE (1 << 1) 84*d09adcbaSHadi Asyrafi #define SOFTFUNC_STATUS_CONF_DONE (1 << 0) 85*d09adcbaSHadi Asyrafi #define MBOX_CFGSTAT_STATE_CONFIG 0x10000000 86*d09adcbaSHadi Asyrafi 87*d09adcbaSHadi Asyrafi /* SMC function IDs for SiP Service queries */ 88*d09adcbaSHadi Asyrafi #define SIP_SVC_CALL_COUNT 0x8200ff00 89*d09adcbaSHadi Asyrafi #define SIP_SVC_UID 0x8200ff01 90*d09adcbaSHadi Asyrafi #define SIP_SVC_VERSION 0x8200ff03 91*d09adcbaSHadi Asyrafi 92*d09adcbaSHadi Asyrafi /* SiP Service Calls version numbers */ 93*d09adcbaSHadi Asyrafi #define SIP_SVC_VERSION_MAJOR 0 94*d09adcbaSHadi Asyrafi #define SIP_SVC_VERSION_MINOR 1 95*d09adcbaSHadi Asyrafi 96*d09adcbaSHadi Asyrafi /* Mailbox reconfiguration commands */ 97*d09adcbaSHadi Asyrafi #define MBOX_RECONFIG 6 98*d09adcbaSHadi Asyrafi #define MBOX_RECONFIG_DATA 8 99*d09adcbaSHadi Asyrafi #define MBOX_RECONFIG_STATUS 9 100*d09adcbaSHadi Asyrafi 101*d09adcbaSHadi Asyrafi /* Sip get memory */ 102*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_START 0xC2000001 103*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM 0xC2000005 104*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE 0xC2000004 105*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_WRITE 0x42000002 106*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE 0xC2000003 107*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_STATUS_OK 0 108*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_STATUS_ERROR 0x4 109*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_STATUS_BUSY 0x1 110*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_STATUS_REJECTED 0x2 111*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_ADDR 0x1000 112*d09adcbaSHadi Asyrafi #define INTEL_SIP_SMC_FPGA_CONFIG_SIZE 16777216 113*d09adcbaSHadi Asyrafi 114*d09adcbaSHadi Asyrafi void mailbox_set_int(int interrupt_input); 115*d09adcbaSHadi Asyrafi int mailbox_init(void); 116*d09adcbaSHadi Asyrafi void mailbox_set_qspi_close(void); 117*d09adcbaSHadi Asyrafi void mailbox_set_qspi_open(void); 118*d09adcbaSHadi Asyrafi void mailbox_set_qspi_direct(void); 119*d09adcbaSHadi Asyrafi int mailbox_send_cmd(int job_id, unsigned int cmd, uint32_t *args, 120*d09adcbaSHadi Asyrafi int len, int urgent, uint32_t *response); 121*d09adcbaSHadi Asyrafi void mailbox_send_cmd_async(int job_id, unsigned int cmd, uint32_t *args, 122*d09adcbaSHadi Asyrafi int len, int urgent); 123*d09adcbaSHadi Asyrafi int mailbox_read_response(int job_id, uint32_t *response); 124*d09adcbaSHadi Asyrafi int mailbox_get_qspi_clock(void); 125*d09adcbaSHadi Asyrafi void mailbox_reset_cold(void); 126*d09adcbaSHadi Asyrafi 127*d09adcbaSHadi Asyrafi #endif /* SOCFPGA_MBOX_H */ 128