At Tue, 11 Feb 2014 16:18:35 -0700,
Bjorn Helgaas wrote:
> 
> On Tue, Feb 11, 2014 at 06:52:30PM +0000, Rajat Jain wrote:
> > Hello Takashi,
> > 
> > > -----Original Message-----
> > > From: [email protected] [mailto:linux-pci-
> > > [email protected]] On Behalf Of Takashi Iwai
> > > Sent: Tuesday, February 11, 2014 3:39 AM
> > > To: Bjorn Helgaas
> > > Cc: Alex Williamson; [email protected]; linux-
> > > [email protected]
> > > Subject: [PATCH] PCI: pciehp: Remove surprise bit checks
> > > 
> > > Currently pciehp driver checks the surprise removal bit and handles
> > > the hotplug event only when the bit is set.  But there are devices
> > > that don't set that bit but yet expect the hotplug working, e.g. the
> > > PCI card reader on HP ProBook 445 and 455 laptops appears only when
> > > you insert a card, and it needs the hotplug event handling.
> > > 
> > > For fixing this, basically we may ignore the surprise bit and always
> > > handle the event.
> > 
> > Some of this has been taken care of in the recent changes to pciehcp (last 
> > night).
> > 
> > Please see
> > 
> > https://git.kernel.org/cgit/linux/kernel/git/helgaas/pci.git/commit/?h=pci/pciehp&id=a3eba3887960d00abb912fe3703cd3a058c721b8
> > 
> > Also, link state hotplug has been added as part of this patch set. Can you 
> > please try with Bjorn's latest pci tree?
> > 
> > With that, I think you should not see the issue you are describing, because 
> > if the PCIe Link comes up when you insert the card, it shall be added (now) 
> > irrespective of whether or not you have the surprise bit set.
> 
> Takashi's patch removed more HP_SUPR_RM() usage than yours, and I think
> those additional changes are probably necessary.  I rebased Takashi's patch
> on top of my pci/pciehp branch, resulting in the patch below.
> 
> I pushed this, so you can try the whole thing out at:
> 
> http://git.kernel.org/cgit/linux/kernel/git/helgaas/pci.git/commit/?h=pci/pciehp&id=237e0218bcad52d3df6746cd8d15a0d353bae84f

Thanks, I confirmed that the tree works.


Takashi

> 
> Bjorn
> 
> 
> 
> PCI: pciehp: Remove surprise bit checks
> 
> From: Takashi Iwai <[email protected]>
> 
> Currently pciehp driver checks the surprise removal bit and handles the
> hotplug event only when the bit is set.  But there are devices that don't
> set that bit, yet expect hotplug to work, e.g., the SD/MMC card reader on
> HP ProBook 445 and 455 laptops appears only when you insert a card, and it
> needs the hotplug event handling.
> 
> For fixing this, basically we may ignore the surprise bit and always handle
> the event.  The only big concern in the past was the KVM device assignment,
> but this has been fixed in KVM side (ignoring hotplug events during
> secondary bus resets), there should be no obstacle ahead.
> 
> The earlier discussion thread is found at:
>     https://lkml.kernel.org/r/s5h38vqjhk6.wl%[email protected]
> 
> [bhelgaas: rebase on Rajat's changes, remove HP_SUPR_RM() completely]
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70261
> Signed-off-by: Takashi Iwai <[email protected]>
> Signed-off-by: Bjorn Helgaas <[email protected]>
> ---
>  drivers/pci/hotplug/pciehp.h      |    1 -
>  drivers/pci/hotplug/pciehp_ctrl.c |    2 --
>  drivers/pci/hotplug/pciehp_hpc.c  |   11 +++++------
>  3 files changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h
> index 8a66866b8cf1..d2a67aa0e49d 100644
> --- a/drivers/pci/hotplug/pciehp.h
> +++ b/drivers/pci/hotplug/pciehp.h
> @@ -124,7 +124,6 @@ struct controller {
>  #define MRL_SENS(ctrl)               ((ctrl)->slot_cap & 
> PCI_EXP_SLTCAP_MRLSP)
>  #define ATTN_LED(ctrl)               ((ctrl)->slot_cap & PCI_EXP_SLTCAP_AIP)
>  #define PWR_LED(ctrl)                ((ctrl)->slot_cap & PCI_EXP_SLTCAP_PIP)
> -#define HP_SUPR_RM(ctrl)     ((ctrl)->slot_cap & PCI_EXP_SLTCAP_HPS)
>  #define EMI(ctrl)            ((ctrl)->slot_cap & PCI_EXP_SLTCAP_EIP)
>  #define NO_CMD_CMPL(ctrl)    ((ctrl)->slot_cap & PCI_EXP_SLTCAP_NCCS)
>  #define PSN(ctrl)            ((ctrl)->slot_cap >> 19)
> diff --git a/drivers/pci/hotplug/pciehp_ctrl.c 
> b/drivers/pci/hotplug/pciehp_ctrl.c
> index fec99a164d93..a4d29d24057d 100644
> --- a/drivers/pci/hotplug/pciehp_ctrl.c
> +++ b/drivers/pci/hotplug/pciehp_ctrl.c
> @@ -535,8 +535,6 @@ static void interrupt_event_handler(struct work_struct 
> *work)
>               break;
>       case INT_PRESENCE_ON:
>       case INT_PRESENCE_OFF:
> -             if (!HP_SUPR_RM(ctrl))
> -                     break;
>               ctrl_dbg(ctrl, "Surprise Removal\n");
>               handle_surprise_event(p_slot);
>               break;
> diff --git a/drivers/pci/hotplug/pciehp_hpc.c 
> b/drivers/pci/hotplug/pciehp_hpc.c
> index da4b0204b4f7..1076a51623b5 100644
> --- a/drivers/pci/hotplug/pciehp_hpc.c
> +++ b/drivers/pci/hotplug/pciehp_hpc.c
> @@ -628,17 +628,18 @@ int pciehp_reset_slot(struct slot *slot, int probe)
>  {
>       struct controller *ctrl = slot->ctrl;
>       struct pci_dev *pdev = ctrl_dev(ctrl);
> -     u16 stat_mask = 0, ctrl_mask = 0;
> +     u16 stat_mask, ctrl_mask;
>  
>       if (probe)
>               return 0;
>  
> -     if (HP_SUPR_RM(ctrl) && !ATTN_BUTTN(ctrl)) {
> +     ctrl_mask = PCI_EXP_SLTCTL_DLLSCE;
> +     stat_mask = PCI_EXP_SLTSTA_DLLSC;
> +
> +     if (!ATTN_BUTTN(ctrl)) {        /* as in pcie_enable_notification() */
>               ctrl_mask |= PCI_EXP_SLTCTL_PDCE;
>               stat_mask |= PCI_EXP_SLTSTA_PDC;
>       }
> -     ctrl_mask |= PCI_EXP_SLTCTL_DLLSCE;
> -     stat_mask |= PCI_EXP_SLTSTA_DLLSC;
>  
>       pcie_write_cmd(ctrl, 0, ctrl_mask);
>       if (pciehp_poll_mode)
> @@ -741,8 +742,6 @@ static inline void dbg_ctrl(struct controller *ctrl)
>                 ATTN_LED(ctrl)   ? "yes" : "no");
>       ctrl_info(ctrl, "  Power Indicator      : %3s\n",
>                 PWR_LED(ctrl)    ? "yes" : "no");
> -     ctrl_info(ctrl, "  Hot-Plug Surprise    : %3s\n",
> -               HP_SUPR_RM(ctrl) ? "yes" : "no");
>       ctrl_info(ctrl, "  EMI Present          : %3s\n",
>                 EMI(ctrl)        ? "yes" : "no");
>       ctrl_info(ctrl, "  Command Completed    : %3s\n",
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to