Skip to contentSkip to conversation

pull request: iwlwifi 2015-06-15

PATCH In review Grumbach, Emmanuel 2 participants 13 messages Jul 12, 2015 – Jul 17, 2015

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

SGkgS2FsbGUsDQoNClRoaXMgaXMgdGhlIGZpcnN0IHB1bGwgcmVxdWVzdCBvZiBmaXhlcyBmb3Ig NC4yLiBBIGZldyBvZiB0aGUgcGF0Y2hlcw0KaGVyZSBhcmUgQ0NlZCB0byBzdGFibGUuIEJlc2lk ZXMgZml4IGZvciAoaGFyZCB0byBoaXQpIGNyYXNoZXMgdGhlcmUgYXJlDQphIGJ1bmNoIG9mIGZp eGVzIGZvciA4MDAwIGRldmljZXMgd2hpY2ggYXJlIG5vdyB1bmRlcmdvaW5nIHRoZSBmaW5hbA0K cm91bmQgb2YgdGVzdHMuDQpMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBpc3N1ZXMhDQoNCmVtbWFu dWVsDQoNCg0KVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCBlMDQ1NjcxN2U0ODNi YjhhOTQzMWI4MGE1YmRjOTlhOTI4YjliMDAzOg0KDQogIE1lcmdlIGdpdDovL2dpdC5rZXJuZWwu b3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtbmV4dCAoMjAxNS0wNi0yNCAx Njo0OTo0OSAtMDcwMCkNCg0KYXJlIGF2YWlsYWJsZSBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkgYXQ6 DQoNCiAgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaXds d2lmaS9pd2x3aWZpLWZpeGVzLmdpdCB0YWdzL2l3bHdpZmktZm9yLWthbGxlLTIwMTUtMDYtMTIN Cg0KZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIGJlODhhMWFkYTliOTdiYjAxNjE5NmI3 ZjRhMWZjMmZlMmY3OTg1Mjk6DQoNCiAgaXdsd2lmaTogbnZtOiByZW1vdmUgbWFjIGFkZHJlc3Mg Ynl0ZSBzd2FwcGluZyBpbiA4MDAwIGZhbWlseSAoMjAxNS0wNy0xMiAxOTo1NDoxOSArMDMwMCkN Cg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKiBidWcgZml4ZXMgc3BlY2lmaWMgZm9yIDgwMDAgc2VyaWVzDQoqIGZpeCBh IGNyYXNoIGluIHRpbWUgZXZlbnRzDQoqIGZpeCBhIGNyYXNoIGluIFBDSWUgdHJhbnNwb3J0DQoq IGZpeCBCVCBDb2V4IGNvZGUgdGhhdCBwcmV2ZW50ZWQgYXNzb2NpYXRpb24gb24gY2VydGFpbg0K ICAgICAgICBkZXZpY2VzICgzMTYwKS4NCiogcmV2ZXJ0IHRoZSBuZXcgUkJEIGFsbG9jYXRpb24g bW9kZWwgYmVjYXVzZSBpdCBpbnRyb2R1Y2VkDQoJYSBidWcgd2hlbiBydW5uaW5nIG9uIHdlYWsg Vk0gc2V0dXBzLg0KKiBhIG5ldyBkZXZpY2UgSURzDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkF2cmFoYW0gU3Rlcm4g KDEpOg0KICAgICAgaXdsd2lmaTogbXZtOiBBZGQgcHJlZW1wdGl2ZSBmbGFnIHRvIHNjaGV1bGRl ZCBzY2FuDQoNCkRyZXlmdXNzLCBIYWltICgxKToNCiAgICAgIGl3bHdpZmk6IHBjaWU6IEZpeCBi dWcgaW4gTklDJ3MgUE0gcmVnaXN0ZXJzIGFjY2Vzcw0KDQpFbW1hbnVlbCBHcnVtYmFjaCAoNCk6 DQogICAgICBpd2x3aWZpOiBtdm06IGZpeCBhbnRlbm5hIHNlbGVjdGlvbiB3aGVuIEJUIGlzIGFj dGl2ZQ0KICAgICAgaXdsd2lmaTogcGNpZTogZG9uJ3QgcGFuaWMgaWYgcGNpZSB0cmFuc3BvcnQg YWxsb2MgZmFpbHMNCiAgICAgIGl3bHdpZmk6IHBjaWU6IHByZXBhcmUgdGhlIGRldmljZSBiZWZv cmUgYWNjZXNzaW5nIGl0DQogICAgICBSZXZlcnQgIml3bHdpZmk6IHBjaWU6IE5ldyBSQkQgYWxs b2NhdGlvbiBtb2RlbCINCg0KSm9oYW5uZXMgQmVyZyAoMSk6DQogICAgICBpd2x3aWZpOiBtdm06 IGNoZWNrIHRpbWUtZXZlbnQgdmlmIHRvIGF2b2lkIGJhZCBkZWxldGlvbg0KDQpMaWFkIEthdWZt YW4gKDEpOg0KICAgICAgaXdsd2lmaTogbnZtOiByZW1vdmUgbWFjIGFkZHJlc3MgYnl0ZSBzd2Fw cGluZyBpbiA4MDAwIGZhbWlseQ0KDQpNYXR0aSBHb3R0bGllYiAoMSk6DQogICAgICBpd2x3aWZp OiBtdm06IEF2b2lkIGFjY2Vzc2luZyBOdWxsIHBvaW50ZXIgd2hlbiBzZXR0aW5nIGlndGsNCg0K T3JlbiBHaXZvbiAoMSk6DQogICAgICBpd2x3aWZpOiBlZGl0IHRoZSAzMTY1IHNlcmllcyBhbmQg ODAwMCBzZXJpZXMgUENJIElEcw0KDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wt ZmguaCAgICAgICAgICB8ICAgNiArKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXds LW52bS1wYXJzZS5jICAgfCAgMTIgKystDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9t dm0vZnctYXBpLXNjYW4uaCB8ICAgMyArLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkv bXZtL3NjYW4uYyAgICAgICAgfCAgIDMgKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkv bXZtL3N0YS5jICAgICAgICAgfCAgIDMgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZp L212bS90aW1lLWV2ZW50LmMgIHwgICAyICstDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lm aS9tdm0vdHguYyAgICAgICAgICB8ICAgMiArLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdp ZmkvcGNpZS9kcnYuYyAgICAgICAgfCAgIDUgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3 aWZpL3BjaWUvaW50ZXJuYWwuaCAgIHwgIDUxICsrLS0tLS0tLS0tDQogZHJpdmVycy9uZXQvd2ly ZWxlc3MvaXdsd2lmaS9wY2llL3J4LmMgICAgICAgICB8IDQxNCArKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5j ICAgICAgfCAgNTIgKysrKysrKy0tLS0tDQogMTEgZmlsZXMgY2hhbmdlZCwgMTQzIGluc2VydGlv bnMoKyksIDQxMCBkZWxldGlvbnMoLSkNCg0K

#1 lore raw

PATCH 1/10 iwlwifi: mvm: fix antenna selection when BT is active

When BT is active, we want to avoid the shared antenna for management frame to make sure we don't disturb BT. There was a bug in that code because it chose the antenna BIT(ANT_A) where ANT_A is already a bitmap (0x1). This means that the antenna chosen in the end was ANT_B. While this is not optimal on devices with 2 antennas (it'd disturb BT), it is critical on single antenna devices like 3160 which couldn't connect at all when BT was active.

This fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=97181

CC <[email protected]> [3.17+]
Fixes 34c8b24ff284 ("iwlwifi: mvm: BT Coex - avoid the shared antenna for management frames")
---
 drivers/net/wireless/iwlwifi/mvm/tx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/tx.c +1 -1
index 7ba7a118..8911686 100644
@@ -252,7 +252,7 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,
 
 	if (info->band == IEEE80211_BAND_2GHZ &&
 	    !iwl_mvm_bt_coex_is_shared_ant_avail(mvm))
-		rate_flags = BIT(mvm->cfg->non_shared_ant) << RATE_MCS_ANT_POS;
+		rate_flags = mvm->cfg->non_shared_ant << RATE_MCS_ANT_POS;
 	else
 		rate_flags =
 			BIT(mvm->mgmt_last_antenna_idx) << RATE_MCS_ANT_POS;
Signature · 1 line
2.1.4
#2 lore raw

PATCH 2/10 iwlwifi: mvm: Avoid accessing Null pointer when setting igtk

In reply to Grumbach, Emmanuel

From: Matti Gottlieb <[email protected]>

Sometimes when setting an igtk key the station maybe NULL. In the of case igtk the function will skip to the end, and try to print sta->addr, if sta is Null - we will access a Null pointer.

Avoid accessing a Null pointer when setting a igtk key & the sta == NULL, and print a default MAC address instead.

---
 drivers/net/wireless/iwlwifi/mvm/sta.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/sta.c +2 -1
index d68dc69..26f076e 100644
@@ -1401,6 +1401,7 @@ int iwl_mvm_set_sta_key(struct iwl_mvm *mvm,
 	bool mcast = !(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE);
 	u8 sta_id;
 	int ret;
+	static const u8 __maybe_unused zero_addr[ETH_ALEN] = {0};
 
 	lockdep_assert_held(&mvm->mutex);
 
@@ -1467,7 +1468,7 @@ int iwl_mvm_set_sta_key(struct iwl_mvm *mvm,
 end:
 	IWL_DEBUG_WEP(mvm, "key: cipher=%x len=%d idx=%d sta=%pM ret=%d\n",
 		      keyconf->cipher, keyconf->keylen, keyconf->keyidx,
-		      sta->addr, ret);
+		      sta ? sta->addr : zero_addr, ret);
 	return ret;
 }
 
Signature · 1 line
2.1.4
#3 lore raw

PATCH 3/10 iwlwifi: pcie: Fix bug in NIC's PM registers access

In reply to Grumbach, Emmanuel

From: "Dreyfuss, Haim" <[email protected]>

While cleanig the access to those hw-dependent registers, instead of using the product family type, wrong condition was added mistakenly and enabled 8000 family devices a forbidden access to HW registers, fix it.

Fixes 95411d0455cc ("iwlwifi: pcie: Control access to the NIC's PM registers via iwl_cfg")
---
 drivers/net/wireless/iwlwifi/pcie/trans.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +1 -1
index 43ae658..608ba1e 100644
@@ -182,7 +182,7 @@ static void iwl_trans_pcie_write_shr(struct iwl_trans *trans, u32 reg, u32 val)
 
 static void iwl_pcie_set_pwr(struct iwl_trans *trans, bool vaux)
 {
-	if (!trans->cfg->apmg_not_supported)
+	if (trans->cfg->apmg_not_supported)
 		return;
 
 	if (vaux && pci_pme_capable(to_pci_dev(trans->dev), PCI_D3cold))
Signature · 1 line
2.1.4
#4 lore raw

PATCH 4/10 iwlwifi: pcie: don't panic if pcie transport alloc fails

In reply to Grumbach, Emmanuel

iwl_trans_pcie_alloc needs to return a non-zero value if it fails. Otherwise the iwl_drv_start will think that the allocation succeeded.
Remove the duplication of err and ret variable and use ret which is the name we usually use in other places of the driver.

Fixes c278754a21e6 ("iwlwifi: mvm: support family 8000 B2/C steps")
---
 drivers/net/wireless/iwlwifi/pcie/trans.c | 44 +++++++++++++++----------------
 1 file changed, 22 insertions(+), 22 deletions(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +22 -22
index 608ba1e..fe61d0a 100644
@@ -2459,7 +2459,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	struct iwl_trans_pcie *trans_pcie;
 	struct iwl_trans *trans;
 	u16 pci_cmd;
-	int err;
+	int ret;
 
 	trans = iwl_trans_alloc(sizeof(struct iwl_trans_pcie),
 				&pdev->dev, cfg, &trans_ops_pcie, 0);
@@ -2474,8 +2474,8 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	spin_lock_init(&trans_pcie->ref_lock);
 	init_waitqueue_head(&trans_pcie->ucode_write_waitq);
 
-	err = pci_enable_device(pdev);
-	if (err)
+	ret = pci_enable_device(pdev);
+	if (ret)
 		goto out_no_pci;
 
 	if (!cfg->base_params->pcie_l1_allowed) {
@@ -2491,23 +2491,23 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 
 	pci_set_master(pdev);
 
-	err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36));
-	if (!err)
-		err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(36));
-	if (err) {
-		err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
-		if (!err)
-			err = pci_set_consistent_dma_mask(pdev,
+	ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(36));
+	if (!ret)
+		ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(36));
+	if (ret) {
+		ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
+		if (!ret)
+			ret = pci_set_consistent_dma_mask(pdev,
 							  DMA_BIT_MASK(32));
 		/* both attempts failed: */
-		if (err) {
+		if (ret) {
 			dev_err(&pdev->dev, "No suitable DMA available\n");
 			goto out_pci_disable_device;
 		}
 	}
 
-	err = pci_request_regions(pdev, DRV_NAME);
-	if (err) {
+	ret = pci_request_regions(pdev, DRV_NAME);
+	if (ret) {
 		dev_err(&pdev->dev, "pci_request_regions failed\n");
 		goto out_pci_disable_device;
 	}
@@ -2515,7 +2515,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	trans_pcie->hw_base = pci_ioremap_bar(pdev, 0);
 	if (!trans_pcie->hw_base) {
 		dev_err(&pdev->dev, "pci_ioremap_bar failed\n");
-		err = -ENODEV;
+		ret = -ENODEV;
 		goto out_pci_release_regions;
 	}
 
@@ -2527,9 +2527,9 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	trans_pcie->pci_dev = pdev;
 	iwl_disable_interrupts(trans);
 
-	err = pci_enable_msi(pdev);
-	if (err) {
-		dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", err);
+	ret = pci_enable_msi(pdev);
+	if (ret) {
+		dev_err(&pdev->dev, "pci_enable_msi failed(0X%x)\n", ret);
 		/* enable rfkill interrupt: hw bug w/a */
 		pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
 		if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
@@ -2547,7 +2547,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	 */
 	if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
 		unsigned long flags;
-		int ret;
 
 		trans->hw_rev = (trans->hw_rev & 0xfff0) |
 				(CSR_HW_REV_STEP(trans->hw_rev << 2) << 2);
@@ -2591,13 +2590,14 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 	/* Initialize the wait queue for commands */
 	init_waitqueue_head(&trans_pcie->wait_command_queue);
 
-	if (iwl_pcie_alloc_ict(trans))
+	ret = iwl_pcie_alloc_ict(trans);
+	if (ret)
 		goto out_pci_disable_msi;
 
-	err = request_threaded_irq(pdev->irq, iwl_pcie_isr,
+	ret = request_threaded_irq(pdev->irq, iwl_pcie_isr,
 				   iwl_pcie_irq_handler,
 				   IRQF_SHARED, DRV_NAME, trans);
-	if (err) {
+	if (ret) {
 		IWL_ERR(trans, "Error allocating IRQ %d\n", pdev->irq);
 		goto out_free_ict;
 	}
@@ -2617,5 +2617,5 @@ out_pci_disable_device:
 	pci_disable_device(pdev);
 out_no_pci:
 	iwl_trans_free(trans);
-	return ERR_PTR(err);
+	return ERR_PTR(ret);
 }
Signature · 1 line
2.1.4
#5 lore raw

PATCH 5/10 iwlwifi: pcie: prepare the device before accessing it

In reply to Grumbach, Emmanuel

For 8000 series, we need to access the device to know what firmware to load. Before we do so, we need to prepare the device otherwise we might not be able to access the hardware.

Fixes c278754a21e6 ("iwlwifi: mvm: support family 8000 B2/C steps")
---
 drivers/net/wireless/iwlwifi/pcie/trans.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/net/wireless/iwlwifi/pcie/trans.c +6 -0
index fe61d0a..6203c4a 100644
@@ -2551,6 +2551,12 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 		trans->hw_rev = (trans->hw_rev & 0xfff0) |
 				(CSR_HW_REV_STEP(trans->hw_rev << 2) << 2);
 
+		ret = iwl_pcie_prepare_card_hw(trans);
+		if (ret) {
+			IWL_WARN(trans, "Exit HW not ready\n");
+			goto out_pci_disable_msi;
+		}
+
 		/*
 		 * in-order to recognize C step driver should read chip version
 		 * id located at the AUX bus MISC address space.
Signature · 1 line
2.1.4
#6 lore raw

PATCH 6/10 iwlwifi: mvm: check time-event vif to avoid bad deletion

In reply to Grumbach, Emmanuel

From: Johannes Berg <[email protected]>

The time event is initialized relatively late in interface (mvmvif) initialization, so it's possible to fail before that happens. As a consequence, the driver will crash if it ever tries to delete this time event in case initialization was unsuccessful.

Avoid this by using the time event's vif pointer to indicate validity. The vif pointer is != NULL whenever the id is != TE_MAX, except for this special error case where the vif pointer will have the correct property (as the whole memory is cleared on allocation) whereas the id is 0, causing a crash in trying to delete the time event from the list.

---
 drivers/net/wireless/iwlwifi/mvm/time-event.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/time-event.c +1 -1
index d24b6a8..e472729 100644
@@ -86,7 +86,7 @@ void iwl_mvm_te_clear_data(struct iwl_mvm *mvm,
 {
 	lockdep_assert_held(&mvm->time_event_lock);
 
-	if (te_data->id == TE_MAX)
+	if (!te_data->vif)
 		return;
 
 	list_del(&te_data->list);
Signature · 1 line
2.1.4
#7 lore raw

PATCH 7/10 iwlwifi: edit the 3165 series and 8000 series PCI IDs

In reply to Grumbach, Emmanuel

From: Oren Givon <[email protected]>

Add new 3165 devices support.
Add one new 8000 series device support.
Remove support for 0x0000, 0xC030 and 0xD030 sub-system IDs in the 8000 series.

---
 drivers/net/wireless/iwlwifi/pcie/drv.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/net/wireless/iwlwifi/pcie/drv.c +3 -2
index 2ed1e4d..9f65c1c 100644
@@ -368,12 +368,14 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
 /* 3165 Series */
 	{IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3165, 0x4012, iwl3165_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x3166, 0x4212, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3165, 0x4410, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3165, 0x4510, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3165, 0x4110, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3166, 0x4310, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3166, 0x4210, iwl3165_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x3165, 0x8010, iwl3165_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x3165, 0x8110, iwl3165_2ac_cfg)},
 
 /* 7265 Series */
 	{IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
@@ -426,9 +428,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
 	{IWL_PCI_DEVICE(0x24F4, 0x1130, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F4, 0x1030, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F3, 0xC010, iwl8260_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x24F3, 0xC110, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F3, 0xD010, iwl8260_2ac_cfg)},
-	{IWL_PCI_DEVICE(0x24F4, 0xC030, iwl8260_2ac_cfg)},
-	{IWL_PCI_DEVICE(0x24F4, 0xD030, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F3, 0xC050, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F3, 0xD050, iwl8260_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x24F3, 0x8010, iwl8260_2ac_cfg)},
Signature · 1 line
2.1.4
#9 lore raw

PATCH 8/10 iwlwifi: mvm: Add preemptive flag to scheulded scan

In reply to Grumbach, Emmanuel

From: Avraham Stern <[email protected]>

Add preemptive flag to scheduled scan command flags. Without this flag, all scan requests after scheduled scan was started will be delayed until scheduled scan stops. As a result, P2P_FIND will be blocked while scheduled scan is active.
This flag was omitted during refactoring.

---
 drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 3 ++-
 drivers/net/wireless/iwlwifi/mvm/scan.c        | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +2 -1
index 5e4cbdb..737774a 100644
@@ -660,7 +660,8 @@ struct iwl_scan_config {
  * iwl_umac_scan_flags
  *@IWL_UMAC_SCAN_FLAG_PREEMPTIVE: scan process triggered by this scan request
  *	can be preempted by other scan requests with higher priority.
- *	The low priority scan is aborted.
+ *	The low priority scan will be resumed when the higher proirity scan is
+ *	completed.
  *@IWL_UMAC_SCAN_FLAG_START_NOTIF: notification will be sent to the driver
  *	when scan starts.
  */
drivers/net/wireless/iwlwifi/mvm/scan.c +3 -0
index 5de1449..5000bfcd 100644
@@ -1109,6 +1109,9 @@ static int iwl_mvm_scan_umac(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 	cmd->uid = cpu_to_le32(uid);
 	cmd->general_flags = cpu_to_le32(iwl_mvm_scan_umac_flags(mvm, params));
 
+	if (type == IWL_MVM_SCAN_SCHED)
+		cmd->flags = cpu_to_le32(IWL_UMAC_SCAN_FLAG_PREEMPTIVE);
+
 	if (iwl_mvm_scan_use_ebs(mvm, vif, n_iterations))
 		cmd->channel_flags = IWL_SCAN_CHANNEL_FLAG_EBS |
 				     IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
Signature · 1 line
2.1.4
#10 lore raw

PATCH 9/10 Revert "iwlwifi: pcie: New RBD allocation model"

In reply to Grumbach, Emmanuel

This reverts commit 5f17570354f91275b0a37a4da33d29a2ab57d32e.

This patch introduced a high latency in buffer allocation under extreme load. This latency caused a firmwre crash. The same scenario works fine with this patch reverted.

---
 drivers/net/wireless/iwlwifi/iwl-fh.h        |   6 +
 drivers/net/wireless/iwlwifi/pcie/internal.h |  51 +---
 drivers/net/wireless/iwlwifi/pcie/rx.c       | 414 ++++++---------------------
 3 files changed, 97 insertions(+), 374 deletions(-)
drivers/net/wireless/iwlwifi/iwl-fh.h +6 -0
index d560648..d45dc02 100644
@@ -438,6 +438,12 @@ static inline unsigned int FH_MEM_CBBC_QUEUE(unsigned int chnl)
 #define RX_QUEUE_MASK                         255
 #define RX_QUEUE_SIZE_LOG                     8
 
+/*
+ * RX related structures and functions
+ */
+#define RX_FREE_BUFFERS 64
+#define RX_LOW_WATERMARK 8
+
 /**
  * struct iwl_rb_status - reserve buffer status
  * 	host memory mapped FH registers
drivers/net/wireless/iwlwifi/pcie/internal.h +8 -43

98 lines not on this page · raw message

drivers/net/wireless/iwlwifi/pcie/rx.c +83 -331

590 lines not on this page · raw message

Signature · 1 line
2.1.4
#11 lore raw

PATCH 10/10 iwlwifi: nvm: remove mac address byte swapping in 8000 family

In reply to Grumbach, Emmanuel

From: Liad Kaufman <[email protected]>

This fixes the byte order copying in the MAO (Mac Override Section) section from the PNVM, as the byte swapping is not required anymore in the 8000 family. Due to the byte swapping, the driver was reporting an incorrect MAC adddress.

---
 drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/net/wireless/iwlwifi/iwl-nvm-parse.c +5 -7
index 80fefe7..3b8e85e 100644
@@ -540,13 +540,11 @@ static void iwl_set_hw_address_family_8000(struct device *dev,
 		hw_addr = (const u8 *)(mac_override +
 				 MAC_ADDRESS_OVERRIDE_FAMILY_8000);
 
-		/* The byte order is little endian 16 bit, meaning 214365 */
-		data->hw_addr[0] = hw_addr[1];
-		data->hw_addr[1] = hw_addr[0];
-		data->hw_addr[2] = hw_addr[3];
-		data->hw_addr[3] = hw_addr[2];
-		data->hw_addr[4] = hw_addr[5];
-		data->hw_addr[5] = hw_addr[4];
+		/*
+		 * Store the MAC address from MAO section.
+		 * No byte swapping is required in MAO section
+		 */
+		memcpy(data->hw_addr, hw_addr, ETH_ALEN);
 
 		/*
 		 * Force the use of the OTP MAC address in case of reserved MAC
Signature · 1 line
2.1.4
#8 lore raw

Re: [PATCH 07/10] iwlwifi: edit the 3165 series and 8000 series PCI IDs

In reply to Emmanuel Grumbach
Quoted 6 lines · Emmanuel Grumbach

From: Oren Givon <[email protected]>

Add new 3165 devices support.
Add one new 8000 series device support.
Remove support for 0x0000, 0xC030 and 0xD030 sub-system IDs in the 8000 series.

The commit log doesn't mention anything _why_ the three ids are removed. In the future please document that so that people don't need to guess.

Signature · 1 line
Kalle Valo
#12 lore raw
In reply to Grumbach, Emmanuel
Quoted 9 lines · Emmanuel

This is the first pull request of fixes for 4.2. A few of the patches here are CCed to stable. Besides fix for (hard to hit) crashes there are a bunch of fixes for 8000 devices which are now undergoing the final round of tests.
Let me know if you have issues!

emmanuel

Quoted 8 lines

The following changes since commit e0456717e483bb8a9431b80a5bdc99a928b9b003:

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next (2015-06-24 16:49:49 -0700)

are available in the git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git tags/iwlwifi-for-kalle-2015-06-12

Thanks, pulled.

Signature · 1 line
Kalle Valo