Skip to content

Commit 35f0c94

Browse files
committed
Merge branch 'pci/controller/gpio'
- Include <linux/irqchip/chained_irq.h> in dra7xx to avoid implicitly including it elsewhere (Andy Shevchenko) - Remove unused <linux/of_gpio.h> from aardvark and dwc drivers (dra7xx, meson, qcom, tegra194) (Andy Shevchenko) - Convert kirin to use scoped for_each_available_child_of_node() to ease future error exits (Javier Carrasco) - Convert imx6 and kirin to use the agnostic GPIO API to simplify GPIO setup and remove usage of the deprecated of_gpio.h API (Andy Shevchenko) * pci/controller/gpio: PCI: kirin: Convert to use agnostic GPIO API PCI: kirin: Convert kirin_pcie_parse_port() to scoped iterator PCI: imx6: Convert to use agnostic GPIO API PCI: dwc: Remove unused of_gpio.h inclusion PCI: aardvark: Remove unused of_gpio.h inclusion PCI: dra7xx: Add missing chained IRQ header inclusion
2 parents 0f74d89 + d03b2dd commit 35f0c94

File tree

7 files changed

+52
-117
lines changed

7 files changed

+52
-117
lines changed

drivers/pci/controller/dwc/pci-dra7xx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
#include <linux/err.h>
1414
#include <linux/interrupt.h>
1515
#include <linux/irq.h>
16+
#include <linux/irqchip/chained_irq.h>
1617
#include <linux/irqdomain.h>
1718
#include <linux/kernel.h>
1819
#include <linux/module.h>
1920
#include <linux/of.h>
20-
#include <linux/of_gpio.h>
2121
#include <linux/of_pci.h>
2222
#include <linux/pci.h>
2323
#include <linux/phy/phy.h>

drivers/pci/controller/dwc/pci-imx6.c

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@
1111
#include <linux/bitfield.h>
1212
#include <linux/clk.h>
1313
#include <linux/delay.h>
14-
#include <linux/gpio.h>
14+
#include <linux/gpio/consumer.h>
1515
#include <linux/kernel.h>
1616
#include <linux/mfd/syscon.h>
1717
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
1818
#include <linux/mfd/syscon/imx7-iomuxc-gpr.h>
1919
#include <linux/module.h>
2020
#include <linux/of.h>
21-
#include <linux/of_gpio.h>
2221
#include <linux/of_address.h>
2322
#include <linux/pci.h>
2423
#include <linux/platform_device.h>
@@ -107,8 +106,7 @@ struct imx6_pcie_drvdata {
107106

108107
struct imx6_pcie {
109108
struct dw_pcie *pci;
110-
int reset_gpio;
111-
bool gpio_active_high;
109+
struct gpio_desc *reset_gpiod;
112110
bool link_is_up;
113111
struct clk_bulk_data clks[IMX6_PCIE_MAX_CLKS];
114112
struct regmap *iomuxc_gpr;
@@ -721,9 +719,7 @@ static void imx6_pcie_assert_core_reset(struct imx6_pcie *imx6_pcie)
721719
}
722720

723721
/* Some boards don't have PCIe reset GPIO. */
724-
if (gpio_is_valid(imx6_pcie->reset_gpio))
725-
gpio_set_value_cansleep(imx6_pcie->reset_gpio,
726-
imx6_pcie->gpio_active_high);
722+
gpiod_set_value_cansleep(imx6_pcie->reset_gpiod, 1);
727723
}
728724

729725
static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
@@ -771,10 +767,9 @@ static int imx6_pcie_deassert_core_reset(struct imx6_pcie *imx6_pcie)
771767
}
772768

773769
/* Some boards don't have PCIe reset GPIO. */
774-
if (gpio_is_valid(imx6_pcie->reset_gpio)) {
770+
if (imx6_pcie->reset_gpiod) {
775771
msleep(100);
776-
gpio_set_value_cansleep(imx6_pcie->reset_gpio,
777-
!imx6_pcie->gpio_active_high);
772+
gpiod_set_value_cansleep(imx6_pcie->reset_gpiod, 0);
778773
/* Wait for 100ms after PERST# deassertion (PCIe r5.0, 6.6.1) */
779774
msleep(100);
780775
}
@@ -1285,22 +1280,11 @@ static int imx6_pcie_probe(struct platform_device *pdev)
12851280
return PTR_ERR(pci->dbi_base);
12861281

12871282
/* Fetch GPIOs */
1288-
imx6_pcie->reset_gpio = of_get_named_gpio(node, "reset-gpio", 0);
1289-
imx6_pcie->gpio_active_high = of_property_read_bool(node,
1290-
"reset-gpio-active-high");
1291-
if (gpio_is_valid(imx6_pcie->reset_gpio)) {
1292-
ret = devm_gpio_request_one(dev, imx6_pcie->reset_gpio,
1293-
imx6_pcie->gpio_active_high ?
1294-
GPIOF_OUT_INIT_HIGH :
1295-
GPIOF_OUT_INIT_LOW,
1296-
"PCIe reset");
1297-
if (ret) {
1298-
dev_err(dev, "unable to get reset gpio\n");
1299-
return ret;
1300-
}
1301-
} else if (imx6_pcie->reset_gpio == -EPROBE_DEFER) {
1302-
return imx6_pcie->reset_gpio;
1303-
}
1283+
imx6_pcie->reset_gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
1284+
if (IS_ERR(imx6_pcie->reset_gpiod))
1285+
return dev_err_probe(dev, PTR_ERR(imx6_pcie->reset_gpiod),
1286+
"unable to get reset gpio\n");
1287+
gpiod_set_consumer_name(imx6_pcie->reset_gpiod, "PCIe reset");
13041288

13051289
if (imx6_pcie->drvdata->clks_cnt >= IMX6_PCIE_MAX_CLKS)
13061290
return dev_err_probe(dev, -ENOMEM, "clks_cnt is too big\n");

drivers/pci/controller/dwc/pci-meson.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <linux/clk.h>
1010
#include <linux/delay.h>
1111
#include <linux/gpio/consumer.h>
12-
#include <linux/of_gpio.h>
1312
#include <linux/pci.h>
1413
#include <linux/platform_device.h>
1514
#include <linux/reset.h>

drivers/pci/controller/dwc/pcie-kirin.c

Lines changed: 41 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,10 @@
1212
#include <linux/compiler.h>
1313
#include <linux/delay.h>
1414
#include <linux/err.h>
15-
#include <linux/gpio.h>
1615
#include <linux/gpio/consumer.h>
1716
#include <linux/interrupt.h>
1817
#include <linux/mfd/syscon.h>
1918
#include <linux/of.h>
20-
#include <linux/of_gpio.h>
2119
#include <linux/of_pci.h>
2220
#include <linux/phy/phy.h>
2321
#include <linux/pci.h>
@@ -78,16 +76,16 @@ struct kirin_pcie {
7876
void *phy_priv; /* only for PCIE_KIRIN_INTERNAL_PHY */
7977

8078
/* DWC PERST# */
81-
int gpio_id_dwc_perst;
79+
struct gpio_desc *id_dwc_perst_gpio;
8280

8381
/* Per-slot PERST# */
8482
int num_slots;
85-
int gpio_id_reset[MAX_PCI_SLOTS];
83+
struct gpio_desc *id_reset_gpio[MAX_PCI_SLOTS];
8684
const char *reset_names[MAX_PCI_SLOTS];
8785

8886
/* Per-slot clkreq */
8987
int n_gpio_clkreq;
90-
int gpio_id_clkreq[MAX_PCI_SLOTS];
88+
struct gpio_desc *id_clkreq_gpio[MAX_PCI_SLOTS];
9189
const char *clkreq_names[MAX_PCI_SLOTS];
9290
};
9391

@@ -381,15 +379,20 @@ static int kirin_pcie_get_gpio_enable(struct kirin_pcie *pcie,
381379
pcie->n_gpio_clkreq = ret;
382380

383381
for (i = 0; i < pcie->n_gpio_clkreq; i++) {
384-
pcie->gpio_id_clkreq[i] = of_get_named_gpio(dev->of_node,
385-
"hisilicon,clken-gpios", i);
386-
if (pcie->gpio_id_clkreq[i] < 0)
387-
return pcie->gpio_id_clkreq[i];
382+
pcie->id_clkreq_gpio[i] = devm_gpiod_get_index(dev,
383+
"hisilicon,clken", i,
384+
GPIOD_OUT_LOW);
385+
if (IS_ERR(pcie->id_clkreq_gpio[i]))
386+
return dev_err_probe(dev, PTR_ERR(pcie->id_clkreq_gpio[i]),
387+
"unable to get a valid clken gpio\n");
388388

389389
pcie->clkreq_names[i] = devm_kasprintf(dev, GFP_KERNEL,
390390
"pcie_clkreq_%d", i);
391391
if (!pcie->clkreq_names[i])
392392
return -ENOMEM;
393+
394+
gpiod_set_consumer_name(pcie->id_clkreq_gpio[i],
395+
pcie->clkreq_names[i]);
393396
}
394397

395398
return 0;
@@ -400,49 +403,49 @@ static int kirin_pcie_parse_port(struct kirin_pcie *pcie,
400403
struct device_node *node)
401404
{
402405
struct device *dev = &pdev->dev;
403-
struct device_node *parent, *child;
404406
int ret, slot, i;
405407

406-
for_each_available_child_of_node(node, parent) {
407-
for_each_available_child_of_node(parent, child) {
408+
for_each_available_child_of_node_scoped(node, parent) {
409+
for_each_available_child_of_node_scoped(parent, child) {
408410
i = pcie->num_slots;
409411

410-
pcie->gpio_id_reset[i] = of_get_named_gpio(child,
411-
"reset-gpios", 0);
412-
if (pcie->gpio_id_reset[i] < 0)
413-
continue;
412+
pcie->id_reset_gpio[i] = devm_fwnode_gpiod_get_index(dev,
413+
of_fwnode_handle(child),
414+
"reset", 0, GPIOD_OUT_LOW,
415+
NULL);
416+
if (IS_ERR(pcie->id_reset_gpio[i])) {
417+
if (PTR_ERR(pcie->id_reset_gpio[i]) == -ENOENT)
418+
continue;
419+
return dev_err_probe(dev, PTR_ERR(pcie->id_reset_gpio[i]),
420+
"unable to get a valid reset gpio\n");
421+
}
414422

415423
pcie->num_slots++;
416424
if (pcie->num_slots > MAX_PCI_SLOTS) {
417425
dev_err(dev, "Too many PCI slots!\n");
418-
ret = -EINVAL;
419-
goto put_node;
426+
return -EINVAL;
420427
}
421428

422429
ret = of_pci_get_devfn(child);
423430
if (ret < 0) {
424431
dev_err(dev, "failed to parse devfn: %d\n", ret);
425-
goto put_node;
432+
return ret;
426433
}
427434

428435
slot = PCI_SLOT(ret);
429436

430437
pcie->reset_names[i] = devm_kasprintf(dev, GFP_KERNEL,
431438
"pcie_perst_%d",
432439
slot);
433-
if (!pcie->reset_names[i]) {
434-
ret = -ENOMEM;
435-
goto put_node;
436-
}
440+
if (!pcie->reset_names[i])
441+
return -ENOMEM;
442+
443+
gpiod_set_consumer_name(pcie->id_reset_gpio[i],
444+
pcie->reset_names[i]);
437445
}
438446
}
439447

440448
return 0;
441-
442-
put_node:
443-
of_node_put(child);
444-
of_node_put(parent);
445-
return ret;
446449
}
447450

448451
static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
@@ -463,14 +466,11 @@ static long kirin_pcie_get_resource(struct kirin_pcie *kirin_pcie,
463466
return PTR_ERR(kirin_pcie->apb);
464467

465468
/* pcie internal PERST# gpio */
466-
kirin_pcie->gpio_id_dwc_perst = of_get_named_gpio(dev->of_node,
467-
"reset-gpios", 0);
468-
if (kirin_pcie->gpio_id_dwc_perst == -EPROBE_DEFER) {
469-
return -EPROBE_DEFER;
470-
} else if (!gpio_is_valid(kirin_pcie->gpio_id_dwc_perst)) {
471-
dev_err(dev, "unable to get a valid gpio pin\n");
472-
return -ENODEV;
473-
}
469+
kirin_pcie->id_dwc_perst_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
470+
if (IS_ERR(kirin_pcie->id_dwc_perst_gpio))
471+
return dev_err_probe(dev, PTR_ERR(kirin_pcie->id_dwc_perst_gpio),
472+
"unable to get a valid gpio pin\n");
473+
gpiod_set_consumer_name(kirin_pcie->id_dwc_perst_gpio, "pcie_perst_bridge");
474474

475475
ret = kirin_pcie_get_gpio_enable(kirin_pcie, pdev);
476476
if (ret)
@@ -553,7 +553,7 @@ static int kirin_pcie_add_bus(struct pci_bus *bus)
553553

554554
/* Send PERST# to each slot */
555555
for (i = 0; i < kirin_pcie->num_slots; i++) {
556-
ret = gpio_direction_output(kirin_pcie->gpio_id_reset[i], 1);
556+
ret = gpiod_direction_output_raw(kirin_pcie->id_reset_gpio[i], 1);
557557
if (ret) {
558558
dev_err(pci->dev, "PERST# %s error: %d\n",
559559
kirin_pcie->reset_names[i], ret);
@@ -623,44 +623,6 @@ static int kirin_pcie_host_init(struct dw_pcie_rp *pp)
623623
return 0;
624624
}
625625

626-
static int kirin_pcie_gpio_request(struct kirin_pcie *kirin_pcie,
627-
struct device *dev)
628-
{
629-
int ret, i;
630-
631-
for (i = 0; i < kirin_pcie->num_slots; i++) {
632-
if (!gpio_is_valid(kirin_pcie->gpio_id_reset[i])) {
633-
dev_err(dev, "unable to get a valid %s gpio\n",
634-
kirin_pcie->reset_names[i]);
635-
return -ENODEV;
636-
}
637-
638-
ret = devm_gpio_request(dev, kirin_pcie->gpio_id_reset[i],
639-
kirin_pcie->reset_names[i]);
640-
if (ret)
641-
return ret;
642-
}
643-
644-
for (i = 0; i < kirin_pcie->n_gpio_clkreq; i++) {
645-
if (!gpio_is_valid(kirin_pcie->gpio_id_clkreq[i])) {
646-
dev_err(dev, "unable to get a valid %s gpio\n",
647-
kirin_pcie->clkreq_names[i]);
648-
return -ENODEV;
649-
}
650-
651-
ret = devm_gpio_request(dev, kirin_pcie->gpio_id_clkreq[i],
652-
kirin_pcie->clkreq_names[i]);
653-
if (ret)
654-
return ret;
655-
656-
ret = gpio_direction_output(kirin_pcie->gpio_id_clkreq[i], 0);
657-
if (ret)
658-
return ret;
659-
}
660-
661-
return 0;
662-
}
663-
664626
static const struct dw_pcie_ops kirin_dw_pcie_ops = {
665627
.read_dbi = kirin_pcie_read_dbi,
666628
.write_dbi = kirin_pcie_write_dbi,
@@ -680,7 +642,7 @@ static int kirin_pcie_power_off(struct kirin_pcie *kirin_pcie)
680642
return hi3660_pcie_phy_power_off(kirin_pcie);
681643

682644
for (i = 0; i < kirin_pcie->n_gpio_clkreq; i++)
683-
gpio_direction_output(kirin_pcie->gpio_id_clkreq[i], 1);
645+
gpiod_direction_output_raw(kirin_pcie->id_clkreq_gpio[i], 1);
684646

685647
phy_power_off(kirin_pcie->phy);
686648
phy_exit(kirin_pcie->phy);
@@ -707,10 +669,6 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
707669
if (IS_ERR(kirin_pcie->phy))
708670
return PTR_ERR(kirin_pcie->phy);
709671

710-
ret = kirin_pcie_gpio_request(kirin_pcie, dev);
711-
if (ret)
712-
return ret;
713-
714672
ret = phy_init(kirin_pcie->phy);
715673
if (ret)
716674
goto err;
@@ -723,11 +681,9 @@ static int kirin_pcie_power_on(struct platform_device *pdev,
723681
/* perst assert Endpoint */
724682
usleep_range(REF_2_PERST_MIN, REF_2_PERST_MAX);
725683

726-
if (!gpio_request(kirin_pcie->gpio_id_dwc_perst, "pcie_perst_bridge")) {
727-
ret = gpio_direction_output(kirin_pcie->gpio_id_dwc_perst, 1);
728-
if (ret)
729-
goto err;
730-
}
684+
ret = gpiod_direction_output_raw(kirin_pcie->id_dwc_perst_gpio, 1);
685+
if (ret)
686+
goto err;
731687

732688
usleep_range(PERST_2_ACCESS_MIN, PERST_2_ACCESS_MAX);
733689

drivers/pci/controller/dwc/pcie-qcom.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include <linux/kernel.h>
2121
#include <linux/init.h>
2222
#include <linux/of.h>
23-
#include <linux/of_gpio.h>
2423
#include <linux/pci.h>
2524
#include <linux/pm_runtime.h>
2625
#include <linux/platform_device.h>

drivers/pci/controller/dwc/pcie-tegra194.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@
1313
#include <linux/clk.h>
1414
#include <linux/debugfs.h>
1515
#include <linux/delay.h>
16-
#include <linux/gpio.h>
1716
#include <linux/gpio/consumer.h>
1817
#include <linux/interconnect.h>
1918
#include <linux/interrupt.h>
2019
#include <linux/iopoll.h>
2120
#include <linux/kernel.h>
2221
#include <linux/module.h>
2322
#include <linux/of.h>
24-
#include <linux/of_gpio.h>
2523
#include <linux/of_pci.h>
2624
#include <linux/pci.h>
2725
#include <linux/phy/phy.h>

drivers/pci/controller/pci-aardvark.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include <linux/platform_device.h>
2424
#include <linux/msi.h>
2525
#include <linux/of_address.h>
26-
#include <linux/of_gpio.h>
2726
#include <linux/of_pci.h>
2827

2928
#include "../pci.h"

0 commit comments

Comments
 (0)