xref: /arm-trusted-firmware/plat/imx/common/include/sci/svc/pad/sci_pad_api.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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