[U-Boot] [PATCH v6 0/5] various fixes mainly for colibri_t20

This series addresses various issues as seen on Colibri T20. Please note that for successful Ethernet operation not only on Colibri T20 but also on Colibri T30 the following patch will still be required already waiting in Marek's usb tree:
[PATCH v2] net: asix: Fix ASIX 88772B with driver model
https://www.mail-archive.com/u-boot@lists.denx.de/msg224349.html
Changes in v6: - Re-based to latest tegra custodian tree and fixed sdhci0 vs. mmc0 merge conflict.
Changes in v5: - Remove DEBUG define. - Put the " - not found! Error" back into the debug message as suggested by Stephen. - Add Stephen's ack.
Changes in v4: - Use full regulator rather than reg wording again in debug message as suggested by Przemyslaw. - Tighten up error handling as suggested by John. - Fix set_enable() as suggested by Stephen. - Add Stephen's ack.
Changes in v3: - Add Stephen's ack. - Introduce new patch to honour optionality of fixed regulator enable GPIO. - Get rid of dummy N/C GPIO work around now as the fixed regulator properly honours optionality of enable GPIO. - Add Stephen's ack.
Changes in v2: - As suggested by Stephen gating the CONFIG_CI_UDC_HAS_HOSTPC define with CONFIG_TEGRA20 rather than duplicating the same into all other SoC type specific header files. - Add Anatolij's ack. - Rename dummy regulator to reg_3v3 as suggested by Stephen. - Keep dummy N/C GPIO to work around bug in U-Boot regulator driver requiring such node despite its binding claiming it being optional. - As suggested by Stephen remove last patch 5/5 colibri_t20: enable dfu also for nand.
Marcel Ziswiler (5): tegra: usb gadget: fix ci udc operation if not hostpc capable simple panel: fix spelling of debug message regulator: fixed: honour optionality of enable gpio colibri_t20: fix display configuration colibri_t20: fix usb operation and controller order
arch/arm/dts/tegra20-colibri.dts | 117 +++++++++++++++++++----------- drivers/power/regulator/fixed.c | 21 ++++-- drivers/video/simple_panel.c | 2 +- include/configs/tegra-common-usb-gadget.h | 2 + 4 files changed, 93 insertions(+), 49 deletions(-)

The Tegra 2 aka T20 is not host PC capable. Therefore gate the define CONFIG_CI_UDC_HAS_HOSTPC in tegra-common-usb-gadget.h in case of CONFIG_TEGRA20.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com Acked-by: Stephen Warren swarren@nvidia.com
---
Changes in v6: None Changes in v5: None Changes in v4: None Changes in v3: - Add Stephen's ack.
Changes in v2: - As suggested by Stephen gating the CONFIG_CI_UDC_HAS_HOSTPC define with CONFIG_TEGRA20 rather than duplicating the same into all other SoC type specific header files.
include/configs/tegra-common-usb-gadget.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/tegra-common-usb-gadget.h b/include/configs/tegra-common-usb-gadget.h index 3e3eeea..2e492c1 100644 --- a/include/configs/tegra-common-usb-gadget.h +++ b/include/configs/tegra-common-usb-gadget.h @@ -10,7 +10,9 @@
#ifndef CONFIG_SPL_BUILD /* USB gadget mode support*/ +#ifndef CONFIG_TEGRA20 #define CONFIG_CI_UDC_HAS_HOSTPC +#endif /* USB mass storage protocol */ #define CONFIG_USB_FUNCTION_MASS_STORAGE /* DFU protocol */

Fix spelling of debug message from cnnot to cannot.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com Acked-by: Anatolij Gustschin agust@denx.de
---
Changes in v6: None Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: - Add Anatolij's ack.
drivers/video/simple_panel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c index b2fe345..baa95f6 100644 --- a/drivers/video/simple_panel.c +++ b/drivers/video/simple_panel.c @@ -42,7 +42,7 @@ static int simple_panel_ofdata_to_platdata(struct udevice *dev) ret = uclass_get_device_by_phandle(UCLASS_REGULATOR, dev, "power-supply", &priv->reg); if (ret) { - debug("%s: Warning: cnnot get power supply: ret=%d\n", + debug("%s: Warning: cannot get power supply: ret=%d\n", __func__, ret); if (ret != -ENOENT) return ret;

According to the binding documentation the fixed regulator enable GPIO is optional. However so far registration thereof failed if no enable GPIO was specified. Fix this by making it entirely optional whether an enable GPIO is used.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com Acked-by: Stephen Warren swarren@nvidia.com
---
Changes in v6: None Changes in v5: - Remove DEBUG define. - Put the " - not found! Error" back into the debug message as suggested by Stephen. - Add Stephen's ack.
Changes in v4: - Use full regulator rather than reg wording again in debug message as suggested by Przemyslaw. - Tighten up error handling as suggested by John. - Fix set_enable() as suggested by Stephen.
Changes in v3: - Introduce new patch to honour optionality of fixed regulator enable GPIO.
Changes in v2: None
drivers/power/regulator/fixed.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/power/regulator/fixed.c b/drivers/power/regulator/fixed.c index 37b8400..62dc47f 100644 --- a/drivers/power/regulator/fixed.c +++ b/drivers/power/regulator/fixed.c @@ -37,11 +37,15 @@ static int fixed_regulator_ofdata_to_platdata(struct udevice *dev) /* Set type to fixed */ uc_pdata->type = REGULATOR_TYPE_FIXED;
- /* Get fixed regulator gpio desc */ + /* Get fixed regulator optional enable GPIO desc */ gpio = &dev_pdata->gpio; ret = gpio_request_by_name(dev, "gpio", 0, gpio, GPIOD_IS_OUT); - if (ret) - debug("Fixed regulator gpio - not found! Error: %d", ret); + if (ret) { + debug("Fixed regulator optional enable GPIO - not found! Error: %d\n", + ret); + if (ret != -ENOENT) + return ret; + }
/* Get optional ramp up delay */ dev_pdata->startup_delay_us = fdtdec_get_uint(gd->fdt_blob, @@ -87,8 +91,9 @@ static bool fixed_regulator_get_enable(struct udevice *dev) { struct fixed_regulator_platdata *dev_pdata = dev_get_platdata(dev);
+ /* Enable GPIO is optional */ if (!dev_pdata->gpio.dev) - return false; + return true;
return dm_gpio_get_value(&dev_pdata->gpio); } @@ -98,8 +103,12 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable) struct fixed_regulator_platdata *dev_pdata = dev_get_platdata(dev); int ret;
- if (!dev_pdata->gpio.dev) - return -ENOSYS; + /* Enable GPIO is optional */ + if (!dev_pdata->gpio.dev) { + if (!enable) + return -ENOSYS; + return 0; + }
ret = dm_gpio_set_value(&dev_pdata->gpio, enable); if (ret) {

Without this patch the following error will be shown:
stdio_add_devices: Video device failed (ret=-22)
As commit ec5507707a1d1e84056a6c864338f95f6118d3ca (video: tegra: Move to using simple-panel and pwm-backlight) states the Colibri T20 needs updating too which this patch finally attempts doing.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com Acked-by: Stephen Warren swarren@nvidia.com
---
Changes in v6: None Changes in v5: None Changes in v4: - Add Stephen's ack.
Changes in v3: - Get rid of dummy N/C GPIO work around now as the fixed regulator properly honours optionality of enable GPIO.
Changes in v2: - Rename dummy regulator to reg_3v3 as suggested by Stephen. - Keep dummy N/C GPIO to work around bug in U-Boot regulator driver requiring such node despite its binding claiming it being optional.
arch/arm/dts/tegra20-colibri.dts | 71 +++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-)
diff --git a/arch/arm/dts/tegra20-colibri.dts b/arch/arm/dts/tegra20-colibri.dts index 777f63e..c198eef 100644 --- a/arch/arm/dts/tegra20-colibri.dts +++ b/arch/arm/dts/tegra20-colibri.dts @@ -21,12 +21,24 @@ };
host1x@50000000 { - status = "okay"; dc@54200000 { - status = "okay"; rgb { status = "okay"; nvidia,panel = <&lcd_panel>; + display-timings { + timing@0 { + /* VESA VGA */ + clock-frequency = <25175000>; + hactive = <640>; + vactive = <480>; + hback-porch = <48>; + hfront-porch = <16>; + hsync-len = <96>; + vback-porch = <31>; + vfront-porch = <11>; + vsync-len = <2>; + }; + }; }; }; }; @@ -61,6 +73,10 @@ }; };
+ pwm@7000a000 { + status = "okay"; + }; + /* * GEN1_I2C: I2C_SDA/SCL on SODIMM pin 194/196 (e.g. RTC on carrier * board) @@ -92,6 +108,18 @@ cd-gpios = <&gpio TEGRA_GPIO(C, 7) GPIO_ACTIVE_LOW>; };
+ backlight: backlight { + compatible = "pwm-backlight"; + + brightness-levels = <255 128 64 32 16 8 4 0>; + default-brightness-level = <6>; + /* BL_ON */ + enable-gpios = <&gpio TEGRA_GPIO(T, 4) GPIO_ACTIVE_HIGH>; + power-supply = <®_3v3>; + /* PWM<A> */ + pwms = <&pwm 0 5000000>; + }; + clocks { compatible = "simple-bus"; #address-cells = <1>; @@ -105,25 +133,28 @@ }; };
- pwm: pwm@7000a000 { - status = "okay"; + lcd_panel: panel { + /* + * edt,et057090dhu: EDT 5.7" LCD TFT + * edt,et070080dh6: EDT 7.0" LCD TFT + */ + compatible = "edt,et057090dhu", "simple-panel"; + + backlight = <&backlight>; };
- lcd_panel: panel { - clock = <25175000>; - xres = <640>; - yres = <480>; - left-margin = <48>; /* horizontal back porch */ - right-margin = <16>; /* horizontal front porch */ - hsync-len = <96>; - lower-margin = <11>; /* vertical front porch */ - upper-margin = <31>; /* vertical back porch */ - vsync-len = <2>; - hsync-active-high; - vsync-active-high; - nvidia,bits-per-pixel = <16>; - nvidia,pwm = <&pwm 0 0>; - nvidia,backlight-enable-gpios = <&gpio TEGRA_GPIO(T, 4) GPIO_ACTIVE_HIGH>; - nvidia,panel-timings = <0 0 0 0>; + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + reg_3v3: regulator@0 { + compatible = "regulator-fixed"; + reg = <0>; + regulator-name = "+V3.3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; }; };

Without this patch the following error will be shown:
Colibri T20 # usb start starting USB... No controllers found
This patch fixes USB operation and also the controller order as the CI UDC driver may only be instantiated on the first aka OTG port.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com Acked-by: Stephen Warren swarren@nvidia.com
---
Changes in v6: - Re-based to latest tegra custodian tree and fixed sdhci0 vs. mmc0 merge conflict.
Changes in v5: None Changes in v4: None Changes in v3: - Add Stephen's ack.
Changes in v2: - As suggested by Stephen remove last patch 5/5 colibri_t20: enable dfu also for nand.
arch/arm/dts/tegra20-colibri.dts | 46 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/arch/arm/dts/tegra20-colibri.dts b/arch/arm/dts/tegra20-colibri.dts index c198eef..89adfb6 100644 --- a/arch/arm/dts/tegra20-colibri.dts +++ b/arch/arm/dts/tegra20-colibri.dts @@ -14,10 +14,10 @@ i2c0 = "/i2c@7000d000"; i2c1 = "/i2c@7000c000"; i2c2 = "/i2c@7000c400"; - usb0 = "/usb@c5008000"; - usb1 = "/usb@c5000000"; - usb2 = "/usb@c5004000"; mmc0 = "/sdhci@c8000600"; + usb0 = "/usb@c5000000"; + usb1 = "/usb@c5004000"; /* on-module only, for ASIX */ + usb2 = "/usb@c5008000"; };
host1x@50000000 { @@ -43,25 +43,6 @@ }; };
- usb@c5000000 { - statuc = "okay"; - dr_mode = "otg"; - }; - - usb@c5004000 { - statuc = "okay"; - /* VBUS_LAN */ - nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) - GPIO_ACTIVE_LOW>; - nvidia,vbus-gpio = <&gpio TEGRA_GPIO(BB, 1) GPIO_ACTIVE_HIGH>; - }; - - usb@c5008000 { - statuc = "okay"; - /* USBH_PEN */ - nvidia,vbus-gpio = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>; - }; - nand-controller@70008000 { nvidia,wp-gpios = <&gpio TEGRA_GPIO(S, 0) GPIO_ACTIVE_HIGH>; nvidia,width = <8>; @@ -102,6 +83,27 @@ clock-frequency = <100000>; };
+ /* EHCI instance 0: USB1_DP/N -> USBC_P/N */ + usb@c5000000 { + status = "okay"; + dr_mode = "otg"; + }; + + /* EHCI instance 1: ULPI -> USB3340 -> AX88772B */ + usb@c5004000 { + status = "okay"; + /* VBUS_LAN */ + nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) GPIO_ACTIVE_HIGH>; + nvidia,vbus-gpio = <&gpio TEGRA_GPIO(BB, 1) GPIO_ACTIVE_HIGH>; + }; + + /* EHCI instance 2: USB3_DP/N -> USBH_P/N */ + usb@c5008000 { + status = "okay"; + /* USBH_PEN */ + nvidia,vbus-gpio = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>; + }; + sdhci@c8000600 { status = "okay"; bus-width = <4>;
participants (1)
-
Marcel Ziswiler