Date: Thu, 3 Jan 2013 15:19:32 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 219942 for review Message-ID: <201301031519.r03FJWEf055753@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@219942?ac=10 Change 219942 by rwatson@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@0x7f009000 { + compatible = "sri-cambridge,avgen"; + reg = <0x7f009000 0x2>; + sri-cambridge,width = <1>; + sri-cambridge,fileio = "r"; + sri-cambridge,devname = "de4bsw"; + }; + + avgen@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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301031519.r03FJWEf055753>