Skip to content

Commit 964db79

Browse files
committed
Merge branch 'pci/ctrl/dwc'
- Stop link on host_init errors and de-initialization (Serge Semin) - Add support for unrolled iATU register space in dw_pcie_disable_atu() (Serge Semin) - Disable outbound windows only for controllers that use iATU (Serge Semin) - Set INCREASE_REGION_SIZE flag based on limit address, not on the size, since even a small size may cross a 4GB boundary (Serge Semin) - Deallocate EPC memory on dw_pcie_ep_init() errors to avoid a leak (Serge Semin) - Always enable CDM check if "snps,enable-cdm-check" exists instead of exiting early if the optional "num-lanes" was absent (Serge Semin) - Simplify detection of whether we're using unrolled iATU registers (Serge Semin) - Make dw_pcie_link_up() more generic by using dw_pcie_readl_dbi() instead of readl() (Serge Semin) - Add dw_pcie_start_link() and dw_pcie_stop_link() wrappers to factor out checks for ops being implemented (Serge Semin) - Move io_cfg_atu_shared to struct pcie_port and rename to cfg0_io_shared, since it's not used by dwc common code or dwc endpoint code (Serge Semin) - Rename struct pcie_port to dw_pcie_rp to indicate that it's DesignWare-specific (Serge Semin) - Drop unused struct dw_plat_pcie regmap pointer (Serge Semin) - Fix some coding style issues (Serge Semin) - Log link speed and width if it comes up (Serge Semin) - Save DWC IP core version in native format as read from PORT_LOGIC.PCIE_VERSION_OFF register (Serge Semin) - Read DWC IP core version from PORT_LOGIC.PCIE_VERSION_OFF (Serge Semin) - Add macros to compare Synopsys IP core versions (Serge Semin) - Drop manual DWC IP core version setup from intel-gw and tegra194 (Serge Semin) - Add dw_pcie_ops.host_deinit() callback (Serge Semin) - Drop enum dw_pcie_as_type in favor of PCIE_ATU_TYPE_MEM/IO (Serge Semin) - Drop enum dw_pcie_region_type in favor of PCIE_ATU_REGION_DIR_IB/OB (Serge Semin) - Simplify in/outbound iATU setup methods and reduce duplicated code (Serge Semin) - Detect iATU region size from hardware (Serge Semin) - Validate iATU outbound mappings against hardware constraints (Serge Semin) - Check for errors in iATU setup (Serge Semin) - Allocate a 32-bit DMA-able page to be MSI target instead of using a driver data structure that may not be addressable with 32-bit address (Will McVicker) - Use the bitmap API to allocate bitmaps instead of open-coding it (Christophe JAILLET) - Correct dw_pcie_free_msi() checking for when to remove IRQ handler and data (Dmitry Baryshkov) - Split MSI init to new dw_pcie_msi_host_init() function (Dmitry Baryshkov) - Convert struct pcie_port.msi_irq to an array so we can support more than 32 MSI interrupts (Dmitry Baryshkov) - Handle MSIs routed to multiple GIC interrupts for Qualcomm platforms with groups of 32 MSI vectors (Dmitry Baryshkov) - Add additional MSI interrupts to qcom DT (Dmitry Baryshkov) * pci/ctrl/dwc: dt-bindings: PCI: qcom: Support additional MSI vectors PCI: dwc: Handle MSIs routed to multiple GIC interrupts PCI: dwc: Convert struct pcie_port.msi_irq to an array PCI: dwc: Split MSI IRQ parsing/allocation to a separate function PCI: dwc: Correct msi_irq condition in dw_pcie_free_msi() PCI: dwc: Use the bitmap API to allocate bitmaps PCI: dwc: Fix MSI msi_msg DMA mapping PCI: dwc: Check iATU in/outbound range setup status PCI: dwc: Validate iATU outbound mappings against hardware constraints PCI: dwc: Add iATU regions size detection procedure PCI: dwc: Simplify in/outbound iATU setup methods PCI: dwc: Drop enum dw_pcie_region_type in favor of PCIE_ATU_REGION_DIR_IB/OB PCI: dwc: Drop enum dw_pcie_as_type in favor of PCIE_ATU_TYPE_MEM/IO PCI: dwc: Add dw_pcie_ops.host_deinit() callback PCI: tegra194: Drop manual DW PCIe controller version setup PCI: intel-gw: Drop manual DW PCIe controller version setup PCI: dwc: Add macros to compare Synopsys IP core versions PCI: dwc: Read DWC IP core version from register PCI: dwc: Use native DWC IP core version representation PCI: dwc: Detect iATU settings after getting "addr_space" resource PCI: dwc: Log link speed and width if it comes up PCI: dwc-plat: Drop dw_plat_pcie_of_match[] forward declaration PCI: dwc-plat: Drop unused regmap pointer PCI: dwc-plat: Simplify dw_plat_pcie_probe() return values PCI: dwc: Rename struct pcie_port to dw_pcie_rp PCI: dwc: Move io_cfg_atu_shared to struct pcie_port PCI: dwc: Add start_link/stop_link inlines PCI: dwc: Reuse local pointer to the resource data PCI: dwc: Organize local variable usage PCI: dwc: Convert dw_pcie_link_up() to use dw_pcie_readl_dbi() PCI: dwc: Simplify unrolled iATU detection PCI: dwc: Add newlines to log messages PCI: dwc: Add braces to multi-line if-else statements PCI: dwc: Always enable CDM check if "snps,enable-cdm-check" exists PCI: dwc: Deallocate EPC memory on dw_pcie_ep_init() errors PCI: dwc: Set INCREASE_REGION_SIZE flag based on limit address PCI: dwc: Disable outbound windows only for controllers using iATU PCI: dwc: Add unroll iATU space support to dw_pcie_disable_atu() PCI: dwc: Stop link on host_init errors and de-initialization
2 parents 9154b00 + 91a773f commit 964db79

28 files changed

Lines changed: 756 additions & 645 deletions

Documentation/devicetree/bindings/pci/qcom,pcie.yaml

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,12 @@ properties:
4343
maxItems: 5
4444

4545
interrupts:
46-
maxItems: 1
46+
minItems: 1
47+
maxItems: 8
4748

4849
interrupt-names:
49-
items:
50-
- const: msi
50+
minItems: 1
51+
maxItems: 8
5152

5253
# Common definitions for clocks, clock-names and reset.
5354
# Platform constraints are described later.
@@ -623,6 +624,50 @@ allOf:
623624
- resets
624625
- reset-names
625626

627+
# Newer chipsets support either 1 or 8 MSI vectors
628+
# On older chipsets it's always 1 MSI vector
629+
- if:
630+
properties:
631+
compatible:
632+
contains:
633+
enum:
634+
- qcom,pcie-msm8996
635+
- qcom,pcie-sc7280
636+
- qcom,pcie-sc8180x
637+
- qcom,pcie-sdm845
638+
- qcom,pcie-sm8150
639+
- qcom,pcie-sm8250
640+
- qcom,pcie-sm8450-pcie0
641+
- qcom,pcie-sm8450-pcie1
642+
then:
643+
oneOf:
644+
- properties:
645+
interrupts:
646+
maxItems: 1
647+
interrupt-names:
648+
items:
649+
- const: msi
650+
- properties:
651+
interrupts:
652+
minItems: 8
653+
interrupt-names:
654+
items:
655+
- const: msi0
656+
- const: msi1
657+
- const: msi2
658+
- const: msi3
659+
- const: msi4
660+
- const: msi5
661+
- const: msi6
662+
- const: msi7
663+
else:
664+
properties:
665+
interrupts:
666+
maxItems: 1
667+
interrupt-names:
668+
items:
669+
- const: msi
670+
626671
unevaluatedProperties: false
627672

628673
examples:

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ static void dra7xx_pcie_enable_interrupts(struct dra7xx_pcie *dra7xx)
178178
dra7xx_pcie_enable_msi_interrupts(dra7xx);
179179
}
180180

181-
static int dra7xx_pcie_host_init(struct pcie_port *pp)
181+
static int dra7xx_pcie_host_init(struct dw_pcie_rp *pp)
182182
{
183183
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
184184
struct dra7xx_pcie *dra7xx = to_dra7xx_pcie(pci);
@@ -202,7 +202,7 @@ static const struct irq_domain_ops intx_domain_ops = {
202202
.xlate = pci_irqd_intx_xlate,
203203
};
204204

205-
static int dra7xx_pcie_handle_msi(struct pcie_port *pp, int index)
205+
static int dra7xx_pcie_handle_msi(struct dw_pcie_rp *pp, int index)
206206
{
207207
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
208208
unsigned long val;
@@ -224,7 +224,7 @@ static int dra7xx_pcie_handle_msi(struct pcie_port *pp, int index)
224224
return 1;
225225
}
226226

227-
static void dra7xx_pcie_handle_msi_irq(struct pcie_port *pp)
227+
static void dra7xx_pcie_handle_msi_irq(struct dw_pcie_rp *pp)
228228
{
229229
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
230230
int ret, i, count, num_ctrls;
@@ -255,8 +255,8 @@ static void dra7xx_pcie_msi_irq_handler(struct irq_desc *desc)
255255
{
256256
struct irq_chip *chip = irq_desc_get_chip(desc);
257257
struct dra7xx_pcie *dra7xx;
258+
struct dw_pcie_rp *pp;
258259
struct dw_pcie *pci;
259-
struct pcie_port *pp;
260260
unsigned long reg;
261261
u32 bit;
262262

@@ -344,7 +344,7 @@ static irqreturn_t dra7xx_pcie_irq_handler(int irq, void *arg)
344344
return IRQ_HANDLED;
345345
}
346346

347-
static int dra7xx_pcie_init_irq_domain(struct pcie_port *pp)
347+
static int dra7xx_pcie_init_irq_domain(struct dw_pcie_rp *pp)
348348
{
349349
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
350350
struct device *dev = pci->dev;
@@ -475,15 +475,15 @@ static int dra7xx_add_pcie_port(struct dra7xx_pcie *dra7xx,
475475
{
476476
int ret;
477477
struct dw_pcie *pci = dra7xx->pci;
478-
struct pcie_port *pp = &pci->pp;
478+
struct dw_pcie_rp *pp = &pci->pp;
479479
struct device *dev = pci->dev;
480480

481481
pp->irq = platform_get_irq(pdev, 1);
482482
if (pp->irq < 0)
483483
return pp->irq;
484484

485485
/* MSI IRQ is muxed */
486-
pp->msi_irq = -ENODEV;
486+
pp->msi_irq[0] = -ENODEV;
487487

488488
ret = dra7xx_pcie_init_irq_domain(pp);
489489
if (ret < 0)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ static int exynos_pcie_link_up(struct dw_pcie *pci)
249249
return (val & PCIE_ELBI_XMLH_LINKUP);
250250
}
251251

252-
static int exynos_pcie_host_init(struct pcie_port *pp)
252+
static int exynos_pcie_host_init(struct dw_pcie_rp *pp)
253253
{
254254
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
255255
struct exynos_pcie *ep = to_exynos_pcie(pci);
@@ -276,7 +276,7 @@ static int exynos_add_pcie_port(struct exynos_pcie *ep,
276276
struct platform_device *pdev)
277277
{
278278
struct dw_pcie *pci = &ep->pci;
279-
struct pcie_port *pp = &pci->pp;
279+
struct dw_pcie_rp *pp = &pci->pp;
280280
struct device *dev = &pdev->dev;
281281
int ret;
282282

@@ -292,7 +292,7 @@ static int exynos_add_pcie_port(struct exynos_pcie *ep,
292292
}
293293

294294
pp->ops = &exynos_pcie_host_ops;
295-
pp->msi_irq = -ENODEV;
295+
pp->msi_irq[0] = -ENODEV;
296296

297297
ret = dw_pcie_host_init(pp);
298298
if (ret) {
@@ -406,7 +406,7 @@ static int __maybe_unused exynos_pcie_resume_noirq(struct device *dev)
406406
{
407407
struct exynos_pcie *ep = dev_get_drvdata(dev);
408408
struct dw_pcie *pci = &ep->pci;
409-
struct pcie_port *pp = &pci->pp;
409+
struct dw_pcie_rp *pp = &pci->pp;
410410
int ret;
411411

412412
ret = regulator_bulk_enable(ARRAY_SIZE(ep->supplies), ep->supplies);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -863,7 +863,7 @@ static int imx6_pcie_start_link(struct dw_pcie *pci)
863863
return ret;
864864
}
865865

866-
static int imx6_pcie_host_init(struct pcie_port *pp)
866+
static int imx6_pcie_host_init(struct dw_pcie_rp *pp)
867867
{
868868
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
869869
struct imx6_pcie *imx6_pcie = to_imx6_pcie(pci);
@@ -992,7 +992,7 @@ static int imx6_pcie_resume_noirq(struct device *dev)
992992
{
993993
int ret;
994994
struct imx6_pcie *imx6_pcie = dev_get_drvdata(dev);
995-
struct pcie_port *pp = &imx6_pcie->pci->pp;
995+
struct dw_pcie_rp *pp = &imx6_pcie->pci->pp;
996996

997997
if (!(imx6_pcie->drvdata->flags & IMX6_PCIE_FLAG_SUPPORTS_SUSPEND))
998998
return 0;
@@ -1291,7 +1291,7 @@ static struct platform_driver imx6_pcie_driver = {
12911291
static void imx6_pcie_quirk(struct pci_dev *dev)
12921292
{
12931293
struct pci_bus *bus = dev->bus;
1294-
struct pcie_port *pp = bus->sysdata;
1294+
struct dw_pcie_rp *pp = bus->sysdata;
12951295

12961296
/* Bus parent is the PCI bridge, its parent is this platform driver */
12971297
if (!bus->dev.parent || !bus->dev.parent->parent)

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ struct ks_pcie_of_data {
109109
enum dw_pcie_device_mode mode;
110110
const struct dw_pcie_host_ops *host_ops;
111111
const struct dw_pcie_ep_ops *ep_ops;
112-
unsigned int version;
112+
u32 version;
113113
};
114114

115115
struct keystone_pcie {
@@ -147,7 +147,7 @@ static void ks_pcie_app_writel(struct keystone_pcie *ks_pcie, u32 offset,
147147

148148
static void ks_pcie_msi_irq_ack(struct irq_data *data)
149149
{
150-
struct pcie_port *pp = irq_data_get_irq_chip_data(data);
150+
struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(data);
151151
struct keystone_pcie *ks_pcie;
152152
u32 irq = data->hwirq;
153153
struct dw_pcie *pci;
@@ -167,7 +167,7 @@ static void ks_pcie_msi_irq_ack(struct irq_data *data)
167167

168168
static void ks_pcie_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
169169
{
170-
struct pcie_port *pp = irq_data_get_irq_chip_data(data);
170+
struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(data);
171171
struct keystone_pcie *ks_pcie;
172172
struct dw_pcie *pci;
173173
u64 msi_target;
@@ -192,7 +192,7 @@ static int ks_pcie_msi_set_affinity(struct irq_data *irq_data,
192192

193193
static void ks_pcie_msi_mask(struct irq_data *data)
194194
{
195-
struct pcie_port *pp = irq_data_get_irq_chip_data(data);
195+
struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(data);
196196
struct keystone_pcie *ks_pcie;
197197
u32 irq = data->hwirq;
198198
struct dw_pcie *pci;
@@ -216,7 +216,7 @@ static void ks_pcie_msi_mask(struct irq_data *data)
216216

217217
static void ks_pcie_msi_unmask(struct irq_data *data)
218218
{
219-
struct pcie_port *pp = irq_data_get_irq_chip_data(data);
219+
struct dw_pcie_rp *pp = irq_data_get_irq_chip_data(data);
220220
struct keystone_pcie *ks_pcie;
221221
u32 irq = data->hwirq;
222222
struct dw_pcie *pci;
@@ -247,7 +247,7 @@ static struct irq_chip ks_pcie_msi_irq_chip = {
247247
.irq_unmask = ks_pcie_msi_unmask,
248248
};
249249

250-
static int ks_pcie_msi_host_init(struct pcie_port *pp)
250+
static int ks_pcie_msi_host_init(struct dw_pcie_rp *pp)
251251
{
252252
pp->msi_irq_chip = &ks_pcie_msi_irq_chip;
253253
return dw_pcie_allocate_domains(pp);
@@ -390,7 +390,7 @@ static void ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
390390
u32 val;
391391
u32 num_viewport = ks_pcie->num_viewport;
392392
struct dw_pcie *pci = ks_pcie->pci;
393-
struct pcie_port *pp = &pci->pp;
393+
struct dw_pcie_rp *pp = &pci->pp;
394394
u64 start, end;
395395
struct resource *mem;
396396
int i;
@@ -428,7 +428,7 @@ static void ks_pcie_setup_rc_app_regs(struct keystone_pcie *ks_pcie)
428428
static void __iomem *ks_pcie_other_map_bus(struct pci_bus *bus,
429429
unsigned int devfn, int where)
430430
{
431-
struct pcie_port *pp = bus->sysdata;
431+
struct dw_pcie_rp *pp = bus->sysdata;
432432
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
433433
struct keystone_pcie *ks_pcie = to_keystone_pcie(pci);
434434
u32 reg;
@@ -456,7 +456,7 @@ static struct pci_ops ks_child_pcie_ops = {
456456
*/
457457
static int ks_pcie_v3_65_add_bus(struct pci_bus *bus)
458458
{
459-
struct pcie_port *pp = bus->sysdata;
459+
struct dw_pcie_rp *pp = bus->sysdata;
460460
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
461461
struct keystone_pcie *ks_pcie = to_keystone_pcie(pci);
462462

@@ -574,7 +574,7 @@ static void ks_pcie_msi_irq_handler(struct irq_desc *desc)
574574
struct keystone_pcie *ks_pcie = irq_desc_get_handler_data(desc);
575575
u32 offset = irq - ks_pcie->msi_host_irq;
576576
struct dw_pcie *pci = ks_pcie->pci;
577-
struct pcie_port *pp = &pci->pp;
577+
struct dw_pcie_rp *pp = &pci->pp;
578578
struct device *dev = pci->dev;
579579
struct irq_chip *chip = irq_desc_get_chip(desc);
580580
u32 vector, reg, pos;
@@ -799,7 +799,7 @@ static int __init ks_pcie_init_id(struct keystone_pcie *ks_pcie)
799799
return 0;
800800
}
801801

802-
static int __init ks_pcie_host_init(struct pcie_port *pp)
802+
static int __init ks_pcie_host_init(struct dw_pcie_rp *pp)
803803
{
804804
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
805805
struct keystone_pcie *ks_pcie = to_keystone_pcie(pci);
@@ -1069,19 +1069,19 @@ static int ks_pcie_am654_set_mode(struct device *dev,
10691069

10701070
static const struct ks_pcie_of_data ks_pcie_rc_of_data = {
10711071
.host_ops = &ks_pcie_host_ops,
1072-
.version = 0x365A,
1072+
.version = DW_PCIE_VER_365A,
10731073
};
10741074

10751075
static const struct ks_pcie_of_data ks_pcie_am654_rc_of_data = {
10761076
.host_ops = &ks_pcie_am654_host_ops,
10771077
.mode = DW_PCIE_RC_TYPE,
1078-
.version = 0x490A,
1078+
.version = DW_PCIE_VER_490A,
10791079
};
10801080

10811081
static const struct ks_pcie_of_data ks_pcie_am654_ep_of_data = {
10821082
.ep_ops = &ks_pcie_am654_ep_ops,
10831083
.mode = DW_PCIE_EP_TYPE,
1084-
.version = 0x490A,
1084+
.version = DW_PCIE_VER_490A,
10851085
};
10861086

10871087
static const struct of_device_id ks_pcie_of_match[] = {
@@ -1114,12 +1114,12 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
11141114
struct device_link **link;
11151115
struct gpio_desc *gpiod;
11161116
struct resource *res;
1117-
unsigned int version;
11181117
void __iomem *base;
11191118
u32 num_viewport;
11201119
struct phy **phy;
11211120
u32 num_lanes;
11221121
char name[10];
1122+
u32 version;
11231123
int ret;
11241124
int irq;
11251125
int i;
@@ -1233,7 +1233,7 @@ static int __init ks_pcie_probe(struct platform_device *pdev)
12331233
goto err_get_sync;
12341234
}
12351235

1236-
if (pci->version >= 0x480A)
1236+
if (dw_pcie_ver_is_ge(pci, 480A))
12371237
ret = ks_pcie_am654_set_mode(dev, mode);
12381238
else
12391239
ret = ks_pcie_set_mode(dev);

drivers/pci/controller/dwc/pci-layerscape-ep.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,6 @@ struct ls_pcie_ep {
3232
const struct ls_pcie_ep_drvdata *drvdata;
3333
};
3434

35-
static int ls_pcie_establish_link(struct dw_pcie *pci)
36-
{
37-
return 0;
38-
}
39-
40-
static const struct dw_pcie_ops dw_ls_pcie_ep_ops = {
41-
.start_link = ls_pcie_establish_link,
42-
};
43-
4435
static const struct pci_epc_features*
4536
ls_pcie_ep_get_features(struct dw_pcie_ep *ep)
4637
{
@@ -106,19 +97,16 @@ static const struct dw_pcie_ep_ops ls_pcie_ep_ops = {
10697

10798
static const struct ls_pcie_ep_drvdata ls1_ep_drvdata = {
10899
.ops = &ls_pcie_ep_ops,
109-
.dw_pcie_ops = &dw_ls_pcie_ep_ops,
110100
};
111101

112102
static const struct ls_pcie_ep_drvdata ls2_ep_drvdata = {
113103
.func_offset = 0x20000,
114104
.ops = &ls_pcie_ep_ops,
115-
.dw_pcie_ops = &dw_ls_pcie_ep_ops,
116105
};
117106

118107
static const struct ls_pcie_ep_drvdata lx2_ep_drvdata = {
119108
.func_offset = 0x8000,
120109
.ops = &ls_pcie_ep_ops,
121-
.dw_pcie_ops = &dw_ls_pcie_ep_ops,
122110
};
123111

124112
static const struct of_device_id ls_pcie_ep_of_match[] = {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static void ls_pcie_fix_error_response(struct ls_pcie *pcie)
7474
iowrite32(PCIE_ABSERR_SETTING, pci->dbi_base + PCIE_ABSERR);
7575
}
7676

77-
static int ls_pcie_host_init(struct pcie_port *pp)
77+
static int ls_pcie_host_init(struct dw_pcie_rp *pp)
7878
{
7979
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
8080
struct ls_pcie *pcie = to_ls_pcie(pci);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ static int meson_pcie_link_up(struct dw_pcie *pci)
370370
return 0;
371371
}
372372

373-
static int meson_pcie_host_init(struct pcie_port *pp)
373+
static int meson_pcie_host_init(struct dw_pcie_rp *pp)
374374
{
375375
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
376376
struct meson_pcie *mp = to_meson_pcie(pci);

0 commit comments

Comments
 (0)