[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251202090225.1602-1-zhangsenchuan@eswincomputing.com>
Date: Tue, 2 Dec 2025 17:02:25 +0800
From: zhangsenchuan@...incomputing.com
To: bhelgaas@...gle.com,
mani@...nel.org,
krzk+dt@...nel.org,
conor+dt@...nel.org,
lpieralisi@...nel.org,
kwilczynski@...nel.org,
robh@...nel.org,
p.zabel@...gutronix.de,
jingoohan1@...il.com,
gustavo.pimentel@...opsys.com,
linux-pci@...r.kernel.org,
devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
christian.bruel@...s.st.com,
mayank.rana@....qualcomm.com,
shradha.t@...sung.com,
krishna.chundru@....qualcomm.com,
thippeswamy.havalige@....com,
inochiama@...il.com,
Frank.li@....com
Cc: ningyu@...incomputing.com,
linmin@...incomputing.com,
pinkesh.vaghela@...fochips.com,
ouyanghui@...incomputing.com,
Senchuan Zhang <zhangsenchuan@...incomputing.com>
Subject: [PATCH v7 0/3] Add driver support for Eswin EIC7700 SoC PCIe controller
From: Senchuan Zhang <zhangsenchuan@...incomputing.com>
Changes in v7:
- Updates: eswin,eic7700-pcie.yaml
- None
- Updates: pcie-eic7700.c
- Update "config PCIE_EIC7700" bool to tristate.
- Remove fix MSI-X code, depend on new commit [1].
- Add set no_pme_handshake flag.
- Update -EINVAL to -ENODATA and add PM runtime function.
- Add ".probe_type = PROBE_PREFER_ASYNCHRONOUS,".
- Update eic7700_pcie_perst_deassert function name to
eic7700_pcie_perst_reset.
- Update readw to dw_pcie_readw_dbi function.
- Add comments above reset_control_bulk_deassert function.
- Updates: pcie-designware.h pcie-designware-host.c
- The ESWIN EIC7700 SoC lacks hardware support for the L2/L3 low-power
link states. It cannot enter the L2/L3 ready state through the
PME_Turn_Off/PME_To_Ack handshake protocol. To address this, add a
no_pme_handshake flag skip PME_Turn_Off broadcast and link state check
code, other driver can reuse this flag if meet the similar situation.
- Link to V6: https://lore.kernel.org/linux-pci/20251120101018.1477-1-zhangsenchuan@eswincomputing.com/
- Link to: https://lore.kernel.org/linux-pci/20251109-remove_cap-v1-3-2208f46f4dc2@oss.qualcomm.com/ [1]
Changes in v6:
- Updates: eswin,eic7700-pcie.yaml
- Add Reviewed-by: Rob Herring (Arm) <robh@...nel.org>.
- Updates: pcie-eic7700.c
- Remove pci_root_ports_have_device function judgment during suspend.
- Remove eic7700_pcie_pme_turn_off and eic7700_pcie_get_ltssm function.
- Add set no_suspport_L2 flag.
- Updates: pcie-designware.h pcie-designware-host.c
- The ESWIN EIC7700 soc does not support enter L2 link state. Therefore
add no_suspport_L2 flag skip PME_Turn_Off broadcast and link state
check code, other driver can reuse this flag if meet the similar
situation.
- Link to V5: https://lore.kernel.org/all/20251110090716.1392-1-zhangsenchuan@eswincomputing.com/
- Link to: https://lore.kernel.org/all/e7plmtwtkkd4ymrt2hkztcqdx4ugfjk64oksjyf6lpi2oui53d@vhuo5occyref/
Changes in v5:
- Updates: eswin,eic7700-pcie.yaml
- Modify reg-names: update mgmt to elbi.
- Modify clock-names: update pclk to phy_reg.
- Modify reset-names: update powerup to pwr.
- Remove powerup modify in "snps,dw-pcie-common.yaml" file.
- Updates: pcie-eic7700.c
- Update the driver submission comment, mention EIC7700 in the
"config PCIE_EIC7700" and in the driver title.
- Update some comments, for examples: "s/PME_TURN_OFF/PME_Turn_Off/",
"s/INTX/INTx/", "s/PERST/PERST#/", "s/perst/PERST#/", "s/id/ID/".
- Update "struct *_pcie" name and function name, add the eic7700 prefix.
- Use PCIEELBI_CTRL0_DEV_TYPE macro and update comment, use FIELD_PREP.
- Add eic7700_pcie_data pointer in struct eic7700_pcie.
- Update .deinit callback function name and removed the dw_pcie_link_up
judgment, add pci_root_ports_have_device function judgment.
- Remove devm_platform_ioremap_resource_byname function get mgmt, use
platform_get_resource_byname function get elbi in "pcie-designware.c".
- Update of_reset_control_get to of_reset_control_get_exclusive, use
devm_reset_control_bulk_get_exclusive function get resets, update use
reset_control_bulk_assert/reset_control_bulk_deassert function.
- Link to V4: https://lore.kernel.org/all/20251030082900.1304-1-zhangsenchuan@eswincomputing.com/
- Link to https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/tree/?h=controller/dwc
Changes in v4:
- Updates: eswin,eic7700-pcie.yaml
- Use snps,dw-pcie.yaml instead pci-host-bridge.yaml.
- Updates: snps,dw-pcie-common.yaml
- Add powerup reset property, our powerup property is somewhat different
from the general attributes defined by Synopsys DWC binding.
- Updates: pcie-eic7700.c
- Update the driver submission comment.
- Alphabetize so the menuconfig entries remain sorted by vendor.
- Update use PCI_CAP_LIST_NEXT_MASK macro.
- Use readl_poll_timeout function.
- Update eswin_pcie_suspend/eswin_pcie_resume name to
eswin_pcie_suspend_noirq/eswin_pcie_resume_noirq.
- PM use dw_pcie_suspend_noirq and dw_pcie_resume_noirq function and add
eswin_pcie_get_ltssm, eswin_pcie_pme_turn_off, eswin_pcie_host_exit
function adapt to PM.
- Link to V3: https://lore.kernel.org/linux-pci/20250923120946.1218-1-zhangsenchuan@eswincomputing.com/
Changes in v3:
- Updates: eswin,eic7700-pcie.yaml
- Based on the last patch yaml file, devicetree separates the root port
node, changing it significantly. Therefore, "Reviewed-by: Krzysztof
Kozlowski <krzysztof.kozlowski@...aro.org>" is not added.
- Clock and reset drivers are under review. In yaml, macro definitions
used in clock and reset can only be replaced by constant values.
- Move the num-lanes and perst resets to the PCIe Root Port node, make
it easier to support multiple Root Ports in future versions of the
hardware.
- Update the num-lanes attribute and modify define num-lanes as decimal.
- Optimize the ranges attribute and clear the relocatable flag (bit 31)
for any regions.
- Update comment: inte~inth are actual interrupts and these names align
with the interrupt names in the hardware IP, inte~inth interrupts
corresponds to Deassert_INTA~Deassert_INTD.
- Add Signed-off-by: Yanghui Ou <ouyanghui@...incomputing.com>.
- Updates: pcie-eic7700.c
- Update the submission comment and add DWC IP revision, data rate, lane
information.
- Optimize the "config PCIE_EIC7700" configuration.
- Optimize the macro definition, add bitfield definition for the mask,
and remove redundant comments. optimize comments, make use of 80
columns for comments.
- Use the dw_pcie_find_capability function to obtain the offset by
traversing the function list.
- Remove the sets MPS code and configure it by PCI core.
- Alphabetize so the menuconfig entries remain sorted by vendor.
- Configure ESWIN VID:DID for Root Port as the default values are
invalid,and remove the redundant lane config.
- Use reverse Xmas order for all local variables in this driver
- Hardware doesn't support MSI-X but it advertises MSI-X capability, set
a flag and clear it conditionally.
- Resets are all necessary, Update the interface function for resets.
- Since driver does not depend on any parent to power on any resource,
the pm runtime related functions are removed.
- Remove "eswin_pcie_shutdown" function, our comment on the shutdown
function is incorrect. Moreover, when the host powers reboots,it will
enter the shutdown function, we are using host reset and do not need
to assert perst. Therefore, the shutdown function is not necessary.
- remove "eswin_pcie_remove", because it is not safe to remove it during
runtime, and this driver has been modified to builtin_platform_driver
and does not support hot plugging, therefore, the remove function is
not needed.
- The Suspend function adds link state judgment, and for controllers
with active devices, resources cannot be turned off.
- Add Signed-off-by: Yanghui Ou <ouyanghui@...incomputing.com>.
- Link to V2: https://lore.kernel.org/linux-pci/20250829082021.49-1-zhangsenchuan@eswincomputing.com/
Changes in v2:
- Updates: eswin,eic7700-pcie.yaml
- Optimize the naming of "clock-names" and "reset-names".
- Add a reference to "$ref: /schemas/pci/pci-host-bridge.yaml#".
(The name of the reset attribute in the "snps,dw-pcie-common.yaml"
file is different from our reset attribute and "snps,dw-pcie.yaml"
file cannot be directly referenced)
- Follow DTS coding style to optimize yaml attributes.
- Remove status = "disabled" from yaml.
- Updates: pcie-eic7700.c
- Remove unnecessary imported header files.
- Use dev_err instead of pr_err and remove the WARN_ON function.
- The eswin_evb_socket_power_on function is removed and not supported.
- The eswin_pcie_remove function is placed after the probe function.
- Optimize function alignment.
- Manage the clock using the devm_clk_bulk_get_all_enabled function.
- Handle the release of resources after the dw_pcie_host_init function
call fails.
- Remove the dev_dbg function and remove __exit_p.
- Add support for the system pm function.
- Link to V1: https://lore.kernel.org/all/20250516094057.1300-1-zhangsenchuan@eswincomputing.com/
Senchuan Zhang (3):
dt-bindings: PCI: eic7700: Add Eswin PCIe host controller
PCI: eic7700: Add Eswin PCIe host controller driver
PCI: dwc: Add no_pme_handshake flag and skip PME_Turn_Off broadcast
.../bindings/pci/eswin,eic7700-pcie.yaml | 167 ++++++++
drivers/pci/controller/dwc/Kconfig | 11 +
drivers/pci/controller/dwc/Makefile | 1 +
.../pci/controller/dwc/pcie-designware-host.c | 4 +
drivers/pci/controller/dwc/pcie-designware.h | 1 +
drivers/pci/controller/dwc/pcie-eic7700.c | 378 ++++++++++++++++++
6 files changed, 562 insertions(+)
create mode 100644 Documentation/devicetree/bindings/pci/eswin,eic7700-pcie.yaml
create mode 100644 drivers/pci/controller/dwc/pcie-eic7700.c
--
2.25.1
Powered by blists - more mailing lists