mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-17 02:08:38 +00:00
330 lines
9.3 KiB
Text
330 lines
9.3 KiB
Text
|
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.
|
||
|
|
||
|
|
||
|
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.
|