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