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 <vigne...@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

Reply via email to