Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Jan 2013 20:17:55 GMT
From:      Brooks Davis <brooks@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 219957 for review
Message-ID:  <201301072017.r07KHtoZ052196@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@219957?ac=10

Change 219957 by brooks@brooks_zenith on 2013/01/07 20:17:35

	Integrate rwatson's work on FDT support.

Affected files ...

.. //depot/projects/ctsrd/cheribsd/src/sys/boot/fdt/dts/beri-sim.dts#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/boot/fdt/dts/beripad-de4.dts#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/boot/fdt/dts/beripad-tpad.dts#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/conf/files#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/conf/files.mips#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.c#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.h#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen_nexus.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#4 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_nexus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard.h#4 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard_nexus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/fdt/fdt_mips.c#2 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/fdt/fdtbus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf.h#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf_nexus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.c#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.h#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led_nexus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.h#4 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_fdt.c#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_nexus.c#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/beri_machdep.c#4 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/files.beri#9 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4.hints#6 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4_MDROOT#5 edit
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_FDT_DE4.hints#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_FDT_DE4_MDROOT#1 branch
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SIM.hints#3 delete
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SIM_MDROOT#5 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/CHERI_DE4_MDROOT#2 edit
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/include/bus.h#3 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/include/fdt.h#2 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/include/metadata.h#2 integrate
.. //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/bus_space_fdt.c#1 branch

Differences ...

==== //depot/projects/ctsrd/cheribsd/src/sys/conf/files#5 (text+ko) ====

@@ -638,9 +638,12 @@
 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
 dev/altera/sdcard/altera_sdcard_io.c	optional altera_sdcard
+dev/altera/sdcard/altera_sdcard_fdt.c	optional altera_sdcard fdt
 dev/altera/sdcard/altera_sdcard_nexus.c	optional altera_sdcard
 dev/amr/amr.c			optional amr
 dev/amr/amr_cam.c		optional amrp amr
@@ -1392,6 +1395,7 @@
 dev/iscsi/initiator/isc_sm.c	optional iscsi_initiator scbus
 dev/iscsi/initiator/isc_subr.c	optional iscsi_initiator scbus
 dev/isf/isf.c			optional isf
+dev/isf/isf_fdt.c		optional isf fdt
 dev/isf/isf_nexus.c		optional isf
 dev/isp/isp.c			optional isp
 dev/isp/isp_freebsd.c		optional isp

==== //depot/projects/ctsrd/cheribsd/src/sys/conf/files.mips#5 (text+ko) ====

@@ -45,6 +45,7 @@
 mips/mips/tlb.c			standard
 
 mips/mips/bus_space_generic.c 	standard
+mips/mips/bus_space_fdt.c 	optional	fdt
 mips/mips/busdma_machdep.c 	standard
 mips/mips/cache.c		standard
 mips/mips/cache_mipsNN.c	standard

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.c#5 (text+ko) ====

@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2012 Robert N. M. Watson
+ * Copyright (c) 2012-2013 Robert N. M. Watson
  * All rights reserved.
  *
  * This software was developed by SRI International and the University of
@@ -60,6 +60,8 @@
  * system-on-chip bus environments would work fine with the same code.
  */
 
+devclass_t altera_avgen_devclass;
+
 static d_mmap_t altera_avgen_mmap;
 static d_read_t altera_avgen_read;
 static d_write_t altera_avgen_write;
@@ -226,13 +228,6 @@
 	return (0);
 }
 
-static int
-altera_avgen_nexus_probe(device_t dev)
-{
-
-	device_set_desc(dev, "Generic Altera Avalon device attachment");
-	return (BUS_PROBE_DEFAULT);
-}
 
 static int
 altera_avgen_process_options(struct altera_avgen_softc *sc,
@@ -321,42 +316,14 @@
 	return (0);
 }
 
-static int
-altera_avgen_nexus_attach(device_t dev)
+int
+altera_avgen_attach(struct altera_avgen_softc *sc, const char *str_fileio,
+    const char *str_mmapio, const char *str_devname, int devunit)
 {
-	struct altera_avgen_softc *sc;
-	const char *str_fileio, *str_mmapio;
-	const char *str_devname;
+	device_t dev = sc->avg_dev;
 	char devname[SPECNAMELEN + 1];
-	int devunit, error;
-
-	sc = device_get_softc(dev);
-	sc->avg_dev = dev;
-	sc->avg_unit = device_get_unit(dev);
+	int error;
 
-	/*
-	 * Query non-standard hints to find out what operations are permitted
-	 * on the device, and whether it is cached.
-	 */
-	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);
 	error = altera_avgen_process_options(sc, str_fileio, str_mmapio,
 	    str_devname, devunit);
 	if (error)
@@ -374,25 +341,15 @@
 		snprintf(devname, sizeof(devname), "%s%d", "avgen",
 		    sc->avg_unit);
 
-	/* Memory allocation and checking. */
-	sc->avg_rid = 0;
-	sc->avg_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
-	    &sc->avg_rid, RF_ACTIVE);
-	if (sc->avg_res == NULL) {
-		device_printf(dev, "couldn't map memory\n");
-		return (ENXIO);
-	}
 	if (rman_get_size(sc->avg_res) >= PAGE_SIZE || str_mmapio != NULL) {
 		if (rman_get_size(sc->avg_res) % PAGE_SIZE != 0) {
 			device_printf(dev,
 			    "memory region not even multiple of page size\n");
-			error = ENXIO;
-			goto error;
+			return (ENXIO);
 		}
 		if (rman_get_start(sc->avg_res) % PAGE_SIZE != 0) {
 			device_printf(dev, "memory region not page-aligned\n");
-			error = ENXIO;
-			goto error;
+			return (ENXIO);
 		}
 	}
 
@@ -409,43 +366,16 @@
 		    GID_WHEEL, S_IRUSR | S_IWUSR, str_devname);
 	if (sc->avg_cdev == NULL) {
 		device_printf(sc->avg_dev, "%s: make_dev failed\n", __func__);
-		error = ENXIO;
-		goto error;
+		return (ENXIO);
 	}
 	/* XXXRW: Slight race between make_dev(9) and here. */
 	sc->avg_cdev->si_drv1 = sc;
 	return (0);
-
-error:
-	bus_release_resource(dev, SYS_RES_MEMORY, sc->avg_rid, sc->avg_res);
-	return (error);
 }
 
-static int
-altera_avgen_nexus_detach(device_t dev)
+void
+altera_avgen_detach(struct altera_avgen_softc *sc)
 {
-	struct altera_avgen_softc *sc;
 
-	sc = device_get_softc(dev);
 	destroy_dev(sc->avg_cdev);
-	bus_release_resource(dev, SYS_RES_MEMORY, sc->avg_rid, sc->avg_res);
-	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),
-	{ 0, 0 }
-};
-
-static driver_t altera_avgen_nexus_driver = {
-	"altera_avgen",
-	altera_avgen_nexus_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);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.h#3 (text+ko) ====

@@ -77,7 +77,11 @@
 /*
  * Driver setup routines from the bus attachment/teardown.
  */
-int	altera_avgen_attach(struct altera_avgen_softc *sc);
+int	altera_avgen_attach(struct altera_avgen_softc *sc,
+	    const char *str_fileio, const char *str_mmapio,
+	    const char *str_devname, int devunit);
 void	altera_avgen_detach(struct altera_avgen_softc *sc);
 
+extern devclass_t	altera_avgen_devclass;
+
 #endif /* _DEV_ALTERA_AVALON_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#4 (text+ko) ====

@@ -194,4 +194,6 @@
 int	altera_jtag_uart_attach(struct altera_jtag_uart_softc *sc);
 void	altera_jtag_uart_detach(struct altera_jtag_uart_softc *sc);
 
+extern devclass_t	altera_jtag_uart_devclass;
+
 #endif /* _DEV_ALTERA_JTAG_UART_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#5 (text+ko) ====

@@ -32,6 +32,7 @@
 __FBSDID("$FreeBSD: src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c,v 1.2 2012/09/14 21:28:56 eadler Exp $");
 
 #include <sys/param.h>
+#include <sys/bus.h>
 #include <sys/cons.h>
 #include <sys/endian.h>
 #include <sys/kdb.h>
@@ -46,6 +47,8 @@
 
 #include <dev/altera/jtag_uart/altera_jtag_uart.h>
 
+devclass_t	altera_jtag_uart_devclass;
+
 /*
  * One-byte buffer as we can't check whether the UART is readable without
  * actually reading from it, synchronised by a spinlock; this lock also

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_nexus.c#3 (text+ko) ====

@@ -137,7 +137,5 @@
 	sizeof(struct altera_jtag_uart_softc),
 };
 
-static devclass_t altera_jtag_uart_devclass;
-
 DRIVER_MODULE(altera_jtag_uart, nexus, altera_jtag_uart_nexus_driver,
     altera_jtag_uart_devclass, 0, 0);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard.c#3 (text+ko) ====

@@ -70,6 +70,7 @@
  * 3. Handle read-only SD Cards.
  * 4. Tune timeouts based on real-world SD Card speeds.
  */
+devclass_t	altera_sdcard_devclass;
 
 void
 altera_sdcard_attach(struct altera_sdcard_softc *sc)

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard.h#4 (text+ko) ====

@@ -244,4 +244,6 @@
 void	altera_sdcard_disk_insert(struct altera_sdcard_softc *sc);
 void	altera_sdcard_disk_remove(struct altera_sdcard_softc *sc);
 
+extern devclass_t	altera_sdcard_devclass;
+
 #endif	/* _DEV_ALTERA_SDCARD_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/sdcard/altera_sdcard_nexus.c#3 (text+ko) ====

@@ -110,7 +110,5 @@
 	sizeof(struct altera_sdcard_softc),
 };
 
-static devclass_t altera_sdcard_devclass;
-
 DRIVER_MODULE(altera_sdcard, nexus, altera_sdcard_nexus_driver,
     altera_sdcard_devclass, 0, 0);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/fdt/fdt_mips.c#2 (text+ko) ====

@@ -49,8 +49,26 @@
 	{ NULL, NULL }
 };
 
+/*
+ * For PIC-free boards, provide a PIC decoder to be used with mips4k CP0
+ * interrupt control directly.
+ */
+static int
+fdt_pic_decode_mips4k_cp0(phandle_t node, pcell_t *intr, int *interrupt,
+    int *trig, int *pol)
+{
+
+	if (!fdt_is_compatible(node, "mips4k,cp0"))
+		return (ENXIO);
+
+	*interrupt = fdt32_to_cpu(intr[0]);
+	*trig = INTR_TRIGGER_CONFORM;
+	*pol = INTR_POLARITY_CONFORM;
+
+	return (0);
+}
+
 fdt_pic_decode_t fdt_pic_table[] = {
-	NULL,
-	NULL,
+	&fdt_pic_decode_mips4k_cp0,
 	NULL
 };

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/fdt/fdtbus.c#3 (text+ko) ====

@@ -257,6 +257,8 @@
 	struct fdtbus_devinfo *di;
 
 	di = device_get_ivars(dev);
+	if (di == NULL)
+		return;
 
 	free(di->di_name, M_OFWPROP);
 	free(di->di_type, M_OFWPROP);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf.c#3 (text+ko) ====

@@ -150,6 +150,7 @@
  * physical package, due to variable block size support in the StrataFlash
  * part.
  */
+devclass_t	isf_devclass;
 
 static uint16_t
 isf_read_reg(struct isf_softc *sc, uint16_t reg)

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf.h#3 (text+ko) ====

@@ -87,6 +87,8 @@
 
 int	isf_attach(struct isf_softc *sc);
 void	isf_detach(struct isf_softc *sc);
+
+extern devclass_t	isf_devclass;
 #endif /* _KERNEL */
 
 #endif	/* _DEV_ISF_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/isf/isf_nexus.c#3 (text+ko) ====

@@ -115,6 +115,4 @@
 	sizeof(struct isf_softc),
 };
 
-static devclass_t isf_devclass;
-
 DRIVER_MODULE(isf, nexus, isf_nexus_driver, isf_devclass, 0, 0);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.c#5 (text+ko) ====

@@ -43,6 +43,8 @@
 #include <dev/led/led.h>
 #include <dev/terasic/de4led/terasic_de4led.h>
 
+devclass_t	terasic_de4led_devclass;
+
 static void
 terasic_de4led_update(struct terasic_de4led_softc *sc)
 {

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.h#3 (text+ko) ====

@@ -70,4 +70,6 @@
 void	terasic_de4led_attach(struct terasic_de4led_softc *sc);
 void	terasic_de4led_detach(struct terasic_de4led_softc *sc);
 
+extern devclass_t	terasic_de4led_devclass;
+
 #endif /* _DEV_TERASIC_DE4LED_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led_nexus.c#3 (text+ko) ====

@@ -106,7 +106,5 @@
 	sizeof(struct terasic_de4led_softc),
 };
 
-static devclass_t terasic_de4led_devclass;
-
 DRIVER_MODULE(terasic_de4led, nexus, terasic_de4led_nexus_driver,
     terasic_de4led_devclass, 0, 0);

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.c#3 (text+ko) ====

@@ -63,6 +63,9 @@
  * attached as they may be called even if the attach routine hasn't been, on
  * an error.
  */
+
+devclass_t	terasic_mtl_devclass;
+
 int
 terasic_mtl_attach(struct terasic_mtl_softc *sc)
 {

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.h#4 (text+ko) ====

@@ -159,6 +159,8 @@
 int	terasic_mtl_attach(struct terasic_mtl_softc *sc);
 void	terasic_mtl_detach(struct terasic_mtl_softc *sc);
 
+extern devclass_t	terasic_mtl_devclass;
+
 /*
  * Sub-driver setup routines.
  */

==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_nexus.c#3 (text+ko) ====

@@ -190,7 +190,5 @@
 	sizeof(struct terasic_mtl_softc),
 };
 
-static devclass_t terasic_mtl_devclass;
-
 DRIVER_MODULE(mtl, nexus, terasic_mtl_nexus_driver, terasic_mtl_devclass, 0,
     0);

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/beri_machdep.c#4 (text+ko) ====

@@ -1,7 +1,12 @@
 /*-
  * Copyright (c) 2006 Wojciech A. Koszek <wkoszek@FreeBSD.org>
+ * Copyright (c) 2012 Robert N. M. Watson
  * All rights reserved.
  *
+ * This software was developed by SRI International and the University of
+ * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
+ * ("CTSRD"), as part of the DARPA CRASH research programme.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -27,6 +32,7 @@
 __FBSDID("$FreeBSD$");
 
 #include "opt_ddb.h"
+#include "opt_platform.h"
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -39,6 +45,7 @@
 #include <sys/cpu.h>
 #include <sys/cons.h>
 #include <sys/exec.h>
+#include <sys/linker.h>
 #include <sys/ucontext.h>
 #include <sys/proc.h>
 #include <sys/kdb.h>
@@ -49,6 +56,11 @@
 #include <sys/sysproto.h>
 #include <sys/user.h>
 
+#ifdef FDT
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/openfirm.h>
+#endif
+
 #include <vm/vm.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
@@ -59,6 +71,7 @@
 #include <machine/cpuregs.h>
 #include <machine/hwfunc.h>
 #include <machine/md_var.h>
+#include <machine/metadata.h>
 #include <machine/pmap.h>
 #include <machine/trap.h>
 
@@ -124,6 +137,10 @@
 	char **argv = (char **)a1;
 	char **envp = (char **)a2;
 	unsigned int memsize = a3;
+#ifdef FDT
+	vm_offset_t dtbp;
+	void *kmdp;
+#endif
 	int i;
 
 	/* clear the BSS and SBSS segments */
@@ -134,6 +151,33 @@
 
 	mips_pcpu0_init();
 
+#ifdef FDT
+	/*
+	 * Find the dtb passed in by the boot loader (currently fictional).
+	 */
+	kmdp = preload_search_by_type("elf kernel");
+	if (kmdp != NULL)
+		dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
+	else
+		dtbp = (vm_offset_t)NULL;
+
+#if defined(FDT_DTB_STATIC)
+	/*
+	 * In case the device tree blob was not retrieved (from metadata) try
+	 * to use the statically embedded one.
+	 */
+	if (dtbp == (vm_offset_t)NULL)
+		dtbp = (vm_offset_t)&fdt_static_dtb;
+#else
+#error	"Non-static FDT not yet supported on BERI"
+#endif
+
+	if (OF_install(OFW_FDT, 0) == FALSE)
+		while (1);
+	if (OF_init(&fdt_static_dtb) != 0)
+		while (1);
+#endif
+
 	/*
 	 * XXXRW: We have no way to compare wallclock time to cycle rate on
 	 * BERI, so for now assume we run at the MALTA default (100MHz).

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/files.beri#9 (text+ko) ====

@@ -1,11 +1,14 @@
 # $FreeBSD: src/sys/mips/beri/files.beri,v 1.4 2012/08/26 09:21:59 rwatson Exp $
 dev/altera/jtag_uart/altera_jtag_uart_cons.c	optional altera_jtag_uart
 dev/altera/jtag_uart/altera_jtag_uart_tty.c	optional altera_jtag_uart
+dev/altera/jtag_uart/altera_jtag_uart_fdt.c	optional altera_jtag_uart fdt
 dev/altera/jtag_uart/altera_jtag_uart_nexus.c	optional altera_jtag_uart
 dev/cfi/cfi_bus_nexus.c			optional cfi
 dev/terasic/de4led/terasic_de4led.c	optional terasic_de4led
+dev/terasic/de4led/terasic_de4led_fdt.c	optional terasic_de4led fdt
 dev/terasic/de4led/terasic_de4led_nexus.c	optional terasic_de4led
 dev/terasic/mtl/terasic_mtl.c		optional terasic_mtl
+dev/terasic/mtl/terasic_mtl_fdt.c	optional terasic_mtl fdt
 dev/terasic/mtl/terasic_mtl_nexus.c	optional terasic_mtl
 dev/terasic/mtl/terasic_mtl_pixel.c	optional terasic_mtl
 dev/terasic/mtl/terasic_mtl_reg.c	optional terasic_mtl

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4.hints#6 (text+ko) ====

@@ -61,26 +61,26 @@
 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"
+
+#
 # Expose the DE4 flash via an Avalon "generic" device.
 # This is incompatible with the isf(4) driver.
 #
-#hint.altera_avgen.0.at="nexus0"
-#hint.altera_avgen.0.maddr=0x74000000
-#hint.altera_avgen.0.msize=0x4000000
-#hint.altera_avgen.0.width=2
-#hint.altera_avgen.0.fileio="rw"
-#hint.altera_avgen.0.mmapio="rwx"
-#hint.altera_avgen.0.devname="de4flash"
-
-#
-# Expose the DE4 buttons and switches via an Avalon "generic" device.
-# 
-hint.altera_avgen.0.at="nexus0"
-hint.altera_avgen.0.maddr=0x7f009000
-hint.altera_avgen.0.msize=2
-hint.altera_avgen.0.width=1
-hint.altera_avgen.0.fileio="r"
-hint.altera_avgen.0.devname="de4bsw"
+#hint.altera_avgen.2.at="nexus0"
+#hint.altera_avgen.2.maddr=0x74000000
+#hint.altera_avgen.2.msize=0x4000000
+#hint.altera_avgen.2.width=2
+#hint.altera_avgen.2.fileio="rw"
+#hint.altera_avgen.2.mmapio="rwx"
+#hint.altera_avgen.2.devname="de4flash"
 
 #
 # General Intel StrataFlash driver

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4_MDROOT#5 (text+ko) ====

@@ -10,7 +10,12 @@
 
 ident		BERI_DE4_MDROOT
 
-hints		"BERI_DE4.hints"	#Default places to look for devices.
+#hints		"BERI_DE4.hints"	#Default places to look for devices.
+hints           "BERI_FDT_DE4.hints"    #Default places to look for devices.
+
+options         FDT
+options         FDT_DTB_STATIC
+makeoptions     FDT_DTS_FILE=beripad-de4.dts
 
 #
 # This kernel configuration uses an embedded 8MB memory root file system.

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SIM_MDROOT#5 (text+ko) ====

@@ -9,7 +9,9 @@
 
 ident		BERI_SIM_MDROOT
 
-hints		"BERI_SIM.hints"	#Default places to look for devices.
+options 	FDT
+options 	FDT_DTB_STATIC
+makeoptions	FDT_DTS_FILE=beri-sim.dts
 
 #
 # This kernel configuration uses an embedded 8MB memory root file system.

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/CHERI_DE4_MDROOT#2 (text+ko) ====

@@ -9,5 +9,9 @@
 include		BERI_DE4_MDROOT
 ident		CHERI_DE4_MDROOT
 
+nooptions	MD_ROOT_SIZE
+options		MD_ROOT_SIZE=25600
+makeoptions	MFS_IMAGE=/home/bed22/demoroot.img
+
 nocpu		CPU_BERI
 cpu		CPU_CHERI

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/include/bus.h#3 (text+ko) ====

@@ -728,6 +728,8 @@
  */
 DECLARE_BUS_SPACE_PROTOTYPES(generic);
 extern bus_space_tag_t mips_bus_space_generic;
+extern bus_space_tag_t mips_bus_space_fdt;
+
 /* Special bus space for RMI processors */
 #if defined(CPU_RMI) || defined (CPU_NLM)
 extern bus_space_tag_t rmi_bus_space;

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/include/fdt.h#2 (text+ko) ====

@@ -51,7 +51,7 @@
 #if defined(CPU_RMI) || defined(CPU_NLM)
 #define fdtbus_bs_tag	rmi_uart_bus_space
 #else
-#define fdtbus_bs_tag	NULL
+#define fdtbus_bs_tag	mips_bus_space_fdt
 #endif
 
 #endif /* _MACHINE_FDT_H_ */

==== //depot/projects/ctsrd/cheribsd/src/sys/mips/include/metadata.h#2 (text+ko) ====

@@ -30,5 +30,6 @@
 #define	_MACHINE_METADATA_H_
 
 #define	MODINFOMD_SMAP		0x1001
+#define	MODINFOMD_DTBP	0x1002
 
 #endif /* !_MACHINE_METADATA_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301072017.r07KHtoZ052196>