summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2023-04-24 18:09:22 -0400
committerTom Rini <[email protected]>2023-04-24 18:09:22 -0400
commit6a11fdf0536e02ac9cd4a3da0535a271c694715f (patch)
tree62d981a576bc65234f7dc90c4e9d3102b85da582 /drivers
parentb646e1f69fca5d6a002be1f4e32fab00e140c091 (diff)
parentc0c56f64b301a4cf28b923f14f85a054d1e21ad1 (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.c1
-rw-r--r--drivers/ram/k3-am654-ddrss.c5
-rw-r--r--drivers/remoteproc/ti_k3_arm64_rproc.c62
-rw-r--r--drivers/soc/Kconfig2
-rw-r--r--drivers/soc/soc_ti_k3.c30
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];