[Qemu-devel] [PATCH 17/17] tests: add mvme3100-test

Michael Davidsaver posted 17 patches 8 years, 2 months ago
[Qemu-devel] [PATCH 17/17] tests: add mvme3100-test
Posted by Michael Davidsaver 8 years, 2 months ago
Exercise some features of the mvme3100 CPLD logic
and read from the eeprom w/ VPD.

Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>
---
 tests/Makefile.include |  3 ++
 tests/mvme3100-test.c  | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 82 insertions(+)
 create mode 100644 tests/mvme3100-test.c

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 062d4e5b7b..97bce77ee4 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -373,6 +373,8 @@ check-qtest-s390x-y += tests/virtio-balloon-test$(EXESUF)
 check-qtest-s390x-y += tests/virtio-console-test$(EXESUF)
 check-qtest-s390x-y += tests/virtio-serial-test$(EXESUF)
 
+check-qtest-ppc-$(CONFIG_E500) += tests/mvme3100-test$(EXESUF)
+
 check-qtest-generic-y += tests/qom-test$(EXESUF)
 check-qtest-generic-y += tests/test-hmp$(EXESUF)
 
@@ -782,6 +784,7 @@ tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o
 tests/ac97-test$(EXESUF): tests/ac97-test.o
 tests/es1370-test$(EXESUF): tests/es1370-test.o
 tests/intel-hda-test$(EXESUF): tests/intel-hda-test.o
+tests/mvme3100-test$(EXESUF): tests/mvme3100-test.o $(libqos-e500-obj-y)
 tests/ioh3420-test$(EXESUF): tests/ioh3420-test.o
 tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-test.o $(libqos-usb-obj-y)
 tests/usb-hcd-uhci-test$(EXESUF): tests/usb-hcd-uhci-test.o $(libqos-usb-obj-y)
diff --git a/tests/mvme3100-test.c b/tests/mvme3100-test.c
new file mode 100644
index 0000000000..6dde8d1d29
--- /dev/null
+++ b/tests/mvme3100-test.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+
+#include "qemu/osdep.h"
+#include "libqtest.h"
+#include "libqos/libqos.h"
+#include "libqos/i2c.h"
+
+#define assert_equal(A, B) g_assert_cmphex((A), ==, (B))
+
+static
+I2CAdapter *i2c;
+
+static
+void test_ccsr(void)
+{
+    /* CCSRBAR is self referential */
+    assert_equal(readl(0xff700000), 0x000ff700);
+
+    /* introspect memory size */
+    assert_equal(readl(0xff702080), 0x80000000);
+    /* value is (ram_size-1)>>24 */
+    assert_equal(readl(0xff702000), 15);
+}
+
+static
+void test_cpld(void)
+{
+    /* read/write to test register */
+    assert_equal(readl(0xe2000010), 0x00000000);
+    assert_equal(readl(0xe2000014), 0xffffffff);
+
+    writel(0xe2000010, 0x12345678);
+
+    assert_equal(readl(0xe2000010), 0x12345678);
+    assert_equal(readl(0xe2000014), 0x12345678 ^ 0xffffffff);
+}
+
+static
+void test_eeprom(void)
+{
+    char buf[] = "\x00\x00MOTOROLA";
+
+    /* 1. zero address pointer
+     * 2. write 8 bytes,
+     * 3. re-zero address pointer
+     */
+    i2c_send(i2c, 0xa8, (uint8_t *)buf, 10);
+    i2c_send(i2c, 0xa8, (uint8_t *)buf, 2);
+
+    /* read 8 bytes */
+    i2c_recv(i2c, 0xa8, (uint8_t *)buf, 8);
+    buf[8] = '\0';
+
+    /* Read header for Motorola VPD info */
+    g_assert_cmpstr(buf, ==, "MOTOROLA");
+}
+
+int main(int argc, char *argv[])
+{
+    int ret;
+    g_test_init(&argc, &argv, NULL);
+
+    qtest_start("-machine mvme3100-1152");
+
+    i2c = e500_i2c_create(0xff700000);
+
+    qtest_add_func("/mvme3100/ccsr", test_ccsr);
+    qtest_add_func("/mvme3100/cpld", test_cpld);
+    qtest_add_func("/mvme3100/eeprom", test_eeprom);
+
+    ret = g_test_run();
+
+    printf("Tests done\n");
+
+    qtest_end();
+    printf("Tests end\n");
+
+    return ret;
+}
-- 
2.11.0


Re: [Qemu-devel] [PATCH 17/17] tests: add mvme3100-test
Posted by David Gibson 8 years, 1 month ago
On Sun, Nov 26, 2017 at 03:59:15PM -0600, Michael Davidsaver wrote:
> Exercise some features of the mvme3100 CPLD logic
> and read from the eeprom w/ VPD.
> 
> Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>

Looks good, but will need a rebase.

> ---
>  tests/Makefile.include |  3 ++
>  tests/mvme3100-test.c  | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 82 insertions(+)
>  create mode 100644 tests/mvme3100-test.c
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 062d4e5b7b..97bce77ee4 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -373,6 +373,8 @@ check-qtest-s390x-y += tests/virtio-balloon-test$(EXESUF)
>  check-qtest-s390x-y += tests/virtio-console-test$(EXESUF)
>  check-qtest-s390x-y += tests/virtio-serial-test$(EXESUF)
>  
> +check-qtest-ppc-$(CONFIG_E500) += tests/mvme3100-test$(EXESUF)
> +
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  check-qtest-generic-y += tests/test-hmp$(EXESUF)
>  
> @@ -782,6 +784,7 @@ tests/i82801b11-test$(EXESUF): tests/i82801b11-test.o
>  tests/ac97-test$(EXESUF): tests/ac97-test.o
>  tests/es1370-test$(EXESUF): tests/es1370-test.o
>  tests/intel-hda-test$(EXESUF): tests/intel-hda-test.o
> +tests/mvme3100-test$(EXESUF): tests/mvme3100-test.o $(libqos-e500-obj-y)
>  tests/ioh3420-test$(EXESUF): tests/ioh3420-test.o
>  tests/usb-hcd-ohci-test$(EXESUF): tests/usb-hcd-ohci-test.o $(libqos-usb-obj-y)
>  tests/usb-hcd-uhci-test$(EXESUF): tests/usb-hcd-uhci-test.o $(libqos-usb-obj-y)
> diff --git a/tests/mvme3100-test.c b/tests/mvme3100-test.c
> new file mode 100644
> index 0000000000..6dde8d1d29
> --- /dev/null
> +++ b/tests/mvme3100-test.c
> @@ -0,0 +1,79 @@
> +#include <stdio.h>
> +
> +#include "qemu/osdep.h"
> +#include "libqtest.h"
> +#include "libqos/libqos.h"
> +#include "libqos/i2c.h"
> +
> +#define assert_equal(A, B) g_assert_cmphex((A), ==, (B))
> +
> +static
> +I2CAdapter *i2c;
> +
> +static
> +void test_ccsr(void)
> +{
> +    /* CCSRBAR is self referential */
> +    assert_equal(readl(0xff700000), 0x000ff700);
> +
> +    /* introspect memory size */
> +    assert_equal(readl(0xff702080), 0x80000000);
> +    /* value is (ram_size-1)>>24 */
> +    assert_equal(readl(0xff702000), 15);
> +}
> +
> +static
> +void test_cpld(void)
> +{
> +    /* read/write to test register */
> +    assert_equal(readl(0xe2000010), 0x00000000);
> +    assert_equal(readl(0xe2000014), 0xffffffff);
> +
> +    writel(0xe2000010, 0x12345678);
> +
> +    assert_equal(readl(0xe2000010), 0x12345678);
> +    assert_equal(readl(0xe2000014), 0x12345678 ^ 0xffffffff);
> +}
> +
> +static
> +void test_eeprom(void)
> +{
> +    char buf[] = "\x00\x00MOTOROLA";
> +
> +    /* 1. zero address pointer
> +     * 2. write 8 bytes,
> +     * 3. re-zero address pointer
> +     */
> +    i2c_send(i2c, 0xa8, (uint8_t *)buf, 10);
> +    i2c_send(i2c, 0xa8, (uint8_t *)buf, 2);
> +
> +    /* read 8 bytes */
> +    i2c_recv(i2c, 0xa8, (uint8_t *)buf, 8);
> +    buf[8] = '\0';
> +
> +    /* Read header for Motorola VPD info */
> +    g_assert_cmpstr(buf, ==, "MOTOROLA");
> +}
> +
> +int main(int argc, char *argv[])
> +{
> +    int ret;
> +    g_test_init(&argc, &argv, NULL);
> +
> +    qtest_start("-machine mvme3100-1152");
> +
> +    i2c = e500_i2c_create(0xff700000);
> +
> +    qtest_add_func("/mvme3100/ccsr", test_ccsr);
> +    qtest_add_func("/mvme3100/cpld", test_cpld);
> +    qtest_add_func("/mvme3100/eeprom", test_eeprom);
> +
> +    ret = g_test_run();
> +
> +    printf("Tests done\n");
> +
> +    qtest_end();
> +    printf("Tests end\n");
> +
> +    return ret;
> +}

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson