Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Feb 2015 12:48:14 +0000 (UTC)
From:      Luiz Otavio O Souza <loos@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r278079 - in stable/10/sys: arm/conf arm/ti arm/ti/am335x boot/fdt/dts/arm
Message-ID:  <201502021248.t12CmEYl050675@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: loos
Date: Mon Feb  2 12:48:13 2015
New Revision: 278079
URL: https://svnweb.freebsd.org/changeset/base/278079

Log:
  MFC r277042:
  
  Add support to turn off Beaglebone with poweroff(8) or shutdown(8) -p.
  
  To cut off the power we need to start the shutdown sequence by writing
  the OFF bit on PMIC.
  
  Once the PMIC is programmed the SoC needs to toggle the PMIC_PWR_ENABLE
  pin when it is ready for the PMIC to cut off the power.  This is done by
  triggering the ALARM2 interrupt on SoC RTC.
  
  The RTC driver only works in power management mode which means it won't
  provide any kind of time keeping functionality.  It only implements a way
  to trigger the ALARM2 interrupt when requested.

Added:
  stable/10/sys/arm/ti/am335x/am335x_rtc.c
     - copied unchanged from r277042, head/sys/arm/ti/am335x/am335x_rtc.c
  stable/10/sys/arm/ti/am335x/am335x_rtcreg.h
     - copied unchanged from r277042, head/sys/arm/ti/am335x/am335x_rtcreg.h
  stable/10/sys/arm/ti/am335x/am335x_rtcvar.h
     - copied unchanged from r277042, head/sys/arm/ti/am335x/am335x_rtcvar.h
Modified:
  stable/10/sys/arm/conf/BEAGLEBONE
  stable/10/sys/arm/ti/am335x/am335x_pmic.c
  stable/10/sys/arm/ti/am335x/am335x_prcm.c
  stable/10/sys/arm/ti/am335x/files.am335x
  stable/10/sys/arm/ti/ti_prcm.h
  stable/10/sys/boot/fdt/dts/arm/am335x.dtsi
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/arm/conf/BEAGLEBONE
==============================================================================
--- stable/10/sys/arm/conf/BEAGLEBONE	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/arm/conf/BEAGLEBONE	Mon Feb  2 12:48:13 2015	(r278079)
@@ -87,6 +87,8 @@ device		sdhci			# mmc/sd host controller
 # Boot device is 2nd slice on MMC/SD card
 options 	ROOTDEVNAME=\"ufs:mmcsd0s2\"
 
+device		am335x_rtc		# RTC support (power management only)
+
 # Console and misc
 device		uart
 device		uart_ns8250

Modified: stable/10/sys/arm/ti/am335x/am335x_pmic.c
==============================================================================
--- stable/10/sys/arm/ti/am335x/am335x_pmic.c	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/arm/ti/am335x/am335x_pmic.c	Mon Feb  2 12:48:13 2015	(r278079)
@@ -31,11 +31,13 @@ __FBSDID("$FreeBSD$");
 */
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/eventhandler.h>
 #include <sys/kernel.h>
 #include <sys/module.h>
 #include <sys/clock.h>
 #include <sys/time.h>
 #include <sys/bus.h>
+#include <sys/reboot.h>
 #include <sys/resource.h>
 #include <sys/rman.h>
 
@@ -46,6 +48,8 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
 
+#include <arm/ti/am335x/am335x_rtcvar.h>
+
 #include "iicbus_if.h"
 
 #define TPS65217A		0x7
@@ -56,6 +60,10 @@ __FBSDID("$FreeBSD$");
 /* TPS65217 Reisters */
 #define TPS65217_CHIPID_REG	0x00
 #define TPS65217_STATUS_REG	0x0A
+#define	TPS65217_STATUS_OFF		(1U << 7)
+#define	TPS65217_STATUS_ACPWR		(1U << 3)
+#define	TPS65217_STATUS_USBPWR		(1U << 2)
+#define	TPS65217_STATUS_BT		(1U << 0)
 
 #define MAX_IIC_DATA_SIZE	2
 
@@ -66,6 +74,8 @@ struct am335x_pmic_softc {
 	struct intr_config_hook enum_hook;
 };
 
+static void am335x_pmic_shutdown(void *, int);
+
 static int
 am335x_pmic_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size)
 {
@@ -77,7 +87,6 @@ am335x_pmic_read(device_t dev, uint8_t a
 	return (iicbus_transfer(dev, msg, 2));
 }
 
-#ifdef notyet
 static int
 am335x_pmic_write(device_t dev, uint8_t address, uint8_t *data, uint8_t size)
 {
@@ -95,7 +104,6 @@ am335x_pmic_write(device_t dev, uint8_t 
 
 	return (iicbus_transfer(dev, msg, 1));
 }
-#endif
 
 static int
 am335x_pmic_probe(device_t dev)
@@ -146,6 +154,9 @@ am335x_pmic_start(void *xdev)
 	am335x_pmic_read(dev, TPS65217_STATUS_REG, &reg, 1);
 	device_printf(dev, "%s powered by %s\n", name, pwr[(reg>>2)&0x03]);
 
+	EVENTHANDLER_REGISTER(shutdown_final, am335x_pmic_shutdown, dev,
+	    SHUTDOWN_PRI_LAST);
+
 	config_intrhook_disestablish(&sc->enum_hook);
 }
 
@@ -165,6 +176,22 @@ am335x_pmic_attach(device_t dev)
 	return (0);
 }
 
+static void
+am335x_pmic_shutdown(void *xdev, int howto)
+{
+	device_t dev;
+	uint8_t reg;
+
+	if (!(howto & RB_POWEROFF))
+		return;
+	dev = (device_t)xdev;
+	/* Set the OFF bit on status register to start the shutdown sequence. */
+	reg = TPS65217_STATUS_OFF;
+	am335x_pmic_write(dev, TPS65217_STATUS_REG, &reg, 1);
+	/* Toggle pmic_pwr_enable to shutdown the PMIC. */
+	am335x_rtc_pmic_pwr_toggle();
+}
+
 static device_method_t am335x_pmic_methods[] = {
 	DEVMETHOD(device_probe,		am335x_pmic_probe),
 	DEVMETHOD(device_attach,	am335x_pmic_attach),

Modified: stable/10/sys/arm/ti/am335x/am335x_prcm.c
==============================================================================
--- stable/10/sys/arm/ti/am335x/am335x_prcm.c	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/arm/ti/am335x/am335x_prcm.c	Mon Feb  2 12:48:13 2015	(r278079)
@@ -118,6 +118,10 @@ __FBSDID("$FreeBSD$");
 #define CLKSEL_TIMER6_CLK		(CM_DPLL + 0x01C)
 #define	CLKSEL_PRUSS_OCP_CLK		(CM_DPLL + 0x030)
 
+#define	CM_RTC				0x800
+#define	CM_RTC_RTC_CLKCTRL		(CM_RTC + 0x000)
+#define	CM_RTC_CLKSTCTRL		(CM_RTC + 0x004)
+
 #define	PRM_PER				0xC00
 #define	PRM_PER_RSTCTRL			(PRM_PER + 0x00)
 
@@ -295,7 +299,8 @@ struct ti_clock_dev ti_clk_devmap[] = {
 		.clk_get_source_freq = NULL,
 	},
 
-
+	/* RTC */
+	AM335X_GENERIC_CLOCK_DEV(RTC_CLK),
 
 	{  INVALID_CLK_IDENT, NULL, NULL, NULL, NULL }
 };
@@ -363,6 +368,9 @@ static struct am335x_clk_details g_am335
 	_CLK_DETAIL(MAILBOX0_CLK, CM_PER_MAILBOX0_CLKCTRL, 0),
 	_CLK_DETAIL(SPINLOCK0_CLK, CM_PER_SPINLOCK0_CLKCTRL, 0),
 
+	/* RTC module */
+	_CLK_DETAIL(RTC_CLK, CM_RTC_RTC_CLKCTRL, 0),
+
 	{ INVALID_CLK_IDENT, 0},
 };
 

Copied: stable/10/sys/arm/ti/am335x/am335x_rtc.c (from r277042, head/sys/arm/ti/am335x/am335x_rtc.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/ti/am335x/am335x_rtc.c	Mon Feb  2 12:48:13 2015	(r278079, copy of r277042, head/sys/arm/ti/am335x/am335x_rtc.c)
@@ -0,0 +1,211 @@
+/*-
+ * Copyright (c) 2015 Luiz Otavio O Souza <loos@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/clock.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/rman.h>
+
+#include <machine/bus.h>
+
+#include <dev/ofw/ofw_bus_subr.h>
+#include <arm/ti/ti_prcm.h>
+#include <arm/ti/am335x/am335x_rtcvar.h>
+#include <arm/ti/am335x/am335x_rtcreg.h>
+
+#define	RTC_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
+#define	RTC_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
+#define	RTC_LOCK_INIT(_sc)	mtx_init(&(_sc)->sc_mtx, \
+    device_get_nameunit(_sc->sc_dev), "am335x_rtc", MTX_DEF)
+#define	RTC_LOCK_DESTROY(_sc)	mtx_destroy(&(_sc)->sc_mtx)
+
+#define	RTC_READ4(_sc, reg)		\
+	bus_read_4((_sc)->sc_mem_res, reg)
+#define	RTC_WRITE4(_sc, reg, value)	\
+	bus_write_4((_sc)->sc_mem_res, reg, value)
+
+#define	RTC_MAXIRQS		2
+
+struct am335x_rtc_softc {
+	device_t		sc_dev;
+	struct mtx		sc_mtx;
+	struct resource		*sc_irq_res[RTC_MAXIRQS];
+	struct resource		*sc_mem_res;
+};
+
+static struct am335x_rtc_softc *rtc_sc = NULL;
+static struct resource_spec am335x_rtc_irq_spec[] = {
+	{ SYS_RES_IRQ, 0,  RF_ACTIVE },
+	{ SYS_RES_IRQ, 1,  RF_ACTIVE },
+	{ -1, 0,  0 }
+};
+
+static int
+am335x_rtc_probe(device_t dev)
+{
+
+	if (!ofw_bus_status_okay(dev))
+		return (ENXIO);
+	if (!ofw_bus_is_compatible(dev, "ti,da830-rtc"))
+		return (ENXIO);
+	device_set_desc(dev, "AM335x RTC (power management mode)");
+
+	return (BUS_PROBE_DEFAULT);
+}
+
+static int
+am335x_rtc_attach(device_t dev)
+{
+	int rid;
+	struct am335x_rtc_softc *sc;
+	uint32_t rev;
+
+	if (rtc_sc != NULL)
+		return (ENXIO);
+	rtc_sc = sc = device_get_softc(dev);
+	sc->sc_dev = dev;
+	rid = 0;
+	sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+	    RF_ACTIVE);
+	if (!sc->sc_mem_res) {
+		device_printf(dev, "cannot allocate memory resources\n");
+		return (ENXIO);
+	}
+	if (bus_alloc_resources(dev, am335x_rtc_irq_spec, sc->sc_irq_res) != 0) {
+		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
+		device_printf(dev, "cannot allocate irq resources\n");
+		return (ENXIO);
+	}
+	RTC_LOCK_INIT(sc);
+
+	/* Enable the RTC module. */
+	ti_prcm_clk_enable(RTC_CLK);
+	rev = RTC_READ4(sc, RTC_REVISION);
+	device_printf(dev, "AM335X RTC v%d.%d.%d\n",
+            (rev >> 8) & 0x7, (rev >> 6) & 0x3, rev & 0x3f);
+	/* Unlock the RTC. */
+	RTC_WRITE4(sc, RTC_KICK0R, RTC_KICK0R_PASS);
+	RTC_WRITE4(sc, RTC_KICK1R, RTC_KICK1R_PASS);
+	/* Stop the RTC, we don't need it right now. */
+	RTC_WRITE4(sc, RTC_CTRL, 0);
+	/* Disable interrupts. */
+	RTC_WRITE4(sc, RTC_INTR, 0);
+	/* Ack any pending interrupt. */
+	RTC_WRITE4(sc, RTC_STATUS, RTC_STATUS_ALARM2 | RTC_STATUS_ALARM);
+	/* Enable external clock (xtal) and 32 kHz clock. */
+	RTC_WRITE4(sc, RTC_OSC, RTC_OSC_32KCLK_EN | RTC_OSC_32KCLK_SEL);
+	/* Enable pmic_pwr_enable. */
+	RTC_WRITE4(sc, RTC_PMIC, PMIC_PWR_ENABLE);
+
+	return (0);
+}
+
+static int
+am335x_rtc_detach(device_t dev)
+{
+	struct am335x_rtc_softc *sc;
+
+	sc = device_get_softc(dev);
+	if (sc->sc_irq_res)
+		bus_release_resources(dev, am335x_rtc_irq_spec, sc->sc_irq_res);
+	if (sc->sc_mem_res)
+		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
+	RTC_LOCK_DESTROY(sc);
+
+	return (0);
+}
+
+void
+am335x_rtc_pmic_pwr_toggle(void)
+{
+	int timeout;
+	struct clocktime ct;
+	struct timespec ts;
+
+	/*
+	 * We stop the RTC so we don't need to check the STATUS.BUSY bit
+	 * before update ALARM2 registers.
+	 */
+	timeout = 10;
+	RTC_WRITE4(rtc_sc, RTC_CTRL, 0);
+	while (--timeout && RTC_READ4(rtc_sc, RTC_STATUS) & RTC_STATUS_RUN)
+		DELAY(100);
+	if (timeout == 0) {
+		device_printf(rtc_sc->sc_dev, "RTC does not stop.\n");
+		return;
+	}
+	/* Program the ALARM2 to fire in 2 seconds. */
+	ct.dow = 0;
+	ct.nsec = 0;
+	ct.sec = FROMBCD(RTC_READ4(rtc_sc, RTC_SECONDS) & 0x7f);
+	ct.min = FROMBCD(RTC_READ4(rtc_sc, RTC_MINUTES) & 0x7f);
+	ct.hour = FROMBCD(RTC_READ4(rtc_sc, RTC_HOURS) & 0x3f);
+	ct.day = FROMBCD(RTC_READ4(rtc_sc, RTC_DAYS) & 0x3f);
+	ct.mon = FROMBCD(RTC_READ4(rtc_sc, RTC_MONTHS) & 0x1f);
+	ct.year = FROMBCD(RTC_READ4(rtc_sc, RTC_YEARS) & 0xff);
+	ct.year += POSIX_BASE_YEAR;
+	clock_ct_to_ts(&ct, &ts);
+	ts.tv_sec += 2;
+	clock_ts_to_ct(&ts, &ct);
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_SECONDS, TOBCD(ct.sec));
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_MINUTES, TOBCD(ct.min));
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_HOURS, TOBCD(ct.hour));
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_DAYS, TOBCD(ct.day));
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_MONTHS, TOBCD(ct.mon));
+	RTC_WRITE4(rtc_sc, RTC_ALARM2_YEARS, TOBCD(ct.year - POSIX_BASE_YEAR));
+	/* Enable ALARM2 interrupt. */
+	RTC_WRITE4(rtc_sc, RTC_INTR, RTC_INTR_ALARM2);
+	/* Start count. */
+	RTC_WRITE4(rtc_sc, RTC_CTRL, RTC_CTRL_RUN);
+}
+
+static device_method_t am335x_rtc_methods[] = {
+	DEVMETHOD(device_probe,		am335x_rtc_probe),
+	DEVMETHOD(device_attach,	am335x_rtc_attach),
+	DEVMETHOD(device_detach,	am335x_rtc_detach),
+
+	DEVMETHOD_END
+};
+
+static driver_t am335x_rtc_driver = {
+	"am335x_rtc",
+	am335x_rtc_methods,
+	sizeof(struct am335x_rtc_softc),
+};
+
+static devclass_t am335x_rtc_devclass;
+
+DRIVER_MODULE(am335x_rtc, simplebus, am335x_rtc_driver, am335x_rtc_devclass, 0, 0);
+MODULE_VERSION(am335x_rtc, 1);
+MODULE_DEPEND(am335x_rtc, simplebus, 1, 1, 1);

Copied: stable/10/sys/arm/ti/am335x/am335x_rtcreg.h (from r277042, head/sys/arm/ti/am335x/am335x_rtcreg.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/ti/am335x/am335x_rtcreg.h	Mon Feb  2 12:48:13 2015	(r278079, copy of r277042, head/sys/arm/ti/am335x/am335x_rtcreg.h)
@@ -0,0 +1,76 @@
+/*-
+ * Copyright 2015 Luiz Otavio O Souza <loos@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _AM335X_RTCREG_H_
+#define _AM335X_RTCREG_H_
+
+#define	RTC_SECONDS		0x00
+#define	RTC_MINUTES		0x04
+#define	RTC_HOURS		0x08
+#define	RTC_DAYS		0x0c
+#define	RTC_MONTHS		0x10
+#define	RTC_YEARS		0x14
+#define	RTC_WEEK		0x18
+#define	RTC_CTRL		0x40
+#define	RTC_CTRL_DISABLE		(1U << 6)
+#define	RTC_CTRL_RUN			(1U << 0)
+#define	RTC_STATUS		0x44
+#define	RTC_STATUS_ALARM2		(1U << 7)
+#define	RTC_STATUS_ALARM		(1U << 6)
+#define	RTC_STATUS_1D_EVENT		(1U << 5)
+#define	RTC_STATUS_1H_EVENT		(1U << 4)
+#define	RTC_STATUS_1M_EVENT		(1U << 3)
+#define	RTC_STATUS_1S_EVENT		(1U << 2)
+#define	RTC_STATUS_RUN			(1U << 1)
+#define	RTC_STATUS_BUSY			(1U << 0)
+#define	RTC_INTR		0x48
+#define	RTC_INTR_ALARM2			(1U << 4)
+#define	RTC_INTR_ALARM			(1U << 3)
+#define	RTC_INTR_TIMER			(1U << 2)
+#define	RTC_OSC			0x54
+#define	RTC_OSC_32KCLK_EN		(1U << 6)
+#define	RTC_OSC_OSC32K_GZ		(1U << 4)
+#define	RTC_OSC_32KCLK_SEL		(1U << 3)
+#define	RTC_OSC_RES_SELECT		(1U << 2)
+#define	RTC_OSC_SW2			(1U << 1)
+#define	RTC_OSC_SW1			(1U << 0)
+#define	RTC_KICK0R		0x6c
+#define	RTC_KICK0R_PASS			0x83e70b13
+#define	RTC_KICK1R		0x70
+#define	RTC_KICK1R_PASS			0x95a4f1e0
+#define	RTC_REVISION		0x74
+#define	RTC_ALARM2_SECONDS	0x80
+#define	RTC_ALARM2_MINUTES	0x84
+#define	RTC_ALARM2_HOURS	0x88
+#define	RTC_ALARM2_DAYS		0x8c
+#define	RTC_ALARM2_MONTHS	0x90
+#define	RTC_ALARM2_YEARS	0x94
+#define	RTC_PMIC		0x98
+#define	PMIC_PWR_ENABLE			(1U << 16)
+
+#endif /* _AM335X_RTCREG_H_ */

Copied: stable/10/sys/arm/ti/am335x/am335x_rtcvar.h (from r277042, head/sys/arm/ti/am335x/am335x_rtcvar.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/sys/arm/ti/am335x/am335x_rtcvar.h	Mon Feb  2 12:48:13 2015	(r278079, copy of r277042, head/sys/arm/ti/am335x/am335x_rtcvar.h)
@@ -0,0 +1,34 @@
+/*-
+ * Copyright 2015 Luiz Otavio O Souza <loos@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _AM335X_RTCVAR_H_
+#define _AM335X_RTCVAR_H_
+
+void am335x_rtc_pmic_pwr_toggle(void);
+
+#endif /* _AM335X_RTCVAR_H_ */

Modified: stable/10/sys/arm/ti/am335x/files.am335x
==============================================================================
--- stable/10/sys/arm/ti/am335x/files.am335x	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/arm/ti/am335x/files.am335x	Mon Feb  2 12:48:13 2015	(r278079)
@@ -8,6 +8,7 @@ arm/ti/am335x/am335x_lcd_syscons.c	optio
 arm/ti/am335x/am335x_pmic.c		optional	am335x_pmic
 arm/ti/am335x/am335x_prcm.c		standard
 arm/ti/am335x/am335x_pwm.c		standard
+arm/ti/am335x/am335x_rtc.c		optional	am335x_rtc
 arm/ti/am335x/am335x_scm_padconf.c	standard
 arm/ti/am335x/am335x_usbss.c		optional	musb fdt
 

Modified: stable/10/sys/arm/ti/ti_prcm.h
==============================================================================
--- stable/10/sys/arm/ti/ti_prcm.h	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/arm/ti/ti_prcm.h	Mon Feb  2 12:48:13 2015	(r278079)
@@ -164,6 +164,9 @@ typedef enum {
 
 	TSC_ADC_CLK = 1800,
 
+	/* RTC module */
+	RTC_CLK = 1900,
+
 	INVALID_CLK_IDENT
 
 } clk_ident_t;

Modified: stable/10/sys/boot/fdt/dts/arm/am335x.dtsi
==============================================================================
--- stable/10/sys/boot/fdt/dts/arm/am335x.dtsi	Mon Feb  2 12:36:05 2015	(r278078)
+++ stable/10/sys/boot/fdt/dts/arm/am335x.dtsi	Mon Feb  2 12:48:13 2015	(r278079)
@@ -75,6 +75,13 @@
 			interrupt-parent = <&AINTC>;
 		};
 
+		rtc: rtc@44E3E000 {
+			compatible = "ti,da830-rtc";
+			reg = <0x44E3E000 0x1000>;
+			interrupts = < 75 76 >;
+			interrupt-parent = <&AINTC>;
+		};
+
 		adc0: adc@44E0D000 {
 			compatible = "ti,adc";
 			reg = <0x44E0D000 0x2000>;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502021248.t12CmEYl050675>