// 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, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 0,
			aspeed_sdhci_phase_to_tap(NULL, rate, 181));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 182));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 183));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 2,
			aspeed_sdhci_phase_to_tap(NULL, rate, 184));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 3,
			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 203));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 204));
	KUNIT_EXPECT_EQ(test, 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, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
			aspeed_sdhci_phase_to_tap(NULL, rate, 180));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK,
			aspeed_sdhci_phase_to_tap(NULL, rate, 185));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 186));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 1,
			aspeed_sdhci_phase_to_tap(NULL, rate, 187));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 14,
			aspeed_sdhci_phase_to_tap(NULL, rate, 269));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 270));
	KUNIT_EXPECT_EQ(test, ASPEED_SDHCI_TAP_PARAM_INVERT_CLK | 15,
			aspeed_sdhci_phase_to_tap(NULL, rate, 271));
	KUNIT_EXPECT_EQ(test, 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;
