From patchwork Wed Dec 13 23:20:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 848295 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="tozJ/hAH"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yxtCn5Llvz9t3t for ; Thu, 14 Dec 2017 10:28:04 +1100 (AEDT) Received: from localhost ([::1]:38257 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ePGRV-0001Ug-TW for incoming@patchwork.ozlabs.org; Wed, 13 Dec 2017 18:28:01 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60603) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ePGM3-0005Yd-Oi for qemu-devel@nongnu.org; Wed, 13 Dec 2017 18:22:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ePGM1-0007oh-Mr for qemu-devel@nongnu.org; Wed, 13 Dec 2017 18:22:23 -0500 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:36226) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ePGM1-0007o6-IA for qemu-devel@nongnu.org; Wed, 13 Dec 2017 18:22:21 -0500 Received: by mail-qk0-x243.google.com with SMTP id 8so4146278qkj.3 for ; Wed, 13 Dec 2017 15:22:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FCi5ZTRPd6JcXkuz0I2a0cvqFahVEln2csNgHbGgjtw=; b=tozJ/hAHUZGH1nEWqMo7BjeBlVy73MoNttl9ukpuy9uBxLJKSM5MgnKY4OrFvogc9S vAO1AOXUJft1NMwk8Jm3uzl6hgmi+VZgtdOc9R/Fu2WwVSGXQ3ei/pU+5TO6nQHIhKnG fE6B9Kr59mxoT0/akbCl3es4/FM+uPhJdZ2BdThVSdafJPm/BFj7LrnPDLnqcRPv3EE4 /aNP1y7AYcE+rP+AUQ1yIjdngi/NjzpHGCxmqMzZ1x3Sfulzkf/8LvlTg2gFZRAdIRVS V5enIanulNtXZQAoliUrvEkmNk9h8koOikPjK5vUqYUS6M4CeeEb98cXmxEo9KafIjx6 q8wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=FCi5ZTRPd6JcXkuz0I2a0cvqFahVEln2csNgHbGgjtw=; b=P7FVFV+iyJ1l4JxL+wrYnVzWTHWSAgJvP2bGHN2sunZ2485gSGgA5XudtG0pexxt1h SE31fb3uBhv17MRf7v+CUnWnsrg72Xt8Oznxwd8FLzjSiGrhDUYaHyZMncU69EEESR3S HeMzOWZ+ht4jOgcPZzUnJOOktVLJEc+cz7zShWhoRAxYqdcrMDkm7o96BC5aXJxbAwWh Vw174A2HUG8OuQZPgeujHsZoJg3ju63Ncuk3lxkfo1BoM5c3n4YwKX30XOsmXwDmywlP UaMGXa9fRZkkUbNwu2MZf7/gZ6TOuAd40cqTnH3CIsaYMnS+DNBYXNMOa4LT7gcjpGk/ VNow== X-Gm-Message-State: AKGB3mKGtVQJsKW0X3fcilJAIWPEyaSxNEzFEXpH1tRV+pmKb6VpLC6b 0K5N0z+PSmMp8Ar1Fu7iUzA= X-Google-Smtp-Source: ACJfBot9flt4K4AOZMOOiN5sOsI0YayIJRBY8q4o6kxRZRTiRjK1CRkLyCzhOE7voh/GvDV2PvKL5w== X-Received: by 10.55.16.80 with SMTP id a77mr13108490qkh.250.1513207340973; Wed, 13 Dec 2017 15:22:20 -0800 (PST) Received: from x1.local ([181.91.222.165]) by smtp.gmail.com with ESMTPSA id l1sm1666918qkk.74.2017.12.13.15.22.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Dec 2017 15:22:19 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: Alistair Francis , "Edgar E . Iglesias" , Peter Maydell , Andrew Baumann , Prasad J Pandit , Clement Deschamps Date: Wed, 13 Dec 2017 20:20:07 -0300 Message-Id: <20171213232025.24503-9-f4bug@amsat.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171213232025.24503-1-f4bug@amsat.org> References: <20171213232025.24503-1-f4bug@amsat.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::243 Subject: [Qemu-devel] [PATCH 08/26] sdcard: add sd_set_state() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sai Pavan Boddu , Peter Crosthwaite , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This will ease to trace state changes (in the following patchs). Signed-off-by: Philippe Mathieu-Daudé --- hw/sd/sd.c | 128 ++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 465d254f2e..f67c9ff49c 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -171,6 +171,11 @@ static void sd_update_mode(SDState *sd) } } +static void sd_set_state(SDState *sd, enum SDCardStates state) +{ + sd->state = state; +} + static const sd_cmd_type_t sd_cmd_type[64] = { sd_bc, sd_none, sd_bcr, sd_bcr, sd_none, sd_none, sd_none, sd_ac, sd_bcr, sd_ac, sd_ac, sd_adtc, sd_ac, sd_ac, sd_none, sd_ac, @@ -429,7 +434,7 @@ static void sd_reset(DeviceState *dev) sect = sd_addr_to_wpnum(size) + 1; - sd->state = sd_idle_state; + sd_set_state(sd, sd_idle_state); sd->rca = 0x0000; sd_set_ocr(sd); sd_set_scr(sd); @@ -767,7 +772,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, return sd->spi ? sd_r1 : sd_r0; default: - sd->state = sd_idle_state; + sd_set_state(sd, sd_idle_state); sd_reset(DEVICE(sd)); return sd->spi ? sd_r1 : sd_r0; } @@ -777,7 +782,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, if (!sd->spi) goto bad_cmd; - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1; case 2: /* CMD2: ALL_SEND_CID */ @@ -785,7 +790,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, goto bad_cmd; switch (sd->state) { case sd_ready_state: - sd->state = sd_identification_state; + sd_set_state(sd, sd_identification_state); return sd_r2_i; default: @@ -799,7 +804,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, switch (sd->state) { case sd_identification_state: case sd_standby_state: - sd->state = sd_standby_state; + sd_set_state(sd, sd_standby_state); sd_set_rca(sd); return sd_r6; @@ -829,7 +834,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, switch (sd->mode) { case sd_data_transfer_mode: sd_function_switch(sd, req.arg); - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -847,7 +852,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, if (sd->rca != rca) return sd_r0; - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; case sd_transfer_state: @@ -855,21 +860,21 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, if (sd->rca == rca) break; - sd->state = sd_standby_state; + sd_set_state(sd, sd_standby_state); return sd_r1b; case sd_disconnect_state: if (sd->rca != rca) return sd_r0; - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); return sd_r1b; case sd_programming_state: if (sd->rca == rca) break; - sd->state = sd_disconnect_state; + sd_set_state(sd, sd_disconnect_state); return sd_r1b; default: @@ -908,7 +913,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case sd_transfer_state: if (!sd->spi) break; - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); memcpy(sd->data, sd->csd, 16); sd->data_start = addr; sd->data_offset = 0; @@ -930,7 +935,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case sd_transfer_state: if (!sd->spi) break; - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); memcpy(sd->data, sd->cid, 16); sd->data_start = addr; sd->data_offset = 0; @@ -946,7 +951,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, goto bad_cmd; switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = req.arg; sd->data_offset = 0; @@ -962,13 +967,13 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case 12: /* CMD12: STOP_TRANSMISSION */ switch (sd->state) { case sd_sendingdata_state: - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; case sd_receivingdata_state: - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; default: @@ -997,7 +1002,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, if (sd->rca != rca) return sd_r0; - sd->state = sd_inactive_state; + sd_set_state(sd, sd_inactive_state); return sd_r0; default: @@ -1024,7 +1029,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case 17: /* CMD17: READ_SINGLE_BLOCK */ switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = addr; sd->data_offset = 0; @@ -1040,7 +1045,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case 18: /* CMD18: READ_MULTIPLE_BLOCK */ switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = addr; sd->data_offset = 0; @@ -1073,7 +1078,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, /* Writing in SPI mode not implemented. */ if (sd->spi) break; - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); sd->data_start = addr; sd->data_offset = 0; sd->blk_written = 0; @@ -1099,7 +1104,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, /* Writing in SPI mode not implemented. */ if (sd->spi) break; - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); sd->data_start = addr; sd->data_offset = 0; sd->blk_written = 0; @@ -1122,7 +1127,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, goto bad_cmd; switch (sd->state) { case sd_transfer_state: - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1137,7 +1142,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, goto unimplemented_cmd; switch (sd->state) { case sd_transfer_state: - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1156,10 +1161,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, return sd_r1b; } - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); set_bit(sd_addr_to_wpnum(addr), sd->wp_groups); /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; default: @@ -1175,10 +1180,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, return sd_r1b; } - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); clear_bit(sd_addr_to_wpnum(addr), sd->wp_groups); /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; default: @@ -1189,7 +1194,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, case 30: /* CMD30: SEND_WRITE_PROT */ switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); *(uint32_t *) sd->data = sd_wpbits(sd, req.arg); sd->data_start = addr; sd->data_offset = 0; @@ -1231,10 +1236,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, return sd_r1b; } - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); sd_erase(sd); /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1b; default: @@ -1248,7 +1253,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, goto unimplemented_cmd; switch (sd->state) { case sd_transfer_state: - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1283,10 +1288,11 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, switch (sd->state) { case sd_transfer_state: sd->data_offset = 0; - if (req.arg & 1) - sd->state = sd_sendingdata_state; - else - sd->state = sd_receivingdata_state; + if (req.arg & 1) { + sd_set_state(sd, sd_sendingdata_state); + } else { + sd_set_state(sd, sd_receivingdata_state); + } return sd_r1; default: @@ -1331,7 +1337,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, case 13: /* ACMD13: SD_STATUS */ switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1346,7 +1352,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, case sd_transfer_state: *(uint32_t *) sd->data = sd->blk_written; - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1369,7 +1375,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, case 41: /* ACMD41: SD_APP_OP_COND */ if (sd->spi) { /* SEND_OP_CMD */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); return sd_r1; } switch (sd->state) { @@ -1399,7 +1405,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, * unless it's an enquiry ACMD41 (bits 23:0 == 0). */ if (req.arg & ACMD41_ENQUIRY_MASK) { - sd->state = sd_ready_state; + sd_set_state(sd, sd_ready_state); } return sd_r3; @@ -1423,7 +1429,7 @@ static sd_rsp_type_t sd_app_command(SDState *sd, case 51: /* ACMD51: SEND_SCR */ switch (sd->state) { case sd_transfer_state: - sd->state = sd_sendingdata_state; + sd_set_state(sd, sd_sendingdata_state); sd->data_start = 0; sd->data_offset = 0; return sd_r1; @@ -1615,12 +1621,12 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset ++] = value; if (sd->data_offset >= sd->blk_len) { /* TODO: Check CRC before committing */ - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); BLK_WRITE_BLOCK(sd->data_start, sd->data_offset); sd->blk_written ++; sd->csd[14] |= 0x40; /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); } break; @@ -1639,7 +1645,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset++] = value; if (sd->data_offset >= sd->blk_len) { /* TODO: Check CRC before committing */ - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); BLK_WRITE_BLOCK(sd->data_start, sd->data_offset); sd->blk_written++; sd->data_start += sd->blk_len; @@ -1650,12 +1656,12 @@ void sd_write_data(SDState *sd, uint8_t value) if (sd->multi_blk_cnt != 0) { if (--sd->multi_blk_cnt == 0) { /* Stop! */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; } } - sd->state = sd_receivingdata_state; + sd_set_state(sd, sd_receivingdata_state); } break; @@ -1663,7 +1669,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset ++] = value; if (sd->data_offset >= sizeof(sd->cid)) { /* TODO: Check CRC before committing */ - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); for (i = 0; i < sizeof(sd->cid); i ++) if ((sd->cid[i] | 0x00) != sd->data[i]) sd->card_status |= CID_CSD_OVERWRITE; @@ -1674,7 +1680,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->cid[i] &= sd->data[i]; } /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); } break; @@ -1682,7 +1688,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset ++] = value; if (sd->data_offset >= sizeof(sd->csd)) { /* TODO: Check CRC before committing */ - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); for (i = 0; i < sizeof(sd->csd); i ++) if ((sd->csd[i] | sd_csd_rw_mask[i]) != (sd->data[i] | sd_csd_rw_mask[i])) @@ -1698,7 +1704,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->csd[i] &= sd->data[i]; } /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); } break; @@ -1706,10 +1712,10 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset ++] = value; if (sd->data_offset >= sd->blk_len) { /* TODO: Check CRC before committing */ - sd->state = sd_programming_state; + sd_set_state(sd, sd_programming_state); sd_lock_command(sd); /* Bzzzzzzztt .... Operation complete. */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); } break; @@ -1717,7 +1723,7 @@ void sd_write_data(SDState *sd, uint8_t value) sd->data[sd->data_offset ++] = value; if (sd->data_offset >= sd->blk_len) { APP_WRITE_BLOCK(sd->data_start, sd->data_offset); - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); } break; @@ -1752,7 +1758,7 @@ uint8_t sd_read_data(SDState *sd) ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= 64) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 9: /* CMD9: SEND_CSD */ @@ -1760,7 +1766,7 @@ uint8_t sd_read_data(SDState *sd) ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= 16) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 11: /* CMD11: READ_DAT_UNTIL_STOP */ @@ -1782,7 +1788,7 @@ uint8_t sd_read_data(SDState *sd) ret = sd->sd_status[sd->data_offset ++]; if (sd->data_offset >= sizeof(sd->sd_status)) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 17: /* CMD17: READ_SINGLE_BLOCK */ @@ -1791,7 +1797,7 @@ uint8_t sd_read_data(SDState *sd) ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= io_len) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 18: /* CMD18: READ_MULTIPLE_BLOCK */ @@ -1811,7 +1817,7 @@ uint8_t sd_read_data(SDState *sd) if (sd->multi_blk_cnt != 0) { if (--sd->multi_blk_cnt == 0) { /* Stop! */ - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; } } @@ -1822,21 +1828,21 @@ uint8_t sd_read_data(SDState *sd) ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= 4) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 30: /* CMD30: SEND_WRITE_PROT */ ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= 4) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 51: /* ACMD51: SEND_SCR */ ret = sd->scr[sd->data_offset ++]; if (sd->data_offset >= sizeof(sd->scr)) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; case 56: /* CMD56: GEN_CMD */ @@ -1845,7 +1851,7 @@ uint8_t sd_read_data(SDState *sd) ret = sd->data[sd->data_offset ++]; if (sd->data_offset >= sd->blk_len) - sd->state = sd_transfer_state; + sd_set_state(sd, sd_transfer_state); break; default: