xref: /rk3399_rockchip-uboot/test/dm/eth.c (revision 7d104eab7dfb632dd96d027b7bfb233f1ae41ba7)
1bfacad7dSJoe Hershberger /*
2bfacad7dSJoe Hershberger  * Copyright (c) 2015 National Instruments
3bfacad7dSJoe Hershberger  *
4bfacad7dSJoe Hershberger  * (C) Copyright 2015
5bfacad7dSJoe Hershberger  * Joe Hershberger <joe.hershberger@ni.com>
6bfacad7dSJoe Hershberger  *
7bfacad7dSJoe Hershberger  * SPDX-License-Identifier:	GPL-2.0
8bfacad7dSJoe Hershberger  */
9bfacad7dSJoe Hershberger 
10bfacad7dSJoe Hershberger #include <common.h>
11bfacad7dSJoe Hershberger #include <dm.h>
12bfacad7dSJoe Hershberger #include <dm/test.h>
13bfacad7dSJoe Hershberger #include <dm/ut.h>
14bfacad7dSJoe Hershberger #include <fdtdec.h>
15bfacad7dSJoe Hershberger #include <malloc.h>
16bfacad7dSJoe Hershberger #include <net.h>
17bfacad7dSJoe Hershberger 
18bfacad7dSJoe Hershberger DECLARE_GLOBAL_DATA_PTR;
19bfacad7dSJoe Hershberger 
20bfacad7dSJoe Hershberger static int dm_test_eth(struct dm_test_state *dms)
21bfacad7dSJoe Hershberger {
22bfacad7dSJoe Hershberger 	NetPingIP = string_to_ip("1.1.2.2");
23bfacad7dSJoe Hershberger 
24bfacad7dSJoe Hershberger 	setenv("ethact", "eth@10002000");
25bfacad7dSJoe Hershberger 	ut_assertok(NetLoop(PING));
26bfacad7dSJoe Hershberger 	ut_asserteq_str("eth@10002000", getenv("ethact"));
27bfacad7dSJoe Hershberger 
28bfacad7dSJoe Hershberger 	setenv("ethact", "eth@10003000");
29bfacad7dSJoe Hershberger 	ut_assertok(NetLoop(PING));
30bfacad7dSJoe Hershberger 	ut_asserteq_str("eth@10003000", getenv("ethact"));
31bfacad7dSJoe Hershberger 
32bfacad7dSJoe Hershberger 	setenv("ethact", "eth@10004000");
33bfacad7dSJoe Hershberger 	ut_assertok(NetLoop(PING));
34bfacad7dSJoe Hershberger 	ut_asserteq_str("eth@10004000", getenv("ethact"));
35bfacad7dSJoe Hershberger 
36bfacad7dSJoe Hershberger 	return 0;
37bfacad7dSJoe Hershberger }
38bfacad7dSJoe Hershberger DM_TEST(dm_test_eth, DM_TESTF_SCAN_FDT);
39e58780dcSJoe Hershberger 
40e58780dcSJoe Hershberger static int dm_test_eth_alias(struct dm_test_state *dms)
41e58780dcSJoe Hershberger {
42e58780dcSJoe Hershberger 	NetPingIP = string_to_ip("1.1.2.2");
43e58780dcSJoe Hershberger 	setenv("ethact", "eth0");
44e58780dcSJoe Hershberger 	ut_assertok(NetLoop(PING));
45e58780dcSJoe Hershberger 	ut_asserteq_str("eth@10002000", getenv("ethact"));
46e58780dcSJoe Hershberger 
47e58780dcSJoe Hershberger 	setenv("ethact", "eth1");
48e58780dcSJoe Hershberger 	ut_assertok(NetLoop(PING));
49e58780dcSJoe Hershberger 	ut_asserteq_str("eth@10004000", getenv("ethact"));
50e58780dcSJoe Hershberger 
51e58780dcSJoe Hershberger 	/* Expected to fail since eth2 is not defined in the device tree */
52e58780dcSJoe Hershberger 	setenv("ethact", "eth2");
53e58780dcSJoe Hershberger 	ut_assertok(NetLoop(PING));
54e58780dcSJoe Hershberger 	ut_asserteq_str("eth@10002000", getenv("ethact"));
55e58780dcSJoe Hershberger 
56e58780dcSJoe Hershberger 	setenv("ethact", "eth5");
57e58780dcSJoe Hershberger 	ut_assertok(NetLoop(PING));
58e58780dcSJoe Hershberger 	ut_asserteq_str("eth@10003000", getenv("ethact"));
59e58780dcSJoe Hershberger 
60e58780dcSJoe Hershberger 	return 0;
61e58780dcSJoe Hershberger }
62e58780dcSJoe Hershberger DM_TEST(dm_test_eth_alias, DM_TESTF_SCAN_FDT);
636536b9bbSJoe Hershberger 
646536b9bbSJoe Hershberger static int dm_test_eth_prime(struct dm_test_state *dms)
656536b9bbSJoe Hershberger {
666536b9bbSJoe Hershberger 	NetPingIP = string_to_ip("1.1.2.2");
676536b9bbSJoe Hershberger 
686536b9bbSJoe Hershberger 	/* Expected to be "eth@10003000" because of ethprime variable */
696536b9bbSJoe Hershberger 	setenv("ethact", NULL);
706536b9bbSJoe Hershberger 	setenv("ethprime", "eth5");
716536b9bbSJoe Hershberger 	ut_assertok(NetLoop(PING));
726536b9bbSJoe Hershberger 	ut_asserteq_str("eth@10003000", getenv("ethact"));
736536b9bbSJoe Hershberger 
746536b9bbSJoe Hershberger 	/* Expected to be "eth@10002000" because it is first */
756536b9bbSJoe Hershberger 	setenv("ethact", NULL);
766536b9bbSJoe Hershberger 	setenv("ethprime", NULL);
776536b9bbSJoe Hershberger 	ut_assertok(NetLoop(PING));
786536b9bbSJoe Hershberger 	ut_asserteq_str("eth@10002000", getenv("ethact"));
796536b9bbSJoe Hershberger 
806536b9bbSJoe Hershberger 	return 0;
816536b9bbSJoe Hershberger }
826536b9bbSJoe Hershberger DM_TEST(dm_test_eth_prime, DM_TESTF_SCAN_FDT);
83*7d104eabSJoe Hershberger 
84*7d104eabSJoe Hershberger static int dm_test_eth_rotate(struct dm_test_state *dms)
85*7d104eabSJoe Hershberger {
86*7d104eabSJoe Hershberger 	char ethaddr[18];
87*7d104eabSJoe Hershberger 
88*7d104eabSJoe Hershberger 	/* Invalidate eth1's MAC address */
89*7d104eabSJoe Hershberger 	NetPingIP = string_to_ip("1.1.2.2");
90*7d104eabSJoe Hershberger 	strcpy(ethaddr, getenv("eth1addr"));
91*7d104eabSJoe Hershberger 	setenv("eth1addr", NULL);
92*7d104eabSJoe Hershberger 
93*7d104eabSJoe Hershberger 	/* Make sure that the default is to rotate to the next interface */
94*7d104eabSJoe Hershberger 	setenv("ethact", "eth@10004000");
95*7d104eabSJoe Hershberger 	ut_assertok(NetLoop(PING));
96*7d104eabSJoe Hershberger 	ut_asserteq_str("eth@10002000", getenv("ethact"));
97*7d104eabSJoe Hershberger 
98*7d104eabSJoe Hershberger 	/* If ethrotate is no, then we should fail on a bad MAC */
99*7d104eabSJoe Hershberger 	setenv("ethact", "eth@10004000");
100*7d104eabSJoe Hershberger 	setenv("ethrotate", "no");
101*7d104eabSJoe Hershberger 	ut_asserteq(-1, NetLoop(PING));
102*7d104eabSJoe Hershberger 	ut_asserteq_str("eth@10004000", getenv("ethact"));
103*7d104eabSJoe Hershberger 
104*7d104eabSJoe Hershberger 	/* Restore the env */
105*7d104eabSJoe Hershberger 	setenv("eth1addr", ethaddr);
106*7d104eabSJoe Hershberger 	setenv("ethrotate", NULL);
107*7d104eabSJoe Hershberger 
108*7d104eabSJoe Hershberger 	/* Invalidate eth0's MAC address */
109*7d104eabSJoe Hershberger 	strcpy(ethaddr, getenv("ethaddr"));
110*7d104eabSJoe Hershberger 	setenv(".flags", "ethaddr");
111*7d104eabSJoe Hershberger 	setenv("ethaddr", NULL);
112*7d104eabSJoe Hershberger 
113*7d104eabSJoe Hershberger 	/* Make sure we can skip invalid devices */
114*7d104eabSJoe Hershberger 	setenv("ethact", "eth@10004000");
115*7d104eabSJoe Hershberger 	ut_assertok(NetLoop(PING));
116*7d104eabSJoe Hershberger 	ut_asserteq_str("eth@10004000", getenv("ethact"));
117*7d104eabSJoe Hershberger 
118*7d104eabSJoe Hershberger 	/* Restore the env */
119*7d104eabSJoe Hershberger 	setenv("ethaddr", ethaddr);
120*7d104eabSJoe Hershberger 	setenv(".flags", NULL);
121*7d104eabSJoe Hershberger 
122*7d104eabSJoe Hershberger 	return 0;
123*7d104eabSJoe Hershberger }
124*7d104eabSJoe Hershberger DM_TEST(dm_test_eth_rotate, DM_TESTF_SCAN_FDT);
125