| 984 | } |
| 985 | |
| 986 | static int wait_for_reset_state(struct ena_com_dev *ena_dev, u32 timeout, |
| 987 | u16 exp_state) |
| 988 | { |
| 989 | u32 val, exp = 0; |
| 990 | ena_time_t timeout_stamp; |
| 991 | |
| 992 | /* Convert timeout from resolution of 100ms to us resolution. */ |
| 993 | timeout_stamp = ENA_GET_SYSTEM_TIMEOUT(100 * 1000 * timeout); |
| 994 | |
| 995 | while (1) { |
| 996 | val = ena_com_reg_bar_read32(ena_dev, ENA_REGS_DEV_STS_OFF); |
| 997 | |
| 998 | if (unlikely(val == ENA_MMIO_READ_TIMEOUT)) { |
| 999 | ena_trc_err(ena_dev, "Reg read timeout occurred\n"); |
| 1000 | return ENA_COM_TIMER_EXPIRED; |
| 1001 | } |
| 1002 | |
| 1003 | if ((val & ENA_REGS_DEV_STS_RESET_IN_PROGRESS_MASK) == |
| 1004 | exp_state) |
| 1005 | return 0; |
| 1006 | |
| 1007 | if (ENA_TIME_EXPIRE(timeout_stamp)) |
| 1008 | return ENA_COM_TIMER_EXPIRED; |
| 1009 | |
| 1010 | ena_delay_exponential_backoff_us(exp++, ena_dev->ena_min_poll_delay_us); |
| 1011 | } |
| 1012 | } |
| 1013 | |
| 1014 | static bool ena_com_check_supported_feature_id(struct ena_com_dev *ena_dev, |
| 1015 | enum ena_admin_aq_feature_id feature_id) |
no test coverage detected