Received: by 2002:ac0:aa62:0:0:0:0:0 with SMTP id w31-v6csp1948394ima; Thu, 25 Oct 2018 07:26:08 -0700 (PDT) X-Google-Smtp-Source: AJdET5eUci+bmoPPYsyuCWRRLb4n0HSiLIzYqTYln8lgK5IpU1ne9eUBTND4EzqZ+kIF4oprnZ7w X-Received: by 2002:a17:902:8c86:: with SMTP id t6-v6mr1758848plo.55.1540477568782; Thu, 25 Oct 2018 07:26:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1540477568; cv=none; d=google.com; s=arc-20160816; b=dAij5QRJOaxeXgh7drXtWhO/LToJP6zN6Q+4+gHYvOFTSfRVx8tjXgZ2yalgJUmXqV JbmlEjOWUkP5LLnEvXO0JKellPY2P/WN4f0QkWamtAuZOtn3PO0+ORBF/6Ynsksb73YR I/VadXYy9WSN2j0SmUWBLfVWGUIreOwZqcR1oOf91HgKcER6t9ea2y9SCky+fqVG1JPn o/+aXYD4TU8Ud/5RbLdL/OzS9gntyXgrOv/OLBz+zPsY3SJ/nQ3dBO5bH0SFy3lpeqfJ D9YW7j742JsDYlwAi3OhKQwRPB6foyRpzEePeOCr3w7qEWV2LxyZxPh63w8Mz8dC8JyH LuVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HhC0R/9oGg59oQw9mfM4jQ+aIk98eH3ZGbl13PMgQOw=; b=RmcpVIYb/kMQWDuwHoH14bA2a8/mbYtJN7PbwHa7+DCeaMXL+M7kzXSf4VPobwGJGO T+3XWzNpRMs9AynkBDZPZUAlaYoPTgRhdk8aIROCBUttKjEYbvuUGnoH1P3Z4VbLvYXg mQ7nTuerhyAvRfrC76DzQUB2ZTzJb9JRScL7xFNz82SN/obAedgWYLz1aknQLYA9//yv U25T1+hNeEYDsfyCYrW8MVrPtS6EmDjYcPP7zbOQ+xLEn91/1TDfV13QAfKCA10+05sO 1do3av320n2tsAuHPm2CCdOk2g6VJBFO3D+Hy99F6xdYCagGxWb8YjsK2tHtxtVWrlJ7 RBGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oma9YBXI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d124-v6si8255133pfc.249.2018.10.25.07.25.23; Thu, 25 Oct 2018 07:26:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oma9YBXI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731115AbeJYWxe (ORCPT + 99 others); Thu, 25 Oct 2018 18:53:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:36132 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728023AbeJYWxd (ORCPT ); Thu, 25 Oct 2018 18:53:33 -0400 Received: from sasha-vm.mshome.net (unknown [167.98.65.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A2F9D20883; Thu, 25 Oct 2018 14:20:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1540477235; bh=GzQQssWj+vwvgP7yLm+ItKkQ/L4GpmpQxQ4JnxtollU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oma9YBXIsY4ZIaZV6VtpvqbtwR9V5jqAdfEKx1Xk+pspZdwHgdxawmhVphX+De7ju rFUJLJhCgcYtyh8BEWY1ve5FfBe/duJp33RvRxOBvDtjF+mme+tzdkZE+JRrFlPE18 8UEuGAfi0A3o/RyHwhRFZyHJ4TIRMYiiBGHAAHKc= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Robert Jarzmik , Sergei Shtylyov , "David S . Miller" , Sasha Levin Subject: [PATCH AUTOSEL 3.18 67/98] net: ethernet: davicom: fix devicetree irq resource Date: Thu, 25 Oct 2018 10:18:22 -0400 Message-Id: <20181025141853.214051-67-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181025141853.214051-1-sashal@kernel.org> References: <20181025141853.214051-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Robert Jarzmik [ Upstream commit b5a099c67a1c36b91356624ce86eb3f9f48a82c7 ] The dm9000 driver doesn't work in at least one device-tree configuration, spitting an error message on irq resource : [    1.062495] dm9000 8000000.ethernet: insufficient resources [    1.068439] dm9000 8000000.ethernet: not found (-2). [    1.073451] dm9000: probe of 8000000.ethernet failed with error -2 The reason behind is that the interrupt might be provided by a gpio controller, not probed when dm9000 is probed, and needing the probe deferral mechanism to apply. Currently, the interrupt is directly taken from resources. This patch changes this to use the more generic platform_get_irq(), which handles the deferral. Moreover, since commit Fixes: 7085a7401ba5 ("drivers: platform: parse IRQ flags from resources"), the interrupt trigger flags are honored in platform_get_irq(), so remove the needless code in dm9000. Signed-off-by: Robert Jarzmik Acked-by: Marcel Ziswiler Cc: Sergei Shtylyov Tested-by: Sergei Ianovich Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/davicom/dm9000.c | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c index f3ba840cbf7b..ef24b60b4d3f 100644 --- a/drivers/net/ethernet/davicom/dm9000.c +++ b/drivers/net/ethernet/davicom/dm9000.c @@ -125,7 +125,6 @@ struct board_info { struct resource *data_res; struct resource *addr_req; /* resources requested */ struct resource *data_req; - struct resource *irq_res; int irq_wake; @@ -1297,22 +1296,16 @@ static int dm9000_open(struct net_device *dev) { struct board_info *db = netdev_priv(dev); - unsigned long irqflags = db->irq_res->flags & IRQF_TRIGGER_MASK; if (netif_msg_ifup(db)) dev_dbg(db->dev, "enabling %s\n", dev->name); - /* If there is no IRQ type specified, default to something that - * may work, and tell the user that this is a problem */ - - if (irqflags == IRQF_TRIGGER_NONE) - irqflags = irq_get_trigger_type(dev->irq); - - if (irqflags == IRQF_TRIGGER_NONE) + /* If there is no IRQ type specified, tell the user that this is a + * problem + */ + if (irq_get_trigger_type(dev->irq) == IRQF_TRIGGER_NONE) dev_warn(db->dev, "WARNING: no IRQ resource flags set.\n"); - irqflags |= IRQF_SHARED; - /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */ iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */ mdelay(1); /* delay needs by DM9000B */ @@ -1320,7 +1313,8 @@ dm9000_open(struct net_device *dev) /* Initialize DM9000 board */ dm9000_init_dm9000(dev); - if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev)) + if (request_irq(dev->irq, dm9000_interrupt, IRQF_SHARED, + dev->name, dev)) return -EAGAIN; /* Now that we have an interrupt handler hooked up we can unmask * our interrupts @@ -1460,15 +1454,22 @@ dm9000_probe(struct platform_device *pdev) db->addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); db->data_res = platform_get_resource(pdev, IORESOURCE_MEM, 1); - db->irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (db->addr_res == NULL || db->data_res == NULL || - db->irq_res == NULL) { - dev_err(db->dev, "insufficient resources\n"); + if (!db->addr_res || !db->data_res) { + dev_err(db->dev, "insufficient resources addr=%p data=%p\n", + db->addr_res, db->data_res); ret = -ENOENT; goto out; } + ndev->irq = platform_get_irq(pdev, 0); + if (ndev->irq < 0) { + dev_err(db->dev, "interrupt resource unavailable: %d\n", + ndev->irq); + ret = ndev->irq; + goto out; + } + db->irq_wake = platform_get_irq(pdev, 1); if (db->irq_wake >= 0) { dev_dbg(db->dev, "wakeup irq %d\n", db->irq_wake); @@ -1530,7 +1531,6 @@ dm9000_probe(struct platform_device *pdev) /* fill in parameters for net-dev structure */ ndev->base_addr = (unsigned long)db->io_addr; - ndev->irq = db->irq_res->start; /* ensure at least we have a default set of IO routines */ dm9000_set_io(db, iosize); -- 2.17.1