From patchwork Thu Aug 2 12:25:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 10553541 X-Patchwork-Delegate: idosch@idosch.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1F3FD139A for ; Thu, 2 Aug 2018 12:28:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 11D9D2BDAD for ; Thu, 2 Aug 2018 12:28:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 05FE92BDB2; Thu, 2 Aug 2018 12:28:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id E31342BDAD for ; Thu, 2 Aug 2018 12:28:53 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 41h8c26QCQzF1pk for ; Thu, 2 Aug 2018 22:28:50 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=resnulli.us Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="KwaS10m7"; dkim-atps=neutral X-Original-To: linux-mlxsw@lists.ozlabs.org Delivered-To: linux-mlxsw@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=none (mailfrom) smtp.mailfrom=resnulli.us (client-ip=2a00:1450:4864:20::444; helo=mail-wr1-x444.google.com; envelope-from=jiri@resnulli.us; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=resnulli.us Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="KwaS10m7"; dkim-atps=neutral Received: from mail-wr1-x444.google.com (mail-wr1-x444.google.com [IPv6:2a00:1450:4864:20::444]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 41h8bw1KrhzF1pk for ; Thu, 2 Aug 2018 22:28:42 +1000 (AEST) Received: by mail-wr1-x444.google.com with SMTP id g6-v6so1969076wrp.0 for ; Thu, 02 Aug 2018 05:28:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=UsXyvg2UvvQ2vVILVKLpdLUjV5WrvmNkoHvda1pnMnw=; b=KwaS10m7VmGFEQRZkq/pcb4sk4htXk9bkRbYD60oCgKtAQbreLXe9l1ddrZEBkWESn 9hmEqiMSdyMfQ9DjXx4P84ybdl9omIexJJo34dtgabW7B0eEQ3t/065pPYswiZ1VCcv/ y96Zw4na9FLwYLDIEG1jaiTbWGjiLedMR7M0XSTduE0QR1NGbhCjjcri19XNgWH7q4EB UJ6+SG+ZA3rTmRvOVNwb5DSKUepmzm1qczXikxe1L6v42xHh/KGSNnpGjBCarhWy4WFe CjIImJpo27DLevtaiO+2l2Uez2LB8Axz9r7fkk+x0roNHaVNA2vOr9BV2RmZ2WgAnPsz stsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=UsXyvg2UvvQ2vVILVKLpdLUjV5WrvmNkoHvda1pnMnw=; b=XGxcRwYzoLfvoM9Zul1AmP93WpTkmlCcoaewpMHQ4QGfTsokJ1874Ywmsk8e69NnS0 5RvoxiLY8/fBaAPMF6p9p/qN7lR9+wbzY/Yknhwd7OvK74G4+/UdWHWEfvI72O1BmRQy Hev1mRJskuijZRFcpYcH634x57ksWSFhy16P17ZW1yG2Jq7/od9VHiJDjj12XdjEYUBj fMjYShOPvfhY+sGxVOgbh9x8U9F2Jw4GKS0p4MmCXoasr6UStGgqXwRut8LaqorKdrXr +uwy6WoiSu9A23Zcsu1R8vs7lF2jawiPpKBUjObSxEKTWPHeoKTh+Mm4cDwxK6yUR82x S/Kg== X-Gm-Message-State: AOUpUlEh/ntfIMStLPNT7WeacHsPkn4K2wgj0F80YH8/tp2RyYx2xT7L f2IkY4KrVnD+9B5ZrjaLIzFr/g== X-Google-Smtp-Source: AAOMgpdd4WMfKCzFmo44XAmJmBQaQWgbxtwGkDxqUc/2WmqcJGPJPSfeimKhGeti54f/BwXdUfiFGQ== X-Received: by 2002:a5d:4985:: with SMTP id r5-v6mr1858023wrq.116.1533212919533; Thu, 02 Aug 2018 05:28:39 -0700 (PDT) Received: from localhost (static-cl188134168102.unet.cz. [188.134.168.102]) by smtp.gmail.com with ESMTPSA id z11-v6sm2375269wrm.94.2018.08.02.05.28.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Aug 2018 05:28:38 -0700 (PDT) From: Jiri Pirko To: linux-internal@mellanox.com Subject: [patch net-next/mlxsw internal] mlxsw: spectrum: Reset FW after flash Date: Thu, 2 Aug 2018 14:25:51 +0200 Message-Id: <20180802122551.1145-1-jiri@resnulli.us> X-Mailer: git-send-email 2.14.4 X-BeenThere: linux-mlxsw@lists.ozlabs.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: mlxsw driver development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: linux-mlxsw-bounces+patchwork-linux-mlxsw=patchwork.kernel.org@lists.ozlabs.org X-Virus-Scanned: ClamAV using ClamSMTP From: Jiri Pirko Current FW fixes a bug and allows to load newly flashed FW image after reset. So make sure the reset happens after flash. Indicate the need down to PCI layer by -EAGAIN. Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/pci.c | 11 ++++++++++- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 17 +++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c index 8c1857fdd583..4bec4f6b80ca 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c @@ -1719,6 +1719,7 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { const char *driver_name = pdev->driver->name; struct mlxsw_pci *mlxsw_pci; + bool called_again = false; int err; mlxsw_pci = kzalloc(sizeof(*mlxsw_pci), GFP_KERNEL); @@ -1775,10 +1776,18 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) mlxsw_pci->bus_info.dev = &pdev->dev; mlxsw_pci->id = id; +again: err = mlxsw_core_bus_device_register(&mlxsw_pci->bus_info, &mlxsw_pci_bus, mlxsw_pci, false, NULL); - if (err) { + /* -EAGAIN is returned in case the FW was updated. FW needs + * a reset, so lets try to call mlxsw_core_bus_device_register() + * again. + */ + if (err == -EAGAIN && !called_again) { + called_again = true; + goto again; + } else if (err) { dev_err(&pdev->dev, "cannot register bus device\n"); goto err_bus_device_register; } diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 9eaa155e7bf6..37cf6730b431 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -310,6 +310,8 @@ static int mlxsw_sp_firmware_flash(struct mlxsw_sp *mlxsw_sp, return mlxfw_firmware_flash(&mlxsw_sp_mlxfw_dev.mlxfw_dev, firmware); } +#define MLXSW_SP_FWREV_CANRESET_MINOR 1702 + static int mlxsw_sp_fw_rev_validate(struct mlxsw_sp *mlxsw_sp) { const struct mlxsw_fw_rev *rev = &mlxsw_sp->bus_info->fw_rev; @@ -347,7 +349,16 @@ static int mlxsw_sp_fw_rev_validate(struct mlxsw_sp *mlxsw_sp) err = mlxsw_sp_firmware_flash(mlxsw_sp, firmware); release_firmware(firmware); - return err; + if (err) + dev_err(mlxsw_sp->bus_info->dev, "Could not upgrade firmware\n"); + + /* On FW flash success, tell the caller FW reset is needed + * if current FW supports it. + */ + if (rev->minor >= MLXSW_SP_FWREV_CANRESET_MINOR) + return err ? err : -EAGAIN; + else + return 0; } int mlxsw_sp_flow_counter_get(struct mlxsw_sp *mlxsw_sp, @@ -3701,10 +3712,8 @@ static int mlxsw_sp_init(struct mlxsw_core *mlxsw_core, mlxsw_sp->bus_info = mlxsw_bus_info; err = mlxsw_sp_fw_rev_validate(mlxsw_sp); - if (err) { - dev_err(mlxsw_sp->bus_info->dev, "Could not upgrade firmware\n"); + if (err) return err; - } err = mlxsw_sp_base_mac_get(mlxsw_sp); if (err) {