linux/drivers/watchdog/mpc8xxx_wdt.c
<<
>>
Prefs
   1/*
   2 * mpc8xxx_wdt.c - MPC8xx/MPC83xx/MPC86xx watchdog userspace interface
   3 *
   4 * Authors: Dave Updegraff <dave@cray.org>
   5 *          Kumar Gala <galak@kernel.crashing.org>
   6 *              Attribution: from 83xx_wst: Florian Schirmer <jolt@tuxbox.org>
   7 *                              ..and from sc520_wdt
   8 * Copyright (c) 2008  MontaVista Software, Inc.
   9 *                     Anton Vorontsov <avorontsov@ru.mvista.com>
  10 *
  11 * Note: it appears that you can only actually ENABLE or DISABLE the thing
  12 * once after POR. Once enabled, you cannot disable, and vice versa.
  13 *
  14 * This program is free software; you can redistribute  it and/or modify it
  15 * under  the terms of  the GNU General  Public License as published by the
  16 * Free Software Foundation;  either version 2 of the  License, or (at your
  17 * option) any later version.
  18 */
  19
  20#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  21
  22#include <linux/fs.h>
  23#include <linux/init.h>
  24#include <linux/kernel.h>
  25#include <linux/timer.h>
  26#include <linux/miscdevice.h>
  27#include <linux/of_platform.h>
  28#include <linux/module.h>
  29#include <linux/watchdog.h>
  30#include <linux/io.h>
  31#include <linux/uaccess.h>
  32#include <sysdev/fsl_soc.h>
  33
  34struct mpc8xxx_wdt {
  35        __be32 res0;
  36        __be32 swcrr; /* System watchdog control register */
  37#define SWCRR_SWTC 0xFFFF0000 /* Software Watchdog Time Count. */
  38#define SWCRR_SWEN 0x00000004 /* Watchdog Enable bit. */
  39#define SWCRR_SWRI 0x00000002 /* Software Watchdog Reset/Interrupt Select bit.*/
  40#define SWCRR_SWPR 0x00000001 /* Software Watchdog Counter Prescale bit. */
  41        __be32 swcnr; /* System watchdog count register */
  42        u8 res1[2];
  43        __be16 swsrr; /* System watchdog service register */
  44        u8 res2[0xF0];
  45};
  46
  47struct mpc8xxx_wdt_type {
  48        int prescaler;
  49        bool hw_enabled;
  50};
  51
  52static struct mpc8xxx_wdt __iomem *wd_base;
  53static int mpc8xxx_wdt_init_late(void);
  54
  55static u16 timeout = 0xffff;
  56module_param(timeout, ushort, 0);
  57MODULE_PARM_DESC(timeout,
  58        "Watchdog timeout in ticks. (0<timeout<65536, default=65535)");
  59
  60static bool reset = 1;
  61module_param(reset, bool, 0);
  62MODULE_PARM_DESC(reset,
  63        "Watchdog Interrupt/Reset Mode. 0 = interrupt, 1 = reset");
  64
  65static bool nowayout = WATCHDOG_NOWAYOUT;
  66module_param(nowayout, bool, 0);
  67MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started "
  68                 "(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
  69
  70/*
  71 * We always prescale, but if someone really doesn't want to they can set this
  72 * to 0
  73 */
  74static int prescale = 1;
  75static unsigned int timeout_sec;
  76
  77static unsigned long wdt_is_open;
  78static DEFINE_SPINLOCK(wdt_spinlock);
  79
  80static void mpc8xxx_wdt_keepalive(void)
  81{
  82        /* Ping the WDT */
  83        spin_lock(&wdt_spinlock);
  84        out_be16(&wd_base->swsrr, 0x556c);
  85        out_be16(&wd_base->swsrr, 0xaa39);
  86        spin_unlock(&wdt_spinlock);
  87}
  88
  89static void mpc8xxx_wdt_timer_ping(unsigned long arg);
  90static DEFINE_TIMER(wdt_timer, mpc8xxx_wdt_timer_ping, 0, 0);
  91
  92static void mpc8xxx_wdt_timer_ping(unsigned long arg)
  93{
  94        mpc8xxx_wdt_keepalive();
  95        /* We're pinging it twice faster than needed, just to be sure. */
  96        mod_timer(&wdt_timer, jiffies + HZ * timeout_sec / 2);
  97}
  98
  99static void mpc8xxx_wdt_pr_warn(const char *msg)
 100{
 101        pr_crit("%s, expect the %s soon!\n", msg,
 102                reset ? "reset" : "machine check exception");
 103}
 104
 105static 
  vt_pr_warn(conswassmpc8xxx_wdt_keepalive();wassm="str+code=mpc8xxx_wdt" clapre pc8xxx_wdt_keeppre code=wd_base" class="pre pc8xxx_wdt_keeppre code, ref="+code=_MODULE_STRING" cace<_MODULE_STRING  16
  
  
  vt_pr_w/
  
    17  18
  
    19
mpc8xxx_wdt_keepalive();
  10
  
    11  12  13wdt_is_open;_late" classf">w="str+code=mpc8xxx_wdt" clain cldt_is_open;in clcode=wd_base" class="in cldt_is_open;in clcode,"+code=mpc8xxx_wdt" clapre pc8xxx_wdt_keeppre code=wd_base" class="pre pc8xxx_wdt_keeppre coders/watchdog/mpc8xxx_wdt.c#L100" id="L100" clss="line"  name="L14">  14  15__be32 SWCRR_SWEN 0x00000004   16pr_crit(p="str0, ode=wdt_timer" class="srsref">wdt_is_open;
  17;EBUSY  18  19
/* We're pinginu canw!\n&q registerw  20#def1ine <120nowayout,   21
( ? (  22#inc1lude 12="coms/watchdog/mpc8xxx_wdt.c#L104" id="L104" clss="line"1 name="L23">  23#inc1lude 12an class="string">"Wa39;re pinginGood, fire up!\n&qshowaf="drivers/watchdog/mpc8xxx_wdt.c#L19" id="L19" classs="line"  name="L24">  24#inc1lude 124prescale = 1;
  25#inc1lude 125    SWCRR_SWPR 0x00000001   26#inc1lude 126reset ?   27#inc1lude 12="comSWCRR_SWRI 0x00000002   28#inc1lude 12rivers/watchdog/mpc8xxx_wdt.c#L99" id="L99" cla1ss="line"1 name="L29">  29#inc1lude 12href="+code=bool" class="sretmpimeout_sec /mp+code|=WATCHDOG_NOWAYOUsref">timeout = 0xffff;
  30#inc1lude 1lt;  31#inc1lude 13href="+code=pr_crit" class="p;__be32 _f="+code=wd_base" class="sref">wd_base->swcrr;   32#inc1lude 13="coms/watchdog/mpc8xxx_wdt.c#L104" id="L104" cl3s="line" nname="L13">  13 delunsignesyntf="+code=wdt_timer" class="sref">wdt_timer,   34stru1ct   35    1    <1 href="+code=_	wdt_is_open;nonseekef="ef">wode=wdt_timer" classin cldt_is_open;in clcode,"d_base" class="pre pc8xxx_wdt_keeppre coderrs/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla1ss="line"  name="L36">  36    1    <1 href=rs/watchdog/mpc8xxx_wdt.c#L104" id="L104" clss="line"1 name="L37">  37#def1ine <1 href=s/watchdog/mpc8xxx_wdt.c#L104" id="L104" clss="line"  name="L38">  38#def1ine <13ref="+code=Dde=mpc8xxx_wdt_init_late" classrele">wd_base->_late" classrele">w="str+code=mpc8xxx_wdt" clain cldt_is_open;in clcode=wd_base" class="in cldt_is_open;in clcode,"+code=mpc8xxx_wdt" clapre pc8xxx_wdt_keeppre code=wd_base" class="pre pc8xxx_wdt_keeppre coders/watchdog/mpc8xxx_wdt.c#L100" id="L100" clss="line"1 name="L39">  39#def1ine <1 href=rs/watchdog/mpc8xxx_wdt.c#L101" id="L101" clss="line"1 name="L40">  40#def1ine <140nowayout,   41    1    <141    mpc8xxx_wdt_timer_ping(unsigned long   42    1    <1 href="+code=uelses/watchdog/mpc8xxx_wdt.c#L91" id="L91" cla1ss="line"  name="L43">  43    1    <1 href="+code=_"+code=reset" class="srr_ping" classref">mpc8xxx_wdt_pr_warn(const char *"machine check exegister */losed  44    1    <1 href="+code=u8" class="sref"cle"r_b>pr_crit(p="str0, ode=wdt_timer" class="srsref">wdt_is_open;
  45};
<1a hre14href="+code=_	  46
  47stru1ct   48    1    i14ref="+code=Dode=arg" class="sref_late(voioctbool, 0);
(voioctb="str+code=mpc8xxx_wdt" clapre pc8xxx_wdt_keeppre code=wd_base" class="pre pc8xxx_wdt_keeppre code, href="+code=timeout_sec" clacmhw_enabled;
cmhrivers/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L49">  49    1    <149    arg)
  50};
<1a hre15drivers/watchdog/mpc8xxx_wdt.c#L101" id="L101" clss="line"1 name="L51">  51
 ="dp+code=W(ode=mpc8xxx_wdt_pr_w cace<_MODULE_STRINGarg)
  52stat1ic st15href="+code=ude=timeout_sec" cla cace<_MODULE_STRING ="dp+codrs/watchdog/mpc8xxx_wdt.c#L103" id="L103" clss="line"  name="L53">  53stat1ic in15href="+code=_+code=Dref="++code=mpc8xxx_wdt" cla_wdt.c#L_infodt_is_open;
wdt.c#L_infoode=swcnr" class="sridespon>
  
    54
__MODULE_STRING_rivers/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L55">  55stat1ic   56"machine check exPC86xxxa href="+code=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L57">  57  58    1    <15rivers/watchdog/mpc8xxx_wdt.c#L99" id="L99" cla1ss="line"1 name="L59">  59
;
cmhrive)Wrs/watchdog/mpc8xxx_wdt.c#L101" id="L101" clss="line"1 name="L60">  60stat1ic wWATCHDOG_NOWAYOUWDIOC_GETSUPPORWATCHDOG_NOWAYOUTDIOC_GETSUPPORW  61
  
  
  
    62wWATCHDOG_NOWAYOUWDIOC_GETSTATUSATCHDOG_NOWAYOUTDIOC_GETSTATUS  63    1    <1pan class="strc">wWATCHDOG_NOWAYOUWDIOC_GETBOOTSTATUSATCHDOG_NOWAYOUTDIOC_GETBOOTSTATUS  64
  65stat1ic wWATCHDOG_NOWAYOUWDIOC_KEEPALIVEATCHDOG_NOWAYOUTDIOC_KEEPALIVE  16mpc8xxx_wdt_keepalive();
  67  68    1     1       wWATCHDOG_NOWAYOUWDIOC_GETf="+">WATCHDOG_NOWAYOUTDIOC_GETf="+">W  69
tf">timeout_sec / 2);
  70  71;ENOTTY+codrs/watchdog/mpc8xxx_wdt.c#L103" id="L103" clss="line"1 name="L72">  72  73  74stat1ic in17rivers/watchdog/mpc8xxx_wdt.c#L105" id="L105" clss="line"1 name="L75">  75stat1ic un1igned int );
jiffies + );
jode=swcnr" class="sralive();fopjiffies + ();fopj+code=Wrs/watchdog/mpc8xxx_wdt.c#L101" id="L101" clss="line"1 name="L76">  76
( ? (  77stat1ic un177     ?   78stat1ic   79
  80stat1ic vo180    wdt_is_open;f="drive wdt_is_open;_late" classf">w="st=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L81">  81{
wd_base->rele">w="st href="+=WATCHDOG_NOWAYOUarn(consrele">wd_base->_late" classrele">w="st=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L82">  82    1    <1pan clers/watchdog/mpc8xxx_wdt.c#L51" id="L51" cla1ss="line"1 name="L83">  83    1    <18rivers/watchdog/mpc8xxx_wdt.c#L34" id="L34" cla1ss="line"1 name="L84">  84    1    <18->_gt;
  85    1    <1 href="+code=o.r_crit" class="minomod_timer(&aminomref="+=WATCHDOG_NOWAYOUT" class=MINOSWCRR_SWPR 0T" class=MINOS="st=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L86">  86    1    <186    "machine check ex_wdt.c#La href="+code=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line"1 name="L87">  87}
();fopjiffies + ();fopj+cod=s/watchdog/mpc8xxx_wdt.c#L102" id="L102" clss="line" nname="L18">  18  89stat1ic vo18rivers/watchdog/mpc8xxx_wdt.c#L80" id="L80" cla1ss="line"1 name="L90">  90stat1ic ;
of_
  91
pr_crit(pode=swcnr" class="sralive();probwd_base->_late" classprobw="str+code=mpc8xxx_wdt" clat;
->t;
  92stat1ic vo1d   93{
  94    1    <1 href="+code=mref="++code=mpc8xxx_wdt" claof_
;
of_
->_wdt.ode=rs/watchdog/mpc8xxx_wdt.c#L95" id="L95" cla1ss="line"1 name="L95">  95    1    <1pan class="com+code=mpc8xxx_wdt" cla
;
  96    1    <1 href="+code=m+code=mpc8xxx_wdt_type" class="sref">mpc8xxx_wdt_type {
mpc8xxx_wdt_typea href="drivrs/watchdog/mpc8xxx_wdt.c#L95" id="L95" cla1ss="line"1 name="L97">  97}
  98
bool hw_enabled;
href="drivers/watchdog/mpc8xxx_wdt.c#L50" id="L50" cla1ss="line"1 name="L99">  99stat1ic vo19rivers/watchdog/mpc8xxx_wdt.c#L20" id="L20" classs="line" nname="L20">  20#definc ->_wdt.ode=e=WATCHDOG_NOWAYOUofs_wdt._
->ofs_wdt._
->of
 101   2    <2 href="+code=pdf w!dt_timer" class"wdt.d_base->_wdt.ode=rs/watchdog/mpc8xxx_wdt.c#L93" id="L93" cla2ass="line2 name="L102"> 102   2     2      ;EINVALrivers/watchdog/mpc8xxx_wdt.c#L50" id="L50" cla2ass="line2 name="L103"> 103}
<2 href20href="+code=spin_lock" class"sref">mpc8xxx_wdt_typea href="driv+=WATCHDOG_NOWAYOUawdt.d_base->_wdt.ode=ode=swsrr" class="sr
atad_base->
atarivers/watchdog/mpc8xxx_wdt.c#L50" id="L50" cla2as="line"  name="L104"> 104
 105sta2ic  +   16;EINVALrivers/watchdog/mpc8xxx_wdt.c#L50" id="L50" cla2as="line" 0name="L17">  17  18wd_base-> np+codrivers/watchdog/mpc8xxx_wdt.c#L91" id="L91" cla2as="line"20name="L19">  19
wd_base->  10;ENOMEMrivers/watchdog/mpc8xxx_wdt.c#L50" id="L50" cla2ss="line"2nname="L11">  11  12hw_enabled;
href="drivee=WATCHDOG_NOWAYOUina h>__be32 _="strode=wd_base" class="sref">wd_base->swcrr; SWCRR_SWEN 0x00000004   13hw_enabled;
href="driveeode=wode=wWATCHDOG_NOWAYOU"sref">mpc8xxx_wdt_typea href="drivode=swsrr" class="srs="sref">hw_enabled;
  14;tr_info="strAng">"machine check excould nce stahref="d;tims Counte\
  15reset ?   16 srr_unmap  17  18  19
/* We're pinginCalcu  20#def2ine <220prescale = 1;
  21
timeout_sec / 2);
timeout = 0xffff;
mpc8xxx_wdt_typea href="drivode=swsrr" class="sr="sref">prescaler;
  22#inc2lude 22href="+code=uelses/watchdog/mpc8xxx_wdt.c#L91" id="L91" cla2ss="line"2 name="L23">  23#inc2lude 22href="+code=_"+code=reset" class="srss="sref">timeout_sec / 2);
timeout = 0xffff;
  24#inc2lude 22rivers/watchdog/mpc8xxx_wdt.c#L105" id="L105" c2ss="line"2 name="L25">  25#inc2lude 225    #ifdefswcnr" class="sr>( ? (  26#inc2lude 22href="+code=mod_timer" classr>reset ? (voi"sref">mpc8xxx_wdt_init_late(void);
  27#inc2lude 22="com ?   28#inc2lude 22       srr_unmap  29#inc2lude 22href=#endifs/watchdog/mpc8xxx_wdt.c#L95" id="L95" cla2ss="line"2 name="L30">  30#inc2lude 2lt;  31#inc2lude 23href="+code=pr_crit" class="tr_infodt_is_open;tr_info="strAng">"machine check ex hre/mpc8x for PC86xxx id);ialized. mss=:uot;  32#inc2lude 23     reset ? "reset" : "machine check exeset"a href="+code=msg" class="srefsref">timeout, timeout_sec / 2);
  13  34stru2ct /*
  35    2    <2 href=ment"> */
  36    2    <2 href=ment"> */



<+crivers/watchdog/mpc8xxx_wdt.c#L71" id="L71" cla2ss="line"2 name="L37">  37#def2ine <2 href=ment"> */
  38#def2ine <23ref="ment"> */
  39#def2ine <239    hw_enabled;
href="drivers/watchdog/mpc8xxx_wdt.c#L100" id="L100" c2ss="line"2 name="L40">  40#def2ine <24="com"+code=r"+code=rpc8xxx_wdt_type" class="sref="sref">mpc8xxx_wdt_timer_ping(unsigned long   41    2    <241      42    2    <24ode=MODULE_PARM_DESCsrr_unmapimeout_sec srr_unmap  43    2    <24href="+code=spin_lock" classiounmapimeout_sec iounmap="strATCHDOG_NOWAYOUsref">wd_base->  44    2    <2 href="+code=u8" class="sref"sref">wd_base->  45};
<2a hre24href="+code=_	reset ?   46
  47stru2ct   48    2    i24ref="+code=Dde=mpc8xxx_wdt_init__
pr_crit(pode=nowayout" class=_late" classremo>mpc8xxx_wdt_keepalive();remo>m="str+code=mpc8xxx_wdt" clat;
->t;
  49    2    <24href=rs/watchdog/mpc8xxx_wdt.c#L101" id="L101" c2ss="line"2 name="L50">  50};
<2a hre250    mpc8xxx_wdt_pr_warn(const char *"machine check exegister *remo>md  51
wdt_timer,   52stat2ic st25href="+code=u8" class="sref"_gt;_
();_gt;
->_late" class_gt;
  53stat2ic in25href="+code=spin_lock" classiounmapimeout_sec iounmap="strATCHDOG_NOWAYOUsref">wd_base->  54
  55stat2ic   56  57  58    2    <25ref="+code=Dref="++code=mpc8xxx_wdt" claof_
;
of_
  59
  60stat2ic "machine check exc1" 3d="L10a href="+code=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L61">  61mpc8xxx_wdt_type {
  62prescaler;
  63    2    <26href="+code=_"+code=r}=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L64">  64
  65stat2ic   16"machine check exfsl,01" 610-L10a href="+code=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L67">  67mpc8xxx_wdt_type {
  68    2     26      prescaler;
  69
hw_enabled;
  70  71  72  73"machine check exfsl,01" 23-L10a href="+code=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L74">  74stat2ic in274    mpc8xxx_wdt_type {
  75stat2ic un27href="+code=o"+code=r"+code=r.r_crit" class="="sref">prescaler;
  76
  77stat2ic un277      78stat2ic   79
  80stat2ic vo280    wcnr" class="sr>( ? (  81{
  82    2    <2pan clef="+co+code=mpc8xxx_wdt" clat;
->t;
  83    2    <28href="+code=_.r_crit" class="="obwd_base->probw="stf="+code=r=WATCHDOG_NOWAYOU_late(voprobwd_base->_late" classprobw="st=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L84">  84    2    <284ref="+code=_.r_crit" class="remo>mpc8xxx_wdt_keepremo>m="st="+code=r=WATCHDOG_NOWAYOU__
p_pimeout_sec __
p_p="strATCHDOG_NOWAYOU_late" classremo>mpc8xxx_wdt_keepalive();remo>m="st)=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L85">  85    2    <2 href="+code=o.r_crit" class="
mpc8xd_base->
mpc8xrive =Wrs/watchdog/mpc8xxx_wdt.c#L101" id="L101" c2ss="line"2 name="L86">  86    2    <286    "machine check exc1" xd="L10a href="+code=s/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla2ss="line"2 name="L87">  87}
  18  89stat2ic vo289      90stat2ic   91
  92stat2ic vo2d /*
  93{
 */
);
;timtwoo+ceps: art._id);ef=l probwsn>
  94    2    <2 href=ment"> */
!d lospan>
  95    2    <29href=ment"> */
p), and 
  96    2    <29href=ment"> */
  97}
mpc8xxx_wdt_init_late(void);
  98
  99stat2ic vo299    reset ?   20#def3nc  101   3    <3 href="+code=pdf w!dt_timer" classsref">wd_base-> 102   3     3      ->ENODEVcoders/watchdog/mpc8xxx_wdt.c#L95" id="L95" cla3s3s="line3 name="L93">  93{
 104
reset ? ();_gt;
->_late" class_gt;
 105sta3ic reset ?   16swcrr; s*"machine check excannce regi, ju _gt;
s=uot;  17 0T" class=MINOS="st=u8" class="sref"r>reset ?   98
  19
  10  11  12  13->_mpc8xxx_wdt_init_late(void);
  14  15  16pr_crit(pode=swcnr" class="sralive();id);d_base->_live();id);ref="ode=rs/watchdog/mpc8xxx_wdt.c#L93" id="L93" cla3ss="line"3 name="L17">  17  18();
mpc8xd_base->alive();
mpc8xriveers/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla3ss="line"3 name="L19">  19
  20#def3ine <320    wcnr" class="srart._id);ef=ld_base->art._id);ef=l="strATCHDOG_NOWAYOU_late" classi"srd_base->_live();id);ref=ers/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla3ss="line"3 name="L21">  21
  22#inc3lude 32an clef="+coode=mpc8xxx_wdt_pr_w cex>pr_crit(pode=nowayout" class=_late" classex>pr_crit(pref="ode=rs/watchdog/mpc8xxx_wdt.c#L93" id="L93" cla3ss="line"3 name="L23">  23#inc3lude 32href=rs/watchdog/mpc8xxx_wdt.c#L101" id="L101" c3ss="line"3 name="L24">  24#inc3lude 32href="+code=u8" class="sref"t;
();
mpc8xd_base->alive();
mpc8xriveers/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla3ss="line"3 name="L25">  25#inc3lude 325    rs/watchdog/mpc8xxx_wdt.c#L104" id="L104" c3ss="line"3 name="L26">  26#inc3lude 32href=dt_timer" classapr_crit(p="strATCHDOG_NOWAYOU_late" classspa_late" classex>pref="ode=rs/watchdogers/watchdog/mpc8xxx_wdt.c#L90" id="L90" cla3sa3n cla3s27">  27#inc2lude 223lude 32href=s/watchdog/mpc8xxx_wdt.c#L104" id="L104" c3ss="line"3 name="L28">  28#inc3lude 32     wcnr" class="sr>( 0>("machine check exDave Updegraff, Kumar Gala  29#inc3lude 32href=wcnr" class="sr>( 0>("machine check exDmpc8x for 7gister *ef="+;timPC86xx/PC863xx/PC866xx   30#inc3lude 33="com"+code=r"+code=r  WAng">"machine check exuProcessors  31#inc3lude 33href=wcnr" class="sr>( ? ("machine check exGPL  32#inc3lude 33ode=MODULE_PARM_DESC>(->>( 0T" class=MINOS="sters/watchdog/mpc8xxx_wdt.c#L103" id="L103" c3ss="line"3nname="L13">  13


The original LXRms Counte byn> LXRman> unity+cod,n> is experi ux.no">lxu@> ux.no+cod.
lxu.> ux.no kindly ho, jd;byn/watchdoghttp://www.redpill-> pro.no">Redpill L pro AS+cod,nprovid"+;of L uxDref=ultspanand opera>); j sera hrs sinceo19r5.