Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp604494ybk; Wed, 20 May 2020 07:32:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxpbP9FqeExx10BkZ9Yul22i6uj2pjQxwN0mHyFom8HqUK5DDw4Xrp9XVNKHxlUunFuo4wD X-Received: by 2002:a17:906:abce:: with SMTP id kq14mr3755942ejb.187.1589985177854; Wed, 20 May 2020 07:32:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589985177; cv=none; d=google.com; s=arc-20160816; b=jeLeSNpKUfjq3OTqxPWgIRdnMFXJck9RaLbXLJOVRElS05aI8ClecWQfTgLXRglCxM 1GnFYUo9+l/y2tzeFJeBbbYlj/9ueBoxDXZrShIsjuPpazI8RQe3tGCgvq+gPv4PYet4 ffZJc0uk34JsWbrqgzWd9F73Rfhi2cyh4VDSoZS5jieWS4FtyknQuSdmhk9cqby0jxGX WAhJlGcksTS+o/SjJGdjl28bY2xPIBKhD8y7cZzDTdLwLzwjT69l79f7s+9V+L9GpPOt kobSqPy1c3JPygvkGXTmlv0KTbVuxrPGcSREK8Gy/bOlkloX96DnIkQQAp+UusA9Lafc A47w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=HP7BIyw2Y/C8hkvgzZRIvmSm/MyaptHmyY6CakMJdU0=; b=p6d06oAXS9/Sm3DdBkBsUAfO0egJQLIUBJZuaCY5MP755gcto//sdjVikRQJWM0wv2 J3R76RtueGsxP4OhQZrU+frdOE27yzHCZtdw19DezvTNeH/4VXlyHRVeo8pdyuyIN9G7 KsPzieCqBbaKbOn8e3eCJFu69Tjz7/QWbfDBBilNIFVNK4ohKeyA1fUMDVWO91oKyXxg 2Zk4S9nEdeRNCVAK1rNshCpwqH/IfrLs6pJfWQjd99UNymVBX2ED0xdAosj1weQrSUDL DcARoZkeysqYLSax5XlRRih6u2JeOTLlQC4ui98Fnda3rpP3Ne5AlHrE5eHlsRJIYsqQ VpSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=Tj9V6vdU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f1si1525734eds.384.2020.05.20.07.32.32; Wed, 20 May 2020 07:32:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=Tj9V6vdU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726958AbgETObP (ORCPT + 99 others); Wed, 20 May 2020 10:31:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56506 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726789AbgETObO (ORCPT ); Wed, 20 May 2020 10:31:14 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9B18AC061A0E for ; Wed, 20 May 2020 07:31:13 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id r3so1477023wrn.11 for ; Wed, 20 May 2020 07:31:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=HP7BIyw2Y/C8hkvgzZRIvmSm/MyaptHmyY6CakMJdU0=; b=Tj9V6vdUREzHIKAIcpP3UNMkiwFZOfcPfxrRu9Xv38B5EuZqo0CIOpH5uP0XZ/JRTi dVeKogHLAYHhyKOiXt062o/+fbm82eFp7zEgKhKW64uh3b6SCTshnMRYrSS+lWlvUMT/ fEtOzoXazBSk1EL3cd0pjluANGqfFdC4zEpaY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=HP7BIyw2Y/C8hkvgzZRIvmSm/MyaptHmyY6CakMJdU0=; b=dNHUXYerqWhzK74gGof27tERQU38RpQV80IInzPeauEkcooKCySbuH3g/H4GC29UqP BRyJ4SDqxKXRKlz6ATQYji/wM1yF6eyxRPwzs/SL9f9TziUrm1P7jgVcC4FkZuBLH5Qy mNjryeb27L8r1/SGM6ul5Z1SDOY3lYni6TMt8B4sfZ0MXUiStzrvtjiud/TED/7MKTu3 MXZhqgHI5O29dI1h5P9lgM8ilu72MD3/vjyPVyVKA89cuYIa/eA8cA/kbSkLCxM1TasQ MCz1eREcZKnv9Vd0MfAXeJrEFbZEyBI9QLOsWJ5MW0k9rNflyT48NNiCzEYijH1YX5Zt OXmg== X-Gm-Message-State: AOAM533uKBhtunZtQqP6XsxXdSghusE5JguVBOmQSR7tehBeBAD7hHcY 5fsvxhTTCwsottXy/1GCjfkmcjCVZ78uMk0U6m8Ycw== X-Received: by 2002:adf:e688:: with SMTP id r8mr4324103wrm.274.1589985072196; Wed, 20 May 2020 07:31:12 -0700 (PDT) MIME-Version: 1.0 References: <20200519203419.12369-1-james.quinlan@broadcom.com> <20200519203419.12369-5-james.quinlan@broadcom.com> <5a52e39ce99214877e83104b8ea9f95c0d5b4e90.camel@suse.de> In-Reply-To: <5a52e39ce99214877e83104b8ea9f95c0d5b4e90.camel@suse.de> From: Jim Quinlan Date: Wed, 20 May 2020 10:30:59 -0400 Message-ID: Subject: Re: [PATCH 04/15] PCI: brcmstb: Add compatibily of other chips To: Nicolas Saenz Julienne Cc: Lorenzo Pieralisi , Rob Herring , Bjorn Helgaas , Florian Fainelli , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE" , "open list:PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS" , open list Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 20, 2020 at 7:51 AM Nicolas Saenz Julienne wrote: > > Hi Jim, > > On Tue, 2020-05-19 at 16:34 -0400, Jim Quinlan wrote: > > From: Jim Quinlan > > > > Add in compatibility strings and code for three Broadcom STB chips. > > Some of the register locations, shifts, and masks are different > > for certain chips, requiring the use of different constants based > > on of_id. > > > > We would like to add the following at this time to the match list > > but we need to wait until the end of this patchset so that > > everything works. > > > > { .compatible = "brcm,bcm7211-pcie", .data = &generic_cfg }, > > { .compatible = "brcm,bcm7278-pcie", .data = &bcm7278_cfg }, > > { .compatible = "brcm,bcm7216-pcie", .data = &bcm7278_cfg }, > > { .compatible = "brcm,bcm7445-pcie", .data = &generic_cfg }, > > > > Signed-off-by: Jim Quinlan > > --- > > drivers/pci/controller/pcie-brcmstb.c | 103 +++++++++++++++++++++++--- > > 1 file changed, 91 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/pci/controller/pcie-brcmstb.c > > b/drivers/pci/controller/pcie-brcmstb.c > > index 73020b4ff090..c1cf4ea7d3d9 100644 > > --- a/drivers/pci/controller/pcie-brcmstb.c > > +++ b/drivers/pci/controller/pcie-brcmstb.c > > @@ -120,9 +120,8 @@ > > #define PCIE_EXT_SLOT_SHIFT 15 > > #define PCIE_EXT_FUNC_SHIFT 12 > > > > -#define PCIE_RGR1_SW_INIT_1 0x9210 > > #define PCIE_RGR1_SW_INIT_1_PERST_MASK 0x1 > > -#define PCIE_RGR1_SW_INIT_1_INIT_MASK 0x2 > > +#define PCIE_RGR1_SW_INIT_1_PERST_SHIFT 0x0 > > > > /* PCIe parameters */ > > #define BRCM_NUM_PCIE_OUT_WINS 0x4 > > @@ -152,6 +151,69 @@ > > #define SSC_STATUS_SSC_MASK 0x400 > > #define SSC_STATUS_PLL_LOCK_MASK 0x800 > > > > +#define IDX_ADDR(pcie) \ > > + (pcie->reg_offsets[EXT_CFG_INDEX]) > > +#define DATA_ADDR(pcie) \ > > + (pcie->reg_offsets[EXT_CFG_DATA]) > > +#define PCIE_RGR1_SW_INIT_1(pcie) \ > > + (pcie->reg_offsets[RGR1_SW_INIT_1]) > > + > > +enum { > > + RGR1_SW_INIT_1, > > + EXT_CFG_INDEX, > > + EXT_CFG_DATA, > > +}; > > + > > +enum { > > + RGR1_SW_INIT_1_INIT_MASK, > > + RGR1_SW_INIT_1_INIT_SHIFT, > > +}; > > + > > +enum pcie_type { > > + GENERIC, > > + BCM7278, > > +}; > > + > > +struct pcie_cfg_data { > > + const int *reg_field_info; > > + const int *offsets; > > + const enum pcie_type type; > > +}; > > + > > +static const int pcie_reg_field_info[] = { > > + [RGR1_SW_INIT_1_INIT_MASK] = 0x2, > > + [RGR1_SW_INIT_1_INIT_SHIFT] = 0x1, > > +}; > > + > > +static const int pcie_reg_field_info_bcm7278[] = { > > + [RGR1_SW_INIT_1_INIT_MASK] = 0x1, > > + [RGR1_SW_INIT_1_INIT_SHIFT] = 0x0, > > +}; > > + > > +static const int pcie_offsets[] = { > > + [RGR1_SW_INIT_1] = 0x9210, > > + [EXT_CFG_INDEX] = 0x9000, > > + [EXT_CFG_DATA] = 0x9004, > > +}; > > + > > +static const struct pcie_cfg_data generic_cfg = { > > + .reg_field_info = pcie_reg_field_info, > > + .offsets = pcie_offsets, > > + .type = GENERIC, > > +}; > > + > > +static const int pcie_offset_bcm7278[] = { > > + [RGR1_SW_INIT_1] = 0xc010, > > + [EXT_CFG_INDEX] = 0x9000, > > + [EXT_CFG_DATA] = 0x9004, > > +}; > > + > > +static const struct pcie_cfg_data bcm7278_cfg = { > > + .reg_field_info = pcie_reg_field_info_bcm7278, > > + .offsets = pcie_offset_bcm7278, > > + .type = BCM7278, > > +}; > > It's not essential, but if v2 is due I'd suggest factoring out the bcm2728 > specific structures above, and moving them to patch #15. This will keep a > clearer division between the patch introducing the infrastructure and the one > adding the support for a new device. The problem is that one of the commits needs the 7278 type so it has to be declared earlier. > > > + > > struct brcm_msi { > > struct device *dev; > > void __iomem *base; > > @@ -176,6 +238,9 @@ struct brcm_pcie { > > int gen; > > u64 msi_target_addr; > > struct brcm_msi *msi; > > + const int *reg_offsets; > > + const int *reg_field_info; > > + enum pcie_type type; > > }; > > > > /* > > @@ -602,20 +667,21 @@ static struct pci_ops brcm_pcie_ops = { > > > > static inline void brcm_pcie_bridge_sw_init_set(struct brcm_pcie *pcie, u32 > > val) > > { > > - u32 tmp; > > + u32 tmp, mask = pcie->reg_field_info[RGR1_SW_INIT_1_INIT_MASK]; > > + u32 shift = pcie->reg_field_info[RGR1_SW_INIT_1_INIT_SHIFT]; > > I don't think you need shift here, IIUC u32p_replace_bits() will take care of > all the masking and shifting internally, moreover, you'd be able to drop the > shift entry from reg_field_info. Got it. > > > - tmp = readl(pcie->base + PCIE_RGR1_SW_INIT_1); > > - u32p_replace_bits(&tmp, val, PCIE_RGR1_SW_INIT_1_INIT_MASK); > > - writel(tmp, pcie->base + PCIE_RGR1_SW_INIT_1); > > + tmp = readl(pcie->base + PCIE_RGR1_SW_INIT_1(pcie)); > > + tmp = (tmp & ~mask) | ((val << shift) & mask); > > + writel(tmp, pcie->base + PCIE_RGR1_SW_INIT_1(pcie)); > > } > > Regards, > Nicolas > Thanks! Jim