Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148004967
D6383.id16367.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D6383.id16367.diff
View Options
Index: sys/arm/allwinner/aw_sid.h
===================================================================
--- sys/arm/allwinner/aw_sid.h
+++ sys/arm/allwinner/aw_sid.h
@@ -30,5 +30,6 @@
#define __AW_SID_H__
int aw_sid_read_tscalib(uint32_t *, uint32_t *);
+int aw_sid_get_rootkey(u_char *out);
#endif /* !__AW_SID_H__ */
Index: sys/arm/allwinner/aw_sid.c
===================================================================
--- sys/arm/allwinner/aw_sid.c
+++ sys/arm/allwinner/aw_sid.c
@@ -39,11 +39,13 @@
#include <sys/rman.h>
#include <sys/kernel.h>
#include <sys/module.h>
+#include <sys/sysctl.h>
#include <machine/bus.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
+#include <arm/allwinner/allwinner_machdep.h>
#include <arm/allwinner/aw_sid.h>
#define SID_SRAM 0x200
@@ -51,6 +53,8 @@
#define SID_THERMAL_CALIB1 (SID_SRAM + 0x38)
static struct ofw_compat_data compat_data[] = {
+ { "allwinner,sun4i-a10-sid", 1},
+ { "allwinner,sun7i-a20-sid", 1},
{ "allwinner,sun8i-a83t-sid", 1 },
{ NULL, 0 }
};
@@ -66,9 +70,18 @@
{ -1, 0 }
};
+enum sid_keys {
+ AW_SID_ROOT_KEY,
+};
+
+#define ROOT_KEY_OFF 0x0
+#define ROOT_KEY_SIZE 4
+
#define RD4(sc, reg) bus_read_4((sc)->res, (reg))
#define WR4(sc, reg, val) bus_write_4((sc)->res, (reg), (val))
+static int aw_sid_sysctl(SYSCTL_HANDLER_ARGS);
+
static int
aw_sid_probe(device_t dev)
{
@@ -96,6 +109,18 @@
aw_sid_sc = sc;
+ switch (allwinner_soc_family()) {
+ case ALLWINNERSOC_SUN4I:
+ case ALLWINNERSOC_SUN7I:
+ SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "rootkey",
+ CTLTYPE_STRING | CTLFLAG_RD,
+ dev, AW_SID_ROOT_KEY, aw_sid_sysctl, "A", "Root Key");
+ break;
+ default:
+ break;
+ }
return (0);
}
@@ -114,6 +139,50 @@
return (0);
}
+int
+aw_sid_get_rootkey(u_char *out)
+{
+ struct aw_sid_softc *sc;
+ int i;
+ u_int tmp;
+
+ sc = aw_sid_sc;
+ if (sc == NULL)
+ return (ENXIO);
+
+ for (i = 0; i < ROOT_KEY_SIZE ; i++) {
+ tmp = RD4(aw_sid_sc, ROOT_KEY_OFF + (i * 4));
+ out[i * 4] = (tmp & 0xFF000000) >> 24;
+ out[i * 4 + 1] = (tmp & 0x00FF0000) >> 16;
+ out[i * 4 + 2] = (tmp & 0x0000FF00) >> 8;
+ out[i * 4 + 3] = tmp & 0x000000FF;
+ }
+
+ return (0);
+}
+
+static int
+aw_sid_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ enum sid_keys key = arg2;
+ u_char rootkey[16];
+ char out[33];
+
+ if (key != AW_SID_ROOT_KEY)
+ return (ENOENT);
+
+ if (aw_sid_get_rootkey(rootkey) == ENXIO)
+ return (ENOENT);
+ snprintf(out, sizeof(out),
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ rootkey[0], rootkey[1], rootkey[2], rootkey[3],
+ rootkey[4], rootkey[5], rootkey[6], rootkey[7],
+ rootkey[8], rootkey[9], rootkey[10], rootkey[11],
+ rootkey[12], rootkey[13], rootkey[14], rootkey[15]);
+
+ return sysctl_handle_string(oidp, out, sizeof(out), req);
+}
+
static device_method_t aw_sid_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, aw_sid_probe),
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 16, 3:38 AM (11 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29751473
Default Alt Text
D6383.id16367.diff (2 KB)
Attached To
Mode
D6383: A10/A20 Security ID
Attached
Detach File
Event Timeline
Log In to Comment