Linux-remoteproc Archive mirror
 help / color / mirror / Atom feed
* [PATCH] remoteproc: add optional hook for resource checking
@ 2025-01-22 15:59 Simon Maurer
  2025-01-22 18:53 ` RemoteProc over PCIe Simon Maurer
  0 siblings, 1 reply; 6+ messages in thread
From: Simon Maurer @ 2025-01-22 15:59 UTC (permalink / raw)
  To: linux-remoteproc

This optional hook gives the remoteproc driver the opportunity to check
the resource table after parsing and to replace the allocator in
the carveouts before resource allocation. This is needed for RemoteProc
over PCIe where the carveouts are already mapped by the driver.

Signed-off-by: Simon Maurer <mail@maurer.systems>
---
  drivers/remoteproc/remoteproc_core.c | 6 ++++++
  include/linux/remoteproc.h           | 3 +++
  2 files changed, 9 insertions(+)

diff --git a/drivers/remoteproc/remoteproc_core.c 
b/drivers/remoteproc/remoteproc_core.c
index c2cf0d277729..3129c5d68770 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -1423,6 +1423,12 @@ static int rproc_fw_boot(struct rproc *rproc, 
const struct firmware *fw)
  		goto clean_up_resources;
  	}

+	if (rproc->ops->check_rsc) {
+		ret = rproc->ops->check_rsc(rproc);
+		if (ret)
+			goto clean_up_resources;
+	}
+
  	/* Allocate carveout resources associated to rproc */
  	ret = rproc_alloc_registered_carveouts(rproc);
  	if (ret) {
diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h
index b4795698d8c2..6d7d35d24dad 100644
--- a/include/linux/remoteproc.h
+++ b/include/linux/remoteproc.h
@@ -371,6 +371,8 @@ enum rsc_handling_status {
   * @handle_rsc:	optional platform hook to handle vendor resources. 
Should return
   *		RSC_HANDLED if resource was handled, RSC_IGNORED if not handled
   *		and a negative value on error
+ * @hcheck_rsc:	optional platform hook to check resources before 
allocation.
+ *		Should return 0 if resources are OK and a negative value on error
   * @find_loaded_rsc_table: find the loaded resource table from 
firmware image
   * @get_loaded_rsc_table: get resource table installed in memory
   *			  by external entity
@@ -394,6 +396,7 @@ struct rproc_ops {
  	int (*parse_fw)(struct rproc *rproc, const struct firmware *fw);
  	int (*handle_rsc)(struct rproc *rproc, u32 rsc_type, void *rsc,
  			  int offset, int avail);
+	int (*check_rsc)(struct rproc *rproc);
  	struct resource_table *(*find_loaded_rsc_table)(
  				struct rproc *rproc, const struct firmware *fw);
  	struct resource_table *(*get_loaded_rsc_table)(
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread
* remoteproc over PCIe
@ 2023-05-09 13:42 Simon Maurer
  2023-05-09 17:08 ` Arnaud POULIQUEN
  0 siblings, 1 reply; 6+ messages in thread
From: Simon Maurer @ 2023-05-09 13:42 UTC (permalink / raw)
  To: linux-remoteproc

Hi,
I've got a "Zynq PCIe FMC Carrier Evaluation Board" with a x86 host. The 
Zynq 7000 is an FPGA with 2x Cortex-A9, on which ZephyrOS with the 
OpenAMP framework is running. The VirtIO ring and the buffer for the 
RPMSGs are located in the nocache memory section of the ZephyrOS. The 
card DDR-RAM and the CPU control registers are mapped into PCIe BARs. On 
the FPGA the "AXI Memory Mapped To PCI Express" IP core is used, so the 
kernel has mmio access to the card DDR-RAM.
Besides the kernel module, I had to do a few modifications elsewhere in 
the kernel. In remoteproc_virtio.c I implemented the get_shm_region 
function for the rproc_virtio_config_ops. This gives access to the rpmsg 
buffer, that is already mapped. In virtio_rpmsg_bus.c this function is 
used instead of allocating a new region. This is just a proof of 
concept, but it seems to be working, ttyRPMSG is created and I can send 
and receive messages.
But what would be the clean way to do this? I'm thinking about 
implementing dma_map_ops for the vdev, but maybe there is a better solution?

Best regards,
Simon

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

end of thread, other threads:[~2025-01-27 16:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-22 15:59 [PATCH] remoteproc: add optional hook for resource checking Simon Maurer
2025-01-22 18:53 ` RemoteProc over PCIe Simon Maurer
2025-01-27 16:27   ` Mathieu Poirier
  -- strict thread matches above, loose matches on Subject: below --
2023-05-09 13:42 remoteproc " Simon Maurer
2023-05-09 17:08 ` Arnaud POULIQUEN
2023-05-10 13:06   ` Simon Maurer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).