qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 3/4] hw/arm: Connect PWM fans in NPCM7XX boards


From: Peter Maydell
Subject: Re: [PATCH 3/4] hw/arm: Connect PWM fans in NPCM7XX boards
Date: Thu, 11 Mar 2021 12:08:43 +0000

On Fri, 5 Mar 2021 at 18:40, Hao Wu <wuhaotsh@google.com> wrote:
>
> This patch adds fan_splitters (split IRQs) in NPCM7XX boards. Each fan
> splitter corresponds to 1 PWM output and can connect to multiple fan
> inputs (MFT devices).
> In NPCM7XX boards(NPCM750 EVB and Quanta GSJ boards), we initializes
> these splitters and connect them to their corresponding modules
> according their specific device trees.
>
> Reviewed-by: Doug Evans <dje@google.com>
> Reviewed-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Hao Wu <wuhaotsh@google.com>
> ---
>  hw/arm/npcm7xx_boards.c  | 99 ++++++++++++++++++++++++++++++++++++++++
>  include/hw/arm/npcm7xx.h | 11 ++++-
>  2 files changed, 109 insertions(+), 1 deletion(-)
>
> diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c
> index fbf6ce8e02..e22fe4bf8f 100644
> --- a/hw/arm/npcm7xx_boards.c
> +++ b/hw/arm/npcm7xx_boards.c
> @@ -21,6 +21,7 @@
>  #include "hw/core/cpu.h"
>  #include "hw/i2c/smbus_eeprom.h"
>  #include "hw/loader.h"
> +#include "hw/qdev-core.h"
>  #include "hw/qdev-properties.h"
>  #include "qapi/error.h"
>  #include "qemu-common.h"
> @@ -116,6 +117,64 @@ static void at24c_eeprom_init(NPCM7xxState *soc, int 
> bus, uint8_t addr,
>      i2c_slave_realize_and_unref(i2c_dev, i2c_bus, &error_abort);
>  }
>
> +static void npcm7xx_init_pwm_splitter(NPCM7xxMachine *machine,
> +                                      NPCM7xxState *soc, const int 
> *fan_counts)
> +{
> +    SplitIRQ *splitters = machine->fan_splitter;
> +
> +    /*
> +     * PWM 0~3 belong to module 0 output 0~3.
> +     * PWM 4~7 belong to module 1 output 0~3.
> +     */
> +    for (int i = 0; i < NPCM7XX_NR_PWM_MODULES; ++i) {
> +        for (int j = 0; j < NPCM7XX_PWM_PER_MODULE; ++j) {
> +            int splitter_no = i * NPCM7XX_PWM_PER_MODULE + j;
> +            DeviceState *splitter;
> +
> +            if (fan_counts[splitter_no] < 1) {
> +                continue;
> +            }
> +            object_initialize_child(OBJECT(machine), "fan-splitter[*]",
> +                                    &splitters[splitter_no], TYPE_SPLIT_IRQ);
> +            splitter = DEVICE(&splitters[splitter_no]);
> +            qdev_prop_set_uint16(splitter, "num-lines",
> +                                 fan_counts[splitter_no]);
> +            qdev_realize(splitter, NULL, &error_abort);
> +            qdev_connect_gpio_out_named(DEVICE(&soc->pwm[i]), 
> "duty-gpio-out",
> +                                        j, qdev_get_gpio_in(splitter, 0));

This will rather pointlessly create a splitter with a single input
if fan_counts[n] is 1, but conveniently you never actually do
that, so it's not a big deal.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]