qemu-devel
[Top][All Lists]
Advanced

[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
>>
>>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]