From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 193E4C433EF for ; Wed, 20 Oct 2021 21:41:13 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4A4DD610E6 for ; Wed, 20 Oct 2021 21:41:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 4A4DD610E6 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2132B8349B; Wed, 20 Oct 2021 23:40:34 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="Jyi2+Zds"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 60A97833C2; Wed, 20 Oct 2021 23:31:54 +0200 (CEST) Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id B03E5833F2 for ; Wed, 20 Oct 2021 23:31:46 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=3wIpwYQYKBqkJMNUeJPXXPUN.LXVd-KXXcURbcb.MNWg.MN@flex--adelva.bounces.google.com Received: by mail-pf1-x44a.google.com with SMTP id y41-20020a056a00182900b0044d43d31f20so2539014pfa.11 for ; Wed, 20 Oct 2021 14:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=SKMTD2GSDmnZEF6zH5yHlbTAWJHhURepMhajdnfIk2g=; b=Jyi2+Zdsk4y/yAzdW2ceVs+HWbRNlnUM6QaAue/01yelWqsYxAvOPopFJgk4DuSG6w 0BZXr/GVMRCW2ft+xoLgmOyZOOGuEuaF2HPFtItdmP2BCnX5bfW7jVUQP40jPCIl/yUz lbUU2j9ibJN3YYkB6MFOb9TCy1wkAiI9wgsqsTx+ZhpgWSIJzbnAKP5fIY2EqESiXvTW XJSO+6Uu5KdLzSpJMX9sQ9/nNEpIC1De72853a9NDqL1+CWBJgC1k//rq1ArTABKOPua 43dsLg4ZpKUruDRB12A+RFgYfz1MyJRZTtCbXWEnuMJnSwvmiXl989ooUmX0s1qfTb4w rF5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=SKMTD2GSDmnZEF6zH5yHlbTAWJHhURepMhajdnfIk2g=; b=Wmdb8qhUaElYX3JOTzkTueC2rwZysjx+3hH+YcRpPHhq4FKVi2WPHR6OCQAEoJ8lH6 dB+LQS/s+RhfFO0we/bGadx/pgodA+pjjFxjBtmSZRIN5Ia7yWuxRCd2x9LvHmVFml4t YiJH3iN+x4D/On/pEU+81G86r01Fp6SmzuRbdmIHAqhj4Q43CDnxqe8FgxLEYBwi6Rea RNJ+Hs6z6FyOu+XWygOiXlNwcyzLccMcJDMwJgHP1Ud8olSCNjSsYs+QW6PRFoy5vQzG 8qBe53mRgz8N7wa7SDrp0wp1nf1h8R0MVG/pCHA30skdO6EC8KekvRs1qD/oZwPj+6/d TvIA== X-Gm-Message-State: AOAM530FcT2xIRsnLX6MC3P84ga5sgrZ6gMiiDphldnHoFeMwa+qP87G L4nieu2IGEcEz/UAa+DfX868djzdITEPbyx9biF/MdzGs6AfLBok6NQ2SgAaag3n1GOQY2uNj2w iXfELhDFnAWODxo2wPuO3koeydGw7Bj7LUxpA7aKI9lrA7EU59L0mjouur+A= X-Google-Smtp-Source: ABdhPJzVC6elNT/vLqf/U+eOzQVnwL2Kz8k0cfGvipMVCEW3CmZVlwYPZbQloH2KG+kN+wyTKEZvwi2eECI= X-Received: from adelva.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:b2b]) (user=adelva job=sendgmr) by 2002:a17:90a:b381:: with SMTP id e1mr1671831pjr.55.1634765504951; Wed, 20 Oct 2021 14:31:44 -0700 (PDT) Date: Wed, 20 Oct 2021 21:31:34 +0000 In-Reply-To: <20211020213134.7534-1-adelva@google.com> Message-Id: <20211020213134.7534-6-adelva@google.com> Mime-Version: 1.0 References: <20211020213134.7534-1-adelva@google.com> X-Mailer: git-send-email 2.33.0.1079.g6e70778dc9-goog Subject: [PATCH] RFC: arm: pci: Add PCI cam support to PCI-E ecam driver From: Alistair Delva To: u-boot@lists.denx.de Cc: Tuomas Tynkkynen , Ram Muthiah Content-Type: text/plain; charset="UTF-8" X-Mailman-Approved-At: Wed, 20 Oct 2021 23:39:55 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean When booting U-Boot in crosvm, the virtual machine emulates a PCI cam device, not the PCI-E 'ecam' device normally seen on e.g. QEMU. This PCI device can be supported with only trivial changes to the ecam driver. Instead of adding a completely new driver which is identical besides the initialization step, add support for the PCI version to the existing driver. Signed-off-by: Alistair Delva Cc: Tuomas Tynkkynen Cc: Ram Muthiah --- drivers/pci/pcie_ecam_generic.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/pci/pcie_ecam_generic.c b/drivers/pci/pcie_ecam_generic.c index e83e5aff20..c9b55b45a9 100644 --- a/drivers/pci/pcie_ecam_generic.c +++ b/drivers/pci/pcie_ecam_generic.c @@ -14,6 +14,8 @@ #include +#define TYPE_PCI 0x1 + /** * struct generic_ecam_pcie - generic_ecam PCIe controller state * @cfg_base: The base address of memory mapped configuration space @@ -46,9 +48,16 @@ static int pci_generic_ecam_conf_address(const struct udevice *bus, void *addr; addr = pcie->cfg_base; - addr += (PCI_BUS(bdf) - pcie->first_busno) << 20; - addr += PCI_DEV(bdf) << 15; - addr += PCI_FUNC(bdf) << 12; + + if (dev_get_driver_data(bus) == TYPE_PCI) { + addr += (PCI_BUS(bdf) - pcie->first_busno) << 16; + addr += PCI_DEV(bdf) << 11; + addr += PCI_FUNC(bdf) << 8; + } else { + addr += (PCI_BUS(bdf) - pcie->first_busno) << 20; + addr += PCI_DEV(bdf) << 15; + addr += PCI_FUNC(bdf) << 12; + } addr += offset; *paddress = addr; @@ -158,7 +167,8 @@ static const struct dm_pci_ops pci_generic_ecam_ops = { }; static const struct udevice_id pci_generic_ecam_ids[] = { - { .compatible = "pci-host-ecam-generic" }, + { .compatible = "pci-host-ecam-generic" /* PCI-E */ }, + { .compatible = "pci-host-cam-generic", .data = TYPE_PCI }, { } }; -- 2.30.2