After my investigations, I figured out that linux kernel does not disable the watchdog on boot, but it actually uses a timer to reset the watchdog. and when the kernel oops or panics it's still reseting the watchdog so the system won't restart by watchdog timer overflow.
Following this answer for this question from man proc:
/proc/sys/kernel/panic
This file gives read/write access to the kernel variable panic_timeout. If this is zero, the kernel will loop on a panic; if nonzero it indicates that the kernel should autoreboot after this number of seconds
It is obvious that a nonzero value should be passed to this file. According to this answer, to pass a value to /proc/sys/kernel/panic we should modify /etc/sysctl.conf and add parameter kernel.panic = 3 for 3 seconds of wait before restarting after a kernel panic occurred.
But that did not fix my problem. By investigating other panic related issued I found from man proc:
/proc/sys/kernel/panic_on_oops (since Linux 2.5.68)
This file controls the kernel's behavior when an oops or BUG is encountered. If this file contains 0, then the system tries to continue operation. If it con-
tains 1, then the system delays a few seconds (to give klogd time to record the oops output) and then panics. If the /proc/sys/kernel/panic file is also
nonzero then the machine will be rebooted.
And my problem was not a panic, but a kernel oops! So by adding kernel.panic_on_oops = 1 to /etc/sysctl.conf, /proc/sys/kernel/panic_on_oops flag is changed to 1. and now whenever the kernel stops, it restarts after 3 seconds.