From patchwork Tue Jul 17 12:59:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 945034 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="bSNnb62l"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 41VL3Q5wXdz9s4V for ; Tue, 17 Jul 2018 23:00:02 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 65037C21E53; Tue, 17 Jul 2018 12:59:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id D1317C21C3F; Tue, 17 Jul 2018 12:59:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 59ED2C21C3F; Tue, 17 Jul 2018 12:59:54 +0000 (UTC) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by lists.denx.de (Postfix) with ESMTPS id EC765C21C27 for ; Tue, 17 Jul 2018 12:59:53 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id s12-v6so1420434wmc.1 for ; Tue, 17 Jul 2018 05:59:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=tB5mqsbFn1UybPArVCiGV1Dt5/7ksH89Wcvpsieb5MM=; b=bSNnb62lntl5EqwpYE1Gx1Ap65LqSclViUnHBdHdPRMtH5j+ZHoKDgrlDzk7jwzRl+ drtHZ6DszduGbiIObHu110XnLi6bdurOOFNQvgbjpjdz4QDFYSLKEav1Mbqlk6baBhje 5RdCmEW39nrShvt8IAAFfKUA+tzhY8EMXqi/L/fV3vMPQKKF50VIkFPvpIPxIGLpWay8 xOOd390YS9xbIsJlFQ6yPptlyeQukEHJfUuOhgULbnCWJO75BXfEHyKao5ZR++J5tzcQ lMB7S0gCMilD316KzJFasrmjeHyEzVq5KDHvb7b10ea8ch/5X3hUuiECLrhZwHhuGfAh r2tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=tB5mqsbFn1UybPArVCiGV1Dt5/7ksH89Wcvpsieb5MM=; b=DHB7t6cy9C1dGaVXnPMc7gV6of6Jio805XdqJcFDnaFj2ppGe8c9MsOj+DGvb9r81B dMKRSjsgviZOAgwlZh2jRRbsSgPL8qnKEwOQ/2ap5+7ori/fDzMr2/weQi+7Aeo5DSzt 0uOBC5kbQFcw0Qu6EGQx8TFfztC4DLzbWbbO8g1pRad2xpjVB2SLxh2jU7qsYpChYMf6 Zxl+9HxUXrz1BHevhYUBGGvpgxvKaQ7I/OPsX0nWnM539zve0HZO99ToogePcrJLSA6q t+JquRrLjvFET2QLH8iCpsujSF8rWFfoLNUBjcA7bAFxjRCrIu+FbS+RvqFuGUaXdo22 SDoA== X-Gm-Message-State: AOUpUlEYylNlXgTeGvQkRHl05r1m8X8by8E5IEXNkwLtxrKfSnOKFWX+ XTEUxliYNDks2GtxZT4qzFZMG3kS X-Google-Smtp-Source: AAOMgpehRaLbGVzOFtRBYrrMKu6eqlrNGdmyzhmhhkrp2mqV2sxN6WUnKphyBfh5BlowomVkbQWqAg== X-Received: by 2002:a1c:ae8d:: with SMTP id x135-v6mr1316318wme.20.1531832393357; Tue, 17 Jul 2018 05:59:53 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id i125-v6sm1962946wmd.11.2018.07.17.05.59.52 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 17 Jul 2018 05:59:52 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de, Simon Glass Date: Tue, 17 Jul 2018 14:59:51 +0200 Message-Id: <0caac5d2b6839d0d8eaa8348f7dfebc6a100ef78.1531832389.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 Cc: Stefan Roese , Heinrich Schuchardt , Alexander Graf , Jorge Ramirez-Ortiz , Eugeniy Paltsev Subject: [U-Boot] [PATCH v2] sysreset: Add support for gpio-restart X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The Linux kernel has binding for gpio-restart node. This patch is adding basic support without supporting any optional properties. This driver was tested on Microblaze system where gpio is connected to SoC reset logic. Output value is handled via gpios cells values. In gpio_reboot_request() set_value is writing 1 because dm_gpio_set_value() is capable to changing it when it is ACTIVE_LOW. ... if (desc->flags & GPIOD_ACTIVE_LOW) value = !value; ... Signed-off-by: Michal Simek Reviewed-by: Philipp Tomsich Reviewed-by: Simon Glass Reviewed-by: Simon Glass --- Changes in v2: - Record file in MAINTAINERS - Fix comment reported by Simon - Kconfig fragment fix - use reset instead of restart --- MAINTAINERS | 1 + drivers/sysreset/Kconfig | 8 ++++++ drivers/sysreset/Makefile | 1 + drivers/sysreset/sysreset_gpio.c | 59 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 drivers/sysreset/sysreset_gpio.c diff --git a/MAINTAINERS b/MAINTAINERS index 570bc6d1a525..91e4ad7c75a1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -419,6 +419,7 @@ F: drivers/net/xilinx_axi_emac.c F: drivers/net/xilinx_emaclite.c F: drivers/serial/serial_xuartlite.c F: drivers/spi/xilinx_spi.c +F: drivers/sysreset/sysreset_gpio.c F: drivers/watchdog/xilinx_tb_wdt.c N: xilinx diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig index a6d48e8a662c..cec612ed50dd 100644 --- a/drivers/sysreset/Kconfig +++ b/drivers/sysreset/Kconfig @@ -15,6 +15,14 @@ config SYSRESET if SYSRESET +config SYSRESET_GPIO + bool "Enable support for GPIO reset driver" + select GPIO + help + Reset support via GPIO pin connected reset logic. This is used for + example on Microblaze where reset logic can be controlled via GPIO + pin which triggers cpu reset. + config SYSRESET_PSCI bool "Enable support for PSCI System Reset" depends on ARM_PSCI_FW diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile index 0da58a1cf6ad..ca533cfefaad 100644 --- a/drivers/sysreset/Makefile +++ b/drivers/sysreset/Makefile @@ -3,6 +3,7 @@ # (C) Copyright 2016 Cadence Design Systems Inc. obj-$(CONFIG_SYSRESET) += sysreset-uclass.o +obj-$(CONFIG_SYSRESET_GPIO) += sysreset_gpio.o obj-$(CONFIG_SYSRESET_PSCI) += sysreset_psci.o obj-$(CONFIG_SYSRESET_SYSCON) += sysreset_syscon.o obj-$(CONFIG_SYSRESET_WATCHDOG) += sysreset_watchdog.o diff --git a/drivers/sysreset/sysreset_gpio.c b/drivers/sysreset/sysreset_gpio.c new file mode 100644 index 000000000000..ed9a49ad08c8 --- /dev/null +++ b/drivers/sysreset/sysreset_gpio.c @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2018 Xilinx, Inc. - Michal Simek + */ + +#include +#include +#include +#include +#include + +struct gpio_reboot_priv { + struct gpio_desc gpio; +}; + +static int gpio_reboot_request(struct udevice *dev, enum sysreset_t type) +{ + struct gpio_reboot_priv *priv = dev_get_priv(dev); + + /* + * When debug log is enabled please make sure that chars won't end up + * in output fifo. Or you can append udelay(); to get enough time + * to HW to emit output fifo. + */ + debug("GPIO reset\n"); + + /* Writing 1 respects polarity (active high/low) based on gpio->flags */ + return dm_gpio_set_value(&priv->gpio, 1); +} + +static struct sysreset_ops gpio_reboot_ops = { + .request = gpio_reboot_request, +}; + +int gpio_reboot_probe(struct udevice *dev) +{ + struct gpio_reboot_priv *priv = dev_get_priv(dev); + + /* + * Linux kernel DT binding contain others optional properties + * which are not supported now + */ + + return gpio_request_by_name(dev, "gpios", 0, &priv->gpio, GPIOD_IS_OUT); +} + +static const struct udevice_id led_gpio_ids[] = { + { .compatible = "gpio-restart" }, + { } +}; + +U_BOOT_DRIVER(gpio_reboot) = { + .id = UCLASS_SYSRESET, + .name = "gpio_restart", + .of_match = led_gpio_ids, + .ops = &gpio_reboot_ops, + .priv_auto_alloc_size = sizeof(struct gpio_reboot_priv), + .probe = gpio_reboot_probe, +};