blob: 90b6d2acac34769752803604eff6dc4a32ad72c6 [file] [log] [blame]
/*
* Copyright (c) 2024 Antmicro <www.antmicro.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_SOC_ARM_XLNX_ZYNQMP_SOC_PINCTRL_H_
#define ZEPHYR_SOC_ARM_XLNX_ZYNQMP_SOC_PINCTRL_H_
#include <zephyr/devicetree.h>
#include <zephyr/sys/util.h>
#include <zephyr/types.h>
#define MIO_L0_SEL BIT(1)
#define MIO_L1_SEL BIT(2)
#define MIO_L2_SEL GENMASK(4, 3)
#define MIO_L3_SEL GENMASK(7, 5)
/* All other selectors should be zeroed and FIELD_PREP does that */
#define UARTX_SEL FIELD_PREP(MIO_L3_SEL, 6)
/*
* Each peripheral PINCTRL mask is defined as such:
* [7 ... 0] MIO register number
* [15 ... 8] Function, mapped as:
* 1 - UART
*
* The function numbers serve as an enumerator in the pinctrl driver
* and the defines controling those are listed in `pinctrl-zynqmp.h`.
* Currently, one function for UART is specified and subsequent ones
* can be added when the need arises.
*/
typedef struct pinctrl_soc_pin_t {
uint32_t pin;
uint32_t func;
} pinctrl_soc_pin_t;
#define ZYNQMP_GET_PIN(pinctrl) (pinctrl & 0xff)
#define ZYNQMP_GET_FUNC(pinctrl) ((pinctrl >> 8) & 0xff)
#define Z_PINCTRL_STATE_PIN_INIT(node_id, prop, idx) \
{ \
.pin = ZYNQMP_GET_PIN(DT_PROP_BY_IDX(node_id, prop, idx)), \
.func = ZYNQMP_GET_FUNC(DT_PROP_BY_IDX(node_id, prop, idx)), \
},
#define Z_PINCTRL_STATE_PINS_INIT(node_id, prop) { \
DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop), \
DT_FOREACH_PROP_ELEM, pinmux, \
Z_PINCTRL_STATE_PIN_INIT)}
#endif