On 09/14/2016 02:35 PM, Marek Vasut wrote: > On 09/14/2016 07:22 AM, Sriram Dash wrote: >>> From: Sriram Dash [mailto:sriram.d...@nxp.com] >>> >> >> Hello Marek, >> >> Any comments? > > Waiting for York to review this. > > It's a bulky patch V2 without changelog, shall I review the whole thing > again ? > >>> For FSL USB node fixup, the dt is walked multiple times for fixing erratum >>> and phy >>> type. This patch walks the tree and fixes the node till no more USB nodes >>> are left. >>> >>> Signed-off-by: Sriram Dash <sriram.d...@nxp.com> >>> Signed-off-by: Rajesh Bhagat <rajesh.bha...@nxp.com> >>> --- >>> drivers/usb/common/fsl-dt-fixup.c | 108 >>> +++++++++++++++++--------------------- >>> 1 file changed, 47 insertions(+), 61 deletions(-) >>> >>> diff --git a/drivers/usb/common/fsl-dt-fixup.c >>> b/drivers/usb/common/fsl-dt-fixup.c >>> index 9c48852..df785a6 100644 >>> --- a/drivers/usb/common/fsl-dt-fixup.c >>> +++ b/drivers/usb/common/fsl-dt-fixup.c >>> @@ -54,25 +54,19 @@ static int fdt_usb_get_node_type(void *blob, int >>> start_offset, } >>> >>> static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode, >>> - const char *phy_type, int start_offset) >>> + const char *phy_type, int node_offset, >>> + const char **node_type) >>> { >>> const char *prop_mode = "dr_mode"; >>> const char *prop_type = "phy_type"; >>> - const char *node_type = NULL; >>> - int node_offset; >>> - int err; >>> - >>> - err = fdt_usb_get_node_type(blob, start_offset, >>> - &node_offset, &node_type); >>> - if (err < 0) >>> - return err; >>> + int err = 0; >>> >>> if (mode) { >>> err = fdt_setprop(blob, node_offset, prop_mode, mode, >>> strlen(mode) + 1); >>> if (err < 0) >>> printf("WARNING: could not set %s for %s: %s.\n", >>> - prop_mode, node_type, fdt_strerror(err)); >>> + prop_mode, *node_type, fdt_strerror(err)); >>> } >>> >>> if (phy_type) { >>> @@ -80,52 +74,48 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const >>> char *mode, >>> strlen(phy_type) + 1); >>> if (err < 0) >>> printf("WARNING: could not set %s for %s: %s.\n", >>> - prop_type, node_type, fdt_strerror(err)); >>> + prop_type, *node_type, fdt_strerror(err)); >>> } >>> >>> - return node_offset; >>> + return err; >>> } >>> >>> static int fdt_fixup_usb_erratum(void *blob, const char *prop_erratum, >>> - const char *controller_type, int start_offset) >>> + const char *controller_type, int node_offset, >>> + const char **node_type) >>> { >>> - int node_offset, err; >>> - const char *node_type = NULL; >>> + int err = -1; >>> const char *node_name = NULL; >>> >>> - err = fdt_usb_get_node_type(blob, start_offset, >>> - &node_offset, &node_type); >>> - if (err < 0) >>> - return err; >>> - >>> - if (!strcmp(node_type, FSL_USB2_MPH) || !strcmp(node_type, >>> FSL_USB2_DR)) >>> + if (!strcmp(*node_type, FSL_USB2_MPH) || >>> + !strcmp(*node_type, FSL_USB2_DR)) >>> node_name = CHIPIDEA_USB2; >>> else >>> - node_name = node_type; >>> + node_name = *node_type; >>> if (strcmp(node_name, controller_type)) >>> return err; >>> >>> err = fdt_setprop(blob, node_offset, prop_erratum, NULL, 0); >>> if (err < 0) { >>> printf("ERROR: could not set %s for %s: %s.\n", >>> - prop_erratum, node_type, fdt_strerror(err)); >>> + prop_erratum, *node_type, fdt_strerror(err)); >>> } >>> >>> - return node_offset; >>> + return err; >>> } >>> >>> -static int fdt_fixup_erratum(int *usb_erratum_off, void *blob, >>> +static int fdt_fixup_erratum(int node_offset, void *blob, >>> const char *controller_type, char *str, >>> - bool (*has_erratum)(void)) >>> + bool (*has_erratum)(void), const char **node_type) >>> { >>> char buf[32] = {0}; >>> >>> snprintf(buf, sizeof(buf), "fsl,usb-erratum-%s", str); >>> if (!has_erratum()) >>> return -EINVAL; >>> - *usb_erratum_off = fdt_fixup_usb_erratum(blob, buf, controller_type, >>> - *usb_erratum_off); >>> - if (*usb_erratum_off < 0) >>> + node_offset = fdt_fixup_usb_erratum(blob, buf, controller_type, >>> + node_offset, node_type); >>> + if (node_offset < 0) >>> return -ENOSPC; >>> debug("Adding USB erratum %s\n", str); >>> return 0; >>> @@ -135,23 +125,23 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd) { >>> static const char * const modes[] = { "host", "peripheral", "otg" }; >>> static const char * const phys[] = { "ulpi", "utmi", "utmi_dual" }; >>> - int usb_erratum_a006261_off = -1; >>> - int usb_erratum_a007075_off = -1; >>> - int usb_erratum_a007792_off = -1; >>> - int usb_erratum_a005697_off = -1; >>> - int usb_erratum_a008751_off = -1; >>> - int usb_mode_off = -1; >>> - int usb_phy_off = -1; >>> + const char *node_type = NULL; >>> + int node_offset = -1; >>> char str[5]; >>> - int i, j; >>> - int ret; >>> + int i = 1, j; >>> + int ret, err; >>> >>> - for (i = 1; i <= CONFIG_USB_MAX_CONTROLLER_COUNT; i++) { >>> + do { >>> const char *dr_mode_type = NULL; >>> const char *dr_phy_type = NULL; >>> int mode_idx = -1, phy_idx = -1; >>> >>> - snprintf(str, 5, "%s%d", "usb", i); >>> + err = fdt_usb_get_node_type(blob, node_offset, >>> + &node_offset, &node_type); >>> + if (err < 0) >>> + return; >>> + >>> + snprintf(str, 5, "%s%d", "usb", i++); >>> if (hwconfig(str)) { >>> for (j = 0; j < ARRAY_SIZE(modes); j++) { >>> if (hwconfig_subarg_cmp(str, "dr_mode", @@ - >>> 184,45 +174,41 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd) >>> if (has_dual_phy()) >>> dr_phy_type = phys[2]; >>> >>> - usb_mode_off = fdt_fixup_usb_mode_phy_type(blob, >>> - dr_mode_type, NULL, >>> - usb_mode_off); >>> - >>> - if (usb_mode_off < 0) >>> + err = fdt_fixup_usb_mode_phy_type(blob, dr_mode_type, NULL, >>> + node_offset, &node_type); >>> + if (err < 0) >>> return; >>> >>> - usb_phy_off = fdt_fixup_usb_mode_phy_type(blob, >>> - NULL, dr_phy_type, >>> - usb_phy_off); >>> - >>> - if (usb_phy_off < 0) >>> + err = fdt_fixup_usb_mode_phy_type(blob, NULL, dr_phy_type, >>> + node_offset, &node_type); >>> + if (err < 0) >>> return; >>> >>> - ret = fdt_fixup_erratum(&usb_erratum_a006261_off, blob, >>> + ret = fdt_fixup_erratum(node_offset, blob, >>> CHIPIDEA_USB2, "a006261", >>> - has_erratum_a006261); >>> + has_erratum_a006261, &node_type); >>> if (ret == -ENOSPC) >>> return; >>> - ret = fdt_fixup_erratum(&usb_erratum_a007075_off, blob, >>> + ret = fdt_fixup_erratum(node_offset, blob, >>> CHIPIDEA_USB2, "a007075", >>> - has_erratum_a007075); >>> + has_erratum_a007075, &node_type); >>> if (ret == -ENOSPC) >>> return; >>> - ret = fdt_fixup_erratum(&usb_erratum_a007792_off, blob, >>> + ret = fdt_fixup_erratum(node_offset, blob, >>> CHIPIDEA_USB2, "a007792", >>> - has_erratum_a007792); >>> + has_erratum_a007792, &node_type); >>> if (ret == -ENOSPC) >>> return; >>> - ret = fdt_fixup_erratum(&usb_erratum_a005697_off, blob, >>> + ret = fdt_fixup_erratum(node_offset, blob, >>> CHIPIDEA_USB2, "a005697", >>> - has_erratum_a005697); >>> + has_erratum_a005697, &node_type); >>> if (ret == -ENOSPC) >>> return; >>> - ret = fdt_fixup_erratum(&usb_erratum_a008751_off, blob, >>> + ret = fdt_fixup_erratum(node_offset, blob, >>> SNPS_DWC3, "a008751", >>> - has_erratum_a008751); >>> + has_erratum_a008751, &node_type); >>> if (ret == -ENOSPC) >>> return; >>>
Do we really want to return in case of each error? I am not USB expert so my comment could be mistaken. Other than that, this patch looks OK. I didn't test it by compiling or running on a board. York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot