@@ -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
749738continue_unlock :
750739 /* clear interrupts */
0 commit comments