Skip to content

Commit 158fe71

Browse files
panekmaciejfabiobaltieri
authored andcommitted
drivers: ethernet: adin2111: Refactor the code in offload thread
Refactors the code in adin2111_offload_thread to improve its readability. Adds code to read RX FIFO in OA mode until it is empty. Signed-off-by: Maciej Panek <[email protected]>
1 parent e885c8c commit 158fe71

File tree

1 file changed

+28
-39
lines changed

1 file changed

+28
-39
lines changed

drivers/ethernet/eth_adin2111.c

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ int eth_adin2111_oa_data_read(const struct device *dev, const uint16_t port_idx)
317317
K_MSEC(CONFIG_ETH_ADIN2111_TIMEOUT));
318318
if (!pkt) {
319319
LOG_ERR("OA RX: cannot allcate packet space, skipping.");
320-
return -EIO;
320+
return -ENOMEM;
321321
}
322322
/* Skipping CRC32 */
323323
ret = net_pkt_write(pkt, ctx->buf, ctx->scur - sizeof(uint32_t));
@@ -693,58 +693,47 @@ static void adin2111_offload_thread(void *p1, void *p2, void *p3)
693693
adin2111_port_on_phyint(ctx->port[1]);
694694
}
695695

696-
if (ctx->oa) {
697-
if (status1 & ADIN2111_STATUS1_P1_RX_RDY) {
698-
ret = eth_adin2111_oa_data_read(dev, 0);
699-
if (ret < 0) {
700-
goto continue_unlock;
701-
}
702-
}
703-
if (is_adin2111 && (status1 & ADIN2111_STATUS1_P2_RX_RDY)) {
704-
ret = eth_adin2111_oa_data_read(dev, 1);
705-
if (ret < 0) {
706-
goto continue_unlock;
707-
}
708-
}
709-
} else {
696+
if (!ctx->oa) {
710697
#if CONFIG_ETH_ADIN2111_SPI_CFG0
711698
if (status0 & ADIN2111_STATUS1_SPI_ERR) {
712699
LOG_WRN("Detected TX SPI CRC error");
713700
}
714-
#endif /* CONFIG_ETH_ADIN2111_SPI_CFG0 */
701+
#endif
702+
}
715703

704+
/* handle rx interrupt(s) */
705+
do {
716706
/* handle port 1 rx */
717707
if (status1 & ADIN2111_STATUS1_P1_RX_RDY) {
718-
do {
708+
if (ctx->oa) {
709+
ret = eth_adin2111_oa_data_read(dev, 0);
710+
} else {
719711
ret = adin2111_read_fifo(dev, 0U);
720-
if (ret < 0) {
721-
break;
722-
}
723-
724-
ret = eth_adin2111_reg_read(dev, ADIN2111_STATUS1,
725-
&status1);
726-
if (ret < 0) {
727-
goto continue_unlock;
728-
}
729-
} while (!!(status1 & ADIN2111_STATUS1_P1_RX_RDY));
712+
}
713+
714+
if (ret < 0) {
715+
break;
716+
}
730717
}
731718

732719
/* handle port 2 rx */
733720
if (is_adin2111 && (status1 & ADIN2111_STATUS1_P2_RX_RDY)) {
734-
do {
721+
if (ctx->oa) {
722+
ret = eth_adin2111_oa_data_read(dev, 1);
723+
} else {
735724
ret = adin2111_read_fifo(dev, 1U);
736-
if (ret < 0) {
737-
break;
738-
}
739-
740-
ret = eth_adin2111_reg_read(dev, ADIN2111_STATUS1,
741-
&status1);
742-
if (ret < 0) {
743-
goto continue_unlock;
744-
}
745-
} while (!!(status1 & ADIN2111_STATUS1_P2_RX_RDY));
725+
}
726+
727+
if (ret < 0) {
728+
break;
729+
}
746730
}
747-
}
731+
732+
ret = eth_adin2111_reg_read(dev, ADIN2111_STATUS1, &status1);
733+
if (ret < 0) {
734+
break;
735+
}
736+
} while (status1 & (ADIN2111_STATUS1_P1_RX_RDY | ADIN2111_STATUS1_P2_RX_RDY));
748737

749738
continue_unlock:
750739
/* clear interrupts */

0 commit comments

Comments
 (0)