
On 5/11/21 10:12 AM, Lokesh Vutla wrote:
On 10/05/21 10:54 pm, Vignesh Raghavendra wrote:
In case of R5 SPL, GET_RANGE API service is not available (as DM services are not yet up), therefore service such calls locally using per SoC static data.
Signed-off-by: Vignesh Raghavendra vigneshr@ti.com
drivers/firmware/ti_sci.c | 36 +++++++++++ drivers/firmware/ti_sci_static_data.h | 92 +++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 drivers/firmware/ti_sci_static_data.h
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index 2aec2e34d3..c27fbc682a 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -23,6 +23,7 @@ #include <linux/soc/ti/ti_sci_protocol.h>
#include "ti_sci.h" +#include "ti_sci_static_data.h"
/* List of all TI SCI devices active in system */ static LIST_HEAD(ti_sci_list); @@ -1667,6 +1668,33 @@ fail: return ret; }
+static int __maybe_unused +ti_sci_get_resource_range_static(u32 dev_id, u8 subtype, u16 *range_start,
u16 *range_num)
+{
- struct ti_sci_resource_static_data *data;
- int i = 0;
- while (1) {
data = &rm_static_data[i];
if (!data->dev_id)
return -EINVAL;
if (data->dev_id != dev_id || data->subtype != subtype) {
i++;
continue;
}
*range_start = data->range_start;
*range_num = data->range_num;
return 0;
- }
- return -EINVAL;
+}
/**
- ti_sci_cmd_get_resource_range - Get a range of resources assigned to host
that is same as ti sci interface host.
@@ -1683,6 +1711,11 @@ static int ti_sci_cmd_get_resource_range(const struct ti_sci_handle *handle, u32 dev_id, u8 subtype, u16 *range_start, u16 *range_num) {
- if (CONFIG_IS_ENABLED(TI_K3_RAW_RM))
return ti_sci_get_resource_range_static(dev_id, subtype,
range_start,
range_num);
- return ti_sci_get_resource_range(handle, dev_id, subtype, TI_SCI_IRQ_SECONDARY_HOST_INVALID, range_start, range_num);
@@ -1706,6 +1739,9 @@ int ti_sci_cmd_get_resource_range_from_shost(const struct ti_sci_handle *handle, u32 dev_id, u8 subtype, u8 s_host, u16 *range_start, u16 *range_num) {
- if (CONFIG_IS_ENABLED(TI_K3_RAW_RM))
return -EINVAL;
- return ti_sci_get_resource_range(handle, dev_id, subtype, s_host, range_start, range_num);
} diff --git a/drivers/firmware/ti_sci_static_data.h b/drivers/firmware/ti_sci_static_data.h new file mode 100644 index 0000000000..2816cb2827 --- /dev/null +++ b/drivers/firmware/ti_sci_static_data.h @@ -0,0 +1,92 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/*
- Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/
- */
+#ifndef __TI_SCI_STATIC_DATA_H +#define __TI_SCI_STATIC_DATA_H
+struct ti_sci_resource_static_data {
- u32 dev_id;
- u16 range_start;
- u16 range_num;
- u8 subtype;
+};
+#if IS_ENABLED(CONFIG_K3_DM_FW)
+#ifdef CONFIG_TARGET_J721E_R5_EVM
want to be consistent across #if IS_ENABLED() or #ifdef?
Right, will fix
+static struct ti_sci_resource_static_data rm_static_data[] = {
- /* Free rings */
- {
.dev_id = 235,
.subtype = 1,
.range_start = 124,
.range_num = 32,
- },
- /* TX channels */
- {
.dev_id = 236,
.subtype = 13,
.range_start = 6,
.range_num = 2,
- },
- /* RX channels */
- {
.dev_id = 236,
.subtype = 10,
.range_start = 6,
.range_num = 2,
- },
- /* RX Free flows */
- {
.dev_id = 236,
.subtype = 0,
.range_start = 60,
.range_num = 8,
- },
For my understanding, does this need to be in sync with RM board config or this can be independent?
No, this needs to be in sync with RM board cfg data.
Regards Vignesh