// SPDX-License-Identifier: GPL-2.0-or-later
/* Copyright (C) 2020 IBM Corp. */

#include <kunit/test.h>

static void aspeed_sdhci_phase_ddr52(struct kunit *test)
{
	int rate = 52000000;

	KUNIT_EXPECT_EQ(test, 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 0));
	KUNIT_EXPECT_EQ(test, 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 1));
	KUNIT_EXPECT_EQ(test, 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 2));
	KUNIT_EXPECT_EQ(test, 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 3));
	KUNIT_EXPECT_EQ(test, 2,
			aspeed_sdhci_phase_to_tap(NULL, rate, 4));
	KUNIT_EXPECT_EQ(test, 3,
			aspeed_sdhci_phase_to_tap(NULL, rate, 5));
	KUNIT_EXPECT_EQ(test, 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 23));
	KUNIT_EXPECT_EQ(test, 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 24));
	KUNIT_EXPECT_EQ(test, 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 25));

	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 181));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 182));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 183));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 2,
			aspeed_sdhci_phase_to_tap(NULL, rate, 184));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 3,
			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 203));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 204));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 205));
}

static void aspeed_sdhci_phase_hs200(struct kunit *test)
{
	int rate = 200000000;

	KUNIT_EXPECT_EQ(test, 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 0));
	KUNIT_EXPECT_EQ(test, 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 5));
	KUNIT_EXPECT_EQ(test, 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 6));
	KUNIT_EXPECT_EQ(test, 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 7));
	KUNIT_EXPECT_EQ(test, 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 89));
	KUNIT_EXPECT_EQ(test, 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 90));
	KUNIT_EXPECT_EQ(test, 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 91));
	KUNIT_EXPECT_EQ(test, 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 96));

	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 186));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 187));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 269));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 270));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 271));
	KUNIT_EXPECT_EQ(test, (int)ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 276));
}

static struct kunit_case aspeed_sdhci_test_cases[] = {
	KUNIT_CASE(aspeed_sdhci_phase_ddr52),
	KUNIT_CASE(aspeed_sdhci_phase_hs200),
	{}
};

static struct kunit_suite aspeed_sdhci_test_suite = {
	.name = "sdhci-of-aspeed",
	.test_cases = aspeed_sdhci_test_cases,
};

static struct kunit_suite *aspeed_sdc_test_suite_array[] = {
	&aspeed_sdhci_test_suite,
	NULL,
};

static struct kunit_suite **aspeed_sdc_test_suites
	__used __section(".kunit_test_suites") = aspeed_sdc_test_suite_array;
