diff options
author | Ranjani Vaidyanathan <Ranjani.Vaidyanathan@nxp.com> | 2017-08-24 17:40:45 -0500 |
---|---|---|
committer | Ranjani Vaidyanathan <Ranjani.Vaidyanathan@nxp.com> | 2017-08-25 10:47:23 -0500 |
commit | 56953837dc8467d0fd9c157c3866906318d6006d (patch) | |
tree | 59c94f8334cb7b6c6f6a825bdec9250183df0e57 | |
parent | 6a49c55a05a4905cd3cfa78400d320483f3f2d71 (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.h | 4 | ||||
-rw-r--r-- | arch/arm/imx-common/sci/svc/pad/rpc_clnt.c | 63 | ||||
-rw-r--r-- | arch/arm/imx-common/sci/svc/rm/rpc.h | 4 | ||||
-rw-r--r-- | arch/arm/imx-common/sci/svc/rm/rpc_clnt.c | 80 | ||||
-rw-r--r-- | arch/arm/include/asm/imx-common/sci/svc/pad/api.h | 121 | ||||
-rw-r--r-- | arch/arm/include/asm/imx-common/sci/svc/pm/api.h | 5 | ||||
-rw-r--r-- | arch/arm/include/asm/imx-common/sci/svc/rm/api.h | 86 | ||||
-rw-r--r-- | arch/arm/include/asm/imx-common/sci/types.h | 3 |
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 f0f32aff5ed..b9f3a756065 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 17b8cc51556..f27dca9cde6 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 a6ea5584024..4107a49f0c8 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 a97780b0deb..768bb823189 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 7ee8177a005..26d681e654a 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 aa9ddbfcff2..450cf3a56f1 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 552ce65a188..ceadd2553d1 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 e912d503247..af7f1cbb6d3 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; |