From patchwork Wed Aug 29 15:07:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 145444 Delivered-To: patch@linaro.org Received: by 2002:a2e:1648:0:0:0:0:0 with SMTP id 8-v6csp790138ljw; Wed, 29 Aug 2018 08:10:23 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYr+gapmzfQaEken9Yj5DewtCZMTblIc/iQNOgUXdeFCyNQhlOoq1FVTozT/jQfMcfo6W2c X-Received: by 2002:a63:1a1a:: with SMTP id a26-v6mr6077231pga.449.1535555422903; Wed, 29 Aug 2018 08:10:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535555422; cv=none; d=google.com; s=arc-20160816; b=cu36b4ZmqMC42lvTuoQ5lMjqQCa+OJKgNHbP3qO/aWMJtv0MOB20rQbwct/P1xc1jg 7rnUIVeB3p5jJHkpEmMrPWX6YkSuM6t3QSJHPW0vWvbcHzkYV+uk4vyyXwFRexykAvhy /+LB4vj/AAnPPB6bd7aek7WZOq/V+6qmYmv8S8dMB/0nQ0z1J3ss57A0M3QDbvmeVoZC 5KUIxHBDtRBDEsi/5CAiOq1osl70e11JuEgOZCaR3Zh48icPUSqVF1U8OPgIbQRZL/rO zCQ+bsNDqKn6R5XjNVoARQZTLcqR/KDcVc3ZNXwCPDgU/e7lbflrI06ey7BbP8+m3a/Q Kqxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from:arc-authentication-results; bh=O0AZW6Cn4+ctI7gDqKWWRFrZmOyTQpjdVMixaMGRVqg=; b=B6CAOhiglWxBtbzJwjWCAC00n8gbjK6dpKqcRBZ6TUQ0dfiAb4GWOFDfwZZsn7uo3c PTZA3SkOOluw1xs9BFn4NXjF1T7Uz+fgQ+WHuVGMxcLtXRuCeLzH0rourgDTifoPSKai YA6iaREEv/Im4vvRKJ4KmWxH//GEnsfDZmWMaGz3OXlezuKho2frP24QfeT8zyoYnTVD Tgk8ov7pQ5MSsMa3ImFXpRyzM5/W6TkX2HaQsx0kPPoG3hGq4w9l+vShWqwU9qwQxNG8 NG5+UoWMYSOy5VAUWZoZYfW7DAXhsdyF6WWPdzmiOXQjlvxToSKINegmZmP8sBIe6xIo 8rQQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r8-v6si4401128pgs.144.2018.08.29.08.10.22; Wed, 29 Aug 2018 08:10:22 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729071AbeH2THn (ORCPT + 32 others); Wed, 29 Aug 2018 15:07:43 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:34277 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727668AbeH2THn (ORCPT ); Wed, 29 Aug 2018 15:07:43 -0400 Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id B6DEC86985F9; Wed, 29 Aug 2018 23:10:16 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS408-HUB.china.huawei.com (10.3.19.208) with Microsoft SMTP Server id 14.3.399.0; Wed, 29 Aug 2018 23:10:08 +0800 From: John Garry To: CC: , , , , , , , , , John Garry Subject: [PATCH] serial: 8250_of: Fix for lack of interrupt support Date: Wed, 29 Aug 2018 23:07:57 +0800 Message-ID: <1535555277-102256-1-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In commit c58caaab3bf8 ("serial: 8250: of: Defer probe on missing IRQ"), a check was added for the UART driver being probed prior to the parent IRQ controller. Unfortunately this breaks certain boards which have no interrupt support, like Huawei D03. Indeed, the 8250 DT bindings state that interrupts should be supported - not must. To fix, switch from irq_of_parse_and_map() to of_irq_get(), which does relay whether the IRQ host controller domain is not ready, i.e. defer probe, instead of assuming it. Fixes: c58caaab3bf8 ("serial: 8250: of: Defer probe on missing IRQ") Signed-off-by: John Garry --- Note: I think that it would better if we could try to get the interrupt before clk+pm enabling, so we don't need to disable later when deferring, but this is not a fix. -- 1.9.1 diff --git a/drivers/tty/serial/8250/8250_of.c b/drivers/tty/serial/8250/8250_of.c index af8beef..c370e776 100644 --- a/drivers/tty/serial/8250/8250_of.c +++ b/drivers/tty/serial/8250/8250_of.c @@ -58,7 +58,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev, struct resource resource; struct device_node *np = ofdev->dev.of_node; u32 clk, spd, prop; - int ret; + int ret, irq; memset(port, 0, sizeof *port); @@ -143,21 +143,27 @@ static int of_platform_serial_setup(struct platform_device *ofdev, if (ret >= 0) port->line = ret; - port->irq = irq_of_parse_and_map(np, 0); - if (!port->irq) { - ret = -EPROBE_DEFER; - goto err_unprepare; + irq = of_irq_get(np, 0); + if (irq < 0) { + if (port->irq == -EPROBE_DEFER) { + ret = -EPROBE_DEFER; + goto err_unprepare; + } + /* IRQ support not mandatory */ + irq = 0; } + port->irq = irq; + info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL); if (IS_ERR(info->rst)) { ret = PTR_ERR(info->rst); - goto err_dispose; + goto err_unprepare; } ret = reset_control_deassert(info->rst); if (ret) - goto err_dispose; + goto err_unprepare; port->type = type; port->uartclk = clk; @@ -184,8 +190,6 @@ static int of_platform_serial_setup(struct platform_device *ofdev, port->handle_irq = fsl8250_handle_irq; return 0; -err_dispose: - irq_dispose_mapping(port->irq); err_unprepare: clk_disable_unprepare(info->clk); err_pmruntime: