From patchwork Wed Jan 11 19:22:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Daney X-Patchwork-Id: 713904 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tzJgG4k4Rz9t0H for ; Thu, 12 Jan 2017 06:22:18 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HBB28cr2"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756720AbdAKTWQ (ORCPT ); Wed, 11 Jan 2017 14:22:16 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:34470 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754307AbdAKTWQ (ORCPT ); Wed, 11 Jan 2017 14:22:16 -0500 Received: by mail-pg0-f65.google.com with SMTP id b1so54451194pgc.1; Wed, 11 Jan 2017 11:22:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=757eejJxgCxtzd6e+leUDBRRdDEblE1srGmFb1R+ZJc=; b=HBB28cr2O/9TAqgZdtOqXty2sp8IBdSJ1vuLiA9VI2kbPc7hokYzuurN6YNTFh5WsW 4QMtKL0BjmQw2Yc86U5li4JsSIbmOI1Qc/aa6YW99Lhnc9iS6c2zlBELP8hht803rtln n2/nBWNhsa6zQ7Wp/Djhv5juhExe1XgoCBINMIZZiACKzcM6ELFtk3M9vyb0g+CeXt08 mV4vFlamohF+djCUQ4dICNqdph5xist6fvSMISxIYOqn/3PqmV8s6q8C5mOTQyqzzVM8 dR6AbnvDa/sfx1YS280ZcG/kYwIL3rRUdOHpJ+wNRwoJdxddyNO0nwwHIYcYA9A8SV8U Uovg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=757eejJxgCxtzd6e+leUDBRRdDEblE1srGmFb1R+ZJc=; b=muPAHv/8qpUBuMVdp3xGOX4juWQtZ1obg6xTuLLHqHTUWqhvR6H6h22LnNc6bWTR4H cwlTuU3ssnjKZP9taNVi/iCP0BiF4IGPr/wdIThE93zdAZY/aU7GxiHtFChUk4TfNA0u wE4pkBnRHfPzkWRhvR4CYcLs0fy05lqqPcr1/4jimZ2IOj6p0GLfBN3DxQfvItbPATF3 TX53A832ZQ0TQ62PIfYLNCO7hklaRKdYYYS1pOl+y/cIZOezO6DTxlJ3P+L8pYC4ZLZ8 gciTUeEhDr+LK+fDS7RZBakc3GzS14ZA2sO75kdQbdGPb1ZKQm04dU4J6HAuCajjsvKt 4sgw== X-Gm-Message-State: AIkVDXIiynhLvyjcUGAicPKT/k1+Ma1CU51UMJ1t3whs9FqGWNiI9/SRddMILDl1WjIQ1w== X-Received: by 10.98.35.25 with SMTP id j25mr5334096pfj.35.1484162535299; Wed, 11 Jan 2017 11:22:15 -0800 (PST) Received: from ddl.caveonetworks.com (50-233-148-156-static.hfc.comcastbusiness.net. [50.233.148.156]) by smtp.gmail.com with ESMTPSA id t129sm15733143pgc.32.2017.01.11.11.22.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Jan 2017 11:22:14 -0800 (PST) From: David Daney To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Bjorn Helgaas , linux-arm-kernel@lists.infradead.org Cc: David Daney Subject: [PATCH v2] PCI: thunder-pem: Add support for cn81xx and cn83xx SoCs. Date: Wed, 11 Jan 2017 11:22:11 -0800 Message-Id: <20170111192211.29049-1-ddaney.cavm@gmail.com> X-Mailer: git-send-email 2.9.3 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: David Daney The pci-thunder-pem driver was initially developed for cn88xx SoCs. The cn81xx and cn83xx members of the same family of SoCs has a slightly different configuration of interrupt resources in the PEM hardware, which prevents the INTA legacy interrupt source from functioning with the current driver. There are two fixes required: 1) Don't fixup the PME interrupt on the newer SoCs as it already has the proper value. 2) Report MSI-X Capability Table Size of 2 for the newer SoCs, so the core MSI-X code doesn't inadvertently clobber the INTA machinery that happens to reside immediately following the table. Signed-off-by: David Daney --- Changes from v1: Fixed comment typo. drivers/pci/host/pci-thunder-pem.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c index af722eb..52b5bdc 100644 --- a/drivers/pci/host/pci-thunder-pem.c +++ b/drivers/pci/host/pci-thunder-pem.c @@ -36,7 +36,7 @@ struct thunder_pem_pci { static int thunder_pem_bridge_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val) { - u64 read_val; + u64 read_val, tmp_val; struct pci_config_window *cfg = bus->sysdata; struct thunder_pem_pci *pem_pci = (struct thunder_pem_pci *)cfg->priv; @@ -65,13 +65,28 @@ static int thunder_pem_bridge_read(struct pci_bus *bus, unsigned int devfn, read_val |= 0x00007000; /* Skip MSI CAP */ break; case 0x70: /* Express Cap */ - /* PME interrupt on vector 2*/ - read_val |= (2u << 25); + /* + * Change PME interrupt to vector 2 on T88 where it + * reads as 0, else leave it alone. + */ + if (!(read_val & (0x1f << 25))) + read_val |= (2u << 25); break; case 0xb0: /* MSI-X Cap */ - /* TableSize=4, Next Cap is EA */ + /* TableSize=2 or 4, Next Cap is EA */ read_val &= 0xc00000ff; - read_val |= 0x0003bc00; + /* + * If Express Cap(0x70) raw PME vector reads as 0 we are on + * T88 and TableSize is reported as 4, else TableSize + * is 2. + */ + writeq(0x70, pem_pci->pem_reg_base + PEM_CFG_RD); + tmp_val = readq(pem_pci->pem_reg_base + PEM_CFG_RD); + tmp_val >>= 32; + if (!(tmp_val & (0x1f << 25))) + read_val |= 0x0003bc00; + else + read_val |= 0x0001bc00; break; case 0xb4: /* Table offset=0, BIR=0 */