int reg = short_reset ? 5 : 1;
        int bit = short_reset ? PHY_BUS_SHORT_RESET : PHY_BUS_RESET;
 
+       if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS))
+               fw_notice(card, "initiating %s bus reset\n",
+                         short_reset ? "short" : "long");
+
        return card->driver->update_phy_reg(card, reg, 0, bit);
 }
 
 void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset)
 {
+       if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS))
+               fw_notice(card, "scheduling %s bus reset\n",
+                         short_reset ? "short" : "long");
+
        /* We don't try hard to sort out requests of long vs. short resets. */
        card->br_short = short_reset;
 
        /* Delay for 2s after last reset per IEEE 1394 clause 8.2.1. */
        if (card->reset_jiffies != 0 &&
            time_before64(get_jiffies_64(), card->reset_jiffies + 2 * HZ)) {
+               if (unlikely(fw_core_param_debug & FW_CORE_PARAM_DEBUG_BUSRESETS))
+                       fw_notice(card, "delaying bus reset\n");
                if (!queue_delayed_work(fw_workqueue, &card->br_work, 2 * HZ))
                        fw_card_put(card);
                return;
 
        idr_destroy(&fw_device_idr);
 }
 
+int fw_core_param_debug;
+module_param_named(debug, fw_core_param_debug, int, 0644);
+MODULE_PARM_DESC(debug, "Verbose logging (default = 0"
+       ", bus resets = "       __stringify(FW_CORE_PARAM_DEBUG_BUSRESETS)
+       ")");
+
+
 module_init(fw_core_init);
 module_exit(fw_core_cleanup);
 
 /* OHCI-1394's default upper bound for physical DMA: 4 GB */
 #define FW_MAX_PHYSICAL_RANGE          (1ULL << 32)
 
+#define FW_CORE_PARAM_DEBUG_BUSRESETS  1
+
+extern int fw_core_param_debug;
+
 void fw_core_handle_request(struct fw_card *card, struct fw_packet *request);
 void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet);
 int fw_get_response_length(struct fw_request *request);