diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2016-06-01 21:58:49 -0700 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-06-03 09:14:14 +0200 |
commit | 91d3dd2fd84682c06b807e6f9755f095d399cf56 (patch) | |
tree | 44ac0987ad46569731b5ca9ea70a3a0abe7b8477 /drivers/net/e1000/regio.c | |
parent | 72f02e6c0bf64d4598e13dfcc73c126311f243b9 (diff) | |
download | barebox-91d3dd2fd84682c06b807e6f9755f095d399cf56.tar.gz barebox-91d3dd2fd84682c06b807e6f9755f095d399cf56.tar.xz |
e1000: Add a "poll register" function
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/e1000/regio.c')
-rw-r--r-- | drivers/net/e1000/regio.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/net/e1000/regio.c b/drivers/net/e1000/regio.c index 497008463d..b2e9d7b6a7 100644 --- a/drivers/net/e1000/regio.c +++ b/drivers/net/e1000/regio.c @@ -52,3 +52,19 @@ void e1000_write_flush(struct e1000_hw *hw) { e1000_read_reg(hw, E1000_STATUS); } + +int e1000_poll_reg(struct e1000_hw *hw, uint32_t reg, uint32_t mask, + uint32_t value, uint64_t timeout) +{ + const uint64_t start = get_time_ns(); + + do { + const uint32_t v = e1000_read_reg(hw, reg); + + if ((v & mask) == value) + return 0; + + } while (!is_timeout(start, timeout)); + + return -ETIMEDOUT; +} |