mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/3] TF-A: AM62lx: Fixes for barebox support
@ 2025-06-17  9:01 Sascha Hauer
  2025-06-17  9:01 ` [PATCH 1/3] plat: ti: k3: fix SCMI parent clock ids Sascha Hauer
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Sascha Hauer @ 2025-06-17  9:01 UTC (permalink / raw)
  To: Barebox List

The AM62lx ARM trusted firmware support is not yet merged upstream,
the downstream support is currently available at [1]
Unfortunately this contains some bugs in the SCMI clock implementation
which confuses both the barebox and the Linux SCMI clock driver. TI is
aware of this, see [2] and [3] for details.

I am posting these patches here for others be able to build a usable AM62lx
TF-A for barebox and to refer to these patches from the barebox documentation.

Patches are based on the 11.00.11 tag.

[1] https://github.com/TexasInstruments/arm-trusted-firmware.git.
[2] https://lore.kernel.org/all/aCcSG5ah12N0yOwi@pengutronix.de/
[3] https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/34834/1

Sascha Hauer (3):
  plat: ti: k3: fix SCMI parent clock ids
  plat: ti: k3: return 0 parents for clocks which only have a single
    parent
  HACK: drop COPY_NAME_IDENTIFIER string length check

 drivers/scmi-msg/common.h                   | 1 -
 plat/ti/k3/common/drivers/scmi/scmi_clock.c | 9 ++++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

-- 
2.39.5




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/3] plat: ti: k3: fix SCMI parent clock ids
  2025-06-17  9:01 [PATCH 0/3] TF-A: AM62lx: Fixes for barebox support Sascha Hauer
@ 2025-06-17  9:01 ` Sascha Hauer
  2025-06-17  9:01 ` [PATCH 2/3] plat: ti: k3: return 0 parents for clocks which only have a single parent Sascha Hauer
  2025-06-17  9:01 ` [PATCH 3/3] HACK: drop COPY_NAME_IDENTIFIER string length check Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2025-06-17  9:01 UTC (permalink / raw)
  To: Barebox List

On AM62lx not the full clock tree is exposed to the normal world.
Instead only some muxes are exposed which do not have any connection
between them. When a mux has a clock_id of 'n' its possible inputs have
the clock_ids 'n+1', 'n+2',... Now the mux inputs are not exposed as
'n+x', but instead only as 'x', so when the normal world wants to select
the first mux input then it has to pass 0 as input, not n+0. This
confuses the Linux and barebox SCMI clock drivers which hang all muxes
to the first n clock_ids instead of their real parents.

Fix this by adding the scmi clock_id to the possible parents.

Change-Id: I5857e67b040e0060b1d2fe57937b5b44ccc3441e
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 plat/ti/k3/common/drivers/scmi/scmi_clock.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/plat/ti/k3/common/drivers/scmi/scmi_clock.c b/plat/ti/k3/common/drivers/scmi/scmi_clock.c
index 48a362ed5..afda3f05b 100644
--- a/plat/ti/k3/common/drivers/scmi/scmi_clock.c
+++ b/plat/ti/k3/common/drivers/scmi/scmi_clock.c
@@ -162,7 +162,7 @@ int32_t plat_scmi_clock_get_possible_parents(unsigned int agent_id,
 									clock->clock_id);
 	if (plat_possible_parents) {
 		for (uint32_t i = 0; i < (uint32_t)*nb_elts ; i++) {
-			plat_possible_parents[i] = i;
+			plat_possible_parents[i] = i + scmi_id + 1;
 		}
 	}
 	VERBOSE("num_parents %d\n", (uint32_t)*nb_elts);
@@ -185,7 +185,7 @@ int32_t plat_scmi_clock_get_parent(unsigned int agent_id,
 	if (status)
 		return SCMI_GENERIC_ERROR;
 
-	parent_id = parent_id - clock->clock_id - 1;
+	parent_id = parent_id - clock->clock_id + scmi_id;
 
 	VERBOSE("scmi_clock_get_parent parent_id = %d\n", parent_id);
 	return parent_id;
@@ -204,7 +204,7 @@ int32_t plat_scmi_clock_set_parent(unsigned int agent_id,
 	if (clock == 0)
 		return SCMI_NOT_FOUND;
 
-	parent_id = parent_id + clock->clock_id + 1;
+	parent_id = parent_id + clock->clock_id - scmi_id;
 	status = scmi_handler_clock_set_clock_parent(clock->dev_id, clock->clock_id, parent_id);
 	if (status)
 		return SCMI_GENERIC_ERROR;
-- 
2.39.5




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/3] plat: ti: k3: return 0 parents for clocks which only have a single parent
  2025-06-17  9:01 [PATCH 0/3] TF-A: AM62lx: Fixes for barebox support Sascha Hauer
  2025-06-17  9:01 ` [PATCH 1/3] plat: ti: k3: fix SCMI parent clock ids Sascha Hauer
@ 2025-06-17  9:01 ` Sascha Hauer
  2025-06-17  9:01 ` [PATCH 3/3] HACK: drop COPY_NAME_IDENTIFIER string length check Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2025-06-17  9:01 UTC (permalink / raw)
  To: Barebox List

Some clocks return one parent in their get_num_clock_parents() hook, but
if asked for this parent it returns an error which goes down to
device_clk_get_parent() where we have:

	if (!fail && (clock_data->type != DEV_CLK_TABLE_TYPE_MUX)) {
		fail = true;
	}

A clock with only one parent is not a mux, but why should it be not
allowed to to have a parent? This code all looks strange and I suspect
more problems here. For now just report clocks with a single parent as
clocks without parent.

Change-Id: I6d120e6774b6b630e86ce921891823715126a905
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 plat/ti/k3/common/drivers/scmi/scmi_clock.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/plat/ti/k3/common/drivers/scmi/scmi_clock.c b/plat/ti/k3/common/drivers/scmi/scmi_clock.c
index afda3f05b..9eee60e69 100644
--- a/plat/ti/k3/common/drivers/scmi/scmi_clock.c
+++ b/plat/ti/k3/common/drivers/scmi/scmi_clock.c
@@ -160,6 +160,9 @@ int32_t plat_scmi_clock_get_possible_parents(unsigned int agent_id,
 
 	*nb_elts = (uint64_t)scmi_handler_clock_get_num_clock_parents(clock->dev_id,
 									clock->clock_id);
+	if (*nb_elts == 1)
+		*nb_elts = 0;
+
 	if (plat_possible_parents) {
 		for (uint32_t i = 0; i < (uint32_t)*nb_elts ; i++) {
 			plat_possible_parents[i] = i + scmi_id + 1;
-- 
2.39.5




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 3/3] HACK: drop COPY_NAME_IDENTIFIER string length check
  2025-06-17  9:01 [PATCH 0/3] TF-A: AM62lx: Fixes for barebox support Sascha Hauer
  2025-06-17  9:01 ` [PATCH 1/3] plat: ti: k3: fix SCMI parent clock ids Sascha Hauer
  2025-06-17  9:01 ` [PATCH 2/3] plat: ti: k3: return 0 parents for clocks which only have a single parent Sascha Hauer
@ 2025-06-17  9:01 ` Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2025-06-17  9:01 UTC (permalink / raw)
  To: Barebox List

Clock names are only allowed to be 16 characters long. Drop the
assertion to check the string length because am62l has several clocks
with longer names.

Change-Id: I1356983e8314d9e9db11bcb7478cab633fa5802a
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/scmi-msg/common.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/scmi-msg/common.h b/drivers/scmi-msg/common.h
index 6b186d07d..65f0471fb 100644
--- a/drivers/scmi-msg/common.h
+++ b/drivers/scmi-msg/common.h
@@ -28,7 +28,6 @@
  */
 #define COPY_NAME_IDENTIFIER(_dst_array, _name)				\
 	do {								\
-		assert(strlen(_name) < sizeof(_dst_array));		\
 		strlcpy((_dst_array), (_name), sizeof(_dst_array));	\
 	} while (0)
 
-- 
2.39.5




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-06-17  9:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-17  9:01 [PATCH 0/3] TF-A: AM62lx: Fixes for barebox support Sascha Hauer
2025-06-17  9:01 ` [PATCH 1/3] plat: ti: k3: fix SCMI parent clock ids Sascha Hauer
2025-06-17  9:01 ` [PATCH 2/3] plat: ti: k3: return 0 parents for clocks which only have a single parent Sascha Hauer
2025-06-17  9:01 ` [PATCH 3/3] HACK: drop COPY_NAME_IDENTIFIER string length check Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox