From ffd9c39d1c019c9592b8b8981a463afa040c7f98 Mon Sep 17 00:00:00 2001 From: aiju Date: Fri, 10 Jan 2020 20:43:24 +0000 Subject: dont spin on MDIO --- sys/src/9/cycv/ethercycv.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'sys/src') diff --git a/sys/src/9/cycv/ethercycv.c b/sys/src/9/cycv/ethercycv.c index 576eae63d..64c4ea91a 100644 --- a/sys/src/9/cycv/ethercycv.c +++ b/sys/src/9/cycv/ethercycv.c @@ -87,18 +87,22 @@ struct Ctlr { static void mdwrite(Ctlr *c, int r, u16int v) { - while((c->r[GMII_ADDRESS] & 1<<0) != 0); + while((c->r[GMII_ADDRESS] & 1<<0) != 0) + tsleep(&up->sleep, return0, nil, 1); c->r[GMII_DATA] = v; c->r[GMII_ADDRESS] = 1<<11 | (r&31)<<6 | 1<<1 | 1<<0; - while((c->r[GMII_ADDRESS] & 1<<0) != 0); + while((c->r[GMII_ADDRESS] & 1<<0) != 0) + tsleep(&up->sleep, return0, nil, 1); } static u16int mdread(Ctlr *c, int r) { - while((c->r[GMII_ADDRESS] & 1<<0) != 0); + while((c->r[GMII_ADDRESS] & 1<<0) != 0) + tsleep(&up->sleep, return0, nil, 1); c->r[GMII_ADDRESS] = 1<<11 | (r&31)<<6 | 1<<0; - while((c->r[GMII_ADDRESS] & 1<<0) != 0); + while((c->r[GMII_ADDRESS] & 1<<0) != 0) + tsleep(&up->sleep, return0, nil, 1); return c->r[GMII_DATA]; } -- cgit v1.2.3