[U-Boot] [PATCH] fsl/usb: fix phy_type checking
nikhil.badola at freescale.com
nikhil.badola at freescale.com
Mon Feb 17 11:06:29 CET 2014
Hi Albert,
-----Original Message-----
From: Albert ARIBAUD [mailto:albert.u.boot at aribaud.net]
Sent: Monday, February 17, 2014 3:05 PM
To: Badola Nikhil-B46172
Cc: u-boot at lists.denx.de; Xie Shaohui-B21989
Subject: Re: [U-Boot] [PATCH] fsl/usb: fix phy_type checking
Hi Nikhil,
On Mon, 17 Feb 2014 14:39:47 +0530, Nikhil Badola <nikhil.badola at freescale.com> wrote:
> Strcmp should not be used to check the argument of phy_type which
> maybe parsed by hwconfig_subarg. Hwconfig_subarg returns part of
> hwconfig starting from the argument (if it has the argument) till the
> end of the string. Since phy_type could be either 'utmi' or 'ulpi',
> strncmp should be used along with length limited to 4
Not sure I understand what exact problem you are considering here. If you know that phy_type is either "utmi" or "ulpi", then there is no benefit in switching from strcmp() to strncmp() since there is no risk that strcmp() overruns any of its arguments.
[Nikhil Badola] :
Strcmp() won't overrun any of its arguments but it does check NULL character at the end of both strings.
Let me explain this with an example:
Consider the hwconfig string to be defined as
hwconfig=usb1:dr_mode=host,phy_type=utmi;fsl_ddr:bank_intlv=auto
When hwconfig string is parsed for "phy_type" sub-argument, it returns string "utmi;fsl_ddr:bank_intlv=auto" which gets stored in phy_type pointer. When strcmp() is used, then '\0' character of "utmi" string is compared with ';' of phy_type hence returning non-zero value.
> Signed-off-by: Shaohui Xie <Shaohui.Xie at freescale.com>
> Signed-off-by: Nikhil Badola <nikhil.badola at freescale.com>
> ---
> drivers/usb/host/ehci-fsl.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
> index 45e5d6a..1ca7cf5 100644
> --- a/drivers/usb/host/ehci-fsl.c
> +++ b/drivers/usb/host/ehci-fsl.c
> @@ -86,7 +86,7 @@ int ehci_hcd_init(int index, enum usb_init_type
> init, #endif
> }
>
> - if (!strcmp(phy_type, "utmi")) {
> + if (!strncmp(phy_type, "utmi", 4)) {
> #if defined(CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY)
> setbits_be32(&ehci->control, PHY_CLK_SEL_UTMI);
> setbits_be32(&ehci->control, UTMI_PHY_EN);
Amicalement,
--
Albert.
More information about the U-Boot
mailing list