Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp6941040ybh; Thu, 8 Aug 2019 07:59:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqwLs/JtXEqi5f5I21H1J5i4H1u5XMmEF2W22tp8pmSju8vlhn8UC1Dvf+yxJLKPGo/Inl61 X-Received: by 2002:a17:902:b68f:: with SMTP id c15mr14270981pls.104.1565276373294; Thu, 08 Aug 2019 07:59:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565276373; cv=none; d=google.com; s=arc-20160816; b=Vq6D9cEqOQMzxDDWMck+kPB79dm2wYHmZU2VbTibI1e1YG5KIIWEyJmhmWf3sEYhIM jCDLEwlTDK2Lz/Q2FeiApSYBSkKOa/RY5c/ebRGoiIplG/aPpTrPGOME15QS3zkSzCA9 lkP55NoTIvLq37Rt95yynIJ6N3jLleIRhI6NwSCbSGZu7mRZY95ng30uCeWFfE0IvQzl VhP/EpKMPZ6b57A2EHHurQHj0soTDaukdo4JK2OiHq0NUqluRYykpQhfdEk7mF2eF0qv NHDng0O6zPqdE8zfHZqa3c6T6WQWCAR+92K9gGT/ltXZZyXU5M8MvFBOreZKQNqZ4wRx I8JQ== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=YlWKNxiM9x8XoHo/SnQDFPhJZRdPAlSBbtII5vuRl4c=; b=pe9tkE79P7+evcTEQSklzUuAmEfpZ5I7kUL77l7Lc69pd2cuQrppPbJijxcAQHPxSf MJltj3X4DtxHSvlIn33vgJkyw2RrzAQ0aXSJnFlYwjqu9X//mRXZeHBvoCcSEzqPEapN l8bJNqLh7OTwUCTF5oqhp4oL0x4dZ9AWkGM3Qfv6npBhYjrzQSqPcQltBWFBMgDBXpxD i6V46VfykuqkREp/30jSD886sVl1uj9C3jU02LTUK2UoukMgsEM5Vqj6IY4vcBAGvViW DQ2dL43++fjynBmrOcj0eZpF6eYTots1sGgJ2ZGH+wEQr5OU0iIXNNAsLxWwZkmL2RMH 9KpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BvBkOjzT; 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 m11si2876537pgq.267.2019.08.08.07.59.18; Thu, 08 Aug 2019 07:59:33 -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=BvBkOjzT; 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 S2390072AbfHHOCd (ORCPT + 99 others); Thu, 8 Aug 2019 10:02:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:45572 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732866AbfHHOCd (ORCPT ); Thu, 8 Aug 2019 10:02:33 -0400 Received: from localhost.localdomain (cpe-70-114-128-244.austin.res.rr.com [70.114.128.244]) (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 5736B21743; Thu, 8 Aug 2019 14:02:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1565272952; bh=rZdFt1nTqsCFfJecz9OvxRQYmusq8d4LHI3dbVndMis=; h=From:To:Cc:Subject:Date:From; b=BvBkOjzTXTL5BAvMofI5yEqRATA7GbCRZ7t0mWQ87KLXqEDmJOD/dFC+dYnTbXyMP Kbxjs5id9rI/Fp0MfBaI/kYag0ExphOHAzsEbpOtpFN0QKWyvdt9gN5jfnQYp3GnsR UUJJvqSeiemyvDqLBBxhE0LI6lwuzkLh/JBiZcXQ= From: Dinh Nguyen To: devicetree@vger.kernel.org Cc: dinguyen@kernel.org, linux-kernel@vger.kernel.org, robh+dt@kernel.org, frowand.list@gmail.com, keescook@chromium.org, anton@enomsg.org, ccross@android.com, tony.luck@intel.com Subject: [PATCHv3] drivers/amba: add reset control to amba bus probe Date: Thu, 8 Aug 2019 09:01:53 -0500 Message-Id: <20190808140153.9156-1-dinguyen@kernel.org> X-Mailer: git-send-email 2.20.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 { + reset_control_deassert(rstc); + reset_control_put(rstc); + count--; + } + } /* * Read pid and cid based on size of resource -- 2.20.0