@ -19,6 +19,7 @@
/* Total buffer the driver can hold */
# define FPGA_CONFIG_BUFFER_SIZE 4
static config_type request_type = NO_REQUEST ;
static int current_block , current_buffer ;
static int read_block , max_blocks ;
static uint32_t send_id , rcv_id ;
@ -27,10 +28,8 @@ static bool bridge_disable;
/* RSU static variables */
static uint32_t rsu_dcmf_ver [ 4 ] = { 0 } ;
/* RSU Max Retry */
static uint32_t rsu_max_retry ;
static uint16_t rsu_dcmf_stat [ 4 ] = { 0 } ;
static uint32_t rsu_max_retry ;
/* SiP Service UUID */
DEFINE_SVC_UUID2 ( intl_svc_uid ,
@ -89,28 +88,39 @@ static int intel_fpga_sdm_write_all(void)
return 0 ;
}
static uint32_t intel_mailbox_fpga_config_isdone ( uint32_t query_type )
static uint32_t intel_mailbox_fpga_config_isdone ( void )
{
uint32_t ret ;
if ( query_type = = 1U ) {
ret = intel_mailbox_get_config_status ( MBOX_CONFIG_STATUS , false ) ;
} else {
ret = intel_mailbox_get_config_status ( MBOX_RECONFIG_STATUS , true ) ;
switch ( request_type ) {
case RECONFIGURATION :
ret = intel_mailbox_get_config_status ( MBOX_RECONFIG_STATUS ,
true ) ;
break ;
case BITSTREAM_AUTH :
ret = intel_mailbox_get_config_status ( MBOX_RECONFIG_STATUS ,
false ) ;
break ;
default :
ret = intel_mailbox_get_config_status ( MBOX_CONFIG_STATUS ,
false ) ;
break ;
}
if ( ret ! = 0U ) {
if ( ret = = MBOX_CFGSTAT_STATE_CONFIG ) {
return INTEL_SIP_SMC_STATUS_BUSY ;
} else {
request_type = NO_REQUEST ;
return INTEL_SIP_SMC_STATUS_ERROR ;
}
}
if ( bridge_disable ) {
if ( bridge_disable ! = 0U ) {
socfpga_bridges_enable ( ~ 0 ) ; /* Enable bridge */
bridge_disable = false ;
}
request_type = NO_REQUEST ;
return INTEL_SIP_SMC_STATUS_OK ;
}
@ -169,6 +179,7 @@ static int intel_fpga_config_completed_write(uint32_t *completed_addr,
if ( status ! = MBOX_NO_RESPONSE & &
status ! = MBOX_TIMEOUT & & resp_len ! = 0 ) {
mailbox_clear_response ( ) ;
request_type = NO_REQUEST ;
return INTEL_SIP_SMC_STATUS_ERROR ;
}
@ -205,6 +216,8 @@ static int intel_fpga_config_start(uint32_t flag)
unsigned int size = 0 ;
unsigned int resp_len = ARRAY_SIZE ( response ) ;
request_type = RECONFIGURATION ;
if ( ! CONFIG_TEST_FLAG ( flag , PARTIAL_CONFIG ) ) {
bridge_disable = true ;
}
@ -212,6 +225,7 @@ static int intel_fpga_config_start(uint32_t flag)
if ( CONFIG_TEST_FLAG ( flag , AUTHENTICATION ) ) {
size = 1 ;
bridge_disable = false ;
request_type = BITSTREAM_AUTH ;
}
mailbox_clear_response ( ) ;
@ -224,6 +238,7 @@ static int intel_fpga_config_start(uint32_t flag)
if ( status < 0 ) {
bridge_disable = false ;
request_type = NO_REQUEST ;
return INTEL_SIP_SMC_STATUS_ERROR ;
}
@ -644,7 +659,7 @@ uintptr_t sip_smc_handler_v1(uint32_t smc_fid,
SMC_UUID_RET ( handle , intl_svc_uid ) ;
case INTEL_SIP_SMC_FPGA_CONFIG_ISDONE :
status = intel_mailbox_fpga_config_isdone ( x1 ) ;
status = intel_mailbox_fpga_config_isdone ( ) ;
SMC_RET4 ( handle , status , 0 , 0 , 0 ) ;
case INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM :