From patchwork Fri Nov 15 07:29:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Mack X-Patchwork-Id: 291485 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41E152C0082 for ; Fri, 15 Nov 2013 18:29:28 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753455Ab3KOH3Z (ORCPT ); Fri, 15 Nov 2013 02:29:25 -0500 Received: from mail-bk0-f45.google.com ([209.85.214.45]:35863 "EHLO mail-bk0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751941Ab3KOH3X (ORCPT ); Fri, 15 Nov 2013 02:29:23 -0500 Received: by mail-bk0-f45.google.com with SMTP id r7so1469124bkg.4 for ; Thu, 14 Nov 2013 23:29:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=E3VKwXoUrHE4k+IusQSp917fofDLum9rpFMmKvXBZ/E=; b=EjrSv8vbYI/3b0uAAJfEwElabGdy8c/V9uku5WlHw2NKVwJ7IVgtlNmttn4TEn3eFA zjJRe1SkJCz3dYA9LOJGe7wg64q4NmZTSTkY58AKaAvsoG7kd39VY6azOQveqZi9KK/U KPxRAPGOHJTop1WLdPA9RDWkU0EjvMwyeTns9WCy/PiBGQG6qTDKCzegipO6VkNpVEPQ fcfgOMDqJ5rHlvWq2EUjv/88+JLgAtqHgWTd/boTBWQyXkxb4tv99FIMNQrbxhWJjgst 4w3glMxEutBjj+Nqt7suXJz8aydnmmAcWWNnR7eYwvzeS6zjSENtNZAzfQ1zeUqVlctX UjCg== X-Received: by 10.204.102.71 with SMTP id f7mr118784bko.57.1384500562418; Thu, 14 Nov 2013 23:29:22 -0800 (PST) Received: from tamtam.fritz.box ([2001:4dd0:ff00:9394:224:d7ff:fec6:a0ec]) by mx.google.com with ESMTPSA id on10sm6023370bkb.13.2013.11.14.23.29.21 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Nov 2013 23:29:21 -0800 (PST) From: Daniel Mack To: netdev@vger.kernel.org Cc: davem@davemloft.net, mugunthanvnm@ti.com, ujhelyi.m@gmail.com, sergei.shtylyov@cogentembedded.com, Daniel Mack Subject: [PATCH v2] net: ethernet: ti/cpsw: do not crash on single-MAC machines during resume Date: Fri, 15 Nov 2013 08:29:16 +0100 Message-Id: <1384500556-11634-1-git-send-email-zonque@gmail.com> X-Mailer: git-send-email 1.8.4.2 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org During resume, use for_each_slave to walk the slaves of the cpsw, and soft-reset each of them. This prevents oopses if there is only one slave configured. Signed-off-by: Daniel Mack Acked-by: Mugunthan V N --- drivers/net/ethernet/ti/cpsw.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index edd3e79..afb91ac 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -967,14 +967,19 @@ static inline void cpsw_add_dual_emac_def_ale_entries( priv->host_port, ALE_VLAN, slave->port_vlan); } -static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv) +static void soft_reset_slave(struct cpsw_slave *slave) { char name[32]; - u32 slave_port; - - sprintf(name, "slave-%d", slave->slave_num); + snprintf(name, sizeof(name), "slave-%d", slave->slave_num); soft_reset(name, &slave->sliver->soft_reset); +} + +static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv) +{ + u32 slave_port; + + soft_reset_slave(slave); /* setup priority mapping */ __raw_writel(RX_PRIORITY_MAPPING, &slave->sliver->rx_pri_map); @@ -2173,8 +2178,9 @@ static int cpsw_suspend(struct device *dev) if (netif_running(ndev)) cpsw_ndo_stop(ndev); - soft_reset("sliver 0", &priv->slaves[0].sliver->soft_reset); - soft_reset("sliver 1", &priv->slaves[1].sliver->soft_reset); + + for_each_slave(priv, soft_reset_slave); + pm_runtime_put_sync(&pdev->dev); /* Select sleep pin state */