[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 09/18] sdcard: handles more commands in SPI m
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v3 09/18] sdcard: handles more commands in SPI mode |
Date: |
Thu, 1 Feb 2018 04:39:58 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
On 01/31/2018 09:11 PM, Alistair Francis wrote:
> On Mon, Jan 22, 2018 at 7:30 PM, Philippe Mathieu-Daudé <address@hidden>
> wrote:
>> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
>> ---
>> hw/sd/sd.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
>> 1 file changed, 54 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
>> index 2eca999bc3..07424aa56e 100644
>> --- a/hw/sd/sd.c
>> +++ b/hw/sd/sd.c
>> @@ -1390,9 +1390,11 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
>> SDRequest req)
>>
>> /* Application specific commands (Class 8) */
>> case 55: /* CMD55: APP_CMD */
>> - if (sd->rca != rca)
>> - return sd_r0;
>> -
>> + if (!sd->spi) {
>> + if (sd->rca != rca) {
>> + return sd_r0;
>> + }
>> + }
>> sd->expecting_acmd = true;
>> sd->card_status |= APP_CMD;
>> return sd_r1;
>> @@ -1412,6 +1414,18 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,
>> SDRequest req)
>> }
>> break;
>>
>> + case 58: /* CMD58: READ_OCR (SPI) */
>> + if (!sd->spi) {
>> + goto bad_cmd;
>> + }
>> + return sd_r3;
>> +
>> + case 59: /* CMD59: CRC_ON_OFF (SPI) */
>> + if (!sd->spi) {
>> + goto bad_cmd;
>> + }
>> + goto unimplemented_cmd;
>> +
>> default:
>> bad_cmd:
>> qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd);
>> @@ -1436,6 +1450,9 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
>> sd->card_status |= APP_CMD;
>> switch (req.cmd) {
>> case 6: /* ACMD6: SET_BUS_WIDTH */
>> + if (sd->spi) {
>> + goto unimplemented_cmd;
>> + }
>> switch (sd->state) {
>> case sd_transfer_state:
>> sd->sd_status[0] &= 0x3f;
>> @@ -1460,6 +1477,12 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
>> }
>> break;
>>
>> + case 18:
>
> These should all have a comment describing what they are and for the
> others as well.
This is backported from a patch of you or Peter Crosthwaite =)
I'll check the specs and add documentation.
>
>> + if (sd->spi) {
>> + goto unimplemented_cmd;
>> + }
>> + break;
>> +
>> case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
>> switch (sd->state) {
>> case sd_transfer_state:
>> @@ -1485,6 +1508,19 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
>> }
>> break;
>>
>> + case 25:
>> + case 26:
>> + if (sd->spi) {
>> + goto unimplemented_cmd;
>> + }
>> + break;
>> +
>> + case 38:
>> + if (sd->spi) {
>> + goto unimplemented_cmd;
>> + }
>> + break;
>> +
>> case 41: /* ACMD41: SD_APP_OP_COND */
>> if (sd->spi) {
>> /* SEND_OP_CMD */
>> @@ -1542,6 +1578,12 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
>> }
>> break;
>>
>> + case 43 ... 49:
>> + if (sd->spi) {
>> + goto unimplemented_cmd;
>> + }
>> + break;
>> +
>> case 51: /* ACMD51: SEND_SCR */
>> switch (sd->state) {
>> case sd_transfer_state:
>> @@ -1555,9 +1597,18 @@ static sd_rsp_type_t sd_app_command(SDState *sd,
>> }
>> break;
>>
>> + case 55: /* Not exist */
>> + break;
>> +
>> default:
>> /* Fall back to standard commands. */
>> return sd_normal_command(sd, req);
>> +
>> + unimplemented_cmd:
>> + /* Commands that are recognised but not yet implemented in SPI
>> mode. */
>
> This should be unimplemented_spi_cmd then, to be more clear.
Good idea.
>
> Alistair
>
>> + qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n",
>> + req.cmd);
>> + return sd_illegal;
>> }
>>
>> qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n",
>> req.cmd);
>> --
>> 2.15.1
>>
>>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v3 09/18] sdcard: handles more commands in SPI mode,
Philippe Mathieu-Daudé <=