| 1631 | } |
| 1632 | |
| 1633 | int ena_com_validate_version(struct ena_com_dev *ena_dev) |
| 1634 | { |
| 1635 | u32 ver; |
| 1636 | u32 ctrl_ver; |
| 1637 | u32 ctrl_ver_masked; |
| 1638 | |
| 1639 | /* Make sure the ENA version and the controller version are at least |
| 1640 | * as the driver expects |
| 1641 | */ |
| 1642 | ver = ena_com_reg_bar_read32(ena_dev, ENA_REGS_VERSION_OFF); |
| 1643 | ctrl_ver = ena_com_reg_bar_read32(ena_dev, |
| 1644 | ENA_REGS_CONTROLLER_VERSION_OFF); |
| 1645 | |
| 1646 | if (unlikely((ver == ENA_MMIO_READ_TIMEOUT) || |
| 1647 | (ctrl_ver == ENA_MMIO_READ_TIMEOUT))) { |
| 1648 | ena_trc_err(ena_dev, "Reg read timeout occurred\n"); |
| 1649 | return ENA_COM_TIMER_EXPIRED; |
| 1650 | } |
| 1651 | |
| 1652 | ena_trc_info(ena_dev, "ENA device version: %d.%d\n", |
| 1653 | (ver & ENA_REGS_VERSION_MAJOR_VERSION_MASK) >> |
| 1654 | ENA_REGS_VERSION_MAJOR_VERSION_SHIFT, |
| 1655 | ver & ENA_REGS_VERSION_MINOR_VERSION_MASK); |
| 1656 | |
| 1657 | ena_trc_info(ena_dev, "ENA controller version: %d.%d.%d implementation version %d\n", |
| 1658 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_MAJOR_VERSION_MASK) |
| 1659 | >> ENA_REGS_CONTROLLER_VERSION_MAJOR_VERSION_SHIFT, |
| 1660 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_MINOR_VERSION_MASK) |
| 1661 | >> ENA_REGS_CONTROLLER_VERSION_MINOR_VERSION_SHIFT, |
| 1662 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION_MASK), |
| 1663 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_IMPL_ID_MASK) >> |
| 1664 | ENA_REGS_CONTROLLER_VERSION_IMPL_ID_SHIFT); |
| 1665 | |
| 1666 | ctrl_ver_masked = |
| 1667 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_MAJOR_VERSION_MASK) | |
| 1668 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_MINOR_VERSION_MASK) | |
| 1669 | (ctrl_ver & ENA_REGS_CONTROLLER_VERSION_SUBMINOR_VERSION_MASK); |
| 1670 | |
| 1671 | /* Validate the ctrl version without the implementation ID */ |
| 1672 | if (ctrl_ver_masked < MIN_ENA_CTRL_VER) { |
| 1673 | ena_trc_err(ena_dev, "ENA ctrl version is lower than the minimal ctrl version the driver supports\n"); |
| 1674 | return -1; |
| 1675 | } |
| 1676 | |
| 1677 | return 0; |
| 1678 | } |
| 1679 | |
| 1680 | static void |
| 1681 | ena_com_free_ena_admin_queue_comp_ctx(struct ena_com_dev *ena_dev, |
no test coverage detected