[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/35] hw/clock: Let clock_set() return boolean value
From: |
Peter Maydell |
Subject: |
[PULL 03/35] hw/clock: Let clock_set() return boolean value |
Date: |
Fri, 28 Aug 2020 10:23:41 +0100 |
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
Let clock_set() return a boolean value whether the clock
has been updated or not.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20200806123858.30058-3-f4bug@amsat.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
include/hw/clock.h | 12 +++++++-----
hw/core/clock.c | 7 ++++++-
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/include/hw/clock.h b/include/hw/clock.h
index 468fed0996d..d85af45c967 100644
--- a/include/hw/clock.h
+++ b/include/hw/clock.h
@@ -127,17 +127,19 @@ void clock_set_source(Clock *clk, Clock *src);
* @value: the clock's value, 0 means unclocked
*
* Set the local cached period value of @clk to @value.
+ *
+ * @return: true if the clock is changed.
*/
-void clock_set(Clock *clk, uint64_t value);
+bool clock_set(Clock *clk, uint64_t value);
-static inline void clock_set_hz(Clock *clk, unsigned hz)
+static inline bool clock_set_hz(Clock *clk, unsigned hz)
{
- clock_set(clk, CLOCK_PERIOD_FROM_HZ(hz));
+ return clock_set(clk, CLOCK_PERIOD_FROM_HZ(hz));
}
-static inline void clock_set_ns(Clock *clk, unsigned ns)
+static inline bool clock_set_ns(Clock *clk, unsigned ns)
{
- clock_set(clk, CLOCK_PERIOD_FROM_NS(ns));
+ return clock_set(clk, CLOCK_PERIOD_FROM_NS(ns));
}
/**
diff --git a/hw/core/clock.c b/hw/core/clock.c
index 3c0daf7d4cf..7066282f7b9 100644
--- a/hw/core/clock.c
+++ b/hw/core/clock.c
@@ -34,11 +34,16 @@ void clock_clear_callback(Clock *clk)
clock_set_callback(clk, NULL, NULL);
}
-void clock_set(Clock *clk, uint64_t period)
+bool clock_set(Clock *clk, uint64_t period)
{
+ if (clk->period == period) {
+ return false;
+ }
trace_clock_set(CLOCK_PATH(clk), CLOCK_PERIOD_TO_NS(clk->period),
CLOCK_PERIOD_TO_NS(period));
clk->period = period;
+
+ return true;
}
static void clock_propagate_period(Clock *clk, bool call_callbacks)
--
2.20.1
- [PULL 00/35] target-arm queue, Peter Maydell, 2020/08/28
- [PULL 02/35] hw/clock: Remove unused clock_init*() functions, Peter Maydell, 2020/08/28
- [PULL 03/35] hw/clock: Let clock_set() return boolean value,
Peter Maydell <=
- [PULL 01/35] hw/arm/sbsa-ref: fix typo breaking PCIe IRQs, Peter Maydell, 2020/08/28
- [PULL 04/35] hw/clock: Only propagate clock changes if the clock is changed, Peter Maydell, 2020/08/28
- [PULL 05/35] hw/arm/musicpal: Use AddressSpace for DMA transfers, Peter Maydell, 2020/08/28
- [PULL 06/35] target/arm: Clarify HCR_EL2 ARMCPRegInfo type, Peter Maydell, 2020/08/28
- [PULL 07/35] target/arm: Pass the entire mte descriptor to mte_check_fail, Peter Maydell, 2020/08/28
- [PULL 08/35] target/arm: Fill in the WnR syndrome bit in mte_check_fail, Peter Maydell, 2020/08/28
- [PULL 09/35] hw/sd/allwinner-sdhost: Use AddressSpace for DMA transfers, Peter Maydell, 2020/08/28
- [PULL 10/35] hw/net/allwinner-sun8i-emac: Use AddressSpace for DMA transfers, Peter Maydell, 2020/08/28
- [PULL 11/35] hw/arm/xilinx_zynq: Uninline cadence_uart_create(), Peter Maydell, 2020/08/28
- [PULL 13/35] hw/qdev-clock: Uninline qdev_connect_clock_in(), Peter Maydell, 2020/08/28