summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrejs Cainikovs <andrejs.cainikovs@toradex.com>2022-12-21 16:04:31 +0100
committerFrancesco Dolcini <francesco.dolcini@toradex.com>2023-01-19 11:10:14 +0000
commit0d61cc650358dd7e136d9e58a358f4adbce84e57 (patch)
tree7e06d366c266bea62c031bade298b0980f54cecc
parent07978d5830e7a52bc98d74f791715b5fb697fdd7 (diff)
apalix-imx8: downstream usb support
Add USB support. Upstream-Status: Inappropriate [other] No iMX8 USB support present in mainline. Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com>
-rw-r--r--arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi67
-rw-r--r--arch/arm/dts/fsl-imx8qm-apalis.dts44
-rw-r--r--configs/apalis-imx8_defconfig15
-rw-r--r--include/configs/apalis-imx8.h15
4 files changed, 139 insertions, 2 deletions
diff --git a/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi b/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
index 956d724979..29dd040240 100644
--- a/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
+++ b/arch/arm/dts/fsl-imx8qm-apalis-u-boot.dtsi
@@ -2,6 +2,32 @@
/*
* Copyright 2019 Toradex AG
*/
+/ {
+ aliases {
+ usbhost1 = &usbh3;
+ usbgadget0 = &usbg1;
+ };
+
+ usbh3: usbh3 {
+ compatible = "Cadence,usb3-host";
+ dr_mode = "host";
+ cdns3,usb = <&usbotg3>;
+ status = "okay";
+ };
+
+ usbg1: usbg1 {
+ compatible = "fsl,imx27-usb-gadget";
+ dr_mode = "peripheral";
+ chipidea,usb = <&usbotg1>;
+ status = "okay";
+ u-boot,dm-pre-proper;
+ };
+};
+
+&{/imx8qm-pm} {
+
+ u-boot,dm-pre-proper;
+};
&mu {
u-boot,dm-pre-proper;
@@ -75,6 +101,22 @@
u-boot,dm-pre-proper;
};
+&pd_conn_usbotg0 {
+ u-boot,dm-pre-proper;
+};
+
+&pd_conn_usbotg0_phy {
+ u-boot,dm-pre-proper;
+};
+
+&pd_conn_usb2 {
+ u-boot,dm-pre-proper;
+};
+
+&pd_conn_usb2_phy {
+ u-boot,dm-pre-proper;
+};
+
&gpio0 {
u-boot,dm-pre-proper;
};
@@ -123,6 +165,31 @@
u-boot,dm-pre-proper;
};
+/* USB */
+&usbmisc1 {
+ u-boot,dm-pre-proper;
+};
+
+&usbphy1 {
+ u-boot,dm-pre-proper;
+};
+
+&usbotg1 {
+ u-boot,dm-pre-proper;
+};
+
+&usbphynop1 {
+ compatible = "cdns,usb3-phy";
+ reg = <0x0 0x5B160000 0x0 0x40000>;
+ #phy-cells = <0>;
+ u-boot,dm-pre-proper;
+};
+
+&usbotg3 {
+ phys = <&usbphynop1>;
+ u-boot,dm-pre-proper;
+};
+
&usdhc1 {
u-boot,dm-pre-proper;
};
diff --git a/arch/arm/dts/fsl-imx8qm-apalis.dts b/arch/arm/dts/fsl-imx8qm-apalis.dts
index 210049ec5f..2900cdae8c 100644
--- a/arch/arm/dts/fsl-imx8qm-apalis.dts
+++ b/arch/arm/dts/fsl-imx8qm-apalis.dts
@@ -19,6 +19,34 @@
bootargs = "console=ttyLP1,115200 earlycon=lpuart32,0x5a070000,115200";
stdout-path = &lpuart1;
};
+
+ regulators {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ reg_usb_otg1_vbus: regulator@0 {
+ compatible = "regulator-fixed";
+ reg = <0>;
+ pinctrl-0 = <&pinctrl_gpio_usbo1_en>;
+ regulator-name = "usb_otg1_vbus";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpio = <&gpio4 3 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+
+ reg_usb_host_vbus: regulator-usb-host-vbus {
+ compatible = "regulator-fixed";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_gpio_usbh_en>;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ enable-active-high;
+ /* Apalis USBH_EN */
+ gpio = <&gpio4 4 GPIO_ACTIVE_HIGH>;
+ };
+ };
};
&iomuxc {
@@ -30,8 +58,6 @@
<&pinctrl_gpio_keys>, <&pinctrl_gpio_pwm0>,
<&pinctrl_gpio_pwm1>, <&pinctrl_gpio_pwm2>,
<&pinctrl_gpio_pwm3>, <&pinctrl_gpio_pwm_bkl>,
- <&pinctrl_gpio_usbh_en>, <&pinctrl_gpio_usbh_oc_n>,
- <&pinctrl_gpio_usbo1_en>, <&pinctrl_gpio_usbo1_oc_n>,
<&pinctrl_lpuart1ctrl>, <&pinctrl_lvds0_i2c0_gpio>,
<&pinctrl_lvds1_i2c0_gpios>, <&pinctrl_mipi_dsi_0_1_en>,
<&pinctrl_mipi_dsi1_gpios>, <&pinctrl_mlb_gpios>,
@@ -587,6 +613,20 @@
status = "okay";
};
+&usbotg1 {
+ vbus-supply = <&reg_usb_otg1_vbus>;
+ srp-disable;
+ hnp-disable;
+ adp-disable;
+ disable-over-current;
+ status = "okay";
+};
+
+&usbotg3 {
+ dr_mode = "host";
+ vbus-supply = <&reg_usb_host_vbus>;
+};
+
/* eMMC */
&usdhc1 {
pinctrl-names = "default", "state_100mhz", "state_200mhz";
diff --git a/configs/apalis-imx8_defconfig b/configs/apalis-imx8_defconfig
index 9861a3c3a3..8d891fdbb2 100644
--- a/configs/apalis-imx8_defconfig
+++ b/configs/apalis-imx8_defconfig
@@ -39,6 +39,8 @@ CONFIG_CMD_FUSE=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_UUID=y
CONFIG_CMD_EXT4_WRITE=y
@@ -70,6 +72,8 @@ CONFIG_FEC_MXC_SHARE_MDIO=y
CONFIG_FEC_MXC_MDIO_BASE=0x5B040000
CONFIG_FEC_MXC=y
CONFIG_MII=y
+CONFIG_PHY=y
+CONFIG_CDNS3_USB_PHY=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX8=y
CONFIG_POWER_DOMAIN=y
@@ -81,5 +85,16 @@ CONFIG_DM_SERIAL=y
CONFIG_FSL_LPUART=y
CONFIG_DM_THERMAL=y
CONFIG_IMX_SCU_THERMAL=y
+CONFIG_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_CDNS3=y
+CONFIG_USB_CDNS3_GADGET=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="FSL"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_USB_PORT_AUTO=y
CONFIG_OF_LIBFDT_OVERLAY=y
# CONFIG_EFI_LOADER is not set
diff --git a/include/configs/apalis-imx8.h b/include/configs/apalis-imx8.h
index 3e7938ae4d..1d05bcae99 100644
--- a/include/configs/apalis-imx8.h
+++ b/include/configs/apalis-imx8.h
@@ -36,6 +36,7 @@
func(MMC, mmc, 1) \
func(MMC, mmc, 2) \
func(MMC, mmc, 0) \
+ func(USB, usb, 0) \
func(DHCP, dhcp, na)
#include <config_distro_bootcmd.h>
@@ -77,4 +78,18 @@
/* Generic Timer Definitions */
#define COUNTER_FREQUENCY 8000000 /* 8MHz */
+/* USB Config */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_USBD_HS
+#endif
+
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
+
+/* USB OTG controller configs */
+#ifdef CONFIG_USB_EHCI_HCD
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_ASIX
+#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
+#endif
+
#endif /* __APALIS_IMX8_H */