Re: [PATCH 1/2] PCI/LINK: bw_notification: Clear interrupt before enabling it

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

 



On 3/20/19 6:14 AM, Lukas Wunner wrote:
> 
> [EXTERNAL EMAIL]
> 
> When booting a MacBookPro9,1, duplicate link downtraining messages are
> logged for the devices directly attached to the two CPU-internal Root
> Ports of the Core i7 3615QM:  Once on device enumeration and once on
> enablement of the bandwidth notification interrupt on the Root Ports.
> 
> Duplicate messages do not occur with Root Ports on the PCH and Downstream
> Ports on the Thunderbolt controller:  Only a single message is logged for
> these, namely on device enumeration.
> 
> The reason for the duplicate messages is a stale interrupt in the Link
> Status register of the 3615QM's internal Root Ports.  Avoid by clearing
> the interrupt before enabling it.
> 
> An alternative approach would be to clear the interrupt already on device
> enumeration or to report link downtraining only if the speed has changed.
> That way, link downtraining occurring between device enumeration and
> enablement of the bandwidth notification interrupt could be catched.
> However clearing stale interrupts before enabling them is a standard
> operating procedure for any driver and keeping the two steps in one place
> makes the code easier to follow.
> 
> Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx>

Reviewed-by: Alexandru Gagniuc <alex.gagniuc@xxxxxxxxxxxx>

> ---
>   drivers/pci/pcie/bw_notification.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/pci/pcie/bw_notification.c b/drivers/pci/pcie/bw_notification.c
> index 001d6253ad48..69e6ba2558bf 100644
> --- a/drivers/pci/pcie/bw_notification.c
> +++ b/drivers/pci/pcie/bw_notification.c
> @@ -30,6 +30,8 @@ static void pcie_enable_link_bandwidth_notification(struct pci_dev *dev)
>   {
>   	u16 lnk_ctl;
>   
> +	pcie_capability_write_word(dev, PCI_EXP_LNKSTA, PCI_EXP_LNKSTA_LBMS);
> +
>   	pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &lnk_ctl);
>   	lnk_ctl |= PCI_EXP_LNKCTL_LBMIE;
>   	pcie_capability_write_word(dev, PCI_EXP_LNKCTL, lnk_ctl);
> 





[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux