Remove finger hack, add event decode regenerate self test

This commit is contained in:
mikee512 2025-05-24 15:26:16 -04:00 committed by Xelef2000
parent 8471d3bb3e
commit a72d01b1e4
5 changed files with 302 additions and 107 deletions

View file

@ -91,6 +91,30 @@ crfpmoc_strresult (int i)
return crfpmoc_meanings[i];
}
static const gchar *const crfpmoc_mkbp_event_names[] = {
"KEY_MATRIX",
"HOST_EVENT",
"SENSOR_FIFO",
"BUTTON",
"SWITCH",
"FINGERPRINT",
"SYSRQ",
"HOST_EVENT64",
"CEC_EVENT",
"CEC_MESSAGE",
"DP_ALT_MODE_ENTERED",
"ONLINE_CALIBRATION",
"PCHG",
};
static const gchar *
crfpmoc_mkbp_event_strresult (int i)
{
if (i < 0 || i >= G_N_ELEMENTS (crfpmoc_mkbp_event_names))
return "<unknown>";
return crfpmoc_mkbp_event_names[i];
}
static char *
get_print_data_descriptor (FpPrint *print, gint8 template)
{
@ -345,12 +369,16 @@ crfpmoc_read_bytes (gint fd, GIOCondition condition,
{
FpiDeviceCrfpMoc *self = FPI_DEVICE_CRFPMOC (user_data);
int rv;
gint event;
gboolean has_more;
struct crfpmoc_ec_response_get_next_event_v1 buffer = {0};
fp_dbg ("crfpmoc_read_bytes: called");
if (fd != self->fd)
goto one_shot_out;
rv = read (fd, &buffer, sizeof (buffer));
fp_dbg ("crfpmoc_read_bytes: read %d bytes", rv);
if (rv == 0)
{
@ -367,7 +395,97 @@ crfpmoc_read_bytes (gint fd, GIOCondition condition,
goto one_shot_out;
}
fp_dbg ("MKBP event %d data", buffer.event_type);
event = buffer.event_type & CRFPMOC_EC_MKBP_EVENT_TYPE_MASK;
has_more = buffer.event_type & CRFPMOC_EC_MKBP_HAS_MORE_EVENTS;
fp_dbg ("MKBP event %d (%s) data, more %d",
event, crfpmoc_mkbp_event_strresult (event), has_more);
switch (buffer.event_type)
{
case CRFPMOC_EC_MKBP_EVENT_FINGERPRINT:
fp_dbg ("crfpmoc_read_bytes: fingerprint 0x%08x", buffer.data.fp_events);
if (buffer.data.fp_events & CRFPMOC_EC_MKBP_FP_ENROLL)
{
guint error = CRFPMOC_EC_MKBP_FP_ERRCODE (buffer.data.fp_events);
const gchar *reason = NULL;
fp_dbg (" Enroll progress %d", CRFPMOC_EC_MKBP_FP_ENROLL_PROGRESS (buffer.data.fp_events));
switch (error)
{
case CRFPMOC_EC_MKBP_FP_ERR_ENROLL_OK:
reason = "OK";
break;
case CRFPMOC_EC_MKBP_FP_ERR_ENROLL_LOW_QUALITY:
reason = "LOW QUALITY";
break;
case CRFPMOC_EC_MKBP_FP_ERR_ENROLL_IMMOBILE:
break;
case CRFPMOC_EC_MKBP_FP_ERR_ENROLL_LOW_COVERAGE:
break;
case CRFPMOC_EC_MKBP_FP_ERR_ENROLL_INTERNAL:
break;
}
fp_dbg (" status: %d (%s)", error, reason ? reason : "");
}
if (buffer.data.fp_events & CRFPMOC_EC_MKBP_FP_MATCH)
{
guint error = CRFPMOC_EC_MKBP_FP_ERRCODE (buffer.data.fp_events);
guint index = CRFPMOC_EC_MKBP_FP_MATCH_IDX (buffer.data.fp_events);
const gchar *reason = NULL;
fp_dbg (" Match index %d, ok %s", index, error & 1 ? "yes" : "no");
switch (error)
{
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO:
reason = "NO";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_INTERNAL:
reason = "INTERNAL";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_TEMPLATES:
reason = "TEMPLATES";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_AUTH_FAIL:
reason = "AUTH FAIL";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_LOW_QUALITY:
reason = "LOW QUALITY";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_LOW_COVERAGE:
reason = "LOW COVERAGE";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES:
reason = "YES";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES_UPDATED:
reason = "UPDATED";
break;
case CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES_UPDATE_FAILED:
reason = "UPDATE FAILED";
break;
}
fp_dbg (" status: %d (%s)", error, reason ? reason : "");
}
if (buffer.data.fp_events & CRFPMOC_EC_MKBP_FP_FINGER_DOWN)
fp_dbg (" Finger down");
if (buffer.data.fp_events & CRFPMOC_EC_MKBP_FP_FINGER_UP)
fp_dbg (" Finger up");
if (buffer.data.fp_events & CRFPMOC_EC_MKBP_FP_IMAGE_READY)
fp_dbg (" Image ready");
break;
}
fpi_ssm_next_state (self->task_ssm);
one_shot_out:
@ -398,6 +516,7 @@ crfpmoc_ec_pollevent (FpiDeviceCrfpMoc *self, unsigned long mask)
}
self->poll_source = g_unix_fd_add (self->fd, G_IO_IN, crfpmoc_read_bytes, self);
fp_dbg ("crfpmoc_ec_pollevent: created poll source %d", self->poll_source);
}
static gboolean
@ -540,6 +659,8 @@ crfpmoc_cmd_fp_info (FpiDeviceCrfpMoc *self,
GError **error)
{
struct crfpmoc_ec_response_fp_info r;
gchar vendor[5];
const gchar *model = NULL;
gboolean rv;
rv = crfpmoc_ec_command (self, CRFPMOC_EC_CMD_FP_INFO, 1, NULL, 0, &r,
@ -547,8 +668,31 @@ crfpmoc_cmd_fp_info (FpiDeviceCrfpMoc *self,
if (rv != EC_RES_SUCCESS)
return FALSE;
fp_dbg ("Fingerprint sensor: vendor %x product %x model %x version %x",
r.vendor_id, r.product_id, r.model_id, r.version);
vendor[0] = r.vendor_id;
vendor[1] = r.vendor_id >> 8;
vendor[2] = r.vendor_id >> 16;
vendor[3] = r.vendor_id >> 24;
vendor[4] = '\0';
if (strcmp (vendor, "FPC ") == 0)
{
switch ((r.model_id >> 4) & 0xfff)
{
case 0x021:
model = "FPC1025";
break;
case 0x011:
model = "FPC1035";
break;
case 0x140:
model = "FPC1145";
break;
}
}
fp_dbg ("Fingerprint sensor: vendor %s product %x model %x (%s) version %x",
vendor, r.product_id, r.model_id, model ? model : "", r.version);
fp_dbg ("Image: size %dx%d %d bpp", r.width, r.height, r.bpp);
fp_dbg ("Templates: version %d size %d count %d/%d dirty bitmap %x",
r.template_version, r.template_size, r.template_valid, r.template_max,
@ -937,7 +1081,11 @@ crfpmoc_cancel (FpDevice *device)
/* Cancel any poll source */
if (self->poll_source)
g_source_remove (self->poll_source);
{
fp_dbg ("crfpmoc_cancel: remove poll source %d", self->poll_source);
g_source_remove (self->poll_source);
self->poll_source = 0;
}
/* Cancel the running state machine, if any */
if (self->task_ssm != NULL)
@ -1001,8 +1149,8 @@ handle_enroll_sensor_enroll (FpiSsm *ssm, FpiDeviceCrfpMoc *self)
}
static void
handle_enroll_wait_finger (FpDevice *device,
FpiDeviceCrfpMoc *self)
handle_enroll_wait_enroll_complete (FpDevice *device,
FpiDeviceCrfpMoc *self)
{
fpi_device_report_finger_status (device, FP_FINGER_STATUS_NEEDED);
crfpmoc_cmd_wait_event_fingerprint (self);
@ -1028,7 +1176,7 @@ handle_enroll_sensor_check (FpiSsm *ssm, FpDevice *device,
{
if (mode & CRFPMOC_FP_MODE_ENROLL_IMAGE)
{
fpi_ssm_jump_to_state (ssm, ENROLL_WAIT_FINGER);
fpi_ssm_jump_to_state (ssm, ENROLL_WAIT_ENROLL_COMPLETE);
}
else
{
@ -1133,8 +1281,8 @@ crfpmoc_enroll_run_state (FpiSsm *ssm, FpDevice *device)
handle_enroll_sensor_enroll (ssm, self);
break;
case ENROLL_WAIT_FINGER:
handle_enroll_wait_finger (device, self);
case ENROLL_WAIT_ENROLL_COMPLETE:
handle_enroll_wait_enroll_complete (device, self);
break;
case ENROLL_SENSOR_CHECK:
@ -1287,10 +1435,9 @@ handle_verify_sensor_match (FpiSsm *ssm, FpiDeviceCrfpMoc *self)
fpi_ssm_next_state (ssm);
}
#ifndef HACK_FINGER
static void
handle_verify_wait_finger (FpDevice *device,
FpiDeviceCrfpMoc *self)
handle_verify_wait_match_complete (FpDevice *device,
FpiDeviceCrfpMoc *self)
{
fpi_device_report_finger_status (device, FP_FINGER_STATUS_NEEDED);
crfpmoc_cmd_wait_event_fingerprint (self);
@ -1313,7 +1460,7 @@ handle_verify_sensor_check (FpiSsm *ssm, FpDevice *device,
{
if (mode & CRFPMOC_FP_MODE_MATCH)
{
fpi_ssm_jump_to_state (ssm, VERIFY_WAIT_FINGER);
fpi_ssm_jump_to_state (ssm, VERIFY_WAIT_MATCH_COMPLETE);
}
else if (mode == 0)
{
@ -1329,7 +1476,6 @@ handle_verify_sensor_check (FpiSsm *ssm, FpDevice *device,
}
}
}
#endif
static void
handle_verify_check (FpiSsm *ssm, FpDevice *device,
@ -1422,46 +1568,23 @@ crfpmoc_verify_run_state (FpiSsm *ssm, FpDevice *device)
{
FpiDeviceCrfpMoc *self = FPI_DEVICE_CRFPMOC (device);
#ifdef HACK_FINGER
guint32 mode;
GError * error = NULL;
#endif
switch (fpi_ssm_get_cur_state (ssm))
{
case VERIFY_UPLOAD_TEMPLATE:
handle_verify_upload_template (ssm, device, self);
break;
#ifdef HACK_FINGER
case VERIFY_FINGER_DOWN:
if (!crfpmoc_cmd_fp_mode (self, CRFPMOC_FP_MODE_FINGER_DOWN, &mode, &error))
fpi_ssm_mark_failed (ssm, error);
fpi_ssm_next_state (ssm);
break;
case VERIFY_FINGER_DOWN_WAIT:
crfpmoc_cmd_wait_for_it (ssm, device);
break;
#endif
case VERIFY_SENSOR_MATCH:
handle_verify_sensor_match (ssm, self);
break;
case VERIFY_SENSOR_MATCH_WAIT:
crfpmoc_cmd_wait_for_it (ssm, device);
break;
#ifndef HACK_FINGER
case VERIFY_WAIT_FINGER:
handle_verify_wait_finger (device, self);
case VERIFY_WAIT_MATCH_COMPLETE:
handle_verify_wait_match_complete (device, self);
break;
case VERIFY_SENSOR_CHECK:
handle_verify_sensor_check (ssm, device, self);
break;
#endif
case VERIFY_CHECK:
handle_verify_check (ssm, device, self);

View file

@ -33,8 +33,6 @@
G_DECLARE_FINAL_TYPE (FpiDeviceCrfpMoc, fpi_device_crfpmoc, FPI, DEVICE_CRFPMOC, FpDevice)
#define HACK_FINGER
#ifndef BIT
#define BIT(nr) (1UL << (nr))
#endif
@ -77,7 +75,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceCrfpMoc, fpi_device_crfpmoc, FPI, DEVICE_CRFPMOC,
#define CRFPMOC_FPSTATS_MATCHING_INV BIT (1)
/* New Fingerprint sensor event, the event data is fp_events bitmap. */
#define CRFPMOC_EC_MKBP_EVENT_FINGERPRINT 5
//#define CRFPMOC_EC_MKBP_EVENT_FINGERPRINT 5
/* Version of the format of the encrypted templates. */
#define CRFPMOC_FP_TEMPLATE_FORMAT_VERSION 4
@ -261,6 +259,101 @@ struct crfpmoc_ec_response_motion_sense_fifo_info
guint16 lost[0];
};
#define CRFPMOC_EC_MKBP_HAS_MORE_EVENTS_SHIFT 7
/*
* We use the most significant bit of the event type to indicate to the host
* that the EC has more MKBP events available to provide.
*/
#define CRFPMOC_EC_MKBP_HAS_MORE_EVENTS BIT (CRFPMOC_EC_MKBP_HAS_MORE_EVENTS_SHIFT)
/* The mask to apply to get the raw event type */
#define CRFPMOC_EC_MKBP_EVENT_TYPE_MASK (BIT (CRFPMOC_EC_MKBP_HAS_MORE_EVENTS_SHIFT) - 1)
enum ec_mkbp_event {
/* Keyboard matrix changed. The event data is the new matrix state. */
CRFPMOC_EC_MKBP_EVENT_KEY_MATRIX = 0,
/* New host event. The event data is 4 bytes of host event flags. */
CRFPMOC_EC_MKBP_EVENT_HOST_EVENT = 1,
/* New Sensor FIFO data. The event data is fifo_info structure. */
CRFPMOC_EC_MKBP_EVENT_SENSOR_FIFO = 2,
/* The state of the non-matrixed buttons have changed. */
CRFPMOC_EC_MKBP_EVENT_BUTTON = 3,
/* The state of the switches have changed. */
CRFPMOC_EC_MKBP_EVENT_SWITCH = 4,
/* New Fingerprint sensor event, the event data is fp_events bitmap. */
CRFPMOC_EC_MKBP_EVENT_FINGERPRINT = 5,
/*
* Sysrq event: send emulated sysrq. The event data is sysrq,
* corresponding to the key to be pressed.
*/
CRFPMOC_EC_MKBP_EVENT_SYSRQ = 6,
/*
* New 64-bit host event.
* The event data is 8 bytes of host event flags.
*/
CRFPMOC_EC_MKBP_EVENT_HOST_EVENT64 = 7,
/* Notify the AP that something happened on CEC */
CRFPMOC_EC_MKBP_EVENT_CEC_EVENT = 8,
/* Send an incoming CEC message to the AP */
CRFPMOC_EC_MKBP_EVENT_CEC_MESSAGE = 9,
/* We have entered DisplayPort Alternate Mode on a Type-C port. */
CRFPMOC_EC_MKBP_EVENT_DP_ALT_MODE_ENTERED = 10,
/* New online calibration values are available. */
CRFPMOC_EC_MKBP_EVENT_ONLINE_CALIBRATION = 11,
/* Peripheral device charger event */
CRFPMOC_EC_MKBP_EVENT_PCHG = 12,
/* Number of MKBP events */
CRFPMOC_EC_MKBP_EVENT_COUNT,
};
/* Fingerprint events in 'fp_events' for CRFPMOC_EC_MKBP_EVENT_FINGERPRINT */
#define CRFPMOC_EC_MKBP_FP_RAW_EVENT(fp_events) ((fp_events) & 0x00FFFFFF)
#define CRFPMOC_EC_MKBP_FP_ERRCODE(fp_events) ((fp_events) & 0x0000000F)
#define CRFPMOC_EC_MKBP_FP_ENROLL_PROGRESS_OFFSET 4
#define CRFPMOC_EC_MKBP_FP_ENROLL_PROGRESS(fpe) \
(((fpe) & 0x00000FF0) >> CRFPMOC_EC_MKBP_FP_ENROLL_PROGRESS_OFFSET)
#define CRFPMOC_EC_MKBP_FP_MATCH_IDX_OFFSET 12
#define CRFPMOC_EC_MKBP_FP_MATCH_IDX_MASK 0x0000F000
#define CRFPMOC_EC_MKBP_FP_MATCH_IDX(fpe) \
(((fpe)&CRFPMOC_EC_MKBP_FP_MATCH_IDX_MASK) >> CRFPMOC_EC_MKBP_FP_MATCH_IDX_OFFSET)
#define CRFPMOC_EC_MKBP_FP_ENROLL BIT (27)
#define CRFPMOC_EC_MKBP_FP_MATCH BIT (28)
#define CRFPMOC_EC_MKBP_FP_FINGER_DOWN BIT (29)
#define CRFPMOC_EC_MKBP_FP_FINGER_UP BIT (30)
#define CRFPMOC_EC_MKBP_FP_IMAGE_READY BIT (31)
/* code given by CRFPMOC_EC_MKBP_FP_ERRCODE() when CRFPMOC_EC_MKBP_FP_ENROLL is set */
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_OK 0
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_LOW_QUALITY 1
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_IMMOBILE 2
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_LOW_COVERAGE 3
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_INTERNAL 5
/* Can be used to detect if image was usable for enrollment or not. */
#define CRFPMOC_EC_MKBP_FP_ERR_ENROLL_PROBLEM_MASK 1
/* code given by CRFPMOC_EC_MKBP_FP_ERRCODE() when CRFPMOC_EC_MKBP_FP_MATCH is set */
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO 0
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_INTERNAL 6
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_TEMPLATES 7
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_AUTH_FAIL 8
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_LOW_QUALITY 2
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_NO_LOW_COVERAGE 4
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES 1
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES_UPDATED 3
#define CRFPMOC_EC_MKBP_FP_ERR_MATCH_YES_UPDATE_FAILED 5
union __attribute__((packed)) crfpmoc_ec_response_get_next_data_v1
{
guint8 key_matrix[16];
@ -357,7 +450,7 @@ enum crfpmoc_ec_status {
typedef enum {
ENROLL_SENSOR_ENROLL,
ENROLL_WAIT_FINGER,
ENROLL_WAIT_ENROLL_COMPLETE,
ENROLL_SENSOR_CHECK,
ENROLL_COMMIT,
ENROLL_STATES,
@ -365,13 +458,8 @@ typedef enum {
typedef enum {
VERIFY_UPLOAD_TEMPLATE,
#ifdef HACK_FINGER
VERIFY_FINGER_DOWN,
VERIFY_FINGER_DOWN_WAIT,
#endif
VERIFY_SENSOR_MATCH,
VERIFY_SENSOR_MATCH_WAIT,
VERIFY_WAIT_FINGER,
VERIFY_WAIT_MATCH_COMPLETE,
VERIFY_SENSOR_CHECK,
VERIFY_CHECK,
VERIFY_STATES,

View file

@ -74,18 +74,10 @@ CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 00000000050400007C0000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 48 010000000304000000000000300000000000000046504320090000001F020000010000009466000047524559A000A0000800FF0324140000050001000100000004000000
CROS_EC_DEV_IOCXCMD_V2 22 0000000007040000000000001600000000000000C07001006CF50200406B0400D4471CCB240000000000
CROS_EC_DEV_IOCXCMD_V2 22 00000000070400000000000016000000000000002471010024E802005C5E04003CD54A503A0000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000080000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000080000000
@ -117,18 +109,10 @@ CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 0000000005040000F80000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 0 00000000050400007C0000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000002000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000040000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 48 010000000304000000000000300000000000000046504320090000001F020000010000009466000047524559A000A0000800FF0324140000050001000100000004000000
CROS_EC_DEV_IOCXCMD_V2 22 0000000007040000000000001600000000000000C0700100A4F40200786A0400A8AE2CCB240000000000
CROS_EC_DEV_IOCXCMD_V2 22 000000000704000000000000160000000000000024710100E0EA020018610400342F58503A0000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000000000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000080000000
CROS_EC_DEV_IOCXCMD_V2 4 000000000204000004000000040000000000000080000000

View file

@ -52,39 +52,39 @@ A: power/runtime_usage=0\n
A: power/wakeup=enabled\n
A: power/wakeup_abort_count=0\n
A: power/wakeup_active=0\n
A: power/wakeup_active_count=785\n
A: power/wakeup_active_count=856\n
A: power/wakeup_count=0\n
A: power/wakeup_expire_count=0\n
A: power/wakeup_last_time_ms=153464742\n
A: power/wakeup_last_time_ms=247138441\n
A: power/wakeup_max_time_ms=0\n
A: power/wakeup_total_time_ms=0\n
A: statistics/bytes=4561436\n
A: statistics/bytes_rx=4561436\n
A: statistics/bytes_tx=962795\n
A: statistics/bytes=5478464\n
A: statistics/bytes_rx=5478464\n
A: statistics/bytes_tx=1240159\n
A: statistics/errors=0\n
A: statistics/messages=152584\n
A: statistics/messages=194027\n
A: statistics/spi_async=0\n
A: statistics/spi_sync=152584\n
A: statistics/spi_sync_immediate=152584\n
A: statistics/spi_sync=194027\n
A: statistics/spi_sync_immediate=194027\n
A: statistics/timedout=0\n
A: statistics/transfer_bytes_histo_0-1=28757\n
A: statistics/transfer_bytes_histo_0-1=39778\n
A: statistics/transfer_bytes_histo_1024-2047=0\n
A: statistics/transfer_bytes_histo_128-255=585\n
A: statistics/transfer_bytes_histo_16-31=1443\n
A: statistics/transfer_bytes_histo_128-255=718\n
A: statistics/transfer_bytes_histo_16-31=1581\n
A: statistics/transfer_bytes_histo_16384-32767=0\n
A: statistics/transfer_bytes_histo_2-3=380\n
A: statistics/transfer_bytes_histo_2-3=422\n
A: statistics/transfer_bytes_histo_2048-4095=0\n
A: statistics/transfer_bytes_histo_256-511=3192\n
A: statistics/transfer_bytes_histo_32-63=89947\n
A: statistics/transfer_bytes_histo_256-511=3907\n
A: statistics/transfer_bytes_histo_32-63=109157\n
A: statistics/transfer_bytes_histo_32768-65535=0\n
A: statistics/transfer_bytes_histo_4-7=1494\n
A: statistics/transfer_bytes_histo_4-7=1567\n
A: statistics/transfer_bytes_histo_4096-8191=0\n
A: statistics/transfer_bytes_histo_512-1023=711\n
A: statistics/transfer_bytes_histo_64-127=686\n
A: statistics/transfer_bytes_histo_64-127=724\n
A: statistics/transfer_bytes_histo_65536+=0\n
A: statistics/transfer_bytes_histo_8-15=25389\n
A: statistics/transfer_bytes_histo_8-15=35462\n
A: statistics/transfer_bytes_histo_8192-16383=0\n
A: statistics/transfers=152584\n
A: statistics/transfers=194027\n
A: statistics/transfers_split_maxsize=0\n
P: /devices/pci0000:00/0000:00:1e.3/pxa2xx-spi.8/spi_master/spi1
@ -100,33 +100,33 @@ A: power/runtime_status=unsupported\n
A: power/runtime_suspended_time=0\n
A: power/runtime_usage=0\n
L: software_node=../../../../../../kernel/software_nodes/node3
A: statistics/bytes=4561436\n
A: statistics/bytes_rx=4561436\n
A: statistics/bytes_tx=962795\n
A: statistics/bytes=5478464\n
A: statistics/bytes_rx=5478464\n
A: statistics/bytes_tx=1240159\n
A: statistics/errors=0\n
A: statistics/messages=152584\n
A: statistics/messages=194027\n
A: statistics/spi_async=0\n
A: statistics/spi_sync=152584\n
A: statistics/spi_sync_immediate=152584\n
A: statistics/spi_sync=194027\n
A: statistics/spi_sync_immediate=194027\n
A: statistics/timedout=0\n
A: statistics/transfer_bytes_histo_0-1=28757\n
A: statistics/transfer_bytes_histo_0-1=39778\n
A: statistics/transfer_bytes_histo_1024-2047=0\n
A: statistics/transfer_bytes_histo_128-255=585\n
A: statistics/transfer_bytes_histo_16-31=1443\n
A: statistics/transfer_bytes_histo_128-255=718\n
A: statistics/transfer_bytes_histo_16-31=1581\n
A: statistics/transfer_bytes_histo_16384-32767=0\n
A: statistics/transfer_bytes_histo_2-3=380\n
A: statistics/transfer_bytes_histo_2-3=422\n
A: statistics/transfer_bytes_histo_2048-4095=0\n
A: statistics/transfer_bytes_histo_256-511=3192\n
A: statistics/transfer_bytes_histo_32-63=89947\n
A: statistics/transfer_bytes_histo_256-511=3907\n
A: statistics/transfer_bytes_histo_32-63=109157\n
A: statistics/transfer_bytes_histo_32768-65535=0\n
A: statistics/transfer_bytes_histo_4-7=1494\n
A: statistics/transfer_bytes_histo_4-7=1567\n
A: statistics/transfer_bytes_histo_4096-8191=0\n
A: statistics/transfer_bytes_histo_512-1023=711\n
A: statistics/transfer_bytes_histo_64-127=686\n
A: statistics/transfer_bytes_histo_64-127=724\n
A: statistics/transfer_bytes_histo_65536+=0\n
A: statistics/transfer_bytes_histo_8-15=25389\n
A: statistics/transfer_bytes_histo_8-15=35462\n
A: statistics/transfer_bytes_histo_8192-16383=0\n
A: statistics/transfers=152584\n
A: statistics/transfers=194027\n
A: statistics/transfers_split_maxsize=0\n
A: waiting_for_supplier=0\n
@ -145,10 +145,10 @@ A: power/async=disabled\n
A: power/autosuspend_delay_ms=50\n
A: power/control=auto\n
A: power/runtime_active_kids=0\n
A: power/runtime_active_time=1159131\n
A: power/runtime_active_time=1738748\n
A: power/runtime_enabled=enabled\n
A: power/runtime_status=suspended\n
A: power/runtime_suspended_time=153162174\n
A: power/runtime_suspended_time=245399566\n
A: power/runtime_usage=0\n
L: software_node=../../../../kernel/software_nodes/node3
@ -191,10 +191,10 @@ A: power/async=enabled\n
A: power/control=auto\n
A: power/pm_qos_latency_tolerance_us=auto\n
A: power/runtime_active_kids=0\n
A: power/runtime_active_time=1613046\n
A: power/runtime_active_time=2432781\n
A: power/runtime_enabled=enabled\n
A: power/runtime_status=suspended\n
A: power/runtime_suspended_time=152711240\n
A: power/runtime_suspended_time=244708518\n
A: power/runtime_usage=0\n
A: power_state=D3hot\n
A: resource=0x000000007ff55000 0x000000007ff55fff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n

View file

@ -56,8 +56,8 @@ drivers_tests = [
'egismoc-0586',
'egismoc-0587',
'fpcmoc',
'realtek',
'realtek-5816',
'realtek',
'realtek-5816',
'focaltech_moc',
'crfpmoc',
]