summaryrefslogtreecommitdiff
path: root/Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h
diff options
context:
space:
mode:
authorGirish Pathak <girish.pathak@arm.com>2017-11-21 15:48:11 +0000
committerLeif Lindholm <leif.lindholm@linaro.org>2018-04-23 18:04:08 +0100
commitb3b892d75e00fe0e6df6a4f99be0d180779e8e9a (patch)
tree48ddfaa9f3e0e48be3bfa728405274125b69f5dd /Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h
parentadf50234c8e8b15204501bca6327392d67301660 (diff)
downloadedk2-platforms-b3b892d75e00fe0e6df6a4f99be0d180779e8e9a.tar.xz
ARM/JunoPkg: Adding SCMI MTL library
This change adds a new Mailbox Transport Layer library for the Juno platform. This library is required for ArmScmiDxe driver communication with the SCP. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Girish Pathak <girish.pathak@arm.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h')
-rw-r--r--Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h b/Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h
new file mode 100644
index 0000000000..b2bac5e513
--- /dev/null
+++ b/Platform/ARM/JunoPkg/Library/ArmJunoMtlLib/ArmJunoMtlPrivateLib.h
@@ -0,0 +1,94 @@
+/** @file
+
+ Copyright (c) 2017-2018, Arm Limited. All rights reserved.
+
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ System Control and Management Interface V1.0
+ http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/
+ DEN0056A_System_Control_and_Management_Interface.pdf
+
+ Juno ARM Development Platform SoC
+ https://www.arm.com/files/pdf/
+ DDI0515D1a_juno_arm_development_platform_soc_trm.pdf
+**/
+
+#ifndef ARM_JUNO_MTL_PRIVATE_LIB_H_
+#define ARM_JUNO_MTL_PRIVATE_LIB_H_
+
+// Mailbox transport layer.
+#define MTL_DOORBELL_MODIFY_MASK (0x00000001U)
+#define MTL_DOORBELL_PRESERVE_MASK (~MTL_DOORBELL_MODIFY_MASK)
+
+#define MTL_DOORBELL_BASE (FixedPcdGet64 (PcdArmMtlDoorBell))
+#define MTL_MAILBOX_BASE (FixedPcdGet64 (PcdArmMtlMailBoxBase))
+#define MTL_MAILBOX_SIZE (FixedPcdGet32 (PcdArmMtlMailBoxSize))
+
+#define MTL_POLL 0
+#define MTL_INTR 1
+
+/* For Juno, the mailbox for high priority is non-trusted SRAM + 256.
+
+ NOTE: Below is not documented anywhere (yet)
+
+ The payload sizes are 128 bytes.
+
+ There are two channels:
+
+ Channel 0
+ - Agent (OS) to Platform (SCP) memory base: non-trusted SRAM + 0
+ - Platform (SCP) to Agent (OS) memory base: non-trusted SRAM + 128
+ - Doorbell (both directions): MHU, bit 0
+
+ Channel 1
+ - Agent (OS) to Platform (SCP) memory base: non-trusted SRAM + 256
+ - Platform (SCP) to Agent (OS) memory base: non-trusted SRAM + 384
+ - Doorbell (both directions): MHU, bit 0
+*/
+#define MTL_MAILBOX_HIGH_PRIORITY_OFFSET (MTL_MAILBOX_SIZE * 2)
+
+// ARM MHU interrupt registers.
+#define CPU_INTR_L_SET 0x108
+#define CPU_INTR_H_SET 0x128
+
+// MTL uses MHU interrupt registers for communication with the SCP.
+#define MTL_DOORBELL_REGISTER_LOW (MTL_DOORBELL_BASE + CPU_INTR_L_SET)
+#define MTL_DOORBELL_REGISTER_HIGH (MTL_DOORBELL_BASE + CPU_INTR_H_SET)
+
+#define MTL_CHANNEL_BUSY 0
+#define MTL_CHANNEL_FREE 1
+
+// Response time out value on a MHU channel 20ms.
+#define RESPONSE_TIMEOUT 20000
+
+/* As per SCMI spec. as a agent UEFI(or OS) can access only two channels
+ (low or high priority) secure channel is only accessible
+ to ARM Trusted firmware. */
+#define NUM_CHANNELS 2
+
+/* Each channel must use a doorbell register to interrupt the SCP firmware.
+ on Juno these are MHU interrupt registers for low and high priority
+ channels. */
+#define DOORBELL_LOW { \
+ MTL_DOORBELL_REGISTER_LOW, \
+ MTL_DOORBELL_MODIFY_MASK, \
+ MTL_DOORBELL_PRESERVE_MASK \
+ }
+
+#define DOORBELL_HIGH { \
+ MTL_DOORBELL_REGISTER_HIGH, \
+ MTL_DOORBELL_MODIFY_MASK, \
+ MTL_DOORBELL_PRESERVE_MASK \
+ }
+
+// Arbitarary poll time.
+#define MTL_POLL_WAIT_TIME 100
+
+#endif /* ARM_JUNO_MTL_PRIVATE_LIB_H_ */
+