* EEMI firmware API:
* https://www.xilinx.com/support/documentation/user_guides/ug1200-eemi-api.pdf
*
+ * IPI firmware API:
+ * https://github.com/ARM-software/arm-trusted-firmware/blob/master/plat/xilinx/zynqmp/ipi_mailbox_service/ipi_mailbox_svc.h
+ *
* Power domain node_ids identify the area of effect of the power
* management operations. They are the first parameter passed to power
* management EEMI calls.
ret = XST_PM_NO_ACCESS;
goto done;
+ case IPI_MAILBOX_FID(IPI_MAILBOX_OPEN):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_RELEASE):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_STATUS_ENQUIRY):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_NOTIFY):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_ACK):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_ENABLE_IRQ):
+ case IPI_MAILBOX_FID(IPI_MAILBOX_DISABLE_IRQ):
+ if ( !is_hardware_domain(current->domain) )
+ {
+ gprintk(XENLOG_WARNING, "IPI mailbox: fn=%u No access", pm_fn);
+ ret = XST_PM_NO_ACCESS;
+ goto done;
+ }
+ goto forward_to_fw;
+
default:
gprintk(XENLOG_WARNING, "zynqmp-pm: Unhandled PM Call: %u\n", fid);
return false;
XST_PM_ABORT_SUSPEND,
};
+/* IPI SMC function numbers enum definition and fids */
+#define IPI_MAILBOX_FID(fid) ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \
+ ARM_SMCCC_CONV_32, \
+ ARM_SMCCC_OWNER_SIP, \
+ fid)
+enum ipi_api_id {
+ IPI_MAILBOX_OPEN = 0x1000,
+ IPI_MAILBOX_RELEASE,
+ IPI_MAILBOX_STATUS_ENQUIRY,
+ IPI_MAILBOX_NOTIFY,
+ IPI_MAILBOX_ACK,
+ IPI_MAILBOX_ENABLE_IRQ,
+ IPI_MAILBOX_DISABLE_IRQ,
+};
+
extern bool zynqmp_eemi(struct cpu_user_regs *regs);
#endif /* __ASM_ARM_PLATFORMS_ZYNQMP_H */