From patchwork Sun Oct 11 16:03:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1380405 X-Patchwork-Delegate: trini@ti.com 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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=k1zXglCO; 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 4C8RSB6XW5z9sSG for ; Mon, 12 Oct 2020 03:03:38 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4516A822C7; Sun, 11 Oct 2020 18:03:31 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.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=gmail.com header.i=@gmail.com header.b="k1zXglCO"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id EDA7E823D3; Sun, 11 Oct 2020 18:03:29 +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=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 668958000F for ; Sun, 11 Oct 2020 18:03:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=marek.vasut@gmail.com Received: by mail-ej1-x644.google.com with SMTP id lw21so19874661ejb.6 for ; Sun, 11 Oct 2020 09:03:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=V0o2oNG9Wq3DwRpdtSbvJ5BZQpeK9C01mKyfj6ewZac=; b=k1zXglCOZp2LYSo3OYT7Q5SQkC6sWWKJQR6cySR+nzIQMrTeIuoYpdJ+rVyKgieCdn +VaVvKaMMTdIRfY3LdWQVn0wg6UtLrn3P5h45C/fCmAqvxA0DFUQObHGwyBptbqMOHCf JAmrhUiIgzT8H1JSJcgYphl+LA0OwjEbFRLQnOvfCHXcbl15nICvZUgdIfKcP2WqfXeP WcMGF478TQTFE6j0mbWpEdLWBEuj54rf+hf/P19Ajz2VMhVfLyQJyt0u0WLPBZANB/cS K4+C1p/LcOHw9hbevLTOrJo6PhZZOArsOVW/oJ5wNjjBDdD5zZ13zvmtsB3iCSTnGvwM gDUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=V0o2oNG9Wq3DwRpdtSbvJ5BZQpeK9C01mKyfj6ewZac=; b=ek9q8VW1Fk+eHP8zJVYcyIR7ShmjofWzvLWxK19na2unPqDHp15Va6YkLKZxVw5jki Qe+CksYDrI6bwtRzx4K5qzlSQiQpARwTZ0Fkl9/fTpnFU0yaMWaxAFP7Br7ykNdj3fHn Ta3vu+IxGhJ70qVorFqerF2AMQ40I5zHpNJkzNKYEJIja3mcimux2zjoepeDbZbVp+mn CXeP94wH8uxGpG88AT042g1oYaGmZOTu9mC9q/HAp4i3jirjFkl3ZDDz39cQz7CzhkKv 3UxMIUu5Nf6qJcfiBiVcdEKTsCCpcpswM3ZOPfPPeXIt4wr/D1c9fDR4wziU8XYc9tEQ 2x5A== X-Gm-Message-State: AOAM531WOfYxM+apB1mBK/UO0tn8y48xP+c0/OMaj+ePGYoIBYaD44Eq 1IhW7cYHP5GV0A1FMavI77tWNluAPPCM6A== X-Google-Smtp-Source: ABdhPJxZmHuBfVcDRddP4dYrluc3Th/Q1489XxLC25k1CcL8FS2xNIMVtaOF5lNzGVoWGBZ+5dzqbA== X-Received: by 2002:a17:906:5e49:: with SMTP id b9mr23885359eju.436.1602432206502; Sun, 11 Oct 2020 09:03:26 -0700 (PDT) Received: from localhost.localdomain (ip-89-176-112-137.net.upcbroadband.cz. [89.176.112.137]) by smtp.gmail.com with ESMTPSA id u18sm9361971ejm.115.2020.10.11.09.03.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2020 09:03:24 -0700 (PDT) From: Marek Vasut X-Google-Original-From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Simon Glass , Tom Rini Subject: [PATCH 1/2] dm: core: Add late driver remove option Date: Sun, 11 Oct 2020 18:03:17 +0200 Message-Id: <20201011160318.574650-1-marek.vasut+renesas@gmail.com> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 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.102.3 at phobos.denx.de X-Virus-Status: Clean Add another flag to the DM core which could be assigned to drivers and which makes those drivers call their remove callbacks last, just before booting OS and after all the other drivers finished with their remove callbacks. This is necessary for things like clock drivers, where the other drivers might depend on the clock driver in their remove callbacks. Prime example is the mmc subsystem, which can reconfigure a card from HS mode to slower modes in the remove callback and for that it needs to reconfigure the controller clock. Signed-off-by: Marek Vasut Cc: Simon Glass Cc: Tom Rini --- arch/arm/lib/bootm.c | 1 + board/Marvell/octeontx2/board.c | 4 ++-- drivers/core/device-remove.c | 11 ++++++++--- drivers/core/root.c | 2 ++ drivers/core/uclass.c | 32 +++++++++++++++++++++++++------- include/dm/device.h | 4 ++++ include/dm/uclass-internal.h | 3 ++- test/dm/core.c | 21 ++++++++++++--------- test/dm/test-main.c | 30 +++++++++++++++++------------- 9 files changed, 73 insertions(+), 35 deletions(-) diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 1206e306db..f9091a3d41 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -120,6 +120,7 @@ static void announce_and_cleanup(int fake) * of DMA operation or releasing device internal buffers. */ dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL); + dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL | DM_REMOVE_LATE); cleanup_before_linux(); } diff --git a/board/Marvell/octeontx2/board.c b/board/Marvell/octeontx2/board.c index 50e903d9aa..d1e2372a37 100644 --- a/board/Marvell/octeontx2/board.c +++ b/board/Marvell/octeontx2/board.c @@ -65,7 +65,7 @@ void board_quiesce_devices(void) /* Removes all RVU PF devices */ ret = uclass_get(UCLASS_ETH, &uc_dev); if (uc_dev) - ret = uclass_destroy(uc_dev); + ret = uclass_destroy(uc_dev, DM_REMOVE_NORMAL); if (ret) printf("couldn't remove rvu pf devices\n"); @@ -77,7 +77,7 @@ void board_quiesce_devices(void) /* Removes all CGX and RVU AF devices */ ret = uclass_get(UCLASS_MISC, &uc_dev); if (uc_dev) - ret = uclass_destroy(uc_dev); + ret = uclass_destroy(uc_dev, DM_REMOVE_NORMAL); if (ret) printf("couldn't remove misc (cgx/rvu_af) devices\n"); diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index efdb0f2905..07b241b6bb 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -172,14 +172,19 @@ int device_remove(struct udevice *dev, uint flags) drv = dev->driver; assert(drv); - ret = uclass_pre_remove_device(dev); - if (ret) - return ret; + if (!(flags & DM_REMOVE_LATE)) { + ret = uclass_pre_remove_device(dev); + if (ret) + return ret; + } ret = device_chld_remove(dev, NULL, flags); if (ret) goto err; + if (!(flags & DM_REMOVE_LATE) && (drv->flags & DM_FLAG_REMOVE_LATE)) + return 0; + /* * Remove the device if called with the "normal" remove flag set, * or if the remove flag matches any of the drivers remove flags diff --git a/drivers/core/root.c b/drivers/core/root.c index 0726be6b79..21f3054125 100644 --- a/drivers/core/root.c +++ b/drivers/core/root.c @@ -168,6 +168,7 @@ int dm_init(bool of_live) int dm_uninit(void) { device_remove(dm_root(), DM_REMOVE_NORMAL); + device_remove(dm_root(), DM_REMOVE_LATE); device_unbind(dm_root()); gd->dm_root = NULL; @@ -393,6 +394,7 @@ struct acpi_ops root_acpi_ops = { U_BOOT_DRIVER(root_driver) = { .name = "root_driver", .id = UCLASS_ROOT, + .flags = DM_FLAG_REMOVE_LATE, ACPI_OPS_PTR(&root_acpi_ops) }; diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index c3f1b73cd6..ac474d3ff8 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -104,10 +104,28 @@ fail_mem: return ret; } -int uclass_destroy(struct uclass *uc) +int uclass_find_device_by_drv_flag(struct uclass *uc, const unsigned int flag, + const bool neg, struct udevice **devp) +{ + struct udevice *dev; + + *devp = NULL; + uclass_foreach_dev(dev, uc) { + if ((neg && (dev->driver->flags & flag)) || + (!neg && !(dev->driver->flags & flag))) { + *devp = dev; + return 0; + } + } + + return -ENODEV; +} + +int uclass_destroy(struct uclass *uc, unsigned int flag) { struct uclass_driver *uc_drv; struct udevice *dev; + bool late = flag & DM_REMOVE_LATE; int ret; /* @@ -116,15 +134,15 @@ int uclass_destroy(struct uclass *uc) * unbound (by the recursion in the call to device_unbind() below). * We can loop until the list is empty. */ - while (!list_empty(&uc->dev_head)) { - dev = list_first_entry(&uc->dev_head, struct udevice, - uclass_node); - ret = device_remove(dev, DM_REMOVE_NORMAL | DM_REMOVE_NO_PD); - if (ret) + while (!uclass_find_device_by_drv_flag(uc, DM_FLAG_REMOVE_LATE, late, &dev)) { + ret = device_remove(dev, flag | DM_REMOVE_NO_PD); + if (ret) { return log_msg_ret("remove", ret); + } ret = device_unbind(dev); - if (ret) + if (ret) { return log_msg_ret("unbind", ret); + } } uc_drv = uc->uc_drv; diff --git a/include/dm/device.h b/include/dm/device.h index ac3b6c1b8a..b3714ea851 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -73,6 +73,8 @@ struct driver_info; */ #define DM_FLAG_REMOVE_WITH_PD_ON (1 << 13) +#define DM_FLAG_REMOVE_LATE (1 << 14) + /* * One or multiple of these flags are passed to device_remove() so that * a selective device removal as specified by the remove-stage and the @@ -95,6 +97,8 @@ enum { /* Don't power down any attached power domains */ DM_REMOVE_NO_PD = 1 << 1, + + DM_REMOVE_LATE = 1 << 2, }; /** diff --git a/include/dm/uclass-internal.h b/include/dm/uclass-internal.h index 6e3f15c2b0..b5926b0f5c 100644 --- a/include/dm/uclass-internal.h +++ b/include/dm/uclass-internal.h @@ -247,8 +247,9 @@ struct uclass *uclass_find(enum uclass_id key); * Destroy a uclass and all its devices * * @uc: uclass to destroy + * @flag: driver flags (DM_REMOVE_NORMAL or DM_REMOVE_LATE) * @return 0 on success, -ve on error */ -int uclass_destroy(struct uclass *uc); +int uclass_destroy(struct uclass *uc, unsigned int flag); #endif diff --git a/test/dm/core.c b/test/dm/core.c index 6f380a574c..43327c29d3 100644 --- a/test/dm/core.c +++ b/test/dm/core.c @@ -82,16 +82,19 @@ void dm_leak_check_start(struct unit_test_state *uts) int dm_leak_check_end(struct unit_test_state *uts) { struct mallinfo end; - int id, diff; + int i, id, diff; /* Don't delete the root class, since we started with that */ - for (id = UCLASS_ROOT + 1; id < UCLASS_COUNT; id++) { - struct uclass *uc; - - uc = uclass_find(id); - if (!uc) - continue; - ut_assertok(uclass_destroy(uc)); + for (i = 0; i < 2; i++) { + for (id = UCLASS_ROOT + 1; id < UCLASS_COUNT; id++) { + struct uclass *uc; + + uc = uclass_find(id); + if (!uc) + continue; + ut_assertok(uclass_destroy(uc, + i ? DM_REMOVE_LATE : DM_REMOVE_NORMAL)); + } } end = mallinfo(); @@ -514,7 +517,7 @@ static int dm_test_uclass(struct unit_test_state *uts) ut_asserteq(0, dm_testdrv_op_count[DM_TEST_OP_DESTROY]); ut_assert(uc->priv); - ut_assertok(uclass_destroy(uc)); + ut_assertok(uclass_destroy(uc, DM_REMOVE_LATE)); ut_asserteq(1, dm_testdrv_op_count[DM_TEST_OP_INIT]); ut_asserteq(1, dm_testdrv_op_count[DM_TEST_OP_DESTROY]); diff --git a/test/dm/test-main.c b/test/dm/test-main.c index 38b7b1481a..f1c1011d8e 100644 --- a/test/dm/test-main.c +++ b/test/dm/test-main.c @@ -60,19 +60,23 @@ static int do_autoprobe(struct unit_test_state *uts) static int dm_test_destroy(struct unit_test_state *uts) { - int id; - - for (id = 0; id < UCLASS_COUNT; id++) { - struct uclass *uc; - - /* - * If the uclass doesn't exist we don't want to create it. So - * check that here before we call uclass_find_device(). - */ - uc = uclass_find(id); - if (!uc) - continue; - ut_assertok(uclass_destroy(uc)); + int i, id; + + for (i = 0; i < 2; i++) { + for (id = 0; id < UCLASS_COUNT; id++) { + struct uclass *uc; + + /* + * If the uclass doesn't exist we don't want to + * create it. So check that here before we call + * uclass_find_device(). + */ + uc = uclass_find(id); + if (!uc) + continue; + ut_assertok(uclass_destroy(uc, + i ? DM_REMOVE_LATE : DM_REMOVE_NORMAL)); + } } return 0; From patchwork Sun Oct 11 16:03:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 1380406 X-Patchwork-Delegate: trini@ti.com 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=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=JzguNdbp; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (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 4C8RSG5T67z9sSG for ; Mon, 12 Oct 2020 03:03:42 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 688D982416; Sun, 11 Oct 2020 18:03:34 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.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=gmail.com header.i=@gmail.com header.b="JzguNdbp"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id F21A9822C8; Sun, 11 Oct 2020 18:03:30 +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=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,SPF_HELO_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com [IPv6:2a00:1450:4864:20::641]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 93EAB822C7 for ; Sun, 11 Oct 2020 18:03:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=marek.vasut@gmail.com Received: by mail-ej1-x641.google.com with SMTP id x7so9730702eje.8 for ; Sun, 11 Oct 2020 09:03:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YbBui3++flxXIlsebu533a2ZC+Z11AkFzaWcqVOhRL0=; b=JzguNdbpoPGuydRPeox0MLAWd9v8qmicYptnla1YdGXdEwfO1/ec2uxHRuFgXSdXKC cHwYDqa1Nv19RIcF4qpcM5wxmC9qVcdTsnYZZ4kIrw7mowk5RC94qkW2Q0r7b2RmpMt4 PZ3yFchHMQjocS2gNuUTxkXGL3j0XqDw5cMI1qoji9OUym8l8xmfdDCKNm92WEVdCWp9 U53BhPiXBJ5hMUnFGJdyPaUl9fXaUxqYMifAvR4zkycDYZzmOqzFmJdnYvEK+zhPun3H sZ1dgg2AR3HjOtkOzHM74GsfBNtLi2g/+QRRSRZEfQzvKVEghEOv32Mq+a1Qt8TaDxFU H9ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YbBui3++flxXIlsebu533a2ZC+Z11AkFzaWcqVOhRL0=; b=N78k1TAadpi2/wsjtErxuXkSAIzQlw0kJOJoW8Z5U9DZ5shclTZDt/gfvmzwNTuLvI H+X1d5eBZR/izO7d7/EY17X1m/+Cp7tT0Dz50mlzXdrHUyf8NOj97jKCnvqs7FhPJWZW Lfbv5aCm0z8PajcKb+m7yUm8DBwN3DKPxIWROGDQAGAvRMm11L+5VtcxC+YErHzVU8O9 UZjU7YV4PIr0eGBABOkZNRAJTQ/gAqgZZ6fQprYutq0OnFocNeisktHjaBnIALNIlhjI WmSP1ihNAUSLg35raTVuUq8MGlAEKs3GtUvPdl0JIsEhvkJZ1C9+4CKt1EPxkH+VwD/m dhyg== X-Gm-Message-State: AOAM532m8Q0GoPQohIpkQdVCYQmXRjVepFHD6+yY+KfGSzn6aVCVHFiR eYuqoQ75ClGoiDjDy3G9a02RVXPil+12UA== X-Google-Smtp-Source: ABdhPJyRl18yygcPN1mAIlK5sh+KIPC8+CT+KydeAyC1O1zSNYTgrHJpxQpp+QFXx/vkOj7Eq3rhhw== X-Received: by 2002:a17:906:4d44:: with SMTP id b4mr2923330ejv.131.1602432207911; Sun, 11 Oct 2020 09:03:27 -0700 (PDT) Received: from localhost.localdomain (ip-89-176-112-137.net.upcbroadband.cz. [89.176.112.137]) by smtp.gmail.com with ESMTPSA id u18sm9361971ejm.115.2020.10.11.09.03.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2020 09:03:27 -0700 (PDT) From: Marek Vasut X-Google-Original-From: Marek Vasut To: u-boot@lists.denx.de Cc: Marek Vasut , Nobuhiro Iwamatsu , Simon Glass , Tom Rini Subject: [PATCH 2/2] clk: renesas: Tear clock controller down last before booting OS Date: Sun, 11 Oct 2020 18:03:18 +0200 Message-Id: <20201011160318.574650-2-marek.vasut+renesas@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201011160318.574650-1-marek.vasut+renesas@gmail.com> References: <20201011160318.574650-1-marek.vasut+renesas@gmail.com> MIME-Version: 1.0 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.102.3 at phobos.denx.de X-Virus-Status: Clean Once all the other drivers got torn down in preparation for the OS to start, tear down the clock controller last. The clock controller must be torn down last as some of the clock which get turned off might have still been needed during the teardown stage of the other drivers. Signed-off-by: Marek Vasut Cc: Nobuhiro Iwamatsu Cc: Simon Glass Cc: Tom Rini --- drivers/clk/renesas/r8a7795-cpg-mssr.c | 1 + drivers/clk/renesas/r8a7796-cpg-mssr.c | 1 + drivers/clk/renesas/r8a77965-cpg-mssr.c | 1 + drivers/clk/renesas/r8a77970-cpg-mssr.c | 1 + drivers/clk/renesas/r8a77980-cpg-mssr.c | 1 + drivers/clk/renesas/r8a77990-cpg-mssr.c | 1 + drivers/clk/renesas/r8a77995-cpg-mssr.c | 1 + 7 files changed, 7 insertions(+) diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c index feb41b120d..12b181dcf8 100644 --- a/drivers/clk/renesas/r8a7795-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c @@ -377,4 +377,5 @@ U_BOOT_DRIVER(clk_r8a7795) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c index ef7c554ac6..5ecd906b3a 100644 --- a/drivers/clk/renesas/r8a7796-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c @@ -355,4 +355,5 @@ U_BOOT_DRIVER(clk_r8a7796) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a77965-cpg-mssr.c b/drivers/clk/renesas/r8a77965-cpg-mssr.c index f8d954242d..08c51ff183 100644 --- a/drivers/clk/renesas/r8a77965-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77965-cpg-mssr.c @@ -353,4 +353,5 @@ U_BOOT_DRIVER(clk_r8a77965) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a77970-cpg-mssr.c b/drivers/clk/renesas/r8a77970-cpg-mssr.c index c1e9b91b0d..613575900d 100644 --- a/drivers/clk/renesas/r8a77970-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77970-cpg-mssr.c @@ -230,4 +230,5 @@ U_BOOT_DRIVER(clk_r8a77970) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a77980-cpg-mssr.c b/drivers/clk/renesas/r8a77980-cpg-mssr.c index e291774791..d41dd348cd 100644 --- a/drivers/clk/renesas/r8a77980-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77980-cpg-mssr.c @@ -253,4 +253,5 @@ U_BOOT_DRIVER(clk_r8a77980) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a77990-cpg-mssr.c b/drivers/clk/renesas/r8a77990-cpg-mssr.c index a990251ac5..b3ea96a077 100644 --- a/drivers/clk/renesas/r8a77990-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77990-cpg-mssr.c @@ -312,4 +312,5 @@ U_BOOT_DRIVER(clk_r8a77990) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, }; diff --git a/drivers/clk/renesas/r8a77995-cpg-mssr.c b/drivers/clk/renesas/r8a77995-cpg-mssr.c index c49a5ffae8..b66b0b46df 100644 --- a/drivers/clk/renesas/r8a77995-cpg-mssr.c +++ b/drivers/clk/renesas/r8a77995-cpg-mssr.c @@ -251,4 +251,5 @@ U_BOOT_DRIVER(clk_r8a77995) = { .ops = &gen3_clk_ops, .probe = gen3_clk_probe, .remove = gen3_clk_remove, + .flags = DM_FLAG_OS_PREPARE | DM_FLAG_REMOVE_LATE, };