Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-16 Thread Jianjun Wang
On Mon, 2020-09-14 at 08:32 -0600, Rob Herring wrote:
> On Mon, Sep 14, 2020 at 5:07 AM Jianjun Wang  
> wrote:
> >
> > On Fri, 2020-09-11 at 16:44 -0600, Rob Herring wrote:
> > > On Thu, Sep 10, 2020 at 11:45:35AM +0800, Jianjun Wang wrote:
> > > > MediaTek's PCIe host controller has three generation HWs, the new
> > > > generation HW is an individual bridge, it supoorts Gen3 speed and
> > > > up to 256 MSI interrupt numbers for multi-function devices.
> > > >
> > > > Add support for new Gen3 controller which can be found on MT8192.
> > > >
> > > > Signed-off-by: Jianjun Wang 
> > > > Acked-by: Ryder Lee 
> > > > ---
> > > >  drivers/pci/controller/Kconfig  |   14 +
> > > >  drivers/pci/controller/Makefile |1 +
> > > >  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
> > > >  3 files changed, 1091 insertions(+)
> > > >  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> > > >
> > > > diff --git a/drivers/pci/controller/Kconfig 
> > > > b/drivers/pci/controller/Kconfig
> > > > index f18c3725ef80..83daa772595b 100644
> > > > --- a/drivers/pci/controller/Kconfig
> > > > +++ b/drivers/pci/controller/Kconfig
> > > > @@ -239,6 +239,20 @@ config PCIE_MEDIATEK
> > > >   Say Y here if you want to enable PCIe controller support on
> > > >   MediaTek SoCs.
> > > >
> > > > +config PCIE_MEDIATEK_GEN3
> > > > +   tristate "MediaTek GEN3 PCIe controller"
> > > > +   depends on ARCH_MEDIATEK || COMPILE_TEST
> > > > +   depends on OF
> > > > +   depends on PCI_MSI_IRQ_DOMAIN
> > > > +   help
> > > > + Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
> > > > + This PCIe controller provides the capable of 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 PCIE_TANGO_SMP8759
> > > > bool "Tango SMP8759 PCIe controller (DANGEROUS)"
> > > > depends on ARCH_TANGO && PCI_MSI && OF
> > > > diff --git a/drivers/pci/controller/Makefile 
> > > > b/drivers/pci/controller/Makefile
> > > > index bcdbf49ab1e4..9c1b96777597 100644
> > > > --- a/drivers/pci/controller/Makefile
> > > > +++ b/drivers/pci/controller/Makefile
> > > > @@ -27,6 +27,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
> > > >  obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
> > > >  obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
> > > >  obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
> > > > +obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
> > > >  obj-$(CONFIG_PCIE_TANGO_SMP8759) += pcie-tango.o
> > > >  obj-$(CONFIG_VMD) += vmd.o
> > > >  obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
> > > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> > > > b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > > new file mode 100644
> > > > index ..f8c8bdf88d33
> > > > --- /dev/null
> > > > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > > @@ -0,0 +1,1076 @@
> > > > +// SPDX-License-Identifier: GPL-2.0
> > > > +/*
> > > > + * MediaTek PCIe host controller driver.
> > > > + *
> > > > + * Copyright (c) 2020 MediaTek Inc.
> > > > + * Author: Jianjun Wang 
> > > > + */
> > > > +
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +#include 
> > > > +
> > > > +#include "../pci.h"
> > > > +
> > > > +#define PCIE_SETTING_REG   0x80
> > > > +#define PCIE_PCI_IDS_1 0x9c
> > > > +#define PCI_CLASS(class)   (class << 8)
> > > > +#define PCIE_RC_MODE   BIT(0)
> > > > +
> > > > +#define PCIE_CFGNUM_REG0x140
> > > > +#define PCIE_CFG_DEVFN(devfn)  ((devfn) & GENMASK(7, 0))
> > > > +#define PCIE_CFG_BUS(bus)  (((bus) << 8) & GENMASK(15, 8))
> > > > +#define PCIE_CFG_BYTE_EN(bytes)(((bytes) << 16) & 
> > > > GENMASK(19, 16))
> > > > +#define PCIE_CFG_FORCE_BYTE_EN BIT(20)
> > > > +#define PCIE_CFG_OFFSET_ADDR   0x1000
> > > > +#define PCIE_CFG_HEADER(devfn, bus) \
> > > > +   (PCIE_CFG_DEVFN(devfn) | PCIE_CFG_BUS(bus))
> > > > +
> > > > +#define PCIE_CFG_HEADER_FORCE_BE(devfn, bus, bytes) \
> > > > +   (PCIE_CFG_HEADER(devfn, bus) | PCIE_CFG_BYTE_EN(bytes) \
> > > > +| PCIE_CFG_FORCE_BYTE_EN)
> > > > +
> > > > +#define PCIE_RST_CTRL_REG  0x148
> > > > +#define PCIE_MAC_RSTB  BIT(0)
> > > > +#define PCIE_PHY_RSTB  BIT(1)
> > > > +#define PCIE_BRG_RSTB  BIT(2)
> > > > +#define PCIE_PE_RSTB   BIT(3)
> > > > +
> > 

Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-14 Thread Rob Herring
On Mon, Sep 14, 2020 at 5:07 AM Jianjun Wang  wrote:
>
> On Fri, 2020-09-11 at 16:44 -0600, Rob Herring wrote:
> > On Thu, Sep 10, 2020 at 11:45:35AM +0800, Jianjun Wang wrote:
> > > MediaTek's PCIe host controller has three generation HWs, the new
> > > generation HW is an individual bridge, it supoorts Gen3 speed and
> > > up to 256 MSI interrupt numbers for multi-function devices.
> > >
> > > Add support for new Gen3 controller which can be found on MT8192.
> > >
> > > Signed-off-by: Jianjun Wang 
> > > Acked-by: Ryder Lee 
> > > ---
> > >  drivers/pci/controller/Kconfig  |   14 +
> > >  drivers/pci/controller/Makefile |1 +
> > >  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
> > >  3 files changed, 1091 insertions(+)
> > >  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> > >
> > > diff --git a/drivers/pci/controller/Kconfig 
> > > b/drivers/pci/controller/Kconfig
> > > index f18c3725ef80..83daa772595b 100644
> > > --- a/drivers/pci/controller/Kconfig
> > > +++ b/drivers/pci/controller/Kconfig
> > > @@ -239,6 +239,20 @@ config PCIE_MEDIATEK
> > >   Say Y here if you want to enable PCIe controller support on
> > >   MediaTek SoCs.
> > >
> > > +config PCIE_MEDIATEK_GEN3
> > > +   tristate "MediaTek GEN3 PCIe controller"
> > > +   depends on ARCH_MEDIATEK || COMPILE_TEST
> > > +   depends on OF
> > > +   depends on PCI_MSI_IRQ_DOMAIN
> > > +   help
> > > + Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
> > > + This PCIe controller provides the capable of 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 PCIE_TANGO_SMP8759
> > > bool "Tango SMP8759 PCIe controller (DANGEROUS)"
> > > depends on ARCH_TANGO && PCI_MSI && OF
> > > diff --git a/drivers/pci/controller/Makefile 
> > > b/drivers/pci/controller/Makefile
> > > index bcdbf49ab1e4..9c1b96777597 100644
> > > --- a/drivers/pci/controller/Makefile
> > > +++ b/drivers/pci/controller/Makefile
> > > @@ -27,6 +27,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
> > >  obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
> > >  obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
> > >  obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
> > > +obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
> > >  obj-$(CONFIG_PCIE_TANGO_SMP8759) += pcie-tango.o
> > >  obj-$(CONFIG_VMD) += vmd.o
> > >  obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
> > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> > > b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > new file mode 100644
> > > index ..f8c8bdf88d33
> > > --- /dev/null
> > > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > > @@ -0,0 +1,1076 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * MediaTek PCIe host controller driver.
> > > + *
> > > + * Copyright (c) 2020 MediaTek Inc.
> > > + * Author: Jianjun Wang 
> > > + */
> > > +
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +#include 
> > > +
> > > +#include "../pci.h"
> > > +
> > > +#define PCIE_SETTING_REG   0x80
> > > +#define PCIE_PCI_IDS_1 0x9c
> > > +#define PCI_CLASS(class)   (class << 8)
> > > +#define PCIE_RC_MODE   BIT(0)
> > > +
> > > +#define PCIE_CFGNUM_REG0x140
> > > +#define PCIE_CFG_DEVFN(devfn)  ((devfn) & GENMASK(7, 0))
> > > +#define PCIE_CFG_BUS(bus)  (((bus) << 8) & GENMASK(15, 8))
> > > +#define PCIE_CFG_BYTE_EN(bytes)(((bytes) << 16) & 
> > > GENMASK(19, 16))
> > > +#define PCIE_CFG_FORCE_BYTE_EN BIT(20)
> > > +#define PCIE_CFG_OFFSET_ADDR   0x1000
> > > +#define PCIE_CFG_HEADER(devfn, bus) \
> > > +   (PCIE_CFG_DEVFN(devfn) | PCIE_CFG_BUS(bus))
> > > +
> > > +#define PCIE_CFG_HEADER_FORCE_BE(devfn, bus, bytes) \
> > > +   (PCIE_CFG_HEADER(devfn, bus) | PCIE_CFG_BYTE_EN(bytes) \
> > > +| PCIE_CFG_FORCE_BYTE_EN)
> > > +
> > > +#define PCIE_RST_CTRL_REG  0x148
> > > +#define PCIE_MAC_RSTB  BIT(0)
> > > +#define PCIE_PHY_RSTB  BIT(1)
> > > +#define PCIE_BRG_RSTB  BIT(2)
> > > +#define PCIE_PE_RSTB   BIT(3)
> > > +
> > > +#define PCIE_MISC_STATUS_REG   0x14C
> > > +#define PCIE_LTR_MSG_RECEIVED  BIT(0)
> > > +#define PCIE_PCIE_MSG_RECEIVED BIT(1)
> > > +
> > > +#define PCIE_LTSSM_STATUS_REG  0x150
> > > +#define PCIE_LTSSM_STATE_MASK  GENMASK(28, 24)

Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-14 Thread Jianjun Wang
On Fri, 2020-09-11 at 16:44 -0600, Rob Herring wrote:
> On Thu, Sep 10, 2020 at 11:45:35AM +0800, Jianjun Wang wrote:
> > MediaTek's PCIe host controller has three generation HWs, the new
> > generation HW is an individual bridge, it supoorts Gen3 speed and
> > up to 256 MSI interrupt numbers for multi-function devices.
> > 
> > Add support for new Gen3 controller which can be found on MT8192.
> > 
> > Signed-off-by: Jianjun Wang 
> > Acked-by: Ryder Lee 
> > ---
> >  drivers/pci/controller/Kconfig  |   14 +
> >  drivers/pci/controller/Makefile |1 +
> >  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
> >  3 files changed, 1091 insertions(+)
> >  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> > 
> > diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
> > index f18c3725ef80..83daa772595b 100644
> > --- a/drivers/pci/controller/Kconfig
> > +++ b/drivers/pci/controller/Kconfig
> > @@ -239,6 +239,20 @@ config PCIE_MEDIATEK
> >   Say Y here if you want to enable PCIe controller support on
> >   MediaTek SoCs.
> >  
> > +config PCIE_MEDIATEK_GEN3
> > +   tristate "MediaTek GEN3 PCIe controller"
> > +   depends on ARCH_MEDIATEK || COMPILE_TEST
> > +   depends on OF
> > +   depends on PCI_MSI_IRQ_DOMAIN
> > +   help
> > + Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
> > + This PCIe controller provides the capable of 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 PCIE_TANGO_SMP8759
> > bool "Tango SMP8759 PCIe controller (DANGEROUS)"
> > depends on ARCH_TANGO && PCI_MSI && OF
> > diff --git a/drivers/pci/controller/Makefile 
> > b/drivers/pci/controller/Makefile
> > index bcdbf49ab1e4..9c1b96777597 100644
> > --- a/drivers/pci/controller/Makefile
> > +++ b/drivers/pci/controller/Makefile
> > @@ -27,6 +27,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
> >  obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
> >  obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
> >  obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
> > +obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
> >  obj-$(CONFIG_PCIE_TANGO_SMP8759) += pcie-tango.o
> >  obj-$(CONFIG_VMD) += vmd.o
> >  obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
> > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> > b/drivers/pci/controller/pcie-mediatek-gen3.c
> > new file mode 100644
> > index ..f8c8bdf88d33
> > --- /dev/null
> > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> > @@ -0,0 +1,1076 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * MediaTek PCIe host controller driver.
> > + *
> > + * Copyright (c) 2020 MediaTek Inc.
> > + * Author: Jianjun Wang 
> > + */
> > +
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +
> > +#include "../pci.h"
> > +
> > +#define PCIE_SETTING_REG   0x80
> > +#define PCIE_PCI_IDS_1 0x9c
> > +#define PCI_CLASS(class)   (class << 8)
> > +#define PCIE_RC_MODE   BIT(0)
> > +
> > +#define PCIE_CFGNUM_REG0x140
> > +#define PCIE_CFG_DEVFN(devfn)  ((devfn) & GENMASK(7, 0))
> > +#define PCIE_CFG_BUS(bus)  (((bus) << 8) & GENMASK(15, 8))
> > +#define PCIE_CFG_BYTE_EN(bytes)(((bytes) << 16) & GENMASK(19, 
> > 16))
> > +#define PCIE_CFG_FORCE_BYTE_EN BIT(20)
> > +#define PCIE_CFG_OFFSET_ADDR   0x1000
> > +#define PCIE_CFG_HEADER(devfn, bus) \
> > +   (PCIE_CFG_DEVFN(devfn) | PCIE_CFG_BUS(bus))
> > +
> > +#define PCIE_CFG_HEADER_FORCE_BE(devfn, bus, bytes) \
> > +   (PCIE_CFG_HEADER(devfn, bus) | PCIE_CFG_BYTE_EN(bytes) \
> > +| PCIE_CFG_FORCE_BYTE_EN)
> > +
> > +#define PCIE_RST_CTRL_REG  0x148
> > +#define PCIE_MAC_RSTB  BIT(0)
> > +#define PCIE_PHY_RSTB  BIT(1)
> > +#define PCIE_BRG_RSTB  BIT(2)
> > +#define PCIE_PE_RSTB   BIT(3)
> > +
> > +#define PCIE_MISC_STATUS_REG   0x14C
> > +#define PCIE_LTR_MSG_RECEIVED  BIT(0)
> > +#define PCIE_PCIE_MSG_RECEIVED BIT(1)
> > +
> > +#define PCIE_LTSSM_STATUS_REG  0x150
> > +#define PCIE_LTSSM_STATE_MASK  GENMASK(28, 24)
> > +#define PCIE_LTSSM_STATE(val)  ((val & PCIE_LTSSM_STATE_MASK) 
> > >> 24)
> > +#define PCIE_LTSSM_STATE_L00x10
> > +#define PCIE_LTSSM_STATE_L1_IDLE   0x13
> > +#define PCIE_LTSSM_STATE_L2_IDLE   0x14
> > +
> > +#define PCIE_LINK_STATUS_REG   0x154
> > 

Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-14 Thread Jianjun Wang
On Fri, 2020-09-11 at 16:33 +0200, Philipp Zabel wrote:
> Hi Jianjun,
> 
> On Thu, 2020-09-10 at 11:45 +0800, Jianjun Wang wrote:
> > MediaTek's PCIe host controller has three generation HWs, the new
> > generation HW is an individual bridge, it supoorts Gen3 speed and
> > up to 256 MSI interrupt numbers for multi-function devices.
> > 
> > Add support for new Gen3 controller which can be found on MT8192.
> > 
> > Signed-off-by: Jianjun Wang 
> > Acked-by: Ryder Lee 
> > ---
> >  drivers/pci/controller/Kconfig  |   14 +
> >  drivers/pci/controller/Makefile |1 +
> >  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
> >  3 files changed, 1091 insertions(+)
> >  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> > 
> [...]
> > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> > b/drivers/pci/controller/pcie-mediatek-gen3.c
> > new file mode 100644
> > index ..f8c8bdf88d33
> > --- /dev/null
> > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> [...]
> > +static int mtk_pcie_power_up(struct mtk_pcie_port *port)
> > +{
> > +   struct device *dev = port->dev;
> > +   int err;
> > +
> > +   port->phy_reset = devm_reset_control_get_optional(dev, "phy-rst");
> 
> Please use devm_reset_control_get_optional_exclusive() instead.
> 
> > +   if (PTR_ERR(port->phy_reset) == -EPROBE_DEFER)
> > +   return PTR_ERR(port->phy_reset);
> 
> This should be
> 
>   if (IS_ERR(port->phy_reset))
>   return PTR_ERR(port->phy_reset);
> 
> there is no reason to continue if this throws -ENOMEM, for example.
> 
> regards
> Philipp

Thanks for your review, I will fix it in the next version.



Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-11 Thread Rob Herring
On Thu, Sep 10, 2020 at 11:45:35AM +0800, Jianjun Wang wrote:
> MediaTek's PCIe host controller has three generation HWs, the new
> generation HW is an individual bridge, it supoorts Gen3 speed and
> up to 256 MSI interrupt numbers for multi-function devices.
> 
> Add support for new Gen3 controller which can be found on MT8192.
> 
> Signed-off-by: Jianjun Wang 
> Acked-by: Ryder Lee 
> ---
>  drivers/pci/controller/Kconfig  |   14 +
>  drivers/pci/controller/Makefile |1 +
>  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
>  3 files changed, 1091 insertions(+)
>  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> 
> diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
> index f18c3725ef80..83daa772595b 100644
> --- a/drivers/pci/controller/Kconfig
> +++ b/drivers/pci/controller/Kconfig
> @@ -239,6 +239,20 @@ config PCIE_MEDIATEK
> Say Y here if you want to enable PCIe controller support on
> MediaTek SoCs.
>  
> +config PCIE_MEDIATEK_GEN3
> + tristate "MediaTek GEN3 PCIe controller"
> + depends on ARCH_MEDIATEK || COMPILE_TEST
> + depends on OF
> + depends on PCI_MSI_IRQ_DOMAIN
> + help
> +   Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
> +   This PCIe controller provides the capable of 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 PCIE_TANGO_SMP8759
>   bool "Tango SMP8759 PCIe controller (DANGEROUS)"
>   depends on ARCH_TANGO && PCI_MSI && OF
> diff --git a/drivers/pci/controller/Makefile b/drivers/pci/controller/Makefile
> index bcdbf49ab1e4..9c1b96777597 100644
> --- a/drivers/pci/controller/Makefile
> +++ b/drivers/pci/controller/Makefile
> @@ -27,6 +27,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
>  obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
>  obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
>  obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
> +obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
>  obj-$(CONFIG_PCIE_TANGO_SMP8759) += pcie-tango.o
>  obj-$(CONFIG_VMD) += vmd.o
>  obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> b/drivers/pci/controller/pcie-mediatek-gen3.c
> new file mode 100644
> index ..f8c8bdf88d33
> --- /dev/null
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
> @@ -0,0 +1,1076 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * MediaTek PCIe host controller driver.
> + *
> + * Copyright (c) 2020 MediaTek Inc.
> + * Author: Jianjun Wang 
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "../pci.h"
> +
> +#define PCIE_SETTING_REG 0x80
> +#define PCIE_PCI_IDS_1   0x9c
> +#define PCI_CLASS(class) (class << 8)
> +#define PCIE_RC_MODE BIT(0)
> +
> +#define PCIE_CFGNUM_REG  0x140
> +#define PCIE_CFG_DEVFN(devfn)((devfn) & GENMASK(7, 0))
> +#define PCIE_CFG_BUS(bus)(((bus) << 8) & GENMASK(15, 8))
> +#define PCIE_CFG_BYTE_EN(bytes)  (((bytes) << 16) & GENMASK(19, 
> 16))
> +#define PCIE_CFG_FORCE_BYTE_EN   BIT(20)
> +#define PCIE_CFG_OFFSET_ADDR 0x1000
> +#define PCIE_CFG_HEADER(devfn, bus) \
> + (PCIE_CFG_DEVFN(devfn) | PCIE_CFG_BUS(bus))
> +
> +#define PCIE_CFG_HEADER_FORCE_BE(devfn, bus, bytes) \
> + (PCIE_CFG_HEADER(devfn, bus) | PCIE_CFG_BYTE_EN(bytes) \
> +  | PCIE_CFG_FORCE_BYTE_EN)
> +
> +#define PCIE_RST_CTRL_REG0x148
> +#define PCIE_MAC_RSTBBIT(0)
> +#define PCIE_PHY_RSTBBIT(1)
> +#define PCIE_BRG_RSTBBIT(2)
> +#define PCIE_PE_RSTB BIT(3)
> +
> +#define PCIE_MISC_STATUS_REG 0x14C
> +#define PCIE_LTR_MSG_RECEIVEDBIT(0)
> +#define PCIE_PCIE_MSG_RECEIVED   BIT(1)
> +
> +#define PCIE_LTSSM_STATUS_REG0x150
> +#define PCIE_LTSSM_STATE_MASKGENMASK(28, 24)
> +#define PCIE_LTSSM_STATE(val)((val & PCIE_LTSSM_STATE_MASK) 
> >> 24)
> +#define PCIE_LTSSM_STATE_L0  0x10
> +#define PCIE_LTSSM_STATE_L1_IDLE 0x13
> +#define PCIE_LTSSM_STATE_L2_IDLE 0x14
> +
> +#define PCIE_LINK_STATUS_REG 0x154
> +#define PCIE_PORT_LINKUP BIT(8)
> +
> +#define PCIE_MSI_SET_NUM 8
> +#define PCIE_MSI_IRQS_PER_SET32
> +#define PCIE_MSI_IRQS_NUM \
> + (PCIE_MSI_IRQS_PER_SET * (PCIE_MSI_SET_NUM))
> +
> +#define PCIE_INT_ENABLE_REG  0x180
> 

Re: [v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-11 Thread Philipp Zabel
Hi Jianjun,

On Thu, 2020-09-10 at 11:45 +0800, Jianjun Wang wrote:
> MediaTek's PCIe host controller has three generation HWs, the new
> generation HW is an individual bridge, it supoorts Gen3 speed and
> up to 256 MSI interrupt numbers for multi-function devices.
> 
> Add support for new Gen3 controller which can be found on MT8192.
> 
> Signed-off-by: Jianjun Wang 
> Acked-by: Ryder Lee 
> ---
>  drivers/pci/controller/Kconfig  |   14 +
>  drivers/pci/controller/Makefile |1 +
>  drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
>  3 files changed, 1091 insertions(+)
>  create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c
> 
[...]
> diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
> b/drivers/pci/controller/pcie-mediatek-gen3.c
> new file mode 100644
> index ..f8c8bdf88d33
> --- /dev/null
> +++ b/drivers/pci/controller/pcie-mediatek-gen3.c
[...]
> +static int mtk_pcie_power_up(struct mtk_pcie_port *port)
> +{
> + struct device *dev = port->dev;
> + int err;
> +
> + port->phy_reset = devm_reset_control_get_optional(dev, "phy-rst");

Please use devm_reset_control_get_optional_exclusive() instead.

> + if (PTR_ERR(port->phy_reset) == -EPROBE_DEFER)
> + return PTR_ERR(port->phy_reset);

This should be

if (IS_ERR(port->phy_reset))
return PTR_ERR(port->phy_reset);

there is no reason to continue if this throws -ENOMEM, for example.

regards
Philipp


[v2,2/3] PCI: mediatek: Add new generation controller support

2020-09-09 Thread Jianjun Wang
MediaTek's PCIe host controller has three generation HWs, the new
generation HW is an individual bridge, it supoorts Gen3 speed and
up to 256 MSI interrupt numbers for multi-function devices.

Add support for new Gen3 controller which can be found on MT8192.

Signed-off-by: Jianjun Wang 
Acked-by: Ryder Lee 
---
 drivers/pci/controller/Kconfig  |   14 +
 drivers/pci/controller/Makefile |1 +
 drivers/pci/controller/pcie-mediatek-gen3.c | 1076 +++
 3 files changed, 1091 insertions(+)
 create mode 100644 drivers/pci/controller/pcie-mediatek-gen3.c

diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
index f18c3725ef80..83daa772595b 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -239,6 +239,20 @@ config PCIE_MEDIATEK
  Say Y here if you want to enable PCIe controller support on
  MediaTek SoCs.
 
+config PCIE_MEDIATEK_GEN3
+   tristate "MediaTek GEN3 PCIe controller"
+   depends on ARCH_MEDIATEK || COMPILE_TEST
+   depends on OF
+   depends on PCI_MSI_IRQ_DOMAIN
+   help
+ Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
+ This PCIe controller provides the capable of 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 PCIE_TANGO_SMP8759
bool "Tango SMP8759 PCIe controller (DANGEROUS)"
depends on ARCH_TANGO && PCI_MSI && OF
diff --git a/drivers/pci/controller/Makefile b/drivers/pci/controller/Makefile
index bcdbf49ab1e4..9c1b96777597 100644
--- a/drivers/pci/controller/Makefile
+++ b/drivers/pci/controller/Makefile
@@ -27,6 +27,7 @@ obj-$(CONFIG_PCIE_ROCKCHIP) += pcie-rockchip.o
 obj-$(CONFIG_PCIE_ROCKCHIP_EP) += pcie-rockchip-ep.o
 obj-$(CONFIG_PCIE_ROCKCHIP_HOST) += pcie-rockchip-host.o
 obj-$(CONFIG_PCIE_MEDIATEK) += pcie-mediatek.o
+obj-$(CONFIG_PCIE_MEDIATEK_GEN3) += pcie-mediatek-gen3.o
 obj-$(CONFIG_PCIE_TANGO_SMP8759) += pcie-tango.o
 obj-$(CONFIG_VMD) += vmd.o
 obj-$(CONFIG_PCIE_BRCMSTB) += pcie-brcmstb.o
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c 
b/drivers/pci/controller/pcie-mediatek-gen3.c
new file mode 100644
index ..f8c8bdf88d33
--- /dev/null
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -0,0 +1,1076 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek PCIe host controller driver.
+ *
+ * Copyright (c) 2020 MediaTek Inc.
+ * Author: Jianjun Wang 
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "../pci.h"
+
+#define PCIE_SETTING_REG   0x80
+#define PCIE_PCI_IDS_1 0x9c
+#define PCI_CLASS(class)   (class << 8)
+#define PCIE_RC_MODE   BIT(0)
+
+#define PCIE_CFGNUM_REG0x140
+#define PCIE_CFG_DEVFN(devfn)  ((devfn) & GENMASK(7, 0))
+#define PCIE_CFG_BUS(bus)  (((bus) << 8) & GENMASK(15, 8))
+#define PCIE_CFG_BYTE_EN(bytes)(((bytes) << 16) & GENMASK(19, 
16))
+#define PCIE_CFG_FORCE_BYTE_EN BIT(20)
+#define PCIE_CFG_OFFSET_ADDR   0x1000
+#define PCIE_CFG_HEADER(devfn, bus) \
+   (PCIE_CFG_DEVFN(devfn) | PCIE_CFG_BUS(bus))
+
+#define PCIE_CFG_HEADER_FORCE_BE(devfn, bus, bytes) \
+   (PCIE_CFG_HEADER(devfn, bus) | PCIE_CFG_BYTE_EN(bytes) \
+| PCIE_CFG_FORCE_BYTE_EN)
+
+#define PCIE_RST_CTRL_REG  0x148
+#define PCIE_MAC_RSTB  BIT(0)
+#define PCIE_PHY_RSTB  BIT(1)
+#define PCIE_BRG_RSTB  BIT(2)
+#define PCIE_PE_RSTB   BIT(3)
+
+#define PCIE_MISC_STATUS_REG   0x14C
+#define PCIE_LTR_MSG_RECEIVED  BIT(0)
+#define PCIE_PCIE_MSG_RECEIVED BIT(1)
+
+#define PCIE_LTSSM_STATUS_REG  0x150
+#define PCIE_LTSSM_STATE_MASK  GENMASK(28, 24)
+#define PCIE_LTSSM_STATE(val)  ((val & PCIE_LTSSM_STATE_MASK) >> 24)
+#define PCIE_LTSSM_STATE_L00x10
+#define PCIE_LTSSM_STATE_L1_IDLE   0x13
+#define PCIE_LTSSM_STATE_L2_IDLE   0x14
+
+#define PCIE_LINK_STATUS_REG   0x154
+#define PCIE_PORT_LINKUP   BIT(8)
+
+#define PCIE_MSI_SET_NUM   8
+#define PCIE_MSI_IRQS_PER_SET  32
+#define PCIE_MSI_IRQS_NUM \
+   (PCIE_MSI_IRQS_PER_SET * (PCIE_MSI_SET_NUM))
+
+#define PCIE_INT_ENABLE_REG0x180
+#define PCIE_MSI_MASK  GENMASK(PCIE_MSI_SET_NUM + 8 - 1, 8)
+#define PCIE_MSI_SHIFT 8
+#define PCIE_INTX_SHIFT24
+#define PCIE_INTX_MASK GENMASK(27, 24)
+#define PCIE_MSG_MASK  BIT(28)
+#define PCIE_AER_MASK  BIT(29)
+#define