Thread (10 messages) 10 messages, 6 authors, 2016-01-28

Re: Whats missing in my new FB DRM driver... "No connectors reported connected with modes"?

From: Xinliang Liu <xinliang.liu@linaro.org>
Date: 2016-01-20 01:24:32
Also in: dri-devel

Possibly related (same subject, not in this thread)

On 20 January 2016 at 00:52, Carlos Palminha
[off-list ref] wrote:
when i boot the kernel and connect the HDMI cable after booting i can retrieve 4 modes... :)

if i boot linux with the HDMI cable inserted the kernel hangs.
What's the hang kernel log. Is it a oops?
Possible relation with HPD?
Yes,  I think there might be something wrong with the HPD interrupt or
the EDID ready interrupt.
I do meet the similar issue before when I using the upstream adv7511
driver to enable adv7533.
I found that the HPD and EDID interrupt is not reliable.
In order to get modes stably, I have to add some delay like bellow:
--
--- a/drivers/gpu/drm/i2c/adv7511.c
+++ b/drivers/gpu/drm/i2c/adv7511.c
@@ -657,6 +657,8 @@ static int adv7511_get_modes(struct adv7511 *adv7511,
                regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER,
                                   ADV7511_POWER_POWER_DOWN, 0);
                adv7511->current_edid_segment = -1;
+               /* wait some time for edid is ready */
+               msleep(200);
        }

        edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
--
Best,
-xinliang
Regards,
C.Palminha

# modetest -M drm-arcpgu -c
Connectors:
id      encoder status          type    size (mm)       modes   encoders
21      0       connected       HDMI-A  0x0             4       20
  modes:
        name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  800x600 60 800 840 968 1056 600 601 605 628 flags: phsync, pvsync; type: driver
  800x600 56 800 824 896 1024 600 601 603 625 flags: phsync, pvsync; type: driver
  848x480 60 848 864 976 1088 480 486 494 517 flags: phsync, pvsync; type: driver
  640x480 60 640 656 752 800 480 490 492 525 flags: nhsync, nvsync; type: driver
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0

#

On 19-01-2016 16:03, Carlos Palminha wrote:
quoted
Hi Xiang,

Its returning 0 modes... :(

Regards,
C.Palminha

# modetest -M drm-arcpgu -c
Connectors:
id      encoder status          type    size (mm)       modes   encoders
21      0       disconnected    HDMI-A  0x0             0       20
  props:
        1 EDID:
                flags: immutable blob
                blobs:

                value:
        2 DPMS:
                flags: enum
                enums: On=0 Standby=1 Suspend=2 Off=3
                value: 0

#

On 19-01-2016 03:38, Xinliang Liu wrote:
quoted
On 18 January 2016 at 22:45, Carlos Palminha [off-list ref]
wrote:
quoted
I'm also getting a message from DRM saying can't find any crtc or
sizes...i'm really missing something here.
:(

-- log --
[drm] Initialized drm 1.1.0 20060810
drm-arcpgu e0017000.pgu: No connectors reported connected with modes
[drm] Cannot find any crtc or sizes - going 1024x768
Console: switching to colour frame buffer device 128x48
drm-arcpgu e0017000.pgu: fb0: frame buffer device
[drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0
-- log ---

Any help?

Regards,
C.Palminha


On 18-01-2016 14:32, Carlos Palminha wrote:
quoted
Hi Xinliang,

My get_modes seems to be implemented as the rcar driver...
Probably still missing some init step?

Regards,
C.Palminha


static int arcpgu_drm_connector_get_modes(struct drm_connector
*connector)
quoted
{
struct drm_encoder_slave *slave;
const struct drm_encoder_slave_funcs *sfuncs;
struct arcpgu_drm_connector * con >>>>> container_of(connector, struct arcpgu_drm_connector, connector);

slave = con->encoder_slave;
if(slave = NULL) {
dev_err(connector->dev->dev,
"connector_get_modes: cannot find slave encoder for connector\n");
return 0;
}

sfuncs = slave->slave_funcs;
if(sfuncs->get_modes = NULL){
return 0;
}

return sfuncs->
get_modes(&slave->base,connector);
quoted
}
so, this will call adv7511 driver's

get_modes call back.
I wonder if the system boot up, it can get modes or not.
You can test it with the modetest. i.e. $ modetest -M DRM_DRIVER_NAME -c



quoted
quoted
On 31-12-2015 02:19, Xinliang Liu wrote:
quoted

On 31 December 2015 at 02:46, Carlos Palminha
<CARLOS.PALMINHA@synopsys.com <mailto:CARLOS.PALMINHA@synopsys.com>>
wrote:
quoted
quoted
    Hi guys,

    I'm writing a DRM driver for a framebuffer embedded hardware that
    uses an i2c encoder (adv7511), following the basic steps suggested
    by Laurent in "anatomy of an embedded KMS driver":
    https://www.youtube.com/watch?v=Ja8fM7rTae4

    After initiliazing all kms, crtc, encoder, i2c, connector functions
    and structures i'm calling drm_fbdev_cma_init to create a fbdev.

    When booting i'm getting an error message saying "No connectors
    reported connected with modes", but the driver init is ok and i can
    find the /dev/dri/* and /dev/fb0 devices.

    Any clue what i might be missing during the driver load?


I think you should check on the 'get_modes' call back of adv7511
driver. (Or, if possible show us the code.)

Best,
-xinliang


    Thanks...

    Regards,
    C.Palminha

    --- boot log snippet ---
    [drm] Initialized drm 1.1.0 20060810
    drm-arcpgu e0017000.pgu: No connectors reported connected with modes
    [drm] Cannot find any crtc or sizes - going 1024x768
    Console: switching to colour frame buffer device 128x48
    drm-arcpgu e0017000.pgu: fb0:  frame buffer device
    [drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0
    --- boot log snippet ---
    --
    To unsubscribe from this list: send the line "unsubscribe
    linux-fbdev" in
    the body of a message to majordomo@vger.kernel.org
    <mailto:majordomo@vger.kernel.org>
    More majordomo info at http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help