hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/net/ethernet/microchip/lan743x_main.c
....@@ -83,6 +83,18 @@
8383 !(data & HW_CFG_LRST_), 100000, 10000000);
8484 }
8585
86
+static int lan743x_csr_wait_for_bit_atomic(struct lan743x_adapter *adapter,
87
+ int offset, u32 bit_mask,
88
+ int target_value, int udelay_min,
89
+ int udelay_max, int count)
90
+{
91
+ u32 data;
92
+
93
+ return readx_poll_timeout_atomic(LAN743X_CSR_READ_OP, offset, data,
94
+ target_value == !!(data & bit_mask),
95
+ udelay_max, udelay_min * count);
96
+}
97
+
8698 static int lan743x_csr_wait_for_bit(struct lan743x_adapter *adapter,
8799 int offset, u32 bit_mask,
88100 int target_value, int usleep_min,
....@@ -678,8 +690,8 @@
678690 u32 dp_sel;
679691 int i;
680692
681
- if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
682
- 1, 40, 100, 100))
693
+ if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL, DP_SEL_DPRDY_,
694
+ 1, 40, 100, 100))
683695 return -EIO;
684696 dp_sel = lan743x_csr_read(adapter, DP_SEL);
685697 dp_sel &= ~DP_SEL_MASK_;
....@@ -690,8 +702,9 @@
690702 lan743x_csr_write(adapter, DP_ADDR, addr + i);
691703 lan743x_csr_write(adapter, DP_DATA_0, buf[i]);
692704 lan743x_csr_write(adapter, DP_CMD, DP_CMD_WRITE_);
693
- if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
694
- 1, 40, 100, 100))
705
+ if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL,
706
+ DP_SEL_DPRDY_,
707
+ 1, 40, 100, 100))
695708 return -EIO;
696709 }
697710