svn commit: r327419 - head/sys/arm/allwinner
Kyle Evans
kevans at FreeBSD.org
Sun Dec 31 06:44:16 UTC 2017
Author: kevans
Date: Sun Dec 31 06:44:15 2017
New Revision: 327419
URL: https://svnweb.freebsd.org/changeset/base/327419
Log:
aw_sid: rewrite compat-string configuration to be more flexible
This will allow easiser support in the future for boards that have thermal
data and different offsets for root key/efuse data.
Modified:
head/sys/arm/allwinner/aw_sid.c
Modified: head/sys/arm/allwinner/aw_sid.c
==============================================================================
--- head/sys/arm/allwinner/aw_sid.c Sun Dec 31 06:10:07 2017 (r327418)
+++ head/sys/arm/allwinner/aw_sid.c Sun Dec 31 06:44:15 2017 (r327419)
@@ -52,28 +52,36 @@ __FBSDID("$FreeBSD$");
#define SID_THERMAL_CALIB0 (SID_SRAM + 0x34)
#define SID_THERMAL_CALIB1 (SID_SRAM + 0x38)
-#define A10_ROOT_KEY_OFF 0x0
-#define A83T_ROOT_KEY_OFF SID_SRAM
-
#define ROOT_KEY_SIZE 4
-enum sid_type {
- A10_SID = 1,
- A20_SID,
- A83T_SID,
+struct aw_sid_conf {
+ bus_size_t rootkey_offset;
+ bool has_thermal;
};
+static const struct aw_sid_conf a10_conf = {
+ .rootkey_offset = 0,
+};
+
+static const struct aw_sid_conf a20_conf = {
+ .rootkey_offset = 0,
+};
+
+static const struct aw_sid_conf a83t_conf = {
+ .rootkey_offset = SID_SRAM,
+ .has_thermal = true,
+};
+
static struct ofw_compat_data compat_data[] = {
- { "allwinner,sun4i-a10-sid", A10_SID},
- { "allwinner,sun7i-a20-sid", A20_SID},
- { "allwinner,sun8i-a83t-sid", A83T_SID},
+ { "allwinner,sun4i-a10-sid", (uintptr_t)&a10_conf},
+ { "allwinner,sun7i-a20-sid", (uintptr_t)&a20_conf},
+ { "allwinner,sun8i-a83t-sid", (uintptr_t)&a83t_conf},
{ NULL, 0 }
};
struct aw_sid_softc {
struct resource *res;
- int type;
- bus_size_t root_key_off;
+ struct aw_sid_conf *sid_conf;
};
static struct aw_sid_softc *aw_sid_sc;
@@ -118,17 +126,8 @@ aw_sid_attach(device_t dev)
}
aw_sid_sc = sc;
+ sc->sid_conf = (struct aw_sid_conf *)ofw_bus_search_compatible(dev, compat_data)->ocd_data;
- sc->type = ofw_bus_search_compatible(dev, compat_data)->ocd_data;
- switch (sc->type) {
- case A83T_SID:
- sc->root_key_off = A83T_ROOT_KEY_OFF;
- break;
- default:
- sc->root_key_off = A10_ROOT_KEY_OFF;
- break;
- }
-
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "rootkey",
@@ -146,7 +145,7 @@ aw_sid_read_tscalib(uint32_t *calib0, uint32_t *calib1
sc = aw_sid_sc;
if (sc == NULL)
return (ENXIO);
- if (sc->type != A83T_SID)
+ if (!sc->sid_conf->has_thermal)
return (ENXIO);
*calib0 = RD4(sc, SID_THERMAL_CALIB0);
@@ -160,14 +159,15 @@ aw_sid_get_rootkey(u_char *out)
{
struct aw_sid_softc *sc;
int i;
+ bus_size_t root_key_off;
u_int tmp;
sc = aw_sid_sc;
if (sc == NULL)
return (ENXIO);
-
+ root_key_off = aw_sid_sc->sid_conf->rootkey_offset;
for (i = 0; i < ROOT_KEY_SIZE ; i++) {
- tmp = RD4(aw_sid_sc, aw_sid_sc->root_key_off + (i * 4));
+ tmp = RD4(aw_sid_sc, root_key_off + (i * 4));
be32enc(&out[i * 4], tmp);
}
More information about the svn-src-all
mailing list