diff mbox series

[08/11] hw/arm/virt: Make PL061 GPIO lines pulled low, not high

Message ID 20210702104018.19881-9-peter.maydell@linaro.org
State Superseded
Headers show
Series hw/arm: Make virt board secure powerdown/reset work | expand

Commit Message

Peter Maydell July 2, 2021, 10:40 a.m. UTC
For the virt board we have two PL061 devices -- one for NonSecure which
is inputs only, and one for Secure which is outputs only. For the former,
we don't care whether its outputs are pulled low or high when the line is
configured as an input, because we don't connect them. For the latter,
we do care, because we wire the lines up to the gpio-pwr device, which
assumes that level 1 means "do the action" and 1 means "do nothing".
For consistency in case we add more outputs in future, configure both
PL061s to pull GPIO lines down to 0.

Reported-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 hw/arm/virt.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
2.20.1

Comments

Richard Henderson July 7, 2021, 1:32 a.m. UTC | #1
On 7/2/21 3:40 AM, Peter Maydell wrote:
> For the virt board we have two PL061 devices -- one for NonSecure which

> is inputs only, and one for Secure which is outputs only. For the former,

> we don't care whether its outputs are pulled low or high when the line is

> configured as an input, because we don't connect them. For the latter,

> we do care, because we wire the lines up to the gpio-pwr device, which

> assumes that level 1 means "do the action" and 1 means "do nothing".

> For consistency in case we add more outputs in future, configure both

> PL061s to pull GPIO lines down to 0.

> 

> Reported-by: Maxim Uvarov<maxim.uvarov@linaro.org>

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

> ---

>   hw/arm/virt.c | 3 +++

>   1 file changed, 3 insertions(+)


Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~
diff mbox series

Patch

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 4b96f060140..93ab9d21ea0 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -895,6 +895,9 @@  static void create_gpio_devices(const VirtMachineState *vms, int gpio,
     MachineState *ms = MACHINE(vms);
 
     pl061_dev = qdev_new("pl061");
+    /* Pull lines down to 0 if not driven by the PL061 */
+    qdev_prop_set_uint32(pl061_dev, "pullups", 0);
+    qdev_prop_set_uint32(pl061_dev, "pulldowns", 0xff);
     s = SYS_BUS_DEVICE(pl061_dev);
     sysbus_realize_and_unref(s, &error_fatal);
     memory_region_add_subregion(mem, base, sysbus_mmio_get_region(s, 0));