common: sec_proxy: Add per device secure proxy base_address
authorLokesh Vutla <lokeshvutla@ti.com>
Sun, 22 Nov 2020 12:58:35 +0000 (18:28 +0530)
committerLokesh Vutla <lokeshvutla@ti.com>
Fri, 11 Dec 2020 12:42:01 +0000 (18:12 +0530)
There are two communication scheme that have been enabled to communicate
with Secure Proxy in TI.
a) A full fledged prioritized communication scheme, which involves upto
   5 threads from the perspective of the host software
b) A much simpler "lite" version which is just a two thread scheme
   involving just a transmit and receive thread scheme.

The (a) scheme is used in AM654, J721e, J7200 platforms where as
(b) scheme is used in AM64 platforms. Based on this, the base address
for secure proxy are different in platforms using scheme (a) vs scheme (b).
Define generic and lite secure proxy base addresses and attach to the
respective SoCs.

Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
common/sec_proxy.c
common/socinfo.c
include/sec_proxy.h
include/socinfo.h

index 9d73fe2c46d41617ce5e47a2253cacea763d6779..ca43611f90ac1b812f711eccf46baad4c000e796 100644 (file)
 #define SEC_PROXY_DATA_START_OFFS              0x4
 #define SEC_PROXY_DATA_END_OFFS                        0x3c
 
-/* Physical address for AM6 NAVSS 256 Main domain */
-#define SEC_PROXY0_CFG_MMRS            0x31140000
-#define SEC_PROXY0_SRC_TARGET_DATA     0x32C00000
-#define SEC_PROXY0_CFG_SCFG            0x32800000
-#define SEC_PROXY0_CFG_RT              0x32400000
+struct k3_sec_proxy_base k3_generic_sec_proxy_base = {
+       .src_target_data = 0x32c00000,
+       .cfg_scfg = 0x32800000,
+       .cfg_rt = 0x32400000,
+};
+
+struct k3_sec_proxy_base k3_lite_sec_proxy_base = {
+       .src_target_data = 0x4d000000,
+       .cfg_scfg = 0x4a400000,
+       .cfg_rt = 0x4a600000,
+};
 
 struct k3_sec_proxy_thread {
        uint32_t id;
@@ -230,6 +236,7 @@ static char* get_host_name(uint32_t host_id)
 
 int k3_sec_proxy_init(void)
 {
+       struct k3_sec_proxy_base *spb = soc_info.sec_proxy;
        int rx_thread, tx_thread;
        char *host_name;
 
@@ -254,14 +261,14 @@ int k3_sec_proxy_init(void)
                host_name, tx_thread, rx_thread);
 
        spts[SEC_PROXY_TX_THREAD].id = tx_thread;
-       spts[SEC_PROXY_TX_THREAD].data = SEC_PROXY_THREAD(SEC_PROXY0_SRC_TARGET_DATA, tx_thread);
-       spts[SEC_PROXY_TX_THREAD].scfg = SEC_PROXY_THREAD(SEC_PROXY0_CFG_SCFG, tx_thread);
-       spts[SEC_PROXY_TX_THREAD].rt = SEC_PROXY_THREAD(SEC_PROXY0_CFG_RT, tx_thread);
+       spts[SEC_PROXY_TX_THREAD].data = SEC_PROXY_THREAD(spb->src_target_data, tx_thread);
+       spts[SEC_PROXY_TX_THREAD].scfg = SEC_PROXY_THREAD(spb->cfg_scfg, tx_thread);
+       spts[SEC_PROXY_TX_THREAD].rt = SEC_PROXY_THREAD(spb->cfg_rt, tx_thread);
 
        spts[SEC_PROXY_RX_THREAD].id = rx_thread;
-       spts[SEC_PROXY_RX_THREAD].data = SEC_PROXY_THREAD(SEC_PROXY0_SRC_TARGET_DATA, rx_thread);
-       spts[SEC_PROXY_RX_THREAD].scfg = SEC_PROXY_THREAD(SEC_PROXY0_CFG_SCFG, rx_thread);
-       spts[SEC_PROXY_RX_THREAD].rt = SEC_PROXY_THREAD(SEC_PROXY0_CFG_RT, rx_thread);
+       spts[SEC_PROXY_RX_THREAD].data = SEC_PROXY_THREAD(spb->src_target_data, rx_thread);
+       spts[SEC_PROXY_RX_THREAD].scfg = SEC_PROXY_THREAD(spb->cfg_scfg, rx_thread);
+       spts[SEC_PROXY_RX_THREAD].rt = SEC_PROXY_THREAD(spb->cfg_rt, rx_thread);
 
        return 0;
 }
index 6c7325b3b67ddd2f59fa1d02f9d79ece548341ca..ce0ae52187c13a5b37e165372a7983ea727762a0 100644 (file)
@@ -113,6 +113,7 @@ static void am654_init(void)
        sci_info->rm_info = am65x_rm_info;
        sci_info->num_res = AM65X_MAX_RES;
        soc_info.host_id = DEFAULT_HOST_ID;
+       soc_info.sec_proxy = &k3_generic_sec_proxy_base;
 }
 
 static void am654_sr2_init(void)
@@ -134,6 +135,7 @@ static void am654_sr2_init(void)
        sci_info->rm_info = am65x_sr2_rm_info;
        sci_info->num_res = AM65X_SR2_MAX_RES;
        soc_info.host_id = DEFAULT_HOST_ID;
+       soc_info.sec_proxy = &k3_generic_sec_proxy_base;
 }
 
 static void j721e_init(void)
@@ -155,6 +157,7 @@ static void j721e_init(void)
        sci_info->rm_info = j721e_rm_info;
        sci_info->num_res = J721E_MAX_RES;
        soc_info.host_id = DEFAULT_HOST_ID;
+       soc_info.sec_proxy = &k3_generic_sec_proxy_base;
 }
 
 static void j7200_init(void)
@@ -176,10 +179,12 @@ static void j7200_init(void)
        sci_info->rm_info = j7200_rm_info;
        sci_info->num_res = J7200_MAX_RES;
        soc_info.host_id = DEFAULT_HOST_ID;
+       soc_info.sec_proxy = &k3_generic_sec_proxy_base;
 }
 
 static void am64x_init(void)
 {
+       soc_info.sec_proxy = &k3_lite_sec_proxy_base;
 }
 
 int soc_init(uint32_t host_id)
index 698405b02bf354590b3390597526b274b3a777f6..158256e2569724c6a7375676d84f29d973e1f743 100644 (file)
@@ -52,8 +52,17 @@ struct k3_sec_proxy_msg {
        uint8_t *buf;
 };
 
+struct k3_sec_proxy_base {
+       uint32_t src_target_data;
+       uint32_t cfg_scfg;
+       uint32_t cfg_rt;
+};
+
 int k3_sec_proxy_send(struct k3_sec_proxy_msg *msg);
 int k3_sec_proxy_recv(struct k3_sec_proxy_msg *msg);
 int k3_sec_proxy_init();
 
+extern struct k3_sec_proxy_base k3_generic_sec_proxy_base;
+extern struct k3_sec_proxy_base k3_lite_sec_proxy_base;
+
 #endif /* __SEC_PROXY_H */
index bb1e0b421cae35bbad1119d3feef1c24f13f145b..377177c195d5d2ffaa79866953a411918b6ceeb9 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <stdint.h>
 #include <tisci.h>
+#include "sec_proxy.h"
 
 #define SOC_NAME_MAX_LENGTH                    10
 #define SOC_REVISION_MAX_LENGTH                        5
@@ -61,6 +62,7 @@ struct k3conf_soc_info {
        uint8_t host_id;
        uint8_t ti_sci_enabled;
        struct ti_sci_info sci_info;
+       struct k3_sec_proxy_base *sec_proxy;
 };
 
 extern struct k3conf_soc_info soc_info;