18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <stdio.h>
38c2ecf20Sopenharmony_ci#include <byteswap.h>
48c2ecf20Sopenharmony_ci#include "utils.h"
58c2ecf20Sopenharmony_ci#include "subunit.h"
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
88c2ecf20Sopenharmony_ci#define cpu_to_be32(x)		bswap_32(x)
98c2ecf20Sopenharmony_ci#define be32_to_cpu(x)		bswap_32(x)
108c2ecf20Sopenharmony_ci#define be16_to_cpup(x)		bswap_16(*x)
118c2ecf20Sopenharmony_ci#define cpu_to_be64(x)		bswap_64(x)
128c2ecf20Sopenharmony_ci#else
138c2ecf20Sopenharmony_ci#define cpu_to_be32(x)		(x)
148c2ecf20Sopenharmony_ci#define be32_to_cpu(x)		(x)
158c2ecf20Sopenharmony_ci#define be16_to_cpup(x)		(*x)
168c2ecf20Sopenharmony_ci#define cpu_to_be64(x)		(x)
178c2ecf20Sopenharmony_ci#endif
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#include "vphn.c"
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistatic struct test {
228c2ecf20Sopenharmony_ci	char *descr;
238c2ecf20Sopenharmony_ci	long input[VPHN_REGISTER_COUNT];
248c2ecf20Sopenharmony_ci	u32 expected[VPHN_ASSOC_BUFSIZE];
258c2ecf20Sopenharmony_ci} all_tests[] = {
268c2ecf20Sopenharmony_ci	{
278c2ecf20Sopenharmony_ci		"vphn: no data",
288c2ecf20Sopenharmony_ci		{
298c2ecf20Sopenharmony_ci			0xffffffffffffffff,
308c2ecf20Sopenharmony_ci			0xffffffffffffffff,
318c2ecf20Sopenharmony_ci			0xffffffffffffffff,
328c2ecf20Sopenharmony_ci			0xffffffffffffffff,
338c2ecf20Sopenharmony_ci			0xffffffffffffffff,
348c2ecf20Sopenharmony_ci			0xffffffffffffffff,
358c2ecf20Sopenharmony_ci		},
368c2ecf20Sopenharmony_ci		{
378c2ecf20Sopenharmony_ci			0x00000000
388c2ecf20Sopenharmony_ci		}
398c2ecf20Sopenharmony_ci	},
408c2ecf20Sopenharmony_ci	{
418c2ecf20Sopenharmony_ci		"vphn: 1 x 16-bit value",
428c2ecf20Sopenharmony_ci		{
438c2ecf20Sopenharmony_ci			0x8001ffffffffffff,
448c2ecf20Sopenharmony_ci			0xffffffffffffffff,
458c2ecf20Sopenharmony_ci			0xffffffffffffffff,
468c2ecf20Sopenharmony_ci			0xffffffffffffffff,
478c2ecf20Sopenharmony_ci			0xffffffffffffffff,
488c2ecf20Sopenharmony_ci			0xffffffffffffffff,
498c2ecf20Sopenharmony_ci		},
508c2ecf20Sopenharmony_ci		{
518c2ecf20Sopenharmony_ci			0x00000001,
528c2ecf20Sopenharmony_ci			0x00000001
538c2ecf20Sopenharmony_ci		}
548c2ecf20Sopenharmony_ci	},
558c2ecf20Sopenharmony_ci	{
568c2ecf20Sopenharmony_ci		"vphn: 2 x 16-bit values",
578c2ecf20Sopenharmony_ci		{
588c2ecf20Sopenharmony_ci			0x80018002ffffffff,
598c2ecf20Sopenharmony_ci			0xffffffffffffffff,
608c2ecf20Sopenharmony_ci			0xffffffffffffffff,
618c2ecf20Sopenharmony_ci			0xffffffffffffffff,
628c2ecf20Sopenharmony_ci			0xffffffffffffffff,
638c2ecf20Sopenharmony_ci			0xffffffffffffffff,
648c2ecf20Sopenharmony_ci		},
658c2ecf20Sopenharmony_ci		{
668c2ecf20Sopenharmony_ci			0x00000002,
678c2ecf20Sopenharmony_ci			0x00000001,
688c2ecf20Sopenharmony_ci			0x00000002
698c2ecf20Sopenharmony_ci		}
708c2ecf20Sopenharmony_ci	},
718c2ecf20Sopenharmony_ci	{
728c2ecf20Sopenharmony_ci		"vphn: 3 x 16-bit values",
738c2ecf20Sopenharmony_ci		{
748c2ecf20Sopenharmony_ci			0x800180028003ffff,
758c2ecf20Sopenharmony_ci			0xffffffffffffffff,
768c2ecf20Sopenharmony_ci			0xffffffffffffffff,
778c2ecf20Sopenharmony_ci			0xffffffffffffffff,
788c2ecf20Sopenharmony_ci			0xffffffffffffffff,
798c2ecf20Sopenharmony_ci			0xffffffffffffffff,
808c2ecf20Sopenharmony_ci		},
818c2ecf20Sopenharmony_ci		{
828c2ecf20Sopenharmony_ci			0x00000003,
838c2ecf20Sopenharmony_ci			0x00000001,
848c2ecf20Sopenharmony_ci			0x00000002,
858c2ecf20Sopenharmony_ci			0x00000003
868c2ecf20Sopenharmony_ci		}
878c2ecf20Sopenharmony_ci	},
888c2ecf20Sopenharmony_ci	{
898c2ecf20Sopenharmony_ci		"vphn: 4 x 16-bit values",
908c2ecf20Sopenharmony_ci		{
918c2ecf20Sopenharmony_ci			0x8001800280038004,
928c2ecf20Sopenharmony_ci			0xffffffffffffffff,
938c2ecf20Sopenharmony_ci			0xffffffffffffffff,
948c2ecf20Sopenharmony_ci			0xffffffffffffffff,
958c2ecf20Sopenharmony_ci			0xffffffffffffffff,
968c2ecf20Sopenharmony_ci			0xffffffffffffffff,
978c2ecf20Sopenharmony_ci		},
988c2ecf20Sopenharmony_ci		{
998c2ecf20Sopenharmony_ci			0x00000004,
1008c2ecf20Sopenharmony_ci			0x00000001,
1018c2ecf20Sopenharmony_ci			0x00000002,
1028c2ecf20Sopenharmony_ci			0x00000003,
1038c2ecf20Sopenharmony_ci			0x00000004
1048c2ecf20Sopenharmony_ci		}
1058c2ecf20Sopenharmony_ci	},
1068c2ecf20Sopenharmony_ci	{
1078c2ecf20Sopenharmony_ci		/* Parsing the next 16-bit value out of the next 64-bit input
1088c2ecf20Sopenharmony_ci		 * value.
1098c2ecf20Sopenharmony_ci		 */
1108c2ecf20Sopenharmony_ci		"vphn: 5 x 16-bit values",
1118c2ecf20Sopenharmony_ci		{
1128c2ecf20Sopenharmony_ci			0x8001800280038004,
1138c2ecf20Sopenharmony_ci			0x8005ffffffffffff,
1148c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1158c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1168c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1178c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1188c2ecf20Sopenharmony_ci		},
1198c2ecf20Sopenharmony_ci		{
1208c2ecf20Sopenharmony_ci			0x00000005,
1218c2ecf20Sopenharmony_ci			0x00000001,
1228c2ecf20Sopenharmony_ci			0x00000002,
1238c2ecf20Sopenharmony_ci			0x00000003,
1248c2ecf20Sopenharmony_ci			0x00000004,
1258c2ecf20Sopenharmony_ci			0x00000005
1268c2ecf20Sopenharmony_ci		}
1278c2ecf20Sopenharmony_ci	},
1288c2ecf20Sopenharmony_ci	{
1298c2ecf20Sopenharmony_ci		/* Parse at most 6 x 64-bit input values */
1308c2ecf20Sopenharmony_ci		"vphn: 24 x 16-bit values",
1318c2ecf20Sopenharmony_ci		{
1328c2ecf20Sopenharmony_ci			0x8001800280038004,
1338c2ecf20Sopenharmony_ci			0x8005800680078008,
1348c2ecf20Sopenharmony_ci			0x8009800a800b800c,
1358c2ecf20Sopenharmony_ci			0x800d800e800f8010,
1368c2ecf20Sopenharmony_ci			0x8011801280138014,
1378c2ecf20Sopenharmony_ci			0x8015801680178018
1388c2ecf20Sopenharmony_ci		},
1398c2ecf20Sopenharmony_ci		{
1408c2ecf20Sopenharmony_ci			0x00000018,
1418c2ecf20Sopenharmony_ci			0x00000001,
1428c2ecf20Sopenharmony_ci			0x00000002,
1438c2ecf20Sopenharmony_ci			0x00000003,
1448c2ecf20Sopenharmony_ci			0x00000004,
1458c2ecf20Sopenharmony_ci			0x00000005,
1468c2ecf20Sopenharmony_ci			0x00000006,
1478c2ecf20Sopenharmony_ci			0x00000007,
1488c2ecf20Sopenharmony_ci			0x00000008,
1498c2ecf20Sopenharmony_ci			0x00000009,
1508c2ecf20Sopenharmony_ci			0x0000000a,
1518c2ecf20Sopenharmony_ci			0x0000000b,
1528c2ecf20Sopenharmony_ci			0x0000000c,
1538c2ecf20Sopenharmony_ci			0x0000000d,
1548c2ecf20Sopenharmony_ci			0x0000000e,
1558c2ecf20Sopenharmony_ci			0x0000000f,
1568c2ecf20Sopenharmony_ci			0x00000010,
1578c2ecf20Sopenharmony_ci			0x00000011,
1588c2ecf20Sopenharmony_ci			0x00000012,
1598c2ecf20Sopenharmony_ci			0x00000013,
1608c2ecf20Sopenharmony_ci			0x00000014,
1618c2ecf20Sopenharmony_ci			0x00000015,
1628c2ecf20Sopenharmony_ci			0x00000016,
1638c2ecf20Sopenharmony_ci			0x00000017,
1648c2ecf20Sopenharmony_ci			0x00000018
1658c2ecf20Sopenharmony_ci		}
1668c2ecf20Sopenharmony_ci	},
1678c2ecf20Sopenharmony_ci	{
1688c2ecf20Sopenharmony_ci		"vphn: 1 x 32-bit value",
1698c2ecf20Sopenharmony_ci		{
1708c2ecf20Sopenharmony_ci			0x00000001ffffffff,
1718c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1728c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1738c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1748c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1758c2ecf20Sopenharmony_ci			0xffffffffffffffff
1768c2ecf20Sopenharmony_ci		},
1778c2ecf20Sopenharmony_ci		{
1788c2ecf20Sopenharmony_ci			0x00000001,
1798c2ecf20Sopenharmony_ci			0x00000001
1808c2ecf20Sopenharmony_ci		}
1818c2ecf20Sopenharmony_ci	},
1828c2ecf20Sopenharmony_ci	{
1838c2ecf20Sopenharmony_ci		"vphn: 2 x 32-bit values",
1848c2ecf20Sopenharmony_ci		{
1858c2ecf20Sopenharmony_ci			0x0000000100000002,
1868c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1878c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1888c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1898c2ecf20Sopenharmony_ci			0xffffffffffffffff,
1908c2ecf20Sopenharmony_ci			0xffffffffffffffff
1918c2ecf20Sopenharmony_ci		},
1928c2ecf20Sopenharmony_ci		{
1938c2ecf20Sopenharmony_ci			0x00000002,
1948c2ecf20Sopenharmony_ci			0x00000001,
1958c2ecf20Sopenharmony_ci			0x00000002
1968c2ecf20Sopenharmony_ci		}
1978c2ecf20Sopenharmony_ci	},
1988c2ecf20Sopenharmony_ci	{
1998c2ecf20Sopenharmony_ci		/* Parsing the next 32-bit value out of the next 64-bit input
2008c2ecf20Sopenharmony_ci		 * value.
2018c2ecf20Sopenharmony_ci		 */
2028c2ecf20Sopenharmony_ci		"vphn: 3 x 32-bit values",
2038c2ecf20Sopenharmony_ci		{
2048c2ecf20Sopenharmony_ci			0x0000000100000002,
2058c2ecf20Sopenharmony_ci			0x00000003ffffffff,
2068c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2078c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2088c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2098c2ecf20Sopenharmony_ci			0xffffffffffffffff
2108c2ecf20Sopenharmony_ci		},
2118c2ecf20Sopenharmony_ci		{
2128c2ecf20Sopenharmony_ci			0x00000003,
2138c2ecf20Sopenharmony_ci			0x00000001,
2148c2ecf20Sopenharmony_ci			0x00000002,
2158c2ecf20Sopenharmony_ci			0x00000003
2168c2ecf20Sopenharmony_ci		}
2178c2ecf20Sopenharmony_ci	},
2188c2ecf20Sopenharmony_ci	{
2198c2ecf20Sopenharmony_ci		/* Parse at most 6 x 64-bit input values */
2208c2ecf20Sopenharmony_ci		"vphn: 12 x 32-bit values",
2218c2ecf20Sopenharmony_ci		{
2228c2ecf20Sopenharmony_ci			0x0000000100000002,
2238c2ecf20Sopenharmony_ci			0x0000000300000004,
2248c2ecf20Sopenharmony_ci			0x0000000500000006,
2258c2ecf20Sopenharmony_ci			0x0000000700000008,
2268c2ecf20Sopenharmony_ci			0x000000090000000a,
2278c2ecf20Sopenharmony_ci			0x0000000b0000000c
2288c2ecf20Sopenharmony_ci		},
2298c2ecf20Sopenharmony_ci		{
2308c2ecf20Sopenharmony_ci			0x0000000c,
2318c2ecf20Sopenharmony_ci			0x00000001,
2328c2ecf20Sopenharmony_ci			0x00000002,
2338c2ecf20Sopenharmony_ci			0x00000003,
2348c2ecf20Sopenharmony_ci			0x00000004,
2358c2ecf20Sopenharmony_ci			0x00000005,
2368c2ecf20Sopenharmony_ci			0x00000006,
2378c2ecf20Sopenharmony_ci			0x00000007,
2388c2ecf20Sopenharmony_ci			0x00000008,
2398c2ecf20Sopenharmony_ci			0x00000009,
2408c2ecf20Sopenharmony_ci			0x0000000a,
2418c2ecf20Sopenharmony_ci			0x0000000b,
2428c2ecf20Sopenharmony_ci			0x0000000c
2438c2ecf20Sopenharmony_ci		}
2448c2ecf20Sopenharmony_ci	},
2458c2ecf20Sopenharmony_ci	{
2468c2ecf20Sopenharmony_ci		"vphn: 16-bit value followed by 32-bit value",
2478c2ecf20Sopenharmony_ci		{
2488c2ecf20Sopenharmony_ci			0x800100000002ffff,
2498c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2508c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2518c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2528c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2538c2ecf20Sopenharmony_ci			0xffffffffffffffff
2548c2ecf20Sopenharmony_ci		},
2558c2ecf20Sopenharmony_ci		{
2568c2ecf20Sopenharmony_ci			0x00000002,
2578c2ecf20Sopenharmony_ci			0x00000001,
2588c2ecf20Sopenharmony_ci			0x00000002
2598c2ecf20Sopenharmony_ci		}
2608c2ecf20Sopenharmony_ci	},
2618c2ecf20Sopenharmony_ci	{
2628c2ecf20Sopenharmony_ci		"vphn: 32-bit value followed by 16-bit value",
2638c2ecf20Sopenharmony_ci		{
2648c2ecf20Sopenharmony_ci			0x000000018002ffff,
2658c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2668c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2678c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2688c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2698c2ecf20Sopenharmony_ci			0xffffffffffffffff
2708c2ecf20Sopenharmony_ci		},
2718c2ecf20Sopenharmony_ci		{
2728c2ecf20Sopenharmony_ci			0x00000002,
2738c2ecf20Sopenharmony_ci			0x00000001,
2748c2ecf20Sopenharmony_ci			0x00000002
2758c2ecf20Sopenharmony_ci		}
2768c2ecf20Sopenharmony_ci	},
2778c2ecf20Sopenharmony_ci	{
2788c2ecf20Sopenharmony_ci		/* Parse a 32-bit value split accross two consecutives 64-bit
2798c2ecf20Sopenharmony_ci		 * input values.
2808c2ecf20Sopenharmony_ci		 */
2818c2ecf20Sopenharmony_ci		"vphn: 16-bit value followed by 2 x 32-bit values",
2828c2ecf20Sopenharmony_ci		{
2838c2ecf20Sopenharmony_ci			0x8001000000020000,
2848c2ecf20Sopenharmony_ci			0x0003ffffffffffff,
2858c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2868c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2878c2ecf20Sopenharmony_ci			0xffffffffffffffff,
2888c2ecf20Sopenharmony_ci			0xffffffffffffffff
2898c2ecf20Sopenharmony_ci		},
2908c2ecf20Sopenharmony_ci		{
2918c2ecf20Sopenharmony_ci			0x00000003,
2928c2ecf20Sopenharmony_ci			0x00000001,
2938c2ecf20Sopenharmony_ci			0x00000002,
2948c2ecf20Sopenharmony_ci			0x00000003,
2958c2ecf20Sopenharmony_ci			0x00000004,
2968c2ecf20Sopenharmony_ci			0x00000005
2978c2ecf20Sopenharmony_ci		}
2988c2ecf20Sopenharmony_ci	},
2998c2ecf20Sopenharmony_ci	{
3008c2ecf20Sopenharmony_ci		/* The lower bits in 0x0001ffff don't get mixed up with the
3018c2ecf20Sopenharmony_ci		 * 0xffff terminator.
3028c2ecf20Sopenharmony_ci		 */
3038c2ecf20Sopenharmony_ci		"vphn: 32-bit value has all ones in 16 lower bits",
3048c2ecf20Sopenharmony_ci		{
3058c2ecf20Sopenharmony_ci			0x0001ffff80028003,
3068c2ecf20Sopenharmony_ci			0xffffffffffffffff,
3078c2ecf20Sopenharmony_ci			0xffffffffffffffff,
3088c2ecf20Sopenharmony_ci			0xffffffffffffffff,
3098c2ecf20Sopenharmony_ci			0xffffffffffffffff,
3108c2ecf20Sopenharmony_ci			0xffffffffffffffff
3118c2ecf20Sopenharmony_ci		},
3128c2ecf20Sopenharmony_ci		{
3138c2ecf20Sopenharmony_ci			0x00000003,
3148c2ecf20Sopenharmony_ci			0x0001ffff,
3158c2ecf20Sopenharmony_ci			0x00000002,
3168c2ecf20Sopenharmony_ci			0x00000003
3178c2ecf20Sopenharmony_ci		}
3188c2ecf20Sopenharmony_ci	},
3198c2ecf20Sopenharmony_ci	{
3208c2ecf20Sopenharmony_ci		/* The following input doesn't follow the specification.
3218c2ecf20Sopenharmony_ci		 */
3228c2ecf20Sopenharmony_ci		"vphn: last 32-bit value is truncated",
3238c2ecf20Sopenharmony_ci		{
3248c2ecf20Sopenharmony_ci			0x0000000100000002,
3258c2ecf20Sopenharmony_ci			0x0000000300000004,
3268c2ecf20Sopenharmony_ci			0x0000000500000006,
3278c2ecf20Sopenharmony_ci			0x0000000700000008,
3288c2ecf20Sopenharmony_ci			0x000000090000000a,
3298c2ecf20Sopenharmony_ci			0x0000000b800c2bad
3308c2ecf20Sopenharmony_ci		},
3318c2ecf20Sopenharmony_ci		{
3328c2ecf20Sopenharmony_ci			0x0000000c,
3338c2ecf20Sopenharmony_ci			0x00000001,
3348c2ecf20Sopenharmony_ci			0x00000002,
3358c2ecf20Sopenharmony_ci			0x00000003,
3368c2ecf20Sopenharmony_ci			0x00000004,
3378c2ecf20Sopenharmony_ci			0x00000005,
3388c2ecf20Sopenharmony_ci			0x00000006,
3398c2ecf20Sopenharmony_ci			0x00000007,
3408c2ecf20Sopenharmony_ci			0x00000008,
3418c2ecf20Sopenharmony_ci			0x00000009,
3428c2ecf20Sopenharmony_ci			0x0000000a,
3438c2ecf20Sopenharmony_ci			0x0000000b,
3448c2ecf20Sopenharmony_ci			0x0000000c
3458c2ecf20Sopenharmony_ci		}
3468c2ecf20Sopenharmony_ci	},
3478c2ecf20Sopenharmony_ci	{
3488c2ecf20Sopenharmony_ci		"vphn: garbage after terminator",
3498c2ecf20Sopenharmony_ci		{
3508c2ecf20Sopenharmony_ci			0xffff2bad2bad2bad,
3518c2ecf20Sopenharmony_ci			0x2bad2bad2bad2bad,
3528c2ecf20Sopenharmony_ci			0x2bad2bad2bad2bad,
3538c2ecf20Sopenharmony_ci			0x2bad2bad2bad2bad,
3548c2ecf20Sopenharmony_ci			0x2bad2bad2bad2bad,
3558c2ecf20Sopenharmony_ci			0x2bad2bad2bad2bad
3568c2ecf20Sopenharmony_ci		},
3578c2ecf20Sopenharmony_ci		{
3588c2ecf20Sopenharmony_ci			0x00000000
3598c2ecf20Sopenharmony_ci		}
3608c2ecf20Sopenharmony_ci	},
3618c2ecf20Sopenharmony_ci	{
3628c2ecf20Sopenharmony_ci		NULL
3638c2ecf20Sopenharmony_ci	}
3648c2ecf20Sopenharmony_ci};
3658c2ecf20Sopenharmony_ci
3668c2ecf20Sopenharmony_cistatic int test_one(struct test *test)
3678c2ecf20Sopenharmony_ci{
3688c2ecf20Sopenharmony_ci	__be32 output[VPHN_ASSOC_BUFSIZE] = { 0 };
3698c2ecf20Sopenharmony_ci	int i, len;
3708c2ecf20Sopenharmony_ci
3718c2ecf20Sopenharmony_ci	vphn_unpack_associativity(test->input, output);
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci	len = be32_to_cpu(output[0]);
3748c2ecf20Sopenharmony_ci	if (len != test->expected[0]) {
3758c2ecf20Sopenharmony_ci		printf("expected %d elements, got %d\n", test->expected[0],
3768c2ecf20Sopenharmony_ci		       len);
3778c2ecf20Sopenharmony_ci		return 1;
3788c2ecf20Sopenharmony_ci	}
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_ci	for (i = 1; i < len; i++) {
3818c2ecf20Sopenharmony_ci		u32 val = be32_to_cpu(output[i]);
3828c2ecf20Sopenharmony_ci		if (val != test->expected[i]) {
3838c2ecf20Sopenharmony_ci			printf("element #%d is 0x%x, should be 0x%x\n", i, val,
3848c2ecf20Sopenharmony_ci			       test->expected[i]);
3858c2ecf20Sopenharmony_ci			return 1;
3868c2ecf20Sopenharmony_ci		}
3878c2ecf20Sopenharmony_ci	}
3888c2ecf20Sopenharmony_ci
3898c2ecf20Sopenharmony_ci	return 0;
3908c2ecf20Sopenharmony_ci}
3918c2ecf20Sopenharmony_ci
3928c2ecf20Sopenharmony_cistatic int test_vphn(void)
3938c2ecf20Sopenharmony_ci{
3948c2ecf20Sopenharmony_ci	static struct test *test;
3958c2ecf20Sopenharmony_ci
3968c2ecf20Sopenharmony_ci	for (test = all_tests; test->descr; test++) {
3978c2ecf20Sopenharmony_ci		int ret;
3988c2ecf20Sopenharmony_ci
3998c2ecf20Sopenharmony_ci		ret = test_one(test);
4008c2ecf20Sopenharmony_ci		test_finish(test->descr, ret);
4018c2ecf20Sopenharmony_ci		if (ret)
4028c2ecf20Sopenharmony_ci			return ret;
4038c2ecf20Sopenharmony_ci	}
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci	return 0;
4068c2ecf20Sopenharmony_ci}
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_ciint main(int argc, char **argv)
4098c2ecf20Sopenharmony_ci{
4108c2ecf20Sopenharmony_ci	return test_harness(test_vphn, "test-vphn");
4118c2ecf20Sopenharmony_ci}
412