RE: [PATCH 3/4] hid: intel-ish-hid: ipc: Fix driver reinit failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Srinivas Pandruvada [mailto:srinivas.pandruvada@xxxxxxxxxxxxxxx]
> Sent: Sunday, October 16, 2016 12:23 AM
> To: jikos@xxxxxxxxxx
> Cc: linux-input@xxxxxxxxxxxxxxx; Xu, Even <even.xu@xxxxxxxxx>
> Subject: [PATCH 3/4] hid: intel-ish-hid: ipc: Fix driver reinit failure
> 
> From: Even Xu <even.xu@xxxxxxxxx>
> 
> When built as a module, modprobe followed by rmmod can fail because DMA
> was still active. So to fix this, DMA needs to be disabled during module exit.
> 
> This change disables DMA during modules exit and change the ISH PCI device
> status to D3.
> 
> Signed-off-by: Even Xu <even.xu@xxxxxxxxx>
> Acked-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
> ---
>  drivers/hid/intel-ish-hid/ipc/ipc.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-ish-hid/ipc/ipc.c
> index 0e0dfa6..66c6755 100644
> --- a/drivers/hid/intel-ish-hid/ipc/ipc.c
> +++ b/drivers/hid/intel-ish-hid/ipc/ipc.c
> @@ -905,6 +905,26 @@ struct ishtp_device *ish_dev_init(struct pci_dev *pdev)
>   */
>  void	ish_device_disable(struct ishtp_device *dev)
>  {
> +	struct pci_dev *pdev = dev->pdev;
> +	uint16_t csr;
> +
> +	if (!pdev)
> +		return;
> +
> +	/* Disable dma communication between FW and host */
> +	if (ish_disable_dma(dev)) {
> +		dev_err(&pdev->dev,
> +			"Can't reset - stuck with DMA in-progress\n");
> +		return;
> +	}
> +

> +	/* Put ISH to D3 state for power saving */
> +	pci_read_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, &csr);
> +
> +	csr &= ~PCI_PM_CTRL_STATE_MASK;
> +	csr |= PCI_D3hot;
> +	pci_write_config_word(pdev, pdev->pm_cap + PCI_PM_CTRL, csr);
> +

Do you think it would be cleaner if we use pci_set_power_state() ?
http://lxr.free-electrons.com/source/drivers/pci/pci.c#L877

>  	dev->dev_state = ISHTP_DEV_DISABLED;
>  	ish_clr_host_rdy(dev);
>  }
> --
> 2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux