diff options
Diffstat (limited to 'drivers/soc')
-rw-r--r-- | drivers/soc/Kconfig | 8 | ||||
-rw-r--r-- | drivers/soc/Makefile | 1 | ||||
-rw-r--r-- | drivers/soc/soc-uclass.c | 1 | ||||
-rw-r--r-- | drivers/soc/soc_amd_versal2.c | 77 | ||||
-rw-r--r-- | drivers/soc/soc_sandbox.c | 1 | ||||
-rw-r--r-- | drivers/soc/soc_ti_k3.c | 30 | ||||
-rw-r--r-- | drivers/soc/soc_xilinx_versal.c | 1 | ||||
-rw-r--r-- | drivers/soc/soc_xilinx_versal_net.c | 1 | ||||
-rw-r--r-- | drivers/soc/soc_xilinx_zynqmp.c | 1 | ||||
-rw-r--r-- | drivers/soc/ti/k3-navss-ringacc.c | 1 | ||||
-rw-r--r-- | drivers/soc/ti/keystone_serdes.c | 1 | ||||
-rw-r--r-- | drivers/soc/ti/pruss.c | 2 |
12 files changed, 103 insertions, 22 deletions
diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index 03433bc0e6d..cee506fe474 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -9,6 +9,14 @@ config SOC_DEVICE need different parameters or quirks enabled depending on the specific device variant in use. +config SOC_AMD_VERSAL2 + bool "Enable SoC Device ID driver for AMD Versal Gen 2" + depends on SOC_DEVICE && ARCH_VERSAL2 + help + Enable this option to select SoC device id driver for AMD Versal Gen 2. + This allows other drivers to verify the SoC familiy & revision using + matching SoC attributes. + config SOC_DEVICE_TI_K3 depends on SOC_DEVICE && ARCH_K3 bool "Enable SoC Device ID driver for TI K3 SoCs" diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index 610bf816d40..5ec89a05316 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -2,6 +2,7 @@ # # Makefile for the U-Boot SOC specific device drivers. +obj-$(CONFIG_SOC_AMD_VERSAL2) += soc_amd_versal2.o obj-$(CONFIG_SOC_SAMSUNG) += samsung/ obj-$(CONFIG_SOC_TI) += ti/ obj-$(CONFIG_SOC_DEVICE) += soc-uclass.o diff --git a/drivers/soc/soc-uclass.c b/drivers/soc/soc-uclass.c index 8b3044fed8d..744cdda2e18 100644 --- a/drivers/soc/soc-uclass.c +++ b/drivers/soc/soc-uclass.c @@ -6,7 +6,6 @@ #define LOG_CATEGORY UCLASS_SOC -#include <common.h> #include <soc.h> #include <dm.h> #include <errno.h> diff --git a/drivers/soc/soc_amd_versal2.c b/drivers/soc/soc_amd_versal2.c new file mode 100644 index 00000000000..66bcb22b4fa --- /dev/null +++ b/drivers/soc/soc_amd_versal2.c @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * AMD Versal Gen 2 SOC driver + * + * Copyright (C) 2022 - 2024, Advanced Micro Devices, Inc. + */ + +#include <dm.h> +#include <soc.h> +#include <zynqmp_firmware.h> +#include <asm/io.h> +#include <asm/arch/hardware.h> + +#include <linux/bitfield.h> + +/* + * v1 -> 0x10 - ES1 + * v2 -> 0x20 - Production + */ +static const char versal2_family[] = "Versal Gen 2"; + +struct soc_amd_versal2_priv { + const char *family; + char revision; +}; + +static int soc_amd_versal2_get_family(struct udevice *dev, char *buf, int size) +{ + struct soc_amd_versal2_priv *priv = dev_get_priv(dev); + + return snprintf(buf, size, "%s", priv->family); +} + +static int soc_amd_versal2_get_revision(struct udevice *dev, char *buf, int size) +{ + struct soc_amd_versal2_priv *priv = dev_get_priv(dev); + + return snprintf(buf, size, "v%d", priv->revision); +} + +static const struct soc_ops soc_amd_versal2_ops = { + .get_family = soc_amd_versal2_get_family, + .get_revision = soc_amd_versal2_get_revision, +}; + +static int soc_amd_versal2_probe(struct udevice *dev) +{ + struct soc_amd_versal2_priv *priv = dev_get_priv(dev); + u32 ret_payload[PAYLOAD_ARG_CNT]; + int ret; + + priv->family = versal2_family; + + if (IS_ENABLED(CONFIG_ZYNQMP_FIRMWARE)) { + ret = xilinx_pm_request(PM_GET_CHIPID, 0, 0, 0, 0, + ret_payload); + if (ret) + return ret; + } else { + ret_payload[2] = readl(PMC_TAP_VERSION); + if (!ret_payload[2]) + return -EINVAL; + } + + priv->revision = FIELD_GET(PS_VERSION_MASK, ret_payload[2]); + + return 0; +} + +U_BOOT_DRIVER(soc_amd_versal2) = { + .name = "soc_amd_versal2", + .id = UCLASS_SOC, + .ops = &soc_amd_versal2_ops, + .probe = soc_amd_versal2_probe, + .priv_auto = sizeof(struct soc_amd_versal2_priv), + .flags = DM_FLAG_PRE_RELOC, +}; diff --git a/drivers/soc/soc_sandbox.c b/drivers/soc/soc_sandbox.c index 15fdd9930cb..8d621e88f56 100644 --- a/drivers/soc/soc_sandbox.c +++ b/drivers/soc/soc_sandbox.c @@ -6,7 +6,6 @@ * Dave Gerlach <d-gerlach@ti.com> */ -#include <common.h> #include <dm.h> #include <soc.h> diff --git a/drivers/soc/soc_ti_k3.c b/drivers/soc/soc_ti_k3.c index 3a4e58bba67..f948914d218 100644 --- a/drivers/soc/soc_ti_k3.c +++ b/drivers/soc/soc_ti_k3.c @@ -4,7 +4,6 @@ * Dave Gerlach <d-gerlach@ti.com> */ -#include <common.h> #include <dm.h> #include <soc.h> @@ -24,33 +23,36 @@ static const char *get_family_string(u32 idreg) soc = (idreg & JTAG_ID_PARTNO_MASK) >> JTAG_ID_PARTNO_SHIFT; switch (soc) { + case JTAG_ID_PARTNO_AM62X: + family = "AM62X"; + break; + case JTAG_ID_PARTNO_AM62AX: + family = "AM62AX"; + break; + case JTAG_ID_PARTNO_AM62PX: + family = "AM62PX"; + break; + case JTAG_ID_PARTNO_AM64X: + family = "AM64X"; + break; case JTAG_ID_PARTNO_AM65X: family = "AM65X"; break; - case JTAG_ID_PARTNO_J721E: - family = "J721E"; - break; case JTAG_ID_PARTNO_J7200: family = "J7200"; break; - case JTAG_ID_PARTNO_AM64X: - family = "AM64X"; + case JTAG_ID_PARTNO_J721E: + family = "J721E"; break; case JTAG_ID_PARTNO_J721S2: family = "J721S2"; break; - case JTAG_ID_PARTNO_AM62X: - family = "AM62X"; - break; - case JTAG_ID_PARTNO_AM62AX: - family = "AM62AX"; + case JTAG_ID_PARTNO_J722S: + family = "J722S"; break; case JTAG_ID_PARTNO_J784S4: family = "J784S4"; break; - case JTAG_ID_PARTNO_AM62PX: - family = "AM62PX"; - break; default: family = "Unknown Silicon"; }; diff --git a/drivers/soc/soc_xilinx_versal.c b/drivers/soc/soc_xilinx_versal.c index 3d8c25c19bb..7427f8432c8 100644 --- a/drivers/soc/soc_xilinx_versal.c +++ b/drivers/soc/soc_xilinx_versal.c @@ -5,7 +5,6 @@ * Copyright (C) 2021 Xilinx, Inc. */ -#include <common.h> #include <dm.h> #include <soc.h> #include <zynqmp_firmware.h> diff --git a/drivers/soc/soc_xilinx_versal_net.c b/drivers/soc/soc_xilinx_versal_net.c index 146d068bb4a..d64fc366a6d 100644 --- a/drivers/soc/soc_xilinx_versal_net.c +++ b/drivers/soc/soc_xilinx_versal_net.c @@ -5,7 +5,6 @@ * Copyright (C) 2022, Advanced Micro Devices, Inc. */ -#include <common.h> #include <dm.h> #include <soc.h> #include <zynqmp_firmware.h> diff --git a/drivers/soc/soc_xilinx_zynqmp.c b/drivers/soc/soc_xilinx_zynqmp.c index d8b4f172a39..a2d5b82fd34 100644 --- a/drivers/soc/soc_xilinx_zynqmp.c +++ b/drivers/soc/soc_xilinx_zynqmp.c @@ -9,7 +9,6 @@ * Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com> */ -#include <common.h> #include <dm.h> #include <dm/device_compat.h> #include <asm/cache.h> diff --git a/drivers/soc/ti/k3-navss-ringacc.c b/drivers/soc/ti/k3-navss-ringacc.c index ed39ff2fa4c..d3f3d4761c2 100644 --- a/drivers/soc/ti/k3-navss-ringacc.c +++ b/drivers/soc/ti/k3-navss-ringacc.c @@ -5,7 +5,6 @@ * Copyright (C) 2018 Texas Instruments Incorporated - https://www.ti.com */ -#include <common.h> #include <cpu_func.h> #include <log.h> #include <asm/cache.h> diff --git a/drivers/soc/ti/keystone_serdes.c b/drivers/soc/ti/keystone_serdes.c index 0e1bf8ff39d..b19617997e1 100644 --- a/drivers/soc/ti/keystone_serdes.c +++ b/drivers/soc/ti/keystone_serdes.c @@ -7,7 +7,6 @@ */ #include <errno.h> -#include <common.h> #include <asm/io.h> #include <asm/ti-common/keystone_serdes.h> #include <linux/bitops.h> diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c index 461390925d2..e3bb2ede554 100644 --- a/drivers/soc/ti/pruss.c +++ b/drivers/soc/ti/pruss.c @@ -5,7 +5,6 @@ * Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com/ */ -#include <common.h> #include <dm.h> #include <dm/of_access.h> #include <errno.h> @@ -205,6 +204,7 @@ static int pruss_probe(struct udevice *dev) static const struct udevice_id pruss_ids[] = { { .compatible = "ti,am654-icssg"}, + { .compatible = "ti,am642-icssg"}, {} }; |