Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Dec 2022 14:29:21 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Question: device_t related code vs. FDT's lack of define before use/reference requirements: is there a normal FreeBSD technique to deal with such?
Message-ID:  <49DA69A2-EB65-4BF6-8234-90A22983B965@yahoo.com>
References:  <49DA69A2-EB65-4BF6-8234-90A22983B965.ref@yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
While the RPi4B's provide the example here, as far as
I can tell, nothing here need be RPi* specific: the
question is more general for FDT involvement in the
device_t related activity.

Modern RPi4B live FDT's have the sequencing:

		mmc@7e300000 {
			compatible =3D "brcm,bcm2835-mmc", =
"brcm,bcm2835-sdhci";
			. . .
			dmas =3D <0x0000000c 0x0000000b>;
			. . .
		};
. . .
. . . Note: the brcm,bcm2835-mmc related attach attempts to use the =
later dma@7e007000
. . .       instance of brcm,bcm2835-dma. (Note the 0x0000000c phandle =
referenced is
. . .       defined below as well: reference before definition.)
. . .       The result is a kernel crash from a bad dereference of =
bcm_dma_sc->sc_mtx
. . .       (really sc=3Dbcm_dma_sc then later sc->sc_mtx).
. . .
		dma@7e007000 {
			compatible =3D "brcm,bcm2835-dma";
			. . .
			interrupt-names =3D "dma0", "dma1", "dma2", =
"dma3", "dma4", "dma5", "dma6", "dma7", "dma8", "dma9", "dma10";
			#dma-cells =3D <0x00000001>;
			brcm,dma-channel-mask =3D <0x000007f5>;
			phandle =3D <0x0000000c>;
		};
. . .
		mmcnr@7e300000 {
			compatible =3D "brcm,bcm2835-mmc", =
"brcm,bcm2835-sdhci";
			. . .
			dmas =3D <0x0000000c 0x0000000b>;
			dma-names =3D "rx-tx";
			. . .
		};

How is the device_t related probing and attachment of
FreeBSD devices supposed to work for such a FDT
ordering of the information? Are there one or more
identified ways of handling such?

Or does FreeBSD effectively require define before
use/reference in FDT's in general?
=20

The code happened to not fail back when the RPi* firmware
happened to have the FDT sequencing (phandle 0x0000000b
for this example):

		dma@7e007000 {
			compatible =3D "brcm,bcm2835-dma";
			. . .
			interrupt-names =3D "dma0", "dma1", "dma2", =
"dma3", "dma4", "dma5", "dma6", "dma7", "dma8", "dma9", "dma10";
			#dma-cells =3D <0x00000001>;
			brcm,dma-channel-mask =3D <0x000007f5>;
			phandle =3D <0x0000000b>;
		};
. . .
		mmc@7e300000 {
			compatible =3D "brcm,bcm2835-mmc", =
"brcm,bcm2835-sdhci";
			. . .
			dmas =3D <0x0000000b 0x0000000b>;
			dma-names =3D "rx-tx";
			. . .
		};
		mmcnr@7e300000 {
			compatible =3D "brcm,bcm2835-mmc", =
"brcm,bcm2835-sdhci";
			. . .
			dmas =3D <0x0000000b 0x0000000b>;
			dma-names =3D "rx-tx";
			. . .
		};

(which happens to be: define before use/reference).

=3D=3D=3D
Mark Millard
marklmi at yahoo.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49DA69A2-EB65-4BF6-8234-90A22983B965>