From nobody Wed Nov 5 05:11:01 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1532702566557874.9632427126184; Fri, 27 Jul 2018 07:42:46 -0700 (PDT) Received: from localhost ([::1]:41619 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fj3x6-0006mz-W4 for importer@patchew.org; Fri, 27 Jul 2018 10:42:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34365) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fj3sH-0003FB-Ma for qemu-devel@nongnu.org; Fri, 27 Jul 2018 10:37:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fj3sG-0008Ih-Nt for qemu-devel@nongnu.org; Fri, 27 Jul 2018 10:37:45 -0400 Received: from greensocs.com ([193.104.36.180]:50606) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fj3sB-0008Ae-Fb; Fri, 27 Jul 2018 10:37:39 -0400 Received: from localhost (localhost [127.0.0.1]) by greensocs.com (Postfix) with ESMTP id 3ED5B443482; Fri, 27 Jul 2018 16:37:31 +0200 (CEST) Received: from greensocs.com ([127.0.0.1]) by localhost (gs-01.greensocs.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yeX5WTX0vOB6; Fri, 27 Jul 2018 16:37:30 +0200 (CEST) Received: by greensocs.com (Postfix, from userid 998) id 53A6F4434A4; Fri, 27 Jul 2018 16:37:30 +0200 (CEST) Received: from kouign-amann.hive.antfield.fr (antfield.tima.u-ga.fr [147.171.129.253]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: damien.hedde@greensocs.com) by greensocs.com (Postfix) with ESMTPSA id EC10642899A; Fri, 27 Jul 2018 16:37:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1532702251; bh=hTz2cBGR4g3rz6906UkiYcQqelpk1tHGFoiGUNsN8Wk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=BmGwER437dP0jV9qxrW30g7MkYd71nH/mhoKpslJ23OKKj/9MJeIIIQfDPd/ivZed AvUvGrgDTHWE5eTEdA44p5Df1l5Hc48UCryALbsqzS89gGxvnXaLWKTsaf0VSp29sa vKLZ4bnxtkpRHG/oGTIM4G8WiYsRsD2tH5Se5lLM= X-Virus-Scanned: amavisd-new at greensocs.com Authentication-Results: gs-01.greensocs.com (amavisd-new); dkim=pass (1024-bit key) header.d=greensocs.com header.b=wyuAMg87; dkim=pass (1024-bit key) header.d=greensocs.com header.b=wyuAMg87 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1532702250; bh=hTz2cBGR4g3rz6906UkiYcQqelpk1tHGFoiGUNsN8Wk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wyuAMg87wxndpVAy3v+ltoMfi6sQg8HQS2KqXz7+i8p+4J4w4sAZUYE87QbwCu3aF lMfnZElEzxR/54xVVG+eZoFCP3XKx+SnMgDlxu0qXKDeyyW5f/dNSVUhsQnx/FG4zA 4c3bZi7LiVKjYlgz4lL4doViB07pjHQJvICcJ2a4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=greensocs.com; s=mail; t=1532702250; bh=hTz2cBGR4g3rz6906UkiYcQqelpk1tHGFoiGUNsN8Wk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wyuAMg87wxndpVAy3v+ltoMfi6sQg8HQS2KqXz7+i8p+4J4w4sAZUYE87QbwCu3aF lMfnZElEzxR/54xVVG+eZoFCP3XKx+SnMgDlxu0qXKDeyyW5f/dNSVUhsQnx/FG4zA 4c3bZi7LiVKjYlgz4lL4doViB07pjHQJvICcJ2a4= From: Damien Hedde To: qemu-devel@nongnu.org Date: Fri, 27 Jul 2018 16:37:21 +0200 Message-Id: <2b92ae960dfc47149945c9e47f90b4433d8eee35.1532701430.git.damien.hedde@greensocs.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 193.104.36.180 Subject: [Qemu-devel] [RFC PATCH 2/6] qdev: add power/clock gating control on bus tree X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: edgar.iglesias@xilinx.com, peter.maydell@linaro.org, alistair@alistair23.me, mark.burton@greensocs.com, saipava@xilinx.com, qemu-arm@nongnu.org, Damien Hedde , pbonzini@redhat.com, luc.michel@greensocs.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (found 2 invalid signatures) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add functions [qdev|qbus]_set_[power|clock]_all(_fn). Theses allow to control power and clock gating along a bus hierarchy. Signed-off-by: Damien Hedde --- include/hw/qdev-core.h | 20 +++++++++++++++++ hw/core/qdev.c | 51 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 659287e185..607c367738 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -464,4 +464,24 @@ void device_set_power(DeviceState *dev, bool en); */ void device_set_clock(DeviceState *dev, bool en); =20 +/** + * qdev/qbus_set_power_all(_fn) + * Enable/Disable the power of a tree starting + * at given device or bus + */ +void qdev_set_power_all(DeviceState *dev, bool en); +void qdev_set_power_all_fn(void *opaque, bool en); +void qbus_set_power_all(BusState *bus, bool en); +void qbus_set_power_all_fn(void *opaque, bool en); + +/** + * qdev/qbus_set_clock_all(_fn) + * Enable/Disable the clock of a tree starting + * at given device or bus + */ +void qdev_set_clock_all(DeviceState *dev, bool en); +void qdev_set_clock_all_fn(void *opaque, bool en); +void qbus_set_clock_all(BusState *bus, bool en); +void qbus_set_clock_all_fn(void *opaque, bool en); + #endif diff --git a/hw/core/qdev.c b/hw/core/qdev.c index bb6d36eab9..24b90bd45f 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -1138,6 +1138,57 @@ void device_set_clock(DeviceState *dev, bool en) } } =20 +static int qdev_set_power_one(DeviceState *dev, void *opaque) +{ + device_set_power(dev, *((bool *)opaque)); + return 0; +} + +void qdev_set_power_all(DeviceState *dev, bool en) +{ + qdev_walk_children(dev, NULL, NULL, qdev_set_power_one, NULL, &en); +} + +void qdev_set_power_all_fn(void *opaque, bool en) +{ + qdev_set_power_all(DEVICE(opaque), en); +} + +void qbus_set_power_all(BusState *bus, bool en) +{ + qbus_walk_children(bus, NULL, NULL, qdev_set_power_one, NULL, &en); +} + +void qbus_set_power_all_fn(void *opaque, bool en) +{ + qbus_set_power_all(BUS(opaque), en); +} + +static int qdev_set_clock_one(DeviceState *dev, void *opaque) +{ + device_set_clock(dev, *((bool *)opaque)); + return 0; +} + +void qdev_set_clock_all(DeviceState *dev, bool en) +{ + qdev_walk_children(dev, NULL, NULL, qdev_set_clock_one, NULL, &en); +} + +void qdev_set_clock_all_fn(void *opaque, bool en) +{ + qdev_set_clock_all(DEVICE(opaque), en); +} + +void qbus_set_clock_all(BusState *bus, bool en) +{ + qbus_walk_children(bus, NULL, NULL, qdev_set_clock_one, NULL, &en); +} + +void qbus_set_clock_all_fn(void *opaque, bool en) +{ + qbus_set_clock_all(BUS(opaque), en); +} =20 Object *qdev_get_machine(void) { --=20 2.18.0