1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu /*! 8*91f16700Schasinglulu * Header file containing the public API for the System Controller (SC) 9*91f16700Schasinglulu * Pad Control (PAD) function. 10*91f16700Schasinglulu * 11*91f16700Schasinglulu * @addtogroup PAD_SVC (SVC) Pad Service 12*91f16700Schasinglulu * 13*91f16700Schasinglulu * Module for the Pad Control (PAD) service. 14*91f16700Schasinglulu * 15*91f16700Schasinglulu * @details 16*91f16700Schasinglulu * 17*91f16700Schasinglulu * Pad configuration is managed by SC firmware. The pad configuration 18*91f16700Schasinglulu * features supported by the SC firmware include: 19*91f16700Schasinglulu * 20*91f16700Schasinglulu * - Configuring the mux, input/output connection, and low-power isolation 21*91f16700Schasinglulu mode. 22*91f16700Schasinglulu * - Configuring the technology-specific pad setting such as drive strength, 23*91f16700Schasinglulu * pullup/pulldown, etc. 24*91f16700Schasinglulu * - Configuring compensation for pad groups with dual voltage capability. 25*91f16700Schasinglulu * 26*91f16700Schasinglulu * Pad functions fall into one of three categories. Generic functions are 27*91f16700Schasinglulu * common to all SoCs and all process technologies. SoC functions are raw 28*91f16700Schasinglulu * low-level functions. Technology-specific functions are specific to the 29*91f16700Schasinglulu * process technology. 30*91f16700Schasinglulu * 31*91f16700Schasinglulu * The list of pads is SoC specific. Refer to the SoC [Pad List](@ref PADS) 32*91f16700Schasinglulu * for valid pad values. Note that all pads exist on a die but may or 33*91f16700Schasinglulu * may not be brought out by the specific package. Mapping of pads to 34*91f16700Schasinglulu * package pins/balls is documented in the associated Data Sheet. Some pads 35*91f16700Schasinglulu * may not be brought out because the part (die+package) is defeatured and 36*91f16700Schasinglulu * some pads may connect to the substrate in the package. 37*91f16700Schasinglulu * 38*91f16700Schasinglulu * Some pads (SC_P_COMP_*) that can be specified are not individual pads 39*91f16700Schasinglulu * but are in fact pad groups. These groups have additional configuration 40*91f16700Schasinglulu * that can be done using the sc_pad_set_gp_28fdsoi_comp() function. More 41*91f16700Schasinglulu * info on these can be found in the associated Reference Manual. 42*91f16700Schasinglulu * 43*91f16700Schasinglulu * Pads are managed as a resource by the Resource Manager (RM). They have 44*91f16700Schasinglulu * assigned owners and only the owners can configure the pads. Some of the 45*91f16700Schasinglulu * pads are reserved for use by the SCFW itself and this can be overridden 46*91f16700Schasinglulu * with the implementation of board_config_sc(). Additionally, pads may 47*91f16700Schasinglulu * be assigned to various other partitions via the implementation of 48*91f16700Schasinglulu * board_system_config(). 49*91f16700Schasinglulu * 50*91f16700Schasinglulu * Note muxing two input pads to the same IP functional signal will 51*91f16700Schasinglulu * result in undefined behavior. 52*91f16700Schasinglulu * @{ 53*91f16700Schasinglulu */ 54*91f16700Schasinglulu 55*91f16700Schasinglulu #ifndef SCI_PAD_API_H 56*91f16700Schasinglulu #define SCI_PAD_API_H 57*91f16700Schasinglulu 58*91f16700Schasinglulu /* Includes */ 59*91f16700Schasinglulu 60*91f16700Schasinglulu #include <sci/sci_types.h> 61*91f16700Schasinglulu #include <sci/svc/rm/sci_rm_api.h> 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Defines */ 64*91f16700Schasinglulu 65*91f16700Schasinglulu /*! 66*91f16700Schasinglulu * @name Defines for type widths 67*91f16700Schasinglulu */ 68*91f16700Schasinglulu /*@{*/ 69*91f16700Schasinglulu #define SC_PAD_MUX_W 3 /* Width of mux parameter */ 70*91f16700Schasinglulu /*@}*/ 71*91f16700Schasinglulu 72*91f16700Schasinglulu /*! 73*91f16700Schasinglulu * @name Defines for sc_pad_config_t 74*91f16700Schasinglulu */ 75*91f16700Schasinglulu /*@{*/ 76*91f16700Schasinglulu #define SC_PAD_CONFIG_NORMAL 0U /* Normal */ 77*91f16700Schasinglulu #define SC_PAD_CONFIG_OD 1U /* Open Drain */ 78*91f16700Schasinglulu #define SC_PAD_CONFIG_OD_IN 2U /* Open Drain and input */ 79*91f16700Schasinglulu #define SC_PAD_CONFIG_OUT_IN 3U /* Output and input */ 80*91f16700Schasinglulu /*@}*/ 81*91f16700Schasinglulu 82*91f16700Schasinglulu /*! 83*91f16700Schasinglulu * @name Defines for sc_pad_iso_t 84*91f16700Schasinglulu */ 85*91f16700Schasinglulu /*@{*/ 86*91f16700Schasinglulu #define SC_PAD_ISO_OFF 0U /* ISO latch is transparent */ 87*91f16700Schasinglulu #define SC_PAD_ISO_EARLY 1U /* Follow EARLY_ISO */ 88*91f16700Schasinglulu #define SC_PAD_ISO_LATE 2U /* Follow LATE_ISO */ 89*91f16700Schasinglulu #define SC_PAD_ISO_ON 3U /* ISO latched data is held */ 90*91f16700Schasinglulu /*@}*/ 91*91f16700Schasinglulu 92*91f16700Schasinglulu /*! 93*91f16700Schasinglulu * @name Defines for sc_pad_28fdsoi_dse_t 94*91f16700Schasinglulu */ 95*91f16700Schasinglulu /*@{*/ 96*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_1MA 0U /* Drive strength of 1mA for 1.8v */ 97*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_2MA 1U /* Drive strength of 2mA for 1.8v */ 98*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_4MA 2U /* Drive strength of 4mA for 1.8v */ 99*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_6MA 3U /* Drive strength of 6mA for 1.8v */ 100*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_8MA 4U /* Drive strength of 8mA for 1.8v */ 101*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_10MA 5U /* Drive strength of 10mA for 1.8v */ 102*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_12MA 6U /* Drive strength of 12mA for 1.8v */ 103*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_18V_HS 7U /* High-speed drive strength for 1.8v */ 104*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_33V_2MA 0U /* Drive strength of 2mA for 3.3v */ 105*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_33V_4MA 1U /* Drive strength of 4mA for 3.3v */ 106*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_33V_8MA 2U /* Drive strength of 8mA for 3.3v */ 107*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_33V_12MA 3U /* Drive strength of 12mA for 3.3v */ 108*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_DV_HIGH 0U /* High drive strength for dual volt */ 109*91f16700Schasinglulu #define SC_PAD_28FDSOI_DSE_DV_LOW 1U /* Low drive strength for dual volt */ 110*91f16700Schasinglulu /*@}*/ 111*91f16700Schasinglulu 112*91f16700Schasinglulu /*! 113*91f16700Schasinglulu * @name Defines for sc_pad_28fdsoi_ps_t 114*91f16700Schasinglulu */ 115*91f16700Schasinglulu /*@{*/ 116*91f16700Schasinglulu #define SC_PAD_28FDSOI_PS_KEEPER 0U /* Bus-keeper (only valid for 1.8v) */ 117*91f16700Schasinglulu #define SC_PAD_28FDSOI_PS_PU 1U /* Pull-up */ 118*91f16700Schasinglulu #define SC_PAD_28FDSOI_PS_PD 2U /* Pull-down */ 119*91f16700Schasinglulu #define SC_PAD_28FDSOI_PS_NONE 3U /* No pull (disabled) */ 120*91f16700Schasinglulu /*@}*/ 121*91f16700Schasinglulu 122*91f16700Schasinglulu /*! 123*91f16700Schasinglulu * @name Defines for sc_pad_28fdsoi_pus_t 124*91f16700Schasinglulu */ 125*91f16700Schasinglulu /*@{*/ 126*91f16700Schasinglulu #define SC_PAD_28FDSOI_PUS_30K_PD 0U /* 30K pull-down */ 127*91f16700Schasinglulu #define SC_PAD_28FDSOI_PUS_100K_PU 1U /* 100K pull-up */ 128*91f16700Schasinglulu #define SC_PAD_28FDSOI_PUS_3K_PU 2U /* 3K pull-up */ 129*91f16700Schasinglulu #define SC_PAD_28FDSOI_PUS_30K_PU 3U /* 30K pull-up */ 130*91f16700Schasinglulu /*@}*/ 131*91f16700Schasinglulu 132*91f16700Schasinglulu /*! 133*91f16700Schasinglulu * @name Defines for sc_pad_wakeup_t 134*91f16700Schasinglulu */ 135*91f16700Schasinglulu /*@{*/ 136*91f16700Schasinglulu #define SC_PAD_WAKEUP_OFF 0U /* Off */ 137*91f16700Schasinglulu #define SC_PAD_WAKEUP_CLEAR 1U /* Clears pending flag */ 138*91f16700Schasinglulu #define SC_PAD_WAKEUP_LOW_LVL 4U /* Low level */ 139*91f16700Schasinglulu #define SC_PAD_WAKEUP_FALL_EDGE 5U /* Falling edge */ 140*91f16700Schasinglulu #define SC_PAD_WAKEUP_RISE_EDGE 6U /* Rising edge */ 141*91f16700Schasinglulu #define SC_PAD_WAKEUP_HIGH_LVL 7U /* High-level */ 142*91f16700Schasinglulu /*@}*/ 143*91f16700Schasinglulu 144*91f16700Schasinglulu /* Types */ 145*91f16700Schasinglulu 146*91f16700Schasinglulu /*! 147*91f16700Schasinglulu * This type is used to declare a pad config. It determines how the 148*91f16700Schasinglulu * output data is driven, pull-up is controlled, and input signal is 149*91f16700Schasinglulu * connected. Normal and OD are typical and only connect the input 150*91f16700Schasinglulu * when the output is not driven. The IN options are less common and 151*91f16700Schasinglulu * force an input connection even when driving the output. 152*91f16700Schasinglulu */ 153*91f16700Schasinglulu typedef uint8_t sc_pad_config_t; 154*91f16700Schasinglulu 155*91f16700Schasinglulu /*! 156*91f16700Schasinglulu * This type is used to declare a pad low-power isolation config. 157*91f16700Schasinglulu * ISO_LATE is the most common setting. ISO_EARLY is only used when 158*91f16700Schasinglulu * an output pad is directly determined by another input pad. The 159*91f16700Schasinglulu * other two are only used when SW wants to directly control isolation. 160*91f16700Schasinglulu */ 161*91f16700Schasinglulu typedef uint8_t sc_pad_iso_t; 162*91f16700Schasinglulu 163*91f16700Schasinglulu /*! 164*91f16700Schasinglulu * This type is used to declare a drive strength. Note it is specific 165*91f16700Schasinglulu * to 28FDSOI. Also note that valid values depend on the pad type. 166*91f16700Schasinglulu */ 167*91f16700Schasinglulu typedef uint8_t sc_pad_28fdsoi_dse_t; 168*91f16700Schasinglulu 169*91f16700Schasinglulu /*! 170*91f16700Schasinglulu * This type is used to declare a pull select. Note it is specific 171*91f16700Schasinglulu * to 28FDSOI. 172*91f16700Schasinglulu */ 173*91f16700Schasinglulu typedef uint8_t sc_pad_28fdsoi_ps_t; 174*91f16700Schasinglulu 175*91f16700Schasinglulu /*! 176*91f16700Schasinglulu * This type is used to declare a pull-up select. Note it is specific 177*91f16700Schasinglulu * to 28FDSOI HSIC pads. 178*91f16700Schasinglulu */ 179*91f16700Schasinglulu typedef uint8_t sc_pad_28fdsoi_pus_t; 180*91f16700Schasinglulu 181*91f16700Schasinglulu /*! 182*91f16700Schasinglulu * This type is used to declare a wakeup mode of a pad. 183*91f16700Schasinglulu */ 184*91f16700Schasinglulu typedef uint8_t sc_pad_wakeup_t; 185*91f16700Schasinglulu 186*91f16700Schasinglulu /* Functions */ 187*91f16700Schasinglulu 188*91f16700Schasinglulu /*! 189*91f16700Schasinglulu * @name Generic Functions 190*91f16700Schasinglulu * @{ 191*91f16700Schasinglulu */ 192*91f16700Schasinglulu 193*91f16700Schasinglulu /*! 194*91f16700Schasinglulu * This function configures the mux settings for a pad. This includes 195*91f16700Schasinglulu * the signal mux, pad config, and low-power isolation mode. 196*91f16700Schasinglulu * 197*91f16700Schasinglulu * @param[in] ipc IPC handle 198*91f16700Schasinglulu * @param[in] pad pad to configure 199*91f16700Schasinglulu * @param[in] mux mux setting 200*91f16700Schasinglulu * @param[in] config pad config 201*91f16700Schasinglulu * @param[in] iso low-power isolation mode 202*91f16700Schasinglulu * 203*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 204*91f16700Schasinglulu * 205*91f16700Schasinglulu * Return errors: 206*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 207*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 208*91f16700Schasinglulu * 209*91f16700Schasinglulu * Note muxing two input pads to the same IP functional signal will 210*91f16700Schasinglulu * result in undefined behavior. 211*91f16700Schasinglulu * 212*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 213*91f16700Schasinglulu */ 214*91f16700Schasinglulu sc_err_t sc_pad_set_mux(sc_ipc_t ipc, sc_pad_t pad, 215*91f16700Schasinglulu uint8_t mux, sc_pad_config_t config, sc_pad_iso_t iso); 216*91f16700Schasinglulu 217*91f16700Schasinglulu /*! 218*91f16700Schasinglulu * This function gets the mux settings for a pad. This includes 219*91f16700Schasinglulu * the signal mux, pad config, and low-power isolation mode. 220*91f16700Schasinglulu * 221*91f16700Schasinglulu * @param[in] ipc IPC handle 222*91f16700Schasinglulu * @param[in] pad pad to query 223*91f16700Schasinglulu * @param[out] mux pointer to return mux setting 224*91f16700Schasinglulu * @param[out] config pointer to return pad config 225*91f16700Schasinglulu * @param[out] iso pointer to return low-power isolation mode 226*91f16700Schasinglulu * 227*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 228*91f16700Schasinglulu * 229*91f16700Schasinglulu * Return errors: 230*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 231*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 232*91f16700Schasinglulu * 233*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 234*91f16700Schasinglulu */ 235*91f16700Schasinglulu sc_err_t sc_pad_get_mux(sc_ipc_t ipc, sc_pad_t pad, 236*91f16700Schasinglulu uint8_t *mux, sc_pad_config_t *config, 237*91f16700Schasinglulu sc_pad_iso_t *iso); 238*91f16700Schasinglulu 239*91f16700Schasinglulu /*! 240*91f16700Schasinglulu * This function configures the general purpose pad control. This 241*91f16700Schasinglulu * is technology dependent and includes things like drive strength, 242*91f16700Schasinglulu * slew rate, pull up/down, etc. Refer to the SoC Reference Manual 243*91f16700Schasinglulu * for bit field details. 244*91f16700Schasinglulu * 245*91f16700Schasinglulu * @param[in] ipc IPC handle 246*91f16700Schasinglulu * @param[in] pad pad to configure 247*91f16700Schasinglulu * @param[in] ctrl control value to set 248*91f16700Schasinglulu * 249*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 250*91f16700Schasinglulu * 251*91f16700Schasinglulu * Return errors: 252*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 253*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 254*91f16700Schasinglulu * 255*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 256*91f16700Schasinglulu */ 257*91f16700Schasinglulu sc_err_t sc_pad_set_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t ctrl); 258*91f16700Schasinglulu 259*91f16700Schasinglulu /*! 260*91f16700Schasinglulu * This function gets the general purpose pad control. This 261*91f16700Schasinglulu * is technology dependent and includes things like drive strength, 262*91f16700Schasinglulu * slew rate, pull up/down, etc. Refer to the SoC Reference Manual 263*91f16700Schasinglulu * for bit field details. 264*91f16700Schasinglulu * 265*91f16700Schasinglulu * @param[in] ipc IPC handle 266*91f16700Schasinglulu * @param[in] pad pad to query 267*91f16700Schasinglulu * @param[out] ctrl pointer to return control value 268*91f16700Schasinglulu * 269*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 270*91f16700Schasinglulu * 271*91f16700Schasinglulu * Return errors: 272*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 273*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 274*91f16700Schasinglulu * 275*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 276*91f16700Schasinglulu */ 277*91f16700Schasinglulu sc_err_t sc_pad_get_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t *ctrl); 278*91f16700Schasinglulu 279*91f16700Schasinglulu /*! 280*91f16700Schasinglulu * This function configures the wakeup mode of the pad. 281*91f16700Schasinglulu * 282*91f16700Schasinglulu * @param[in] ipc IPC handle 283*91f16700Schasinglulu * @param[in] pad pad to configure 284*91f16700Schasinglulu * @param[in] wakeup wakeup to set 285*91f16700Schasinglulu * 286*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 287*91f16700Schasinglulu * 288*91f16700Schasinglulu * Return errors: 289*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 290*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 291*91f16700Schasinglulu * 292*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 293*91f16700Schasinglulu */ 294*91f16700Schasinglulu sc_err_t sc_pad_set_wakeup(sc_ipc_t ipc, sc_pad_t pad, sc_pad_wakeup_t wakeup); 295*91f16700Schasinglulu 296*91f16700Schasinglulu /*! 297*91f16700Schasinglulu * This function gets the wakeup mode of a pad. 298*91f16700Schasinglulu * 299*91f16700Schasinglulu * @param[in] ipc IPC handle 300*91f16700Schasinglulu * @param[in] pad pad to query 301*91f16700Schasinglulu * @param[out] wakeup pointer to return wakeup 302*91f16700Schasinglulu * 303*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 304*91f16700Schasinglulu * 305*91f16700Schasinglulu * Return errors: 306*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 307*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 308*91f16700Schasinglulu * 309*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 310*91f16700Schasinglulu */ 311*91f16700Schasinglulu sc_err_t sc_pad_get_wakeup(sc_ipc_t ipc, sc_pad_t pad, sc_pad_wakeup_t *wakeup); 312*91f16700Schasinglulu 313*91f16700Schasinglulu /*! 314*91f16700Schasinglulu * This function configures a pad. 315*91f16700Schasinglulu * 316*91f16700Schasinglulu * @param[in] ipc IPC handle 317*91f16700Schasinglulu * @param[in] pad pad to configure 318*91f16700Schasinglulu * @param[in] mux mux setting 319*91f16700Schasinglulu * @param[in] config pad config 320*91f16700Schasinglulu * @param[in] iso low-power isolation mode 321*91f16700Schasinglulu * @param[in] ctrl control value 322*91f16700Schasinglulu * @param[in] wakeup wakeup to set 323*91f16700Schasinglulu * 324*91f16700Schasinglulu * @see sc_pad_set_mux(). 325*91f16700Schasinglulu * @see sc_pad_set_gp(). 326*91f16700Schasinglulu * 327*91f16700Schasinglulu * Return errors: 328*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 329*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 330*91f16700Schasinglulu * 331*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 332*91f16700Schasinglulu * 333*91f16700Schasinglulu * Note muxing two input pads to the same IP functional signal will 334*91f16700Schasinglulu * result in undefined behavior. 335*91f16700Schasinglulu * 336*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 337*91f16700Schasinglulu */ 338*91f16700Schasinglulu sc_err_t sc_pad_set_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t mux, 339*91f16700Schasinglulu sc_pad_config_t config, sc_pad_iso_t iso, uint32_t ctrl, 340*91f16700Schasinglulu sc_pad_wakeup_t wakeup); 341*91f16700Schasinglulu 342*91f16700Schasinglulu /*! 343*91f16700Schasinglulu * This function gets a pad's config. 344*91f16700Schasinglulu * 345*91f16700Schasinglulu * @param[in] ipc IPC handle 346*91f16700Schasinglulu * @param[in] pad pad to query 347*91f16700Schasinglulu * @param[out] mux pointer to return mux setting 348*91f16700Schasinglulu * @param[out] config pointer to return pad config 349*91f16700Schasinglulu * @param[out] iso pointer to return low-power isolation mode 350*91f16700Schasinglulu * @param[out] ctrl pointer to return control value 351*91f16700Schasinglulu * @param[out] wakeup pointer to return wakeup to set 352*91f16700Schasinglulu * 353*91f16700Schasinglulu * @see sc_pad_set_mux(). 354*91f16700Schasinglulu * @see sc_pad_set_gp(). 355*91f16700Schasinglulu * 356*91f16700Schasinglulu * Return errors: 357*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 358*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 359*91f16700Schasinglulu * 360*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 361*91f16700Schasinglulu * 362*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 363*91f16700Schasinglulu */ 364*91f16700Schasinglulu sc_err_t sc_pad_get_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t *mux, 365*91f16700Schasinglulu sc_pad_config_t *config, sc_pad_iso_t *iso, 366*91f16700Schasinglulu uint32_t *ctrl, sc_pad_wakeup_t *wakeup); 367*91f16700Schasinglulu 368*91f16700Schasinglulu /* @} */ 369*91f16700Schasinglulu 370*91f16700Schasinglulu /*! 371*91f16700Schasinglulu * @name SoC Specific Functions 372*91f16700Schasinglulu * @{ 373*91f16700Schasinglulu */ 374*91f16700Schasinglulu 375*91f16700Schasinglulu /*! 376*91f16700Schasinglulu * This function configures the settings for a pad. This setting is SoC 377*91f16700Schasinglulu * specific. 378*91f16700Schasinglulu * 379*91f16700Schasinglulu * @param[in] ipc IPC handle 380*91f16700Schasinglulu * @param[in] pad pad to configure 381*91f16700Schasinglulu * @param[in] val value to set 382*91f16700Schasinglulu * 383*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 384*91f16700Schasinglulu * 385*91f16700Schasinglulu * Return errors: 386*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 387*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 388*91f16700Schasinglulu * 389*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 390*91f16700Schasinglulu */ 391*91f16700Schasinglulu sc_err_t sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, uint32_t val); 392*91f16700Schasinglulu 393*91f16700Schasinglulu /*! 394*91f16700Schasinglulu * This function gets the settings for a pad. This setting is SoC 395*91f16700Schasinglulu * specific. 396*91f16700Schasinglulu * 397*91f16700Schasinglulu * @param[in] ipc IPC handle 398*91f16700Schasinglulu * @param[in] pad pad to query 399*91f16700Schasinglulu * @param[out] val pointer to return setting 400*91f16700Schasinglulu * 401*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 402*91f16700Schasinglulu * 403*91f16700Schasinglulu * Return errors: 404*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 405*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner 406*91f16700Schasinglulu * 407*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 408*91f16700Schasinglulu */ 409*91f16700Schasinglulu sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val); 410*91f16700Schasinglulu 411*91f16700Schasinglulu /* @} */ 412*91f16700Schasinglulu 413*91f16700Schasinglulu /*! 414*91f16700Schasinglulu * @name Technology Specific Functions 415*91f16700Schasinglulu * @{ 416*91f16700Schasinglulu */ 417*91f16700Schasinglulu 418*91f16700Schasinglulu /*! 419*91f16700Schasinglulu * This function configures the pad control specific to 28FDSOI. 420*91f16700Schasinglulu * 421*91f16700Schasinglulu * @param[in] ipc IPC handle 422*91f16700Schasinglulu * @param[in] pad pad to configure 423*91f16700Schasinglulu * @param[in] dse drive strength 424*91f16700Schasinglulu * @param[in] ps pull select 425*91f16700Schasinglulu * 426*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 427*91f16700Schasinglulu * 428*91f16700Schasinglulu * Return errors: 429*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 430*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 431*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 432*91f16700Schasinglulu * 433*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 434*91f16700Schasinglulu */ 435*91f16700Schasinglulu sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, 436*91f16700Schasinglulu sc_pad_28fdsoi_dse_t dse, 437*91f16700Schasinglulu sc_pad_28fdsoi_ps_t ps); 438*91f16700Schasinglulu 439*91f16700Schasinglulu /*! 440*91f16700Schasinglulu * This function gets the pad control specific to 28FDSOI. 441*91f16700Schasinglulu * 442*91f16700Schasinglulu * @param[in] ipc IPC handle 443*91f16700Schasinglulu * @param[in] pad pad to query 444*91f16700Schasinglulu * @param[out] dse pointer to return drive strength 445*91f16700Schasinglulu * @param[out] ps pointer to return pull select 446*91f16700Schasinglulu * 447*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 448*91f16700Schasinglulu * 449*91f16700Schasinglulu * Return errors: 450*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 451*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 452*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 453*91f16700Schasinglulu * 454*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 455*91f16700Schasinglulu */ 456*91f16700Schasinglulu sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad, 457*91f16700Schasinglulu sc_pad_28fdsoi_dse_t *dse, 458*91f16700Schasinglulu sc_pad_28fdsoi_ps_t *ps); 459*91f16700Schasinglulu 460*91f16700Schasinglulu /*! 461*91f16700Schasinglulu * This function configures the pad control specific to 28FDSOI. 462*91f16700Schasinglulu * 463*91f16700Schasinglulu * @param[in] ipc IPC handle 464*91f16700Schasinglulu * @param[in] pad pad to configure 465*91f16700Schasinglulu * @param[in] dse drive strength 466*91f16700Schasinglulu * @param[in] hys hysteresis 467*91f16700Schasinglulu * @param[in] pus pull-up select 468*91f16700Schasinglulu * @param[in] pke pull keeper enable 469*91f16700Schasinglulu * @param[in] pue pull-up enable 470*91f16700Schasinglulu * 471*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 472*91f16700Schasinglulu * 473*91f16700Schasinglulu * Return errors: 474*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 475*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 476*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 477*91f16700Schasinglulu * 478*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 479*91f16700Schasinglulu */ 480*91f16700Schasinglulu sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, 481*91f16700Schasinglulu sc_pad_28fdsoi_dse_t dse, sc_bool_t hys, 482*91f16700Schasinglulu sc_pad_28fdsoi_pus_t pus, sc_bool_t pke, 483*91f16700Schasinglulu sc_bool_t pue); 484*91f16700Schasinglulu 485*91f16700Schasinglulu /*! 486*91f16700Schasinglulu * This function gets the pad control specific to 28FDSOI. 487*91f16700Schasinglulu * 488*91f16700Schasinglulu * @param[in] ipc IPC handle 489*91f16700Schasinglulu * @param[in] pad pad to query 490*91f16700Schasinglulu * @param[out] dse pointer to return drive strength 491*91f16700Schasinglulu * @param[out] hys pointer to return hysteresis 492*91f16700Schasinglulu * @param[out] pus pointer to return pull-up select 493*91f16700Schasinglulu * @param[out] pke pointer to return pull keeper enable 494*91f16700Schasinglulu * @param[out] pue pointer to return pull-up enable 495*91f16700Schasinglulu * 496*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 497*91f16700Schasinglulu * 498*91f16700Schasinglulu * Return errors: 499*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 500*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 501*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 502*91f16700Schasinglulu * 503*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 504*91f16700Schasinglulu */ 505*91f16700Schasinglulu sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad, 506*91f16700Schasinglulu sc_pad_28fdsoi_dse_t *dse, sc_bool_t *hys, 507*91f16700Schasinglulu sc_pad_28fdsoi_pus_t *pus, sc_bool_t *pke, 508*91f16700Schasinglulu sc_bool_t *pue); 509*91f16700Schasinglulu 510*91f16700Schasinglulu /*! 511*91f16700Schasinglulu * This function configures the compensation control specific to 28FDSOI. 512*91f16700Schasinglulu * 513*91f16700Schasinglulu * @param[in] ipc IPC handle 514*91f16700Schasinglulu * @param[in] pad pad to configure 515*91f16700Schasinglulu * @param[in] compen compensation/freeze mode 516*91f16700Schasinglulu * @param[in] fastfrz fast freeze 517*91f16700Schasinglulu * @param[in] rasrcp compensation code for PMOS 518*91f16700Schasinglulu * @param[in] rasrcn compensation code for NMOS 519*91f16700Schasinglulu * @param[in] nasrc_sel NASRC read select 520*91f16700Schasinglulu * @param[in] psw_ovr 2.5v override 521*91f16700Schasinglulu * 522*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 523*91f16700Schasinglulu * 524*91f16700Schasinglulu * Return errors: 525*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 526*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 527*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 528*91f16700Schasinglulu * 529*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 530*91f16700Schasinglulu * 531*91f16700Schasinglulu * Note \a psw_ovr is only applicable to pads supporting 2.5 volt 532*91f16700Schasinglulu * operation (e.g. some Ethernet pads). 533*91f16700Schasinglulu */ 534*91f16700Schasinglulu sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, 535*91f16700Schasinglulu uint8_t compen, sc_bool_t fastfrz, 536*91f16700Schasinglulu uint8_t rasrcp, uint8_t rasrcn, 537*91f16700Schasinglulu sc_bool_t nasrc_sel, sc_bool_t psw_ovr); 538*91f16700Schasinglulu 539*91f16700Schasinglulu /*! 540*91f16700Schasinglulu * This function gets the compensation control specific to 28FDSOI. 541*91f16700Schasinglulu * 542*91f16700Schasinglulu * @param[in] ipc IPC handle 543*91f16700Schasinglulu * @param[in] pad pad to query 544*91f16700Schasinglulu * @param[out] compen pointer to return compensation/freeze mode 545*91f16700Schasinglulu * @param[out] fastfrz pointer to return fast freeze 546*91f16700Schasinglulu * @param[out] rasrcp pointer to return compensation code for PMOS 547*91f16700Schasinglulu * @param[out] rasrcn pointer to return compensation code for NMOS 548*91f16700Schasinglulu * @param[out] nasrc_sel pointer to return NASRC read select 549*91f16700Schasinglulu * @param[out] compok pointer to return compensation status 550*91f16700Schasinglulu * @param[out] nasrc pointer to return NASRCP/NASRCN 551*91f16700Schasinglulu * @param[out] psw_ovr pointer to return the 2.5v override 552*91f16700Schasinglulu * 553*91f16700Schasinglulu * @return Returns an error code (SC_ERR_NONE = success). 554*91f16700Schasinglulu * 555*91f16700Schasinglulu * Return errors: 556*91f16700Schasinglulu * - SC_PARM if arguments out of range or invalid, 557*91f16700Schasinglulu * - SC_ERR_NOACCESS if caller's partition is not the pad owner, 558*91f16700Schasinglulu * - SC_ERR_UNAVAILABLE if process not applicable 559*91f16700Schasinglulu * 560*91f16700Schasinglulu * Refer to the SoC [Pad List](@ref PADS) for valid pad values. 561*91f16700Schasinglulu */ 562*91f16700Schasinglulu sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad, 563*91f16700Schasinglulu uint8_t *compen, sc_bool_t *fastfrz, 564*91f16700Schasinglulu uint8_t *rasrcp, uint8_t *rasrcn, 565*91f16700Schasinglulu sc_bool_t *nasrc_sel, sc_bool_t *compok, 566*91f16700Schasinglulu uint8_t *nasrc, sc_bool_t *psw_ovr); 567*91f16700Schasinglulu 568*91f16700Schasinglulu /* @} */ 569*91f16700Schasinglulu 570*91f16700Schasinglulu #endif /* SCI_PAD_API_H */ 571*91f16700Schasinglulu 572*91f16700Schasinglulu /**@}*/ 573