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=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, 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 98AE3C43603 for ; Wed, 18 Dec 2019 08:31:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 553752465E for ; Wed, 18 Dec 2019 08:31:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="l+poRVwc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726977AbfLRIbl (ORCPT ); Wed, 18 Dec 2019 03:31:41 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:9891 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726771AbfLRIbJ (ORCPT ); Wed, 18 Dec 2019 03:31:09 -0500 X-UUID: cc029118c1e84e218c1efd2672bb7bd0-20191218 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=uXGkn3ZDyK4FYh6/CU/GmdIkkH8fqdIaTYa0BJ/T64c=; b=l+poRVwc2dMgjLxzscRnRQA5R8kk/sbvriVtg/mFx12cUrINXY7+7xefQMruLO8pI/D90CjBYo+pA8HCfBRZK+gbVcDLn10hYbQ1lQ3KLrXTWsucoIzVgNcSP2K2ZPfezRnkflKvNcbsa3k0Hqj8VfA8EOorRA4zh7HULBAsZy8=; X-UUID: cc029118c1e84e218c1efd2672bb7bd0-20191218 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 552171796; Wed, 18 Dec 2019 16:30:58 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 18 Dec 2019 16:30:40 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 18 Dec 2019 16:30:29 +0800 From: Weiyi Lu To: Nicolas Boichat , Matthias Brugger , Rob Herring , Sascha Hauer CC: James Liao , Fan Chen , , , , , Weiyi Lu Subject: [PATCH v10 05/12] soc: mediatek: Add multiple step bus protection control Date: Wed, 18 Dec 2019 16:30:41 +0800 Message-ID: <1576657848-14711-6-git-send-email-weiyi.lu@mediatek.com> X-Mailer: git-send-email 1.8.1.1.dirty In-Reply-To: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> References: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Qm90aCBNVDgxODMgJiBNVDY3NjUgaGF2ZSBtb3JlIGNvbnRyb2wgc3RlcHMgb2YgYnVzIHByb3Rl Y3Rpb24NCnRoYW4gcHJldmlvdXMgcHJvamVjdC4gQW5kIHRoZXJlIGFkZCBtb3JlIGJ1cyBwcm90 ZWN0aW9uIHJlZ2lzdGVycw0KcmVzaWRlIGF0IGluZnJhY2ZnICYgc21pLWNvbW1vbi4gQWxzbyBh ZGQgbmV3IEFQSXMgZm9yIG11bHRpcGxlDQpzdGVwIGJ1cyBwcm90ZWN0aW9uIGNvbnRyb2wgd2l0 aCBtb3JlIGN1c3RvbWl6ZWQgYXJndW1lbnRzLg0KDQpTaWduZWQtb2ZmLWJ5OiBXZWl5aSBMdSA8 d2VpeWkubHVAbWVkaWF0ZWsuY29tPg0KLS0tDQogZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZp bGUgICAgICAgICAgIHwgIDIgKy0NCiBkcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstc2Nwc3lzLWV4 dC5jICAgfCA5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL3Nv Yy9tZWRpYXRlay9tdGstc2Nwc3lzLmMgICAgICAgfCAzOSArKysrKysrKystLS0tDQogaW5jbHVk ZS9saW51eC9zb2MvbWVkaWF0ZWsvc2Nwc3lzLWV4dC5oIHwgMzkgKysrKysrKysrKysrKw0KIDQg ZmlsZXMgY2hhbmdlZCwgMTY4IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstc2Nwc3lzLWV4dC5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvc29jL21lZGlhdGVrL3NjcHN5cy1leHQuaA0K DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL3Nv Yy9tZWRpYXRlay9NYWtlZmlsZQ0KaW5kZXggYjAxNzMzMC4uYjQ0MmJlOSAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc29jL21lZGlhdGVrL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3NvYy9tZWRpYXRl ay9NYWtlZmlsZQ0KQEAgLTEsNSArMSw1IEBADQogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5DQogb2JqLSQoQ09ORklHX01US19DTURRKSArPSBtdGstY21kcS1oZWxwZXIu bw0KLW9iai0kKENPTkZJR19NVEtfSU5GUkFDRkcpICs9IG10ay1pbmZyYWNmZy5vDQorb2JqLSQo Q09ORklHX01US19JTkZSQUNGRykgKz0gbXRrLWluZnJhY2ZnLm8gbXRrLXNjcHN5cy1leHQubw0K IG9iai0kKENPTkZJR19NVEtfUE1JQ19XUkFQKSArPSBtdGstcG1pYy13cmFwLm8NCiBvYmotJChD T05GSUdfTVRLX1NDUFNZUykgKz0gbXRrLXNjcHN5cy5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z b2MvbWVkaWF0ZWsvbXRrLXNjcHN5cy1leHQuYyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL210ay1z Y3BzeXMtZXh0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi44MTUwZDRm DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstc2Nwc3lzLWV4 dC5jDQpAQCAtMCwwICsxLDk5IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjANCisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuDQorICogQXV0aG9y OiBPd2VuIENoZW4gPE93ZW4uQ2hlbkBtZWRpYXRlay5jb20+DQorICovDQorI2luY2x1ZGUgPGxp bnV4L2t0aW1lLmg+DQorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4NCisjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KKyNpbmNsdWRl IDxsaW51eC9zb2MvbWVkaWF0ZWsvc2Nwc3lzLWV4dC5oPg0KKw0KKyNkZWZpbmUgTVRLX1BPTExf REVMQVlfVVMgICAxMA0KKyNkZWZpbmUgTVRLX1BPTExfVElNRU9VVCAgICBVU0VDX1BFUl9TRUMN CisNCitzdGF0aWMgaW50IHNldF9idXNfcHJvdGVjdGlvbihzdHJ1Y3QgcmVnbWFwICptYXAsIHUz MiBtYXNrLCB1MzIgYWNrX21hc2ssDQorCQl1MzIgcmVnX3NldCwgdTMyIHJlZ19zdGEsIHUzMiBy ZWdfZW4pDQorew0KKwl1MzIgdmFsOw0KKw0KKwlpZiAocmVnX3NldCkNCisJCXJlZ21hcF93cml0 ZShtYXAsIHJlZ19zZXQsIG1hc2spOw0KKwllbHNlDQorCQlyZWdtYXBfdXBkYXRlX2JpdHMobWFw LCByZWdfZW4sIG1hc2ssIG1hc2spOw0KKw0KKwlyZXR1cm4gcmVnbWFwX3JlYWRfcG9sbF90aW1l b3V0KG1hcCwgcmVnX3N0YSwNCisJCQl2YWwsICh2YWwgJiBhY2tfbWFzaykgPT0gYWNrX21hc2ss DQorCQkJTVRLX1BPTExfREVMQVlfVVMsIE1US19QT0xMX1RJTUVPVVQpOw0KK30NCisNCitzdGF0 aWMgaW50IGNsZWFyX2J1c19wcm90ZWN0aW9uKHN0cnVjdCByZWdtYXAgKm1hcCwgdTMyIG1hc2ss IHUzMiBhY2tfbWFzaywNCisJCXUzMiByZWdfY2xyLCB1MzIgcmVnX3N0YSwgdTMyIHJlZ19lbikN Cit7DQorCXUzMiB2YWw7DQorDQorCWlmIChyZWdfY2xyKQ0KKwkJcmVnbWFwX3dyaXRlKG1hcCwg cmVnX2NsciwgbWFzayk7DQorCWVsc2UNCisJCXJlZ21hcF91cGRhdGVfYml0cyhtYXAsIHJlZ19l biwgbWFzaywgMCk7DQorDQorCXJldHVybiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQobWFwLCBy ZWdfc3RhLA0KKwkJCXZhbCwgISh2YWwgJiBhY2tfbWFzayksDQorCQkJTVRLX1BPTExfREVMQVlf VVMsIE1US19QT0xMX1RJTUVPVVQpOw0KK30NCisNCitpbnQgbXRrX3NjcHN5c19leHRfc2V0X2J1 c19wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBidXNfcHJvdCAqYnBfdGFibGUsDQorCXN0cnVjdCBy ZWdtYXAgKmluZnJhY2ZnLCBzdHJ1Y3QgcmVnbWFwICpzbWlfY29tbW9uKQ0KK3sNCisJaW50IGk7 DQorDQorCWZvciAoaSA9IDA7IGkgPCBNQVhfU1RFUFM7IGkrKykgew0KKwkJc3RydWN0IHJlZ21h cCAqbWFwID0gTlVMTDsNCisJCWludCByZXQ7DQorDQorCQlpZiAoYnBfdGFibGVbaV0udHlwZSA9 PSBJTlZBTElEX1RZUEUpDQorCQkJYnJlYWs7DQorCQllbHNlIGlmIChicF90YWJsZVtpXS50eXBl ID09IElGUl9UWVBFKQ0KKwkJCW1hcCA9IGluZnJhY2ZnOw0KKwkJZWxzZSBpZiAoYnBfdGFibGVb aV0udHlwZSA9PSBTTUlfVFlQRSkNCisJCQltYXAgPSBzbWlfY29tbW9uOw0KKw0KKwkJcmV0ID0g c2V0X2J1c19wcm90ZWN0aW9uKG1hcCwNCisJCQkJYnBfdGFibGVbaV0ubWFzaywgYnBfdGFibGVb aV0ubWFzaywNCisJCQkJYnBfdGFibGVbaV0uc2V0X29mcywgYnBfdGFibGVbaV0uc3RhX29mcywN CisJCQkJYnBfdGFibGVbaV0uZW5fb2ZzKTsNCisNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJl dDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG10a19zY3BzeXNfZXh0X2NsZWFy X2J1c19wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBidXNfcHJvdCAqYnBfdGFibGUsDQorCXN0cnVj dCByZWdtYXAgKmluZnJhY2ZnLCBzdHJ1Y3QgcmVnbWFwICpzbWlfY29tbW9uKQ0KK3sNCisJaW50 IGk7DQorDQorCWZvciAoaSA9IE1BWF9TVEVQUyAtIDE7IGkgPj0gMDsgaS0tKSB7DQorCQlzdHJ1 Y3QgcmVnbWFwICptYXAgPSBOVUxMOw0KKwkJaW50IHJldDsNCisNCisJCWlmIChicF90YWJsZVtp XS50eXBlID09IElOVkFMSURfVFlQRSkNCisJCQljb250aW51ZTsNCisJCWVsc2UgaWYgKGJwX3Rh YmxlW2ldLnR5cGUgPT0gSUZSX1RZUEUpDQorCQkJbWFwID0gaW5mcmFjZmc7DQorCQllbHNlIGlm IChicF90YWJsZVtpXS50eXBlID09IFNNSV9UWVBFKQ0KKwkJCW1hcCA9IHNtaV9jb21tb247DQor DQorCQlyZXQgPSBjbGVhcl9idXNfcHJvdGVjdGlvbihtYXAsDQorCQkJCWJwX3RhYmxlW2ldLm1h c2ssIGJwX3RhYmxlW2ldLmNscl9hY2tfbWFzaywNCisJCQkJYnBfdGFibGVbaV0uY2xyX29mcywg YnBfdGFibGVbaV0uc3RhX29mcywNCisJCQkJYnBfdGFibGVbaV0uZW5fb2ZzKTsNCisNCisJCWlm IChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9zb2MvbWVkaWF0ZWsvbXRrLXNjcHN5cy5jIGIvZHJpdmVycy9zb2MvbWVk aWF0ZWsvbXRrLXNjcHN5cy5jDQppbmRleCBkYjM1YTI4Li41Njk5ZDlmIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9zb2MvbWVkaWF0ZWsvbXRrLXNjcHN5cy5jDQorKysgYi9kcml2ZXJzL3NvYy9tZWRp YXRlay9tdGstc2Nwc3lzLmMNCkBAIC0xMiw2ICsxMiw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3Bt X2RvbWFpbi5oPg0KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCiAjaW5j bHVkZSA8bGludXgvc29jL21lZGlhdGVrL2luZnJhY2ZnLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Nv Yy9tZWRpYXRlay9zY3BzeXMtZXh0Lmg+DQogDQogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Bvd2Vy L210MjcwMS1wb3dlci5oPg0KICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9wb3dlci9tdDI3MTItcG93 ZXIuaD4NCkBAIC05MCw2ICs5MSw3IEBADQogICogQGJ1c19wcm90X21hc2s6IFRoZSBtYXNrIGZv ciBzaW5nbGUgc3RlcCBidXMgcHJvdGVjdGlvbi4NCiAgKiBAYmFzaWNfY2xrX25hbWU6IFRoZSBi YXNpYyBjbG9ja3MgcmVxdWlyZWQgYnkgdGhpcyBwb3dlciBkb21haW4uDQogICogQGNhcHM6IFRo ZSBmbGFnIGZvciBhY3RpdmUgd2FrZS11cCBhY3Rpb24uDQorICogQGJwX3RhYmxlOiBUaGUgbWFz ayB0YWJsZSBmb3IgbXVsdGlwbGUgc3RlcCBidXMgcHJvdGVjdGlvbi4NCiAgKi8NCiBzdHJ1Y3Qg c2NwX2RvbWFpbl9kYXRhIHsNCiAJY29uc3QgY2hhciAqbmFtZTsNCkBAIC0xMDAsNiArMTAyLDcg QEAgc3RydWN0IHNjcF9kb21haW5fZGF0YSB7DQogCXUzMiBidXNfcHJvdF9tYXNrOw0KIAljb25z dCBjaGFyICpiYXNpY19jbGtfbmFtZVtNQVhfQ0xLU107DQogCXU4IGNhcHM7DQorCXN0cnVjdCBi dXNfcHJvdCBicF90YWJsZVtNQVhfU1RFUFNdOw0KIH07DQogDQogc3RydWN0IHNjcDsNCkBAIC0x MjMsNiArMTI2LDcgQEAgc3RydWN0IHNjcCB7DQogCXN0cnVjdCBkZXZpY2UgKmRldjsNCiAJdm9p ZCBfX2lvbWVtICpiYXNlOw0KIAlzdHJ1Y3QgcmVnbWFwICppbmZyYWNmZzsNCisJc3RydWN0IHJl Z21hcCAqc21pX2NvbW1vbjsNCiAJc3RydWN0IHNjcF9jdHJsX3JlZyBjdHJsX3JlZzsNCiAJYm9v bCBidXNfcHJvdF9yZWdfdXBkYXRlOw0KIH07DQpAQCAtMjUyLDI0ICsyNTYsMjggQEAgc3RhdGlj IGludCBzY3BzeXNfYnVzX3Byb3RlY3RfZW5hYmxlKHN0cnVjdCBzY3BfZG9tYWluICpzY3BkKQ0K IHsNCiAJc3RydWN0IHNjcCAqc2NwID0gc2NwZC0+c2NwOw0KIA0KLQlpZiAoIXNjcGQtPmRhdGEt PmJ1c19wcm90X21hc2spDQotCQlyZXR1cm4gMDsNCisJaWYgKHNjcGQtPmRhdGEtPmJ1c19wcm90 X21hc2spIHsNCisJCXJldHVybiBtdGtfaW5mcmFjZmdfc2V0X2J1c19wcm90ZWN0aW9uKHNjcC0+ aW5mcmFjZmcsDQorCQkJCXNjcGQtPmRhdGEtPmJ1c19wcm90X21hc2ssDQorCQkJCXNjcC0+YnVz X3Byb3RfcmVnX3VwZGF0ZSk7DQorCX0NCiANCi0JcmV0dXJuIG10a19pbmZyYWNmZ19zZXRfYnVz X3Byb3RlY3Rpb24oc2NwLT5pbmZyYWNmZywNCi0JCQlzY3BkLT5kYXRhLT5idXNfcHJvdF9tYXNr LA0KLQkJCXNjcC0+YnVzX3Byb3RfcmVnX3VwZGF0ZSk7DQorCXJldHVybiBtdGtfc2Nwc3lzX2V4 dF9zZXRfYnVzX3Byb3RlY3Rpb24oc2NwZC0+ZGF0YS0+YnBfdGFibGUsDQorCQkJc2NwLT5pbmZy YWNmZywgc2NwLT5zbWlfY29tbW9uKTsNCiB9DQogDQogc3RhdGljIGludCBzY3BzeXNfYnVzX3By b3RlY3RfZGlzYWJsZShzdHJ1Y3Qgc2NwX2RvbWFpbiAqc2NwZCkNCiB7DQogCXN0cnVjdCBzY3Ag KnNjcCA9IHNjcGQtPnNjcDsNCiANCi0JaWYgKCFzY3BkLT5kYXRhLT5idXNfcHJvdF9tYXNrKQ0K LQkJcmV0dXJuIDA7DQorCWlmIChzY3BkLT5kYXRhLT5idXNfcHJvdF9tYXNrKSB7DQorCQlyZXR1 cm4gbXRrX2luZnJhY2ZnX2NsZWFyX2J1c19wcm90ZWN0aW9uKHNjcC0+aW5mcmFjZmcsDQorCQkJ CXNjcGQtPmRhdGEtPmJ1c19wcm90X21hc2ssDQorCQkJCXNjcC0+YnVzX3Byb3RfcmVnX3VwZGF0 ZSk7DQorCX0NCiANCi0JcmV0dXJuIG10a19pbmZyYWNmZ19jbGVhcl9idXNfcHJvdGVjdGlvbihz Y3AtPmluZnJhY2ZnLA0KLQkJCXNjcGQtPmRhdGEtPmJ1c19wcm90X21hc2ssDQotCQkJc2NwLT5i dXNfcHJvdF9yZWdfdXBkYXRlKTsNCisJcmV0dXJuIG10a19zY3BzeXNfZXh0X2NsZWFyX2J1c19w cm90ZWN0aW9uKHNjcGQtPmRhdGEtPmJwX3RhYmxlLA0KKwkJCXNjcC0+aW5mcmFjZmcsIHNjcC0+ c21pX2NvbW1vbik7DQogfQ0KIA0KIHN0YXRpYyBpbnQgc2Nwc3lzX3Bvd2VyX29uKHN0cnVjdCBn ZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQpDQpAQCAtNDQ4LDYgKzQ1NiwxNyBAQCBzdGF0aWMgc3Ry dWN0IHNjcCAqaW5pdF9zY3Aoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwNCiAJCXJldHVy biBFUlJfQ0FTVChzY3AtPmluZnJhY2ZnKTsNCiAJfQ0KIA0KKwlzY3AtPnNtaV9jb21tb24gPSBz eXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLA0KKwkJCSJz bWlfY29tbSIpOw0KKw0KKwlpZiAoc2NwLT5zbWlfY29tbW9uID09IEVSUl9QVFIoLUVOT0RFVikp IHsNCisJCXNjcC0+c21pX2NvbW1vbiA9IE5VTEw7DQorCX0gZWxzZSBpZiAoSVNfRVJSKHNjcC0+ c21pX2NvbW1vbikpIHsNCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHNtaV9j b21tb24gY29udHJvbGxlcjogJWxkXG4iLA0KKwkJCQlQVFJfRVJSKHNjcC0+c21pX2NvbW1vbikp Ow0KKwkJcmV0dXJuIEVSUl9DQVNUKHNjcC0+c21pX2NvbW1vbik7DQorCX0NCisNCiAJZm9yIChp ID0gMDsgaSA8IG51bTsgaSsrKSB7DQogCQlzdHJ1Y3Qgc2NwX2RvbWFpbiAqc2NwZCA9ICZzY3At PmRvbWFpbnNbaV07DQogCQljb25zdCBzdHJ1Y3Qgc2NwX2RvbWFpbl9kYXRhICpkYXRhID0gJnNj cF9kb21haW5fZGF0YVtpXTsNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9tZWRpYXRl ay9zY3BzeXMtZXh0LmggYi9pbmNsdWRlL2xpbnV4L3NvYy9tZWRpYXRlay9zY3BzeXMtZXh0LmgN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4zZTViODRkDQotLS0gL2Rldi9u dWxsDQorKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9tZWRpYXRlay9zY3BzeXMtZXh0LmgNCkBAIC0w LDAgKzEsMzkgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKyNp Zm5kZWYgX19TT0NfTUVESUFURUtfU0NQU1lTX0VYVF9IDQorI2RlZmluZSBfX1NPQ19NRURJQVRF S19TQ1BTWVNfRVhUX0gNCisNCisjZGVmaW5lIE1BWF9TVEVQUwk0DQorDQorI2RlZmluZSBCVVNf UFJPVChfdHlwZSwgX3NldF9vZnMsIF9jbHJfb2ZzLAkJCVwNCisJCV9lbl9vZnMsIF9zdGFfb2Zz LCBfbWFzaywgX2Nscl9hY2tfbWFzaykgewlcDQorCQkudHlwZSA9IF90eXBlLAkJCQkJXA0KKwkJ LnNldF9vZnMgPSBfc2V0X29mcywJCQkJXA0KKwkJLmNscl9vZnMgPSBfY2xyX29mcywJCQkJXA0K KwkJLmVuX29mcyA9IF9lbl9vZnMsCQkJCVwNCisJCS5zdGFfb2ZzID0gX3N0YV9vZnMsCQkJCVwN CisJCS5tYXNrID0gX21hc2ssCQkJCQlcDQorCQkuY2xyX2Fja19tYXNrID0gX2Nscl9hY2tfbWFz aywJCQlcDQorCX0NCisNCitlbnVtIHJlZ21hcF90eXBlIHsNCisJSU5WQUxJRF9UWVBFID0gMCwN CisJSUZSX1RZUEUsDQorCVNNSV9UWVBFLA0KK307DQorDQorc3RydWN0IGJ1c19wcm90IHsNCisJ ZW51bSByZWdtYXBfdHlwZSB0eXBlOw0KKwl1MzIgc2V0X29mczsNCisJdTMyIGNscl9vZnM7DQor CXUzMiBlbl9vZnM7DQorCXUzMiBzdGFfb2ZzOw0KKwl1MzIgbWFzazsNCisJdTMyIGNscl9hY2tf bWFzazsNCit9Ow0KKw0KK2ludCBtdGtfc2Nwc3lzX2V4dF9zZXRfYnVzX3Byb3RlY3Rpb24oY29u c3Qgc3RydWN0IGJ1c19wcm90ICpicF90YWJsZSwNCisJc3RydWN0IHJlZ21hcCAqaW5mcmFjZmcs IHN0cnVjdCByZWdtYXAgKnNtaV9jb21tb24pOw0KK2ludCBtdGtfc2Nwc3lzX2V4dF9jbGVhcl9i dXNfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgYnVzX3Byb3QgKmJwX3RhYmxlLA0KKwlzdHJ1Y3Qg cmVnbWFwICppbmZyYWNmZywgc3RydWN0IHJlZ21hcCAqc21pX2NvbW1vbik7DQorDQorI2VuZGlm IC8qIF9fU09DX01FRElBVEVLX1NDUFNZU19FWFRfSCAqLw0KLS0gDQoxLjguMS4xLmRpcnR5DQo= 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=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,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 43E54C43603 for ; Wed, 18 Dec 2019 08:43:03 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C3ACE21D7D for ; Wed, 18 Dec 2019 08:43:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ty095Tkn"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="l+poRVwc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C3ACE21D7D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=M1POnnqwC8L+VLQK3c+nd19sYJy/r+aF7hgTFbzAtxk=; b=Ty095Tkn4ptfgo 2/y6e7XeBkzhlzvyrBMghAk5itUnI4o3gtb4qmnvbKs+IyehXF5Ge+ddn3EwRxOshHW0bxOwCL3ZX mynMOeuSDsKZ843CkIADi4KjzE+lI/Up+zyn7DRHeXTWbyMwNSq2dOVifrijOcFNXJDrx3NHFe300 qVi1jq7dn72Kl5qdLaRLX1nfkJDiqhFfUO/h1r896MVkitNgt8gZ3qm0xtIco7xeOtfmr4X3yZv2j ipN7sBD2HidOIteLaK6avG64NS8PFnI4hOR1WmYX9Wl5Ps10Qjmm5bOh7LajD/2nPSgqD7dyiwCO9 InCZ6JgmNTb5DphJG6sQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ihUv8-0005wE-1c; Wed, 18 Dec 2019 08:43:02 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ihUtJ-0004Dh-My; Wed, 18 Dec 2019 08:41:12 +0000 X-UUID: 734757473b1143c886a0e458c44cf313-20191218 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=uXGkn3ZDyK4FYh6/CU/GmdIkkH8fqdIaTYa0BJ/T64c=; b=l+poRVwc2dMgjLxzscRnRQA5R8kk/sbvriVtg/mFx12cUrINXY7+7xefQMruLO8pI/D90CjBYo+pA8HCfBRZK+gbVcDLn10hYbQ1lQ3KLrXTWsucoIzVgNcSP2K2ZPfezRnkflKvNcbsa3k0Hqj8VfA8EOorRA4zh7HULBAsZy8=; X-UUID: 734757473b1143c886a0e458c44cf313-20191218 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1090375823; Wed, 18 Dec 2019 00:41:00 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 18 Dec 2019 00:31:20 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 18 Dec 2019 16:30:40 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 18 Dec 2019 16:30:29 +0800 From: Weiyi Lu To: Nicolas Boichat , Matthias Brugger , Rob Herring , Sascha Hauer Subject: [PATCH v10 05/12] soc: mediatek: Add multiple step bus protection control Date: Wed, 18 Dec 2019 16:30:41 +0800 Message-ID: <1576657848-14711-6-git-send-email-weiyi.lu@mediatek.com> X-Mailer: git-send-email 1.8.1.1.dirty In-Reply-To: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> References: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191218_004109_872745_BEB07571 X-CRM114-Status: GOOD ( 18.20 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: James Liao , Weiyi Lu , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Fan Chen , linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Both MT8183 & MT6765 have more control steps of bus protection than previous project. And there add more bus protection registers reside at infracfg & smi-common. Also add new APIs for multiple step bus protection control with more customized arguments. Signed-off-by: Weiyi Lu --- drivers/soc/mediatek/Makefile | 2 +- drivers/soc/mediatek/mtk-scpsys-ext.c | 99 +++++++++++++++++++++++++++++++++ drivers/soc/mediatek/mtk-scpsys.c | 39 +++++++++---- include/linux/soc/mediatek/scpsys-ext.h | 39 +++++++++++++ 4 files changed, 168 insertions(+), 11 deletions(-) create mode 100644 drivers/soc/mediatek/mtk-scpsys-ext.c create mode 100644 include/linux/soc/mediatek/scpsys-ext.h diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile index b017330..b442be9 100644 --- a/drivers/soc/mediatek/Makefile +++ b/drivers/soc/mediatek/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_MTK_CMDQ) += mtk-cmdq-helper.o -obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o +obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o mtk-scpsys-ext.o obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o diff --git a/drivers/soc/mediatek/mtk-scpsys-ext.c b/drivers/soc/mediatek/mtk-scpsys-ext.c new file mode 100644 index 0000000..8150d4f --- /dev/null +++ b/drivers/soc/mediatek/mtk-scpsys-ext.c @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2018 MediaTek Inc. + * Author: Owen Chen + */ +#include +#include +#include +#include +#include + +#define MTK_POLL_DELAY_US 10 +#define MTK_POLL_TIMEOUT USEC_PER_SEC + +static int set_bus_protection(struct regmap *map, u32 mask, u32 ack_mask, + u32 reg_set, u32 reg_sta, u32 reg_en) +{ + u32 val; + + if (reg_set) + regmap_write(map, reg_set, mask); + else + regmap_update_bits(map, reg_en, mask, mask); + + return regmap_read_poll_timeout(map, reg_sta, + val, (val & ack_mask) == ack_mask, + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); +} + +static int clear_bus_protection(struct regmap *map, u32 mask, u32 ack_mask, + u32 reg_clr, u32 reg_sta, u32 reg_en) +{ + u32 val; + + if (reg_clr) + regmap_write(map, reg_clr, mask); + else + regmap_update_bits(map, reg_en, mask, 0); + + return regmap_read_poll_timeout(map, reg_sta, + val, !(val & ack_mask), + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); +} + +int mtk_scpsys_ext_set_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common) +{ + int i; + + for (i = 0; i < MAX_STEPS; i++) { + struct regmap *map = NULL; + int ret; + + if (bp_table[i].type == INVALID_TYPE) + break; + else if (bp_table[i].type == IFR_TYPE) + map = infracfg; + else if (bp_table[i].type == SMI_TYPE) + map = smi_common; + + ret = set_bus_protection(map, + bp_table[i].mask, bp_table[i].mask, + bp_table[i].set_ofs, bp_table[i].sta_ofs, + bp_table[i].en_ofs); + + if (ret) + return ret; + } + + return 0; +} + +int mtk_scpsys_ext_clear_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common) +{ + int i; + + for (i = MAX_STEPS - 1; i >= 0; i--) { + struct regmap *map = NULL; + int ret; + + if (bp_table[i].type == INVALID_TYPE) + continue; + else if (bp_table[i].type == IFR_TYPE) + map = infracfg; + else if (bp_table[i].type == SMI_TYPE) + map = smi_common; + + ret = clear_bus_protection(map, + bp_table[i].mask, bp_table[i].clr_ack_mask, + bp_table[i].clr_ofs, bp_table[i].sta_ofs, + bp_table[i].en_ofs); + + if (ret) + return ret; + } + + return 0; +} diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c index db35a28..5699d9f 100644 --- a/drivers/soc/mediatek/mtk-scpsys.c +++ b/drivers/soc/mediatek/mtk-scpsys.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -90,6 +91,7 @@ * @bus_prot_mask: The mask for single step bus protection. * @basic_clk_name: The basic clocks required by this power domain. * @caps: The flag for active wake-up action. + * @bp_table: The mask table for multiple step bus protection. */ struct scp_domain_data { const char *name; @@ -100,6 +102,7 @@ struct scp_domain_data { u32 bus_prot_mask; const char *basic_clk_name[MAX_CLKS]; u8 caps; + struct bus_prot bp_table[MAX_STEPS]; }; struct scp; @@ -123,6 +126,7 @@ struct scp { struct device *dev; void __iomem *base; struct regmap *infracfg; + struct regmap *smi_common; struct scp_ctrl_reg ctrl_reg; bool bus_prot_reg_update; }; @@ -252,24 +256,28 @@ static int scpsys_bus_protect_enable(struct scp_domain *scpd) { struct scp *scp = scpd->scp; - if (!scpd->data->bus_prot_mask) - return 0; + if (scpd->data->bus_prot_mask) { + return mtk_infracfg_set_bus_protection(scp->infracfg, + scpd->data->bus_prot_mask, + scp->bus_prot_reg_update); + } - return mtk_infracfg_set_bus_protection(scp->infracfg, - scpd->data->bus_prot_mask, - scp->bus_prot_reg_update); + return mtk_scpsys_ext_set_bus_protection(scpd->data->bp_table, + scp->infracfg, scp->smi_common); } static int scpsys_bus_protect_disable(struct scp_domain *scpd) { struct scp *scp = scpd->scp; - if (!scpd->data->bus_prot_mask) - return 0; + if (scpd->data->bus_prot_mask) { + return mtk_infracfg_clear_bus_protection(scp->infracfg, + scpd->data->bus_prot_mask, + scp->bus_prot_reg_update); + } - return mtk_infracfg_clear_bus_protection(scp->infracfg, - scpd->data->bus_prot_mask, - scp->bus_prot_reg_update); + return mtk_scpsys_ext_clear_bus_protection(scpd->data->bp_table, + scp->infracfg, scp->smi_common); } static int scpsys_power_on(struct generic_pm_domain *genpd) @@ -448,6 +456,17 @@ static struct scp *init_scp(struct platform_device *pdev, return ERR_CAST(scp->infracfg); } + scp->smi_common = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, + "smi_comm"); + + if (scp->smi_common == ERR_PTR(-ENODEV)) { + scp->smi_common = NULL; + } else if (IS_ERR(scp->smi_common)) { + dev_err(&pdev->dev, "Cannot find smi_common controller: %ld\n", + PTR_ERR(scp->smi_common)); + return ERR_CAST(scp->smi_common); + } + for (i = 0; i < num; i++) { struct scp_domain *scpd = &scp->domains[i]; const struct scp_domain_data *data = &scp_domain_data[i]; diff --git a/include/linux/soc/mediatek/scpsys-ext.h b/include/linux/soc/mediatek/scpsys-ext.h new file mode 100644 index 0000000..3e5b84d --- /dev/null +++ b/include/linux/soc/mediatek/scpsys-ext.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __SOC_MEDIATEK_SCPSYS_EXT_H +#define __SOC_MEDIATEK_SCPSYS_EXT_H + +#define MAX_STEPS 4 + +#define BUS_PROT(_type, _set_ofs, _clr_ofs, \ + _en_ofs, _sta_ofs, _mask, _clr_ack_mask) { \ + .type = _type, \ + .set_ofs = _set_ofs, \ + .clr_ofs = _clr_ofs, \ + .en_ofs = _en_ofs, \ + .sta_ofs = _sta_ofs, \ + .mask = _mask, \ + .clr_ack_mask = _clr_ack_mask, \ + } + +enum regmap_type { + INVALID_TYPE = 0, + IFR_TYPE, + SMI_TYPE, +}; + +struct bus_prot { + enum regmap_type type; + u32 set_ofs; + u32 clr_ofs; + u32 en_ofs; + u32 sta_ofs; + u32 mask; + u32 clr_ack_mask; +}; + +int mtk_scpsys_ext_set_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common); +int mtk_scpsys_ext_clear_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common); + +#endif /* __SOC_MEDIATEK_SCPSYS_EXT_H */ -- 1.8.1.1.dirty _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek 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=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_GIT autolearn=unavailable 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 48FDDC43603 for ; Wed, 18 Dec 2019 08:43:56 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0DE1124650 for ; Wed, 18 Dec 2019 08:43:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ro075TFt"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="l+poRVwc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0DE1124650 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YL2tXaBSjIhsI2sw+le3JhXkPACmnFgco2KuMOLCNJk=; b=Ro075TFtdrfr5H CdDi+vKkX4eicQ8Nc6c05+WrdIB0DHDD69L5IfSbV2fQaB/LcZE0p5h1vl4tEwlSDeId60h5uIfJ0 z0z2po9lwcDmbK1AyFKRi5FQRScnP1mwP3elMgnyof7SigePP+vte8TlpTYYOcnBEMIkVj4SD2lLL 6zNYSSCcKkZAWcnuVanVFsk/qCp7A0th8eP5jTdmYxAFO6+f1W5cQ6oc+vmciPlEhLp7JBdJFhp3A BVHFY5sOGvAwgEMC605iqgJUn7Q1whO6qsgOt95bRjQswgVZ9Ednr8j3ZHB26v9P5G9azkQk5VTBL JTsoXrkcOsld8GbQzxPQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ihUvx-0006oa-Pn; Wed, 18 Dec 2019 08:43:53 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ihUtJ-0004Dh-My; Wed, 18 Dec 2019 08:41:12 +0000 X-UUID: 734757473b1143c886a0e458c44cf313-20191218 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=uXGkn3ZDyK4FYh6/CU/GmdIkkH8fqdIaTYa0BJ/T64c=; b=l+poRVwc2dMgjLxzscRnRQA5R8kk/sbvriVtg/mFx12cUrINXY7+7xefQMruLO8pI/D90CjBYo+pA8HCfBRZK+gbVcDLn10hYbQ1lQ3KLrXTWsucoIzVgNcSP2K2ZPfezRnkflKvNcbsa3k0Hqj8VfA8EOorRA4zh7HULBAsZy8=; X-UUID: 734757473b1143c886a0e458c44cf313-20191218 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1090375823; Wed, 18 Dec 2019 00:41:00 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 18 Dec 2019 00:31:20 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Wed, 18 Dec 2019 16:30:40 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Wed, 18 Dec 2019 16:30:29 +0800 From: Weiyi Lu To: Nicolas Boichat , Matthias Brugger , Rob Herring , Sascha Hauer Subject: [PATCH v10 05/12] soc: mediatek: Add multiple step bus protection control Date: Wed, 18 Dec 2019 16:30:41 +0800 Message-ID: <1576657848-14711-6-git-send-email-weiyi.lu@mediatek.com> X-Mailer: git-send-email 1.8.1.1.dirty In-Reply-To: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> References: <1576657848-14711-1-git-send-email-weiyi.lu@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191218_004109_872745_BEB07571 X-CRM114-Status: GOOD ( 18.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: James Liao , Weiyi Lu , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Fan Chen , linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Both MT8183 & MT6765 have more control steps of bus protection than previous project. And there add more bus protection registers reside at infracfg & smi-common. Also add new APIs for multiple step bus protection control with more customized arguments. Signed-off-by: Weiyi Lu --- drivers/soc/mediatek/Makefile | 2 +- drivers/soc/mediatek/mtk-scpsys-ext.c | 99 +++++++++++++++++++++++++++++++++ drivers/soc/mediatek/mtk-scpsys.c | 39 +++++++++---- include/linux/soc/mediatek/scpsys-ext.h | 39 +++++++++++++ 4 files changed, 168 insertions(+), 11 deletions(-) create mode 100644 drivers/soc/mediatek/mtk-scpsys-ext.c create mode 100644 include/linux/soc/mediatek/scpsys-ext.h diff --git a/drivers/soc/mediatek/Makefile b/drivers/soc/mediatek/Makefile index b017330..b442be9 100644 --- a/drivers/soc/mediatek/Makefile +++ b/drivers/soc/mediatek/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_MTK_CMDQ) += mtk-cmdq-helper.o -obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o +obj-$(CONFIG_MTK_INFRACFG) += mtk-infracfg.o mtk-scpsys-ext.o obj-$(CONFIG_MTK_PMIC_WRAP) += mtk-pmic-wrap.o obj-$(CONFIG_MTK_SCPSYS) += mtk-scpsys.o diff --git a/drivers/soc/mediatek/mtk-scpsys-ext.c b/drivers/soc/mediatek/mtk-scpsys-ext.c new file mode 100644 index 0000000..8150d4f --- /dev/null +++ b/drivers/soc/mediatek/mtk-scpsys-ext.c @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2018 MediaTek Inc. + * Author: Owen Chen + */ +#include +#include +#include +#include +#include + +#define MTK_POLL_DELAY_US 10 +#define MTK_POLL_TIMEOUT USEC_PER_SEC + +static int set_bus_protection(struct regmap *map, u32 mask, u32 ack_mask, + u32 reg_set, u32 reg_sta, u32 reg_en) +{ + u32 val; + + if (reg_set) + regmap_write(map, reg_set, mask); + else + regmap_update_bits(map, reg_en, mask, mask); + + return regmap_read_poll_timeout(map, reg_sta, + val, (val & ack_mask) == ack_mask, + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); +} + +static int clear_bus_protection(struct regmap *map, u32 mask, u32 ack_mask, + u32 reg_clr, u32 reg_sta, u32 reg_en) +{ + u32 val; + + if (reg_clr) + regmap_write(map, reg_clr, mask); + else + regmap_update_bits(map, reg_en, mask, 0); + + return regmap_read_poll_timeout(map, reg_sta, + val, !(val & ack_mask), + MTK_POLL_DELAY_US, MTK_POLL_TIMEOUT); +} + +int mtk_scpsys_ext_set_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common) +{ + int i; + + for (i = 0; i < MAX_STEPS; i++) { + struct regmap *map = NULL; + int ret; + + if (bp_table[i].type == INVALID_TYPE) + break; + else if (bp_table[i].type == IFR_TYPE) + map = infracfg; + else if (bp_table[i].type == SMI_TYPE) + map = smi_common; + + ret = set_bus_protection(map, + bp_table[i].mask, bp_table[i].mask, + bp_table[i].set_ofs, bp_table[i].sta_ofs, + bp_table[i].en_ofs); + + if (ret) + return ret; + } + + return 0; +} + +int mtk_scpsys_ext_clear_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common) +{ + int i; + + for (i = MAX_STEPS - 1; i >= 0; i--) { + struct regmap *map = NULL; + int ret; + + if (bp_table[i].type == INVALID_TYPE) + continue; + else if (bp_table[i].type == IFR_TYPE) + map = infracfg; + else if (bp_table[i].type == SMI_TYPE) + map = smi_common; + + ret = clear_bus_protection(map, + bp_table[i].mask, bp_table[i].clr_ack_mask, + bp_table[i].clr_ofs, bp_table[i].sta_ofs, + bp_table[i].en_ofs); + + if (ret) + return ret; + } + + return 0; +} diff --git a/drivers/soc/mediatek/mtk-scpsys.c b/drivers/soc/mediatek/mtk-scpsys.c index db35a28..5699d9f 100644 --- a/drivers/soc/mediatek/mtk-scpsys.c +++ b/drivers/soc/mediatek/mtk-scpsys.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -90,6 +91,7 @@ * @bus_prot_mask: The mask for single step bus protection. * @basic_clk_name: The basic clocks required by this power domain. * @caps: The flag for active wake-up action. + * @bp_table: The mask table for multiple step bus protection. */ struct scp_domain_data { const char *name; @@ -100,6 +102,7 @@ struct scp_domain_data { u32 bus_prot_mask; const char *basic_clk_name[MAX_CLKS]; u8 caps; + struct bus_prot bp_table[MAX_STEPS]; }; struct scp; @@ -123,6 +126,7 @@ struct scp { struct device *dev; void __iomem *base; struct regmap *infracfg; + struct regmap *smi_common; struct scp_ctrl_reg ctrl_reg; bool bus_prot_reg_update; }; @@ -252,24 +256,28 @@ static int scpsys_bus_protect_enable(struct scp_domain *scpd) { struct scp *scp = scpd->scp; - if (!scpd->data->bus_prot_mask) - return 0; + if (scpd->data->bus_prot_mask) { + return mtk_infracfg_set_bus_protection(scp->infracfg, + scpd->data->bus_prot_mask, + scp->bus_prot_reg_update); + } - return mtk_infracfg_set_bus_protection(scp->infracfg, - scpd->data->bus_prot_mask, - scp->bus_prot_reg_update); + return mtk_scpsys_ext_set_bus_protection(scpd->data->bp_table, + scp->infracfg, scp->smi_common); } static int scpsys_bus_protect_disable(struct scp_domain *scpd) { struct scp *scp = scpd->scp; - if (!scpd->data->bus_prot_mask) - return 0; + if (scpd->data->bus_prot_mask) { + return mtk_infracfg_clear_bus_protection(scp->infracfg, + scpd->data->bus_prot_mask, + scp->bus_prot_reg_update); + } - return mtk_infracfg_clear_bus_protection(scp->infracfg, - scpd->data->bus_prot_mask, - scp->bus_prot_reg_update); + return mtk_scpsys_ext_clear_bus_protection(scpd->data->bp_table, + scp->infracfg, scp->smi_common); } static int scpsys_power_on(struct generic_pm_domain *genpd) @@ -448,6 +456,17 @@ static struct scp *init_scp(struct platform_device *pdev, return ERR_CAST(scp->infracfg); } + scp->smi_common = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, + "smi_comm"); + + if (scp->smi_common == ERR_PTR(-ENODEV)) { + scp->smi_common = NULL; + } else if (IS_ERR(scp->smi_common)) { + dev_err(&pdev->dev, "Cannot find smi_common controller: %ld\n", + PTR_ERR(scp->smi_common)); + return ERR_CAST(scp->smi_common); + } + for (i = 0; i < num; i++) { struct scp_domain *scpd = &scp->domains[i]; const struct scp_domain_data *data = &scp_domain_data[i]; diff --git a/include/linux/soc/mediatek/scpsys-ext.h b/include/linux/soc/mediatek/scpsys-ext.h new file mode 100644 index 0000000..3e5b84d --- /dev/null +++ b/include/linux/soc/mediatek/scpsys-ext.h @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __SOC_MEDIATEK_SCPSYS_EXT_H +#define __SOC_MEDIATEK_SCPSYS_EXT_H + +#define MAX_STEPS 4 + +#define BUS_PROT(_type, _set_ofs, _clr_ofs, \ + _en_ofs, _sta_ofs, _mask, _clr_ack_mask) { \ + .type = _type, \ + .set_ofs = _set_ofs, \ + .clr_ofs = _clr_ofs, \ + .en_ofs = _en_ofs, \ + .sta_ofs = _sta_ofs, \ + .mask = _mask, \ + .clr_ack_mask = _clr_ack_mask, \ + } + +enum regmap_type { + INVALID_TYPE = 0, + IFR_TYPE, + SMI_TYPE, +}; + +struct bus_prot { + enum regmap_type type; + u32 set_ofs; + u32 clr_ofs; + u32 en_ofs; + u32 sta_ofs; + u32 mask; + u32 clr_ack_mask; +}; + +int mtk_scpsys_ext_set_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common); +int mtk_scpsys_ext_clear_bus_protection(const struct bus_prot *bp_table, + struct regmap *infracfg, struct regmap *smi_common); + +#endif /* __SOC_MEDIATEK_SCPSYS_EXT_H */ -- 1.8.1.1.dirty _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel