diff options
Diffstat (limited to 'hw/p8-i2c.c')
-rw-r--r-- | hw/p8-i2c.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/hw/p8-i2c.c b/hw/p8-i2c.c index ec2f7fc..d029854 100644 --- a/hw/p8-i2c.c +++ b/hw/p8-i2c.c @@ -1303,8 +1303,16 @@ static void p8_i2c_check_work(struct p8_i2c_master *master) while (master->state == state_idle && !list_empty(&master->req_list)) { req = list_top(&master->req_list, struct i2c_request, link); rc = p8_i2c_start_request(master, req); - if (rc && rc != OPAL_BUSY) - p8_i2c_complete_request(master, req, rc); + if (rc) { + /* + * If it didn't work the first three times then + * odds are it's not going to work on the 4th. + */ + if (rc && req->retries > 3) + p8_i2c_complete_request(master, req, rc); + else + req->retries++; + } } } |