test: Add tests for CPU uclass
Add a sandbox CPU driver, and some tests for the CPU uclass. Signed-off-by: Mario Six <mario.six@gdsys.cc>
This commit is contained in:
		
							parent
							
								
									57370de377
								
							
						
					
					
						commit
						fa44b53398
					
				| 
						 | 
					@ -297,6 +297,18 @@
 | 
				
			||||||
		mbox-names = "other", "test";
 | 
							mbox-names = "other", "test";
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu-test1 {
 | 
				
			||||||
 | 
							compatible = "sandbox,cpu_sandbox";
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu-test2 {
 | 
				
			||||||
 | 
							compatible = "sandbox,cpu_sandbox";
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cpu-test3 {
 | 
				
			||||||
 | 
							compatible = "sandbox,cpu_sandbox";
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	misc-test {
 | 
						misc-test {
 | 
				
			||||||
		compatible = "sandbox,misc_sandbox";
 | 
							compatible = "sandbox,misc_sandbox";
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,3 +7,4 @@
 | 
				
			||||||
obj-$(CONFIG_CPU) += cpu-uclass.o
 | 
					obj-$(CONFIG_CPU) += cpu-uclass.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
obj-$(CONFIG_ARCH_BMIPS) += bmips_cpu.o
 | 
					obj-$(CONFIG_ARCH_BMIPS) += bmips_cpu.o
 | 
				
			||||||
 | 
					obj-$(CONFIG_SANDBOX) += cpu_sandbox.o
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,61 @@
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: GPL-2.0+
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * (C) Copyright 2018
 | 
				
			||||||
 | 
					 * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <dm.h>
 | 
				
			||||||
 | 
					#include <cpu.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cpu_sandbox_get_desc(struct udevice *dev, char *buf, int size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						snprintf(buf, size, "LEG Inc. SuperMegaUltraTurbo CPU No. 1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cpu_sandbox_get_info(struct udevice *dev, struct cpu_info *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						info->cpu_freq = 42 * 42 * 42 * 42 * 42;
 | 
				
			||||||
 | 
						info->features = 0x42424242;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cpu_sandbox_get_count(struct udevice *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 42;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cpu_sandbox_get_vendor(struct udevice *dev, char *buf, int size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						snprintf(buf, size, "Languid Example Garbage Inc.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct cpu_ops cpu_sandbox_ops = {
 | 
				
			||||||
 | 
						.get_desc = cpu_sandbox_get_desc,
 | 
				
			||||||
 | 
						.get_info = cpu_sandbox_get_info,
 | 
				
			||||||
 | 
						.get_count = cpu_sandbox_get_count,
 | 
				
			||||||
 | 
						.get_vendor = cpu_sandbox_get_vendor,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cpu_sandbox_probe(struct udevice *dev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct udevice_id cpu_sandbox_ids[] = {
 | 
				
			||||||
 | 
						{ .compatible = "sandbox,cpu_sandbox" },
 | 
				
			||||||
 | 
						{ }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					U_BOOT_DRIVER(cpu_sandbox) = {
 | 
				
			||||||
 | 
						.name           = "cpu_sandbox",
 | 
				
			||||||
 | 
						.id             = UCLASS_CPU,
 | 
				
			||||||
 | 
						.ops		= &cpu_sandbox_ops,
 | 
				
			||||||
 | 
						.of_match       = cpu_sandbox_ids,
 | 
				
			||||||
 | 
						.probe          = cpu_sandbox_probe,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -47,4 +47,5 @@ obj-$(CONFIG_WDT) += wdt.o
 | 
				
			||||||
obj-$(CONFIG_AXI) += axi.o
 | 
					obj-$(CONFIG_AXI) += axi.o
 | 
				
			||||||
obj-$(CONFIG_MISC) += misc.o
 | 
					obj-$(CONFIG_MISC) += misc.o
 | 
				
			||||||
obj-$(CONFIG_DM_SERIAL) += serial.o
 | 
					obj-$(CONFIG_DM_SERIAL) += serial.o
 | 
				
			||||||
 | 
					obj-$(CONFIG_CPU) += cpu.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: GPL-2.0+
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * (C) Copyright 2018
 | 
				
			||||||
 | 
					 * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <common.h>
 | 
				
			||||||
 | 
					#include <dm.h>
 | 
				
			||||||
 | 
					#include <dm/test.h>
 | 
				
			||||||
 | 
					#include <dm/uclass-internal.h>
 | 
				
			||||||
 | 
					#include <cpu.h>
 | 
				
			||||||
 | 
					#include <test/ut.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int dm_test_cpu(struct unit_test_state *uts)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct udevice *dev;
 | 
				
			||||||
 | 
						char text[128];
 | 
				
			||||||
 | 
						struct cpu_info info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_assertok(cpu_probe_all());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Check that cpu_probe_all really activated all CPUs */
 | 
				
			||||||
 | 
						for (uclass_find_first_device(UCLASS_CPU, &dev);
 | 
				
			||||||
 | 
						     dev;
 | 
				
			||||||
 | 
						     uclass_find_next_device(&dev))
 | 
				
			||||||
 | 
							ut_assert(dev->flags & DM_FLAG_ACTIVATED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_assertok(uclass_get_device_by_name(UCLASS_CPU, "cpu-test1", &dev));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_assertok(cpu_get_desc(dev, text, sizeof(text)));
 | 
				
			||||||
 | 
						ut_assertok(strcmp(text, "LEG Inc. SuperMegaUltraTurbo CPU No. 1"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_assertok(cpu_get_info(dev, &info));
 | 
				
			||||||
 | 
						ut_asserteq(info.cpu_freq, 42 * 42 * 42 * 42 * 42);
 | 
				
			||||||
 | 
						ut_asserteq(info.features, 0x42424242);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_asserteq(cpu_get_count(dev), 42);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ut_assertok(cpu_get_vendor(dev, text, sizeof(text)));
 | 
				
			||||||
 | 
						ut_assertok(strcmp(text, "Languid Example Garbage Inc."));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DM_TEST(dm_test_cpu, DM_TESTF_SCAN_FDT);
 | 
				
			||||||
		Loading…
	
		Reference in New Issue