OpenSBI Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Anup Patel <apatel@ventanamicro.com>
To: opensbi@lists.infradead.org
Subject: [PATCH v2 09/17] lib: utils/fdt: Allow dynamic registration of FDT fixup callbacks
Date: Fri, 29 Nov 2024 21:20:44 +0530	[thread overview]
Message-ID: <20241129155052.2866712-10-apatel@ventanamicro.com> (raw)
In-Reply-To: <20241129155052.2866712-1-apatel@ventanamicro.com>

It should possible to fixup FDT from any part of OpenSBI so add
fdt_register_general_fixup() which allows dynamic registration of
FDT fixup callbacks.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 include/sbi_utils/fdt/fdt_fixup.h | 15 ++++++++++++++
 lib/utils/fdt/fdt_fixup.c         | 33 +++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/include/sbi_utils/fdt/fdt_fixup.h b/include/sbi_utils/fdt/fdt_fixup.h
index 21a53011..93249968 100644
--- a/include/sbi_utils/fdt/fdt_fixup.h
+++ b/include/sbi_utils/fdt/fdt_fixup.h
@@ -9,6 +9,8 @@
 #ifndef __FDT_FIXUP_H__
 #define __FDT_FIXUP_H__
 
+#include <sbi/sbi_list.h>
+
 struct sbi_cpu_idle_state {
 	const char *name;
 	uint32_t suspend_param;
@@ -93,6 +95,19 @@ void fdt_plic_fixup(void *fdt);
  */
 int fdt_reserved_memory_fixup(void *fdt);
 
+/** Representation of a general fixup */
+struct fdt_general_fixup {
+	struct sbi_dlist head;
+	const char *name;
+	void (*do_fixup)(struct fdt_general_fixup *f, void *fdt);
+};
+
+/** Register a general fixup */
+int fdt_register_general_fixup(struct fdt_general_fixup *fixup);
+
+/** UnRegister a general fixup */
+void fdt_unregister_general_fixup(struct fdt_general_fixup *fixup);
+
 /**
  * General device tree fix-up
  *
diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c
index 9e013dfa..192d6dd5 100644
--- a/lib/utils/fdt/fdt_fixup.c
+++ b/lib/utils/fdt/fdt_fixup.c
@@ -401,8 +401,38 @@ void fdt_config_fixup(void *fdt)
 	fdt_nop_node(fdt, config_offset);
 }
 
+static SBI_LIST_HEAD(fixup_list);
+
+int fdt_register_general_fixup(struct fdt_general_fixup *fixup)
+{
+	struct fdt_general_fixup *f;
+
+	if (!fixup || !fixup->name || !fixup->do_fixup)
+		return SBI_EINVAL;
+
+	sbi_list_for_each_entry(f, &fixup_list, head) {
+		if (f == fixup)
+			return SBI_EALREADY;
+	}
+
+	SBI_INIT_LIST_HEAD(&fixup->head);
+	sbi_list_add_tail(&fixup->head, &fixup_list);
+
+	return 0;
+}
+
+void fdt_unregister_general_fixup(struct fdt_general_fixup *fixup)
+{
+	if (!fixup)
+		return;
+
+	sbi_list_del(&fixup->head);
+}
+
 void fdt_fixups(void *fdt)
 {
+	struct fdt_general_fixup *f;
+
 	fdt_aplic_fixup(fdt);
 
 	fdt_imsic_fixup(fdt);
@@ -416,4 +446,7 @@ void fdt_fixups(void *fdt)
 #endif
 
 	fdt_config_fixup(fdt);
+
+	sbi_list_for_each_entry(f, &fixup_list, head)
+		f->do_fixup(f, fdt);
 }
-- 
2.43.0



  parent reply	other threads:[~2024-11-29 15:50 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-29 15:50 [PATCH v2 00/17] RPMI and SBI MPXY support for OpenSBI Anup Patel
2024-11-29 15:50 ` [PATCH v2 01/17] lib: Increase ROOT_REGION_MAX to accomodate more memregions Anup Patel
2024-11-29 15:50 ` [PATCH v2 02/17] lib: utils/mailbox: Add generic mailbox library Anup Patel
2024-11-29 15:50 ` [PATCH v2 03/17] lib: utils/mailbox: Add simple FDT based mailbox framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 04/17] lib/utils: Add RPMI messaging protocol and shared memory transport support Anup Patel
2024-11-29 15:50 ` [PATCH v2 05/17] lib/utils: reset: Add RPMI System Reset driver Anup Patel
2024-11-29 15:50 ` [PATCH v2 06/17] lib: utils: Add simple FDT based system suspend driver framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 07/17] lib: utils/suspend: Add RPMI system suspend driver Anup Patel
2024-11-29 15:50 ` [PATCH v2 08/17] lib: sbi: Add optional resume address to hart suspend Anup Patel
2024-11-29 15:50 ` Anup Patel [this message]
2024-11-29 15:50 ` [PATCH v2 10/17] lib: utils: Add simple FDT based HSM driver framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 11/17] lib: utils/hsm: Add RPMI HSM driver Anup Patel
2024-11-29 15:50 ` [PATCH v2 12/17] lib: utils: Add simple FDT based CPPC driver framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 13/17] lib: utils/cppc: Add RPMI CPPC driver Anup Patel
2024-11-29 15:50 ` [PATCH v2 14/17] lib: sbi: Add SBI Message Proxy (MPXY) framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 15/17] lib: sbi: Implement SBI MPXY extension Anup Patel
2024-11-29 15:50 ` [PATCH v2 16/17] lib: utils: Add simple FDT based MPXY driver framework Anup Patel
2024-11-29 15:50 ` [PATCH v2 17/17] lib: utils/mpxy: Add RPMI client driver for MPXY Anup Patel
2024-12-06  3:55 ` [PATCH v2 00/17] RPMI and SBI MPXY support for OpenSBI Anup Patel
2024-12-06  5:08   ` Samuel Holland
2024-12-06 11:32     ` Anup Patel
2024-12-15 21:49       ` Samuel Holland
2024-12-16  8:57         ` Anup Patel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241129155052.2866712-10-apatel@ventanamicro.com \
    --to=apatel@ventanamicro.com \
    --cc=opensbi@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox