On Sun, Dec 22, 2013 at 04:13:54PM +0100, mark rowland wrote:
> I'm having some issues running OpenBSD on my notebook Acer Aspire E1 572G.
> 
> 1) During the installation of 5.4 weird things happened with the keyboard:
> typing with the keyboard was slow, sometimes typed characters were repeated,
> the kernel gave several times the error message "pckbcintr: no dev for slot 
> 1".
> In [1] you can find the output of dmesg from the 5.4 install media.
> I had the same issue during the installation of the latest snapshot.
> After installation the keyboard works fine though. In [2], [3], [4]
> you can find the
> output of dmesg, pcidump and acpidump (base64 encoded .zip) from the
> latest snapshot.
> 
> 2) As you can read from dmesg, both wired (BCM57786) and wireless lan
> (Atheros 956x) don't get recognized.
> 
> "Broadcom BCM57786" rev 0x01 at pci1 dev 0 function 0 not configured

That is perhaps manageable with a minor diff to bge?

> 
> vendor "Atheros", unknown product 0x0036 (class network subclass
> miscellaneous, rev 0x01) at pci2 dev 0 function 0 not configured
> 
> 3) The discrete gpu (Radeon HD 8670A) isn't recognized. The integrated
> gpu seems to be working, but the
> kernel gives the error messages below.
> 
> "ATI Radeon HD 8670A" rev 0x00 at pci3 dev 0 function 0 not configured

We don't have a new enough version of drm to support modesetting on the
'oland' southern islands parts yet.  

> 
> error: [drm:pid0:i915_write32] *ERROR* Unknown unclaimed register
> before writing to 100000
> error: [drm:pid0:intel_dp_set_link_train] *ERROR* Timed out waiting
> for DP idle patterns
> error: [drm:pid0:i915_write32] *ERROR* Unknown unclaimed register
> before writing to 64040

this might help your problems with edp on haswell, diff against -current:

diff --git sys/dev/pci/drm/i915/intel_ddi.c sys/dev/pci/drm/i915/intel_ddi.c
index d60adf2..6e367a4 100644
--- sys/dev/pci/drm/i915/intel_ddi.c
+++ sys/dev/pci/drm/i915/intel_ddi.c
@@ -685,7 +685,7 @@ static void intel_ddi_mode_set(struct drm_encoder *encoder,
                struct intel_digital_port *intel_dig_port =
                        enc_to_dig_port(encoder);
 
-               intel_dp->DP = intel_dig_port->port_reversal |
+               intel_dp->DP = intel_dig_port->saved_port_bits |
                               DDI_BUF_CTL_ENABLE | DDI_BUF_EMP_400MV_0DB_HSW;
                switch (intel_dp->lane_count) {
                case 1:
@@ -1309,7 +1309,8 @@ static void intel_enable_ddi(struct intel_encoder 
*intel_encoder)
                 * enabling the port.
                 */
                I915_WRITE(DDI_BUF_CTL(port),
-                          intel_dig_port->port_reversal | DDI_BUF_CTL_ENABLE);
+                          intel_dig_port->saved_port_bits |
+                          DDI_BUF_CTL_ENABLE);
        } else if (type == INTEL_OUTPUT_EDP) {
                struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
 
@@ -1492,16 +1493,6 @@ void intel_ddi_init(struct drm_device *dev, enum port 
port)
                return;
        }
 
-       if (port != PORT_A) {
-               hdmi_connector = malloc(sizeof(struct intel_connector),
-                   M_DRM, M_WAITOK | M_ZERO);
-               if (!hdmi_connector) {
-                       free(dp_connector, M_DRM);
-                       free(intel_dig_port, M_DRM);
-                       return;
-               }
-       }
-
        intel_encoder = &intel_dig_port->base;
        encoder = &intel_encoder->base;
 
@@ -1516,12 +1507,9 @@ void intel_ddi_init(struct drm_device *dev, enum port 
port)
        intel_encoder->get_hw_state = intel_ddi_get_hw_state;
 
        intel_dig_port->port = port;
-       intel_dig_port->port_reversal = I915_READ(DDI_BUF_CTL(port)) &
-                                       DDI_BUF_PORT_REVERSAL;
-       if (hdmi_connector)
-               intel_dig_port->hdmi.sdvox_reg = DDI_BUF_CTL(port);
-       else
-               intel_dig_port->hdmi.sdvox_reg = 0;
+       intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
+                                         (DDI_BUF_PORT_REVERSAL |
+                                          DDI_A_4_LANES);
        intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
 
        intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
@@ -1529,7 +1517,17 @@ void intel_ddi_init(struct drm_device *dev, enum port 
port)
        intel_encoder->cloneable = false;
        intel_encoder->hot_plug = intel_ddi_hot_plug;
 
-       if (hdmi_connector)
-               intel_hdmi_init_connector(intel_dig_port, hdmi_connector);
        intel_dp_init_connector(intel_dig_port, dp_connector);
+
+       if (intel_encoder->type != INTEL_OUTPUT_EDP) {
+               hdmi_connector = malloc(sizeof(struct intel_connector),
+                   M_DRM, M_WAITOK | M_ZERO);
+
+               if (!hdmi_connector) {
+                       return;
+               }
+
+               intel_dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port);
+               intel_hdmi_init_connector(intel_dig_port, hdmi_connector);
+       }
 }
diff --git sys/dev/pci/drm/i915/intel_drv.h sys/dev/pci/drm/i915/intel_drv.h
index 95d9cba..cc133c1 100644
--- sys/dev/pci/drm/i915/intel_drv.h
+++ sys/dev/pci/drm/i915/intel_drv.h
@@ -302,7 +302,7 @@ struct dip_infoframe {
 } __attribute__((packed));
 
 struct intel_hdmi {
-       u32 sdvox_reg;
+       u32 hdmi_reg;
        int ddc_bus;
        uint32_t color_range;
        bool has_hdmi_sink;
@@ -346,7 +346,7 @@ struct intel_dp {
 struct intel_digital_port {
        struct intel_encoder base;
        enum port port;
-       u32 port_reversal;
+       u32 saved_port_bits;
        struct intel_dp dp;
        struct intel_hdmi hdmi;
 };
@@ -397,7 +397,7 @@ extern void intel_attach_broadcast_rgb_property(struct 
drm_connector *connector)
 
 extern void intel_crt_init(struct drm_device *dev);
 extern void intel_hdmi_init(struct drm_device *dev,
-                           int sdvox_reg, enum port port);
+                           int hdmi_reg, enum port port);
 extern void intel_hdmi_init_connector(struct intel_digital_port 
*intel_dig_port,
                                      struct intel_connector *intel_connector);
 extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
diff --git sys/dev/pci/drm/i915/intel_hdmi.c sys/dev/pci/drm/i915/intel_hdmi.c
index d5c4817..613c160 100644
--- sys/dev/pci/drm/i915/intel_hdmi.c
+++ sys/dev/pci/drm/i915/intel_hdmi.c
@@ -48,7 +48,7 @@ assert_hdmi_port_disabled(struct intel_hdmi *intel_hdmi)
 
        enabled_bits = IS_HASWELL(dev) ? DDI_BUF_CTL_ENABLE : SDVO_ENABLE;
 
-       WARN(I915_READ(intel_hdmi->sdvox_reg) & enabled_bits,
+       WARN(I915_READ(intel_hdmi->hdmi_reg) & enabled_bits,
             "HDMI port enabled, expecting disabled\n");
 }
 
@@ -389,7 +389,7 @@ static void g4x_set_infoframes(struct drm_encoder *encoder,
                return;
        }
 
-       switch (intel_hdmi->sdvox_reg) {
+       switch (intel_hdmi->hdmi_reg) {
        case SDVOB:
                port = VIDEO_DIP_PORT_B;
                break;
@@ -445,7 +445,7 @@ static void ibx_set_infoframes(struct drm_encoder *encoder,
                return;
        }
 
-       switch (intel_hdmi->sdvox_reg) {
+       switch (intel_hdmi->hdmi_reg) {
        case HDMIB:
                port = VIDEO_DIP_PORT_B;
                break;
@@ -585,40 +585,40 @@ static void intel_hdmi_mode_set(struct drm_encoder 
*encoder,
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_crtc *intel_crtc = to_intel_crtc(encoder->crtc);
        struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
-       u32 sdvox;
+       u32 hdmi_val;
 
-       sdvox = SDVO_ENCODING_HDMI;
+       hdmi_val = SDVO_ENCODING_HDMI;
        if (!HAS_PCH_SPLIT(dev))
-               sdvox |= intel_hdmi->color_range;
+               hdmi_val |= intel_hdmi->color_range;
        if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
-               sdvox |= SDVO_VSYNC_ACTIVE_HIGH;
+               hdmi_val |= SDVO_VSYNC_ACTIVE_HIGH;
        if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
-               sdvox |= SDVO_HSYNC_ACTIVE_HIGH;
+               hdmi_val |= SDVO_HSYNC_ACTIVE_HIGH;
 
        if (intel_crtc->bpp > 24)
-               sdvox |= COLOR_FORMAT_12bpc;
+               hdmi_val |= COLOR_FORMAT_12bpc;
        else
-               sdvox |= COLOR_FORMAT_8bpc;
+               hdmi_val |= COLOR_FORMAT_8bpc;
 
        /* Required on CPT */
        if (intel_hdmi->has_hdmi_sink && HAS_PCH_CPT(dev))
-               sdvox |= HDMI_MODE_SELECT;
+               hdmi_val |= HDMI_MODE_SELECT;
 
        if (intel_hdmi->has_audio) {
                DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n",
                                 pipe_name(intel_crtc->pipe));
-               sdvox |= SDVO_AUDIO_ENABLE;
-               sdvox |= SDVO_NULL_PACKETS_DURING_VSYNC;
+               hdmi_val |= SDVO_AUDIO_ENABLE;
+               hdmi_val |= SDVO_NULL_PACKETS_DURING_VSYNC;
                intel_write_eld(encoder, adjusted_mode);
        }
 
        if (HAS_PCH_CPT(dev))
-               sdvox |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
+               hdmi_val |= PORT_TRANS_SEL_CPT(intel_crtc->pipe);
        else if (intel_crtc->pipe == PIPE_B)
-               sdvox |= SDVO_PIPE_B_SELECT;
+               hdmi_val |= SDVO_PIPE_B_SELECT;
 
-       I915_WRITE(intel_hdmi->sdvox_reg, sdvox);
-       POSTING_READ(intel_hdmi->sdvox_reg);
+       I915_WRITE(intel_hdmi->hdmi_reg, hdmi_val);
+       POSTING_READ(intel_hdmi->hdmi_reg);
 
        intel_hdmi->set_infoframes(encoder, adjusted_mode);
 }
@@ -631,7 +631,7 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder 
*encoder,
        struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
        u32 tmp;
 
-       tmp = I915_READ(intel_hdmi->sdvox_reg);
+       tmp = I915_READ(intel_hdmi->hdmi_reg);
 
        if (!(tmp & SDVO_ENABLE))
                return false;
@@ -655,7 +655,7 @@ static void intel_enable_hdmi(struct intel_encoder *encoder)
        if (intel_hdmi->has_audio)
                enable_bits |= SDVO_AUDIO_ENABLE;
 
-       temp = I915_READ(intel_hdmi->sdvox_reg);
+       temp = I915_READ(intel_hdmi->hdmi_reg);
 
        /* HW workaround for IBX, we need to move the port to transcoder A
         * before disabling it. */
@@ -672,21 +672,21 @@ static void intel_enable_hdmi(struct intel_encoder 
*encoder)
         * we do this anyway which shows more stable in testing.
         */
        if (HAS_PCH_SPLIT(dev)) {
-               I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE);
-               POSTING_READ(intel_hdmi->sdvox_reg);
+               I915_WRITE(intel_hdmi->hdmi_reg, temp & ~SDVO_ENABLE);
+               POSTING_READ(intel_hdmi->hdmi_reg);
        }
 
        temp |= enable_bits;
 
-       I915_WRITE(intel_hdmi->sdvox_reg, temp);
-       POSTING_READ(intel_hdmi->sdvox_reg);
+       I915_WRITE(intel_hdmi->hdmi_reg, temp);
+       POSTING_READ(intel_hdmi->hdmi_reg);
 
        /* HW workaround, need to write this twice for issue that may result
         * in first write getting masked.
         */
        if (HAS_PCH_SPLIT(dev)) {
-               I915_WRITE(intel_hdmi->sdvox_reg, temp);
-               POSTING_READ(intel_hdmi->sdvox_reg);
+               I915_WRITE(intel_hdmi->hdmi_reg, temp);
+               POSTING_READ(intel_hdmi->hdmi_reg);
        }
 }
 
@@ -698,7 +698,7 @@ static void intel_disable_hdmi(struct intel_encoder 
*encoder)
        u32 temp;
        u32 enable_bits = SDVO_ENABLE | SDVO_AUDIO_ENABLE;
 
-       temp = I915_READ(intel_hdmi->sdvox_reg);
+       temp = I915_READ(intel_hdmi->hdmi_reg);
 
        /* HW workaround for IBX, we need to move the port to transcoder A
         * before disabling it. */
@@ -708,12 +708,12 @@ static void intel_disable_hdmi(struct intel_encoder 
*encoder)
 
                if (temp & SDVO_PIPE_B_SELECT) {
                        temp &= ~SDVO_PIPE_B_SELECT;
-                       I915_WRITE(intel_hdmi->sdvox_reg, temp);
-                       POSTING_READ(intel_hdmi->sdvox_reg);
+                       I915_WRITE(intel_hdmi->hdmi_reg, temp);
+                       POSTING_READ(intel_hdmi->hdmi_reg);
 
                        /* Again we need to write this twice. */
-                       I915_WRITE(intel_hdmi->sdvox_reg, temp);
-                       POSTING_READ(intel_hdmi->sdvox_reg);
+                       I915_WRITE(intel_hdmi->hdmi_reg, temp);
+                       POSTING_READ(intel_hdmi->hdmi_reg);
 
                        /* Transcoder selection bits only update
                         * effectively on vblank. */
@@ -728,21 +728,21 @@ static void intel_disable_hdmi(struct intel_encoder 
*encoder)
         * we do this anyway which shows more stable in testing.
         */
        if (HAS_PCH_SPLIT(dev)) {
-               I915_WRITE(intel_hdmi->sdvox_reg, temp & ~SDVO_ENABLE);
-               POSTING_READ(intel_hdmi->sdvox_reg);
+               I915_WRITE(intel_hdmi->hdmi_reg, temp & ~SDVO_ENABLE);
+               POSTING_READ(intel_hdmi->hdmi_reg);
        }
 
        temp &= ~enable_bits;
 
-       I915_WRITE(intel_hdmi->sdvox_reg, temp);
-       POSTING_READ(intel_hdmi->sdvox_reg);
+       I915_WRITE(intel_hdmi->hdmi_reg, temp);
+       POSTING_READ(intel_hdmi->hdmi_reg);
 
        /* HW workaround, need to write this twice for issue that may result
         * in first write getting masked.
         */
        if (HAS_PCH_SPLIT(dev)) {
-               I915_WRITE(intel_hdmi->sdvox_reg, temp);
-               POSTING_READ(intel_hdmi->sdvox_reg);
+               I915_WRITE(intel_hdmi->hdmi_reg, temp);
+               POSTING_READ(intel_hdmi->hdmi_reg);
        }
 }
 
@@ -767,27 +767,6 @@ bool intel_hdmi_mode_fixup(struct drm_encoder *encoder,
        return true;
 }
 
-static bool g4x_hdmi_connected(struct intel_hdmi *intel_hdmi)
-{
-       struct drm_device *dev = intel_hdmi_to_dev(intel_hdmi);
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       uint32_t bit;
-
-       switch (intel_hdmi->sdvox_reg) {
-       case SDVOB:
-               bit = HDMIB_HOTPLUG_LIVE_STATUS;
-               break;
-       case SDVOC:
-               bit = HDMIC_HOTPLUG_LIVE_STATUS;
-               break;
-       default:
-               bit = 0;
-               break;
-       }
-
-       return I915_READ(PORT_HOTPLUG_STAT) & bit;
-}
-
 static enum drm_connector_status
 intel_hdmi_detect(struct drm_connector *connector, bool force)
 {
@@ -799,9 +778,6 @@ intel_hdmi_detect(struct drm_connector *connector, bool 
force)
        struct edid *edid;
        enum drm_connector_status status = connector_status_disconnected;
 
-       if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))
-               return status;
-
        intel_hdmi->has_hdmi_sink = false;
        intel_hdmi->has_audio = false;
        edid = drm_get_edid(connector,
@@ -1035,7 +1011,7 @@ void intel_hdmi_init_connector(struct intel_digital_port 
*intel_dig_port,
        }
 }
 
-void intel_hdmi_init(struct drm_device *dev, int sdvox_reg, enum port port)
+void intel_hdmi_init(struct drm_device *dev, int hdmi_reg, enum port port)
 {
        struct intel_digital_port *intel_dig_port;
        struct intel_encoder *intel_encoder;
@@ -1070,7 +1046,7 @@ void intel_hdmi_init(struct drm_device *dev, int 
sdvox_reg, enum port port)
        intel_encoder->cloneable = false;
 
        intel_dig_port->port = port;
-       intel_dig_port->hdmi.sdvox_reg = sdvox_reg;
+       intel_dig_port->hdmi.hdmi_reg = hdmi_reg;
        intel_dig_port->dp.output_reg = 0;
 
        intel_hdmi_init_connector(intel_dig_port, intel_connector);

Reply via email to