Module Name: src
Committed By: matt
Date: Wed Sep 4 17:45:40 UTC 2013
Modified Files:
src/sys/arch/arm/allwinner: awin_board.c awin_reg.h awin_var.h
awin_wdt.c files.awin
src/sys/arch/evbarm/cubie: cubie_machdep.c
Log Message:
Add wdog support. Use wdog to do reset (works for both A10 & A20).
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/allwinner/awin_board.c \
src/sys/arch/arm/allwinner/awin_wdt.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/allwinner/awin_reg.h \
src/sys/arch/arm/allwinner/awin_var.h \
src/sys/arch/arm/allwinner/files.awin
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbarm/cubie/cubie_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/allwinner/awin_board.c
diff -u src/sys/arch/arm/allwinner/awin_board.c:1.1 src/sys/arch/arm/allwinner/awin_board.c:1.2
--- src/sys/arch/arm/allwinner/awin_board.c:1.1 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/arm/allwinner/awin_board.c Wed Sep 4 17:45:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_board.c,v 1.1 2013/09/04 02:39:01 matt Exp $ */
+/* $NetBSD: awin_board.c,v 1.2 2013/09/04 17:45:40 matt Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -34,7 +34,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: awin_board.c,v 1.1 2013/09/04 02:39:01 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_board.c,v 1.2 2013/09/04 17:45:40 matt Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -170,10 +170,3 @@ awin_memprobe(void)
#endif
return memsize;
}
-
-void
-awin_reset(void)
-{
- bus_space_write_4(&awin_bs_tag, awin_core_bsh,
- AWIN_CPUCNF_OFFSET + AWIN_CPU0_RST_CTRL_REG, AWIN_CPU_RESET);
-}
Index: src/sys/arch/arm/allwinner/awin_wdt.c
diff -u src/sys/arch/arm/allwinner/awin_wdt.c:1.1 src/sys/arch/arm/allwinner/awin_wdt.c:1.2
--- src/sys/arch/arm/allwinner/awin_wdt.c:1.1 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/arm/allwinner/awin_wdt.c Wed Sep 4 17:45:40 2013
@@ -28,30 +28,114 @@
*/
#include "locators.h"
+#include "opt_allwinner.h"
+#include "awin_wdt.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: awin_wdt.c,v 1.1 2013/09/04 02:39:01 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_wdt.c,v 1.2 2013/09/04 17:45:40 matt Exp $");
#include <sys/bus.h>
#include <sys/device.h>
#include <sys/intr.h>
#include <sys/systm.h>
+#include <sys/proc.h>
+#include <sys/wdog.h>
+
+#include <dev/sysmon/sysmonvar.h>
+
+#include <arm/locore.h>
#include <arm/allwinner/awin_reg.h>
#include <arm/allwinner/awin_var.h>
+#if NAWIN_WDT > 0
static int awin_wdt_match(device_t, cfdata_t, void *);
static void awin_wdt_attach(device_t, device_t, void *);
-struct awin_wdt_softc {
+#ifndef AWIN_WDT_PERIOD_DEFAULT
+#define AWIN_WDT_PERIOD_DEFAULT 10
+#endif
+
+static const uint8_t period_map[] = {
+ [0] = __SHIFTIN(AWIN_WDOG_MODE_INTV_1SEC, AWIN_WDOG_MODE_INTV),
+ [1] = __SHIFTIN(AWIN_WDOG_MODE_INTV_1SEC, AWIN_WDOG_MODE_INTV),
+ [2] = __SHIFTIN(AWIN_WDOG_MODE_INTV_2SEC, AWIN_WDOG_MODE_INTV),
+ [3] = __SHIFTIN(AWIN_WDOG_MODE_INTV_3SEC, AWIN_WDOG_MODE_INTV),
+ [4] = __SHIFTIN(AWIN_WDOG_MODE_INTV_4SEC, AWIN_WDOG_MODE_INTV),
+ [5] = __SHIFTIN(AWIN_WDOG_MODE_INTV_5SEC, AWIN_WDOG_MODE_INTV),
+ [6] = __SHIFTIN(AWIN_WDOG_MODE_INTV_6SEC, AWIN_WDOG_MODE_INTV),
+ [7] = __SHIFTIN(AWIN_WDOG_MODE_INTV_8SEC, AWIN_WDOG_MODE_INTV),
+ [8] = __SHIFTIN(AWIN_WDOG_MODE_INTV_8SEC, AWIN_WDOG_MODE_INTV),
+ [9] = __SHIFTIN(AWIN_WDOG_MODE_INTV_10SEC, AWIN_WDOG_MODE_INTV),
+ [10] = __SHIFTIN(AWIN_WDOG_MODE_INTV_10SEC, AWIN_WDOG_MODE_INTV),
+ [11] = __SHIFTIN(AWIN_WDOG_MODE_INTV_12SEC, AWIN_WDOG_MODE_INTV),
+ [12] = __SHIFTIN(AWIN_WDOG_MODE_INTV_12SEC, AWIN_WDOG_MODE_INTV),
+ [13] = __SHIFTIN(AWIN_WDOG_MODE_INTV_14SEC, AWIN_WDOG_MODE_INTV),
+ [14] = __SHIFTIN(AWIN_WDOG_MODE_INTV_14SEC, AWIN_WDOG_MODE_INTV),
+ [15] = __SHIFTIN(AWIN_WDOG_MODE_INTV_16SEC, AWIN_WDOG_MODE_INTV),
+ [16] = __SHIFTIN(AWIN_WDOG_MODE_INTV_16SEC, AWIN_WDOG_MODE_INTV),
+};
+
+static struct awin_wdt_softc {
device_t sc_dev;
bus_space_tag_t sc_bst;
bus_space_handle_t sc_bsh;
- bus_dma_tag_t sc_dmat;
+ struct sysmon_wdog sc_smw;
+ u_int sc_wdog_period;
+ bool sc_wdog_armed;
+ uint32_t sc_wdog_mode;
+} awin_wdt_sc = {
+ .sc_bst = &awin_bs_tag,
+ .sc_wdog_period = AWIN_WDT_PERIOD_DEFAULT,
};
-CFATTACH_DECL_NEW(awin_wdt, sizeof(struct awin_wdt_softc),
+static int
+awin_wdt_tickle(struct sysmon_wdog *smw)
+{
+ struct awin_wdt_softc * const sc = smw->smw_cookie;
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_WDOG_CTRL_REG,
+ AWIN_WDOG_CTRL_RSTART);
+ return 0;
+}
+
+static int
+awin_wdt_setmode(struct sysmon_wdog *smw)
+{
+ struct awin_wdt_softc * const sc = smw->smw_cookie;
+
+ if ((smw->smw_mode & WDOG_MODE_MASK) == WDOG_MODE_DISARMED) {
+ /*
+ * We can't disarm the watchdog.
+ */
+ return sc->sc_wdog_armed ? EBUSY : 0;
+ }
+
+ if (sc->sc_wdog_armed && smw->smw_period == sc->sc_wdog_period) {
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_WDOG_MODE_REG,
+ sc->sc_wdog_mode);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_WDOG_CTRL_REG,
+ AWIN_WDOG_CTRL_RSTART);
+ return 0;
+ }
+ if (smw->smw_period > __arraycount(period_map)) {
+ return EINVAL;
+ }
+ if (smw->smw_period == WDOG_PERIOD_DEFAULT) {
+ smw->smw_period = AWIN_WDT_PERIOD_DEFAULT;
+ sc->sc_wdog_period = AWIN_WDT_PERIOD_DEFAULT;
+ }
+ sc->sc_wdog_mode = AWIN_WDOG_MODE_EN | AWIN_WDOG_MODE_RST_EN
+ | period_map[sc->sc_wdog_period];
+
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_WDOG_MODE_REG,
+ sc->sc_wdog_mode);
+ bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_WDOG_CTRL_REG,
+ AWIN_WDOG_CTRL_RSTART);
+ return 0;
+}
+
+CFATTACH_DECL_NEW(awin_wdt, 0,
awin_wdt_match, awin_wdt_attach, NULL, NULL);
static int
@@ -61,6 +145,9 @@ awin_wdt_match(device_t parent, cfdata_t
const struct awin_locators * const loc = &aio->aio_loc;
const int port = cf->cf_loc[AWINIOCF_PORT];
+ if (awin_wdt_sc.sc_dev != NULL)
+ return 0;
+
if (strcmp(cf->cf_name, loc->loc_name)
|| (port != AWINIOCF_PORT_DEFAULT && port != loc->loc_port))
return 0;
@@ -73,23 +160,49 @@ awin_wdt_match(device_t parent, cfdata_t
static void
awin_wdt_attach(device_t parent, device_t self, void *aux)
{
- struct awin_wdt_softc * const sc = device_private(self);
+ struct awin_wdt_softc * const sc = &awin_wdt_sc;
struct awinio_attach_args * const aio = aux;
const struct awin_locators * const loc = &aio->aio_loc;
sc->sc_dev = self;
+ sc->sc_wdog_armed = (device_cfdata(self)->cf_flags & 1) != 0;
sc->sc_bst = aio->aio_core_bst;
- sc->sc_dmat = aio->aio_dmat;
bus_space_subregion(sc->sc_bst, aio->aio_core_bsh,
loc->loc_offset, loc->loc_size, &sc->sc_bsh);
aprint_naive("\n");
- aprint_normal("\n");
+ aprint_normal(": default period is %u seconds%s\n",
+ sc->sc_wdog_period,
+ sc->sc_wdog_armed ? " (wdog is active)" : "");
+
+ sc->sc_smw.smw_name = device_xname(sc->sc_dev);
+ sc->sc_smw.smw_cookie = sc;
+ sc->sc_smw.smw_setmode = awin_wdt_setmode;
+ sc->sc_smw.smw_tickle = awin_wdt_tickle;
+ sc->sc_smw.smw_period = sc->sc_wdog_period;
+
+ if (sysmon_wdog_register(&sc->sc_smw) != 0)
+ aprint_error_dev(self, "unable to register with sysmon\n");
+
+ if (sc->sc_wdog_armed) {
+ int error = sysmon_wdog_setmode(&sc->sc_smw, WDOG_MODE_KTICKLE,
+ sc->sc_wdog_period);
+ if (error)
+ aprint_error_dev(self,
+ "failed to start kernel tickler: %d\n", error);
+ }
}
+#endif
-bool
-awin_wdt_enable(bool enable_p)
+void
+awin_wdog_reset(void)
{
- return false;
+ cpsid(I32_bit|F32_bit);
+ bus_space_write_4(&awin_bs_tag, awin_core_bsh,
+ AWIN_TMR_OFFSET + AWIN_WDOG_MODE_REG,
+ AWIN_WDOG_MODE_EN | AWIN_WDOG_MODE_RST_EN);
+ for (;;) {
+ __asm("wfi");
+ }
}
Index: src/sys/arch/arm/allwinner/awin_reg.h
diff -u src/sys/arch/arm/allwinner/awin_reg.h:1.2 src/sys/arch/arm/allwinner/awin_reg.h:1.3
--- src/sys/arch/arm/allwinner/awin_reg.h:1.2 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/arm/allwinner/awin_reg.h Wed Sep 4 17:45:40 2013
@@ -232,6 +232,49 @@
#define AWIN_OSC24M_CFG_REG 0x0050
#define AWIN_CPU_AHB_APB0_CFG_REG 0x0054
#define AWIN_APB1_CLK_DIV_REG 0x0058
+#define AWIN_AXI_GATING_REG 0x005c
+#define AWIN_AHB_GATING0_REG 0x0060
+#define AWIN_AHB_GATING1_REG 0x0064
+#define AWIN_APB0_GATING_REG 0x0068
+#define AWIN_APB1_GATING_REG 0x006c
+#define AWIN_NAND_SCLK_CFG_REG 0x0080
+#define AWIN_SD0_CLK_REG 0x0088
+#define AWIN_SD1_CLK_REG 0x008c
+#define AWIN_SD2_CLK_REG 0x0090
+#define AWIN_SD3_CLK_REG 0x0094
+#define AWIN_TS_CLK_REG 0x0098
+#define AWIN_SS_CLK_REG 0x009c
+#define AWIN_SPI0_CLK_REG 0x00a0
+#define AWIN_SPI1_CLK_REG 0x00a4
+#define AWIN_SPI2_CLK_REG 0x00a8
+#define AWIN_IR0_CLK_REG 0x00b9
+#define AWIN_IR1_CLK_REG 0x00b4
+#define AWIN_IIS_CLK_REG 0x00b8
+#define AWIN_AC97_CLK_REG 0x00bc
+#define AWIN_KEYPAD_CLK_REG 0x00c4
+#define AWIN_USB_CLK_REG 0x00cc
+#define AWIN_SPI3_CLK_REG 0x00d4
+#define AWIN_DRAM_CLK_REG 0x0100
+#define AWIN_BE0_SCLK_CFG_REG 0x0100
+#define AWIN_BE0_SCLK_CFG_REG 0x0100
+#define AWIN_FE0_CLK_REG 0x0100
+#define AWIN_FE1_CLK_REG 0x0110
+#define AWIN_MP_CLK_REG 0x0114
+#define AWIN_LCD0_CH0_CLK_REG 0x0118
+#define AWIN_LCD1_CH0_CLK_REG 0x011c
+#define AWIN_CSI_ISP_CLK_REG 0x0120
+#define AWIN_TVD_CLK_REG 0x0128
+#define AWIN_LCD0_CH1_CLK_REG 0x012c
+#define AWIN_LCD1_CH1_CLK_REG 0x0130
+#define AWIN_CSI0_CLK_REG 0x0134
+#define AWIN_CSI1_CLK_REG 0x0138
+#define AWIN_VE_CLK_REG 0x013c
+#define AWIN_AUDIO_CODEC_CLK_REG 0x0140
+#define AWIN_AVS_CLK_REG 0x0144
+#define AWIN_ACE_CLK_REG 0x0148
+#define AWIN_LVDS_CLK_REG 0x014c
+#define AWIN_HDMI_CLK_REG 0x0150
+#define AWIN_MALI400_CLK_REG 0x0154
#define AWIN_OSC24M_CFG_ENABLE __BIT(0)
@@ -249,6 +292,82 @@
#define AWIN_CPU_CLK_SRC_SEL_200MHZ 3
#define AWIN_APB0_CLK_RATIO __BITS(9,8)
+#define AWIN_AHB_GATING0_NC25 __BIT(25)
+#define AWIN_AHB_GATING0_PATA __BIT(24)
+#define AWIN_AHB_GATING0_SPI3 __BIT(23)
+#define AWIN_AHB_GATING0_SPI2 __BIT(22)
+#define AWIN_AHB_GATING0_SPI1 __BIT(21)
+#define AWIN_AHB_GATING0_SPI0 __BIT(20)
+#define AWIN_AHB_GATING0_TS __BIT(18)
+#define AWIN_AHB_GATING0_EMAC __BIT(17)
+#define AWIN_AHB_GATING0_ACE __BIT(16)
+#define AWIN_AHB_GATING0_SDRAM __BIT(14)
+#define AWIN_AHB_GATING0_NAND __BIT(13)
+#define AWIN_AHB_GATING0_NC12 __BIT(12)
+#define AWIN_AHB_GATING0_SDMMC3 __BIT(11)
+#define AWIN_AHB_GATING0_SDMMC2 __BIT(10)
+#define AWIN_AHB_GATING0_SDMMC1 __BIT(9)
+#define AWIN_AHB_GATING0_SDMMC0 __BIT(8)
+#define AWIN_AHB_GATING0_BIST __BIT(7)
+#define AWIN_AHB_GATING0_DMA __BIT(6)
+#define AWIN_AHB_GATING0_SS __BIT(5)
+#define AWIN_AHB_GATING0_USB_EHCI1 __BIT(3)
+#define AWIN_AHB_GATING0_USB_EHCI0 __BIT(1)
+#define AWIN_AHB_GATING0_USB0 __BIT(0)
+
+#define AWIN_AHB_GATING1_MALI400 __BIT(20)
+#define AWIN_AHB_GATING1_MP __BIT(18)
+#define AWIN_AHB_GATING1_DE_FE1 __BIT(15)
+#define AWIN_AHB_GATING1_DE_FE0 __BIT(14)
+#define AWIN_AHB_GATING1_DE_BE1 __BIT(13)
+#define AWIN_AHB_GATING1_DE_BE0 __BIT(12)
+#define AWIN_AHB_GATING1_HDMI __BIT(11)
+#define AWIN_AHB_GATING1_CSI1 __BIT(9)
+#define AWIN_AHB_GATING1_CSI0 __BIT(8)
+#define AWIN_AHB_GATING1_LCD1 __BIT(5)
+#define AWIN_AHB_GATING1_LCD0 __BIT(4)
+#define AWIN_AHB_GATING1_TVE1 __BIT(3)
+#define AWIN_AHB_GATING1_TVE0 __BIT(2)
+#define AWIN_AHB_GATING1_TVD __BIT(1)
+#define AWIN_AHB_GATING1_VE __BIT(0)
+
+#define AWIN_CLK_ENABLE __BIT(31)
+#define AWIN_CLK_SRC_SEL __BITS(25,24)
+#define AWIN_CLK_SRC_SEL_OSC24M 0
+#define AWIN_CLK_SRC_SEL_PLL6 1
+#define AWIN_CLK_SRC_SEL_PLL5 2
+#define AWIN_CLK_DIV_RATIO_N __BITS(17,16)
+#define AWIN_CLK_DIV_RATIO_M __BITS(3,0)
+
+/* SDMMC definitions */
+#define AWIN_SDMMC_GCTRL_REG 0x0000
+#define AWIN_SDMMC_CLKCR_REG 0x0004
+#define AWIN_SDMMC_TIMEOUT_REG 0x0008
+#define AWIN_SDMMC_WIDTH_REG 0x000c
+#define AWIN_SDMMC_BLKSZ_REG 0x0010
+#define AWIN_SDMMC_BYTECNT_REG 0x0014
+#define AWIN_SDMMC_CMD_REG 0x0018
+#define AWIN_SDMMC_ARG_REG 0x001c
+#define AWIN_SDMMC_RESP0_REG 0x0020
+#define AWIN_SDMMC_RESP1_REG 0x0024
+#define AWIN_SDMMC_RESP2_REG 0x0028
+#define AWIN_SDMMC_RESP3_REG 0x002c
+#define AWIN_SDMMC_IMASK_REG 0x0030
+#define AWIN_SDMMC_MINT_REG 0x0034
+#define AWIN_SDMMC_RINT_REG 0x0038
+#define AWIN_SDMMC_STATUS_REG 0x003c
+#define AWIN_SDMMC_FTRGLVL_REG 0x0040
+#define AWIN_SDMMC_FUNCSEL_REG 0x0044
+#define AWIN_SDMMC_CBCR_REG 0x0048
+#define AWIN_SDMMC_BBCR_REG 0x004c
+#define AWIN_SDMMC_DMAC_REG 0x0080
+#define AWIN_SDMMC_DLBA_REG 0x0084
+#define AWIN_SDMMC_IDST_REG 0x0088
+#define AWIN_SDMMC_IDIE_REG 0x008c
+#define AWIN_SDMMC_CHDA_REG 0x0090
+#define AWIN_SDMMC_CBDA_REG 0x0094
+#define AWIN_SDMMC_FIFO_REG 0x0100
+
/* USB device offsets */
#define AWIN_EHCI_OFFSET 0x0000
#define AWIN_EHCI_SIZE 0x0400
@@ -332,6 +451,23 @@
#define AWIN_TMR_GP_DATA3_REG 0x012C
#define AWIN_CPU_CFG_REG 0x0140
+#define AWIN_WDOG_CTRL_RSTART __BIT(1)
+#define AWIN_WDOG_MODE_INTV __BITS(6,3)
+#define AWIN_WDOG_MODE_INTV_HALFSEC 0
+#define AWIN_WDOG_MODE_INTV_1SEC 1
+#define AWIN_WDOG_MODE_INTV_2SEC 2
+#define AWIN_WDOG_MODE_INTV_3SEC 3
+#define AWIN_WDOG_MODE_INTV_4SEC 4
+#define AWIN_WDOG_MODE_INTV_5SEC 5
+#define AWIN_WDOG_MODE_INTV_6SEC 6
+#define AWIN_WDOG_MODE_INTV_8SEC 7
+#define AWIN_WDOG_MODE_INTV_10SEC 8
+#define AWIN_WDOG_MODE_INTV_12SEC 9
+#define AWIN_WDOG_MODE_INTV_14SEC 10
+#define AWIN_WDOG_MODE_INTV_16SEC 11
+#define AWIN_WDOG_MODE_RST_EN __BIT(1)
+#define AWIN_WDOG_MODE_EN __BIT(0)
+
#define AWIN_TWI_ADDR_REG 0x0000
#define AWIN_TWI_XADDR_REG 0x0004
#define AWIN_TWI_DATA_REG 0x0008
Index: src/sys/arch/arm/allwinner/awin_var.h
diff -u src/sys/arch/arm/allwinner/awin_var.h:1.2 src/sys/arch/arm/allwinner/awin_var.h:1.3
--- src/sys/arch/arm/allwinner/awin_var.h:1.2 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/arm/allwinner/awin_var.h Wed Sep 4 17:45:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: awin_var.h,v 1.2 2013/09/04 02:39:01 matt Exp $ */
+/* $NetBSD: awin_var.h,v 1.3 2013/09/04 17:45:40 matt Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -63,8 +63,7 @@ extern struct arm32_bus_dma_tag awin_dma
psize_t awin_memprobe(void);
void awin_bootstrap(vaddr_t, vaddr_t);
-void awin_reset(void);
-bool awin_wdt_enable(bool);
+void awin_wdog_reset(void);
#endif /* _ARM_ALLWINNER_AWIN_VAR_H_ */
Index: src/sys/arch/arm/allwinner/files.awin
diff -u src/sys/arch/arm/allwinner/files.awin:1.2 src/sys/arch/arm/allwinner/files.awin:1.3
--- src/sys/arch/arm/allwinner/files.awin:1.2 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/arm/allwinner/files.awin Wed Sep 4 17:45:40 2013
@@ -1,4 +1,4 @@
-# $NetBSD: files.awin,v 1.2 2013/09/04 02:39:01 matt Exp $
+# $NetBSD: files.awin,v 1.3 2013/09/04 17:45:40 matt Exp $
#
# Configuration info for Allwinner ARM Peripherals
#
@@ -20,6 +20,7 @@ defparam opt_allwinner.h CONADDR
defparam opt_allwinner.h CONSPEED
defparam opt_allwinner.h CONMODE
defparam opt_allwinner.h MEMSIZE
+defparam opt_allwinner.h AWIN_WDT_DEFAULT_PERIOD
defflag opt_allwinner.h AWIN_CONSOLE_EARLY
defflag opt_allwinner.h AWINETH_COUNTERS
defflag opt_allwinner.h ALLWINNER_A10
@@ -37,9 +38,9 @@ attach awinicu at awinio with awin_icu
file arch/arm/allwinner/awin_icu.c awin_icu
# A10/A20 Watchdog
-device awinwdt
+device awinwdt : sysmon_wdog
attach awinwdt at awinio with awin_wdt
-file arch/arm/allwinner/awin_wdt.c awin_wdt
+file arch/arm/allwinner/awin_wdt.c awin_wdt | awin_io needs-flag
# A10 Timers
device awintmr
Index: src/sys/arch/evbarm/cubie/cubie_machdep.c
diff -u src/sys/arch/evbarm/cubie/cubie_machdep.c:1.2 src/sys/arch/evbarm/cubie/cubie_machdep.c:1.3
--- src/sys/arch/evbarm/cubie/cubie_machdep.c:1.2 Wed Sep 4 02:39:01 2013
+++ src/sys/arch/evbarm/cubie/cubie_machdep.c Wed Sep 4 17:45:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: cubie_machdep.c,v 1.2 2013/09/04 02:39:01 matt Exp $ */
+/* $NetBSD: cubie_machdep.c,v 1.3 2013/09/04 17:45:40 matt Exp $ */
/*
* Machine dependent functions for kernel setup for TI OSK5912 board.
@@ -125,7 +125,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cubie_machdep.c,v 1.2 2013/09/04 02:39:01 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cubie_machdep.c,v 1.3 2013/09/04 17:45:40 matt Exp $");
#include "opt_machdep.h"
#include "opt_ddb.h"
@@ -279,20 +279,6 @@ static const struct pmap_devmap devmap[]
#undef _A
#undef _S
-#ifdef DDB
-static void
-cubie_db_trap(int where)
-{
- static bool oldstate;
-
- if (where) {
- oldstate = awin_wdt_enable(false);
- } else {
- awin_wdt_enable(oldstate);
- }
-}
-#endif
-
/*
* u_int initarm(...)
*
@@ -331,7 +317,7 @@ initarm(void *arg)
kgdb_port_init();
#endif
- cpu_reset_address = awin_reset;
+ cpu_reset_address = awin_wdog_reset;
#ifdef VERBOSE_INIT_ARM
/* Talk to the user */
@@ -397,8 +383,6 @@ initarm(void *arg)
/* we've a specific device_register routine */
evbarm_device_register = cubie_device_register;
- db_trap_callback = cubie_db_trap;
-
if (get_bootconf_option(boot_args, "console",
BOOTOPT_TYPE_STRING, &ptr) && strncmp(ptr, "fb", 2) == 0) {
use_fb_console = true;