Message ID | 20210510172442.11146-3-vigneshr@ti.com |
---|---|
State | Changes Requested |
Delegated to: | Lokesh Vutla |
Headers | show |
Series | J72xx: R5 SPL DMA support post HSM Rearch | expand |
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? > +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? Thanks and regards, Lokesh
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
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 +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, + }, + { }, +}; +#endif /* CONFIG_TARGET_J721E_R5_EVM */ + +#ifdef CONFIG_TARGET_J7200_R5_EVM +static struct ti_sci_resource_static_data rm_static_data[] = { + /* Free rings */ + { + .dev_id = 235, + .subtype = 1, + .range_start = 144, + .range_num = 32, + }, + /* TX channels */ + { + .dev_id = 236, + .subtype = 13, + .range_start = 7, + .range_num = 2, + }, + /* RX channels */ + { + .dev_id = 236, + .subtype = 10, + .range_start = 7, + .range_num = 2, + }, + /* RX Free flows */ + { + .dev_id = 236, + .subtype = 0, + .range_start = 60, + .range_num = 8, + }, + { }, +}; +#endif /* CONFIG_TARGET_J7200_R5_EVM */ + +#else +static struct ti_sci_resource_static_data rm_static_data[] = { + { }, +}; +#endif /* CONFIG_K3_DM_FW */ +#endif /* __TI_SCI_STATIC_DATA_H */
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