On 09/26/2018 11:03 AM, chee.hong....@intel.com wrote: > From: "Ang, Chee Hong" <chee.hong....@intel.com> > > Add a generic mailbox API for FPGA reconfig status which can be > called by others. This new function accepts 2 different mailbox > commands: CONFIG_STATUS or RECONFIG_STATUS.
What "others" can call this ? > Signed-off-by: Ang, Chee Hong <chee.hong....@intel.com> > --- > arch/arm/mach-socfpga/include/mach/mailbox_s10.h | 3 +- > arch/arm/mach-socfpga/mailbox_s10.c | 48 > ++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/mach-socfpga/include/mach/mailbox_s10.h > b/arch/arm/mach-socfpga/include/mach/mailbox_s10.h > index 81a609d..660df35 100644 > --- a/arch/arm/mach-socfpga/include/mach/mailbox_s10.h > +++ b/arch/arm/mach-socfpga/include/mach/mailbox_s10.h > @@ -140,5 +140,6 @@ int mbox_qspi_open(void); > #endif > > int mbox_reset_cold(void); > - > +int mbox_get_fpga_config_status(u32 cmd); > +int mbox_get_fpga_config_status_psci(u32 cmd); > #endif /* _MAILBOX_S10_H_ */ > diff --git a/arch/arm/mach-socfpga/mailbox_s10.c > b/arch/arm/mach-socfpga/mailbox_s10.c > index 0d906c3..345485c 100644 > --- a/arch/arm/mach-socfpga/mailbox_s10.c > +++ b/arch/arm/mach-socfpga/mailbox_s10.c > @@ -342,6 +342,54 @@ int mbox_reset_cold(void) > return 0; > } > > +/* Accepted commands: CONFIG_STATUS or RECONFIG_STATUS */ > +static __always_inline int mbox_get_fpga_config_status_common(u32 cmd) Why __always_inline ? > +{ > + u32 reconfig_status_resp_len; > + u32 reconfig_status_resp[RECONFIG_STATUS_RESPONSE_LEN]; > + int ret; > + > + reconfig_status_resp_len = RECONFIG_STATUS_RESPONSE_LEN; > + ret = mbox_send_cmd_common(MBOX_ID_UBOOT, cmd, > + MBOX_CMD_DIRECT, 0, NULL, 0, > + &reconfig_status_resp_len, > + reconfig_status_resp); > + if (!ret) { if (ret) return ret; ... > + /* Check for any error */ > + ret = reconfig_status_resp[RECONFIG_STATUS_STATE]; > + if (ret && ret != MBOX_CFGSTAT_STATE_CONFIG) > + return ret; > + > + /* Make sure nStatus is not 0 */ > + ret = reconfig_status_resp[RECONFIG_STATUS_PIN_STATUS]; > + if (!(ret & RCF_PIN_STATUS_NSTATUS)) > + return MBOX_CFGSTAT_STATE_ERROR_HARDWARE; > + > + ret = reconfig_status_resp[RECONFIG_STATUS_SOFTFUNC_STATUS]; > + if (ret & RCF_SOFTFUNC_STATUS_SEU_ERROR) > + return MBOX_CFGSTAT_STATE_ERROR_HARDWARE; > + > + if ((ret & RCF_SOFTFUNC_STATUS_CONF_DONE) && > + (ret & RCF_SOFTFUNC_STATUS_INIT_DONE) && > + !reconfig_status_resp[RECONFIG_STATUS_STATE]) > + return 0; /* configuration success */ > + else > + return MBOX_CFGSTAT_STATE_CONFIG; > + } > + > + return ret; > +} > + > +int mbox_get_fpga_config_status(u32 cmd) > +{ > + return mbox_get_fpga_config_status_common(cmd); > +} > + > +int __secure mbox_get_fpga_config_status_psci(u32 cmd) > +{ > + return mbox_get_fpga_config_status_common(cmd); > +} > + > int mbox_send_cmd(u8 id, u32 cmd, u8 is_indirect, u32 len, u32 *arg, > u8 urgent, u32 *resp_buf_len, u32 *resp_buf) > { > -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot