diff options
author | Ramon Fried <ramon.fried@gmail.com> | 2018-05-30 23:09:58 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-06-07 17:08:06 -0400 |
commit | a74440b27b3f12d2cce54d7910953af19f1ac051 (patch) | |
tree | 3ba514ce64e860097787783dcc52410705e97cf6 /common | |
parent | b559c4af803fe22bef09a4e879fd8605391767f3 (diff) | |
download | u-boot-a74440b27b3f12d2cce54d7910953af19f1ac051.tar.gz u-boot-a74440b27b3f12d2cce54d7910953af19f1ac051.tar.xz u-boot-a74440b27b3f12d2cce54d7910953af19f1ac051.zip |
iotrace: add IO region limit
When dealing with a lot of IO regions, sometimes
it makes sense only to trace a specific one.
This patch adds support for region limits.
If region is not set, the iotrace works the same as it was.
If region is set, the iotrace only logs io operation that falls
in the defined region.
Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/iotrace.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/common/iotrace.c b/common/iotrace.c index b16b0d612d..f39885663a 100644 --- a/common/iotrace.c +++ b/common/iotrace.c @@ -42,6 +42,8 @@ struct iotrace_record { * @start: Start address of iotrace buffer * @size: Size of iotrace buffer in bytes * @offset: Current write offset into iotrace buffer + * @region_start: Address of IO region to trace + * @region_size: Size of region to trace. if 0 will trace all address space * @crc32: Current value of CRC chceksum of trace records * @enabled: true if enabled, false if disabled */ @@ -49,6 +51,8 @@ static struct iotrace { ulong start; ulong size; ulong offset; + ulong region_start; + ulong region_size; u32 crc32; bool enabled; } iotrace; @@ -66,6 +70,11 @@ static void add_record(int flags, const void *ptr, ulong value) if (!(gd->flags & GD_FLG_RELOC) || !iotrace.enabled) return; + if (iotrace.region_size) + if ((ulong)ptr < iotrace.region_start || + (ulong)ptr > iotrace.region_start + iotrace.region_size) + return; + /* Store it if there is room */ if (iotrace.offset + sizeof(*rec) < iotrace.size) { rec = (struct iotrace_record *)map_sysmem( @@ -142,6 +151,24 @@ u32 iotrace_get_checksum(void) return iotrace.crc32; } +void iotrace_set_region(ulong start, ulong size) +{ + iotrace.region_start = start; + iotrace.region_size = size; +} + +void iotrace_reset_region(void) +{ + iotrace.region_start = 0; + iotrace.region_size = 0; +} + +void iotrace_get_region(ulong *start, ulong *size) +{ + *start = iotrace.region_start; + *size = iotrace.region_size; +} + void iotrace_set_enabled(int enable) { iotrace.enabled = enable; |