]> git.sur5r.net Git - u-boot/commitdiff
arm64: zynqmp: Remove ifdef around zynqmp mmio read and write rotuines
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Thu, 13 Jul 2017 13:31:12 +0000 (19:01 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 2 Aug 2017 07:11:52 +0000 (09:11 +0200)
This patch removes ifdef around mmio read and write rotuines
and make them a single routine by checking the current el.
This patch helps to remove ifdef around invoke_smc as well.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/cpu/armv8/zynqmp/cpu.c

index 5fba0716ca0df2ece9d61b08d2d8e2237a3d830e..1b5066a8266df2824ed28235088024fd6d5f5fe6 100644 (file)
@@ -110,9 +110,8 @@ unsigned int zynqmp_get_silicon_version(void)
 #define ZYNQMP_MMIO_READ       0xC2000014
 #define ZYNQMP_MMIO_WRITE      0xC2000013
 
-#ifndef CONFIG_SPL_BUILD
-int invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2, u32 arg3,
-              u32 *ret_payload)
+int __maybe_unused invoke_smc(u32 pm_api_id, u32 arg0, u32 arg1, u32 arg2,
+                             u32 arg3, u32 *ret_payload)
 {
        /*
         * Added SIP service call Function Identifier
@@ -172,28 +171,7 @@ void zynqmp_pmufw_version(void)
 }
 #endif
 
-int zynqmp_mmio_write(const u32 address,
-                     const u32 mask,
-                     const u32 value)
-{
-       return invoke_smc(ZYNQMP_MMIO_WRITE, address, mask, value, 0, NULL);
-}
-
-int zynqmp_mmio_read(const u32 address, u32 *value)
-{
-       u32 ret_payload[PAYLOAD_ARG_CNT];
-       u32 ret;
-
-       if (!value)
-               return -EINVAL;
-
-       ret = invoke_smc(ZYNQMP_MMIO_READ, address, 0, 0, 0, ret_payload);
-       *value = ret_payload[1];
-
-       return ret;
-}
-#else
-int zynqmp_mmio_write(const u32 address,
+static int zynqmp_mmio_rawwrite(const u32 address,
                      const u32 mask,
                      const u32 value)
 {
@@ -208,9 +186,40 @@ int zynqmp_mmio_write(const u32 address,
        return 0;
 }
 
-int zynqmp_mmio_read(const u32 address, u32 *value)
+static int zynqmp_mmio_rawread(const u32 address, u32 *value)
 {
        *value = readl((ulong)address);
        return 0;
 }
-#endif
+
+int zynqmp_mmio_write(const u32 address,
+                     const u32 mask,
+                     const u32 value)
+{
+       if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3)
+               return zynqmp_mmio_rawwrite(address, mask, value);
+       else if (!IS_ENABLED(CONFIG_SPL_BUILD))
+               return invoke_smc(ZYNQMP_MMIO_WRITE, address, mask,
+                                 value, 0, NULL);
+
+       return -EINVAL;
+}
+
+int zynqmp_mmio_read(const u32 address, u32 *value)
+{
+       u32 ret_payload[PAYLOAD_ARG_CNT];
+       u32 ret;
+
+       if (!value)
+               return -EINVAL;
+
+       if (IS_ENABLED(CONFIG_SPL_BUILD) || current_el() == 3) {
+               ret = zynqmp_mmio_rawread(address, value);
+       } else if (!IS_ENABLED(CONFIG_SPL_BUILD)) {
+               ret = invoke_smc(ZYNQMP_MMIO_READ, address, 0, 0,
+                                0, ret_payload);
+               *value = ret_payload[1];
+       }
+
+       return ret;
+}