[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 13/32] sdcard: add more trace events
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 13/32] sdcard: add more trace events |
Date: |
Thu, 22 Feb 2018 15:22:48 +0000 |
From: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
Acked-by: Alistair Francis <address@hidden>
Message-id: address@hidden
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
---
hw/sd/sd.c | 32 ++++++++++++++++++++++++++------
hw/sd/trace-events | 13 +++++++++++++
2 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index ceab263970..564f7a9bfd 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -179,6 +179,8 @@ static bool sd_get_cmd_line(SDState *sd)
static void sd_set_voltage(SDState *sd, uint16_t millivolts)
{
+ trace_sdcard_set_voltage(millivolts);
+
switch (millivolts) {
case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
@@ -274,6 +276,7 @@ static void sd_ocr_powerup(void *opaque)
{
SDState *sd = opaque;
+ trace_sdcard_powerup();
/* Set powered up bit in OCR */
assert(!(sd->ocr & OCR_POWER_UP));
sd->ocr |= OCR_POWER_UP;
@@ -477,6 +480,7 @@ static void sd_reset(DeviceState *dev)
uint64_t size;
uint64_t sect;
+ trace_sdcard_reset();
if (sd->blk) {
blk_get_geometry(sd->blk, §);
} else {
@@ -530,7 +534,10 @@ static void sd_cardchange(void *opaque, bool load, Error
**errp)
bool readonly = sd_get_readonly(sd);
if (inserted) {
+ trace_sdcard_inserted(readonly);
sd_reset(dev);
+ } else {
+ trace_sdcard_ejected();
}
/* The IRQ notification is for legacy non-QOM SD controller devices;
@@ -662,6 +669,7 @@ static void sd_erase(SDState *sd)
uint64_t erase_start = sd->erase_start;
uint64_t erase_end = sd->erase_end;
+ trace_sdcard_erase();
if (!sd->erase_start || !sd->erase_end) {
sd->card_status |= ERASE_SEQ_ERROR;
return;
@@ -751,6 +759,11 @@ static void sd_lock_command(SDState *sd)
else
pwd_len = 0;
+ if (lock) {
+ trace_sdcard_lock();
+ } else {
+ trace_sdcard_unlock();
+ }
if (erase) {
if (!(sd->card_status & CARD_IS_LOCKED) || sd->blk_len > 1 ||
set_pwd || clr_pwd || lock || sd->wp_switch ||
@@ -1077,10 +1090,12 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
case 16: /* CMD16: SET_BLOCKLEN */
switch (sd->state) {
case sd_transfer_state:
- if (req.arg > (1 << HWBLOCK_SHIFT))
+ if (req.arg > (1 << HWBLOCK_SHIFT)) {
sd->card_status |= BLOCK_LEN_ERROR;
- else
+ } else {
+ trace_sdcard_set_blocklen(req.arg);
sd->blk_len = req.arg;
+ }
return sd_r1;
@@ -1452,10 +1467,13 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
if ((req.arg & ACMD41_ENQUIRY_MASK) != 0) {
timer_del(sd->ocr_power_timer);
sd_ocr_powerup(sd);
- } else if (!timer_pending(sd->ocr_power_timer)) {
- timer_mod_ns(sd->ocr_power_timer,
- (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
- + OCR_POWER_DELAY_NS));
+ } else {
+ trace_sdcard_inquiry_cmd41();
+ if (!timer_pending(sd->ocr_power_timer)) {
+ timer_mod_ns(sd->ocr_power_timer,
+ (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
+ + OCR_POWER_DELAY_NS));
+ }
}
}
@@ -1668,6 +1686,7 @@ void sd_write_data(SDState *sd, uint8_t value)
if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
return;
+ trace_sdcard_write_data(sd->current_cmd, value);
switch (sd->current_cmd) {
case 24: /* CMD24: WRITE_SINGLE_BLOCK */
sd->data[sd->data_offset ++] = value;
@@ -1805,6 +1824,7 @@ uint8_t sd_read_data(SDState *sd)
io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len;
+ trace_sdcard_read_data(sd->current_cmd, io_len);
switch (sd->current_cmd) {
case 6: /* CMD6: SWITCH_FUNCTION */
ret = sd->data[sd->data_offset ++];
diff --git a/hw/sd/trace-events b/hw/sd/trace-events
index b2aa19ec0d..3040d32560 100644
--- a/hw/sd/trace-events
+++ b/hw/sd/trace-events
@@ -27,8 +27,21 @@ sdhci_capareg(const char *desc, uint16_t val) "%s: %u"
sdcard_normal_command(uint8_t cmd, uint32_t arg, const char *state) "CMD%d arg
0x%08x (state %s)"
sdcard_app_command(uint8_t acmd, uint32_t arg) "ACMD%d arg 0x%08x"
sdcard_response(const char *rspdesc, int rsplen) "%s (sz:%d)"
+sdcard_powerup(void) ""
+sdcard_inquiry_cmd41(void) ""
+sdcard_set_enable(bool current_state, bool new_state) "%u -> %u"
+sdcard_reset(void) ""
+sdcard_set_blocklen(uint16_t length) "0x%04x"
+sdcard_inserted(bool readonly) "read_only: %u"
+sdcard_ejected(void) ""
+sdcard_erase(void) ""
+sdcard_lock(void) ""
+sdcard_unlock(void) ""
sdcard_read_block(uint64_t addr, uint32_t len) "addr 0x%" PRIx64 " size 0x%x"
sdcard_write_block(uint64_t addr, uint32_t len) "addr 0x%" PRIx64 " size 0x%x"
+sdcard_write_data(uint8_t cmd, uint8_t value) "CMD%02d value 0x%02x"
+sdcard_read_data(uint8_t cmd, int length) "CMD%02d len %d"
+sdcard_set_voltage(uint16_t millivolts) "%u mV"
# hw/sd/milkymist-memcard.c
milkymist_memcard_memory_read(uint32_t addr, uint32_t value) "addr 0x%08x
value 0x%08x"
--
2.16.1
- [Qemu-devel] [PULL 04/32] Fix ast2500 protection register emulation, (continued)
- [Qemu-devel] [PULL 04/32] Fix ast2500 protection register emulation, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 01/32] target/arm: Fix register definitions for VMIDR and VMPIDR, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 05/32] hw/sd/milkymist-memcard: use qemu_log_mask(), Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 06/32] hw/sd/milkymist-memcard: split realize() out of SysBusDevice init(), Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 02/32] raspi: Add "raspi3" machine type, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 08/32] hw/sd/ssi-sd: use the SDBus API, connect the SDCard to the bus, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 10/32] sdcard: replace DPRINTF() by trace events, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 07/32] hw/sd/milkymist-memcard: expose a SDBus and connect the SDCard to it, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 09/32] sdcard: reorder SDState struct members, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 11/32] sdcard: add a trace event for command responses, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 13/32] sdcard: add more trace events,
Peter Maydell <=
- [Qemu-devel] [PULL 12/32] sdcard: replace fprintf() by qemu_hexdump(), Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 14/32] sdcard: define SDMMC_CMD_MAX instead of using the magic '64', Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 17/32] sdcard: Don't always set the high capacity bit, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 19/32] sdcard: fix the 'maximum data transfer rate' to 25MHz, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 20/32] sdcard: clean the SCR register and add few comments, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 16/32] sdcard: use the registerfields API to access the OCR register, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 15/32] sdcard: use G_BYTE from cutils, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 21/32] sdcard: remove commands from unsupported old MMC specification, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 18/32] sdcard: update the CSD CRC register regardless the CSD structure version, Peter Maydell, 2018/02/22
- [Qemu-devel] [PULL 23/32] sdcard: use the correct masked OCR in the R3 reply, Peter Maydell, 2018/02/22