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.

AM437x USB not working if VPFE bus width enabled

Other Parts Discussed in Thread: TVP5146, AM4378

Dear,

I am designing a board broadly based on am4378-gp-evm. I have connected TVP5146 (video decoder)  instead of ov2659.

My problem is , If i  declare bus-width = <8>; in the dts file as given below,  USB is not working. and If i  dont declare "bus-width = <8>;"  i am getting " Invalid bus width error" in the console output. 

My brief hardware data connection is given below

 Y2-Y9 (TVP5146)    = > cam1_data0  to cam1_data7 (am4378)

data clock (TVP5146)   =>  cam1_pclk (am4378)

See below relevant dts entries..

tvp514x@5c {
compatible = "ti,tvp5146";
reg = <0x5c>;
status = "okay";

port {
tvp514x_0: endpoint {
remote-endpoint = <&vpfe1_ep>;

};
};
};

&vpfe1 {

status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&cam1_pins_default>;
pinctrl-1 = <&cam1_pins_sleep>;

port {
vpfe1_ep: endpoint {

slave-mode;  
remote-endpoint = <&tvp514x_0>;

ti,am437x-vpfe-interface = <1>;

bus-width = <8>;

hsync-active = <1>;
vsync-active = <1>; 
pclk-sample = <0>; 

};
};
};

cam1_pins_default: cam1_pins_default {
pinctrl-single,pins = <
0x1dc ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AE21) cam1_pclk.cam1_pclk */
0x1e8 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AB20) cam1_data0.cam1_data0 */
0x1ec ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AC21) cam1_data1.cam1_data1 */
0x1f0 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AD21) cam1_data2.cam1_data2 */
0x1f4 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AE22) cam1_data3.cam1_data3 */
0x1f8 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AD22) cam1_data4.cam1_data4 */
0x1fc ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AE23) cam1_data5.cam1_data5 */
0x200 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AD23) cam1_data6.cam1_data6 */
0x204 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (AE24) cam1_data7.cam1_data7 */
>;
};

/* Optional sleep pin settings. Must manually enter values in the below skeleton. */
cam1_pins_sleep: cam1_pins_sleep {
pinctrl-single,pins = <
0x1dc (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AE21) cam1_pclk.cam1_pclk */
0x1e8 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AB20) cam1_data0.cam1_data0 */
0x1ec (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AC21) cam1_data1.cam1_data1 */
0x1f0 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AD21) cam1_data2.cam1_data2 */
0x1f4 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AE22) cam1_data3.cam1_data3 */
0x1f8 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AD22) cam1_data4.cam1_data4 */
0x1fc (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AE23) cam1_data5.cam1_data5 */
0x200 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AD23) cam1_data6.cam1_data6 */
0x204 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7 ) /* (AE24) cam1_data7.cam1_data7 */

>;
};

  

Does it have any mistake in above dts entry?I want to use BT.656  , 8 bit ycbcr embedded sync mode.

Should i make any config setting  or i2c register setting in tvp5146 side? Ultimately i want to capture the video using tvp5146 decoder.

Regards,

Winiston.P

  • The software team have been notified. They will respond here.
  • Dear Biser,

    Yes, Same issue only. For resolving that issue("Invalid bus width error") , I have added "bus-width = <8>; " in the device tree as i mentioned earlier . Now "Invalid bus width error" got disappeared and USB is not working.

    Is there any inter relation of these two modules(USB & cam1) ? 

    How do i resolve this issue?

    Regards,

    Winiston.P

  • Please refer to processors.wiki.ti.com/.../Linux_Core_VPFE_User's_Guide There is no relation between the VPFE and USB, there must be something wrong with your settings.
  • Dear Biser,
    Thanks for your quick answer.
    Kernel config has been enabled as per below guidelines,
    processors.wiki.ti.com/.../Linux_Core_VPFE_User's_Guide

    As i said earlier, tvp5146 is connected in cam1 port of am4378 and only one camera is connected.
    My brief hardware details as given below.

    Y2-Y9 (TVP5146) = > cam1_data0 to cam1_data7 (am4378)

    data clock (TVP5146) => cam1_pclk (am4378)

    I could not find the mistake in this issue.

    Can you give the required relevant dts entry for TVP5146 for my hardware connection?

    I plan to use default setting(BT.656 YCbCr Embedded sync 8 bit) of TVP5146 . Least 2 bits (Y0 & Y1) are unconnected. Should i do any register program in TVP5146 ?

    If you need any other details, please mail me back. I would be very thankful if you solve this issue.

    Regards,
    Winiston.P
  • I have escalated the request to the factory team. They will respond here.
  • Winiston,

    Can you please provide more detail about 'usb not working'?

    Please run the following diagnostic tool on your board and post its log.

    #!/bin/sh
    #
    # Util to check USB subsystem on for Linux kernel 3.12+
    #
    # TODO: usage
    
    VERSION=0.2.2
    
    
    ### functions ###
    
    has_supported_kernel() {
    	local _ver
    	local _t
    
        uname -a
    	_ver=`uname -r`
        _t=${_ver%%.*}
        # 2.x.x, unsupported
        [ $_t -ge 3 ] || return 1
        # 4.x.x, supported
        [ $_t -lt 4 ] || return 0
    
        _ver=${_ver#*.}
        _t=${_ver%%.*}
        # < 3.12.x, unsupported
        [ $_t -ge 12 ] || return 1
        return 0
    }
    
    check_platform () {
    	local _hw
        [ "$PLATFORM" != "" ] || {
    	    _hw=`grep '^Hardware' /proc/cpuinfo`
    	    DBG_PRINT $_hw
    
            if [ "${_hw#*AM33XX}" != "$_hw" ]; then
                PLATFORM="am335x"
            elif [ "${_hw#*AM43}" != "$_hw" ]; then
                PLATFORM="am437x"
            elif [ "${_hw#*DRA7}" != "$_hw" ]; then
                PLATFORM="am57x"
            elif [ "${_hw#*Keystone}" != "$_hw" ]; then
                PLATFORM="keystone"
            else
                PLATFORM="unknown"
            fi
        }
    
        DBG_PRINT $PLATFORM
        case $PLATFORM in
            "am335x")
                USB0='usb@47400000/usb@47401000'
                USB1='usb@47400000/usb@47401800'
                return 0;;
            "am437x")
                USB0='omap_dwc3@48380000/usb@48390000'
                USB1='omap_dwc3@483c0000/usb@483d0000'
                return 0;;
            "am57x")
                USB0='omap_dwc3_1@48880000/usb@48890000'
                USB1='omap_dwc3_2@488c0000/usb@488d0000'
                return 0;;
            "keystone")
                USB0='omap_dwc3_1@48880000/usb@48890000'
                USB1='omap_dwc3_2@488c0000/usb@488d0000'
                return 0;;
            *)
                echo "Unsupported $PLATFORM"
                return 1;;
        esac
    }
    
    # check a kernel CONFIG option
    # params $1 - the config option
    #        $2 = '-q', quiet output
    # return 0 - undefined
    #        1 - defined as 'm', kernel module
    #        2 - defined as 'y', kernel builtin
    check_kernel_config() {
        local _cfg
    
        [ -n "$1" ] || return 0
        _cfg=`zcat /proc/config.gz | grep "^$1\>"`
    
        case ${_cfg#*=} in
            "y") return 2;;
            "m") return 1;;
              *) [ "$2" = "-q" ] ||
                  echo "Error: $1 is undefined in kernel config"
              return 0;;
        esac
    }
    
    # check a kernel module
    # $1 - module name, relative path from drivers/, with .ko surfix
    # return 0 - found
    #        1 - error
    check_module() {
        local _modname
        local _moddep
    
        [ -n "$1" ] || return 1
    
        _modname="/lib/modules/`uname -r`/kernel/drivers/${1}.ko"
        _moddep="/lib/modules/`uname -r`/modules.dep"
    
        DBG_PRINT 1
        [ -f $_modname ] || {
            echo "Error: $_modname not found."
            echo "       Please ensure 'make module_install' is done properly."
            return 1
        }
    
        DBG_PRINT 2
        [ -f $_moddep ] || $moddep_checked || {
            echo "Error: $_moddep not found."
            echo "       Please ensure 'make module_install' is done properly."
            moddep_checked=true
        }
    
        DBG_PRINT 3
        lsmod | grep `basename $1 | tr '-' '_'` > /dev/null || {
            DBG_PRINT ">>>> ${1}.ko:"
            if grep "${1}.ko:" $_moddep > /dev/null; then
                DBG_PRINT 5
                echo "Error: $_moddep seems to be valid,"
                echo "       but `basename $1`.ko is not loaded."
                echo "       Please provide /proc/config.gz and /lib/module/`uname -r`/*"
                echo "       for further investigation."
            else
                DBG_PRINT 6
                echo "Error: `basename $1`: $_moddep is invalid."
                echo "       Please run command 'depmod' on the target to re-generate it,"
                echo "       then reboot the target. If the issue still exists, please"
                echo "       ensure 'make module_install' is done properly."
            fi
    
            DBG_PRINT 7
            return 1
        }
        DBG_PRINT 8
        return 0
    }
    
    check_musb_drivers() {
        check_kernel_config CONFIG_USB_MUSB_HDRC
        [ $? != 1 ] || check_module 'usb/musb/musb_hdrc'
    
        check_kernel_config CONFIG_USB_MUSB_DUAL_ROLE -q
        [ $? != 0 ] || echo "Warning: CONFIG_USB_MUSB_DUAL_ROLE undefined."
    
        check_kernel_config CONFIG_USB_MUSB_DSPS
        [ $? != 1 ] || {
            check_module 'usb/musb/musb_dsps'
            check_module 'usb/musb/musb_am335x'
        }
    
        check_kernel_config CONFIG_AM335X_PHY_USB
        [ $? != 1 ] || {
            check_module 'usb/phy/phy-am335x'
            check_module 'usb/phy/phy-am335x-control'
        }
    
        check_kernel_config CONFIG_MUSB_PIO_ONLY -q
        [ $? != 0 ] || {
           if check_kernel_config CONFIG_TI_CPPI41 -q; then
               echo "Error: MUSB CPPI DMA mode is enabled, but CPPI moudle is not enabled in DMA Engine."
               echo "       Please enable CONFIG_TI_CPPI41 under DMA Engine Support in kernel config."
           fi
        }
    }
    
    check_dwc3_drivers() {
        check_kernel_config CONFIG_USB_DWC3
        [ $? != 1 ] || check_module 'usb/dwc3/dwc3'
    
        check_kernel_config CONFIG_USB_DWC3_DUAL_ROLE -q
        [ $? != 0 ] || echo "Warning: CONFIG_USB_DWC3_DUAL_ROLE undefined."
    
        check_kernel_config CONFIG_USB_OTG -q
        [ $? != 0 ] || echo "Warning: CONFIG_USB_OTG undefined, which is required for DRD mode."
    
        check_kernel_config CONFIG_USB_DWC3_OMAP
        [ $? != 1 ] || check_module 'usb/dwc3/dwc3-omap'
    
        check_kernel_config CONFIG_USB_XHCI_HCD
        [ $? != 1 ] || {
            check_module 'usb/host/xhci-plat-hcd'
            check_module 'usb/host/xhci-hcd'
        }
    
        check_kernel_config CONFIG_OMAP_CONTROL_PHY
        [ $? != 1 ] || check_module 'phy/phy-omap-control'
    
        if [ $PLATFORM = am437x ]; then
            check_kernel_config CONFIG_OMAP_USB2
            [ $? != 1 ] || check_module 'phy/phy-omap-usb2'
        else
            check_kernel_config CONFIG_TI_PIPE3
            [ $? != 1 ] || check_module 'phy/phy-ti-pipe3'
        fi
    }
    
    ### debug ###
    
    g_log_file=/tmp/chmusb.log
    
    DBG_ENABLE() { g_dbg_enabled=true; }
    DBG_DISABLE() { g_dbg_enabled=false; }
    DBG_LOG_RESET() { ! $g_dbg_enabled || echo > $g_log_file; }
    DBG_PRINT() { ! $g_dbg_enabled || echo "$(date +%H:%M:%S) [$(basename $0)]: $*"; }
    DBG_LOG() { DBG_PRINT $* >> $g_log_file; }
    DBG_LOG_MARK() { DBG_PRINT "----------------" >> $g_log_file; }
    
    
    ### main ####
    
    moddep_checked=false
    
    echo "chkusb.sh Version $VERSION"
    
    [ "$V" = "1" ] && DBG_ENABLE && DBG_LOG_RESET || DBG_DISABLE
    
    has_supported_kernel ||
        { echo "Unsupported kernel version: `uname -r`"; exit 1; }
    check_platform || exit 2
    DBG_PRINT device: $PLATFORM
    
    which lsusb > /dev/null ||
        { echo "Error: lsusb command not found"; exit 3; }
    
    if lsusb > /dev/null 2>&1; then
        echo "USB is initialized"
    else
        echo "USB initialization failed"
    
        # failed, continue checking
        [ -f /proc/config.gz ] ||
            { echo "Error: /proc/config.gz not found"; exit 4; }
    
        case $PLATFORM in
            am335x) check_musb_drivers;;
            am437x | am57x | keystone) check_dwc3_drivers;;
            *)
                echo "Error: unsupported platform $PLATFORM"
                exit 5;;
        esac
    fi
    
    # check dr_mode & gadget drivers
    
    [ -d /proc/device-tree ] || {
        echo "Warning: /proc/device-tree/ not found"
        if [ -d "/lib/modules/`uname -r`/" ]; then
            echo "The list of USB gadget drivers installed:"
            ls -1Rp "/lib/modules/`uname -r`/kernel/drivers/usb/gadget/"
        fi
        exit 0
    }
    
    for _usb in "${USB0}" "${USB1}"; do
        _usb_dir="/proc/device-tree/ocp/${_usb}"
        _status=`cat $_usb_dir/status 2> /dev/null`
        _dr_mode=`cat $_usb_dir/dr_mode`
        echo `basename $_usb`: $_dr_mode, $_status
    
        [ "$_status" = "disabled" -o "$_dr_mode" = "host" ] || gadget_mode=true
    done
    
    DBG_PRINT $gadget_mode
    $gadget_mode || exit 0
    
    echo
    
    check_kernel_config CONFIG_USB_LIBCOMPOSITE
    case $? in
        0) echo "Error: no any gadget driver enabled"
           exit 6;;
        1) is_gadget_builtin=false;;
        2) echo "The gadget driver is built-in"
           is_gadget_builtin=true;;
    esac
    
    check_kernel_config CONFIG_USB_ZERO -q ||
        echo "Gadget Kernel Config: g_zero is enabled"
    check_kernel_config CONFIG_USB_AUDIO -q ||
        echo "Gadget Kernel Config: g_audio is enabled"
    check_kernel_config CONFIG_USB_ETH -q ||
        echo "Gadget Kernel Config: g_ether is enabled"
    check_kernel_config CONFIG_USB_G_NCM -q ||
        echo "Gadget Kernel Config: g_ncm is enabled"
    check_kernel_config CONFIG_USB_MASS_STORAGE -q ||
        echo "Gadget Kernel Config: g_mass_storage is enabled"
    check_kernel_config CONFIG_USB_G_SERIAL -q ||
        echo "Gadget Kernel Config: g_serial is enabled"
    check_kernel_config CONFIG_USB_G_PRINTER -q ||
        echo "Gadget Kernel Config: g_printer is enabled"
    
    g_driver=`grep '^DRIVER=' /sys/class/udc/*/uevent 2>/dev/null`
    echo "gadget driver loaded: ${g_driver:-(none)}"
    
    echo
    
    if ! $is_gadget_builtin; then
        if [ -d "/lib/modules/`uname -r`/" ]; then
            echo "The list of USB gadget drivers installed:"
            ls -1Rp "/lib/modules/`uname -r`/kernel/drivers/usb/gadget/"
        else
            echo "Error: /lib/modules/`uname -r`/ not found"
            echo "       Please ensure 'make modules_install' is done properly."
            exit 7
        fi
    fi
    
    # vim: ft=sh:ts=4:sw=4:et
    

  • Winiston,

    Please check this post. The invalid bus width error was root caused to hardware problem here.

    e2e.ti.com/.../2045503

    Regards,
    Manisha
  • Hi Manisha, Bin Liu,


    As it turns out, the problem was not entirely hardware. There was a hardware error, but that alone did not solve the problem. The "Invalid bus width" error disappeared only after adding "bus-width=<8>;" in the dts file.

    Situation before adding "bus-width=<8>;" :

    1) Invalid Bus Width error in dmesg. I2C TVP514x driver registered.

    2) USB works - Keyboard connected to USB port works fine.

    Situation after adding "bus-width=<8>;" :

    1) Invalid Bus width error disappears. However, no /dev/video entry created, nor is there any /sys/class/video4linux/video entry. I2C TVP514x driver registered.

    2) The USB port stops working and does not detect the keyboard.

    Output of dmesg:

    root@am437x-evm:~# dmesg | grep -i "vpfe"                                       
    [    8.826422] WARNING: CPU: 0 PID: 160 at drivers/media/platform/am437x/am437x)
    [    8.930540] Modules linked in: dwc3_omap(+) extcon c_can_platform(+) am437x_l
    [    9.687868] [<c00348c0>] (warn_slowpath_null) from [<bf0803b8>] (mbus_to_pix)
    [    9.755193] [<bf080360>] (mbus_to_pix [am437x_vpfe]) from [<bf0805d8>] (__vp)
    [    9.927607] [<bf080460>] (__vpfe_get_format [am437x_vpfe]) from [<bf082098>])
    [   10.130149] [<bf081fcc>] (vpfe_config_image_format [am437x_vpfe]) from [<bf0)
    [   10.250976] [<bf082310>] (vpfe_set_input [am437x_vpfe]) from [<bf082568>] (v)
    [   10.340065] [<bf082508>] (vpfe_async_complete [am437x_vpfe]) from [<c051e004)
    [   10.575112] [<c051e01c>] (v4l2_async_notifier_register) from [<bf081be0>] (v)
    [   10.632955] [<bf081884>] (vpfe_probe [am437x_vpfe]) from [<c03e32f0>] (platf)
    [   11.276487] [<c03e31d0>] (__platform_driver_register) from [<bf08601c>] (vpf)
    [   11.305077] [<bf086000>] (vpfe_driver_init [am437x_vpfe]) from [<c00096fc>] )
    root@am437x-evm:~#

    Output of lsmod:

    root@am437x-evm:~# lsmod                                                        
    Module                  Size  Used by                                           
    ti_am335x_adc           5515  0                                                 
    snd_soc_simple_card     7648  0                                                 
    ti_emif_sram            6242  1                                                 
    pruss                  11485  1                                                 
    omap_des               11232  1                                                 
    omap_aes_driver        18201  1                                                 
    omap_sham              20256  1                                                 
    dwc3_omap               4926  1                                                 
    extcon                 14007  1 dwc3_omap                                       
    c_can_platform          6628  1                                                 
    am437x_vpfe            24434  1                                                 
    c_can                   9164  1 c_can_platform                                  
    omap_rng                4482  0                                                 
    rng_core                7695  1 omap_rng                                        
    can_dev                11922  1 c_can                                           
    ti_am335x_tsc           5773  0                                                 
    wkup_m3_ipc             7625  0                                                 
    wkup_m3_rproc           3669  1                                                 
    ti_am335x_tscadc        6162  2 ti_am335x_adc,ti_am335x_tsc                     
    omap_wdt                4474  0                                                 
    tvp514x                11013  0                                                 
    remoteproc             26773  3 pruss,wkup_m3_rproc,wkup_m3_ipc                 
    virtio                  7576  1 remoteproc                                      
    virtio_ring            12144  1 remoteproc                                      
    sch_fq_codel            8213  2                                                 
    root@am437x-evm:~#

    Output of USB check script :

    chkusb.sh Version 0.2.2                                                         
    Linux am437x-evm 4.4.12-g3639bea54a #2 PREEMPT Tue Nov 29 11:14:41 IST 2016 armx
    USB initialization failed                                                       
    usb@48390000: otg, okay                                                         
    usb@483d0000: host, 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.4.12-g3639bea54a/kernel/drivers/usb/gadget/:                     
    function/                                                                       
    legacy/                                                                         
    libcomposite.ko                                                                 
    udc/                                                                            
                                                                                    
    /lib/modules/4.4.12-g3639bea54a/kernel/drivers/usb/gadget/function:             
    u_ether.ko                                                                      
    u_serial.ko                                                                     
    usb_f_acm.ko                                                                    
    usb_f_ecm.ko                                                                    
    usb_f_ecm_subset.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_uac2.ko                                                                   
    usb_f_uvc.ko                                                                    
                                                                                    
    /lib/modules/4.4.12-g3639bea54a/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.4.12-g3639bea54a/kernel/drivers/usb/gadget/udc:                  
    udc-core.ko                                                                     
    root@am437x-evm:/home#

    Kernel version used

    root@am437x-evm:~# uname -r                                                     
    4.4.12-g3639bea54a

    How can the two problems - video and USB, be solved?

    Regards,

    Rajat Rao

  • Rajat,

    Does USB work if you don't declare "bus-width = <8>;"? /* sorry, you have already mentioned it in the post above... */


    The log shows the USB drivers are not loaded properly. Please attach the full dmesg log and kernel /proc/config.gz.

  • As described in Documentation/devicetree/bindings/media/ti-am437x-vpfe.txt - “ bus-width = <8>;” must be specified values and the value must be between 8 and 16.

    The kernel WARN  indicates that the initial handshake between vpfe and the sub-device did not complete properly. Can you  add “am437x-vpfe.debug=3” to the kernel boot args and then post the entire kernel boot log?

  • Dear Manisha, Bin Liu,

    Please find attached :

    1) Entire boot log with am437x-vpfe.debug=3. I did this using setenv bootargs am437x-vpfe.debug=3 in u-boot. Is this the right way?

    2) The /proc/config.gz binary file.

    3) The boot log without "bus-width=<8>" in the dts file.

    Regards,

    Rajat Rao

    dmesg log with bus-width.dat

    cat /proc/zo  config.gz
    ��<�r㶒��
    �dv6c[��k�	J8"	J�_X�&qߎ-'���n����T��n�����_�uB��O�������������e��}�������$哒�	M��
    ��Ƿ�?o_&����v|2Y�^w��������o�����_Ix��yMdq����D�j^'��S��BnEk�������K�j"��UN4�Vۦ��I���j�I�Ԓ$���k��2��\	r�,S@42�5��\
    �r�hQo�Ŝ�iM�9�L/$Ä)�9=&c���_�w]P�͜�T��^�)�i�HH�f�S�4'�=AIiZ��"�#�z390�Ψ��+�h.q��^����?{/�ЅX�&���kV�{��k2ˁ�tEsuu��S�u\gJ_}�|�������������JR�ZҜ�<>�vk��S�6�^s��G�U,O5�6tӌ��
    ��u27�}?y��ߞ{)�I��e
    |W��#�d���
    ��+�����H�T��B��^}��w�Vk����u����-�"��J�R��S\�JsO\�T�4��7L�1�MA˜�M��!NqX�5t`=��~�͍�����ѧ�A`H����J�t\}��ǧ���X�����b"����-�
    �`�
    CM!����uM4���u�p�s��JQ8�6�Hj5�D��
    ��y'� ��׷o�?_���^��S��œ��D�Z�u�O[,d
    8Puk8���i�m���!)/����Ww=�P)�	 ��
    ��?�ϔ��	�I2.P�z!)IYi)%%�T�����"�����E#�*�
    �w͒%��&D�����`}��{y
    �閗�������Na�=0OY�Lӊ9"j`����^H���g�}��d�l�O^����d{{�����{�ݛ14�I���
    �SD�ᡑGA��[i6��
    ,k�R�P8�@���|\��G�D-�\*k�.�j���"$���5������A�+���M��L(���alC`���z�y�.�����t��g�<�t%[6!���DŽ=d�CX���/|yW�N��zK}�%���Ӏ���Eg��*��j�R5�t��"@���6�Vt�Œ9���٣��O�ާg}zx菤>n��z�B��@�C˾&� &��r�R�p�Q�
    BB�/���ff7,\�qkpw錘M�ٽ��RpVj�%�U��m9�c8�At#A�
    ���\+X:x�&���À>rd� +�퓩�JR@NJW`H,�M��C�N���v��{ߎ��$5���
    EKV+�#�N<߄��H����Wo������,,Qk��峸�~i�G�Ts�P^uk+ÓC�l��c0둖K���ZC��,$ȗX'���^i:kꬲ{�*M7V�m�b��%�&�c�
    �78"���9��Yr@�S�k��H�q������Z1�T���)���D��VM$
    }׾[c�0l�*`2F�k��b�����a�x���?w��
    p
    t���̤ӹ�_�Ak[M�N;�����
    eD���t��Yh_�'���b�FC��M `�,c��N��`f,;-����pLղ��M�U���S�<���vI1sb���
    ;��F�����_��ܣ�M�i�͜f�r����s�q{���
    �1�R6���h��� �bn�2�Ђ��|�jR��ټ���
    ���rG� D�����_��sPYe�d�Z��D0�.Ƀ��m�X�LSҘ��Q�aCpT"�TҪ!:f���Nc�DO]2#Ѕ�	����񜚕&�`��6yV�E��O�KIG{A~T9�A�R+-y����Ѝ6��t�J���6U ��(
    ���4Ac)v�V9�gx�����^a0j0 z}�Ḿ[5zkk��-)���SX���$m
    �I�%|��߶���7�������}��dmb'���\
    Y�]oxѝ��.�������B0�^�I�:����I@,c��U�Ap�"�l�p�i>���<(�-ϓ��NLD��法�̍��YJ2�8�3��8gaػ͚������ɵ�XAa)`i�Zd'cb���ë������=
    "5ӆ�銔	u�/N_��gF��
    ����(�P�G��d��$	Stx�r�S����������!��Ԫ���AqP�L՛/��̶��@s�w���❎��=ƀ�+��'U���K"2�a��01k|�e��%���M–O��;�Ұ�aƛ����Ν��|�n�I2'	
    �mT���eͻnG�^��9Ҫ�����d���D	��PM�:Ƚ�"�SR��JO���He�nF�l,����D�"'�s��Ă���]�O)R�~7:�q�$���x��S<pq<�)r||4B .���2��L�t>2͒�ǣC����t��c��|52�bu�e���p��F�/
    G.՗�˳8~}y��<>	pgdx�!q�IiDcdh5MNF9��'+V&#��"�����~�|��<�o���~w���w����&?�w�?o{�֫�?��/B��5�P���49�L�1ɃP+�&��4��ח�q�,)F�T���66g	Ϲ���͌��1
    5��;�|l}U|d��&k�2��2��(v�{06�O���p���v��b�?�6�8Q��Y	̭�nn�QE����E�H�z������'�&+���
    �E�~p�ta�LjϤ����L2s�'
    ���g�4��%{Œb��
    y
    H�_(L�"��0��W>1��(!����͈���ϧ�����qwkFp�Z_�;���hӐ�*�V��w�ooND����~;�=m_�w���ׯ��hz=���<��<l,Џ�ȟ�y�Gγ:��QGcs]r5����3Ǎr������,���q�Z�#)�l`���٘�\�� l��}����oF���u�u`+���������sX�:�F
    ��'�/ ��̤���T�M@���	������u>t���(�z�����z�/��j�o���SeF�Tֺ�L�
    ��EU�ܒC�����XlPkі�w�5k�a.��S�@�~�lr�2�m�.N5�����ԫTY7D�=��h!k�k,t~�9�6-�����R���ٗ/��������y6���u{q~yz|�nN~ܭ�	��1�չ�3����R��J�W~J��.�",�c^���`f͸���mꑤ�A�������4"�^]|�V|�����$���Qd؋�����@�ް�����eoe�L�mo^֖P���\**�X�ao���`1�_����{�fD]͢H�WQ��,�C�5��
    �����>=�_���w/��/w�ח�:��8L�#�v�����猟�k8�	4�gZ����n��p8�$�3(3ۓB q���B��X�
    ����]�a���%¢�E`�D�Ƃ�1�I�dTb>��1Ή��#$D��+NUK"X�x�ܪ�8�3
    �֊]��۠VojA_M�|t+�rS�Mm_��E�h1ZΙ{�u�FxݏPx�a�u�G����:�,��w�1A�����K�C+?��@I"T�'�^ο����>k�
    �jM�v�"^Y[�*��E늺���ז۳*�ș��n9��w��Uv$'�Q�q�8a�2�h���N���I���8�@Y����]��T.����#X�*5��ҩ�Ʈ�i�M��7�́��M@�����Փ�#���(jouG��G!9��:�_;4y���bV��]˓�[MJf�}���֢�]�.8^�5u�O���*���ei5�H�Es���*u��hɹ��zEr��ǔ�S��a�&A�V��blA�[�u���/%0������S:|'���y�d3�ݙj�{3�`1�1�b(���(��e��0�.�tӶ��q3\(5b���8��:�:u
    ��)��r0�G"���G��ϒ��5���V�.U1r�S��+�pW�G���C"���������IF�<(����k,u�����x�f*��
    8
    W}��y�N�fV���5,>��M����#$�_,����j�
    �1{�e
    �����LX?;V�j��L/L��߯��6!\3���5"��mpi�q���	�����*V�p�xB��W��U��e()���
    z�7x�j���b4~���3S�F;-�2oI���\�j�Q���63��xX�1�b�`�0��M��,lI74,V�$ja��B6��k��L�0&��/�Q��������qo_�d/����oN^o���{<���_]Ս�z�W�����0l�&̭Q=t�;�x��4��M0{b*�C[j�A�`Z�+�%���[m�ه�E�uD�ִ�{�O֖��t#] k֮�&�k�ӎ$�wV�=@i��XG`��K�5��
    ���˩�O�:�a�罈��k��n0������0�$�م�l;�
    ���<b��a"���˩�����~�{x��ڷ�d?��m_A?�z���
    @�v�%��{?�Uf9>����~l����%z��Y��"����ɷ����ω)��[랁�Sh�/�X˱"KG�������.�k��D6�h׹"<��Țf��*oI�j�&�ct��AGMY[�h���Uyb�5(�d�$W�1�?I�FH�-�)ul<�P�x8+�O^Rs���
    ��C���[7��+̋�n�#s��<���B8�lʜ=��6��*%6��G1�#jvGp�� �k������~ږT;���eS�n$����zz�7܁l��^R7�e u�H�s�z:���z��&�Y�̯
    \=8 �R��r���V��$�I�&�q��@A<�"���p��	!��ڞN
    �vx{e�&߾���r��47 ��D��#ʹ��(��]��dD'q�D:'�����6�9jI83����UY��?2�,"��
    ȗ,��v��El�v�FI2^���y��v�d��P%<�/;h��剋90j@nl�T�2�����ڣg��msɽ��z ���oa�g�`�I%h�2`�&�fv��3�����۷��On�Ez���˾Ư�<aB/s%�ÙH����"�:%�˞�$�E�|(�o�Ĺ�I��$"s�q�9�@C��3J�s_�<!���#��2�H���(��`�V��4֤4����ׂz[`���\�Xwm�-0/9�p6��&���F��,^dH�!̃D.#JUhѪ����צ�X\��?X�B��;@zx�d�o��˙��z�p��,�z~h�,��������O,�=��I`b�=V�wg:�A�����is\5>�-K�-s��c�e��h��F7���Tm��Z�c�F���y�&��̾#Q���;X���ޞ�@��O�i�>�bz2}��E��"��.?�~U��Y�"������c<ӝ��O��B�6�&7`k�D�R�,�#ۊ��!Z��;�6I�D�XcF5䦵�����w��ۧ�ow������B*p��:�����g������>ַ&rn��[���6�`�]Z�&57���"��
    ����esI�,��#���3o��PĈ����^��G�=���8m"
    ����������Qz��
    з{Ԇ~&���&�b	Q�
    G�!b^�uXT�:���]�x�j0�C�/���;�=��B䋨�����?��T}�o��&U�uA���Gs��a���S��=n���c?<��-_����(�i]-�W���Φ1��������EI6I��~$Wo��*��I�o[4^I	r�&.�7֗�bߤ�fmD��U�(rB'��|�(Y�Ӫ��U$o9���x���0'Z�	���X�]��`����!oϛ/����,;1�g�ۆ6b&$���=U�c�b�z{���}���K-��������/�8��y��7��	(�j�t!+CZФ2�EA�t�;�pY��!|�+�W�f`4<"�䎮���!y����ۄ��*��a��������ZIL�(��r^I�;M�i���U�c��2��1VҠ�B�������qP�jr�`�;ЇA w�u�m�ulD߫A���6�O���׏f������L6��|3�l����[���&-��9�q!c
    s��֞bi�!4L8ڥCrxHpb��	�x�[̊�1�
    q���8Ѹ�?f���Q�*�8�16aз֍�Bw��
    ��q•�k���%뢇�m��2zO��BG1��P���Ld�?`t"%$d'R�66��z����H��Mo�l•;��h��>���V�����V=A�Ӣ�⇪b�k]���|���#r�k49F�;�9��gToO��8�3�(sK����t��
    ��J�a�6Yy�rK3�`���:4D�U����ǟ�O_��[��0��[ݛL��LC���c����ceI�:�7�>s@�d�;���H(Tp�/��u�۽{�4-��|�U#pr�V	5ZP��&^|��g��n�v��|
    ��燗\0~�ki&L{#	蝹����"f�1B1�1<9�aR��;ރ����G��0�g-���7�qtF~���ܯU���Q^�ƴ-S|��yvS靖�CCQ۔��+���M����8�ޚ��uR��P�J��#�G���7ޠ{ҽEF�
    r^�����f4���.@��1Xp{6�.r�Sq��8�g�>k�X��uS��A���3���q! �L		[��]�D�"t�Xq'.��}Aw*T��s�k�"@
    ��*C���?�Tw-�A�-A���T}pxe�Q�r��7�C��>��A\Z3<wt��q�ߛZb�\s����j�'U��k��)�k����\!��l"�����j�!�p������Y�mV$�"��"���|�V)�h��L��C�f@6�M�(>�����}��Jd��=A�4՘�ӯ@�5������>\���J�v;�鲄�d�����G�yZ�I�`�8�~�In4�r����`"|�ϸ��ݑ@�I�ȝ� ���>Q&
    ���v(~�t Fau�2�t�!,6byN$��v"�%
    ��^�RW�6�A��8�n�銸~��ދ��=�||���������w��C��G
    6�^�ȱ��/O�`��q�)�����$�13�
    -�W�0I"�u+"�5/^��f����pzpy��A�[j�L��WCn��j�S���	YV�����O_���Yu ��n�iڲ88�Wo��t%VN�z��:&R��
    �A����ߖ��p\�Ir�nќG��)��a%,Hs�:5�c���]�65:�$9���[@zuw��9D,�ۗ��/�?��ϯs��3���k��i�j굋��;I��;��CR�Q������� N\B]�E�;��[��ap&���X�ޅ�w���ITt
    ˑbW!�wK��U�!z7���~���Pg��c���|�؃g��o�K^ru�v�!�f����R�W��m�;H���5�1�J=dtUwu'��U�n��KsK?�W���yۓ��Գ�}x�0ܛ�5�Z�6!Y��[T�` 4���;����r��5?"�W^��L]D�^d��\ �U��� �ۘkтK����7�Pt�[�gZ�aB����\O4�SB���%���g��$��l�N+��a�7�����]������e���˷�~<>�^����g�B^�\�a�3X�0<K;��ኖS�	dmV��5��G�
    1Z�gx�ֱ_������|�V��q�$�I����Gs�D힋H�E�������ӆ���5S���V��<p�F�W�ĊM2t��;J�a����]��޼�$�$�[�L�r�v\��<�;`�f������w���2���(��ߪ0G;D��}%
    b��!8����N�$v�@"G��*+�"��*�@���f�Ւ��e�[����y����w�0�;�hC�Y̨�DŽ,6�_�LݪĄ��\x�+{�X��݉�[)MS sNZn
    F���
    �BTh��r�p\��H$,;�.�����Z������#�j�|�W;ìT�x�pxI6�1������5�.����wp�<(SIꑎUE9]�h;��-Ɉ�E�5�U8��I�&X�ߢ�|KQ�>���C�s)�a�3?��������C5��ȀHA�(��<��9D=E�b��V��qeP
    UM� y������O��oT���a8��F_	x,�3$��2�we��	����]�I(I���<�M�(��U+�g`=�;+�$�m����z�?ݿ������"�@Wk���-��x%�
    ����=P�Z)�R�HY\�!�#@{�T�@��r��A���E��S07{
    �D^ѹ�:�}v`�������7��Q>ݒ;�A����W��e��.nT|)H΍��?��������7�!���F0�;�u�XI�'ت�`|�D凨�����:<��RJ���	In������F��I�]9׊C��o>5{+\+�B�Ѩ�j�}K��d�wp�0&t��{Ir��TJ���"ʌ�:T� �"�����KՔ���j<�:���^�C/��i�䪻���3�R�e
    r'��m�~#撛/'����k��+jz���|�2>�|t�˒��p���Xf�y�z�%�:X�۸*��|7`��͒�R/k.��!�/�#vb�h�R��+�$WJ&��%�e Vs㭁4+š�C��f�R��\L	�b�����Ȃ�|�4�((X0G�@v��H���O��m8M����~���t�\�_(c�؄2�pm�7:ʫy����Cc;� �ޤ�M٭�)��L���l�e�Xq)���P�@���T����*��F!�;�<'C̽���=>c{��v�)rrބ۵+�aG�[����4$�[�fm��G�%�y���ˌ�+��/*;���R�{�
    }�,�����ty����-
    ��nB8u�7��M������ʿ���Ǘ?e�f��������P
    �8��m����������y�b�φ�Ay�ߊ��CRH>������rE�>�>j�Bg��R俺�GFS�>眩T�(��"H�u�R�}���[:���HP�e��$��1�����5����f8b��ڼ��S�+��쯆��������/r��������ǿ�h�N~i�j1~ČN����i�R�)0�)jy�1�������}���L�,d�"���{�TH���6��p����**E�Ѿ0I:E���D�%M�d<��xh�ʻ��l�20`0Y�4��v�U�}y_%���y-;z?�j�(*΁�&b��o��=���Ǎ��V��XY����w=�W�C���t���&v+A~� ?r�J� Ur_x(����L6 :ɠ���`'���J��f�4��V�r� ��R�f�Y��z��u���n�?94 Yt�<R�;�
    x��	�q�D�<�M\�����|��{y�s�.�p�#"SgLL���=�:�ۮp�BTK�(N�v��Ln�q���P��|����Ӿ��-E���
    �(�CQQtWuL�A����r��:T����^k���|z�,���N$���ëdCo��SU������UʎH"I������������y�5g���<V�t�!_YA9����|������L2�Ɣܴ�dMk�^4��u�u-��%к{���V�sgrX��G�#Um�#�A59"i��C
    �x‘�̳�GN|�F
    �c��z�Vjo!=�y�A�
    ru�F.�_�$��"�y�Y��<��"�2R�c���l�x_��	�%��M,����2w]z:��Z��N %M�'��{��L����'(���L-��`G�"��O0|+Ǔl'/�������	95Dr�T/�
    �cT��C!�R�<�LPSsp��	�sD!O��Jǃh��w߾>�e�%�D}�s�	�ۉ�=����x���2ܭ�۝�0����������~�=wi���P�#[�ِOtpo�k��IfuVp�N���-��������I��USQ݊��)9.qq���&�z�0ny�ʞ*��0-�z<q����&���Mk+j�Dh��af/�����BQdz��Le��y�A���
    US��q��`L��bu�!��2��2���5�m��ݗ����.�h�Q�������Pd����B��O4M��c<�t�X����Qy��`�����_?_ґ�??�>~�|�������C��T*#�>�]���
    �lˡ�S��KZ��e���ͥJK��V�I�0��S���Nx�&*�3�g�b�8O�f&$�aJ����S=�
    ��.􍻂͆p3z�5�h��4��H���{�@�`�r���AJ�U@b�Nf���%��]��ꋈ�p)"�~�q-�)��/��.�A
    g�u�a��Ʃl&G	�a� �2��!w~�4e�0=�zP�,�g���W�c2�)(�냘�4���3�wsDm��h����ӥR�x5Q
    �כ,@�EL&w8$�bF⣈�}g�TҘ#i�J@(9y0���l��31�|�z�x޳�ՕR�<�/Sd`�q:u=���j�t��
    (�kcR�E<�i��O#�)߻99	G�8?cE$����՜��L�/�w볱�������5��h�;3�/����
    �4����]��!Ei�#�Ϋ{M*�H�ڋ'�J������D�\#�za���-7[~'>ȪΨ\ku����d��H�
    �s��NɊ�۾ �Gʹ����%l8Af��b���;n�yi�qF}�9V�y��ԊR�J�Sxa�t���{�12ufd�1���.��?LϬh�rx6�k��j�~SA��Y(ex�PM��p��M5V����Y�cc>��|5q��&�N@4 �彻��$��Yu
    ���4����b����˟;�Y���A%\�ȅ1i"�;D=�*NїM(攖�@��t�>odY"jFE�Bl4�A4갚��J=_U�\n]���#��b*�����e%�|c6zX�(G�}9��6,=4�)�A&Ji*.ez�����U��u��J^`��K�����>{�0�S��q�K�S��]��)~5���IoIs$�lU�fP�7���s>��/��f�p�σ�|y�%�#�=�d�E�`��Y�{�AQlvnP�R�$(��C��sϩ@�=�A6Gk�9�����փ�T%�����⻬�$C	�Ծ�#��4��bA�5V_?)�W�2\��u�f�v�ʵ!M%��b�%8 �YD�Pf
    n����H�i~8��
    �/�l�!�98NI�
    ��&���vk�q�B���8X�+��
    wa�N�������9��M@VlO�aTa�d�b=G
    uX#�(��1�
    �g���c(Y�!�s.�g�kې��4�Jqk��ǵ��y�����A�(�Yj�#�'���1�HD��"�F���q��$]fg��n�m�9�T[��`�K(8�"o�s*���?�2���d0�\�	3�*`�/8_o���(�m��\IJ;^�sF�<��a4_�e�a�i4�\kȡlj��0X.��|��#Y��ɽ�PO'��RQz+�E�^��-˫��M�Y]�yH��fb��T���<Y2J��"�&�*¢�#9�H�������5�j.��
    ��xL|��?aϗ$�C+���Ƈ��^�p[���$�*?e�2'����|�Χ������[�ı�P
    �	�H�*3�1����H�oW��Z-���c�8r��XC<�yu
    0)p���Oى'�yd��Ih|4%%$w����JL-��?Ʈ��q[Y�/�s���]P$%�ͩ	H���Ql'�n���y/��p��p����y(���9?�ء~���?�4d�6���?�O>b��=L�n7F7���RӦ@�[����P��g��l,;cdRO'�m͗�)^�G64pg2)V&[b���t�$��_�����q��cyWV�-��T�V�]�n5؁��_�P�%W�洍�����R�I�
    ��D��C��f���|�u�V����q#�t��9Sm�)[�"�������]��\�nΪ
    *�GS	]��~�G�����m������M�ǿo�����lu?u��0�������w�~����G)�m0��T�`_�<�JéS�x����O��eO�9�s1tD�~9f$,@`{�������w3�	RD���;A�8pƽ^ߞ����GՑ���C~�ItlQ)a{��������Q���O�2�Ku�H:=͘A��©�h�/���]z���$$ݼuaL�=���@�ˎB�v��!�+�9�z;96�92`�]�KwN+	x�Bn� �#���MA��u9�OYҼg>
    �׀a�A�z[(&@ݰ�S�)�3E���b����^J�D�V�茘M�(�0�m]=���X⨶m����Ņr2�PŸl�pA�(��*�W��u���2��Z%�^`�D��a]eS��Q���(M9�ٸލi�`R�\�N�����]���@�*�kUR$m2�RK���S���ś����}TO��@(���+�ωifRR�D��aJMi�1�����QΓ9�R��\��i ��$EX�b5�ܔ���+���^&��"��!B%"�0���fXÖg{^�* ]����?�5%k�1&�;��=�h��돪L/Y\�����aL����Ր�����Yb7����V7�w5��VĘ���/�Q�F؞��k�c�㗌��w��$3���kp3�p,V�vL(��Mp���>.^b��f�d��m�+�dʈ�Y�J�����×�-��?��#1�$+�63Wcq �T������0ͤ	�Q�����8E���4��?+
    �$��w]��Z�B)�|bòtN(��^�=�mdU��h��uVL�,�\g�� ��|����Z&�vdϊ���l�C�����xM|�
    ��754š���ڛ��u3�K��e�F^	���l����ܺ���؞�K�`�0�}t'����Y�j'��˷��4���o�r��Uv�F[�M
    �m*H
    n�8Rl闭���6l����>�PF+���ҥ2�qk4�l
    :M��c����[��s�}���]�m{\�����EDV%T���C(@:ĹX���F�=@V��`?2���L�"�`��@D���<��ܣ�#[o��4�����
    ��Ф99��v�MLH�[�TH~�u{�x�\|�o�M��5��5�>�	��yw���aK�����<ۉM��&B�"��{7�x�2q�3�<�&6��;p�W�CT�J����������c���/tb^u��t�i��$97*#SdP�]H���(�=+�c�e��7�+�2k�l
    ��j��jJ���:E@T�v�#n��(�۰��r�G9�3��W¤>�w��υ̦�\5��Nt>^����9���;�Jyt0A��q���4f�F���K�;�-�M�djt;H��SA�\����m��
    k��HG̼e8*miZ&i����'�|��G��Ha���e�rQI^��X:k,�lX�/��"[rH��o������_s+H
    f��;1�ܹM���tQ;�)��A����^AFt��I�����x���sI-?�0.�NN�l
    ��H�j˽���C����?Oj�e��o}m��S[�D#��Ԟ���щ���)
    �W�r�q�!�����*�)Q$�#
    �T��E0�*�ZQ�=ŗq��0�((��Ș�S&j~	���6�$��!��"[��I�㳍2
    �\�n}�b�`���,:�|�ј�ԅz��+m�����3uq��Ċ���=���뙬�Wr0�BDtvˠҽ+,�-�x5�����������s�;��7�`Q�-a)?���{@G[o�za%#�Yd�RgeL��͌�'��Kct��ڊ�C��]B�}(��J�D�
    ) �/��	�T"���\�.�]���ȋ$�|��)Py�hr!FAB�VڠҒ�8��d��N�#�ӝx뷨{���f����������Qb�)�o��_��y���������o�W�c����
    �c
    �!ȓ�d�������P�P�!����"=9H���l�Vح6
    mNn�����Am4��D�ܹ�<Z�4��������{c��&������IV�]�9��9�k�V;��9�v�.A|��F��'�~hV���0y��Ͽ�L�l�'�"�C��`O领!�ss�fL��E/�FL��N�"ܿ�jJ�0��Ȅ;�agXg7��4�H��"����\ET+GL�=�B�
    �I�.u e�����H��߶�ԺBiv���=6�0�H��3��Q�l`�}�&f�A��5�,��?ܗ_��r����q�[���������׮{,:����x����>�FN?ne�f�'�d�?ղ�{���_?��"ˍ+|����qyi7��$C�м#9��
    ���Km��,���U����C��?;5Ovo�N�L)�X�W�PB��nNmB�OO/`)��z�ڏ���3h�"G/o3��WL��;���{�3��]J�j�9s�LJX���J}8MI*�[�e�憍;����-W�og�r\qE�׼x"=�4��#�0.�ʀΟ��#�3D�?'Us�"Q��V�c�f)v-2�Q�c�o��ߙ"�#S,��ˀM��5��ĸN���$稞W��r�?��&����Y_�LWǃOm�yX4�R$�t�h�*0���?���Tի�r��5.嶜���pZ��|K�N���P��Z�im�B�u;�
    f��w�e�df����^跪�m-��]�-�Y�,��^����4D�Q�9�dnqy�Į��އUՐ56�l�,e��놡��{F*��-z�X�]��v\b�K��L���l�	ٿ��Kw
    ��&�v��r+�J]�#(!�ထA���)�>2��&_{Dwf6-(y����b���4�`�2��
    ��(F��7c���
    �9���̘p
    Ɯ�0El|��X�g��l�B�u�K��p�˯xG���z%�eQ��0B5�t��L��f��$�������P���0�G�A`�&��[]Y"E�	��qFj�!�þ�����u8���L�t�<��bX=ll�5c��m�q���	���	�
    i�b�nTvk=@�m-�6u"s�@۫��^r;ۍ��KC���&��d���O�3q�Se�{.�_i4��<��#�J��.#�Y"�婾���PuΗ��R*���^���D��E�9��EBڝ��E�-�p�؂.c��E|'��Hh�`����+0[3�5�g�l>w�jЌ٬��f��1���C=�8�M�E�Z�H�o���
    �d��Y촘}`���7bBg0�<7�s�=;$�	�X&S�"Bm*׉a��x!;�mv�ۮ��38�9c.ExLz��x��l�kl���L#��t����3a�6`1�m��q3fE~�Z���?����=3�ޚ1~h�l��ݭc�@c��1���v��GtK���m�]�b�D]�ȥ�0L�`��3 4BS&CS&CS&�@3慬%O�
    ��ؚr�4Pwc�(�Dd���b��k��qtP�X�~d�kP"?�1e�Y_X����0l��1[kc(�>��T�Ox����zZ�����!C�!bBc#2h8Ej�~��Elo,ׄql3�?c�gC�o�b�0�l��]�z~�*���PgEt�o�Y����Dl;a�.ĶlST$�Ќ	�k�Ф��cm���C�@?F�m+_u
    ��f�,մ�%��� C?��*�ͺ�E~�����nu�����C71���v
    �Y�q��ɃУd�/&����TF�����ESVp0��̂��2��d�/|?NI=zy��cN/��������H�GY�V�{1��^=R����d(ϫ��%�iY�y�b�'�tl�
    �}�|�����8i��,,z��F�Ԥ6�*ZU,�h�>�s�q��������K�o��94��.[��#�&�a�p�8���W�僯�����?��P�H��t�	���"��ZLg4�%g������2C�L)��^�m
    ����
    o�Ս����
    Fw�
    Qy� �"��:��߯?���6��O��8�cmX�3s����9è#��0�W�d;n�#���^ܐ�ח��������_�o�Kr�$�dU-��}�_�߿����������MT�q��G&W���������J.�W
    �t��������Nt.ظ(��0�K%R�������F\K�}��'�AaqD}���IR]������1�}D�0�4n��Yr��1�.dD��1��0���B�GI[;.���4�TG�xm$��r��A�9����24�O+FN���c�
    \��x�l'����1��f>Ӟy��/�h|Iё�o'��kĵx^31�0d�
    `7�+3�m(ڗ�|`A�`L]s�X�@�uZ�A���f����C�:@�}��u��p��[+��O/��߆�������;��P7t���W��秬N���4)=��:�{l���Zx�F�v�UX��rJp�v�,M�����BMw���PSzԷq9Ic}�I�	�ր)<_��}�F�����v�gEB�Zu��e�]�$L�c��XRj�<�ݭfā�K"�qm��x`����`�9n�j��b�"lC0�9/#�3�B��fә�(CCE�dq:��N'���z�Ebs:rFC���r-�wfOw���ι������i�1�]/�jڤЬe4�}��i"��00����ޖ��&{��H�@=F�>�"�h�\&vm�R�A��@Π�e����*��~�;p.I���HlDZ�*��!UG��=9b�gF8���D1
    C�|�J<Y�'���W@L'v�k�
    �}Tz�癲��#$#�ֵ<3�w;2�`i�5 �
    ķ�2�A.�
    tU�D%T�o�kP�����P��ŴL�������d����D�?>���v.�i�F�۩�`�g��c�@@�j��/�j��eS�ms��SZ���m��$�`&���iPq�3��%Y�
    �g�x������z����p� ���8YƏ'g� gSZ^1���C��E��	e3�*p��B3�$͚�bH.iU��'��,I�k�y�i�;��
    $Du�O�J�F�Ic�/0b�+�&G�A����^���~���`�?ڲ��Ό�`gU�[�Q��j��Jz*�Ն�
    ��7�ݻ?�p��B����K�Ͽ?^�-I߸�5^aq2u&������m���{��FO�����(�����/���j�p� ��"ۀIhL�-�JiUf��i����%�˔/&T|��81��X�15��2�#��S�f�ɦ��sh�j�:y�ɠ�q7k0SLL�u��+	��~=A٦NEҍeĔ[�+'\3�'aM��րL=��,k�^��V��U�p
    �_�/�3W�׭9�� �܄�β7f�m��L���X�_W���ird���2b���{�
    u
    =�4O��:��<��0`ڬ��K��fЇ�լh�9��*��Ezh\���5�9���Bٸ������\e�冉~��]_������ϗ�������K̢c���Z�'���Z$S�����΢}z��Lu��9B���1l�&���KTlܠ���D�&�K��Iv��cS�cV:Mn�.D}���]R˗�b���tS�o��'��Z�s4�GD���������ߑ����7��/���~yq����������)���q��W��^"E�[�^F�B�5_X��3q�������/$%�dު�l��h\
    ���w���x`
    ��$�̱$�	#��/�'�����ې��r����>��?�����l��|z�N���vc��ᷗ���s��H�=�
    ��l7�BsC��Xk@$Q̋LG�I�*����gd.��~�Gvr���qC�J���r�L��@4�3_�lY^��	R�.�i7�Ɏ�H��X�<#ğy될����u����	�^�e�'����G���@�Ԑ�NOG��辎~d����?Aq����vn�DS��7��v���S�ٛvY�$x�)x������g'�v?�0��	�׎�֝�M��S��2�:j��V�Ĩu�`����]�3��>A�a�[ˈ0��nL�ݙr�;7��V8r�h=�`������a�Z^���'��vˁ\���J��v����H�-�%hL��VV��}G7'r��-��(�2zCp,�
    q�l#b�:�^�X|V֭�r�*ru,-ʲ�l*��2c���}BLW�$Ѿ�C���:DNIUi���n�.v������I\پ���L`<�-۷�_
    8Y�^�	��_Ϡ�}�rK���ںJ�`�)c�__֗�(L�������sK�<y���
    �Wp�����ef�j���sf��C��^n�	������/ݗ~m�e�Qt��EkM7�vl�yka<w�\0;��+0�:MPa6�M��,��Es�0Ey����OQ[��UA�>T��֌��6��� ��+[������^ޟ�S���G��f'��q/���������^4������/�^_���X��_�?�?��~��_�"n��ҥ�3�����WPo_�ٝ���O^j�x!��U�>پj#B���b�>q=
    �R�]N�k+�j�1g�O�ez��R�rv3aQ�K
    rV����x��?r>���}�wR���B��J�LpE7[�&�K콨6ݘGRt��8=B�f��f�����|�s��8m��k��D"��%�<#�TQ6��4w	�;�'o5y4���dՅ$:J����{�V�4FN�;��~5����R�l��QͣY��1�x^۞�m\W47��n?��E�& ��R�.J��·���T�g�}\Q-C�3���;���X�v'�=b�9�PD�Hg��EB��h� �N@�h]7��,�<�:'1AX�zzS��y��>9�Y���d%�����u�r5]&�dj�x�O��=\�`�Ib�6`�j��SRDk�8����J���j�7M_�#����j[�ӢK�cWI��'k	�a�:���Lh��g����0�E7���/�?^i�cʪ��B+veE\�@f�i5�~���v�e{��8@�l�S��a��xit����b~���F�	����x��v�q��D��4�U�H�a�/��L��\�M=P�ᒨ�|�?�A��4���r�ϖ�R����Y�������D��Wp�o9�I�?|�qs���| X�Y`m�C��I8�?�@_-P�KN��n-m�xz�y�,ʟ[|C���4���l5r�v�#L����q��q�u&.}G�J��6���5ž�❵�w�q�o���u˒�I@�5M���ٶ��f�e#Y�5��ɼ�TP��|�]��JvBj�x�n|K�+�gW��w�y�_
    1�8�?����?!��.2U�CǓ�<'�4G�<�<gi��&Ҋ��T�+c��S�²_��h�~�(�?�YV�UI)QY]DMɂ@s!������J���	]xY�.(p���K�j�@�JN�I����ǔ�K5�$��&D�@��D\�g6ON�o��qm^x(��sZ�����lE`^K��u�;)��I�`ъ���`"��4g%�쨳8N
    ��X�b��	����(v#{����GM��`�Ԟ�6�E)����^��nO�i� �?��bGqA;�e\�6J�b)D[������G|���F�8#A�G9��=�9�I�w��o<|�9�`J�`*��\
    v�C<�K�C��,k��h�VCG�2ߪ!����(UJ�m�u��
    �	Yf��<�s��^%9NN4RTu��mR�r6G.�%&gN��SDwOB�����' ����\ڎt��:�Kg����~�l\���r}�Ĥ|'����b5�����t�\�
    ��,��j�{h��j�V��_K�=�͂T�s�9�����ݝ�$F��HW�c>CmM(x�r��jgU��X��Ak�ؗ��]���q�k�U�R�ط-}�͊�۞0NV�+�`5�An�7����%��߯�B���^�X�����x�iM�$l�T��?B�O�8��I}�c�/n��y�\U?l
    �32�+�������c��IU�/�$���4�v^���9I��ؾ���qRM%ERMιz��߈YvoU�����b.��"ڎ"��媽�H��|v�Qަ�\�H �6�p�f�O�3M����b�I֣.�.��t,�Ĕ�kx����eU�{�IW�QLYenQ����BrN��$ol�h�1��,�`e2LZ4[���A��1^�^�!v��{�S+�Q5���z?�輾$�ĐU�9�me �sW��� �--�ѓ]
    �젴��2P#b���/�9Ef�8k/b�ƿf�N3�1�0I�m��:#��#S������>��>��!{����,�8-���� ��)��N�&@��1�֘�H
    f�[�@��M�cA��^�JK��O��פ������cY�m�ƧkVfx�g���7	���X� ����͹=�{M+.D;��'����|=�s4����%����Y��K�O�S��k�K���j<���e�����,��N���8p��|�7�%����Vߪ�ҰP�j�dH>Q)��BCl�DDD(��E�)�-�@S�DF�_Q���YTel��^	j?�ND-�ZVF*kA�j���{��LڃOA�!_��-�޿lV-$�[t�:+C�h0�������=?�y���jnf6��۷��	���V��|����fRp�:����jư`��A?E%��@�KL���zX�,�dL��W��
    R�j�^�����/߿����+1��SK���c��)-O�=���y{A5�_-n�r��j��
    �v��Ob��[��!AǍmmL�3Bf&�+5�⹁��=�<��y�D��2���c6N�٨�(���|3f�1X�	D#�� k�����'��
    >���z�M�^�b�y���0��<�
    X,��1۝CL �v�cl��3q����F�vk̉�y��v_	�u:�sу��5c��[��n��5�ۈ��1�`F�S�g`x~'L��9�a��܅�*fk��S���i21Uŏ����N!�ԩ ]�m5e��j9�%��M��=�g[F�a9H`�s�=�Vik���!s.�V�w�����̌�o���8Q�~�{E��n=���
    V�WE �!A��O��"Y�\������@��c�HT���������]W`M��>��<���Y����
    �㫬ي�_�
    O"�
    B����VU�詴��
    wQr�dGZhȼ�:$(.�CR#Ѹ{2i�e-�x����1�0<�����$������}YԔ�N�r�xc@\�����.��R�IR�O���5^��0?0�[�.�vQ-^6�{���j��ĔY�~&�xTV�R�d@!
    J�gZH�iZ��X4dC^ғ�<�
    ��Nw�듗�f���1�)�%8A����8��b�k�G�e�A) �NVjFh����8�.��Ub��"M	G���f
    �9����("x��cà��u����B5��$��m.�ۧs0%�S|��IR�<���sR��ʋ�N5�ALv�$x򃘏��\7��D��֬)�5�Li^r|��T�S��{R����~���YP�0jݡ	�b��4�
    �B��(�P��d�
    �C���ѥu�r�W"ځV��z\�k�B�L�\Ϭp�Ex�a�!�ʴuXb����H΃^��8\�������e|^��܀q���߉��|kBF��Pa&�|�w��l��v��?zhg��ς�����
    �@�]__A�})����mkY�7Z��S�7�E�W����ldj
    z�K�+T�a<0!j�}���X��:N!Mj��[�8�u���P@�U��F��;ZL*F�(M�����r��孥s��&4w����Fu@|��me�fNm�`�/b��	���YquX�n������{�\F�|^��B69�b��W��Ȋb?��C�:��A����΃�1���Ͽ���X��o��Ƈ�������ߟ�����_d���tx~�!���/��^��
    �y�
    �]�)
    N�:O���')	��TH�<�Q;��#L�N��⸶v�y��[�W�P��%ibb��E���S��|���ݠ���I!�����!lu��o��|�k�]�\��(��<�hF�0
    N��\�:Zx�c��KG�$�'\�y�9��O�z}�[̶o�ן���/��e��4�1Pu�-i$w�v%=f�XEсf�h�˕M��o�'%0��B��Ev���┈��q��vQUэ
    uK�ϑ;�7���-Z~K��߽P2�ܜ�p����*�)�
    ��`���Q�uo��&�ˍ�F�H��fB�B�ַ�^�rޮAs�`��x�oOM(B�b+q��b�	��0������M )F�:�!V��ԣ$�uI��WB�j��a9�2ɫՀBH�A�X�P��O����Z��F�1�D�Ǐ0i�u���i`;w�㠕�]�F����1A�F�"EW�vaj�e�ȇcR1�"#o�w�X&MΌ��m����Iw
    k������r3Ӫ��ܫMP%�~�g��4�I�Yl&p�`\��
    Z�#ib^e��&gZ�Շ1#���efB�眴�k��{i�GY�W�ST^�"��,2��µW��;Sv�����-��̍�n=�4�������}I�S/CP|%qõ�����V�R3"K�%G_.$Bs�����4��e��O�`�1��!/D`M2��#_;�8)?N{|o��
    !���
    k�d�7�<�Z���K|�X��{������M
    ���y_�C*�]r��G��~q=�Z.#8��S]â)��U�6�����_�<����u��:L������F	��LP}�,U�z��l�ty8�s�)l�R�w-[M�{�e�����һ?ͅ�>�p3�댄}��Y(h&�n��>�&��<��F�Ґ��S�o/?�>����_ ���f=�7�X��֒ǫD<(HK�->��6{ ���W(�8ais'y�y������q����1Sqa9�;7��eL� -̈́�ތ��"�d�(�^u��5���������Jj{���hڕa��ӊe��J}��ɉ��օ�b�9�ڏW�3Z�@7$ri�h��b!ܧ���,i���/0���J��O �;�|�۹��0RD�l��Wj�E����%5�U�rL.��/|�ঈ@���e�~!��j�ԅۄ�!���ꨔǷ}A��{sڗq�!3i3���<Ujx�&�5p$)��z�b��8�/n���S�%f�Ȭ�>��<[!�u�"Jsׂd�������=}����i�:�6�Ji�?O-�mI
    �C����
    f&_�'ݢ����$�oz�$!��K2�J�r���]�.�O�K��ׄM5T"���E��ӵ�b�'�1E����8MsxF�X�[DE�'�5�#��Y�D|^c�H����޹;�h�rU-��_ƞ�Im\�B�)[u�3��6�����0y�qf���`�l�_�uK6X�Z���$�ۺ�Z�V_rR�Bp�.l
    �Yx#����(]xS��B@DV� ���j���l���_e�zx�k�f.Z��N�E�7���OrC�4�����Tz�m6���18�!F����P�flYƠn��#CS9#+8��6f"��adj��aڗ�HU��x�5}�f��uC�Lk����f�]�ꕈ�^�����WC����������@d�K��^�Ry?`8w��x�����6��;��>�
    -ܵS�i��$b|p�Υ�A��f�	�.>�Ѕ���e\PQ��qN@��U^�ڌ}�v��x)ν��m����k�r�X��ï�S�3N�e{z*.�g�k�R�
    �N��5Z��7�+?Ѓ?C`ǡ�>�¾��4B���N����Z�vX����9��6�X:ؒ��� hԗd6^�䂊�׊6�1���*8٧�e��TG`-͕���n	�3J�Ho_���=~���:!�r�:�(�����M�<Y�r�y��Z�CKL�⼫�cө��%bLސ�ce�
    �I1h`]ЮC�45��������V��x��H?���GB��p�Բ͎�x�?0���2�񑊬;-�Q4�3.��ɏ�A剫ᐮt��8�� �;i8���5�ޛ�R3#<��xT��H�ɠ���D�	�™��� �5qЅ�7,-�����KV�2�����N���y��aҽT���m��N��ٍr׉2�`�w�ׄ
    w 1�ḛ_
    ���M��N�]�����j����c�� J��� <�k(T�:�չģ�����#��j�wî�����)��26� �q�1zD1�Nk�GI���1���p�E��ew�/2
    �6���q����/ 67��i�v�:��*Uz֊�w]TZ�i�>�Utр��R�k)!ơ�b+�>�A~jyV�s�'�0t�T�F��o�i�O��5av�CH�s5��6��3��s˫����z�^}�%��2�Ĵ��l�T��Q�e���EZ@�>��&[o��C9��������6l�0f�a1���
    ���q0�{#�b ,u;"$i���[ZN�fk��$�����32kz�LJ_�i.�v�.�︽M�#�ƯO1a�S�xa�g:� �GR�g�N���ץ���V���zO���������GxOڋ$
    ܫ��jBl�2�2���<q���Ho1��"ᜆ�[�d��~9�~�L
    �;�~��x�f�z�i�ٹ�5~���PC�۝�)³D"G�}�x���&���e��C���x�>2�;9j�P ����8�������פu��>�x�X-���O����#Ml�P(��$���R$�V!�j���LMxz6{�T���w�a
    &i<g�GSn&[,)�6oҘʯ.���a��t Yn�12"K�{�d�|]b�?�֍�m�I�	Z�h��y�H�g4�Z�P�X��S"Lj�Ԇx���&s9*�(�)�DJ��P������S�Պ5�����Gf;���~��L%E3��-YV��lL�K T_���R���;���3�q�ëd��	�)��}~�	L�����'W*���z~R��v�ǟXG�Y
    mN��/�k/����wF5�/�}G�Hy��A�����<�,MX��(�;�n(�67q�� ��K�^5^,Mb�2p�(Cx���U������3�N�'�7̱7��o���p�A��$�xrg2]�i`Y}���2��M�gQ"e�Ba6�ž:i�c���ZHj��
    �������CY���ի��nl���,��R�/b
    ��\�:V(���튗�t|-.���l@(Ϧ�=��­E}	A6njYs�N�	��-��4��C"`�&!�Q���	�\��&�`Sf��d�����ijT��������i�3sZ1��ɀ�)��������h<��@��j2Qv�=����D��P�l=���3	�q`ǦAxV!lH��C��Q���0��x`k�c��-C� J�_@�3��l4�7'G�����0-
    �2	�s��M��fD�g}�k#D���J����`T��iW�+@��i\�VT�B�r�~؊�Am�Oh.d�����1 A�
    �P �O�n�	��c��;��A�h64����x�=d
    ��e����-4�#�{��۫L.X���8����?��sq��8N�5��k�i~9�r��r<}u���i��æ�t3i�=	����\|��g�?�z���z����k��Ά���W����t<�o�Z��9^:�I�D(��SAG�A�u�-�؞���{��D�����f#������\�3U���K����Ks�f�pH��
    �
    ����/TS�,2��`��yC�т�#*ӻ#��i�F/h'�Zl���8\z�0ri�����֣��]a��Q�2O����O�5�~s6�IL�M�����N:���8pB�X[���U#��LB�hD���`1,%���
    _/�A#۷��y;���'M岄�r��fT
    ��5�O�A5M4�SsHh�8��R�y��`�W{�
    -��cCm���C�Wp�`�t(.�FR�؊��p�$�²?��[�T6�3m�O����1�2L���0Kn�{�Z���ȭ��w�l?A:My�[�'y�Uw6�#h!�’����^q�������<gdd*�1
    bʻ'�����@&	K���"��A�Jͬ��j�����Q��Ԝ��������+q����9�nV�fZO,�g���6�<�z�Q{7��D�����D�ʐ�O���bK5[s��6��B|��ej�<¹a�������uk��l���<��n��%�4EVq��.2BuyE�QV��YB9h�67��8})W#7mң�"W�x��?�\�xcqU��Oz�����	��
    �t�3	(�m�qp��n,�ʠ�^������!���{�kJG�`��B�Q�uW�����8���qqBc��aW�^�T�@�K׵Ӊ�N�-����~�P��<�?%v:ID�acY�2�\��i�'�[�ռ�gm�L�n8��O��T�ҭ���X�O��W���P�μ$��`��߾��t\7���p7Q�ƒ]�:3��u����PJ�����̢���h�7蛶�>�Tk+u�<��9���#���P
    �oSG��&�g��ħO2�u��MFL�7��A�YJ.&6%��Lӗ��5�Ό֗��_W�����U_wt8��[��k�ieެƯ�f�'
    �f$���	����y�1bg��m,ϢYZ��N��t���g�
    �؉�ݳ�n�ric:_�(���/o۲v��&�Q��E��T=p���e_ìQ�u3ig)|!���(��r��D11���;܋�K�X��?�ck�ep���Yژg^DG0���}œ�����/�[Y�y���(đ`\/�$*�@?/�ӤVW|7	�<ò�?H|����"k�eR�|�f���Ni]!��%���Km��1��@�c����h���(]����Sɥ?�j��c�m.Vm���"��ff��X��h����kO������Q1Cs���_�\���H��q��9Kѕ%�ɶ�!�x�kg�za�$l0y������n�j�H���hH����]�3}�߇��u�5�]YאGӝr�﮾�n0u�ut��6�0�#N��uMs�^܂:��ދi�}�j�#���1p1a��<�(�"t3�G�
    �Vg�y��WF���-s^^6�"-�K�@ߨ�S���a�Pt�Jg9'T��D³�	�ԨBEZ���v��™���)�Wk����C@3�~��Il7o��Š,��nۍ���%��1�M�0���n�
    ?*9E)���U�ـx#-GF�����n�1�`o A�Ps�8��@|�#'4�
    ��G�>2�Giҍ41?P��#<1?0O���4���	�H�qw5�#�,�Xj{�zC^{2h�
    `t�����cԉq׉1��tf�=�=�e�7���`t�ß�Xa�.�zvJ��9����D >w5��x���ܜ��(�Kđ�0<�E:z�0'�����T�'KO`R�ȳ�Xr��֥xY��K�y���?<U�Xo����=���|-�O�l6"�7����4�]W�]��R���|�S�}ʯ�
    �Ye�Q�d���7����_�����>��D���]��gRh�[�&q��&�����J�[
    �y`�L�����(xq�T���^>��n_,��)�A�f��
    �
    ���A������V|�	1�e���2wB�S�&�y�\�!tU7�*:����F�t��C3���C���"`����&��@�M�8Q�Z40�P1��%��m�=oo�W
    %�5��^Zb����;�g@��IP�OzN����Il>y:�u��	����i���D�o0CD�b?��LI��i��z�>LO{�*�n
    3|p�ӆn���
    4@a�
    �K���|A=۔]Y4\��נ��d�o��,��'�.Hy�d0�D< �,�p�9���N	�`�\�(V>����s�$�\7�3(��#f��ܬ�
    n�A�k��n�tnZ���ucʏ��͡�+i�� n���:ݶM����:����~)�-��e���K�D�I�3s׮��ʛKG���<<$�c�C̈t������8N���M��B8��F�0>>�LG_�tJ����s)��̀���̜l2TBh]
    &����W����!��ua�s
    �?#y
    G��
    �����,��잯/������L���+��j(p�������F%�b"Խ׽Δ��I8T��p9�7I�X�7q̫_�C��a*�y~�G]oU0ix�^���5N%��8�Y/�6��ˎ���/N|��/v��!.?��ޅ�ܵ7u�mrZ�%�����8_��/�ȁ���	$S�bZmw�=4�8̀��pN�+tFբ��.��hx�e���Ƀ�F@a:D�Տ).�񖀘��_�f4<Y�t��)�0l�gz��uZj_�7v?�(�X���rD�}�!M�x��>"Ӭ��L�B+wu^�m���7��g���ۜSQ�%V��^��@��.��9C�Bۇ�����v���'"_�����VC��qCw���gKL�q��������g4���Ve���Cn1��s�]�����*�DDw!³G��M��a�n�H�S�H���d�-I<�ߪ���ŏ�h��4°)�
    䔠��rL鵣,�uT^>\�H��w_����c��a1Hq��b=2e�d���<\7��!#�xD�w(w�8�okT�ل����d�W=��h8�y�{;�jz<�����z�E���\rї��v��eau�/m/^��&����6jR����)��&,F��f��5cQ]������C.�U�5���Í�\�ů,��糁1r�s_]�3��������%��:' t�Y�-�)>%���;�:�H����/����^��=��C�F[���/�=v>w{r��m��m;hO�(��^0���Ǒ���'c��}=MNY���^���S��yF��^Mk��2���Z��q��?y ljJʟ�:�:Ku`8Y�U�b{~�F����]4�lU�w�n���F@�o��ئ�j�t�B6�;���5�
    �img����՚,�����oc
    ����A�g�0kԁa}ͮX�A��Pն�
    [C���`�]�����sm�F�MzL��W������+������0k�M�(���{L��fVˆ�㦊���[w��3G��2?e��P*6���u�͸I��%s�S�es%��h(�����P_�XX����[��5��dڰ�S�m>�l?������Gq�����WN1�a�5t�L�Z���!0�'s�dg���V�߼,sL�
    ���_�Q(}%BJ$�i%w�*e-��Pa�x(�҃[<�&�Ő��ps7�ֺ�+�"����fGn�J_��t6W �]ڐ����\P{h���4�J۷/&L��}LB���Fe���1e2�̌
    .���Ύh��?�.�5\�����e���͉�l7tV_�bOjI�5�l�G����B ���7Xѐ���t.��k
    ���|�;n�ч�+�Id�wL���lI��q�~�������������T����
    �X����/�ZS��߉atݫ5��h�6]���v2+q,���E�nZ)\D*��=�n�i>n�
    .��߳{1��V�?��M����������4n�J��"�:3%�0��k��\^��bX%_v��L�jJ�Z�y���e���f]ݫ��G�����N׾N�[=q1:������o��ow��2���d�S�'0�tU<#�x*.��TX������'�Ӌ�$�NQ��!�T�����eٜ�e�"�xEMӈ��5�k�\��� ���ETa��X�!�J!8�q�h<.��˻���b�}4ǻv�<�B
    ^���Iu	�K�󸌫�뫮��_:���zYÕLҋ^��w�<��8����*yB�KN�{�_m�&0�(~�.��Z<�N
    S��
    root@am437x-evm:/# 

    dmesg log without bus-width.dat

  • Rajat,

    In the usb failure case, the log shows kernel doesn't load usb modules at all. I guess that is due to vpfe failure.

    Please try manually run the following command in the usb failure case to see it makes usb back to work. If not, please provide the console log.

    # modprobe dwc3_omap
    # modprobe phy_omap_usb2

  • am437x-vpfe.debug=3 didn't get reflect in the kernel bootargs. Please first break the uboot, printenv bootargs. To set the bootargs with vpfe debug settings added to it, do - setenv bootargs 'xxxxxxxxxxxxxxxxxxxx  am437x-vpfe.debug=3'. Here xxxx is the bootargs that you got from printenv. Now do saveenv and then boot the system. 

  • Hi Manisha, Bin Liu,

    I tried manually loading the usb drivers but it failed saying the resource is busy. To ensure that both vpfe and usb drivers aren't loaded at boot, I added "blacklist am437x_vpfe" to /etc/modprobe.d/modprobe.conf. This prevented the am437x_vpfe module to be loaded at boot. After this, I booted the kernel with bootargs set to :

    bootargs=console=ttyO0,115200n8 root=ubi0:rootfs rw ubi.mtd=NAND.file-system,4096 rootfstype=ubifs rootwait=1 am437x_vpfe.debug=3

    After booting, the usb works fine. Then I loaded am437x_vpfe manually using  "modprobe am437x_vpfe"

    The console output from this command is the following,

    [   34.918958] ------------[ cut here ]------------
    [   34.923717] WARNING: CPU: 0 PID: 577 at drivers/media/platform/am437x/am437x-vpfe.c:233 mbus_to_pix+0x58/0x100 [am437x_vpfe]()
    [   34.951421] Modules linked in: am437x_vpfe(+) pruss_intc dwc3 udc_core ti_am335x_adc snd_soc_simple_card pm33xx ti_emif_sram pru_rproc prussl
    [   34.985633] CPU: 0 PID: 577 Comm: modprobe Tainted: G        W       4.4.12-g3639bea54a #2
    [   34.993950] Hardware name: Generic AM43 (Flattened Device Tree)
    [   35.005164] Backtrace:
    [   35.007727] [<c00131bc>] (dump_backtrace) from [<c00133ac>] (show_stack+0x18/0x1c)
    [   35.026957]  r6:bf104278 r5:000000e9 r4:00000000 r3:00000000
    [   35.032791] [<c0013394>] (show_stack) from [<c02a4fc0>] (dump_stack+0x24/0x28)
    [   35.045351] [<c02a4f9c>] (dump_stack) from [<c0034814>] (warn_slowpath_common+0x88/0xb4)
    [   35.053531] [<c003478c>] (warn_slowpath_common) from [<c00348e4>] (warn_slowpath_null+0x24/0x2c)
    [   35.070629]  r8:00000008 r7:ed889408 r6:eef59b18 r5:ed889340 r4:bf104b9c
    [   35.077758] [<c00348c0>] (warn_slowpath_null) from [<bf1013b8>] (mbus_to_pix+0x58/0x100 [am437x_vpfe])
    [   35.093533] [<bf101360>] (mbus_to_pix [am437x_vpfe]) from [<bf1015d8>] (__vpfe_get_format+0x178/0x258 [am437x_vpfe])
    [   35.107813]  r8:00000000 r7:00000000 r6:ed889408 r5:ed889010 r4:ed88933c r3:ed889408
    [   35.115986] [<bf101460>] (__vpfe_get_format [am437x_vpfe]) from [<bf103098>] (vpfe_config_image_format+0xcc/0xf0 [am437x_vpfe])
    [   35.131844]  r10:ee908610 r9:ed8896d0 r8:ed8896dc r7:bf104dc0 r6:ed889010 r5:00000000
    [   35.142371]  r4:0000f900
    [   35.151760] [<bf102fcc>] (vpfe_config_image_format [am437x_vpfe]) from [<bf103430>] (vpfe_set_input+0x120/0x1f8 [am437x_vpfe])
    [   35.167027]  r6:00000000 r5:eeeef6d0 r4:ed889010 r3:00000000
    [   35.172828] [<bf103310>] (vpfe_set_input [am437x_vpfe]) from [<bf103568>] (vpfe_async_complete+0x60/0x1ac [am437x_vpfe])
    [   35.187521]  r7:00000001 r6:edafd750 r5:ed889010 r4:ed889278
    [   35.193328] [<bf103508>] (vpfe_async_complete [am437x_vpfe]) from [<c051e004>] (v4l2_async_test_notify+0xe8/0x100)
    [   35.207487]  r10:ee908610 r9:00000240 r8:00000000 r7:00000000 r6:edafd750 r5:ed8892d0
    [   35.215565]  r4:eef1a810
    [   35.218148] [<c051df1c>] (v4l2_async_test_notify) from [<c051e130>] (v4l2_async_notifier_register+0x114/0x160)
    [   35.232945]  r7:c0a61018 r6:c0a60f70 r5:c0a60f70 r4:ed8892d0
    [   35.238901] [<c051e01c>] (v4l2_async_notifier_register) from [<bf102be0>] (vpfe_probe+0x35c/0x478 [am437x_vpfe])
    [   35.252599]  r8:00000000 r7:ed889278 r6:00000001 r5:00000000 r4:ed889010 r3:bf103508
    [   35.260684] [<bf102884>] (vpfe_probe [am437x_vpfe]) from [<c03e32f0>] (platform_drv_probe+0x54/0xb4)
    [   35.273239]  r10:edafd248 r9:00000000 r8:00000031 r7:bf104bb0 r6:bf104bb0 r5:fffffdfb
    [   35.281305]  r4:ee908610
    [   35.283883] [<c03e329c>] (platform_drv_probe) from [<c03e1680>] (driver_probe_device+0x208/0x2c8)
    [   35.296879]  r7:bf104bb0 r6:00000000 r5:ee908610 r4:c0aaaa04
    [   35.302641] [<c03e1478>] (driver_probe_device) from [<c03e17d4>] (__driver_attach+0x94/0x98)
    [   35.316057]  r8:bf107000 r7:00000000 r6:ee908644 r5:bf104bb0 r4:ee908610 r3:00000000
    [   35.323919] [<c03e1740>] (__driver_attach) from [<c03df984>] (bus_for_each_dev+0x68/0x9c)
    [   35.335822]  r6:c03e1740 r5:bf104bb0 r4:00000000 r3:00000000
    [   35.341577] [<c03df91c>] (bus_for_each_dev) from [<c03e10e4>] (driver_attach+0x24/0x28)
    [   35.353152]  r6:c0a4f888 r5:edc2da80 r4:bf104bb0
    [   35.358033] [<c03e10c0>] (driver_attach) from [<c03e0d20>] (bus_add_driver+0x1a8/0x220)
    [   35.369480] [<c03e0b78>] (bus_add_driver) from [<c03e20c0>] (driver_register+0x80/0x100)
    [   35.379636]  r7:edafd240 r6:edafd3c0 r5:c0a29760 r4:bf104bb0
    [   35.385531] [<c03e2040>] (driver_register) from [<c03e3218>] (__platform_driver_register+0x48/0x50)
    [   35.394618]  r5:c0a29760 r4:c0a29760
    [   35.401742] [<c03e31d0>] (__platform_driver_register) from [<bf10701c>] (vpfe_driver_init+0x1c/0x24 [am437x_vpfe])
    [   35.416181] [<bf107000>] (vpfe_driver_init [am437x_vpfe]) from [<c00096fc>] (do_one_initcall+0x98/0x1e0)
    [   35.425869] [<c0009664>] (do_one_initcall) from [<c00ad454>] (do_init_module+0x68/0x1c8)
    [   35.434000]  r10:edafd248 r9:edafd264 r8:00000001 r7:edafd240 r6:edafd300 r5:00000001
    [   35.445687]  r4:bf104c00
    [   35.448273] [<c00ad3ec>] (do_init_module) from [<c008fd60>] (load_module+0x1820/0x1e3c)
    [   35.461098]  r6:bf104c00 r5:00000001 r4:eef59f44
    [   35.465958] [<c008e540>] (load_module) from [<c0090540>] (SyS_finit_module+0x6c/0x7c)
    [   35.473826]  r10:00000000 r9:eef58000 r8:c000f9c4 r7:0000017b r6:0002923c r5:00000003
    [   35.485288]  r4:00000000
    [   35.487877] [<c00904d4>] (SyS_finit_module) from [<c000f800>] (ret_fast_syscall+0x0/0x3c)
    [   35.500854]  r6:00000000 r5:0003a710 r4:00000000
    [   35.505693] ---[ end trace 33760b67109e479f ]---
    [   35.510333] Invalid mbus code set

    After printing this, the kernel hangs.

    What does this error indicate, and how can it be solved?

    Regards,

    Rajat Rao

  • Rajat,

    I still don't get the interaction between vfpe and usb, but at any rate looking at the kernel warning above, I believe the attached patch should allow you to proceed further at least with the vpfe probe, anyways.

    From 910e19ee16bd0b33b91edce0794363ee02efce82 Mon Sep 17 00:00:00 2001
    From: Benoit Parrot <bparrot@ti.com>
    Date: Wed, 28 Sep 2016 12:52:02 -0500
    Subject: [Patch 1/1] media: i2c: tvp514x: get_fmt make sure valid default
     value are provided
    
    In get_fmt when the V4L2_SUBDEV_FORMAT_ACTIVE is selected the
    content of struct tvp514x_decoder -> format member is returned.
    However if get_fmt is called before set_fmt is called first
    the "format" member is uninitialized.
    
    Initialize it with proper default values.
    
    Signed-off-by: Benoit Parrot <bparrot@ti.com>
    ---
     drivers/media/i2c/tvp514x.c | 7 +++++++
     1 file changed, 7 insertions(+)
    
    diff --git a/drivers/media/i2c/tvp514x.c b/drivers/media/i2c/tvp514x.c
    index 6ef370a8ff42..17cea6ba5032 100644
    --- a/drivers/media/i2c/tvp514x.c
    +++ b/drivers/media/i2c/tvp514x.c
    @@ -992,6 +992,13 @@ static struct tvp514x_decoder tvp514x_dev = {
     					NTSC_NUM_ACTIVE_LINES,
     		.colorspace	= V4L2_COLORSPACE_SMPTE170M,
     		},
    +	.format = {
    +		.code		= MEDIA_BUS_FMT_UYVY8_2X8,
    +		.width		= NTSC_NUM_ACTIVE_PIXELS,
    +		.height		= NTSC_NUM_ACTIVE_LINES,
    +		.colorspace	= V4L2_COLORSPACE_SMPTE170M,
    +		.field		= V4L2_FIELD_INTERLACED,
    +		},
     	.current_std = STD_NTSC_MJ,
     	.std_list = tvp514x_std_list,
     	.num_stds = ARRAY_SIZE(tvp514x_std_list),
    -- 
    2.9.0
    
    

    Benoit 

  • Hello Benoit,

    Thanks for the patch. Applying it solved the problem. The vpfe driver registered successfully. As suspected the USB failure was due to the vpfe driver failure (probably a timeout), and the USB is also working fine now.

    Regards,
    Rajat Rao
  • Hello Benoit, Manisha,

    Unfortunately, all is still not well. An entry at /dev/video0 exists but I am not able run the simple yavta test.

    I enabled debug and ran yavta, and v4l2-compliance. Here is the output:

    root@am437x-evm:~# yavta -c10 -fYUYV -Fvout_test.yuv -s720x480 /dev/video0                                                                      
    Device /dev/video0 opened.
    Device `TI AM437x VPFE' on `platform:vpfe 48328000.vpfe' is a video output (without mplanes) device.
    Unable to set format: Invalid argument (22).


    root@am437x-evm:~# dmesg | tail
    [   88.453191] vpfe 48328000.vpfe: __vpfe_get_format size 720x480 (UYVY) bytesperline = 1440, size = 691200, bpp = 2
    [   88.453225] vpfe 48328000.vpfe: vpfe_config_ccdc_image_format
    [   88.453243] vpfe 48328000.vpfe: pixelformat: UYVY
    [   88.453260] vpfe 48328000.vpfe: vpfe_ccdc_set_pixel_format: if_type: 1, pixfmt:UYVY
    [   88.453663] vpfe 48328000.vpfe: vpfe_querycap
    [   88.453695] video0: VIDIOC_QUERYCAP: driver=vpfe, card=TI AM437x VPFE, bus=platform:vpfe 48328000.vpfe, version=0x00040106, capabilities=0x81
    [   88.453800] vpfe 48328000.vpfe: vpfe_s_fmt
    [   88.453834] vpfe 48328000.vpfe: __vpfe_get_format size 720x480 (UYVY) bytesperline = 1440, size = 691200, bpp = 2
    [   88.453852] vpfe 48328000.vpfe: __vpfe_set_format
    [   88.453867] video0: VIDIOC_S_FMT: error -22: type=vid-cap, width=720, height=480, pixelformat=YUYV, field=any, bytesperline=0, sizeimage=0, 0


    root@am437x-evm:~# v4l2-compliance
    Driver Info:
            Driver name   : vpfe
            Card type     : TI AM437x VPFE
            Bus i[   99.627620] vpfe 48328000.vpfe: =================  START STATUS  =================
    nfo      : platform:vpfe 48328000.vpfe
            Driver version: 4.1.6
    [   99.644285] vpfe 48328000.vpfe: Brightness:  Capabilities  : 0x85200001
                    Video Capture
                    Read/Write
                    St128reaming
                    Extended Pix Format
                    Device Capabilities
            Device C
    aps   : 0x05200001
                    Video Capture
                    Read/Write
                    Streaming
    [   99.661001] vpfe 48328000.vpfe: Contrast:            Extended Pix Format

    Compliance test for device /dev/video0 128(not using libv4l2):

    Required ioctls:
            test VIDIOC_QUERYCAP:
     OK

    Allow for multiple opens:
            test second video open: OK
            [   99.682311] vpfe 48328000.vpfe: Saturation: test VIDIOC_QUERYCAP: OK
            test VIDIOC_G/S_PRIORITY: OK

    Debug128 ioctls:
            test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)

    [   99.703382] vpfe 48328000.vpfe: Hue: 0
    [   99.707182] vpfe 48328000.vpfe: Gain, Automatic: true
    [   99.712799] vpfe 48328000.vpfe: ==================  END STATUS  ==================
            test VIDIOC_LOG_STATUS: OK[   99.721396] vpfe 48328000.vpfe: invalid input index: 1


    Input ioctls:
            test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
            test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
            test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
            test VIDIOC_ENUMAUDIO: OK (Not Supported)
            test VIDIOC_G/S/ENUMINPUT: OK
            tes[   99.747910] tvp514x 0-005c: tvp5146 (Version - 0x03) found at 0xb8 (OMAP I2C adapter)
    t VIDIOC_G/S_AUDIO: OK (Not Supported)
            Inputs: 1 Audio Inputs: 0 Tuners: 0

    Output ioctls:
            test VIDIOC_G/S_MODULATOR: OK (Not Supported)
            test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
            test VIDIOC_ENUMAUDOUT: OK (Not Supported)
            test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
            test VIDIOC_G/S_AUDOUT: OK (Not Supported)
            Outputs: 0 Audio Outputs: 0 Modulators: 0

    Input/Output configuration ioctls:
            test VIDIOC_ENUM/G/S/QUERY_STD: OK
            test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
            test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
            test VIDIOC_G/S_EDID: OK (Not Supported)

    Test input 0:

            Control ioctls:
                    test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK
                    test VIDIOC_QUERYCTVIDIOC_S_FMTRL: OK
                    test VIDIOC_G/S_CTRL: OK
                    test VIDIOC_G/S/TRY_EXT_CT: error -22RLS: OK
                    test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
                    test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
                    Standard Controls: 6 P: rivate Controls: 0

            Format ioctls:
                    test VIDIOC_ENUM_FMT/FRtype=unknownAMESIZES/FRAMEINTERVALS: OK
                    test VIDIOC_G/S_PARM: OK
                    test
    VIDIOC_G_FBUF: OK (Not Supported)
                    fail: /home/gtbldadm/procesVIDIOC_G_SLICED_VBI_CAPsor-sdk-linux-fido-build/build-CORTEX_1/arago-tmp-external-linar: error -25o-f
    p(414): unknown pixelformat 59565955 for buftype 1
                    test VIDIOC_G_FMT: FAIL
                    test VIDIOC_TRY_FMT: OK (Not Supported)
                    test VIDIOC_S_FMT: OK (Not Supported)
                    test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)

            Codec ioctls:
                    test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
                    test VIDIOC_G_ENC_INDEX: OK (Not Supported)
                    test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

            Buffer ioctls:
                    test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
                    fail: /home/gtbldadm/processor-sdk-linux-fido-build/build-CORTEX_1/arago-tmp-external-linaro-toolchain/work/cortexa9hf-vfp-neon)
                    test VIDIOC_EXPBUF: FAIL


    Total: 39, Succeeded: 37, Failed: 2, Warnings: 0

    Why does set_format fail?

    Background information:

    I am running on kernel 4.1.6. I have applied the Invalid fmt patch shared by Benoit.

    As mentioned in this post: , I have changed the format in tvp514x.c from MEDIA_BUS_FMT_YUYV8_2X8 to MEDIA_BUS_FMT_UYVY8_2X8  everywhere.

    The above post also has 2 patches, one of which fixes the handshaking in the i2c driver. Does this apply in my case? Do I need it?

    My device tree entry is similar to the one detailed in the above post:

    tvp514x@5c {
                compatible = "ti,tvp5146";
                reg = <0x5c>;
                status = "okay";
     
                port {
                    tvp514x_0: endpoint {
                        remote-endpoint = <&vpfe1_ep>;
                        //pclk-sample = <0>;
                        num-channels = <1>;
     
                    };
                };
        };

    &vpfe1 {
         status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&cam1_pins_default>;     
            
        port {
            vpfe1_ep: endpoint {
                slave-mode;
                remote-endpoint = <&tvp514x_0>;
                ti,am437x-vpfe-interface = <1>;
                bus-width = <8>;
                    
            };
        };
    };

    Regards,

    Rajat Rao

  • Rajat,

    The tvp514x.c driver will fail when trying to set a format which does not match with what it supports instead of returning a valid config to use.
    In this case the resolution looks good but you are asking it to capture in YUYV format this particular driver and H/W only supports UYVY.

    If you run "yavta --enum-formats /dev/video0" you'll see a list of supported formats.

    In short trying "yavta -c10 -fUYVY -Fvout_test.yuv -s720x480 /dev/video0" should get you a little further.

  • Hello Benoit,

    I have set UYVY is tvp514x.c and I called yavta with -fUYVY, yet I still get the same error.

    root@am437x-evm:~# yavta --enum-formats /dev/video0
    Device /dev/video0 opened.
    Device `TI AM437x VPFE' on `platform:vpfe 48328000.vpfe' is a video output (without mplanes) device.
    - Available formats:
    .Format 0: YUYV (56595559)
    .Type: Video capture (1)
    .Name: YUV 4:2:2 packed, YCbYCr

    Video format: UYVY (59565955) 720x480 (stride 1440) field interlaced buffer size 691200

    root@am437x-evm:~# yavta -fUYVY -Fvout.yuv -c10 /dev/video0
    Device /dev/video0 opened.
    Device `TI AM437x VPFE' on `platform:vpfe 48328000.vpfe' is a video output (without mplanes) device.
    Unable to set format: Invalid argument (22).
    root@am437x-evm:~#


    yavta prints only YUYV as the supported format. Where is this coming from? Should I change YUYV to UYVY in some other source file?

    Regards,
    Rajat Rao
  • Hello,

    Some updates -

    I add enum_framesizes function to tvp514x.c.

    static int tvp514x_enum_frame_sizes(struct v4l2_subdev *sd,
                       struct v4l2_subdev_pad_config *cfg,
                       struct v4l2_subdev_frame_size_enum *fse)
    {

        struct tvp514x_decoder *decoder = to_decoder(sd);

        if (fse->index >= 1 )
            return -EINVAL;

        fse->code = MEDIA_BUS_FMT_UYVY8_2X8;

        fse->min_width  = tvp514x_std_list[decoder->current_std].width;
        fse->max_width  = fse->min_width;
        fse->max_height = tvp514x_std_list[decoder->current_std].height;
        fse->min_height = fse->max_height;

        return 0;
    }

    I changed the order of formats in am437x-vpfe.c to

    static struct vpfe_fmt formats[] = {
         {
            .name        = "YUV 4:2:2 packed, CbYCrY",
            .fourcc        = V4L2_PIX_FMT_UYVY,
            .code        = MEDIA_BUS_FMT_UYVY8_2X8,
            .l.width    = 10,
            .l.bpp        = 4,
            .s.width    = 8,
            .s.bpp        = 2,
            .supported    = true,
        }, {
            .name        = "YUV 4:2:2 packed, YCbYCr",
            .fourcc        = V4L2_PIX_FMT_YUYV,
            .code        = MEDIA_BUS_FMT_YUYV8_2X8,
            .l.width    = 10,
            .l.bpp        = 4,
            .s.width    = 8,
            .s.bpp        = 2,
            .supported    = false,
        },

    ...

    After making these changes, I ran the dual camera application given in the SDK. This gave a display with random horizontal lines.

    I then made the following change in loopback.c of the dual camera application -

    /* Main camera display */
        strcpy(drm_device.dev_name,"/dev/drm");
        strcpy(drm_device.name,"drm");
        drm_device.width=640;
        drm_device.height=480;
        drm_device.bo_flags = OMAP_BO_SCANOUT;
        drm_device.fd = 0;

        /* Main camera */
        cap0_device.memory_mode = V4L2_MEMORY_DMABUF;
        cap0_device.num_buffers = NBUF;
        strcpy(cap0_device.dev_name,"/dev/video0");
        strcpy(cap0_device.name,"Capture 0");
        cap0_device.buffers = NULL;
        cap0_device.fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
        cap0_device.width = 720;
        cap0_device.height = 576;

    ...

    After making these changes, the application displays video where the object boundaries can be distinguished but the colour space seems to be wrong. See attached image captured using this application.

    A PAL camera is attached to the decoder. I have verified that the pixel clock, hsync and vynsc are correct (27 Mhz, 15.625 kHz, and 50 Hz respectively).

    What could the problem be? Do I need to implement a color space converter?

    Regards,

    Rajat Rao

  • Rajat,

    Good that you were able to at least capture something.

    I do not understand why you had to change the format order in the am437x-vpfe.c driver. To me that seems to be a bug in the application that we are working around.

    The enum_frame_sizes change to tvp514x.c was part of the patch I had sent earlier wasn't it?

    Anyhow, based on the image you attached it looks like a UYVY image but displayed as if it was a YUYV image. Again here I suspect an application issue.

    If you capture to file using "yavta -c10 -fUYVY -s720x576 -Ftest_UYVY_720x576.yuv" and then use a YUV file viewer (there are many of those on the web for instance https://sourceforge.net/projects/raw-yuvplayer/  ) and see if you can view the image properly.

  • Rajat,

    In the loopback.c file, inside v4l2_init_device() function, the capture device is still being configured as YUYV. Check this line and do modifications here as well. Hopefully, that should take care of application level issue.
    device->fmt.fmt.pix.pixelformat = FOURCC_STR("YUYV");

    Regards,
    Manisha
  • Manisha,

    I have changed YUYV to UYVY in the line you pointed out. Sorry I didn't mention this in my previous post.

    Benoit,

    The following work well -
    1) Viewing the running dual_camera application on a display. The displayed data is perfectly fine.
    2) yavta captures properly. I viewed the yuv video using vooya and it is also fine.

    This leads me to believe that the jpeg_write function in the application is not converting from yuv colorspace to rgb. Or as you said, is treating UYVY as YUVY.

    Can you tell me if the DSS handles the yuv to rgb colorspace conversion? Or can this be done with v4l2 api?

    I seem to have run into another problem in the dual_camera application. When I run the application with a USB webcam connected (and format changed to YUYV), the application hangs and doesn't display anything. However, I have verified that yavta captures from the USB webcam, which probably means that all the drivers are working.

    Thanks for all the help.

    Regards,
    Rajat Rao
  • Rajat Rao said:
    This leads me to believe that the jpeg_write function in the application is not converting from yuv colorspace to rgb. Or as you said, is treating UYVY as YUVY.

    JPEG compression happens in captured format. 

    Rajat Rao said:
    Can you tell me if the DSS handles the yuv to rgb colorspace conversion? Or can this be done with v4l2 api?

    DSS handles YUV 422 to RGB conversion and that's how it is being done in dual camera demo application. The captured images are in YUV 422 format (UYVY/YUYV) and are passed to DSS. DSS does the conversion to RGB on the fly and displays on LCD/HDMI. 

    Rajat Rao said:
    When I run the application with a USB webcam connected (and format changed to YUYV), the application hangs and doesn't display anything

    USB webcam will not work with dual camera application as the captured buffers are shared with the display driver and display driver expects those buffers to be in contiguous format. USB driver allocate the buffers in scatter gather format. Check below e2e post where hacked patch is provided to get the USB webcam working -