svn commit: r266207 - in stable/10/sys: arm/allwinner arm/arm arm/at91 arm/broadcom/bcm2835 arm/conf arm/freescale/imx arm/freescale/vybrid arm/include arm/lpc arm/mv arm/ti/am335x dev/aic7xxx/aicasm

Ian Lepore ian at FreeBSD.org
Fri May 16 02:21:56 UTC 2014


Author: ian
Date: Fri May 16 02:21:51 2014
New Revision: 266207
URL: http://svnweb.freebsd.org/changeset/base/266207

Log:
  MFC r262534, r262548, r262549, r262552, r262568, r262581, r262583, r262584,
      r262585, r262587, r262696, r262712
  
    Replace many pasted identical definitions of cpu_initclocks() with a common
    implementation in arm/machdep.c.
  
    aicasm: Don't complain about missing prototypes to ease bootstrap issues.
  
    Vybrid: Add driver for Inter-Integrated Circuit (I2C).
  
    imx6: Initialize the Low Power Mode bits to keep the ARM cores running
    during WFI.
  
    All our current ARM multi-core systems have all cores in one package with
    a shared L2 cache, reflect that in the common cpu_topo() routine.
  
    mpcore timer: Supply a DELAY() implementation via weak linkage, so that
    SoC-specific code can supply a better implementation.
  
    imx6: Add some rudimentary voltage control.
  
    Add an armv7 implementation of cpu_sleep().
  
    Add __used attribute so that the DELAY implementation doesn't get
    optimized away as unreferenced, causing linker errors when trying to
    resolve the weak reference to the missing function.

Added:
  stable/10/sys/arm/freescale/vybrid/vf_i2c.c
     - copied, changed from r262552, head/sys/arm/freescale/vybrid/vf_i2c.c
Modified:
  stable/10/sys/arm/allwinner/timer.c
  stable/10/sys/arm/arm/cpufunc.c
  stable/10/sys/arm/arm/cpufunc_asm_armv7.S
  stable/10/sys/arm/arm/generic_timer.c
  stable/10/sys/arm/arm/machdep.c
  stable/10/sys/arm/arm/mp_machdep.c
  stable/10/sys/arm/arm/mpcore_timer.c
  stable/10/sys/arm/at91/uart_dev_at91usart.c
  stable/10/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
  stable/10/sys/arm/conf/VYBRID.common
  stable/10/sys/arm/freescale/imx/imx6_anatop.c
  stable/10/sys/arm/freescale/imx/imx6_ccm.c
  stable/10/sys/arm/freescale/imx/imx6_ccmreg.h
  stable/10/sys/arm/freescale/imx/imx_gpt.c
  stable/10/sys/arm/freescale/vybrid/files.vybrid
  stable/10/sys/arm/include/cpufunc.h
  stable/10/sys/arm/include/machdep.h
  stable/10/sys/arm/lpc/lpc_timer.c
  stable/10/sys/arm/mv/timer.c
  stable/10/sys/arm/ti/am335x/am335x_dmtimer.c
  stable/10/sys/dev/aic7xxx/aicasm/Makefile
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/arm/allwinner/timer.c
==============================================================================
--- stable/10/sys/arm/allwinner/timer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/allwinner/timer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -295,12 +295,6 @@ a10_timer_get_timerfreq(struct a10_timer
 	return (sc->timer0_freq);
 }
 
-void
-cpu_initclocks(void)
-{
-	cpu_initclocks_bsp();
-}
-
 static int
 a10_timer_hardclock(void *arg)
 {

Modified: stable/10/sys/arm/arm/cpufunc.c
==============================================================================
--- stable/10/sys/arm/arm/cpufunc.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/cpufunc.c	Fri May 16 02:21:51 2014	(r266207)
@@ -1107,7 +1107,7 @@ struct cpu_functions cortexa_cpufuncs = 
 	cpufunc_nullop,                 /* flush_brnchtgt_C     */
 	(void *)cpufunc_nullop,         /* flush_brnchtgt_E     */
 	
-	arm11_sleep,                    /* sleep                */
+	armv7_sleep,                    /* sleep                */
 	
 	/* Soft functions */
 	

Modified: stable/10/sys/arm/arm/cpufunc_asm_armv7.S
==============================================================================
--- stable/10/sys/arm/arm/cpufunc_asm_armv7.S	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/cpufunc_asm_armv7.S	Fri May 16 02:21:51 2014	(r266207)
@@ -343,3 +343,9 @@ ENTRY(armv7_idcache_inv_all)
 	bx      lr                      @ return
 END(armv7_l1cache_inv_all)
 
+ENTRY_NP(armv7_sleep)
+	dsb
+	wfi
+	bx	lr
+END(armv7_sleep)
+

Modified: stable/10/sys/arm/arm/generic_timer.c
==============================================================================
--- stable/10/sys/arm/arm/generic_timer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/generic_timer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -332,16 +332,6 @@ static devclass_t arm_tmr_devclass;
 DRIVER_MODULE(timer, simplebus, arm_tmr_driver, arm_tmr_devclass, 0, 0);
 
 void
-cpu_initclocks(void)
-{
-
-	if (PCPU_GET(cpuid) == 0)
-		cpu_initclocks_bsp();
-	else
-		cpu_initclocks_ap();
-}
-
-void
 DELAY(int usec)
 {
 	int32_t counts, counts_per_usec;

Modified: stable/10/sys/arm/arm/machdep.c
==============================================================================
--- stable/10/sys/arm/arm/machdep.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/machdep.c	Fri May 16 02:21:51 2014	(r266207)
@@ -456,6 +456,30 @@ cpu_idle_wakeup(int cpu)
 	return (0);
 }
 
+/*
+ * Most ARM platforms don't need to do anything special to init their clocks
+ * (they get intialized during normal device attachment), and by not defining a
+ * cpu_initclocks() function they get this generic one.  Any platform that needs
+ * to do something special can just provide their own implementation, which will
+ * override this one due to the weak linkage.
+ */
+void
+arm_generic_initclocks(void)
+{
+
+#ifndef NO_EVENTTIMERS
+#ifdef SMP
+	if (PCPU_GET(cpuid) == 0)
+		cpu_initclocks_bsp();
+	else
+		cpu_initclocks_ap();
+#else
+	cpu_initclocks_bsp();
+#endif
+#endif
+}
+__weak_reference(arm_generic_initclocks, cpu_initclocks);
+
 int
 fill_regs(struct thread *td, struct reg *regs)
 {

Modified: stable/10/sys/arm/arm/mp_machdep.c
==============================================================================
--- stable/10/sys/arm/arm/mp_machdep.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/mp_machdep.c	Fri May 16 02:21:51 2014	(r266207)
@@ -371,7 +371,7 @@ struct cpu_group *
 cpu_topo(void)
 {
 
-	return (smp_topo_1level(CG_SHARE_L2, 1, 0));
+	return (smp_topo_1level(CG_SHARE_L2, mp_ncpus, 0));
 }
 
 void

Modified: stable/10/sys/arm/arm/mpcore_timer.c
==============================================================================
--- stable/10/sys/arm/arm/mpcore_timer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/arm/mpcore_timer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -129,12 +129,12 @@ uint32_t platform_arm_tmr_freq = 0;
 static timecounter_get_t arm_tmr_get_timecount;
 
 static struct timecounter arm_tmr_timecount = {
-	.tc_name           = "ARM MPCore Timecounter",
+	.tc_name           = "MPCore",
 	.tc_get_timecount  = arm_tmr_get_timecount,
 	.tc_poll_pps       = NULL,
 	.tc_counter_mask   = ~0u,
 	.tc_frequency      = 0,
-	.tc_quality        = 1000,
+	.tc_quality        = 800,
 };
 
 /**
@@ -254,7 +254,7 @@ arm_tmr_probe(device_t dev)
 	if (!ofw_bus_is_compatible(dev, "arm,mpcore-timers"))
 		return (ENXIO);
 
-	device_set_desc(dev, "ARM Generic MPCore Timers");
+	device_set_desc(dev, "ARM MPCore Timers");
 	return (BUS_PROBE_DEFAULT);
 }
 
@@ -327,7 +327,7 @@ arm_tmr_attach(device_t dev)
 		return (ENXIO);
 	}
 
-	sc->et.et_name = "ARM MPCore Eventtimer";
+	sc->et.et_name = "MPCore";
 	sc->et.et_flags = ET_FLAGS_PERIODIC | ET_FLAGS_ONESHOT | ET_FLAGS_PERCPU;
 	sc->et.et_quality = 1000;
 
@@ -359,25 +359,6 @@ static devclass_t arm_tmr_devclass;
 DRIVER_MODULE(mp_tmr, simplebus, arm_tmr_driver, arm_tmr_devclass, 0, 0);
 
 /**
- *	cpu_initclocks - called by system to initialise the cpu clocks
- *
- *	This is a boilerplat function, most of the setup has already been done
- *	when the driver was attached.  Therefore this function must only be called
- *	after the driver is attached.
- *
- *	RETURNS
- *	nothing
- */
-void
-cpu_initclocks(void)
-{
-	if (PCPU_GET(cpuid) == 0)
-		cpu_initclocks_bsp();
-	else
-		cpu_initclocks_ap();
-}
-
-/**
  *	DELAY - Delay for at least usec microseconds.
  *	@usec: number of microseconds to delay by
  *
@@ -388,8 +369,8 @@ cpu_initclocks(void)
  *	RETURNS:
  *	nothing
  */
-void
-DELAY(int usec)
+static void __used /* Must emit function code for the weak ref below. */
+arm_tmr_DELAY(int usec)
 {
 	int32_t counts_per_usec;
 	int32_t counts;
@@ -427,3 +408,11 @@ DELAY(int usec)
 		first = last;
 	}
 }
+
+/*
+ * Supply a DELAY() implementation via weak linkage.  A platform may want to use
+ * the mpcore per-cpu eventtimers but provide its own DELAY() routine,
+ * especially when the core frequency can change on the fly.
+ */
+__weak_reference(arm_tmr_DELAY, DELAY);
+

Modified: stable/10/sys/arm/at91/uart_dev_at91usart.c
==============================================================================
--- stable/10/sys/arm/at91/uart_dev_at91usart.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/at91/uart_dev_at91usart.c	Fri May 16 02:21:51 2014	(r266207)
@@ -279,7 +279,7 @@ at91_usart_init(struct uart_bas *bas, in
 	 * we don't want to hang here forever if the hardware is in a bad state.
 	 */
 	if (!(RD4(bas, USART_CSR) & USART_CSR_TXRDY))
-	    DELAY(1000);
+		DELAY(10000);
 
 	at91_usart_param(bas, baudrate, databits, stopbits, parity);
 

Modified: stable/10/sys/arm/broadcom/bcm2835/bcm2835_systimer.c
==============================================================================
--- stable/10/sys/arm/broadcom/bcm2835/bcm2835_systimer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/broadcom/bcm2835/bcm2835_systimer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -278,12 +278,6 @@ static devclass_t bcm_systimer_devclass;
 DRIVER_MODULE(bcm_systimer, simplebus, bcm_systimer_driver, bcm_systimer_devclass, 0, 0);
 
 void
-cpu_initclocks(void)
-{
-	cpu_initclocks_bsp();
-}
-
-void
 DELAY(int usec)
 {
 	int32_t counts;

Modified: stable/10/sys/arm/conf/VYBRID.common
==============================================================================
--- stable/10/sys/arm/conf/VYBRID.common	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/conf/VYBRID.common	Fri May 16 02:21:51 2014	(r266207)
@@ -124,8 +124,8 @@ device		nand
 device		uart
 
 # I2C (TWSI)
-#device		iic
-#device		iicbus
+device		iic
+device		iicbus
 
 # Ethernet
 device		ether

Modified: stable/10/sys/arm/freescale/imx/imx6_anatop.c
==============================================================================
--- stable/10/sys/arm/freescale/imx/imx6_anatop.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/freescale/imx/imx6_anatop.c	Fri May 16 02:21:51 2014	(r266207)
@@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus_subr.h>
 
 #include <machine/bus.h>
+#include <machine/fdt.h>
 
 #include <arm/freescale/fsl_ocotpreg.h>
 #include <arm/freescale/fsl_ocotpvar.h>
@@ -85,8 +86,11 @@ struct imx6_anatop_softc {
 	struct resource	*res[2];
 	uint32_t	cpu_curhz;
 	uint32_t	cpu_curmhz;
+	uint32_t	cpu_curmv;
 	uint32_t	cpu_minhz;
+	uint32_t	cpu_minmv;
 	uint32_t	cpu_maxhz;
+	uint32_t	cpu_maxmv;
 	uint32_t	refosc_hz;
 	void		*temp_intrhand;
 	uint32_t	temp_high_val;
@@ -103,12 +107,15 @@ struct imx6_anatop_softc {
 static struct imx6_anatop_softc *imx6_anatop_sc;
 
 /*
- * Table of CPU max frequencies.  This is indexed by the max frequency value
- * (0-3) from the ocotp CFG3 register.
+ * Tables of CPU max frequencies and corresponding voltages.  This is indexed by
+ * the max frequency value (0-3) from the ocotp CFG3 register.
  */
 static uint32_t imx6_cpu_maxhz_tab[] = {
 	 792000000, 852000000, 996000000, 1200000000
 };
+static uint32_t imx6_cpu_millivolt_tab[] = {
+	1150, 1225, 1225, 1275
+};
 
 #define	TZ_ZEROC	2732	/* deci-Kelvin <-> deci-Celcius offset. */
 
@@ -130,6 +137,64 @@ imx6_anatop_write_4(bus_size_t offset, u
 	bus_write_4(imx6_anatop_sc->res[MEMRES], offset, value);
 }
 
+static void
+vdd_set(struct imx6_anatop_softc *sc, int mv)
+{
+	int newtarg, oldtarg;
+	uint32_t delay, pmureg;
+	static boolean_t init_done = false;
+
+	/*
+	 * The datasheet says VDD_PU and VDD_SOC must be equal, and VDD_ARM
+	 * can't be more than 50mV above or 200mV below them.  For now to keep
+	 * things simple we set all three to the same value.
+	 */
+
+	pmureg = imx6_anatop_read_4(IMX6_ANALOG_PMU_REG_CORE);
+	oldtarg = pmureg & IMX6_ANALOG_PMU_REG0_TARG_MASK;
+
+	/* Convert mV to target value.  Clamp target to valid range. */
+	if (mv < 725)
+		newtarg = 0x00;
+	else if (mv > 1450)
+		newtarg = 0x1F;
+	else
+		newtarg = (mv - 700) / 25;
+
+	/*
+	 * The first time through the 3 voltages might not be equal so use a
+	 * long conservative delay.  After that we need to delay 3uS for every
+	 * 25mV step upward.  No need to delay at all when lowering.
+	 */
+	if (init_done) {
+		if (newtarg == oldtarg)
+			return;
+		else if (newtarg > oldtarg)
+			delay = (newtarg - oldtarg) * 3;
+		else
+			delay = 0;
+	} else {
+		delay = 700 / 25 * 3;
+		init_done = true;
+	}
+
+	/*
+	 * Make the change and wait for it to take effect.
+	 */
+	pmureg &= ~(IMX6_ANALOG_PMU_REG0_TARG_MASK |
+	    IMX6_ANALOG_PMU_REG1_TARG_MASK |
+	    IMX6_ANALOG_PMU_REG2_TARG_MASK);
+
+	pmureg |= newtarg << IMX6_ANALOG_PMU_REG0_TARG_SHIFT;
+	pmureg |= newtarg << IMX6_ANALOG_PMU_REG1_TARG_SHIFT;
+	pmureg |= newtarg << IMX6_ANALOG_PMU_REG2_TARG_SHIFT;
+
+	imx6_anatop_write_4(IMX6_ANALOG_PMU_REG_CORE, pmureg);
+	DELAY(delay);
+	sc->cpu_curmv = newtarg * 25 + 700;
+	device_printf(sc->dev, "voltage set to %u\n", sc->cpu_curmv);
+}
+
 static inline uint32_t
 cpufreq_hz_from_div(struct imx6_anatop_softc *sc, uint32_t div)
 {
@@ -231,7 +296,9 @@ cpufreq_initialize(struct imx6_anatop_so
 	    FSL_OCOTP_CFG3_SPEED_MASK) >> FSL_OCOTP_CFG3_SPEED_SHIFT;
 
 	sc->cpu_minhz = cpufreq_actual_hz(sc, imx6_cpu_maxhz_tab[0]);
+	sc->cpu_minmv = imx6_cpu_millivolt_tab[0];
 	sc->cpu_maxhz = cpufreq_actual_hz(sc, imx6_cpu_maxhz_tab[cfg3speed]);
+	sc->cpu_maxmv = imx6_cpu_millivolt_tab[cfg3speed];
 
 	/*
 	 * Set the CPU to maximum speed.
@@ -241,6 +308,7 @@ cpufreq_initialize(struct imx6_anatop_so
 	 * basically assumes that a single core can't overheat before interrupts
 	 * are enabled; empirical testing shows that to be a safe assumption.
 	 */
+	vdd_set(sc, sc->cpu_maxmv);
 	cpufreq_set_clock(sc, sc->cpu_maxhz);
 	device_printf(sc->dev, "CPU frequency %uMHz\n", sc->cpu_curmhz);
 }
@@ -321,6 +389,7 @@ tempmon_gofast(struct imx6_anatop_softc 
 {
 
 	if (sc->cpu_curhz < sc->cpu_maxhz) {
+		vdd_set(sc, sc->cpu_maxmv);
 		cpufreq_set_clock(sc, sc->cpu_maxhz);
 	}
 }
@@ -331,6 +400,7 @@ tempmon_goslow(struct imx6_anatop_softc 
 
 	if (sc->cpu_curhz > sc->cpu_minhz) {
 		cpufreq_set_clock(sc, sc->cpu_minhz);
+		vdd_set(sc, sc->cpu_minmv);
 	}
 }
 
@@ -451,6 +521,11 @@ imx6_anatop_attach(device_t dev)
 	if (err != 0)
 		goto out;
 
+	SYSCTL_ADD_UINT(device_get_sysctl_ctx(sc->dev),
+	    SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)),
+	    OID_AUTO, "cpu_voltage", CTLFLAG_RD,
+	    &sc->cpu_curmv, 0, "Current CPU voltage in millivolts");
+
 	imx6_anatop_sc = sc;
 
 	/*

Modified: stable/10/sys/arm/freescale/imx/imx6_ccm.c
==============================================================================
--- stable/10/sys/arm/freescale/imx/imx6_ccm.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/freescale/imx/imx6_ccm.c	Fri May 16 02:21:51 2014	(r266207)
@@ -92,6 +92,7 @@ ccm_attach(device_t dev)
 {
 	struct ccm_softc *sc;
 	int err, rid;
+	uint32_t reg;
 
 	sc = device_get_softc(dev);
 	err = 0;
@@ -107,6 +108,26 @@ ccm_attach(device_t dev)
 	}
 
 	ccm_sc = sc;
+
+	/*
+	 * Configure the Low Power Mode setting to leave the ARM core power on
+	 * when a WFI instruction is executed.  This lets the MPCore timers and
+	 * GIC continue to run, which is helpful when the only thing that can
+	 * wake you up is an MPCore Private Timer interrupt delivered via GIC.
+	 *
+	 * XXX Based on the docs, setting CCM_CGPR_INT_MEM_CLK_LPM shouldn't be
+	 * required when the LPM bits are set to LPM_RUN.  But experimentally
+	 * I've experienced a fairly rare lockup when not setting it.  I was
+	 * unable to prove conclusively that the lockup was related to power
+	 * management or that this definitively fixes it.  Revisit this.
+	 */
+	reg = RD4(sc, CCM_CGPR);
+	reg |= CCM_CGPR_INT_MEM_CLK_LPM;
+	WR4(sc, CCM_CGPR, reg);
+	reg = RD4(sc, CCM_CLPCR);
+	reg = (reg & ~CCM_CLPCR_LPM_MASK) | CCM_CLPCR_LPM_RUN;
+	WR4(sc, CCM_CLPCR, reg);
+
 	err = 0;
 
 out:

Modified: stable/10/sys/arm/freescale/imx/imx6_ccmreg.h
==============================================================================
--- stable/10/sys/arm/freescale/imx/imx6_ccmreg.h	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/freescale/imx/imx6_ccmreg.h	Fri May 16 02:21:51 2014	(r266207)
@@ -29,13 +29,20 @@
 #ifndef	IMX6_CCMREG_H
 #define	IMX6_CCMREG_H
 
-#define	CCM_CCGR1		0x06C
-#define	CCM_CCGR2		0x070
-#define	CCM_CCGR3		0x074
-#define	CCM_CCGR4		0x078
-#define	CCM_CCGR5		0x07C
-#define	CCM_CCGR6		0x080
-#define	CCM_CMEOR		0x088
+#define	CCM_CLPCR			0x054
+#define	  CCM_CLPCR_LPM_MASK		  0x03
+#define	  CCM_CLPCR_LPM_RUN		  0x00
+#define	  CCM_CLPCR_LPM_WAIT		  0x01
+#define	  CCM_CLPCR_LPM_STOP		  0x02
+#define	CCM_CGPR			0x064
+#define	  CCM_CGPR_INT_MEM_CLK_LPM	  (1 << 17)
+#define	CCM_CCGR1			0x06C
+#define	CCM_CCGR2			0x070
+#define	CCM_CCGR3			0x074
+#define	CCM_CCGR4			0x078
+#define	CCM_CCGR5			0x07C
+#define	CCM_CCGR6			0x080
+#define	CCM_CMEOR			0x088
                   
 
 #endif

Modified: stable/10/sys/arm/freescale/imx/imx_gpt.c
==============================================================================
--- stable/10/sys/arm/freescale/imx/imx_gpt.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/freescale/imx/imx_gpt.c	Fri May 16 02:21:51 2014	(r266207)
@@ -319,17 +319,6 @@ imx_gpt_get_timerfreq(struct imx_gpt_sof
 	return (sc->clkfreq);
 }
 
-void
-cpu_initclocks(void)
-{
-
-	if (imx_gpt_sc == NULL) {
-		panic("%s: i.MX GPT driver has not been initialized!", __func__);
-	}
-
-	cpu_initclocks_bsp();
-}
-
 static int
 imx_gpt_intr(void *arg)
 {

Modified: stable/10/sys/arm/freescale/vybrid/files.vybrid
==============================================================================
--- stable/10/sys/arm/freescale/vybrid/files.vybrid	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/freescale/vybrid/files.vybrid	Fri May 16 02:21:51 2014	(r266207)
@@ -23,6 +23,7 @@ arm/freescale/vybrid/vf_mscm.c			standar
 arm/freescale/vybrid/vf_src.c			standard
 arm/freescale/vybrid/vf_edma.c			standard
 arm/freescale/vybrid/vf_dmamux.c		standard
+arm/freescale/vybrid/vf_i2c.c			optional	iicbus
 arm/freescale/vybrid/vf_tcon.c			optional	vt
 arm/freescale/vybrid/vf_dcu4.c			optional	vt
 arm/freescale/vybrid/vf_nfc.c			optional	nand

Copied and modified: stable/10/sys/arm/freescale/vybrid/vf_i2c.c (from r262552, head/sys/arm/freescale/vybrid/vf_i2c.c)
==============================================================================
--- head/sys/arm/freescale/vybrid/vf_i2c.c	Thu Feb 27 09:59:15 2014	(r262552, copy source)
+++ stable/10/sys/arm/freescale/vybrid/vf_i2c.c	Fri May 16 02:21:51 2014	(r266207)
@@ -104,11 +104,9 @@ struct i2c_softc {
 	struct resource		*res[2];
 	bus_space_tag_t		bst;
 	bus_space_handle_t	bsh;
-	void			*ih;
 	device_t		dev;
 	device_t		iicbus;
 	struct mtx		mutex;
-	int			ibif;
 };
 
 static struct resource_spec i2c_spec[] = {
@@ -117,19 +115,6 @@ static struct resource_spec i2c_spec[] =
 	{ -1, 0 }
 };
 
-static void
-i2c_intr(void *arg)
-{
-	struct i2c_softc *sc;
-
-	sc = arg;
-
-	if (READ1(sc, I2C_IBSR) & IBSR_IBIF) {
-		WRITE1(sc, I2C_IBSR, IBSR_IBIF);
-		sc->ibif = 1;
-	}
-}
-
 static int
 i2c_probe(device_t dev)
 {
@@ -148,7 +133,6 @@ static int
 i2c_attach(device_t dev)
 {
 	struct i2c_softc *sc;
-	int err;
 
 	sc = device_get_softc(dev);
 	sc->dev = dev;
@@ -164,14 +148,6 @@ i2c_attach(device_t dev)
 	sc->bst = rman_get_bustag(sc->res[0]);
 	sc->bsh = rman_get_bushandle(sc->res[0]);
 
-	/* Setup interrupt handler */
-	err = bus_setup_intr(dev, sc->res[1], INTR_TYPE_BIO | INTR_MPSAFE,
-	    NULL, i2c_intr, sc, &sc->ih);
-	if (err) {
-		device_printf(dev, "Unable to alloc interrupt resource.\n");
-		return (ENXIO);
-	}
-
 	WRITE1(sc, I2C_IBIC, IBIC_BIIE);
 
 	sc->iicbus = device_add_child(dev, "iicbus", -1);
@@ -194,8 +170,10 @@ wait_for_iif(struct i2c_softc *sc)
 
 	retry = 1000;
 	while (retry --) {
-		if (sc->ibif == 1)
+		if (READ1(sc, I2C_IBSR) & IBSR_IBIF) {
+			WRITE1(sc, I2C_IBSR, IBSR_IBIF);
 			return (IIC_NOERR);
+		}
 		DELAY(10);
 	}
 
@@ -227,8 +205,10 @@ wait_for_icf(struct i2c_softc *sc)
 	retry = 1000;
 	while (retry --) {
 		if (READ1(sc, I2C_IBSR) & IBSR_TCF) {
-			if (sc->ibif == 1)
+			if (READ1(sc, I2C_IBSR) & IBSR_IBIF) {
+				WRITE1(sc, I2C_IBSR, IBSR_IBIF);
 				return (IIC_NOERR);
+			}
 		}
 		DELAY(10);
 	}
@@ -265,8 +245,6 @@ i2c_repeated_start(device_t dev, u_char 
 
 	DELAY(10);
 
-	sc->ibif = 0;
-
 	/* Write target address - LSB is R/W bit */
 	WRITE1(sc, I2C_IBDR, slave);
 
@@ -310,8 +288,6 @@ i2c_start(device_t dev, u_char slave, in
 	reg |= (IBCR_TXRX);
 	WRITE1(sc, I2C_IBCR, reg);
 
-	sc->ibif = 0;
-
 	/* Write target address - LSB is R/W bit */
 	WRITE1(sc, I2C_IBDR, slave);
 
@@ -407,7 +383,6 @@ i2c_read(device_t dev, char *buf, int le
 			WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_MSSL);
 
 		/* dummy read */
-		sc->ibif = 0;
 		READ1(sc, I2C_IBDR);
 		DELAY(1000);
 	}
@@ -430,7 +405,6 @@ i2c_read(device_t dev, char *buf, int le
 			WRITE1(sc, I2C_IBCR, IBCR_IBIE | IBCR_NOACK);
 		}
 
-		sc->ibif = 0;
 		*buf++ = READ1(sc, I2C_IBDR);
 		(*read)++;
 	}
@@ -453,7 +427,6 @@ i2c_write(device_t dev, const char *buf,
 
 	mtx_lock(&sc->mutex);
 	while (*sent < len) {
-		sc->ibif = 0;
 
 		WRITE1(sc, I2C_IBDR, *buf++);
 

Modified: stable/10/sys/arm/include/cpufunc.h
==============================================================================
--- stable/10/sys/arm/include/cpufunc.h	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/include/cpufunc.h	Fri May 16 02:21:51 2014	(r266207)
@@ -523,6 +523,7 @@ void	armv7_setup			(char *string);
 void	armv7_context_switch		(void);
 void	armv7_drain_writebuf		(void);
 void	armv7_sev			(void);
+void	armv7_sleep			(int unused);
 u_int	armv7_auxctrl			(u_int, u_int);
 void	pj4bv7_setup			(char *string);
 void	pj4b_config			(void);

Modified: stable/10/sys/arm/include/machdep.h
==============================================================================
--- stable/10/sys/arm/include/machdep.h	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/include/machdep.h	Fri May 16 02:21:51 2014	(r266207)
@@ -32,6 +32,7 @@ vm_offset_t freebsd_parse_boot_param(str
 vm_offset_t linux_parse_boot_param(struct arm_boot_params *abp);
 vm_offset_t fake_preload_metadata(struct arm_boot_params *abp);
 vm_offset_t parse_boot_param(struct arm_boot_params *abp);
+void arm_generic_initclocks(void);
 
 /*
  * Initialization functions called by the common initarm() function in

Modified: stable/10/sys/arm/lpc/lpc_timer.c
==============================================================================
--- stable/10/sys/arm/lpc/lpc_timer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/lpc/lpc_timer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -280,12 +280,6 @@ lpc_get_timecount(struct timecounter *tc
 }
 
 void
-cpu_initclocks(void)
-{
-	cpu_initclocks_bsp();
-}
-
-void
 DELAY(int usec)
 {
 	uint32_t counter;

Modified: stable/10/sys/arm/mv/timer.c
==============================================================================
--- stable/10/sys/arm/mv/timer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/mv/timer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -224,13 +224,6 @@ mv_timer_get_timecount(struct timecounte
 }
 
 void
-cpu_initclocks(void)
-{
-
-	cpu_initclocks_bsp();
-}
-
-void
 DELAY(int usec)
 {
 	uint32_t	val, val_temp;

Modified: stable/10/sys/arm/ti/am335x/am335x_dmtimer.c
==============================================================================
--- stable/10/sys/arm/ti/am335x/am335x_dmtimer.c	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/arm/ti/am335x/am335x_dmtimer.c	Fri May 16 02:21:51 2014	(r266207)
@@ -662,12 +662,6 @@ DRIVER_MODULE(am335x_dmtimer, simplebus,
 MODULE_DEPEND(am335x_dmtimer, am335x_prcm, 1, 1, 1);
 
 void
-cpu_initclocks(void)
-{
-	cpu_initclocks_bsp();
-}
-
-void
 DELAY(int usec)
 {
 	struct am335x_dmtimer_softc *sc;

Modified: stable/10/sys/dev/aic7xxx/aicasm/Makefile
==============================================================================
--- stable/10/sys/dev/aic7xxx/aicasm/Makefile	Fri May 16 01:50:04 2014	(r266206)
+++ stable/10/sys/dev/aic7xxx/aicasm/Makefile	Fri May 16 02:21:51 2014	(r266207)
@@ -39,3 +39,4 @@ LFLAGS+= -d
 .endif
 
 .include <bsd.prog.mk>
+CFLAGS+= -Wno-missing-prototypes


More information about the svn-src-all mailing list