@@ -41,17 +41,13 @@ struct nxp_enet_mdio_data {
41
41
static int nxp_enet_mdio_wait_xfer (const struct device * dev )
42
42
{
43
43
struct nxp_enet_mdio_data * data = dev -> data ;
44
- ENET_Type * base = data -> base ;
45
44
46
45
/* This function will not make sense from IRQ context */
47
46
if (k_is_in_isr ()) {
48
47
return - EWOULDBLOCK ;
49
48
}
50
49
51
- if (data -> interrupt_up ) {
52
- /* Enable the interrupt */
53
- base -> EIMR |= ENET_EIMR_MII_MASK ;
54
- } else {
50
+ if (!data -> interrupt_up ) {
55
51
/* If the interrupt is not available to use yet, just busy wait */
56
52
k_busy_wait (CONFIG_MDIO_NXP_ENET_TIMEOUT );
57
53
k_sem_give (& data -> mdio_sem );
@@ -77,7 +73,7 @@ static int nxp_enet_mdio_read(const struct device *dev,
77
73
* Clear the bit (W1C) that indicates MDIO transfer is ready to
78
74
* prepare to wait for it to be set once this read is done
79
75
*/
80
- data -> base -> EIR | = ENET_EIR_MII_MASK ;
76
+ data -> base -> EIR = ENET_EIR_MII_MASK ;
81
77
82
78
/*
83
79
* Write MDIO frame to MII management register which will
@@ -105,7 +101,7 @@ static int nxp_enet_mdio_read(const struct device *dev,
105
101
* read_data = (data -> base -> MMFR & ENET_MMFR_DATA_MASK ) >> ENET_MMFR_DATA_SHIFT ;
106
102
107
103
/* Clear the same bit as before because the event has been handled */
108
- data -> base -> EIR | = ENET_EIR_MII_MASK ;
104
+ data -> base -> EIR = ENET_EIR_MII_MASK ;
109
105
110
106
/* This MDIO interaction is finished */
111
107
(void )k_mutex_unlock (& data -> mdio_mutex );
@@ -127,7 +123,7 @@ static int nxp_enet_mdio_write(const struct device *dev,
127
123
* Clear the bit (W1C) that indicates MDIO transfer is ready to
128
124
* prepare to wait for it to be set once this write is done
129
125
*/
130
- data -> base -> EIR | = ENET_EIR_MII_MASK ;
126
+ data -> base -> EIR = ENET_EIR_MII_MASK ;
131
127
132
128
/*
133
129
* Write MDIO frame to MII management register which will
@@ -153,7 +149,7 @@ static int nxp_enet_mdio_write(const struct device *dev,
153
149
}
154
150
155
151
/* Clear the same bit as before because the event has been handled */
156
- data -> base -> EIR | = ENET_EIR_MII_MASK ;
152
+ data -> base -> EIR = ENET_EIR_MII_MASK ;
157
153
158
154
/* This MDIO interaction is finished */
159
155
(void )k_mutex_unlock (& data -> mdio_mutex );
@@ -170,13 +166,9 @@ static void nxp_enet_mdio_isr_cb(const struct device *dev)
170
166
{
171
167
struct nxp_enet_mdio_data * data = dev -> data ;
172
168
173
- data -> base -> EIR | = ENET_EIR_MII_MASK ;
169
+ data -> base -> EIR = ENET_EIR_MII_MASK ;
174
170
175
- /* Signal that operation finished */
176
171
k_sem_give (& data -> mdio_sem );
177
-
178
- /* Disable the interrupt */
179
- data -> base -> EIMR &= ~ENET_EIMR_MII_MASK ;
180
172
}
181
173
182
174
static void nxp_enet_mdio_post_module_reset_init (const struct device * dev )
@@ -212,7 +204,9 @@ void nxp_enet_mdio_callback(const struct device *dev,
212
204
nxp_enet_mdio_isr_cb (dev );
213
205
break ;
214
206
case NXP_ENET_INTERRUPT_ENABLED :
207
+ /* IRQ was enabled in NVIC, now enable in enet */
215
208
data -> interrupt_up = true;
209
+ data -> base -> EIMR |= ENET_EIMR_MII_MASK ;
216
210
break ;
217
211
default :
218
212
break ;
0 commit comments