summaryrefslogtreecommitdiffstats
path: root/sys/dev/cfi
diff options
context:
space:
mode:
authorbrooks <brooks@FreeBSD.org>2013-04-30 18:48:11 +0000
committerbrooks <brooks@FreeBSD.org>2013-04-30 18:48:11 +0000
commitfa5ecaab3748ed3389ef92343209fc4ec9996c86 (patch)
treefeedee7f4deb16844a3466a30a1c526dd1ec0acf /sys/dev/cfi
parentdd0b40bba3d910968218b423bb0f5b027f7165a3 (diff)
downloadFreeBSD-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.c19
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);
OpenPOWER on IntegriCloud