summaryrefslogtreecommitdiff
path: root/sys/contrib/vchiq
diff options
context:
space:
mode:
authorOleksandr Tymoshenko <gonzo@FreeBSD.org>2016-10-12 03:08:58 +0000
committerOleksandr Tymoshenko <gonzo@FreeBSD.org>2016-10-12 03:08:58 +0000
commit79f6c27f4c2aa759dad0e4d67d651adb0adcf2af (patch)
treef8bbe333b5e5bde51a3bf9cdc687914903347f95 /sys/contrib/vchiq
parent43be86e31b016a19d443782651672a8e60a969e4 (diff)
downloadsrc-test2-79f6c27f4c2aa759dad0e4d67d651adb0adcf2af.tar.gz
src-test2-79f6c27f4c2aa759dad0e4d67d651adb0adcf2af.zip
Notes
Diffstat (limited to 'sys/contrib/vchiq')
-rw-r--r--sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c
index 93aa6f8ba27a..53d1819c6cde 100644
--- a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c
+++ b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_kmod.c
@@ -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;