lkml.org 
[lkml]   [2019]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 070/190] scsi: megaraid_sas: Add check for reset adapter bit
    Date
    [ Upstream commit de93b40d98ead27ee2f7f7df93fdd4914a6c8d8d ]

    For SAS3 and later controllers, FW sets the reset adapter bit indicating
    the driver to perform a controller reset. Driver needs to check if this
    bit is set before doing a reset. This reduces the driver probe failure
    time to 180seconds in case there is a faulty controller connected.

    Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
    Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/megaraid/megaraid_sas_base.c | 33 +++++++++++++++--------
    1 file changed, 22 insertions(+), 11 deletions(-)

    diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
    index b6fc7c6337610..749f10146f630 100644
    --- a/drivers/scsi/megaraid/megaraid_sas_base.c
    +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
    @@ -5218,7 +5218,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
    {
    u32 max_sectors_1;
    u32 max_sectors_2, tmp_sectors, msix_enable;
    - u32 scratch_pad_2, scratch_pad_3, scratch_pad_4;
    + u32 scratch_pad_2, scratch_pad_3, scratch_pad_4, status_reg;
    resource_size_t base_addr;
    struct megasas_register_set __iomem *reg_set;
    struct megasas_ctrl_info *ctrl_info = NULL;
    @@ -5226,6 +5226,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
    int i, j, loop, fw_msix_count = 0;
    struct IOV_111 *iovPtr;
    struct fusion_context *fusion;
    + bool do_adp_reset = true;

    fusion = instance->ctrl_context;

    @@ -5274,19 +5275,29 @@ static int megasas_init_fw(struct megasas_instance *instance)
    }

    if (megasas_transition_to_ready(instance, 0)) {
    - atomic_set(&instance->fw_reset_no_pci_access, 1);
    - instance->instancet->adp_reset
    - (instance, instance->reg_set);
    - atomic_set(&instance->fw_reset_no_pci_access, 0);
    - dev_info(&instance->pdev->dev,
    - "FW restarted successfully from %s!\n",
    - __func__);
    + if (instance->adapter_type >= INVADER_SERIES) {
    + status_reg = instance->instancet->read_fw_status_reg(
    + instance->reg_set);
    + do_adp_reset = status_reg & MFI_RESET_ADAPTER;
    + }

    - /*waitting for about 30 second before retry*/
    - ssleep(30);
    + if (do_adp_reset) {
    + atomic_set(&instance->fw_reset_no_pci_access, 1);
    + instance->instancet->adp_reset
    + (instance, instance->reg_set);
    + atomic_set(&instance->fw_reset_no_pci_access, 0);
    + dev_info(&instance->pdev->dev,
    + "FW restarted successfully from %s!\n",
    + __func__);
    +
    + /*waiting for about 30 second before retry*/
    + ssleep(30);

    - if (megasas_transition_to_ready(instance, 0))
    + if (megasas_transition_to_ready(instance, 0))
    + goto fail_ready_state;
    + } else {
    goto fail_ready_state;
    + }
    }

    megasas_init_ctrl_params(instance);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-09-13 15:16    [W:3.249 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site