From patchwork Fri Dec 2 16:03:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1711475 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.a=rsa-sha256 header.s=selector1 header.b=kWaW5UKU; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NNyRx4F8Hz23nB for ; Sat, 3 Dec 2022 03:04:13 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4F88B850CB; Fri, 2 Dec 2022 17:04:09 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.b="kWaW5UKU"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A322182F29; Fri, 2 Dec 2022 17:04:07 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20623.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1b::623]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D9199850AA for ; Fri, 2 Dec 2022 17:04:04 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dmHtoW2K+8uHWHfuk6u8ar4ur87IEpP/33U9fx0ICFOQketiEJCQ77bDOZhaTvWHSwRng2r0qjBV5gg286Oe4ojj9FvucpBpikPQZp7JKWh77haDJGmq5Rjq7aTa+JK8HHwZ5ztP/hkhBnwM31wFVJ42QNShuC2vBsoqXDACi6/JLU9Gh5OMjpabBJKMeBHubiGhOBSOtA0ISyUUvedQwW284YPAdblsqPD/yudO+AJllFc5PBkS6El3S26Ydex+yU4PoFZX64Yigiamwi3dngM4EQhUboyNGjEG9ei1FlQAfn/1+boxrchEbMP723aCjJ10Ifne1uqmF7ph4Hs1RQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=59NT9ybqmY6ahoAU1eOix/6rA44icbStdBa/mwc4ZBo=; b=DGhQ3GYiKyUabQbiorNFltoYfbTyIoTcG+im88jVKWG7Gfkn6JXG77tFJz3R8y5n8SQejtjuT+j26ypY6/6sy3rVsDl45M3shG3usFO+XNF9dsqrRbOe/oKhQxOD9mF45rGMJfsxix+ayFnofJ134Wi2D+RzrfU49PLLXdkmmJJ8eGkQlGbm7ilQaqwmvY+WjsByISBsExxXZ2FN/Qw523nrRTFu4EzWTGUJS8eE79EgkpJNd5WT2ED3gaPwogKVSyM3TxPdJQeZsBIvxyYNxvojk1AEKkYWuizGr8VCC1WEAryC7LkcIAC6WhyApJ27rIgEsRfr1JsRox23zQiNwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=59NT9ybqmY6ahoAU1eOix/6rA44icbStdBa/mwc4ZBo=; b=kWaW5UKU/hfSMEAxVtKj8BrqIqGkTPHRmO4lsyb63PAIXZnwlwYIdBJhsoUXhwQM5BMqlvxD5SKhy6IYanWe4DlxNZIxDwEEnUaHRSfv74ZR3BFO+bdDErD/juVGbTW9pC3LMZ1dgY2oTVhwCTkOHXhcp2y4UZK85cyEO50iuJrZLO8yjHD4oJeIa//CtpSCKSAXb1imJ6cnQmOPXOkBXXfBD0lfxJoa2G/MgE2Uol0ae4siZc6amkHKWSmRwfi4I3RWjF8N2ZUlnG+sUth0CK7WChQkB4HOmo08nl2S1UlytJs0NTCOdofKCnOXwLKBWCd2nPX9ojDq9hOg75PWkw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB9PR03MB8847.eurprd03.prod.outlook.com (2603:10a6:10:3dd::13) by PAXPR03MB7730.eurprd03.prod.outlook.com (2603:10a6:102:206::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.8; Fri, 2 Dec 2022 16:04:03 +0000 Received: from DB9PR03MB8847.eurprd03.prod.outlook.com ([fe80::2b95:1fe4:5d8f:22fb]) by DB9PR03MB8847.eurprd03.prod.outlook.com ([fe80::2b95:1fe4:5d8f:22fb%8]) with mapi id 15.20.5857.023; Fri, 2 Dec 2022 16:04:03 +0000 From: Sean Anderson To: Simon Glass , u-boot@lists.denx.de Cc: Patrick Delaunay , Nandor Han , Sean Anderson Subject: [PATCH] reboot-mode: Add NVMEM reboot mode Date: Fri, 2 Dec 2022 11:03:53 -0500 Message-Id: <20221202160353.891241-1-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty X-ClientProxiedBy: BL1P223CA0023.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:2c4::28) To DB9PR03MB8847.eurprd03.prod.outlook.com (2603:10a6:10:3dd::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR03MB8847:EE_|PAXPR03MB7730:EE_ X-MS-Office365-Filtering-Correlation-Id: ad57642d-8b52-48da-6717-08dad47ed4e6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nj3pT7s2f/fvlIkUitCuxMoRBhIpgGiADq5CQ0oCI8k0tLSxZC1zBKhZBA4gyesrhUOun+7Cd7/ldeReXq8KHkdXgOKarTArTy8w7AO/Ht33abMNkGvBL3lkTjzNVTkc+b/V8mMrQar9ptqqHxKkPqwkxxLryL6gp8bpiMGVYoOPBdFRzBkK88axiCqKXvwEkjsODXYxC2ditUQC86Sx7ZFQHp/zUSt0C41v6ZWi+hqJsMZ2/Zuj/1pPd1Am0GjRE3BQi0i7Raf36jmYD/xTKugRwKhDECsMPEclrLeEClLSJva+j6Ao+O3KmpvtlUuw06wMEoVVA+M/6EsE8V0rX6A+/OPDsd3o+JY7Vlh7KYm0zawpXvbAlZ+uOar0s6uKsj9A7l/KqoymWGYGQVT05nfQ7WvqP33+iIQSjKezrvh1JNRTdrMY8LVgiV65f8CPOVUiYfdQwwFam8ajnLrqU9xvL3hQzNbnbolEDBkt3UOHn446B2m5/X9VW76PhxY/e6TnBBAYPCtLbfCR6rDkOxv9eJWgzfGt6DT2m4sXstNbjSoo2pIEpUVYmuV4g63hFfxeyyoZELrAl08ur4SdFabEthZxWFxgarzjzSf+/VIKBX3Dxl4mv6GFrP4moEEbHVvCWQJDMkhgEfqnNAnmh92ImPwedKSKeYBsw5gBa5QnvmZfwGEDIND9GT8T33cU X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR03MB8847.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(396003)(39850400004)(136003)(376002)(366004)(451199015)(2616005)(1076003)(6486002)(316002)(54906003)(36756003)(86362001)(38350700002)(107886003)(38100700002)(6506007)(186003)(6666004)(26005)(52116002)(6512007)(44832011)(478600001)(2906002)(41300700001)(5660300002)(66556008)(66476007)(8936002)(66946007)(8676002)(4326008); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mrlnZltep3rUeuaV/A/JU3gVN956tBe6rMg6YfWr1DNrtbZFdYLtniYzyNzd4pafmWwD9GYYLjQI02ETHoDuwbhU0SZMxUMQjr/eLxKOnLeQeUhuYlCmFLn3vmZ+gnIMWYteiO7M8Cx/Eh1TMEVbH1SspeEaEh/gP6MngrrU9WYWBduhTL0GzAjXgYNa3VgQB7lywDNdUC41Q93n26EWr8jJ1BkJWSzGhUCo4fqXknBi9EBv4pOopudCdehNDYePo6u3hKdzURRvydSmuJjEEy2jJ95KsEyGMM3p3P3W2AZWanr1VzaRiD+H03G8345TTi+svScPCzzJijoTbrtF8QnbNfYxmUHmx/SQcwFikrBjf2lD2LIfKtI1sHc/DdFtB3p+g94r1+c8P0oQZNCahC60xpy5nCSRGvNhfJIpEmI9vfUmsbS7LC574wmuhdfZXK5mlGxRUysdGuZs089aD4R4gqKSPh6vQGeganRIw+r0oREFbBPF/rhiaGH4479JQ5m8c/8yiajqUp8yltx65eCgWbSY3A6pZA72GfBjRnCKljo2w6RB/e8FkJqgXP8hPWUWdutcJ5Z1yApi1PKFf/gg+BCctaYMBFdp8e9OE7ovjYua75xryqfvRPbaNSx/X21o10k/Udj1hqlY6/7QaVM/CnYNexzdLAeyFIRAklpzmXMlDyw1G1ixy2XLI162SMHmcyi5bjPSMfWo+Mo6UsZjy+MFURkoSO/SYqFn2dqU/jjmXP6uMv1IYa42fb39gdnN6mkrJiMKNi4P0ulYop+lztiKZEA1rFwIvRr/Vuqt/GTzPFFkbZNaM5zoj3kQ2lASnEqQtQeFRaM0kO1bg7PTCjx3qTzBf7Et8FVxupflRUt0z+aAP9UkIb9xUQ0Oo8gffs/SN/QaIJiKjN2r+NdAl0GpUouJ9RC5hVCnJtVcqZVC083bcHpT584ThjNAaRGPssIKMHJhhlDy+ZiUmAVGb+kznB4AsdIjLlx5YYSyrP/PS83uF01Kx3SEd8/FyZuZR7i3ufIDa8/tkeXxo4wRPh+yWEPSwdWvrHZ060ZF27oPGEaRKpWO5BrFvv5ACGb7xO8wsqWuOZI+pB/3Zw496VS/UZ3zEMA8dLiE70r3Y0E6RGIEGlleE+gipH67sq6uwafystwIMy26rzgz2pC0XOt++U64QPFwu9Us5VkxW8sYzGHK0uKllkpwGknAhdGSoWXfEO+QdeKefBVCDGqGHcXmT2gm69QWS9bhZcRM+DOfhVRZWwZGZr/Rzx7ecV4zt29wT2XC3CDOO1iEfqQxljVFeUvH2dOdrjOIAb8xVElM0mYXMlX8n4N71s9Fn9oGA8+N6zWXt+4A6UD9kTUqwlCFzRcfcucdCA3DeaVX08HnJzrOJOMq+ItfJoW79ffNwywJ4CCREIdQFWF0cCMzMcvwRMnpT/+EygA77127CBLJWcqwLoNr7SATeIVY4hzhd0Z7VzwqbU9CHcEfNmxTVO99qeQZzg8HuLhm/K2eqM8NH3v9mtWUnpLBtTfsgbkyqmBctQPiBCbzlI/yL1A4AnHAmLgHmEv34DJToOgLk2m5yzheSojl2QHV9YnRp6T34bkoiqIdy9l0D8mM3Q== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad57642d-8b52-48da-6717-08dad47ed4e6 X-MS-Exchange-CrossTenant-AuthSource: DB9PR03MB8847.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2022 16:04:03.0433 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7Gz1L78+Z/8gNmzShQvsvSDiLBBNgN2pCZd5+H7U5UFjh9JBQF9s2O4XQ3OR3/OAt7jt+/HacbtFSfOZUR3FlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR03MB7730 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean This adds an NVMEM reboot mode driver, similar to Linux's implementation. This allows using the same device tree binding for Linux and U-Boot in most cases. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- MAINTAINERS | 1 + drivers/reboot-mode/Kconfig | 7 +++ drivers/reboot-mode/Makefile | 1 + drivers/reboot-mode/reboot-mode-nvmem.c | 57 +++++++++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 drivers/reboot-mode/reboot-mode-nvmem.c diff --git a/MAINTAINERS b/MAINTAINERS index 97b2f69f65..15321ce9bc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1190,6 +1190,7 @@ M: Sean Anderson S: Maintained F: doc/api/nvmem.rst F: drivers/misc/nvmem.c +F: drivers/reboot-mode/reboot-mode-nvmem.c F: include/nvmem.h NXP C45 TJA11XX PHY DRIVER diff --git a/drivers/reboot-mode/Kconfig b/drivers/reboot-mode/Kconfig index 63ea18cdf0..d57baacc93 100644 --- a/drivers/reboot-mode/Kconfig +++ b/drivers/reboot-mode/Kconfig @@ -30,4 +30,11 @@ config DM_REBOOT_MODE_RTC a device in a specific mode by using a register(s) that can be controlled outside U-Boot (e.g. Kernel). +config REBOOT_MODE_NVMEM + bool "Use NVMEM reboot mode" + depends on DM_REBOOT_MODE && NVMEM + help + Use any kind of non-volatile memory (EEPROM, RTC, etc) to control the + reboot mode. + endmenu diff --git a/drivers/reboot-mode/Makefile b/drivers/reboot-mode/Makefile index 2c13780ced..48c8ab7fe7 100644 --- a/drivers/reboot-mode/Makefile +++ b/drivers/reboot-mode/Makefile @@ -7,3 +7,4 @@ obj-$(CONFIG_DM_REBOOT_MODE) += reboot-mode-uclass.o obj-$(CONFIG_DM_REBOOT_MODE_GPIO) += reboot-mode-gpio.o obj-$(CONFIG_DM_REBOOT_MODE_RTC) += reboot-mode-rtc.o +obj-$(CONFIG_REBOOT_MODE_NVMEM) += reboot-mode-nvmem.o diff --git a/drivers/reboot-mode/reboot-mode-nvmem.c b/drivers/reboot-mode/reboot-mode-nvmem.c new file mode 100644 index 0000000000..da41ca41d9 --- /dev/null +++ b/drivers/reboot-mode/reboot-mode-nvmem.c @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2022 Sean Anderson + */ + +#include +#include +#include +#include + +/** + * struct nvmem_reboot_mode_priv - Private data for the nvmem reboot mode device + * @cell: The nvmem cell to store the mode in + */ +struct nvmem_reboot_mode_priv { + struct nvmem_cell cell; +}; + +static int reboot_mode_get(struct udevice *dev, u32 *mode) +{ + struct nvmem_reboot_mode_priv *priv = dev_get_priv(dev); + + return nvmem_cell_read(&priv->cell, mode, sizeof(*mode)); +} + +static int reboot_mode_set(struct udevice *dev, u32 mode) +{ + struct nvmem_reboot_mode_priv *priv = dev_get_priv(dev); + + return nvmem_cell_write(&priv->cell, &mode, sizeof(mode)); +} + +static const struct reboot_mode_ops nvmem_reboot_mode_ops = { + .get = reboot_mode_get, + .set = reboot_mode_set, +}; + +static int reboot_mode_probe(struct udevice *dev) +{ + struct nvmem_reboot_mode_priv *priv = dev_get_priv(dev); + + return nvmem_cell_get_by_name(dev, "reboot-mode", &priv->cell); +} + +static const struct udevice_id nvmem_reboot_mode_ids[] = { + { .compatible = "nvmem-reboot-mode" }, + { } +}; + +U_BOOT_DRIVER(nvmem_reboot_mode) = { + .name = "nvmem-reboot-mode", + .id = UCLASS_REBOOT_MODE, + .of_match = nvmem_reboot_mode_ids, + .probe = reboot_mode_probe, + .priv_auto = sizeof(struct nvmem_reboot_mode_priv), + .ops = &nvmem_reboot_mode_ops, +};