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>