On Tue, Aug 01, 2023 at 10:31:42AM +0530, Krishna Chaitanya Chundru wrote: > > On 7/31/2023 11:05 AM, Krishna Chaitanya Chundru wrote: > > > > On 7/28/2023 9:39 AM, Manivannan Sadhasivam wrote: > > > On Thu, Jul 13, 2023 at 12:40:12PM +0530, Krishna chaitanya chundru > > > wrote: > > > > Add support for handling D-state notify for MHI EPF. > > > > > > > > Signed-off-by: Krishna chaitanya chundru <quic_krichai@xxxxxxxxxxx> > > > > --- > > > > drivers/pci/endpoint/functions/pci-epf-mhi.c | 11 +++++++++++ > > > > include/linux/mhi_ep.h | 3 +++ > > > > 2 files changed, 14 insertions(+) > > > > > > > > diff --git a/drivers/pci/endpoint/functions/pci-epf-mhi.c > > > > b/drivers/pci/endpoint/functions/pci-epf-mhi.c > > > > index 9c1f5a1..ee91bfc 100644 > > > > --- a/drivers/pci/endpoint/functions/pci-epf-mhi.c > > > > +++ b/drivers/pci/endpoint/functions/pci-epf-mhi.c > > > > @@ -339,6 +339,16 @@ static int pci_epf_mhi_bme(struct pci_epf *epf) > > > > return 0; > > > > } > > > > +static int pci_epf_mhi_dstate_notify(struct pci_epf *epf, > > > > pci_power_t state) > > > > +{ > > > > + struct pci_epf_mhi *epf_mhi = epf_get_drvdata(epf); > > > > + struct mhi_ep_cntrl *mhi_cntrl = &epf_mhi->mhi_cntrl; > > > > + > > > > + mhi_cntrl->dstate = state; > > > Where is this variable being used? Also, don't we need any locking? > > > > > > - Mani > > > > we are using this variable in wakeup host op which is introduced on > > patch [PATCH v4 8/9] PCI: epf-mhi: Add wakeup host op > > > > I will add lock in my next series. > > > > - KC > > Mani, as this is being called from IRQ context do we need to add any lock > here. > Notifiers are invoked in process context. And here, the context doesn't matter as either way you need locking to prevent concurrent access to dstate variable. But I think it is safe to ignore lock for now provided that wakeup_host callback is only called while MHI is in M3 state. Even if dstate changes while processing wakeup_host, it won't affect the behavior. - Mani > - KC > > > > > > > > > > + > > > > + return 0; > > > > +} > > > > + > > > > static int pci_epf_mhi_bind(struct pci_epf *epf) > > > > { > > > > struct pci_epf_mhi *epf_mhi = epf_get_drvdata(epf); > > > > @@ -394,6 +404,7 @@ static struct pci_epc_event_ops > > > > pci_epf_mhi_event_ops = { > > > > .link_up = pci_epf_mhi_link_up, > > > > .link_down = pci_epf_mhi_link_down, > > > > .bme = pci_epf_mhi_bme, > > > > + .dstate_notify = pci_epf_mhi_dstate_notify, > > > > }; > > > > static int pci_epf_mhi_probe(struct pci_epf *epf, > > > > diff --git a/include/linux/mhi_ep.h b/include/linux/mhi_ep.h > > > > index f198a8a..c3a0685 100644 > > > > --- a/include/linux/mhi_ep.h > > > > +++ b/include/linux/mhi_ep.h > > > > @@ -8,6 +8,7 @@ > > > > #include <linux/dma-direction.h> > > > > #include <linux/mhi.h> > > > > +#include <linux/pci.h> > > > > #define MHI_EP_DEFAULT_MTU 0x8000 > > > > @@ -139,6 +140,8 @@ struct mhi_ep_cntrl { > > > > enum mhi_state mhi_state; > > > > + pci_power_t dstate; > > > > + > > > > u32 max_chan; > > > > u32 mru; > > > > u32 event_rings; > > > > -- > > > > 2.7.4 > > > > > > -- மணிவண்ணன் சதாசிவம்