xilinx: zynqmp: Merge device lists
Merge the svd / xck devices into to the common zynqmp device list. Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> Link: https://lore.kernel.org/r/20220620163650.18756-6-stefan.herbrechtsmeier-oss@weidmueller.com Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
		
							parent
							
								
									71278c0e59
								
							
						
					
					
						commit
						d43d78ef03
					
				|  | @ -65,11 +65,13 @@ enum { | ||||||
| 	ZYNQMP_VARIANT_DR = BIT(3U), | 	ZYNQMP_VARIANT_DR = BIT(3U), | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static const struct { | struct zynqmp_device { | ||||||
| 	u32 id; | 	u32 id; | ||||||
| 	u8 device; | 	u8 device; | ||||||
| 	u8 variants; | 	u8 variants; | ||||||
| } zynqmp_devices[] = { | }; | ||||||
|  | 
 | ||||||
|  | static const struct zynqmp_device zynqmp_devices[] = { | ||||||
| 	{ | 	{ | ||||||
| 		.id = 0x04688093, | 		.id = 0x04688093, | ||||||
| 		.device = 1, | 		.device = 1, | ||||||
|  | @ -198,37 +200,33 @@ static const struct { | ||||||
| 		.device = 67, | 		.device = 67, | ||||||
| 		.variants = ZYNQMP_VARIANT_DR, | 		.variants = ZYNQMP_VARIANT_DR, | ||||||
| 	}, | 	}, | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static const struct { |  | ||||||
| 	u32 id; |  | ||||||
| 	char *name; |  | ||||||
| } zynqmp_svd_devices[] = { |  | ||||||
| 	{ | 	{ | ||||||
| 		.id = 0x04714093, | 		.id = 0x04714093, | ||||||
| 		.name = "xck24" | 		.device = 24, | ||||||
|  | 		.variants = 0, | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		.id = 0x04724093, | 		.id = 0x04724093, | ||||||
| 		.name = "xck26", | 		.device = 26, | ||||||
|  | 		.variants = 0, | ||||||
| 	}, | 	}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static char *zynqmp_detect_svd_name(u32 idcode) | static const struct zynqmp_device *zynqmp_get_device(u32 idcode) | ||||||
| { | { | ||||||
| 	u32 i; | 	idcode &= IDCODE_DEV_TYPE_MASK; | ||||||
| 
 | 
 | ||||||
| 	for (i = 0; i < ARRAY_SIZE(zynqmp_svd_devices); i++) { | 	for (int i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { | ||||||
| 		if (zynqmp_svd_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) | 		if (zynqmp_devices[i].id == idcode) | ||||||
| 			return zynqmp_svd_devices[i].name; | 			return &zynqmp_devices[i]; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return "unknown"; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static char *zynqmp_get_silicon_idcode_name(void) | static char *zynqmp_get_silicon_idcode_name(void) | ||||||
| { | { | ||||||
| 	u32 i; | 	const struct zynqmp_device *device; | ||||||
| 	u32 idcode, idcode2; | 	u32 idcode, idcode2; | ||||||
| 	char name[ZYNQMP_VERSION_SIZE]; | 	char name[ZYNQMP_VERSION_SIZE]; | ||||||
| 	u32 ret_payload[PAYLOAD_ARG_CNT]; | 	u32 ret_payload[PAYLOAD_ARG_CNT]; | ||||||
|  | @ -254,21 +252,17 @@ static char *zynqmp_get_silicon_idcode_name(void) | ||||||
| 	debug("%s, IDCODE: 0x%0x, IDCODE2: 0x%0x\r\n", __func__, idcode, | 	debug("%s, IDCODE: 0x%0x, IDCODE2: 0x%0x\r\n", __func__, idcode, | ||||||
| 	      idcode2); | 	      idcode2); | ||||||
| 
 | 
 | ||||||
| 	for (i = 0; i < ARRAY_SIZE(zynqmp_devices); i++) { | 	device = zynqmp_get_device(idcode); | ||||||
| 		if (zynqmp_devices[i].id == (idcode & IDCODE_DEV_TYPE_MASK)) | 	if (!device) | ||||||
| 			break; | 		return "unknown"; | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (i >= ARRAY_SIZE(zynqmp_devices)) |  | ||||||
| 		return zynqmp_detect_svd_name(idcode); |  | ||||||
| 
 | 
 | ||||||
| 	/* Add device prefix to the name */ | 	/* Add device prefix to the name */ | ||||||
| 	ret = snprintf(name, ZYNQMP_VERSION_SIZE, "zu%d", | 	ret = snprintf(name, ZYNQMP_VERSION_SIZE, "%s%d", | ||||||
| 		       zynqmp_devices[i].device); | 		       device->variants ? "zu" : "xck", device->device); | ||||||
| 	if (ret < 0) | 	if (ret < 0) | ||||||
| 		return "unknown"; | 		return "unknown"; | ||||||
| 
 | 
 | ||||||
| 	if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_EV) { | 	if (device->variants & ZYNQMP_VARIANT_EV) { | ||||||
| 		/* Devices with EV variant might be EG/CG/EV family */ | 		/* Devices with EV variant might be EG/CG/EV family */ | ||||||
| 		if (idcode2 & IDCODE2_PL_INIT_MASK) { | 		if (idcode2 & IDCODE2_PL_INIT_MASK) { | ||||||
| 			u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> | 			u32 family = ((idcode2 & EFUSE_VCU_DIS_MASK) >> | ||||||
|  | @ -304,13 +298,13 @@ static char *zynqmp_get_silicon_idcode_name(void) | ||||||
| 			strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : | 			strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : | ||||||
| 				"e", sizeof(name)); | 				"e", sizeof(name)); | ||||||
| 		} | 		} | ||||||
| 	} else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_CG) { | 	} else if (device->variants & ZYNQMP_VARIANT_CG) { | ||||||
| 		/* Devices with CG variant might be EG or CG family */ | 		/* Devices with CG variant might be EG or CG family */ | ||||||
| 		strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", | 		strlcat(name, (idcode2 & EFUSE_GPU_DIS_MASK) ? "cg" : "eg", | ||||||
| 			sizeof(name)); | 			sizeof(name)); | ||||||
| 	} else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_EG) { | 	} else if (device->variants & ZYNQMP_VARIANT_EG) { | ||||||
| 		strlcat(name, "eg", sizeof(name)); | 		strlcat(name, "eg", sizeof(name)); | ||||||
| 	} else if (zynqmp_devices[i].variants & ZYNQMP_VARIANT_DR) { | 	} else if (device->variants & ZYNQMP_VARIANT_DR) { | ||||||
| 		strlcat(name, "dr", sizeof(name)); | 		strlcat(name, "dr", sizeof(name)); | ||||||
| 	} else { | 	} else { | ||||||
| 		debug("Variant not identified\n"); | 		debug("Variant not identified\n"); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue