RE: [PATCH 5/6] can: flexcan: add CAN wakeup function for i.MX8QM
From: Joakim Zhang
Date: Fri Oct 16 2020 - 06:57:37 EST
Hi Marc,
> -----Original Message-----
> From: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> Sent: 2020年10月16日 18:40
> To: Joakim Zhang <qiangqing.zhang@xxxxxxx>; robh+dt@xxxxxxxxxx;
> shawnguo@xxxxxxxxxx; s.hauer@xxxxxxxxxxxxxx
> Cc: kernel@xxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>; Ying Liu
> <victor.liu@xxxxxxx>; Peng Fan <peng.fan@xxxxxxx>;
> linux-can@xxxxxxxxxxxxxxx; Pankaj Bansal <pankaj.bansal@xxxxxxx>;
> netdev@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 5/6] can: flexcan: add CAN wakeup function for i.MX8QM
>
> On 10/16/20 12:00 PM, Joakim Zhang wrote:
> >>>> +static int flexcan_stop_mode_enable_scfw(struct flexcan_priv
> >>>> +*priv, bool enabled) {
> >>>> + u8 idx = priv->can_idx;
> >>>> + u32 rsrc_id, val;
> >>>> +
> >>>> + if (idx == 0)
> >>>> + rsrc_id = IMX_SC_R_CAN_0;
> >>>> + else if (idx == 1)
> >>>> + rsrc_id = IMX_SC_R_CAN_1;
> >>>> + else
> >>>> + rsrc_id = IMX_SC_R_CAN_2;
> >>>
> >>> Can you introduce something like and make use of it:
> >>>
> >>> #define IMX_SC_R_CAN(x) (105 + (x))
> >> OK.
> >
> > I thought it over again, from my point of view, use macro here
> > directly could be more intuitive, and can achieve a direct jump.
> > If change to above wrapper, on the contrary make confusion, and
> > generate the magic number 105. ☹
>
> The define should go into the rsrc.h, and probably be:
>
> #define IMX_SC_R_CAN(x) (IMX_SC_R_CAN_0 + (x))
>
> and if you change the firmware interface, you probably have more problems :)
rsrc.h:
/*
* These defines are used to indicate a resource. Resources include peripherals
* and bus masters (but not memory regions). Note items from list should
* never be changed or removed (only added to at the end of the list).
*/
Hmm, it just list all resource id, and never be changed. Anyway, if you think above way is better, I will turn to it.
> >>>> +
> >>>> + if (enabled)
> >>>> + val = 1;
> >>>> + else
> >>>> + val = 0;
> >>>> +
> >>>> + /* stop mode request via scu firmware */
> >>>> + return imx_sc_misc_set_control(priv->sc_ipc_handle, rsrc_id,
> >>>> +IMX_SC_C_IPG_STOP, val); }
> >
> > We still need use IMX_SC_C_IPG_STOP, why not be consistent?
>
> Sorry I don't get what you want to tell me here.
Need me add IMX_SC_C_IPG_STOP macro in the driver directly?
Such as, #define IMX_SC_C_IPG_STOP 52, so that no need to include rsrc.h file in the driver.
Best Regards,
Joakim Zhang
> Marc
>
> --
> Pengutronix e.K. | Marc Kleine-Budde |
> Embedded Linux | https://www.pengutronix.de |
> Vertretung West/Dortmund | Phone: +49-231-2826-924 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |