summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRanjani Vaidyanathan <Ranjani.Vaidyanathan@nxp.com>2017-08-24 17:40:45 -0500
committerRanjani Vaidyanathan <Ranjani.Vaidyanathan@nxp.com>2017-08-25 10:47:23 -0500
commit56953837dc8467d0fd9c157c3866906318d6006d (patch)
tree59c94f8334cb7b6c6f6a825bdec9250183df0e57
parent6a49c55a05a4905cd3cfa78400d320483f3f2d71 (diff)
MLK16263 - Update uboot to the latest SCFW API
Update uboot to the latest SCFW based on commit: " commit 129c16e312334af7b07d71d6dccac1cda1808b93 Author: Ranjani Vaidyanathan <ranjani.vaidyanathan@nxp.com> Date: Thu Aug 24 16:50:59 2017 -0500 Add support to change DRC clock rate. " Signed-off-by: Ranjani Vaidyanathan <Ranjani.Vaidyanathan@nxp.com>
-rw-r--r--arch/arm/imx-common/sci/svc/pad/rpc.h4
-rw-r--r--arch/arm/imx-common/sci/svc/pad/rpc_clnt.c63
-rw-r--r--arch/arm/imx-common/sci/svc/rm/rpc.h4
-rw-r--r--arch/arm/imx-common/sci/svc/rm/rpc_clnt.c80
-rw-r--r--arch/arm/include/asm/imx-common/sci/svc/pad/api.h121
-rw-r--r--arch/arm/include/asm/imx-common/sci/svc/pm/api.h5
-rw-r--r--arch/arm/include/asm/imx-common/sci/svc/rm/api.h86
-rw-r--r--arch/arm/include/asm/imx-common/sci/types.h3
8 files changed, 270 insertions, 96 deletions
diff --git a/arch/arm/imx-common/sci/svc/pad/rpc.h b/arch/arm/imx-common/sci/svc/pad/rpc.h
index f0f32aff5e..b9f3a75606 100644
--- a/arch/arm/imx-common/sci/svc/pad/rpc.h
+++ b/arch/arm/imx-common/sci/svc/pad/rpc.h
@@ -37,10 +37,10 @@ typedef enum pad_func_e
PAD_FUNC_GET_ALL = 10, /*!< Index for pad_get_all() RPC call */
PAD_FUNC_SET = 15, /*!< Index for pad_set() RPC call */
PAD_FUNC_GET = 16, /*!< Index for pad_get() RPC call */
- PAD_FUNC_SET_GP_28LPP = 3, /*!< Index for pad_set_gp_28lpp() RPC call */
- PAD_FUNC_GET_GP_28LPP = 8, /*!< Index for pad_get_gp_28lpp() RPC call */
PAD_FUNC_SET_GP_28FDSOI = 11, /*!< Index for pad_set_gp_28fdsoi() RPC call */
PAD_FUNC_GET_GP_28FDSOI = 12, /*!< Index for pad_get_gp_28fdsoi() RPC call */
+ PAD_FUNC_SET_GP_28FDSOI_HSIC = 3, /*!< Index for pad_set_gp_28fdsoi_hsic() RPC call */
+ PAD_FUNC_GET_GP_28FDSOI_HSIC = 8, /*!< Index for pad_get_gp_28fdsoi_hsic() RPC call */
PAD_FUNC_SET_GP_28FDSOI_COMP = 13, /*!< Index for pad_set_gp_28fdsoi_comp() RPC call */
PAD_FUNC_GET_GP_28FDSOI_COMP = 14, /*!< Index for pad_get_gp_28fdsoi_comp() RPC call */
} pad_func_t;
diff --git a/arch/arm/imx-common/sci/svc/pad/rpc_clnt.c b/arch/arm/imx-common/sci/svc/pad/rpc_clnt.c
index 17b8cc5155..f27dca9cde 100644
--- a/arch/arm/imx-common/sci/svc/pad/rpc_clnt.c
+++ b/arch/arm/imx-common/sci/svc/pad/rpc_clnt.c
@@ -238,23 +238,19 @@ sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val)
return (sc_err_t) result;
}
-sc_err_t sc_pad_set_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28lpp_dse_t dse, bool sre, bool hys, bool pe,
- sc_pad_28lpp_ps_t ps)
+sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps)
{
sc_rpc_msg_t msg;
uint8_t result;
RPC_VER(&msg) = SC_RPC_VERSION;
RPC_SVC(&msg) = SC_RPC_SVC_PAD;
- RPC_FUNC(&msg) = PAD_FUNC_SET_GP_28LPP;
+ RPC_FUNC(&msg) = PAD_FUNC_SET_GP_28FDSOI;
RPC_U16(&msg, 0) = pad;
RPC_U8(&msg, 2) = dse;
RPC_U8(&msg, 3) = ps;
- RPC_U8(&msg, 4) = sre;
- RPC_U8(&msg, 5) = hys;
- RPC_U8(&msg, 6) = pe;
- RPC_SIZE(&msg) = 3;
+ RPC_SIZE(&msg) = 2;
sc_call_rpc(ipc, &msg, false);
@@ -262,16 +258,15 @@ sc_err_t sc_pad_set_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
return (sc_err_t) result;
}
-sc_err_t sc_pad_get_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28lpp_dse_t *dse, bool *sre, bool *hys, bool *pe,
- sc_pad_28lpp_ps_t *ps)
+sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps)
{
sc_rpc_msg_t msg;
uint8_t result;
RPC_VER(&msg) = SC_RPC_VERSION;
RPC_SVC(&msg) = SC_RPC_SVC_PAD;
- RPC_FUNC(&msg) = PAD_FUNC_GET_GP_28LPP;
+ RPC_FUNC(&msg) = PAD_FUNC_GET_GP_28FDSOI;
RPC_U16(&msg, 0) = pad;
RPC_SIZE(&msg) = 2;
@@ -282,28 +277,26 @@ sc_err_t sc_pad_get_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
*dse = RPC_U8(&msg, 0);
if (ps != NULL)
*ps = RPC_U8(&msg, 1);
- if (sre != NULL)
- *sre = RPC_U8(&msg, 2);
- if (hys != NULL)
- *hys = RPC_U8(&msg, 3);
- if (pe != NULL)
- *pe = RPC_U8(&msg, 4);
return (sc_err_t) result;
}
-sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps)
+sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t dse, bool hys, sc_pad_28fdsoi_pus_t pus,
+ bool pke, bool pue)
{
sc_rpc_msg_t msg;
uint8_t result;
RPC_VER(&msg) = SC_RPC_VERSION;
RPC_SVC(&msg) = SC_RPC_SVC_PAD;
- RPC_FUNC(&msg) = PAD_FUNC_SET_GP_28FDSOI;
+ RPC_FUNC(&msg) = PAD_FUNC_SET_GP_28FDSOI_HSIC;
RPC_U16(&msg, 0) = pad;
RPC_U8(&msg, 2) = dse;
- RPC_U8(&msg, 3) = ps;
- RPC_SIZE(&msg) = 2;
+ RPC_U8(&msg, 3) = pus;
+ RPC_U8(&msg, 4) = hys;
+ RPC_U8(&msg, 5) = pke;
+ RPC_U8(&msg, 6) = pue;
+ RPC_SIZE(&msg) = 3;
sc_call_rpc(ipc, &msg, false);
@@ -311,15 +304,16 @@ sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
return (sc_err_t) result;
}
-sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps)
+sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t *dse, bool *hys, sc_pad_28fdsoi_pus_t *pus,
+ bool *pke, bool *pue)
{
sc_rpc_msg_t msg;
uint8_t result;
RPC_VER(&msg) = SC_RPC_VERSION;
RPC_SVC(&msg) = SC_RPC_SVC_PAD;
- RPC_FUNC(&msg) = PAD_FUNC_GET_GP_28FDSOI;
+ RPC_FUNC(&msg) = PAD_FUNC_GET_GP_28FDSOI_HSIC;
RPC_U16(&msg, 0) = pad;
RPC_SIZE(&msg) = 2;
@@ -328,14 +322,20 @@ sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
result = RPC_R8(&msg);
if (dse != NULL)
*dse = RPC_U8(&msg, 0);
- if (ps != NULL)
- *ps = RPC_U8(&msg, 1);
+ if (pus != NULL)
+ *pus = RPC_U8(&msg, 1);
+ if (hys != NULL)
+ *hys = RPC_U8(&msg, 2);
+ if (pke != NULL)
+ *pke = RPC_U8(&msg, 3);
+ if (pue != NULL)
+ *pue = RPC_U8(&msg, 4);
return (sc_err_t) result;
}
sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
uint8_t compen, bool fastfrz, uint8_t rasrcp, uint8_t rasrcn,
- bool nasrc_sel)
+ bool nasrc_sel, bool psw_ovr)
{
sc_rpc_msg_t msg;
uint8_t result;
@@ -349,6 +349,7 @@ sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
RPC_U8(&msg, 4) = rasrcn;
RPC_U8(&msg, 5) = fastfrz;
RPC_U8(&msg, 6) = nasrc_sel;
+ RPC_U8(&msg, 7) = psw_ovr;
RPC_SIZE(&msg) = 3;
sc_call_rpc(ipc, &msg, false);
@@ -359,7 +360,7 @@ sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
uint8_t *compen, bool *fastfrz, uint8_t *rasrcp, uint8_t *rasrcn,
- bool *nasrc_sel, bool *compok, uint8_t *nasrc)
+ bool *nasrc_sel, bool *compok, uint8_t *nasrc, bool *psw_ovr)
{
sc_rpc_msg_t msg;
uint8_t result;
@@ -387,6 +388,8 @@ sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
*nasrc_sel = RPC_U8(&msg, 5);
if (compok != NULL)
*compok = RPC_U8(&msg, 6);
+ if (psw_ovr != NULL)
+ *psw_ovr = RPC_U8(&msg, 7);
return (sc_err_t) result;
}
diff --git a/arch/arm/imx-common/sci/svc/rm/rpc.h b/arch/arm/imx-common/sci/svc/rm/rpc.h
index a6ea558402..4107a49f0c 100644
--- a/arch/arm/imx-common/sci/svc/rm/rpc.h
+++ b/arch/arm/imx-common/sci/svc/rm/rpc.h
@@ -37,6 +37,7 @@ typedef enum rm_func_e
RM_FUNC_MOVE_ALL = 7, /*!< Index for rm_move_all() RPC call */
RM_FUNC_ASSIGN_RESOURCE = 8, /*!< Index for rm_assign_resource() RPC call */
RM_FUNC_SET_RESOURCE_MOVABLE = 9, /*!< Index for rm_set_resource_movable() RPC call */
+ RM_FUNC_SET_SUBSYS_RSRC_MOVABLE = 28, /*!< Index for rm_set_subsys_rsrc_movable() RPC call */
RM_FUNC_SET_MASTER_ATTRIBUTES = 10, /*!< Index for rm_set_master_attributes() RPC call */
RM_FUNC_SET_MASTER_SID = 11, /*!< Index for rm_set_master_sid() RPC call */
RM_FUNC_SET_PERIPHERAL_PERMISSIONS = 12, /*!< Index for rm_set_peripheral_permissions() RPC call */
@@ -45,7 +46,9 @@ typedef enum rm_func_e
RM_FUNC_IS_RESOURCE_PERIPHERAL = 15, /*!< Index for rm_is_resource_peripheral() RPC call */
RM_FUNC_GET_RESOURCE_INFO = 16, /*!< Index for rm_get_resource_info() RPC call */
RM_FUNC_MEMREG_ALLOC = 17, /*!< Index for rm_memreg_alloc() RPC call */
+ RM_FUNC_MEMREG_SPLIT = 29, /*!< Index for rm_memreg_split() RPC call */
RM_FUNC_MEMREG_FREE = 18, /*!< Index for rm_memreg_free() RPC call */
+ RM_FUNC_FIND_MEMREG = 30, /*!< Index for rm_find_memreg() RPC call */
RM_FUNC_ASSIGN_MEMREG = 19, /*!< Index for rm_assign_memreg() RPC call */
RM_FUNC_SET_MEMREG_PERMISSIONS = 20, /*!< Index for rm_set_memreg_permissions() RPC call */
RM_FUNC_IS_MEMREG_OWNED = 21, /*!< Index for rm_is_memreg_owned() RPC call */
@@ -53,6 +56,7 @@ typedef enum rm_func_e
RM_FUNC_ASSIGN_PAD = 23, /*!< Index for rm_assign_pad() RPC call */
RM_FUNC_SET_PAD_MOVABLE = 24, /*!< Index for rm_set_pad_movable() RPC call */
RM_FUNC_IS_PAD_OWNED = 25, /*!< Index for rm_is_pad_owned() RPC call */
+ RM_FUNC_DUMP = 27, /*!< Index for rm_dump() RPC call */
} rm_func_t;
/* Functions */
diff --git a/arch/arm/imx-common/sci/svc/rm/rpc_clnt.c b/arch/arm/imx-common/sci/svc/rm/rpc_clnt.c
index a97780b0de..768bb82318 100644
--- a/arch/arm/imx-common/sci/svc/rm/rpc_clnt.c
+++ b/arch/arm/imx-common/sci/svc/rm/rpc_clnt.c
@@ -216,6 +216,25 @@ sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst,
return (sc_err_t) result;
}
+sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource,
+ bool movable)
+{
+ sc_rpc_msg_t msg;
+ uint8_t result;
+
+ RPC_VER(&msg) = SC_RPC_VERSION;
+ RPC_SVC(&msg) = SC_RPC_SVC_RM;
+ RPC_FUNC(&msg) = RM_FUNC_SET_SUBSYS_RSRC_MOVABLE;
+ RPC_U16(&msg, 0) = resource;
+ RPC_U8(&msg, 2) = movable;
+ RPC_SIZE(&msg) = 2;
+
+ sc_call_rpc(ipc, &msg, false);
+
+ result = RPC_R8(&msg);
+ return (sc_err_t) result;
+}
+
sc_err_t sc_rm_set_master_attributes(sc_ipc_t ipc, sc_rsrc_t resource,
sc_rm_spa_t sa, sc_rm_spa_t pa, bool smmu_bypass)
{
@@ -370,6 +389,30 @@ sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr,
return (sc_err_t) result;
}
+sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr,
+ sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, sc_faddr_t addr_end)
+{
+ sc_rpc_msg_t msg;
+ uint8_t result;
+
+ RPC_VER(&msg) = SC_RPC_VERSION;
+ RPC_SVC(&msg) = SC_RPC_SVC_RM;
+ RPC_FUNC(&msg) = RM_FUNC_MEMREG_SPLIT;
+ RPC_U32(&msg, 0) = addr_start >> 32;
+ RPC_U32(&msg, 4) = addr_start;
+ RPC_U32(&msg, 8) = addr_end >> 32;
+ RPC_U32(&msg, 12) = addr_end;
+ RPC_U8(&msg, 16) = mr;
+ RPC_SIZE(&msg) = 6;
+
+ sc_call_rpc(ipc, &msg, false);
+
+ result = RPC_R8(&msg);
+ if (mr_ret != NULL)
+ *mr_ret = RPC_U8(&msg, 0);
+ return (sc_err_t) result;
+}
+
sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr)
{
sc_rpc_msg_t msg;
@@ -387,6 +430,29 @@ sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr)
return (sc_err_t) result;
}
+sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr,
+ sc_faddr_t addr_start, sc_faddr_t addr_end)
+{
+ sc_rpc_msg_t msg;
+ uint8_t result;
+
+ RPC_VER(&msg) = SC_RPC_VERSION;
+ RPC_SVC(&msg) = SC_RPC_SVC_RM;
+ RPC_FUNC(&msg) = RM_FUNC_FIND_MEMREG;
+ RPC_U32(&msg, 0) = addr_start >> 32;
+ RPC_U32(&msg, 4) = addr_start;
+ RPC_U32(&msg, 8) = addr_end >> 32;
+ RPC_U32(&msg, 12) = addr_end;
+ RPC_SIZE(&msg) = 5;
+
+ sc_call_rpc(ipc, &msg, false);
+
+ result = RPC_R8(&msg);
+ if (mr != NULL)
+ *mr = RPC_U8(&msg, 0);
+ return (sc_err_t) result;
+}
+
sc_err_t sc_rm_assign_memreg(sc_ipc_t ipc, sc_rm_pt_t pt, sc_rm_mr_t mr)
{
sc_rpc_msg_t msg;
@@ -519,5 +585,19 @@ bool sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad)
return (bool) result;
}
+void sc_rm_dump(sc_ipc_t ipc)
+{
+ sc_rpc_msg_t msg;
+
+ RPC_VER(&msg) = SC_RPC_VERSION;
+ RPC_SVC(&msg) = SC_RPC_SVC_RM;
+ RPC_FUNC(&msg) = RM_FUNC_DUMP;
+ RPC_SIZE(&msg) = 1;
+
+ sc_call_rpc(ipc, &msg, false);
+
+ return;
+}
+
/**@}*/
diff --git a/arch/arm/include/asm/imx-common/sci/svc/pad/api.h b/arch/arm/include/asm/imx-common/sci/svc/pad/api.h
index 7ee8177a00..26d681e654 100644
--- a/arch/arm/include/asm/imx-common/sci/svc/pad/api.h
+++ b/arch/arm/include/asm/imx-common/sci/svc/pad/api.h
@@ -42,7 +42,11 @@
* info on these can be found in the associated Reference Manual.
*
* Pads are managed as a resource by the Resource Manager (RM). They have
- * assigned owners and only the owners can configure the pads.
+ * assigned owners and only the owners can configure the pads. Some of the
+ * pads are reserved for use by the SCFW itself and this can be overriden
+ * with the implementation of board_config_sc(). Additionally, pads may
+ * be assigned to various other partitions via SCD or via the implementation
+ * of board_system_config().
*
* @{
*/
@@ -85,16 +89,6 @@
/*@}*/
/*!
- * @name Defines for sc_pad_28lpp_dse_t
- */
-/*@{*/
-#define SC_PAD_28LPP_DSE_x1 0 /*!< Drive strength x1 */
-#define SC_PAD_28LPP_DSE_x4 1 /*!< Drive strength x4 */
-#define SC_PAD_28LPP_DSE_x2 2 /*!< Drive strength x2 */
-#define SC_PAD_28LPP_DSE_x6 3 /*!< Drive strength x6 */
-/*@}*/
-
-/*!
* @name Defines for sc_pad_28fdsoi_dse_t
*/
/*@{*/
@@ -105,23 +99,13 @@
#define SC_PAD_28FDSOI_DSE_18V_8MA 4 /*!< Drive strength of 8mA for 1.8v */
#define SC_PAD_28FDSOI_DSE_18V_10MA 5 /*!< Drive strength of 10mA for 1.8v */
#define SC_PAD_28FDSOI_DSE_18V_12MA 6 /*!< Drive strength of 12mA for 1.8v */
+#define SC_PAD_28FDSOI_DSE_18V_HS 7 /*!< High-speed drive strength for 1.8v */
#define SC_PAD_28FDSOI_DSE_33V_2MA 0 /*!< Drive strength of 2mA for 3.3v */
#define SC_PAD_28FDSOI_DSE_33V_4MA 1 /*!< Drive strength of 4mA for 3.3v */
#define SC_PAD_28FDSOI_DSE_33V_8MA 2 /*!< Drive strength of 8mA for 3.3v */
#define SC_PAD_28FDSOI_DSE_33V_12MA 3 /*!< Drive strength of 12mA for 3.3v */
-#define SC_PAD_28FDSOI_DSE_33V_HS 7 /*!< High-speed drive strength for 1.8v */
-#define SC_PAD_28FDSOI_DSE_DV_LOW 0 /*!< Low drive strength for dual volt */
-#define SC_PAD_28FDSOI_DSE_DV_HIGH 1 /*!< High drive strength for dual volt */
-/*@}*/
-
-/*!
- * @name Defines for sc_pad_28lpp_ps_t
- */
-/*@{*/
-#define SC_PAD_28LPP_PS_PD 0 /*!< Pull down */
-#define SC_PAD_28LPP_PS_PU_5K 1 /*!< 5K pull up */
-#define SC_PAD_28LPP_PS_PU_47K 2 /*!< 47K pull up */
-#define SC_PAD_28LPP_PS_PU_100K 3 /*!< 100K pull up */
+#define SC_PAD_28FDSOI_DSE_DV_HIGH 0 /*!< High drive strength for dual volt */
+#define SC_PAD_28FDSOI_DSE_DV_LOW 1 /*!< Low drive strength for dual volt */
/*@}*/
/*!
@@ -135,6 +119,16 @@
/*@}*/
/*!
+ * @name Defines for sc_pad_28fdsoi_pus_t
+ */
+/*@{*/
+#define SC_PAD_28FDSOI_PUS_30K_PD 0 /*!< 30K pull-down */
+#define SC_PAD_28FDSOI_PUS_100K_PU 1 /*!< 100K pull-up */
+#define SC_PAD_28FDSOI_PUS_3K_PU 2 /*!< 3K pull-up */
+#define SC_PAD_28FDSOI_PUS_30K_PU 3 /*!< 30K pull-up */
+/*@}*/
+
+/*!
* @name Defines for sc_pad_wakeup_t
*/
/*@{*/
@@ -167,27 +161,21 @@ typedef uint8_t sc_pad_iso_t;
/*!
* This type is used to declare a drive strength. Note it is specific
- * to 28LPP.
- */
-typedef uint8_t sc_pad_28lpp_dse_t;
-
-/*!
- * This type is used to declare a drive strength. Note it is specific
* to 28FDSOI. Also note that valid values depend on the pad type.
*/
typedef uint8_t sc_pad_28fdsoi_dse_t;
/*!
* This type is used to declare a pull select. Note it is specific
- * to 28LPP.
+ * to 28FDSOI.
*/
-typedef uint8_t sc_pad_28lpp_ps_t;
+typedef uint8_t sc_pad_28fdsoi_ps_t;
/*!
- * This type is used to declare a pull select. Note it is specific
- * to 28FDSOI.
+ * This type is used to declare a pull-up select. Note it is specific
+ * to 28FDSOI HSIC pads.
*/
-typedef uint8_t sc_pad_28fdsoi_ps_t;
+typedef uint8_t sc_pad_28fdsoi_pus_t;
/*!
* This type is used to declare a wakeup mode of a pad.
@@ -422,14 +410,11 @@ sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val);
*/
/*!
- * This function configures the pad control specific to 28LPP.
+ * This function configures the pad control specific to 28FDSOI.
*
* @param[in] ipc IPC handle
* @param[in] pad pad to configure
* @param[in] dse drive strength
- * @param[in] sre slew rate
- * @param[in] hys hysteresis
- * @param[in] pe pull enable
* @param[in] ps pull select
*
* @return Returns an error code (SC_ERR_NONE = success).
@@ -441,19 +426,15 @@ sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val);
*
* Refer to the SoC [Pad List](@ref PADS) for valid pad values.
*/
-sc_err_t sc_pad_set_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28lpp_dse_t dse, bool sre, bool hys, bool pe,
- sc_pad_28lpp_ps_t ps);
+sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps);
/*!
- * This function gets the pad control specific to 28LPP.
+ * This function gets the pad control specific to 28FDSOI.
*
* @param[in] ipc IPC handle
* @param[in] pad pad to query
* @param[out] dse pointer to return drive strength
- * @param[out] sre pointer to return slew rate
- * @param[out] hys pointer to return hysteresis
- * @param[out] pe pointer to return pull enable
* @param[out] ps pointer to return pull select
*
* @return Returns an error code (SC_ERR_NONE = success).
@@ -465,9 +446,8 @@ sc_err_t sc_pad_set_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
*
* Refer to the SoC [Pad List](@ref PADS) for valid pad values.
*/
-sc_err_t sc_pad_get_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28lpp_dse_t *dse, bool *sre, bool *hys, bool *pe,
- sc_pad_28lpp_ps_t *ps);
+sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps);
/*!
* This function configures the pad control specific to 28FDSOI.
@@ -475,7 +455,10 @@ sc_err_t sc_pad_get_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
* @param[in] ipc IPC handle
* @param[in] pad pad to configure
* @param[in] dse drive strength
- * @param[in] ps pull select
+ * @param[in] hys hysteresis
+ * @param[in] pus pull-up select
+ * @param[in] pke pull keeper enable
+ * @param[in] pue pull-up enable
*
* @return Returns an error code (SC_ERR_NONE = success).
*
@@ -486,8 +469,9 @@ sc_err_t sc_pad_get_gp_28lpp(sc_ipc_t ipc, sc_pad_t pad,
*
* Refer to the SoC [Pad List](@ref PADS) for valid pad values.
*/
-sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps);
+sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t dse, bool hys, sc_pad_28fdsoi_pus_t pus,
+ bool pke, bool pue);
/*!
* This function gets the pad control specific to 28FDSOI.
@@ -495,7 +479,10 @@ sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
* @param[in] ipc IPC handle
* @param[in] pad pad to query
* @param[out] dse pointer to return drive strength
- * @param[out] ps pointer to return pull select
+ * @param[out] hys pointer to return hysteresis
+ * @param[out] pus pointer to return pull-up select
+ * @param[out] pke pointer to return pull keeper enable
+ * @param[out] pue pointer to return pull-up enable
*
* @return Returns an error code (SC_ERR_NONE = success).
*
@@ -506,8 +493,9 @@ sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
*
* Refer to the SoC [Pad List](@ref PADS) for valid pad values.
*/
-sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
- sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps);
+sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
+ sc_pad_28fdsoi_dse_t *dse, bool *hys, sc_pad_28fdsoi_pus_t *pus,
+ bool *pke, bool *pue);
/*!
* This function configures the compensation control specific to 28FDSOI.
@@ -519,6 +507,7 @@ sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
* @param[in] rasrcp compensation code for PMOS
* @param[in] rasrcn compensation code for NMOS
* @param[in] nasrc_sel NASRC read select
+ * @param[in] psw_ovr 2.5v override
*
* @return Returns an error code (SC_ERR_NONE = success).
*
@@ -528,23 +517,27 @@ sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
* - SC_ERR_UNAVAILABLE if process not applicable
*
* Refer to the SoC [Pad List](@ref PADS) for valid pad values.
+ *
+ * Note \a psw_ovr is only applicable to pads supporting 2.5 volt
+ * operation (e.g. some Ethernet pads).
*/
sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
uint8_t compen, bool fastfrz, uint8_t rasrcp, uint8_t rasrcn,
- bool nasrc_sel);
+ bool nasrc_sel, bool psw_ovr);
/*!
* This function gets the compensation control specific to 28FDSOI.
*
* @param[in] ipc IPC handle
* @param[in] pad pad to query
- * @param[in] compen pointer to return compensation/freeze mode
- * @param[in] fastfrz pointer to return fast freeze
- * @param[in] rasrcp pointer to return compensation code for PMOS
- * @param[in] rasrcn pointer to return compensation code for NMOS
- * @param[in] nasrc_sel pointer to return NASRC read select
- * @param[in] compok pointer to return compensation status
- * @param[in] nasrc pointer to return NASRCP/NASRCN
+ * @param[out] compen pointer to return compensation/freeze mode
+ * @param[out] fastfrz pointer to return fast freeze
+ * @param[out] rasrcp pointer to return compensation code for PMOS
+ * @param[out] rasrcn pointer to return compensation code for NMOS
+ * @param[out] nasrc_sel pointer to return NASRC read select
+ * @param[out] compok pointer to return compensation status
+ * @param[out] nasrc pointer to return NASRCP/NASRCN
+ * @param[out] psw_ovr pointer to return the 2.5v override
*
* @return Returns an error code (SC_ERR_NONE = success).
*
@@ -557,7 +550,7 @@ sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
*/
sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
uint8_t *compen, bool *fastfrz, uint8_t *rasrcp, uint8_t *rasrcn,
- bool *nasrc_sel, bool *compok, uint8_t *nasrc);
+ bool *nasrc_sel, bool *compok, uint8_t *nasrc, bool *psw_ovr);
/* @} */
diff --git a/arch/arm/include/asm/imx-common/sci/svc/pm/api.h b/arch/arm/include/asm/imx-common/sci/svc/pm/api.h
index aa9ddbfcff..450cf3a56f 100644
--- a/arch/arm/include/asm/imx-common/sci/svc/pm/api.h
+++ b/arch/arm/include/asm/imx-common/sci/svc/pm/api.h
@@ -226,6 +226,11 @@ sc_err_t sc_pm_get_sys_power_mode(sc_ipc_t ipc, sc_rm_pt_t pt,
* will return an error. Resources set to SC_PM_PW_MODE_ON will reflect the
* power mode of the partition and will change as that changes.
*
+ * Note some resources are still not accessible even when powered up if bus
+ * transactions go through a fabric not powered up. Examples of this are
+ * resources in display and capture subsystems which require the display
+ * controller or the imaging subsytem to be powered up first.
+ *
* @see sc_pm_set_sys_power_mode().
*/
sc_err_t sc_pm_set_resource_power_mode(sc_ipc_t ipc, sc_rsrc_t resource,
diff --git a/arch/arm/include/asm/imx-common/sci/svc/rm/api.h b/arch/arm/include/asm/imx-common/sci/svc/rm/api.h
index 552ce65a18..ceadd2553d 100644
--- a/arch/arm/include/asm/imx-common/sci/svc/rm/api.h
+++ b/arch/arm/include/asm/imx-common/sci/svc/rm/api.h
@@ -333,6 +333,25 @@ sc_err_t sc_rm_set_resource_movable(sc_ipc_t ipc, sc_rsrc_t resource_fst,
sc_rsrc_t resource_lst, bool movable);
/*!
+ * This function flags all of a subsystem's resources as movable
+ * or not.
+ *
+ * @param[in] ipc IPC handle
+ * @param[in] resource resource to use to identify subsystem
+ * @param[in] movable movable flag (true) is movable
+ *
+ * @return Returns an error code (SC_ERR_NONE = success).
+ *
+ * Return errors:
+ * - SC_ERR_PARM if a function argument is out of range
+ *
+ * Note \a resource is used to find the associated subsystem. Only
+ * resources owned by the caller are set.
+ */
+sc_err_t sc_rm_set_subsys_rsrc_movable(sc_ipc_t ipc, sc_rsrc_t resource,
+ bool movable);
+
+/*!
* This function sets attributes for a resource which is a bus master (i.e.
* capable of DMA).
*
@@ -491,6 +510,33 @@ sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr,
sc_faddr_t addr_start, sc_faddr_t addr_end);
/*!
+ * This function requests that the SC split a memory region.
+ *
+ * @param[in] ipc IPC handle
+ * @param[in] mr handle of memory region to split
+ * @param[out] mr_ret return handle for new region; used for
+ * subsequent function calls
+ * associated with this region
+ * @param[in] addr_start start address of region (physical)
+ * @param[in] addr_end end address of region (physical)
+ *
+ * @return Returns an error code (SC_ERR_NONE = success).
+ *
+ * Return errors:
+ * - SC_ERR_PARM if the new memory region is not start/end part of mr,
+ * - SC_ERR_LOCKED if caller's partition is locked,
+ * - SC_ERR_PARM if the new memory region spans multiple existing regions,
+ * - SC_ERR_NOACCESS if caller's partition does not own the memory containing
+ * the new region,
+ * - SC_ERR_UNAVAILABLE if memory region table is full (no more allocation
+ * space)
+ *
+ * Note the new region must start or end on the split region.
+ */
+sc_err_t sc_rm_memreg_split(sc_ipc_t ipc, sc_rm_mr_t mr,
+ sc_rm_mr_t *mr_ret, sc_faddr_t addr_start, sc_faddr_t addr_end);
+
+/*!
* This function frees a memory region.
*
* @param[in] ipc IPC handle
@@ -506,6 +552,32 @@ sc_err_t sc_rm_memreg_alloc(sc_ipc_t ipc, sc_rm_mr_t *mr,
sc_err_t sc_rm_memreg_free(sc_ipc_t ipc, sc_rm_mr_t mr);
/*!
+ * Internal SC function to find a memory region.
+ *
+ * @see sc_rm_find_memreg().
+ */
+/*!
+ * This function finds a memory region.
+ *
+ * @param[in] ipc IPC handle
+ * @param[out] mr return handle for region; used for
+ * subsequent function calls
+ * associated with this region
+ * @param[in] addr_start start address of region to search for
+ * @param[in] addr_end end address of region to search for
+ *
+ * @return Returns an error code (SC_ERR_NONE = success).
+ *
+ * Return errors:
+ * - SC_ERR_NOTFOUND if region not found,
+ *
+ * Searches only for regions owned by the caller. Finds first
+ * region containing the range specified.
+ */
+sc_err_t sc_rm_find_memreg(sc_ipc_t ipc, sc_rm_mr_t *mr,
+ sc_faddr_t addr_start, sc_faddr_t addr_end);
+
+/*!
* This function assigns ownership of a memory region.
*
* @param[in] ipc IPC handle
@@ -639,6 +711,20 @@ bool sc_rm_is_pad_owned(sc_ipc_t ipc, sc_pad_t pad);
/* @} */
+/*!
+ * @name Debug Functions
+ * @{
+ */
+
+/*!
+ * This function dumps the RM state for debug.
+ *
+ * @param[in] ipc IPC handle
+ */
+void sc_rm_dump(sc_ipc_t ipc);
+
+/* @} */
+
#endif /* _SC_RM_API_H */
/**@}*/
diff --git a/arch/arm/include/asm/imx-common/sci/types.h b/arch/arm/include/asm/imx-common/sci/types.h
index e912d50324..af7f1cbb6d 100644
--- a/arch/arm/include/asm/imx-common/sci/types.h
+++ b/arch/arm/include/asm/imx-common/sci/types.h
@@ -68,6 +68,7 @@
#define SC_1000MHZ 1000000000 /*!< 1GHz */
#define SC_1056MHZ 1056000000 /*!< 1.056GHz */
#define SC_1188MHZ 1188000000 /*!< 1.188GHz */
+#define SC_1260MHZ 1260000000 /*!< 1.26GHz */
#define SC_1300MHZ 1300000000 /*!< 1.3GHz */
#define SC_1400MHZ 1400000000 /*!< 1.4GHz */
#define SC_1500MHZ 1500000000 /*!< 1.5GHz */
@@ -103,6 +104,7 @@
#define SC_960MHZ 960000000 /*!< 960MHz */
#define SC_1056MHZ 1056000000 /*!< 1056MHz */
#define SC_1200MHZ 1200000000 /*!< 1.2GHz */
+#define SC_1464MHZ 1464000000 /*!< 1.464GHz */
#define SC_2400MHZ 2400000000 /*!< 2.4GHz */
/*@}*/
@@ -149,6 +151,7 @@ typedef enum sc_err_e
SC_ERR_NOPOWER = 8, /*!< No power */
SC_ERR_IPC = 9, /*!< Generic IPC error */
SC_ERR_BUSY = 10, /*!< Resource is currently busy/active */
+ SC_ERR_FAIL = 11, /*!< General I/O failure */
SC_ERR_LAST
} sc_err_t;