Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jan 2015 05:56:28 +0000 (UTC)
From:      Garrett Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r277724 - in projects/building-blocks: sbin/ipfw sys/amd64/amd64 sys/arm/ti sys/arm/ti/am335x sys/dev/mps sys/kern
Message-ID:  <201501260556.t0Q5uSXM035456@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Mon Jan 26 05:56:27 2015
New Revision: 277724
URL: https://svnweb.freebsd.org/changeset/base/277724

Log:
  MFhead @ r277723

Modified:
  projects/building-blocks/sbin/ipfw/nat.c
  projects/building-blocks/sys/amd64/amd64/machdep.c
  projects/building-blocks/sys/arm/ti/am335x/am335x_lcd.c
  projects/building-blocks/sys/arm/ti/am335x/files.am335x
  projects/building-blocks/sys/arm/ti/ti_i2c.c
  projects/building-blocks/sys/dev/mps/mps.c
  projects/building-blocks/sys/dev/mps/mps_user.c
  projects/building-blocks/sys/kern/kern_timeout.c
  projects/building-blocks/sys/kern/vfs_subr.c
Directory Properties:
  projects/building-blocks/   (props changed)
  projects/building-blocks/sbin/   (props changed)
  projects/building-blocks/sbin/ipfw/   (props changed)
  projects/building-blocks/sys/   (props changed)

Modified: projects/building-blocks/sbin/ipfw/nat.c
==============================================================================
--- projects/building-blocks/sbin/ipfw/nat.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sbin/ipfw/nat.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -163,9 +163,9 @@ set_addr_dynamic(const char *ifn, struct
 		}
 	}
 	if (sin == NULL)
-		errx(1, "%s: cannot get interface address", ifn);
-
-	n->ip = sin->sin_addr;
+		n->ip.s_addr = htonl(INADDR_ANY);
+	else
+		n->ip = sin->sin_addr;
 	strncpy(n->if_name, ifn, IF_NAMESIZE);
 
 	free(buf);

Modified: projects/building-blocks/sys/amd64/amd64/machdep.c
==============================================================================
--- projects/building-blocks/sys/amd64/amd64/machdep.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/amd64/amd64/machdep.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -1557,6 +1557,8 @@ native_parse_memmap(caddr_t kmdp, vm_pad
 	}
 }
 
+#define	PAGES_PER_GB	(1024 * 1024 * 1024 / PAGE_SIZE)
+
 /*
  * Populate the (physmap) array with base/bound pairs describing the
  * available physical memory in the system, then test this memory and
@@ -1575,6 +1577,7 @@ getmemsize(caddr_t kmdp, u_int64_t first
 	u_long physmem_start, physmem_tunable, memtest;
 	pt_entry_t *pte;
 	quad_t dcons_addr, dcons_size;
+	int page_counter;
 
 	bzero(physmap, sizeof(physmap));
 	basemem = 0;
@@ -1678,6 +1681,9 @@ getmemsize(caddr_t kmdp, u_int64_t first
 	 * physmap is in bytes, so when converting to page boundaries,
 	 * round up the start address and round down the end address.
 	 */
+	page_counter = 0;
+	if (memtest != 0)
+		printf("Testing system memory");
 	for (i = 0; i <= physmap_idx; i += 2) {
 		vm_paddr_t end;
 
@@ -1708,6 +1714,14 @@ getmemsize(caddr_t kmdp, u_int64_t first
 				goto skip_memtest;
 
 			/*
+			 * Print a "." every GB to show we're making
+			 * progress.
+			 */
+			page_counter++;
+			if ((page_counter % PAGES_PER_GB) == 0)
+				printf(".");
+
+			/*
 			 * map page into kernel: valid, read/write,non-cacheable
 			 */
 			*pte = pa | PG_V | PG_RW | PG_NC_PWT | PG_NC_PCD;
@@ -1794,6 +1808,8 @@ do_next:
 	}
 	*pte = 0;
 	invltlb();
+	if (memtest != 0)
+		printf("\n");
 
 	/*
 	 * XXX

Modified: projects/building-blocks/sys/arm/ti/am335x/am335x_lcd.c
==============================================================================
--- projects/building-blocks/sys/arm/ti/am335x/am335x_lcd.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/arm/ti/am335x/am335x_lcd.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -27,6 +27,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_syscons.h"
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -41,8 +42,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/sysctl.h>
 #include <vm/vm.h>
 #include <vm/pmap.h>
-
-/* syscons bits */
 #include <sys/fbio.h>
 #include <sys/consio.h>
 
@@ -54,7 +53,11 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/ofw_bus_subr.h>
 
 #include <dev/fb/fbreg.h>
+#ifdef DEV_SC
 #include <dev/syscons/syscons.h>
+#else /* VT */
+#include <dev/vt/vt.h>
+#endif
 
 #include <arm/ti/ti_prcm.h>
 #include <arm/ti/ti_scm.h>
@@ -62,6 +65,8 @@ __FBSDID("$FreeBSD$");
 #include "am335x_lcd.h"
 #include "am335x_pwm.h"
 
+#include "fb_if.h"
+
 #define	LCD_PID			0x00
 #define	LCD_CTRL		0x04
 #define		CTRL_DIV_MASK		0xff
@@ -178,6 +183,7 @@ __FBSDID("$FreeBSD$");
 
 struct am335x_lcd_softc {
 	device_t		sc_dev;
+	struct fb_info		sc_fb_info;
 	struct resource		*sc_mem_res;
 	struct resource		*sc_irq_res;
 	void			*sc_intr_hl;
@@ -410,7 +416,9 @@ done:
 static int
 am335x_lcd_probe(device_t dev)
 {
+#ifdef DEV_SC
 	int err;
+#endif
 
 	if (!ofw_bus_status_okay(dev))
 		return (ENXIO);
@@ -420,10 +428,12 @@ am335x_lcd_probe(device_t dev)
 
 	device_set_desc(dev, "AM335x LCD controller");
 
+#ifdef DEV_SC
 	err = sc_probe_unit(device_get_unit(dev), 
 	    device_get_flags(dev) | SC_AUTODETECT_KBD);
 	if (err != 0)
 		return (err);
+#endif
 
 	return (BUS_PROBE_DEFAULT);
 }
@@ -670,6 +680,16 @@ am335x_lcd_attach(device_t dev)
 	    PWM_PERIOD, PWM_PERIOD) == 0)
 		sc->sc_backlight = 100;
 
+	sc->sc_fb_info.fb_name = device_get_nameunit(sc->sc_dev);
+	sc->sc_fb_info.fb_vbase = (intptr_t)sc->sc_fb_base;
+	sc->sc_fb_info.fb_pbase = sc->sc_fb_phys;
+	sc->sc_fb_info.fb_size = sc->sc_fb_size;
+	sc->sc_fb_info.fb_bpp = sc->sc_fb_info.fb_depth = panel.bpp;
+	sc->sc_fb_info.fb_stride = panel.panel_width*panel.bpp / 8;
+	sc->sc_fb_info.fb_width = panel.panel_width;
+	sc->sc_fb_info.fb_height = panel.panel_height;
+
+#ifdef	DEV_SC
 	err = (sc_attach_unit(device_get_unit(dev),
 	    device_get_flags(dev) | SC_AUTODETECT_KBD));
 
@@ -679,6 +699,18 @@ am335x_lcd_attach(device_t dev)
 	}
 
 	am335x_lcd_syscons_setup((vm_offset_t)sc->sc_fb_base, sc->sc_fb_phys, &panel);
+#else /* VT */
+	device_t fbd = device_add_child(dev, "fbd",
+	device_get_unit(dev));
+	if (fbd == NULL) {
+		device_printf(dev, "Failed to add fbd child\n");
+		goto fail;
+	}
+	if (device_probe_and_attach(fbd) != 0) {
+		device_printf(dev, "Failed to attach fbd device\n");
+		goto fail;
+	}
+#endif
 
 	return (0);
 
@@ -693,16 +725,29 @@ am335x_lcd_detach(device_t dev)
 	return (EBUSY);
 }
 
+static struct fb_info *
+am335x_lcd_fb_getinfo(device_t dev)
+{
+	struct am335x_lcd_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	return (&sc->sc_fb_info);
+}
+
 static device_method_t am335x_lcd_methods[] = {
 	DEVMETHOD(device_probe,		am335x_lcd_probe),
 	DEVMETHOD(device_attach,	am335x_lcd_attach),
 	DEVMETHOD(device_detach,	am335x_lcd_detach),
 
+	/* Framebuffer service methods */
+	DEVMETHOD(fb_getinfo,		am335x_lcd_fb_getinfo),
+
 	DEVMETHOD_END
 };
 
 static driver_t am335x_lcd_driver = {
-	"am335x_lcd",
+	"fb",
 	am335x_lcd_methods,
 	sizeof(struct am335x_lcd_softc),
 };

Modified: projects/building-blocks/sys/arm/ti/am335x/files.am335x
==============================================================================
--- projects/building-blocks/sys/arm/ti/am335x/files.am335x	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/arm/ti/am335x/files.am335x	Mon Jan 26 05:56:27 2015	(r277724)
@@ -4,7 +4,7 @@ arm/ti/aintc.c				standard
 
 arm/ti/am335x/am335x_dmtimer.c		standard
 arm/ti/am335x/am335x_gpio.c		optional	gpio
-arm/ti/am335x/am335x_lcd.c		optional	sc
+arm/ti/am335x/am335x_lcd.c		optional	sc | vt
 arm/ti/am335x/am335x_lcd_syscons.c	optional	sc
 arm/ti/am335x/am335x_pmic.c		optional	am335x_pmic
 arm/ti/am335x/am335x_prcm.c		standard

Modified: projects/building-blocks/sys/arm/ti/ti_i2c.c
==============================================================================
--- projects/building-blocks/sys/arm/ti/ti_i2c.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/arm/ti/ti_i2c.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -95,6 +95,7 @@ struct ti_i2c_softc
 	int			sc_buffer_pos;
 	int			sc_error;
 	int			sc_fifo_trsh;
+	int			sc_timeout;
 
 	uint16_t		sc_con_reg;
 	uint16_t		sc_rev;
@@ -442,7 +443,7 @@ ti_i2c_transfer(device_t dev, struct iic
 		ti_i2c_write_2(sc, I2C_REG_CON, reg);
 
 		/* Wait for an event. */
-		err = mtx_sleep(sc, &sc->sc_mtx, 0, "i2ciowait", hz);
+		err = mtx_sleep(sc, &sc->sc_mtx, 0, "i2ciowait", sc->sc_timeout);
 		if (err == 0)
 			err = sc->sc_error;
 
@@ -761,12 +762,10 @@ ti_i2c_deactivate(device_t dev)
 static int
 ti_i2c_sysctl_clk(SYSCTL_HANDLER_ARGS)
 {
-	device_t dev;
 	int clk, psc, sclh, scll;
 	struct ti_i2c_softc *sc;
 
-	dev = (device_t)arg1;
-	sc = device_get_softc(dev);
+	sc = arg1;
 
 	TI_I2C_LOCK(sc);
 	/* Get the system prescaler value. */
@@ -783,6 +782,34 @@ ti_i2c_sysctl_clk(SYSCTL_HANDLER_ARGS)
 }
 
 static int
+ti_i2c_sysctl_timeout(SYSCTL_HANDLER_ARGS)
+{
+	struct ti_i2c_softc *sc;
+	unsigned int val;
+	int err;
+
+	sc = arg1;
+
+	/* 
+	 * MTX_DEF lock can't be held while doing uimove in
+	 * sysctl_handle_int
+	 */
+	TI_I2C_LOCK(sc);
+	val = sc->sc_timeout;
+	TI_I2C_UNLOCK(sc);
+
+	err = sysctl_handle_int(oidp, &val, 0, req);
+	/* Write request? */
+	if ((err == 0) && (req->newptr != NULL)) {
+		TI_I2C_LOCK(sc);
+		sc->sc_timeout = val;
+		TI_I2C_UNLOCK(sc);
+	}
+
+	return (err);
+}
+
+static int
 ti_i2c_probe(device_t dev)
 {
 
@@ -858,12 +885,19 @@ ti_i2c_attach(device_t dev)
 	/* Set the FIFO threshold to 5 for now. */
 	sc->sc_fifo_trsh = 5;
 
+	/* Set I2C bus timeout */
+	sc->sc_timeout = 5*hz;
+
 	ctx = device_get_sysctl_ctx(dev);
 	tree = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
 	SYSCTL_ADD_PROC(ctx, tree, OID_AUTO, "i2c_clock",
-	    CTLFLAG_RD | CTLTYPE_UINT | CTLFLAG_MPSAFE, dev, 0,
+	    CTLFLAG_RD | CTLTYPE_UINT | CTLFLAG_MPSAFE, sc, 0,
 	    ti_i2c_sysctl_clk, "IU", "I2C bus clock");
 
+	SYSCTL_ADD_PROC(ctx, tree, OID_AUTO, "i2c_timeout",
+	    CTLFLAG_RW | CTLTYPE_UINT | CTLFLAG_MPSAFE, sc, 0,
+	    ti_i2c_sysctl_timeout, "IU", "I2C bus timeout (in ticks)");
+
 	/* Activate the interrupt. */
 	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
 	    NULL, ti_i2c_intr, sc, &sc->sc_irq_h);

Modified: projects/building-blocks/sys/dev/mps/mps.c
==============================================================================
--- projects/building-blocks/sys/dev/mps/mps.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/dev/mps/mps.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -2621,9 +2621,12 @@ mps_read_config_page(struct mps_softc *s
 
 	cm->cm_data = params->buffer;
 	cm->cm_length = params->length;
-	cm->cm_sge = &req->PageBufferSGE;
-	cm->cm_sglsize = sizeof(MPI2_SGE_IO_UNION);
-	cm->cm_flags = MPS_CM_FLAGS_SGE_SIMPLE | MPS_CM_FLAGS_DATAIN;
+	if (cm->cm_data != NULL) {
+		cm->cm_sge = &req->PageBufferSGE;
+		cm->cm_sglsize = sizeof(MPI2_SGE_IO_UNION);
+		cm->cm_flags = MPS_CM_FLAGS_SGE_SIMPLE | MPS_CM_FLAGS_DATAIN;
+	} else
+		cm->cm_sge = NULL;
 	cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
 
 	cm->cm_complete_data = params;
@@ -2680,9 +2683,12 @@ mps_config_complete(struct mps_softc *sc
 		goto done;
 	}
 	params->status = reply->IOCStatus;
-	if (params->hdr.Ext.ExtPageType != 0) {
+	if (params->hdr.Struct.PageType == MPI2_CONFIG_PAGETYPE_EXTENDED) {
 		params->hdr.Ext.ExtPageType = reply->ExtPageType;
 		params->hdr.Ext.ExtPageLength = reply->ExtPageLength;
+		params->hdr.Ext.PageType = reply->Header.PageType;
+		params->hdr.Ext.PageNumber = reply->Header.PageNumber;
+		params->hdr.Ext.PageVersion = reply->Header.PageVersion;
 	} else {
 		params->hdr.Struct.PageType = reply->Header.PageType;
 		params->hdr.Struct.PageNumber = reply->Header.PageNumber;

Modified: projects/building-blocks/sys/dev/mps/mps_user.c
==============================================================================
--- projects/building-blocks/sys/dev/mps/mps_user.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/dev/mps/mps_user.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -309,6 +309,10 @@ mps_user_read_extcfg_header(struct mps_s
 	hdr->PageNumber = ext_page_req->header.PageNumber;
 	hdr->ExtPageType = ext_page_req->header.ExtPageType;
 	params.page_address = le32toh(ext_page_req->page_address);
+	params.buffer = NULL;
+	params.length = 0;
+	params.callback = NULL;
+
 	if ((error = mps_read_config_page(sc, &params)) != 0) {
 		/*
 		 * Leave the request. Without resetting the chip, it's

Modified: projects/building-blocks/sys/kern/kern_timeout.c
==============================================================================
--- projects/building-blocks/sys/kern/kern_timeout.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/kern/kern_timeout.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -1096,6 +1096,10 @@ _callout_stop_safe(struct callout *c, in
 	struct lock_class *class;
 	int direct, sq_locked, use_lock;
 
+	if (safe)
+		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, c->c_lock,
+		    "calling %s", __func__);
+
 	/*
 	 * Some old subsystems don't hold Giant while running a callout_stop(),
 	 * so just discard this check for the moment.

Modified: projects/building-blocks/sys/kern/vfs_subr.c
==============================================================================
--- projects/building-blocks/sys/kern/vfs_subr.c	Mon Jan 26 04:04:57 2015	(r277723)
+++ projects/building-blocks/sys/kern/vfs_subr.c	Mon Jan 26 05:56:27 2015	(r277724)
@@ -632,7 +632,7 @@ vfs_getnewfsid(struct mount *mp)
  */
 enum { TSP_SEC, TSP_HZ, TSP_USEC, TSP_NSEC };
 
-static int timestamp_precision = TSP_SEC;
+static int timestamp_precision = TSP_USEC;
 SYSCTL_INT(_vfs, OID_AUTO, timestamp_precision, CTLFLAG_RW,
     &timestamp_precision, 0, "File timestamp precision (0: seconds, "
     "1: sec + ns accurate to 1/HZ, 2: sec + ns truncated to ms, "



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