Message ID | 20250326041507.98232-3-sai.krishna.musham@amd.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Krzysztof WilczyĆski |
Headers | show |
Series | Add support for AMD Versal2 MDB PCIe RP PERST# | expand |
On Wed, Mar 26, 2025 at 09:45:07AM +0530, Sai Krishna Musham wrote: > Add PERST# signal handling via I2C GPIO expander for AMD Versal2 > MDB PCIe Root Port. > > Signed-off-by: Sai Krishna Musham <sai.krishna.musham@amd.com> > --- > drivers/pci/controller/dwc/pcie-amd-mdb.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/drivers/pci/controller/dwc/pcie-amd-mdb.c b/drivers/pci/controller/dwc/pcie-amd-mdb.c > index 4eb2a4e8189d..4eea53e9e197 100644 > --- a/drivers/pci/controller/dwc/pcie-amd-mdb.c > +++ b/drivers/pci/controller/dwc/pcie-amd-mdb.c > @@ -18,6 +18,7 @@ > #include <linux/resource.h> > #include <linux/types.h> > > +#include "../../pci.h" > #include "pcie-designware.h" > > #define AMD_MDB_TLP_IR_STATUS_MISC 0x4C0 > @@ -408,6 +409,7 @@ static int amd_mdb_add_pcie_port(struct amd_mdb_pcie *pcie, > struct dw_pcie *pci = &pcie->pci; > struct dw_pcie_rp *pp = &pci->pp; > struct device *dev = &pdev->dev; > + struct gpio_desc *reset_gpio; > int err; > > pcie->slcr = devm_platform_ioremap_resource_byname(pdev, "slcr"); > @@ -426,6 +428,24 @@ static int amd_mdb_add_pcie_port(struct amd_mdb_pcie *pcie, > > pp->ops = &amd_mdb_pcie_host_ops; > > + /* Request the GPIO for PCIe reset signal and assert */ > + reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); > + if (IS_ERR(reset_gpio)) { > + if (PTR_ERR(reset_gpio) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + dev_err(dev, "Failed to request reset GPIO\n"); Do not open-code dev_err_probe. Best regards, Krzysztof
diff --git a/drivers/pci/controller/dwc/pcie-amd-mdb.c b/drivers/pci/controller/dwc/pcie-amd-mdb.c index 4eb2a4e8189d..4eea53e9e197 100644 --- a/drivers/pci/controller/dwc/pcie-amd-mdb.c +++ b/drivers/pci/controller/dwc/pcie-amd-mdb.c @@ -18,6 +18,7 @@ #include <linux/resource.h> #include <linux/types.h> +#include "../../pci.h" #include "pcie-designware.h" #define AMD_MDB_TLP_IR_STATUS_MISC 0x4C0 @@ -408,6 +409,7 @@ static int amd_mdb_add_pcie_port(struct amd_mdb_pcie *pcie, struct dw_pcie *pci = &pcie->pci; struct dw_pcie_rp *pp = &pci->pp; struct device *dev = &pdev->dev; + struct gpio_desc *reset_gpio; int err; pcie->slcr = devm_platform_ioremap_resource_byname(pdev, "slcr"); @@ -426,6 +428,24 @@ static int amd_mdb_add_pcie_port(struct amd_mdb_pcie *pcie, pp->ops = &amd_mdb_pcie_host_ops; + /* Request the GPIO for PCIe reset signal and assert */ + reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(reset_gpio)) { + if (PTR_ERR(reset_gpio) == -EPROBE_DEFER) + return -EPROBE_DEFER; + dev_err(dev, "Failed to request reset GPIO\n"); + return PTR_ERR(reset_gpio); + } + + if (reset_gpio) { + /* Controller specific delay */ + udelay(50); + + /* Deassert the reset signal */ + gpiod_set_value_cansleep(reset_gpio, 0); + mdelay(PCIE_T_RRS_READY_MS); + } + err = dw_pcie_host_init(pp); if (err) { dev_err(dev, "Failed to initialize host, err=%d\n", err);
Add PERST# signal handling via I2C GPIO expander for AMD Versal2 MDB PCIe Root Port. Signed-off-by: Sai Krishna Musham <sai.krishna.musham@amd.com> --- drivers/pci/controller/dwc/pcie-amd-mdb.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)