162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/* Copyright (C) 2020 IBM Corp. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <kunit/test.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_cistatic void aspeed_sdhci_phase_ddr52(struct kunit *test)
762306a36Sopenharmony_ci{
862306a36Sopenharmony_ci	int rate = 52000000;
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 0,
1162306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 0));
1262306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 0,
1362306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 1));
1462306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 1,
1562306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 2));
1662306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 1,
1762306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 3));
1862306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 2,
1962306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 4));
2062306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 3,
2162306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 5));
2262306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 14,
2362306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 23));
2462306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 15,
2562306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 24));
2662306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 15,
2762306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 25));
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
3062306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
3162306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
3262306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 181));
3362306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
3462306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 182));
3562306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
3662306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 183));
3762306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 2,
3862306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 184));
3962306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 3,
4062306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
4162306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
4262306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 203));
4362306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
4462306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 204));
4562306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
4662306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 205));
4762306a36Sopenharmony_ci}
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistatic void aspeed_sdhci_phase_hs200(struct kunit *test)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci	int rate = 200000000;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 0,
5462306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 0));
5562306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 0,
5662306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 5));
5762306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 1,
5862306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 6));
5962306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 1,
6062306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 7));
6162306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 14,
6262306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 89));
6362306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 15,
6462306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 90));
6562306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 15,
6662306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 91));
6762306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, 15,
6862306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 96));
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
7162306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
7262306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
7362306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
7462306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
7562306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 186));
7662306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
7762306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 187));
7862306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
7962306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 269));
8062306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
8162306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 270));
8262306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
8362306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 271));
8462306a36Sopenharmony_ci	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
8562306a36Sopenharmony_ci			aspeed_sdhci_phase_to_tap(NULL, rate, 276));
8662306a36Sopenharmony_ci}
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_cistatic struct kunit_case aspeed_sdhci_test_cases[] = {
8962306a36Sopenharmony_ci	KUNIT_CASE(aspeed_sdhci_phase_ddr52),
9062306a36Sopenharmony_ci	KUNIT_CASE(aspeed_sdhci_phase_hs200),
9162306a36Sopenharmony_ci	{}
9262306a36Sopenharmony_ci};
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cistatic struct kunit_suite aspeed_sdhci_test_suite = {
9562306a36Sopenharmony_ci	.name = "sdhci-of-aspeed",
9662306a36Sopenharmony_ci	.test_cases = aspeed_sdhci_test_cases,
9762306a36Sopenharmony_ci};
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_cikunit_test_suite(aspeed_sdhci_test_suite);
100