diff options
| author | Tom Rini <[email protected]> | 2023-04-24 18:09:22 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2023-04-24 18:09:22 -0400 |
| commit | 6a11fdf0536e02ac9cd4a3da0535a271c694715f (patch) | |
| tree | 62d981a576bc65234f7dc90c4e9d3102b85da582 /drivers | |
| parent | b646e1f69fca5d6a002be1f4e32fab00e140c091 (diff) | |
| parent | c0c56f64b301a4cf28b923f14f85a054d1e21ad1 (diff) | |
Merge branch '2023-04-24-TI-platform-updates'
- Merge in assorted K3 updates, and re-sync all of the device trees for
TI platforms with v6.3-rc6
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/phy/phy-ti-am654.c | 1 | ||||
| -rw-r--r-- | drivers/ram/k3-am654-ddrss.c | 5 | ||||
| -rw-r--r-- | drivers/remoteproc/ti_k3_arm64_rproc.c | 62 | ||||
| -rw-r--r-- | drivers/soc/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/soc/soc_ti_k3.c | 30 |
5 files changed, 56 insertions, 44 deletions
diff --git a/drivers/phy/phy-ti-am654.c b/drivers/phy/phy-ti-am654.c index 27a312227bc..70a746d2c92 100644 --- a/drivers/phy/phy-ti-am654.c +++ b/drivers/phy/phy-ti-am654.c @@ -16,7 +16,6 @@ #include <dt-bindings/phy/phy.h> #include <generic-phy.h> #include <asm/io.h> -#include <asm/arch/sys_proto.h> #include <power-domain.h> #include <regmap.h> #include <syscon.h> diff --git a/drivers/ram/k3-am654-ddrss.c b/drivers/ram/k3-am654-ddrss.c index 4453c247b29..b8338f84a3d 100644 --- a/drivers/ram/k3-am654-ddrss.c +++ b/drivers/ram/k3-am654-ddrss.c @@ -13,11 +13,14 @@ #include <ram.h> #include <asm/io.h> #include <power-domain.h> -#include <asm/arch/sys_proto.h> #include <dm/device_compat.h> #include <power/regulator.h> #include "k3-am654-ddrss.h" +void sdelay(unsigned long loops); +u32 wait_on_value(u32 read_bit_mask, u32 match_value, void *read_addr, + u32 bound); + #define LDELAY 10000 /* DDRSS PHY configuration register fixed values */ diff --git a/drivers/remoteproc/ti_k3_arm64_rproc.c b/drivers/remoteproc/ti_k3_arm64_rproc.c index 1f2415dc1a6..99f11000dfb 100644 --- a/drivers/remoteproc/ti_k3_arm64_rproc.c +++ b/drivers/remoteproc/ti_k3_arm64_rproc.c @@ -36,6 +36,8 @@ * @gtc_base: Timer base address. */ struct k3_arm64_privdata { + bool has_cluster_node; + struct power_domain cluster_pwrdmn; struct power_domain rproc_pwrdmn; struct power_domain gtc_pwrdmn; struct reset_ctl rproc_rst; @@ -55,6 +57,7 @@ struct k3_arm64_privdata { static int k3_arm64_load(struct udevice *dev, ulong addr, ulong size) { struct k3_arm64_privdata *rproc = dev_get_priv(dev); + ulong gtc_rate; int ret; dev_dbg(dev, "%s addr = 0x%lx, size = 0x%lx\n", __func__, addr, size); @@ -64,26 +67,10 @@ static int k3_arm64_load(struct udevice *dev, ulong addr, ulong size) if (ret) return ret; - return ti_sci_proc_set_config(&rproc->tsp, addr, 0, 0); -} - -/** - * k3_arm64_start() - Start the remote processor - * @dev: rproc device pointer - * - * Return: 0 if all went ok, else return appropriate error - */ -static int k3_arm64_start(struct udevice *dev) -{ - struct k3_arm64_privdata *rproc = dev_get_priv(dev); - ulong gtc_rate; - int ret; - - dev_dbg(dev, "%s\n", __func__); - ret = power_domain_on(&rproc->gtc_pwrdmn); if (ret) { - dev_err(dev, "power_domain_on() failed: %d\n", ret); + dev_err(dev, "power_domain_on(&rproc->gtc_pwrdmn) failed: %d\n", + ret); return ret; } @@ -100,9 +87,36 @@ static int k3_arm64_start(struct udevice *dev) * assigned-clock-rates during the device probe. So no need to * set the frequency again here. */ + if (rproc->has_cluster_node) { + ret = power_domain_on(&rproc->cluster_pwrdmn); + if (ret) { + dev_err(dev, + "power_domain_on(&rproc->cluster_pwrdmn) failed: %d\n", + ret); + return ret; + } + } + + return ti_sci_proc_set_config(&rproc->tsp, addr, 0, 0); +} + +/** + * k3_arm64_start() - Start the remote processor + * @dev: rproc device pointer + * + * Return: 0 if all went ok, else return appropriate error + */ +static int k3_arm64_start(struct udevice *dev) +{ + struct k3_arm64_privdata *rproc = dev_get_priv(dev); + int ret; + + dev_dbg(dev, "%s\n", __func__); ret = power_domain_on(&rproc->rproc_pwrdmn); if (ret) { - dev_err(dev, "power_domain_on() failed: %d\n", ret); + dev_err(dev, + "power_domain_on(&rproc->rproc_pwrdmn) failed: %d\n", + ret); return ret; } @@ -166,9 +180,17 @@ static int k3_arm64_of_to_priv(struct udevice *dev, dev_dbg(dev, "%s\n", __func__); + /* Cluster needs to be powered on if firewalls are being configured */ + rproc->has_cluster_node = true; + ret = power_domain_get_by_index(dev, &rproc->cluster_pwrdmn, 2); + if (ret) { + dev_dbg(dev, "warning: power_domain_get_cluster() failed: %d\n", ret); + rproc->has_cluster_node = false; + } + ret = power_domain_get_by_index(dev, &rproc->rproc_pwrdmn, 1); if (ret) { - dev_err(dev, "power_domain_get() failed: %d\n", ret); + dev_err(dev, "power_domain_get_rproc() failed: %d\n", ret); return ret; } diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index acf555baaec..85dac9de78a 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -10,7 +10,7 @@ config SOC_DEVICE specific device variant in use. config SOC_DEVICE_TI_K3 - depends on SOC_DEVICE + depends on SOC_DEVICE && ARCH_K3 bool "Enable SoC Device ID driver for TI K3 SoCs" help This allows Texas Instruments Keystone 3 SoCs to identify diff --git a/drivers/soc/soc_ti_k3.c b/drivers/soc/soc_ti_k3.c index 8af0ac70519..42430d79a7a 100644 --- a/drivers/soc/soc_ti_k3.c +++ b/drivers/soc/soc_ti_k3.c @@ -8,21 +8,9 @@ #include <dm.h> #include <soc.h> +#include <asm/arch/hardware.h> #include <asm/io.h> -#define AM65X 0xbb5a -#define J721E 0xbb64 -#define J7200 0xbb6d -#define AM64X 0xbb38 -#define J721S2 0xbb75 -#define AM62X 0xbb7e -#define AM62AX 0xbb8d - -#define JTAG_ID_VARIANT_SHIFT 28 -#define JTAG_ID_VARIANT_MASK (0xf << 28) -#define JTAG_ID_PARTNO_SHIFT 12 -#define JTAG_ID_PARTNO_MASK (0xffff << 12) - struct soc_ti_k3_plat { const char *family; const char *revision; @@ -36,25 +24,25 @@ static const char *get_family_string(u32 idreg) soc = (idreg & JTAG_ID_PARTNO_MASK) >> JTAG_ID_PARTNO_SHIFT; switch (soc) { - case AM65X: + case JTAG_ID_PARTNO_AM65X: family = "AM65X"; break; - case J721E: + case JTAG_ID_PARTNO_J721E: family = "J721E"; break; - case J7200: + case JTAG_ID_PARTNO_J7200: family = "J7200"; break; - case AM64X: + case JTAG_ID_PARTNO_AM64X: family = "AM64X"; break; - case J721S2: + case JTAG_ID_PARTNO_J721S2: family = "J721S2"; break; - case AM62X: + case JTAG_ID_PARTNO_AM62X: family = "AM62X"; break; - case AM62AX: + case JTAG_ID_PARTNO_AM62AX: family = "AM62AX"; break; default: @@ -81,7 +69,7 @@ static const char *get_rev_string(u32 idreg) soc = (idreg & JTAG_ID_PARTNO_MASK) >> JTAG_ID_PARTNO_SHIFT; switch (soc) { - case J721E: + case JTAG_ID_PARTNO_J721E: if (rev > ARRAY_SIZE(j721e_rev_string_map)) goto bail; return j721e_rev_string_map[rev]; |
