diff options
author | brooks <brooks@FreeBSD.org> | 2013-04-30 18:48:11 +0000 |
---|---|---|
committer | brooks <brooks@FreeBSD.org> | 2013-04-30 18:48:11 +0000 |
commit | fa5ecaab3748ed3389ef92343209fc4ec9996c86 (patch) | |
tree | feedee7f4deb16844a3466a30a1c526dd1ec0acf /sys/dev/cfi | |
parent | dd0b40bba3d910968218b423bb0f5b027f7165a3 (diff) | |
download | FreeBSD-src-fa5ecaab3748ed3389ef92343209fc4ec9996c86.zip FreeBSD-src-fa5ecaab3748ed3389ef92343209fc4ec9996c86.tar.gz |
MFP4 change 222060:
On Intel devices, put the Factory PPR in kenv. On some FPGA boards it may
be the only software accessable unique ID.
Sponsored by: DARPA, AFRL
Diffstat (limited to 'sys/dev/cfi')
-rw-r--r-- | sys/dev/cfi/cfi_core.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/dev/cfi/cfi_core.c b/sys/dev/cfi/cfi_core.c index b85f6f3..c7d0db9 100644 --- a/sys/dev/cfi/cfi_core.c +++ b/sys/dev/cfi/cfi_core.c @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include <sys/bus.h> #include <sys/conf.h> #include <sys/endian.h> +#include <sys/kenv.h> #include <sys/kernel.h> #include <sys/malloc.h> #include <sys/module.h> @@ -261,6 +262,10 @@ cfi_attach(device_t dev) struct cfi_softc *sc; u_int blksz, blocks; u_int r, u; +#ifdef CFI_SUPPORT_STRATAFLASH + uint64_t ppr; + char name[KENV_MNAMELEN], value[32]; +#endif sc = device_get_softc(dev); sc->sc_dev = dev; @@ -312,6 +317,20 @@ cfi_attach(device_t dev) "%s%u", cfi_driver_name, u); sc->sc_nod->si_drv1 = sc; +#ifdef CFI_SUPPORT_STRATAFLASH + /* + * Store the Intel factory PPR in the environment. In some + * cases it is the most unique ID on a board. + */ + if (cfi_intel_get_factory_pr(sc, &ppr) == 0) { + if (snprintf(name, sizeof(name), "%s.factory_ppr", + device_get_nameunit(dev)) < (sizeof(name) - 1) && + snprintf(value, sizeof(value), "0x%016jx", ppr) < + (sizeof(value) - 1)) + (void) setenv(name, value); + } +#endif + device_add_child(dev, "cfid", -1); bus_generic_attach(dev); |