From patchwork Thu Aug 19 09:57:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rasmus Villemoes X-Patchwork-Id: 1518565 X-Patchwork-Delegate: sr@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: 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: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.a=rsa-sha256 header.s=selector1 header.b=W0V5d0yF; 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 RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Gr0bS6597z9sW8 for ; Thu, 19 Aug 2021 19:59:00 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 30DE882E3F; Thu, 19 Aug 2021 11:58:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=prevas.dk header.i=@prevas.dk header.b="W0V5d0yF"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id BAFBF82EB9; Thu, 19 Aug 2021 11:57:36 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, MSGID_FROM_MTA_HEADER,SPF_HELO_PASS,T_SPF_PERMERROR autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20703.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1a::703]) (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 9D28D82E0D for ; Thu, 19 Aug 2021 11:57:24 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=prevas.dk Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=rasmus.villemoes@prevas.dk ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aDqLu+yFMrtZ3SL18KeT02+9rbO8wjGmZj9At/WaCl3O8i3W9XvgaCGcNHDuPLj8RRxlGhhdFWD7w9vuYkkAsiavXyePfxbKh9ilXKV5BRx9RdKmhP9yb1h6yqw/a2OktxWzOi+9u9gKEZy+w/baKVf/vawNBISxq1qu0y4j2joM7PDlKhU2q2hR3UUjxKc8O0tUJOBMuEwuk/NWcBJc0HkhZs936zx6jyORYcAVwR9Nl1bsttfmb4K/HviGR7fW/xsGkYse0PFr6s4reRwKm7qTnlnN7h0Yr6MJJaE/AtM3Mtyk/onSa2/OU/VOxu4aSwlgBI8g2e/V8YVBw/zM7g== 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=fAf/frq0UuH0NukDTWr6EkDsTCeAyYoTBRx3KprCGQg=; b=kDHe2HHKSona94z7raPJHY8gZmUE/tmK4plf3ZY7rPNeXvvbMnfnspFuNjapeTwxvYNWQIzAS9SD7hQs5iljAKevfQzXRCpTM15wGOX3GMbODTPbQQox+U0+/WgjJr/mhUfalFhk75V/pIRVf6VlzwD9rPiPM4EjAaN5DT08yOElnvV278Z5vOyO+2wao6DMdx9qMvYYRN2ATmrBJjGagGjJvD4kVFZWoQjXNGlENmpTGCHTtjkfOARVxoVk3zVoUYNjytVufHs1VAHysqVvgePFQsY5/h+u4pzJmfGJ0YJObxdD/Ui+jk6gwysIZ6hBAChtENFJpTbe8yPi3n2Pcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=prevas.dk; dmarc=pass action=none header.from=prevas.dk; dkim=pass header.d=prevas.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prevas.dk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fAf/frq0UuH0NukDTWr6EkDsTCeAyYoTBRx3KprCGQg=; b=W0V5d0yFe5BGmsZa4ZbgKHhxOeX0jEKmu44D09ExI++4rA/5nj90Kmyq89V3yfHixyAT+xfuk7yud1mUIenTKuXY7bgEZHF6XBW2h8m9mQe5onC0s8UiH8hLEwqf7YJWS3MW9opIqH2LEna1dZ3W1Reab9PsUaeFmWn62d/uz5o= Authentication-Results: lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=prevas.dk; Received: from AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:3f::10) by AM0PR10MB3170.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:180::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19; Thu, 19 Aug 2021 09:57:23 +0000 Received: from AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM ([fe80::fc83:36a5:db02:3dbb]) by AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM ([fe80::fc83:36a5:db02:3dbb%7]) with mapi id 15.20.4415.024; Thu, 19 Aug 2021 09:57:23 +0000 From: Rasmus Villemoes To: u-boot@lists.denx.de Cc: Simon Glass , Stefan Roese , Tom Rini , Wolfgang Denk , Rasmus Villemoes Subject: [PATCH v6 09/12] watchdog: wdt-uclass.c: handle all DM watchdogs in watchdog_reset() Date: Thu, 19 Aug 2021 11:57:03 +0200 Message-Id: <20210819095706.3585923-10-rasmus.villemoes@prevas.dk> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210819095706.3585923-1-rasmus.villemoes@prevas.dk> References: <20210819095706.3585923-1-rasmus.villemoes@prevas.dk> X-ClientProxiedBy: HE1P190CA0031.EURP190.PROD.OUTLOOK.COM (2603:10a6:7:52::20) To AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:3f::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from prevas-ravi.prevas.se (81.216.59.226) by HE1P190CA0031.EURP190.PROD.OUTLOOK.COM (2603:10a6:7:52::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Thu, 19 Aug 2021 09:57:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c79741a-18d6-4d65-15b8-08d962f7be2c X-MS-TrafficTypeDiagnostic: AM0PR10MB3170: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GU58lVfr8OW93ozEik60ZZREprc/noKDm0L5z/Hm/D/E9XyVB+OzPTTr1VR9PVq+Kh+Dz7Tvdor+C5bFfMC+G5PL8DRo8OPLB+cLteI56QvfWUmuk84KxVmPIPhp8rc4rIW9fVVLzj/SCB+27aHhYYZdMIY2dt3+/mexuXGE9NHLzzqF9s4AJxos90/ka6HsRDZoV+QRNiLUHpUkkd00Mx9Ia0olZ7dDlU0LhMtA2wJ8mUdnff0b0Wfvm9VKEU8n7TOmyLbuMdqOUxrnCOct45Z8ZBk3+TkQIHy2wozvjqEqFrd8fkKKe7MKji/UUCKMpRWu8GZsr7+MlOQJFeJLe9qBpJrrwEX12RMa47cF2vF5G0yw47G4KokxUP8hF7dTDqyAEWn9iS0fHHN/85zNwyYLjR6lFMa+EAIHfsTXpKdwd4Gp7mjxLsgmsm5JnJrdjDPio7zsPWWjYwVW9Qpxlt49okGQYHS21glfdEQNehNEgvsVV6ywSfXYn4/yO33VyOZPI0qHlzT1ZrVq5LHbdRtYirhOuEb08frKu4sl056KY1an/QuSdJQi9SfxWvTmUVW+IccOPiDjjR4W7HdFeggYtkzeNnRFGSG2aTfXENVN+eVmRQ2HGqM7f8RpUB4fMAn4Aadbjyf3nFdWYBQU2jnf6DHws+gceTXjOI/Uj2TjfCUCWknMTnnVl/Ug9dXQesndXOPY7n0cwLMHY+sFCQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(39850400004)(396003)(376002)(346002)(136003)(366004)(36756003)(44832011)(107886003)(54906003)(6512007)(316002)(2906002)(1076003)(38100700002)(38350700002)(478600001)(8676002)(83380400001)(8976002)(6916009)(6486002)(66476007)(52116002)(6506007)(66946007)(186003)(2616005)(956004)(4326008)(8936002)(26005)(6666004)(86362001)(5660300002)(66556008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lEvaTtB78Qshkrjx5IfvAfjuKKPB1/rNWCVW7mYpjYoDzNANhYANDUgwaoFh9PD+j0J2td9NZyCQA3GqzwgArZJNMmFvNtOHsUFTs943g+ED6TpVZeMhSCzVtMjKujChY0C42u/+cz4XT1/gGp5k871WvAU1g97AHSUmaA5P8Ry2jYNi9ngmx1Hd8EMzU+8OcG1h4QgqiGOTco3ecPa6nDT4hDgqmTTt1LzvegkZuYFBugtRfcz8GXIfCjXO8jC215+8GcePzf9DxGQPL/odl4PGPIvOBolq9YjG7O3hJbdtJniPnrdUQzGW9XUI/3L3nhmLseCaxVFcZ1eugUJTabA56A0qLqscJftik69STD/9vaaVcnMpgsOOFuL0gYhmYxUiKVzNUhKMN8dIerEt+L5rnC1Cr4GNSXDj9R6YDC3Vo3UJeQ7M/38B+vioGb1AQO5fjmy7CNOMtNW0W6ZX+jor/GHa/0h1ht5ybJ4T9vTk7I2ma0QFBUy85UzQ+AUqSNjYvOtKe9WMGYiGFc9hPD/j1njYxWE47yMuwlUJlEbi7TCGhU/jPRwb7bsofuwJWuwGsczsAIdlDZasKm93yy8Ud5RGSSxLcOAmZibwmXPHOYrYm8fiGfDv8xYxsrPERKbUYYtTv+3xzaTg0kzWbN5n4i19ZpahkoslKxxZ2+FL8KWoUPM/FBAC3St8OFNjGoQsPK3TX18fxU0hnhf1piAJKLlWnH/82gqLJjNwtEw+eMk/Acoa16k8o30mjVA6ZIFuSjTRh7UJykhOsTsJNPwzCqhEYL6HdBHjCwshqaMbCavRwjKik8SBkBWYstoyleuqr9xeZ0aDslXa7+H0uPvZVYwQVxKKbVNvPoXZntv2g49KoiPzXRhVk63f7LuQt303/EFQMW7WHqQc32tMqDwiFSzghJbsIxf7qeBckdPc04c45FvkcWlbP3XKuxmyFRsH94IAeUfesfgWci5DZGM8qlJHowZJuCzUV5TnfUWUbLmzelWP2QxoWCWW8GUYUMn0twwdEtcxQgyKN85tccJ+zKiINxtKyged7sUVuuzqlKehzAgqGfmLSe8BvyC6irTH1ZdsrfJTMlxBuJU/wdfPCF9P/TuErhMS+FRsZcd+wkQfFv8VLcGOEw48tvFhT+JChhl4zjoOE70tk5eYLOb8+ala7oldEUNf71RQzulrePBfC4PgwX844iToHZzzxm/1xUl6FaIsUHeFQBlfAZVVV8G6SoOJr9UIECRA9udW7wLFNNxp2mPDblcGtitN+8omtmDEohBpviq6LjeEQVRhI0OgOsNI/J2rdFiUSyPNvLexGtW4qlvNXJtufqkc X-OriginatorOrg: prevas.dk X-MS-Exchange-CrossTenant-Network-Message-Id: 5c79741a-18d6-4d65-15b8-08d962f7be2c X-MS-Exchange-CrossTenant-AuthSource: AM0PR10MB1874.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2021 09:57:23.7709 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: d350cf71-778d-4780-88f5-071a4cb1ed61 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1fTIPXDJ732d2kGERIPZhVJqCSCD0S0TZyvDXN4AyTKhCrJkpFR8Wp3DlR4q5vWPj5dhhAixDIAtuTifd02pFSNZn1l2ESpTXrgivEOqP1M= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB3170 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean A board can have and make use of more than one watchdog device, say one built into the SOC and an external gpio-petted one. Having wdt-uclass only handle the first is both a little arbitrary and unexpected. So change initr_watchdog() so we visit (probe) all DM watchdog devices, and call the init_watchdog_dev helper for each. Similarly let watchdog_reset() loop over the whole uclass - each having their own ratelimiting metadata, and a separate "is this device running" flag. This gets rid of the watchdog_dev member of struct global_data. We do, however, still need the GD_FLG_WDT_READY set in initr_watchdog(). This is because watchdog_reset() can get called before DM is ready, and I don't think we can call uclass_get() that early. The current code just returns 0 if "getting" the first device fails - that can of course happen because there are no devices, but it could also happen if its ->probe call failed. In keeping with that, continue with the handling of the remaining devices even if one fails to probe. This is also why we cannot use uclass_probe_all(). If desired, it's possible to later add a per-device "u-boot,autostart" boolean property, so that one can do CONFIG_WATCHDOG_AUTOSTART per-device. Reviewed-by: Simon Glass Reviewed-by: Stefan Roese Signed-off-by: Rasmus Villemoes --- drivers/watchdog/wdt-uclass.c | 56 ++++++++++++++++++++----------- include/asm-generic/global_data.h | 6 ---- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/drivers/watchdog/wdt-uclass.c b/drivers/watchdog/wdt-uclass.c index 5b1c0df5d6..7570710c4d 100644 --- a/drivers/watchdog/wdt-uclass.c +++ b/drivers/watchdog/wdt-uclass.c @@ -61,20 +61,24 @@ static void init_watchdog_dev(struct udevice *dev) int initr_watchdog(void) { - /* - * Init watchdog: This will call the probe function of the - * watchdog driver, enabling the use of the device - */ - if (uclass_get_device_by_seq(UCLASS_WDT, 0, - (struct udevice **)&gd->watchdog_dev)) { - debug("WDT: Not found by seq!\n"); - if (uclass_get_device(UCLASS_WDT, 0, - (struct udevice **)&gd->watchdog_dev)) { - printf("WDT: Not found!\n"); - return 0; + struct udevice *dev; + struct uclass *uc; + int ret; + + ret = uclass_get(UCLASS_WDT, &uc); + if (ret) { + log_debug("Error getting UCLASS_WDT: %d\n", ret); + return 0; + } + + uclass_foreach_dev(dev, uc) { + ret = device_probe(dev); + if (ret) { + log_debug("Error probing %s: %d\n", dev->name, ret); + continue; } + init_watchdog_dev(dev); } - init_watchdog_dev(gd->watchdog_dev); gd->flags |= GD_FLG_WDT_READY; return 0; @@ -182,22 +186,34 @@ void watchdog_reset(void) { struct wdt_priv *priv; struct udevice *dev; + struct uclass *uc; ulong now; /* Exit if GD is not ready or watchdog is not initialized yet */ if (!gd || !(gd->flags & GD_FLG_WDT_READY)) return; - dev = gd->watchdog_dev; - priv = dev_get_uclass_priv(dev); - if (!priv->running) + if (uclass_get(UCLASS_WDT, &uc)) return; - /* Do not reset the watchdog too often */ - now = get_timer(0); - if (time_after_eq(now, priv->next_reset)) { - priv->next_reset = now + priv->reset_period; - wdt_reset(dev); + /* + * All devices bound to the wdt uclass should have been probed + * in initr_watchdog(). But just in case something went wrong, + * check device_active() before accessing the uclass private + * data. + */ + uclass_foreach_dev(dev, uc) { + if (!device_active(dev)) + continue; + priv = dev_get_uclass_priv(dev); + if (!priv->running) + continue; + /* Do not reset the watchdog too often */ + now = get_timer(0); + if (time_after_eq(now, priv->next_reset)) { + priv->next_reset = now + priv->reset_period; + wdt_reset(dev); + } } } #endif diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h index e55070303f..28d749538c 100644 --- a/include/asm-generic/global_data.h +++ b/include/asm-generic/global_data.h @@ -447,12 +447,6 @@ struct global_data { */ fdt_addr_t translation_offset; #endif -#if CONFIG_IS_ENABLED(WDT) - /** - * @watchdog_dev: watchdog device - */ - struct udevice *watchdog_dev; -#endif #ifdef CONFIG_GENERATE_ACPI_TABLE /** * @acpi_ctx: ACPI context pointer