summaryrefslogtreecommitdiffstats
path: root/sys/arm/freescale
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-08-05 19:10:53 +0000
committerian <ian@FreeBSD.org>2014-08-05 19:10:53 +0000
commit9cdd8a8e798ff91bb17f1e0630d47959d1a3a3ad (patch)
tree0c89cae01cb5661edb75e327512735d2be5808de /sys/arm/freescale
parent9c1609965f6c52ca5ec5c1a899bf6c16feecb2e0 (diff)
downloadFreeBSD-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.c19
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);
}
/*
OpenPOWER on IntegriCloud