mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-12 10:17:02 +02:00
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
Block a user