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 <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?

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

Reply via email to