Involve an new and common mathod to send pme_turn_off() message. Previously pme_turn_off() implement by platform related special register to trigge it. But Yoshihiro give good idea by using iATU to send out message. Previously Yoshihiro provide patches to raise INTx message by dummy write to outbound iATU. Use similar mathod to send out pme_turn_off message. Previous two patches is picked from Yoshihiro' big patch serialise. PCI: dwc: Change arguments of dw_pcie_prog_outbound_atu() PCI: Add INTx Mechanism Messages macros PCI: Add PME_TURN_OFF message macro dt-bindings: PCI: dwc: Add 'msg" register region, Add "msg" region to use to map PCI msg. PCI: dwc: Add common pme_turn_off message method Using common pme_turn_off() message if platform have not define their. Signed-off-by: Frank Li <Frank.Li@xxxxxxx> --- Changes in v7: patch 4/5 add /* Power Management Messages; PCIe r6.0, sec 2.2.8.2 */ patch 1/5 change comment to /* Message Routing (r[2:0]); PCIe r6.0, sec 2.2.8 */ /* INTx Mechanism Messages; PCIe r6.0, sec 2.2.8.1 */ order according to value. Add Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> in patch 4/5 patch 5/5 Apply all mani's comments. - Link to v6: https://lore.kernel.org/r/20240415-pme_msg-v6-0-56dad968ad3a@xxxxxxx Changes in v6: - Move PCIE_MSG_CODE_PME_TURN_OFF ahead before INTx to keep the codes sorted. - Added reason why not alloc_resesource in commit messag. - Change title PCI: dwc: Add generic MSG TLP support for sending PME_Turn_Off when system suspend. - Rework commit message "Instead of relying on the vendor specific implementations to send the PME_Turn_Off message, let's introduce a generic way of sending the message using the MSG TLP. This is achieved by reserving a region for MSG TLP of size 'pci->region_align', at the end of the first IORESOURCE_MEM window of the host bridge. And then sending the PME_Turn_Off message during system suspend with the help of iATU. It should be noted that this generic implementation is optional for the glue drivers and can be overridden by a custom 'pme_turn_off' callback. - using devm_request_resource() - using mani's suggest comments /* * Allocate the resource for MSG TLP before programming the iATU * outbound window in dw_pcie_setup_rc(). Since the allocation depends * on the value of 'region_align', this has to be done after * dw_pcie_iatu_detect(). */ - Add comments, about use_atu_msg, need glue driver set it. - m -> mem in dw_pcie_pme_turn_off() - remove redundant check() if (!atu.size) in dw_pcie_pme_turn_off(). - The reason can't adjust windows->end This windows already reported to pci system before this function. It is not good to modify window-res-end. It just add child resource like below. windows is root resource, which will create may child when call request_resource. bridge -> windows child1 -> msg child2 -> pci ep1 child3 -> pci_ep2. ... Although you see whole bridge window, 'msg' already used and put under root resource, new pci devices will never use 'msg' resource. If change windows->res->end here, I worry about it may broken resource tree. Detail below thread: - Link to v5: https://lore.kernel.org/r/20240319-pme_msg-v5-0-af9ffe57f432@xxxxxxx Changes in v5: - Default disable allocate TLP message memory windows. If driver need use this feature, need set use_atu_msg = true before call dw_host_init(). - Link to v4: https://lore.kernel.org/r/20240213-pme_msg-v4-0-e2acd4d7a292@xxxxxxx Changes in v4: - Remove dt-binding patch. Needn't change any dts file and binding doc. Reserve a region at end of first IORESOURCE_MEM window by call request_resource(). So PCIe stack will not use this reserve region to any PCIe devices. I tested it by reserve at begin of IORESOURCE_MEM window. PCIe stack will skip it as expection. Fixed a issue, forget set iATU index when sent PME_turn_off. - Link to v3: https://lore.kernel.org/r/20240202-pme_msg-v3-0-ff2af57a02ad@xxxxxxx Changes in v3: - fix 'MSG" - Add pcie spec ref in head file - using function name dw_pci_pme_turn_off() - Using PCIE_ prefix macro - Link to v2: https://lore.kernel.org/r/20240201-pme_msg-v2-0-6767052fe6a4@xxxxxxx Changes in v2: - Add my sign off at PCI: dwc: Add outbound MSG TLPs support - Add Bjorn review tag at Add INTx Mechanism Messages macros - using PME_Turn_Off match PCIe spec - ref to pcie spec v6.1 - using section number. - Link to v1: https://lore.kernel.org/r/20240130-pme_msg-v1-0-d52b0add5c7c@xxxxxxx --- Frank Li (2): PCI: Add PCIE_MSG_CODE_PME_TURN_OFF message macro PCI: dwc: Add generic MSG TLP support for sending PME_Turn_Off when system suspend Yoshihiro Shimoda (3): PCI: Add INTx Mechanism Messages macros PCI: dwc: Consolidate args of dw_pcie_prog_outbound_atu() into a structure PCI: dwc: Add outbound MSG TLPs support drivers/pci/controller/dwc/pcie-designware-ep.c | 21 +-- drivers/pci/controller/dwc/pcie-designware-host.c | 152 +++++++++++++++++++--- drivers/pci/controller/dwc/pcie-designware.c | 54 ++++---- drivers/pci/controller/dwc/pcie-designware.h | 22 +++- drivers/pci/pci.h | 21 +++ 5 files changed, 206 insertions(+), 64 deletions(-) --- base-commit: ef6a734484e939cf67bc41c45bc936a78ea210f0 change-id: 20240130-pme_msg-dd2d81ee9886 Best regards, --- Frank Li <Frank.Li@xxxxxxx>