<p>Tristan Hsieh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/29193">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mediatek/mt8183: add pmic and pwrap support<br><br>BUG=b:80501386<br>BRANCH=none<br>TEST=Boots correctly on Kukui<br><br>Change-Id: Ie16c2ba83dae1849aa39185c9577c2a9a2e33fa3<br>Signed-off-by: Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com><br>---<br>M src/soc/mediatek/mt8183/Makefile.inc<br>M src/soc/mediatek/mt8183/include/soc/addressmap.h<br>A src/soc/mediatek/mt8183/include/soc/mt6358.h<br>A src/soc/mediatek/mt8183/include/soc/pmic_wrap.h<br>A src/soc/mediatek/mt8183/mt6358.c<br>A src/soc/mediatek/mt8183/pmic_wrap.c<br>M src/soc/mediatek/mt8183/soc.c<br>7 files changed, 1,477 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/93/29193/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/mediatek/mt8183/Makefile.inc b/src/soc/mediatek/mt8183/Makefile.inc</span><br><span>index 4a5490b..2b370cd 100644</span><br><span>--- a/src/soc/mediatek/mt8183/Makefile.inc</span><br><span>+++ b/src/soc/mediatek/mt8183/Makefile.inc</span><br><span>@@ -39,6 +39,8 @@</span><br><span> ramstage-$(CONFIG_DRIVERS_UART) += ../common/uart.c</span><br><span> ramstage-y += ../common/usb.c</span><br><span> ramstage-y += ../common/wdt.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += mt6358.c</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += pmic_wrap.c</span><br><span> </span><br><span> CPPFLAGS_common += -Isrc/soc/mediatek/mt8183/include</span><br><span> CPPFLAGS_common += -Isrc/soc/mediatek/common/include</span><br><span>diff --git a/src/soc/mediatek/mt8183/include/soc/addressmap.h b/src/soc/mediatek/mt8183/include/soc/addressmap.h</span><br><span>index 1ba9cc8..b11d126 100644</span><br><span>--- a/src/soc/mediatek/mt8183/include/soc/addressmap.h</span><br><span>+++ b/src/soc/mediatek/mt8183/include/soc/addressmap.h</span><br><span>@@ -26,9 +26,10 @@</span><br><span>      INFRACFG_AO_BASE        = IO_PHYS + 0x00001000,</span><br><span>      GPIO_BASE               = IO_PHYS + 0x00005000,</span><br><span>      SPM_BASE                = IO_PHYS + 0x00006000,</span><br><span style="color: hsl(0, 100%, 40%);">- RGU_BASE                = IO_PHYS + 0x00007000,</span><br><span style="color: hsl(120, 100%, 40%);">+       RGU_BASE                = IO_PHYS + 0x00007000,</span><br><span>      GPT_BASE                = IO_PHYS + 0x00008000,</span><br><span>      APMIXED_BASE            = IO_PHYS + 0x0000C000,</span><br><span style="color: hsl(120, 100%, 40%);">+       PWRAP_BASE              = IO_PHYS + 0x0000D000,</span><br><span>      EMI_BASE                = IO_PHYS + 0x00219000,</span><br><span>      EMI_MPU_BASE            = IO_PHYS + 0x00226000,</span><br><span>      DRAMC_CH_BASE           = IO_PHYS + 0x00228000,</span><br><span>diff --git a/src/soc/mediatek/mt8183/include/soc/mt6358.h b/src/soc/mediatek/mt8183/include/soc/mt6358.h</span><br><span>new file mode 100644</span><br><span>index 0000000..137b62c</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/mediatek/mt8183/include/soc/mt6358.h</span><br><span>@@ -0,0 +1,32 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 MediaTek Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef __SOC_MEDIATEK_MT6358_H__</span><br><span style="color: hsl(120, 100%, 40%);">+#define __SOC_MEDIATEK_MT6358_H__</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+     PMIC_SWCID                    = 0x000A,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_TOP_RST_MISC             = 0x014C,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_TOP_RST_MISC_SET         = 0x014E,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_TOP_RST_MISC_CLR         = 0x0150,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_SMPS_ANA_CON0            = 0x1808,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_TOP_TMA_KEY              = 0x03A8,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_CPSDSA4                  = 0x0A2E,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mt6358_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+u32 pmic_read_interface(u32 reg, u32 mask, u32 shift);</span><br><span style="color: hsl(120, 100%, 40%);">+void pmic_config_interface(u32 reg, u32 val, u32 mask, u32 shift);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* __SOC_MEDIATEK_MT6358_H__ */</span><br><span>diff --git a/src/soc/mediatek/mt8183/include/soc/pmic_wrap.h b/src/soc/mediatek/mt8183/include/soc/pmic_wrap.h</span><br><span>new file mode 100644</span><br><span>index 0000000..4dd7628</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/mediatek/mt8183/include/soc/pmic_wrap.h</span><br><span>@@ -0,0 +1,672 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 MediaTek Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef __SOC_MEDIATEK_MT8183_PMIC_WRAP_H__</span><br><span style="color: hsl(120, 100%, 40%);">+#define __SOC_MEDIATEK_MT8183_PMIC_WRAP_H__</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/addressmap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <types.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define WRAP_RD32(addr)            (*(volatile unsigned int *)(addr))</span><br><span style="color: hsl(120, 100%, 40%);">+#define WRAP_WR32(addr,data)       ((*(volatile unsigned int *)(addr)) = (unsigned int)data)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_read(u32 adr, u32 *rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_write(u32 adr, u32 wdata);</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct mt8183_pwrap_regs {</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 mux_sel;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 wrap_en;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 dio_en;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 si_sample_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 si_sample_ctrl_ulposc;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 rddmy;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 cshext_write;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 cshext_read;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 cslext_write;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 cslext_read;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 ext_ck_write;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 ext_ck_read;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 staupd_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 staupd_grpen;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 eint_sta0_adr;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 eint_sta1_adr;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 eint_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 eint_clr;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 eint_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 staupd_man_trig;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 staupd_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wrap_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 harb_init;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 harb_hprio;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 hprio_arb_en;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 harb_sta0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 harb_sta1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 harb_sta2;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 man_en;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 man_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 man_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 man_vldclr;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wacs0_en;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 init_done0;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wacs1_en;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 init_done1;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wacs2_en;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 init_done2;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wacs3_en;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 init_done3;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 wacs_p2p_en;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 init_done_p2p;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 wacs_md32_en;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 init_done_md32;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 int0_en;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 int0_flg_raw;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 int0_flg;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 int0_clr;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 int1_en;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 int1_flg_raw;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 int1_flg;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 int1_clr;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 sig_adr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 sig_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 sig_value;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 sig_errval;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 crc_en;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 timer_en;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 timer_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wdt_unit;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdt_src_en_0;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 wdt_src_en_1;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 wdt_flg_0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wdt_flg_1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_int_sel;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 dvfs_adr0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata0;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata1;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr2;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata2;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr3;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata3;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr4;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata4;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr5;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata5;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr6;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata6;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr7;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata7;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr8;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata8;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr9;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvfs_wdata9;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dvfs_adr10;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata10;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dvfs_adr11;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata11;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dvfs_adr12;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata12;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dvfs_adr13;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata13;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dvfs_adr14;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata14;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dvfs_adr15;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 dvfs_wdata15;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dcxo_enable;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 dcxo_conn_adr0;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 dcxo_conn_wdata0;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 dcxo_conn_adr1;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 dcxo_conn_wdata1;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 dcxo_nfc_adr0;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 dcxo_nfc_wdata0;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 dcxo_nfc_adr1;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 dcxo_nfc_wdata1;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 spminf_sta_0;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 spminf_sta_1;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 spminf_backup_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 scpinf_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 cipher_key_sel;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cipher_iv_sel;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 cipher_en;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 cipher_rdy;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 cipher_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 cipher_swrst;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 dcm_en;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 dcm_spi_dbc_prd;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 dcm_dbc_prd;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 int_gps_auxadc_cmd_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 int_gps_auxadc_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 int_gps_auxadc_rdata_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 ext_gps_auxadc_rdata_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 gpsinf_0_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 gpsinf_1_sta;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 md_adcinf_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_latest_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 md_auxadc_rdata_wp_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_0_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_1_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_2_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_3_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_4_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_5_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_6_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_7_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_8_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_9_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 md_auxadc_rdata_10_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_11_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_12_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_13_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_14_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_15_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_16_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_17_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_18_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_19_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_20_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_21_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_22_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_23_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_24_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_25_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_26_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_27_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_28_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_29_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_30_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_auxadc_rdata_31_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 md_adcinf_0_sta_0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 md_adcinf_0_sta_1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 md_adcinf_1_sta_0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 md_adcinf_1_sta_1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 swrst;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 spm_sleep_gating_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 scp_sleep_gating_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 priority_user_sel_0;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 priority_user_sel_1;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 priority_user_sel_2;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 priority_user_sel_3;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 priority_user_sel_4;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 arbiter_out_sel_0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 arbiter_out_sel_1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 arbiter_out_sel_2;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 arbiter_out_sel_3;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 arbiter_out_sel_4;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 starv_counter_0;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_1;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_2;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_3;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_4;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_5;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_6;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_7;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_8;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_9;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_10;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_11;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_12;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_13;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_14;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_15;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_16;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 starv_counter_0_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_1_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_2_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_3_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_4_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_5_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_6_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_7_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_8_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_9_status;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 starv_counter_10_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_11_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_12_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_13_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_14_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_15_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_16_status;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 starv_counter_clr;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 starv_prio_status;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 monitor_ctrl_0;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 monitor_ctrl_1;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 monitor_ctrl_2;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 monitor_ctrl_3;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 channel_sequence_0;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 channel_sequence_1;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 channel_sequence_2;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 channel_sequence_3;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 cmd_sequence_0;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_1;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_2;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_3;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_4;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_5;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_6;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 cmd_sequence_7;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 wdata_sequence_0;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_1;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_2;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_3;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_4;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_5;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_6;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 wdata_sequence_7;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 debug_sw_driver_0;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_sw_driver_1;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_sw_driver_2;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_sw_driver_3;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_sw_driver_4;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 debug_sw_driver_5;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 bwc_options;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 reserved1[524];</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 wacs0_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs0_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 wacs0_vldclr;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 reserved2;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs1_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs1_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 wacs1_vldclr;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 reserved3;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs2_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs2_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 wacs2_vldclr;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 reserved4;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs3_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 wacs3_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 wacs3_vldclr;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, mux_sel, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wrap_en, 0x4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dio_en, 0x8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, si_sample_ctrl, 0xC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, si_sample_ctrl_ulposc, 0x10);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, rddmy, 0x14);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cshext_write, 0x18);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cshext_read, 0x1C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cslext_write, 0x20);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cslext_read, 0x24);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, ext_ck_write, 0x28);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, ext_ck_read, 0x2C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, staupd_ctrl, 0x30);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, staupd_grpen, 0x34);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, eint_sta0_adr, 0x38);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, eint_sta1_adr, 0x3C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, eint_sta, 0x40);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, eint_clr, 0x44);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, eint_ctrl, 0x48);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, staupd_man_trig, 0x4C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, staupd_sta, 0x50);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wrap_sta, 0x54);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, harb_init, 0x58);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, harb_hprio, 0x5C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, hprio_arb_en, 0x60);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, harb_sta0, 0x64);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, harb_sta1, 0x68);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, harb_sta2, 0x6C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, man_en, 0x70);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, man_cmd, 0x74);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, man_rdata, 0x78);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, man_vldclr, 0x7C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs0_en, 0x80);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done0, 0x84);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs1_en, 0x88);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done1, 0x8C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs2_en, 0x90);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done2, 0x94);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs3_en, 0x98);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done3, 0x9C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs_p2p_en, 0xA0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done_p2p, 0xA4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs_md32_en, 0xA8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, init_done_md32, 0xAC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int0_en, 0xB0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int0_flg_raw, 0xB4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int0_flg, 0xB8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int0_clr, 0xBC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int1_en, 0xC0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int1_flg_raw, 0xC4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int1_flg, 0xC8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int1_clr, 0xCC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, sig_adr, 0xD0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, sig_mode, 0xD4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, sig_value, 0xD8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, sig_errval, 0xDC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, crc_en, 0xE0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, timer_en, 0xE4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, timer_sta, 0xE8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdt_unit, 0xEC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdt_src_en_0, 0xF0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdt_src_en_1, 0xF4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdt_flg_0, 0xF8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdt_flg_1, 0xFC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_int_sel, 0x100);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr0, 0x104);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata0, 0x108);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr1, 0x10C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata1, 0x110);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr2, 0x114);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata2, 0x118);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr3, 0x11C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata3, 0x120);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr4, 0x124);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata4, 0x128);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr5, 0x12C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata5, 0x130);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr6, 0x134);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata6, 0x138);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr7, 0x13C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata7, 0x140);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr8, 0x144);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata8, 0x148);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr9, 0x14C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata9, 0x150);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr10, 0x154);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata10, 0x158);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr11, 0x15C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata11, 0x160);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr12, 0x164);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata12, 0x168);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr13, 0x16C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata13, 0x170);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr14, 0x174);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata14, 0x178);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_adr15, 0x17C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dvfs_wdata15, 0x180);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_enable, 0x184);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_conn_adr0, 0x188);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_conn_wdata0, 0x18C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_conn_adr1, 0x190);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_conn_wdata1, 0x194);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_nfc_adr0, 0x198);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_nfc_wdata0, 0x19C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_nfc_adr1, 0x1A0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcxo_nfc_wdata1, 0x1A4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, spminf_sta_0, 0x1A8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, spminf_sta_1, 0x1AC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, spminf_backup_sta, 0x1B0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, scpinf_sta, 0x1B4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_key_sel, 0x1B8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_iv_sel, 0x1BC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_en, 0x1C0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_rdy, 0x1C4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_mode, 0x1C8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cipher_swrst, 0x1CC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcm_en, 0x1D0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcm_spi_dbc_prd, 0x1D4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, dcm_dbc_prd, 0x1D8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int_gps_auxadc_cmd_addr, 0x1DC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int_gps_auxadc_cmd, 0x1E0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, int_gps_auxadc_rdata_addr, 0x1E4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, ext_gps_auxadc_rdata_addr, 0x1E8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, gpsinf_0_sta, 0x1EC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, gpsinf_1_sta, 0x1F0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_adcinf_ctrl, 0x1F4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_latest_addr, 0x1F8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_wp_addr, 0x1FC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_0_addr, 0x200);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_1_addr, 0x204);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_2_addr, 0x208);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_3_addr, 0x20C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_4_addr, 0x210);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_5_addr, 0x214);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_6_addr, 0x218);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_7_addr, 0x21C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_8_addr, 0x220);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_9_addr, 0x224);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_10_addr, 0x228);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_11_addr, 0x22C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_12_addr, 0x230);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_13_addr, 0x234);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_14_addr, 0x238);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_15_addr, 0x23C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_16_addr, 0x240);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_17_addr, 0x244);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_18_addr, 0x248);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_19_addr, 0x24C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_20_addr, 0x250);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_21_addr, 0x254);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_22_addr, 0x258);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_23_addr, 0x25C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_24_addr, 0x260);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_25_addr, 0x264);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_26_addr, 0x268);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_27_addr, 0x26C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_28_addr, 0x270);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_29_addr, 0x274);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_30_addr, 0x278);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_auxadc_rdata_31_addr, 0x27C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_adcinf_0_sta_0, 0x280);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_adcinf_0_sta_1, 0x284);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_adcinf_1_sta_0, 0x288);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, md_adcinf_1_sta_1, 0x28C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, swrst, 0x290);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, spm_sleep_gating_ctrl, 0x294);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, scp_sleep_gating_ctrl, 0x298);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, priority_user_sel_0, 0x29C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, priority_user_sel_1, 0x2A0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, priority_user_sel_2, 0x2A4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, priority_user_sel_3, 0x2A8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, priority_user_sel_4, 0x2AC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, arbiter_out_sel_0, 0x2B0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, arbiter_out_sel_1, 0x2B4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, arbiter_out_sel_2, 0x2B8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, arbiter_out_sel_3, 0x2BC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, arbiter_out_sel_4, 0x2C0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_0, 0x2C4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_1, 0x2C8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_2, 0x2CC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_3, 0x2D0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_4, 0x2D4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_5, 0x2D8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_6, 0x2DC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_7, 0x2E0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_8, 0x2E4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_9, 0x2E8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_10, 0x2EC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_11, 0x2F0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_12, 0x2F4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_13, 0x2F8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_14, 0x2FC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_15, 0x300);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_16, 0x304);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_0_status, 0x308);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_1_status, 0x30C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_2_status, 0x310);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_3_status, 0x314);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_4_status, 0x318);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_5_status, 0x31C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_6_status, 0x320);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_7_status, 0x324);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_8_status, 0x328);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_9_status, 0x32C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_10_status, 0x330);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_11_status, 0x334);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_12_status, 0x338);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_13_status, 0x33C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_14_status, 0x340);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_15_status, 0x344);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_16_status, 0x348);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_counter_clr, 0x34C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, starv_prio_status, 0x350);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, monitor_ctrl_0, 0x354);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, monitor_ctrl_1, 0x358);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, monitor_ctrl_2, 0x35C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, monitor_ctrl_3, 0x360);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, channel_sequence_0, 0x364);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, channel_sequence_1, 0x368);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, channel_sequence_2, 0x36C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, channel_sequence_3, 0x370);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_0, 0x374);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_1, 0x378);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_2, 0x37C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_3, 0x380);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_4, 0x384);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_5, 0x388);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_6, 0x38C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, cmd_sequence_7, 0x390);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_0, 0x394);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_1, 0x398);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_2, 0x39C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_3, 0x3A0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_4, 0x3A4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_5, 0x3A8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_6, 0x3AC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wdata_sequence_7, 0x3B0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_0, 0x3B4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_1, 0x3B8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_2, 0x3BC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_3, 0x3C0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_4, 0x3C4);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, debug_sw_driver_5, 0x3C8);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, bwc_options, 0x3CC);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, reserved1, 0x3D0);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs0_cmd, 0xC00);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs0_rdata, 0xC04);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs0_vldclr, 0xC08);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, reserved2, 0xC0C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs1_cmd, 0xC10);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs1_rdata, 0xC14);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs1_vldclr, 0xC18);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, reserved3, 0xC1C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs2_cmd, 0xC20);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs2_rdata, 0xC24);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs2_vldclr, 0xC28);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, reserved4, 0xC2C);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs3_cmd, 0xC30);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs3_rdata, 0xC34);</span><br><span style="color: hsl(120, 100%, 40%);">+check_member(mt8183_pwrap_regs, wacs3_vldclr, 0xC38);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct mt8183_pwrap_regs * const mt8183_pwrap = (void *)PWRAP_BASE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* timeout setting */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+     TIMEOUT_READ_US        = 255,</span><br><span style="color: hsl(120, 100%, 40%);">+ TIMEOUT_WAIT_IDLE_US   = 255</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+    WACS2 = 1 << 2</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* PMIC registers */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+      PMIC_BASE                     = 0x0000,</span><br><span style="color: hsl(120, 100%, 40%);">+       PMIC_SMT_CON1                 = PMIC_BASE + 0x0030,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DRV_CON1                 = PMIC_BASE + 0x0038,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_FILTER_CON0              = PMIC_BASE + 0x0040,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_GPIO_PULLEN0_CLR         = PMIC_BASE + 0x0098,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON0              = PMIC_BASE + 0x0408,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_RECORD0           = PMIC_BASE + 0x040A,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_DIO_EN               = PMIC_BASE + 0x040C,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_READ_TEST            = PMIC_BASE + 0x040E,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_WRITE_TEST           = PMIC_BASE + 0x0410,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_CRC_EN               = PMIC_BASE + 0x0414,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_CRC_VAL              = PMIC_BASE + 0x0416,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_DEW_RDDMY_NO             = PMIC_BASE + 0x0426,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_CPU_INT_STA              = PMIC_BASE + 0x042E,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON2              = PMIC_BASE + 0x0432,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON3              = PMIC_BASE + 0x0434,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON4              = PMIC_BASE + 0x0436,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON5              = PMIC_BASE + 0x0438,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON6              = PMIC_BASE + 0x043A,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON7              = PMIC_BASE + 0x043C,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON8              = PMIC_BASE + 0x043E,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_RG_SPI_CON13             = PMIC_BASE + 0x0448,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_SPISLV_KEY               = PMIC_BASE + 0x044A,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_PPCCTL0                  = PMIC_BASE + 0x0A08,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_ADC17             = PMIC_BASE + 0x10AA,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_ADC31             = PMIC_BASE + 0x10C6,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_ADC32             = PMIC_BASE + 0x10C8,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_ADC35             = PMIC_BASE + 0x10CE,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_RQST0             = PMIC_BASE + 0x1108,</span><br><span style="color: hsl(120, 100%, 40%);">+   PMIC_AUXADC_RQST1             = PMIC_BASE + 0x110A,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+     RDATA_WACS_RDATA_SHIFT = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   RDATA_WACS_FSM_SHIFT   = 16,</span><br><span style="color: hsl(120, 100%, 40%);">+  RDATA_SYNC_IDLE_SHIFT  = 20,</span><br><span style="color: hsl(120, 100%, 40%);">+  RDATA_INIT_DONE_SHIFT,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+  RDATA_WACS_RDATA_MASK = 0xffff,</span><br><span style="color: hsl(120, 100%, 40%);">+       RDATA_WACS_FSM_MASK   = 0x7,</span><br><span style="color: hsl(120, 100%, 40%);">+  RDATA_SYNC_IDLE_MASK  = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+  RDATA_INIT_DONE_MASK  = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* WACS_FSM */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+    WACS_FSM_IDLE     = 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+     WACS_FSM_REQ      = 0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+     WACS_FSM_WFDLE    = 0x04, /* wait for dle, wait for read data done */</span><br><span style="color: hsl(120, 100%, 40%);">+ WACS_FSM_WFVLDCLR = 0x06, /* finish read data, wait for valid flag</span><br><span style="color: hsl(120, 100%, 40%);">+                               * clearing */</span><br><span style="color: hsl(120, 100%, 40%);">+      WACS_SYNC_IDLE    = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+     WACS_INIT_DONE    = 0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+       DEFAULT_VALUE_READ_TEST  = 0x5aa5,</span><br><span style="color: hsl(120, 100%, 40%);">+    WRITE_TEST_VALUE         = 0xa55a</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum pmic_regck {</span><br><span style="color: hsl(120, 100%, 40%);">+    REG_CLOCK_18MHZ = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+  REG_CLOCK_SAFE_MODE</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* manual commnd */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+        OP_WR    = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+       OP_CSH   = 0x0,</span><br><span style="color: hsl(120, 100%, 40%);">+       OP_CSL   = 0x1,</span><br><span style="color: hsl(120, 100%, 40%);">+       OP_OUTS  = 0x8,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* error information flag */</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INVALID_ARG             = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_INVALID_RW              = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_INVALID_ADDR            = 3,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_INVALID_WDAT            = 4,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_INVALID_OP_MANUAL       = 5,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_NOT_IDLE_STATE          = 6,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_NOT_INIT_DONE           = 7,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_NOT_INIT_DONE_READ      = 8,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_WAIT_IDLE_TIMEOUT       = 9,</span><br><span style="color: hsl(120, 100%, 40%);">+    E_PWR_WAIT_IDLE_TIMEOUT_READ  = 10,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_SIDLY_FAIL         = 11,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_RESET_TIMEOUT           = 12,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_TIMEOUT                 = 13,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_RESET_SPI          = 20,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_SIDLY              = 21,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_REG_CLOCK          = 22,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_ENABLE_PMIC        = 23,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_DIO                = 24,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_CIPHER             = 25,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_WRITE_TEST         = 26,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_ENABLE_CRC         = 27,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_ENABLE_DEWRAP      = 28,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_INIT_ENABLE_EVENT       = 29,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_READ_TEST_FAIL          = 30,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_WRITE_TEST_FAIL         = 31,</span><br><span style="color: hsl(120, 100%, 40%);">+   E_PWR_SWITCH_DIO              = 32</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#endif /* __SOC_MEDIATEK_MT8183_PMIC_WRAP_H__ */</span><br><span>\ No newline at end of file</span><br><span>diff --git a/src/soc/mediatek/mt8183/mt6358.c b/src/soc/mediatek/mt8183/mt6358.c</span><br><span>new file mode 100644</span><br><span>index 0000000..d8c2adb</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/mediatek/mt8183/mt6358.c</span><br><span>@@ -0,0 +1,76 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 MediaTek Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <assert.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pmic_wrap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/mt6358.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#if 1</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEBUG_PMIC(x...)         printk(BIOS_INFO, x)</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+#define DEBUG_PMIC(x...)</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+u32 pmic_read_interface(u32 reg, u32 mask, u32 shift)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pwrap_read(reg, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+  rdata &= (mask << shift);</span><br><span style="color: hsl(120, 100%, 40%);">+   rdata = (rdata >> shift);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     DEBUG_PMIC("[%s] Reg[%#x]=%#x\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              __func__, reg, rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void pmic_config_interface(u32 reg, u32 val, u32 mask, u32 shift)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 old, new;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_read(reg, &old);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  new = old & ~(mask << shift);</span><br><span style="color: hsl(120, 100%, 40%);">+       new |= (val << shift);</span><br><span style="color: hsl(120, 100%, 40%);">+  pwrap_write(reg, new);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      DEBUG_PMIC("[%s] write Reg[%#x]=%#x -> %#x\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              __func__, reg, old, new);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void mt6358_init_setting(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   pmic_read_interface(PMIC_SWCID, 0xFFFF, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   pmic_config_interface(PMIC_TOP_RST_MISC_SET, 0x0020, 0xFFFF, 0); //[5]=1, RG_WDTRSTB_DEB</span><br><span style="color: hsl(120, 100%, 40%);">+      pmic_config_interface(PMIC_TOP_RST_MISC_CLR, 0x0002, 0xFFFF, 0); //[1]=0, RG_WDTRSTB_MODE</span><br><span style="color: hsl(120, 100%, 40%);">+     pmic_config_interface(PMIC_TOP_RST_MISC_SET, 0x0001, 0xFFFF, 0); //[0]=1, RG_WDTRSTB_EN</span><br><span style="color: hsl(120, 100%, 40%);">+       pmic_read_interface(PMIC_TOP_RST_MISC, 0xFFFF, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* write TMA KEY with magic number */</span><br><span style="color: hsl(120, 100%, 40%);">+ pmic_config_interface(PMIC_TOP_TMA_KEY, 0x9CA7, 0xFFFF, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* set VPROC12 sequence to VA12 */</span><br><span style="color: hsl(120, 100%, 40%);">+    pmic_config_interface(PMIC_CPSDSA4, 0xA, 0x1F, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    pmic_config_interface(PMIC_TOP_TMA_KEY, 0x0, 0xFFFF, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void mt6358_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      if (pwrap_init())</span><br><span style="color: hsl(120, 100%, 40%);">+             die("ERROR - Failed to initial pmic wrap!");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      mt6358_init_setting();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/soc/mediatek/mt8183/pmic_wrap.c b/src/soc/mediatek/mt8183/pmic_wrap.c</span><br><span>new file mode 100644</span><br><span>index 0000000..bb3cf57</span><br><span>--- /dev/null</span><br><span>+++ b/src/soc/mediatek/mt8183/pmic_wrap.c</span><br><span>@@ -0,0 +1,691 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 MediaTek Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/io.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stddef.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <timer.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/addressmap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pll.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/infracfg.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/pmic_wrap.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define PWRAPTAG                "[PWRAP] "</span><br><span style="color: hsl(120, 100%, 40%);">+#define pwrap_log(fmt, arg ...)   printk(BIOS_INFO, PWRAPTAG fmt, ## arg)</span><br><span style="color: hsl(120, 100%, 40%);">+#define pwrap_err(fmt, arg ...)   printk(BIOS_ERR, PWRAPTAG \</span><br><span style="color: hsl(120, 100%, 40%);">+                                  "ERROR,line=%d" fmt, __LINE__, ## arg)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+typedef u32 (*loop_condition_fp)(u32);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_fsm_idle(u32 x)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return ((x >> RDATA_WACS_FSM_SHIFT) & RDATA_WACS_FSM_MASK) !=</span><br><span style="color: hsl(120, 100%, 40%);">+               WACS_FSM_IDLE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_fsm_vldclr(u32 x)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    return ((x >> RDATA_WACS_FSM_SHIFT) & RDATA_WACS_FSM_MASK) !=</span><br><span style="color: hsl(120, 100%, 40%);">+               WACS_FSM_WFVLDCLR;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_sync(u32 x)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    return ((x >> RDATA_SYNC_IDLE_SHIFT) & RDATA_SYNC_IDLE_MASK) !=</span><br><span style="color: hsl(120, 100%, 40%);">+             WACS_SYNC_IDLE;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_idle_and_sync(u32 x)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      return ((((x >> RDATA_WACS_FSM_SHIFT) & RDATA_WACS_FSM_MASK) !=</span><br><span style="color: hsl(120, 100%, 40%);">+             WACS_FSM_IDLE) || (((x >> RDATA_SYNC_IDLE_SHIFT) &</span><br><span style="color: hsl(120, 100%, 40%);">+          RDATA_SYNC_IDLE_MASK)!= WACS_SYNC_IDLE));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_state_idle(loop_condition_fp fp, u32 timeout_us,</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 *wacs_register, u32 *wacs_vldclr_register, u32 *read_reg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 reg_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct stopwatch sw;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        stopwatch_init_usecs_expire(&sw, timeout_us);</span><br><span style="color: hsl(120, 100%, 40%);">+     do {</span><br><span style="color: hsl(120, 100%, 40%);">+          reg_rdata = WRAP_RD32(wacs_register);</span><br><span style="color: hsl(120, 100%, 40%);">+         switch ((reg_rdata >> RDATA_WACS_FSM_SHIFT) & RDATA_WACS_FSM_MASK) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        case WACS_FSM_WFVLDCLR:</span><br><span style="color: hsl(120, 100%, 40%);">+                               WRAP_WR32(wacs_vldclr_register, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+                           pwrap_log("WACS_FSM = VLDCLR\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                           break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case WACS_FSM_WFDLE:</span><br><span style="color: hsl(120, 100%, 40%);">+                          pwrap_log("WACS_FSM = WFDLE\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                            break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        case WACS_FSM_REQ:</span><br><span style="color: hsl(120, 100%, 40%);">+                            pwrap_log("WACS_FSM = REQ\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        default:</span><br><span style="color: hsl(120, 100%, 40%);">+                              break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (stopwatch_expired(&sw)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pwrap_err("timeout when waiting for idle\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                       return E_PWR_WAIT_IDLE_TIMEOUT;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     } while (fp(reg_rdata));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (read_reg)</span><br><span style="color: hsl(120, 100%, 40%);">+         *read_reg = reg_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static inline u32 wait_for_state_ready(loop_condition_fp fp, u32 timeout_us,</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 *wacs_register, u32 *read_reg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 reg_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct stopwatch sw;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        stopwatch_init_usecs_expire(&sw, timeout_us);</span><br><span style="color: hsl(120, 100%, 40%);">+     do {</span><br><span style="color: hsl(120, 100%, 40%);">+          reg_rdata = WRAP_RD32(wacs_register);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               if (stopwatch_expired(&sw)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pwrap_err("timeout when waiting for ready\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return E_PWR_WAIT_IDLE_TIMEOUT;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     } while (fp(reg_rdata));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (read_reg)</span><br><span style="color: hsl(120, 100%, 40%);">+         *read_reg = reg_rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_wacs2(u32 write, u32 adr,</span><br><span style="color: hsl(120, 100%, 40%);">+            u32 wdata, u32 *rdata, u32 init_check)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 reg_rdata = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 wacs_write = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 wacs_adr = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 wacs_cmd = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 return_value = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Check argument validation */</span><br><span style="color: hsl(120, 100%, 40%);">+       if ((write & ~(0x1)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                return E_PWR_INVALID_RW;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((adr & ~(0xffff)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               return E_PWR_INVALID_ADDR;</span><br><span style="color: hsl(120, 100%, 40%);">+    if ((wdata & ~(0xffff)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+             return E_PWR_INVALID_WDAT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (init_check) {</span><br><span style="color: hsl(120, 100%, 40%);">+             reg_rdata = WRAP_RD32(&mt8183_pwrap->wacs2_rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Prevent someone to used pwrap before pwrap init */</span><br><span style="color: hsl(120, 100%, 40%);">+         if (((reg_rdata >> RDATA_INIT_DONE_SHIFT)</span><br><span style="color: hsl(120, 100%, 40%);">+                               & RDATA_INIT_DONE_MASK) != WACS_INIT_DONE) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      pwrap_err("initialization isn't finished\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                   return E_PWR_NOT_INIT_DONE;</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Check IDLE & INIT_DONE in advance */</span><br><span style="color: hsl(120, 100%, 40%);">+   return_value =</span><br><span style="color: hsl(120, 100%, 40%);">+                wait_for_state_idle(wait_for_fsm_idle, TIMEOUT_WAIT_IDLE_US,</span><br><span style="color: hsl(120, 100%, 40%);">+          &mt8183_pwrap->wacs2_rdata, &mt8183_pwrap->wacs2_vldclr, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (return_value != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              pwrap_err("wait_for_fsm_idle fail,return_value=%d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                         return_value);</span><br><span style="color: hsl(120, 100%, 40%);">+              return E_PWR_WAIT_IDLE_TIMEOUT;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   wacs_write = write << 31;</span><br><span style="color: hsl(120, 100%, 40%);">+       wacs_adr = (adr >> 1) << 16;</span><br><span style="color: hsl(120, 100%, 40%);">+      wacs_cmd = wacs_write | wacs_adr | wdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->wacs2_cmd, wacs_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (write == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (NULL == rdata) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  pwrap_err("rdata is a NULL pointer\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return E_PWR_INVALID_ARG;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           return_value =</span><br><span style="color: hsl(120, 100%, 40%);">+                        wait_for_state_ready(wait_for_fsm_vldclr, TIMEOUT_READ_US,</span><br><span style="color: hsl(120, 100%, 40%);">+                    &mt8183_pwrap->wacs2_rdata, &reg_rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         if (return_value != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      pwrap_err("wait_for_fsm_vldclr fail,return_value=%d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                               return_value);</span><br><span style="color: hsl(120, 100%, 40%);">+                      return E_PWR_WAIT_IDLE_TIMEOUT_READ;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           *rdata = (reg_rdata >> RDATA_WACS_RDATA_SHIFT)</span><br><span style="color: hsl(120, 100%, 40%);">+                  & RDATA_WACS_RDATA_MASK;</span><br><span style="color: hsl(120, 100%, 40%);">+          WRAP_WR32(&mt8183_pwrap->wacs2_vldclr, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return return_value;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_read(u32 adr, u32 *rdata)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return pwrap_wacs2(0,adr,0,rdata, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_write(u32 adr, u32  wdata)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return pwrap_wacs2(1,adr,wdata,0, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_read_nochk(u32 adr, u32 *rdata)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       return pwrap_wacs2(0, adr, 0, rdata, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_write_nochk(u32 adr, u32 wdata)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    return pwrap_wacs2(1, adr, wdata, 0, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_soft_reset(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_infracfg->infra_globalcon_rst2_set, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_infracfg->infra_globalcon_rst2_clr, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_spi_clk_set(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mtk_topckgen->clk_cfg_5_clr, 0x93000000);</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mtk_topckgen->clk_cfg_5_set, 0x1 << 24);</span><br><span style="color: hsl(120, 100%, 40%);">+      WRAP_WR32(&mtk_topckgen->clk_cfg_update, 0x1 << 23);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_infracfg->module_sw_cg_0_set, 0x0000000F);</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_infracfg->module_sw_cg_2_set, 0x00000100);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_soft_reset();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_infracfg->module_sw_cg_0_clr, 0x0000000F);</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_infracfg->module_sw_cg_2_clr, 0x00000100);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_init_dio(u32 dio_en)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 rdata = 0x0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pwrap_write_nochk(PMIC_DEW_DIO_EN, dio_en);</span><br><span style="color: hsl(120, 100%, 40%);">+   do {</span><br><span style="color: hsl(120, 100%, 40%);">+          rdata = WRAP_RD32(&mt8183_pwrap->wacs2_rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+ } while (wait_for_idle_and_sync(rdata));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->dio_en, dio_en);</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_lock_SPISLVReg(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_write_nochk(PMIC_SPISLV_KEY, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_InitStaUpd(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_pwrap->staupd_grpen, 0xf5);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* CRC */</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_write_nochk(PMIC_DEW_CRC_EN, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+      WRAP_WR32(&mt8183_pwrap->crc_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->sig_adr, PMIC_DEW_CRC_VAL);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->eint_sta0_adr, PMIC_CPU_INT_STA);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* MD ADC Interface */</span><br><span style="color: hsl(120, 100%, 40%);">+        WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_latest_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+          (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_wp_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_0_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_1_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_2_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_3_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_4_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_5_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_6_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_7_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_8_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_9_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+               (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_10_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_11_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_12_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_13_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_14_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_15_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_16_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_17_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_18_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_19_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_20_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_21_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_22_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_23_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_24_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_25_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_26_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_27_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_28_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_29_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_30_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->md_auxadc_rdata_31_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_ADC35 << 16) + PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->int_gps_auxadc_cmd_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+              (PMIC_AUXADC_RQST1 << 16) + PMIC_AUXADC_RQST0);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->int_gps_auxadc_cmd, (0x0040 << 16) + 0x0080);</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->int_gps_auxadc_rdata_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+            (PMIC_AUXADC_ADC32 << 16) + PMIC_AUXADC_ADC17);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->ext_gps_auxadc_rdata_addr, PMIC_AUXADC_ADC31);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_starve_set(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->harb_hprio, 0xf);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_0 , 0x402);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_1 , 0x403);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_2 , 0x403);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_3 , 0x403);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_4 , 0x40f);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_5 , 0x420);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_6 , 0x428);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_7 , 0x428);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_8 , 0x413);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_9 , 0x417);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_10, 0x417);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_11, 0x47c);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_12, 0x47c);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_13, 0x740);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->starv_counter_16, 0x740);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_enable(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->hprio_arb_en, 0x3fa75);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->wacs0_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->wacs2_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->wacs_p2p_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->wacs_md32_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* 100us */</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->staupd_ctrl, 0x5);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->wdt_unit, 0xf);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->wdt_src_en_0, 0xffffffff);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->wdt_src_en_1, 0xffffffff);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->timer_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->int0_en, 0xffffffff);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* disable Matching interrupt for bit 28 */</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->int1_en, 0xeef7ffff);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_init_sistrobe(int dual_si_sample_settings)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+    int si_en_sel, si_ck_sel, si_dly, si_sample_ctrl, i, error = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       char result_faulty = 0, found;</span><br><span style="color: hsl(120, 100%, 40%);">+        int test_data[30] = {</span><br><span style="color: hsl(120, 100%, 40%);">+         0x6996, 0x9669, 0x6996, 0x9669, 0x6996, 0x9669, 0x6996,</span><br><span style="color: hsl(120, 100%, 40%);">+               0x9669, 0x6996, 0x9669, 0x5AA5, 0xA55A, 0x5AA5, 0xA55A,</span><br><span style="color: hsl(120, 100%, 40%);">+               0x5AA5, 0xA55A, 0x5AA5, 0xA55A, 0x5AA5, 0xA55A, 0x1B27,</span><br><span style="color: hsl(120, 100%, 40%);">+               0x1B27, 0x1B27, 0x1B27, 0x1B27, 0x1B27, 0x1B27, 0x1B27,</span><br><span style="color: hsl(120, 100%, 40%);">+               0x1B27, 0x1B27};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    found = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    for (si_en_sel = 0; si_en_sel < 8; si_en_sel++) {</span><br><span style="color: hsl(120, 100%, 40%);">+          for (si_ck_sel = 0; si_ck_sel < 2; si_ck_sel++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  si_sample_ctrl = (si_en_sel << 6) | (si_ck_sel << 5);</span><br><span style="color: hsl(120, 100%, 40%);">+                     WRAP_WR32(&mt8183_pwrap->si_sample_ctrl, si_sample_ctrl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                    pwrap_read_nochk(PMIC_DEW_READ_TEST, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (rdata == DEFAULT_VALUE_READ_TEST) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               pwrap_log("[DrvPWRAP_InitSiStrobe]The First Valid Sampling Clock Edge Is Found !!!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                             pwrap_log("found si_en_sel = %x, si_ck_sel = %x, si_sample_ctrl = %x, rdata = %x\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                         si_en_sel, si_ck_sel, si_sample_ctrl, rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+                                found = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                            break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (found == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (found == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             result_faulty |= 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+         pwrap_err("result_faulty = %d\n", result_faulty);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if((si_en_sel == 7) && (si_ck_sel == 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            result_faulty |= 0x2;</span><br><span style="color: hsl(120, 100%, 40%);">+         pwrap_err("result_faulty = %d (Sampling Clock is last Setting, can not Use)\n", result_faulty);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   for (si_dly = 0; si_dly < 10; si_dly++) {</span><br><span style="color: hsl(120, 100%, 40%);">+          pwrap_write_nochk(PMIC_RG_SPI_CON2, si_dly);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                error = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+            for (i = 0; i < 30; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+           {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pwrap_write_nochk(PMIC_DEW_WRITE_TEST, test_data[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+                 pwrap_read_nochk(PMIC_DEW_WRITE_TEST, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+                    if ((rdata & 0x7fff) != (test_data[i] & 0x7fff)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            pwrap_log("InitSiStrobe (%x, %x, %x) Data Boundary Is Found !!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                   si_dly, si_dly, rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+                              error = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                            break;</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (error == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* TINFO = "[DrvPWRAP_InitSiStrobe] Change The Sampling Clock Edge To The Next One." */</span><br><span style="color: hsl(120, 100%, 40%);">+     si_sample_ctrl = si_sample_ctrl + 0x20;</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->si_sample_ctrl, si_sample_ctrl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (si_dly == 10) {</span><br><span style="color: hsl(120, 100%, 40%);">+           pwrap_log("SI Strobe Calibration For PMIC 0 Done, (%x, si_dly = %x)\n", si_sample_ctrl, si_dly);</span><br><span style="color: hsl(120, 100%, 40%);">+            si_dly--;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("SI Strobe Calibration For PMIC 0 Done, (%x, %x)\n", si_sample_ctrl, si_dly);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (result_faulty != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               return result_faulty;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Read Test */</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_read_nochk(PMIC_DEW_READ_TEST, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (rdata != DEFAULT_VALUE_READ_TEST) {</span><br><span style="color: hsl(120, 100%, 40%);">+               pwrap_err("pwrap_init_sistrobe Read Test Failed, rdata = %x, exp = 0x5aa5\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+               return 0x10;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("pwrap_init_sistrobe Read Test ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_InitSPISLV(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_write_nochk(PMIC_FILTER_CON0, 0xf0); /* turn on IO filter function */</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_write_nochk(PMIC_SMT_CON1, 0xf); /* turn on IO SMT function to improve noise immunity */</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_write_nochk(PMIC_GPIO_PULLEN0_CLR, 0xf0); /* turn off IO pull function for power saving */</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_write_nochk(PMIC_RG_SPI_CON0, 0x1); /* turn off IO pull function for power saving */</span><br><span style="color: hsl(120, 100%, 40%);">+    pwrap_write_nochk(PMIC_DRV_CON1, 0x8888); /* set PMIC GPIO driving current to 4mA */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static s32 pwrap_reset_spislv(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 ret = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 return_value = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->hprio_arb_en, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->wrap_en, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+        WRAP_WR32(&mt8183_pwrap->mux_sel, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+        WRAP_WR32(&mt8183_pwrap->man_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->dio_en, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_CSL << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_OUTS << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_CSH << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_OUTS << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_OUTS << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_OUTS << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->man_cmd, (OP_WR << 13) | (OP_OUTS << 8));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return_value =</span><br><span style="color: hsl(120, 100%, 40%);">+                wait_for_state_ready(wait_for_sync, TIMEOUT_WAIT_IDLE_US,</span><br><span style="color: hsl(120, 100%, 40%);">+             &mt8183_pwrap->wacs2_rdata, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (return_value != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              pwrap_err("reset_spislv fail,ret=%x\n", return_value);</span><br><span style="color: hsl(120, 100%, 40%);">+              ret = E_PWR_TIMEOUT;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->man_en, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->mux_sel, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void pwrap_init_reg_clock(u32 regck_sel)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_pwrap->ext_ck_write, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_write_nochk(PMIC_DEW_RDDMY_NO, 0x8);</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->rddmy, 0x8);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Config SPI Waveform according to reg clk */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (regck_sel == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         WRAP_WR32(&mt8183_pwrap->cshext_write, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+           WRAP_WR32(&mt8183_pwrap->cshext_read, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+            WRAP_WR32(&mt8183_pwrap->cslext_write, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+           WRAP_WR32(&mt8183_pwrap->cslext_read, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+    } else { /*Safe Mode*/</span><br><span style="color: hsl(120, 100%, 40%);">+                WRAP_WR32(&mt8183_pwrap->cshext_write, 0x0f0f);</span><br><span style="color: hsl(120, 100%, 40%);">+                WRAP_WR32(&mt8183_pwrap->cshext_read, 0x0f0f);</span><br><span style="color: hsl(120, 100%, 40%);">+         WRAP_WR32(&mt8183_pwrap->cslext_write, 0x0f0f);</span><br><span style="color: hsl(120, 100%, 40%);">+                WRAP_WR32(&mt8183_pwrap->cslext_read, 0x0f0f);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int pwrap_wacs2_write_test(int pmic_no)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (pmic_no == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+           pwrap_write_nochk(PMIC_DEW_WRITE_TEST, 0xa55a);</span><br><span style="color: hsl(120, 100%, 40%);">+               pwrap_read_nochk(PMIC_DEW_WRITE_TEST, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (rdata != 0xa55a) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        pwrap_err("Error: w_rdata = %x, exp = 0xa55a\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return E_PWR_WRITE_TEST_FAIL;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+s32 pwrap_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       static s32 init = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ s32 sub_return = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 rdata;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (init > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            pwrap_log("pwrap_init already initialize\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("pwrap_init start\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  pwrap_spi_clk_set();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_log("pwrap_spi_clk_set ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Enable DCM */</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_log("Not need to enable DCM\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Reset SPISLV */</span><br><span style="color: hsl(120, 100%, 40%);">+    sub_return = pwrap_reset_spislv();</span><br><span style="color: hsl(120, 100%, 40%);">+    if (sub_return != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                pwrap_err("reset_spislv fail,ret=%x\n", sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+                return E_PWR_INIT_RESET_SPI;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("Reset SPISLV ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Enable WRAP */</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->wrap_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_log("Enable WRAP ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Enable WACS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+    WRAP_WR32(&mt8183_pwrap->wacs2_en, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->hprio_arb_en, 0x4); /* ONLY WACS2 */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_log("Enable WACS2 ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* SPI Waveform Configuration. 0:safe mode, 1:18MHz */</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_init_reg_clock(1);</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_log("init_reg_clock ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_log("pwrap_init_reg_clock ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* SPI Slave Configuration */</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_InitSPISLV();</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("InitSPISLV ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Enable DIO mode */</span><br><span style="color: hsl(120, 100%, 40%);">+ sub_return = pwrap_init_dio(1);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sub_return != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                pwrap_err("dio test error,err=%x, ret=%x\n", 0x11, sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+             return E_PWR_INIT_DIO;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("pwrap_init_dio ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Input data calibration flow; */</span><br><span style="color: hsl(120, 100%, 40%);">+    sub_return = pwrap_init_sistrobe(0);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (sub_return != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                pwrap_err("InitSiStrobe fail,ret=%x\n", sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+                return E_PWR_INIT_SIDLY;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("pwrap_init_sistrobe ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /*  Write test using WACS2.  check Write test default value */</span><br><span style="color: hsl(120, 100%, 40%);">+        sub_return = pwrap_wacs2_write_test(0);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sub_return != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                pwrap_err("write test 0 fail\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           return E_PWR_INIT_WRITE_TEST;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("pwrap_wacs2_write_test ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Status update function initialization</span><br><span style="color: hsl(120, 100%, 40%);">+      * 1. Signature Checking using CRC (CRC 0 only)</span><br><span style="color: hsl(120, 100%, 40%);">+        * 2. EINT update</span><br><span style="color: hsl(120, 100%, 40%);">+      * 3. Read back Auxadc thermal data for GPS</span><br><span style="color: hsl(120, 100%, 40%);">+    */</span><br><span style="color: hsl(120, 100%, 40%);">+    pwrap_InitStaUpd();</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("pwrap_InitStaUpd ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->priority_user_sel_2, 0x0b09080a);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->arbiter_out_sel_2, 0x0b080a09);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_starve_set();</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("pwrap_starve_set ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_enable();</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("pwrap_enable ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Initialization Done */</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->init_done0, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->init_done2, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+     WRAP_WR32(&mt8183_pwrap->init_done_p2p, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+  WRAP_WR32(&mt8183_pwrap->init_done_md32, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Lock SPISLV Registers */</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_lock_SPISLVReg();</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("Lock SPI SLV Reg ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("pwrap_init Done\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Read Last three command */</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_read_nochk(PMIC_RG_SPI_CON3, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_CMD0:0x%x (The last command addr)\n", (rdata & 0x3fff));</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_read_nochk(PMIC_RG_SPI_CON6, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_WDATA0:0x%x (The last command wdata)\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+  pwrap_read_nochk(PMIC_RG_SPI_CON4, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_CMD1:0x%x (The second-last command addr)\n", (rdata & 0x3fff));</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_read_nochk(PMIC_RG_SPI_CON7, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_WDATA1:0x%x (The second-last command wdata)\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_read_nochk(PMIC_RG_SPI_CON5, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_CMD2:0x%x (The third-last command addr)\n", (rdata & 0x3fff));</span><br><span style="color: hsl(120, 100%, 40%);">+        pwrap_read_nochk(PMIC_RG_SPI_CON8, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("RECORD_WDATA2:0x%x (The third-last command wdata)\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Enable Command Recording */</span><br><span style="color: hsl(120, 100%, 40%);">+        sub_return = pwrap_write_nochk(PMIC_RG_SPI_RECORD0, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (sub_return != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+          pwrap_err("enable spi debug fail, ret=%x\n", sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("enable spi debug ok\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Clear Last three command */</span><br><span style="color: hsl(120, 100%, 40%);">+        sub_return = pwrap_write_nochk(PMIC_RG_SPI_CON13, 0x1);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sub_return != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+          pwrap_err("clear record command fail, ret=%x\n", sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+       sub_return = pwrap_write_nochk(PMIC_RG_SPI_CON13, 0x0);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sub_return != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+          pwrap_err("clear record command fail, ret=%x\n", sub_return);</span><br><span style="color: hsl(120, 100%, 40%);">+       pwrap_log("clear record command ok\n\r");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_log("GPS_CMD_ADDR:0x%x, GPS_CMD:0x%x, GPS_RDATA_ADDR:0x%x\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         WRAP_RD32(&mt8183_pwrap->int_gps_auxadc_cmd_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+             WRAP_RD32(&mt8183_pwrap->int_gps_auxadc_cmd),</span><br><span style="color: hsl(120, 100%, 40%);">+          WRAP_RD32(&mt8183_pwrap->int_gps_auxadc_rdata_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+  pwrap_log("GPSINF_0_STA:0x%x, GPSINF_1_STA:0x%x\n",</span><br><span style="color: hsl(120, 100%, 40%);">+         WRAP_RD32(&mt8183_pwrap->gpsinf_0_sta),</span><br><span style="color: hsl(120, 100%, 40%);">+                WRAP_RD32(&mt8183_pwrap->gpsinf_1_sta));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* enable logging mode */</span><br><span style="color: hsl(120, 100%, 40%);">+     pwrap_log("PMIC_WRAP_MONITOR_MODE = Logging Mode\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->monitor_ctrl_1, 0x1feff); /* disable monitor MD HW channel (CH8) */</span><br><span style="color: hsl(120, 100%, 40%);">+   WRAP_WR32(&mt8183_pwrap->monitor_ctrl_2, 0x0); /* record all addr (mask+addr) */</span><br><span style="color: hsl(120, 100%, 40%);">+       WRAP_WR32(&mt8183_pwrap->monitor_ctrl_3, 0x0); /* record all wdata (mask+addr) */</span><br><span style="color: hsl(120, 100%, 40%);">+      WRAP_WR32(&mt8183_pwrap->monitor_ctrl_0, 0x8); /* clear log */</span><br><span style="color: hsl(120, 100%, 40%);">+ WRAP_WR32(&mt8183_pwrap->monitor_ctrl_0, 0x1); /* reenable (Matching mode and Continue recording after interrupt trigger) */</span><br><span style="color: hsl(120, 100%, 40%);">+   pwrap_log("monitor_ctrl_0 = 0x%x\n", WRAP_RD32(&mt8183_pwrap->monitor_ctrl_0));</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_log("monitor_ctrl_1 = 0x%x\n", WRAP_RD32(&mt8183_pwrap->monitor_ctrl_1));</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_log("monitor_ctrl_2 = 0x%x\n", WRAP_RD32(&mt8183_pwrap->monitor_ctrl_2));</span><br><span style="color: hsl(120, 100%, 40%);">+      pwrap_log("monitor_ctrl_3 = 0x%x\n", WRAP_RD32(&mt8183_pwrap->monitor_ctrl_3));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    pwrap_read_nochk(PMIC_PPCCTL0, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+   rdata |= 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+ pwrap_write_nochk(PMIC_PPCCTL0, rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+       rdata = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    pwrap_read_nochk(PMIC_PPCCTL0, &rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (rdata != 0x1)</span><br><span style="color: hsl(120, 100%, 40%);">+             pwrap_err("PWRHOLD=%x(should be 1)\n", rdata);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    init = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>\ No newline at end of file</span><br><span>diff --git a/src/soc/mediatek/mt8183/soc.c b/src/soc/mediatek/mt8183/soc.c</span><br><span>index b51e7d4..1192f20 100644</span><br><span>--- a/src/soc/mediatek/mt8183/soc.c</span><br><span>+++ b/src/soc/mediatek/mt8183/soc.c</span><br><span>@@ -16,9 +16,9 @@</span><br><span> #include <device/device.h></span><br><span> #include <soc/emi.h></span><br><span> #include <soc/mmu_operations.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <soc/mt6358.h></span><br><span> #include <symbols.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void soc_read_resources(struct device *dev)</span><br><span> {</span><br><span>       ram_resource(dev, 0, (uintptr_t)_dram / KiB, sdram_size() / KiB);</span><br><span>@@ -27,6 +27,7 @@</span><br><span> static void soc_init(struct device *dev)</span><br><span> {</span><br><span>       mtk_mmu_disable_l2c_sram();</span><br><span style="color: hsl(120, 100%, 40%);">+   mt6358_init();</span><br><span> }</span><br><span> </span><br><span> static struct device_operations soc_ops = {</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/29193">change 29193</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/29193"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ie16c2ba83dae1849aa39185c9577c2a9a2e33fa3 </div>
<div style="display:none"> Gerrit-Change-Number: 29193 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Tristan Hsieh <tristan.shieh@mediatek.com> </div>