Message ID | 1688122331-25478-2-git-send-email-quic_krichai@quicinc.com |
---|---|
State | Superseded |
Headers | show |
Series | PCCI: EPC: Add support to wake up host from D3 states | expand |
On Fri, Jun 30, 2023 at 04:22:04PM +0530, Krishna chaitanya chundru wrote: > Add support to notify the EPF device about the D-state change event > from the EPC device. > > Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com> > --- > Documentation/PCI/endpoint/pci-endpoint.rst | 5 +++++ > drivers/pci/endpoint/pci-epc-core.c | 27 +++++++++++++++++++++++++++ > include/linux/pci-epc.h | 1 + > include/linux/pci-epf.h | 1 + > 4 files changed, 34 insertions(+) > > diff --git a/Documentation/PCI/endpoint/pci-endpoint.rst b/Documentation/PCI/endpoint/pci-endpoint.rst > index 4f5622a..0538cdc 100644 > --- a/Documentation/PCI/endpoint/pci-endpoint.rst > +++ b/Documentation/PCI/endpoint/pci-endpoint.rst > @@ -78,6 +78,11 @@ by the PCI controller driver. > Cleanup the pci_epc_mem structure allocated during pci_epc_mem_init(). > > > +* pci_epc_dstate_change() > + > + In order to notify all the function devices that the EPC device has > + changed its D-state. > + > EPC APIs for the PCI Endpoint Function Driver > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c > index 6c54fa5..cad360f 100644 > --- a/drivers/pci/endpoint/pci-epc-core.c > +++ b/drivers/pci/endpoint/pci-epc-core.c > @@ -785,6 +785,33 @@ void pci_epc_bme_notify(struct pci_epc *epc) > EXPORT_SYMBOL_GPL(pci_epc_bme_notify); > > /** > + * pci_epc_dstate_change() - Notify the EPF device that EPC device D-state > + * has changed > + * @epc: the EPC device which has change in D-state > + * @state: the changed D-state > + * > + * Invoke to Notify the EPF device that the EPC device has D-state has > + * changed. > + */ > +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state) How about "pci_epc_dstate_notity()"? Rest looks good. - Mani > +{ > + struct pci_epf *epf; > + > + if (!epc || IS_ERR(epc)) > + return; > + > + mutex_lock(&epc->list_lock); > + list_for_each_entry(epf, &epc->pci_epf, list) { > + mutex_lock(&epf->lock); > + if (epf->event_ops && epf->event_ops->dstate_change) > + epf->event_ops->dstate_change(epf, state); > + mutex_unlock(&epf->lock); > + } > + mutex_unlock(&epc->list_lock); > +} > +EXPORT_SYMBOL_GPL(pci_epc_dstate_change); > + > +/** > * pci_epc_destroy() - destroy the EPC device > * @epc: the EPC device that has to be destroyed > * > diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h > index 5cb6940..26a1108 100644 > --- a/include/linux/pci-epc.h > +++ b/include/linux/pci-epc.h > @@ -251,4 +251,5 @@ void __iomem *pci_epc_mem_alloc_addr(struct pci_epc *epc, > phys_addr_t *phys_addr, size_t size); > void pci_epc_mem_free_addr(struct pci_epc *epc, phys_addr_t phys_addr, > void __iomem *virt_addr, size_t size); > +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state); > #endif /* __LINUX_PCI_EPC_H */ > diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h > index 4b52807..1d3c2a2 100644 > --- a/include/linux/pci-epf.h > +++ b/include/linux/pci-epf.h > @@ -79,6 +79,7 @@ struct pci_epc_event_ops { > int (*link_up)(struct pci_epf *epf); > int (*link_down)(struct pci_epf *epf); > int (*bme)(struct pci_epf *epf); > + int (*dstate_change)(struct pci_epf *epf, pci_power_t state); > }; > > /** > -- > 2.7.4 >
On 7/7/2023 11:14 AM, Manivannan Sadhasivam wrote: > On Fri, Jun 30, 2023 at 04:22:04PM +0530, Krishna chaitanya chundru wrote: >> Add support to notify the EPF device about the D-state change event >> from the EPC device. >> >> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com> >> --- >> Documentation/PCI/endpoint/pci-endpoint.rst | 5 +++++ >> drivers/pci/endpoint/pci-epc-core.c | 27 +++++++++++++++++++++++++++ >> include/linux/pci-epc.h | 1 + >> include/linux/pci-epf.h | 1 + >> 4 files changed, 34 insertions(+) >> >> diff --git a/Documentation/PCI/endpoint/pci-endpoint.rst b/Documentation/PCI/endpoint/pci-endpoint.rst >> index 4f5622a..0538cdc 100644 >> --- a/Documentation/PCI/endpoint/pci-endpoint.rst >> +++ b/Documentation/PCI/endpoint/pci-endpoint.rst >> @@ -78,6 +78,11 @@ by the PCI controller driver. >> Cleanup the pci_epc_mem structure allocated during pci_epc_mem_init(). >> >> >> +* pci_epc_dstate_change() >> + >> + In order to notify all the function devices that the EPC device has >> + changed its D-state. >> + >> EPC APIs for the PCI Endpoint Function Driver >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c >> index 6c54fa5..cad360f 100644 >> --- a/drivers/pci/endpoint/pci-epc-core.c >> +++ b/drivers/pci/endpoint/pci-epc-core.c >> @@ -785,6 +785,33 @@ void pci_epc_bme_notify(struct pci_epc *epc) >> EXPORT_SYMBOL_GPL(pci_epc_bme_notify); >> >> /** >> + * pci_epc_dstate_change() - Notify the EPF device that EPC device D-state >> + * has changed >> + * @epc: the EPC device which has change in D-state >> + * @state: the changed D-state >> + * >> + * Invoke to Notify the EPF device that the EPC device has D-state has >> + * changed. >> + */ >> +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state) > How about "pci_epc_dstate_notity()"? > > Rest looks good. > > - Mani sure I will change to pci_epc_dstate_notity -KC > >> +{ >> + struct pci_epf *epf; >> + >> + if (!epc || IS_ERR(epc)) >> + return; >> + >> + mutex_lock(&epc->list_lock); >> + list_for_each_entry(epf, &epc->pci_epf, list) { >> + mutex_lock(&epf->lock); >> + if (epf->event_ops && epf->event_ops->dstate_change) >> + epf->event_ops->dstate_change(epf, state); >> + mutex_unlock(&epf->lock); >> + } >> + mutex_unlock(&epc->list_lock); >> +} >> +EXPORT_SYMBOL_GPL(pci_epc_dstate_change); >> + >> +/** >> * pci_epc_destroy() - destroy the EPC device >> * @epc: the EPC device that has to be destroyed >> * >> diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h >> index 5cb6940..26a1108 100644 >> --- a/include/linux/pci-epc.h >> +++ b/include/linux/pci-epc.h >> @@ -251,4 +251,5 @@ void __iomem *pci_epc_mem_alloc_addr(struct pci_epc *epc, >> phys_addr_t *phys_addr, size_t size); >> void pci_epc_mem_free_addr(struct pci_epc *epc, phys_addr_t phys_addr, >> void __iomem *virt_addr, size_t size); >> +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state); >> #endif /* __LINUX_PCI_EPC_H */ >> diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h >> index 4b52807..1d3c2a2 100644 >> --- a/include/linux/pci-epf.h >> +++ b/include/linux/pci-epf.h >> @@ -79,6 +79,7 @@ struct pci_epc_event_ops { >> int (*link_up)(struct pci_epf *epf); >> int (*link_down)(struct pci_epf *epf); >> int (*bme)(struct pci_epf *epf); >> + int (*dstate_change)(struct pci_epf *epf, pci_power_t state); >> }; >> >> /** >> -- >> 2.7.4 >>
diff --git a/Documentation/PCI/endpoint/pci-endpoint.rst b/Documentation/PCI/endpoint/pci-endpoint.rst index 4f5622a..0538cdc 100644 --- a/Documentation/PCI/endpoint/pci-endpoint.rst +++ b/Documentation/PCI/endpoint/pci-endpoint.rst @@ -78,6 +78,11 @@ by the PCI controller driver. Cleanup the pci_epc_mem structure allocated during pci_epc_mem_init(). +* pci_epc_dstate_change() + + In order to notify all the function devices that the EPC device has + changed its D-state. + EPC APIs for the PCI Endpoint Function Driver ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c index 6c54fa5..cad360f 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -785,6 +785,33 @@ void pci_epc_bme_notify(struct pci_epc *epc) EXPORT_SYMBOL_GPL(pci_epc_bme_notify); /** + * pci_epc_dstate_change() - Notify the EPF device that EPC device D-state + * has changed + * @epc: the EPC device which has change in D-state + * @state: the changed D-state + * + * Invoke to Notify the EPF device that the EPC device has D-state has + * changed. + */ +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state) +{ + struct pci_epf *epf; + + if (!epc || IS_ERR(epc)) + return; + + mutex_lock(&epc->list_lock); + list_for_each_entry(epf, &epc->pci_epf, list) { + mutex_lock(&epf->lock); + if (epf->event_ops && epf->event_ops->dstate_change) + epf->event_ops->dstate_change(epf, state); + mutex_unlock(&epf->lock); + } + mutex_unlock(&epc->list_lock); +} +EXPORT_SYMBOL_GPL(pci_epc_dstate_change); + +/** * pci_epc_destroy() - destroy the EPC device * @epc: the EPC device that has to be destroyed * diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 5cb6940..26a1108 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -251,4 +251,5 @@ void __iomem *pci_epc_mem_alloc_addr(struct pci_epc *epc, phys_addr_t *phys_addr, size_t size); void pci_epc_mem_free_addr(struct pci_epc *epc, phys_addr_t phys_addr, void __iomem *virt_addr, size_t size); +void pci_epc_dstate_change(struct pci_epc *epc, pci_power_t state); #endif /* __LINUX_PCI_EPC_H */ diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 4b52807..1d3c2a2 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -79,6 +79,7 @@ struct pci_epc_event_ops { int (*link_up)(struct pci_epf *epf); int (*link_down)(struct pci_epf *epf); int (*bme)(struct pci_epf *epf); + int (*dstate_change)(struct pci_epf *epf, pci_power_t state); }; /**
Add support to notify the EPF device about the D-state change event from the EPC device. Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com> --- Documentation/PCI/endpoint/pci-endpoint.rst | 5 +++++ drivers/pci/endpoint/pci-epc-core.c | 27 +++++++++++++++++++++++++++ include/linux/pci-epc.h | 1 + include/linux/pci-epf.h | 1 + 4 files changed, 34 insertions(+)