From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vignesh Raghavendra Date: Tue, 11 May 2021 11:24:55 +0530 Subject: [PATCH 2/7] firmware: ti_sci: Implement GET_RANGE with static data In-Reply-To: <23f555c4-9a15-61f1-914e-7acb1cb0d0f7@ti.com> References: <20210510172442.11146-1-vigneshr@ti.com> <20210510172442.11146-3-vigneshr@ti.com> <23f555c4-9a15-61f1-914e-7acb1cb0d0f7@ti.com> Message-ID: <7e0acb14-924b-8540-1c29-4ba482205523@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 >> --- >> 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 >> >> #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