PERFORCE change 219942 for review
Robert Watson
rwatson at FreeBSD.org
Thu Jan 3 15:19:34 UTC 2013
http://p4web.freebsd.org/@@219942?ac=10
Change 219942 by rwatson at rwatson_zenith_cl_cam_ac_uk on 2013/01/03 15:19:07
Implement an FDT attachment for altera_avgen(4), and switch over the
FDT reference kernel from using device.hints to FDT to configure its
berirom and de4bsw device nodes.
Affected files ...
.. //depot/projects/ctsrd/beribsd/src/sys/boot/fdt/dts/beripad-de4.dts#10 edit
.. //depot/projects/ctsrd/beribsd/src/sys/conf/files#13 edit
.. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/avgen/altera_avgen_fdt.c#2 edit
.. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_FDT_DE4.hints#9 edit
Differences ...
==== //depot/projects/ctsrd/beribsd/src/sys/boot/fdt/dts/beripad-de4.dts#10 (text+ko) ====
@@ -116,5 +116,21 @@
compatible = "intel,strataflash";
reg = <0x76000000 0x2000000>;
};
+
+ avgen at 0x7f009000 {
+ compatible = "sri-cambridge,avgen";
+ reg = <0x7f009000 0x2>;
+ sri-cambridge,width = <1>;
+ sri-cambridge,fileio = "r";
+ sri-cambridge,devname = "de4bsw";
+ };
+
+ avgen at 0x7f00a000 {
+ compatible = "sri-cambridge,avgen";
+ reg = <0x7f00a000 0x14>;
+ sri-cambridge,width = <4>;
+ sri-cambridge,fileio = "rw";
+ sri-cambridge,devname = "berirom";
+ };
};
};
==== //depot/projects/ctsrd/beribsd/src/sys/conf/files#13 (text+ko) ====
@@ -638,6 +638,7 @@
dev/alc/if_alc.c optional alc pci
dev/ale/if_ale.c optional ale pci
dev/altera/avgen/altera_avgen.c optional altera_avgen
+dev/altera/avgen/altera_avgen_fdt.c optional altera_avgen fdt
dev/altera/avgen/altera_avgen_nexus.c optional altera_avgen
dev/altera/sdcard/altera_sdcard.c optional altera_sdcard
dev/altera/sdcard/altera_sdcard_disk.c optional altera_sdcard
==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/avgen/altera_avgen_fdt.c#2 (text+ko) ====
@@ -51,22 +51,32 @@
#include <vm/vm.h>
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
#include <dev/altera/avgen/altera_avgen.h>
static int
-altera_avgen_nexus_probe(device_t dev)
+altera_avgen_fdt_probe(device_t dev)
{
- device_set_desc(dev, "Generic Altera Avalon device attachment");
- return (BUS_PROBE_DEFAULT);
+ if (ofw_bus_is_compatible(dev, "sri-cambridge,avgen")) {
+ device_set_desc(dev, "Generic Altera Avalon device attachment");
+ return (BUS_PROBE_DEFAULT);
+ }
+ return (ENXIO);
}
static int
-altera_avgen_nexus_attach(device_t dev)
+altera_avgen_fdt_attach(device_t dev)
{
struct altera_avgen_softc *sc;
- const char *str_fileio, *str_mmapio;
- const char *str_devname;
+ char *str_fileio, *str_mmapio;
+ char *str_devname;
+ phandle_t node;
+ pcell_t cell;
int devunit, error;
sc = device_get_softc(dev);
@@ -74,28 +84,25 @@
sc->avg_unit = device_get_unit(dev);
/*
- * Query non-standard hints to find out what operations are permitted
- * on the device, and whether it is cached.
+ * Query driver-specific OpenFirmware properties to determine how to
+ * expose the device via /dev.
*/
str_fileio = NULL;
str_mmapio = NULL;
str_devname = NULL;
devunit = -1;
sc->avg_width = 1;
- error = resource_int_value(device_get_name(dev), device_get_unit(dev),
- ALTERA_AVALON_STR_WIDTH, &sc->avg_width);
- if (error != 0 && error != ENOENT) {
- device_printf(dev, "invalid %s\n", ALTERA_AVALON_STR_WIDTH);
- return (error);
- }
- (void)resource_string_value(device_get_name(dev),
- device_get_unit(dev), ALTERA_AVALON_STR_FILEIO, &str_fileio);
- (void)resource_string_value(device_get_name(dev),
- device_get_unit(dev), ALTERA_AVALON_STR_MMAPIO, &str_mmapio);
- (void)resource_string_value(device_get_name(dev),
- device_get_unit(dev), ALTERA_AVALON_STR_DEVNAME, &str_devname);
- (void)resource_int_value(device_get_name(dev), device_get_unit(dev),
- ALTERA_AVALON_STR_DEVUNIT, &devunit);
+ node = ofw_bus_get_node(dev);
+ if (OF_getprop(node, "sri-cambridge,width", &cell, sizeof(cell)) > 0)
+ sc->avg_width = cell;
+ (void)OF_getprop_alloc(node, "sri-cambridge,fileio", sizeof(char),
+ (void **)&str_fileio);
+ (void)OF_getprop_alloc(node, "sri-cambridge,mmapio", sizeof(char),
+ (void **)&str_mmapio);
+ (void)OF_getprop_alloc(node, "sri-cambridge,devname", sizeof(char),
+ (void **)&str_devname);
+ if (OF_getprop(node, "sri-cambridge,devunit", &cell, sizeof(cell)) > 0)
+ devunit = cell;
/* Memory allocation and checking. */
sc->avg_rid = 0;
@@ -110,11 +117,17 @@
if (error != 0)
bus_release_resource(dev, SYS_RES_MEMORY, sc->avg_rid,
sc->avg_res);
+ if (str_fileio != NULL)
+ free(str_fileio, M_OFWPROP);
+ if (str_mmapio != NULL)
+ free(str_mmapio, M_OFWPROP);
+ if (str_devname != NULL)
+ free(str_devname, M_OFWPROP);
return (error);
}
static int
-altera_avgen_nexus_detach(device_t dev)
+altera_avgen_fdt_detach(device_t dev)
{
struct altera_avgen_softc *sc;
@@ -124,20 +137,20 @@
return (0);
}
-static device_method_t altera_avgen_nexus_methods[] = {
- DEVMETHOD(device_probe, altera_avgen_nexus_probe),
- DEVMETHOD(device_attach, altera_avgen_nexus_attach),
- DEVMETHOD(device_detach, altera_avgen_nexus_detach),
+static device_method_t altera_avgen_fdt_methods[] = {
+ DEVMETHOD(device_probe, altera_avgen_fdt_probe),
+ DEVMETHOD(device_attach, altera_avgen_fdt_attach),
+ DEVMETHOD(device_detach, altera_avgen_fdt_detach),
{ 0, 0 }
};
-static driver_t altera_avgen_nexus_driver = {
+static driver_t altera_avgen_fdt_driver = {
"altera_avgen",
- altera_avgen_nexus_methods,
+ altera_avgen_fdt_methods,
sizeof(struct altera_avgen_softc),
};
static devclass_t altera_avgen_devclass;
-DRIVER_MODULE(avgen, nexus, altera_avgen_nexus_driver, altera_avgen_devclass,
- 0, 0);
+DRIVER_MODULE(avgen, simplebus, altera_avgen_fdt_driver,
+ altera_avgen_devclass, 0, 0);
==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_FDT_DE4.hints#9 (text+ko) ====
@@ -53,22 +53,22 @@
#
# BERI Hardware Version ROM
#
-hint.altera_avgen.0.at="nexus0"
-hint.altera_avgen.0.maddr=0x7F00A000
-hint.altera_avgen.0.msize=20
-hint.altera_avgen.0.width=4
-hint.altera_avgen.0.fileio="rw"
-hint.altera_avgen.0.devname="berirom"
+#hint.altera_avgen.0.at="nexus0"
+#hint.altera_avgen.0.maddr=0x7F00A000
+#hint.altera_avgen.0.msize=20
+#hint.altera_avgen.0.width=4
+#hint.altera_avgen.0.fileio="rw"
+#hint.altera_avgen.0.devname="berirom"
#
# Expose the DE4 buttons and switches via an Avalon "generic" device.
#
-hint.altera_avgen.1.at="nexus0"
-hint.altera_avgen.1.maddr=0x7f009000
-hint.altera_avgen.1.msize=2
-hint.altera_avgen.1.width=1
-hint.altera_avgen.1.fileio="r"
-hint.altera_avgen.1.devname="de4bsw"
+#hint.altera_avgen.1.at="nexus0"
+#hint.altera_avgen.1.maddr=0x7f009000
+#hint.altera_avgen.1.msize=2
+#hint.altera_avgen.1.width=1
+#hint.altera_avgen.1.fileio="r"
+#hint.altera_avgen.1.devname="de4bsw"
#
# Expose the DE4 flash via an Avalon "generic" device.
More information about the p4-projects
mailing list