From nobody Tue Feb 10 09:45:23 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) client-ip=209.85.221.53; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f53.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1624544559; cv=none; d=zohomail.com; s=zohoarc; b=ROS033Wp8R5K694yFn39hgwm2WAvQE/gu9bBt3rdSYLe/haOTyDb86zJBm3ueaRWb1uOuua9xB0onwDYFfM8Njw2BNFPlH840dN2VnwWw8/drkUg5spVGNyoLqFfQnsPmDexHi25wIxP8S3yRZv4hcAwzsDygCvi3o0lJAAhp8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624544559; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JzqeSaa2O8XzfBmvOuh3ggwx7gOwVaB9JI3bIWkBQOI=; b=PAZ//mwRMH4ri5SYmJH6BgyqrwYQHXDfa6a7QGHFpCjVDl6CoL4TzQYf3kKJcLrPyNPSwnr1x9G0PMTLDo51c1n7CaJHuLSHA5jS7e1PEwihYbZ5TW3yqEh0m+r+ueKDyRVxL3l7aWadGGslfWJTTlDFgtFQc4Wu4cjgckF80uY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by mx.zohomail.com with SMTPS id 1624544559041744.9124735208952; Thu, 24 Jun 2021 07:22:39 -0700 (PDT) Received: by mail-wr1-f53.google.com with SMTP id l12so6165364wrt.3 for ; Thu, 24 Jun 2021 07:22:38 -0700 (PDT) Return-Path: Return-Path: Received: from x1w.. (93.red-83-35-24.dynamicip.rima-tde.net. [83.35.24.93]) by smtp.gmail.com with ESMTPSA id 2sm3286158wrz.87.2021.06.24.07.22.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Jun 2021 07:22:36 -0700 (PDT) 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=JzqeSaa2O8XzfBmvOuh3ggwx7gOwVaB9JI3bIWkBQOI=; b=rT+8FbYdzjYOERh5QdxCXMLZM7gJkx7gRMCjFLq7CMOWHKvrn7N/fcn1tUZJ+z2Pm3 pVNIrANLuKwKqfHGusnFGUHliHOeYKyp2B7MZFhXKTRsb9RMHFOTBVt7lQRfwUTNTsF+ hvoZDTkMFynlOplE8lhavYoedsHDr601JPqOk60up2jV4ALwojtAIVSz2qnt/4ihZ2UR wkwj5H3IAwXbSFixJOsFs+d/A+fvDKqZKk/n815PRXIm7pUhfCS7IePMpIMmHwGDgioB 3YR/mLZBGp3B1EdFuYnjDsXgpi6a2nfFoZRU2uJAAVlycNwQllm9Jb42u5MMK9VSfBgr V3sg== 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=JzqeSaa2O8XzfBmvOuh3ggwx7gOwVaB9JI3bIWkBQOI=; b=TejvqrUYHfz50xO+CSN9+DjznFbDb9hqzCxSZE7sTNJUX3CDS0hhuMcNkZOisV4ICu lXjzon6tluCCzsLHhAyCzMnjeEGp8rCbxbYHBJwSJU8VG32KCdnCBjO6/f8jG9BEpgED VP2Boqlnb0ioVsbSM3qSHWDjq7C6BHprN4/vtdFbqJWkrNFeQpMRWTjZhwySDMx/NcgN 3zUVYe5g5Knkd4LbGVWA30Qj4Z/y0IEj1Paiwk0+4MuVtcEfbz22kt3aSxe8/HKniYoR pm2UuFb56Im3kKmurZ7RP4DeYuREAdo43xPGi/fLptEsSPJpZArvl6V00h0rDwsOHlw1 IVSw== X-Gm-Message-State: AOAM531PAN4OLfQUXHB1A+lDc9TxvGgnxV3lIs34UCDZyCDImjkxwodW jeAczFPcw50dFlFogJtSeHo= X-Google-Smtp-Source: ABdhPJy2gQrbHUDzdMDCZe9VPbrEyHH+ESNy4jffUGRaycnYvqZFXBqxGLpLjdP1AgEjLd3wctgdrg== X-Received: by 2002:a5d:6208:: with SMTP id y8mr4777971wru.386.1624544557276; Thu, 24 Jun 2021 07:22:37 -0700 (PDT) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Andrew Jeffery , Bin Meng , Joel Stanley , qemu-block@nongnu.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [RFC PATCH 05/10] hw/sd: Add sd_cmd_illegal() handler Date: Thu, 24 Jun 2021 16:22:04 +0200 Message-Id: <20210624142209.1193073-6-f4bug@amsat.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210624142209.1193073-1-f4bug@amsat.org> References: <20210624142209.1193073-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) Log illegal commands as GUEST_ERROR. Note: we are logging back the SDIO commands (CMD5, CMD52-54). Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Bin Meng --- hw/sd/sd.c | 57 ++++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index ce1eec0374f..0215bdb3689 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -965,6 +965,14 @@ static sd_rsp_type_t sd_invalid_state_for_cmd(SDState = *sd, SDRequest req) return sd_illegal; } =20 +static sd_rsp_type_t sd_cmd_illegal(SDState *sd, SDRequest req) +{ + qemu_log_mask(LOG_GUEST_ERROR, "%s: Unknown CMD%i\n", + sd->proto->name, req.cmd); + + return sd_illegal; +} + static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req) { uint32_t rca =3D 0x0000; @@ -1017,15 +1025,10 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) break; =20 case 1: /* CMD1: SEND_OP_CMD */ - if (!sd->spi) - goto bad_cmd; - sd->state =3D sd_transfer_state; return sd_r1; =20 case 2: /* CMD2: ALL_SEND_CID */ - if (sd->spi) - goto bad_cmd; switch (sd->state) { case sd_ready_state: sd->state =3D sd_identification_state; @@ -1037,8 +1040,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) break; =20 case 3: /* CMD3: SEND_RELATIVE_ADDR */ - if (sd->spi) - goto bad_cmd; switch (sd->state) { case sd_identification_state: case sd_standby_state: @@ -1052,8 +1053,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) break; =20 case 4: /* CMD4: SEND_DSR */ - if (sd->spi) - goto bad_cmd; switch (sd->state) { case sd_standby_state: break; @@ -1063,9 +1062,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) } break; =20 - case 5: /* CMD5: reserved for SDIO cards */ - return sd_illegal; - case 6: /* CMD6: SWITCH_FUNCTION */ switch (sd->mode) { case sd_data_transfer_mode: @@ -1081,8 +1077,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) break; =20 case 7: /* CMD7: SELECT/DESELECT_CARD */ - if (sd->spi) - goto bad_cmd; switch (sd->state) { case sd_standby_state: if (sd->rca !=3D rca) @@ -1212,8 +1206,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) break; =20 case 15: /* CMD15: GO_INACTIVE_STATE */ - if (sd->spi) - goto bad_cmd; switch (sd->mode) { case sd_data_transfer_mode: if (sd->rca !=3D rca) @@ -1320,8 +1312,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, S= DRequest req) break; =20 case 26: /* CMD26: PROGRAM_CID */ - if (sd->spi) - goto bad_cmd; switch (sd->state) { case sd_transfer_state: sd->state =3D sd_receivingdata_state; @@ -1466,15 +1456,6 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, = SDRequest req) } break; =20 - case 52 ... 54: - /* CMD52, CMD53, CMD54: reserved for SDIO cards - * (see the SDIO Simplified Specification V2.0) - * Handle as illegal command but do not complain - * on stderr, as some OSes may use these in their - * probing for presence of an SDIO card. - */ - return sd_illegal; - /* Application specific commands (Class 8) */ case 55: /* CMD55: APP_CMD */ switch (sd->state) { @@ -1515,19 +1496,12 @@ static sd_rsp_type_t sd_normal_command(SDState *sd,= SDRequest req) break; =20 case 58: /* CMD58: READ_OCR (SPI) */ - if (!sd->spi) { - goto bad_cmd; - } return sd_r3; =20 case 59: /* CMD59: CRC_ON_OFF (SPI) */ - if (!sd->spi) { - goto bad_cmd; - } return sd_r1; =20 default: - bad_cmd: qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd); return sd_illegal; } @@ -2114,10 +2088,25 @@ void sd_enable(SDState *sd, bool enable) =20 static const SDProto sd_proto_spi =3D { .name =3D "SPI", + .cmd =3D { + [2 ... 4] =3D sd_cmd_illegal, + [5] =3D sd_cmd_illegal, + [7] =3D sd_cmd_illegal, + [15] =3D sd_cmd_illegal, + [26] =3D sd_cmd_illegal, + [52 ... 54] =3D sd_cmd_illegal, + }, }; =20 static const SDProto sd_proto_sd =3D { .name =3D "SD", + .cmd =3D { + [1] =3D sd_cmd_illegal, + [5] =3D sd_cmd_illegal, + [52 ... 54] =3D sd_cmd_illegal, + [58] =3D sd_cmd_illegal, + [59] =3D sd_cmd_illegal, + }, }; =20 static void sd_instance_init(Object *obj) --=20 2.31.1