• Jakub Kicinski's avatar
    eth: bnxt: fix backward compatibility with older devices · 73b24e7c
    Jakub Kicinski authored
    Recent FW interface update bumped the size of struct hwrm_func_cfg_input
    above 128B which is the max some devices support.
    
    Probe on Stratus (BCM957452) with FW 20.8.3.11 fails with:
    
       bnxt_en ...: Unable to reserve tx rings
       bnxt_en ...: 2nd rings reservation failed.
       bnxt_en ...: Not enough rings available.
    
    Once probe is fixed other errors pop up:
    
       bnxt_en ...: Failed to set async event completion ring.
    
    This is because __hwrm_send() rejects requests larger than
    bp->hwrm_max_ext_req_len with -E2BIG. Since the driver doesn't
    actually access any of the new fields, yet, trim the length.
    It should be safe.
    
    Similar workaround exists for backing_store_cfg_input.
    Although that one mins() to a constant of 256, not 128
    we'll effectively use here. Michael explains: "the backing
    store cfg command is supported by relatively newer firmware
    that will accept 256 bytes at least."
    
    To make debugging easier in the future add a warning
    for oversized requests.
    
    Fixes: 754fbf60 ("bnxt_en: Update firmware interface to 1.10.2.171")
    Reviewed-by: default avatarMichael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/20231016171640.1481493-1-kuba@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    73b24e7c
bnxt.c 366 KB