From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vivek Gautam Subject: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Sun, 8 Jul 2018 23:04:10 +0530 Message-ID: <20180708173413.1965-2-vivek.gautam@codeaurora.org> References: <20180708173413.1965-1-vivek.gautam@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180708173413.1965-1-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, mark.rutland-5wv7dgnIgG8@public.gmane.org, robin.murphy-5wv7dgnIgG8@public.gmane.org, will.deacon-5wv7dgnIgG8@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogU3JpY2hhcmFuIFIgPHNyaWNoYXJhbkBjb2RlYXVyb3JhLm9yZz4KClRoZSBzbW11IG5l ZWRzIHRvIGJlIGZ1bmN0aW9uYWwgb25seSB3aGVuIHRoZSByZXNwZWN0aXZlCm1hc3RlcidzIHVz aW5nIGl0IGFyZSBhY3RpdmUuIFRoZSBkZXZpY2VfbGluayBmZWF0dXJlCmhlbHBzIHRvIHRyYWNr IHN1Y2ggZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIHNvIHRoYXQgdGhlCmlvbW11IGdldHMgcG93 ZXJlZCB3aGVuIHRoZSBtYXN0ZXIgZGV2aWNlIGVuYWJsZXMgaXRzZWxmCnVzaW5nIHBtX3J1bnRp bWUuIFNvIGJ5IGFkYXB0aW5nIHRoZSBzbW11IGRyaXZlciBmb3IKcnVudGltZSBwbSwgYWJvdmUg c2FpZCBkZXBlbmRlbmN5IGNhbiBiZSBhZGRyZXNzZWQuCgpUaGlzIHBhdGNoIGFkZHMgdGhlIHBt IHJ1bnRpbWUvc2xlZXAgY2FsbGJhY2tzIHRvIHRoZQpkcml2ZXIgYW5kIGFsc28gdGhlIGZ1bmN0 aW9ucyB0byBwYXJzZSB0aGUgc21tdSBjbG9ja3MKZnJvbSBEVCBhbmQgZW5hYmxlIHRoZW0gaW4g cmVzdW1lL3N1c3BlbmQuCgpTaWduZWQtb2ZmLWJ5OiBTcmljaGFyYW4gUiA8c3JpY2hhcmFuQGNv ZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVh dXJvcmEub3JnPgpbdml2ZWs6IENsb2NrIHJld29yayB0byByZXF1ZXN0IGJ1bGsgb2YgY2xvY2tz XQpTaWduZWQtb2ZmLWJ5OiBWaXZlayBHYXV0YW0gPHZpdmVrLmdhdXRhbUBjb2RlYXVyb3JhLm9y Zz4KUmV2aWV3ZWQtYnk6IFRvbWFzeiBGaWdhIDx0ZmlnYUBjaHJvbWl1bS5vcmc+Ci0tLQoKIC0g Tm8gY2hhbmdlIHNpbmNlIHYxMS4KCiBkcml2ZXJzL2lvbW11L2FybS1zbW11LmMgfCA2MCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFu Z2VkLCA1OCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwppbmRleCBmN2E5 NmJjZjk0YTYuLmEwMWQwZGRlMjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS9hcm0tc21t dS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwpAQCAtNDgsNiArNDgsNyBAQAogI2lu Y2x1ZGUgPGxpbnV4L29mX2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgog CkBAIC0yMDUsNiArMjA2LDggQEAgc3RydWN0IGFybV9zbW11X2RldmljZSB7CiAJdTMyCQkJCW51 bV9nbG9iYWxfaXJxczsKIAl1MzIJCQkJbnVtX2NvbnRleHRfaXJxczsKIAl1bnNpZ25lZCBpbnQJ CQkqaXJxczsKKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YQkJKmNsa3M7CisJaW50CQkJCW51bV9jbGtz OwogCiAJdTMyCQkJCWNhdml1bV9pZF9iYXNlOyAvKiBTcGVjaWZpYyB0byBDYXZpdW0gKi8KIApA QCAtMTg5NywxMCArMTkwMCwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9jZmdfcHJv YmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIHN0cnVjdCBhcm1fc21tdV9tYXRjaF9k YXRhIHsKIAllbnVtIGFybV9zbW11X2FyY2hfdmVyc2lvbiB2ZXJzaW9uOwogCWVudW0gYXJtX3Nt bXVfaW1wbGVtZW50YXRpb24gbW9kZWw7CisJY29uc3QgY2hhciAqIGNvbnN0ICpjbGtzOworCWlu dCBudW1fY2xrczsKIH07CiAKICNkZWZpbmUgQVJNX1NNTVVfTUFUQ0hfREFUQShuYW1lLCB2ZXIs IGltcCkJXAotc3RhdGljIHN0cnVjdCBhcm1fc21tdV9tYXRjaF9kYXRhIG5hbWUgPSB7IC52ZXJz aW9uID0gdmVyLCAubW9kZWwgPSBpbXAgfQorc3RhdGljIGNvbnN0IHN0cnVjdCBhcm1fc21tdV9t YXRjaF9kYXRhIG5hbWUgPSB7IC52ZXJzaW9uID0gdmVyLCAubW9kZWwgPSBpbXAgfQogCiBBUk1f U01NVV9NQVRDSF9EQVRBKHNtbXVfZ2VuZXJpY192MSwgQVJNX1NNTVVfVjEsIEdFTkVSSUNfU01N VSk7CiBBUk1fU01NVV9NQVRDSF9EQVRBKHNtbXVfZ2VuZXJpY192MiwgQVJNX1NNTVVfVjIsIEdF TkVSSUNfU01NVSk7CkBAIC0xOTE5LDYgKzE5MjQsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKIH07CiBNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBhcm1fc21tdV9vZl9tYXRjaCk7CiAKK3N0YXRpYyB2b2lkIGFybV9zbW11X2ZpbGxf Y2xrX2RhdGEoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKKwkJCQkgICBjb25zdCBjaGFy ICogY29uc3QgKmNsa3MpCit7CisJaW50IGk7CisKKwlpZiAoc21tdS0+bnVtX2Nsa3MgPCAxKQor CQlyZXR1cm47CisKKwlzbW11LT5jbGtzID0gZGV2bV9rY2FsbG9jKHNtbXUtPmRldiwgc21tdS0+ bnVtX2Nsa3MsCisJCQkJICBzaXplb2YoKnNtbXUtPmNsa3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXNtbXUtPmNsa3MpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzbW11LT5udW1fY2xr czsgaSsrKQorCQlzbW11LT5jbGtzW2ldLmlkID0gY2xrc1tpXTsKK30KKwogI2lmZGVmIENPTkZJ R19BQ1BJCiBzdGF0aWMgaW50IGFjcGlfc21tdV9nZXRfZGF0YSh1MzIgbW9kZWwsIHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXUpCiB7CkBAIC0yMDAxLDYgKzIwMjMsOSBAQCBzdGF0aWMgaW50 IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAog CWRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKIAlzbW11LT52ZXJzaW9uID0g ZGF0YS0+dmVyc2lvbjsKIAlzbW11LT5tb2RlbCA9IGRhdGEtPm1vZGVsOworCXNtbXUtPm51bV9j bGtzID0gZGF0YS0+bnVtX2Nsa3M7CisKKwlhcm1fc21tdV9maWxsX2Nsa19kYXRhKHNtbXUsIGRh dGEtPmNsa3MpOwogCiAJcGFyc2VfZHJpdmVyX29wdGlvbnMoc21tdSk7CiAKQEAgLTIwOTksNiAr MjEyNCwxNCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogCQlzbW11LT5pcnFzW2ldID0gaXJxOwogCX0KIAorCWVyciA9IGRl dm1fY2xrX2J1bGtfZ2V0KHNtbXUtPmRldiwgc21tdS0+bnVtX2Nsa3MsIHNtbXUtPmNsa3MpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjbGtfYnVsa19wcmVwYXJlKHNtbXUt Pm51bV9jbGtzLCBzbW11LT5jbGtzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJy ID0gYXJtX3NtbXVfZGV2aWNlX2NmZ19wcm9iZShzbW11KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4g ZXJyOwpAQCAtMjE4MSw2ICsyMjE0LDkgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAKIAkvKiBUdXJuIHRoZSB0aGluZyBv ZmYgKi8KIAl3cml0ZWwoc0NSMF9DTElFTlRQRCwgQVJNX1NNTVVfR1IwX05TKHNtbXUpICsgQVJN X1NNTVVfR1IwX3NDUjApOworCisJY2xrX2J1bGtfdW5wcmVwYXJlKHNtbXUtPm51bV9jbGtzLCBz bW11LT5jbGtzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMTk3LDcgKzIyMzMsMjcgQEAgc3Rh dGljIGludCBfX21heWJlX3VudXNlZCBhcm1fc21tdV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXJtX3NtbXVf cG1fb3BzLCBOVUxMLCBhcm1fc21tdV9wbV9yZXN1bWUpOworc3RhdGljIGludCBfX21heWJlX3Vu dXNlZCBhcm1fc21tdV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0 dXJuIGNsa19idWxrX2VuYWJsZShzbW11LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cit9CisKK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYXJtX3NtbXVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisKKwljbGtfYnVsa19kaXNhYmxlKHNtbXUtPm51bV9jbGtzLCBzbW11LT5j bGtzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMg YXJtX3NtbXVfcG1fb3BzID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKE5VTEwsIGFybV9z bW11X3BtX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoYXJtX3NtbXVfcnVudGltZV9zdXNw ZW5kLAorCQkJICAgYXJtX3NtbXVfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OwogCiBzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcm1fc21tdV9kcml2ZXIgPSB7CiAJLmRyaXZlcgk9IHsK LS0gClFVQUxDT01NIElORElBLCBvbiBiZWhhbGYgb2YgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gaXMgYSBtZW1iZXIKb2YgQ29kZSBBdXJvcmEgRm9ydW0sIGhvc3RlZCBieSBUaGUg TGludXggRm91bmRhdGlvbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJl ZWRyZW5vCg== 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 X-Spam-Level: X-Spam-Status: No, score=-2.6 required=3.0 tests=DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,T_DKIM_INVALID, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95F01C67790 for ; Sun, 8 Jul 2018 17:34:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 50CC7208D9 for ; Sun, 8 Jul 2018 17:34:41 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="FUWd0ddS"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="M0Ci+BJV" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 50CC7208D9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932563AbeGHReh (ORCPT ); Sun, 8 Jul 2018 13:34:37 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:59616 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754309AbeGHRee (ORCPT ); Sun, 8 Jul 2018 13:34:34 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8575660B72; Sun, 8 Jul 2018 17:34:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1531071273; bh=i1JHLWFZqgvrCg5Qx8B4eRVxyAzXQCeO47xIxkhhGRs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FUWd0ddSSe7RIIEfrcJcW698fh7KvisMz0oI4SeQ7YL7hmHFO6a4qNZZc4ou8O2pZ 0IjMvdhqDiZnkpsKb5oGpmOlgEiZYs2AQnhtBdo6/T7RhuAmE3ZMv96HP61NXezasR yvp9brPTMxmV+7XoLrr8pssBDtMS3PBC1lN0JCuU= Received: from blr-ubuntu-41.ap.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vivek.gautam@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id BAF4760591; Sun, 8 Jul 2018 17:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1531071271; bh=i1JHLWFZqgvrCg5Qx8B4eRVxyAzXQCeO47xIxkhhGRs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M0Ci+BJVXxHNbvY0+hXVg4nmMNisEEAA7G1R9VvqKtANP7AuBPjiR/yfp3xUDFwNf HTEo8rws/Fhz9zuUOrz89Nuroyg6WOXLTBddsI2OHOVA88PT5lUawGt4skir0xP5nJ xKJftcQeZYmLYb0ZVv47Pmnebn0L6r/zjPE1I3cE= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org BAF4760591 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=vivek.gautam@codeaurora.org From: Vivek Gautam To: joro@8bytes.org, robh+dt@kernel.org, mark.rutland@arm.com, robin.murphy@arm.com, will.deacon@arm.com, iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: alex.williamson@redhat.com, rjw@rjwysocki.net, robdclark@gmail.com, linux-pm@vger.kernel.org, freedreno@lists.freedesktop.org, sboyd@kernel.org, tfiga@chromium.org, sricharan@codeaurora.org, m.szyprowski@samsung.com, architt@codeaurora.org, linux-arm-msm@vger.kernel.org, jcrouse@codeaurora.org, vivek.gautam@codeaurora.org Subject: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Sun, 8 Jul 2018 23:04:10 +0530 Message-Id: <20180708173413.1965-2-vivek.gautam@codeaurora.org> X-Mailer: git-send-email 2.16.1.72.g5be1f00a9a70 In-Reply-To: <20180708173413.1965-1-vivek.gautam@codeaurora.org> References: <20180708173413.1965-1-vivek.gautam@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sricharan R The smmu needs to be functional only when the respective master's using it are active. The device_link feature helps to track such functional dependencies, so that the iommu gets powered when the master device enables itself using pm_runtime. So by adapting the smmu driver for runtime pm, above said dependency can be addressed. This patch adds the pm runtime/sleep callbacks to the driver and also the functions to parse the smmu clocks from DT and enable them in resume/suspend. Signed-off-by: Sricharan R Signed-off-by: Archit Taneja [vivek: Clock rework to request bulk of clocks] Signed-off-by: Vivek Gautam Reviewed-by: Tomasz Figa --- - No change since v11. drivers/iommu/arm-smmu.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index f7a96bcf94a6..a01d0dde21dd 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -205,6 +206,8 @@ struct arm_smmu_device { u32 num_global_irqs; u32 num_context_irqs; unsigned int *irqs; + struct clk_bulk_data *clks; + int num_clks; u32 cavium_id_base; /* Specific to Cavium */ @@ -1897,10 +1900,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) struct arm_smmu_match_data { enum arm_smmu_arch_version version; enum arm_smmu_implementation model; + const char * const *clks; + int num_clks; }; #define ARM_SMMU_MATCH_DATA(name, ver, imp) \ -static struct arm_smmu_match_data name = { .version = ver, .model = imp } +static const struct arm_smmu_match_data name = { .version = ver, .model = imp } ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU); ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); @@ -1919,6 +1924,23 @@ static const struct of_device_id arm_smmu_of_match[] = { }; MODULE_DEVICE_TABLE(of, arm_smmu_of_match); +static void arm_smmu_fill_clk_data(struct arm_smmu_device *smmu, + const char * const *clks) +{ + int i; + + if (smmu->num_clks < 1) + return; + + smmu->clks = devm_kcalloc(smmu->dev, smmu->num_clks, + sizeof(*smmu->clks), GFP_KERNEL); + if (!smmu->clks) + return; + + for (i = 0; i < smmu->num_clks; i++) + smmu->clks[i].id = clks[i]; +} + #ifdef CONFIG_ACPI static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu) { @@ -2001,6 +2023,9 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev, data = of_device_get_match_data(dev); smmu->version = data->version; smmu->model = data->model; + smmu->num_clks = data->num_clks; + + arm_smmu_fill_clk_data(smmu, data->clks); parse_driver_options(smmu); @@ -2099,6 +2124,14 @@ static int arm_smmu_device_probe(struct platform_device *pdev) smmu->irqs[i] = irq; } + err = devm_clk_bulk_get(smmu->dev, smmu->num_clks, smmu->clks); + if (err) + return err; + + err = clk_bulk_prepare(smmu->num_clks, smmu->clks); + if (err) + return err; + err = arm_smmu_device_cfg_probe(smmu); if (err) return err; @@ -2181,6 +2214,9 @@ static int arm_smmu_device_remove(struct platform_device *pdev) /* Turn the thing off */ writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0); + + clk_bulk_unprepare(smmu->num_clks, smmu->clks); + return 0; } @@ -2197,7 +2233,27 @@ static int __maybe_unused arm_smmu_pm_resume(struct device *dev) return 0; } -static SIMPLE_DEV_PM_OPS(arm_smmu_pm_ops, NULL, arm_smmu_pm_resume); +static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) +{ + struct arm_smmu_device *smmu = dev_get_drvdata(dev); + + return clk_bulk_enable(smmu->num_clks, smmu->clks); +} + +static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev) +{ + struct arm_smmu_device *smmu = dev_get_drvdata(dev); + + clk_bulk_disable(smmu->num_clks, smmu->clks); + + return 0; +} + +static const struct dev_pm_ops arm_smmu_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(NULL, arm_smmu_pm_resume) + SET_RUNTIME_PM_OPS(arm_smmu_runtime_suspend, + arm_smmu_runtime_resume, NULL) +}; static struct platform_driver arm_smmu_driver = { .driver = { -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation