From patchwork Sat Feb 10 17:10:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Konrad Dybcio X-Patchwork-Id: 199281 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp1567435dyd; Sat, 10 Feb 2024 09:11:12 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXjn/WA30wB6EVpobKgXL1T67hp7WYJT/b0+mSiv7FeloVhrP5Up7xrdaIJr8B3cWGRgX+n8aNImk1mi8ZYtN3FSDm7jA== X-Google-Smtp-Source: AGHT+IGAMgb2r0FaNAFUcJgrBdYlfpUjFtyYtW0RctGGM8Y9vuw6rdomyhn7rrhP5pJcbm8RMGt1 X-Received: by 2002:a05:622a:1791:b0:42c:31e1:367c with SMTP id s17-20020a05622a179100b0042c31e1367cmr2646224qtk.61.1707585072382; Sat, 10 Feb 2024 09:11:12 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707585072; cv=pass; d=google.com; s=arc-20160816; b=YJCFbtjCKlA7A7VJ1xmWnhUpYoy82HGTWJXn2ie5K/cBJi4CNeVt41kAx9NQfDZhZq B+t//Niv8E+itueR83mO+/892rk3UVtcBaL4Ny8l/sYw3v7eN3itY6nuwRPCrbThxbIY Vu+RYH/1sEq4H1qL9SGIcUJsggpWiX3dQ6sOENXuGxfy/wgjvl66O67eXTLgUOkPjB4a KL1HdQQ5zdvaGZ3gH9jVTSoXPmezM7ob5ll6SQLsP9GqL09byR1Ry20dSGnGLqCGKMaK sTdZb8dziTsUPnoSz5fqaCmP1eV5bkoj3+1GTlRaB6+AYwtLelOUS/+9VlmgmLzaKv2L C+YA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=/4uw6U5ne+R+sJJghVlkDrwwqaS/V9vKBh8/gfD/1Fw=; fh=LD0Wwn/92x2H9hy5t+Y2anW/tRBUq80SQThY0QA/Zaw=; b=qLFwMqcpf0VEeut9nIjNNnpYIghF3uK+7+JX+umUPkgDG85IJpd5fX9cZCzl72Xxdl 7uDz7+wctWgaN+IBhW71MpbWdqYCtrZ+1TlE4zZNKkW6KVy9agVj8uafdlmvR3bp5WQz m6h39DXWncjhybucQR41hL0YCqxkOt07XqeFpaHsyRuC1G3eRCm7cb0It3mKItfzmTU8 1c+Dz6BRgHellzn4tS4SDjNzE1hrEBSA/Hk1hk7KSHWurSaxWuvcrQABgSsx0IkvQrEV aIr49048XnQGyG/AVs/1S84ZVgXUX0QhMBsLkqwyYVSHHfil0S8TpKis55sPG1UUa43q Aiwg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=G+ao3uEv; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60487-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60487-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org X-Forwarded-Encrypted: i=2; AJvYcCUywMsdSriju91G/bowy1nJfTGKV9rHslxhqrjdNVKtuyBhRovcNgW1OgnPH9XTYcsvgYNdMGKmNcn2CL5aH8MJvlkOjg== Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id z11-20020a05620a08cb00b0078568a609c2si2024536qkz.643.2024.02.10.09.11.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:11:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-60487-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=G+ao3uEv; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60487-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60487-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 218371C2342E for ; Sat, 10 Feb 2024 17:11:12 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6818C5D8E5; Sat, 10 Feb 2024 17:10:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="G+ao3uEv" Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42F664F8B5 for ; Sat, 10 Feb 2024 17:10:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585018; cv=none; b=HnS7JL5fxn0fQLJKrZmaV9iTDFRXratJBHtqdLrzTuhxsqcVm5upg3ujQ+xuLGWEL+QDtX4Qje5ZktjXsUAMGYVaYe7SmTeNaU7aQVm/rcrV9pt4HfAmewzVWcTrJSs7lTtbbwKOluNVGLS5yltzepnUUcTqtRu8lRBB1ksFuoU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585018; c=relaxed/simple; bh=Q/tkGNJIBJXpyEDTXFQsgKm/Jzq5e6UGCxuEuvZ0MQk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UGdYLFtBv8l+rwMVTUV49KJqPTsRzjQ8ZPoV5IohFsl8K45vCmBsWct9tXf6A0kSMdMIbG2eDirbRVCPvQK1qdl95JpVx0dF1WnAXR99N2SrSKrieJf6XC1ic0oXtoALWZcxjFBxbQlyugWdsVfzaXJA1oYabER1yVk3/XUuHMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=G+ao3uEv; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-5610b9855a8so4923651a12.0 for ; Sat, 10 Feb 2024 09:10:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1707585013; x=1708189813; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/4uw6U5ne+R+sJJghVlkDrwwqaS/V9vKBh8/gfD/1Fw=; b=G+ao3uEv5toX1HfCVp8O/c/67NMiiSd0y/3OVBnQ4IyTl/pexzRNHKdrlWRAP6zVk6 mZ/MxPYKdb45AC6ZIbspp5cQoDrdZfB0IILIuUNNPdILBlCnX+dN3dVWTSVIidDuvhu/ m+rladvPcEfjndTvTT/UpFLhAKJf1TVDITRcrusu+u7CetBT8fruy7XUOpUjecBaOo45 kWIj5pIEHY7yxlHZ4shHFIv/VmyRNYByzyNVfGO+yEh21xohlDVd2ydAVJqZNl5n2DZ/ VmgI3IUXcc8gmyNLJbhmZEbbDH9L8IlSk42ZgpW3E51628EX8QHjG8SZxbogEZhziTVB 9svA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707585013; x=1708189813; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/4uw6U5ne+R+sJJghVlkDrwwqaS/V9vKBh8/gfD/1Fw=; b=MF4iGjlCEwMLn7+L5SCIU6XrSdyLOZu3dJLLSA9p8UY6qq4bf9uwoUkZOeNRHKloZ5 I7bCS4qXDp4CWMwr5yJDF712DmiG2R3jtQ4QpUFsOqnMGlY+/juDO5YTFOIwIhj3bvmi szmIGWeIfE1GNVfsglsgADIIsBlohApT+qqWVIj2raSI1aJHZKfTjH5vYWQFKpFLm0em /xCXpAyGaH44VjnVbQNrpStPHJQVr2vaQElwBwThGm9wI/LNVJnRPdFKzybAbYjyILQy DMM4H6Va42g21Nv/j+6fqWqOuDZSiqCO5DK7Nwl6sp6N5BMeBcoF7+kmTDm5iEnx+FCz AXBQ== X-Forwarded-Encrypted: i=1; AJvYcCV+FNqzEFy5aRYzQAWNuk8f9dkzvA3k+UACYvxN0lZnLsfTImDmZtB6+lS4m1pJm62usGxQU+jMvwz1VCn9n8O8lHCREl4RrfMIuFEN X-Gm-Message-State: AOJu0YyRgg42frZmsm1KwqtQ/BzVY8PkBfrHys9Pen9V09//cjj2o4S3 RFgzs3oT2Y1Z9UJKfFyPKrE+VtZp6vU5usJ2RDfzj5eSmbjFmyAs/DO6ufzvc5Y= X-Received: by 2002:a17:906:6a11:b0:a3c:458d:a1a8 with SMTP id qw17-20020a1709066a1100b00a3c458da1a8mr1320996ejc.12.1707585013633; Sat, 10 Feb 2024 09:10:13 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCWkSLJ1a5g8IPS4jmUAHg+1UemkoLGyCjbQ3H0wNJUaUK6ogLUfJh51CmnFxnjeTPRDqB6bLet39f6SWeZYztiCH/ZE/OTY36NI/3tliQmiKYSLnO3aJgyu3kxnZwYJR/SiMp83N/eNdivQvC+HART/Ul9ugkyi5GHa6IT/woPQW/t2aPSFVZAO3NuZhWsfiN0AnatAWNiZkcCCUMQIYMUH2O+arWfIYG5nTKTQhgdncWnSCtlE30pph23wyeyUe1IzSVs7OT2DeW+5Lpr3pBHgbKtQMKiCG2ACpcyznMs6qt/E8isx+6EnkRIcXTaXRDA9Sk7//FGqW5o8bjBhLRMl5yQIWEwBTrz4t06hX0XQXbFPZ6kmJUpWnNisWxul3Q== Received: from [127.0.1.1] (abyl12.neoplus.adsl.tpnet.pl. [83.9.31.12]) by smtp.gmail.com with ESMTPSA id lg25-20020a170907181900b00a3c1e1ca800sm973242ejc.11.2024.02.10.09.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:10:13 -0800 (PST) From: Konrad Dybcio Date: Sat, 10 Feb 2024 18:10:05 +0100 Subject: [PATCH v2 1/3] PCI: qcom: reshuffle reset logic in 2_7_0 .init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240210-topic-8280_pcie-v2-1-1cef4b606883@linaro.org> References: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> In-Reply-To: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> To: Bjorn Andersson , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84?= =?utf-8?q?ski?= , Rob Herring , Bjorn Helgaas , Philipp Zabel Cc: linux-arm-msm@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , Konrad Dybcio X-Mailer: b4 0.13-dev-0438c X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790532724989209344 X-GMAIL-MSGID: 1790532724989209344 At least on SC8280XP, if the PCIe reset is asserted, the corresponding AUX_CLK will be stuck at 'off'. This has not been an issue so far, since the reset is both left de-asserted by the previous boot stages and the driver only toggles it briefly in .init. As part of the upcoming suspend prodecure however, the reset will be held asserted. Assert the reset (which may end up being a NOP in some cases) and de-assert it back *before* turning on the clocks in preparation for introducing RC powerdown and reinitialization. Signed-off-by: Konrad Dybcio --- drivers/pci/controller/dwc/pcie-qcom.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index 2ce2a3bd932b..cbde9effa352 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -900,27 +900,27 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie) return ret; } - ret = clk_bulk_prepare_enable(res->num_clks, res->clks); - if (ret < 0) - goto err_disable_regulators; - + /* Assert the reset to hold the RC in a known state */ ret = reset_control_assert(res->rst); if (ret) { dev_err(dev, "reset assert failed (%d)\n", ret); - goto err_disable_clocks; + goto err_disable_regulators; } - usleep_range(1000, 1500); + /* GCC_PCIE_n_AUX_CLK won't come up if the reset is asserted */ ret = reset_control_deassert(res->rst); if (ret) { dev_err(dev, "reset deassert failed (%d)\n", ret); - goto err_disable_clocks; + goto err_disable_regulators; } - /* Wait for reset to complete, required on SM8450 */ usleep_range(1000, 1500); + ret = clk_bulk_prepare_enable(res->num_clks, res->clks); + if (ret < 0) + goto err_disable_regulators; + /* configure PCIe to RC mode */ writel(DEVICE_TYPE_RC, pcie->parf + PARF_DEVICE_TYPE); @@ -951,8 +951,6 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie) writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2); return 0; -err_disable_clocks: - clk_bulk_disable_unprepare(res->num_clks, res->clks); err_disable_regulators: regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies); From patchwork Sat Feb 10 17:10:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Konrad Dybcio X-Patchwork-Id: 199280 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp1567429dyd; Sat, 10 Feb 2024 09:11:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IEk6NOGPOoZ67sG8F9swzVVCN1DBws3eqbcnZKv4qR5u1Fj4HXo46cBqlvnq3wjnelgTO8C X-Received: by 2002:ac8:5716:0:b0:42c:68c8:fbb5 with SMTP id 22-20020ac85716000000b0042c68c8fbb5mr2185216qtw.40.1707585071882; Sat, 10 Feb 2024 09:11:11 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707585071; cv=pass; d=google.com; s=arc-20160816; b=amvfvBXznwpAIWXg3QhhsPt4n3VmoWRfYU6NsJhnHrnfvGVd5f3eZ/YAX7QJtPSaip 4+reUC8fsqkTvfiRhyi4N9g7eyZ3/CCt2lU3XLvxt3j3F8LE13Q2JtxVdZs0kCELRk0L 1trf2X/vrm601+2ziwmGZPHhyc1ikwiz86YqSpJrNciAFOUlgGWZ/xe2+VzIyV/SMwPD AYeNlzTki/l/T3Cn4C39iwPJ9QwI7rIi5uZjsvgxgcw8g4EGP4Vto5Mrk7DZuwBrb1Mj S1H0Y9Kr0JTOOksxT3KqBmhot2VwJ4bQqVoyY7vsi3X+pR0iU83IubwxSgOdvHpDBt6I q35g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=e5eEDZ2SBOr178JyoKUFrLLup1vdc34CTGoZZtEa27Q=; fh=6CPB2h9Z29psT4mW0aN/qLOGQ6PlHfmN6dhyKYU9PNU=; b=bR2KzFCvx4M23p8V7W6O0oRF+5QjHSBX+2oHtYKhACA9NiUUvCjWLxeMnEi2cWvXK9 JjApXyXPR4OAd9fvl4w1PlMWQ+ub8RhkaeDFmnouqi1QGf1aMSbPWeEzRJRYNX0WYzE8 gzq8XQAI8sXF4/flabEdE3LFh1sG2J6KkxkBjd6I0XVN6fvQaWcxldm0bUQ91Agus0RF ph4406E5onupVPr6Anj5DqOt8WxobVzcuv+UnUTr14b1Xn+UQKElNH2llJqqWTdmOb6a DqmKKixdSfARGfwBE4W1WVr3wQCGi/eRfPAPb6kMWcU8lCef19ufvCEmUlblj6VsuaCp yiNQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="HK+XV/IL"; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60488-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60488-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org X-Forwarded-Encrypted: i=2; AJvYcCUfczgfU6z2+5aTfWwiTsDEEzGVbK+DI5PRu9bDOuongkqcYsbuUbVyu2/jgFxVLZb4N5K/eiOIEUqmDa1SJMOMDwMQXA== Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id u31-20020a05622a199f00b0042c61cb0653si2935648qtc.194.2024.02.10.09.11.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:11:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-60488-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="HK+XV/IL"; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60488-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60488-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id AA37B1C224C0 for ; Sat, 10 Feb 2024 17:11:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6610A5D8E4; Sat, 10 Feb 2024 17:10:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HK+XV/IL" Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E101B5CDFA for ; Sat, 10 Feb 2024 17:10:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585018; cv=none; b=m5Si7Ml9Zc9dP74V0HVnEnRM6/dBQ60Cwm2GtPyvtymPj++/vtsLSWZtrojp/gjQt84we8MibiEUb8An+KA3OUkhxCQWwHcP5Ac1OHmM8wzNfEWumqOh5oXiDfEg+GeuGtHtjwnm50gik+dGxIEAfQuzRSHz3gQa/brQ/7DpW/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585018; c=relaxed/simple; bh=4Or5VI5ZnZ1ID78niRW0J52lNzSsB1zjEV1fVdr25BM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WJA75qN0ivwwq8wk3Am6S7YXZRA22cEFnLxX8oDRoQRm0IO9CNfQc//cyIWQI1wS1WJwfDDvB4djvj2kRVoR5PtPIwvdzhEcihzuLodnY89bPbviU2Xtg3bwFDbFjEL5Xi54KqE1tuT9pYkNoqnmro5eLyO/AyBqKezGgyeR+SE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=HK+XV/IL; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-a26f73732c5so260069566b.3 for ; Sat, 10 Feb 2024 09:10:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1707585015; x=1708189815; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=e5eEDZ2SBOr178JyoKUFrLLup1vdc34CTGoZZtEa27Q=; b=HK+XV/IL4rUBseoi2+eMZaQJEAO2rroKPxgKoCqhtIF10BVggwLPT6iTcYvfyYW6K5 Jy0gTjmJHhaLfEcC1GgLaD/ni4iNlGlBpHZ9wmTI2dGq3E4rA0WqXypo+AkQ30UXRegR auJ8T7U/BrO+SYEXOFUEXeGGbEX/RgZd3tvbAz21gkx9hiNR7g7jbPSQIf/hRdeZZl8a G1tj8qqPF4oa0DzS5NgJLj3yxDEL2F/+8odft+5FezoKGMyzzFSl4peRJfbG5cWt/rmQ +qXTcEtDOQ2Gl3swek04sfYe47e4O7VHkIC3kn/8KmcxHU48JauDMb2CluoYfHUZjpgZ Hzmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707585015; x=1708189815; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e5eEDZ2SBOr178JyoKUFrLLup1vdc34CTGoZZtEa27Q=; b=LfVMsMEwjmQbgU6IOS6PMNUblgT7Kvt6Kw8pAXSH14JzPn2tMp4aPdi5uPEwg688Ih kV73VMJ2jZcSmvVBcwjoibjLgthGXbh+uijvhRtO+1XPrZkvQs6Q/vL7E7oxfJHwVbHc s4mhOYGdPOnpCHJbpvc12vruUxISXAc4CIfSHWSVXhMlZwdC7oTsPrl8fYxbKvfc4wua 7pgcq5NKzQC1cL87snQ8fYFl6zJnm9iBA8C2iwvYzjLmEZBVQY/HbJnymz/KpFaQyXzT TW0qtcWN4okIvClvfAh9DrRBaJVsY9/sgwiKEmW5smStDh7LQ2edd51xZFdJDhc4T7Ku bRqg== X-Gm-Message-State: AOJu0YxLyjDeXR+riByWrCmHNYlPkgYAKh1ORgLNp9Cp6C58LGfio42m XnU8WVdePD+1Ce2/5X97WDX8VR83ldjrBfjT2IwPKp+6Jb3Vh/Y79cJWwBNgiDc= X-Received: by 2002:a17:906:af42:b0:a3b:d9bd:be7e with SMTP id ly2-20020a170906af4200b00a3bd9bdbe7emr1514696ejb.76.1707585015036; Sat, 10 Feb 2024 09:10:15 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCVnMvj5sl6aewT1D7//JM+3l1Jkpvwv0WkYZKzK5xSsmO3amS7nMfzjqGRrebRoT7aiUuPuijxYQre3qmY1JhLOWU1O9Gp6H9YMkVoczEMZUZnG+8MBVU+FTiQUtK3t8djI0vb6FKPEeXkplXXRikKAZFutdREmxGrBjqjIscBkzaFoWs9f0MqyCHaNyI1zYXDn41JzQqW0i9V3M3nZaMTgdkVVKDwZl4gsZJulSM87Sc/cXrjFrG1SuhXuWmfw4pOE5Um0ZO+1Q9W8RTZmdenBxDP2oGX1YAggDVDtVtZKC0cwpK2Sxw2YTBhoOA5iEnC1MNy/bHLfpFdUkuk9qirJ7GxUm9VzGb1lzWALQYN5na6TUw6N+kuuiOd3TVyeCA== Received: from [127.0.1.1] (abyl12.neoplus.adsl.tpnet.pl. [83.9.31.12]) by smtp.gmail.com with ESMTPSA id lg25-20020a170907181900b00a3c1e1ca800sm973242ejc.11.2024.02.10.09.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:10:14 -0800 (PST) From: Konrad Dybcio Date: Sat, 10 Feb 2024 18:10:06 +0100 Subject: [PATCH v2 2/3] PCI: qcom: Read back PARF_LTSSM register Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240210-topic-8280_pcie-v2-2-1cef4b606883@linaro.org> References: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> In-Reply-To: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> To: Bjorn Andersson , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84?= =?utf-8?q?ski?= , Rob Herring , Bjorn Helgaas , Philipp Zabel Cc: linux-arm-msm@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , Konrad Dybcio X-Mailer: b4 0.13-dev-0438c X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790532724574339778 X-GMAIL-MSGID: 1790532724574339778 To ensure write completion, read the PARF_LTSSM register after setting the LTSSM enable bit before polling for "link up". Reviewed-by: Manivannan Sadhasivam Signed-off-by: Konrad Dybcio --- drivers/pci/controller/dwc/pcie-qcom.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index cbde9effa352..6a469ed213ce 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -539,6 +539,7 @@ static void qcom_pcie_2_3_2_ltssm_enable(struct qcom_pcie *pcie) val = readl(pcie->parf + PARF_LTSSM); val |= LTSSM_EN; writel(val, pcie->parf + PARF_LTSSM); + readl(pcie->parf + PARF_LTSSM); } static int qcom_pcie_get_resources_2_3_2(struct qcom_pcie *pcie) From patchwork Sat Feb 10 17:10:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Konrad Dybcio X-Patchwork-Id: 199282 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp1567533dyd; Sat, 10 Feb 2024 09:11:26 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWaNQkQXYi63M5mTl6DTPMjONiiRgSNq3CPLwibHrRToP7p3yyzM32+NXjQfmMBglwwwOqwYWSiGcIGTl3T6d1TAvV/pQ== X-Google-Smtp-Source: AGHT+IGfH/3s76cnufzYA7BC2hJ4wpXJR2nvxfHM6carKAXe6Blba4s2kGC+IFj+lASleljVkk10 X-Received: by 2002:a0c:e488:0:b0:68c:c60e:7eba with SMTP id n8-20020a0ce488000000b0068cc60e7ebamr2554384qvl.55.1707585086264; Sat, 10 Feb 2024 09:11:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707585086; cv=pass; d=google.com; s=arc-20160816; b=wUf8tnhZm36JII70QL+gicDJbpBW2yk3R3CIt+r6Bfsxx8wqLhDJBXccMv+T5yJLch Nb/Wy7fj2JQM751XvozTMoJwMlxPXXbTtCBOLiLH4Lxx9kW1uJFjPnlXjPlR2jgf64Yq L7d4ElV2bSJexlDArUBA7BfsqEqkbLODLOib5idRqeZ5S47lJbd0PtSKyayXiISrCJLB 8vXLR1C1O7N8/PtVjnYNfCb1RCK1a2eHfk7ZQ8qrahXFPbGdP8RYqI5rTlO8makpF0+y pTZ2stMYifEu3LeDzbE19kSnzvxWsLBRBaKzVbI+GWdHu1fy+4jwMIinBxgOUadU7Rux j5Pg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=tYtbA2sJ08AZFlGOFG+9KX+Za91jaMGA0SaDjbtpsAk=; fh=aXsKwlBtLCUfcUldLsqiS2vaG1nWAhUM+bBff1EKcsA=; b=rFFQATYS+S36BVaDupxS6VIPRyvy0V95c8q2RCyNLXxLtdRC6TpsN1MpRCDjGQlxcr IYDmUrzB8cCzuImXj60mXPDCc0bV9SOyVxr2OYgD0HvDRM4n4KnZYuzm5bOYDiuVk0vD j8wqqcPUFdvg2MBsCsKxk5vQlAkTommMeHM7sOK/RJ78DjqnLEaA46MleJBh0sEfOg3J 4G9H2sthf9gQMERdnVGSmtR/b8rAY88MlIfUqxgkDtsaG+SpXRMu8tbejPM7kQyAP647 3TX/0X0CXUjS50uEvCa1rQPEF2eWqknd4epK6d+oS9o0BZZZJz1so93VZq+RWQL5Fs7f Vr2Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=t+DY11qL; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60489-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60489-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org X-Forwarded-Encrypted: i=2; AJvYcCVz30DfkGuTEUbap0icxmgf9N1XuHwxXUvkFVzEKiXnJ1KoAbnGW0jRHmiqYQMq7vU2zXz+yL7/F7YPYU7DJEmOUdrMPA== Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id hu12-20020a056214234c00b0068ce9210dd0si1550111qvb.262.2024.02.10.09.11.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:11:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-60489-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=t+DY11qL; arc=pass (i=1 spf=pass spfdomain=linaro.org dkim=pass dkdomain=linaro.org dmarc=pass fromdomain=linaro.org); spf=pass (google.com: domain of linux-kernel+bounces-60489-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-60489-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 0344D1C23466 for ; Sat, 10 Feb 2024 17:11:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7D2E35D91D; Sat, 10 Feb 2024 17:10:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="t+DY11qL" Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 660595D47B for ; Sat, 10 Feb 2024 17:10:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585020; cv=none; b=PMUH8nAKefnrtjUFquUopLFDygPWS4YQ7Ie0GLlfKgI/tTKoCSn4pMerwft9D13ORwYLFbTPLN5bqD4UiOKkHbxi0wAavhZK1jIXiNQ72FXnnrzw6zcijPt5YK7rSJ0Hd12T5zNC+zsQ5GEX8xWe+l9Opo3OkvxTb3x8PvZXejs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707585020; c=relaxed/simple; bh=wE4PKuF9KFooytVFW0iQrweEQ1kdbfao/3lAPwkkUOk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V4enWsQHVSfH4KOJwMbsxR2WtGi4bDixwAA7hFJChzXJJLR3c4+vgkbP9z157WtWAEhkNm/OMCasw6iGk61N15IHnkapociyQZHdWGpPTA8qk1b0HhPvGIekAcpJaJBUg0dLB8Gz5J7A330qAQ4XPG4EVSk4PhgrOSKHZbKv+SY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=t+DY11qL; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-a2d7e2e7fe0so354035866b.1 for ; Sat, 10 Feb 2024 09:10:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1707585016; x=1708189816; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tYtbA2sJ08AZFlGOFG+9KX+Za91jaMGA0SaDjbtpsAk=; b=t+DY11qLYpSCGEKVESKqDdZVgzBdsQRfrryC8LByahLWkR5EG6DJ9z6IlH6Zr7sYR8 zberEMFxJ7iJDov2F3L648OMTOhG0uOplPCyJeMhLJQ6pm69wkOwgpJGC7USUJKr0EH/ TR+UKt/tIrWl+WPv7C6Ym75x18wdC3Tey3iwI2Y8rxS6hpzmF0XiGkcSVQNWb20hneCg b7hos0/bin4cRQV0wAzCloYQVgRg//dxXuo8Y0L1D+cs88JF5tMU06hEHDRwVbmPOzKY 8BUIz/2bRCsKv7SKUarByP05fTYR/D3LAUnXctH5wGcg+888QXeB5iXHTB/fYKynfFBn entQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707585016; x=1708189816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tYtbA2sJ08AZFlGOFG+9KX+Za91jaMGA0SaDjbtpsAk=; b=kNGEYAOpJ8HVhAfi8oATgKaX8XGTjmjKYH5Cr5fxCSQ8mNctKvO2kjYa9FNIHRNbeV lCWw+bfk1mjqLSE3k53tjzHKW+vz0wVrwxZqfoCzBxBQZlyGBGpnKViqumQbTzq+CDlS b5/j6uKOitJbDiEfQS79vTt0Lw2b4xo+GtGw2pMtE/dRDliVmAqmk97wND+xuUys6tUH SSuXhlOohiAj+SEfqUH8cZfjDmi3IHQcAyQfL1H0g59qjIHvEUDUKLVSbB94/kGrtzO0 R4B/0CAbXORL8fgivRnkCwMwY/34RyrP1tVvtGpMfFXbqihG8VycSfDdTVrqgVkbpEQV EEtA== X-Forwarded-Encrypted: i=1; AJvYcCW3jVlM98DatL9B9iB2ZPO1ljYkOlrBLPaPFb8mW7yHuJ4UsPbhZ7lPE6gncx7tV8iYnrOT8dauopU35W06/vtlj4p0X2qIbf472k9X X-Gm-Message-State: AOJu0Yx6e//9RaeqzFCq9BGgHbu6Rtl6V3BgLYvh/zY+MN7d9llry5/H gaux7TBBizI6ykxGwOfsMqMbagrs7E4xawNSMQgXgMf7jOckcoxiyAj6VpzQW58= X-Received: by 2002:a17:906:29c5:b0:a38:833b:c8ad with SMTP id y5-20020a17090629c500b00a38833bc8admr3345318eje.16.1707585016654; Sat, 10 Feb 2024 09:10:16 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCXNWwCR4k9y6uamWkS0Jgu4fUGhqdbt7ZcPSXGhCiVKYdq6GvcH+u7xgpYYQXOmT92H1gIaQDIIC4HZesobK0DT+gdTMOG1Vm6f0g6e4LmSmH64f4lv0TSAh4Zr4KMqCD8JUpqAfXp88PFEOa15NRu2h0dGa4hGp83UQHcWP+xNk7gcCelOltice8ArdZVlSCoLe2RBzaKudzU3OkMV0KhXjzWy30h5VgN0r15tEvCgH0/qBAQSi8Mxf55TGn+vbkiVtyxmjjKBeAYQalGyRl2wrH0S9NmwpKucgmk6yCjCd7lZaG+IK14YjZtmK0GLuZQRW5rGrMfmJlnGgw0ZTTS8Wt8lkd68YwRu3Qg/Vx549pLTaAKHLj5Rh4sNI/qRSC+aR6JDBzx5S/aoD1rUr6TQOBT4iDhDl7w0tg== Received: from [127.0.1.1] (abyl12.neoplus.adsl.tpnet.pl. [83.9.31.12]) by smtp.gmail.com with ESMTPSA id lg25-20020a170907181900b00a3c1e1ca800sm973242ejc.11.2024.02.10.09.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Feb 2024 09:10:16 -0800 (PST) From: Konrad Dybcio Date: Sat, 10 Feb 2024 18:10:07 +0100 Subject: [PATCH v2 3/3] PCI: qcom: properly implement RC shutdown/power up Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240210-topic-8280_pcie-v2-3-1cef4b606883@linaro.org> References: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> In-Reply-To: <20240210-topic-8280_pcie-v2-0-1cef4b606883@linaro.org> To: Bjorn Andersson , Manivannan Sadhasivam , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84?= =?utf-8?q?ski?= , Rob Herring , Bjorn Helgaas , Philipp Zabel Cc: linux-arm-msm@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , Konrad Dybcio , Bjorn Andersson X-Mailer: b4 0.13-dev-0438c X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790532739216427182 X-GMAIL-MSGID: 1790532739216427182 Currently, we've only been minimizing the power draw while keeping the RC up at all times. This is suboptimal, as it draws a whole lot of power and prevents the SoC from power collapsing. Implement full shutdown and re-initialization to allow for powering off the controller. This is mainly indended for SC8280XP with a broken power rail setup, which requires a full RC shutdown/reinit in order to reach SoC-wide power collapse, but sleeping is generally better than not sleeping and less destructive suspend can be implemented later for platforms that support it. Co-developed-by: Bjorn Andersson Signed-off-by: Konrad Dybcio --- drivers/pci/controller/dwc/Kconfig | 1 + drivers/pci/controller/dwc/pcie-qcom.c | 159 ++++++++++++++++++++++++++------- 2 files changed, 126 insertions(+), 34 deletions(-) diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dwc/Kconfig index 8afacc90c63b..4ce266951cb6 100644 --- a/drivers/pci/controller/dwc/Kconfig +++ b/drivers/pci/controller/dwc/Kconfig @@ -268,6 +268,7 @@ config PCIE_DW_PLAT_EP config PCIE_QCOM bool "Qualcomm PCIe controller (host mode)" depends on OF && (ARCH_QCOM || COMPILE_TEST) + depends on QCOM_COMMAND_DB || QCOM_COMMAND_DB=n depends on PCI_MSI select PCIE_DW_HOST select CRC8 diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index 6a469ed213ce..c807833ee4a7 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -30,13 +30,18 @@ #include #include #include +#include #include "../../pci.h" #include "pcie-designware.h" +#include +#include + /* PARF registers */ #define PARF_SYS_CTRL 0x00 #define PARF_PM_CTRL 0x20 +#define PARF_PM_STTS 0x24 #define PARF_PCS_DEEMPH 0x34 #define PARF_PCS_SWING 0x38 #define PARF_PHY_CTRL 0x40 @@ -80,7 +85,10 @@ #define L1_CLK_RMV_DIS BIT(1) /* PARF_PM_CTRL register fields */ -#define REQ_NOT_ENTR_L1 BIT(5) +#define REQ_NOT_ENTR_L1 BIT(5) /* "Prevent L0->L1" */ + +/* PARF_PM_STTS register fields */ +#define PM_ENTER_L23 BIT(5) /* PARF_PCS_DEEMPH register fields */ #define PCS_DEEMPH_TX_DEEMPH_GEN1(x) FIELD_PREP(GENMASK(21, 16), x) @@ -122,6 +130,7 @@ /* ELBI_SYS_CTRL register fields */ #define ELBI_SYS_CTRL_LT_ENABLE BIT(0) +#define ELBI_SYS_CTRL_PME_TURNOFF_MSG BIT(4) /* AXI_MSTR_RESP_COMP_CTRL0 register fields */ #define CFG_REMOTE_RD_REQ_BRIDGE_SIZE_2K 0x4 @@ -243,6 +252,7 @@ struct qcom_pcie { const struct qcom_pcie_cfg *cfg; struct dentry *debugfs; bool suspended; + bool soc_is_rpmh; }; #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) @@ -272,6 +282,24 @@ static int qcom_pcie_start_link(struct dw_pcie *pci) return 0; } +static int qcom_pcie_stop_link(struct dw_pcie *pci) +{ + struct qcom_pcie *pcie = to_qcom_pcie(pci); + u32 ret_l23, val; + + writel(ELBI_SYS_CTRL_PME_TURNOFF_MSG, pcie->elbi + ELBI_SYS_CTRL); + readl(pcie->elbi + ELBI_SYS_CTRL); + + ret_l23 = readl_poll_timeout(pcie->parf + PARF_PM_STTS, val, + val & PM_ENTER_L23, 10000, 100000); + if (ret_l23) { + dev_err(pci->dev, "Failed to enter L2/L3\n"); + return -ETIMEDOUT; + } + + return 0; +} + static void qcom_pcie_clear_hpc(struct dw_pcie *pci) { u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); @@ -987,9 +1015,19 @@ static void qcom_pcie_host_post_init_2_7_0(struct qcom_pcie *pcie) static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie) { struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0; + u32 val; + + /* Disable PCIe clocks and resets */ + val = readl(pcie->parf + PARF_PHY_CTRL); + val |= PHY_TEST_PWR_DOWN; + writel(val, pcie->parf + PARF_PHY_CTRL); + readl(pcie->parf + PARF_PHY_CTRL); clk_bulk_disable_unprepare(res->num_clks, res->clks); + reset_control_assert(res->rst); + usleep_range(2000, 2500); + regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies); } @@ -1545,6 +1583,9 @@ static int qcom_pcie_probe(struct platform_device *pdev) goto err_phy_exit; } + /* If the soc features RPMh, cmd_db must have been prepared by now */ + pcie->soc_is_rpmh = !cmd_db_ready(); + qcom_pcie_icc_update(pcie); if (pcie->mhi) @@ -1561,58 +1602,108 @@ static int qcom_pcie_probe(struct platform_device *pdev) return ret; } -static int qcom_pcie_suspend_noirq(struct device *dev) +static int qcom_pcie_resume_noirq(struct device *dev) { struct qcom_pcie *pcie = dev_get_drvdata(dev); int ret; - /* - * Set minimum bandwidth required to keep data path functional during - * suspend. - */ - ret = icc_set_bw(pcie->icc_mem, 0, kBps_to_icc(1)); - if (ret) { - dev_err(dev, "Failed to set interconnect bandwidth: %d\n", ret); - return ret; + if (pcie->soc_is_rpmh) { + /* + * Undo the tag change from qcom_pcie_suspend_noirq first in + * case RPMh spontaneously decides to power collapse the + * platform based on other inputs. + */ + icc_set_tag(pcie->icc_mem, QCOM_ICC_TAG_ALWAYS); + + /* Flush the tag change */ + ret = icc_enable(pcie->icc_mem); + if (ret) { + dev_err(pcie->pci->dev, "failed to icc_enable: %d", ret); + return ret; + } } - /* - * Turn OFF the resources only for controllers without active PCIe - * devices. For controllers with active devices, the resources are kept - * ON and the link is expected to be in L0/L1 (sub)states. - * - * Turning OFF the resources for controllers with active PCIe devices - * will trigger access violation during the end of the suspend cycle, - * as kernel tries to access the PCIe devices config space for masking - * MSIs. - * - * Also, it is not desirable to put the link into L2/L3 state as that - * implies VDD supply will be removed and the devices may go into - * powerdown state. This will affect the lifetime of the storage devices - * like NVMe. - */ - if (!dw_pcie_link_up(pcie->pci)) { - qcom_pcie_host_deinit(&pcie->pci->pp); - pcie->suspended = true; - } + /* Only check this now to make sure the icc tag has been set. */ + if (!pcie->suspended) + return 0; + + ret = qcom_pcie_host_init(&pcie->pci->pp); + if (ret) + goto revert_icc_tag; + + dw_pcie_setup_rc(&pcie->pci->pp); + + ret = qcom_pcie_start_link(pcie->pci); + if (ret) + goto deinit_host; + + /* Ignore the retval, the devices may come up later. */ + dw_pcie_wait_for_link(pcie->pci); + + qcom_pcie_icc_update(pcie); + + pcie->suspended = false; return 0; + +deinit_host: + qcom_pcie_host_deinit(&pcie->pci->pp); +revert_icc_tag: + if (pcie->soc_is_rpmh) { + icc_set_tag(pcie->icc_mem, QCOM_ICC_TAG_WAKE); + + /* Ignore the retval, failing here would be tragic anyway.. */ + icc_enable(pcie->icc_mem); + } + + return ret; } -static int qcom_pcie_resume_noirq(struct device *dev) +static int qcom_pcie_suspend_noirq(struct device *dev) { struct qcom_pcie *pcie = dev_get_drvdata(dev); int ret; - if (pcie->suspended) { - ret = qcom_pcie_host_init(&pcie->pci->pp); + if (pcie->suspended) + return 0; + + if (dw_pcie_link_up(pcie->pci)) { + ret = qcom_pcie_stop_link(pcie->pci); if (ret) return ret; + } - pcie->suspended = false; + qcom_pcie_host_deinit(&pcie->pci->pp); + + if (pcie->soc_is_rpmh) { + /* + * The PCIe RC may be covertly accessed by the secure firmware + * on sleep exit. Use the WAKE bucket to let RPMh pull the plug + * on PCIe in sleep, but guarantee it comes back up for resume. + */ + icc_set_tag(pcie->icc_mem, QCOM_ICC_TAG_WAKE); + + /* Flush the tag change */ + ret = icc_enable(pcie->icc_mem); + if (ret) { + dev_err(pcie->pci->dev, "failed to icc_enable %d\n", ret); + + /* Revert everything and pray icc calls succeed */ + return qcom_pcie_resume_noirq(dev); + } + } else { + /* + * Set minimum bandwidth required to keep data path functional + * during suspend. + */ + ret = icc_set_bw(pcie->icc_mem, 0, kBps_to_icc(1)); + if (ret) { + dev_err(dev, "Failed to set interconnect bandwidth: %d\n", ret); + return ret; + } } - qcom_pcie_icc_update(pcie); + pcie->suspended = true; return 0; }