From patchwork Wed Jan 3 17:09:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 855096 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="zoE9NFuO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zBcqw5vd3z9s7F for ; Thu, 4 Jan 2018 04:10:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751037AbeACRKC (ORCPT ); Wed, 3 Jan 2018 12:10:02 -0500 Received: from mail-lf0-f65.google.com ([209.85.215.65]:41444 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750970AbeACRKA (ORCPT ); Wed, 3 Jan 2018 12:10:00 -0500 Received: by mail-lf0-f65.google.com with SMTP id h137so2363694lfe.8 for ; Wed, 03 Jan 2018 09:09:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:user-agent:date:to:cc:subject:mime-version :content-disposition; bh=LdHRCBodASLAKfysq3HBr13opeI5nBP7XsZasLZIumQ=; b=zoE9NFuOVBw/OxZ5NJqDqRLbvzhRY6sBSK22MGlLLyHRqfVWCz5j+SidOCH8T0eYZi EMMOlqwzNVaKG70E1oyFZx/U3OG0E6zz2sorO5jhcO1EyLSlsGJI5MWA2KOeIAHjbL4B Idc91CYNzK3OksCKS8d2D8VjJ/jDBXPrhUT/qJWk3HmnHRY7zpENi+VRxzipNbGmhG4A 19hgh3RJeCqDZeS6DAFoGdw2/dzmKGLmAC0/eLhKZKmcuXwzLpHTgrxOkcOYqdbjVXJ3 zZoNnmfm2vrS9fMUMbahAzPx3dcSU+NNWU06WrN5GOC15LHU67XzQkS5SAZ168ZeTvN9 FZGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:user-agent:date:to:cc:subject :mime-version:content-disposition; bh=LdHRCBodASLAKfysq3HBr13opeI5nBP7XsZasLZIumQ=; b=DOMAPge04BSHH11BUHJSrIy5BaD6uZo0JXu/9gvuB4JWfQv54P1hpnh6N26eZ3nwF9 YlPTZ2T0lOARbNFGxXdWyxG08QPkNZo5pcpFXmqdzbMH1lrgiv5pe0fXO+H7Qf/wYsUZ 2QipnqGQIHTd949Yi4aQVt0aWUVjTF3kKePRChoU+QWEnJXYPO21k/Bjf5E8uY4HWmdy klxNrB1Jq6C/Y2Ege4gjzp6/YkOPLzf9jFR+uiBsKeBfOQc+DAP0rGJgcBdNead4EyYb 3vxfqwORrpZecFkVamkxmN6Rfiqk/KiTMQ6YF2CaDiFz5FGmCRPLMtfeHsuhdTn73XXq AAbw== X-Gm-Message-State: AKGB3mJmJTsE+M4KsOsh+ZhX6ucLtIqGneObhf80umxvUG0T6wPBS5Rq 1kPvOXQvDeJVeVHCNDf69t2qslhst3w= X-Google-Smtp-Source: ACJfBosgB4v6aF29OymPTDksEp3v9Ern/dEStPRej746+DPW95cz8BsYVfB8FmecEZYt3E1Ni845fg== X-Received: by 10.46.23.156 with SMTP id 28mr1327293ljx.3.1514999398808; Wed, 03 Jan 2018 09:09:58 -0800 (PST) Received: from wasted.cogentembedded.com ([31.173.87.30]) by smtp.gmail.com with ESMTPSA id 19sm258445ljf.0.2018.01.03.09.09.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 09:09:57 -0800 (PST) From: Sergei Shtylyov X-Google-Original-From: "Sergei Shtylyov" Received: by wasted.cogentembedded.com (sSMTP sendmail emulation); Wed, 03 Jan 2018 20:09:55 +0300 Message-Id: <20180103170955.343662722@cogentembedded.com> User-Agent: quilt/0.64 Date: Wed, 03 Jan 2018 20:09:49 +0300 To: netdev@vger.kernel.org, linux-renesas-soc@vger.kernel.org Cc: linux-sh@vger.kernel.org, Nobuhiro Iwamatsu , Sergei Shtylyov Subject: [PATCH] sh_eth: fix TSU resource handling MIME-Version: 1.0 Content-Disposition: inline; filename=sh_eth-fix-TSU-resource-handling.patch Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When switching the driver to the managed device API, I managed to break the case of a dual Ether devices sharing a single TSU: the 2nd Ether port wouldn't probe. Iwamatsu-san has tried to fix this but his patch was buggy and he then dropped the ball... The solution is to limit calling devm_request_mem_region() to the first of the two ports sharing the same TSU, so devm_ioremap_resource() can't be used anymore for the TSU resource... Fixes: d5e07e69218f ("sh_eth: use managed device API") Reported-by: Nobuhiro Iwamatsu Signed-off-by: Sergei Shtylyov --- The patch is against Dave Miller's 'net.git' repo. drivers/net/ethernet/renesas/sh_eth.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) Index: net/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net/drivers/net/ethernet/renesas/sh_eth.c @@ -3225,10 +3225,29 @@ static int sh_eth_drv_probe(struct platf /* ioremap the TSU registers */ if (mdp->cd->tsu) { struct resource *rtsu; + rtsu = platform_get_resource(pdev, IORESOURCE_MEM, 1); - mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu); - if (IS_ERR(mdp->tsu_addr)) { - ret = PTR_ERR(mdp->tsu_addr); + if (!rtsu) { + dev_err(&pdev->dev, "no TSU resource\n"); + ret = -ENODEV; + goto out_release; + } + /* We can only request the TSU region for the first port + * of the two sharing this TSU for the probe to succeed... + */ + if (devno % 2 == 0 && + !devm_request_mem_region(&pdev->dev, rtsu->start, + resource_size(rtsu), + dev_name(&pdev->dev))) { + dev_err(&pdev->dev, "can't request TSU resource.\n"); + ret = -EBUSY; + goto out_release; + } + mdp->tsu_addr = devm_ioremap(&pdev->dev, rtsu->start, + resource_size(rtsu)); + if (!mdp->tsu_addr) { + dev_err(&pdev->dev, "TSU region ioremap() failed.\n"); + ret = -ENOMEM; goto out_release; } mdp->port = devno % 2;