OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/devs/watchdog/arm
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/aeb/v2_0/cdl/watchdog_aeb.cdl
0,0 → 1,102
# ====================================================================
#
# watchdog_aeb.cdl
#
# eCos watchdog for ARM/AEB driver configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jskov
# Contributors: jskov
# Date: 2000-05-31
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVICES_WATCHDOG_ARM_AEB {
parent CYGPKG_IO_WATCHDOG
active_if CYGPKG_IO_WATCHDOG
display "AEB watchdog driver"
requires CYGPKG_HAL_ARM_AEB
requires CYGPKG_KERNEL
hardware
compile watchdog_aeb.cxx
implements CYGINT_WATCHDOG_HW_IMPLEMENTATIONS
implements CYGINT_WATCHDOG_RESETS_ON_TIMEOUT
active_if CYGIMP_WATCHDOG_HARDWARE
 
cdl_option CYGIMP_WATCHDOG_HARDWARE {
parent CYGPKG_IO_WATCHDOG_IMPLEMENTATION
display "Hardware watchdog"
default_value 1
implements CYGINT_WATCHDOG_IMPLEMENTATIONS
}
 
cdl_component CYGPKG_DEVICES_WATCHDOG_ARM_AEB_OPTIONS {
display "AEB watchdog build options"
flavor none
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AEB_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AEB_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are removed from
the set of global flags if present."
}
 
}
}
/aeb/v2_0/src/watchdog_aeb.cxx
0,0 → 1,161
//==========================================================================
//
// devs/watchdog/arm/aeb/watchdog_aeb.cxx
//
// Watchdog implementation for ARM AEB1 board (SHARP LH77790 CPU)
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors: jskov
// Date: 1999-09-01
// Purpose: Watchdog class implementation
// Description: Contains an implementation of the Watchdog class for use
// with the SHARP LH77790 watchdog timer.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/system.h> // system configuration file
#include <pkgconf/watchdog.h> // configuration for this package
#include <pkgconf/kernel.h> // kernel config
 
#include <cyg/infra/cyg_trac.h> // tracing macros
#include <cyg/kernel/instrmnt.h> // instrumentation
 
#include <cyg/hal/hal_io.h> // IO register access
 
#include <cyg/io/watchdog.hxx> // watchdog API
 
// -------------------------------------------------------------------------
// Register definitions
#define CYGARC_REG_WATCHDOG_BASE 0xFFFFAC00
#define CYGARC_REG_WATCHDOG_WDCTLR (CYGARC_REG_WATCHDOG_BASE+0x30)
#define CYGARC_REG_WATCHDOG_WDCNTR (CYGARC_REG_WATCHDOG_BASE+0x34)
 
// Control register bits
#define CYGARC_REG_WATCHDOG_WDCTLR_EN 0x01 // enable
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_NMF 0x00 // non-maskable fiq
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_ER 0x04 // external reset
#define CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR 0x06 // system reset
#define CYGARC_REG_WATCHDOG_WDCTLR_FRZ 0x08 // lock enable bit
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_MASK 0x70 // time out period
 
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17 0x00 // 2^17
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_17_P 5242880 // = 5.2ms
 
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25 0x40 // 2^25
#define CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P 1342177300 // = 1.3421773s
 
 
// -------------------------------------------------------------------------
// Constructor
 
void
Cyg_Watchdog::init_hw(void)
{
CYG_REPORT_FUNCTION();
// No HW init.
 
resolution = CYGARC_REG_WATCHDOG_WDCTLR_TOP_25_P;
 
CYG_REPORT_RETURN();
}
 
// -------------------------------------------------------------------------
// Start the watchdog running.
 
void
Cyg_Watchdog::start()
{
CYG_REPORT_FUNCTION();
 
// Clear the watchdog counter.
HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
 
// Enable the watchdog (and lock/FRZ it).
HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR,
(CYGARC_REG_WATCHDOG_WDCTLR_TOP_25
| CYGARC_REG_WATCHDOG_WDCTLR_FRZ
| CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR
| CYGARC_REG_WATCHDOG_WDCTLR_EN));
CYG_REPORT_RETURN();
}
 
// -------------------------------------------------------------------------
// Reset watchdog timer. This needs to be called regularly to prevent
// the watchdog firing.
 
void
Cyg_Watchdog::reset()
{
CYG_REPORT_FUNCTION();
 
HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
CYG_REPORT_RETURN();
}
 
#if 0
// -------------------------------------------------------------------------
// Action which will do a board reset. Application can register this
// action to get a board reset on watchdog timeout.
 
void
Cyg_Watchdog::reset_action(void)
{
CYG_REPORT_FUNCTION();
// Clear the watchdog counter.
HAL_WRITE_UINT32(CYGARC_REG_WATCHDOG_WDCNTR, 0);
 
// Enable the watchdog with the smallest timeout.
HAL_WRITE_UINT8(CYGARC_REG_WATCHDOG_WDCTLR,
(CYGARC_REG_WATCHDOG_WDCTLR_TOP_17
| CYGARC_REG_WATCHDOG_WDCTLR_FRZ
| CYGARC_REG_WATCHDOG_WDCTLR_RSP_SR
| CYGARC_REG_WATCHDOG_WDCTLR_EN));
 
CYG_REPORT_RETURN();
}
#endif
 
// -------------------------------------------------------------------------
// EOF watchdog_aeb.cxx
/aeb/v2_0/ChangeLog
0,0 → 1,44
2000-05-31 Jesper Skov <jskov@redhat.com>
 
* cdl/watchdog_aeb.cdl:
* src/watchdog_aeb.cxx:
Driver moved to devs/watchdog/arm/aeb. Stripped out
unrelated ChangeLog entries.
 
1999-09-07 Jesper Skov <jskov@cygnus.co.uk>
 
* src/aeb1.cxx: [added]
Added watchdog driver for AEB-1 board.
 
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
/ebsa285/v2_0/cdl/watchdog_ebsa285.cdl
0,0 → 1,102
# ====================================================================
#
# watchdog_ebsa285.cdl
#
# eCos watchdog for ARM/EBSA285 driver configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jskov
# Contributors: jskov
# Date: 2000-05-31
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285 {
parent CYGPKG_IO_WATCHDOG
active_if CYGPKG_IO_WATCHDOG
display "EBSA285 watchdog driver"
requires CYGPKG_HAL_ARM_EBSA285
requires CYGPKG_KERNEL
hardware
compile watchdog_ebsa285.cxx
implements CYGINT_WATCHDOG_HW_IMPLEMENTATIONS
implements CYGINT_WATCHDOG_RESETS_ON_TIMEOUT
active_if CYGIMP_WATCHDOG_HARDWARE
 
cdl_option CYGIMP_WATCHDOG_HARDWARE {
parent CYGPKG_IO_WATCHDOG_IMPLEMENTATION
display "Hardware watchdog"
default_value 1
implements CYGINT_WATCHDOG_IMPLEMENTATIONS
}
 
cdl_component CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285_OPTIONS {
display "EBSA285 watchdog build options"
flavor none
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_EBSA285_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are removed from
the set of global flags if present."
}
 
}
}
/ebsa285/v2_0/src/watchdog_ebsa285.cxx
0,0 → 1,151
//==========================================================================
//
// watchdog/ebsa285.cxx
//
// Watchdog implementation for Intel EBSA-285 StronARM board
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov (based on the MN10300 watchdog code by nickg)
// Contributors: jskov, nickg
// Date: 1999-08-26
// Purpose: Watchdog class implementation
// Description: Contains an implementation of the Watchdog class for use
// with the EBSA285/21285 hardware watchdog timer.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/system.h> // system configuration file
#include <pkgconf/watchdog.h> // configuration for this package
#include <pkgconf/kernel.h> // kernel config
 
#include <cyg/infra/cyg_trac.h> // tracing macros
#include <cyg/kernel/instrmnt.h> // instrumentation
 
#include <cyg/hal/hal_io.h> // IO register access
 
#include <cyg/io/watchdog.hxx> // watchdog API
 
// -------------------------------------------------------------------------
// 21285 watchdog works by letting timer4 run; if it ever underflows,
// it resets the system.
// Timer 4 is set to run at fclk_in/16 = 50MHz/16 = 3.125MHz
// The timer register is 24 bits, so it can easily hold a value that
// gives a 1s timeout.
#define WATCHDOG_TIMER_TICKS 3125000
#define WATCHDOG_RESOLUTION (1000000000)
 
// -------------------------------------------------------------------------
// Constructor
 
void
Cyg_Watchdog::init_hw(void)
{
CYG_REPORT_FUNCTION();
 
// HW doesn't need init
resolution = WATCHDOG_RESOLUTION;
CYG_REPORT_RETURN();
}
 
 
 
// -------------------------------------------------------------------------
// Start the watchdog running.
 
void
Cyg_Watchdog::start(void)
{
CYG_REPORT_FUNCTION();
 
// Init the watchdog timer.
HAL_WRITE_UINT32(SA110_TIMER4_LOAD, WATCHDOG_TIMER_TICKS);
HAL_WRITE_UINT32(SA110_TIMER4_CLEAR, 0);
HAL_WRITE_UINT32(SA110_TIMER4_CONTROL,
SA110_TIMER_CONTROL_ENABLE|SA110_TIMER_CONTROL_SCALE_16);
// Enable the watchdog.
cyg_uint32 ctrl;
HAL_READ_UINT32(SA110_CONTROL, ctrl);
ctrl |= SA110_CONTROL_WATCHDOG;
HAL_WRITE_UINT32(SA110_CONTROL, ctrl);
 
CYG_REPORT_RETURN();
}
 
// -------------------------------------------------------------------------
// Reset watchdog timer. This needs to be called regularly to prevent
// the watchdog firing.
 
void
Cyg_Watchdog::reset()
{
CYG_REPORT_FUNCTION();
 
HAL_WRITE_UINT32(SA110_TIMER4_LOAD, WATCHDOG_TIMER_TICKS);
CYG_REPORT_RETURN();
}
 
#if 0
// -------------------------------------------------------------------------
// Trigger the watchdog as if the timer had expired.
 
void
Cyg_Watchdog::reset_action(void)
{
CYG_REPORT_FUNCTION();
// Init the watchdog timer.
HAL_WRITE_UINT32(SA110_TIMER4_LOAD, 1);
HAL_WRITE_UINT32(SA110_TIMER4_CONTROL, SA110_TIMER_CONTROL_ENABLE);
// Enable the watchdog.
cyg_uint32 ctrl;
HAL_READ_UINT32(SA110_CONTROL, ctrl);
ctrl |= SA110_CONTROL_WATCHDOG;
HAL_WRITE_UINT32(SA110_CONTROL, ctrl);
 
CYG_REPORT_RETURN();
}
#endif
 
 
// -------------------------------------------------------------------------
// EOF watchdog_ebsa285.cxx
/ebsa285/v2_0/ChangeLog
0,0 → 1,44
2000-05-31 Jesper Skov <jskov@redhat.com>
 
* cdl/watchdog_ebsa285.cdl:
* src/watchdog_ebsa285.cxx:
Driver moved to devs/watchdog/arm/ebsa285. Stripped out
unrelated ChangeLog entries.
 
1999-08-27 Jesper Skov <jskov@cygnus.co.uk>
 
* src/ebsa285.cxx:
Added watchdog device for 21285.
 
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
/sa11x0/v2_0/cdl/watchdog_sa11x0.cdl
0,0 → 1,102
# ====================================================================
#
# watchdog_sa11x0.cdl
#
# eCos watchdog for ARM/SA11X0 driver configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jskov
# Contributors: hmt, jskov
# Date: 2001-02-27
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0 {
parent CYGPKG_IO_WATCHDOG
active_if CYGPKG_IO_WATCHDOG
display "SA11X0 watchdog driver"
requires CYGPKG_HAL_ARM_SA11X0
requires CYGPKG_KERNEL
hardware
compile watchdog_sa11x0.cxx
implements CYGINT_WATCHDOG_HW_IMPLEMENTATIONS
implements CYGINT_WATCHDOG_RESETS_ON_TIMEOUT
active_if CYGIMP_WATCHDOG_HARDWARE
 
cdl_option CYGIMP_WATCHDOG_HARDWARE {
parent CYGPKG_IO_WATCHDOG_IMPLEMENTATION
display "Hardware watchdog"
default_value 1
implements CYGINT_WATCHDOG_IMPLEMENTATIONS
}
 
cdl_component CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0_OPTIONS {
display "SA11X0 watchdog build options"
flavor none
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_SA11X0_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are removed from
the set of global flags if present."
}
 
}
}
/sa11x0/v2_0/src/watchdog_sa11x0.cxx
0,0 → 1,147
//==========================================================================
//
// watchdog/sa11x0.cxx
//
// Watchdog implementation for StrongARM SA11x0s
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): hmt, jskov (based on the MN10300 watchdog code by nickg)
// Contributors: jskov, nickg
// Date: 2001-02-27
// Purpose: Watchdog class implementation
// Description: Contains an implementation of the Watchdog class for use
// with the SA11X0 hardware watchdog timer.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/system.h> // system configuration file
#include <pkgconf/watchdog.h> // configuration for this package
#include <pkgconf/kernel.h> // kernel config
 
#include <cyg/infra/cyg_trac.h> // tracing macros
#include <cyg/kernel/instrmnt.h> // instrumentation
 
#include <cyg/hal/hal_io.h> // IO register access
#include <cyg/hal/hal_intr.h> // Interrupts
#include <cyg/hal/hal_sa11x0.h> // IO registers per se
 
#include <cyg/io/watchdog.hxx> // watchdog API
 
// -------------------------------------------------------------------------
// SA11x0 watchdog works by enabling the watchdog (duh!) which means that
// when OS Timer Match Register #3 "OSMR3" compares equal to the 3.6864MHz
// clock in OSCR, then the system resets.
//
// To stay ahead of this, we must repeatedly set OSMR3 to OSCR + K where K
// is the watchdog timeout. This REQUIRES that the OSCR be freerunning.
//
// OSCR runs at 3.6864MHz, so one second is 3686400 ticks.
//
// The match register is 32 bits, and wraps as an int32 does (the
// comparison is exact, so you don't need to take special care.) So we can
// literally do the addition in the obvious way.
 
#define WATCHDOG_TIMER_TICKS 3686400
#define WATCHDOG_RESOLUTION (1000000000)
 
// -------------------------------------------------------------------------
// Constructor
 
void
Cyg_Watchdog::init_hw(void)
{
CYG_REPORT_FUNCTION();
 
// HW doesn't need init
resolution = WATCHDOG_RESOLUTION;
CYG_REPORT_RETURN();
}
 
 
 
// -------------------------------------------------------------------------
// Start the watchdog running.
 
void
Cyg_Watchdog::start(void)
{
int old;
CYG_REPORT_FUNCTION();
HAL_DISABLE_INTERRUPTS( old );
 
// Init the watchdog timer.
*SA11X0_OSMR3 = *SA11X0_OSCR + WATCHDOG_TIMER_TICKS;
*SA11X0_OSSR = SA11X0_OSSR_TIMER3; // Ack any pending intr
*SA11X0_OIER |= SA11X0_OIER_TIMER3; // Enable interrupt is necessary
 
CYG_ASSERT( *SA11X0_OSCR < *SA11X0_OSMR3 ||
*SA11X0_OSMR3 <= WATCHDOG_TIMER_TICKS, "Watchdog wierdness" );
 
// Enable the watchdog.
*SA11X0_OWER = SA11X0_OWER_ENABLE;
 
HAL_RESTORE_INTERRUPTS( old );
 
CYG_REPORT_RETURN();
}
 
// -------------------------------------------------------------------------
// Reset watchdog timer. This needs to be called regularly to prevent
// the watchdog firing.
 
void
Cyg_Watchdog::reset()
{
CYG_REPORT_FUNCTION();
 
*SA11X0_OSMR3 = *SA11X0_OSCR + WATCHDOG_TIMER_TICKS;
CYG_ASSERT( *SA11X0_OSCR < *SA11X0_OSMR3 ||
*SA11X0_OSMR3 <= WATCHDOG_TIMER_TICKS, "Watchdog wierdness" );
 
CYG_REPORT_RETURN();
}
 
 
// -------------------------------------------------------------------------
// EOF watchdog_sa11x0.cxx
/sa11x0/v2_0/ChangeLog
0,0 → 1,50
2001-02-28 Hugo Tyson <hmt@redhat.com>
 
* src/watchdog_sa11x0.cxx: New file.
* cdl/watchdog_sa11x0.cdl: New file.
Copied from those referred to below.
 
2000-05-31 Jesper Skov <jskov@redhat.com>
 
* cdl/watchdog_ebsa285.cdl:
* src/watchdog_ebsa285.cxx:
Driver moved to devs/watchdog/arm/ebsa285. Stripped out
unrelated ChangeLog entries.
 
1999-08-27 Jesper Skov <jskov@cygnus.co.uk>
 
* src/ebsa285.cxx:
Added watchdog device for 21285.
 
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
/at91/v2_0/cdl/watchdog_at91.cdl
0,0 → 1,133
# ====================================================================
#
# watchdog_at91.cdl
#
# eCos watchdog for ARM AT91 driver configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): tkoeller
# Contributors: tkoeller
# Date: 2000-05-05
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVICES_WATCHDOG_ARM_AT91 {
parent CYGPKG_IO_WATCHDOG
active_if CYGPKG_IO_WATCHDOG
display "ARM AT91 watchdog driver"
requires CYGPKG_HAL_ARM_AT91
requires CYGPKG_KERNEL
hardware
define_header devs_watchdog_arm_at91.h
compile watchdog_at91.cxx
implements CYGINT_WATCHDOG_HW_IMPLEMENTATIONS
active_if CYGIMP_WATCHDOG_HARDWARE
description "
This package uses the watchdog device integrated
in the ARM CPU to execute a predefined action if the
application fails to call the reset function for
longer than a given timeout interval."
 
cdl_option CYGIMP_WATCHDOG_HARDWARE {
parent CYGPKG_IO_WATCHDOG_IMPLEMENTATION
display "Hardware watchdog"
calculated 1
implements CYGINT_WATCHDOG_IMPLEMENTATIONS
}
cdl_option CYGNUM_DEVS_WATCHDOG_ARM_AT91_DESIRED_TMEOUT_MS {
display "Desired timeout value"
flavor data
legal_values 1 to 2047
default_value 100
description "
This parameter controls the watchdog timeout interval.
Note that you may not get the exact value requested
here, the timeout interval may have to be adjusted
because of hardware limitations. The actual timeout
used will be the smallest possible value that is not
less than this parameter."
}
cdl_option CYGSEM_DEVS_WATCHDOG_ARM_AT91_RESET {
display "Generate reset on watchdog expiration"
flavor bool
default_value 1
implements CYGINT_WATCHDOG_RESETS_ON_TIMEOUT
description "
Enabling this option changes the watchdog operation mode
to generate a system reset upon expiration instead of
invoking an application-defined action."
}
 
cdl_component CYGPKG_DEVICES_WATCHDOG_ARM_AT91_OPTIONS {
display "AT91 watchdog build options"
flavor none
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AT91_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_DEVICES_WATCHDOG_ARM_AT91_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the watchdog device. These flags are removed from
the set of global flags if present."
}
 
}
}
 
# EOF watchdog_at91.cdl
/at91/v2_0/src/watchdog_at91.cxx
0,0 → 1,200
//==========================================================================
//
// devs/watchdog/arm/at91/watchdog_at91.cxx
//
// Watchdog implementation for ARM AT91 CPU
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): tkoeller
// Contributors: tkoeller
// Date: 2002-05-05
// Purpose: Watchdog class implementation
// Description: Contains an implementation of the Watchdog class for use
// with the ATMEL AT91 watchdog timer.
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/kernel.h>
#include <pkgconf/infra.h>
#include <pkgconf/kernel.h>
#include <pkgconf/watchdog.h>
#include <pkgconf/devs_watchdog_arm_at91.h>
#include <cyg/infra/cyg_type.h>
#include <cyg/infra/cyg_ass.h>
#include <cyg/infra/cyg_trac.h>
#include <cyg/hal/hal_io.h>
#include <cyg/hal/plf_io.h>
#include <cyg/hal/hal_diag.h>
#include <cyg/io/watchdog.hxx>
#if !defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT)
#include <cyg/hal/hal_platform_ints.h>
#include <cyg/kernel/intr.hxx>
#endif
 
#define MCLK_FREQUENCY_KHZ 32768
#define MAX_TICKS 0x0000ffff
#define BASE_TICKS (MCLK_FREQUENCY_KHZ * CYGNUM_DEVS_WATCHDOG_ARM_AT91_DESIRED_TMEOUT_MS)
 
#if BASE_TICKS / 8 <= MAX_TICKS
#define DIVIDER 0
#define DIV_FACTOR 8
#elif BASE_TICKS / 32 <= MAX_TICKS
#define DIVIDER 1
#define DIV_FACTOR 32
#elif BASE_TICKS / 128 <= MAX_TICKS
#define DIVIDER 2
#define DIV_FACTOR 128
#elif BASE_TICKS / 1024 <= MAX_TICKS
#define DIVIDER 3
#define DIV_FACTOR 1024
#else
#error Desired resolution beyond hardware capabilities
#endif
 
#define TICKS ((BASE_TICKS / DIV_FACTOR) | 0xfff)
#define RESOLUTION ((cyg_uint64) (TICKS * DIV_FACTOR ) * 1000000 / MCLK_FREQUENCY_KHZ)
 
 
 
#if defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT)
 
#define OMRVAL (AT91_WD_OMR_OKEY | AT91_WD_OMR_RSTEN | AT91_WD_OMR_WDEN)
 
void
Cyg_Watchdog::init_hw(void)
{
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARGVOID();
resolution = RESOLUTION;
CYG_REPORT_RETURN();
}
 
#else /* defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) */
 
#define OMRVAL (AT91_WD_OMR_OKEY | AT91_WD_OMR_IRQEN | AT91_WD_OMR_WDEN)
#define INT_PRIO 7
 
 
static void *
operator new(size_t size)
{
static cyg_uint8 buf[sizeof (Cyg_Interrupt)];
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARG1XV(size);
CYG_ASSERTC(size == sizeof buf);
CYG_REPORT_RETVAL(buf);
return buf;
}
 
static cyg_uint32
isr(cyg_vector vector, CYG_ADDRWORD data)
{
Cyg_Watchdog &wd = *(Cyg_Watchdog *) data;
 
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARG2XV(vector, data);
 
wd.trigger();
Cyg_Interrupt::acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG);
CYG_REPORT_RETVAL(Cyg_Interrupt::HANDLED);
return Cyg_Interrupt::HANDLED;
}
 
static Cyg_Interrupt * wdint;
 
void
Cyg_Watchdog::init_hw(void)
{
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARGVOID();
 
resolution = RESOLUTION;
wdint = new Cyg_Interrupt(
CYGNUM_HAL_INTERRUPT_WATCHDOG,
INT_PRIO,
(CYG_ADDRWORD) this,
isr,
NULL
);
wdint->configure_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG, false, true);
wdint->attach();
wdint->acknowledge_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG);
wdint->unmask_interrupt(CYGNUM_HAL_INTERRUPT_WATCHDOG);
CYG_REPORT_RETURN();
}
 
#endif /* defined(CYGSEM_WATCHDOG_RESETS_ON_TIMEOUT) */
 
 
 
/*
* Reset watchdog timer. This needs to be called regularly to prevent
* the watchdog from firing.
*/
void
Cyg_Watchdog::reset(void)
{
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARGVOID();
 
/* Write magic code to reset the watchdog. */
HAL_WRITE_UINT32(AT91_WD + AT91_WD_CR, AT91_WD_CR_RSTKEY);
CYG_REPORT_RETURN();
}
 
/*
* Start watchdog to generate a hardware reset
* or interrupt when expiring.
*/
void
Cyg_Watchdog::start(void)
{
CYG_REPORT_FUNCTION();
CYG_REPORT_FUNCARGVOID();
HAL_WRITE_UINT32(AT91_WD + AT91_WD_OMR, AT91_WD_OMR_OKEY);
HAL_WRITE_UINT32(
AT91_WD + AT91_WD_CMR,
AT91_WD_CMR_CKEY | ((TICKS >> 10) & AT91_WD_CMR_HPCV) | DIVIDER
);
HAL_WRITE_UINT32(AT91_WD + AT91_WD_CR, AT91_WD_CR_RSTKEY);
HAL_WRITE_UINT32(AT91_WD + AT91_WD_OMR, OMRVAL);
CYG_REPORT_RETURN();
}
/at91/v2_0/ChangeLog
0,0 → 1,36
2002-08-06 Thomas Koeller <thomas@koeller.dyndns.org>
 
* Added watchdog driver for ARM AT91 board.
 
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.