From patchwork Sat Jul 10 05:58:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503435 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Hm3mQwkU; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=X6Z3fSbX; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=rS/peUQn; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK9B41h7z9sRR for ; Sat, 10 Jul 2021 15:59:10 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HCEnxTF4tU4kybYxanO4SNorAAOud+POtiTgVNrWmrI=; b=Hm3mQwkUauSuwN thyq6UdPYLol+OPo2RD/d9tF+n04sig9jN5P7UgJili2ZfqAJD9OVomKFPSeUBrWXoC9OupRXJxli 4ezYjOB8UxTEaQn5w5JbnhnsGXL6uzQTC1DasTBS51SL2fBk6b2/JlRQWrJcH92aMqBqWkn50NOOx g551GMqfL2UWmBCp3bgDajmsFPLJGhJoCqXdhVoEQBlwP3hIyO5VnwHDbWiyVCRdWhU67350uS7GX 0s6n6v0pbbPzU03ofVxZXD1Dke4/Kf1ogoufcYQlQIwRom6lmIOnoKLgIDigwakT+pnQxPbDunwGQ HvPmeFwHM3YIe8ZFEGAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2614-00388y-Fo; Sat, 10 Jul 2021 05:59:06 +0000 Received: from esa3.hgst.iphmx.com ([216.71.153.141]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2611-00385f-AK for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:59:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896742; x=1657432742; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=yF+BxocJB25Oov0rShuQxub6z3HiyNs+68BVU08PFC0=; b=X6Z3fSbXqzROq/giJtXmSQ7Hi6t7Vgm+t9kuTKTquLcBOHhy4YkGsdPg orMb6rHLjxHy5vsjbXWxffnDt/S4xqtW2GRa4MtOH6X0AsDDp3M9/Cjyv dkeH3agn677CwBB80XDE24eGFKhU4F0tlU4ewKG2vLCRksGOw7/WXaVRr o1+HMS9eVfbfPTUjMiLzPawgyWefdd2IHOQgqi+NWQN1Hvjdnmv1vFY5h aqcdYwMwuUsUJOzG0uuJmDmgBw5V76vxG3unKZSEMabhUmcCppHPSJcqs 4nzSC1+1YoV09Ao2tNcYJiHJgWJ1RT5HODBcMQvJrRXkuxZtNHYjEXB3R Q==; IronPort-SDR: w/F1lgiwSjqP2ivN9OQDIyExtft0Hy/qnrfZ0T8q65bG60bWmOouNZ0GGUoJJjXNMtmg6fSTtp yObEYCwlPpOnLwLfrrI2QzE6/sxWQmpdoBfrhiz1yPpeA8pX36CduRsn6pPiQl51uzFcjq/aac 2GSIIkKAYsrhSTIaTAK7HtVr9RFk8OT5HA7ec1O2LeVmM6cP6HM6XR7dcdkgV73VrXmqPBWC3z 0z68OysQ0Ondgnl3omwY+vTXQjuB3id0tFDb9arK8sA7jCPqX/Vp+GuEz6tvON4T1DZ6KMC92P FIM= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="179035242" Received: from mail-bn7nam10lp2107.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.107]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:59:02 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oIbHyU7OzpDSGPymuV/IKLAkpnAw78C9vrMsf32XFYGgz4SL1CKMR6Q3xiDuxUaUsCjyPZxtsEefBEd7OOq8k51XdZTuXbFdbTV5dosfqWw06wBRl7WxR9FKuexOVuT/bp7xAy/WwWTD450uwPE5fwu6PXfgq9aWLsA/kWmpyUt8raVr6793MidRlsbIT0Oy8oY6twRTnRIomiOBVhSvhYiPPdFT1T9b5/lksAbReytE4ilIx2vgQycN1jOka9rIwr/YrLMW4imSklkzGDXX1+PjUQfJ2QGH8KKtyPFR/RGcc38jNrRibsWeV/h8Jvz+ITh/k+llxxElCf1jnRNF3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q0Es6u/cs3qDj2WPAlKpPs2Q+WE0wNUfJwBzbGFqVhI=; b=g7L89pffWCiP1DACOTIuKpL8W84OCu6CQCQwXnsCB75Wdpjn7K/H4ZoUdNoe+6f0izvgMvGtykvO7cHCAESmAmk3iYVnwTwCQXLq3cSjqFGCLxoQeKCLelr8NDIZDBHayM3qcl4D49DxtgGoyC9dxn9/J4E3EVkuXiI1zKJG+Ia3wUk/2ir4tA94/SVCwFbVYFUdoT7wI5lLtU0EeHmcRzBnI4297TRHKtq3VBj/+TBPzZkmn/j3rtrQKGtu4beEVq1cCHBBP8DwGSmY9AKaDC0rBA6kgkxMgcBQmoFc0wuqEHLcTNhlqZmPKxBAFTQxqpwM3Lwk/fKNCyQVGhjnzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q0Es6u/cs3qDj2WPAlKpPs2Q+WE0wNUfJwBzbGFqVhI=; b=rS/peUQnkpZtIserUtz39f3cRHwtkkRtcaB4v1z+1+GRfabr7GUUSs3RFdHjcLEk7+K+FERyGsG08tDu8E1BqJBgwy7HhlRYYoNtrxRLA2Jmaij1G9yNkw+vKAR6T3jZYqcvfzd+zyvTPXvBsamypsaq23xFDR/BqP4e86VSbQg= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:59:01 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:59:01 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 5/5] lib: utils/reset: Add generic GPIO reset driver Date: Sat, 10 Jul 2021 11:28:27 +0530 Message-Id: <20210710055827.1535906-6-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:59 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f7eac91-75a6-48f2-ce43-08d94367d0ab X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +Gqc1Xbq7J3MZWQMW8Pc2o0aFcQDwS7gKZeLMgYFApow4e/PAwLp6lLSaDd4OL81d47Rz7KS1XJA4GvFI6cBZp1KWueQuj7gZ0HsCAJ8aVAiA4QtJJErTqpCPMEAKWnq95VtZHfbmyR6i9Znkwia4IIAcxdqK9T28yVcB6rePUqm5ZhpZobN2QDqi0WRalIMvWaTcgQc3qFBQ0p8W1Cc4e3uIQ0yvePxuSJnY2BDS8pkfNNCtzN4zXCyDqwIFu2WEL1pGxv0vPU+1Bo+xY7yrtRhssBCT7B95mOvrhw+txAUdZLqdDB8dHUAs8OtjifOBbUhTvOtSY2509MaW4p2M7FDg0VExvo5QftZc/pm9ELIbTmaEMS380EmZleRsZSuDwyur09o1LMisY600pKGF66L51nw0hYDC6B6JTrIj5ggBgRmWbyrvruoe97W9Ogg9eN6Aksh3/4D84AIx8NEJCZIA0Bs1P5CH8mPFKsdFmbUGAWt5J0PXmb5N1KjpaWW6kezn3/keOArgh11p6HFt/mn5dY9PBpkTcgPhmb8lc493Q75Owx+1p+5R7UQBwBRdhpMnHAA6M+2e6jUjMukbbQ8/FcygPCu+1rfCVFOnDDkl48l5MojZqaglsFYRNzeB4wg0PViAVCw20OE+d0N+aa5v4+vrZRibecrxhNBoDG+kSVhl7dQXAMP2adTv3DMJ0GXF1kpzUMb1xragIi7Ze8tdnpAIt+W1DLqAkls7tA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007)(41533002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Jd06RbeAnUv4/pm6af0KJcuJJ6pQQDgAyulQuMSoDxxletBGPD54K5M9aV6TGNmN2+XiMHr3zNxjNMUOdhFPxBdTA4aPd6kbB1I8yw1cHSB7noyXGv0YCqwkPVJXbAqpOrWq/9cQ+sil4LAGqbjkMjEWtOqfeDcd914JWClxRv+1fGkNivXWrTVIq5TqX3NHNsGmE9pXjjx4rLYb1ADk4lr2/PR/CDd1tM8DThnOjZHwThABfmAXZvoWm6yO2klZrqNqwSWvBaGGk/WEN6VEitRFFnAtzwYWJ6q7UiTYzsVZZ/S+0YJWDIN/swIyuTDsgkXZOsjkLQNxHfl88trTHZUYqGIVGqbrEn/cSN0oVFKd6Sk80HqYd5bHFtwdde6FpZ8tQj8IjWwEqRx758fNBtS1Hi9wDftEK2TgInabpbY4nqWpb9sLadRmWIzRaDqnsdRA4R7ZY4rOSweLzB7V/zRDbbLWkV21aRsrAYYssFOamxmGe791iiKRd2gHcXJhSvBeQn9YcbUJXj/qkNVjjuWk3nlQjrkqndfTlSdQpouf3MSf4urIX1OZcC9K9FCZuQgKXjYspmrURYsnHinNF5JFgyO/nIVbsBeHHqpxrQRtnXfwFGw2//D1fweiE5SAdQhDpb6+CD+3rU7644xSFNqGlBka5X2Yh06DoWxvOtnRgm5UmltnmjToYhZjkTDQEOFyUIvS8SPH0XhdwDLqgrbDqrgogQeGMmEbe2Tp3MiM9gJizr5F1H90p4KrXYdPLetE3ZXDYU/RUEr7C6g8P0XMfYM821oloC6KyiyPsP9MzkATEULoVXOtuW5bo/V1N228RxxeyOKzNmt4TzhIgcRlSF4eXz2/05NdWSVv8yKiQJt9WhnIQDuV33bcPd4l0B+o2zdghgcfhC0v5o/D4KWuuLzA2HzWKmM+Xul1lXxrfrAcXvxCFE+N/mxpAbeVC8MIcoe5tTcvkfNPg4tlNaxtVMSqqDtXiSx8tuYERmKqCst6uWbcZAtgw+nS+uixcmKllA2MnvyN30oDXrmpajV8vOZCIXBc9oJ8OqPnYErrFxqLqVNBc7P6Ob2oqLiue9KD9VI4oDXG1T3nY2n9W4HnqqlCXcbvaK7hsCzXwDD2rwHq+3/78cNNAPfeCJeBtw2RkoROwTNuRwOMIW/GuLrkycIub8A1+X2E5CzgqHC8kPE6VSWCV9pFRsbxHkY34o9yC+0Ct0hubrXswXPXgx/EhK5iHKSuHZi+kp9c6RJvbzu4DQvH6jSSZAmvyG233lyruihs6WamLAb2+fBeXYu0Tdr+vMClV5j+u535yq9VpUIkHrVAiaubqi4mIbIZ X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f7eac91-75a6-48f2-ce43-08d94367d0ab X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:59:01.5091 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 11LzGhXUz0f00g38cG5W+LvlmYsjAgO5Lk//StQdCA4ThE/h/T5pE2r/UX+HgTHzdHdeJHadQ1QEvTovcTIIDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225903_401795_11689B4D X-CRM114-Status: GOOD ( 21.76 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Green Wan We add generic GPIO reset driver inspired from gpio-restart and gpio-poweroff drivers of Linux kernel. Signed-off-by: Green Wan Signed-off-by: Anup Patel --- lib/utils/reset/fdt_reset.c | 2 + lib/utils/reset/fdt_reset_gpio.c | 141 ++++++++++++++++++++++++++++ [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.153.141 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Green Wan We add generic GPIO reset driver inspired from gpio-restart and gpio-poweroff drivers of Linux kernel. Signed-off-by: Green Wan Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/utils/reset/fdt_reset.c | 2 + lib/utils/reset/fdt_reset_gpio.c | 141 +++++++++++++++++++++++++++++++ lib/utils/reset/objects.mk | 1 + 3 files changed, 144 insertions(+) create mode 100644 lib/utils/reset/fdt_reset_gpio.c diff --git a/lib/utils/reset/fdt_reset.c b/lib/utils/reset/fdt_reset.c index 48a49fb..aa5f59f 100644 --- a/lib/utils/reset/fdt_reset.c +++ b/lib/utils/reset/fdt_reset.c @@ -12,11 +12,13 @@ #include #include +extern struct fdt_reset fdt_reset_gpio; extern struct fdt_reset fdt_reset_sifive_test; extern struct fdt_reset fdt_reset_htif; extern struct fdt_reset fdt_reset_thead; static struct fdt_reset *reset_drivers[] = { + &fdt_reset_gpio, &fdt_reset_sifive_test, &fdt_reset_htif, &fdt_reset_thead, diff --git a/lib/utils/reset/fdt_reset_gpio.c b/lib/utils/reset/fdt_reset_gpio.c new file mode 100644 index 0000000..083076f --- /dev/null +++ b/lib/utils/reset/fdt_reset_gpio.c @@ -0,0 +1,141 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 SiFive + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Green Wan + * Anup Patel + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct gpio_reset { + struct gpio_pin pin; + u32 active_delay; + u32 inactive_delay; +}; + +static struct gpio_reset poweroff = { + .active_delay = 100, + .inactive_delay = 100 +}; + +static struct gpio_reset restart = { + .active_delay = 100, + .inactive_delay = 100 +}; + +/* Custom mdelay function until we have a generic mdelay() API */ +static void gpio_mdelay(unsigned long msecs) +{ + volatile int i; + while (msecs--) + for (i = 0; i < 10000; i++) ; +} + +static int gpio_system_reset_check(u32 type, u32 reason) +{ + switch (type) { + case SBI_SRST_RESET_TYPE_SHUTDOWN: + case SBI_SRST_RESET_TYPE_COLD_REBOOT: + case SBI_SRST_RESET_TYPE_WARM_REBOOT: + return 1; + } + + return 0; +} + +static void gpio_system_reset(u32 type, u32 reason) +{ + struct gpio_reset *reset = NULL; + + switch (type) { + case SBI_SRST_RESET_TYPE_SHUTDOWN: + reset = &poweroff; + break; + case SBI_SRST_RESET_TYPE_COLD_REBOOT: + case SBI_SRST_RESET_TYPE_WARM_REBOOT: + reset = &restart; + break; + } + + if (reset) { + if (!reset->pin.chip) { + sbi_printf("%s: gpio pin not available\n", __func__); + goto skip_reset; + } + + /* drive it active, also inactive->active edge */ + gpio_direction_output(&reset->pin, 1); + gpio_mdelay(reset->active_delay); + + /* drive inactive, also active->inactive edge */ + gpio_set(&reset->pin, 0); + gpio_mdelay(reset->inactive_delay); + + /* drive it active, also inactive->active edge */ + gpio_set(&reset->pin, 1); + +skip_reset: + /* hang !!! */ + sbi_hart_hang(); + } +} + +static struct sbi_system_reset_device gpio_reset = { + .name = "gpio-reset", + .system_reset_check = gpio_system_reset_check, + .system_reset = gpio_system_reset +}; + +static int gpio_reset_init(void *fdt, int nodeoff, + const struct fdt_match *match) +{ + int rc, len; + const fdt32_t *val; + bool is_restart = (ulong)match->data; + const char *dir_prop = (is_restart) ? "open-source" : "input"; + struct gpio_reset *reset = (is_restart) ? &restart : &poweroff; + + rc = fdt_gpio_pin_get(fdt, nodeoff, 0, &reset->pin); + if (rc) + return rc; + + if (fdt_getprop(fdt, nodeoff, dir_prop, &len)) { + rc = gpio_direction_input(&reset->pin); + if (rc) + return rc; + } + + val = fdt_getprop(fdt, nodeoff, "active-delay-ms", &len); + if (len > 0) + reset->active_delay = fdt32_to_cpu(*val); + + val = fdt_getprop(fdt, nodeoff, "inactive-delay-ms", &len); + if (len > 0) + reset->inactive_delay = fdt32_to_cpu(*val); + + sbi_system_reset_set_device(&gpio_reset); + + return 0; +} + +static const struct fdt_match gpio_reset_match[] = { + { .compatible = "gpio-poweroff", .data = (void *)FALSE }, + { .compatible = "gpio-restart", .data = (void *)TRUE }, + { }, +}; + +struct fdt_reset fdt_reset_gpio = { + .match_table = gpio_reset_match, + .init = gpio_reset_init, +}; diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk index 672aad9..4215396 100644 --- a/lib/utils/reset/objects.mk +++ b/lib/utils/reset/objects.mk @@ -8,6 +8,7 @@ # libsbiutils-objs-y += reset/fdt_reset.o +libsbiutils-objs-y += reset/fdt_reset_gpio.o libsbiutils-objs-y += reset/fdt_reset_htif.o libsbiutils-objs-y += reset/fdt_reset_thead.o libsbiutils-objs-y += reset/fdt_reset_thead_asm.o