From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A8BCC3F2D1 for ; Wed, 4 Mar 2020 12:03:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E97E721739 for ; Wed, 4 Mar 2020 12:03:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388006AbgCDMDa convert rfc822-to-8bit (ORCPT ); Wed, 4 Mar 2020 07:03:30 -0500 Received: from metis.ext.pengutronix.de ([85.220.165.71]:56243 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387801AbgCDMD3 (ORCPT ); Wed, 4 Mar 2020 07:03:29 -0500 Received: from lupine.hi.pengutronix.de ([2001:67c:670:100:3ad5:47ff:feaf:1a17] helo=lupine) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j9SkE-00046M-B3; Wed, 04 Mar 2020 13:03:22 +0100 Received: from pza by lupine with local (Exim 4.92) (envelope-from ) id 1j9SkB-0006zp-D7; Wed, 04 Mar 2020 13:03:19 +0100 Message-ID: Subject: Re: [PATCH 25/89] reset: simple: Add reset callback From: Philipp Zabel To: Maxime Ripard , Nicolas Saenz Julienne , Eric Anholt Cc: dri-devel@lists.freedesktop.org, linux-rpi-kernel@lists.infradead.org, bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Dave Stevenson , Tim Gover , Phil Elwell Date: Wed, 04 Mar 2020 13:03:19 +0100 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:3ad5:47ff:feaf:1a17 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Maxime, On Mon, 2020-02-24 at 10:06 +0100, Maxime Ripard wrote: > The reset-simple code lacks a reset callback that is still pretty easy to > implement. The only real thing to consider is the delay needed for a device > to be reset, so let's expose that as part of the reset-simple driver data. > > Cc: Philipp Zabel > Signed-off-by: Maxime Ripard This shoulod be done in such a way that simple reset drivers which do not set the reset delay continue to return -ENOTSUPP from reset_control_reset(). > --- > drivers/reset/reset-simple.c | 21 +++++++++++++++++++++ > include/linux/reset/reset-simple.h | 4 ++++ > 2 files changed, 25 insertions(+) > > diff --git a/drivers/reset/reset-simple.c b/drivers/reset/reset-simple.c > index c854aa351640..7a8c56512ae9 100644 > --- a/drivers/reset/reset-simple.c > +++ b/drivers/reset/reset-simple.c > @@ -11,6 +11,7 @@ > * Maxime Ripard > */ > > +#include > #include > #include > #include > @@ -63,6 +64,25 @@ static int reset_simple_deassert(struct reset_controller_dev *rcdev, > return reset_simple_update(rcdev, id, false); > } > > +static int reset_simple_reset(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_simple_data *data = to_reset_simple_data(rcdev); > + int ret; You could just return -ENOTSUPP here if data->reset_ms == 0. > + ret = reset_simple_assert(rcdev, id); > + if (ret) > + return ret; > + > + mdelay(data->reset_ms); Have you considered specifying the delay in microseconds instead? That would allow to use usleep_range() for shorter delays. > + ret = reset_simple_deassert(rcdev, id); > + if (ret) > + return ret; > + > + return 0; > +} > + > static int reset_simple_status(struct reset_controller_dev *rcdev, > unsigned long id) > { > @@ -80,6 +100,7 @@ static int reset_simple_status(struct reset_controller_dev *rcdev, > const struct reset_control_ops reset_simple_ops = { > .assert = reset_simple_assert, > .deassert = reset_simple_deassert, > + .reset = reset_simple_reset, > .status = reset_simple_status, > }; > EXPORT_SYMBOL_GPL(reset_simple_ops); > diff --git a/include/linux/reset/reset-simple.h b/include/linux/reset/reset-simple.h > index 08ccb25a55e6..a5887f6cbe50 100644 > --- a/include/linux/reset/reset-simple.h > +++ b/include/linux/reset/reset-simple.h > @@ -27,6 +27,9 @@ > * @status_active_low: if true, bits read back as cleared while the reset is > * asserted. Otherwise, bits read back as set while the > * reset is asserted. > + * @reset_ms: Minimum delay in milliseconds needed that needs to be > + * waited for between an assert and a deassert to reset the > + * device. If multiple consumers with different delay requirements are connected to this reset controllers, this must the largest minimum delay. Could you add mention for this in the comment? regards Philipp From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9BA5C3F2D7 for ; Wed, 4 Mar 2020 12:03:33 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8F91221739 for ; Wed, 4 Mar 2020 12:03:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="TLdoUzdW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F91221739 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=L7aGeguQtIjvDSjC/wo3K3LjO6VzoFRaxG52DA8Nhg0=; b=TLdoUzdWk/Njh9 lPGWUL08f87SDmp7YwkB7IOvihNQxfVV51UBfbHgJ2Xt14zF8nq3gdPHdnEFQ2Ye4qh2fNd29CniW TEDeHBWDKrvD3hlhupDr+yF5P2BNOkVn1HSK1m4TDwVwR6djQaS9wo2VEkKyRN9n2ycjjJ12yy7Fl 0eU08Nl86nUaPVwXcf5RHDwe0UBYSK7PQmqk78A9g3c6+GAkgvuym/AeoZtT7l04MrI0F+Hx0ui7r sfSRcbvDnmy1V7AE3oYEyr/SoDS6xJSD1GEuCr0tMXt4aab3+GIEpm7/Dn2wXMGHqe5PLbUkA1044 YiJA/9TRclWaWWhgdTTw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j9SkM-0004jK-64; Wed, 04 Mar 2020 12:03:30 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j9SkJ-0004iM-2O for linux-arm-kernel@lists.infradead.org; Wed, 04 Mar 2020 12:03:28 +0000 Received: from lupine.hi.pengutronix.de ([2001:67c:670:100:3ad5:47ff:feaf:1a17] helo=lupine) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j9SkE-00046M-B3; Wed, 04 Mar 2020 13:03:22 +0100 Received: from pza by lupine with local (Exim 4.92) (envelope-from ) id 1j9SkB-0006zp-D7; Wed, 04 Mar 2020 13:03:19 +0100 Message-ID: Subject: Re: [PATCH 25/89] reset: simple: Add reset callback From: Philipp Zabel To: Maxime Ripard , Nicolas Saenz Julienne , Eric Anholt Date: Wed, 04 Mar 2020 13:03:19 +0100 In-Reply-To: References: User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:3ad5:47ff:feaf:1a17 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200304_040327_114220_6DD765CB X-CRM114-Status: GOOD ( 19.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Gover , Dave Stevenson , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com, linux-rpi-kernel@lists.infradead.org, Phil Elwell , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Maxime, On Mon, 2020-02-24 at 10:06 +0100, Maxime Ripard wrote: > The reset-simple code lacks a reset callback that is still pretty easy to > implement. The only real thing to consider is the delay needed for a device > to be reset, so let's expose that as part of the reset-simple driver data. > > Cc: Philipp Zabel > Signed-off-by: Maxime Ripard This shoulod be done in such a way that simple reset drivers which do not set the reset delay continue to return -ENOTSUPP from reset_control_reset(). > --- > drivers/reset/reset-simple.c | 21 +++++++++++++++++++++ > include/linux/reset/reset-simple.h | 4 ++++ > 2 files changed, 25 insertions(+) > > diff --git a/drivers/reset/reset-simple.c b/drivers/reset/reset-simple.c > index c854aa351640..7a8c56512ae9 100644 > --- a/drivers/reset/reset-simple.c > +++ b/drivers/reset/reset-simple.c > @@ -11,6 +11,7 @@ > * Maxime Ripard > */ > > +#include > #include > #include > #include > @@ -63,6 +64,25 @@ static int reset_simple_deassert(struct reset_controller_dev *rcdev, > return reset_simple_update(rcdev, id, false); > } > > +static int reset_simple_reset(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_simple_data *data = to_reset_simple_data(rcdev); > + int ret; You could just return -ENOTSUPP here if data->reset_ms == 0. > + ret = reset_simple_assert(rcdev, id); > + if (ret) > + return ret; > + > + mdelay(data->reset_ms); Have you considered specifying the delay in microseconds instead? That would allow to use usleep_range() for shorter delays. > + ret = reset_simple_deassert(rcdev, id); > + if (ret) > + return ret; > + > + return 0; > +} > + > static int reset_simple_status(struct reset_controller_dev *rcdev, > unsigned long id) > { > @@ -80,6 +100,7 @@ static int reset_simple_status(struct reset_controller_dev *rcdev, > const struct reset_control_ops reset_simple_ops = { > .assert = reset_simple_assert, > .deassert = reset_simple_deassert, > + .reset = reset_simple_reset, > .status = reset_simple_status, > }; > EXPORT_SYMBOL_GPL(reset_simple_ops); > diff --git a/include/linux/reset/reset-simple.h b/include/linux/reset/reset-simple.h > index 08ccb25a55e6..a5887f6cbe50 100644 > --- a/include/linux/reset/reset-simple.h > +++ b/include/linux/reset/reset-simple.h > @@ -27,6 +27,9 @@ > * @status_active_low: if true, bits read back as cleared while the reset is > * asserted. Otherwise, bits read back as set while the > * reset is asserted. > + * @reset_ms: Minimum delay in milliseconds needed that needs to be > + * waited for between an assert and a deassert to reset the > + * device. If multiple consumers with different delay requirements are connected to this reset controllers, this must the largest minimum delay. Could you add mention for this in the comment? regards Philipp _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 171A1C3F2D1 for ; Wed, 4 Mar 2020 12:03:27 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E86B22146E for ; Wed, 4 Mar 2020 12:03:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E86B22146E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7A1356EB26; Wed, 4 Mar 2020 12:03:26 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0EEB86EB26 for ; Wed, 4 Mar 2020 12:03:25 +0000 (UTC) Received: from lupine.hi.pengutronix.de ([2001:67c:670:100:3ad5:47ff:feaf:1a17] helo=lupine) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j9SkE-00046M-B3; Wed, 04 Mar 2020 13:03:22 +0100 Received: from pza by lupine with local (Exim 4.92) (envelope-from ) id 1j9SkB-0006zp-D7; Wed, 04 Mar 2020 13:03:19 +0100 Message-ID: Subject: Re: [PATCH 25/89] reset: simple: Add reset callback From: Philipp Zabel To: Maxime Ripard , Nicolas Saenz Julienne , Eric Anholt Date: Wed, 04 Mar 2020 13:03:19 +0100 In-Reply-To: References: User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:3ad5:47ff:feaf:1a17 X-SA-Exim-Mail-From: p.zabel@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: dri-devel@lists.freedesktop.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tim Gover , Dave Stevenson , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, bcm-kernel-feedback-list@broadcom.com, linux-rpi-kernel@lists.infradead.org, Phil Elwell , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi Maxime, On Mon, 2020-02-24 at 10:06 +0100, Maxime Ripard wrote: > The reset-simple code lacks a reset callback that is still pretty easy to > implement. The only real thing to consider is the delay needed for a device > to be reset, so let's expose that as part of the reset-simple driver data. > > Cc: Philipp Zabel > Signed-off-by: Maxime Ripard This shoulod be done in such a way that simple reset drivers which do not set the reset delay continue to return -ENOTSUPP from reset_control_reset(). > --- > drivers/reset/reset-simple.c | 21 +++++++++++++++++++++ > include/linux/reset/reset-simple.h | 4 ++++ > 2 files changed, 25 insertions(+) > > diff --git a/drivers/reset/reset-simple.c b/drivers/reset/reset-simple.c > index c854aa351640..7a8c56512ae9 100644 > --- a/drivers/reset/reset-simple.c > +++ b/drivers/reset/reset-simple.c > @@ -11,6 +11,7 @@ > * Maxime Ripard > */ > > +#include > #include > #include > #include > @@ -63,6 +64,25 @@ static int reset_simple_deassert(struct reset_controller_dev *rcdev, > return reset_simple_update(rcdev, id, false); > } > > +static int reset_simple_reset(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_simple_data *data = to_reset_simple_data(rcdev); > + int ret; You could just return -ENOTSUPP here if data->reset_ms == 0. > + ret = reset_simple_assert(rcdev, id); > + if (ret) > + return ret; > + > + mdelay(data->reset_ms); Have you considered specifying the delay in microseconds instead? That would allow to use usleep_range() for shorter delays. > + ret = reset_simple_deassert(rcdev, id); > + if (ret) > + return ret; > + > + return 0; > +} > + > static int reset_simple_status(struct reset_controller_dev *rcdev, > unsigned long id) > { > @@ -80,6 +100,7 @@ static int reset_simple_status(struct reset_controller_dev *rcdev, > const struct reset_control_ops reset_simple_ops = { > .assert = reset_simple_assert, > .deassert = reset_simple_deassert, > + .reset = reset_simple_reset, > .status = reset_simple_status, > }; > EXPORT_SYMBOL_GPL(reset_simple_ops); > diff --git a/include/linux/reset/reset-simple.h b/include/linux/reset/reset-simple.h > index 08ccb25a55e6..a5887f6cbe50 100644 > --- a/include/linux/reset/reset-simple.h > +++ b/include/linux/reset/reset-simple.h > @@ -27,6 +27,9 @@ > * @status_active_low: if true, bits read back as cleared while the reset is > * asserted. Otherwise, bits read back as set while the > * reset is asserted. > + * @reset_ms: Minimum delay in milliseconds needed that needs to be > + * waited for between an assert and a deassert to reset the > + * device. If multiple consumers with different delay requirements are connected to this reset controllers, this must the largest minimum delay. Could you add mention for this in the comment? regards Philipp _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel