Bug 23322

Summary: DisplayPort no longer working after patch
Product: Drivers Reporter: Kjell Rune Skaaraas (temp9476-kernel)
Component: Video(DRI - non Intel)Assignee: Jean Delvare (jdelvare)
Status: CLOSED CODE_FIX    
Severity: normal CC: jdelvare, rjw
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.37-rc2 Subsystem:
Regression: Yes Bisected commit-id:
Bug Depends on:    
Bug Blocks: 21782    

Description Kjell Rune Skaaraas 2010-11-19 23:40:53 UTC
With a Radeon HD5850 on the open source radeon drivers my DisplayPort monitor stopped working between rc1 and rc2. The card is reported as having only three outputs now, HDMI and 2xDVI. I did a bisect and the cause is this commit:

2236baa75f704851d3cd3310569058151acb1f06 is the first bad commit
commit 2236baa75f704851d3cd3310569058151acb1f06
Author: Jean Delvare <khali@linux-fr.org>
Date:   Mon Nov 15 22:40:38 2010 +0100

    i2c: Sanity checks on adapter registration
    
    Make sure I2C adapters being registered have the required struct
    fields set. If they don't, problems will happen later.
    
    Signed-off-by: Jean Delvare <khali@linux-fr.org>

:040000 040000 d56136ee874424d0d5e11a6483ea1f393b35edb8 0cf1eaab8f5fd4a1b1786e7c745cb709ade50c28 M      drivers

I don't know what "problems" will happen later, I have not noticed any problems except it's sometimes a bit hard to make it wake after sleeping. Let me know what more details you need.

Regards,
Kjell Rune
Comment 1 Kjell Rune Skaaraas 2010-11-19 23:46:49 UTC
Ah, looked at commit, then searched dmesg. I outlined it with ***:

[    3.820055] [drm] radeon defaulting to kernel modesetting.
[    3.820057] [drm] radeon kernel modesetting enabled.
[    3.820091] radeon 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    3.820094] radeon 0000:01:00.0: setting latency timer to 64
[    3.821271] [drm] initializing kernel modesetting (CYPRESS 0x1002:0x6899).
[    3.821550] [drm] register mmio base: 0xFBBC0000
[    3.821553] [drm] register mmio size: 131072
[    3.821645] ATOM BIOS: CYPRESS
[    3.821661] radeon 0000:01:00.0: VRAM: 1024M 0x00000000 - 0x3FFFFFFF (1024M used)
[    3.821663] radeon 0000:01:00.0: GTT: 512M 0x40000000 - 0x5FFFFFFF
[    3.821666] mtrr: type mismatch for e0000000,10000000 old: write-back new: write-combining
[    3.821668] [drm] Detected VRAM RAM=1024M, BAR=256M
[    3.821669] [drm] RAM width 256bits DDR
[    3.821818] [TTM] Zone  kernel: Available graphics memory: 4094930 kiB.
[    3.821819] [TTM] Zone   dma32: Available graphics memory: 2097152 kiB.
[    3.821820] [TTM] Initializing pool allocator.
[    3.821829] [drm] radeon: 1024M of VRAM memory ready
[    3.821830] [drm] radeon: 512M of GTT memory ready.
[    3.821869] radeon 0000:01:00.0: irq 46 for MSI/MSI-X
[    3.821873] radeon 0000:01:00.0: radeon: using MSI.
[    3.821902] [drm] radeon: irq initialized.
[    3.821903] [drm] GART: num cpu pages 131072, num gpu pages 131072
[    3.822357] [drm] Loading CYPRESS Microcode
[    3.826259] radeon 0000:01:00.0: WB enabled
[    3.842864] [drm] ring test succeeded in 1 usecs
[    3.842932] [drm] radeon: ib pool ready.
[    3.843067] [drm] ib test succeeded in 0 usecs
[    3.843076] failed to evaluate ATIF got AE_BAD_PARAMETER
***[    3.844511] i2c-core: Attempt to register an adapter with no name!
[    3.844550] [drm] Failed to register i2c DP-auxch
[    3.844603] [drm] Radeon Display Connectors
[    3.844604] [drm] Connector 0:
[    3.844605] [drm]   HDMI-A
[    3.844606] [drm]   HPD5
[    3.844607] [drm]   DDC: 0x6460 0x6460 0x6464 0x6464 0x6468 0x6468 0x646c 0x646c
[    3.844608] [drm]   Encoders:
[    3.844609] [drm]     DFP2: INTERNAL_UNIPHY2
[    3.844610] [drm] Connector 1:
[    3.844611] [drm]   DVI-I
[    3.844611] [drm]   HPD1
[    3.844612] [drm]   DDC: 0x6450 0x6450 0x6454 0x6454 0x6458 0x6458 0x645c 0x645c
[    3.844613] [drm]   Encoders:
[    3.844614] [drm]     DFP3: INTERNAL_UNIPHY1
[    3.844615] [drm]     CRT2: INTERNAL_KLDSCP_DAC2
[    3.844616] [drm] Connector 2:
[    3.844617] [drm]   DVI-I
[    3.844617] [drm]   HPD6
[    3.844619] [drm]   DDC: 0x6470 0x6470 0x6474 0x6474 0x6478 0x6478 0x647c 0x647c
[    3.844620] [drm]   Encoders:
[    3.844620] [drm]     DFP4: INTERNAL_UNIPHY
[    3.844621] [drm]     CRT1: INTERNAL_KLDSCP_DAC1
Comment 2 Kjell Rune Skaaraas 2010-11-20 00:03:38 UTC
Turns out it's actually a bug in the radeon driver, it has the name just forgets to set it before calling, duh. This patch will fix it. Also changing to DRI (non-intel) where it belongs...

diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
index 0cfbba0..d71d693 100644
--- a/drivers/gpu/drm/radeon/radeon_i2c.c
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
@@ -947,6 +947,7 @@ struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev,
        i2c->adapter.owner = THIS_MODULE;
        i2c->dev = dev;
        i2c_set_adapdata(&i2c->adapter, i2c);
+       sprintf(i2c->adapter.name, "Radeon i2c dp bus %s", name);
        i2c->adapter.algo_data = &i2c->algo.dp;
        i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch;
        i2c->algo.dp.address = 0;
Comment 3 Kjell Rune Skaaraas 2010-11-20 00:04:15 UTC
Turns out I can't change the assignee so you must do it...
Comment 4 Kjell Rune Skaaraas 2010-11-20 00:24:26 UTC
Meh, and according to this the fix is already going into rc3 according to http://lists.freedesktop.org/archives/dri-devel/2010-November/005596.html

Alex Deucher (12):
      drm/radeon/kms: register an i2c adapter name for the dp aux bus

So... if I can set it resolved I will now, if not you do it...
Comment 5 Rafael J. Wysocki 2010-11-20 01:41:42 UTC
First-Bad-Commit : 2236baa75f704851d3cd3310569058151acb1f06
Comment 6 Rafael J. Wysocki 2010-12-02 21:21:54 UTC
Fixed by commit a5193fe .