[PATCH 03/10] drivers: misc: k3_avs: Use soc_match_device instead of compatible.
Manorit Chawdhry
m-chawdhry at ti.com
Tue Feb 6 13:21:10 CET 2024
vd_data remains the same for most of the SoCs but there are some
differences in power domains and clocks that don't need a change to
compatible and can be handled at SoC level.
Change the data population logic from compatible to soc_match_device to
add support for newer devices.
Signed-off-by: Manorit Chawdhry <m-chawdhry at ti.com>
---
drivers/misc/k3_avs.c | 189 +++++++++++++++++++++++++++-----------------------
1 file changed, 103 insertions(+), 86 deletions(-)
diff --git a/drivers/misc/k3_avs.c b/drivers/misc/k3_avs.c
index 0d29eff1ac08..02cd90f9d12c 100644
--- a/drivers/misc/k3_avs.c
+++ b/drivers/misc/k3_avs.c
@@ -13,6 +13,7 @@
#include <asm/io.h>
#include <i2c.h>
#include <k3-avs.h>
+#include <soc.h>
#include <dm/device_compat.h>
#include <linux/bitops.h>
#include <linux/delay.h>
@@ -112,6 +113,95 @@ static u32 am6_efuse_xlate(struct k3_avs_privdata *priv, int idx, int opp)
return 300000 + 20000 * val;
}
+static struct vd_data am654_vd_data[] = {
+ {
+ .id = AM6_VDD_CORE,
+ .dev_id = 82, /* AM6_DEV_CBASS0 */
+ .clk_id = 0, /* main sysclk0 */
+ .opp = AM6_OPP_NOM,
+ .opps = {
+ [AM6_OPP_NOM] = {
+ .volt = 1000000,
+ .freq = 250000000, /* CBASS0 */
+ },
+ },
+ },
+ {
+ .id = AM6_VDD_MPU0,
+ .dev_id = 202, /* AM6_DEV_COMPUTE_CLUSTER_A53_0 */
+ .clk_id = 0, /* ARM clock */
+ .opp = AM6_OPP_NOM,
+ .opps = {
+ [AM6_OPP_NOM] = {
+ .volt = 1100000,
+ .freq = 800000000,
+ },
+ [AM6_OPP_OD] = {
+ .volt = 1200000,
+ .freq = 1000000000,
+ },
+ [AM6_OPP_TURBO] = {
+ .volt = 1240000,
+ .freq = 1100000000,
+ },
+ },
+ },
+ {
+ .id = AM6_VDD_MPU1,
+ .opp = AM6_OPP_NOM,
+ .dev_id = 204, /* AM6_DEV_COMPUTE_CLUSTER_A53_2 */
+ .clk_id = 0, /* ARM clock */
+ .opps = {
+ [AM6_OPP_NOM] = {
+ .volt = 1100000,
+ .freq = 800000000,
+ },
+ [AM6_OPP_OD] = {
+ .volt = 1200000,
+ .freq = 1000000000,
+ },
+ [AM6_OPP_TURBO] = {
+ .volt = 1240000,
+ .freq = 1100000000,
+ },
+ },
+ },
+ { .id = -1 },
+};
+
+static struct vd_data j721e_vd_data[] = {
+ {
+ .id = J721E_VDD_MPU,
+ .opp = AM6_OPP_NOM,
+ .dev_id = 202, /* J721E_DEV_A72SS0_CORE0 */
+ .clk_id = 2, /* ARM clock */
+ .opps = {
+ [AM6_OPP_NOM] = {
+ .volt = 880000, /* TBD in DM */
+ .freq = 2000000000,
+ },
+ },
+ },
+ { .id = -1 },
+};
+
+static struct vd_config j721e_vd_config = {
+ .efuse_xlate = am6_efuse_xlate,
+ .vds = j721e_vd_data,
+};
+
+static struct vd_config am654_vd_config = {
+ .efuse_xlate = am6_efuse_xlate,
+ .vds = am654_vd_data,
+};
+
+const struct soc_attr vtm_soc_list[] = {
+ { .family = "AM65X", .data = (void *)&am654_vd_config },
+ { .family = "J721E", .data = (void *)&j721e_vd_config },
+ { .family = "J7200", .data = (void *)&j721e_vd_config },
+ {}
+};
+
static int k3_avs_program_voltage(struct k3_avs_privdata *priv,
struct vd_data *vd,
int opp_id)
@@ -235,8 +325,16 @@ static int k3_avs_configure(struct udevice *dev, struct k3_avs_privdata *priv)
int ret;
char pname[20];
struct vd_data *vd;
+ const struct soc_attr *soc;
+
+ soc = soc_device_match(vtm_soc_list);
+ if (soc && soc->data)
+ conf = (void *)soc->data;
- conf = (void *)dev_get_driver_data(dev);
+ if (!conf) {
+ printf("No SoC support for AVS\n");
+ return -ENOSYS;
+ }
priv->vd_config = conf;
@@ -401,93 +499,12 @@ static int k3_avs_probe(struct udevice *dev)
return 0;
}
-static struct vd_data am654_vd_data[] = {
- {
- .id = AM6_VDD_CORE,
- .dev_id = 82, /* AM6_DEV_CBASS0 */
- .clk_id = 0, /* main sysclk0 */
- .opp = AM6_OPP_NOM,
- .opps = {
- [AM6_OPP_NOM] = {
- .volt = 1000000,
- .freq = 250000000, /* CBASS0 */
- },
- },
- },
- {
- .id = AM6_VDD_MPU0,
- .dev_id = 202, /* AM6_DEV_COMPUTE_CLUSTER_A53_0 */
- .clk_id = 0, /* ARM clock */
- .opp = AM6_OPP_NOM,
- .opps = {
- [AM6_OPP_NOM] = {
- .volt = 1100000,
- .freq = 800000000,
- },
- [AM6_OPP_OD] = {
- .volt = 1200000,
- .freq = 1000000000,
- },
- [AM6_OPP_TURBO] = {
- .volt = 1240000,
- .freq = 1100000000,
- },
- },
- },
- {
- .id = AM6_VDD_MPU1,
- .opp = AM6_OPP_NOM,
- .dev_id = 204, /* AM6_DEV_COMPUTE_CLUSTER_A53_2 */
- .clk_id = 0, /* ARM clock */
- .opps = {
- [AM6_OPP_NOM] = {
- .volt = 1100000,
- .freq = 800000000,
- },
- [AM6_OPP_OD] = {
- .volt = 1200000,
- .freq = 1000000000,
- },
- [AM6_OPP_TURBO] = {
- .volt = 1240000,
- .freq = 1100000000,
- },
- },
- },
- { .id = -1 },
-};
-
-static struct vd_data j721e_vd_data[] = {
- {
- .id = J721E_VDD_MPU,
- .opp = AM6_OPP_NOM,
- .dev_id = 202, /* J721E_DEV_A72SS0_CORE0 */
- .clk_id = 2, /* ARM clock */
- .opps = {
- [AM6_OPP_NOM] = {
- .volt = 880000, /* TBD in DM */
- .freq = 2000000000,
- },
- },
- },
- { .id = -1 },
-};
-
-static struct vd_config j721e_vd_config = {
- .efuse_xlate = am6_efuse_xlate,
- .vds = j721e_vd_data,
-};
-
-static struct vd_config am654_vd_config = {
- .efuse_xlate = am6_efuse_xlate,
- .vds = am654_vd_data,
-};
static const struct udevice_id k3_avs_ids[] = {
- { .compatible = "ti,am654-avs", .data = (ulong)&am654_vd_config },
- { .compatible = "ti,j721e-avs", .data = (ulong)&j721e_vd_config },
- { .compatible = "ti,j721e-vtm", .data = (ulong)&j721e_vd_config },
- { .compatible = "ti,j7200-vtm", .data = (ulong)&j721e_vd_config },
+ { .compatible = "ti,am654-avs" },
+ { .compatible = "ti,j721e-avs" },
+ { .compatible = "ti,j721e-vtm" },
+ { .compatible = "ti,j7200-vtm" },
{}
};
--
2.43.0
More information about the U-Boot
mailing list