Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp149244yba; Mon, 1 Apr 2019 03:43:02 -0700 (PDT) X-Google-Smtp-Source: APXvYqwEzw5wRoKijDiS5PADXrqEhgYWiLTLfVB1qCjtrR6YeOKtZMp32HSMP35MQmRd6k4JubPK X-Received: by 2002:a17:902:f094:: with SMTP id go20mr40671988plb.159.1554115382544; Mon, 01 Apr 2019 03:43:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554115382; cv=none; d=google.com; s=arc-20160816; b=aaxhIUNz06Ddm0OOZlTeG8Obqp6VHsFdsyB3cG+9jo/ozkYaaNP0MRKNDAv583nGGc rtm3QzzI6JqW29Mvsv/9MoulexYT/pOSrPA4qlgs7GWPJXenS7KgzHx7BF6qOm1wuet9 UkU/t69dCNhmyJrDyEfJRzQnm/ZAdZWF2KH1/Ougc5uyHpD38JkpKoE1TBgh2UpZQK2U rF5pa7kPIPmWwa7Ryfr6r/HxMZ17APoYHRwaOZTwIHrVrVAJUrtW6R88wG/3u94PCQyo uBHqIetigNS5YHvwGXdXpF0cdxCTrYPeIOF7JVoGAFcmmSna0hkk/+J7DmbOjvkLnmgL Zqrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=bUXqxWaP1QEJrooDO//E7+eG5MEjnbpAMHL7QOP4WX0=; b=WGdgwKKJxrTxgFAyrFmWZ3N0pS+LF6nX2VA89B1RT9fvRMtzHbKhdSiLBvPSskEY7O AvyHD6AOWbNXig0o+W/Yeu7gTFGZMsMhs+tp+DloWnlq5a03VGq6nyMHH4KYhN68qaRs D/KWNDy2Jw59TFVNdfyruiwolpuPhPrb7xeNuMRhWaUXMLNVCNcH9ryjCTx7QV/EZVBD jG5KLaYDKfb3DDI1l6JSSrgU9ZdJiojEwZldGW/taEqBbhSEOkCdicBcY+3jhZSQjVDg tCLnmLwPgApmUASi07P27ajunBzA070kC4koVh+IXzlH28N6WwFEoaA6w+COJ5hkMadt 43RQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=SHbIPvaX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c141si8424842pfc.169.2019.04.01.03.42.46; Mon, 01 Apr 2019 03:43:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=SHbIPvaX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726708AbfDAKlA (ORCPT + 99 others); Mon, 1 Apr 2019 06:41:00 -0400 Received: from mail-wm1-f67.google.com ([209.85.128.67]:53247 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725868AbfDAKk5 (ORCPT ); Mon, 1 Apr 2019 06:40:57 -0400 Received: by mail-wm1-f67.google.com with SMTP id a184so9847124wma.2; Mon, 01 Apr 2019 03:40:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bUXqxWaP1QEJrooDO//E7+eG5MEjnbpAMHL7QOP4WX0=; b=SHbIPvaXzpVm3nlRN9UarxkKY9GWQoGj0T/Ozo171XaHbzZPpcsmgrz/XdeeEMPMGX +h+tqBT9mwkPWs+h7vmLmH1HNbFhQ3dCP4BRuY/tyiq96oKQioDcQcRXGJGQ6jEdGDHq OJp4jimerkHPtOOn5cnTK48Y91+GRMczTbGRoaGRaRJ9NeOoZnCpWVxsnWqp9BOFVniK h4lJLPcJKJb72EZIuj8GOM4uTZTRbw97PMlAhfX7oCjZC6liuFguEIYtDns4U56z8EDB 2leqpD37kXV0yao7UQhaC7d0kbLTPSdVbVgXUbgDy9PGERiGqPC7eMbn2t5pMNAclMpy WCcw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=bUXqxWaP1QEJrooDO//E7+eG5MEjnbpAMHL7QOP4WX0=; b=fqHU7Da/dWU6LABKvUUn5uE71xzCVy34K1R/w63U1r/Vk5DZaByz11RHJhZ2deIt9U v62qRQfz29RsKUe4T8C1chbs+sW9quyGw5uPKRJcrVkUlzeIBFDGuuCtJZscT8RZuQCf Mp6GyDUUtyI2dyrGAf8vvYYbaKZNELWa/WT/mbh6M+w4AZ+KHDMvflSutMJLxHjqtvoF AbHtM+GiHFaPUV99Ah/UXBh0G4EYAVxESoZkNUPLjyMjvXy3jSa/87T1cPqiLKj0VCVq TIVueKgb9NeqDDex/bqLlEFYFpJrg3UKfZDA1i6F/eFM6D9QAS2pinF7braHzwKZIvT/ LUTw== X-Gm-Message-State: APjAAAXODoEbSA5K+JI5pHssBwVPkus3oFzN+fnHjt5vOlOqAWEZc28h rpuWPHGsW+2CeP4ykgqpfAs= X-Received: by 2002:a1c:c707:: with SMTP id x7mr12021888wmf.149.1554115254978; Mon, 01 Apr 2019 03:40:54 -0700 (PDT) Received: from localhost (pD9E51B25.dip0.t-ipconnect.de. [217.229.27.37]) by smtp.gmail.com with ESMTPSA id e9sm16178025wrp.35.2019.04.01.03.40.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Apr 2019 03:40:54 -0700 (PDT) From: Thierry Reding To: Greg Kroah-Hartman , Thierry Reding Cc: Jon Hunter , linux-usb@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, Mathias Nyman Subject: [PATCH v2 2/6] usb: host: xhci-tegra: Selectively program IPFS Date: Mon, 1 Apr 2019 12:40:46 +0200 Message-Id: <20190401104050.31355-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401104050.31355-1-thierry.reding@gmail.com> References: <20190401104050.31355-1-thierry.reding@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: JC Kuo Starting with Tegra186, the XUSB controller no longer has the IPFS wrapper. This commit adds a "has_ipfs" field to struct tegra_xusb_soc that can be used to declare the existence of the IPFS wrapper. For the existing chips (i.e. Tegra124 and Tegra210), the new field is set to true. A future patch adding support for Tegra186 will set it to false. Signed-off-by: JC Kuo Acked-by: Mathias Nyman Signed-off-by: Thierry Reding --- drivers/usb/host/xhci-tegra.c | 43 +++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c index efb0cad8710e..4d133bbabdda 100644 --- a/drivers/usb/host/xhci-tegra.c +++ b/drivers/usb/host/xhci-tegra.c @@ -161,6 +161,7 @@ struct tegra_xusb_soc { } ports; bool scale_ss_clock; + bool has_ipfs; }; struct tegra_xusb { @@ -637,16 +638,18 @@ static irqreturn_t tegra_xusb_mbox_thread(int irq, void *data) return IRQ_HANDLED; } -static void tegra_xusb_ipfs_config(struct tegra_xusb *tegra, - struct resource *regs) +static void tegra_xusb_config(struct tegra_xusb *tegra, + struct resource *regs) { u32 value; - value = ipfs_readl(tegra, IPFS_XUSB_HOST_CONFIGURATION_0); - value |= IPFS_EN_FPCI; - ipfs_writel(tegra, value, IPFS_XUSB_HOST_CONFIGURATION_0); + if (tegra->soc->has_ipfs) { + value = ipfs_readl(tegra, IPFS_XUSB_HOST_CONFIGURATION_0); + value |= IPFS_EN_FPCI; + ipfs_writel(tegra, value, IPFS_XUSB_HOST_CONFIGURATION_0); - usleep_range(10, 20); + usleep_range(10, 20); + } /* Program BAR0 space */ value = fpci_readl(tegra, XUSB_CFG_4); @@ -661,13 +664,15 @@ static void tegra_xusb_ipfs_config(struct tegra_xusb *tegra, value |= XUSB_IO_SPACE_EN | XUSB_MEM_SPACE_EN | XUSB_BUS_MASTER_EN; fpci_writel(tegra, value, XUSB_CFG_1); - /* Enable interrupt assertion */ - value = ipfs_readl(tegra, IPFS_XUSB_HOST_INTR_MASK_0); - value |= IPFS_IP_INT_MASK; - ipfs_writel(tegra, value, IPFS_XUSB_HOST_INTR_MASK_0); + if (tegra->soc->has_ipfs) { + /* Enable interrupt assertion */ + value = ipfs_readl(tegra, IPFS_XUSB_HOST_INTR_MASK_0); + value |= IPFS_IP_INT_MASK; + ipfs_writel(tegra, value, IPFS_XUSB_HOST_INTR_MASK_0); - /* Set hysteresis */ - ipfs_writel(tegra, 0x80, IPFS_XUSB_HOST_CLKGATE_HYSTERESIS_0); + /* Set hysteresis */ + ipfs_writel(tegra, 0x80, IPFS_XUSB_HOST_CLKGATE_HYSTERESIS_0); + } } static int tegra_xusb_clk_enable(struct tegra_xusb *tegra) @@ -1015,10 +1020,12 @@ static int tegra_xusb_probe(struct platform_device *pdev) if (IS_ERR(tegra->fpci_base)) return PTR_ERR(tegra->fpci_base); - res = platform_get_resource(pdev, IORESOURCE_MEM, 2); - tegra->ipfs_base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(tegra->ipfs_base)) - return PTR_ERR(tegra->ipfs_base); + if (tegra->soc->has_ipfs) { + res = platform_get_resource(pdev, IORESOURCE_MEM, 2); + tegra->ipfs_base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(tegra->ipfs_base)) + return PTR_ERR(tegra->ipfs_base); + } tegra->xhci_irq = platform_get_irq(pdev, 0); if (tegra->xhci_irq < 0) @@ -1208,7 +1215,7 @@ static int tegra_xusb_probe(struct platform_device *pdev) goto disable_rpm; } - tegra_xusb_ipfs_config(tegra, regs); + tegra_xusb_config(tegra, regs); err = tegra_xusb_load_firmware(tegra); if (err < 0) { @@ -1380,6 +1387,7 @@ static const struct tegra_xusb_soc tegra124_soc = { .usb3 = { .offset = 0, .count = 2, }, }, .scale_ss_clock = true, + .has_ipfs = true, }; MODULE_FIRMWARE("nvidia/tegra124/xusb.bin"); @@ -1411,6 +1419,7 @@ static const struct tegra_xusb_soc tegra210_soc = { .usb3 = { .offset = 0, .count = 4, }, }, .scale_ss_clock = false, + .has_ipfs = true, }; MODULE_FIRMWARE("nvidia/tegra210/xusb.bin"); -- 2.21.0