diff mbox

[12/13] MC146818 RTC: add GPIO access to output IRQ

Message ID 1466169069-29375-13-git-send-email-real@ispras.ru (mailing list archive)
State New, archived
Headers show

Commit Message

Efimov Vasily June 17, 2016, 1:11 p.m. UTC
The MC146818 RTC device has output IRQ line.
Currently the corresponding field is only accessible through direct access.
Such access violates Qemu model.

The patch makes the field accessible through GPIO. It also updates the setting
of the IRQ during initialization in case of IRQ intercepting.

Signed-off-by: Efimov Vasily <real@ispras.ru>
---
 hw/timer/mc146818rtc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Paolo Bonzini June 17, 2016, 2:08 p.m. UTC | #1
On 17/06/2016 15:11, Efimov Vasily wrote:
>      qdev_init_nofail(dev);
>      if (intercept_irq) {
> -        s->irq = intercept_irq;
> +        qdev_connect_gpio_out(dev, 0, intercept_irq);
>      } else {
>          isa_init_irq(isadev, &s->irq, RTC_ISA_IRQ);
>      }

Please introduce a wrapper isa_connect_gpio_out so that you can do

    if (intercept_irq) {
        qdev_connect_gpio_out(dev, 0, intercept_irq);
    } else {
        isa_connect_gpio_out(isadev, 0, RTC_ISA_IRQ);
    }

Thanks,

Paolo
diff mbox

Patch

diff --git a/hw/timer/mc146818rtc.c b/hw/timer/mc146818rtc.c
index a11b8b4..d88fe25 100644
--- a/hw/timer/mc146818rtc.c
+++ b/hw/timer/mc146818rtc.c
@@ -908,6 +908,8 @@  static void rtc_realizefn(DeviceState *dev, Error **errp)
 
     object_property_add_alias(qdev_get_machine(), "rtc-time",
                               OBJECT(s), "date", NULL);
+
+    qdev_init_gpio_out(dev, &s->irq, 1);
 }
 
 ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
@@ -922,7 +924,7 @@  ISADevice *rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
     qdev_prop_set_int32(dev, "base_year", base_year);
     qdev_init_nofail(dev);
     if (intercept_irq) {
-        s->irq = intercept_irq;
+        qdev_connect_gpio_out(dev, 0, intercept_irq);
     } else {
         isa_init_irq(isadev, &s->irq, RTC_ISA_IRQ);
     }