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: OMAP DSS Master Bind Failed

Other Parts Discussed in Thread: AM5718, TLC59108, AM5728, DRA742, DRA722, DRA72

Tool/software: Linux

Hi,

I am facing an issue with omapdss, i am getting the below message master bind failed: -517, because of which I am not getting the display in my custom board developed with AM5718 processor and I am using ti-processor-sdk-linux-am57xx-evm-02.00.01.07 SDK. What can be the reason??


[    1.419103] omapdss_dss 58000000.dss: master bind failed: -517
[    1.420965] tlc59108 0-0040: failed to find video source
[    1.423428] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
[    1.426365] 4806a000.serial: ttyS0 at MMIO 0x4806a000 (irq = 299, base_baud = 3000000) is a 8250
[    2.579283] console [ttyS0] enabled
[    2.583439] 48020000.serial: ttyS2 at MMIO 0x48020000 (irq = 300, base_baud = 3000000) is a 8250
[    2.593282] [drm] Initialized drm 1.1.0 20060810
[    2.606203] brd: module loaded
[    2.613269] loop: module loaded
[    2.617343] mtdoops: mtd device (mtddev=name/number) must be supplied
[    2.674376] davinci_mdio 48485000.mdio: davinci mdio revision 1.6
[    2.680500] davinci_mdio 48485000.mdio: detected phy mask fffffdff
[    2.688931] libphy: 48485000.mdio: probed
[    2.692963] davinci_mdio 48485000.mdio: phy[9]: device 48485000.mdio:09, driver unknown
[    2.701622] cpsw 48484000.ethernet: Detected MACID = 74:da:ea:0c:dc:a2
[    2.708947] cpsw 48484000.ethernet: cpsw: Detected MACID = 74:da:ea:0c:

Best Regards,

Ganesh

  • Hi Ganesh,

    What display you have on your custom board, LCD or HDMI? If LCD, is the same as in AM572x EVM (7inch WVGA 800x480, 24-bit RGB TFT, OSD070T1718-19TS v1 3) or the one used in AM571x IDK (10.1inch 1920x1200, MIPI RGB) or else?

    Regards,
    Pavel
  • Hi Pavel,

    I am having LCD display in my custom board. I have done the changes in the dts files also. Please check..

    I have attached the dts files used, and also dts file converted from generated dtb file. Please check. Previously I worked on AM5728 custom board and that display worked, I have done the similar changes in dts file now for my custom board with AM5718 processor.

    Generally, what can be reason for this error message "OMAP DSS Master Bind Failed", can we debug??

    2475.dts files.tar.gz

    Best Regards,

    Ganesh

  • Ganesh,

    We have the below differences between AM572x and AM571x regarding LCD:

    - on AM571x DPLL_VIDEO2 is removed. Which DPLL you are using to supply clock to the DSS/LCD? In AM571x you should use other option (for example, DPLL_VIDEO1 or DPLL_HDMI).

    - Do you use VOUT1? AM571x VOUT1 only qualified for use at 1.8 V, while AM572x VOUT1 can be used with 3.3V.

    Regards,
    Pavel
  • Hi Pavel,

    Yes, I am aware that AM571x VOUT1 only qualified for use at 1.8 V. And I am using VOUT1 only. I am using DPLL_VIDEO21 only.

    Pavel, I tried to debug, why bind is getting failed. I found that there is some regulator mismatch because of which I am getting bind failed.See the below log messages I added:

    [ 2.779007] Entered DSS Bind
    [ 2.781953] mmc1: new MMC card at address 0001
    [ 2.786468] dss_init_features : Successful
    [ 2.790582] IORESOURCE_MEM DSS : Successful
    [ 2.795121] mmcblk0: mmc1:0001 MMC04G 3.60 GiB
    [ 2.799786] mmcblk0boot0: mmc1:0001 MMC04G partition 1 16.0 MiB
    [ 2.805762] ioremap DSS : Successful
    [ 2.809403] dss_get_clocks : Successful
    [ 2.813256] dss_setup_default_clock : Successful
    [ 2.818020] mmcblk0boot1: mmc1:0001 MMC04G partition 2 16.0 MiB
    [ 2.824425] dss_video_pll_probe : not started
    [ 2.828870] mmcblk0: p1 p2
    [ 2.831963] dss_video_pll_probe : started
    [ 2.837248] -EPROBE_DEFER
    [ 2.839985] omapdss_dss 58000000.dss: master bind failed: -517

    In dss.c I added the below kernel log messages in the two functions :

    static int dss_bind(struct device *dev)
    {
    struct platform_device *pdev = to_platform_device(dev);
    struct resource *dss_mem;
    u32 rev;
    int r;

    dss.pdev = pdev;
    printk(KERN_INFO "Entered DSS Bind\n");
    r = dss_init_features(dss.pdev);
    if (r)
    return r;
    printk(KERN_INFO "dss_init_features : Successful\n");
    dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
    if (!dss_mem) {
    DSSERR("can't get IORESOURCE_MEM DSS\n");
    return -EINVAL;
    }
    printk(KERN_INFO "IORESOURCE_MEM DSS : Successful\n");
    dss.base = devm_ioremap(&pdev->dev, dss_mem->start,
    resource_size(dss_mem));
    if (!dss.base) {
    DSSERR("can't ioremap DSS\n");
    return -ENOMEM;
    }
    printk(KERN_INFO "ioremap DSS : Successful\n");
    r = dss_get_clocks();
    if (r)
    return r;
    printk(KERN_INFO "dss_get_clocks : Successful\n");
    r = dss_setup_default_clock();
    if (r)
    goto err_setup_clocks;
    printk(KERN_INFO "dss_setup_default_clock : Successful\n");
    r = dss_video_pll_probe(pdev);
    if (r)
    goto err_pll_init;
    printk(KERN_INFO "dss_video_pll_probe : Successful\n");
    r = dss_init_ports(pdev);
    if (r)
    goto err_init_ports;
    printk(KERN_INFO "dss_init_ports : Successful\n");
    pm_runtime_enable(&pdev->dev);

    r = dss_runtime_get();
    if (r)
    goto err_runtime_get;
    printk(KERN_INFO " dss_runtime_get : Successful\n");
    dss.dss_clk_rate = clk_get_rate(dss.dss_clk);

    /* Select DPLL */
    REG_FLD_MOD(DSS_CONTROL, 0, 0, 0);

    dss_select_dispc_clk_source(OMAP_DSS_CLK_SRC_FCK);

    #ifdef CONFIG_OMAP2_DSS_VENC
    REG_FLD_MOD(DSS_CONTROL, 1, 4, 4); /* venc dac demen */
    REG_FLD_MOD(DSS_CONTROL, 1, 3, 3); /* venc clock 4x enable */
    REG_FLD_MOD(DSS_CONTROL, 0, 2, 2); /* venc clock mode = normal */
    #endif
    dss.dsi_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
    dss.dsi_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;
    dss.dispc_clk_source = OMAP_DSS_CLK_SRC_FCK;
    dss.lcd_clk_source[0] = OMAP_DSS_CLK_SRC_FCK;
    dss.lcd_clk_source[1] = OMAP_DSS_CLK_SRC_FCK;

    rev = dss_read_reg(DSS_REVISION);
    printk(KERN_INFO "OMAP DSS rev %d.%d\n",
    FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));

    dss_runtime_put();

    r = component_bind_all(&pdev->dev, NULL);
    if (r)
    goto err_component;

    dss_debugfs_create_file("dss", dss_dump_regs);

    pm_set_vt_switch(0);

    omapdss_set_is_initialized(true);

    return 0;

    err_component:
    err_runtime_get:
    pm_runtime_disable(&pdev->dev);
    dss_uninit_ports(pdev);
    err_init_ports:
    if (dss.video1_pll)
    dss_video_pll_uninit(dss.video1_pll);

    if (dss.video2_pll)
    dss_video_pll_uninit(dss.video2_pll);
    err_pll_init:
    err_setup_clocks:
    dss_put_clocks();
    return r;
    }



    static int dss_video_pll_probe(struct platform_device *pdev)
    {
    struct device_node *np = pdev->dev.of_node;
    struct regulator *pll_regulator;
    int r;

    printk(KERN_INFO "dss_video_pll_probe : not started\n");
    if (!np)
    return 0;
    printk(KERN_INFO "dss_video_pll_probe : started\n");
    if (of_property_read_bool(np, "syscon-pll-ctrl")) {
    dss.syscon_pll_ctrl = syscon_regmap_lookup_by_phandle(np,
    "syscon-pll-ctrl");
    if (IS_ERR(dss.syscon_pll_ctrl)) {
    dev_err(&pdev->dev,
    "failed to get syscon-pll-ctrl regmap\n");
    printk(KERN_INFO " No dss.syscon_pll_ctrl\n");
    return PTR_ERR(dss.syscon_pll_ctrl);
    }

    if (of_property_read_u32_index(np, "syscon-pll-ctrl", 1,
    &dss.syscon_pll_ctrl_offset)) {
    dev_err(&pdev->dev,
    "failed to get syscon-pll-ctrl offset\n");
    printk(KERN_INFO " No dss.syscon_pll_ctrl\n");
    return -EINVAL;
    }
    }

    pll_regulator = devm_regulator_get(&pdev->dev, "vdda_video");
    if (IS_ERR(pll_regulator)) {
    r = PTR_ERR(pll_regulator);

    switch (r) {
    case -ENOENT:
    pll_regulator = NULL;
    printk(KERN_INFO " pll_regulator = NULL\n");
    break;

    case -EPROBE_DEFER:
    printk(KERN_INFO " -EPROBE_DEFER\n");
    return -EPROBE_DEFER;

    default:
    printk(KERN_INFO "can't get DPLL VDDA regulator\n");
    DSSERR("can't get DPLL VDDA regulator\n");
    return r;
    }
    }
    printk(KERN_INFO " pll_regulator is ok \n");
    if (of_property_match_string(np, "reg-names", "pll1") >= 0) {
    dss.video1_pll = dss_video_pll_init(pdev, 0, pll_regulator);
    printk(KERN_INFO " dss_video_pll_init(pdev, 0 ; not ok \n");
    if (IS_ERR(dss.video1_pll))
    return PTR_ERR(dss.video1_pll);
    }

    if (of_property_match_string(np, "reg-names", "pll2") >= 0) {
    dss.video2_pll = dss_video_pll_init(pdev, 1, pll_regulator);
    if (IS_ERR(dss.video2_pll)) {
    printk(KERN_INFO " dss_video_pll_init(pdev, 1 ; not ok \n");
    dss_video_pll_uninit(dss.video1_pll);
    return PTR_ERR(dss.video2_pll);
    }
    }

    return 0;
    }

    Regulator mismatch with vdda_video, I mentioned supply as LDO5 - 1.8v in dts file also. Please help me in this regard.


    Best Regards,
    Ganesh
  • Ganesh Tenka said:
    I have attached the dts files used, and also dts file converted from generated dtb file. Please check. Previously I worked on AM5728 custom board and that display worked, I have done the similar changes in dts file now for my custom board with AM5718 processor.

    I reviewed your DTS files (am57xx-beagle-x15.dts, Converted_back dtb.dts, dra72x.dtsi, dra7.dtsi, am57xx-evm-cmem.dtsi), but I can not locate which is your main DTS file. Could you please specify it? For example the main DTS file for AM572x EVM is am57xx-evm.dts, for AM571x IDK is am571x-idk.dts (or am571x-idk-lcd-osd.dts), for AM572x IDK is am572x-idk.dts (or am572x-idk-lcd-osd.dts). Could you specify which is your custom AM571x board main DTS file?

    For AM572x EVM we have the below setup in DTS regarding LCD:

    am57xx-evm.dts

    model = "TI AM572x EVM";
    compatible = "ti,am572x-evm", "ti,am572x-beagle-x15", "ti,am5728", "ti,dra742", "ti,dra74", "ti,dra7";

    lcd0: display {
            compatible = "osddisplays,osd070t1718-19ts", "panel-dpi";

            label = "lcd";

     

    For AM571x IDK we have the below setup in DTS regarding LCD:

    am57xx-idk-lcd-osd.dtsi

    lcd: display {

            compatible = "osd,osd101t2045-53ts", "panel-dpi";

            label = "lcd";

    I can not find something similar in your DTS files.

    I see also that you are using am57xx-beagle-x15.dts file. This file can be used for AM572x only (compatible = "ti,am572x-beagle-x15", "ti,am5728", "ti,dra742", "ti,dra74", "ti,dra7";). Have you made any changes in that file to align it for AM571x? The DTS files that can be used for AM571x are:

    am57xx-idk-common.dtsi , am571x-idk.dts

    compatible = "ti,am5718"

    Regards,
    Pavel

  • Pavel,

    Actually, I am using am57xx-beagle-x15.dts file, only the name is like that, but internally I am using include files related to AM5718 only, dra72xx.dtsi and all, the LCD panel I am using is different from that used in AM572x EVM/AM571x EVM. It is similar to DRA7xx_EVM. You can see that in am57xx-beagle-x15.dts file I mentioned compatible to

    compatible = "ti,am571x-idk", "ti,am5718", "ti,dra722", \
    "ti,dra72", "ti,dra7";

    Previously I worked with AM5728 processor then I mentioned fdtfile as am57xx-beagle-x15.dtb and then I am using same SDK, so I modified entire dts file to AM5718 processor.

    Best Regards,
    Ganesh
  • Ganesh,

    In your am57xx-beagle-x15.dts file I see:

    display0 = &tlc59108;

    tlc59108: tlc59108@40

    {

                   compatible = "omapdss,ti,tlc59108-lp101";

                   lable = "lcd" ;

                   reg = <0x40>;

                   enable-gpios = <&gpio4 11 GPIO_ACTIVE_LOW>; /* P15, CON_LCD_PWR_DN */

           port {

           tlc_in: endpoint {

                  remote-endpoint = <&dpi_out>;

           };


    TLC59108 is an I2C bus controlled 8-bit LED driver. It is not LCD (or HDMI) display.

    For example in am57xx-evm.dts we have:

    display0 = &lcd0;
    display1 = &hdmi0;

    lcd0: display {
            compatible = "osddisplays,osd070t1718-19ts", "panel-dpi";

            label = "lcd";

     

    For example in am57xx-idk-lcd-osd.dtsi we have:


            display1 = &lcd;
       

            lcd: display {

            compatible = "osd,osd101t2045-53ts", "panel-dpi";

            label = "lcd";

     

    I think this part is wrong at your DTS main file.

    Regards,
    Pavel

  • Ganesh Tenka said:
    the LCD panel I am using is different from that used in AM572x EVM/AM571x EVM. It is similar to DRA7xx_EVM

    For  DRA72x EVM (variant rev C with osd101t2045 LCD display) we have the below DTS files used (related to OSD LCD and TLC59108):

    dra72-evm-revc-lcd-osd101t2045.dts
    dra7x-evm-lcd-osd.dtsi
    dra72-evm-revc.dts
    dra72-evm-common.dtsi

    dra7x-evm-lcd-osd.dtsi :

    aliases {
            display0 = &lcd;
            display1 = &hdmi0;
            display2 = &fpd_disp;
        };

    lcd: display {
                    compatible = "osd,osd101t2045-53ts", "panel-dpi";

            label = "lcd";
                    ........
    {

    dra72-evm-common.dtsi :

    aliases {
            display0 = &hdmi0;
            display1 = &fpd_disp;
            sound0 = &snd0;
            sound1 = &hdmi;
            i2c7 = &disp_ser;
        };

    &i2c5 {
         ..........
                    /* TLC chip for LCD panel power and backlight */
            fpd_disp: tlc59108@1c {
                status = "disabled";
                reg = <0x1c>;
                compatible = "ti,tlc59108-fpddisp";
        ............
    }

    We have also DRA72x EVM variants with osd101t2587 LCD display.

    I would suggest you to align your DTS files with these settings.

    Regards,
    Pavel