diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2019-12-08 22:22:58 +1000 |
---|---|---|
committer | Oliver O'Halloran <oohall@gmail.com> | 2019-12-16 14:50:56 +1100 |
commit | 1959efa66e9f9626f83a41a870057d8eb0426c54 (patch) | |
tree | 08619420f01d6cf562f4a2ee67eee5e91c0c5c1b | |
parent | 45c1436a000707a2da7e8e50bae43e1466dcf15a (diff) | |
download | skiboot-1959efa66e9f9626f83a41a870057d8eb0426c54.zip skiboot-1959efa66e9f9626f83a41a870057d8eb0426c54.tar.gz skiboot-1959efa66e9f9626f83a41a870057d8eb0426c54.tar.bz2 |
debug descriptor: make endian-clean
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
-rw-r--r-- | core/init.c | 9 | ||||
-rw-r--r-- | core/trace.c | 22 | ||||
-rw-r--r-- | include/debug_descriptor.h | 26 | ||||
-rw-r--r-- | platforms/ibm-fsp/common.c | 19 |
4 files changed, 41 insertions, 35 deletions
diff --git a/core/init.c b/core/init.c index d90695c..b7bf2e5 100644 --- a/core/init.c +++ b/core/init.c @@ -72,9 +72,9 @@ void skiboot_gcov_done(void); struct debug_descriptor debug_descriptor = { .eye_catcher = "OPALdbug", - .version = DEBUG_DESC_VERSION, + .version = CPU_TO_BE32(DEBUG_DESC_VERSION), .state_flags = 0, - .memcons_phys = (uint64_t)&memcons, + .memcons_phys = 0, /* cpu_to_be64(&memcons) can't init constant */ .trace_mask = 0, /* All traces disabled by default */ /* console log level: * high 4 bits in memory, low 4 bits driver (e.g. uart). */ @@ -1009,6 +1009,11 @@ void __noreturn __nomcount main_cpu_entry(const void *fdt) pre_init_boot_cpu(); /* + * Point to our mem console + */ + debug_descriptor.memcons_phys = cpu_to_be64((uint64_t)&memcons); + + /* * Before first printk, ensure console buffer is clear or * reading tools might think it has wrapped */ diff --git a/core/trace.c b/core/trace.c index 5388972..5c71370 100644 --- a/core/trace.c +++ b/core/trace.c @@ -121,7 +121,7 @@ void trace_add(union trace *trace, u8 type, u16 len) #endif /* Skip traces not enabled in the debug descriptor */ if (trace->hdr.type < (8 * sizeof(debug_descriptor.trace_mask)) && - !((1ul << trace->hdr.type) & debug_descriptor.trace_mask)) + !((1ul << trace->hdr.type) & be64_to_cpu(debug_descriptor.trace_mask))) return; trace->hdr.timestamp = cpu_to_be64(mftb()); @@ -171,12 +171,12 @@ static void trace_add_dt_props(void) if (!exports) return; - prop = malloc(sizeof(u64) * 2 * debug_descriptor.num_traces); + prop = malloc(sizeof(u64) * 2 * be32_to_cpu(debug_descriptor.num_traces)); - for (i = 0; i < debug_descriptor.num_traces; i++) { - uint64_t addr = debug_descriptor.trace_phys[i]; - uint64_t size = debug_descriptor.trace_size[i]; - uint32_t pir = debug_descriptor.trace_pir[i]; + for (i = 0; i < be32_to_cpu(debug_descriptor.num_traces); i++) { + uint64_t addr = be64_to_cpu(debug_descriptor.trace_phys[i]); + uint64_t size = be32_to_cpu(debug_descriptor.trace_size[i]); + uint32_t pir = be16_to_cpu(debug_descriptor.trace_pir[i]); prop[i * 2] = cpu_to_fdt64(addr); prop[i * 2 + 1] = cpu_to_fdt64(size); @@ -199,18 +199,18 @@ static void trace_add_dt_props(void) static void trace_add_desc(struct trace_info *t, uint64_t size, uint16_t pir) { - unsigned int i = debug_descriptor.num_traces; + unsigned int i = be32_to_cpu(debug_descriptor.num_traces); if (i >= DEBUG_DESC_MAX_TRACES) { prerror("TRACE: Debug descriptor trace list full !\n"); return; } - debug_descriptor.num_traces++; - debug_descriptor.trace_phys[i] = (uint64_t)t; + debug_descriptor.num_traces = cpu_to_be32(i + 1); + debug_descriptor.trace_phys[i] = cpu_to_be64((uint64_t)t); debug_descriptor.trace_tce[i] = 0; /* populated later */ - debug_descriptor.trace_size[i] = size; - debug_descriptor.trace_pir[i] = pir; + debug_descriptor.trace_size[i] = cpu_to_be32(size); + debug_descriptor.trace_pir[i] = cpu_to_be16(pir); } /* Allocate trace buffers once we know memory topology */ diff --git a/include/debug_descriptor.h b/include/debug_descriptor.h index 774c360..cbe9293 100644 --- a/include/debug_descriptor.h +++ b/include/debug_descriptor.h @@ -11,27 +11,27 @@ struct debug_descriptor { u8 eye_catcher[8]; /* "OPALdbug" */ #define DEBUG_DESC_VERSION 1 - u32 version; + __be32 version; u8 console_log_levels; /* high 4 bits in memory, * low 4 bits driver (e.g. uart). */ u8 state_flags; /* various state flags - OPAL_BOOT_COMPLETE etc */ - u16 reserved2; - u32 reserved[2]; + __be16 reserved2; + __be32 reserved[2]; /* Memory console */ - u64 memcons_phys; - u32 memcons_tce; - u32 memcons_obuf_tce; - u32 memcons_ibuf_tce; + __be64 memcons_phys; + __be32 memcons_tce; + __be32 memcons_obuf_tce; + __be32 memcons_ibuf_tce; /* Traces */ - u64 trace_mask; - u32 num_traces; + __be64 trace_mask; + __be32 num_traces; #define DEBUG_DESC_MAX_TRACES 256 - u64 trace_phys[DEBUG_DESC_MAX_TRACES]; - u32 trace_size[DEBUG_DESC_MAX_TRACES]; - u32 trace_tce[DEBUG_DESC_MAX_TRACES]; - u16 trace_pir[DEBUG_DESC_MAX_TRACES]; + __be64 trace_phys[DEBUG_DESC_MAX_TRACES]; + __be32 trace_size[DEBUG_DESC_MAX_TRACES]; + __be32 trace_tce[DEBUG_DESC_MAX_TRACES]; + __be16 trace_pir[DEBUG_DESC_MAX_TRACES]; }; extern struct debug_descriptor debug_descriptor; diff --git a/platforms/ibm-fsp/common.c b/platforms/ibm-fsp/common.c index 48b9fd8..c288bff 100644 --- a/platforms/ibm-fsp/common.c +++ b/platforms/ibm-fsp/common.c @@ -24,14 +24,14 @@ static void map_debug_areas(void) fsp_tce_map(PSI_DMA_MEMCONS, &memcons, 0x1000); fsp_tce_map(PSI_DMA_LOG_BUF, (void*)INMEM_CON_START, INMEM_CON_LEN); - debug_descriptor.memcons_tce = PSI_DMA_MEMCONS; + debug_descriptor.memcons_tce = cpu_to_be32(PSI_DMA_MEMCONS); t = be64_to_cpu(memcons.obuf_phys) - INMEM_CON_START + PSI_DMA_LOG_BUF; - debug_descriptor.memcons_obuf_tce = t; + debug_descriptor.memcons_obuf_tce = cpu_to_be32(t); t = be64_to_cpu(memcons.ibuf_phys) - INMEM_CON_START + PSI_DMA_LOG_BUF; - debug_descriptor.memcons_ibuf_tce = t; + debug_descriptor.memcons_ibuf_tce = cpu_to_be32(t); t = PSI_DMA_TRACE_BASE; - for (i = 0; i < debug_descriptor.num_traces; i++) { + for (i = 0; i < be32_to_cpu(debug_descriptor.num_traces); i++) { /* * Trace buffers are misaligned by 0x10 due to the lock * in the trace structure, and their size is also not @@ -46,15 +46,16 @@ static void map_debug_areas(void) * Note: Maybe we should map them read-only... */ uint64_t tstart, tend, toff, tsize; + uint64_t trace_phys = be64_to_cpu(debug_descriptor.trace_phys[i]); + uint32_t trace_size = be32_to_cpu(debug_descriptor.trace_size[i]); - tstart = ALIGN_DOWN(debug_descriptor.trace_phys[i], 0x1000); - tend = ALIGN_UP(debug_descriptor.trace_phys[i] + - debug_descriptor.trace_size[i], 0x1000); - toff = debug_descriptor.trace_phys[i] - tstart; + tstart = ALIGN_DOWN(trace_phys, 0x1000); + tend = ALIGN_UP(trace_phys + trace_size, 0x1000); + toff = trace_phys - tstart; tsize = tend - tstart; fsp_tce_map(t, (void *)tstart, tsize); - debug_descriptor.trace_tce[i] = t + toff; + debug_descriptor.trace_tce[i] = cpu_to_be32(t + toff); t += tsize; } } |