diff options
author | ian <ian@FreeBSD.org> | 2014-08-05 19:10:53 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2014-08-05 19:10:53 +0000 |
commit | 9cdd8a8e798ff91bb17f1e0630d47959d1a3a3ad (patch) | |
tree | 0c89cae01cb5661edb75e327512735d2be5808de /sys/arm/freescale | |
parent | 9c1609965f6c52ca5ec5c1a899bf6c16feecb2e0 (diff) | |
download | FreeBSD-src-9cdd8a8e798ff91bb17f1e0630d47959d1a3a3ad.zip FreeBSD-src-9cdd8a8e798ff91bb17f1e0630d47959d1a3a3ad.tar.gz |
Cache the imx6 SoC type in a static var so that it only has to be figured
out by sniffing hardware registers once.
Diffstat (limited to 'sys/arm/freescale')
-rw-r--r-- | sys/arm/freescale/imx/imx6_machdep.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/sys/arm/freescale/imx/imx6_machdep.c b/sys/arm/freescale/imx/imx6_machdep.c index eb69eda..139e2cd 100644 --- a/sys/arm/freescale/imx/imx6_machdep.c +++ b/sys/arm/freescale/imx/imx6_machdep.c @@ -146,12 +146,16 @@ u_int imx_soc_type() { uint32_t digprog, hwsoc; uint32_t *pcr; + static u_int soctype; const vm_offset_t SCU_CONFIG_PHYSADDR = 0x00a00004; #define HWSOC_MX6SL 0x60 #define HWSOC_MX6DL 0x61 #define HWSOC_MX6SOLO 0x62 #define HWSOC_MX6Q 0x63 + if (soctype != 0) + return (soctype); + digprog = imx6_anatop_read_4(IMX6_ANALOG_DIGPROG_SL); hwsoc = (digprog >> IMX6_ANALOG_DIGPROG_SOCTYPE_SHIFT) & IMX6_ANALOG_DIGPROG_SOCTYPE_MASK; @@ -175,20 +179,25 @@ u_int imx_soc_type() switch (hwsoc) { case HWSOC_MX6SL: - return (IMXSOC_6SL); + soctype = IMXSOC_6SL; + break; case HWSOC_MX6SOLO: - return (IMXSOC_6S); + soctype = IMXSOC_6S; + break; case HWSOC_MX6DL: - return (IMXSOC_6DL); + soctype = IMXSOC_6DL; + break; case HWSOC_MX6Q : - return (IMXSOC_6Q); + soctype = IMXSOC_6Q; + break; default: printf("imx_soc_type: Don't understand hwsoc 0x%02x, " "digprog 0x%08x; assuming IMXSOC_6Q\n", hwsoc, digprog); + soctype = IMXSOC_6Q; break; } - return (IMXSOC_6Q); + return (soctype); } /* |