/*
 * Copyright (c) 2021 Nuvoton Technology Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/dt-bindings/espi/npcx_espi.h>

/*
 *                Nuvoton NPCX7 eSPI Virtual Wires Mapping Table
 * |--------------------------------------------------------------------------|
 * | VW idx | SLV reg | Wire Bit 3   | Wire Bit 2   | Wire Bit 1| Wire Bit 0  |
 * |--------------------------------------------------------------------------|
 * |                 Input (Master-to-Slave) Virtual Wires                    |
 * |--------------------------------------------------------------------------|
 * | 02h[S] | VWEVMS0 | Reserved     | SLP_S5#      | SLP_S4#   | SLP_S3#     |
 * | 03h[S] | VWEVMS1 | Reserved     | OOB_RST_WARN | PLTRST#   | SUS_STAT#   |
 * | 07h[S] | VWEVMS2 | Reserved     | Reserved     | Reserved  | HOS_RST_WARN|
 * | 41h[P] | VWEVMS3 | SLP_A#       | Reserved     | SUS_PDNACK| SUS_WARN#   |
 * | 42h[P] | VWEVMS4 | Reserved     | Reserved     | SLP_WLAN# | SLP_LAN#    |
 * |--------------------------------------------------------------------------|
 * |                Output (Slave-to-Master) Virtual Wires                    |
 * |--------------------------------------------------------------------------|
 * | 04h[S] | VWEVSM0 | PME#         | WAKE#        | Reserved  | OOB_RST_ACK |
 * | 05h[S] | VWEVSM1 | SLV_BOOT_STS | ERR_NONFATAL | ERR_FATAL | SLV_BT_DONE |
 * | 06h[S] | VWEVSM2 | HOST_RST_ACK | Reserved     | SMI#      | SCI#        |
 * | 40h[P] | VWEVSM3 | Reserved     | Reserved     | Reserved  | SUS_ACK#    |
 * |--------------------------------------------------------------------------|
 * |       Output (Slave-to-Master) Virtual Wires (High at reset state)       |
 * |--------------------------------------------------------------------------|
 * | 50h[P] | VWGPSM0 | SLV_GPIO_3   | SLV_GPIO_2   | SLV_GPIO_1| SLV_GPIO_0  |
 * | 51h[P] | VWGPSM1 | SLV_GPIO_7   | SLV_GPIO_6   | SLV_GPIO_5| SLV_GPIO_4  |
 * |--------------------------------------------------------------------------|
 *  [S] System-/[P] Platform-Specific Virtual Wires
 */

/ {
	npcx-espi-vws-map {
		compatible = "nuvoton,npcx-espi-vw-conf";

		/* eSPI Virtual Vire (VW) input configuration */
		/* index 02h (In) */
		vw-slp-s3 {
			vw-reg = <NPCX_VWEVMS0 0x01>;
			vw-wui = <&wui_vw_slp_s3>;
		};
		vw-slp-s4 {
			vw-reg = <NPCX_VWEVMS0 0x02>;
			vw-wui = <&wui_vw_slp_s4>;
		};
		vw-slp-s5 {
			vw-reg = <NPCX_VWEVMS0 0x04>;
			vw-wui = <&wui_vw_slp_s5>;
		};

		/* index 03h (In) */
		vw-sus-stat {
			vw-reg = <NPCX_VWEVMS1 0x01>;
			vw-wui = <&wui_vw_sus_stat>;
		};
		vw-plt-rst {
			vw-reg = <NPCX_VWEVMS1 0x02>;
			vw-wui = <&wui_vw_plt_rst>;
		};
		vw-oob-rst-warn {
			vw-reg = <NPCX_VWEVMS1 0x04>;
			vw-wui = <&wui_vw_oob_rst_warn>;
		};

		/* index 07h (In) */
		vw-host-rst-warn {
			vw-reg = <NPCX_VWEVMS2 0x01>;
			vw-wui = <&wui_vw_host_rst_warn>;
		};

		/* index 41h (In) */
		vw-sus-warn {
			vw-reg = <NPCX_VWEVMS3 0x01>;
			vw-wui = <&wui_vw_sus_warn>;
		};
		vw-sus-pwrdn-ack {
			vw-reg = <NPCX_VWEVMS3 0x02>;
			vw-wui = <&wui_vw_sus_pwrdn_ack>;
		};
		vw-slp-a {
			vw-reg = <NPCX_VWEVMS3 0x08>;
			vw-wui = <&wui_vw_slp_a>;
		};

		/* index 42h (In) */
		vw-slp-lan {
			vw-reg = <NPCX_VWEVMS4 0x01>;
			vw-wui = <&wui_vw_slp_lan>;
		};
		vw-slp-wlan {
			vw-reg = <NPCX_VWEVMS4 0x02>;
			vw-wui = <&wui_vw_slp_wlan>;
		};

		/* eSPI Virtual Vire (VW) output configuration */
		/* index 04h (Out) */
		vw-oob-rst-ack {
			vw-reg = <NPCX_VWEVSM0 0x01>;
		};
		vw-wake {
			vw-reg = <NPCX_VWEVSM0 0x04>;
		};
		vw-pme {
			vw-reg = <NPCX_VWEVSM0 0x08>;
		};

		/* index 05h (Out) */
		vw-slv-boot-done {
			vw-reg = <NPCX_VWEVSM1 0x01>;
		};
		vw-err-fatal {
			vw-reg = <NPCX_VWEVSM1 0x02>;
		};
		vw-err-non-fatal {
			vw-reg = <NPCX_VWEVSM1 0x04>;
		};
		vw-slv-boot-sts-with-done {
			/*
			 * SLAVE_BOOT_DONE & SLAVE_LOAD_STS bits (bit 0 & bit 3)
			 * have to be sent together. Hence its bitmask is 0x09.
			 */
			vw-reg = <NPCX_VWEVSM1 0x09>;
		};

		/* index 06h (Out) */
		vw-sci {
			vw-reg = <NPCX_VWEVSM2 0x01>;
		};
		vw-smi {
			vw-reg = <NPCX_VWEVSM2 0x02>;
		};
		vw-host-rst-ack {
			vw-reg = <NPCX_VWEVSM2 0x08>;
		};

		/* index 40h (Out) */
		vw-sus-ack {
			vw-reg = <NPCX_VWEVSM3 0x01>;
		};

		/*
		 * Virtual wires for platform level usage (High at Reset state)
		 */
		/* index 50h (Out) */
		vw_slv_gpio_0 {
			vw-reg = <NPCX_VWGPSM0 0x01>;
		};
		vw_slv_gpio_1 {
			vw-reg = <NPCX_VWGPSM0 0x02>;
		};
		vw_slv_gpio_2 {
			vw-reg = <NPCX_VWGPSM0 0x04>;
		};
		vw_slv_gpio_3 {
			vw-reg = <NPCX_VWGPSM0 0x08>;
		};

		/* index 51h (Out) */
		vw_slv_gpio_4 {
			vw-reg = <NPCX_VWGPSM1 0x01>;
		};
		vw_slv_gpio_5 {
			vw-reg = <NPCX_VWGPSM1 0x02>;
		};
		vw_slv_gpio_6 {
			vw-reg = <NPCX_VWGPSM1 0x04>;
		};
		vw_slv_gpio_7 {
			vw-reg = <NPCX_VWGPSM1 0x08>;
		};
	};
};
