svn commit: r307095 - head/sys/contrib/vchiq/interface/vchiq_arm

Oleksandr Tymoshenko gonzo at FreeBSD.org
Wed Oct 12 03:09:00 UTC 2016


Author: gonzo
Date: Wed Oct 12 03:08:58 2016
New Revision: 307095
URL: https://svnweb.freebsd.org/changeset/base/307095

Log:
  Make VCHI driver compatible with upstream DT
  
  - Add compatibility string
  - Compensate difference in base address between our custom DTB and upstream one

Modified:
  head/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c

Modified: head/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c
==============================================================================
--- head/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c	Wed Oct 12 03:08:11 2016	(r307094)
+++ head/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c	Wed Oct 12 03:08:58 2016	(r307095)
@@ -73,14 +73,25 @@ struct bcm_vchiq_softc {
 	void*			intr_hl;
 	bus_space_tag_t		bst;
 	bus_space_handle_t	bsh;
+	int			regs_offset;
 };
 
 static struct bcm_vchiq_softc *bcm_vchiq_sc = NULL;
 
+#define	BSD_DTB			1
+#define	UPSTREAM_DTB		2
+static struct ofw_compat_data compat_data[] = {
+	{"broadcom,bcm2835-vchiq",	BSD_DTB},
+	{"brcm,bcm2835-vchiq",		UPSTREAM_DTB},
+	{NULL,				0}
+};
+
 #define	vchiq_read_4(reg)		\
-    bus_space_read_4(bcm_vchiq_sc->bst, bcm_vchiq_sc->bsh, reg)
+    bus_space_read_4(bcm_vchiq_sc->bst, bcm_vchiq_sc->bsh, (reg) + \
+    bcm_vchiq_sc->regs_offset)
 #define	vchiq_write_4(reg, val)		\
-    bus_space_write_4(bcm_vchiq_sc->bst, bcm_vchiq_sc->bsh, reg, val)
+    bus_space_write_4(bcm_vchiq_sc->bst, bcm_vchiq_sc->bsh, (reg) + \
+    bcm_vchiq_sc->regs_offset, val)
 
 /* 
  * Extern functions */
@@ -122,12 +133,11 @@ static int
 bcm_vchiq_probe(device_t dev)
 {
 
-	if (ofw_bus_is_compatible(dev, "broadcom,bcm2835-vchiq")) {
-		device_set_desc(dev, "BCM2835 VCHIQ");
-		return(BUS_PROBE_DEFAULT);
-	}
+	if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0)
+		return (ENXIO);
 
-	return (ENXIO);
+	device_set_desc(dev, "BCM2835 VCHIQ");
+	return (BUS_PROBE_DEFAULT);
 }
 
 static int
@@ -157,6 +167,9 @@ bcm_vchiq_attach(device_t dev)
 		return (ENXIO);
 	}
 
+	if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == UPSTREAM_DTB)
+		sc->regs_offset = -0x40;
+
 	node = ofw_bus_get_node(dev);
 	if ((OF_getencprop(node, "cache-line-size", &cell, sizeof(cell))) > 0)
 		g_cache_line_size = cell;


More information about the svn-src-all mailing list