Merge branch 'remotes/lorenzo/pci/mediatek'
- Configure FC and FTS for functions other than 0 (Ryder Lee) - Add missing MODULE_DEVICE_TABLE (Qiheng Lin) - Add YAML schema for MediaTek (Jianjun Wang) - Export pci_pio_to_address() for module use (Jianjun Wang) - Add MediaTek MT8192 PCIe controller driver (Jianjun Wang) - Add MediaTek MT8192 INTx support (Jianjun Wang) - Add MediaTek MT8192 MSI support (Jianjun Wang) - Add MediaTek MT8192 system power management support (Jianjun Wang) * remotes/lorenzo/pci/mediatek: MAINTAINERS: Add Jianjun Wang as MediaTek PCI co-maintainer PCI: mediatek-gen3: Add system PM support PCI: mediatek-gen3: Add MSI support PCI: mediatek-gen3: Add INTx support PCI: mediatek-gen3: Add MediaTek Gen3 driver for MT8192 PCI: Export pci_pio_to_address() for module use dt-bindings: PCI: mediatek-gen3: Add YAML schema PCI: mediatek: Add missing MODULE_DEVICE_TABLE PCI: mediatek: Configure FC and FTS for functions other than 0
This commit is contained in:
commit
0b51c08bde
181
Documentation/devicetree/bindings/pci/mediatek-pcie-gen3.yaml
Normal file
181
Documentation/devicetree/bindings/pci/mediatek-pcie-gen3.yaml
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/pci/mediatek-pcie-gen3.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Gen3 PCIe controller on MediaTek SoCs
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Jianjun Wang <jianjun.wang@mediatek.com>
|
||||||
|
|
||||||
|
description: |+
|
||||||
|
PCIe Gen3 MAC controller for MediaTek SoCs, it supports Gen3 speed
|
||||||
|
and compatible with Gen2, Gen1 speed.
|
||||||
|
|
||||||
|
This PCIe controller supports up to 256 MSI vectors, the MSI hardware
|
||||||
|
block diagram is as follows:
|
||||||
|
|
||||||
|
+-----+
|
||||||
|
| GIC |
|
||||||
|
+-----+
|
||||||
|
^
|
||||||
|
|
|
||||||
|
port->irq
|
||||||
|
|
|
||||||
|
+-+-+-+-+-+-+-+-+
|
||||||
|
|0|1|2|3|4|5|6|7| (PCIe intc)
|
||||||
|
+-+-+-+-+-+-+-+-+
|
||||||
|
^ ^ ^
|
||||||
|
| | ... |
|
||||||
|
+-------+ +------+ +-----------+
|
||||||
|
| | |
|
||||||
|
+-+-+---+--+--+ +-+-+---+--+--+ +-+-+---+--+--+
|
||||||
|
|0|1|...|30|31| |0|1|...|30|31| |0|1|...|30|31| (MSI sets)
|
||||||
|
+-+-+---+--+--+ +-+-+---+--+--+ +-+-+---+--+--+
|
||||||
|
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
|
||||||
|
| | | | | | | | | | | | (MSI vectors)
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
|
||||||
|
(MSI SET0) (MSI SET1) ... (MSI SET7)
|
||||||
|
|
||||||
|
With 256 MSI vectors supported, the MSI vectors are composed of 8 sets,
|
||||||
|
each set has its own address for MSI message, and supports 32 MSI vectors
|
||||||
|
to generate interrupt.
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/pci/pci-bus.yaml#
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: mediatek,mt8192-pcie
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
reg-names:
|
||||||
|
items:
|
||||||
|
- const: pcie-mac
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
ranges:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 8
|
||||||
|
|
||||||
|
resets:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 2
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 2
|
||||||
|
items:
|
||||||
|
- const: phy
|
||||||
|
- const: mac
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 6
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: pl_250m
|
||||||
|
- const: tl_26m
|
||||||
|
- const: tl_96m
|
||||||
|
- const: tl_32k
|
||||||
|
- const: peri_26m
|
||||||
|
- const: top_133m
|
||||||
|
|
||||||
|
assigned-clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
assigned-clock-parents:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
phys:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
'#interrupt-cells':
|
||||||
|
const: 1
|
||||||
|
|
||||||
|
interrupt-controller:
|
||||||
|
description: Interrupt controller node for handling legacy PCI interrupts.
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
'#address-cells':
|
||||||
|
const: 0
|
||||||
|
'#interrupt-cells':
|
||||||
|
const: 1
|
||||||
|
interrupt-controller: true
|
||||||
|
|
||||||
|
required:
|
||||||
|
- '#address-cells'
|
||||||
|
- '#interrupt-cells'
|
||||||
|
- interrupt-controller
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- reg-names
|
||||||
|
- interrupts
|
||||||
|
- ranges
|
||||||
|
- clocks
|
||||||
|
- '#interrupt-cells'
|
||||||
|
- interrupt-controller
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
|
||||||
|
bus {
|
||||||
|
#address-cells = <2>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
|
||||||
|
pcie: pcie@11230000 {
|
||||||
|
compatible = "mediatek,mt8192-pcie";
|
||||||
|
device_type = "pci";
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
reg = <0x00 0x11230000 0x00 0x4000>;
|
||||||
|
reg-names = "pcie-mac";
|
||||||
|
interrupts = <GIC_SPI 251 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
|
bus-range = <0x00 0xff>;
|
||||||
|
ranges = <0x82000000 0x00 0x12000000 0x00
|
||||||
|
0x12000000 0x00 0x1000000>;
|
||||||
|
clocks = <&infracfg 44>,
|
||||||
|
<&infracfg 40>,
|
||||||
|
<&infracfg 43>,
|
||||||
|
<&infracfg 97>,
|
||||||
|
<&infracfg 99>,
|
||||||
|
<&infracfg 111>;
|
||||||
|
clock-names = "pl_250m", "tl_26m", "tl_96m",
|
||||||
|
"tl_32k", "peri_26m", "top_133m";
|
||||||
|
assigned-clocks = <&topckgen 50>;
|
||||||
|
assigned-clock-parents = <&topckgen 91>;
|
||||||
|
|
||||||
|
phys = <&pciephy>;
|
||||||
|
phy-names = "pcie-phy";
|
||||||
|
|
||||||
|
resets = <&infracfg_rst 2>,
|
||||||
|
<&infracfg_rst 3>;
|
||||||
|
reset-names = "phy", "mac";
|
||||||
|
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-map-mask = <0 0 0 0x7>;
|
||||||
|
interrupt-map = <0 0 0 1 &pcie_intc 0>,
|
||||||
|
<0 0 0 2 &pcie_intc 1>,
|
||||||
|
<0 0 0 3 &pcie_intc 2>,
|
||||||
|
<0 0 0 4 &pcie_intc 3>;
|
||||||
|
pcie_intc: interrupt-controller {
|
||||||
|
#address-cells = <0>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
interrupt-controller;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -13919,6 +13919,7 @@ F: drivers/pci/controller/dwc/pcie-histb.c
|
|||||||
|
|
||||||
PCIE DRIVER FOR MEDIATEK
|
PCIE DRIVER FOR MEDIATEK
|
||||||
M: Ryder Lee <ryder.lee@mediatek.com>
|
M: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
|
M: Jianjun Wang <jianjun.wang@mediatek.com>
|
||||||
L: linux-pci@vger.kernel.org
|
L: linux-pci@vger.kernel.org
|
||||||
L: linux-mediatek@lists.infradead.org
|
L: linux-mediatek@lists.infradead.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -233,6 +233,19 @@ config PCIE_MEDIATEK
|
|||||||
Say Y here if you want to enable PCIe controller support on
|
Say Y here if you want to enable PCIe controller support on
|
||||||
MediaTek SoCs.
|
MediaTek SoCs.
|
||||||
|
|
||||||
|
config PCIE_MEDIATEK_GEN3
|
||||||
|
tristate "MediaTek Gen3 PCIe controller"
|
||||||
|
depends on ARCH_MEDIATEK || COMPILE_TEST
|
||||||
|
depends on PCI_MSI_IRQ_DOMAIN
|
||||||
|
help
|
||||||
|
Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
|
||||||
|
This PCIe controller is compatible with Gen3, Gen2 and Gen1 speed,
|
||||||
|
and support up to 256 MSI interrupt numbers for
|
||||||
|
multi-function devices.
|
||||||
|
|
||||||
|
Say Y here if you want to enable Gen3 PCIe controller support on
|
||||||
|
MediaTek SoCs.
|
||||||
|
|
||||||
config VMD
|
config VMD
|
||||||
depends on PCI_MSI && X86_64 && SRCU
|
depends on PCI_MSI && X86_64 && SRCU
|
||||||
tristate "Intel Volume Management Device Driver"
|
tristate "Intel Volume Management Device Driver"
|
||||||
|
@ -30,6 +30,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
|
|||||||
obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
|
obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
|
||||||
obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
|
obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
|
||||||
obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
|
obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
|
||||||
|
obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
|
||||||
obj-$(CONFIG_PCIE_MICROCHIP_HOST) += pcie-microchip-host.o
|
obj-$(CONFIG_PCIE_MICROCHIP_HOST) += pcie-microchip-host.o
|
||||||
obj-$(CONFIG_VMD) += vmd.o
|
obj-$(CONFIG_VMD) += vmd.o
|
||||||
obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
|
obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
|
||||||
|
1027
drivers/pci/controller/pcie-mediatek-gen3.c
Normal file
1027
drivers/pci/controller/pcie-mediatek-gen3.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -760,7 +760,7 @@ static struct pci_ops mtk_pcie_ops = {
|
|||||||
static int mtk_pcie_startup_port(struct mtk_pcie_port *port)
|
static int mtk_pcie_startup_port(struct mtk_pcie_port *port)
|
||||||
{
|
{
|
||||||
struct mtk_pcie *pcie = port->pcie;
|
struct mtk_pcie *pcie = port->pcie;
|
||||||
u32 func = PCI_FUNC(port->slot << 3);
|
u32 func = PCI_FUNC(port->slot);
|
||||||
u32 slot = PCI_SLOT(port->slot << 3);
|
u32 slot = PCI_SLOT(port->slot << 3);
|
||||||
u32 val;
|
u32 val;
|
||||||
int err;
|
int err;
|
||||||
@ -1210,6 +1210,7 @@ static const struct of_device_id mtk_pcie_ids[] = {
|
|||||||
{ .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 },
|
{ .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 },
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, mtk_pcie_ids);
|
||||||
|
|
||||||
static struct platform_driver mtk_pcie_driver = {
|
static struct platform_driver mtk_pcie_driver = {
|
||||||
.probe = mtk_pcie_probe,
|
.probe = mtk_pcie_probe,
|
||||||
|
@ -4052,6 +4052,7 @@ phys_addr_t pci_pio_to_address(unsigned long pio)
|
|||||||
|
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(pci_pio_to_address);
|
||||||
|
|
||||||
unsigned long __weak pci_address_to_pio(phys_addr_t address)
|
unsigned long __weak pci_address_to_pio(phys_addr_t address)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user