Skip to content

Commit 2ab3ed8

Browse files
driver: espi: clear pending irq when setup.
Clear pending irq when setup. Signed-off-by: jhan bo chao <jhan_bo_chao@realtek.com>
1 parent 2b7933a commit 2ab3ed8

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

drivers/espi/espi_realtek_rts5912.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ static int espi_kbc_setup(const struct device *dev)
171171
kbc_reg->VWCTRL1 = (0x01 << KBC_VWCTRL1_IRQNUM_Pos) | KBC_VWCTRL1_ACTEN;
172172
kbc_reg->INTEN = KBC_INTEN_IBFINTEN | KBC_INTEN_OBFINTEN;
173173

174+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), kbc_ibf, irq));
175+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), kbc_obe, irq));
176+
174177
/* IBF */
175178
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), kbc_ibf, irq),
176179
DT_IRQ_BY_NAME(DT_DRV_INST(0), kbc_ibf, priority), kbc_ibf_isr,
@@ -365,6 +368,8 @@ static int espi_acpi_setup(const struct device *dev)
365368
acpi_reg->VWCTRL1 = (0x00UL << ACPI_VWCTRL1_IRQNUM_Pos) | ACPI_VWCTRL1_ACTEN;
366369
acpi_reg->INTEN = ACPI_INTEN_IBFINTEN | ACPI_INTEN_OBFINTEN;
367370

371+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), acpi_ibf, irq));
372+
368373
/* IBF */
369374
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), acpi_ibf, irq),
370375
DT_IRQ_BY_NAME(DT_DRV_INST(0), acpi_ibf, priority), acpi_ibf_isr,
@@ -505,6 +510,8 @@ static int espi_promt0_setup(const struct device *dev)
505510
promt0_reg->VWCTRL1 = ACPI_VWCTRL1_ACTEN;
506511
promt0_reg->INTEN = ACPI_INTEN_IBFINTEN;
507512

513+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), promt0_ibf, irq));
514+
508515
/* IBF */
509516
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), promt0_ibf, irq),
510517
DT_IRQ_BY_NAME(DT_DRV_INST(0), promt0_ibf, priority), promt0_ibf_isr,
@@ -645,6 +652,8 @@ static void espi_periph_ch_setup(const struct device *dev)
645652

646653
espi_reg->EPINTEN = ESPI_EPINTEN_CFGCHGEN | ESPI_EPINTEN_MEMWREN | ESPI_EPINTEN_MEMRDEN;
647654

655+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_NODELABEL(espi0), periph_ch, irq));
656+
648657
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), periph_ch, irq),
649658
DT_IRQ_BY_NAME(DT_DRV_INST(0), periph_ch, priority), espi_periph_ch_isr,
650659
DEVICE_DT_GET(DT_DRV_INST(0)), 0);
@@ -697,6 +706,8 @@ static int espi_peri_ch_port80_setup(const struct device *dev)
697706
port80_reg->CFG = PORT80_CFG_CLRFLG | PORT80_CFG_THREEN;
698707
port80_reg->INTEN = PORT80_INTEN_THREINTEN;
699708

709+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), port80, irq));
710+
700711
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), port80, irq),
701712
DT_IRQ_BY_NAME(DT_DRV_INST(0), port80, priority), espi_port80_isr,
702713
DEVICE_DT_GET(DT_DRV_INST(0)), 0);
@@ -1528,6 +1539,19 @@ static void espi_vw_ch_setup(const struct device *dev)
15281539

15291540
espi_reg->EVRXINTEN = (ESPI_EVRXINTEN_CFGCHGEN | ESPI_EVRXINTEN_RXCHGEN);
15301541

1542+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_ch, irq));
1543+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx2, irq));
1544+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx3, irq));
1545+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx7, irq));
1546+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx41, irq));
1547+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx42, irq));
1548+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx43, irq));
1549+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx44, irq));
1550+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx47, irq));
1551+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx4a, irq));
1552+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx51, irq));
1553+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_idx61, irq));
1554+
15311555
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_ch, irq),
15321556
DT_IRQ_BY_NAME(DT_DRV_INST(0), vw_ch, priority), espi_vw_ch_isr,
15331557
DEVICE_DT_GET(DT_DRV_INST(0)), 0);
@@ -1871,6 +1895,10 @@ static int espi_oob_ch_setup(const struct device *dev)
18711895
k_sem_init(&espi_data->oob_rx_lock, 0, 1);
18721896
#endif
18731897

1898+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), oob_tx, irq));
1899+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), oob_rx, irq));
1900+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), oob_chg, irq));
1901+
18741902
/* Tx */
18751903
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), oob_tx, irq),
18761904
DT_IRQ_BY_NAME(DT_DRV_INST(0), oob_tx, priority), espi_oob_tx_isr,
@@ -2082,6 +2110,9 @@ static int espi_flash_ch_setup(const struct device *dev)
20822110

20832111
k_sem_init(&espi_data->flash_lock, 0, 1);
20842112

2113+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), maf_tr, irq));
2114+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), flash_chg, irq));
2115+
20852116
/* MAF Tr */
20862117
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), maf_tr, irq),
20872118
DT_IRQ_BY_NAME(DT_DRV_INST(0), maf_tr, priority), espi_maf_tr_isr,
@@ -2277,6 +2308,8 @@ static void espi_bus_reset_setup(const struct device *dev)
22772308
espi_reg->ERSTCFG = ESPI_ERSTCFG_RSTMONEN | ESPI_ERSTCFG_RSTINTEN;
22782309
}
22792310

2311+
NVIC_ClearPendingIRQ(DT_IRQ_BY_NAME(DT_DRV_INST(0), bus_rst, irq));
2312+
22802313
IRQ_CONNECT(DT_IRQ_BY_NAME(DT_DRV_INST(0), bus_rst, irq),
22812314
DT_IRQ_BY_NAME(DT_DRV_INST(0), bus_rst, priority), espi_rst_isr,
22822315
DEVICE_DT_GET(DT_DRV_INST(0)), 0);

0 commit comments

Comments
 (0)