Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp9949ybl; Tue, 13 Aug 2019 14:51:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqy04SmK9uo24XELM1SIBAc4FtuYtkIHL1sQfnGX0bF8QVOZI/iuvf/S72DrjKE6dRyCrKo2 X-Received: by 2002:a17:90a:f011:: with SMTP id bt17mr4100451pjb.21.1565733092892; Tue, 13 Aug 2019 14:51:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565733092; cv=none; d=google.com; s=arc-20160816; b=LwvIUxYlzrJU/qOL02xtOIb87PgMB6YlqTUAb6tet7jE0i8ZYMehEpiZvTZJOqf9fU 0wuzYjtDssNm1dfnMqwIifL4Ij7czLU5xQxhV7IeB2aizWjll94DrJvWRaQx0J1obmQn 1/yGrbvIdhk/TfHEi6qfM8FtS7e8iqbFGdmLjXCdRZq1JunCzrllnPX8HD27MSEGOCax wNGPcLQFg+44KMK2gXt0XuGB6cVOE7qoMiFQ1oec0EsYelMNzSzrQY86+B7EIcwkyni1 AB9+uAl2mAM1FmvEpnJ3In6n+NJrI97nvshJ89RsdhLQJrWOYNHwc8v6OuF34QhT4K4W oHrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=t9XD3JxcedtkyEm6h+0jBtFFzPdxIVm1FYVED9Ft2A4=; b=fFw/yCpFAebdrKZ+L1/68MbtTuZ9zYWfn1avFng4H8CwyVGTQUa1XyPHmkqOFziuH6 mYG+ewXf8JLqT6zd8CqgjlkGQNUmTFanEB8RSP5eKJoGsHq4urBhlY0SBDtY2QWmdsvS VX/wEE/rAEdN4xyW6lNXlU+3G/Nbnr7gM9P4zf4TJ5XnmQMR6qvxqAQ+t8ZoeZUxNVAV Db86eCHQf877t4+VCdF/1GYLx6g9ksq+uBN0k9TxF5FadHb311Y0D6frqh61HclwYhtp JvY7IDvVMrWI4rnDsukBurvF9TlfFEIXRT/snxEeZmH7ZVPGiE9PyiQ20wnMEKGzw5Dp nSuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="sqrnJ/m/"; 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 p1si59185333plr.103.2019.08.13.14.51.16; Tue, 13 Aug 2019 14:51:32 -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="sqrnJ/m/"; 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 S1726765AbfHMVuL (ORCPT + 99 others); Tue, 13 Aug 2019 17:50:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:35822 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726066AbfHMVuL (ORCPT ); Tue, 13 Aug 2019 17:50:11 -0400 Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) (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 03A8A20842; Tue, 13 Aug 2019 21:50:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565733010; bh=qZlws6v+N8kI1UKOVdpEHH2UF31aMI5gwG/rOfFqHzw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=sqrnJ/m/lZjwrQjDTqlrzGi1anuWpCof3q1L4UIhTXIXaYkQySPbMoiC5CnzVwWWc 9148vWRJwV4fBbIZRDHWDqWS4brABGhBzsHkksdoqSgu5KWedwbYeyOfL7UBBRyoJR Bz5WUcSlul2NfHeUcZ1jzK8ApAkBqsJYaJLA/Zfo= Received: by mail-qk1-f177.google.com with SMTP id s145so80982484qke.7; Tue, 13 Aug 2019 14:50:09 -0700 (PDT) X-Gm-Message-State: APjAAAU5X3DWyr5I4q02Mjg0VEzG1I5wYL4UzGnYxWx3SnylrQ+6hVUW BS2B8dVgUTWTDJsdvhL+A7ev9Hy3z6pqQbicnQ== X-Received: by 2002:a37:a44a:: with SMTP id n71mr34676994qke.393.1565733009197; Tue, 13 Aug 2019 14:50:09 -0700 (PDT) MIME-Version: 1.0 References: <20190808140153.9156-1-dinguyen@kernel.org> In-Reply-To: <20190808140153.9156-1-dinguyen@kernel.org> From: Rob Herring Date: Tue, 13 Aug 2019 15:49:58 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCHv3] drivers/amba: add reset control to amba bus probe To: Dinh Nguyen , Russell King Cc: devicetree@vger.kernel.org, "linux-kernel@vger.kernel.org" , Frank Rowand , Kees Cook , Anton Vorontsov , Colin Cross , Tony Luck Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org +Russell On Thu, Aug 8, 2019 at 8:02 AM Dinh Nguyen wrote: > > The primecell controller on some SoCs, i.e. SoCFPGA, is held in reset by > default. Until recently, the DMA controller was brought out of reset by the > bootloader(i.e. U-Boot). But a recent change in U-Boot, the peripherals that > are not used are held in reset and are left to Linux to bring them out of > reset. > > Add a mechanism for getting the reset property and de-assert the primecell > module from reset if found. This is a not a hard fail if the reset property > is not present in the device tree node, so the driver will continue to probe. > > Because there are different variants of the controller that may have multiple > reset signals, the code will find all reset(s) specified and de-assert them. > > Signed-off-by: Dinh Nguyen > --- > v3: add a reset_control_put() > add error handling for -EPROBE_DEFER > v2: move reset control to bus code > find all reset properties and de-assert them > --- > drivers/amba/bus.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c > index 100e798a5c82..00e68ea416ca 100644 > --- a/drivers/amba/bus.c > +++ b/drivers/amba/bus.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > > #include > > @@ -401,6 +402,28 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent) > ret = amba_get_enable_pclk(dev); > if (ret == 0) { > u32 pid, cid; > + int count; > + struct reset_control *rstc; > + > + /* > + * Find reset control(s) of the amba bus and de-assert them. > + */ > + count = reset_control_get_count(&dev->dev); > + while (count > 0) { > + rstc = of_reset_control_get_shared_by_index(dev->dev.of_node, count - 1); > + if (IS_ERR(rstc)) { > + if (PTR_ERR(rstc) == -EPROBE_DEFER) { > + ret = -EPROBE_DEFER; > + } else { > + dev_err(&dev->dev, "Can't get amba reset!\n"); > + } > + break; > + } else { You can remove the else here and save some indentation on the rest. Otherwise, Reviewed-by: Rob Herring > + reset_control_deassert(rstc); > + reset_control_put(rstc); > + count--; > + } > + } > > /* > * Read pid and cid based on size of resource > -- > 2.20.0 >