[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 12/14] sdcard: Add tests to validate the 7-bit CR
From: |
Philippe Mathieu-Daudé |
Subject: |
[Qemu-devel] [PATCH v2 12/14] sdcard: Add tests to validate the 7-bit CRC checksum of 48-bit SD frame |
Date: |
Wed, 9 May 2018 00:46:56 -0300 |
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
---
tests/sdcard-test.c | 74 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)
diff --git a/tests/sdcard-test.c b/tests/sdcard-test.c
index 81789d1f88..2288a05cdf 100644
--- a/tests/sdcard-test.c
+++ b/tests/sdcard-test.c
@@ -14,6 +14,66 @@
#include "libqtest.h"
#include "hw/sd/sd.h"
+static void sd_prepare_request48(uint8_t *buf, size_t bufsize,
+ uint8_t cmd, uint32_t arg)
+{
+ sd_frame48_init(buf, bufsize, cmd, arg, /* is_resp */ false);
+ buf[5] = sd_frame48_calc_checksum(buf);
+}
+
+static void sd_prepare_response48(uint8_t *buf, size_t bufsize,
+ uint8_t cmd, uint32_t arg)
+{
+ sd_frame48_init(buf, bufsize, cmd, arg, /* is_resp */ true);
+ buf[5] = sd_frame48_calc_checksum(buf);
+}
+
+static void test_sd_request_frame_crc7(void)
+{
+ uint8_t req[6];
+
+ /* CMD0 */
+ sd_prepare_request48(req, sizeof(req), 0, 0);
+ g_assert_cmphex(req[5], ==, 0b1001010);
+
+ /* CMD17 */
+ sd_prepare_request48(req, sizeof(req), 17, 0);
+ g_assert_cmphex(req[5], ==, 0b0101010);
+
+ /* APP_CMD */
+ sd_prepare_request48(req, sizeof(req), 55, 0);
+ g_assert_cmphex(req[5], ==, 0x32);
+
+ /* ACMD41 SEND_OP_COND */
+ sd_prepare_request48(req, sizeof(req), 41, 0x00100000);
+ g_assert_cmphex(req[5], ==, 0x5f >> 1);
+
+ /* CMD2 ALL_SEND_CID */
+ sd_prepare_request48(req, sizeof(req), 2, 0);
+ g_assert_cmphex(req[5], ==, 0x4d >> 1);
+
+ g_assert_true(sd_frame48_verify_checksum(req));
+}
+
+static void test_sd_response_frame48_crc7(void)
+{
+ uint8_t resp[6];
+
+ /* response to CMD17 */
+ sd_prepare_response48(resp, sizeof(resp), 17, 0x00000900);
+ g_assert_cmphex(resp[5], ==, 0b0110011);
+
+ /* response to the APP_CMD */
+ sd_prepare_response48(resp, sizeof(resp), 55, 0x00000120);
+ g_assert_cmphex(resp[5], ==, 0x41);
+
+ /* response to CMD3 SEND_RELATIVE_ADDR (Relative Card Address is 0xb368) */
+ sd_prepare_response48(resp, sizeof(resp), 3, 0xb3680500);
+ g_assert_cmphex(resp[5], ==, 0x0c);
+
+ g_assert_true(sd_frame48_verify_checksum(resp));
+}
+
static void test_sd_response_frame136_crc7(void)
{
uint8_t buf[16];
@@ -27,6 +87,17 @@ static void test_sd_response_frame136_crc7(void)
g_assert_true(sd_frame136_verify_checksum(buf));
}
+static void test_sd_verify_cksum_frame48(void)
+{
+ uint8_t buf[6];
+
+ sd_prepare_request48(buf, sizeof(buf), 42, 0x12345678);
+ g_assert_true(sd_frame48_verify_checksum(buf));
+
+ sd_prepare_response48(buf, sizeof(buf), 69, 0x98765432);
+ g_assert_true(sd_frame48_verify_checksum(buf));
+}
+
static void test_sd_verify_cksum_frame136(void)
{
uint8_t buf[16];
@@ -40,7 +111,10 @@ int main(int argc, char *argv[])
{
g_test_init(&argc, &argv, NULL);
+ qtest_add_func("sd/prepare_req_crc7", test_sd_request_frame_crc7);
+ qtest_add_func("sd/prepare_resp48_crc7", test_sd_response_frame48_crc7);
qtest_add_func("sd/prepare_resp136_crc7", test_sd_response_frame136_crc7);
+ qtest_add_func("sd/verify_cksum_frame48", test_sd_verify_cksum_frame48);
qtest_add_func("sd/verify_cksum_frame136", test_sd_verify_cksum_frame136);
return g_test_run();
--
2.17.0
- [Qemu-devel] [PATCH v2 06/14] sdcard: Add test_sd_verify_cksum_frame136(), (continued)
- [Qemu-devel] [PATCH v2 06/14] sdcard: Add test_sd_verify_cksum_frame136(), Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 07/14] sdcard: Invert the sd_req_crc_is_valid() logic, Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 08/14] sdcard: Extract sd_frame48_verify_checksum() out for qtesting, Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 09/14] sdcard: Add sd_frame136_verify_checksum(), Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 10/14] sdcard: Remove the SDRequest argument from internal functions, Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 11/14] sdcard: Add sd_frame48_init(), replace SDRequest by a raw buffer, Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 13/14] sdcard: Add a "validate-crc" property, Philippe Mathieu-Daudé, 2018/05/08
- [Qemu-devel] [PATCH v2 12/14] sdcard: Add tests to validate the 7-bit CRC checksum of 48-bit SD frame,
Philippe Mathieu-Daudé <=
- [Qemu-devel] [RFC PATCH v2 14/14] hw/sd/ssi-sd: Enable CRC validation, Philippe Mathieu-Daudé, 2018/05/08
- Re: [Qemu-devel] [PATCH v2 00/14] sdcard: Proper implementation of CRC7, Peter Maydell, 2018/05/10