Skip to content

Commit ca0be9e

Browse files
nhutnguyenkcKhiemNguyenT
authored andcommitted
hal: renesas: rz: Initial support RZ FSP hal driver
This is the initial hal support for RZ family series. The hal layer support for RZ/G3S will base on RZ/G3S FSP. Signed-off-by: Nhut Nguyen <[email protected]> Signed-off-by: Binh Nguyen <[email protected]>
1 parent d59553e commit ca0be9e

File tree

100 files changed

+41205
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+41205
-0
lines changed

drivers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
# SPDX-License-Identifier: Apache-2.0
22

33
add_subdirectory_ifdef(CONFIG_HAS_RENESAS_RA_FSP ra)
4+
add_subdirectory_ifdef(CONFIG_HAS_RENESAS_RZ_FSP rz)

drivers/rz/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
# Extract the RZ family name from CONFIG_SOC_SERIES
4+
string(SUBSTRING ${CONFIG_SOC_SERIES} 0 3 SOC_SERIES_PREFIX)
5+
6+
add_subdirectory(fsp/src/${SOC_SERIES_PREFIX})
7+
8+
set(include_dirs
9+
fsp/inc
10+
fsp/inc/api
11+
fsp/inc/instances/${SOC_SERIES_PREFIX}
12+
fsp/src/${SOC_SERIES_PREFIX}/bsp/mcu/all
13+
fsp/src/${SOC_SERIES_PREFIX}/bsp/cmsis/Device/RENESAS/Include
14+
fsp/src/${SOC_SERIES_PREFIX}/bsp/mcu/${CONFIG_SOC_SERIES}
15+
)
16+
17+
zephyr_include_directories(${include_dirs})
18+
19+
# Optional build base on feature configuration
20+
zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_IOPORT
21+
fsp/src/${SOC_SERIES_PREFIX}/r_ioport/r_ioport.c)
22+
23+
zephyr_library_sources_ifdef(CONFIG_USE_RZ_FSP_SCIF_UART
24+
fsp/src/${SOC_SERIES_PREFIX}/r_scif_uart/r_scif_uart.c)

drivers/rz/README

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
Flexible Software Package (FSP)
2+
###############################
3+
4+
Origin:
5+
Renesas Electronics Corporation
6+
https://github.com/renesas/rzg-fsp
7+
8+
Status:
9+
version v2.1.0
10+
11+
Purpose:
12+
Flexible Software Package (FSP) for Renesas RZ MPU Family.
13+
14+
Description:
15+
This package is a snapshot from the RZ FSP software released by Renesas Electronics Corporation
16+
It contain the HAL and a set of CMSIS headers files for the Renesas RZ MPUs
17+
18+
Dependencies:
19+
None.
20+
21+
URL:
22+
https://github.com/renesas/rzg-fsp
23+
24+
Commit:
25+
8db06f881784144e86361b1266ac4d3c026f6ad8
26+
27+
Maintained-by:
28+
Renesas Electronics Corporation
29+
30+
License:
31+
BSD-3-Clause
32+
33+
License Link:
34+
https://opensource.org/licenses/BSD-3-Clause

drivers/rz/fsp/inc/api/r_ioport_api.h

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
/*
2+
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
*/
6+
7+
/*******************************************************************************************************************//**
8+
* @ingroup RENESAS_INTERFACES
9+
* @defgroup IOPORT_API I/O Port Interface
10+
* @brief Interface for accessing I/O ports and configuring I/O functionality.
11+
*
12+
* @section IOPORT_API_SUMMARY Summary
13+
* The IOPort shared interface provides the ability to access the IOPorts of a device at both bit and port level.
14+
* Port and pin direction can be changed.
15+
*
16+
* IOPORT Interface description: @ref IOPORT
17+
*
18+
* @{
19+
**********************************************************************************************************************/
20+
21+
#ifndef R_IOPORT_API_H
22+
#define R_IOPORT_API_H
23+
24+
/***********************************************************************************************************************
25+
* Includes
26+
**********************************************************************************************************************/
27+
28+
/* Common error codes and definitions. */
29+
#include "bsp_api.h"
30+
31+
/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
32+
FSP_HEADER
33+
34+
/**********************************************************************************************************************
35+
* Macro definitions
36+
**********************************************************************************************************************/
37+
38+
/**********************************************************************************************************************
39+
* Typedef definitions
40+
**********************************************************************************************************************/
41+
42+
/** IO port type used with ports */
43+
typedef uint16_t ioport_size_t; ///< IO port size on this device
44+
45+
/** PFS writing enable/disable. */
46+
typedef enum e_ioport_pwpr
47+
{
48+
IOPORT_PFS_WRITE_DISABLE = 0, ///< Disable PFS write access
49+
IOPORT_PFS_WRITE_ENABLE = 1 ///< Enable PFS write access
50+
} ioport_pwpr_t;
51+
52+
/** Pin identifier and Pin Function Setting (PFS) value */
53+
typedef struct st_ioport_pin_cfg
54+
{
55+
uint32_t pin_cfg; ///< Pin PFS configuration - Use ioport_cfg_options_t parameters to configure
56+
bsp_io_port_pin_t pin; ///< Pin identifier
57+
} ioport_pin_cfg_t;
58+
59+
/** Multiple pin configuration data for loading into each GPIO register by R_IOPORT_Init() */
60+
typedef struct st_ioport_cfg
61+
{
62+
uint16_t number_of_pins; ///< Number of pins for which there is configuration data
63+
ioport_pin_cfg_t const * p_pin_cfg_data; ///< Pin configuration data
64+
const void * p_extend; ///< Pointer to hardware extend configuration
65+
} ioport_cfg_t;
66+
67+
/** IOPORT control block. Allocate an instance specific control block to pass into the IOPORT API calls.
68+
* @par Implemented as
69+
* - ioport_instance_ctrl_t
70+
*/
71+
typedef void ioport_ctrl_t;
72+
73+
/** IOPort driver structure. IOPort functions implemented at the HAL layer will follow this API. */
74+
typedef struct st_ioport_api
75+
{
76+
/** Initialize internal driver data and initial pin configurations. Called during startup. Do
77+
* not call this API during runtime. Use @ref ioport_api_t::pinsCfg for runtime reconfiguration of
78+
* multiple pins.
79+
* @par Implemented as
80+
* - @ref R_IOPORT_Open()
81+
* @param[in] p_cfg Pointer to pin configuration data array.
82+
*/
83+
fsp_err_t (* open)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg);
84+
85+
/** Close the API.
86+
* @par Implemented as
87+
* - @ref R_IOPORT_Close()
88+
*
89+
* @param[in] p_ctrl Pointer to control structure.
90+
**/
91+
fsp_err_t (* close)(ioport_ctrl_t * const p_ctrl);
92+
93+
/** Configure multiple pins.
94+
* @par Implemented as
95+
* - @ref R_IOPORT_PinsCfg()
96+
* @param[in] p_cfg Pointer to pin configuration data array.
97+
*/
98+
fsp_err_t (* pinsCfg)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg);
99+
100+
/** Configure settings for an individual pin.
101+
* @par Implemented as
102+
* - @ref R_IOPORT_PinCfg()
103+
* @param[in] pin Pin to be read.
104+
* @param[in] cfg Configuration options for the pin.
105+
*/
106+
fsp_err_t (* pinCfg)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg);
107+
108+
/** Read the event input data of the specified pin and return the level.
109+
* @par Implemented as
110+
* - @ref R_IOPORT_PinEventInputRead()
111+
* @param[in] pin Pin to be read.
112+
* @param[in] p_pin_event Pointer to return the event data.
113+
*/
114+
fsp_err_t (* pinEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event);
115+
116+
/** Write pin event data.
117+
* @par Implemented as
118+
* - @ref R_IOPORT_PinEventOutputWrite()
119+
* @param[in] pin Pin event data is to be written to.
120+
* @param[in] pin_value Level to be written to pin output event.
121+
*/
122+
fsp_err_t (* pinEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value);
123+
124+
/** Read level of a pin.
125+
* @par Implemented as
126+
* - @ref R_IOPORT_PinRead()
127+
* @param[in] pin Pin to be read.
128+
* @param[in] p_pin_value Pointer to return the pin level.
129+
*/
130+
fsp_err_t (* pinRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value);
131+
132+
/** Write specified level to a pin.
133+
* @par Implemented as
134+
* - @ref R_IOPORT_PinWrite()
135+
* @param[in] pin Pin to be written to.
136+
* @param[in] level State to be written to the pin.
137+
*/
138+
fsp_err_t (* pinWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level);
139+
140+
/** Set the direction of one or more pins on a port.
141+
* @par Implemented as
142+
* - @ref R_IOPORT_PortDirectionSet()
143+
* @param[in] port Port being configured.
144+
* @param[in] direction_values Value controlling direction of pins on port
145+
* (3 - output (input enable), 2 - output (input disable), 1 input, 0 - Hi-Z).
146+
* @param[in] mask Mask controlling which pins on the port are to be configured.
147+
*/
148+
fsp_err_t (* portDirectionSet)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t direction_values,
149+
ioport_size_t mask);
150+
151+
/** Read captured event data for a port.
152+
* @par Implemented as
153+
* - @ref R_IOPORT_PortEventInputRead()
154+
* @param[in] port Port to be read.
155+
* @param[in] p_event_data Pointer to return the event data.
156+
*/
157+
fsp_err_t (* portEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data);
158+
159+
/** Write event output data for a port.
160+
* @par Implemented as
161+
* - @ref R_IOPORT_PortEventOutputWrite()
162+
* @param[in] port Port event data will be written to.
163+
* @param[in] event_data Data to be written as event data to specified port.
164+
* @param[in] mask_value Each bit set to 1 in the mask corresponds to that bit's value in event data.
165+
* being written to port.
166+
*/
167+
fsp_err_t (* portEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t event_data,
168+
ioport_size_t mask_value);
169+
170+
/** Read states of pins on the specified port.
171+
* @par Implemented as
172+
* - @ref R_IOPORT_PortRead()
173+
* @param[in] port Port to be read.
174+
* @param[in] p_port_value Pointer to return the port value.
175+
*/
176+
fsp_err_t (* portRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value);
177+
178+
/** Write to multiple pins on a port.
179+
* @par Implemented as
180+
* - @ref R_IOPORT_PortWrite()
181+
* @param[in] port Port to be written to.
182+
* @param[in] value Value to be written to the port.
183+
* @param[in] mask Mask controlling which pins on the port are written to.
184+
*/
185+
fsp_err_t (* portWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask);
186+
} ioport_api_t;
187+
188+
/** This structure encompasses everything that is needed to use an instance of this interface. */
189+
typedef struct st_ioport_instance
190+
{
191+
ioport_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance
192+
ioport_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance
193+
ioport_api_t const * p_api; ///< Pointer to the API structure for this instance
194+
} ioport_instance_t;
195+
196+
/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
197+
FSP_FOOTER
198+
199+
#endif
200+
201+
/*******************************************************************************************************************//**
202+
* @} (end defgroup IOPORT_API)
203+
**********************************************************************************************************************/

0 commit comments

Comments
 (0)