/*
 * Copyright (c) 2021 Microchip Technology Inc. All Rights Reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _MICROCHIP_XEC_SOC_DT_H_
#define _MICROCHIP_XEC_SOC_DT_H_

#include <zephyr/devicetree.h>

#define MCHP_XEC_PIN_FEAT_EN	0x1
#define MCHP_XEC_NO_PULL	0x1
#define MCHP_XEC_PULL_UP	0x1
#define MCHP_XEC_PULL_DOWN	0x1
#define MCHP_XEC_PUSH_PULL	0x1
#define MCHP_XEC_OPEN_DRAIN	0x1
#define MCHP_XEC_OUT_DIS	0x1
#define MCHP_XEC_OUT_EN		0x1
#define MCHP_XEC_OUT_DRV_LOW	0x1
#define MCHP_XEC_OUT_DRV_HIGH	0x1
#define MCHP_XEC_DRVSTR_NONE	0x0
#define MCHP_XEC_DRVSTR_2MA	0x1
#define MCHP_XEC_DRVSTR_4MA	0x2
#define MCHP_XEC_DRVSTR_8MA	0x3
#define MCHP_XEC_DRVSTR_12MA	0x4
#define MCHP_XEC_FUNC_INVERT	0x1
#define MCHP_XEC_PIN_INPUT_DIS	0x1

#define MCHP_DT_ESPI_VW_FLAG_STATUS_POS		0
#define MCHP_DT_ESPI_VW_FLAG_DIR_POS		1
#define MCHP_DT_ESPI_VW_FLAG_RST_STATE_POS	2
#define MCHP_DT_ESPI_VW_FLAG_RST_STATE_MSK0	0x3
#define MCHP_DT_ESPI_VW_FLAG_RST_SRC_POS	4
#define MCHP_DT_ESPI_VW_FLAG_RST_SRC_MSK0	0x7

#define MCHP_DT_NODE_FROM_VWTABLE(name) DT_CHILD(DT_PATH(mchp_xec_espi_vw_routing), name)
#define MCHP_DT_VW_NODE_HAS_STATUS(name) DT_NODE_HAS_STATUS(MCHP_DT_NODE_FROM_VWTABLE(name), okay)

/* Macro to store eSPI virtual wire DT flags
 * b[0] = DT status property 0 is disabled, 1 enabled,
 * b[1] = VW direction 0(EC target to host controller), 1(host controller to EC target)
 * b[3:2] = default virtual wire state 0(HW default), 1(low), 2(high)
 * b[6:4] = virtual wire state reset event:
 *          0(HW default), 1(ESPI_RESET), 2(RESET_SYS), 3(RESET_SIO), 4(PLTRST)
 */
#define MCHP_DT_ESPI_VW_FLAGS(vw)                                                                  \
	((uint8_t)(MCHP_DT_VW_NODE_HAS_STATUS(vw)) & 0x01U) |                                      \
	((((uint8_t)DT_PROP_BY_IDX(MCHP_DT_NODE_FROM_VWTABLE(vw), vw_reg, 1)) & 0x1) << 1) |       \
	((((uint8_t)DT_ENUM_IDX_OR(MCHP_DT_NODE_FROM_VWTABLE(vw), reset_state, 0)) & 0x3) << 2) |  \
	((((uint8_t)DT_ENUM_IDX_OR(MCHP_DT_NODE_FROM_VWTABLE(vw), reset_source, 0)) & 0x7) << 4)

/* Macro for the eSPI driver VW table entries.
 * e is a symbol from enum espi_vwire_signal.
 * vw is a node from the XEC ESPI VW routing file.
 */
#define MCHP_DT_ESPI_VW_ENTRY(e, vw)							\
[(e)] = {										\
	.host_idx = DT_PROP_BY_IDX(MCHP_DT_NODE_FROM_VWTABLE(vw), vw_reg, 0),		\
	.bit = DT_PROP_BY_IDX(MCHP_DT_NODE_FROM_VWTABLE(vw), vw_reg, 3),		\
	.xec_reg_idx = DT_PROP_BY_IDX(MCHP_DT_NODE_FROM_VWTABLE(vw), vw_reg, 2),	\
	.flags = MCHP_DT_ESPI_VW_FLAGS(vw),						\
}

#endif /* _MICROCHIP_XEC_SOC_DT_H_ */
