aboutsummaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2021-06-25 11:49:23 +0530
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2021-06-30 15:05:55 +0530
commitbaf6c343e661b1e9de13ecd363494dbabeb7aa84 (patch)
treeac85e0c0e4236055a98e475238f9db8a63ec0650 /external
parenta382d1638aaf96371321a177a92286444fceec0d (diff)
downloadskiboot-baf6c343e661b1e9de13ecd363494dbabeb7aa84.zip
skiboot-baf6c343e661b1e9de13ecd363494dbabeb7aa84.tar.gz
skiboot-baf6c343e661b1e9de13ecd363494dbabeb7aa84.tar.bz2
i2c,trace: Add I2C operation trace events
Add support for tracing I2C transactions performed by skiboot. This covers both internally initiated I2C ops and those that requested by the kernel via the OPAL API. Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Diffstat (limited to 'external')
-rw-r--r--external/trace/dump_trace.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/external/trace/dump_trace.c b/external/trace/dump_trace.c
index c68eea8..f54dfa0 100644
--- a/external/trace/dump_trace.c
+++ b/external/trace/dump_trace.c
@@ -149,6 +149,36 @@ static void dump_uart(struct trace_uart *t)
}
}
+static void dump_i2c(struct trace_i2c *t)
+{
+ uint16_t type = be16_to_cpu(t->type);
+
+ printf("I2C: bus: %d dev: %02x len: %x ",
+ be16_to_cpu(t->bus),
+ be16_to_cpu(t->i2c_addr),
+ be16_to_cpu(t->size)
+ );
+
+ switch (type & 0x3) {
+ case 0:
+ printf("read");
+ break;
+ case 1:
+ printf("write");
+ break;
+ case 2:
+ printf("smbus read from %x", be16_to_cpu(t->smbus_reg));
+ break;
+ case 3:
+ printf("smbus write to %x", be16_to_cpu(t->smbus_reg));
+ break;
+ default:
+ printf("u wot?");
+ }
+
+ printf(", rc = %hd\n", (int16_t) be16_to_cpu(t->rc));
+}
+
static void load_traces(struct trace_reader *trs, int count)
{
struct trace_entry *te;
@@ -189,6 +219,9 @@ static void print_trace(union trace *t)
case TRACE_UART:
dump_uart(&t->uart);
break;
+ case TRACE_I2C:
+ dump_i2c(&t->i2c);
+ break;
default:
printf("UNKNOWN(%u) CPU %u length %u\n",
t->hdr.type, be16_to_cpu(t->hdr.cpu),