#17839: Reboot command causes sometimes hanging router with TL-WDR3600 (HW V1.5)
and TL-WDR4300 (HW V1.7)
--------------------------+-----------------------------------
  Reporter:  michaeluray  |      Owner:  developers
      Type:  defect       |     Status:  new
  Priority:  high         |  Milestone:  Barrier Breaker 14.07
 Component:  base system  |    Version:  Barrier Breaker 14.07
Resolution:               |   Keywords:  reboot
--------------------------+-----------------------------------

Comment (by michaeluray):

 I did a couple test and at the end I just added an endless loop when the
 FULL_CHIP_RESET bit gets set.

 {{{
 #!c
 if (mask == AR71XX_RESET_FULL_CHIP)
         for (;;);
 }}}

 The reboot works well with this solution.

 File: build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-
 ar71xx_generic/linux-3.10.49/arch/mips/ath79/common.c
 {{{
 #!c
 void ath79_device_reset_set(u32 mask)
 {
         unsigned long flags;
         u32 reg;
         u32 t;

         if (soc_is_ar71xx())
                 reg = AR71XX_RESET_REG_RESET_MODULE;
         else if (soc_is_ar724x())
                 reg = AR724X_RESET_REG_RESET_MODULE;
         else if (soc_is_ar913x())
                 reg = AR913X_RESET_REG_RESET_MODULE;
         else if (soc_is_ar933x())
                 reg = AR933X_RESET_REG_RESET_MODULE;
         else if (soc_is_ar934x())
                 reg = AR934X_RESET_REG_RESET_MODULE;
         else if (soc_is_qca953x())
                 reg = QCA953X_RESET_REG_RESET_MODULE;
         else if (soc_is_qca955x())
                 reg = QCA955X_RESET_REG_RESET_MODULE;
         else
                 panic("Reset register not defined for this SOC");

         spin_lock_irqsave(&ath79_device_reset_lock, flags);
         t = ath79_reset_rr(reg);
         ath79_reset_wr(reg, t | mask);
         if (mask == AR71XX_RESET_FULL_CHIP)
                 for (;;);
         spin_unlock_irqrestore(&ath79_device_reset_lock, flags);
 }
 }}}

 I uploaded the compiled BB version with the reset fix to our web server.
 If someone wants to test this with his device, then you can download it by
 the following links:

 http://www.ctb.co.at/download/OpenWRT/14.07-rf/ar71xx/generic/openwrt-
 ar71xx-generic-tl-wdr3600-v1-squashfs-factory.bin

 http://www.ctb.co.at/download/OpenWRT/14.07-rf/ar71xx/generic/openwrt-
 ar71xx-generic-tl-wdr3600-v1-squashfs-sysupgrade.bin

 http://www.ctb.co.at/download/OpenWRT/14.07-rf/ar71xx/generic/openwrt-
 ar71xx-generic-tl-wdr4300-v1-squashfs-factory.bin

 http://www.ctb.co.at/download/OpenWRT/14.07-rf/ar71xx/generic/openwrt-
 ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin

 What are the next steps here and what is the right way to get this fix
 into the OpenWRT system or into the Linux kernel?

--
Ticket URL: <https://dev.openwrt.org/ticket/17839#comment:58>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets

Reply via email to