Skip to content

Commit

Permalink
Merge branch 'wwan-iosm-fixes'
Browse files Browse the repository at this point in the history
M Chetan Kumar says:

====================
net: wwan: iosm: fixes

This patch series contains iosm fixes.

PATCH1: Fix memory leak in ipc_pcie_read_bios_cfg.

PATCH2: Fix driver not working with INTEL_IOMMU disabled config.

PATCH3: Fix invalid mux header type.

PATCH4: Fix kernel build robot reported errors.

Please refer to individual commit message for details.

--
v2:
 * PATCH1: No Change
 * PATCH2: Kconfig change
           - Add dependency on PCI to resolve kernel build robot errors.
 * PATCH3: No Change
 * PATCH4: New (Fix kernel build robot errors)
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Nov 9, 2022
2 parents 742c60e + 980ec04 commit 5d04158
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 4 deletions.
2 changes: 1 addition & 1 deletion drivers/net/wwan/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ config RPMSG_WWAN_CTRL

config IOSM
tristate "IOSM Driver for Intel M.2 WWAN Device"
depends on INTEL_IOMMU
depends on PCI
select NET_DEVLINK
select RELAY if WWAN_DEBUGFS
help
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wwan/iosm/iosm_ipc_coredump.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/*
* Copyright (C) 2020-2021 Intel Corporation.
*/
#include <linux/vmalloc.h>

#include "iosm_ipc_coredump.h"

Expand Down
1 change: 1 addition & 0 deletions drivers/net/wwan/iosm/iosm_ipc_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/*
* Copyright (C) 2020-2021 Intel Corporation.
*/
#include <linux/vmalloc.h>

#include "iosm_ipc_chnl_cfg.h"
#include "iosm_ipc_coredump.h"
Expand Down
8 changes: 8 additions & 0 deletions drivers/net/wwan/iosm/iosm_ipc_imem_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ void ipc_imem_wwan_channel_init(struct iosm_imem *ipc_imem,
}

ipc_chnl_cfg_get(&chnl_cfg, ipc_imem->nr_of_channels);

if (ipc_imem->mmio->mux_protocol == MUX_AGGREGATION &&
ipc_imem->nr_of_channels == IPC_MEM_IP_CHL_ID_0) {
chnl_cfg.ul_nr_of_entries = IPC_MEM_MAX_TDS_MUX_AGGR_UL;
chnl_cfg.dl_nr_of_entries = IPC_MEM_MAX_TDS_MUX_AGGR_DL;
chnl_cfg.dl_buf_size = IPC_MEM_MAX_ADB_BUF_SIZE;
}

ipc_imem_channel_init(ipc_imem, IPC_CTYPE_WWAN, chnl_cfg,
IRQ_MOD_OFF);

Expand Down
1 change: 1 addition & 0 deletions drivers/net/wwan/iosm/iosm_ipc_mux.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#define IPC_MEM_MAX_UL_DG_ENTRIES 100
#define IPC_MEM_MAX_TDS_MUX_AGGR_UL 60
#define IPC_MEM_MAX_TDS_MUX_AGGR_DL 60

#define IPC_MEM_MAX_ADB_BUF_SIZE (16 * 1024)
#define IPC_MEM_MAX_UL_ADB_BUF_SIZE IPC_MEM_MAX_ADB_BUF_SIZE
Expand Down
18 changes: 15 additions & 3 deletions drivers/net/wwan/iosm/iosm_ipc_pcie.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ static void ipc_pcie_config_init(struct iosm_pcie *ipc_pcie)
*/
static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
{
enum ipc_pcie_sleep_state sleep_state = IPC_PCIE_D0L12;
union acpi_object *object;
acpi_handle handle_acpi;

Expand All @@ -242,18 +243,23 @@ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
}

object = acpi_evaluate_dsm(handle_acpi, &wwan_acpi_guid, 0, 3, NULL);
if (!object)
goto default_ret;

if (object->integer.value == 3)
sleep_state = IPC_PCIE_D3L2;

if (object && object->integer.value == 3)
return IPC_PCIE_D3L2;
kfree(object);

default_ret:
return IPC_PCIE_D0L12;
return sleep_state;
}

static int ipc_pcie_probe(struct pci_dev *pci,
const struct pci_device_id *pci_id)
{
struct iosm_pcie *ipc_pcie = kzalloc(sizeof(*ipc_pcie), GFP_KERNEL);
int ret;

pr_debug("Probing device 0x%X from the vendor 0x%X", pci_id->device,
pci_id->vendor);
Expand Down Expand Up @@ -286,6 +292,12 @@ static int ipc_pcie_probe(struct pci_dev *pci,
goto pci_enable_fail;
}

ret = dma_set_mask(ipc_pcie->dev, DMA_BIT_MASK(64));
if (ret) {
dev_err(ipc_pcie->dev, "Could not set PCI DMA mask: %d", ret);
return ret;
}

ipc_pcie_config_aspm(ipc_pcie);
dev_dbg(ipc_pcie->dev, "PCIe device enabled.");

Expand Down

0 comments on commit 5d04158

Please sign in to comment.