From nobody Tue Oct 28 04:18:26 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1515016481024267.8855185680943; Wed, 3 Jan 2018 13:54:41 -0800 (PST) Received: from localhost ([::1]:38453 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWqzc-0004U5-PO for importer@patchew.org; Wed, 03 Jan 2018 16:54:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWquz-0000ov-Iy for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWquy-0003zh-75 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:49 -0500 Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:35995) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWquy-0003z9-29 for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:48 -0500 Received: by mail-qt0-x243.google.com with SMTP id a16so3882041qtj.3 for ; Wed, 03 Jan 2018 13:49:47 -0800 (PST) Received: from x1.lan ([138.117.48.219]) by smtp.gmail.com with ESMTPSA id l80sm1237566qki.96.2018.01.03.13.49.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 13:49:46 -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=62Zqscggp6hORXY4TLQJDapW1Dzwaea8XwgV6uLH2hM=; b=ieSczIVWjjMrH4/2SHrR2V/l4aPbTDM3zWSIDyp7cbkVd4JvvOt1n5X4JTiBxzDXYV 4jrcZkZuh7E3FijKH7Xd1eOiIu14A5PAWDo+TiFAZeIdWKkj12AUlIXrIilCrJuW3doj n1lr0bHG7yCFJ3IhGWIMTs5dniKIcx7IQMZGgTHCqc89uoJrHRjUYLMLE+nAavn3pAlp gktRZ/QuOFGXud1KpoKjGpf+0tKVUp3dYtsIP3+9KGWd7Yku/a2lInMNhvKyAZl+bla9 NM7V7Iywpw88GIKfc1szIjbdfq3m4FkzLI12+y7MSLt8b7dRsdqc5eC1TzaO18U6jtPN 4PWw== 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=62Zqscggp6hORXY4TLQJDapW1Dzwaea8XwgV6uLH2hM=; b=IDyJ+idGLPOTHkkxtKB42yCpSIAPGtd0PixUWHpt4CkD6hTUfoeexBFtQzS4iJHeqF xT104v4cjc0RNMiR33aab369tMWxCrVdnZoWuB2PEZbtzD6bio5Ho5K+Rebjl82rz/Ae aALyz200E99d7fRCg3GVF0TW10MuJebC5wW/K8nZ7MAV/s0kQIRSoO1RjpSo95e68jcR rjLW0gPvxyJp5TJj9B/ayBBBpFesyltJWfTtm8CXKMDpmw6gCuDj2zRVyA2G/tOzlHO0 9LTkU7MuMyJebMVPdJBSsNfZrO8CvSQ1jA0TbO3e5Dg9gUtHYL3zHeiz6UEg8vCZUAbf 932A== X-Gm-Message-State: AKGB3mJdNAXc+5oK/dj40ZBuChl1MkJ6WieRO0Hvo+oT8Z0mLee54QI/ QZLb7h/1J5StCzjA0mBj44w= X-Google-Smtp-Source: ACJfBouGyv75q3A/LxaUXTTHBsysY94IMjWvwjdcjPTngpNV5RTsqtJM6+pUCt+/aKE0TGP+SgR+Jg== X-Received: by 10.237.60.238 with SMTP id e43mr3678710qtf.23.1515016187455; Wed, 03 Jan 2018 13:49:47 -0800 (PST) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Alistair Francis , Peter Maydell , Eric Blake , Paolo Bonzini , Kevin Wolf , Stefan Hajnoczi Date: Wed, 3 Jan 2018 18:49:25 -0300 Message-Id: <20180103214925.16677-5-f4bug@amsat.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180103214925.16677-1-f4bug@amsat.org> References: <20180103214925.16677-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c0d::243 Subject: [Qemu-devel] [RFC PATCH v2 4/4] tests: add some sdcard qtest 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: "Edgar E . Iglesias" , Thomas Huth , qemu-devel@nongnu.org, Markus Armbruster , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- tests/sdbus-test.c | 151 +++++++++++++++++++++++++++++++++++++++++++++= ++++ tests/Makefile.include | 2 + 2 files changed, 153 insertions(+) create mode 100644 tests/sdbus-test.c diff --git a/tests/sdbus-test.c b/tests/sdbus-test.c new file mode 100644 index 0000000000..9c38be13cb --- /dev/null +++ b/tests/sdbus-test.c @@ -0,0 +1,151 @@ +/* + * QTest testcase for the SD/MMC cards + * + * Copyright (c) 2017 Philippe Mathieu-Daud=C3=A9 + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qemu/bswap.h" +#include "qemu/cutils.h" + +#include "libqtest.h" +#include "libqos/sdbus.h" + +enum { + PROTO_SD, + PROTO_MMC, + PROTO_SPI, + PROTO_COUNT +}; + +static const char *proto_name[PROTO_COUNT] =3D { + [PROTO_SD] =3D "sd", + [PROTO_MMC] =3D "mmc", + [PROTO_SPI] =3D "spi" +}; + +static const char *machines[PROTO_COUNT] =3D { + [PROTO_SD] =3D "nuri", + //[PROTO_MMC] =3D "vexpress-a9", + //[PROTO_SPI] =3D "lm3s6965evb" +}; + +static const uint64_t sizes[] =3D { + //512 * M_BYTE, + //1 * G_BYTE, + 4 * G_BYTE, + //64 * G_BYTE, +}; + +typedef struct { + int protocol; + uint64_t size; +} TestCase; + +static void test1(SDBusAdapter *mmc, uint64_t size) +{ + uint8_t *response; + uint16_t rca; + ssize_t sz; + + sz =3D sdbus_do_cmd(mmc, GO_IDLE_STATE, 0, NULL); + g_assert_cmpuint(sz, =3D=3D, 0); + + sz =3D sdbus_do_cmd(mmc, SEND_IF_COND, 0x1aa, NULL); + //g_assert_cmpuint(sz, =3D=3D, 0); + + sz =3D sdbus_do_acmd(mmc, SEND_OP_COND, 0x40300000, 0, NULL); + g_assert_cmpuint(sz, =3D=3D, 4); + + /* CID */ + sz =3D sdbus_do_cmd(mmc, ALL_SEND_CID, 0, &response); + g_assert_cmpuint(sz, =3D=3D, 16); + g_assert_cmpmem (&response[3], 5, "QEMU!", 5); + g_assert_cmphex(be32_to_cpu(*(uint32_t *)&response[9]), =3D=3D, 0xdead= beef); + g_free(response); + + /* RCA */ + sz =3D sdbus_do_cmd(mmc, SEND_RELATIVE_ADDR, 0, &response); + g_assert_cmpuint(sz, =3D=3D, 4); + rca =3D be16_to_cpu(*(uint16_t *)response); + g_assert_cmphex(rca, =3D=3D, 0x4567); + g_free(response); + + /* CSD */ + sz =3D sdbus_do_cmd(mmc, SEND_CSD, rca << 16, &response); + g_assert_cmpuint(sz, =3D=3D, 16); + g_assert_cmphex(response[3], =3D=3D, 0x32); + g_assert_cmphex(response[4], =3D=3D, 0x5b); /* class */ + g_assert_cmphex(response[5], =3D=3D, 0x59); + /* (SDHC test) */ + g_assert_cmphex(be32_to_cpu(*(uint32_t *)&response[6]), + =3D=3D, (size >> 19) - 1); + g_assert_cmphex(response[10], =3D=3D, 0x7f); + g_assert_cmphex(response[11], =3D=3D, 0x80); + g_assert_cmphex(response[12], =3D=3D, 0x0a); + g_assert_cmphex(response[13], =3D=3D, 0x40); + g_assert_cmphex(response[14], =3D=3D, 0); + g_assert_cmphex(response[15], =3D=3D, 0); + g_free(response); + + sz =3D sdbus_do_cmd(mmc, SELECT_CARD, rca << 16, NULL); + + sz =3D sdbus_do_acmd(mmc, SEND_SCR, 0, rca, &response); + g_assert_cmpuint(sz, =3D=3D, 4); + g_free(response); + + // TODO 8x: sdcard_read_data len 512 + + //sz =3D sdbus_do_acmd(mmc, SEND_STATUS, 0, rca, &response); + //g_free(response); +} + +static void sdcard_tests(gconstpointer data) +{ + const TestCase *test =3D data; + SDBusAdapter *sdbus; + + global_qtest =3D qtest_startf("-machine %s " + "-drive if=3Dsd,driver=3Dnull-co,size=3D%lu,id=3D= mmc0", + machines[test->protocol], test->size); + sdbus =3D qmp_sdbus_create("sd-bus"); + + test1(sdbus, test->size); + g_free(sdbus); + + qtest_quit(global_qtest); +} + +int main(int argc, char **argv) +{ + const char *arch =3D qtest_get_arch(); + int iproto, isize; + gchar *path; + TestCase *test; + + g_test_init(&argc, &argv, NULL); + + if (strcmp(arch, "arm") =3D=3D 0 || strcmp(arch, "aarch64") =3D=3D 0) { + for (iproto =3D 0; iproto < PROTO_COUNT; iproto++) { + if (!machines[iproto]) { + continue; + } + for (isize =3D 0; isize < ARRAY_SIZE(sizes); isize++) { + test =3D g_new(TestCase, 1); + + test->protocol =3D iproto; + test->size =3D sizes[isize]; + + path =3D g_strdup_printf("sdcard/%s/%lu", proto_name[iprot= o], sizes[isize]); + qtest_add_data_func(path, test, sdcard_tests); + g_free(path); + // g_free(test)? + } + } + } + + return g_test_run(); +} diff --git a/tests/Makefile.include b/tests/Makefile.include index 409784a189..e4434cdfff 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -348,6 +348,7 @@ check-qtest-sparc64-y =3D tests/endianness-test$(EXESUF) check-qtest-sparc64-y +=3D tests/prom-env-test$(EXESUF) =20 check-qtest-arm-y =3D tests/tmp105-test$(EXESUF) +check-qtest-arm-y =3D tests/sdbus-test$(EXESUF) check-qtest-arm-y +=3D tests/ds1338-test$(EXESUF) check-qtest-arm-y +=3D tests/m25p80-test$(EXESUF) gcov-files-arm-y +=3D hw/misc/tmp105.c @@ -748,6 +749,7 @@ tests/bios-tables-test$(EXESUF): tests/bios-tables-test= .o \ tests/boot-sector.o tests/acpi-utils.o $(libqos-obj-y) tests/pxe-test$(EXESUF): tests/pxe-test.o tests/boot-sector.o $(libqos-obj= -y) tests/tmp105-test$(EXESUF): tests/tmp105-test.o $(libqos-omap-obj-y) +tests/sdbus-test$(EXESUF): tests/sdbus-test.o $(libqos-obj-y) tests/ds1338-test$(EXESUF): tests/ds1338-test.o $(libqos-imx-obj-y) tests/m25p80-test$(EXESUF): tests/m25p80-test.o tests/i440fx-test$(EXESUF): tests/i440fx-test.o $(libqos-pc-obj-y) --=20 2.15.1