From: Loic Pallardy <loic.pallardy@st.com> To: bjorn.andersson@linaro.org, ohad@wizery.com, lee.jones@linaro.org Cc: loic.pallardy@st.com, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@stlinux.com Subject: [PATCH v3 04/20] remoteproc: core: Add function to append a new resource table entry Date: Wed, 12 Oct 2016 18:00:22 +0200 [thread overview] Message-ID: <1476288038-24909-5-git-send-email-loic.pallardy@st.com> (raw) In-Reply-To: <1476288038-24909-1-git-send-email-loic.pallardy@st.com> From: Lee Jones <lee.jones@linaro.org> A new function now exists to pull in and amend and existing resource table entry. But what if we wish to provide a new resource? This function provides functionality to append a brand new resource entry onto the resource table. All complexity related to shuffling parts of the table around, providing new offsets and incriminating number of entries in the resource table's top-level header is taken care of here. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Loic Pallardy <loic.pallardy@st.com> --- drivers/remoteproc/remoteproc_core.c | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index c3830b4..3a26d4e 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -972,6 +972,61 @@ static int rproc_update_resource_table_entry(struct rproc *rproc, return !updated; } +static struct resource_table* +rproc_add_resource_table_entry(struct rproc *rproc, + struct rproc_request_resource *request, + struct resource_table *old_table, int *tablesz) +{ + struct resource_table *table; + struct fw_rsc_hdr h; + void *new_rsc_loc; + void *fw_header_loc; + void *start_of_rscs; + int new_rsc_offset; + int size = *tablesz; + int i; + + h.type = request->type; + + new_rsc_offset = size; + + /* + * Allocate another contiguous chunk of memory, large enough to + * contain the new, expanded resource table. + * + * The +4 is for the extra offset[] element in the top level header + */ + size += sizeof(struct fw_rsc_hdr) + request->size + 4; + table = devm_kmemdup(&rproc->dev, old_table, size, GFP_KERNEL); + if (!table) + return ERR_PTR(-ENOMEM); + + /* Shunt table by 4 Bytes to account for the extra offset[] element */ + start_of_rscs = (void *)table + table->offset[0]; + memmove(start_of_rscs + 4, + start_of_rscs, new_rsc_offset - table->offset[0]); + new_rsc_offset += 4; + + /* Update existing resource entry's offsets */ + for (i = 0; i < table->num; i++) + table->offset[i] += 4; + + /* Update the top level 'resource table' header */ + table->offset[table->num] = new_rsc_offset; + table->num++; + + /* Copy new firmware header into table */ + fw_header_loc = (void *)table + new_rsc_offset; + memcpy(fw_header_loc, &h, sizeof(h)); + + /* Copy new resource entry into table */ + new_rsc_loc = (void *)fw_header_loc + sizeof(h); + memcpy(new_rsc_loc, request->resource, request->size); + + *tablesz = size; + return table; +} + /* * take a firmware and boot a remote processor with it. */ -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: Loic Pallardy <loic.pallardy@st.com> To: <bjorn.andersson@linaro.org>, <ohad@wizery.com>, <lee.jones@linaro.org> Cc: <loic.pallardy@st.com>, <linux-remoteproc@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <kernel@stlinux.com> Subject: [PATCH v3 04/20] remoteproc: core: Add function to append a new resource table entry Date: Wed, 12 Oct 2016 18:00:22 +0200 [thread overview] Message-ID: <1476288038-24909-5-git-send-email-loic.pallardy@st.com> (raw) In-Reply-To: <1476288038-24909-1-git-send-email-loic.pallardy@st.com> From: Lee Jones <lee.jones@linaro.org> A new function now exists to pull in and amend and existing resource table entry. But what if we wish to provide a new resource? This function provides functionality to append a brand new resource entry onto the resource table. All complexity related to shuffling parts of the table around, providing new offsets and incriminating number of entries in the resource table's top-level header is taken care of here. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Loic Pallardy <loic.pallardy@st.com> --- drivers/remoteproc/remoteproc_core.c | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index c3830b4..3a26d4e 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -972,6 +972,61 @@ static int rproc_update_resource_table_entry(struct rproc *rproc, return !updated; } +static struct resource_table* +rproc_add_resource_table_entry(struct rproc *rproc, + struct rproc_request_resource *request, + struct resource_table *old_table, int *tablesz) +{ + struct resource_table *table; + struct fw_rsc_hdr h; + void *new_rsc_loc; + void *fw_header_loc; + void *start_of_rscs; + int new_rsc_offset; + int size = *tablesz; + int i; + + h.type = request->type; + + new_rsc_offset = size; + + /* + * Allocate another contiguous chunk of memory, large enough to + * contain the new, expanded resource table. + * + * The +4 is for the extra offset[] element in the top level header + */ + size += sizeof(struct fw_rsc_hdr) + request->size + 4; + table = devm_kmemdup(&rproc->dev, old_table, size, GFP_KERNEL); + if (!table) + return ERR_PTR(-ENOMEM); + + /* Shunt table by 4 Bytes to account for the extra offset[] element */ + start_of_rscs = (void *)table + table->offset[0]; + memmove(start_of_rscs + 4, + start_of_rscs, new_rsc_offset - table->offset[0]); + new_rsc_offset += 4; + + /* Update existing resource entry's offsets */ + for (i = 0; i < table->num; i++) + table->offset[i] += 4; + + /* Update the top level 'resource table' header */ + table->offset[table->num] = new_rsc_offset; + table->num++; + + /* Copy new firmware header into table */ + fw_header_loc = (void *)table + new_rsc_offset; + memcpy(fw_header_loc, &h, sizeof(h)); + + /* Copy new resource entry into table */ + new_rsc_loc = (void *)fw_header_loc + sizeof(h); + memcpy(new_rsc_loc, request->resource, request->size); + + *tablesz = size; + return table; +} + /* * take a firmware and boot a remote processor with it. */ -- 1.9.1
next prev parent reply other threads:[~2016-10-12 16:00 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-10-12 16:00 [PATCH v3 00/20] remoteproc: Allow platform-specific drivers to request resources Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 01/20] remoteproc: core: New API to add new resources to the resource table Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 02/20] remoteproc: core: Add function to dump " Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-14 8:37 ` Matt Redfearn 2016-10-14 8:37 ` Matt Redfearn 2016-10-17 16:26 ` loic pallardy 2016-10-17 16:26 ` loic pallardy 2016-10-12 16:00 ` [PATCH v3 03/20] remoteproc: core: Add function to amend an existing resource table entry Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy [this message] 2016-10-12 16:00 ` [PATCH v3 04/20] remoteproc: core: Add function to append a new " Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 05/20] remoteproc: core: Add function to over-ride current resource table Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 06/20] remoteproc: core: Associate action to resource request Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 07/20] remoteproc: core: Add RSC_VDEV support to rproc_request_resource Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 08/20] remoteproc: core: Complete VDEV support in rproc_dump_resource_table function Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 09/20] remoteproc: core: Unify rproc_dump_resource_table debug messages Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 10/20] remoteproc: core: Call rproc_dump_resource_table only if debug is activated Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 11/20] remoteproc: core: Correction carveout name comparison in rproc_update_resource_table_entry Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 12/20] remoteproc: core: Add function to verify an existing resource in rsc table Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 13/20] remoteproc: core: Add vdev support to resource amending function Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 14/20] remoteproc: core: Add force mode " Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 15/20] remoteproc: core: Append resource only if .resource_table section is large enough Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 16/20] remoteproc: core: Add resource request action support Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 17/20] remoteproc: core: Add function to verify resource table consistency Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 18/20] remoteproc: core: Clean-up resource table sanity checks Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 19/20] remotecore: core: Add resource table pointer argument to rproc_handle_resource Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy 2016-10-12 16:00 ` [PATCH v3 20/20] remoteproc: core: Support empty resource tables Loic Pallardy 2016-10-12 16:00 ` Loic Pallardy
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=1476288038-24909-5-git-send-email-loic.pallardy@st.com \ --to=loic.pallardy@st.com \ --cc=bjorn.andersson@linaro.org \ --cc=kernel@stlinux.com \ --cc=lee.jones@linaro.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-remoteproc@vger.kernel.org \ --cc=ohad@wizery.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.