On Sun, 2007-06-10 at 00:59 +0200, zergavis wrote: > Hi, > > It's sounds silly, but new iwlwifi-0.0.25 crash down Xorg server. The > problem is intel i810 video driver. > > In my toshiba A200 I've got intel945GM pci-e video card. It run > normal on xf-video-i810 driver (kernel support of 945 is experimental) > on archlinux. > > When I install iwlwifi-0.0.25 (make, make install) for 4965AGN and > restart xserver, it crash... The attached patch fixes this problem. Thanks for reporting. John, can you include this in wireless-dev GIT? Thanks, -yi > Error log: > > (EE) I810(0): V_BIOS Address 0x80 out of range > (EE) I810(0): VBE initialization failed. > (EE) Screen(s) found, but none have a usable configuration. > > Fatal server error: > no screens found > > Now i just go to iwlwifi-0.0.25 and make uninstall. Server restart - and > xorg run perfectly, but iwl4965 is uninstalled :( > > xorg.conf and other X configuration files or drivers are not changing during > this process. Only install and uninstall of iwlwifi-0.0.25... > > Is there any known solution to fix this up? > > regards, > pawel > > - > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html
commit 1ea165c71112f5f973b51378742e8e3204250149 Author: Hong Liu <hong.liu@xxxxxxxxx> Date: Fri Jun 15 14:35:31 2007 +0800 iwlwifi: Fix X can't start after iwl4965 is loaded The patch fixed X can't start after iwl4965 is loaded. The ucode will use some wrong DMA address when keep_warm area is not setup correctly and overwrite the video BIOS area, which made X server fail. Signed-off-by: Hong Liu <hong.liu@xxxxxxxxx> Signed-off-by: Zhu Yi <yi.zhu@xxxxxxxxx> diff --git a/drivers/net/wireless/mac80211/iwlwifi/iwl-4965.c b/drivers/net/wireless/mac80211/iwlwifi/iwl-4965.c index 20c4c2a..6541bae 100644 --- a/drivers/net/wireless/mac80211/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/mac80211/iwlwifi/iwl-4965.c @@ -258,15 +258,21 @@ static int iwl4965_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq) return 0; } -static void iwl4965_kw_init(struct iwl_priv *priv) +static int iwl4965_kw_init(struct iwl_priv *priv) { - return; - if (iwl_grab_restricted_access(priv)) - return; + int rc = 0; + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + if ((rc = iwl_grab_restricted_access(priv))) + goto out; iwl_write_restricted(priv, IWL_FH_KW_MEM_ADDR_REG, (priv->kw.dma_addr >> 4)); iwl_release_restricted_access(priv); +out: + spin_unlock_irqrestore(&priv->lock, flags); + return rc; } static int iwl4965_kw_alloc(struct iwl_priv *priv) @@ -329,7 +335,11 @@ static int iwl4965_txq_ctx_reset(struct iwl_priv *priv) iwl_release_restricted_access(priv); spin_unlock_irqrestore(&priv->lock, flags); - iwl4965_kw_init(priv); + rc = iwl4965_kw_init(priv); + if (rc) { + IWL_ERROR("kw_init failed\n"); + goto error_reset; + } /* Tx queue(s) */ for (txq_id = 0; txq_id < priv->hw_setting.max_queue_number; txq_id++) {