This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM5708: USB as ethernet port in custom AM5708 board

Part Number: AM5708
Other Parts Discussed in Thread: LP8733, DRA72

Tool/software: Linux

Hi:

I have a custom AM5708 based board and want to use USB2 as an ethernet port.

I have configured the pinmux in u-boot accordingly.

How to configure in dts and defconfig?

Billa

  • Hi Bin:

    I configured USB according to what is explained in the videos.

    I dont see any usb error messages during linux startup.

    After "modprobe g_ether", directory "/sys/class/udc" is empty,

    and "lsmod" shows "g_ether" and other usb related modules

    such as "libcomposite".

    See attached files.

    Billa

    root@am57xx-evm:~# ./chkusb.sh 
    chkusb.sh Version 0.2.4
    Linux am57xx-evm 4.14.40-rt29-gd5443cbd3b #1 SMP PREEMPT RT Wed Oct 24 12:46:39 CEST 2018 armv7l GNU/Linux
    USB initialization failed
    Warning: CONFIG_USB_OTG undefined, which is required for DRD mode.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-plat-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@48890000: otg, disabled
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@488d0000: peripheral, okay
    
    Gadget Kernel Config: g_zero is enabled
    Gadget Kernel Config: g_audio is enabled
    Gadget Kernel Config: g_ether is enabled
    Gadget Kernel Config: g_ncm is enabled
    Gadget Kernel Config: g_mass_storage is enabled
    Gadget Kernel Config: g_serial is enabled
    Gadget Kernel Config: g_printer is enabled
    gadget driver loaded: (none)
    
    The list of USB gadget drivers installed:
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/:
    function/
    legacy/
    libcomposite.ko
    udc/
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/function:
    u_audio.ko
    u_ether.ko
    u_serial.ko
    usb_f_acm.ko
    usb_f_ecm.ko
    usb_f_ecm_subset.ko
    usb_f_eem.ko
    usb_f_fs.ko
    usb_f_hid.ko
    usb_f_mass_storage.ko
    usb_f_midi.ko
    usb_f_ncm.ko
    usb_f_obex.ko
    usb_f_printer.ko
    usb_f_rndis.ko
    usb_f_serial.ko
    usb_f_ss_lb.ko
    usb_f_uac1.ko
    usb_f_uac2.ko
    usb_f_uvc.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/legacy:
    g_acm_ms.ko
    g_audio.ko
    g_cdc.ko
    g_dbgp.ko
    g_ether.ko
    g_ffs.ko
    g_hid.ko
    g_mass_storage.ko
    g_midi.ko
    g_multi.ko
    g_ncm.ko
    g_printer.ko
    g_serial.ko
    g_webcam.ko
    g_zero.ko
    gadgetfs.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/udc:
    udc-core.ko
    root@am57xx-evm:~#  
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# modprobe g_ether
    [  104.674081] udc-core: couldn't find an available UDC - added [g_ether] to list of pending drivers
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# ./chkusb.sh 
    chkusb.sh Version 0.2.4
    Linux am57xx-evm 4.14.40-rt29-gd5443cbd3b #1 SMP PREEMPT RT Wed Oct 24 12:46:39 CEST 2018 armv7l GNU/Linux
    USB initialization failed
    Warning: CONFIG_USB_OTG undefined, which is required for DRD mode.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-plat-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@48890000: otg, disabled
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@488d0000: peripheral, okay
    
    Gadget Kernel Config: g_zero is enabled
    Gadget Kernel Config: g_audio is enabled
    Gadget Kernel Config: g_ether is enabled
    Gadget Kernel Config: g_ncm is enabled
    Gadget Kernel Config: g_mass_storage is enabled
    Gadget Kernel Config: g_serial is enabled
    Gadget Kernel Config: g_printer is enabled
    gadget driver loaded: (none)
    
    The list of USB gadget drivers installed:
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/:
    function/
    legacy/
    libcomposite.ko
    udc/
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/function:
    u_audio.ko
    u_ether.ko
    u_serial.ko
    usb_f_acm.ko
    usb_f_ecm.ko
    usb_f_ecm_subset.ko
    usb_f_eem.ko
    usb_f_fs.ko
    usb_f_hid.ko
    usb_f_mass_storage.ko
    usb_f_midi.ko
    usb_f_ncm.ko
    usb_f_obex.ko
    usb_f_printer.ko
    usb_f_rndis.ko
    usb_f_serial.ko
    usb_f_ss_lb.ko
    usb_f_uac1.ko
    usb_f_uac2.ko
    usb_f_uvc.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/legacy:
    g_acm_ms.ko
    g_audio.ko
    g_cdc.ko
    g_dbgp.ko
    g_ether.ko
    g_ffs.ko
    g_hid.ko
    g_mass_storage.ko
    g_midi.ko
    g_multi.ko
    g_ncm.ko
    g_printer.ko
    g_serial.ko
    g_webcam.ko
    g_zero.ko
    gadgetfs.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/udc:
    udc-core.ko
    root@am57xx-evm:~# 
    
    
    /*
     * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2 as
     * published by the Free Software Foundation.
     */
    
    #include "dra72-evm-common.dtsi"
    #include "dra72x-mmc-iodelay.dtsi"
    #include <dt-bindings/gpio/gpio.h>
    
    / {
    	compatible = "ti,dra718-evm", "ti,dra718", "ti,dra722", "ti,dra72", "ti,dra7";
    	model = "TI DRA718 EVM";
    
    	memory {
    		device_type = "memory";
    		reg = <0x0 0x80000000 0x0 0x20000000>; /* 512MB */
    	};
    
    	reserved-memory {
    		#address-cells = <2>;
    		#size-cells = <2>;
    		ranges;
    
    		ipu2_memory_region: ipu2-memory@95800000 {
    			compatible = "shared-dma-pool";
    			reg = <0x0 0x95800000 0x0 0x3800000>;
    			reusable;
    			status = "okay";
    		};
    
    		dsp1_memory_region: dsp1-memory@99000000 {
    			compatible = "shared-dma-pool";
    			reg = <0x0 0x99000000 0x0 0x4000000>;
    			reusable;
    			status = "okay";
    		};
    
    		ipu1_memory_region: ipu1-memory@9d000000 {
    			compatible = "shared-dma-pool";
    			reg = <0x0 0x9d000000 0x0 0x2000000>;
    			reusable;
    			status = "okay";
    		};
    	};
    
    	vpo_sd_1v8_3v3: gpio-regulator-TPS74801 {
    		compatible = "regulator-gpio";
    		regulator-name = "vddshv8";
    		regulator-okmin-microvolt = <1800000>;
    		regulator-max-microvolt = <3000000>;
    		regulator-boot-on;
    		vin-supply = <&evm_5v0>;
    		gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>;
    		states = <1800000 0x0
    			  3000000 0x1>;
    	};
    
    	evm_1v8_sw: fixedregulator-evm_1v8 {
    		compatible = "regulator-fixed";
    		regulator-name = "evm_1v8";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		vin-supply = <&lp8732_buck0_reg>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	poweroff: gpio-poweroff {
    		compatible = "gpio-poweroff";
    		gpios = <&gpio7 30 GPIO_ACTIVE_HIGH>;
    		input;
    	};
    };
    
    &i2c1 {
    	status = "disabled";
    	clock-frequency = <400000>;
    
    	lp8733: lp8733@60 {
    		compatible = "ti,lp8733";
    		reg = <0x60>;
    		buck0-in-supply =<&vsys_3v3>;
    		buck1-in-supply =<&vsys_3v3>;
    		ldo0-in-supply =<&evm_5v0>;
    		ldo1-in-supply =<&evm_5v0>;
    
    		lp8733_regulators: regulators {
    			lp8733_buck0_reg: buck0 {
    				/* FB_B0 -> LP8733-BUCK1 - VPO_S1_AVS - VDD_CORE_AVS (core, mpu, gpu) */
    				regulator-name = "lp8733-buck0";
    				regulator-min-microvolt = <850000>;
    				regulator-max-microvolt = <1250000>;
    				regulator-always-on;
    				regulator-boot-on;
    			};
    
    			lp8733_buck1_reg: buck1 {
    				/* FB_B1 -> LP8733-BUCK2 - VPO_S2_AVS - VDD_DSP_AVS (DSP/eve/iva) */
    				regulator-name = "lp8733-buck1";
    				regulator-min-microvolt = <850000>;
    				regulator-max-microvolt = <1250000>;
    				regulator-boot-on;
    				regulator-always-on;
    			};
    
    			lp8733_ldo0_reg: ldo0 {
    				/* LDO0 -> LP8733-LDO1 - VPO_L1_3V3 - VDDSHV8 (optional) */
    				regulator-name = "lp8733-ldo0";
    				regulator-min-microvolt = <3300000>;
    				regulator-max-microvolt = <3300000>;
    			};
    
    			lp8733_ldo1_reg: ldo1 {
    				/* LDO1 -> LP8733-LDO2 - VPO_L2_3V3 - VDDA_USB3V3 */
    				regulator-name = "lp8733-ldo1";
    				regulator-min-microvolt = <3300000>;
    				regulator-max-microvolt = <3300000>;
    				regulator-always-on;
    				regulator-boot-on;
    			};
    		};
    	};
    
    	lp8732: lp8732@61 {
    		compatible = "ti,lp8732";
    		reg = <0x61>;
    
    		buck0-in-supply =<&vsys_3v3>;
    		buck1-in-supply =<&vsys_3v3>;
    		ldo0-in-supply =<&vsys_3v3>;
    		ldo1-in-supply =<&vsys_3v3>;
    
    		lp8732_regulators: regulators {
    			lp8732_buck0_reg: buck0 {
    				/* FB_B0 -> LP8732-BUCK1 - VPO_S3_1V8 - VDDS_1V8 */
    				regulator-name = "lp8732-buck0";
    				regulator-min-microvolt = <1800000>;
    				regulator-max-microvolt = <1800000>;
    				regulator-always-on;
    				regulator-boot-on;
    			};
    
    			lp8732_buck1_reg: buck1 {
    				/* FB_B1 -> LP8732-BUCK2 - VPO_S4_DDR - VDD_DDR_1V35 */
    				regulator-name = "lp8732-buck1";
    				regulator-min-microvolt = <1350000>;
    				regulator-max-microvolt = <1350000>;
    				regulator-boot-on;
    				regulator-always-on;
    			};
    
    			lp8732_ldo0_reg: ldo0 {
    				/* LDO0 -> LP8732-LDO1 - VPO_L3_1V8 - VDA_1V8_PLL */
    				regulator-name = "lp8732-ldo0";
    				regulator-min-microvolt = <1800000>;
    				regulator-max-microvolt = <1800000>;
    				regulator-boot-on;
    				regulator-always-on;
    			};
    
    			lp8732_ldo1_reg: ldo1 {
    				/* LDO1 -> LP8732-LDO2 - VPO_L4_1V8 - VDA_1V8_PHY */
    				regulator-name = "lp8732-ldo1";
    				regulator-min-microvolt = <1800000>;
    				regulator-max-microvolt = <1800000>;
    				regulator-always-on;
    				regulator-boot-on;
    			};
    		};
    	};
    };
    
    &csi2_cam0 {
    	status = "disabled";
    	clock-lanes = <0>;
    	data-lanes = <1 2>;
    	remote-endpoint = <&csi2_phy0>;
    };
    
    &pcf_lcd {
    	interrupt-parent = <&gpio7>;
    	interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
    };
    
    &pcf_gpio_21 {
    	interrupt-parent = <&gpio7>;
    	interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
    };
    
    &pcf_hdmi {
    	p0 {
    		/*
    		 * PM_OEn to High: Disable routing I2C3 to PM_I2C
    		 * With this PM_SEL(p3) should not matter
    		 */
    		gpio-hog;
    		gpios = <0 GPIO_ACTIVE_LOW>;
    		output-high;
    		line-name = "pm_oe_n";
    	};
    };
    
    &mmc1 {
    	status = "disabled";
    	pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104";
    	pinctrl-0 = <&mmc1_pins_default>;
    	pinctrl-1 = <&mmc1_pins_hs>;
    	pinctrl-2 = <&mmc1_pins_sdr12>;
    	pinctrl-3 = <&mmc1_pins_sdr25>;
    	pinctrl-4 = <&mmc1_pins_sdr50>;
    	pinctrl-5 = <&mmc1_pins_ddr50_rev20 &mmc1_iodelay_ddr50_conf>;
    	pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev20_conf>;
    	vqmmc-supply = <&vpo_sd_1v8_3v3>;
    };
    
    &mmc2 {
    	status = "okay";
    	pinctrl-names = "default", "hs", "ddr_1_8v";
    	pinctrl-0 = <&mmc2_pins_default>;
    	pinctrl-1 = <&mmc2_pins_hs>;
    	pinctrl-2 = <&mmc2_pins_ddr_rev20 &mmc2_iodelay_ddr_conf>;
    	vmmc-supply = <&evm_3v3_sw>;
    	vqmmc-supply = <&evm_3v3_sw>;
    };
    
    &davinci_mdio {
    	reset-gpios = <&gpio4 31 GPIO_ACTIVE_LOW>;
    	reset-delay-us = <2>;
    
    	phy0:ethernet-phy@0 {
    		reg = <0>;
    	};
    };
    
    &mac {
    	slaves = <1>;
    	status = "okay";
    	sram = <&ocmcram1>;
    };
    
    &cpsw_emac0 {
    
    	phy-handle = <&phy0>;
    	phy-mode = "mii";
    	status = "okay";
    };
    
    &cpsw_emac1 {
    	status = "disabled";
    };
    
    
    /* No Sata on this device */
    &sata_phy {
    	status = "disabled";
    };
    
    &sata {
    	status = "disabled";
    };
    
    /* No RTC on this device */
    &rtc {
    	status = "disabled";
    };
    
    &usb2_phy1 {
    	status = "disabled";
    	phy-supply = <&lp8733_ldo1_reg>;
    };
    
    &usb2_phy2 {
    	status = "okay";
    	phy-supply = <&lp8733_ldo1_reg>;
    };
    
    &dss {
    	status = "disabled";
    	/* Supplied by VDA_1V8_PLL */
    	vdda_video-supply = <&lp8732_ldo0_reg>;
    };
    
    &hdmi {
    	/* Supplied by VDA_1V8_PHY */
    	vdda_video-supply = <&lp8732_ldo1_reg>;
    };
    
    &ipu2 {
    	status = "okay";
    	memory-region = <&ipu2_memory_region>;
    };
    
    &ipu1 {
    	status = "okay";
    	memory-region = <&ipu1_memory_region>;
    };
    
    &dsp1 {
    	status = "okay";
    	memory-region = <&dsp1_memory_region>;
    };
    
    &uart3 {
    	status = "okay";
    };
    
    &i2c5 {
    	status = "disabled";
    };
    
    &uart1 {
    	status = "disabled";
    };
    
    &elm {
    	status = "disabled";
    };
    
    &usb1 {
    	status = "disabled";
    };
    
    &usb2 {
    	status = "okay";
    };
    
    &dcan1 {
    	status = "disabled";
    };
    
    &atl {
    	status = "disabled";
    };
    
    &pcie1_rc {	
    	status = "disabled";
    };
    
    &mcasp3 {
    	status = "disabled";
    };
    
    #include "am57xx-evm-cmem-am571x.dtsi"
    
    
    
    
    /*
     * Copyright (C) 2014-2016 Texas Instruments Incorporated - http://www.ti.com/
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2 as
     * published by the Free Software Foundation.
     */
    /dts-v1/;
    
    #include "dra72x.dtsi"
    #include "dra7-ipu-dsp-common.dtsi"
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/clk/ti-dra7-atl.h>
    
    / {
    	compatible = "ti,dra72-evm", "ti,dra722", "ti,dra72", "ti,dra7";
    
    	aliases {
    		display0 = &hdmi0;
    	};
    
    	chosen {
    		stdout-path = &uart3;
    	};
    
    	evm_12v0: fixedregulator-evm12v0 {
    		/* main supply */
    		compatible = "regulator-fixed";
    		regulator-name = "evm_12v0";
    		regulator-min-microvolt = <12000000>;
    		regulator-max-microvolt = <12000000>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	evm_5v0: fixedregulator-evm5v0 {
    		/* Output 1 of TPS43351QDAPRQ1 on dra72-evm */
    		/* Output 1 of LM5140QRWGTQ1 on dra71-evm */
    		compatible = "regulator-fixed";
    		regulator-name = "evm_5v0";
    		regulator-min-microvolt = <5000000>;
    		regulator-max-microvolt = <5000000>;
    		vin-supply = <&evm_12v0>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	evm_3v6: fixedregulator-evm_3v6 {
    		compatible = "regulator-fixed";
    		regulator-name = "evm_3v6";
    		regulator-min-microvolt = <3600000>;
    		regulator-max-microvolt = <3600000>;
    		vin-supply = <&evm_5v0>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	vsys_3v3: fixedregulator-vsys3v3 {
    		/* Output 2 of TPS43351QDAPRQ1 on dra72-evm */
    		/* Output 2 of LM5140QRWGTQ1 on dra71-evm */
    		compatible = "regulator-fixed";
    		regulator-name = "vsys_3v3";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&evm_12v0>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	evm_3v3_sw: fixedregulator-evm_3v3 {
    		/* TPS22965DSG */
    		compatible = "regulator-fixed";
    		regulator-name = "evm_3v3";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&vsys_3v3>;
    		regulator-always-on;
    		regulator-boot-on;
    	};
    
    	aic_dvdd: fixedregulator-aic_dvdd {
    		/* TPS77018DBVT */
    		compatible = "regulator-fixed";
    		regulator-name = "aic_dvdd";
    		vin-supply = <&evm_3v3_sw>;
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    	};
    
    	evm_3v3_sd: fixedregulator-sd {
    		compatible = "regulator-fixed";
    		regulator-name = "evm_3v3_sd";
    		regulator-min-microvolt = <3300000>;
    		regulator-max-microvolt = <3300000>;
    		vin-supply = <&evm_3v3_sw>;
    		enable-active-high;
    		gpio = <&pcf_gpio_21 5 GPIO_ACTIVE_HIGH>;
    	};
    
    	extcon_usb1: extcon_usb1 {
    		compatible = "linux,extcon-usb-gpio";
    		id-gpio = <&pcf_gpio_21 1 GPIO_ACTIVE_HIGH>;
    		status = "disabled";
    	};
    
    	extcon_usb2: extcon_usb2 {
    		vbus-gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;
    	};
    
    	hdmi0: connector {
    		compatible = "hdmi-connector";
    		label = "hdmi";
    
    		type = "a";
    
    		port {
    			hdmi_connector_in: endpoint {
    				remote-endpoint = <&tpd12s015_out>;
    			};
    		};
    	};
    
    	tpd12s015: encoder {
    		compatible = "ti,tpd12s015";
    
    		gpios = <&pcf_hdmi 4 GPIO_ACTIVE_HIGH>,	/* P4, CT CP HPD */
    			<&pcf_hdmi 5 GPIO_ACTIVE_HIGH>,	/* P5, LS OE */
    			<&gpio7 12 GPIO_ACTIVE_HIGH>;	/* gpio7_12/sp1_cs2, HPD */
    
    		ports {
    			#address-cells = <1>;
    			#size-cells = <0>;
    
    			port@0 {
    				reg = <0>;
    
    				tpd12s015_in: endpoint {
    					remote-endpoint = <&hdmi_out>;
    				};
    			};
    
    			port@1 {
    				reg = <1>;
    
    				tpd12s015_out: endpoint {
    					remote-endpoint = <&hdmi_connector_in>;
    				};
    			};
    		};
    	};
    
    	sound0: sound0 {
    		compatible = "simple-audio-card";
    		simple-audio-card,name = "DRA7xx-EVM";
    		simple-audio-card,widgets =
    			"Headphone", "Headphone Jack",
    			"Line", "Line Out",
    			"Microphone", "Mic Jack",
    			"Line", "Line In";
    		simple-audio-card,routing =
    			"Headphone Jack",       "HPLOUT",
    			"Headphone Jack",       "HPROUT",
    			"Line Out",		"LLOUT",
    			"Line Out",		"RLOUT",
    			"MIC3L",		"Mic Jack",
    			"MIC3R",		"Mic Jack",
    			"Mic Jack",		"Mic Bias",
    			"LINE1L",               "Line In",
    			"LINE1R",               "Line In";
    		simple-audio-card,format = "dsp_b";
    		simple-audio-card,bitclock-master = <&sound0_master>;
    		simple-audio-card,frame-master = <&sound0_master>;
    		simple-audio-card,bitclock-inversion;
    
    		sound0_master: simple-audio-card,cpu {
    			sound-dai = <&mcasp3>;
    			system-clock-frequency = <5644800>;
    		};
    
    		simple-audio-card,codec {
    			sound-dai = <&tlv320aic3106>;
    			clocks = <&atl_clkin2_ck>;
    		};
    	};
    
    	clk_ov10633_fixed: clk_ov10633_fixed {
    		#clock-cells = <0>;
    		compatible = "fixed-clock";
    		clock-frequency = <24000000>;
    	};
    
    	vmmcwl_fixed: fixedregulator-mmcwl {
    		compatible = "regulator-fixed";
    		regulator-name = "vmmcwl_fixed";
    		regulator-min-microvolt = <1800000>;
    		regulator-max-microvolt = <1800000>;
    		gpio = <&gpio5 8 GPIO_ACTIVE_HIGH>;
    		enable-active-high;
    	};
    };
    
    &dra7_pmx_core {
    	dcan1_pins_default: dcan1_pins_default {
    		pinctrl-single,pins = <
    			DRA7XX_CORE_IOPAD(0x37d0, PIN_OUTPUT_PULLUP | MUX_MODE0) /* dcan1_tx */
    			DRA7XX_CORE_IOPAD(0x3818, PULL_UP | MUX_MODE1)	/* wakeup0.dcan1_rx */
    		>;
    	};
    
    	dcan1_pins_sleep: dcan1_pins_sleep {
    		pinctrl-single,pins = <
    			DRA7XX_CORE_IOPAD(0x37d0, MUX_MODE15 | PULL_UP)	/* dcan1_tx.off */
    			DRA7XX_CORE_IOPAD(0x3818, MUX_MODE15 | PULL_UP)	/* wakeup0.off */
    		>;
    	};
    };
    
    &i2c1 {
    	status = "disabled";
    	clock-frequency = <400000>;
    
    	pcf_lcd: gpio@20 {
    		compatible = "nxp,pcf8575";
    		reg = <0x20>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    	};
    
    	pcf_gpio_21: gpio@21 {
    		compatible = "ti,pcf8575", "nxp,pcf8575";
    		reg = <0x21>;
    		lines-initial-states = <0x1408>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		interrupt-controller;
    		#interrupt-cells = <2>;
    	};
    
    	tlv320aic3106: tlv320aic3106@19 {
    		#sound-dai-cells = <0>;
    		compatible = "ti,tlv320aic3106";
    		reg = <0x19>;
    		adc-settle-ms = <40>;
    		ai3x-micbias-vg = <1>;		/* 2.0V */
    		status = "disabled";
    
    		/* Regulators */
    		AVDD-supply = <&evm_3v3_sw>;
    		IOVDD-supply = <&evm_3v3_sw>;
    		DRVDD-supply = <&evm_3v3_sw>;
    		DVDD-supply = <&aic_dvdd>;
    	};
    };
    
    &i2c5 {
    	status = "disabled";
    	clock-frequency = <400000>;
    
    	pcf_hdmi: pcf8575@26 {
    		compatible = "ti,pcf8575", "nxp,pcf8575";
    		reg = <0x26>;
    		gpio-controller;
    		#gpio-cells = <2>;
    		/*
    		 * initial state is used here to keep the mdio interface
    		 * selected on RU89 through SEL_VIN4_MUX_S0, VIN2_S1 and
    		 * VIN2_S0 driven high otherwise Ethernet stops working
    		 * VIN6_SEL_S0 is low, thus selecting McASP3 over VIN6
    		 */
    		lines-initial-states = <0x0f2b>;
    
    		p1 {
    			/* vin6_sel_s0: high: VIN6, low: audio */
    			gpio-hog;
    			gpios = <1 GPIO_ACTIVE_HIGH>;
    			output-low;
    			line-name = "vin6_sel_s0";
    		};
    	};
    
    	ov10633@37 {
    		compatible = "ovti,ov10633";
    		reg = <0x37>;
    
    		clocks = <&clk_ov10633_fixed>;
    		clock-names = "xvclk";
    
    		mux-gpios = <&pcf_hdmi 2	GPIO_ACTIVE_HIGH>, /* VIN2_S0 */
    			    <&pcf_hdmi 6	GPIO_ACTIVE_LOW>; /* VIN2_S2 */
    		port {
    			onboardLI: endpoint {
    				remote-endpoint = <&vin2a>;
    				hsync-active = <1>;
    				vsync-active = <1>;
    				pclk-sample = <0>;
    			};
    		};
    	};
    
    	gpio_csi2_adap: tca6416@20 {
    		status = "disabled";
    		compatible = "ti,tca6416";
    		reg = <0x20>;
    		gpio-controller;
    		#gpio-cells = <2>;
    	};
    
    	ov490@24 {
    		compatible = "ovti,ov490";
    		reg = <0x24>;
    
    		mux-gpios = <&gpio_csi2_adap 0	GPIO_ACTIVE_LOW>,
    						/* CSI2_SEL_I2C_CLK */
    			    <&gpio_csi2_adap 1	GPIO_ACTIVE_HIGH>,
    						/* CSI2_SEL_REF_CLK */
    			    <&gpio_csi2_adap 3	GPIO_ACTIVE_HIGH>,
    						/* CSI2_CAM0_RESETn */
    			    <&gpio_csi2_adap 4	GPIO_ACTIVE_LOW>;
    						/* CSI2_CAM0_PWR_DWN */
    		port {
    			csi2_cam0: endpoint@0 {
    				clock-lanes = <0>;
    				data-lanes = <1 2 3 4>;
    				remote-endpoint = <&csi2_phy0>;
    			};
    		};
    	};
    };
    
    &uart1 {
    	status = "disabled";
    	interrupts-extended = <&crossbar_mpu GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
    			      <&dra7_pmx_core 0x3e0>;
    };
    
    &elm {
    	status = "disabled";
    };
    
    &gpmc {
    	/*
    	 * For the existing IOdelay configuration via U-Boot we don't
    	 * support NAND on dra72-evm. Keep it disabled. Enabling it
    	 * requires a different configuration by U-Boot.
    	 */
    	status = "disabled";
    	ranges = <0 0 0x08000000 0x01000000>;	/* minimum GPMC partition = 16MB */
    	nand@0,0 {
    		/* To use NAND, DIP switch SW5 must be set like so:
    		 * SW5.1 (NAND_SELn) = ON (LOW)
    		 * SW5.9 (GPMC_WPN) = OFF (HIGH)
    		 */
    		compatible = "ti,omap2-nand";
    		reg = <0 0 4>;		/* device IO registers */
    		interrupt-parent = <&gpmc>;
    		interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
    			     <1 IRQ_TYPE_NONE>;	/* termcount */
    		rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 pin */
    		ti,nand-xfer-type = "prefetch-dma";
    		ti,nand-ecc-opt = "bch8";
    		ti,elm-id = <&elm>;
    		nand-bus-width = <16>;
    		gpmc,device-width = <2>;
    		gpmc,sync-clk-ps = <0>;
    		gpmc,cs-on-ns = <0>;
    		gpmc,cs-rd-off-ns = <80>;
    		gpmc,cs-wr-off-ns = <80>;
    		gpmc,adv-on-ns = <0>;
    		gpmc,adv-rd-off-ns = <60>;
    		gpmc,adv-wr-off-ns = <60>;
    		gpmc,we-on-ns = <10>;
    		gpmc,we-off-ns = <50>;
    		gpmc,oe-on-ns = <4>;
    		gpmc,oe-off-ns = <40>;
    		gpmc,access-ns = <40>;
    		gpmc,wr-access-ns = <80>;
    		gpmc,rd-cycle-ns = <80>;
    		gpmc,wr-cycle-ns = <80>;
    		gpmc,bus-turnaround-ns = <0>;
    		gpmc,cycle2cycle-delay-ns = <0>;
    		gpmc,clk-activation-ns = <0>;
    		gpmc,wr-data-mux-bus-ns = <0>;
    		/* MTD partition table */
    		/* All SPL-* partitions are sized to minimal length
    		 * which can be independently programmable. For
    		 * NAND flash this is equal to size of erase-block */
    		#address-cells = <1>;
    		#size-cells = <1>;
    		partition@0 {
    			label = "NAND.SPL";
    			reg = <0x00000000 0x000020000>;
    		};
    		partition@1 {
    			label = "NAND.SPL.backup1";
    			reg = <0x00020000 0x00020000>;
    		};
    		partition@2 {
    			label = "NAND.SPL.backup2";
    			reg = <0x00040000 0x00020000>;
    		};
    		partition@3 {
    			label = "NAND.SPL.backup3";
    			reg = <0x00060000 0x00020000>;
    		};
    		partition@4 {
    			label = "NAND.u-boot-spl-os";
    			reg = <0x00080000 0x00040000>;
    		};
    		partition@5 {
    			label = "NAND.u-boot";
    			reg = <0x000c0000 0x00100000>;
    		};
    		partition@6 {
    			label = "NAND.u-boot-env";
    			reg = <0x001c0000 0x00020000>;
    		};
    		partition@7 {
    			label = "NAND.u-boot-env.backup1";
    			reg = <0x001e0000 0x00020000>;
    		};
    		partition@8 {
    			label = "NAND.kernel";
    			reg = <0x00200000 0x00800000>;
    		};
    		partition@9 {
    			label = "NAND.file-system";
    			reg = <0x00a00000 0x0f600000>;
    		};
    	};
    };
    
    &omap_dwc3_1 {
    	extcon = <&extcon_usb1>;
    };
    
    &omap_dwc3_2 {
    	extcon = <&extcon_usb2>;
    };
    
    &usb1 {
    	dr_mode = "otg";
    	extcon = <&extcon_usb1>;
    };
    
    &usb2 {
    	dr_mode = "peripheral";
    	extcon = <&extcon_usb2>;
    };
    
    &mmc1 {
    	status = "disabled";
    	pinctrl-names = "default";
    	pinctrl-0 = <&mmc1_pins_default>;
    	vmmc-supply = <&evm_3v3_sd>;
    	bus-width = <4>;
    	/*
    	 * SDCD signal is not being used here - using the fact that GPIO mode
    	 * is a viable alternative
    	 */
    	cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>;
    	max-frequency = <192000000>;
    };
    
    &mmc2 {	
    	status = "okay";
    	bus-width = <8>;
    	ti,non-removable;
    	max-frequency = <96000000>;
    	no-1-8-v;
    	/delete-property/ mmc-hs200-1_8v;
    };
    
    &mac {
    	status = "okay";
    };
    
    &dcan1 {
    	status = "disabled";
    	pinctrl-names = "default", "sleep", "active";
    	pinctrl-0 = <&dcan1_pins_sleep>;
    	pinctrl-1 = <&dcan1_pins_sleep>;
    	pinctrl-2 = <&dcan1_pins_default>;
    };
    
    &qspi {
    	status = "okay";
    
    	spi-max-frequency = <15000000>;
    	m25p80@0 {
    		compatible = "s25fl256s1";
    		spi-max-frequency = <15000000>;
    		reg = <0>;
    		spi-tx-bus-width = <1>;
    		spi-rx-bus-width = <4>;
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		/* MTD partition table.
    		 * The ROM checks the first four physical blocks
    		 * for a valid file to boot and the flash here is
    		 * 64KiB block size.
    		 */
    		partition@0 {
    			label = "QSPI.SPL";
    			reg = <0x00000000 0x000010000>;
    		};
    		partition@1 {
    			label = "QSPI.SPL.backup1";
    			reg = <0x00010000 0x00010000>;
    		};
    		partition@2 {
    			label = "QSPI.SPL.backup2";
    			reg = <0x00020000 0x00010000>;
    		};
    		partition@3 {
    			label = "QSPI.SPL.backup3";
    			reg = <0x00030000 0x00010000>;
    		};
    		partition@4 {
    			label = "QSPI.u-boot";
    			reg = <0x00040000 0x00100000>;
    		};
    		partition@5 {
    			label = "QSPI.u-boot-spl-os";
    			reg = <0x00140000 0x00080000>;
    		};
    		partition@6 {
    			label = "QSPI.u-boot-env";
    			reg = <0x001c0000 0x00010000>;
    		};
    		partition@7 {
    			label = "QSPI.u-boot-env.backup1";
    			reg = <0x001d0000 0x0010000>;
    		};
    		partition@8 {
    			label = "QSPI.kernel";
    			reg = <0x001e0000 0x0800000>;
    		};
    		partition@9 {
    			label = "QSPI.file-system";
    			reg = <0x009e0000 0x01620000>;
    		};
    	};
    };
    
    &gpu {
    	status = "disabled";
    };
    
    &dss {
    	status = "disabled";
    };
    
    &bb2d {
    	status = "disabled";
    };
    
    &hdmi {
    	status = "disabled";
    
    	port {
    		hdmi_out: endpoint {
    			remote-endpoint = <&tpd12s015_in>;
    		};
    	};
    };
    
    &vip1 {
    	status = "disabled";
    };
    
    &vin2a {
    	status = "disabled";
    	endpoint@0 {
    		slave-mode;
    		remote-endpoint = <&onboardLI>;
    	};
    };
    
    &cal {
    	status = "disabled";
    };
    
    &csi2_0 {
    	csi2_phy0: endpoint@0 {
    		slave-mode;
    		remote-endpoint = <&csi2_cam0>;
    	};
    };
    
    &atl {
    	assigned-clocks = <&abe_dpll_sys_clk_mux>,
    			  <&atl_gfclk_mux>,
    			  <&dpll_abe_ck>,
    			  <&dpll_abe_m2x2_ck>,
    			  <&atl_clkin2_ck>;
    	assigned-clock-parents = <&sys_clkin2>, <&dpll_abe_m2_ck>;
    	assigned-clock-rates = <0>, <0>, <180633600>, <361267200>, <5644800>;
    
    	status = "disabled";
    
    	atl2 {
    		bws = <DRA7_ATL_WS_MCASP2_FSX>;
    		aws = <DRA7_ATL_WS_MCASP3_FSX>;
    	};
    };
    
    &mcasp3 {
    	#sound-dai-cells = <0>;
    
    	assigned-clocks = <&mcasp3_ahclkx_mux>;
    	assigned-clock-parents = <&atl_clkin2_ck>;
    
    	status = "disabled";
    
    	op-mode = <0>;          /* MCASP_IIS_MODE */
    	tdm-slots = <2>;
    	/* 4 serializer */
    	serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
    		1 2 0 0
    	>;
    	tx-num-evt = <32>;
    	rx-num-evt = <32>;
    };
    
    &pcie1_rc {
    	status = "disabled";
    };
    
    Starting kernel ...
    
    [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.14.40-rt29-gd5443cbd3b (bridge@PC932) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)) #1 SMP PREEMPT RT Wed Oct 24 12:46:39 CEST 2018
    [    0.000000] CPU: ARMv7 Processor [412fc0f2] revision 2 (ARMv7), cr=30c5387d
    [    0.000000] CPU: div instructions available: patching division code
    [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
    [    0.000000] OF: fdt: Machine model: TI DRA718 EVM
    [    0.000000] Memory policy: Data cache writealloc
    [    0.000000] efi: Getting EFI parameters from FDT:
    [    0.000000] efi: UEFI not found.
    [    0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB
    [    0.000000] OF: reserved mem: initialized node ipu2-memory@95800000, compatible id shared-dma-pool
    [    0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB
    [    0.000000] OF: reserved mem: initialized node dsp1-memory@99000000, compatible id shared-dma-pool
    [    0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB
    [    0.000000] OF: reserved mem: initialized node ipu1-memory@9d000000, compatible id shared-dma-pool
    [    0.000000] cma: Reserved 24 MiB at 0x0000000094000000
    [    0.000000] OMAP4: Map 0x000000009fd00000 to fe600000 for dram barrier
    [    0.000000] DRA722 ES2.1
    [    0.000000] percpu: Embedded 15 pages/cpu @dfc33000 s31968 r8192 d21280 u61440
    [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129158
    [    0.000000] Kernel command line: console=ttyO2,115200n8 root=/dev/nfs nfsroot=10.3.33.185:/home/bridge/SDK-Bridge/ti-processor-sdk-linux-rt-am57xx-evm-05.00.00.15/targetNFS,nolock rw ip=10.3.33.186:10.f
    [    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
    [    0.000000] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes)
    [    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
    [    0.000000] Memory: 319712K/521216K available (8192K kernel code, 357K rwdata, 2476K rodata, 2048K init, 347K bss, 21280K reserved, 180224K cma-reserved, 0K highmem)
    [    0.000000] Virtual kernel memory layout:
    [    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    [    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    [    0.000000]     vmalloc : 0xe0000000 - 0xff800000   ( 504 MB)
    [    0.000000]     lowmem  : 0xc0000000 - 0xdfd00000   ( 509 MB)
    [    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    [    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
    [    0.000000]       .text : 0xc0008000 - 0xc0a00000   (10208 kB)
    [    0.000000]       .init : 0xc0e00000 - 0xc1000000   (2048 kB)
    [    0.000000]       .data : 0xc1000000 - 0xc1059620   ( 358 kB)
    [    0.000000]        .bss : 0xc105b000 - 0xc10b1d84   ( 348 kB)
    [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [    0.000000] Preemptible hierarchical RCU implementation.
    [    0.000000]  RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
    [    0.000000]  RCU priority boosting: priority 1 delay 500 ms.
    [    0.000000]  No expedited grace period (rcu_normal_after_boot).
    [    0.000000]  Tasks RCU enabled.
    [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
    [    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
    [    0.000000] GIC: Using split EOI/Deactivate mode
    [    0.000000] OMAP clockevent source: timer1 at 32786 Hz
    [    0.000000] arch_timer: cp15 timer(s) running at 6.14MHz (phys).
    [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x16af5adb9, max_idle_ns: 440795202250 ns
    [    0.000005] sched_clock: 56 bits at 6MHz, resolution 162ns, wraps every 4398046511023ns
    [    0.000011] Switching to timer-based delay loop, resolution 162ns
    [    0.000338] clocksource: 32k_counter: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 58327039986419 ns
    [    0.000340] OMAP clocksource: 32k_counter at 32768 Hz
    [    0.000849] Console: colour dummy device 80x30
    [    0.000971] WARNING: Your 'console=ttyO2' has been replaced by 'ttyS2'
    [    0.000973] This ensures that you still see kernel messages. Please
    [    0.000975] update your kernel commandline.
    [    0.000987] Calibrating delay loop (skipped), value calculated using timer frequency.. 12.29 BogoMIPS (lpj=61475)
    [    0.000994] pid_max: default: 32768 minimum: 301
    [    0.001113] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.001119] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.001735] CPU: Testing write buffer coherency: ok
    [    0.001971] /cpus/cpu@0 missing clock-frequency property
    [    0.002004] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
    [    0.039878] Setting up static identity map for 0x80200000 - 0x80200060
    [    0.079870] Hierarchical SRCU implementation.
    [    0.140343] EFI services will not be available.
    [    0.160004] smp: Bringing up secondary CPUs ...
    [    0.160014] smp: Brought up 1 node, 1 CPU
    [    0.160023] SMP: Total of 1 processors activated (12.29 BogoMIPS).
    [    0.160031] CPU: All CPU(s) started in HYP mode.
    [    0.160037] CPU: Virtualization extensions available.
    [    0.160598] devtmpfs: initialized
    [    0.195294] random: get_random_u32 called from bucket_table_alloc+0x14c/0x288 with crng_init=0
    [    0.200211] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0
    [    0.200465] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
    [    0.200485] futex hash table entries: 256 (order: 2, 16384 bytes)
    [    0.204413] pinctrl core: initialized pinctrl subsystem
    [    0.205255] DMI not present or invalid.
    [    0.205704] NET: Registered protocol family 16
    [    0.208189] DMA: preallocated 256 KiB pool for atomic coherent allocations
    [    0.209074] omap_hwmod: l3_main_2 using broken dt data from ocp
    [    0.415744] OMAP GPIO hardware version 0.1
    [    0.446832] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
    [    0.446846] hw-breakpoint: maximum watchpoint size is 8 bytes.
    [    0.447314] omap4_sram_init:Unable to allocate sram needed to handle errata I688
    [    0.447325] omap4_sram_init:Unable to get sram pool needed to handle errata I688
    [    0.448649] OMAP DMA hardware revision 0.0
    [    0.504437] omap-dma-engine 4a056000.dma-controller: OMAP DMA engine driver (LinkedList1/2/3 supported)
    [    0.506924] edma 43300000.edma: memcpy is disabled
    [    0.513001] edma 43300000.edma: TI EDMA DMA engine driver
    [    0.514076] evm_5v0: supplied by evm_12v0
    [    0.514563] evm_3v6: supplied by evm_5v0
    [    0.515046] vsys_3v3: supplied by evm_12v0
    [    0.515528] evm_3v3: supplied by vsys_3v3
    [    0.516001] aic_dvdd: supplied by evm_3v3
    [    0.517833] vddshv8: invalid voltage constraints
    [    0.517847] gpio-regulator gpio-regulator-TPS74801: Failed to register regulator: -22
    [    0.517938] gpio-regulator: probe of gpio-regulator-TPS74801 failed with error -22
    [    0.521417] omap-iommu 40d01000.mmu: 40d01000.mmu registered
    [    0.521925] omap-iommu 40d02000.mmu: 40d02000.mmu registered
    [    0.522516] omap-iommu 58882000.mmu: 58882000.mmu registered
    [    0.523108] omap-iommu 55082000.mmu: 55082000.mmu registered
    [    0.523670] iommu: Adding device 58820000.ipu to group 1
    [    0.523856] iommu: Adding device 55020000.ipu to group 2
    [    0.524193] iommu: Adding device 40800000.dsp to group 0
    [    0.526185] media: Linux media interface: v0.10
    [    0.526236] Linux video capture interface: v2.00
    [    0.526357] pps_core: LinuxPPS API ver. 1 registered
    [    0.526365] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    0.526389] PTP clock support registered
    [    0.526426] EDAC MC: Ver: 3.0.0
    [    0.530773] dmi: Firmware registration failed.
    [    0.531343] omap-mailbox 48840000.mailbox: omap mailbox rev 0x400
    [    0.531636] omap-mailbox 48842000.mailbox: omap mailbox rev 0x400
    [    0.532195] Advanced Linux Sound Architecture Driver Initialized.
    [    0.540836] clocksource: Switched to clocksource arch_sys_counter
    [    0.554237] NET: Registered protocol family 2
    [    0.555103] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
    [    0.555155] TCP bind hash table entries: 4096 (order: 4, 114688 bytes)
    [    0.555295] TCP: Hash tables configured (established 4096 bind 4096)
    [    0.555392] UDP hash table entries: 256 (order: 2, 16384 bytes)
    [    0.555426] UDP-Lite hash table entries: 256 (order: 2, 16384 bytes)
    [    0.555676] NET: Registered protocol family 1
    [    0.576215] RPC: Registered named UNIX socket transport module.
    [    0.576227] RPC: Registered udp transport module.
    [    0.576237] RPC: Registered tcp transport module.
    [    0.576246] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    0.577584] hw perfevents: no interrupt-affinity property for /pmu, guessing.
    [    0.577801] hw perfevents: enabled with armv7_cortex_a15 PMU driver, 7 counters available
    [    0.579601] workingset: timestamp_bits=14 max_order=17 bucket_order=3
    [    0.587665] squashfs: version 4.0 (2009/01/31) Phillip Lougher
    [    0.598599] NFS: Registering the id_resolver key type
    [    0.598632] Key type id_resolver registered
    [    0.598642] Key type id_legacy registered
    [    0.598715] ntfs: driver 2.1.32 [Flags: R/O].
    [    0.601273] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
    [    0.601288] io scheduler noop registered
    [    0.601298] io scheduler deadline registered
    [    0.601448] io scheduler cfq registered (default)
    [    0.601460] io scheduler mq-deadline registered
    [    0.601470] io scheduler kyber registered
    [    0.607017] pinctrl-single 4a003400.pinmux: 282 pins at pa fc003400 size 1128
    [    0.607267] pinctrl-single 4a002e8c.pinmux: please update dts to use #pinctrl-cells = <1>
    [    0.607359] pinctrl-single 4a002e8c.pinmux: initialized with no interrupts
    [    0.607371] pinctrl-single 4a002e8c.pinmux: 1 pins at pa fc002e8c size 4
    [    0.702225] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
    [    0.706824] 48020000.serial: ttyS2 at MMIO 0x48020000 (irq = 43, base_baud = 3000000) is a 8250
    [    1.605120] console [ttyS2] enabled
    [    1.611238] omap_rng 48090000.rng: Random Number Generator ver. 20
    [    1.635558] brd: module loaded
    [    1.650171] loop: module loaded
    [    1.658593] m25p80 spi0.0: found n25q256a, expected s25fl256s1
    [    1.664960] m25p80 spi0.0: n25q256a (32768 Kbytes)
    [    1.669858] 10 ofpart partitions found on MTD device spi0.0
    [    1.675459] Creating 10 MTD partitions on "spi0.0":
    [    1.680362] 0x000000000000-0x000000010000 : "QSPI.SPL"
    [    1.686746] 0x000000010000-0x000000020000 : "QSPI.SPL.backup1"
    [    1.693740] 0x000000020000-0x000000030000 : "QSPI.SPL.backup2"
    [    1.700763] 0x000000030000-0x000000040000 : "QSPI.SPL.backup3"
    [    1.707755] 0x000000040000-0x000000140000 : "QSPI.u-boot"
    [    1.714309] 0x000000140000-0x0000001c0000 : "QSPI.u-boot-spl-os"
    [    1.721503] 0x0000001c0000-0x0000001d0000 : "QSPI.u-boot-env"
    [    1.728413] 0x0000001d0000-0x0000001e0000 : "QSPI.u-boot-env.backup1"
    [    1.736019] 0x0000001e0000-0x0000009e0000 : "QSPI.kernel"
    [    1.742588] 0x0000009e0000-0x000002000000 : "QSPI.file-system"
    [    1.750554] libphy: Fixed MDIO Bus: probed
    [    1.810890] davinci_mdio 48485000.mdio: davinci mdio revision 1.6, bus freq 1000000
    [    1.818591] libphy: 48485000.mdio: probed
    [    1.835243] davinci_mdio 48485000.mdio: phy[0]: device 48485000.mdio:00, driver TI DP83822 10/100 Mbps PHY
    [    1.845689] cpsw 48484000.ethernet: Detected MACID = 00:a0:de:ad:be:ef
    [    1.852254] cpsw 48484000.ethernet: GMAC port 0
    [    1.856893] cpsw 48484000.ethernet: initialized cpsw ale version 1.4
    [    1.863280] cpsw 48484000.ethernet: ALE Table size 1024
    [    1.868542] cpsw 48484000.ethernet: device node lookup for pps timer failed
    [    1.875577] cpsw 48484000.ethernet: cpts: overflow check period 500 (jiffies)
    [    1.884540] net eth0: rpmsg goose driver init: 0
    [    1.889261] net eth0: ocmc rxbuf: pa x40300000 va e1100000 size 0xe000
    [    1.896526] i2c /dev entries driver
    [    1.901283] IR NEC protocol handler initialized
    [    1.905836] IR RC5(x/sz) protocol handler initialized
    [    1.910912] IR RC6 protocol handler initialized
    [    1.915464] IR JVC protocol handler initialized
    [    1.920015] IR Sony protocol handler initialized
    [    1.924994] IR SANYO protocol handler initialized
    [    1.929720] IR Sharp protocol handler initialized
    [    1.934447] IR MCE Keyboard/mouse protocol handler initialized
    [    1.940307] IR XMP protocol handler initialized
    [    1.951006] sdhci: Secure Digital Host Controller Interface driver
    [    1.957217] sdhci: Copyright(c) Pierre Ossman
    [    1.962457] sdhci-pltfm: SDHCI platform and OF driver helper
    [    2.030880] mmc0: SDHCI controller on 480b4000.mmc [480b4000.mmc] using ADMA
    [    2.050442] NET: Registered protocol family 10
    [    2.066440] Segment Routing with IPv6
    [    2.070243] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    [    2.077021] NET: Registered protocol family 17
    [    2.081976] Key type dns_resolver registered
    [    2.086468] omap_voltage_late_init: Voltage driver support not added
    [    2.091260] ti-iodelay 4844a000.padconf: Set reg 0x18c Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091271] ti-iodelay 4844a000.padconf: Set reg 0x1a4 Delay(a: 119 g: 0), Elements(C=0 F=3)0x29003
    [    2.091281] ti-iodelay 4844a000.padconf: Set reg 0x1b0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091290] ti-iodelay 4844a000.padconf: Set reg 0x1bc Delay(a: 18 g: 0), Elements(C=0 F=0)0x29000
    [    2.091299] ti-iodelay 4844a000.padconf: Set reg 0x1c8 Delay(a: 894 g: 0), Elements(C=2 F=0)0x29040
    [    2.091308] ti-iodelay 4844a000.padconf: Set reg 0x1d4 Delay(a: 30 g: 0), Elements(C=0 F=0)0x29000
    [    2.091317] ti-iodelay 4844a000.padconf: Set reg 0x1e0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091326] ti-iodelay 4844a000.padconf: Set reg 0x1ec Delay(a: 23 g: 0), Elements(C=0 F=0)0x29000
    [    2.091334] ti-iodelay 4844a000.padconf: Set reg 0x1f8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091343] ti-iodelay 4844a000.padconf: Set reg 0x360 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091351] ti-iodelay 4844a000.padconf: Set reg 0x194 Delay(a: 152 g: 0), Elements(C=0 F=4)0x29004
    [    2.091360] ti-iodelay 4844a000.padconf: Set reg 0x1ac Delay(a: 206 g: 0), Elements(C=0 F=6)0x29006
    [    2.091369] ti-iodelay 4844a000.padconf: Set reg 0x1b8 Delay(a: 78 g: 0), Elements(C=0 F=2)0x29002
    [    2.091377] ti-iodelay 4844a000.padconf: Set reg 0x1c4 Delay(a: 2 g: 0), Elements(C=0 F=0)0x29000
    [    2.091386] ti-iodelay 4844a000.padconf: Set reg 0x1d0 Delay(a: 266 g: 0), Elements(C=0 F=8)0x29008
    [    2.091394] ti-iodelay 4844a000.padconf: Set reg 0x1dc Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091402] ti-iodelay 4844a000.padconf: Set reg 0x1e8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091411] ti-iodelay 4844a000.padconf: Set reg 0x1f4 Delay(a: 43 g: 0), Elements(C=0 F=1)0x29001
    [    2.091419] ti-iodelay 4844a000.padconf: Set reg 0x200 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091449] ti-iodelay 4844a000.padconf: Set reg 0x368 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091458] ti-iodelay 4844a000.padconf: Set reg 0x190 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091466] ti-iodelay 4844a000.padconf: Set reg 0x1a8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091474] ti-iodelay 4844a000.padconf: Set reg 0x1b4 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091483] ti-iodelay 4844a000.padconf: Set reg 0x1c0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091491] ti-iodelay 4844a000.padconf: Set reg 0x1d8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091499] ti-iodelay 4844a000.padconf: Set reg 0x1e4 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091507] ti-iodelay 4844a000.padconf: Set reg 0x1f0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091515] ti-iodelay 4844a000.padconf: Set reg 0x1fc Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091524] ti-iodelay 4844a000.padconf: Set reg 0x364 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.091603] mmc0: new DDR MMC card at address 0001
    [    2.094418] mmcblk0: mmc0:0001 P1XXXX 7.20 GiB 
    [    2.096312] mmcblk0boot0: mmc0:0001 P1XXXX partition 1 16.0 MiB
    [    2.097992] mmcblk0boot1: mmc0:0001 P1XXXX partition 2 16.0 MiB
    [    2.099889] mmcblk0rpmb: mmc0:0001 P1XXXX partition 3 128 KiB
    [    2.101408]  mmcblk0: p1 p2 p3 p4 < >
    [    2.388666] Power Management for TI OMAP4+ devices.
    [    2.393925] Registering SWP/SWPB emulation handler
    [    2.441723] dmm 4e000000.dmm: workaround for errata i878 in use
    [    2.450626] dmm 4e000000.dmm: initialized all PAT entries
    [    2.460085] hctosys: unable to open rtc device (rtc0)
    [    2.466739] net eth0: initializing cpsw version 1.15 (0)
    [    2.574043] TI DP83822 10/100 Mbps PHY 48485000.mdio:00: attached PHY driver [TI DP83822 10/100 Mbps PHY] (mii_bus:phy_addr=48485000.mdio:00, irq=POLL)
    [    2.590304] cpts ptp bc clkid 0
    [    2.598910] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    [    4.646511] cpsw 48484000.ethernet eth0: Link is Up - 100Mbps/Half - flow control off
    [    4.670899] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [    4.700869] IP-Config: Complete:
    [    4.704118]      device=eth0, hwaddr=00:a0:de:ad:be:ef, ipaddr=10.3.33.186, mask=255.255.248.0, gw=255.255.255.255
    [    4.714545]      host=10.3.33.186, domain=, nis-domain=(none)
    [    4.720320]      bootserver=10.3.33.185, rootserver=10.3.33.185, rootpath=
    [    4.728690] aic_dvdd: disabling
    [    4.731853] vmmcwl_fixed: disabling
    [    4.735368] pbias_mmc_omap5: disabling
    [    4.739151] ALSA device list:
    [    4.742133]   No soundcards found.
    [    4.768309] VFS: Mounted root (nfs filesystem) on device 0:14.
    [    4.774816] devtmpfs: mounted
    [    4.781086] Freeing unused kernel memory: 2048K
    [    5.217515] systemd[1]: System time before build time, advancing clock.
    [    5.287477] systemd[1]: systemd 234 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN)
    [    5.309189] systemd[1]: Detected architecture arm.
    
    Welcome to Arago 2018.04!
    
    [    5.342390] systemd[1]: Set hostname to <am57xx-evm>.
    [    6.368742] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.409855] systemd[1]: Listening on Process Core Dump Socket.
    [  OK  ] Listening on Process Core Dump Socket.
    [    6.451233] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.458249] systemd[1]: Listening on udev Control Socket.
    [  OK  ] Listening on udev Control Socket.
    [    6.491031] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.502494] systemd[1]: Created slice User and Session Slice.
    [  OK  ] Created slice User and Session Slice.
    [    6.532801] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
    [  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
    [    6.571402] systemd[1]: Listening on Syslog Socket.
    [  OK  ] Listening on Syslog Socket.
    [    6.603426] systemd[1]: Created slice System Slice.
    [  OK  ] Created slice System Slice.
    [    6.647607] systemd[1]: Mounting POSIX Message Queue File System...
             Mounting POSIX Message Queue File System...
    [  OK  ] Created slice system-serial\x2dgetty.slice.
    [  OK  ] Started Dispatch Password Requests to Console Directory Watch.
             Mounting Kernel Debug File System...
    [  OK  ] Created slice system-getty.slice.
    [  OK  ] Reached target Remote File Systems.
    [  OK  ] Started Forward Password Requests to Wall Directory Watch.
    [  OK  ] Reached target Paths.
    [  OK  ] Listening on Network Service Netlink Socket.
    [  OK  ] Reached target Slices.
    [  OK  ] Listening on udev Kernel Socket.
    [  OK  ] Listening on Journal Socket (/dev/log).
    [  OK  ] Listening on Journal Socket.
             Starting Journal Service...
             Starting Load Kernel Modules...
             Starting Remount Root and Kernel File Systems...
    [    7.264959] cmemk: loading out-of-tree module taints kernel.
             Starting Create list of required st��…ce nodes for the current k[    7.286826] CMEMK module: reference Linux version 4.14.40
    ernel...
    [    7.305997] cmemk initialized
    [  OK  ] Reached target Swap.
    [    7.351548] cryptodev: driver 1.9 loaded.
             Mounting Temporary Directory (/tmp)...
    [    7.494141] usbcore: registered new interface driver usbfs
    [    7.509859] usbcore: registered new interface driver hub
    [    7.525378] usbcore: registered new device driver usb
    [  OK  ] Mounted Kernel Debug File System.
    [    7.548141] usbcore: registered new interface driver usbserial
    [  OK  ] Mounted POSIX Message Queue File System.
    [  OK  ] Mounted Temporary Directory (/tmp).
    [FAILED] Failed to start Load Kernel Modules.
    See 'systemctl status systemd-modules-load.service' for details.
    [  OK  ] Started Remount Root and Kernel File Systems.
    [  OK  ] Started Create list of required sta��…vice nodes for the current kernel.
    [  OK  ] Started Journal Service.
             Starting udev Coldplug all Devices...
             Starting Create Static Device Nodes in /dev...
             Starting Flush Journal to Persistent Storage...
             Mounting Kernel Configuration File System...
             Starting Apply Kernel Variables...
    [  OK  ] Mounted Kernel Configuration File System.
    [  OK  ] Started Create Static Device Nodes in /dev.
    [  OK  ] Started Apply Kernel Variables.
    [    8.305326] systemd-journald[94]: Received request to flush runtime journal from PID 1
    [  OK  ] Reached target Local File Systems (Pre).
             Mounting /media/ram...
             Mounting /var/volatile...
             Starting udev Kernel Device Manager...
    [  OK  ] Mounted /var/volatile.
    [  OK  ] Mounted /media/ram.
    [  OK  ] Started Flush Journal to Persistent Storage.
             Starting Load/Save Random Seed...
    [  OK  ] Reached target Local File Systems.
             Starting Create Volatile Files and Directories...
    [  OK  ] Started udev Kernel Device Manager.
    [  OK  ] Started Load/Save Random Seed.
    [  OK  ] Started Create Volatile Files and Directories.
             Starting Update UTMP about System Boot/Shutdown...
             Starting Network Time Synchronization...
    [  OK  ] Started Update UTMP about System Boot/Shutdown.
    [  OK  ] Started Network Time Synchronization.
    [  OK  ] Reached target System Time Synchronized.
    [   11.094130] omap-rproc 58820000.ipu: assigned reserved memory node ipu1-memory@9d000000
    [   11.143796] remoteproc remoteproc0: 58820000.ipu is available
    [   11.201551] remoteproc remoteproc0: Direct firmware load for dra7-ipu1-fw.xem4 failed with error -2
    [   11.205931] omap-rproc 55020000.ipu: assigned reserved memory node ipu2-memory@95800000
    [   11.206079] remoteproc remoteproc1: 55020000.ipu is available
    [   11.218949] omap-rproc 40800000.dsp: assigned reserved memory node dsp1-memory@99000000
    [   11.222643] remoteproc remoteproc2: 40800000.dsp is available
    [   11.506741] remoteproc remoteproc0: powering up 58820000.ipu
    [   11.555855] remoteproc remoteproc0: Direct firmware load for dra7-ipu1-fw.xem4 failed with error -2
    [   11.660752] remoteproc remoteproc0: request_firmware failed: -2
    [   11.726363] remoteproc remoteproc2: Direct firmware load for dra7-dsp1-fw.xe66 failed with error -2
    [  OK  ] Found device /dev/ttyS2.
    [   11.802694] remoteproc remoteproc2: powering up 40800000.dsp
    [   11.858744] remoteproc remoteproc2: Direct firmware load for dra7-dsp1-fw.xe66 failed with error -2
    [   11.956630] remoteproc remoteproc2: request_firmware failed: -2
    [   12.623950] omap-des 480a5000.des: OMAP DES hw accel rev: 2.2
    [   12.670284] omap-des 480a5000.des: will run requests pump with realtime priority
    [   13.531420] vpe 489d0000.vpe: loading firmware vpdma-1b8.bin
    [   13.605303] vpe 489d0000.vpe: Device registered as /dev/video0
    [  OK  ] Started udev Coldplug all Devices.
    [  OK  ] Reached target System Initialization.
    [  OK  ] Listening on D-Bus System Message Bus Socket.
    [   13.857351] remoteproc remoteproc1: powering up 55020000.ipu
    [   13.873975] remoteproc remoteproc1: Booting fw image dra7-ipu2-fw.xem4, size 3743076
    [   13.938142] omap-iommu 55082000.mmu: 55082000.mmu: version 2.1
             Starting Network Service...
    [  OK  ] Started Daily rotation of log files.
    [  OK  ] Started Daily Cleanup of Temporary Directories.
    [  OK  ] Reached target Timers.
    [  OK  ] Listening on RPCbind Server Activation Socket.
    [   14.356135] virtio_rpmsg_bus virtio0: rpmsg host is online
    [   14.399976] remoteproc remoteproc1: registered virtio0 (type 7)
    [   14.455899] remoteproc remoteproc1: remote processor 55020000.ipu is now up
    [   14.509172] virtio_rpmsg_bus virtio0: creating channel rpmsg-rpc addr 0x65
    [   14.541580] virtio_rpmsg_bus virtio0: creating channel rpmsg-rpc addr 0x66
    [   14.659209] omap-sham 4b101000.sham: hw accel on OMAP rev 4.3
    [  OK  ] Listening on dropbear.socket.
    [  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
    [  OK  ] Reached target Sockets.
    [  OK  ] Reached target Basic System.
    [   14.861239] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
    [   14.906049] omap-aes 4b500000.aes: OMAP AES hw accel rev: 3.3
    [   14.950171] omap-aes 4b500000.aes: will run requests pump with realtime priority
             Starting Print notice about GPLv3 packages...
    [   15.110223] omap-aes 4b700000.aes: OMAP AES hw accel rev: 3.3
    [   15.160259] omap-aes 4b700000.aes: will run requests pump with realtime priority
    [  OK  ] Started Hardware RNG Entropy Gatherer Daemon.
    [  OK  ] Started Kernel Logging Service.
    [  OK  ] Reached target Containers.
             Starting Login Service...
             Starting RPC Bind Service...
             Starting TI MultiCore Tools Daemon...
             Starting uim-sysfs.service...
    [  OK  ] Started Job spooling tools.
    [  OK  ] Started D-Bus System Message Bus.
    [  OK  ] Started Periodic Command Scheduler.
    [  OK  ] Started System Logging Service.
             Starting Avahi mDNS/DNS-SD Stack...
    [  OK  ] Started Network Service.
    [  OK  ] Started RPC Bind Service.
    [FAILED] Failed to start TI MultiCore Tools Daemon.
    See 'systemctl status ti-mct-daemon.service' for details.
    [   20.376084] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
    [   20.379998] EXT4-fs (mmcblk0p2): mounting ext3 file system using the ext4 subsystem
    [   20.482845] EXT4-fs (mmcblk0p2): recovery complete
    [   20.482878] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
    [   26.696771] rpmsg_rpc virtio0.rpmsg-rpc.-1.101: probing service dce-callback with src 1024 dst 101
    [   26.734045] omap-iommu 55082000.mmu: 55082000.mmu: version 2.1
    [   26.764075] rpmsg_rpc virtio0.rpmsg-rpc.-1.102: probing service rpmsg-dce with src 1025 dst 102
    [   26.789436] rpmsg_rpc virtio0.rpmsg-rpc.-1.101: published functions = 4
    [   26.824944] rpmsg_rpc virtio0.rpmsg-rpc.-1.102: published functions = 9
    [  OK  ] Started uim-sysfs.service.
    ***************************************************************
    ***************************************************************
    NOTICE: This file system contains the following GPLv3 packages:
            autoconf
            bash-dev
            bash
            binutils-dev
            binutils
            bison-dev
            bison
            cifs-utils
            cpio
            cpp-symlinks
            cpp
            dosfstools
            elfutils-dev
            elfutils
            findutils
            g++-symlinks
            g++
            gawk
            gcc-symlinks
            gcc
            gdb
            gdbc6x
            gdbserver
            gettext
            gstreamer1.0-libav
            gzip
            hidapi
            libasm1
            libcairo-perf-utils
            libdw1
            libelf1
            libgdbm-compat4
            libgdbm-dev
            libgdbm4
            libgettextlib
            libgettextsrc
            libgmp10
            libidn11
            libmavconn
            libmpc3
            libmpfr4
            libreadline-dev
            libreadline7
            libunistring2
            m4-dev
            m4
            make
            mavlink
            mavros-extras
            mavros-msgs
            mavros
            nettle
            parted
            python3-pycairo
            socketcan-interface
            swig-dev
            swig
            which
    
    If you do not wish to distribute GPLv3 components please remove
    the above packages prior to distribution.  This can be done using
    the opkg remove command.  i.e.:
        opkg remove <package>
    Where <package> is the name printed in the list above
    
    NOTE: If the package is a dependency of another package you
          will be notified of the dependent packages.  You should
          use the --force-removal-of-dependent-packages option to
          also remove the dependent packages as well
    ***************************************************************
    ***************************************************************
    [  OK  ] Started Print notice about GPLv3 packages.
    [  OK  ] Started Avahi mDNS/DNS-SD Stack.
    [  OK  ] Started Login Service.
             Starting rc.pvr.service...
    [  OK  ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
    [  OK  ] Reached target Network.
             Starting Enable and configure wl18xx bluetooth stack...
             Starting Simple Network Management Protocol (SNMP) Daemon....
    [  OK  ] Started Redis In-Memory Data Store.
             Starting Permit User Sessions...
             Starting Network Name Resolution...
             Starting Lightning Fast Webserver With Light System Requirements...
             Starting Wait for Network to be Configured...
    [  OK  ] Started rc.pvr.service.
    [  OK  ] Started Permit User Sessions.
    [  OK  ] Started Enable and configure wl18xx bluetooth stack.
    [  OK  ] Started Lightning Fast Webserver With Light System Requirements.
    [  OK  ] Started Wait for Network to be Configured.
    [  OK  ] Started Getty on tty1.
    [  OK  ] Started Serial Getty on ttyS2.
    [  OK  ] Reached target Login Prompts.
             Starting Synchronize System and HW clocks...
             Starting weston.service...
    [  OK  ] Started Network Name Resolution.
    [FAILED] Failed to start Synchronize System and HW clocks.
    See 'systemctl status sync-clocks.service' for details.
    [  OK  ] Started weston.service.
    [  OK  ] Started Simple Network Management Protocol (SNMP) Daemon..
             Starting tiipclad-daemon.service...
             Starting telnetd.service...
    [  OK  ] Reached target Network is Online.
    [  OK  ] Started strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf.
    [  OK  ] Reached target Host and Network Name Lookups.
    [  OK  ] Started NFS status monitor for NFSv2/3 locking..
    [  OK  ] Started telnetd.service.
    [  OK  ] Started tiipclad-daemon.service.
             Starting thttpd.service...
    [  OK  ] Started thttpd.service.
    [   36.505297] NET: Registered protocol family 15
             Starting rng-tools.service...
    [  OK  ] Started rng-tools.service.
             Starting LSB: Redis, a key-value store...
    [   36.869966] Initializing XFRM netlink socket
    [  OK  ] Started LSB: Redis, a key-value store.
             Starting gdbserverproxy.service...
    [  OK  ] Started gdbserverproxy.service.
             Starting matrix-gui-2.0.service...
    [  OK  ] Started matrix-gui-2.0.service.
             Starting thermal-zone-init.service...
    [  OK  ] Started thermal-zone-init.service.
    [  OK  ] Reached target Multi-User System.
             Starting Update UTMP about System Runlevel Changes...
    [  OK  ] Started Update UTMP about System Runlevel Changes.
    
     _____                    _____           _         _   
    |  _  |___ ___ ___ ___   |  _  |___ ___  |_|___ ___| |_ 
    |     |  _| .'| . | . |  |   __|  _| . | | | -_|  _|  _|
    |__|__|_| |__,|_  |___|  |__|  |_| |___|_| |___|___|_|  
                  |___|                    |___|            
    
    Arago Project http://arago-project.org am57xx-evm ttyS2
    
    Arago 2018.04 am57xx-evm ttyS2
    
    am57xx-evm login: root
    root@am57xx-evm:~# 
    
    
    CONFIG_NO_HZ=y
    CONFIG_HIGH_RES_TIMERS=y
    CONFIG_BLK_DEV_INITRD=y
    CONFIG_PERF_EVENTS=y
    CONFIG_PARTITION_ADVANCED=y
    CONFIG_CMDLINE_PARTITION=y
    # CONFIG_ARCH_MULTI_V5 is not set
    # CONFIG_ARCH_MULTI_V4 is not set
    CONFIG_MACH_ARTPEC6=y
    CONFIG_MACH_ARMADA_370=y
    CONFIG_MACH_ARMADA_375=y
    CONFIG_MACH_ARMADA_38X=y
    CONFIG_MACH_ARMADA_39X=y
    CONFIG_MACH_ARMADA_XP=y
    CONFIG_MACH_DOVE=y
    CONFIG_SOC_SAMA5D2=y
    CONFIG_SOC_SAMA5D3=y
    CONFIG_SOC_SAMA5D4=y
    CONFIG_ARCH_BCM2835=y
    CONFIG_ARCH_BCM_63XX=y
    CONFIG_MACH_BERLIN_BG2=y
    CONFIG_MACH_BERLIN_BG2CD=y
    CONFIG_MACH_BERLIN_BG2Q=y
    CONFIG_SOC_IMX50=y
    CONFIG_SOC_IMX51=y
    CONFIG_SOC_IMX53=y
    CONFIG_SOC_IMX6Q=y
    CONFIG_SOC_IMX6SL=y
    CONFIG_SOC_IMX6SX=y
    CONFIG_SOC_IMX6UL=y
    CONFIG_SOC_IMX7D=y
    CONFIG_SOC_VF610=y
    CONFIG_SOC_LS1021A=y
    CONFIG_MACH_SPEAR1310=y
    CONFIG_MACH_SPEAR1340=y
    CONFIG_EXYNOS5420_MCPM=y
    CONFIG_ARCH_R8A7743=y
    CONFIG_ARCH_R8A7745=y
    CONFIG_ARCH_R8A7792=y
    CONFIG_MACH_HREFV60=y
    CONFIG_MACH_SNOWBALL=y
    CONFIG_TRUSTED_FOUNDATIONS=y
    CONFIG_PCI_HOST_GENERIC=y
    CONFIG_PCI_KEYSTONE=y
    CONFIG_PCI_MSI=y
    CONFIG_PCI_MVEBU=y
    CONFIG_PCI_TEGRA=y
    CONFIG_PCI_RCAR_GEN2=y
    CONFIG_PCIE_RCAR=y
    CONFIG_PCIEPORTBUS=y
    CONFIG_HIGHPTE=y
    CONFIG_CMA=y
    CONFIG_EFI=y
    CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
    CONFIG_ARM_IMX6Q_CPUFREQ=y
    CONFIG_ARM_ZYNQ_CPUIDLE=y
    CONFIG_ARM_EXYNOS_CPUIDLE=y
    CONFIG_PACKET=y
    CONFIG_UNIX=y
    CONFIG_IP_PNP=y
    CONFIG_IP_PNP_DHCP=y
    CONFIG_IP_PNP_BOOTP=y
    CONFIG_IP_PNP_RARP=y
    CONFIG_IPV6_ROUTER_PREF=y
    CONFIG_IPV6_OPTIMISTIC_DAD=y
    CONFIG_INET6_ESP=m
    CONFIG_IPV6_MIP6=m
    CONFIG_IPV6_MULTIPLE_TABLES=y
    CONFIG_NET_DSA=m
    CONFIG_NET_SWITCHDEV=y
    CONFIG_CAN_RAW=y
    CONFIG_CAN_BCM=y
    CONFIG_CAN_DEV=y
    CONFIG_CAN_AT91=m
    CONFIG_CAN_RCAR=m
    CONFIG_CAN_XILINXCAN=y
    CONFIG_CAN_MCP251X=y
    CONFIG_B53_SPI_DRIVER=m
    CONFIG_B53_MDIO_DRIVER=m
    CONFIG_B53_MMAP_DRIVER=m
    CONFIG_B53_SRAB_DRIVER=m
    CONFIG_CAN_SUN4I=y
    CONFIG_BT=m
    CONFIG_BT_MRVL=m
    CONFIG_BT_MRVL_SDIO=m
    CONFIG_CFG80211=m
    CONFIG_MAC80211=m
    CONFIG_RFKILL=y
    CONFIG_RFKILL_INPUT=y
    CONFIG_RFKILL_GPIO=y
    CONFIG_DMA_CMA=y
    CONFIG_OMAP_OCP2SCP=y
    CONFIG_SIMPLE_PM_BUS=y
    CONFIG_SUNXI_RSB=y
    CONFIG_MTD=y
    CONFIG_MTD_BLOCK=y
    CONFIG_MTD_M25P80=y
    CONFIG_MTD_NAND=y
    CONFIG_MTD_NAND_DENALI_DT=y
    CONFIG_MTD_NAND_ATMEL=y
    CONFIG_MTD_NAND_BRCMNAND=y
    CONFIG_MTD_NAND_VF610_NFC=y
    CONFIG_MTD_NAND_DAVINCI=y
    CONFIG_MTD_SPI_NOR=y
    CONFIG_SPI_FSL_QUADSPI=m
    CONFIG_MTD_UBI=y
    CONFIG_BLK_DEV_LOOP=y
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_SIZE=65536
    CONFIG_VIRTIO_BLK=y
    CONFIG_AD525X_DPOT=y
    CONFIG_AD525X_DPOT_I2C=y
    CONFIG_ATMEL_TCLIB=y
    CONFIG_ICS932S401=y
    CONFIG_ATMEL_SSC=m
    CONFIG_QCOM_COINCELL=m
    CONFIG_APDS9802ALS=y
    CONFIG_ISL29003=y
    CONFIG_EEPROM_AT24=y
    CONFIG_BLK_DEV_SD=y
    CONFIG_BLK_DEV_SR=y
    CONFIG_SCSI_MULTI_LUN=y
    CONFIG_AHCI_BRCM=y
    CONFIG_AHCI_DM816=y
    CONFIG_AHCI_ST=y
    CONFIG_AHCI_IMX=y
    CONFIG_AHCI_SUNXI=y
    CONFIG_AHCI_TEGRA=y
    CONFIG_SATA_HIGHBANK=y
    CONFIG_SATA_MV=y
    CONFIG_SATA_RCAR=y
    CONFIG_NETDEVICES=y
    CONFIG_VIRTIO_NET=y
    CONFIG_HIX5HD2_GMAC=y
    CONFIG_SUN4I_EMAC=y
    CONFIG_MACB=y
    CONFIG_BGMAC_BCMA=y
    CONFIG_NET_CALXEDA_XGMAC=y
    CONFIG_GIANFAR=y
    CONFIG_MV643XX_ETH=y
    CONFIG_MVNETA=y
    CONFIG_PXA168_ETH=m
    CONFIG_KS8851=y
    CONFIG_R8169=y
    CONFIG_SH_ETH=y
    CONFIG_SMSC911X=y
    CONFIG_STMMAC_ETH=y
    CONFIG_STMMAC_PLATFORM=y
    CONFIG_DWMAC_DWC_QOS_ETH=y
    CONFIG_XILINX_EMACLITE=y
    CONFIG_AT803X_PHY=y
    CONFIG_SMSC_PHY=y
    CONFIG_REALTEK_PHY=y
    CONFIG_FIXED_PHY=y
    CONFIG_ROCKCHIP_PHY=y
    
    CONFIG_USB_SUPPORT=y
    CONFIG_USB=m
    
    CONFIG_USB_PEGASUS=y
    CONFIG_USB_RTL8152=m
    CONFIG_USB_NET_SMSC75XX=y
    CONFIG_BRCMFMAC=m
    CONFIG_RT2X00=m
    CONFIG_RT2800USB=m
    CONFIG_MWIFIEX=m
    CONFIG_MWIFIEX_SDIO=m
    CONFIG_INPUT_JOYDEV=y
    CONFIG_INPUT_EVDEV=y
    CONFIG_KEYBOARD_QT1070=m
    CONFIG_KEYBOARD_GPIO=y
    CONFIG_KEYBOARD_TEGRA=y
    CONFIG_KEYBOARD_SPEAR=y
    CONFIG_KEYBOARD_ST_KEYSCAN=y
    CONFIG_KEYBOARD_CROS_EC=m
    CONFIG_KEYBOARD_SAMSUNG=m
    CONFIG_MOUSE_PS2_ELANTECH=y
    CONFIG_MOUSE_CYAPA=m
    CONFIG_MOUSE_ELAN_I2C=y
    CONFIG_INPUT_TOUCHSCREEN=y
    CONFIG_TOUCHSCREEN_ATMEL_MXT=m
    CONFIG_TOUCHSCREEN_MMS114=m
    CONFIG_TOUCHSCREEN_ST1232=m
    CONFIG_TOUCHSCREEN_STMPE=y
    CONFIG_TOUCHSCREEN_SUN4I=y
    CONFIG_TOUCHSCREEN_WM97XX=m
    CONFIG_INPUT_MISC=y
    CONFIG_INPUT_MAX77693_HAPTIC=m
    CONFIG_INPUT_MAX8997_HAPTIC=m
    CONFIG_INPUT_AXP20X_PEK=m
    CONFIG_INPUT_ADXL34X=m
    CONFIG_SERIO_AMBAKMI=y
    CONFIG_SERIAL_8250=y
    CONFIG_SERIAL_8250_CONSOLE=y
    CONFIG_SERIAL_8250_MT6577=y
    CONFIG_SERIAL_8250_UNIPHIER=y
    CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
    CONFIG_SERIAL_ATMEL=y
    CONFIG_SERIAL_ATMEL_CONSOLE=y
    CONFIG_SERIAL_ATMEL_TTYAT=y
    CONFIG_SERIAL_BCM63XX=y
    CONFIG_SERIAL_BCM63XX_CONSOLE=y
    CONFIG_SERIAL_MESON=y
    CONFIG_SERIAL_MESON_CONSOLE=y
    CONFIG_SERIAL_SAMSUNG=y
    CONFIG_SERIAL_SAMSUNG_CONSOLE=y
    CONFIG_SERIAL_SIRFSOC=y
    CONFIG_SERIAL_SIRFSOC_CONSOLE=y
    CONFIG_SERIAL_TEGRA=y
    CONFIG_SERIAL_IMX=y
    CONFIG_SERIAL_IMX_CONSOLE=y
    CONFIG_SERIAL_SH_SCI=y
    CONFIG_SERIAL_SH_SCI_NR_UARTS=20
    CONFIG_SERIAL_SH_SCI_CONSOLE=y
    CONFIG_SERIAL_SH_SCI_DMA=y
    CONFIG_SERIAL_MSM=y
    CONFIG_SERIAL_MSM_CONSOLE=y
    CONFIG_SERIAL_VT8500=y
    CONFIG_SERIAL_VT8500_CONSOLE=y
    CONFIG_SERIAL_OF_PLATFORM=y
    CONFIG_SERIAL_OMAP_CONSOLE=y
    CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
    CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
    CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y
    CONFIG_SERIAL_ST_ASC_CONSOLE=y
    CONFIG_HVC_DRIVER=y
    CONFIG_VIRTIO_CONSOLE=y
    CONFIG_I2C_CHARDEV=y
    CONFIG_I2C_DAVINCI=y
    CONFIG_I2C_ARB_GPIO_CHALLENGE=m
    CONFIG_I2C_MUX_PCA954x=y
    CONFIG_I2C_MUX_PINCTRL=y
    CONFIG_I2C_DEMUX_PINCTRL=y
    CONFIG_I2C_AT91=m
    CONFIG_I2C_BCM2835=y
    CONFIG_I2C_CADENCE=y
    CONFIG_I2C_DIGICOLOR=m
    CONFIG_I2C_EMEV2=m
    CONFIG_I2C_EXYNOS5=y
    CONFIG_I2C_IMX=m
    CONFIG_I2C_MV64XXX=y
    CONFIG_I2C_RIIC=y
    CONFIG_I2C_S3C2410=y
    CONFIG_I2C_SH_MOBILE=y
    CONFIG_I2C_SIRF=y
    CONFIG_I2C_ST=y
    CONFIG_I2C_SUN6I_P2WI=y
    CONFIG_I2C_TEGRA=y
    CONFIG_I2C_UNIPHIER=y
    CONFIG_I2C_UNIPHIER_F=y
    CONFIG_I2C_RCAR=y
    CONFIG_I2C_CROS_EC_TUNNEL=m
    CONFIG_I2C_SLAVE_EEPROM=y
    CONFIG_SPI=y
    CONFIG_SPI_ATMEL=m
    CONFIG_SPI_BCM2835=y
    CONFIG_SPI_BCM2835AUX=y
    CONFIG_SPI_DAVINCI=y
    CONFIG_SPI_GPIO=m
    CONFIG_SPI_FSL_DSPI=m
    CONFIG_SPI_OMAP24XX=y
    CONFIG_SPI_ORION=y
    CONFIG_SPI_PL022=y
    CONFIG_SPI_RSPI=y
    CONFIG_SPI_S3C64XX=m
    CONFIG_SPI_SH_MSIOF=m
    CONFIG_SPI_SH_HSPI=y
    CONFIG_SPI_SIRF=y
    CONFIG_SPI_SUN4I=y
    CONFIG_SPI_SUN6I=y
    CONFIG_SPI_TEGRA114=y
    CONFIG_SPI_TEGRA20_SFLASH=y
    CONFIG_SPI_TEGRA20_SLINK=y
    CONFIG_SPMI=y
    CONFIG_PINCTRL_AS3722=y
    CONFIG_PINCTRL_PALMAS=y
    CONFIG_PINCTRL_BCM2835=y
    CONFIG_PINCTRL_APQ8064=y
    CONFIG_PINCTRL_APQ8084=y
    CONFIG_PINCTRL_IPQ8064=y
    CONFIG_PINCTRL_MSM8660=y
    CONFIG_PINCTRL_MSM8960=y
    CONFIG_PINCTRL_MSM8X74=y
    CONFIG_PINCTRL_MSM8916=y
    CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
    CONFIG_PINCTRL_QCOM_SSBI_PMIC=y
    CONFIG_GPIO_DAVINCI=y
    CONFIG_GPIO_RCAR=y
    CONFIG_GPIO_ZYNQ=y
    CONFIG_GPIO_PCA953X_IRQ=y
    CONFIG_GPIO_TWL4030=y
    CONFIG_GPIO_PALMAS=y
    CONFIG_GPIO_SYSCON=y
    CONFIG_GPIO_TPS65910=y
    CONFIG_BATTERY_ACT8945A=y
    CONFIG_BATTERY_SBS=y
    CONFIG_BATTERY_MAX17040=m
    CONFIG_BATTERY_MAX17042=m
    CONFIG_CHARGER_MAX14577=m
    CONFIG_CHARGER_MAX77693=m
    CONFIG_CHARGER_MAX8997=m
    CONFIG_CHARGER_MAX8998=m
    CONFIG_CHARGER_TPS65090=y
    CONFIG_AXP20X_POWER=m
    CONFIG_POWER_RESET_AS3722=y
    CONFIG_POWER_RESET_GPIO=y
    CONFIG_POWER_RESET_GPIO_RESTART=y
    CONFIG_POWER_RESET_KEYSTONE=y
    CONFIG_POWER_RESET_RMOBILE=y
    CONFIG_POWER_RESET_ST=y
    CONFIG_POWER_AVS=y
    CONFIG_ROCKCHIP_IODOMAIN=y
    CONFIG_SENSORS_IIO_HWMON=y
    CONFIG_SENSORS_LM90=y
    CONFIG_SENSORS_LM95245=y
    CONFIG_SENSORS_NTC_THERMISTOR=m
    CONFIG_SENSORS_PWM_FAN=m
    CONFIG_SENSORS_INA2XX=m
    CONFIG_BRCMSTB_THERMAL=m
    CONFIG_ROCKCHIP_THERMAL=y
    CONFIG_RCAR_THERMAL=y
    CONFIG_ARMADA_THERMAL=y
    CONFIG_DAVINCI_WATCHDOG=m
    CONFIG_EXYNOS_THERMAL=m
    CONFIG_ST_THERMAL_MEMMAP=y
    CONFIG_DA9063_WATCHDOG=m
    CONFIG_ARM_SP805_WATCHDOG=y
    CONFIG_AT91SAM9X_WATCHDOG=y
    CONFIG_SAMA5D4_WATCHDOG=y
    CONFIG_ORION_WATCHDOG=y
    CONFIG_ST_LPC_WATCHDOG=y
    CONFIG_SUNXI_WATCHDOG=y
    CONFIG_IMX2_WDT=y
    CONFIG_TEGRA_WATCHDOG=m
    CONFIG_MESON_WATCHDOG=y
    CONFIG_DIGICOLOR_WATCHDOG=y
    CONFIG_BCM2835_WDT=y
    CONFIG_BCM47XX_WDT=y
    CONFIG_BCM_KONA_WDT=y
    CONFIG_MFD_ACT8945A=y
    CONFIG_MFD_AC100=y
    CONFIG_MFD_AXP20X_RSB=y
    CONFIG_MFD_QCOM_RPM=y
    CONFIG_MFD_SPMI_PMIC=y
    CONFIG_REGULATOR_ACT8945A=y
    CONFIG_REGULATOR_AB8500=y
    CONFIG_POWER_RESET_SYSCON=y
    CONFIG_REGULATOR_MAX8997=m
    CONFIG_REGULATOR_MAX8998=m
    CONFIG_REGULATOR_QCOM_RPM=y
    CONFIG_REGULATOR_QCOM_SMD_RPM=y
    CONFIG_REGULATOR_WM8994=m
    CONFIG_USB_GSPCA=y
    CONFIG_SOC_CAMERA=m
    CONFIG_SOC_CAMERA_PLATFORM=m
    CONFIG_VIDEO_RCAR_VIN=m
    CONFIG_VIDEO_ATMEL_ISI=m
    CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m
    CONFIG_VIDEO_S5P_FIMC=m
    CONFIG_VIDEO_S5P_MIPI_CSIS=m
    CONFIG_VIDEO_EXYNOS_FIMC_LITE=m
    CONFIG_VIDEO_EXYNOS4_FIMC_IS=m
    CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
    CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
    CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
    CONFIG_VIDEO_STI_BDISP=m
    CONFIG_VIDEO_STI_HVA=m
    CONFIG_VIDEO_STI_DELTA=m
    CONFIG_VIDEO_RENESAS_JPU=m
    CONFIG_VIDEO_RENESAS_VSP1=m
    CONFIG_V4L_TEST_DRIVERS=y
    CONFIG_VIDEO_ADV7180=m
    CONFIG_VIDEO_ML86V7667=m
    CONFIG_DRM_I2C_ADV7511_AUDIO=y
    # CONFIG_DRM_I2C_CH7006 is not set
    # CONFIG_DRM_I2C_SIL164 is not set
    CONFIG_DRM_DUMB_VGA_DAC=m
    CONFIG_DRM_EXYNOS_FIMD=y
    CONFIG_DRM_EXYNOS_MIXER=y
    CONFIG_DRM_EXYNOS_DPI=y
    CONFIG_DRM_EXYNOS_DSI=y
    CONFIG_DRM_EXYNOS_HDMI=y
    CONFIG_DRM_ROCKCHIP=m
    CONFIG_ROCKCHIP_ANALOGIX_DP=y
    CONFIG_ROCKCHIP_DW_HDMI=y
    CONFIG_ROCKCHIP_DW_MIPI_DSI=y
    CONFIG_ROCKCHIP_INNO_HDMI=y
    CONFIG_DRM_ATMEL_HLCDC=m
    CONFIG_DRM_RCAR_DU=m
    CONFIG_DRM_RCAR_LVDS=y
    CONFIG_DRM_SUN4I=m
    CONFIG_DRM_TEGRA=y
    CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
    CONFIG_DRM_VC4=y
    CONFIG_FB_ARMCLCD=y
    CONFIG_FB_EFI=y
    CONFIG_FB_WM8505=y
    CONFIG_FB_SH_MOBILE_LCDC=y
    CONFIG_FB_SIMPLE=y
    CONFIG_FB_SH_MOBILE_MERAM=y
    CONFIG_BACKLIGHT_LCD_SUPPORT=y
    CONFIG_BACKLIGHT_CLASS_DEVICE=y
    CONFIG_LCD_PLATFORM=m
    CONFIG_BACKLIGHT_AS3711=y
    CONFIG_FRAMEBUFFER_CONSOLE=y
    CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
    CONFIG_SND_DYNAMIC_MINORS=y
    CONFIG_SND_HDA_TEGRA=m
    CONFIG_SND_HDA_INPUT_BEEP=y
    CONFIG_SND_HDA_PATCH_LOADER=y
    CONFIG_SND_HDA_CODEC_REALTEK=m
    CONFIG_SND_HDA_CODEC_HDMI=m
    CONFIG_SND_USB_AUDIO=m
    CONFIG_SND_ATMEL_SOC_WM8904=m
    CONFIG_SND_ATMEL_SOC_PDMIC=m
    CONFIG_SND_BCM2835_SOC_I2S=m
    CONFIG_SND_SOC_ROCKCHIP=m
    CONFIG_SND_SOC_ROCKCHIP_SPDIF=m
    CONFIG_SND_SOC_ROCKCHIP_MAX98090=m
    CONFIG_SND_SOC_ROCKCHIP_RT5645=m
    CONFIG_SND_SOC_SAMSUNG=m
    CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994=m
    CONFIG_SND_SOC_SMDK_WM8994_PCM=m
    CONFIG_SND_SOC_SNOW=m
    CONFIG_SND_SOC_SH4_FSI=m
    CONFIG_SND_SOC_RCAR=m
    CONFIG_SND_SIMPLE_SCU_CARD=m
    CONFIG_SND_SUN4I_CODEC=m
    CONFIG_SND_SOC_TEGRA=m
    CONFIG_SND_SOC_TEGRA20_I2S=m
    CONFIG_SND_SOC_TEGRA30_I2S=m
    CONFIG_SND_SOC_TEGRA_RT5640=m
    CONFIG_SND_SOC_TEGRA_WM8753=m
    CONFIG_SND_SOC_TEGRA_WM8903=m
    CONFIG_SND_SOC_TEGRA_WM9712=m
    CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
    CONFIG_SND_SOC_TEGRA_ALC5632=m
    CONFIG_SND_SOC_TEGRA_MAX98090=m
    CONFIG_SND_SOC_SPDIF=m
    CONFIG_SND_SOC_STI=m
    CONFIG_USB_XHCI_HCD=y
    CONFIG_USB_XHCI_MVEBU=y
    CONFIG_USB_XHCI_RCAR=m
    CONFIG_USB_XHCI_TEGRA=m
    
    CONFIG_USB_XHCI_PLATFORM=m
    
    CONFIG_USB_EHCI_MSM=m
    CONFIG_USB_EHCI_EXYNOS=y
    CONFIG_USB_EHCI_TEGRA=y
    CONFIG_USB_EHCI_HCD_STI=y
    CONFIG_USB_EHCI_HCD_PLATFORM=y
    CONFIG_USB_ISP1760=y
    CONFIG_USB_OHCI_HCD=y
    CONFIG_USB_OHCI_HCD_STI=y
    CONFIG_USB_OHCI_HCD_PLATFORM=y
    CONFIG_USB_OHCI_EXYNOS=m
    CONFIG_USB_R8A66597_HCD=m
    CONFIG_USB_RENESAS_USBHS=m
    CONFIG_USB_STORAGE=y
    CONFIG_USB_MUSB_SUNXI=m
    CONFIG_USB_CHIPIDEA_UDC=y
    CONFIG_USB_CHIPIDEA_HOST=y
    CONFIG_AB8500_USB=y
    CONFIG_KEYSTONE_USB_PHY=y
    CONFIG_USB_GPIO_VBUS=y
    CONFIG_USB_ISP1301=y
    CONFIG_USB_MSM_OTG=m
    CONFIG_USB_MXS_PHY=y
    CONFIG_USB_FSL_USB2=y
    CONFIG_USB_RENESAS_USBHS_UDC=m
    CONFIG_MMC_BLOCK_MINORS=16
    CONFIG_MMC_ARMMMCI=y
    CONFIG_MMC_SDHCI_OF_ARASAN=y
    CONFIG_MMC_SDHCI_OF_AT91=y
    CONFIG_MMC_SDHCI_OF_ESDHC=y
    CONFIG_MMC_SDHCI_ESDHC_IMX=y
    CONFIG_MMC_SDHCI_DOVE=y
    CONFIG_MMC_SDHCI_TEGRA=y
    CONFIG_MMC_SDHCI_PXAV3=y
    CONFIG_MMC_SDHCI_SPEAR=y
    CONFIG_MMC_SDHCI_S3C=y
    CONFIG_MMC_SDHCI_S3C_DMA=y
    CONFIG_MMC_SDHCI_BCM_KONA=y
    CONFIG_MMC_SDHCI_ST=y
    CONFIG_MMC_OMAP=y
    CONFIG_MMC_ATMELMCI=y
    CONFIG_MMC_SDHCI_MSM=y
    CONFIG_MMC_MVSDIO=y
    CONFIG_MMC_SDHI=y
    CONFIG_MMC_DW_PLTFM=y
    CONFIG_MMC_DW_EXYNOS=y
    CONFIG_MMC_DW_ROCKCHIP=y
    CONFIG_MMC_SH_MMCIF=y
    CONFIG_MMC_SUNXI=y
    CONFIG_MMC_BCM2835=y
    CONFIG_NEW_LEDS=y
    CONFIG_LEDS_CLASS_FLASH=m
    CONFIG_LEDS_GPIO=y
    CONFIG_LEDS_PWM=y
    CONFIG_LEDS_MAX77693=m
    CONFIG_LEDS_MAX8997=m
    CONFIG_LEDS_TRIGGERS=y
    CONFIG_LEDS_TRIGGER_TIMER=y
    CONFIG_LEDS_TRIGGER_ONESHOT=y
    CONFIG_LEDS_TRIGGER_HEARTBEAT=y
    CONFIG_LEDS_TRIGGER_BACKLIGHT=y
    CONFIG_LEDS_TRIGGER_CPU=y
    CONFIG_LEDS_TRIGGER_GPIO=y
    CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
    CONFIG_LEDS_TRIGGER_TRANSIENT=y
    CONFIG_LEDS_TRIGGER_CAMERA=y
    CONFIG_EDAC_HIGHBANK_MC=y
    CONFIG_EDAC_HIGHBANK_L2=y
    CONFIG_RTC_CLASS=y
    CONFIG_RTC_DRV_AC100=y
    CONFIG_RTC_DRV_AS3722=y
    CONFIG_RTC_DRV_MAX8907=y
    CONFIG_RTC_DRV_MAX8998=m
    CONFIG_RTC_DRV_MAX8997=m
    CONFIG_RTC_DRV_MAX77686=y
    CONFIG_RTC_DRV_RK808=m
    CONFIG_RTC_DRV_ST_LPC=y
    CONFIG_RTC_DRV_DA9063=m
    CONFIG_RTC_DRV_EFI=m
    CONFIG_RTC_DRV_DIGICOLOR=m
    CONFIG_RTC_DRV_S5M=m
    CONFIG_RTC_DRV_S3C=m
    CONFIG_RTC_DRV_PL031=y
    CONFIG_RTC_DRV_AT91RM9200=m
    CONFIG_RTC_DRV_AT91SAM9=m
    CONFIG_RTC_DRV_VT8500=y
    CONFIG_RTC_DRV_SUN6I=y
    CONFIG_RTC_DRV_SUNXI=y
    CONFIG_RTC_DRV_MV=y
    CONFIG_RTC_DRV_TEGRA=y
    CONFIG_DMADEVICES=y
    CONFIG_DW_DMAC=y
    CONFIG_AT_HDMAC=y
    CONFIG_AT_XDMAC=y
    CONFIG_FSL_EDMA=y
    CONFIG_MV_XOR=y
    CONFIG_TEGRA20_APB_DMA=y
    CONFIG_SH_DMAE=y
    CONFIG_RCAR_DMAC=y
    CONFIG_RENESAS_USB_DMAC=m
    CONFIG_STE_DMA40=y
    CONFIG_SIRF_DMA=y
    CONFIG_TI_EDMA=y
    CONFIG_PL330_DMA=y
    CONFIG_IMX_SDMA=y
    CONFIG_IMX_DMA=y
    CONFIG_MXS_DMA=y
    CONFIG_DMA_BCM2835=y
    CONFIG_DMA_OMAP=y
    CONFIG_QCOM_BAM_DMA=y
    CONFIG_XILINX_DMA=y
    CONFIG_DMA_SUN6I=y
    CONFIG_ST_FDMA=m
    CONFIG_SENSORS_ISL29018=y
    CONFIG_SENSORS_ISL29028=y
    CONFIG_MFD_NVEC=y
    CONFIG_KEYBOARD_NVEC=y
    CONFIG_SERIO_NVEC_PS2=y
    CONFIG_NVEC_POWER=y
    CONFIG_NVEC_PAZ00=y
    CONFIG_BCMA=y
    CONFIG_BCMA_HOST_SOC=y
    CONFIG_BCMA_DRIVER_GMAC_CMN=y
    CONFIG_BCMA_DRIVER_GPIO=y
    CONFIG_QCOM_GSBI=y
    CONFIG_QCOM_PM=y
    CONFIG_QCOM_SMEM=y
    CONFIG_QCOM_SMD_RPM=y
    CONFIG_QCOM_SMP2P=y
    CONFIG_QCOM_SMSM=y
    CONFIG_QCOM_WCNSS_CTRL=m
    CONFIG_ROCKCHIP_PM_DOMAINS=y
    CONFIG_COMMON_CLK_QCOM=y
    CONFIG_QCOM_CLK_RPM=y
    CONFIG_STAGING_BOARD=y
    CONFIG_CROS_EC_CHARDEV=m
    CONFIG_COMMON_CLK_MAX77686=y
    CONFIG_COMMON_CLK_RK808=m
    CONFIG_COMMON_CLK_S2MPS11=m
    CONFIG_APQ_MMCC_8084=y
    CONFIG_MSM_GCC_8660=y
    CONFIG_MSM_MMCC_8960=y
    CONFIG_MSM_MMCC_8974=y
    CONFIG_HWSPINLOCK_QCOM=y
    CONFIG_ROCKCHIP_IOMMU=y
    CONFIG_TEGRA_IOMMU_GART=y
    CONFIG_TEGRA_IOMMU_SMMU=y
    CONFIG_ST_REMOTEPROC=m
    CONFIG_ARM_TEGRA_DEVFREQ=m
    CONFIG_MEMORY=y
    CONFIG_TI_AEMIF=y
    CONFIG_IIO=y
    CONFIG_IIO_SW_TRIGGER=y
    CONFIG_AT91_ADC=m
    CONFIG_AT91_SAMA5D2_ADC=m
    CONFIG_BERLIN2_ADC=m
    CONFIG_EXYNOS_ADC=m
    CONFIG_VF610_ADC=m
    CONFIG_XILINX_XADC=y
    CONFIG_MPU3050_I2C=y
    CONFIG_CM36651=m
    CONFIG_AK8975=y
    CONFIG_RASPBERRYPI_POWER=y
    CONFIG_IIO_HRTIMER_TRIGGER=y
    CONFIG_PWM=y
    CONFIG_PWM_ATMEL=m
    CONFIG_PWM_ATMEL_HLCDC_PWM=m
    CONFIG_PWM_ATMEL_TCB=m
    CONFIG_PWM_FSL_FTM=m
    CONFIG_PWM_RENESAS_TPU=y
    CONFIG_PWM_ROCKCHIP=m
    CONFIG_PWM_SAMSUNG=m
    CONFIG_PWM_SUN4I=y
    CONFIG_PWM_TEGRA=y
    CONFIG_PWM_VT8500=y
    CONFIG_PHY_HIX5HD2_SATA=y
    CONFIG_PWM_STI=y
    CONFIG_PWM_BCM2835=y
    CONFIG_PWM_BRCMSTB=m
    
    CONFIG_GENERIC_PHY=y
    
    CONFIG_OMAP_USB2=y
    CONFIG_TI_PIPE3=y
    CONFIG_PHY_BERLIN_USB=y
    CONFIG_PHY_BERLIN_SATA=y
    CONFIG_PHY_ROCKCHIP_DP=m
    CONFIG_PHY_ROCKCHIP_USB=y
    CONFIG_PHY_QCOM_APQ8064_SATA=m
    CONFIG_PHY_MIPHY28LP=y
    CONFIG_PHY_RCAR_GEN2=m
    CONFIG_PHY_STIH407_USB=y
    CONFIG_PHY_SUN4I_USB=y
    CONFIG_PHY_SUN9I_USB=y
    CONFIG_PHY_SAMSUNG_USB2=m
    CONFIG_PHY_TEGRA_XUSB=y
    CONFIG_PHY_BRCM_SATA=y
    CONFIG_NVMEM=y
    CONFIG_NVMEM_SUNXI_SID=y
    CONFIG_BCM2835_MBOX=y
    CONFIG_RASPBERRYPI_FIRMWARE=y
    CONFIG_EFI_VARS=m
    CONFIG_EFI_CAPSULE_LOADER=m
    CONFIG_BCM47XX_NVRAM=y
    CONFIG_BCM47XX_SPROM=y
    CONFIG_EXT4_FS=y
    CONFIG_AUTOFS4_FS=y
    CONFIG_MSDOS_FS=y
    CONFIG_VFAT_FS=y
    CONFIG_NTFS_FS=y
    CONFIG_TMPFS_POSIX_ACL=y
    CONFIG_UBIFS_FS=y
    CONFIG_TMPFS=y
    CONFIG_SQUASHFS=y
    CONFIG_SQUASHFS_LZO=y
    CONFIG_SQUASHFS_XZ=y
    CONFIG_PSTORE=y
    CONFIG_PSTORE_CONSOLE=y
    CONFIG_PSTORE_PMSG=y
    CONFIG_PSTORE_RAM=y
    CONFIG_NFS_FS=y
    CONFIG_NFS_V3_ACL=y
    CONFIG_NFS_V4=y
    CONFIG_ROOT_NFS=y
    CONFIG_NLS_CODEPAGE_437=y
    CONFIG_NLS_ISO8859_1=y
    CONFIG_NLS_UTF8=y
    CONFIG_PRINTK_TIME=y
    CONFIG_MAGIC_SYSRQ=y
    CONFIG_KEYSTONE_IRQ=y
    CONFIG_HW_RANDOM=y
    CONFIG_HW_RANDOM_ST=y
    CONFIG_CRYPTO_USER=m
    CONFIG_CRYPTO_USER_API_RNG=m
    CONFIG_CRYPTO_USER_API_AEAD=m
    CONFIG_CRYPTO_DEV_MARVELL_CESA=m
    CONFIG_CRYPTO_DEV_EXYNOS_RNG=m
    CONFIG_CRYPTO_DEV_S5P=m
    CONFIG_CRYPTO_DEV_SUN4I_SS=m
    CONFIG_CRYPTO_DEV_ROCKCHIP=m
    CONFIG_ARM_CRYPTO=y
    CONFIG_CRYPTO_SHA1_ARM=m
    CONFIG_CRYPTO_SHA1_ARM_CE=m
    CONFIG_CRYPTO_SHA2_ARM_CE=m
    CONFIG_CRYPTO_AES_ARM=m
    CONFIG_CRYPTO_AES_ARM_CE=m
    CONFIG_CRYPTO_CHACHA20_NEON=m
    CONFIG_CRYPTO_CRC32_ARM_CE=m
    CONFIG_CRYPTO_CRCT10DIF_ARM_CE=m
    CONFIG_CRYPTO_GHASH_ARM_CE=m
    CONFIG_CRYPTO_DEV_ATMEL_AES=m
    CONFIG_CRYPTO_DEV_ATMEL_TDES=m
    CONFIG_CRYPTO_DEV_ATMEL_SHA=m
    CONFIG_VIDEO_VIVID=m
    CONFIG_VIRTIO=y
    CONFIG_VIRTIO_PCI=y
    CONFIG_VIRTIO_PCI_LEGACY=y
    CONFIG_VIRTIO_MMIO=y
    # Add config flags here that only appear in the multi_v7_defconfig
    CONFIG_ARCH_ALPINE=n
    CONFIG_ARCH_ARTPEC=n
    CONFIG_ARCH_AT91=n
    CONFIG_ARCH_BCM=n
    CONFIG_ARCH_BCM_CYGNUS=n
    CONFIG_ARCH_BCM_NSP=n
    CONFIG_ARCH_BCM_5301X=n
    CONFIG_ARCH_BCM_281XX=n
    CONFIG_ARCH_BCM_21664=n
    CONFIG_ARCH_BRCMSTB=n
    CONFIG_ARCH_BERLIN=n
    CONFIG_ARCH_DIGICOLOR=n
    CONFIG_ARCH_HIGHBANK=n
    CONFIG_ARCH_HISI=n
    CONFIG_ARCH_HI3xxx=n
    CONFIG_ARCH_HIP01=n
    CONFIG_ARCH_HIP04=n
    CONFIG_ARCH_HIX5HD2=n
    CONFIG_ARCH_MESON=n
    CONFIG_ARCH_MXC=n
    CONFIG_ARCH_MEDIATEK=n
    CONFIG_ARCH_QCOM=n
    CONFIG_ARCH_MSM8X60=n
    CONFIG_ARCH_MSM8960=n
    CONFIG_ARCH_MSM8974=n
    CONFIG_ARCH_ROCKCHIP=n
    CONFIG_ARCH_SOCFPGA=n
    CONFIG_ARCH_SPEAR13XX=n
    CONFIG_ARCH_STI=n
    CONFIG_ARCH_EXYNOS=n
    CONFIG_ARCH_SHMOBILE_MULTI=n
    CONFIG_ARCH_EMEV2=n
    CONFIG_ARCH_R7S72100=n
    CONFIG_ARCH_R8A73A4=n
    CONFIG_ARCH_R8A7740=n
    CONFIG_ARCH_R8A7778=n
    CONFIG_ARCH_R8A7779=n
    CONFIG_ARCH_R8A7790=n
    CONFIG_ARCH_R8A7791=n
    CONFIG_ARCH_R8A7793=n
    CONFIG_ARCH_R8A7794=n
    CONFIG_ARCH_RENESAS=n
    CONFIG_ARCH_SH73A0=n
    CONFIG_ARCH_SUNXI=n
    CONFIG_ARCH_SIRF=n
    CONFIG_ARCH_TEGRA=n
    CONFIG_ARCH_TEGRA_2x_SOC=n
    CONFIG_ARCH_TEGRA_3x_SOC=n
    CONFIG_ARCH_TEGRA_114_SOC=n
    CONFIG_ARCH_TEGRA_124_SOC=n
    CONFIG_ARCH_UNIPHIER=n
    CONFIG_ARCH_U8500=n
    CONFIG_ARCH_VEXPRESS=n
    CONFIG_ARCH_VEXPRESS_TC2_PM=n
    CONFIG_ARCH_WM8850=n
    CONFIG_ARCH_ZYNQ=n
    CONFIG_ARCH_VIRT=n
    CONFIG_ARCH_MVEBU=n
    CONFIG_PLAT_SPEAR=n
    CONFIG_CHROME_PLATFORMS=n
    ##################################################
    # TI Baseport Config Options
    ##################################################
    
    # Kernel compression
    CONFIG_KERNEL_GZIP=n
    CONFIG_KERNEL_LZMA=y
    CONFIG_KERNEL_LZ4=n
    CONFIG_KERNEL_XZ=n
    CONFIG_KERNEL_LZO=n
    
    # Enable process accounting
    CONFIG_BSD_PROCESS_ACCT=y
    
    # Have some way to pick up kernel config later on
    # Always useful to look at /proc/config.gz
    CONFIG_IKCONFIG=y
    CONFIG_IKCONFIG_PROC=y
    
    # Add Bin2c
    CONFIG_BUILD_BIN2C=y
    
    # Add base Cgroups functions
    CONFIG_CGROUP_DEBUG=n
    CONFIG_CPUSETS=y
    CONFIG_PROC_PID_CPUSET=y
    CONFIG_PAGE_COUNTER=y
    CONFIG_MEMCG=y
    CONFIG_MEMCG_SWAP=y
    CONFIG_MEMCG_SWAP_ENABLED=y
    CONFIG_DEBUG_BLK_CGROUP=n
    CONFIG_CGROUP_WRITEBACK=y
    
    # Choose CONFIG_EMBEDDED
    CONFIG_EMBEDDED=y
    CONFIG_EXPERT=y
    CONFIG_ARM_PATCH_PHYS_VIRT=y
    
    # Enable all kernel symbols please
    CONFIG_KALLSYMS=y
    CONFIG_KALLSYMS_ALL=y
    
    # Enable AEABI
    CONFIG_AEABI=y
    
    # How do we want kernel Modules to work?
    CONFIG_BASE_FULL=y
    CONFIG_BASE_SMALL=0
    CONFIG_MODULES=y
    CONFIG_MODULE_FORCE_LOAD=y
    CONFIG_MODULE_UNLOAD=y
    CONFIG_MODULE_FORCE_UNLOAD=y
    CONFIG_MODVERSIONS=y
    CONFIG_MODULE_SRCVERSION_ALL=y
    CONFIG_MODULE_SIG=n
    CONFIG_MODULE_COMPRESS=n
    CONFIG_MODULES_TREE_LOOKUP=y
    
    # Boot options
    CONFIG_USE_OF=y
    CONFIG_ATAGS=y
    CONFIG_DEPRECATED_PARAM_STRUCT=n
    CONFIG_ZBOOT_ROM_TEXT=0x0
    CONFIG_ZBOOT_ROM_BSS=0x0
    CONFIG_ARM_APPENDED_DTB=y
    CONFIG_ARM_ATAG_DTB_COMPAT=y
    CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER=y
    CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=n
    CONFIG_CMDLINE=""
    CONFIG_CMDLINE_FROM_BOOTLOADER=y
    CONFIG_CMDLINE_EXTEND=n
    CONFIG_CMDLINE_FORCE=n
    CONFIG_ATAGS_PROC=y
    CONFIG_CRASH_DUMP=n
    CONFIG_AUTO_ZRELADDR=y
    
    # Mem allocator
    CONFIG_SLAB=n
    CONFIG_SLUB=y
    
    # Enable NEON
    CONFIG_VFP=y
    CONFIG_NEON=y
    CONFIG_KERNEL_MODE_NEON=y
    
    # POSIX Message queue
    CONFIG_POSIX_MQUEUE=y
    
    # No Multi Cluster systems in TI yet..
    CONFIG_MCPM=n
    
    # Serial
    CONFIG_SERIAL_8250_OMAP=y
    CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y
    CONFIG_SERIAL_8250_NR_UARTS=10
    CONFIG_SERIAL_8250_RUNTIME_UARTS=10
    CONFIG_SERIAL_8250_DMA=y
    CONFIG_SERIAL_OMAP=n
    CONFIG_SERIAL_8250_DW=n
    CONFIG_SERIAL_8250_EM=n
    CONFIG_SERIAL_AMBA_PL011=n
    CONFIG_SERIAL_XILINX_PS_UART=n
    CONFIG_SERIAL_FSL_LPUART=n
    CONFIG_SERIAL_CONEXANT_DIGICOLOR=n
    CONFIG_SERIAL_ST_ASC=n
    
    CONFIG_JUMP_LABEL=y
    
    # Disable Extra debug options
    CONFIG_TIMER_STATS=n
    CONFIG_DEBUG_SPINLOCK=n
    CONFIG_DEBUG_MUTEXES=n
    CONFIG_DEBUG_LOCK_ALLOC=n
    CONFIG_PROVE_LOCKING=n
    CONFIG_LOCKDEP=n
    CONFIG_STACKTRACE=n
    CONFIG_FTRACE=n
    CONFIG_ARM_UNWIND=n
    CONFIG_DEBUG_PREEMPT=n
    CONFIG_SLUB_DEBUG=n
    CONFIG_LOCKUP_DETECTOR=n
    CONFIG_DETECT_HUNG_TASK=n
    CONFIG_IRQ_DOMAIN_DEBUG=n
    CONFIG_DEBUG_BUGVERBOSE=n
    
    CONFIG_DEBUG_FS=y
    
    # Enable System V IPC
    CONFIG_SYSVIPC=y
    
    # Power management options
    CONFIG_SUSPEND_FREEZER=y
    CONFIG_SUSPEND_SKIP_SYNC=n
    CONFIG_HIBERNATION=n
    CONFIG_PM_SLEEP=y
    CONFIG_PM_SLEEP_SMP=y
    CONFIG_PM_AUTOSLEEP=n
    CONFIG_PM_WAKELOCKS=n
    CONFIG_PM=y
    CONFIG_PM_DEBUG=y
    CONFIG_APM_EMULATION=n
    CONFIG_PM_OPP=y
    CONFIG_PM_CLK=y
    CONFIG_PM_GENERIC_DOMAINS=y
    CONFIG_WQ_POWER_EFFICIENT_DEFAULT=n
    CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
    CONFIG_PM_GENERIC_DOMAINS_OF=y
    CONFIG_CPU_PM=y
    CONFIG_ARCH_SUSPEND_POSSIBLE=y
    CONFIG_ARM_CPU_SUSPEND=y
    CONFIG_ARCH_HIBERNATION_POSSIBLE=y
    
    # Clock framework stuff we need
    CONFIG_CLKDEV_LOOKUP=y
    CONFIG_HAVE_CLK_PREPARE=y
    CONFIG_COMMON_CLK=y
    CONFIG_COMMON_CLK_SI5351=n
    CONFIG_COMMON_CLK_SI514=n
    CONFIG_COMMON_CLK_SI570=n
    CONFIG_COMMON_CLK_CDCE925=n
    CONFIG_CLK_TWL6040=n
    CONFIG_CLK_QORIQ=n
    CONFIG_COMMON_CLK_PALMAS=y
    CONFIG_COMMON_CLK_PWM=n
    CONFIG_COMMON_CLK_PXA=n
    CONFIG_COMMON_CLK_CDCE706=n
    CONFIG_CLKSRC_OF=y
    CONFIG_CLKSRC_PROBE=y
    CONFIG_CLKSRC_MMIO=y
    CONFIG_CLKSRC_TI_32K=y
    CONFIG_ARM_ARCH_TIMER=y
    CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
    CONFIG_ARM_GLOBAL_TIMER=n
    CONFIG_ARM_TIMER_SP804=n
    # Clock cleanup please
    CONFIG_OMAP_RESET_CLOCKS=y
    
    # CPU Idle
    CONFIG_CPU_IDLE_GOV_LADDER=y
    CONFIG_CPU_IDLE_GOV_MENU=y
    CONFIG_DT_IDLE_STATES=y
    
    # ARM CPU Idle Drivers
    CONFIG_ARM_CPUIDLE=y
    CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=n
    
    # CPU Frequency scaling
    CONFIG_CPU_FREQ_GOV_COMMON=y
    CONFIG_CPU_FREQ_STAT=y
    CONFIG_CPU_FREQ_STAT_DETAILS=y
    CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
    CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
    CONFIG_CPU_FREQ_GOV_POWERSAVE=y
    CONFIG_CPU_FREQ_GOV_USERSPACE=y
    CONFIG_CPU_FREQ_GOV_ONDEMAND=y
    CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
    
    # CPUFreq Driver Options
    CONFIG_CPUFREQ_DT=y
    CONFIG_ARM_BIG_LITTLE_CPUFREQ=n
    CONFIG_ARM_KIRKWOOD_CPUFREQ=n
    CONFIG_ARM_OMAP2PLUS_CPUFREQ=n
    CONFIG_ARM_TI_CPUFREQ=y
    CONFIG_QORIQ_CPUFREQ=n
    
    # AMx3 Power Config Options
    CONFIG_MAILBOX=y
    CONFIG_WKUP_M3_RPROC=m
    CONFIG_SOC_TI=y
    CONFIG_SOC_BRCMSTB=n
    CONFIG_WKUP_M3_IPC=m
    CONFIG_AMX3_PM=m
    CONFIG_SRAM=y
    CONFIG_TI_EMIF_SRAM=m
    CONFIG_SUNXI_SRAM=n
    
    CONFIG_PM_DEVFREQ=n
    
    # K2G Power config options
    # CONFIG_MAILBOX is enabled in AMx3
    CONFIG_TI_MESSAGE_MANAGER=y
    CONFIG_TI_SCI_PROTOCOL=y
    CONFIG_TI_SCI_PM_DOMAINS=y
    CONFIG_TI_SCI_CLK=y
    
    # Enable Reset Controllers
    CONFIG_RESET_CONTROLLER=y
    CONFIG_RESET_TI_SYSCON=y
    CONFIG_RESET_TI_SCI=y
    
    # CPUFreq and OPP drivers
    CONFIG_OPP_DOMAIN_TI=y
    
    # Thermal
    CONFIG_THERMAL=y
    CONFIG_THERMAL_OF=y
    CONFIG_THERMAL_WRITABLE_TRIPS=y
    CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
    CONFIG_THERMAL_GOV_FAIR_SHARE=y
    CONFIG_THERMAL_GOV_STEP_WISE=y
    CONFIG_THERMAL_GOV_BANG_BANG=y
    CONFIG_THERMAL_GOV_USER_SPACE=y
    CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
    CONFIG_CPU_THERMAL=y
    CONFIG_TI_SOC_THERMAL=y
    CONFIG_TI_THERMAL=y
    CONFIG_OMAP4_THERMAL=y
    CONFIG_OMAP5_THERMAL=y
    CONFIG_DRA752_THERMAL=y
    
    # Since HWMON is needed by Sensors..
    CONFIG_HWMON=y
    CONFIG_SENSORS_TMP102=y
    CONFIG_SENSORS_GPIO_FAN=y
    
    # Enable the reset framework
    CONFIG_POWER_RESET=y
    CONFIG_POWER_SUPPLY=y
    
    # Pinctrl
    CONFIG_PINCTRL_TI_IODELAY=y
    CONFIG_PINCTRL_SINGLE=y
    
    #
    # Multifunction device drivers
    CONFIG_MFD_CORE=y
    CONFIG_MFD_AS3711=n
    CONFIG_MFD_AS3722=n
    CONFIG_PMIC_ADP5520=n
    CONFIG_MFD_AAT2870_CORE=n
    CONFIG_MFD_ATMEL_FLEXCOM=n
    CONFIG_MFD_ATMEL_HLCDC=n
    CONFIG_MFD_BCM590XX=n
    CONFIG_MFD_AXP20X=n
    CONFIG_MFD_AXP20X_I2C=n
    CONFIG_MFD_CROS_EC=n
    CONFIG_MFD_CROS_EC_I2C=n
    CONFIG_MFD_CROS_EC_SPI=n
    CONFIG_MFD_ASIC3=n
    CONFIG_PMIC_DA903X=n
    CONFIG_MFD_DA9052_SPI=n
    CONFIG_MFD_DA9052_I2C=n
    CONFIG_MFD_DA9055=n
    CONFIG_MFD_DA9062=n
    CONFIG_MFD_DA9063=n
    CONFIG_MFD_DA9150=n
    CONFIG_MFD_DLN2=n
    CONFIG_MFD_MC13XXX_SPI=n
    CONFIG_MFD_MC13XXX_I2C=n
    CONFIG_MFD_HI6421_PMIC=n
    CONFIG_HTC_EGPIO=n
    CONFIG_HTC_PASIC3=n
    CONFIG_HTC_I2CPLD=n
    CONFIG_LPC_ICH=n
    CONFIG_LPC_SCH=n
    CONFIG_INTEL_SOC_PMIC=n
    CONFIG_MFD_JANZ_CMODIO=n
    CONFIG_MFD_KEMPLD=n
    CONFIG_MFD_88PM800=n
    CONFIG_MFD_88PM805=n
    CONFIG_MFD_88PM860X=n
    CONFIG_MFD_MAX14577=n
    CONFIG_MFD_MAX77686=n
    CONFIG_MFD_MAX77693=n
    CONFIG_MFD_MAX77843=n
    CONFIG_MFD_MAX8907=n
    CONFIG_MFD_MAX8925=n
    CONFIG_MFD_MAX8997=n
    CONFIG_MFD_MAX8998=n
    CONFIG_MFD_MT6397=n
    CONFIG_MFD_MENF21BMC=n
    CONFIG_EZX_PCAP=n
    CONFIG_MFD_VIPERBOARD=n
    CONFIG_MFD_RETU=n
    CONFIG_MFD_PCF50633=n
    CONFIG_MFD_PM8XXX=n
    CONFIG_MFD_PM8921_CORE=n
    CONFIG_MFD_RDC321X=n
    CONFIG_MFD_RTSX_PCI=n
    CONFIG_MFD_RT5033=n
    CONFIG_MFD_RTSX_USB=n
    CONFIG_MFD_RC5T583=n
    CONFIG_MFD_RK808=n
    CONFIG_MFD_RN5T618=n
    CONFIG_MFD_SEC_CORE=n
    CONFIG_MFD_SI476X_CORE=n
    CONFIG_MFD_SM501=n
    CONFIG_MFD_SKY81452=n
    CONFIG_MFD_SMSC=n
    CONFIG_ABX500_CORE=n
    CONFIG_AB3100_CORE=n
    CONFIG_MFD_STMPE=n
    CONFIG_STMPE_I2C=n
    CONFIG_STMPE_SPI=n
    CONFIG_MFD_SYSCON=y
    CONFIG_MFD_TI_AM335X_TSCADC=m
    CONFIG_MFD_LP3943=n
    CONFIG_MFD_LP8788=n
    CONFIG_MFD_OMAP_USB_HOST=y
    CONFIG_MFD_PALMAS=y
    CONFIG_TPS6105X=n
    CONFIG_TPS65010=n
    CONFIG_TPS6507X=n
    CONFIG_MFD_TPS65086=n
    CONFIG_MFD_TPS65090=y
    CONFIG_MFD_TPS65217=y
    CONFIG_MFD_TPS65218=y
    CONFIG_MFD_TPS6586X=y
    CONFIG_MFD_TPS65910=y
    CONFIG_MFD_TPS65912_I2C=n
    CONFIG_MFD_TPS65912_SPI=n
    CONFIG_MFD_TPS80031=n
    CONFIG_TWL4030_CORE=n
    CONFIG_TWL4030_POWER=n
    CONFIG_MFD_TWL4030_AUDIO=n
    CONFIG_TWL6040_CORE=y
    CONFIG_MFD_WL1273_CORE=n
    CONFIG_MFD_LM3533=n
    CONFIG_MFD_TI_LP873X=y
    CONFIG_MFD_TI_LP87565=y
    CONFIG_MFD_TC3589X=n
    CONFIG_MFD_TMIO=n
    CONFIG_MFD_T7L66XB=n
    CONFIG_MFD_TC6387XB=n
    CONFIG_MFD_TC6393XB=n
    CONFIG_MFD_VX855=n
    CONFIG_MFD_ARIZONA_I2C=n
    CONFIG_MFD_ARIZONA_SPI=n
    CONFIG_MFD_WM8400=n
    CONFIG_MFD_WM831X_I2C=n
    CONFIG_MFD_WM831X_SPI=n
    CONFIG_MFD_WM8350_I2C=n
    CONFIG_MFD_WM8994=n
    CONFIG_MFD_VEXPRESS_SYSREG=n
    
    # Regulators
    CONFIG_REGULATOR=y
    CONFIG_REGULATOR_FIXED_VOLTAGE=y
    CONFIG_REGULATOR_DEBUG=n
    CONFIG_REGULATOR_VIRTUAL_CONSUMER=n
    CONFIG_REGULATOR_USERSPACE_CONSUMER=n
    CONFIG_REGULATOR_ACT8865=n
    CONFIG_REGULATOR_AD5398=n
    CONFIG_REGULATOR_ANATOP=n
    CONFIG_REGULATOR_AS3711=n
    CONFIG_REGULATOR_AS3722=n
    CONFIG_REGULATOR_AXP20X=n
    CONFIG_REGULATOR_BCM590XX=n
    CONFIG_REGULATOR_DA9210=n
    CONFIG_REGULATOR_DA9211=n
    CONFIG_REGULATOR_FAN53555=n
    CONFIG_REGULATOR_GPIO=y
    CONFIG_REGULATOR_ISL9305=n
    CONFIG_REGULATOR_ISL6271A=n
    CONFIG_REGULATOR_LP3971=n
    CONFIG_REGULATOR_LP3972=n
    CONFIG_REGULATOR_LP872X=n
    CONFIG_REGULATOR_LP8755=n
    CONFIG_REGULATOR_LP873X=y
    CONFIG_REGULATOR_LP87565=y
    CONFIG_REGULATOR_LTC3589=n
    CONFIG_REGULATOR_MAX14577=n
    CONFIG_REGULATOR_MAX1586=n
    CONFIG_REGULATOR_MAX8649=n
    CONFIG_REGULATOR_MAX8660=n
    CONFIG_REGULATOR_MAX8907=n
    CONFIG_REGULATOR_MAX8952=n
    CONFIG_REGULATOR_MAX8973=n
    CONFIG_REGULATOR_MAX77686=n
    CONFIG_REGULATOR_MAX77693=n
    CONFIG_REGULATOR_MAX77802=n
    CONFIG_REGULATOR_MT6311=n
    CONFIG_REGULATOR_PALMAS=y
    CONFIG_REGULATOR_PBIAS=y
    CONFIG_REGULATOR_PFUZE100=n
    CONFIG_REGULATOR_PWM=n
    CONFIG_REGULATOR_RK808=n
    CONFIG_REGULATOR_S2MPA01=n
    CONFIG_REGULATOR_S2MPS11=n
    CONFIG_REGULATOR_S5M8767=n
    CONFIG_REGULATOR_TI_ABB=y
    CONFIG_REGULATOR_TPS51632=n
    CONFIG_REGULATOR_TPS62360=y
    CONFIG_REGULATOR_TPS65023=y
    CONFIG_REGULATOR_TPS6507X=y
    CONFIG_REGULATOR_TPS65090=y
    CONFIG_REGULATOR_TPS65217=y
    CONFIG_REGULATOR_TPS65218=y
    CONFIG_REGULATOR_TPS6524X=y
    CONFIG_REGULATOR_TPS6586X=y
    CONFIG_REGULATOR_TPS65910=y
    CONFIG_REGULATOR_TWL4030=n
    CONFIG_REGULATOR_VEXPRESS=n
    
    # Crypto Modules
    CONFIG_CRYPTO_DEV_OMAP=m
    CONFIG_CRYPTO_DEV_OMAP_SHAM=m
    CONFIG_CRYPTO_DEV_OMAP_AES=m
    CONFIG_CRYPTO_DEV_OMAP_DES=m
    CONFIG_CRYPTO_USER_API_HASH=m
    CONFIG_CRYPTO_USER_API_SKCIPHER=m
    CONFIG_CRYPTO_SHA1_ARM_NEON=m
    CONFIG_CRYPTO_SHA256_ARM=m
    CONFIG_CRYPTO_SHA512_ARM=m
    CONFIG_CRYPTO_AES_ARM_BS=m
    
    #
    # RTC drivers
    #
    CONFIG_RTC_DRV_ABB5ZES3=n
    CONFIG_RTC_DRV_ABX80X=n
    CONFIG_RTC_DRV_DS1307=m
    CONFIG_RTC_DRV_DS1374=n
    CONFIG_RTC_DRV_DS1672=n
    CONFIG_RTC_DRV_DS3232=n
    CONFIG_RTC_DRV_HYM8563=n
    CONFIG_RTC_DRV_MAX6900=n
    CONFIG_RTC_DRV_RS5C372=n
    CONFIG_RTC_DRV_ISL1208=n
    CONFIG_RTC_DRV_ISL12022=n
    CONFIG_RTC_DRV_ISL12057=n
    CONFIG_RTC_DRV_X1205=n
    CONFIG_RTC_DRV_PALMAS=m
    CONFIG_RTC_DRV_PCF2127=n
    CONFIG_RTC_DRV_PCF8523=n
    CONFIG_RTC_DRV_PCF8563=n
    CONFIG_RTC_DRV_PCF85063=n
    CONFIG_RTC_DRV_PCF8583=n
    CONFIG_RTC_DRV_M41T80=n
    CONFIG_RTC_DRV_BQ32K=n
    CONFIG_RTC_DRV_TPS6586X=m
    CONFIG_RTC_DRV_TPS65910=m
    CONFIG_RTC_DRV_TWL92330=y
    CONFIG_RTC_DRV_TWL4030=n
    CONFIG_RTC_DRV_S35390A=n
    CONFIG_RTC_DRV_FM3130=n
    CONFIG_RTC_DRV_RX8581=n
    CONFIG_RTC_DRV_RX8025=n
    CONFIG_RTC_DRV_EM3027=n
    CONFIG_RTC_DRV_RV3029C2=n
    CONFIG_RTC_DRV_RV8803=n
    
    CONFIG_RTC_DRV_M41T93=n
    CONFIG_RTC_DRV_M41T94=n
    CONFIG_RTC_DRV_DS1305=n
    CONFIG_RTC_DRV_DS1343=n
    CONFIG_RTC_DRV_DS1347=n
    CONFIG_RTC_DRV_DS1390=n
    CONFIG_RTC_DRV_MAX6902=n
    CONFIG_RTC_DRV_R9701=n
    CONFIG_RTC_DRV_RS5C348=n
    CONFIG_RTC_DRV_DS3234=n
    CONFIG_RTC_DRV_PCF2123=n
    CONFIG_RTC_DRV_RX4581=n
    CONFIG_RTC_DRV_MCP795=n
    
    CONFIG_RTC_DRV_CMOS=n
    CONFIG_RTC_DRV_DS1286=n
    CONFIG_RTC_DRV_DS1511=n
    CONFIG_RTC_DRV_DS1553=n
    CONFIG_RTC_DRV_DS1685_FAMILY=n
    CONFIG_RTC_DRV_DS1742=n
    CONFIG_RTC_DRV_DS2404=n
    CONFIG_RTC_DRV_STK17TA8=n
    CONFIG_RTC_DRV_M48T86=n
    CONFIG_RTC_DRV_M48T35=n
    CONFIG_RTC_DRV_M48T59=n
    CONFIG_RTC_DRV_MSM6242=n
    CONFIG_RTC_DRV_BQ4802=n
    CONFIG_RTC_DRV_RP5C01=n
    CONFIG_RTC_DRV_V3020=n
    CONFIG_RTC_DRV_ZYNQMP=n
    
    CONFIG_RTC_DRV_OMAP=m
    CONFIG_RTC_DRV_SNVS=n
    
    CONFIG_RTC_DRV_HID_SENSOR_TIME=n
    
    # WatchDog
    CONFIG_WATCHDOG=y
    CONFIG_WATCHDOG_CORE=y
    CONFIG_WATCHDOG_NOWAYOUT=n
    
    # Watchdog Device Drivers
    CONFIG_SOFT_WATCHDOG=n
    CONFIG_GPIO_WATCHDOG=n
    CONFIG_XILINX_WATCHDOG=n
    CONFIG_CADENCE_WATCHDOG=n
    CONFIG_DW_WATCHDOG=n
    CONFIG_OMAP_WATCHDOG=m
    CONFIG_TWL4030_WATCHDOG=m
    CONFIG_MAX63XX_WATCHDOG=n
    CONFIG_ALIM7101_WDT=n
    CONFIG_I6300ESB_WDT=n
    CONFIG_BCM7038_WDT=n
    CONFIG_MEN_A21_WDT=n
    
    # No Staging drivers please
    CONFIG_STAGING=n
    
    # GPIO
    CONFIG_GPIOLIB=y
    CONFIG_GPIO_SYSFS=y
    CONFIG_DEBUG_GPIO=y
    
    # GPIO disable unused options
    CONFIG_GPIO_DWAPB=n
    CONFIG_GPIO_EM=n
    CONFIG_GPIO_GENERIC_PLATFORM=n
    CONFIG_GPIO_XILINX=n
    CONFIG_GPIO_TPS6586X=n
    
    # Enable options to facilitate testing
    CONFIG_CRYPTO_TEST=m
    CONFIG_RTC_DEBUG=y
    CONFIG_THERMAL_EMULATION=y
    
    # OPTEE Driver
    CONFIG_TEE=y
    CONFIG_OPTEE=y
    ##################################################
    # TI RPMsg/IPC Config Options
    ##################################################
    # HwSpinLock
    CONFIG_HWSPINLOCK=y
    CONFIG_HWSPINLOCK_OMAP=y
    
    # Mailbox
    CONFIG_OMAP2PLUS_MBOX=y
    
    # IOMMU
    CONFIG_IOMMU_SUPPORT=y
    CONFIG_OMAP_IOMMU=y
    CONFIG_OMAP_IOMMU_DEBUG=y
    
    # Remoteproc
    CONFIG_REMOTEPROC=m
    CONFIG_OMAP_REMOTEPROC=m
    CONFIG_KEYSTONE_REMOTEPROC=m
    CONFIG_DA8XX_REMOTEPROC=m
    CONFIG_PRUSS_REMOTEPROC=m
    
    # RPMsg
    CONFIG_RPMSG_VIRTIO=y
    CONFIG_RPMSG_PROTO=y
    CONFIG_RPMSG_RPC=y
    CONFIG_RPMSG_PRU=y
    
    # DSP Memory Mapper for Keystone MPM
    CONFIG_KEYSTONE_DSP_MEM=m
    
    # UIO Module
    CONFIG_UIO=m
    ##################################################
    # TI Connectivity Configs
    ##################################################
    
    # Disable unused I2C options
    CONFIG_I2C_MUX=n
    CONFIG_I2C_DESIGNWARE_PLATFORM=n
    CONFIG_I2C_GPIO=n
    CONFIG_I2C_RK3X=n
    CONFIG_I2C_XILINX=n
    
    # I2C GPIO expanders
    CONFIG_GPIO_PCF857X=y
    CONFIG_GPIO_TPIC2810=m
    
    #Networking drivers
    CONFIG_NET_VENDOR_TI=y
    CONFIG_KEYSTONE_NAVIGATOR_QMSS=y
    CONFIG_KEYSTONE_NAVIGATOR_DMA=y
    CONFIG_TI_KEYSTONE_NETCP=y
    CONFIG_TI_KEYSTONE_NETCP_ETHSS=y
    CONFIG_TI_DAVINCI_EMAC=y
    CONFIG_TI_DAVINCI_MDIO=y
    CONFIG_TI_DAVINCI_CPDMA=y
    CONFIG_TI_CPSW_PHY_SEL=y
    CONFIG_TI_CPSW_ALE=y
    CONFIG_TI_CPSW=y
    CONFIG_TI_CPTS=y
    # non-TI Net vendors
    CONFIG_NET_DSA_BCM_SF2=n
    CONFIG_B53=n
    CONFIG_SYSTEMPORT=n
    CONFIG_NET_VENDOR_3COM=n
    CONFIG_NET_VENDOR_ADAPTEC=n
    CONFIG_NET_VENDOR_AGERE=n
    CONFIG_NET_VENDOR_ALTEON=n
    CONFIG_NET_VENDOR_AMAZON=n
    CONFIG_NET_VENDOR_AMD=n
    CONFIG_NET_VENDOR_ARC=n
    CONFIG_NET_VENDOR_ATHEROS=n
    CONFIG_NET_VENDOR_BROCADE=n
    CONFIG_NET_VENDOR_CAVIUM=n
    CONFIG_NET_VENDOR_CHELSIO=n
    CONFIG_NET_CADENCE=n
    CONFIG_BCMGENET=n
    CONFIG_NET_VENDOR_CIRRUS=n
    CONFIG_NET_VENDOR_CISCO=n
    CONFIG_NET_VENDOR_DEC=n
    CONFIG_NET_VENDOR_DLINK=n
    CONFIG_NET_VENDOR_EMULEX=n
    CONFIG_NET_VENDOR_EZCHIP=n
    CONFIG_NET_VENDOR_EXAR=n
    CONFIG_NET_VENDOR_FARADAY=n
    CONFIG_NET_VENDOR_HISILICON=n
    CONFIG_NET_VENDOR_HP=n
    CONFIG_IGB=n
    CONFIG_NET_VENDOR_I825XX=n
    CONFIG_NET_VENDOR_MELLANOX=n
    CONFIG_NET_VENDOR_MICROCHIP=n
    CONFIG_NET_VENDOR_MYRI=n
    CONFIG_NET_VENDOR_NATSEMI=n
    CONFIG_NET_VENDOR_NETRONOME=n
    CONFIG_NET_VENDOR_NVIDIA=n
    CONFIG_NET_VENDOR_OKI=n
    CONFIG_NET_VENDOR_8390=n
    CONFIG_NET_VENDOR_QLOGIC=n
    CONFIG_NET_VENDOR_QUALCOMM=n
    CONFIG_NET_VENDOR_REALTEK=n
    CONFIG_NET_VENDOR_RENESAS=n
    CONFIG_NET_VENDOR_RDC=n
    CONFIG_NET_VENDOR_ROCKER=n
    CONFIG_NET_VENDOR_SAMSUNG=n
    CONFIG_NET_VENDOR_SILAN=n
    CONFIG_NET_VENDOR_SIS=n
    CONFIG_NET_VENDOR_SEEQ=n
    CONFIG_NET_VENDOR_STMICRO=n
    CONFIG_NET_VENDOR_SUN=n
    CONFIG_NET_VENDOR_SYNOPSYS=n
    CONFIG_NET_VENDOR_TEHUTI=n
    CONFIG_NET_VENDOR_VIA=n
    CONFIG_NET_VENDOR_WIZNET=n
    #Wireless LAN
    CONFIG_WLCORE=m
    CONFIG_WLCORE_SDIO=m
    CONFIG_WL18XX=m
    
    #MDIO phys
    CONFIG_MARVELL_PHY=y
    CONFIG_MICREL_PHY=y
    # unused PHY drivers
    CONFIG_BROADCOM_PHY=n
    CONFIG_ICPLUS_PHY=n
    #PRU MII PHYs for Industrial Boards
    CONFIG_DP83848_PHY=y
    # Enable phy for DRA72 evm
    CONFIG_DP83867_PHY=y
    
    #MTD
    CONFIG_OMAP_GPMC=y
    CONFIG_MTD_NAND_OMAP2=y
    CONFIG_MTD_NAND_OMAP_BCH=y
    CONFIG_MTD_NAND_OMAP_BCH_BUILD=y
    CONFIG_MTD_TESTS=m
    CONFIG_MTD_CMDLINE_PARTS=y
    
    #PCIE
    CONFIG_PCI=y
    CONFIG_PCI_ENDPOINT=y
    CONFIG_PCI_ENDPOINT_CONFIGFS=y
    CONFIG_PCI_EPF_TEST=y
    CONFIG_PCI_ENDPOINT_TEST=m
    CONFIG_PCI_DRA7XX=y
    CONFIG_PCI_DRA7XX_HOST=y
    CONFIG_PCI_DRA7XX_EP=y
    CONFIG_PCI_KEYSTONE_EP=y
    #These drivers have been used with DRA7x/AM57x PCIe RC with some success
    CONFIG_NET_VENDOR_BROADCOM=y
    CONFIG_NET_VENDOR_MARVELL=y
    CONFIG_NET_VENDOR_INTEL=y
    CONFIG_TIGON3=m
    CONFIG_SKGE=m
    CONFIG_E1000=m
    CONFIG_E1000E=m
    CONFIG_IWLWIFI=m
    CONFIG_IWLDVM=m
    CONFIG_IWLMVM=m
    #Generic Phys
    CONFIG_PHY_TI_KEYSTONE_SERDES=y
    
    # Networking
    CONFIG_HSR_PRP=y
    CONFIG_NF_CONNTRACK=m
    CONFIG_NF_CONNTRACK_IPV4=m
    CONFIG_IP_NF_IPTABLES=m
    CONFIG_IP_NF_ARPTABLES=m
    CONFIG_IP_NF_ARPFILTER=m
    CONFIG_IP_NF_ARP_MANGLE=m
    CONFIG_IP_NF_FILTER=m
    CONFIG_IP_NF_NAT=m
    CONFIG_NF_NAT_IPV4=m
    CONFIG_IP_NF_TARGET_MASQUERADE=m
    CONFIG_BRIDGE=m
    CONFIG_XFRM_USER=m
    CONFIG_NET_KEY=m
    CONFIG_INET=y
    CONFIG_INET_AH=m
    CONFIG_INET6_AH=m
    CONFIG_INET6_IPCOMP=m
    CONFIG_INET6_XFRM_TUNNEL=m
    CONFIG_INET6_TUNNEL=m
    CONFIG_INET_ESP=m
    CONFIG_INET_IPCOMP=m
    CONFIG_INET_XFRM_MODE_TRANSPORT=m
    CONFIG_INET_XFRM_MODE_TUNNEL=m
    CONFIG_INET_XFRM_MODE_BEET=m
    CONFIG_IPV6_TUNNEL=m
    CONFIG_NETFILTER=y
    CONFIG_NETFILTER_XTABLES=m
    CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
    CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
    CONFIG_NETFILTER_XT_TARGET_MARK=m
    CONFIG_NETFILTER_XT_MATCH_COMMENT=m
    CONFIG_NETFILTER_XT_MATCH_CPU=m
    CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
    CONFIG_NETFILTER_XT_MATCH_LENGTH=m
    CONFIG_NETFILTER_XT_MATCH_LIMIT=m
    CONFIG_NETFILTER_XT_MATCH_MAC=m
    CONFIG_NETFILTER_XT_MATCH_MARK=m
    CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
    CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
    CONFIG_NETFILTER_XT_MATCH_POLICY=m
    CONFIG_NETFILTER_XT_MATCH_SCTP=m
    CONFIG_BRIDGE_NF_EBTABLES=m
    CONFIG_BRIDGE_EBT_BROUTE=m
    CONFIG_BRIDGE_EBT_T_FILTER=m
    CONFIG_BRIDGE_EBT_T_NAT=m
    CONFIG_BRIDGE_EBT_802_3=m
    CONFIG_BRIDGE_EBT_AMONG=m
    CONFIG_BRIDGE_EBT_ARP=m
    CONFIG_BRIDGE_EBT_IP=m
    CONFIG_BRIDGE_EBT_IP6=m
    CONFIG_BRIDGE_EBT_LIMIT=m
    CONFIG_BRIDGE_EBT_MARK=m
    CONFIG_BRIDGE_EBT_PKTTYPE=m
    CONFIG_BRIDGE_EBT_STP=m
    CONFIG_BRIDGE_EBT_VLAN=m
    CONFIG_BRIDGE_EBT_ARPREPLY=m
    CONFIG_BRIDGE_EBT_DNAT=m
    CONFIG_BRIDGE_EBT_MARK_T=m
    CONFIG_BRIDGE_EBT_REDIRECT=m
    CONFIG_BRIDGE_EBT_SNAT=m
    CONFIG_BRIDGE_EBT_LOG=m
    CONFIG_BRIDGE_EBT_NFLOG=m
    CONFIG_NET_SCHED=y
    CONFIG_NET_SCH_CBQ=m
    CONFIG_NET_SCH_HTB=m
    CONFIG_NET_SCH_HFSC=m
    CONFIG_NET_SCH_PRIO=m
    CONFIG_NET_SCH_MULTIQ=m
    CONFIG_NET_SCH_RED=m
    CONFIG_NET_SCH_SFB=m
    CONFIG_NET_SCH_SFQ=m
    CONFIG_NET_SCH_TEQL=m
    CONFIG_NET_SCH_TBF=m
    CONFIG_NET_SCH_GRED=m
    CONFIG_NET_SCH_DSMARK=m
    CONFIG_NET_SCH_NETEM=m
    CONFIG_NET_SCH_DRR=m
    CONFIG_NET_SCH_MQPRIO=m
    CONFIG_NET_SCH_CHOKE=m
    CONFIG_NET_SCH_QFQ=m
    CONFIG_NET_SCH_CODEL=m
    CONFIG_NET_SCH_FQ_CODEL=m
    CONFIG_NET_SCH_INGRESS=m
    CONFIG_NET_CLS=y
    CONFIG_NET_CLS_BASIC=m
    CONFIG_NET_CLS_TCINDEX=m
    CONFIG_NET_CLS_ROUTE4=m
    CONFIG_NET_CLS_FW=m
    CONFIG_NET_CLS_U32=m
    CONFIG_CLS_U32_MARK=y
    CONFIG_NET_CLS_RSVP=m
    CONFIG_NET_CLS_RSVP6=m
    CONFIG_NET_CLS_FLOW=m
    CONFIG_NET_EMATCH=y
    CONFIG_NET_EMATCH_STACK=32
    CONFIG_NET_EMATCH_CMP=m
    CONFIG_NET_EMATCH_NBYTE=m
    CONFIG_NET_EMATCH_U32=m
    CONFIG_NET_EMATCH_META=m
    CONFIG_NET_EMATCH_TEXT=m
    CONFIG_NET_CLS_ACT=y
    CONFIG_NET_ACT_POLICE=m
    CONFIG_NET_ACT_GACT=m
    CONFIG_GACT_PROB=y
    CONFIG_NET_ACT_MIRRED=m
    CONFIG_NET_ACT_IPT=m
    CONFIG_NET_ACT_NAT=m
    CONFIG_NET_ACT_PEDIT=m
    CONFIG_NET_ACT_SIMP=m
    CONFIG_NET_ACT_SKBEDIT=m
    CONFIG_NET_ACT_CSUM=m
    CONFIG_NET_CLS_IND=y
    CONFIG_NET_SCH_FIFO=y
    CONFIG_IP_SCTP=m
    CONFIG_VLAN_8021Q=m
    CONFIG_IP_MULTICAST=y
    
    #PRUSS Ethernet driver
    CONFIG_TI_PRUETH=m
    
    #MMC/SD support
    CONFIG_MMC=y
    CONFIG_MMC_SDHCI=y
    CONFIG_MMC_SDHCI_PLTFM=y
    CONFIG_MMC_OMAP_HS=y
    CONFIG_MMC_SDHCI_OMAP=y
    CONFIG_MMC_DW=n
    
    #SPI
    CONFIG_SPI_CADENCE_QUADSPI=y
    CONFIG_SPI_TI_QSPI=y
    #Disable unused SPI controllers
    CONFIG_SPI_BITBANG=n
    CONFIG_SPI_CADENCE=n
    CONFIG_SPI_ROCKCHIP=n
    CONFIG_SPI_XILINX=n
    CONFIG_SPI_SPIDEV=n
    
    #Disable SPI NOR 4K SECTORS
    CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=n
    
    #SPI GPIO expanders
    CONFIG_GPIO_PISOSR=m
    
    #SATA
    CONFIG_SATA_AHCI_PLATFORM=m
    CONFIG_SATA_AHCI=m
    CONFIG_ATA=m
    
    #USB gadgets
    CONFIG_USB_GADGET=m
    CONFIG_USB_AUDIO=m
    CONFIG_USB_ETH=m
    CONFIG_USB_G_NCM=m
    CONFIG_USB_GADGETFS=m
    CONFIG_USB_FUNCTIONFS=m
    CONFIG_USB_FUNCTIONFS_ETH=y
    CONFIG_USB_FUNCTIONFS_RNDIS=y
    CONFIG_USB_FUNCTIONFS_GENERIC=y
    CONFIG_USB_MASS_STORAGE=m
    CONFIG_USB_G_SERIAL=m
    CONFIG_USB_MIDI_GADGET=m
    CONFIG_USB_G_PRINTER=m
    CONFIG_USB_CDC_COMPOSITE=m
    CONFIG_USB_G_ACM_MS=m
    CONFIG_USB_G_MULTI=m
    CONFIG_USB_G_MULTI_CDC=y
    CONFIG_USB_G_HID=m
    CONFIG_USB_G_DBGP=m
    CONFIG_USB_G_WEBCAM=m
    CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=32
    CONFIG_USB_ZERO=m
    CONFIG_USB_CONFIGFS=m
    CONFIG_USB_CONFIGFS_SERIAL=y
    CONFIG_USB_CONFIGFS_ACM=y
    CONFIG_USB_CONFIGFS_OBEX=y
    CONFIG_USB_CONFIGFS_NCM=y
    CONFIG_USB_CONFIGFS_ECM=y
    CONFIG_USB_CONFIGFS_ECM_SUBSET=y
    CONFIG_USB_CONFIGFS_RNDIS=y
    CONFIG_USB_CONFIGFS_EEM=y
    CONFIG_USB_CONFIGFS_MASS_STORAGE=y
    CONFIG_USB_CONFIGFS_F_LB_SS=y
    CONFIG_USB_CONFIGFS_F_FS=y
    CONFIG_USB_CONFIGFS_F_UAC1=y
    CONFIG_USB_CONFIGFS_F_UAC2=y
    CONFIG_USB_CONFIGFS_F_MIDI=y
    CONFIG_USB_CONFIGFS_F_HID=y
    CONFIG_USB_CONFIGFS_F_UVC=y
    CONFIG_USB_CONFIGFS_F_PRINTER=y
    
    # USB DWC3
    CONFIG_USB_DWC3=m
    CONFIG_USB_DWC3_DUAL_ROLE=y
    CONFIG_USB_DWC3_OMAP=m
    CONFIG_USB_DWC3_PCI=n
    CONFIG_USB_DWC2=n
    CONFIG_USB_CHIPIDEA=n
    
    #USB PHY
    CONFIG_NOP_USB_XCEIV=m
    
    #USB MUSB
    CONFIG_USB_MUSB_HDRC=m
    CONFIG_USB_MUSB_DUAL_ROLE=y
    CONFIG_USB_MUSB_OMAP2PLUS=m
    CONFIG_USB_MUSB_AM35X=m
    CONFIG_USB_MUSB_DSPS=m
    CONFIG_USB_MUSB_AM335X_CHILD=m
    CONFIG_TI_CPPI41=y
    CONFIG_USB_TI_CPPI41_DMA=y
    CONFIG_AM335X_CONTROL_USB=y
    CONFIG_AM335X_PHY_USB=y
    
    #USB EHCI
    CONFIG_USB=m
    CONFIG_USB_EHCI_HCD=m
    CONFIG_USB_EHCI_PCI=m
    CONFIG_USB_EHCI_HCD_OMAP=m
    
    #USB Networking
    CONFIG_USB_USBNET=m
    CONFIG_USB_NET_DRIVERS=m
    CONFIG_USB_NET_SMSC95XX=m
    
    #USB testing
    CONFIG_USB_TEST=m
    
    #USB Serial
    CONFIG_USB_ACM=m
    CONFIG_USB_SERIAL=m
    
    # Extcon drivers
    CONFIG_EXTCON=m
    CONFIG_EXTCON_PALMAS=m
    CONFIG_EXTCON_USB_GPIO=m
    
    # PWM
    CONFIG_PWM_TIECAP=y
    CONFIG_PWM_TIEHRPWM=y
    CONFIG_PWM_TIPWMSS=y
    
    # 1-wire Bus Masters
    CONFIG_W1=m
    CONFIG_HDQ_MASTER_OMAP=m
    
    # Matrix keypad
    CONFIG_KEYBOARD_MATRIX=m
    
    #Touchscreen/ADC
    CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
    CONFIG_TI_AM335X_ADC=m
    
    #CAN
    CONFIG_CAN=m
    CONFIG_CAN_C_CAN=m
    CONFIG_CAN_C_CAN_PLATFORM=m
    CONFIG_CAN_M_CAN=m
    
    # Rotary Encoder
    CONFIG_INPUT_GPIO_DECODER=m
    
    # Filesystem extra options
    CONFIG_EXT4_FS_POSIX_ACL=y
    CONFIG_EXT4_FS_SECURITY=y
    CONFIG_CIFS=m
    CONFIG_CIFS_STATS=y
    CONFIG_CIFS_XATTR=y
    CONFIG_CIFS_POSIX=y
    CONFIG_CIFS_ACL=y
    ##################################################
    # TI Audio/Display config options
    ##################################################
    
    CONFIG_CMA_SIZE_MBYTES=24
    
    # backlight
    
    CONFIG_LEDS_CLASS=y
    CONFIG_LEDS_TLC591XX=y
    
    CONFIG_BACKLIGHT_PWM=y
    CONFIG_BACKLIGHT_GPIO=y
    CONFIG_BACKLIGHT_LED=y
    
    # fbdev
    
    CONFIG_FB_SSD1307=y
    
    # drm
    
    CONFIG_DRM=y
    
    # SGX driver needs legacy support
    CONFIG_DRM_LEGACY=y
    CONFIG_DRM_VM=y
    
    # Disable unneeded features
    
    CONFIG_VGA_ARB=n
    CONFIG_DRM_I2C_ADV7511=n
    CONFIG_DRM_NOUVEAU=n
    CONFIG_DRM_EXYNOS=n
    CONFIG_DRM_PANEL_SIMPLE=n
    CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=n
    CONFIG_DRM_NXP_PTN3460=n
    CONFIG_DRM_PARADE_PS8622=n
    CONFIG_DRM_STI=n
    CONFIG_LCD_CLASS_DEVICE=n
    
    # tilcdc
    
    CONFIG_DRM_I2C_NXP_TDA998X=y
    CONFIG_DRM_TILCDC=y
    
    # omapdrm
    
    CONFIG_DRM_OMAP=y
    CONFIG_DRM_OMAP_WB=y
    
    CONFIG_OMAP2_DSS=y
    CONFIG_OMAP2_DSS_DEBUGFS=y
    CONFIG_OMAP2_DSS_DPI=y
    CONFIG_OMAP2_DSS_VENC=n
    CONFIG_OMAP4_DSS_HDMI=y
    CONFIG_OMAP5_DSS_HDMI=y
    CONFIG_OMAP2_DSS_SDI=n
    CONFIG_OMAP2_DSS_DSI=n
    
    CONFIG_TI_DSS6=y
    
    CONFIG_DRM_OMAP_PANEL_DPI=y
    CONFIG_DRM_OMAP_CONNECTOR_HDMI=y
    CONFIG_DRM_OMAP_CONNECTOR_DVI=y
    CONFIG_DRM_OMAP_DRA7EVM_ENCODER_TPD12S015=y
    CONFIG_DRM_OMAP_ENCODER_TPD12S015=y
    CONFIG_DRM_OMAP_ENCODER_SII9022=y
    CONFIG_DRM_OMAP_ENCODER_TC358768=y
    CONFIG_DRM_OMAP_ENCODER_TFP410=y
    
    # sound
    
    CONFIG_SOUND=y
    CONFIG_SND=y
    CONFIG_SND_SOC=y
    CONFIG_SND_OMAP_SOC=y
    CONFIG_SND_EDMA_SOC=y
    CONFIG_SND_DAVINCI_SOC_MCASP=y
    CONFIG_SND_AM33XX_SOC_EVM=m
    CONFIG_SND_SIMPLE_CARD=m
    CONFIG_SND_SOC_TLV320AIC31XX=m
    CONFIG_SND_SOC_TLV320AIC3X=m
    CONFIG_SND_SOC_HDMI_CODEC=m
    CONFIG_SND_OMAP_SOC_HDMI_AUDIO=m
    # Disable what we don't want in our config
    CONFIG_SND_ARM=n
    CONFIG_SND_SPI=n
    CONFIG_SND_PCI=n
    CONFIG_SND_ATMEL_SOC=n
    CONFIG_SND_SOC_FSL_SAI=n
    CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=n
    CONFIG_SND_SOC_AK4642=n
    CONFIG_SND_SOC_SGTL5000=n
    CONFIG_SND_SOC_STI_SAS=n
    CONFIG_SND_SOC_WM8978=n
    
    # v4l2
    
    CONFIG_MEDIA_SUPPORT=y
    CONFIG_MEDIA_CAMERA_SUPPORT=y
    CONFIG_MEDIA_CONTROLLER=y
    CONFIG_VIDEO_V4L2_SUBDEV_API=y
    
    CONFIG_V4L_PLATFORM_DRIVERS=y
    CONFIG_VIDEO_AM437X_VPFE=m
    CONFIG_VIDEO_TI_CAL=m
    CONFIG_VIDEO_TI_VIP=m
    
    CONFIG_V4L_MEM2MEM_DRIVERS=y
    CONFIG_VIDEO_TI_VPE=m
    
    CONFIG_MEDIA_SUBDRV_AUTOSELECT=n
    CONFIG_VIDEO_OV2659=m
    CONFIG_VIDEO_OV1063X=m
    CONFIG_VIDEO_MT9T11X=m
    CONFIG_GPIO_PCA953X=m
    CONFIG_VIDEO_OV490=m
    
    CONFIG_MEDIA_USB_SUPPORT=y
    CONFIG_USB_VIDEO_CLASS=m
    CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
    
    # Touchscreen
    
    CONFIG_TOUCHSCREEN_EDT_FT5X06=m
    CONFIG_TOUCHSCREEN_PIXCIR=m
    CONFIG_TOUCHSCREEN_GOODIX=m
    
    CONFIG_HID_MULTITOUCH=m
    ##################################################
    # TI Base OMAP generation SoCs generic default
    ##################################################
    
    CONFIG_KEYSTONE2_DMA_COHERENT=n
    CONFIG_ARCH_OMAP=y
    
    CONFIG_ARCH_OMAP2PLUS=y
    CONFIG_OMAP_INTERCONNECT_BARRIER=y
    CONFIG_ARM_PSCI=n
    
    # Maximum Number of processors
    CONFIG_NR_CPUS=2
    
    # Kexec
    CONFIG_KEXEC=y
    
    # EDAC
    CONFIG_EDAC=y
    CONFIG_EDAC_TI=m
    ##################################################
    # TI DRA7 specific config options
    ##################################################
    
    # Supported ARM CPUs
    CONFIG_ARCH_MULTI_V6=n
    CONFIG_ARCH_MULTI_V7=y
    CONFIG_ARCH_MULTI_V6_V7=n
    CONFIG_CPU_V6=n
    
    # Enable CONFIG_SMP
    CONFIG_SMP=y
    
    # Disable Socs other than DRA7
    CONFIG_ARCH_OMAP2=n
    CONFIG_ARCH_OMAP3=n
    CONFIG_ARCH_OMAP4=n
    CONFIG_SOC_OMAP5=n
    CONFIG_SOC_AM33XX=n
    CONFIG_SOC_AM43XX=n
    CONFIG_SOC_DRA7XX=y
    
    CONFIG_ARCH_KEYSTONE=n
    
    CONFIG_ARM_LPAE=y
    
    CONFIG_TI_PTP_BC=y
    CONFIG_TI_1PPS_DM_TIMER=y
    ##################################################
    # Real Time Linux Configs
    ##################################################
    
    CONFIG_PREEMPT=y
    CONFIG_PREEMPT_RT_BASE=y
    CONFIG_PREEMPT_RT_FULL=y 
    
    #Disable PM features
    CONFIG_CPU_IDLE=n
    CONFIG_CPU_FREQ=n
    CONFIG_SUSPEND=n
    CONFIG_HOTPLUG_CPU=y
    
    # SCHED_DEBUG provides a lot of additional options for scheduler
    # tuning in /proc/sys/kernel/ and allows to see scheduler statistic in
    # /proc/sched_debug
    # CONFIG_SCHED_DEBUG
    
    # --- RCU optimization options to reduce OS jitter
    # RCU_BOOST : This option boosts the priority of preempted RCU readers that
    # block the current preemptible RCU grace period for too long.
    # This option also prevents heavy loads from blocking RCU
    # callback invocation for all flavors of RCU
    # CONFIG_RCU_BOOST=n
    
    # RCU_NOCB_CPU : Use this option to reduce OS jitter for aggressive HPC or
    # real-time workloads.	It can also be used to offload RCU
    # callback invocation to energy-efficient CPUs in battery-powered
    # asymmetric multiprocessors.
    # CONFIG_RCU_NOCB_CPU=y
    
    # RCU_NOCB_CPU_ALL: his option forces all CPUs to be no-CBs CPUs.
    # The rcu_nocbs= boot parameter will be ignored.  All CPUs' RCU callbacks will
    # be executed in the context of per-CPU rcuo kthreads created for
    # this purpose.
    # CONFIG_RCU_NOCB_CPU_ALL=y
    ##############################################
    #
    # Kernel options needed for systemd enabled TI SDKs
    # See https://cgit.freedesktop.org/systemd/systemd/tree/README#n38 for details
    #
    ##############################################
    CONFIG_DEVTMPFS=y
    CONFIG_DEVTMPFS_MOUNT=y
    CONFIG_CGROUPS=y
    CONFIG_CGROUP_FREEZER=y
    CONFIG_CGROUP_DEVICE=y
    CONFIG_CGROUP_CPUACCT=y
    CONFIG_BLK_CGROUP=y
    CONFIG_CGROUP_PIDS=y
    CONFIG_CGROUP_PERF=y
    
    CONFIG_INOTIFY_USER=y
    CONFIG_SIGNALFD=y
    CONFIG_TIMERFD=y
    CONFIG_EPOLL=y
    CONFIG_NET=y
    CONFIG_SYSFS=y
    CONFIG_PROC_FS=y
    CONFIG_FHANDLE=y
    
    # udev will fail to work with the legacy sysfs layout:
    CONFIG_SYSFS_DEPRECATED=n
    
    # Legacy hotplug slows down the system and confuses udev:
    CONFIG_UEVENT_HELPER_PATH=""
    
    # Userspace firmware loading is not supported and should
    # be disabled in the kernel:
    CONFIG_FW_LOADER_USER_HELPER=n
    
    # Some udev rules and virtualization detection relies on it:
    # Only for UEFI based systems
    # http://cateee.net/lkddb/web-lkddb/DMI.html
    CONFIG_DMIID=n
    
    # Support for some SCSI devices serial number retrieval, to
    # create additional symlinks in /dev/disk/ and /dev/tape:
    CONFIG_BLK_DEV_BSG=y
    
    # Required for PrivateNetwork and PrivateDevices in service units:
    # Note that systemd-localed.service and other systemd units use
    # PrivateNetwork and PrivateDevices so this is effectively required.
    CONFIG_NAMESPACES=y
    CONFIG_NET_NS=y
    CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
    
    # Optional but strongly recommended options: those are nice to have and
    # indeed recommended, but not necessarily systemd required. These to be
    # enabled in corresponding domain fragments since they are not specific
    # to supporting systemd.
    
    CONFIG_SECCOMP=y
    # for kcmp syscall
    CONFIG_CHECKPOINT_RESTORE=y
    
    # Required for CPUShares= in resource control unit settings
    CONFIG_CGROUP_SCHED=y
    CONFIG_FAIR_GROUP_SCHED=y
    
    # Required for CPUQuota= in resource control unit settings
    CONFIG_CFS_BANDWIDTH=y
    
    # For systemd-bootchart, several proc debug interfaces are required:
    # Systemd-debug.cfg?
    CONFIG_SCHEDSTATS=y
    CONFIG_SCHED_DEBUG=y
    
    # We recommend to turn off Real-Time group scheduling in the
    # kernel when using systemd. RT group scheduling effectively
    # makes RT scheduling unavailable for most userspace, since it
    # requires explicit assignment of RT budgets to each unit whose
    # processes making use of RT. As there's no sensible way to
    # assign these budgets automatically this cannot really be
    # fixed, and it's best to disable group scheduling hence.
    CONFIG_RT_GROUP_SCHED=n
    
    # Note that kernel auditing is broken when used with systemd's
    # container code. When using systemd in conjunction with
    # containers, please make sure to either turn off auditing at
    # runtime using the kernel command line option "audit=0", or
    # turn it off at kernel compile time using:
    CONFIG_AUDIT=n
    

  • Hi Billa,

    /sys/class/udc folder empty means some usb drivers are not loaded.
    In lsmod output do you see dwc3_omap driver?
    If not, can you please try 'modprobe dwc3_omap' before 'modprobe g_ether'?
  • Yes dwc3_omap is loaded.
  • Billa,

    This is the first time that I see dwc3_omap driver is loaded but /sys/class/udc/ folder is empty for usb module being configured for peripheral/otg mode. I am unable to directly point to the root cause.

    I noticed you dts has some changes related to usb, such as usb-phy and extcon. But I don't think they are directly related to this no-udc issue. I have modified my dts similar, but I still have /sys/class/udc/488d0000.usb/ folder on my board.

    Now I think the only way to solve the issue is that you to debug the kernel routine to understand why dwc3 is not registered in udc. All the related code is under kernel drivers/usb/dwc3/ folder, dwc3-omap.c, core.c, and gadget.c.

    dwc3_omap_probe() in dwc3-omap.c is called first, then triggers dwc3_probe() in core.c, which calls dwc3_core_init_mode(), --> dwc3_gadget_init() in gadget.c, --> usb_add_gadget_udc() to register itself to udc.
  • Bin:

    It seems that "extcon_get_edev_by_phandle()" is returning an error.

    See the code below in "dwc3-omap.c" file.

    static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
    {
     int   ret;
     struct device_node *node = omap->dev->of_node;
     struct extcon_dev *edev;

     if (of_property_read_bool(node, "extcon")) {
      edev = extcon_get_edev_by_phandle(omap->dev, 0);
      if (IS_ERR(edev)) {
       dev_vdbg(omap->dev, "couldn't get extcon device\n");
       return -EPROBE_DEFER;
      }
     ......................

    Billa

  • Moving forward with the debugging it seems that in function "extcon_get_edev_by_handle()" function in "extcon.c" file

    it does not find the "extcon_usb2" entry in the device tree. See attached the dts file.

    Billabridge_linux.dts.txt

  • Billa,

    Your extcon_usb2 DT node doesn't have "compatible" attribute, can you please check if that is the reason which causes the failure?
  • What should I put in "compatible" attribute?
  • I set compatible = "linux,extcon-usb.gpio" but I get a kernel error message "dwc3 488d0000.usb: failed to initialize core"
  • Please let mel review your dts thoroughly on the dt files you attached yesterday to see what is missing.
  • Jose Carlos Billalabeitia said:
    I set compatible = "linux,extcon-usb.gpio" but I get a kernel error message "dwc3 488d0000.usb: failed to initialize core"

    I think this is very close, but there is a typo: it should be "linux,extcon-usb-gpio", a 'dash', not 'dot' in front of 'gpio'. Please let me know if you see 488d0000.usb under /sys/class/udc/ after you correct this.

    However, I don't think this compatible setting is correct for vbus detection. How is your board design for vbus detection? Please explain how the vbus pin of the receptacle feeds into the processor? Or provide the usb portion of the schematics.

  • I fixed this but I get the error in "devm_phy_get(dev, "usb2-phy")" core.c file.

  • Your dts dra71-evm.dts.txt has &usb2_phy1 disabled. Please try to remove 'status = "disabled";' from this &usb2_phy1 node. I believe both usb phy nodes should be enabled.
  • In your schematics, the USB2 receptacle VBUS pin is connected to GPIO3_30, this is not correct. GPIO pins are not fail-safe, the processor could be damaged if the usb port is connected to a USB host when AM57x is not powered.

    What is the +5V_VBUS signal on the schematics? I cannot find the symbol elsewhere.

    Because AM57x USB2 max speed is high-speed, and I believe the Linux driver can still work for high-speed if the VBUS pin doesn't feed into the processor. So I think you can try to remove extcon_usb2 and its references in devicetree, and don't connect the receptacle VBUS pin to anywhere on your board. Let me know if your usb2 can functional. Of cause, you have to fix the usb2 phy problem above.

  • After reading your schematics more carefully, it seems your vbus detection logic is correct, I have removed my comments above. The only thing I am not sure is the voltage on the USB_DET signal, which seems to be only about 1.2V (6K/(10K+10K+6K). As a sw guy, I am not sure if 1.2V is high enough to drive the gpio pin.

    Anyway, please try to enable usb2_phy1 in dts and let me know it goes.

  • Bin:
    I already set status="okay" in usb2_phy1 but the issue continues.
    The +5V_VBUS is supplied by the host when it is connected.
    I checked with the oscillo that the USB_DET signal works properly when connecting/disconnecting USB cable.
    Billa
  • Jose Carlos Billalabeitia said:
    I already set status="okay" in usb2_phy1 but the issue continues.

    The same error in "devm_phy_get(dev, "usb2-phy")" as after you fixed the extcon compatible typo?

  • root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# dmesg | grep usb
    [    7.618521] usbcore: registered new interface driver usbfs
    [    7.626660] usbcore: registered new interface driver hub
    [    7.638856] usbcore: registered new device driver usb
    [    7.656818] usbcore: registered new interface driver usbserial
    [   16.601652] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer id
    [   16.601663] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [   16.601675] of_get_named_gpiod_flags: can't parse 'id-gpios' property of node '/extcon_usb2[0]'
    [   16.601684] of_get_named_gpiod_flags: can't parse 'id-gpio' property of node '/extcon_usb2[0]'
    [   16.601691] extcon-usb-gpio extcon_usb2: using lookup tables for GPIO lookup
    [   16.601699] extcon-usb-gpio extcon_usb2: lookup for GPIO id failed
    [   16.601707] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer vbus
    [   16.601714] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [   16.601723] of_get_named_gpiod_flags: can't parse 'vbus-gpios' property of node '/extcon_usb2[0]'
    [   16.609969] of_get_named_gpiod_flags: parsed 'vbus-gpio' property of node '/extcon_usb2[0]' - status (0)
    [   26.771889] dwc3 488d0000.usb: failed to initialize core
    [   26.865662] dwc3 488d0000.usb: failed to initialize core
    [   27.011745] dwc3 488d0000.usb: failed to initialize core
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# dmesg | grep dcw3
    root@am57xx-evm:~# dmesg | grep dwc3
    [   26.771889] dwc3 488d0000.usb: failed to initialize core
    [   26.865662] dwc3 488d0000.usb: failed to initialize core
    [   27.011745] dwc3 488d0000.usb: failed to initialize core
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# ./chkusb.sh 
    chkusb.sh Version 0.2.4
    Linux am57xx-evm 4.14.40-rt29-gd5443cbd3b #5 SMP PREEMPT RT Mon Oct 29 08:43:33 CET 2018 armv7l GNU/Linux
    USB initialization failed
    Warning: CONFIG_USB_OTG undefined, which is required for DRD mode.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-plat-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@48890000: otg, disabled
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@488d0000: peripheral, okay
    
    Gadget Kernel Config: g_zero is enabled
    Gadget Kernel Config: g_audio is enabled
    Gadget Kernel Config: g_ether is enabled
    Gadget Kernel Config: g_ncm is enabled
    Gadget Kernel Config: g_mass_storage is enabled
    Gadget Kernel Config: g_serial is enabled
    Gadget Kernel Config: g_printer is enabled
    gadget driver loaded: (none)
    
    The list of USB gadget drivers installed:
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/:
    function/
    legacy/
    libcomposite.ko
    udc/
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/function:
    u_audio.ko
    u_ether.ko
    u_serial.ko
    usb_f_acm.ko
    usb_f_ecm.ko
    usb_f_ecm_subset.ko
    usb_f_eem.ko
    usb_f_fs.ko
    usb_f_hid.ko
    usb_f_mass_storage.ko
    usb_f_midi.ko
    usb_f_ncm.ko
    usb_f_obex.ko
    usb_f_printer.ko
    usb_f_rndis.ko
    usb_f_serial.ko
    usb_f_ss_lb.ko
    usb_f_uac1.ko
    usb_f_uac2.ko
    usb_f_uvc.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/legacy:
    g_acm_ms.ko
    g_audio.ko
    g_cdc.ko
    g_dbgp.ko
    g_ether.ko
    g_ffs.ko
    g_hid.ko
    g_mass_storage.ko
    g_midi.ko
    g_multi.ko
    g_ncm.ko
    g_printer.ko
    g_serial.ko
    g_webcam.ko
    g_zero.ko
    gadgetfs.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/udc:
    udc-core.ko
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# ls -l /sys/class/udc/
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# modprobe g_ether
    [  126.318826] udc-core: couldn't find an available UDC - added [g_ether] to list of pending drivers
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# ls -l /sys/class/udc/
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# ./chkusb.sh 
    chkusb.sh Version 0.2.4
    Linux am57xx-evm 4.14.40-rt29-gd5443cbd3b #5 SMP PREEMPT RT Mon Oct 29 08:43:33 CET 2018 armv7l GNU/Linux
    USB initialization failed
    Warning: CONFIG_USB_OTG undefined, which is required for DRD mode.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-plat-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    Error: /lib/modules/4.14.40-rt29-gd5443cbd3b/modules.dep seems to be valid,
           but xhci-hcd.ko is not loaded.
           Please provide /proc/config.gz and /lib/module/4.14.40-rt29-gd5443cbd3b/*
           for further investigation.
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@48890000: otg, disabled
    ./chkusb.sh: line 320: warning: command substitution: ignored null byte in input
    ./chkusb.sh: line 321: warning: command substitution: ignored null byte in input
    usb@488d0000: peripheral, okay
    
    Gadget Kernel Config: g_zero is enabled
    Gadget Kernel Config: g_audio is enabled
    Gadget Kernel Config: g_ether is enabled
    Gadget Kernel Config: g_ncm is enabled
    Gadget Kernel Config: g_mass_storage is enabled
    Gadget Kernel Config: g_serial is enabled
    Gadget Kernel Config: g_printer is enabled
    gadget driver loaded: (none)
    
    The list of USB gadget drivers installed:
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/:
    function/
    legacy/
    libcomposite.ko
    udc/
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/function:
    u_audio.ko
    u_ether.ko
    u_serial.ko
    usb_f_acm.ko
    usb_f_ecm.ko
    usb_f_ecm_subset.ko
    usb_f_eem.ko
    usb_f_fs.ko
    usb_f_hid.ko
    usb_f_mass_storage.ko
    usb_f_midi.ko
    usb_f_ncm.ko
    usb_f_obex.ko
    usb_f_printer.ko
    usb_f_rndis.ko
    usb_f_serial.ko
    usb_f_ss_lb.ko
    usb_f_uac1.ko
    usb_f_uac2.ko
    usb_f_uvc.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/legacy:
    g_acm_ms.ko
    g_audio.ko
    g_cdc.ko
    g_dbgp.ko
    g_ether.ko
    g_ffs.ko
    g_hid.ko
    g_mass_storage.ko
    g_midi.ko
    g_multi.ko
    g_ncm.ko
    g_printer.ko
    g_serial.ko
    g_webcam.ko
    g_zero.ko
    gadgetfs.ko
    
    /lib/modules/4.14.40-rt29-gd5443cbd3b/kernel/drivers/usb/gadget/udc:
    udc-core.ko
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    root@am57xx-evm:~# 
    CTRL-A Z for help | 115200 8N1 | NOR | Minicom 2.7 | VT102 | Offline | ttyUSB0                                                                                                                              
    
    
    Attached is the console output.

    I did grep the kernel message for "usb" and "dwc3".

    Also I run the script "./chkusb.sh" and check "/sys/class/udc" directory before and after "modprobe g_ether".

    Hope this help.

    Billa

  • Hello,

    could you post your complete DTB file which you are using to boot ?

    Cheers,

    --Prabhakar Lad

  • DTS file seems correct, could you post the output of the following commands when its booted ?
    1] zcat /proc/config.gz
    2] dmesg

    Cheers,
    --Prabhakar Lad
  • [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.14.40-rt29-gd5443cbd3b (bridge@PC932) (gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)) #5 SMP PREEMPT RT Mon Oct 29 08:43:33 CET 2018
    [    0.000000] CPU: ARMv7 Processor [412fc0f2] revision 2 (ARMv7), cr=30c5387d
    [    0.000000] CPU: div instructions available: patching division code
    [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
    [    0.000000] OF: fdt: Machine model: TI DRA718 EVM
    [    0.000000] Memory policy: Data cache writealloc
    [    0.000000] efi: Getting EFI parameters from FDT:
    [    0.000000] efi: UEFI not found.
    [    0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB
    [    0.000000] OF: reserved mem: initialized node ipu2-memory@95800000, compatible id shared-dma-pool
    [    0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB
    [    0.000000] OF: reserved mem: initialized node dsp1-memory@99000000, compatible id shared-dma-pool
    [    0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB
    [    0.000000] OF: reserved mem: initialized node ipu1-memory@9d000000, compatible id shared-dma-pool
    [    0.000000] cma: Reserved 24 MiB at 0x0000000094000000
    [    0.000000] OMAP4: Map 0x000000009fd00000 to fe600000 for dram barrier
    [    0.000000] On node 0 totalpages: 130304
    [    0.000000] free_area_init_node: node 0, pgdat c10579c0, node_mem_map df77f000
    [    0.000000]   DMA zone: 1146 pages used for memmap
    [    0.000000]   DMA zone: 0 pages reserved
    [    0.000000]   DMA zone: 130304 pages, LIFO batch:31
    [    0.000000] DRA722 ES2.1
    [    0.000000] percpu: Embedded 15 pages/cpu @dfc33000 s31968 r8192 d21280 u61440
    [    0.000000] pcpu-alloc: s31968 r8192 d21280 u61440 alloc=15*4096
    [    0.000000] pcpu-alloc: [0] 0 
    [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129158
    [    0.000000] Kernel command line: console=ttyO2,115200n8 root=/dev/nfs nfsroot=10.3.33.185:/home/bridge/SDK-Bridge/ti-processor-sdk-linux-rt-am57xx-evm-05.00.00.15/targetNFS,nolock rw ip=10.3.33.186:10.3.33.185::255.255.248.0:::off
    [    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
    [    0.000000] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes)
    [    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
    [    0.000000] Memory: 319708K/521216K available (8192K kernel code, 357K rwdata, 2476K rodata, 2048K init, 347K bss, 21284K reserved, 180224K cma-reserved, 0K highmem)
    [    0.000000] Virtual kernel memory layout:
                       vector  : 0xffff0000 - 0xffff1000   (   4 kB)
                       fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
                       vmalloc : 0xe0000000 - 0xff800000   ( 504 MB)
                       lowmem  : 0xc0000000 - 0xdfd00000   ( 509 MB)
                       pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
                       modules : 0xbf000000 - 0xbfe00000   (  14 MB)
                         .text : 0xc0008000 - 0xc0a00000   (10208 kB)
                         .init : 0xc0e00000 - 0xc1000000   (2048 kB)
                         .data : 0xc1000000 - 0xc1059620   ( 358 kB)
                          .bss : 0xc105b000 - 0xc10b1d84   ( 348 kB)
    [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [    0.000000] Preemptible hierarchical RCU implementation.
    [    0.000000] 	RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
    [    0.000000] 	RCU priority boosting: priority 1 delay 500 ms.
    [    0.000000] 	No expedited grace period (rcu_normal_after_boot).
    [    0.000000] 	Tasks RCU enabled.
    [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
    [    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
    [    0.000000] GIC: Using split EOI/Deactivate mode
    [    0.000000] OMAP clockevent source: timer1 at 32786 Hz
    [    0.000000] arch_timer: cp15 timer(s) running at 6.14MHz (phys).
    [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x16af5adb9, max_idle_ns: 440795202250 ns
    [    0.000005] sched_clock: 56 bits at 6MHz, resolution 162ns, wraps every 4398046511023ns
    [    0.000012] Switching to timer-based delay loop, resolution 162ns
    [    0.000345] clocksource: 32k_counter: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 58327039986419 ns
    [    0.000347] OMAP clocksource: 32k_counter at 32768 Hz
    [    0.000862] Console: colour dummy device 80x30
    [    0.000982] WARNING: Your 'console=ttyO2' has been replaced by 'ttyS2'
    [    0.000984] This ensures that you still see kernel messages. Please
    [    0.000986] update your kernel commandline.
    [    0.000998] Calibrating delay loop (skipped), value calculated using timer frequency.. 12.29 BogoMIPS (lpj=61475)
    [    0.001005] pid_max: default: 32768 minimum: 301
    [    0.001123] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.001130] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.001739] CPU: Testing write buffer coherency: ok
    [    0.001977] /cpus/cpu@0 missing clock-frequency property
    [    0.002009] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
    [    0.039882] Setting up static identity map for 0x80200000 - 0x80200060
    [    0.079876] Hierarchical SRCU implementation.
    [    0.140349] EFI services will not be available.
    [    0.160009] smp: Bringing up secondary CPUs ...
    [    0.160019] smp: Brought up 1 node, 1 CPU
    [    0.160029] SMP: Total of 1 processors activated (12.29 BogoMIPS).
    [    0.160036] CPU: All CPU(s) started in HYP mode.
    [    0.160042] CPU: Virtualization extensions available.
    [    0.160595] devtmpfs: initialized
    [    0.195063] random: get_random_u32 called from bucket_table_alloc+0x14c/0x288 with crng_init=0
    [    0.200218] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0
    [    0.200476] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
    [    0.200496] futex hash table entries: 256 (order: 2, 16384 bytes)
    [    0.204401] pinctrl core: initialized pinctrl subsystem
    [    0.205223] DMI not present or invalid.
    [    0.205674] NET: Registered protocol family 16
    [    0.208153] DMA: preallocated 256 KiB pool for atomic coherent allocations
    [    0.209032] omap_hwmod: l3_main_2 using broken dt data from ocp
    [    0.414957] gpio gpiochip0: (gpio): added GPIO chardev (254:0)
    [    0.415068] gpiochip_setup_dev: registered GPIOs 0 to 31 on device: gpiochip0 (gpio)
    [    0.415338] OMAP GPIO hardware version 0.1
    [    0.416261] gpio gpiochip1: (gpio): added GPIO chardev (254:1)
    [    0.416371] gpiochip_setup_dev: registered GPIOs 32 to 63 on device: gpiochip1 (gpio)
    [    0.417415] gpio gpiochip2: (gpio): added GPIO chardev (254:2)
    [    0.417520] gpiochip_setup_dev: registered GPIOs 64 to 95 on device: gpiochip2 (gpio)
    [    0.418575] gpio gpiochip3: (gpio): added GPIO chardev (254:3)
    [    0.418685] gpiochip_setup_dev: registered GPIOs 96 to 127 on device: gpiochip3 (gpio)
    [    0.419732] gpio gpiochip4: (gpio): added GPIO chardev (254:4)
    [    0.419842] gpiochip_setup_dev: registered GPIOs 128 to 159 on device: gpiochip4 (gpio)
    [    0.421048] gpio gpiochip5: (gpio): added GPIO chardev (254:5)
    [    0.421157] gpiochip_setup_dev: registered GPIOs 160 to 191 on device: gpiochip5 (gpio)
    [    0.422237] gpio gpiochip6: (gpio): added GPIO chardev (254:6)
    [    0.422342] gpiochip_setup_dev: registered GPIOs 192 to 223 on device: gpiochip6 (gpio)
    [    0.423398] gpio gpiochip7: (gpio): added GPIO chardev (254:7)
    [    0.423509] gpiochip_setup_dev: registered GPIOs 224 to 255 on device: gpiochip7 (gpio)
    [    0.447654] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
    [    0.447667] hw-breakpoint: maximum watchpoint size is 8 bytes.
    [    0.448138] omap4_sram_init:Unable to allocate sram needed to handle errata I688
    [    0.448149] omap4_sram_init:Unable to get sram pool needed to handle errata I688
    [    0.449490] OMAP DMA hardware revision 0.0
    [    0.504477] omap-dma-engine 4a056000.dma-controller: OMAP DMA engine driver (LinkedList1/2/3 supported)
    [    0.507002] edma 43300000.edma: memcpy is disabled
    [    0.513045] edma 43300000.edma: TI EDMA DMA engine driver
    [    0.513712] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm12v0[0]'
    [    0.514069] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm5v0[0]'
    [    0.514155] evm_5v0: supplied by evm_12v0
    [    0.514582] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm_3v6[0]'
    [    0.514643] evm_3v6: supplied by evm_5v0
    [    0.515062] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-vsys3v3[0]'
    [    0.515127] vsys_3v3: supplied by evm_12v0
    [    0.515547] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm_3v3[0]'
    [    0.515610] evm_3v3: supplied by vsys_3v3
    [    0.516026] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-aic_dvdd[0]'
    [    0.516090] aic_dvdd: supplied by evm_3v3
    [    0.516678] of_get_named_gpiod_flags: parsed 'gpio' property of node '/fixedregulator-mmcwl[0]' - status (0)
    [    0.517078] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm_1v8[0]'
    [    0.517839] of_get_named_gpiod_flags: can't parse 'enable-gpio' property of node '/gpio-regulator-TPS74801[0]'
    [    0.517888] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio-regulator-TPS74801[0]' - status (0)
    [    0.517945] vddshv8: invalid voltage constraints
    [    0.517960] gpio-regulator gpio-regulator-TPS74801: Failed to register regulator: -22
    [    0.518051] gpio-regulator: probe of gpio-regulator-TPS74801 failed with error -22
    [    0.521548] omap-iommu 40d01000.mmu: 40d01000.mmu registered
    [    0.522057] omap-iommu 40d02000.mmu: 40d02000.mmu registered
    [    0.522663] omap-iommu 58882000.mmu: 58882000.mmu registered
    [    0.523264] omap-iommu 55082000.mmu: 55082000.mmu registered
    [    0.523838] iommu: Adding device 58820000.ipu to group 1
    [    0.524028] iommu: Adding device 55020000.ipu to group 2
    [    0.524367] iommu: Adding device 40800000.dsp to group 0
    [    0.526369] media: Linux media interface: v0.10
    [    0.526419] Linux video capture interface: v2.00
    [    0.526536] pps_core: LinuxPPS API ver. 1 registered
    [    0.526545] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    0.526568] PTP clock support registered
    [    0.526610] EDAC MC: Ver: 3.0.0
    [    0.530804] dmi: Firmware registration failed.
    [    0.531382] omap-mailbox 48840000.mailbox: omap mailbox rev 0x400
    [    0.531674] omap-mailbox 48842000.mailbox: omap mailbox rev 0x400
    [    0.532233] Advanced Linux Sound Architecture Driver Initialized.
    [    0.540865] clocksource: Switched to clocksource arch_sys_counter
    [    0.554299] NET: Registered protocol family 2
    [    0.555147] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
    [    0.555199] TCP bind hash table entries: 4096 (order: 4, 114688 bytes)
    [    0.555323] TCP: Hash tables configured (established 4096 bind 4096)
    [    0.555422] UDP hash table entries: 256 (order: 2, 16384 bytes)
    [    0.555455] UDP-Lite hash table entries: 256 (order: 2, 16384 bytes)
    [    0.555704] NET: Registered protocol family 1
    [    0.576238] RPC: Registered named UNIX socket transport module.
    [    0.576251] RPC: Registered udp transport module.
    [    0.576260] RPC: Registered tcp transport module.
    [    0.576269] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    0.576283] PCI: CLS 0 bytes, default 64
    [    0.577627] hw perfevents: no interrupt-affinity property for /pmu, guessing.
    [    0.577844] hw perfevents: enabled with armv7_cortex_a15 PMU driver, 7 counters available
    [    0.579678] workingset: timestamp_bits=14 max_order=17 bucket_order=3
    [    0.587722] squashfs: version 4.0 (2009/01/31) Phillip Lougher
    [    0.598634] NFS: Registering the id_resolver key type
    [    0.598667] Key type id_resolver registered
    [    0.598676] Key type id_legacy registered
    [    0.598749] ntfs: driver 2.1.32 [Flags: R/O].
    [    0.601279] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
    [    0.601294] io scheduler noop registered
    [    0.601304] io scheduler deadline registered
    [    0.601455] io scheduler cfq registered (default)
    [    0.601467] io scheduler mq-deadline registered
    [    0.601477] io scheduler kyber registered
    [    0.607598] pinctrl-single 4a003400.pinmux: 282 pins at pa fc003400 size 1128
    [    0.607849] pinctrl-single 4a002e8c.pinmux: please update dts to use #pinctrl-cells = <1>
    [    0.607940] pinctrl-single 4a002e8c.pinmux: initialized with no interrupts
    [    0.607952] pinctrl-single 4a002e8c.pinmux: 1 pins at pa fc002e8c size 4
    [    0.703228] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
    [    0.707843] 4806a000.serial: ttyS0 at MMIO 0x4806a000 (irq = 43, base_baud = 3000000) is a 8250
    [    0.709582] 48020000.serial: ttyS2 at MMIO 0x48020000 (irq = 44, base_baud = 3000000) is a 8250
    [    1.616533] console [ttyS2] enabled
    [    1.621853] 48068000.serial: ttyS5 at MMIO 0x48068000 (irq = 45, base_baud = 3000000) is a 8250
    [    1.633262] omap_rng 48090000.rng: Random Number Generator ver. 20
    [    1.657888] brd: module loaded
    [    1.672503] loop: module loaded
    [    1.681113] m25p80 spi0.0: found n25q256a, expected s25fl256s1
    [    1.687476] m25p80 spi0.0: n25q256a (32768 Kbytes)
    [    1.692375] 10 ofpart partitions found on MTD device spi0.0
    [    1.697973] Creating 10 MTD partitions on "spi0.0":
    [    1.702877] 0x000000000000-0x000000010000 : "QSPI.SPL"
    [    1.709246] 0x000000010000-0x000000020000 : "QSPI.SPL.backup1"
    [    1.716236] 0x000000020000-0x000000030000 : "QSPI.SPL.backup2"
    [    1.723245] 0x000000030000-0x000000040000 : "QSPI.SPL.backup3"
    [    1.730228] 0x000000040000-0x000000140000 : "QSPI.u-boot"
    [    1.736778] 0x000000140000-0x0000001c0000 : "QSPI.u-boot-spl-os"
    [    1.743947] 0x0000001c0000-0x0000001d0000 : "QSPI.u-boot-env"
    [    1.750839] 0x0000001d0000-0x0000001e0000 : "QSPI.u-boot-env.backup1"
    [    1.758455] 0x0000001e0000-0x0000009e0000 : "QSPI.kernel"
    [    1.765024] 0x0000009e0000-0x000002000000 : "QSPI.file-system"
    [    1.772976] mdio_bus fixed-0: GPIO lookup for consumer reset
    [    1.772984] mdio_bus fixed-0: using lookup tables for GPIO lookup
    [    1.772991] mdio_bus fixed-0: lookup for GPIO reset failed
    [    1.773017] libphy: Fixed MDIO Bus: probed
    [    1.781383] mdio_bus 48485000.mdio: GPIO lookup for consumer reset
    [    1.781391] mdio_bus 48485000.mdio: using device tree for GPIO lookup
    [    1.781433] of_get_named_gpiod_flags: parsed 'reset-gpios' property of node '/ocp/ethernet@48484000/mdio@48485000[0]' - status (0)
    [    1.781490] mdio_bus 48485000.mdio: GPIO lookup for consumer reset
    [    1.781497] mdio_bus 48485000.mdio: using device tree for GPIO lookup
    [    1.781523] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/ocp/ethernet@48484000/mdio@48485000[1]'
    [    1.781533] of_get_named_gpiod_flags: can't parse 'reset-gpio' property of node '/ocp/ethernet@48484000/mdio@48485000[1]'
    [    1.781540] mdio_bus 48485000.mdio: using lookup tables for GPIO lookup
    [    1.781547] mdio_bus 48485000.mdio: lookup for GPIO reset failed
    [    1.840910] davinci_mdio 48485000.mdio: davinci mdio revision 1.6, bus freq 1000000
    [    1.848607] libphy: 48485000.mdio: probed
    [    1.865480] davinci_mdio 48485000.mdio: phy[0]: device 48485000.mdio:00, driver TI DP83822 10/100 Mbps PHY
    [    1.875914] cpsw 48484000.ethernet: Detected MACID = 00:a0:de:ad:be:ef
    [    1.882478] cpsw 48484000.ethernet: GMAC port 0
    [    1.887125] cpsw 48484000.ethernet: initialized cpsw ale version 1.4
    [    1.893512] cpsw 48484000.ethernet: ALE Table size 1024
    [    1.898774] cpsw 48484000.ethernet: device node lookup for pps timer failed
    [    1.905808] cpsw 48484000.ethernet: cpts: overflow check period 500 (jiffies)
    [    1.914777] net eth0: rpmsg goose driver init: 0
    [    1.919498] net eth0: ocmc rxbuf: pa x40300000 va e1100000 size 0xe000
    [    1.926779] i2c /dev entries driver
    [    1.931559] IR NEC protocol handler initialized
    [    1.936114] IR RC5(x/sz) protocol handler initialized
    [    1.941189] IR RC6 protocol handler initialized
    [    1.945742] IR JVC protocol handler initialized
    [    1.950296] IR Sony protocol handler initialized
    [    1.955301] IR SANYO protocol handler initialized
    [    1.960028] IR Sharp protocol handler initialized
    [    1.964755] IR MCE Keyboard/mouse protocol handler initialized
    [    1.970616] IR XMP protocol handler initialized
    [    1.975564] poweroff-gpio gpio-poweroff: GPIO lookup for consumer (null)
    [    1.975571] poweroff-gpio gpio-poweroff: using device tree for GPIO lookup
    [    1.975615] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio-poweroff[0]' - status (0)
    [    1.981459] sdhci: Secure Digital Host Controller Interface driver
    [    1.987671] sdhci: Copyright(c) Pierre Ossman
    [    1.992942] sdhci-pltfm: SDHCI platform and OF driver helper
    [    2.000166] sdhci-omap 480b4000.mmc: GPIO lookup for consumer cd
    [    2.000174] sdhci-omap 480b4000.mmc: using device tree for GPIO lookup
    [    2.000185] of_get_named_gpiod_flags: can't parse 'cd-gpios' property of node '/ocp/mmc@480b4000[0]'
    [    2.000194] of_get_named_gpiod_flags: can't parse 'cd-gpio' property of node '/ocp/mmc@480b4000[0]'
    [    2.000201] sdhci-omap 480b4000.mmc: using lookup tables for GPIO lookup
    [    2.000209] sdhci-omap 480b4000.mmc: lookup for GPIO cd failed
    [    2.000218] sdhci-omap 480b4000.mmc: GPIO lookup for consumer wp
    [    2.000224] sdhci-omap 480b4000.mmc: using device tree for GPIO lookup
    [    2.000233] of_get_named_gpiod_flags: can't parse 'wp-gpios' property of node '/ocp/mmc@480b4000[0]'
    [    2.000241] of_get_named_gpiod_flags: can't parse 'wp-gpio' property of node '/ocp/mmc@480b4000[0]'
    [    2.000247] sdhci-omap 480b4000.mmc: using lookup tables for GPIO lookup
    [    2.000254] sdhci-omap 480b4000.mmc: lookup for GPIO wp failed
    [    2.060911] mmc0: SDHCI controller on 480b4000.mmc [480b4000.mmc] using ADMA
    [    2.080643] NET: Registered protocol family 10
    [    2.096697] Segment Routing with IPv6
    [    2.100487] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    [    2.107264] NET: Registered protocol family 17
    [    2.112213] Key type dns_resolver registered
    [    2.116755] omap_voltage_late_init: Voltage driver support not added
    [    2.121292] ti-iodelay 4844a000.padconf: Set reg 0x18c Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121303] ti-iodelay 4844a000.padconf: Set reg 0x1a4 Delay(a: 119 g: 0), Elements(C=0 F=3)0x29003
    [    2.121313] ti-iodelay 4844a000.padconf: Set reg 0x1b0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121323] ti-iodelay 4844a000.padconf: Set reg 0x1bc Delay(a: 18 g: 0), Elements(C=0 F=0)0x29000
    [    2.121332] ti-iodelay 4844a000.padconf: Set reg 0x1c8 Delay(a: 894 g: 0), Elements(C=2 F=0)0x29040
    [    2.121341] ti-iodelay 4844a000.padconf: Set reg 0x1d4 Delay(a: 30 g: 0), Elements(C=0 F=0)0x29000
    [    2.121350] ti-iodelay 4844a000.padconf: Set reg 0x1e0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121358] ti-iodelay 4844a000.padconf: Set reg 0x1ec Delay(a: 23 g: 0), Elements(C=0 F=0)0x29000
    [    2.121367] ti-iodelay 4844a000.padconf: Set reg 0x1f8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121375] ti-iodelay 4844a000.padconf: Set reg 0x360 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121384] ti-iodelay 4844a000.padconf: Set reg 0x194 Delay(a: 152 g: 0), Elements(C=0 F=4)0x29004
    [    2.121392] ti-iodelay 4844a000.padconf: Set reg 0x1ac Delay(a: 206 g: 0), Elements(C=0 F=6)0x29006
    [    2.121401] ti-iodelay 4844a000.padconf: Set reg 0x1b8 Delay(a: 78 g: 0), Elements(C=0 F=2)0x29002
    [    2.121409] ti-iodelay 4844a000.padconf: Set reg 0x1c4 Delay(a: 2 g: 0), Elements(C=0 F=0)0x29000
    [    2.121417] ti-iodelay 4844a000.padconf: Set reg 0x1d0 Delay(a: 266 g: 0), Elements(C=0 F=8)0x29008
    [    2.121426] ti-iodelay 4844a000.padconf: Set reg 0x1dc Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121434] ti-iodelay 4844a000.padconf: Set reg 0x1e8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121443] ti-iodelay 4844a000.padconf: Set reg 0x1f4 Delay(a: 43 g: 0), Elements(C=0 F=1)0x29001
    [    2.121451] ti-iodelay 4844a000.padconf: Set reg 0x200 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121483] ti-iodelay 4844a000.padconf: Set reg 0x368 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121492] ti-iodelay 4844a000.padconf: Set reg 0x190 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121500] ti-iodelay 4844a000.padconf: Set reg 0x1a8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121509] ti-iodelay 4844a000.padconf: Set reg 0x1b4 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121517] ti-iodelay 4844a000.padconf: Set reg 0x1c0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121525] ti-iodelay 4844a000.padconf: Set reg 0x1d8 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121533] ti-iodelay 4844a000.padconf: Set reg 0x1e4 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121542] ti-iodelay 4844a000.padconf: Set reg 0x1f0 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121550] ti-iodelay 4844a000.padconf: Set reg 0x1fc Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121559] ti-iodelay 4844a000.padconf: Set reg 0x364 Delay(a: 0 g: 0), Elements(C=0 F=0)0x29000
    [    2.121637] mmc0: new DDR MMC card at address 0001
    [    2.124453] mmcblk0: mmc0:0001 P1XXXX 7.20 GiB 
    [    2.126342] mmcblk0boot0: mmc0:0001 P1XXXX partition 1 16.0 MiB
    [    2.128023] mmcblk0boot1: mmc0:0001 P1XXXX partition 2 16.0 MiB
    [    2.129915] mmcblk0rpmb: mmc0:0001 P1XXXX partition 3 128 KiB
    [    2.131424]  mmcblk0: p1 p2 p3 p4 < >
    [    2.418868] Power Management for TI OMAP4+ devices.
    [    2.424134] Registering SWP/SWPB emulation handler
    [    2.471839] dmm 4e000000.dmm: workaround for errata i878 in use
    [    2.480645] dmm 4e000000.dmm: initialized all PAT entries
    [    2.490687] hctosys: unable to open rtc device (rtc0)
    [    2.497341] net eth0: initializing cpsw version 1.15 (0)
    [    2.604091] TI DP83822 10/100 Mbps PHY 48485000.mdio:00: attached PHY driver [TI DP83822 10/100 Mbps PHY] (mii_bus:phy_addr=48485000.mdio:00, irq=POLL)
    [    2.620339] cpts ptp bc clkid 0
    [    2.628944] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    [    4.726454] cpsw 48484000.ethernet eth0: Link is Up - 100Mbps/Half - flow control off
    [    4.730920] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [    4.760890] IP-Config: Complete:
    [    4.764139]      device=eth0, hwaddr=00:a0:de:ad:be:ef, ipaddr=10.3.33.186, mask=255.255.248.0, gw=255.255.255.255
    [    4.774574]      host=10.3.33.186, domain=, nis-domain=(none)
    [    4.780350]      bootserver=10.3.33.185, rootserver=10.3.33.185, rootpath=
    [    4.788737] aic_dvdd: disabling
    [    4.791902] vmmcwl_fixed: disabling
    [    4.795418] pbias_mmc_omap5: disabling
    [    4.799201] ALSA device list:
    [    4.802184]   No soundcards found.
    [    4.828941] VFS: Mounted root (nfs filesystem) on device 0:14.
    [    4.836185] devtmpfs: mounted
    [    4.842432] Freeing unused kernel memory: 2048K
    [    5.282831] systemd[1]: System time before build time, advancing clock.
    [    5.353444] systemd[1]: systemd 234 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN default-hierarchy=hybrid)
    [    5.375162] systemd[1]: Detected architecture arm.
    [    5.412434] systemd[1]: Set hostname to <am57xx-evm>.
    [    6.427903] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.435192] systemd[1]: Listening on Journal Socket.
    [    6.471123] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.478093] systemd[1]: Listening on Journal Socket (/dev/log).
    [    6.511047] random: systemd: uninitialized urandom read (16 bytes read)
    [    6.518126] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
    [    6.567038] systemd[1]: Created slice User and Session Slice.
    [    6.601282] systemd[1]: Listening on udev Kernel Socket.
    [    6.641743] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
    [    6.681481] systemd[1]: Listening on udev Control Socket.
    [    7.485040] cmemk: loading out-of-tree module taints kernel.
    [    7.499247] CMEMK module: reference Linux version 4.14.40
    [    7.510091] cmemk initialized
    [    7.543956] cryptodev: driver 1.9 loaded.
    [    7.618521] usbcore: registered new interface driver usbfs
    [    7.626660] usbcore: registered new interface driver hub
    [    7.638856] usbcore: registered new device driver usb
    [    7.656818] usbcore: registered new interface driver usbserial
    [    8.696865] systemd-journald[95]: Received request to flush runtime journal from PID 1
    [   11.097367] omap-rproc 58820000.ipu: assigned reserved memory node ipu1-memory@9d000000
    [   11.161165] remoteproc remoteproc0: 58820000.ipu is available
    [   11.207592] remoteproc remoteproc0: Direct firmware load for dra7-ipu1-fw.xem4 failed with error -2
    [   11.216418] omap-rproc 55020000.ipu: assigned reserved memory node ipu2-memory@95800000
    [   11.219229] remoteproc remoteproc1: 55020000.ipu is available
    [   11.228178] omap-rproc 40800000.dsp: assigned reserved memory node dsp1-memory@99000000
    [   11.239356] remoteproc remoteproc2: 40800000.dsp is available
    [   11.516335] remoteproc remoteproc0: powering up 58820000.ipu
    [   11.566955] remoteproc remoteproc0: Direct firmware load for dra7-ipu1-fw.xem4 failed with error -2
    [   11.667233] remoteproc remoteproc0: request_firmware failed: -2
    [   11.740066] remoteproc remoteproc2: Direct firmware load for dra7-dsp1-fw.xe66 failed with error -2
    [   11.818909] remoteproc remoteproc2: powering up 40800000.dsp
    [   11.899983] remoteproc remoteproc2: Direct firmware load for dra7-dsp1-fw.xe66 failed with error -2
    [   11.981533] remoteproc remoteproc2: request_firmware failed: -2
    [   12.652793] CAN device driver interface
    [   12.950750] omap-des 480a5000.des: OMAP DES hw accel rev: 2.2
    [   12.987677] omap-des 480a5000.des: will run requests pump with realtime priority
    [   13.125108] c_can_platform 48480000.can: c_can_platform device registered (regs=fa480000, irq=83)
    [   13.643967] vpe 489d0000.vpe: loading firmware vpdma-1b8.bin
    [   13.761224] vpe 489d0000.vpe: Device registered as /dev/video0
    [   13.885222] remoteproc remoteproc1: powering up 55020000.ipu
    [   13.893269] remoteproc remoteproc1: Booting fw image dra7-ipu2-fw.xem4, size 3743076
    [   13.936743] omap-iommu 55082000.mmu: 55082000.mmu: version 2.1
    [   14.707802] virtio_rpmsg_bus virtio0: rpmsg host is online
    [   14.722155] remoteproc remoteproc1: registered virtio0 (type 7)
    [   14.747389] remoteproc remoteproc1: remote processor 55020000.ipu is now up
    [   14.773473] virtio_rpmsg_bus virtio0: creating channel rpmsg-rpc addr 0x65
    [   14.784900] virtio_rpmsg_bus virtio0: creating channel rpmsg-rpc addr 0x66
    [   14.830829] omap-sham 4b101000.sham: hw accel on OMAP rev 4.3
    [   14.982017] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
    [   15.014777] omap-aes 4b500000.aes: OMAP AES hw accel rev: 3.3
    [   15.061012] omap-aes 4b500000.aes: will run requests pump with realtime priority
    [   15.203015] omap-aes 4b700000.aes: OMAP AES hw accel rev: 3.3
    [   15.239126] omap-aes 4b700000.aes: will run requests pump with realtime priority
    [   16.601652] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer id
    [   16.601663] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [   16.601675] of_get_named_gpiod_flags: can't parse 'id-gpios' property of node '/extcon_usb2[0]'
    [   16.601684] of_get_named_gpiod_flags: can't parse 'id-gpio' property of node '/extcon_usb2[0]'
    [   16.601691] extcon-usb-gpio extcon_usb2: using lookup tables for GPIO lookup
    [   16.601699] extcon-usb-gpio extcon_usb2: lookup for GPIO id failed
    [   16.601707] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer vbus
    [   16.601714] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [   16.601723] of_get_named_gpiod_flags: can't parse 'vbus-gpios' property of node '/extcon_usb2[0]'
    [   16.609969] of_get_named_gpiod_flags: parsed 'vbus-gpio' property of node '/extcon_usb2[0]' - status (0)
    [   16.618105] omap_gpio 48057000.gpio: Could not set line 30 debounce to 20000 microseconds (-22)
    [   20.603019] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
    [   20.628670] EXT4-fs (mmcblk0p2): mounting ext3 file system using the ext4 subsystem
    [   20.739168] EXT4-fs (mmcblk0p2): recovery complete
    [   20.739202] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
    [   26.754988] rpmsg_rpc virtio0.rpmsg-rpc.-1.101: probing service dce-callback with src 1024 dst 101
    [   26.771889] dwc3 488d0000.usb: failed to initialize core
    [   26.822746] omap-iommu 55082000.mmu: 55082000.mmu: version 2.1
    [   26.856529] rpmsg_rpc virtio0.rpmsg-rpc.-1.102: probing service rpmsg-dce with src 1025 dst 102
    [   26.865662] dwc3 488d0000.usb: failed to initialize core
    [   26.880426] rpmsg_rpc virtio0.rpmsg-rpc.-1.101: published functions = 4
    [   26.949036] rpmsg_rpc virtio0.rpmsg-rpc.-1.102: published functions = 9
    [   27.011745] dwc3 488d0000.usb: failed to initialize core
    [   36.788168] NET: Registered protocol family 15
    [   37.164529] Initializing XFRM netlink socket
    [  126.318826] udc-core: couldn't find an available UDC - added [g_ether] to list of pending drivers
    
    config.gz.txt

  • looking at the logs dwc3_core_init() is failing, could you add some printk's in this function and let me know where exactly its failing.

    /* issue device SoftReset too */
    ret = dwc3_soft_reset(dwc);
    if (ret)
    goto err0;

    ret = dwc3_core_soft_reset(dwc);
    if (ret)
    goto err0;

    reg = dwc3_get_gctl_quirks(dwc);

    dwc3_core_num_eps(dwc);

    dwc3_writel(dwc->regs, DWC3_GCTL, reg);

    ret = dwc3_alloc_scratch_buffers(dwc);
    if (ret)
    goto err1;

    ret = dwc3_setup_scratch_buffers(dwc);
    if (ret)
    goto err2;

    I suspect somewhere in this block its failing.

    Cheers,
    --Prabhakar Lad
  • /**
     * core.c - DesignWare USB3 DRD Controller Core file
     *
     * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
     *
     * Authors: Felipe Balbi <balbi@ti.com>,
     *	    Sebastian Andrzej Siewior <bigeasy@linutronix.de>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License version 2  of
     * the License as published by the Free Software Foundation.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    #include <linux/version.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/slab.h>
    #include <linux/spinlock.h>
    #include <linux/platform_device.h>
    #include <linux/pm_runtime.h>
    #include <linux/interrupt.h>
    #include <linux/ioport.h>
    #include <linux/io.h>
    #include <linux/list.h>
    #include <linux/delay.h>
    #include <linux/dma-mapping.h>
    #include <linux/of.h>
    #include <linux/acpi.h>
    #include <linux/pinctrl/consumer.h>
    
    #include <linux/usb/ch9.h>
    #include <linux/usb/gadget.h>
    #include <linux/usb/of.h>
    #include <linux/usb/otg.h>
    
    #include "core.h"
    #include "gadget.h"
    #include "io.h"
    
    #include "debug.h"
    
    #define DWC3_DEFAULT_AUTOSUSPEND_DELAY	5000 /* ms */
    
    /**
     * dwc3_get_dr_mode - Validates and sets dr_mode
     * @dwc: pointer to our context structure
     */
    static int dwc3_get_dr_mode(struct dwc3 *dwc)
    {
    	enum usb_dr_mode mode;
    	struct device *dev = dwc->dev;
    	unsigned int hw_mode;
    
    	if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
    		dwc->dr_mode = USB_DR_MODE_OTG;
    
    	mode = dwc->dr_mode;
    	hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
    
    	switch (hw_mode) {
    	case DWC3_GHWPARAMS0_MODE_GADGET:
    		if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) {
    			dev_err(dev,
    				"Controller does not support host mode.\n");
    			return -EINVAL;
    		}
    		mode = USB_DR_MODE_PERIPHERAL;
    		break;
    	case DWC3_GHWPARAMS0_MODE_HOST:
    		if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
    			dev_err(dev,
    				"Controller does not support device mode.\n");
    			return -EINVAL;
    		}
    		mode = USB_DR_MODE_HOST;
    		break;
    	default:
    		if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
    			mode = USB_DR_MODE_HOST;
    		else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
    			mode = USB_DR_MODE_PERIPHERAL;
    	}
    
    	if (mode != dwc->dr_mode) {
    		dev_warn(dev,
    			 "Configuration mismatch. dr_mode forced to %s\n",
    			 mode == USB_DR_MODE_HOST ? "host" : "gadget");
    
    		dwc->dr_mode = mode;
    	}
    
    	return 0;
    }
    
    void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode)
    {
    	u32 reg;
    
    	reg = dwc3_readl(dwc->regs, DWC3_GCTL);
    	reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
    	reg |= DWC3_GCTL_PRTCAPDIR(mode);
    	dwc3_writel(dwc->regs, DWC3_GCTL, reg);
    
    	dwc->current_dr_role = mode;
    }
    
    static void __dwc3_set_mode(struct work_struct *work)
    {
    	struct dwc3 *dwc = work_to_dwc(work);
    	unsigned long flags;
    	int ret;
    
    	if (dwc->dr_mode != USB_DR_MODE_OTG)
    		return;
    
    	if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_OTG)
    		dwc3_otg_update(dwc, 0);
    
    	if (!dwc->desired_dr_role)
    		return;
    
    	if (dwc->desired_dr_role == dwc->current_dr_role)
    		return;
    
    	if (dwc->desired_dr_role == DWC3_GCTL_PRTCAP_OTG && dwc->edev)
    		return;
    
    	if (dwc->desired_dr_role == DWC3_GCTL_PRTCAP_OTG)
    		return;
    
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_HOST:
    		dwc3_host_exit(dwc);
    		break;
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		dwc3_gadget_exit(dwc);
    		dwc3_event_buffers_cleanup(dwc);
    		break;
    	case DWC3_GCTL_PRTCAP_OTG:
    		dwc3_otg_exit(dwc);
    		spin_lock_irqsave(&dwc->lock, flags);
    		dwc->desired_otg_role = DWC3_OTG_ROLE_IDLE;
    		spin_unlock_irqrestore(&dwc->lock, flags);
    		dwc3_otg_update(dwc, 1);
    		break;
    	default:
    		break;
    	}
    
    	spin_lock_irqsave(&dwc->lock, flags);
    
    	dwc3_set_prtcap(dwc, dwc->desired_dr_role);
    
    	spin_unlock_irqrestore(&dwc->lock, flags);
    
    	switch (dwc->desired_dr_role) {
    	case DWC3_GCTL_PRTCAP_HOST:
    		ret = dwc3_host_init(dwc);
    		if (ret) {
    			dev_err(dwc->dev, "failed to initialize host\n");
    		} else {
    			if (dwc->usb2_phy)
    				otg_set_vbus(dwc->usb2_phy->otg, true);
    			if (dwc->usb2_generic_phy)
    				phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
    
    		}
    		break;
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		dwc3_event_buffers_setup(dwc);
    
    		if (dwc->usb2_phy)
    			otg_set_vbus(dwc->usb2_phy->otg, false);
    		if (dwc->usb2_generic_phy)
    			phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_DEVICE);
    
    		ret = dwc3_gadget_init(dwc);
    		if (ret)
    			dev_err(dwc->dev, "failed to initialize peripheral\n");
    		break;
    	case DWC3_GCTL_PRTCAP_OTG:
    		dwc3_otg_init(dwc);
    		dwc3_otg_update(dwc, 0);
    		break;
    	default:
    		break;
    	}
    
    }
    
    void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
    {
    	unsigned long flags;
    
    	spin_lock_irqsave(&dwc->lock, flags);
    	dwc->desired_dr_role = mode;
    	spin_unlock_irqrestore(&dwc->lock, flags);
    
    	queue_work(system_freezable_wq, &dwc->drd_work);
    }
    
    u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)
    {
    	struct dwc3		*dwc = dep->dwc;
    	u32			reg;
    
    	dwc3_writel(dwc->regs, DWC3_GDBGFIFOSPACE,
    			DWC3_GDBGFIFOSPACE_NUM(dep->number) |
    			DWC3_GDBGFIFOSPACE_TYPE(type));
    
    	reg = dwc3_readl(dwc->regs, DWC3_GDBGFIFOSPACE);
    
    	return DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(reg);
    }
    
    /**
     * dwc3_core_soft_reset - Issues core soft reset and PHY reset
     * @dwc: pointer to our context structure
     */
    static int dwc3_core_soft_reset(struct dwc3 *dwc)
    {
    	u32		reg;
    	int		retries = 1000;
    	int		ret;
    
    	usb_phy_init(dwc->usb2_phy);
    	usb_phy_init(dwc->usb3_phy);
    	ret = phy_init(dwc->usb2_generic_phy);
    	if (ret < 0)
    		return ret;
    
    	ret = phy_init(dwc->usb3_generic_phy);
    	if (ret < 0) {
    		phy_exit(dwc->usb2_generic_phy);
    		return ret;
    	}
    
    	/*
    	 * We're resetting only the device side because, if we're in host mode,
    	 * XHCI driver will reset the host block. If dwc3 was configured for
    	 * host-only mode, then we can return early.
    	 */
    	if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_HOST)
    		return 0;
    
    	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
    	reg |= DWC3_DCTL_CSFTRST;
    	dwc3_writel(dwc->regs, DWC3_DCTL, reg);
    
    	do {
    		reg = dwc3_readl(dwc->regs, DWC3_DCTL);
    		if (!(reg & DWC3_DCTL_CSFTRST))
    			return 0;
    
    		udelay(1);
    	} while (--retries);
    
    	return -ETIMEDOUT;
    }
    
    /*
     * dwc3_frame_length_adjustment - Adjusts frame length if required
     * @dwc3: Pointer to our controller context structure
     */
    static void dwc3_frame_length_adjustment(struct dwc3 *dwc)
    {
    	u32 reg;
    	u32 dft;
    
    	if (dwc->revision < DWC3_REVISION_250A)
    		return;
    
    	if (dwc->fladj == 0)
    		return;
    
    	reg = dwc3_readl(dwc->regs, DWC3_GFLADJ);
    	dft = reg & DWC3_GFLADJ_30MHZ_MASK;
    	if (!dev_WARN_ONCE(dwc->dev, dft == dwc->fladj,
    	    "request value same as default, ignoring\n")) {
    		reg &= ~DWC3_GFLADJ_30MHZ_MASK;
    		reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | dwc->fladj;
    		dwc3_writel(dwc->regs, DWC3_GFLADJ, reg);
    	}
    }
    
    /**
     * dwc3_free_one_event_buffer - Frees one event buffer
     * @dwc: Pointer to our controller context structure
     * @evt: Pointer to event buffer to be freed
     */
    static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
    		struct dwc3_event_buffer *evt)
    {
    	dma_free_coherent(dwc->sysdev, evt->length, evt->buf, evt->dma);
    }
    
    /**
     * dwc3_alloc_one_event_buffer - Allocates one event buffer structure
     * @dwc: Pointer to our controller context structure
     * @length: size of the event buffer
     *
     * Returns a pointer to the allocated event buffer structure on success
     * otherwise ERR_PTR(errno).
     */
    static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc,
    		unsigned length)
    {
    	struct dwc3_event_buffer	*evt;
    
    	evt = devm_kzalloc(dwc->dev, sizeof(*evt), GFP_KERNEL);
    	if (!evt)
    		return ERR_PTR(-ENOMEM);
    
    	evt->dwc	= dwc;
    	evt->length	= length;
    	evt->cache	= devm_kzalloc(dwc->dev, length, GFP_KERNEL);
    	if (!evt->cache)
    		return ERR_PTR(-ENOMEM);
    
    	evt->buf	= dma_alloc_coherent(dwc->sysdev, length,
    			&evt->dma, GFP_KERNEL);
    	if (!evt->buf)
    		return ERR_PTR(-ENOMEM);
    
    	return evt;
    }
    
    /**
     * dwc3_free_event_buffers - frees all allocated event buffers
     * @dwc: Pointer to our controller context structure
     */
    static void dwc3_free_event_buffers(struct dwc3 *dwc)
    {
    	struct dwc3_event_buffer	*evt;
    
    	evt = dwc->ev_buf;
    	if (evt)
    		dwc3_free_one_event_buffer(dwc, evt);
    }
    
    /**
     * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
     * @dwc: pointer to our controller context structure
     * @length: size of event buffer
     *
     * Returns 0 on success otherwise negative errno. In the error case, dwc
     * may contain some buffers allocated but not all which were requested.
     */
    static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
    {
    	struct dwc3_event_buffer *evt;
    
    	evt = dwc3_alloc_one_event_buffer(dwc, length);
    	if (IS_ERR(evt)) {
    		dev_err(dwc->dev, "can't allocate event buffer\n");
    		return PTR_ERR(evt);
    	}
    	dwc->ev_buf = evt;
    
    	return 0;
    }
    
    /**
     * dwc3_event_buffers_setup - setup our allocated event buffers
     * @dwc: pointer to our controller context structure
     *
     * Returns 0 on success otherwise negative errno.
     */
    int dwc3_event_buffers_setup(struct dwc3 *dwc)
    {
    	struct dwc3_event_buffer	*evt;
    
    	evt = dwc->ev_buf;
    	evt->lpos = 0;
    	dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0),
    			lower_32_bits(evt->dma));
    	dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0),
    			upper_32_bits(evt->dma));
    	dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0),
    			DWC3_GEVNTSIZ_SIZE(evt->length));
    	dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
    
    	return 0;
    }
    
    void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
    {
    	struct dwc3_event_buffer	*evt;
    
    	evt = dwc->ev_buf;
    
    	evt->lpos = 0;
    
    	dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0), 0);
    	dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0), 0);
    	dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), DWC3_GEVNTSIZ_INTMASK
    			| DWC3_GEVNTSIZ_SIZE(0));
    	dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
    }
    
    static int dwc3_alloc_scratch_buffers(struct dwc3 *dwc)
    {
    	if (!dwc->has_hibernation)
    		return 0;
    
    	if (!dwc->nr_scratch)
    		return 0;
    
    	dwc->scratchbuf = kmalloc_array(dwc->nr_scratch,
    			DWC3_SCRATCHBUF_SIZE, GFP_KERNEL);
    	if (!dwc->scratchbuf)
    		return -ENOMEM;
    
    	return 0;
    }
    
    static int dwc3_setup_scratch_buffers(struct dwc3 *dwc)
    {
    	dma_addr_t scratch_addr;
    	u32 param;
    	int ret;
    
    	if (!dwc->has_hibernation)
    		return 0;
    
    	if (!dwc->nr_scratch)
    		return 0;
    
    	 /* should never fall here */
    	if (!WARN_ON(dwc->scratchbuf))
    		return 0;
    
    	scratch_addr = dma_map_single(dwc->sysdev, dwc->scratchbuf,
    			dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
    			DMA_BIDIRECTIONAL);
    	if (dma_mapping_error(dwc->sysdev, scratch_addr)) {
    		dev_err(dwc->sysdev, "failed to map scratch buffer\n");
    		ret = -EFAULT;
    		goto err0;
    	}
    
    	dwc->scratch_addr = scratch_addr;
    
    	param = lower_32_bits(scratch_addr);
    
    	ret = dwc3_send_gadget_generic_command(dwc,
    			DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO, param);
    	if (ret < 0)
    		goto err1;
    
    	param = upper_32_bits(scratch_addr);
    
    	ret = dwc3_send_gadget_generic_command(dwc,
    			DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI, param);
    	if (ret < 0)
    		goto err1;
    
    	return 0;
    
    err1:
    	dma_unmap_single(dwc->sysdev, dwc->scratch_addr, dwc->nr_scratch *
    			DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
    
    err0:
    	return ret;
    }
    
    static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
    {
    	if (!dwc->has_hibernation)
    		return;
    
    	if (!dwc->nr_scratch)
    		return;
    
    	 /* should never fall here */
    	if (!WARN_ON(dwc->scratchbuf))
    		return;
    
    	dma_unmap_single(dwc->sysdev, dwc->scratch_addr, dwc->nr_scratch *
    			DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
    	kfree(dwc->scratchbuf);
    }
    
    static void dwc3_core_num_eps(struct dwc3 *dwc)
    {
    	struct dwc3_hwparams	*parms = &dwc->hwparams;
    
    	dwc->num_eps = DWC3_NUM_EPS(parms);
    }
    
    static void dwc3_cache_hwparams(struct dwc3 *dwc)
    {
    	struct dwc3_hwparams	*parms = &dwc->hwparams;
    
    	parms->hwparams0 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS0);
    	parms->hwparams1 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS1);
    	parms->hwparams2 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS2);
    	parms->hwparams3 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS3);
    	parms->hwparams4 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS4);
    	parms->hwparams5 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS5);
    	parms->hwparams6 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS6);
    	parms->hwparams7 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS7);
    	parms->hwparams8 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS8);
    }
    
    static int dwc3_core_ulpi_init(struct dwc3 *dwc)
    {
    	int intf;
    	int ret = 0;
    
    	intf = DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3);
    
    	if (intf == DWC3_GHWPARAMS3_HSPHY_IFC_ULPI ||
    	    (intf == DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI &&
    	     dwc->hsphy_interface &&
    	     !strncmp(dwc->hsphy_interface, "ulpi", 4)))
    		ret = dwc3_ulpi_init(dwc);
    
    	return ret;
    }
    
    /**
     * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
     * @dwc: Pointer to our controller context structure
     *
     * Returns 0 on success. The USB PHY interfaces are configured but not
     * initialized. The PHY interfaces and the PHYs get initialized together with
     * the core in dwc3_core_init.
     */
    static int dwc3_phy_setup(struct dwc3 *dwc)
    {
    	u32 reg;
    
    	reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
    
    	/*
    	 * Make sure UX_EXIT_PX is cleared as that causes issues with some
    	 * PHYs. Also, this bit is not supposed to be used in normal operation.
    	 */
    	reg &= ~DWC3_GUSB3PIPECTL_UX_EXIT_PX;
    
    	/*
    	 * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
    	 * to '0' during coreConsultant configuration. So default value
    	 * will be '0' when the core is reset. Application needs to set it
    	 * to '1' after the core initialization is completed.
    	 */
    	if (dwc->revision > DWC3_REVISION_194A)
    		reg |= DWC3_GUSB3PIPECTL_SUSPHY;
    
    	if (dwc->u2ss_inp3_quirk)
    		reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
    
    	if (dwc->dis_rxdet_inp3_quirk)
    		reg |= DWC3_GUSB3PIPECTL_DISRXDETINP3;
    
    	if (dwc->req_p1p2p3_quirk)
    		reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
    
    	if (dwc->del_p1p2p3_quirk)
    		reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
    
    	if (dwc->del_phy_power_chg_quirk)
    		reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
    
    	if (dwc->lfps_filter_quirk)
    		reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
    
    	if (dwc->rx_detect_poll_quirk)
    		reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
    
    	if (dwc->tx_de_emphasis_quirk)
    		reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
    
    	if (dwc->dis_u3_susphy_quirk)
    		reg &= ~DWC3_GUSB3PIPECTL_SUSPHY;
    
    	if (dwc->dis_del_phy_power_chg_quirk)
    		reg &= ~DWC3_GUSB3PIPECTL_DEPOCHANGE;
    
    	dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
    
    	reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
    
    	/* Select the HS PHY interface */
    	switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3)) {
    	case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI:
    		if (dwc->hsphy_interface &&
    				!strncmp(dwc->hsphy_interface, "utmi", 4)) {
    			reg &= ~DWC3_GUSB2PHYCFG_ULPI_UTMI;
    			break;
    		} else if (dwc->hsphy_interface &&
    				!strncmp(dwc->hsphy_interface, "ulpi", 4)) {
    			reg |= DWC3_GUSB2PHYCFG_ULPI_UTMI;
    			dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
    		} else {
    			/* Relying on default value. */
    			if (!(reg & DWC3_GUSB2PHYCFG_ULPI_UTMI))
    				break;
    		}
    		/* FALLTHROUGH */
    	case DWC3_GHWPARAMS3_HSPHY_IFC_ULPI:
    		/* FALLTHROUGH */
    	default:
    		break;
    	}
    
    	switch (dwc->hsphy_mode) {
    	case USBPHY_INTERFACE_MODE_UTMI:
    		reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
    		       DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
    		reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_8_BIT) |
    		       DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_8_BIT);
    		break;
    	case USBPHY_INTERFACE_MODE_UTMIW:
    		reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
    		       DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
    		reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_16_BIT) |
    		       DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_16_BIT);
    		break;
    	default:
    		break;
    	}
    
    	/*
    	 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
    	 * '0' during coreConsultant configuration. So default value will
    	 * be '0' when the core is reset. Application needs to set it to
    	 * '1' after the core initialization is completed.
    	 */
    	if (dwc->revision > DWC3_REVISION_194A)
    		reg |= DWC3_GUSB2PHYCFG_SUSPHY;
    
    	if (dwc->dis_u2_susphy_quirk)
    		reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
    
    	if (dwc->dis_enblslpm_quirk)
    		reg &= ~DWC3_GUSB2PHYCFG_ENBLSLPM;
    
    	if (dwc->dis_u2_freeclk_exists_quirk)
    		reg &= ~DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS;
    
    	dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
    
    	return 0;
    }
    
    static void dwc3_core_exit(struct dwc3 *dwc)
    {
    	dwc3_event_buffers_cleanup(dwc);
    
    	usb_phy_shutdown(dwc->usb2_phy);
    	usb_phy_shutdown(dwc->usb3_phy);
    	phy_exit(dwc->usb2_generic_phy);
    	phy_exit(dwc->usb3_generic_phy);
    
    	usb_phy_set_suspend(dwc->usb2_phy, 1);
    	usb_phy_set_suspend(dwc->usb3_phy, 1);
    	phy_power_off(dwc->usb2_generic_phy);
    	phy_power_off(dwc->usb3_generic_phy);
    }
    
    static bool dwc3_core_is_valid(struct dwc3 *dwc)
    {
    	u32 reg;
    
    	reg = dwc3_readl(dwc->regs, DWC3_GSNPSID);
    
    	/* This should read as U3 followed by revision number */
    	if ((reg & DWC3_GSNPSID_MASK) == 0x55330000) {
    		/* Detected DWC_usb3 IP */
    		dwc->revision = reg;
    	} else if ((reg & DWC3_GSNPSID_MASK) == 0x33310000) {
    		/* Detected DWC_usb31 IP */
    		dwc->revision = dwc3_readl(dwc->regs, DWC3_VER_NUMBER);
    		dwc->revision |= DWC3_REVISION_IS_DWC31;
    	} else {
    		return false;
    	}
    
    	return true;
    }
    
    static void dwc3_core_setup_global_control(struct dwc3 *dwc)
    {
    	u32 hwparams4 = dwc->hwparams.hwparams4;
    	u32 reg;
    
    	reg = dwc3_readl(dwc->regs, DWC3_GCTL);
    	reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
    
    	switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
    	case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
    		/**
    		 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
    		 * issue which would cause xHCI compliance tests to fail.
    		 *
    		 * Because of that we cannot enable clock gating on such
    		 * configurations.
    		 *
    		 * Refers to:
    		 *
    		 * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
    		 * SOF/ITP Mode Used
    		 */
    		if ((dwc->dr_mode == USB_DR_MODE_HOST ||
    				dwc->dr_mode == USB_DR_MODE_OTG) &&
    				(dwc->revision >= DWC3_REVISION_210A &&
    				dwc->revision <= DWC3_REVISION_250A))
    			reg |= DWC3_GCTL_DSBLCLKGTNG | DWC3_GCTL_SOFITPSYNC;
    		else
    			reg &= ~DWC3_GCTL_DSBLCLKGTNG;
    		break;
    	case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
    		/* enable hibernation here */
    		dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
    
    		/*
    		 * REVISIT Enabling this bit so that host-mode hibernation
    		 * will work. Device-mode hibernation is not yet implemented.
    		 */
    		reg |= DWC3_GCTL_GBLHIBERNATIONEN;
    		break;
    	default:
    		/* nothing */
    		break;
    	}
    
    	/* check if current dwc3 is on simulation board */
    	if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
    		dev_info(dwc->dev, "Running with FPGA optmizations\n");
    		dwc->is_fpga = true;
    	}
    
    	WARN_ONCE(dwc->disable_scramble_quirk && !dwc->is_fpga,
    			"disable_scramble cannot be used on non-FPGA builds\n");
    
    	if (dwc->disable_scramble_quirk && dwc->is_fpga)
    		reg |= DWC3_GCTL_DISSCRAMBLE;
    	else
    		reg &= ~DWC3_GCTL_DISSCRAMBLE;
    
    	if (dwc->u2exit_lfps_quirk)
    		reg |= DWC3_GCTL_U2EXIT_LFPS;
    
    	/*
    	 * WORKAROUND: DWC3 revisions <1.90a have a bug
    	 * where the device can fail to connect at SuperSpeed
    	 * and falls back to high-speed mode which causes
    	 * the device to enter a Connect/Disconnect loop
    	 */
    	if (dwc->revision < DWC3_REVISION_190A)
    		reg |= DWC3_GCTL_U2RSTECN;
    
    	dwc3_writel(dwc->regs, DWC3_GCTL, reg);
    }
    
    static int dwc3_core_get_phy(struct dwc3 *dwc);
    static int dwc3_core_ulpi_init(struct dwc3 *dwc);
    
    /**
     * dwc3_core_init - Low-level initialization of DWC3 Core
     * @dwc: Pointer to our controller context structure
     *
     * Returns 0 on success otherwise negative errno.
     */
    static int dwc3_core_init(struct dwc3 *dwc)
    {
    	u32			reg;
    	int			ret;
    
    	if (!dwc3_core_is_valid(dwc)) {
    		dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
    		ret = -ENODEV;
    		goto err0;
    	}
    
    	/*
    	 * Write Linux Version Code to our GUID register so it's easy to figure
    	 * out which kernel version a bug was found.
    	 */
    	dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
    
    	/* Handle USB2.0-only core configuration */
    	if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
    			DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
    		if (dwc->maximum_speed == USB_SPEED_SUPER)
    			dwc->maximum_speed = USB_SPEED_HIGH;
    	}
    
    	ret = dwc3_phy_setup(dwc);
    	if (ret)
    		goto err0;
    
    	if (!dwc->ulpi_ready) {
    		ret = dwc3_core_ulpi_init(dwc);
    		if (ret)
    			goto err0;
    		dwc->ulpi_ready = true;
    	}
    
    	if (!dwc->phys_ready) {
    		ret = dwc3_core_get_phy(dwc);
    		if (ret)
    			goto err0a;
    		dwc->phys_ready = true;
    	}
    
    	ret = dwc3_core_soft_reset(dwc);
    	if (ret)
    		goto err0a;
    
    	dwc3_core_setup_global_control(dwc);
    	dwc3_core_num_eps(dwc);
    
    	ret = dwc3_setup_scratch_buffers(dwc);
    	if (ret)
    		goto err1;
    
    	/* Adjust Frame Length */
    	dwc3_frame_length_adjustment(dwc);
    
    	usb_phy_set_suspend(dwc->usb2_phy, 0);
    	usb_phy_set_suspend(dwc->usb3_phy, 0);
    	ret = phy_power_on(dwc->usb2_generic_phy);
    	if (ret < 0)
    		goto err2;
    
    	ret = phy_power_on(dwc->usb3_generic_phy);
    	if (ret < 0)
    		goto err3;
    
    	ret = dwc3_event_buffers_setup(dwc);
    	if (ret) {
    		dev_err(dwc->dev, "failed to setup event buffers\n");
    		goto err4;
    	}
    
    	/*
    	 * ENDXFER polling is available on version 3.10a and later of
    	 * the DWC_usb3 controller. It is NOT available in the
    	 * DWC_usb31 controller.
    	 */
    	if (!dwc3_is_usb31(dwc) && dwc->revision >= DWC3_REVISION_310A) {
    		reg = dwc3_readl(dwc->regs, DWC3_GUCTL2);
    		reg |= DWC3_GUCTL2_RST_ACTBITLATER;
    		dwc3_writel(dwc->regs, DWC3_GUCTL2, reg);
    	}
    
    	if (dwc->revision >= DWC3_REVISION_250A) {
    		reg = dwc3_readl(dwc->regs, DWC3_GUCTL1);
    
    		/*
    		 * Enable hardware control of sending remote wakeup
    		 * in HS when the device is in the L1 state.
    		 */
    		if (dwc->revision >= DWC3_REVISION_290A)
    			reg |= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW;
    
    		if (dwc->dis_tx_ipgap_linecheck_quirk)
    			reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS;
    
    		dwc3_writel(dwc->regs, DWC3_GUCTL1, reg);
    	}
    
    	return 0;
    
    err4:
    	phy_power_off(dwc->usb3_generic_phy);
    
    err3:
    	phy_power_off(dwc->usb2_generic_phy);
    
    err2:
    	usb_phy_set_suspend(dwc->usb2_phy, 1);
    	usb_phy_set_suspend(dwc->usb3_phy, 1);
    
    err1:
    	usb_phy_shutdown(dwc->usb2_phy);
    	usb_phy_shutdown(dwc->usb3_phy);
    	phy_exit(dwc->usb2_generic_phy);
    	phy_exit(dwc->usb3_generic_phy);
    
    err0a:
    	dwc3_ulpi_exit(dwc);
    
    err0:
    	return ret;
    }
    
    static int dwc3_core_get_phy(struct dwc3 *dwc)
    {
    	struct device		*dev = dwc->dev;
    	struct device_node	*node = dev->of_node;
    	int ret;
    
    	if (node) {
    		dwc->usb2_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
    		dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1);
    	} else {
    		dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
    		dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
    	}
    
    	if (IS_ERR(dwc->usb2_phy)) {
    		ret = PTR_ERR(dwc->usb2_phy);
    		if (ret == -ENXIO || ret == -ENODEV) {
    			dwc->usb2_phy = NULL;
    		} else if (ret == -EPROBE_DEFER) {
    			return ret;
    		} else {
    			dev_err(dev, "no usb2 phy configured\n");
    			return ret;
    		}
    	}
    
    	if (IS_ERR(dwc->usb3_phy)) {
    		ret = PTR_ERR(dwc->usb3_phy);
    		if (ret == -ENXIO || ret == -ENODEV) {
    			dwc->usb3_phy = NULL;
    		} else if (ret == -EPROBE_DEFER) {
    			return ret;
    		} else {
    			dev_err(dev, "no usb3 phy configured\n");
    			return ret;
    		}
    	}
    
    	dwc->usb2_generic_phy = devm_phy_get(dev, "usb2-phy");
    	if (IS_ERR(dwc->usb2_generic_phy)) {
    		ret = PTR_ERR(dwc->usb2_generic_phy);
    		if (ret == -ENOSYS || ret == -ENODEV) {
    			dwc->usb2_generic_phy = NULL;
    		} else if (ret == -EPROBE_DEFER) {
    			return ret;
    		} else {
    			dev_err(dev, "no usb2 phy configured\n");
    			return ret;
    		}
    	}
    
    	dwc->usb3_generic_phy = devm_phy_get(dev, "usb3-phy");
    	if (IS_ERR(dwc->usb3_generic_phy)) {
    		ret = PTR_ERR(dwc->usb3_generic_phy);
    		if (ret == -ENOSYS || ret == -ENODEV) {
    			dwc->usb3_generic_phy = NULL;
    		} else if (ret == -EPROBE_DEFER) {
    			return ret;
    		} else {
    			dev_err(dev, "no usb3 phy configured\n");
    			return ret;
    		}
    	}
    
    	return 0;
    }
    
    static int dwc3_core_init_mode(struct dwc3 *dwc)
    {
    	struct device *dev = dwc->dev;
    	int ret;
    
    	switch (dwc->dr_mode) {
    	case USB_DR_MODE_PERIPHERAL:
    		dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
    
    		if (dwc->usb2_phy)
    			otg_set_vbus(dwc->usb2_phy->otg, false);
    		if (dwc->usb2_generic_phy)
    			phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_DEVICE);
    
    		ret = dwc3_gadget_init(dwc);
    		if (ret) {
    			if (ret != -EPROBE_DEFER)
    				dev_err(dev, "failed to initialize gadget\n");
    			return ret;
    		}
    		break;
    	case USB_DR_MODE_HOST:
    		dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
    
    		if (dwc->usb2_phy)
    			otg_set_vbus(dwc->usb2_phy->otg, true);
    		if (dwc->usb2_generic_phy)
    			phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
    
    		ret = dwc3_host_init(dwc);
    		if (ret) {
    			if (ret != -EPROBE_DEFER)
    				dev_err(dev, "failed to initialize host\n");
    			return ret;
    		}
    		break;
    	case USB_DR_MODE_OTG:
    		INIT_WORK(&dwc->drd_work, __dwc3_set_mode);
    		ret = dwc3_drd_init(dwc);
    		if (ret) {
    			if (ret != -EPROBE_DEFER)
    				dev_err(dev, "failed to initialize dual-role\n");
    			return ret;
    		}
    		break;
    	default:
    		dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
    		return -EINVAL;
    	}
    
    	return 0;
    }
    
    static void dwc3_core_exit_mode(struct dwc3 *dwc)
    {
    	switch (dwc->dr_mode) {
    	case USB_DR_MODE_PERIPHERAL:
    		dwc3_gadget_exit(dwc);
    		break;
    	case USB_DR_MODE_HOST:
    		dwc3_host_exit(dwc);
    		break;
    	case USB_DR_MODE_OTG:
    		dwc3_drd_exit(dwc);
    		break;
    	default:
    		/* do nothing */
    		break;
    	}
    }
    
    static void dwc3_get_properties(struct dwc3 *dwc)
    {
    	struct device		*dev = dwc->dev;
    	u8			lpm_nyet_threshold;
    	u8			tx_de_emphasis;
    	u8			hird_threshold;
    
    	/* default to highest possible threshold */
    	lpm_nyet_threshold = 0xff;
    
    	/* default to -3.5dB de-emphasis */
    	tx_de_emphasis = 1;
    
    	/*
    	 * default to assert utmi_sleep_n and use maximum allowed HIRD
    	 * threshold value of 0b1100
    	 */
    	hird_threshold = 12;
    
    	dwc->maximum_speed = usb_get_maximum_speed(dev);
    	dwc->dr_mode = usb_get_dr_mode(dev);
    	dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node);
    
    	dwc->sysdev_is_parent = device_property_read_bool(dev,
    				"linux,sysdev_is_parent");
    	if (dwc->sysdev_is_parent)
    		dwc->sysdev = dwc->dev->parent;
    	else
    		dwc->sysdev = dwc->dev;
    
    	dwc->has_lpm_erratum = device_property_read_bool(dev,
    				"snps,has-lpm-erratum");
    	device_property_read_u8(dev, "snps,lpm-nyet-threshold",
    				&lpm_nyet_threshold);
    	dwc->is_utmi_l1_suspend = device_property_read_bool(dev,
    				"snps,is-utmi-l1-suspend");
    	device_property_read_u8(dev, "snps,hird-threshold",
    				&hird_threshold);
    	dwc->usb3_lpm_capable = device_property_read_bool(dev,
    				"snps,usb3_lpm_capable");
    
    	dwc->disable_scramble_quirk = device_property_read_bool(dev,
    				"snps,disable_scramble_quirk");
    	dwc->u2exit_lfps_quirk = device_property_read_bool(dev,
    				"snps,u2exit_lfps_quirk");
    	dwc->u2ss_inp3_quirk = device_property_read_bool(dev,
    				"snps,u2ss_inp3_quirk");
    	dwc->req_p1p2p3_quirk = device_property_read_bool(dev,
    				"snps,req_p1p2p3_quirk");
    	dwc->del_p1p2p3_quirk = device_property_read_bool(dev,
    				"snps,del_p1p2p3_quirk");
    	dwc->del_phy_power_chg_quirk = device_property_read_bool(dev,
    				"snps,del_phy_power_chg_quirk");
    	dwc->lfps_filter_quirk = device_property_read_bool(dev,
    				"snps,lfps_filter_quirk");
    	dwc->rx_detect_poll_quirk = device_property_read_bool(dev,
    				"snps,rx_detect_poll_quirk");
    	dwc->dis_u3_susphy_quirk = device_property_read_bool(dev,
    				"snps,dis_u3_susphy_quirk");
    	dwc->dis_u2_susphy_quirk = device_property_read_bool(dev,
    				"snps,dis_u2_susphy_quirk");
    	dwc->dis_enblslpm_quirk = device_property_read_bool(dev,
    				"snps,dis_enblslpm_quirk");
    	dwc->dis_rxdet_inp3_quirk = device_property_read_bool(dev,
    				"snps,dis_rxdet_inp3_quirk");
    	dwc->dis_u2_freeclk_exists_quirk = device_property_read_bool(dev,
    				"snps,dis-u2-freeclk-exists-quirk");
    	dwc->dis_del_phy_power_chg_quirk = device_property_read_bool(dev,
    				"snps,dis-del-phy-power-chg-quirk");
    	dwc->dis_tx_ipgap_linecheck_quirk = device_property_read_bool(dev,
    				"snps,dis-tx-ipgap-linecheck-quirk");
    
    	dwc->tx_de_emphasis_quirk = device_property_read_bool(dev,
    				"snps,tx_de_emphasis_quirk");
    	device_property_read_u8(dev, "snps,tx_de_emphasis",
    				&tx_de_emphasis);
    	device_property_read_string(dev, "snps,hsphy_interface",
    				    &dwc->hsphy_interface);
    	device_property_read_u32(dev, "snps,quirk-frame-length-adjustment",
    				 &dwc->fladj);
    
    	dwc->dis_metastability_quirk = device_property_read_bool(dev,
    				"snps,dis_metastability_quirk");
    
    	dwc->lpm_nyet_threshold = lpm_nyet_threshold;
    	dwc->tx_de_emphasis = tx_de_emphasis;
    
    	dwc->hird_threshold = hird_threshold
    		| (dwc->is_utmi_l1_suspend << 4);
    
    	dwc->imod_interval = 0;
    }
    
    /* check whether the core supports IMOD */
    bool dwc3_has_imod(struct dwc3 *dwc)
    {
    	return ((dwc3_is_usb3(dwc) &&
    		 dwc->revision >= DWC3_REVISION_300A) ||
    		(dwc3_is_usb31(dwc) &&
    		 dwc->revision >= DWC3_USB31_REVISION_120A));
    }
    
    static void dwc3_check_params(struct dwc3 *dwc)
    {
    	struct device *dev = dwc->dev;
    
    	/* Check for proper value of imod_interval */
    	if (dwc->imod_interval && !dwc3_has_imod(dwc)) {
    		dev_warn(dwc->dev, "Interrupt moderation not supported\n");
    		dwc->imod_interval = 0;
    	}
    
    	/*
    	 * Workaround for STAR 9000961433 which affects only version
    	 * 3.00a of the DWC_usb3 core. This prevents the controller
    	 * interrupt from being masked while handling events. IMOD
    	 * allows us to work around this issue. Enable it for the
    	 * affected version.
    	 */
    	if (!dwc->imod_interval &&
    	    (dwc->revision == DWC3_REVISION_300A))
    		dwc->imod_interval = 1;
    
    	/* Check the maximum_speed parameter */
    	switch (dwc->maximum_speed) {
    	case USB_SPEED_LOW:
    	case USB_SPEED_FULL:
    	case USB_SPEED_HIGH:
    	case USB_SPEED_SUPER:
    	case USB_SPEED_SUPER_PLUS:
    		break;
    	default:
    		dev_err(dev, "invalid maximum_speed parameter %d\n",
    			dwc->maximum_speed);
    		/* fall through */
    	case USB_SPEED_UNKNOWN:
    		/* default to superspeed */
    		dwc->maximum_speed = USB_SPEED_SUPER;
    
    		/*
    		 * default to superspeed plus if we are capable.
    		 */
    		if (dwc3_is_usb31(dwc) &&
    		    (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
    		     DWC3_GHWPARAMS3_SSPHY_IFC_GEN2))
    			dwc->maximum_speed = USB_SPEED_SUPER_PLUS;
    
    		break;
    	}
    }
    
    static int dwc3_probe(struct platform_device *pdev)
    {
    	struct device		*dev = &pdev->dev;
    	struct resource		*res;
    	struct dwc3		*dwc;
    
    	int			ret;
    
    	void __iomem		*regs;
    
    	dwc = devm_kzalloc(dev, sizeof(*dwc), GFP_KERNEL);
    	if (!dwc)
    		return -ENOMEM;
    
    	dwc->dev = dev;
    
    	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    	if (!res) {
    		dev_err(dev, "missing memory resource\n");
    		return -ENODEV;
    	}
    
    	dwc->xhci_resources[0].start = res->start;
    	dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
    					DWC3_XHCI_REGS_END;
    	dwc->xhci_resources[0].flags = res->flags;
    	dwc->xhci_resources[0].name = res->name;
    
    	res->start += DWC3_GLOBALS_REGS_START;
    
    	/*
    	 * Request memory region but exclude xHCI regs,
    	 * since it will be requested by the xhci-plat driver.
    	 */
    	regs = devm_ioremap_resource(dev, res);
    	if (IS_ERR(regs)) {
    		ret = PTR_ERR(regs);
    		goto err0;
    	}
    
    	dwc->regs	= regs;
    	dwc->regs_size	= resource_size(res);
    
    	dwc3_get_properties(dwc);
    
    	platform_set_drvdata(pdev, dwc);
    	dwc3_cache_hwparams(dwc);
    
    	spin_lock_init(&dwc->lock);
    
    	pm_runtime_set_active(dev);
    	pm_runtime_use_autosuspend(dev);
    	pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY);
    	pm_runtime_enable(dev);
    	ret = pm_runtime_get_sync(dev);
    	if (ret < 0)
    		goto err1;
    
    	pm_runtime_forbid(dev);
    
    	ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
    	if (ret) {
    		dev_err(dwc->dev, "failed to allocate event buffers\n");
    		ret = -ENOMEM;
    		goto err2;
    	}
    
    	ret = dwc3_get_dr_mode(dwc);
    	if (ret)
    		goto err3;
    
    	ret = dwc3_alloc_scratch_buffers(dwc);
    	if (ret)
    		goto err3;
    
    	ret = dwc3_core_init(dwc);
    	if (ret) {
    		dev_err(dev, "failed to initialize core\n");
    		goto err4;
    	}
    
    	dwc3_check_params(dwc);
    
    	ret = dwc3_core_init_mode(dwc);
    	if (ret)
    		goto err5;
    
    	dwc3_debugfs_init(dwc);
    	pm_runtime_put(dev);
    
    	return 0;
    
    err5:
    	dwc3_event_buffers_cleanup(dwc);
    
    err4:
    	dwc3_free_scratch_buffers(dwc);
    
    err3:
    	dwc3_free_event_buffers(dwc);
    
    err2:
    	pm_runtime_allow(&pdev->dev);
    
    err1:
    	pm_runtime_put_sync(&pdev->dev);
    	pm_runtime_disable(&pdev->dev);
    
    err0:
    	/*
    	 * restore res->start back to its original value so that, in case the
    	 * probe is deferred, we don't end up getting error in request the
    	 * memory region the next time probe is called.
    	 */
    	res->start -= DWC3_GLOBALS_REGS_START;
    
    	return ret;
    }
    
    static int dwc3_remove(struct platform_device *pdev)
    {
    	struct dwc3	*dwc = platform_get_drvdata(pdev);
    	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    
    	pm_runtime_get_sync(&pdev->dev);
    	/*
    	 * restore res->start back to its original value so that, in case the
    	 * probe is deferred, we don't end up getting error in request the
    	 * memory region the next time probe is called.
    	 */
    	res->start -= DWC3_GLOBALS_REGS_START;
    
    	dwc3_debugfs_exit(dwc);
    	dwc3_core_exit_mode(dwc);
    
    	dwc3_core_exit(dwc);
    	dwc3_ulpi_exit(dwc);
    
    	pm_runtime_put_sync(&pdev->dev);
    	pm_runtime_allow(&pdev->dev);
    	pm_runtime_disable(&pdev->dev);
    
    	dwc3_free_event_buffers(dwc);
    	dwc3_free_scratch_buffers(dwc);
    
    	return 0;
    }
    
    #ifdef CONFIG_PM
    static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
    {
    	unsigned long	flags;
    
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		spin_lock_irqsave(&dwc->lock, flags);
    		dwc3_gadget_suspend(dwc);
    		spin_unlock_irqrestore(&dwc->lock, flags);
    		dwc3_core_exit(dwc);
    		break;
    	case DWC3_GCTL_PRTCAP_HOST:
    		/* do nothing during host runtime_suspend */
    		if (!PMSG_IS_AUTO(msg))
    			dwc3_core_exit(dwc);
    		break;
    	case DWC3_GCTL_PRTCAP_OTG:
    		/* do nothing during runtime_suspend */
    		if (PMSG_IS_AUTO(msg))
    			break;
    
    		if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) {
    			spin_lock_irqsave(&dwc->lock, flags);
    			dwc3_gadget_suspend(dwc);
    			spin_unlock_irqrestore(&dwc->lock, flags);
    		}
    
    		dwc3_otg_exit(dwc);
    		dwc3_core_exit(dwc);
    		break;
    	default:
    		/* do nothing */
    		break;
    	}
    
    	return 0;
    }
    
    static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
    {
    	unsigned long	flags;
    	int		ret;
    
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		ret = dwc3_core_init(dwc);
    		if (ret)
    			return ret;
    
    		dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
    		spin_lock_irqsave(&dwc->lock, flags);
    		dwc3_gadget_resume(dwc);
    		spin_unlock_irqrestore(&dwc->lock, flags);
    		break;
    	case DWC3_GCTL_PRTCAP_HOST:
    		/* nothing to do on host runtime_resume */
    		if (!PMSG_IS_AUTO(msg)) {
    			ret = dwc3_core_init(dwc);
    			if (ret)
    				return ret;
    			dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
    		}
    		break;
    	case DWC3_GCTL_PRTCAP_OTG:
    		/* nothing to do on runtime_resume */
    		if (PMSG_IS_AUTO(msg))
    			break;
    
    		ret = dwc3_core_init(dwc);
    		if (ret)
    			return ret;
    
    		dwc3_set_prtcap(dwc, dwc->current_dr_role);
    
    		dwc3_otg_init(dwc);
    		if (dwc->current_otg_role == DWC3_OTG_ROLE_HOST) {
    			dwc3_otg_host_init(dwc);
    		} else if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) {
    			spin_lock_irqsave(&dwc->lock, flags);
    			dwc3_gadget_resume(dwc);
    			spin_unlock_irqrestore(&dwc->lock, flags);
    		}
    
    		break;
    	default:
    		/* do nothing */
    		break;
    	}
    
    	return 0;
    }
    
    static int dwc3_runtime_checks(struct dwc3 *dwc)
    {
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		if (dwc->connected)
    			return -EBUSY;
    		break;
    	case DWC3_GCTL_PRTCAP_HOST:
    	default:
    		/* do nothing */
    		break;
    	}
    
    	return 0;
    }
    
    static int dwc3_runtime_suspend(struct device *dev)
    {
    	struct dwc3     *dwc = dev_get_drvdata(dev);
    	int		ret;
    
    	if (dwc3_runtime_checks(dwc))
    		return -EBUSY;
    
    	ret = dwc3_suspend_common(dwc, PMSG_AUTO_SUSPEND);
    	if (ret)
    		return ret;
    
    	device_init_wakeup(dev, true);
    
    	return 0;
    }
    
    static int dwc3_runtime_resume(struct device *dev)
    {
    	struct dwc3     *dwc = dev_get_drvdata(dev);
    	int		ret;
    
    	device_init_wakeup(dev, false);
    
    	ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME);
    	if (ret)
    		return ret;
    
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		dwc3_gadget_process_pending_events(dwc);
    		break;
    	case DWC3_GCTL_PRTCAP_HOST:
    	default:
    		/* do nothing */
    		break;
    	}
    
    	pm_runtime_mark_last_busy(dev);
    	pm_runtime_put(dev);
    
    	return 0;
    }
    
    static int dwc3_runtime_idle(struct device *dev)
    {
    	struct dwc3     *dwc = dev_get_drvdata(dev);
    
    	switch (dwc->current_dr_role) {
    	case DWC3_GCTL_PRTCAP_DEVICE:
    		if (dwc3_runtime_checks(dwc))
    			return -EBUSY;
    		break;
    	case DWC3_GCTL_PRTCAP_HOST:
    	default:
    		/* do nothing */
    		break;
    	}
    
    	pm_runtime_mark_last_busy(dev);
    	pm_runtime_autosuspend(dev);
    
    	return 0;
    }
    #endif /* CONFIG_PM */
    
    #ifdef CONFIG_PM_SLEEP
    static int dwc3_suspend(struct device *dev)
    {
    	struct dwc3	*dwc = dev_get_drvdata(dev);
    	int		ret;
    
    	ret = dwc3_suspend_common(dwc, PMSG_SUSPEND);
    	if (ret)
    		return ret;
    
    	pinctrl_pm_select_sleep_state(dev);
    
    	return 0;
    }
    
    static int dwc3_resume(struct device *dev)
    {
    	struct dwc3	*dwc = dev_get_drvdata(dev);
    	int		ret;
    
    	pinctrl_pm_select_default_state(dev);
    
    	ret = dwc3_resume_common(dwc, PMSG_RESUME);
    	if (ret)
    		return ret;
    
    	pm_runtime_disable(dev);
    	pm_runtime_set_active(dev);
    	pm_runtime_enable(dev);
    
    	return 0;
    }
    #endif /* CONFIG_PM_SLEEP */
    
    static const struct dev_pm_ops dwc3_dev_pm_ops = {
    	SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
    	SET_RUNTIME_PM_OPS(dwc3_runtime_suspend, dwc3_runtime_resume,
    			dwc3_runtime_idle)
    };
    
    #ifdef CONFIG_OF
    static const struct of_device_id of_dwc3_match[] = {
    	{
    		.compatible = "snps,dwc3"
    	},
    	{
    		.compatible = "synopsys,dwc3"
    	},
    	{ },
    };
    MODULE_DEVICE_TABLE(of, of_dwc3_match);
    #endif
    
    #ifdef CONFIG_ACPI
    
    #define ACPI_ID_INTEL_BSW	"808622B7"
    
    static const struct acpi_device_id dwc3_acpi_match[] = {
    	{ ACPI_ID_INTEL_BSW, 0 },
    	{ },
    };
    MODULE_DEVICE_TABLE(acpi, dwc3_acpi_match);
    #endif
    
    static struct platform_driver dwc3_driver = {
    	.probe		= dwc3_probe,
    	.remove		= dwc3_remove,
    	.driver		= {
    		.name	= "dwc3",
    		.of_match_table	= of_match_ptr(of_dwc3_match),
    		.acpi_match_table = ACPI_PTR(dwc3_acpi_match),
    		.pm	= &dwc3_dev_pm_ops,
    	},
    };
    
    module_platform_driver(dwc3_driver);
    
    MODULE_ALIAS("platform:dwc3");
    MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
    MODULE_LICENSE("GPL v2");
    MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
    
    I don´t have that code at "dwc3_core_init()" function. In my case it is failing when callinf "dwc3_core_get_phy()".

  • Hi,

    Ahh my bad I was referring to different version of source code. Looking at your attached code may be its printing only because its returning EPROBE_DEFER, could you add a debug line in at the end of dwc3_probe(), just after pm_runtime_put() call example dev_err(dev, "dwc3 initalized\n"); , may be its initializing properly.

    Cheers,
    --Prabhakar Lad
  • Hi
    I think this is not necessary. If you take a look at the dmesg.txt file attached in a privious comment you can see the message "dwc3 488d0000.usb: failed to initialize core".
    Billa
  • dwc3 488d0000.usb: failed to initialize core
    Yes the above message is present in the log, but this message can be printed when -EPROBE_DEFER is returned, and if you notice in the log its printed thrice that is because probe was deferred!

    If you could add the line dev_err(dev, "dwc3 initalized\n"); after pm_runtime_put() call that would give me a picture for where to look next.

    Cheers,
    --Prabhakar Lad
  • I put a message as you told me but it does not appear in "dmesg". But "dwc3 488d0000.usb: failure to initialize core" appears three times as expected.
  • Hi Prabhakar,

    Any update?

    Billa

  • I continue with same wrong output
  • Billa,

    Bin Liu said:
    Now I think the only way to solve the issue is that you to debug the kernel routine to understand why dwc3 is not registered in udc. All the related code is under kernel drivers/usb/dwc3/ folder, dwc3-omap.c, core.c, and gadget.c.

    dwc3_omap_probe() in dwc3-omap.c is called first, then triggers dwc3_probe() in core.c, which calls dwc3_core_init_mode(), --> dwc3_gadget_init() in gadget.c, --> usb_add_gadget_udc() to register itself to udc.


    I have responded as above a few weeks ago, you would have to debug the kernel yourself to understand how your dts is misconfigured which leads to phy init failed.

    While debugging it, if you have difficulty to locate certain kernel functions, I can help you on that.
  • Hi:

    I was just following TI indications. The last ones were from Prabhakar and I dont know why but I stopped receiving reponses.

    As you say, I have been debugging and in function "of_phy_provider_lookup()" in file "phy-core.c" I put the printks. See below the code:

    static struct phy_provider *of_phy_provider_lookup(struct device_node *node)
    {
    struct phy_provider *phy_provider;
    struct device_node *child;

    printk("Billa node=%p node->name=%s\n", node, node->name);

    list_for_each_entry(phy_provider, &phy_provider_list, list) {
    printk("Billa phy_provider->dev->of_node=%p phy_provider->dev->of_node->name=%s\n", phy_provider->dev->of_node, phy_provider->dev->of_node->name);
    if (phy_provider->dev->of_node == node)
    return phy_provider;

    for_each_child_of_node(phy_provider->children, child){
    printk("Billa child=%p child->name=%s\n", child, child->name);
    if (child == node)
    return phy_provider;
    }
    }

    return ERR_PTR(-EPROBE_DEFER);
    }

    It exits with ERR_PTR(-EPROBE_DEFER).

    The kernel messages are:


    root@am57xx-evm:~# dmesg | grep Billa
    [ 25.343294] Billa node=d3b270b8 node->name=phy
    [ 25.525021] Billa phy_provider->dev->of_node=d3b2626c phy_provider->dev->of_node->name=pciephy
    [ 25.557066] Billa phy_provider->dev->of_node=d3b2730c phy_provider->dev->of_node->name=phy
    [ 25.624613] Billa node=d3b270b8 node->name=phy
    [ 25.639126] Billa phy_provider->dev->of_node=d3b2626c phy_provider->dev->of_node->name=pciephy
    [ 25.669778] Billa phy_provider->dev->of_node=d3b2730c phy_provider->dev->of_node->name=phy
    root@am57xx-evm:~#

    As a conclusion, it does not find the phy node.

    Billa
  • Billa,

    Thanks for the logs. I will review it with the kernel source code.
    By the way, Prabhakar is not a TIer, he/she is one of the forum community members trying to help you. I am not sure why he/she stops responding.
  • Billa,

    I reviewed the devicetree files you posted as in
    1. e2e.ti.com/.../2732619
    2. e2e.ti.com/.../2734007

    and modified my am572x-idk.dts based on some suspicious configs I found in your devicetree, but no matter how I changed it, I have always seen /sys/class/udc/488d0000.usb/ folder on my am572x IDK evm.

    Since your devicetree file is based on dra71-evm.dts, I cannot directly build and run bridge_linux.dts.txt on the am572x IDK evm, so there is nothing much I can help on my side at the moment. My recommendation for you is to debug the phy driver to see why not all the phy devices got probed.

    By the way, why your device tree is based on the dra71-evm, not am571x-idk?
  • Jose Carlos Billalabeitia said:
    Bin:
    I already set status="okay" in usb2_phy1 but the issue continues.
    The +5V_VBUS is supplied by the host when it is connected.
    I checked with the oscillo that the USB_DET signal works properly when connecting/disconnecting USB cable.
    Billa

    Billa,
    What voltage do you measure on USB_DET (TP40)?  Based on your resistor values it looks like with a 5V VBUS signal you will end up with a 1.2V signal on USB_DET.  The USB_DET signal appears to connect to GPIO3_30 which belongs to the vddshv1 domain which on your board is a 1.8V rail.  For a 1.8V GPIO on this device, Vih = 0.75 x VDDS = 1.35V.  So unless I'm making a mistake somewhere in the calculations (please double check me), your observed voltage is less than what's required to (reliably) detect this signal.
    Best regards,
    Brad
  • Billa,

    Please also check the following items on your board:

    * vdda_usb1/2/3 -- are these rails at the expected 1.8V?
    * vdda33v_usb1/2 -- are these rails at the expected 3.3V?

    Also, please run the following command from Linux:

    * omapconf export ctt am57xx-clocks.rd1.txt

    Please attach the resulting file, am57xx-clocks.rd1.txt. Also, please run this command and provide the output:

    * devmem2 0x4a008184

    That corresponds to CM_IDLEST_DPLL_USB to see the status of DPLL_USB.

    Thanks,
    Brad
  • Hi Brad,

    Well, regarding the USB_DET signal I double-checked that the gpio is on/off when plugging/unplugging the USB cable.

    As for the rail voltages I am not an expert on it, but I guess that it is related to the USB_DET signal, right?

    I run the commands you  suggested and attached is the file with the outputs.

    Regards

    Billa

    root@am57xx-evm:~# omapconf export ctt am57xx-clocks.rd1.txt
    Warning: chip not recognized, running in safe mode (only platform-generic functions allowed).
    
    Function disabled in safe mode, sorry ...
    
    root@am57xx-evm:~# devmem2 0x4a008184
    /dev/mem opened.
    Memory mapped at address 0xb6fb2000.
    Read at address  0x4A008184 (0xb6fb2184): 0x00000012
    root@am57xx-evm:~# 
    
    

  • Billa,

    I think I see an issue in your output:

    root@am57xx-evm:~# dmesg | grep usb
    [ 7.618521] usbcore: registered new interface driver usbfs
    [ 7.626660] usbcore: registered new interface driver hub
    [ 7.638856] usbcore: registered new device driver usb
    [ 7.656818] usbcore: registered new interface driver usbserial
    [ 16.601652] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer id
    [ 16.601663] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [ 16.601675] of_get_named_gpiod_flags: can't parse 'id-gpios' property of node '/extcon_usb2[0]'
    [ 16.601684] of_get_named_gpiod_flags: can't parse 'id-gpio' property of node '/extcon_usb2[0]'
    [ 16.601691] extcon-usb-gpio extcon_usb2: using lookup tables for GPIO lookup
    [ 16.601699] extcon-usb-gpio extcon_usb2: lookup for GPIO id failed
    [ 16.601707] extcon-usb-gpio extcon_usb2: GPIO lookup for consumer vbus
    [ 16.601714] extcon-usb-gpio extcon_usb2: using device tree for GPIO lookup
    [ 16.601723] of_get_named_gpiod_flags: can't parse 'vbus-gpios' property of node '/extcon_usb2[0]'
    [ 16.609969] of_get_named_gpiod_flags: parsed 'vbus-gpio' property of node '/extcon_usb2[0]' - status (0)
    [ 26.771889] dwc3 488d0000.usb: failed to initialize core
    [ 26.865662] dwc3 488d0000.usb: failed to initialize core
    [ 27.011745] dwc3 488d0000.usb: failed to initialize core

    It couldn't find anything called 'id-gpios' or 'id-gpio' in your dts.  Now in contrast on the AM570x EVM I see the following:

    [ 12.569452] of_get_named_gpiod_flags: can't parse 'id-gpios' property of node '/extcon_usb2[0]'
    [ 12.569490] of_get_named_gpiod_flags: parsed 'id-gpio' property of node '/extcon_usb2[0]' - status (0)

    So I think that might be the issue preventing you from having anything at all working. 

    Brad

  • On further inspection, that may be unrelated. I looked more at the extcon documentation and I see there's only a requirement to specify one of id-gpio and vbus-gpio. Looks like you have vbus-gpio correctly specified. It is specified as an active high input. Did you measure the voltage being observed on that pin? I want to be sure the voltage levels are correct to actually detect a voltage present.
  • The VBUS pin is 5V when cable connected and 0V when cable disconnected.

    USB_DET pin configured as gpio3_30 is working fine (0 when disconnected and 1 when connected).

  • With few workarounds, we are able to make USB Ethernet work on this board:

    Change 1. Deleted the following lines from the dra71-evm.dts:

    &usb2_phy1 {

          phy-supply = <&lp8733_ldo1_reg>;

    };

    &usb2_phy2 {

          phy-supply = <&lp8733_ldo1_reg>;

    };

    This change resolved error “dwc3 488d0000.usb: failed to initialize core”, and we could see usb0 interface after inserting kernel module g_ether.

    At this point, Ethernet was very unstable. Also, when connected USB to a Ubuntu desktop host, observed the following errors in dmesg of the Ubuntu host:

    [707716.695950] usb 3-5.3: new high-speed USB device number 127 using xhci_hcd

    [707716.776020] usb 3-5.3: Device not responding to setup address.

    [707717.004582] usb 3-5.3: config 2 interface 0 altsetting 0 endpoint 0x82 has an invalid bInterval 32, changing to 9

    [707717.004587] usb 3-5.3: config 2 interface 1 altsetting 0 bulk endpoint 0x81 has invalid maxpacket 64

    [707717.004591] usb 3-5.3: config 2 interface 1 altsetting 0 bulk endpoint 0x1 has invalid maxpacket 64

    [707717.004925] usb 3-5.3: config 1 interface 0 altsetting 0 endpoint 0x82 has an invalid bInterval 32, changing to 9

    [707717.004929] usb 3-5.3: config 1 interface 1 altsetting 1 bulk endpoint 0x81 has invalid maxpacket 64

    [707717.004932] usb 3-5.3: config 1 interface 1 altsetting 1 bulk endpoint 0x1 has invalid maxpacket 64

    [707717.005605] usb 3-5.3: New USB device found, idVendor=0525, idProduct=a4a2

    [707717.005608] usb 3-5.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0

    [707717.005611] usb 3-5.3: Product: RNDIS/Ethernet Gadget

    [707717.005615] usb 3-5.3: Manufacturer: Linux 4.14.40-rt29-gd5443cbd3b with dwc3-gadget

    [707717.013630] cdc_ether 3-5.3:1.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-5.3, CDC Ethernet Device, 8e:a0:8a:7a:f3:bc

    [707717.025788] cdc_ether 3-5.3:1.0 enp0s20u5u3: renamed from usb0

    [707717.067266] IPv6: ADDRCONF(NETDEV_UP): enp0s20u5u3: link is not ready

    [707717.067531] cdc_ether 3-5.3:1.0 enp0s20u5u3: kevent 12 may have been dropped

    [707717.267538] userif-4: sent link down event.

    [707717.267542] userif-4: sent link up event.

    Also, observed this error in board's dmesg:

    [   26.078835] dwc3 488d0000.usb: changing max_speed on rev 5533202a

    Change 2. Changed usb2 configuration in dra7.dtsi (bold lines changed):

           omap_dwc3_2: omap_dwc3_2@488c0000 {

               compatible = "ti,dwc3";

               ti,hwmods = "usb_otg_ss2";

               reg = <0x488c0000 0x10000>;

               interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;

               #address-cells = <1>;

               #size-cells = <1>;

               utmi-mode = <2>;

               ranges;

               usb2: usb@488d0000 {

                   compatible = "snps,dwc3";

                   reg = <0x488d0000 0x17000>;

                   interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,

                            <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,

                            <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;

                   interrupt-names = "peripheral",

                             "host",

                             "otg";

                   phys = <&usb2_phy2>;

                   phy-names = "usb2-phy";

                   maximum-speed = "full-speed";

                   dr_mode = "otg";

                   snps,dis_u3_susphy_quirk;

                   snps,dis_u2_susphy_quirk;

                   snps,dis_metastability_quirk;

               };

           };

    With these two changes, USB Ethernet works fine. Also, Its interface goes UP or DOWN based on cable is connected or not. vbus-gpio seems to be working fine.

    Ethernet Speed:

    On Windows, speed of this USB Ethernet is detected as 9.7 Mbps. When measured using iperf tool, actual Ethernet speed is 6.5 Mbps

    Queries: Do these work-rounds suggest a HW or FW issue? If yes, how to diagnose this issue, if any ?

  • Hi Paritosh,

    It sounds like hw issue to me. I tried it on my dra72 evm by removing the usb phy ldo nodes as yo mentioned above, then loading a usb gadget driver failed with an error message:

    dwc3 488d0000.usb: failed to enable ep0out

    I think you can check your board design where related to the USB phy power and clock. If the USB phy clock is off a bit, high-speed will fail because of bus clock is out of sync between the host and device, but full-speed can still work because of the low bus clock.
  • Paritosh,

    I just tested on my AM5708 EVM, and when I remove those phy-supply lines I was unable to connect via RNDIS. I tested a couple times going back and forth. I connected fine with phy-supply, but then it failed when I removed phy-supply. So that's very unusual that removing those lines actually helped in your situation. Are you positive that the dtb that's in your file system is WITHOUT the phy-supply line? Could there possibly have been something else you did that fixed it?

    Brad