mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 20:18:18 +00:00 
			
		
		
		
	When booting and CPU is detected from cpuid, we also need an environment variable that will be used in boot commands to load the proper devicetree. Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0+
 | |
| /*
 | |
|  * Copyright (C) 2017 Microchip
 | |
|  *		      Wenyou Yang <wenyou.yang@microchip.com>
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| #include <w1.h>
 | |
| #include <w1-eeprom.h>
 | |
| #include <dm/device-internal.h>
 | |
| 
 | |
| #define AT91_PDA_EEPROM_ID_OFFSET		15
 | |
| #define AT91_PDA_EEPROM_ID_LENGTH		5
 | |
| #define AT91_PDA_EEPROM_DEFAULT_BUS		0
 | |
| 
 | |
| char *get_cpu_name(void);
 | |
| 
 | |
| void dummy(void)
 | |
| {
 | |
| }
 | |
| 
 | |
| #if defined CONFIG_W1
 | |
| void at91_pda_detect(void)
 | |
| {
 | |
| 	struct udevice *bus, *dev;
 | |
| 	u8 buf[AT91_PDA_EEPROM_ID_LENGTH + 1] = {0};
 | |
| 	int ret;
 | |
| 	int pda = 0;
 | |
| 
 | |
| 	ret = w1_get_bus(AT91_PDA_EEPROM_DEFAULT_BUS, &bus);
 | |
| 	if (ret)
 | |
| 		return;
 | |
| 
 | |
| 	for (device_find_first_child(bus, &dev);
 | |
| 	     dev;
 | |
| 	     device_find_next_child(&dev)) {
 | |
| 		ret = device_probe(dev);
 | |
| 		if (ret) {
 | |
| 			continue;
 | |
| 		} else {
 | |
| 			ret = w1_eeprom_read_buf(dev, AT91_PDA_EEPROM_ID_OFFSET,
 | |
| 						 (u8 *)buf, AT91_PDA_EEPROM_ID_LENGTH);
 | |
| 			if (ret)
 | |
| 				return;
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 	pda = simple_strtoul((const char *)buf, NULL, 10);
 | |
| 
 | |
| 	switch (pda) {
 | |
| 	case 7000:
 | |
| 		if (buf[4] == 'B')
 | |
| 			printf("PDA TM7000B detected\n");
 | |
| 		else
 | |
| 			printf("PDA TM7000 detected\n");
 | |
| 		break;
 | |
| 	case 4300:
 | |
| 		printf("PDA TM4300 detected\n");
 | |
| 		break;
 | |
| 	case 5000:
 | |
| 		printf("PDA TM5000 detected\n");
 | |
| 		break;
 | |
| 	}
 | |
| 	env_set("pda", (const char *)buf);
 | |
| }
 | |
| #else
 | |
| void at91_pda_detect(void)
 | |
| {
 | |
| }
 | |
| #endif
 | |
| 
 | |
| void at91_prepare_cpu_var(void)
 | |
| {
 | |
| 	env_set("cpu", get_cpu_name());
 | |
| }
 |