[{"id":1771565,"web_url":"http://patchwork.ozlabs.org/comment/1771565/","msgid":"<CAEUhbmVfDJO=BHj-bRqnWtb87ekREHiH9uxfhynBWWvyp8ad=g@mail.gmail.com>","list_archive_url":null,"date":"2017-09-20T05:01:55","subject":"Re: [U-Boot] [PATCH v2 4/6] PCI: Add driver for a\n\t'pci-host-ecam-generic' host controller","submitter":{"id":64981,"url":"http://patchwork.ozlabs.org/api/people/64981/","name":"Bin Meng","email":"bmeng.cn@gmail.com"},"content":"Hi Tuomas,\n\nOn Wed, Sep 20, 2017 at 4:18 AM, Tuomas Tynkkynen\n<tuomas.tynkkynen@iki.fi> wrote:\n> QEMU emulates such a device with '-machine virt,highmem=off' on ARM.\n> The 'highmem=off' part is required for things to work as the PCI code\n> in U-Boot doesn't seem to support 64-bit BARs.\n>\n> Signed-off-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>\n> ---\n> v2:\n>  - no 'default n'\n>  - remove unnecessary non-DM struct field (inherited from the Xilinx driver)\n>  - fix doc comment problems (inherited from the Xilinx driver)\n>  - use the new generic memory mapped config space helpers\n> ---\n>  drivers/pci/Kconfig             |   8 +++\n>  drivers/pci/Makefile            |   1 +\n>  drivers/pci/pcie_ecam_generic.c | 143 ++++++++++++++++++++++++++++++++++++++++\n>  3 files changed, 152 insertions(+)\n>  create mode 100644 drivers/pci/pcie_ecam_generic.c\n>\n> diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig\n> index e2a1c0a409..648dff7543 100644\n> --- a/drivers/pci/Kconfig\n> +++ b/drivers/pci/Kconfig\n> @@ -33,6 +33,14 @@ config PCI_PNP\n>         help\n>           Enable PCI memory and I/O space resource allocation and assignment.\n>\n> +config PCIE_ECAM_GENERIC\n> +       bool \"Generic ECAM-based PCI host controller support\"\n> +       default n\n\nStill 'default n' here?\n\n> +       depends on DM_PCI\n> +       help\n> +         Say Y here if you want to enable support for generic ECAM-based\n> +         PCIe host controllers, such as the one emulated by QEMU.\n> +\n>  config PCIE_DW_MVEBU\n>         bool \"Enable Armada-8K PCIe driver (DesignWare core)\"\n>         default n\n> diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile\n> index ad44e83996..5eb12efbf5 100644\n> --- a/drivers/pci/Makefile\n> +++ b/drivers/pci/Makefile\n> @@ -17,6 +17,7 @@ obj-$(CONFIG_PCI) += pci.o pci_auto_old.o\n>  endif\n>  obj-$(CONFIG_PCI) += pci_auto_common.o pci_common.o\n>\n> +obj-$(CONFIG_PCIE_ECAM_GENERIC) += pcie_ecam_generic.o\n>  obj-$(CONFIG_FSL_PCI_INIT) += fsl_pci_init.o\n>  obj-$(CONFIG_PCI_INDIRECT_BRIDGE) += pci_indirect.o\n>  obj-$(CONFIG_PCI_GT64120) += pci_gt64120.o\n> diff --git a/drivers/pci/pcie_ecam_generic.c b/drivers/pci/pcie_ecam_generic.c\n> new file mode 100644\n> index 0000000000..2758f90de1\n> --- /dev/null\n> +++ b/drivers/pci/pcie_ecam_generic.c\n> @@ -0,0 +1,143 @@\n> +/*\n> + * Generic PCIE host provided by e.g. QEMU\n> + *\n> + * Heavily based on drivers/pci/pcie_xilinx.c\n> + *\n> + * Copyright (C) 2016 Imagination Technologies\n> + *\n> + * SPDX-License-Identifier:    GPL-2.0\n> + */\n> +\n> +#include <common.h>\n> +#include <dm.h>\n> +#include <pci.h>\n> +\n> +#include <asm/io.h>\n> +\n> +/**\n> + * struct generic_ecam_pcie - generic_ecam PCIe controller state\n> + * @cfg_base: The base address of memory mapped configuration space\n> + */\n> +struct generic_ecam_pcie {\n> +       void *cfg_base;\n> +};\n> +\n> +/**\n> + * pci_generic_ecam_conf_address() - Calculate the address of a config access\n\nnits: please add one blank line here\n\n> + * @bus: Pointer to the PCI bus\n> + * @bdf: Identifies the PCIe device to access\n> + * @offset: The offset into the device's configuration space\n> + * @paddress: Pointer to the pointer to write the calculates address to\n> + *\n> + * Calculates the address that should be accessed to perform a PCIe\n> + * configuration space access for a given device identified by the PCIe\n> + * controller device @pcie and the bus, device & function numbers in @bdf. If\n> + * access to the device is not valid then the function will return an error\n> + * code. Otherwise the address to access will be written to the pointer pointed\n> + * to by @paddress.\n> + */\n> +static int pci_generic_ecam_conf_address(struct udevice *bus, pci_dev_t bdf,\n> +                                           uint offset, void **paddress)\n> +{\n> +       struct generic_ecam_pcie *pcie = dev_get_priv(bus);\n> +       void *addr;\n> +\n> +       addr = pcie->cfg_base;\n> +       addr += PCI_BUS(bdf) << 20;\n> +       addr += PCI_DEV(bdf) << 15;\n> +       addr += PCI_FUNC(bdf) << 12;\n> +       addr += offset;\n> +       *paddress = addr;\n> +\n> +       return 0;\n> +}\n> +\n> +/**\n> + * pci_generic_ecam_read_config() - Read from configuration space\n\nnits: please add one blank line here\n\n> + * @bus: Pointer to the PCI bus\n> + * @bdf: Identifies the PCIe device to access\n> + * @offset: The offset into the device's configuration space\n> + * @valuep: A pointer at which to store the read value\n> + * @size: Indicates the size of access to perform\n> + *\n> + * Read a value of size @size from offset @offset within the configuration\n> + * space of the device identified by the bus, device & function numbers in @bdf\n> + * on the PCI bus @bus.\n> + */\n> +static int pci_generic_ecam_read_config(struct udevice *bus, pci_dev_t bdf,\n> +                                  uint offset, ulong *valuep,\n> +                                  enum pci_size_t size)\n> +{\n> +       return pci_generic_mmap_read_config(bus, pci_generic_ecam_conf_address,\n> +                                           bdf, offset, valuep, size);\n> +}\n> +\n> +/**\n> + * pci_generic_ecam_write_config() - Write to configuration space\n\nnits: please add one blank line here\n\n> + * @bus: Pointer to the PCI bus\n> + * @bdf: Identifies the PCIe device to access\n> + * @offset: The offset into the device's configuration space\n> + * @value: The value to write\n> + * @size: Indicates the size of access to perform\n> + *\n> + * Write the value @value of size @size from offset @offset within the\n> + * configuration space of the device identified by the bus, device & function\n> + * numbers in @bdf on the PCI bus @bus.\n> + */\n> +static int pci_generic_ecam_write_config(struct udevice *bus, pci_dev_t bdf,\n> +                                   uint offset, ulong value,\n> +                                   enum pci_size_t size)\n> +{\n> +       return pci_generic_mmap_write_config(bus, pci_generic_ecam_conf_address,\n> +                                            bdf, offset, value, size);\n> +}\n> +\n> +/**\n> + * pci_generic_ecam_ofdata_to_platdata() - Translate from DT to device state\n\nnits: please add one blank line here\n\n> + * @dev: A pointer to the device being operated on\n> + *\n> + * Translate relevant data from the device tree pertaining to device @dev into\n> + * state that the driver will later make use of. This state is stored in the\n> + * device's private data structure.\n> + *\n> + * Return: 0 on success, else -EINVAL\n> + */\n> +static int pci_generic_ecam_ofdata_to_platdata(struct udevice *dev)\n> +{\n> +       struct generic_ecam_pcie *pcie = dev_get_priv(dev);\n> +       struct fdt_resource reg_res;\n> +       DECLARE_GLOBAL_DATA_PTR;\n> +       int err;\n> +\n> +       err = fdt_get_resource(gd->fdt_blob, dev_of_offset(dev), \"reg\",\n> +                              0, &reg_res);\n> +       if (err < 0) {\n> +               error(\"\\\"reg\\\" resource not found\\n\");\n> +               return err;\n> +       }\n> +\n> +       pcie->cfg_base = map_physmem(reg_res.start,\n> +                                    fdt_resource_size(&reg_res),\n> +                                    MAP_NOCACHE);\n> +\n> +       return 0;\n> +}\n> +\n> +static const struct dm_pci_ops pci_generic_ecam_ops = {\n> +       .read_config    = pci_generic_ecam_read_config,\n> +       .write_config   = pci_generic_ecam_write_config,\n> +};\n> +\n> +static const struct udevice_id pci_generic_ecam_ids[] = {\n> +       { .compatible = \"pci-host-ecam-generic\" },\n> +       { }\n> +};\n> +\n> +U_BOOT_DRIVER(pci_generic_ecam) = {\n> +       .name                   = \"pci_generic_ecam\",\n> +       .id                     = UCLASS_PCI,\n> +       .of_match               = pci_generic_ecam_ids,\n> +       .ops                    = &pci_generic_ecam_ops,\n> +       .ofdata_to_platdata     = pci_generic_ecam_ofdata_to_platdata,\n> +       .priv_auto_alloc_size   = sizeof(struct generic_ecam_pcie),\n> +};\n> --\n\nOther than above nits:\nReviewed-by: Bin Meng <bmeng.cn@gmail.com>\n\nRegards,\nBin","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"l458NUy6\"; dkim-atps=neutral"],"Received":["from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xxnhH4LcDz9s82\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 20 Sep 2017 15:03:43 +1000 (AEST)","by lists.denx.de (Postfix, from userid 105)\n\tid 5BCACC21DC6; Wed, 20 Sep 2017 05:02:38 +0000 (UTC)","from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id DA148C21DC1;\n\tWed, 20 Sep 2017 05:02:30 +0000 (UTC)","by lists.denx.de (Postfix, from userid 105)\n\tid BDA4DC21D84; Wed, 20 Sep 2017 05:02:00 +0000 (UTC)","from mail-wr0-f194.google.com (mail-wr0-f194.google.com\n\t[209.85.128.194])\n\tby lists.denx.de (Postfix) with ESMTPS id 6CB23C21DC5\n\tfor <u-boot@lists.denx.de>; Wed, 20 Sep 2017 05:01:56 +0000 (UTC)","by mail-wr0-f194.google.com with SMTP id g50so803835wra.3\n\tfor <u-boot@lists.denx.de>; Tue, 19 Sep 2017 22:01:56 -0700 (PDT)","by 10.223.145.3 with HTTP; Tue, 19 Sep 2017 22:01:55 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=0.0 required=5.0 tests=FREEMAIL_FROM,\n\tRCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,\n\tT_DKIM_INVALID autolearn=unavailable\n\tautolearn_force=no version=3.4.0","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=C9RSKSgx4gWX8iuYRGWiRPNqBM+tHG5RUm41XzfQ2ME=;\n\tb=l458NUy6sdL1B6s3wtOFpUvcZZ0Kfba/0Axq4fXT0/T1hs+N3Q710ISKEMarBxJ/8g\n\tisr55Gk7/LOR7uHtK0mYWZ70YxTSKW+b1zwvg7po+YPAsGi4jmgyIYykWgmwKQpz+JC6\n\tEpXivQiIsOUiuoF8sbf6/EUbkclIUIuhA3F+PyeUv+jNyVbvFSw8f3bnToDJ9eonsM/6\n\t+tiLRIZgaol01/9WbjcD4Ti5gZdL/zG/H7Upi/7OTl5SbjQuOSJu6wGFCiLFJR9geCMx\n\t1OdGgAXwhH2NbUgWneuotdJTmvpZjndXGZRD3VlJ0/d7ArAvhGPYhG290HMZTksmhACu\n\tOV2Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=C9RSKSgx4gWX8iuYRGWiRPNqBM+tHG5RUm41XzfQ2ME=;\n\tb=IrSpdpGUyW7Z/dlRuIZMxSiFDzW9J1XZSKOdplQ5gUnaWvgHhzHzdVVd+uE5HqmHtF\n\tUuPlG77x0UEQh3pxnKDEK/PEebEay3xwOmCQO7XiUIuWLiHkMUhE2+bQIIqXUmXBZrmC\n\tgl4nirETpy1YKX7kbrfWczHAGvAxXbNNi0f7n6AA5FF+sALECtpGjCYCxFpUAZGZmBPX\n\tRznEf37p2euKVUJRRu/6tWuLLRotJ4T/bVf3G5cbcEG7ZXMgbCQEA9vLTMmPbjdUK/Vq\n\tMsGbE9tT8SCGIEx24Qfv67JCX5Ap5yggdiHcuX5eWnLhlUraTLdvark6GaGrEkBQxQBw\n\t2bQw==","X-Gm-Message-State":"AHPjjUjDdSF63cEPPCTmn/2DOqCW2u21cCPQokM1W1ZmKvCThBIG6HWW\n\ttIG1SdMvaxjlHU1iJvt1Gc+Dp/8+h1UJY3YQyWE=","X-Google-Smtp-Source":"AOwi7QAPZn8Qne/b4yPSMhAl8jRvi2GLNgH9Nyj9dQ2mu6p+FPl4ik55gaQkve6JCGny8uTcnXhyqAvuaoD0Cb9c9n0=","X-Received":"by 10.223.166.196 with SMTP id t62mr671927wrc.251.1505883716035; \n\tTue, 19 Sep 2017 22:01:56 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<20170919201808.11433-5-tuomas.tynkkynen@iki.fi>","References":"<20170919201808.11433-1-tuomas.tynkkynen@iki.fi>\n\t<20170919201808.11433-5-tuomas.tynkkynen@iki.fi>","From":"Bin Meng <bmeng.cn@gmail.com>","Date":"Wed, 20 Sep 2017 13:01:55 +0800","Message-ID":"<CAEUhbmVfDJO=BHj-bRqnWtb87ekREHiH9uxfhynBWWvyp8ad=g@mail.gmail.com>","To":"Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>","Cc":"U-Boot Mailing List <u-boot@lists.denx.de>, Tom Rini <trini@konsulko.com>","Subject":"Re: [U-Boot] [PATCH v2 4/6] PCI: Add driver for a\n\t'pci-host-ecam-generic' host controller","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.18","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<http://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>"}},{"id":1782108,"web_url":"http://patchwork.ozlabs.org/comment/1782108/","msgid":"<20171007130758.GR25966@bill-the-cat>","list_archive_url":null,"date":"2017-10-07T13:07:58","subject":"Re: [U-Boot] [U-Boot, v2,\n\t4/6] PCI: Add driver for a 'pci-host-ecam-generic' host controller","submitter":{"id":65875,"url":"http://patchwork.ozlabs.org/api/people/65875/","name":"Tom Rini","email":"trini@konsulko.com"},"content":"On Tue, Sep 19, 2017 at 11:18:06PM +0300, Tuomas Tynkkynen wrote:\n\n> QEMU emulates such a device with '-machine virt,highmem=off' on ARM.\n> The 'highmem=off' part is required for things to work as the PCI code\n> in U-Boot doesn't seem to support 64-bit BARs.\n> \n> Signed-off-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>\n> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>\n\nApplied to u-boot/master, thanks!","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=konsulko.com header.i=@konsulko.com\n\theader.b=\"lEKajPeT\"; dkim-atps=neutral"],"Received":["from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3y8RmX1m2tz9t6Z\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSun,  8 Oct 2017 00:14:20 +1100 (AEDT)","by lists.denx.de (Postfix, from userid 105)\n\tid F3CCFC21E40; Sat,  7 Oct 2017 13:12:24 +0000 (UTC)","from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id 1D237C21E57;\n\tSat,  7 Oct 2017 13:09:36 +0000 (UTC)","by lists.denx.de (Postfix, from userid 105)\n\tid 7072EC21E9B; Sat,  7 Oct 2017 13:08:09 +0000 (UTC)","from mail-qt0-f169.google.com (mail-qt0-f169.google.com\n\t[209.85.216.169])\n\tby lists.denx.de (Postfix) with ESMTPS id 43886C21DED\n\tfor <u-boot@lists.denx.de>; Sat,  7 Oct 2017 13:08:02 +0000 (UTC)","by mail-qt0-f169.google.com with SMTP id f15so36018022qtf.7\n\tfor <u-boot@lists.denx.de>; Sat, 07 Oct 2017 06:08:02 -0700 (PDT)","from bill-the-cat ([2606:a000:1401:811b:6821:3a00:ff9f:889e])\n\tby smtp.gmail.com with ESMTPSA id\n\tn202sm979971ywd.5.2017.10.07.06.08.00\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tSat, 07 Oct 2017 06:08:00 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H3,\n\tRCVD_IN_MSPIKE_WL,\n\tT_DKIM_INVALID autolearn=unavailable autolearn_force=no\n\tversion=3.4.0","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=konsulko.com;\n\ts=google; \n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:in-reply-to:user-agent;\n\tbh=6g/hYNho803B+b6iznI667quJGuhW7Ka4Wbht76pfKE=;\n\tb=lEKajPeTcgd69VDq0rZMNjVAXBxFK18ZvJFRPm8G0WihTWoJaRBSsRY7qP+81CCCwe\n\t8SK0UlLUa23ZNXDQtscNlNhWXqbOdASTNG5cl367Ot6aYohsmW6tzt6VZLeRAhDoeVIG\n\tliN0p3AlYZQMlt8GkBv2Dft125nmj0v4v58SA=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to:user-agent;\n\tbh=6g/hYNho803B+b6iznI667quJGuhW7Ka4Wbht76pfKE=;\n\tb=W3wQmZoo4nvD0oM6f9wbcWkx4VkgYOdRbR0yXSLEpEdjPrYuXsAFqXLbW6o3SuAu7W\n\t7jneiE7f6lWiVTBut+9ZsfsolRYzvW0FpDpaWNUVYrIU/YNCRJynxtOuKmarct9uviWE\n\tFPRue5Wqs63M+NzN2KkOCwEhI4G7RhQTpn1+GDK+rgBlivuc6dKxxB94OXENzEG+nBH7\n\tZxzTxc4LkVo15Yl1DY+0hmvJPz3lmx6ihODD+Q2SIlTKErLuDZhFCF5ydbGJbcVlPBCN\n\tsHXF9qHT+RCWA/4OJFQjBOBX3ilj9R2vSQB31eKO7nIF2Pe8qBRIcbAlOLi5Vj7GlERN\n\tOTxg==","X-Gm-Message-State":"AMCzsaVjZnHd41eFzjSl6pxfvARBtrdpcit7aP5Ebldf1rzTSSuKe4e3\n\tqj7c7cfW2Z5i1AJcwA3tVD++Kg==","X-Google-Smtp-Source":"AOwi7QDDN5Hwcwu7PsrazGbb+6Z2jEwoPiROwZozNVffWob+UsEvI7G6Hs86Suyf9u5dWG5govlVMA==","X-Received":"by 10.129.125.215 with SMTP id\n\ty206mr4057068ywc.173.1507381681226; \n\tSat, 07 Oct 2017 06:08:01 -0700 (PDT)","Date":"Sat, 7 Oct 2017 09:07:58 -0400","From":"Tom Rini <trini@konsulko.com>","To":"Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>","Message-ID":"<20171007130758.GR25966@bill-the-cat>","References":"<20170919201808.11433-5-tuomas.tynkkynen@iki.fi>","MIME-Version":"1.0","In-Reply-To":"<20170919201808.11433-5-tuomas.tynkkynen@iki.fi>","User-Agent":"Mutt/1.5.24 (2015-08-30)","Cc":"u-boot@lists.denx.de","Subject":"Re: [U-Boot] [U-Boot, v2,\n\t4/6] PCI: Add driver for a 'pci-host-ecam-generic' host controller","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.18","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<http://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>","Content-Type":"multipart/mixed;\n\tboundary=\"===============4818078538783357671==\"","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>"}}]