BroadwellでXが起動しない問題

src/sys/dev/drm2/i915/i915_drv.cにエントリ追加。

diff -ru i915.bk/i915_drv.c i915/i915_drv.c
--- i915.bk/i915_drv.c	2015-06-04 17:19:46.874564000 +0900
+++ i915/i915_drv.c	2015-06-04 17:21:44.834977000 +0900
@@ -221,6 +221,16 @@
 	.not_supported = 1,
 };
 
+static const struct intel_device_info intel_broadwell_m_info = {
+        .is_haswell = 1, .gen = 8, .is_mobile = 1,
+        .need_gfx_hws = 1, .has_hotplug = 1,
+        .has_bsd_ring = 1,
+        .has_blt_ring = 1,
+        .has_llc = 1,
+        .has_pch_split = 1,
+        .not_supported = 1,
+};
+
 #define INTEL_VGA_DEVICE(id, info_) {		\
 	.device = id,				\
 	.info = info_,				\
@@ -281,6 +291,7 @@
 	INTEL_VGA_DEVICE(0x0406, &intel_haswell_m_info), /* GT1 mobile */
 	INTEL_VGA_DEVICE(0x0416, &intel_haswell_m_info), /* GT2 mobile */
 	INTEL_VGA_DEVICE(0x0c16, &intel_haswell_d_info), /* SDV */
+	INTEL_VGA_DEVICE(0x1616, &intel_broadwell_m_info), /* mobile */
 	{0, 0}
 };

src/sys/dev/drm2/drm_pciids.h にPCIのID?を追加

--- drm_pciids.h.bk	2015-06-04 17:12:52.062533000 +0900
+++ drm_pciids.h	2015-06-04 17:13:47.049281000 +0900
@@ -55,6 +55,7 @@
 	{0x8086, 0x0416, CHIP_I9XX|CHIP_I915, "Intel Haswell (M)"}, \
 	{0x8086, 0x041A, CHIP_I9XX|CHIP_I915, "Intel Haswell (S)"}, \
 	{0x8086, 0x0C16, CHIP_I9XX|CHIP_I915, "Intel Haswell (SDV)"}, \
+	{0x8086, 0x1616, CHIP_I9XX|CHIP_I915, "Intel Broadwell (?)"}, \
         {0x8086, 0x1632, CHIP_I9XX|CHIP_I915, "Intel Broadwell (ULT)"}, \
         {0x8086, 0x1636, CHIP_I9XX|CHIP_I915, "Intel Broadwell (ULT)"}, \
         {0x8086, 0x163B, CHIP_I9XX|CHIP_I915, "Intel Broadwell (Iris)"}, \

してデバッグメッセージオンにしてみた。kldloadすると

info: [drm] Initialized drm 1.1.0 20060810
[drm:pid56670:drm_probe_helper] drmn0 desc: Intel Broadwell (?)

というふうに2行目がでるようになったけど、どこで止まってるんだろこれ?

kernel moduleをロードしたときに最初に呼ばれるのって, moduledata_tの二つ目の引数?に書いてある関数(src/sys/dev/drm2/drm_os_freebsd.cのdrm_modevent)で、MOD_LOADのところが実行されるという認識なんだけど、中を見ると

static int
drm_modevent(module_t mod, int type, void *data)
{

        switch (type) {
        case MOD_LOAD:
                TUNABLE_INT_FETCH("drm.debug", &drm_debug);
                TUNABLE_INT_FETCH("drm.notyet", &drm_notyet);
                break;
        }
        return (0);
}

なんかたいしたことしてないような、、、? 初期化処理をどっかでやってるんだと思うんだけど、、、

やっぱりintel_broadwell_m_info.not_supported が 1 っていうのが効いてるのかなあ、と思い、0にしてmakeしてkldload i915kmsしたら、画面が暗転!どうやらpanicした模様。なるほどなあ。

スワップ領域がないのでクラッシュダンプがとれないことに気づいた。あー。

これ以上は手に追えないし、放置かな。