[PATCH v3 4/7] test: lmb: add test for lmb_reserve_flags
Simon Glass
sjg at chromium.org
Thu Apr 29 18:10:48 CEST 2021
On Wed, 28 Apr 2021 at 03:23, Patrick Delaunay
<patrick.delaunay at foss.st.com> wrote:
>
> Add a test to check the management of reserved region with flags.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
>
> (no changes since v1)
>
> test/lib/lmb.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 89 insertions(+)
Reviewed-by: Simon Glass <sjg at chromium.org>
>
> diff --git a/test/lib/lmb.c b/test/lib/lmb.c
> index 0d8963fcbf..b2c2b99ef1 100644
> --- a/test/lib/lmb.c
> +++ b/test/lib/lmb.c
> @@ -723,3 +723,92 @@ static int lib_test_lmb_max_regions(struct unit_test_state *uts)
>
> DM_TEST(lib_test_lmb_max_regions,
> UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
> +
> +static int lib_test_lmb_flags(struct unit_test_state *uts)
> +{
> + const phys_addr_t ram = 0x40000000;
> + const phys_size_t ram_size = 0x20000000;
> + struct lmb lmb;
> + long ret;
> +
> + lmb_init(&lmb);
> +
> + ret = lmb_add(&lmb, ram, ram_size);
> + ut_asserteq(ret, 0);
> +
> + /* reserve, same flag */
> + ret = lmb_reserve_flags(&lmb, 0x40010000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 0);
> + ASSERT_LMB(&lmb, ram, ram_size, 1, 0x40010000, 0x10000,
> + 0, 0, 0, 0);
> +
> + /* reserve again, same flag */
> + ret = lmb_reserve_flags(&lmb, 0x40010000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 0);
> + ASSERT_LMB(&lmb, ram, ram_size, 1, 0x40010000, 0x10000,
> + 0, 0, 0, 0);
> +
> + /* reserve again, new flag */
> + ret = lmb_reserve_flags(&lmb, 0x40010000, 0x10000, LMB_NONE);
> + ut_asserteq(ret, -1);
> + ASSERT_LMB(&lmb, ram, ram_size, 1, 0x40010000, 0x10000,
> + 0, 0, 0, 0);
> +
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[0]), 1);
> +
> + /* merge after */
> + ret = lmb_reserve_flags(&lmb, 0x40020000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 1);
> + ASSERT_LMB(&lmb, ram, ram_size, 1, 0x40010000, 0x20000,
> + 0, 0, 0, 0);
> +
> + /* merge before */
> + ret = lmb_reserve_flags(&lmb, 0x40000000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 1);
> + ASSERT_LMB(&lmb, ram, ram_size, 1, 0x40000000, 0x30000,
> + 0, 0, 0, 0);
> +
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[0]), 1);
> +
> + ret = lmb_reserve_flags(&lmb, 0x40030000, 0x10000, LMB_NONE);
> + ut_asserteq(ret, 0);
> + ASSERT_LMB(&lmb, ram, ram_size, 2, 0x40000000, 0x30000,
> + 0x40030000, 0x10000, 0, 0);
> +
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[0]), 1);
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[1]), 0);
> +
> + /* test that old API use LMB_NONE */
> + ret = lmb_reserve(&lmb, 0x40040000, 0x10000);
> + ut_asserteq(ret, 1);
> + ASSERT_LMB(&lmb, ram, ram_size, 2, 0x40000000, 0x30000,
> + 0x40030000, 0x20000, 0, 0);
> +
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[0]), 1);
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[1]), 0);
> +
> + ret = lmb_reserve_flags(&lmb, 0x40070000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 0);
> + ASSERT_LMB(&lmb, ram, ram_size, 3, 0x40000000, 0x30000,
> + 0x40030000, 0x20000, 0x40070000, 0x10000);
> +
> + ret = lmb_reserve_flags(&lmb, 0x40050000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 0);
> + ASSERT_LMB(&lmb, ram, ram_size, 4, 0x40000000, 0x30000,
> + 0x40030000, 0x20000, 0x40050000, 0x10000);
> +
> + /* merge with 2 adjacent regions */
> + ret = lmb_reserve_flags(&lmb, 0x40060000, 0x10000, LMB_NOMAP);
> + ut_asserteq(ret, 2);
> + ASSERT_LMB(&lmb, ram, ram_size, 3, 0x40000000, 0x30000,
> + 0x40030000, 0x20000, 0x40050000, 0x30000);
> +
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[0]), 1);
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[1]), 0);
> + ut_asserteq(lmb_is_nomap(&lmb.reserved.region[2]), 1);
> +
> + return 0;
> +}
> +
> +DM_TEST(lib_test_lmb_flags,
> + UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
> --
> 2.17.1
>
Regards,
Simon
More information about the U-Boot
mailing list