Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp3019980pxb; Tue, 24 Aug 2021 13:07:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0v+AKRQTemb1D/YLly7Ggmj2D5Hm83WWohZWnBnU8OGPLk13MuIEiMY9vaJ95fnzeWa9q X-Received: by 2002:a6b:7b4b:: with SMTP id m11mr32629446iop.165.1629835654423; Tue, 24 Aug 2021 13:07:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629835654; cv=none; d=google.com; s=arc-20160816; b=UHsLasatoP8JTGb174O7I/htjh6PJT3TmMhRVszGjOu5LmIBcmhpCydr9dgEHJ2MiS ct+h90HwS1JyVA/pGvL3z1+52uGyHkDWYw6rwPdnfrIf2VGqP0TOXEUJcmVXIx5psc0v Pwc1SIOs5OMvZc/QoUr7bTd5GnhzTM3Na5LCCX+rAhPrv4BQlMaeQiV7ZiM06orj5HWE zjdslX6TFEq95hfMHH6AgOikaUOrmBlrVIZj+hUmcei+i9nQk/MoATADdc0iGcyzKOZ8 tquVvhiy21GL5H1S4O24qojRx0ebkyyR0BmfQkTI+TobcH8jzGAAPAb3ujQE2UthVNEH kg/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=QVJI5X+dNwBWXacEbSJmJ8LCZKOhYu3TnYWZQlB8Vt8=; b=VFthA44daaeueGchCG2+ROyBa2ScriVf9bvYN59PEG740PKwMO7nIq6gEc43X6dedA D1lZCIxDXsLJovAtthvgmNorVJsstL8YVqExpw0v/81LvmSI+Z+8zppeHU7yl/SixzRA mATPwXAEMNUleefjr2CmQw7bHC3V5nCbmLUN94QQCDLhgjGt2aPyBp7+hZia8recH2W6 eJLZKWEwRU/VljOWGpVVhPP70+JwgA5HB0yJ6AKexT30NOkgwcMWtixJxwiBayZXFK5R AgZ33nCcQKssQwAXTBq9VJTA6NRjd+wmy03QqDhJCyPNBBQ6/70NC43E8hu4yKECd5MZ IDxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CFSBHFcY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id t13si22738033jaj.38.2021.08.24.13.07.21; Tue, 24 Aug 2021 13:07:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CFSBHFcY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S233713AbhHXUGW (ORCPT + 99 others); Tue, 24 Aug 2021 16:06:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:38856 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229514AbhHXUGV (ORCPT ); Tue, 24 Aug 2021 16:06:21 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id BAA35613A7; Tue, 24 Aug 2021 20:05:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1629835536; bh=VKqDPcr/CV0TdWqn2OdiAByy9r5jf6KX6ZEZ8hc0U78=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=CFSBHFcYtjUPrzR8O1hi3aOhfjYpD9tpXUmWGHbyxLx45vUFit5OD8GF2FCzUFtfW jtglbcaqy5JdGyrqU+Y6NQiOOOb2DHhpFsYUBTg1/IsO4HemEJ3A2WsxMvggD1heOf PJ1rf1hJc3hZp60CBvMM2cuwI2lnl63X1ttsXEaC49Jv1iLRxjWpqAlBF3vC/Wq05g qdpubMdcAluv8oCjxtioLd8die4Howi25tAhEZbqd6SwBk7dKlRMV+1uYdeE5rogcN r3iQgOzO3kxii3hWbvLrIDwvEt/3JhWC/DKK9QhGpwsYh8vbhVFxd6aKIYp+2PFcFn qFIPizYNuCR1g== Received: by mail-ej1-f52.google.com with SMTP id mf2so28200045ejb.9; Tue, 24 Aug 2021 13:05:36 -0700 (PDT) X-Gm-Message-State: AOAM531Kp3RMJ8CP19U3odq04u2lV0ulRN2J3W4zRU4BXSP430jm+OSQ sJWdGScMiA3PRmuCbhXGrypVIqp+wlI59qkpBA== X-Received: by 2002:a17:906:25db:: with SMTP id n27mr41523122ejb.108.1629835535296; Tue, 24 Aug 2021 13:05:35 -0700 (PDT) MIME-Version: 1.0 References: <20210816074619.177383-1-wangkefeng.wang@huawei.com> <20210816074619.177383-4-wangkefeng.wang@huawei.com> In-Reply-To: <20210816074619.177383-4-wangkefeng.wang@huawei.com> From: Rob Herring Date: Tue, 24 Aug 2021 15:05:23 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 3/3] amba: Properly handle device probe without IRQ domain To: Kefeng Wang , Saravana Kannan Cc: "linux-kernel@vger.kernel.org" , Frank Rowand , devicetree@vger.kernel.org, Russell King , Linus Walleij , linux-arm-kernel , Ruizhe Lin Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org +Saravana Saravana mentioned to me there may be some issues with this one... On Mon, Aug 16, 2021 at 2:43 AM Kefeng Wang wrote: > > of_amba_device_create() uses irq_of_parse_and_map() to translate > a DT interrupt specification into a Linux virtual interrupt number. > > But it doesn't properly handle the case where the interrupt controller > is not yet available, eg, when pl011 interrupt is connected to MBIGEN > interrupt controller, because the mbigen initialization is too late, > which will lead to no IRQ due to no IRQ domain found, log is shown below, > "irq: no irq domain found for uart0 !" > > use of_irq_get() to return -EPROBE_DEFER as above, and in the function > amba_device_try_add()/amba_device_add(), it will properly handle in such > case, also return 0 in other fail cases to be consistent as before. > > Cc: Russell King > Cc: Rob Herring > Cc: Frank Rowand > Reported-by: Ruizhe Lin > Signed-off-by: Kefeng Wang > --- > drivers/amba/bus.c | 27 +++++++++++++++++++++++++++ > drivers/of/platform.c | 6 +----- > 2 files changed, 28 insertions(+), 5 deletions(-) > > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c > index 36f2f42c8014..720aa6cdd402 100644 > --- a/drivers/amba/bus.c > +++ b/drivers/amba/bus.c > @@ -19,6 +19,7 @@ > #include > #include > #include > +#include > > #include > > @@ -371,12 +372,38 @@ static void amba_device_release(struct device *dev) > kfree(d); > } > > +static int of_amba_device_decode_irq(struct amba_device *dev) > +{ > + struct device_node *node = dev->dev.of_node; > + int i, irq = 0; > + > + if (IS_ENABLED(CONFIG_OF_IRQ) && node) { > + /* Decode the IRQs and address ranges */ > + for (i = 0; i < AMBA_NR_IRQS; i++) { > + irq = of_irq_get(node, i); > + if (irq < 0) { > + if (irq == -EPROBE_DEFER) > + return irq; > + irq = 0; > + } > + > + dev->irq[i] = irq; > + } > + } > + > + return 0; > +} > + > static int amba_device_try_add(struct amba_device *dev, struct resource *parent) > { > u32 size; > void __iomem *tmp; > int i, ret; > > + ret = of_amba_device_decode_irq(dev); > + if (ret) > + goto err_out; > + > ret = request_resource(parent, &dev->res); > if (ret) > goto err_out; > diff --git a/drivers/of/platform.c b/drivers/of/platform.c > index 74afbb7a4f5e..32d5ff8df747 100644 > --- a/drivers/of/platform.c > +++ b/drivers/of/platform.c > @@ -222,7 +222,7 @@ static struct amba_device *of_amba_device_create(struct device_node *node, > { > struct amba_device *dev; > const void *prop; > - int i, ret; > + int ret; > > pr_debug("Creating amba device %pOF\n", node); > > @@ -253,10 +253,6 @@ static struct amba_device *of_amba_device_create(struct device_node *node, > if (prop) > dev->periphid = of_read_ulong(prop, 1); > > - /* Decode the IRQs and address ranges */ > - for (i = 0; i < AMBA_NR_IRQS; i++) > - dev->irq[i] = irq_of_parse_and_map(node, i); > - > ret = of_address_to_resource(node, 0, &dev->res); > if (ret) { > pr_err("amba: of_address_to_resource() failed (%d) for %pOF\n", > -- > 2.26.2 >