From: "Cédric Le Goater" <clg@kaod.org>
To: Guenter Roeck <linux@roeck-us.net>,
Alistair Francis <alistair@alistair23.me>,
Kevin Wolf <kwolf@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
qemu-block@nongnu.org, Andrew Jeffery <andrew@aj.id.au>,
qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
qemu-arm@nongnu.org, Joel Stanley <joel@jms.id.au>
Subject: Re: [PATCH v2 1/4] m25p80: Convert to support tracing
Date: Mon, 16 Mar 2020 15:13:55 +0100 [thread overview]
Message-ID: <5589b5ce-1ff3-bf1e-ceae-fe82e1e1265c@kaod.org> (raw)
In-Reply-To: <488b3355-4467-e01e-d6a0-a2d5bc959428@kaod.org>
Hello,
On 2/17/20 4:47 PM, Cédric Le Goater wrote:
> Hello all,
>
> On 2/6/20 7:32 PM, Guenter Roeck wrote:
>> While at it, add some trace messages to help debug problems
>> seen when running the latest Linux kernel.
>
> Through which tree do you think it is best to merge this patchset ?
> block or arm ?
It would be nice to have these 4 patches for 5.0. All are reviewed and
tested.
Thanks,
C.
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>> v2: Print pointer to Flash data structure as flash ID with each trace
>> message to support systems with more than one instantiated flash.
>>
>> hw/block/m25p80.c | 48 ++++++++++++++++++++-----------------------
>> hw/block/trace-events | 16 +++++++++++++++
>> 2 files changed, 38 insertions(+), 26 deletions(-)
>>
>> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
>> index 61f2fb8f8f..5ff8d270c4 100644
>> --- a/hw/block/m25p80.c
>> +++ b/hw/block/m25p80.c
>> @@ -32,17 +32,7 @@
>> #include "qemu/module.h"
>> #include "qemu/error-report.h"
>> #include "qapi/error.h"
>> -
>> -#ifndef M25P80_ERR_DEBUG
>> -#define M25P80_ERR_DEBUG 0
>> -#endif
>> -
>> -#define DB_PRINT_L(level, ...) do { \
>> - if (M25P80_ERR_DEBUG > (level)) { \
>> - fprintf(stderr, ": %s: ", __func__); \
>> - fprintf(stderr, ## __VA_ARGS__); \
>> - } \
>> -} while (0)
>> +#include "trace.h"
>>
>> /* Fields for FlashPartInfo->flags */
>>
>> @@ -574,7 +564,8 @@ static void flash_erase(Flash *s, int offset, FlashCMD cmd)
>> abort();
>> }
>>
>> - DB_PRINT_L(0, "offset = %#x, len = %d\n", offset, len);
>> + trace_m25p80_flash_erase(s, offset, len);
>> +
>> if ((s->pi->flags & capa_to_assert) != capa_to_assert) {
>> qemu_log_mask(LOG_GUEST_ERROR, "M25P80: %d erase size not supported by"
>> " device\n", len);
>> @@ -607,8 +598,7 @@ void flash_write8(Flash *s, uint32_t addr, uint8_t data)
>> }
>>
>> if ((prev ^ data) & data) {
>> - DB_PRINT_L(1, "programming zero to one! addr=%" PRIx32 " %" PRIx8
>> - " -> %" PRIx8 "\n", addr, prev, data);
>> + trace_m25p80_programming_zero_to_one(s, addr, prev, data);
>> }
>>
>> if (s->pi->flags & EEPROM) {
>> @@ -662,6 +652,9 @@ static void complete_collecting_data(Flash *s)
>>
>> s->state = STATE_IDLE;
>>
>> + trace_m25p80_complete_collecting(s, s->cmd_in_progress, n, s->ear,
>> + s->cur_addr);
>> +
>> switch (s->cmd_in_progress) {
>> case DPP:
>> case QPP:
>> @@ -825,7 +818,7 @@ static void reset_memory(Flash *s)
>> break;
>> }
>>
>> - DB_PRINT_L(0, "Reset done.\n");
>> + trace_m25p80_reset_done(s);
>> }
>>
>> static void decode_fast_read_cmd(Flash *s)
>> @@ -941,9 +934,10 @@ static void decode_qio_read_cmd(Flash *s)
>>
>> static void decode_new_cmd(Flash *s, uint32_t value)
>> {
>> - s->cmd_in_progress = value;
>> int i;
>> - DB_PRINT_L(0, "decoded new command:%x\n", value);
>> +
>> + s->cmd_in_progress = value;
>> + trace_m25p80_command_decoded(s, value);
>>
>> if (value != RESET_MEMORY) {
>> s->reset_enable = false;
>> @@ -1042,7 +1036,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>> break;
>>
>> case JEDEC_READ:
>> - DB_PRINT_L(0, "populated jedec code\n");
>> + trace_m25p80_populated_jedec(s);
>> for (i = 0; i < s->pi->id_len; i++) {
>> s->data[i] = s->pi->id[i];
>> }
>> @@ -1063,7 +1057,7 @@ static void decode_new_cmd(Flash *s, uint32_t value)
>> case BULK_ERASE_60:
>> case BULK_ERASE:
>> if (s->write_enable) {
>> - DB_PRINT_L(0, "chip erase\n");
>> + trace_m25p80_chip_erase(s);
>> flash_erase(s, 0, BULK_ERASE);
>> } else {
>> qemu_log_mask(LOG_GUEST_ERROR, "M25P80: chip erase with write "
>> @@ -1184,7 +1178,7 @@ static int m25p80_cs(SSISlave *ss, bool select)
>> s->data_read_loop = false;
>> }
>>
>> - DB_PRINT_L(0, "%sselect\n", select ? "de" : "");
>> + trace_m25p80_select(s, select ? "de" : "");
>>
>> return 0;
>> }
>> @@ -1194,19 +1188,20 @@ static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx)
>> Flash *s = M25P80(ss);
>> uint32_t r = 0;
>>
>> + trace_m25p80_transfer(s, s->state, s->len, s->needed_bytes, s->pos,
>> + s->cur_addr, (uint8_t)tx);
>> +
>> switch (s->state) {
>>
>> case STATE_PAGE_PROGRAM:
>> - DB_PRINT_L(1, "page program cur_addr=%#" PRIx32 " data=%" PRIx8 "\n",
>> - s->cur_addr, (uint8_t)tx);
>> + trace_m25p80_page_program(s, s->cur_addr, (uint8_t)tx);
>> flash_write8(s, s->cur_addr, (uint8_t)tx);
>> s->cur_addr = (s->cur_addr + 1) & (s->size - 1);
>> break;
>>
>> case STATE_READ:
>> r = s->storage[s->cur_addr];
>> - DB_PRINT_L(1, "READ 0x%" PRIx32 "=%" PRIx8 "\n", s->cur_addr,
>> - (uint8_t)r);
>> + trace_m25p80_read_byte(s, s->cur_addr, (uint8_t)r);
>> s->cur_addr = (s->cur_addr + 1) & (s->size - 1);
>> break;
>>
>> @@ -1244,6 +1239,7 @@ static uint32_t m25p80_transfer8(SSISlave *ss, uint32_t tx)
>> }
>>
>> r = s->data[s->pos];
>> + trace_m25p80_read_data(s, s->pos, (uint8_t)r);
>> s->pos++;
>> if (s->pos == s->len) {
>> s->pos = 0;
>> @@ -1281,7 +1277,7 @@ static void m25p80_realize(SSISlave *ss, Error **errp)
>> return;
>> }
>>
>> - DB_PRINT_L(0, "Binding to IF_MTD drive\n");
>> + trace_m25p80_binding(s);
>> s->storage = blk_blockalign(s->blk, s->size);
>>
>> if (blk_pread(s->blk, 0, s->storage, s->size) != s->size) {
>> @@ -1289,7 +1285,7 @@ static void m25p80_realize(SSISlave *ss, Error **errp)
>> return;
>> }
>> } else {
>> - DB_PRINT_L(0, "No BDRV - binding to RAM\n");
>> + trace_m25p80_binding_no_bdrv(s);
>> s->storage = blk_blockalign(NULL, s->size);
>> memset(s->storage, 0xFF, s->size);
>> }
>> diff --git a/hw/block/trace-events b/hw/block/trace-events
>> index c03e80c2c9..f78939fa9d 100644
>> --- a/hw/block/trace-events
>> +++ b/hw/block/trace-events
>> @@ -134,3 +134,19 @@ xen_block_blockdev_add(char *str) "%s"
>> xen_block_blockdev_del(const char *node_name) "%s"
>> xen_block_device_create(unsigned int number) "%u"
>> xen_block_device_destroy(unsigned int number) "%u"
>> +
>> +# m25p80.c
>> +m25p80_flash_erase(void *s, int offset, uint32_t len) "[%p] offset = 0x%"PRIx32", len = %u"
>> +m25p80_programming_zero_to_one(void *s, uint32_t addr, uint8_t prev, uint8_t data) "[%p] programming zero to one! addr=0x%"PRIx32" 0x%"PRIx8" -> 0x%"PRIx8
>> +m25p80_reset_done(void *s) "[%p] Reset done."
>> +m25p80_command_decoded(void *s, uint32_t cmd) "[%p] new command:0x%"PRIx32
>> +m25p80_complete_collecting(void *s, uint32_t cmd, int n, uint8_t ear, uint32_t cur_addr) "[%p] decode cmd: 0x%"PRIx32" len %d ear 0x%"PRIx8" addr 0x%"PRIx32
>> +m25p80_populated_jedec(void *s) "[%p] populated jedec code"
>> +m25p80_chip_erase(void *s) "[%p] chip erase"
>> +m25p80_select(void *s, const char *what) "[%p] %sselect"
>> +m25p80_page_program(void *s, uint32_t addr, uint8_t tx) "[%p] page program cur_addr=0x%"PRIx32" data=0x%"PRIx8
>> +m25p80_transfer(void *s, uint8_t state, uint32_t len, uint8_t needed, uint32_t pos, uint32_t cur_addr, uint8_t t) "[%p] Transfer state 0x%"PRIx8" len 0x%"PRIx32" needed 0x%"PRIx8" pos 0x%"PRIx32" addr 0x%"PRIx32" tx 0x%"PRIx8
>> +m25p80_read_byte(void *s, uint32_t addr, uint8_t v) "[%p] Read byte 0x%"PRIx32"=0x%"PRIx8
>> +m25p80_read_data(void *s, uint32_t pos, uint8_t v) "[%p] Read data 0x%"PRIx32"=0x%"PRIx8
>> +m25p80_binding(void *s) "[%p] Binding to IF_MTD drive"
>> +m25p80_binding_no_bdrv(void *s) "[%p] No BDRV - binding to RAM"
>>
>
next prev parent reply other threads:[~2020-03-16 16:28 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-06 18:32 [PATCH v2 1/4] m25p80: Convert to support tracing Guenter Roeck
2020-02-06 18:32 ` [PATCH v2 2/4] m25p80: Improve command handling for Jedec commands Guenter Roeck
2020-02-06 18:36 ` Philippe Mathieu-Daudé
2020-02-06 22:26 ` Alistair Francis
2020-02-07 7:22 ` Cédric Le Goater
2020-07-21 17:36 ` Cédric Le Goater
2020-07-21 19:57 ` Guenter Roeck
2020-07-22 8:02 ` Cédric Le Goater
2020-07-22 10:19 ` Philippe Mathieu-Daudé
2020-02-06 18:32 ` [PATCH v2 3/4] m25p80: Improve command handling for unsupported commands Guenter Roeck
2020-02-07 0:21 ` Philippe Mathieu-Daudé
2020-02-07 7:22 ` Cédric Le Goater
2020-02-06 18:32 ` [PATCH v2 4/4] aspeed/smc: Fix number of dummy cycles for FAST_READ_4 command Guenter Roeck
2020-02-06 18:39 ` Philippe Mathieu-Daudé
2020-02-06 18:40 ` [PATCH v2 1/4] m25p80: Convert to support tracing Philippe Mathieu-Daudé
2020-02-06 22:19 ` Alistair Francis
2020-02-07 7:22 ` Cédric Le Goater
2020-02-17 15:47 ` Cédric Le Goater
2020-03-16 14:13 ` Cédric Le Goater [this message]
2020-03-16 14:58 ` Peter Maydell
2020-03-16 15:11 ` Cédric Le Goater
2020-03-16 15:29 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5589b5ce-1ff3-bf1e-ceae-fe82e1e1265c@kaod.org \
--to=clg@kaod.org \
--cc=alistair@alistair23.me \
--cc=andrew@aj.id.au \
--cc=joel@jms.id.au \
--cc=kwolf@redhat.com \
--cc=linux@roeck-us.net \
--cc=mreitz@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).