Message ID | 20240318173319.201799-5-biju.das.jz@bp.renesas.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix USB pipe configuration for RZ/G2L | expand |
Hi Biju, On Mon, Mar 18, 2024 at 6:33 PM Biju Das <biju.das.jz@bp.renesas.com> wrote: > The RZ/G2L family SoCs has 10 pipe buffers compared to 16 pipe buffers on > RZ/A2M. Update the pipe configuration for RZ/G2L family SoCs and use > family SoC specific compatible to handle this difference. > > The pipe configuration of RZ/G2L is same as usbhsc_rzg2l_default_pipe[], > so select the default pipe configuration for RZ/G2L SoCs by setting > .has_new_pipe_configs to zero. > > Add SoC specific compatible to OF table to avoid ABI breakage with old > DTB. To optimize memory usage the SoC specific compatible will be removed > later. > > Based on the patch in BSP by Huy Nguyen <huy.nguyen.wh@renesas.com> > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> > --- > v3->v4: > * Credit Huy Nguyen's work in the commit message and dropped his name > from Signed-off-by tag. > * Selection of usbhsc_rzg2l_default_pipe[] by setting the variable > has_new_pipe_configs to zero. > * Updated commit description. Thanks for the update! > * Dropped the check 'priv->dparam.pipe_configs' as it is same as > checking !has_new_pipe_configs. I disagree: it is used to specify the pipe config through platform data on non-DT platforms. There don't seem to be any upstream SH platforms doing that, though. > --- a/drivers/usb/renesas_usbhs/common.c > +++ b/drivers/usb/renesas_usbhs/common.c > @@ -642,7 +658,7 @@ static int usbhs_probe(struct platform_device *pdev) > if (usbhs_get_dparam(priv, has_new_pipe_configs)) { > priv->dparam.pipe_configs = usbhsc_new_pipe; > priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_new_pipe); > - } else if (!priv->dparam.pipe_configs) { > + } else { Hence I'd rather drop this check. > priv->dparam.pipe_configs = usbhsc_default_pipe; > priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_default_pipe); > } The rest LGTM. Gr{oetje,eeting}s, Geert
Hi Geert, Thanks for the feedback. > -----Original Message----- > From: Geert Uytterhoeven <geert@linux-m68k.org> > Sent: Tuesday, March 19, 2024 8:44 AM > Subject: Re: [PATCH v4 4/6] usb: renesas_usbhs: Update usbhs pipe configuration for RZ/G2L family > > Hi Biju, > > On Mon, Mar 18, 2024 at 6:33 PM Biju Das <biju.das.jz@bp.renesas.com> wrote: > > The RZ/G2L family SoCs has 10 pipe buffers compared to 16 pipe buffers > > on RZ/A2M. Update the pipe configuration for RZ/G2L family SoCs and > > use family SoC specific compatible to handle this difference. > > > > The pipe configuration of RZ/G2L is same as > > usbhsc_rzg2l_default_pipe[], so select the default pipe configuration > > for RZ/G2L SoCs by setting .has_new_pipe_configs to zero. > > > > Add SoC specific compatible to OF table to avoid ABI breakage with old > > DTB. To optimize memory usage the SoC specific compatible will be > > removed later. > > > > Based on the patch in BSP by Huy Nguyen <huy.nguyen.wh@renesas.com> > > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> > > --- > > v3->v4: > > * Credit Huy Nguyen's work in the commit message and dropped his name > > from Signed-off-by tag. > > * Selection of usbhsc_rzg2l_default_pipe[] by setting the variable > > has_new_pipe_configs to zero. > > * Updated commit description. > > Thanks for the update! > > > * Dropped the check 'priv->dparam.pipe_configs' as it is same as > > checking !has_new_pipe_configs. > > I disagree: it is used to specify the pipe config through platform data on non-DT platforms. There > don't seem to be any upstream SH platforms doing that, though. You are correct. > > > --- a/drivers/usb/renesas_usbhs/common.c > > +++ b/drivers/usb/renesas_usbhs/common.c > > > @@ -642,7 +658,7 @@ static int usbhs_probe(struct platform_device *pdev) > > if (usbhs_get_dparam(priv, has_new_pipe_configs)) { > > priv->dparam.pipe_configs = usbhsc_new_pipe; > > priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_new_pipe); > > - } else if (!priv->dparam.pipe_configs) { > > + } else { > > Hence I'd rather drop this check. Ok, will restore the check. Cheers, Biju > > > priv->dparam.pipe_configs = usbhsc_default_pipe; > > priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_default_pipe); > > }
diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c index 177fa3144a47..df94375f6c23 100644 --- a/drivers/usb/renesas_usbhs/common.c +++ b/drivers/usb/renesas_usbhs/common.c @@ -363,7 +363,7 @@ static void usbhsc_clk_disable_unprepare(struct usbhs_priv *priv) * platform default param */ -/* commonly used on old SH-Mobile SoCs */ +/* commonly used on old SH-Mobile and RZ/G2L family SoCs */ static struct renesas_usbhs_driver_pipe_config usbhsc_default_pipe[] = { RENESAS_USBHS_PIPE(USB_ENDPOINT_XFER_CONTROL, 64, 0x00, false), RENESAS_USBHS_PIPE(USB_ENDPOINT_XFER_ISOC, 1024, 0x08, true), @@ -565,6 +565,18 @@ static const struct of_device_id usbhs_of_match[] = { .compatible = "renesas,usbhs-r8a77995", .data = &usbhs_rcar_gen3_with_pll_plat_info, }, + { + .compatible = "renesas,usbhs-r9a07g043", + .data = &usbhs_rzg2l_plat_info, + }, + { + .compatible = "renesas,usbhs-r9a07g044", + .data = &usbhs_rzg2l_plat_info, + }, + { + .compatible = "renesas,usbhs-r9a07g054", + .data = &usbhs_rzg2l_plat_info, + }, { .compatible = "renesas,rcar-gen2-usbhs", .data = &usbhs_rcar_gen2_plat_info, @@ -581,6 +593,10 @@ static const struct of_device_id usbhs_of_match[] = { .compatible = "renesas,rza2-usbhs", .data = &usbhs_rza2_plat_info, }, + { + .compatible = "renesas,rzg2l-usbhs", + .data = &usbhs_rzg2l_plat_info, + }, { }, }; MODULE_DEVICE_TABLE(of, usbhs_of_match); @@ -642,7 +658,7 @@ static int usbhs_probe(struct platform_device *pdev) if (usbhs_get_dparam(priv, has_new_pipe_configs)) { priv->dparam.pipe_configs = usbhsc_new_pipe; priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_new_pipe); - } else if (!priv->dparam.pipe_configs) { + } else { priv->dparam.pipe_configs = usbhsc_default_pipe; priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_default_pipe); } diff --git a/drivers/usb/renesas_usbhs/rza.h b/drivers/usb/renesas_usbhs/rza.h index a29b75fef057..8b879aa34a20 100644 --- a/drivers/usb/renesas_usbhs/rza.h +++ b/drivers/usb/renesas_usbhs/rza.h @@ -3,3 +3,4 @@ extern const struct renesas_usbhs_platform_info usbhs_rza1_plat_info; extern const struct renesas_usbhs_platform_info usbhs_rza2_plat_info; +extern const struct renesas_usbhs_platform_info usbhs_rzg2l_plat_info; diff --git a/drivers/usb/renesas_usbhs/rza2.c b/drivers/usb/renesas_usbhs/rza2.c index f079817250bb..b83699eab373 100644 --- a/drivers/usb/renesas_usbhs/rza2.c +++ b/drivers/usb/renesas_usbhs/rza2.c @@ -71,3 +71,16 @@ const struct renesas_usbhs_platform_info usbhs_rza2_plat_info = { .has_new_pipe_configs = 1, }, }; + +const struct renesas_usbhs_platform_info usbhs_rzg2l_plat_info = { + .platform_callback = { + .hardware_init = usbhs_rza2_hardware_init, + .hardware_exit = usbhs_rza2_hardware_exit, + .power_ctrl = usbhs_rza2_power_ctrl, + .get_id = usbhs_get_id_as_gadget, + }, + .driver_param = { + .has_cnen = 1, + .cfifo_byte_addr = 1, + }, +};
The RZ/G2L family SoCs has 10 pipe buffers compared to 16 pipe buffers on RZ/A2M. Update the pipe configuration for RZ/G2L family SoCs and use family SoC specific compatible to handle this difference. The pipe configuration of RZ/G2L is same as usbhsc_rzg2l_default_pipe[], so select the default pipe configuration for RZ/G2L SoCs by setting .has_new_pipe_configs to zero. Add SoC specific compatible to OF table to avoid ABI breakage with old DTB. To optimize memory usage the SoC specific compatible will be removed later. Based on the patch in BSP by Huy Nguyen <huy.nguyen.wh@renesas.com> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> --- v3->v4: * Credit Huy Nguyen's work in the commit message and dropped his name from Signed-off-by tag. * Selection of usbhsc_rzg2l_default_pipe[] by setting the variable has_new_pipe_configs to zero. * Updated commit description. * Dropped the check 'priv->dparam.pipe_configs' as it is same as checking !has_new_pipe_configs. v2->v3: * Updated commit description * Dropped usbhsc_rzg2l_pipe[] and reusing the default_pipe[]. v1->v2: * Dropped using of_device_is_compatible() in probe. * Added usbhs_rzg2l_plat_info and replaced the device data for RZ/G2L from usbhs_rza2_plat_info->usbhs_rzg2l_plat_info. * Moved usbhsc_rzg2l_pipe table near to the user. * Updated commit description. --- drivers/usb/renesas_usbhs/common.c | 20 ++++++++++++++++++-- drivers/usb/renesas_usbhs/rza.h | 1 + drivers/usb/renesas_usbhs/rza2.c | 13 +++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-)