|
@@ -0,0 +1,334 @@
|
|
|
+The U-Boot Driver Model Project
|
|
|
+===============================
|
|
|
+Watchdog device subsystem analysis
|
|
|
+==================================
|
|
|
+
|
|
|
+Tomas Hlavacek <tmshlvck@gmail.com>
|
|
|
+2012-03-09
|
|
|
+
|
|
|
+I) Overview
|
|
|
+-----------
|
|
|
+
|
|
|
+U-Boot currently implements an API for HW watchdog devices as explicit drivers
|
|
|
+in drivers/watchdog directory. There are also drivers for both hardware and
|
|
|
+software watchdog on particular CPUs implemented in arch/*/cpu/*/cpu.c. There
|
|
|
+are macros in include/watchdog.h that selects between SW and HW watchdog and
|
|
|
+assembly SW implementation.
|
|
|
+
|
|
|
+The current common interface comprises of one set out of these two possible
|
|
|
+variants:
|
|
|
+
|
|
|
+ 1)
|
|
|
+ void watchdog_reset(void);
|
|
|
+ int watchdog_disable(void);
|
|
|
+ int watchdog_init(void);
|
|
|
+
|
|
|
+ 2)
|
|
|
+ void hw_watchdog_reset(void);
|
|
|
+ void hw_watchdog_init(void);
|
|
|
+
|
|
|
+The watchdog implementations are also spread through board/*/*.c that in
|
|
|
+some cases. The API and semantics is in most cases same as the above
|
|
|
+mentioned common functions.
|
|
|
+
|
|
|
+
|
|
|
+II) Approach
|
|
|
+------------
|
|
|
+
|
|
|
+ 1) New API
|
|
|
+ ----------
|
|
|
+
|
|
|
+ In the UDM each watchdog driver would register itself by a function
|
|
|
+
|
|
|
+ int watchdog_device_register(struct instance *i,
|
|
|
+ const struct watchdog_device_ops *o);
|
|
|
+
|
|
|
+ The structure being defined as follows:
|
|
|
+
|
|
|
+ struct watchdog_device_ops {
|
|
|
+ int (*disable)(struct instance *i);
|
|
|
+ void (*reset)(struct instance *i);
|
|
|
+ };
|
|
|
+
|
|
|
+ The watchdog_init() function will be dissolved into probe() function.
|
|
|
+
|
|
|
+ 2) Conversion thougths
|
|
|
+ ----------------------
|
|
|
+
|
|
|
+ Conversion of watchdog implementations to a new API could be divided
|
|
|
+ to three subsections: a) HW implementations, which are mostly compliant
|
|
|
+ to the above mentioned API; b) SW implementations, which are compliant
|
|
|
+ to the above mentioned API and c) SW implementations that are not compliant
|
|
|
+ to the API and has to be rectified or partially rewritten.
|
|
|
+
|
|
|
+III) Analysis of in-tree drivers
|
|
|
+--------------------------------
|
|
|
+
|
|
|
+ 1) drivers/watchdog/at91sam9_wdt.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 2) drivers/watchdog/ftwdt010_wdt.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is ad-hoc HW watchdog. Conversion has to take into account
|
|
|
+ driver parts spread in include/faraday/*. Restructuring the driver and
|
|
|
+ code cleanup has to be considered.
|
|
|
+
|
|
|
+
|
|
|
+ 3) arch/arm/cpu/arm1136/mx31/timer.c
|
|
|
+ ------------------------------------
|
|
|
+ The driver is semi-standard ad-hoc HW watchdog. Conversion has to take
|
|
|
+ into account driver parts spread in the timer.c file.
|
|
|
+
|
|
|
+
|
|
|
+ 4) arch/arm/cpu/arm926ejs/davinci/timer.c
|
|
|
+ -----------------------------------------
|
|
|
+ The driver is ad-hoc semi-standard HW watchdog. Conversion has to take
|
|
|
+ into account driver parts spread in the timer.c file.
|
|
|
+
|
|
|
+
|
|
|
+ 5) arch/arm/cpu/armv7/omap-common/hwinit-common.c
|
|
|
+ -------------------------------------------------
|
|
|
+ The driver is non-standard ad-hoc HW watchdog. Conversion is possible
|
|
|
+ but functions has to be renamed and constants moved to another places.
|
|
|
+
|
|
|
+
|
|
|
+ 6) arch/arm/cpu/armv7/omap3/board.c
|
|
|
+ -----------------------------------
|
|
|
+ The driver is non-standard ad-hoc HW watchdog. Conversion is possible
|
|
|
+ but functions has to be renamed and constants moved to another places.
|
|
|
+
|
|
|
+
|
|
|
+ 7) arch/blackfin/cpu/watchdog.c
|
|
|
+ -------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 8) arch/m68k/cpu/mcf523x/cpu.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 9) arch/m68k/cpu/mcf52x2/cpu.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 10) arch/m68k/cpu/mcf532x/cpu.c
|
|
|
+ -------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 11) arch/m68k/cpu/mcf547x_8x/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog (there is slight naming convention
|
|
|
+ violation that has to be rectified). Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 12) arch/powerpc/cpu/74xx_7xx/cpu.c
|
|
|
+ -----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 13) arch/powerpc/cpu/mpc512x/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 14) arch/powerpc/cpu/mpc5xx/cpu.c
|
|
|
+ ---------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 15) arch/powerpc/cpu/mpc5xxx/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 16) arch/powerpc/cpu/mpc8260/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 17) arch/powerpc/cpu/mpc83xx/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 18) arch/powerpc/cpu/mpc85xx/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 19) arch/powerpc/cpu/mpc86xx/cpu.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 20) arch/powerpc/cpu/mpc8xx/cpu.c
|
|
|
+
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 21) arch/powerpc/cpu/ppc4xx/cpu.c
|
|
|
+ ---------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 22) arch/sh/cpu/sh2/watchdog.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 23) arch/sh/cpu/sh3/watchdog.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 24) arch/sh/cpu/sh4/watchdog.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 25) board/amcc/luan/luan.c
|
|
|
+ --------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 26) board/amcc/yosemite/yosemite.c
|
|
|
+ ----------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 27) board/apollon/apollon.c
|
|
|
+ ---------------------------
|
|
|
+ The driver is standard HW watchdog however the watchdog_init()
|
|
|
+ function is called in early initialization. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 28) board/bmw/m48t59y.c
|
|
|
+ -----------------------
|
|
|
+ Special watchdog driver. Dead code. To be removed.
|
|
|
+
|
|
|
+
|
|
|
+ 29) board/davedenx/qong/qong.c
|
|
|
+ ------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 30) board/dvlhost/watchdog.c
|
|
|
+ ----------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 31) board/eNET/eNET.c
|
|
|
+ ---------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 32) board/eltec/elppc/elppc.c
|
|
|
+ -----------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 33) board/enbw/enbw_cmc/enbw_cmc.c
|
|
|
+ ----------------------------------
|
|
|
+ Only function proxy call. Code cleanup needed.
|
|
|
+
|
|
|
+
|
|
|
+ 34) board/freescale/mx31pdk/mx31pdk.c
|
|
|
+ -------------------------------------
|
|
|
+ Only function proxy call. Code cleanup needed.
|
|
|
+
|
|
|
+
|
|
|
+ 35) board/gth2/gth2.c
|
|
|
+ ---------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 36) board/lwmon5/lwmon5.c
|
|
|
+ -------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 37) board/manroland/mucmc52/mucmc52.c
|
|
|
+ -------------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 38) board/manroland/uc101/uc101.c
|
|
|
+ ---------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 39) board/mousse/m48t59y.c
|
|
|
+ --------------------------
|
|
|
+ Special watchdog driver. Dead code. To be removed.
|
|
|
+
|
|
|
+
|
|
|
+ 40) board/mvblue/mvblue.c
|
|
|
+ -------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 41) board/netphone/netphone.c
|
|
|
+ -----------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 42) board/netta/netta.c
|
|
|
+ -----------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 43) board/netta2/netta2.c
|
|
|
+ -------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 44) board/omicron/calimain/calimain.c
|
|
|
+ -------------------------------------
|
|
|
+ Only function proxy call. Code cleanup needed.
|
|
|
+
|
|
|
+
|
|
|
+ 45) board/pcippc2/pcippc2.c
|
|
|
+ ---------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 46) board/pcs440ep/pcs440ep.c
|
|
|
+ -----------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 47) board/stx/stxxtc/stxxtc.c
|
|
|
+ -----------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 48) board/ti/omap2420h4/omap2420h4.c
|
|
|
+ ------------------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 49) board/ttcontrol/vision2/vision2.c
|
|
|
+ -------------------------------------
|
|
|
+ The driver is standard HW watchdog but namespace is polluted by
|
|
|
+ non-standard macros. Simple conversion is possible, code cleanup
|
|
|
+ needed.
|
|
|
+
|
|
|
+
|
|
|
+ 50) board/v38b/v38b.c
|
|
|
+ ---------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 51) board/ve8313/ve8313.c
|
|
|
+ -------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|
|
|
+
|
|
|
+
|
|
|
+ 52) board/w7o/watchdog.c
|
|
|
+ ------------------------
|
|
|
+ The driver is standard HW watchdog. Simple conversion is possible.
|