int index)
 {
        struct platform_device *pdev;
-       int irq = map_gt_gsi(wd->timer_interrupt, wd->timer_flags);
+       int irq;
 
        /*
         * According to SBSA specification the size of refresh and control
        struct resource res[] = {
                DEFINE_RES_MEM(wd->control_frame_address, SZ_4K),
                DEFINE_RES_MEM(wd->refresh_frame_address, SZ_4K),
-               DEFINE_RES_IRQ(irq),
+               {},
        };
        int nr_res = ARRAY_SIZE(res);
 
 
        if (!(wd->refresh_frame_address && wd->control_frame_address)) {
                pr_err(FW_BUG "failed to get the Watchdog base address.\n");
-               acpi_unregister_gsi(wd->timer_interrupt);
                return -EINVAL;
        }
 
+       irq = map_gt_gsi(wd->timer_interrupt, wd->timer_flags);
+       res[2] = (struct resource)DEFINE_RES_IRQ(irq);
        if (irq <= 0) {
                pr_warn("failed to map the Watchdog interrupt.\n");
                nr_res--;
         */
        pdev = platform_device_register_simple("sbsa-gwdt", index, res, nr_res);
        if (IS_ERR(pdev)) {
-               acpi_unregister_gsi(wd->timer_interrupt);
+               if (irq > 0)
+                       acpi_unregister_gsi(wd->timer_interrupt);
                return PTR_ERR(pdev);
        }