[PATCH v2 4/7] drivers: firmware: ti_sci: Get SCI revision only if TIFS/SYSFW is up

Neha Malcom Francis n-francis at ti.com
Fri Sep 8 07:32:42 CEST 2023


Hi Manorit

On 08/09/23 10:47, Manorit Chawdhry wrote:
> Hi Neha,
> 
> On 09:04-20230908, Neha Malcom Francis wrote:
>> Hi Nishanth
>>
>> On 07/09/23 20:35, Nishanth Menon wrote:
>>> On 19:44-20230907, Neha Malcom Francis wrote:
>>>> While setting up necessary dependent clocks and power domains, we end up
>>>> probing the ti_sci driver before TIFS/SYSFW has been loaded in the case
>>>> of legacy boot flow devices. This leads to panic when getting the SCI
>>>> revision. Return the revision only if it is combined boot flow. Also
>>>
>>> Not clear description of the problem.
>>
>> Hmm okay I will modify this and the earlier commit message to give a clearer
>> picture.
>>
> 
> I still don't understand why we are coming to the TISCI driver to
> contact M4/DM for setting up the power domains and clocks, if this would
> have been the case then even the normal J721E wouldn't have been working
> and it shouldn't have been dependent on the DT Sync to uncover this
> issue. Could you elaborate more w.r.t this patch?
> 

We were using /delete-property/ to remove every instance of k3_clks and k3_pds 
before TIFS/SYSFW came up so it was never probing the TISCI driver.

>  From what I understand is that even if we end up coming here, we
> shouldn't be hitting the panic as the previous patch sets up the
> necessary clock (mcu_timer0) and at the worst - we would just end up
> polling to get a response and if we don't, we would fail and we
> shouldn't be getting a panic. I believe this is how the J721E would've

So earlier we never reached here because of above mentioned reason, now we do 
with the last patch. While probing ti_sci we invoke ti_sci_cmd_get_revision that 
returns -61 (ENODATA) and we reach panic like this:

get_timer --> get_ticks --> dm_timer_init (tries to get timer, fails for above 
reason) --> panic

> been working before the sync but am not sure what is breaking after the
> sync. Maybe this helps in uncovering the real issue that we still have,
> I believe we should still be looking at why the timer is failing and
> causing this probe to fail.
> 
> Regards,
> Manorit
> 
>>>
>>>> ensure that after TIFS/SYSFW comes up we run ti_sci_cmd_get_revision
>>>> again so we print the revision right.
>>>>
>>>> Signed-off-by: Neha Malcom Francis <n-francis at ti.com>
>>>> ---
>>>>    drivers/firmware/ti_sci.c | 9 ++++++++-
>>>>    1 file changed, 8 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
>>>> index 72f572d824..6a85d202f2 100644
>>>> --- a/drivers/firmware/ti_sci.c
>>>> +++ b/drivers/firmware/ti_sci.c
>>>> @@ -2703,6 +2703,9 @@ struct ti_sci_handle *ti_sci_get_handle_from_sysfw(struct udevice *sci_dev)
>>>>    	if (!handle)
>>>>    		return ERR_PTR(-EINVAL);
>>>> +	/* May have been skipped in case TIFS/SYSFW had come up later */
>>> Very confusing comment.
>>>
>>
>> Understood, will change that.
>>
>>>> +	ti_sci_cmd_get_revision(handle);
>>>
>>> should this be protected with if (IS_ENABLED(CONFIG_K3_DM_FW) ?
>>>
>>> Since getting the handle is where the entire flow happens, why not do it
>>> here always?
>>>
>>
>> This is a valid point, I am in the process of making sure there's no other
>> consequences to getting the revision this late for platforms with other boot
>> devices, if this gets an all clear, I will push it here for the next
>> version, else I will explain why I couldn't.
>>
>>> what if ti_sci_cmd_get_revision fails? there is no error handling here.
>>
>> Yes that would be a consequence since ti_sci_probe, the logic it was
>> written; used reading the version as an "all okay return 0" for the
>> TIFS/SYSFW binary.
>>
>> But now after moving, ti_sci_get_handle_from_sysfw happens after
>> k3_sysfw_loader so we're not checking binary sanity early on in the case of
>> combined boot
>>
>> I'm hesitant that we are checking version way later after k3_sysfw_loader
>> for combined platforms and if that is something we want? But there is an
>> advantage(?) that it will run every time someone tries to get a handle for
>> doing anything with TISCI and that would be a kind of check (?) if the
>> binary is good? Correct me if I'm wrong in thinking that.
>>
>>>> +
>>>>    	return handle;
>>>>    }
>>>> @@ -2825,7 +2828,11 @@ static int ti_sci_probe(struct udevice *dev)
>>>>    	list_add_tail(&info->list, &ti_sci_list);
>>>>    	ti_sci_setup_ops(info);
>>>> -	ret = ti_sci_cmd_get_revision(&info->handle);
>>>> +	/* Get SCI revision ONLY if we are real */
>>>> +	if (!IS_ENABLED(CONFIG_K3_DM_FW))
>>>> +		ret = ti_sci_cmd_get_revision(&info->handle);
>>>> +	else
>>>> +		ret = 0;
>>>>    	INIT_LIST_HEAD(&info->dev_list);
>>>> -- 
>>>> 2.34.1
>>>>
>>>
>>
>> -- 
>> Thanking You
>> Neha Malcom Francis

-- 
Thanking You
Neha Malcom Francis


More information about the U-Boot mailing list