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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E49B8C4332F for ; Mon, 25 Oct 2021 10:57:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CCAFE60241 for ; Mon, 25 Oct 2021 10:57:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232999AbhJYK7X (ORCPT ); Mon, 25 Oct 2021 06:59:23 -0400 Received: from mailgw02.mediatek.com ([1.203.163.81]:51450 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S232524AbhJYK7T (ORCPT ); Mon, 25 Oct 2021 06:59:19 -0400 X-UUID: 99751796aade4fdabe1c5dd496464516-20211025 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=U480vXybgkx6L1mzbarsT6++qw25ikjo5mSkLRFQFH4=; b=ueSzTLVK/K9xvNDMLFJ0SNjX9WsgZeG0/kMSlZSm6DjAlDrV2ZYWJ5etC025mdUdKQYY4hTt7Y+cZhdv/RYWgR7HdTnNPwxT1tvRI6rrYk1LiZ7TQmCmBC4jwNg5uUwRxEGz3Crg0znAlIs9lD/4UW8j385h9JwggGNVV+efm+I=; X-UUID: 99751796aade4fdabe1c5dd496464516-20211025 Received: from mtkmbs10n1.mediatek.inc [(172.27.5.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1704538561; Mon, 25 Oct 2021 18:56:48 +0800 Received: from mtkexhb01.mediatek.inc (172.21.101.102) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.3; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb01.mediatek.inc (172.21.101.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 25 Oct 2021 18:56:48 +0800 From: YC Hung To: , , , CC: , , , , , , , , , Subject: [PATCH v3 1/2] ASoC: SOF: mediatek: Add mt8195 dsp clock support Date: Mon, 25 Oct 2021 18:56:34 +0800 Message-ID: <20211025105635.30625-2-yc.hung@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20211025105635.30625-1-yc.hung@mediatek.com> References: <20211025105635.30625-1-yc.hung@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QWRkIGFkc3AgY2xvY2sgb24vb2ZmIHN1cHBvcnQgb24gbXQ4MTk1IHBsYXRmb3JtLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBZQyBIdW5nIDx5Yy5odW5nQG1lZGlhdGVrLmNvbT4NCi0tLQ0KIHNvdW5kL3Nv Yy9zb2YvbWVkaWF0ZWsvYWRzcF9oZWxwZXIuaCAgICAgICB8ICAgMiArLQ0KIHNvdW5kL3NvYy9z b2YvbWVkaWF0ZWsvbXQ4MTk1L01ha2VmaWxlICAgICB8ICAgMiArLQ0KIHNvdW5kL3NvYy9zb2Yv bWVkaWF0ZWsvbXQ4MTk1L210ODE5NS1jbGsuYyB8IDE2MyArKysrKysrKysrKysrKysrKysrKysN CiBzb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9tdDgxOTUtY2xrLmggfCAgMjggKysrKw0K IHNvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L210ODE5NS5jICAgICB8ICAyMiArKy0NCiA1 IGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9tdDgxOTUtY2xrLmMN CiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1 LWNsay5oDQoNCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVy LmggYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVyLmgNCmluZGV4IDM0Njk1M2Rk MjJkYi4uNjczNGUyYzBjNmIxIDEwMDY0NA0KLS0tIGEvc291bmQvc29jL3NvZi9tZWRpYXRlay9h ZHNwX2hlbHBlci5oDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVyLmgN CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBhZHNwX3ByaXYgew0KIAlzdHJ1Y3QgbWJveF9jb250 cm9sbGVyICphZHNwX21ib3g7DQogDQogCXN0cnVjdCBtdGtfYWRzcF9jaGlwX2luZm8gKmFkc3A7 DQotDQorCXN0cnVjdCBjbGsgKipjbGs7DQogCXUzMiAoKmFwMmFkc3BfYWRkcikodTMyIGFkZHIs IHZvaWQgKmRhdGEpOw0KIAl1MzIgKCphZHNwMmFwX2FkZHIpKHUzMiBhZGRyLCB2b2lkICpkYXRh KTsNCiANCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9NYWtlZmls ZSBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L01ha2VmaWxlDQppbmRleCA2MGZjYTI0 YzA2OGEuLjY1MGY0YmNlOTliMiAxMDA2NDQNCi0tLSBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsv bXQ4MTk1L01ha2VmaWxlDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9NYWtl ZmlsZQ0KQEAgLTEsNCArMSw0IEBADQogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0y LjAtb25seSBPUiBCU0QtMy1DbGF1c2UpDQotc25kLXNvZi1tdDgxOTUtb2JqcyA6PSBtdDgxOTUu byBtdDgxOTUtbG9hZGVyLm8NCitzbmQtc29mLW10ODE5NS1vYmpzIDo9IG10ODE5NS5vIG10ODE5 NS1jbGsubyBtdDgxOTUtbG9hZGVyLm8NCiBvYmotJChDT05GSUdfU05EX1NPQ19TT0ZfTVQ4MTk1 KSArPSBzbmQtc29mLW10ODE5NS5vDQogDQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvZi9tZWRp YXRlay9tdDgxOTUvbXQ4MTk1LWNsay5jIGIvc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUv bXQ4MTk1LWNsay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5i NGYzOTBkOWZhMTMNCi0tLSAvZGV2L251bGwNCisrKyBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsv bXQ4MTk1L210ODE5NS1jbGsuYw0KQEAgLTAsMCArMSwxNjMgQEANCisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMy1DbGF1c2UpDQorLy8NCisvLyBDb3B5 cmlnaHQoYykgMjAyMSBNZWRpYXRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N CisvLw0KKy8vIEF1dGhvcjogWUMgSHVuZyA8eWMuaHVuZ0BtZWRpYXRlay5jb20+DQorLy8NCisv LyBIYXJkd2FyZSBpbnRlcmZhY2UgZm9yIG10ODE5NSBEU1AgY2xvY2sNCisNCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8 bGludXgvaW8uaD4NCisjaW5jbHVkZSAibXQ4MTk1LmgiDQorI2luY2x1ZGUgIm10ODE5NS1jbGsu aCINCisjaW5jbHVkZSAiLi4vYWRzcF9oZWxwZXIuaCINCisjaW5jbHVkZSAiLi4vLi4vc29mLWF1 ZGlvLmgiDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKmFkc3BfY2xrc1tBRFNQX0NMS19NQVhdID0g ew0KKwlbQ0xLX1RPUF9BRFNQXSA9ICJhZHNwX3NlbCIsDQorCVtDTEtfVE9QX0NMSzI2TV0gPSAi Y2xrMjZtX2NrIiwNCisJW0NMS19UT1BfQVVESU9fTE9DQUxfQlVTXSA9ICJhdWRpb19sb2NhbF9i dXMiLA0KKwlbQ0xLX1RPUF9NQUlOUExMX0Q3X0QyXSA9ICJtYWlucGxsX2Q3X2QyIiwNCisJW0NM S19TQ1BfQURTUF9BVURJT0RTUF0gPSAic2NwX2Fkc3BfYXVkaW9kc3AiLA0KKwlbQ0xLX1RPUF9B VURJT19IXSA9ICJhdWRpb19oIiwNCit9Ow0KKw0KK2ludCBtdDgxOTVfYWRzcF9pbml0X2Nsb2Nr KHN0cnVjdCBzbmRfc29mX2RldiAqc2RldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNk ZXYtPmRldjsNCisJc3RydWN0IGFkc3BfcHJpdiAqcHJpdiA9IHNkZXYtPnBkYXRhLT5od19wZGF0 YTsNCisJaW50IGk7DQorDQorCXByaXYtPmNsayA9IGRldm1fa2NhbGxvYyhkZXYsIEFEU1BfQ0xL X01BWCwNCisJCQkJIHNpemVvZigqcHJpdi0+Y2xrKSwgR0ZQX0tFUk5FTCk7DQorDQorCWlmICgh cHJpdi0+Y2xrKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZvciAoaSA9IDA7IGkgPCBBRFNQ X0NMS19NQVg7IGkrKykgew0KKwkJcHJpdi0+Y2xrW2ldID0gZGV2bV9jbGtfZ2V0KGRldiwgYWRz cF9jbGtzW2ldKTsNCisJCWlmIChJU19FUlIocHJpdi0+Y2xrW2ldKSkgew0KKwkJCWRldl9lcnIo ZGV2LCAiJXMoKSwgZGV2bV9jbGtfZ2V0ICVzIGZhaWwsIHJldCAlbGRcbiIsDQorCQkJCV9fZnVu Y19fLCBhZHNwX2Nsa3NbaV0sDQorCQkJCVBUUl9FUlIocHJpdi0+Y2xrW2ldKSk7DQorCQkJcmV0 dXJuIFBUUl9FUlIocHJpdi0+Y2xrW2ldKTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBhZHNwX2VuYWJsZV9jbG9jayhzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNk ZXYpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzZGV2LT5kZXY7DQorCXN0cnVjdCBhZHNw X3ByaXYgKnByaXYgPSBzZGV2LT5wZGF0YS0+aHdfcGRhdGE7DQorCWludCByZXQ7DQorDQorCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xLX1RPUF9NQUlOUExMX0Q3X0QyXSk7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMgY2xrX3ByZXBhcmVfZW5hYmxlKG1h aW5wbGxfZDdfZDIpIGZhaWwgJWRcbiIsDQorCQkJX19mdW5jX18sIHJldCk7DQorCQlyZXR1cm4g cmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xLX1RP UF9BRFNQXSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMgY2xrX3ByZXBhcmVf ZW5hYmxlKGFkc3Bfc2VsKSBmYWlsICVkXG4iLA0KKwkJCV9fZnVuY19fLCByZXQpOw0KKwkJZ290 byBkaXNhYmxlX21haW5wbGxfZDdfZDJfY2xrOw0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShwcml2LT5jbGtbQ0xLX1RPUF9BVURJT19MT0NBTF9CVVNdKTsNCisJaWYgKHJldCkg ew0KKwkJZGV2X2VycihkZXYsICIlcyBjbGtfcHJlcGFyZV9lbmFibGUoYXVkaW9fbG9jYWxfYnVz KSBmYWlsICVkXG4iLA0KKwkJCV9fZnVuY19fLCByZXQpOw0KKwkJZ290byBkaXNhYmxlX2RzcF9z ZWxfY2xrOw0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xL X1NDUF9BRFNQX0FVRElPRFNQXSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMg Y2xrX3ByZXBhcmVfZW5hYmxlKHNjcF9hZHNwX2F1ZGlvZHNwKSBmYWlsICVkXG4iLA0KKwkJCV9f ZnVuY19fLCByZXQpOw0KKwkJZ290byBkaXNhYmxlX2F1ZGlvX2xvY2FsX2J1c19jbGs7DQorCX0N CisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsa1tDTEtfVE9QX0FVRElPX0hd KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICIlcyBjbGtfcHJlcGFyZV9lbmFibGUo YXVkaW9faCkgZmFpbCAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcmV0KTsNCisJCWdvdG8gZGlzYWJs ZV9zY3BfYWRzcF9hdWRpb2RzcF9jbGs7DQorCX0NCisNCisJcmV0dXJuIDA7DQorDQorZGlzYWJs ZV9zY3BfYWRzcF9hdWRpb2RzcF9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGtbQ0xLX1NDUF9BRFNQX0FVRElPRFNQXSk7DQorZGlzYWJsZV9hdWRpb19sb2NhbF9idXNfY2xr Og0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrW0NMS19UT1BfQVVESU9fTE9DQUxf QlVTXSk7DQorZGlzYWJsZV9kc3Bfc2VsX2NsazoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBy aXYtPmNsa1tDTEtfVE9QX0FEU1BdKTsNCitkaXNhYmxlX21haW5wbGxfZDdfZDJfY2xrOg0KKwlj bGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrW0NMS19UT1BfTUFJTlBMTF9EN19EMl0pOw0K Kw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBhZHNwX2Rpc2FibGVfY2xvY2so c3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KK3sNCisJc3RydWN0IGFkc3BfcHJpdiAqcHJpdiA9 IHNkZXYtPnBkYXRhLT5od19wZGF0YTsNCisNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYt PmNsa1tDTEtfVE9QX0FVRElPX0hdKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNs a1tDTEtfU0NQX0FEU1BfQVVESU9EU1BdKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYt PmNsa1tDTEtfVE9QX0FVRElPX0xPQ0FMX0JVU10pOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUo cHJpdi0+Y2xrW0NMS19UT1BfQURTUF0pOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ Y2xrW0NMS19UT1BfTUFJTlBMTF9EN19EMl0pOw0KK30NCisNCitzdGF0aWMgaW50IGFkc3BfZGVm YXVsdF9jbGtfaW5pdChzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYsIGJvb2wgZW5hYmxlKQ0KK3sN CisJc3RydWN0IGRldmljZSAqZGV2ID0gc2Rldi0+ZGV2Ow0KKwlzdHJ1Y3QgYWRzcF9wcml2ICpw cml2ID0gc2Rldi0+cGRhdGEtPmh3X3BkYXRhOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJZGV2X2Ri ZyhkZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBlbmFibGUgPyAib24iIDogIm9mZiIpOw0KKw0K KwlpZiAoZW5hYmxlKSB7DQorCQlyZXQgPSBjbGtfc2V0X3BhcmVudChwcml2LT5jbGtbQ0xLX1RP UF9BRFNQXSwNCisJCQkJICAgICBwcml2LT5jbGtbQ0xLX1RPUF9DTEsyNk1dKTsNCisJCWlmIChy ZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgZHNwX3NlbCB0byBjbGsyNm06 ICVkXG4iLCByZXQpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorDQorCQlyZXQgPSBjbGtfc2V0 X3BhcmVudChwcml2LT5jbGtbQ0xLX1RPUF9BVURJT19MT0NBTF9CVVNdLA0KKwkJCQkgICAgIHBy aXYtPmNsa1tDTEtfVE9QX01BSU5QTExfRDdfRDJdKTsNCisJCWlmIChyZXQpIHsNCisJCQlkZXZf ZXJyKGRldiwgInNldCBhdWRpb19sb2NhbF9idXMgZmFpbGVkICVkXG4iLCByZXQpOw0KKwkJCXJl dHVybiByZXQ7DQorCQl9DQorDQorCQlyZXQgPSBhZHNwX2VuYWJsZV9jbG9jayhzZGV2KTsNCisJ CWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZHNwX2VuYWJsZV9jbG9j azogJWRcbiIsIHJldCk7DQorCQkJcmV0dXJuIHJldDsNCisJCX0NCisJfSBlbHNlIHsNCisJCWFk c3BfZGlzYWJsZV9jbG9jayhzZGV2KTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50 IGFkc3BfY2xvY2tfb24oc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KK3sNCisJLyogT3BlbiBB RFNQIGNsb2NrICovDQorCXJldHVybiBhZHNwX2RlZmF1bHRfY2xrX2luaXQoc2RldiwgMSk7DQor fQ0KKw0KK2ludCBhZHNwX2Nsb2NrX29mZihzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYpDQorew0K KwkvKiBDbG9zZSBBRFNQIGNsb2NrICovDQorCXJldHVybiBhZHNwX2RlZmF1bHRfY2xrX2luaXQo c2RldiwgMCk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4 MTk1L210ODE5NS1jbGsuaCBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L210ODE5NS1j bGsuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uOWNjMDU3M2Q1 Y2QyDQotLS0gL2Rldi9udWxsDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9t dDgxOTUtY2xrLmgNCkBAIC0wLDAgKzEsMjggQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLw0KKw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogIEhlYWRlciBmaWxlIGZv ciB0aGUgbXQ4MTk1IERTUCBjbG9jayAgZGVmaW5pdGlvbg0KKyAqLw0KKw0KKyNpZm5kZWYgX19N VDgxOTVfQ0xLX0gNCisjZGVmaW5lIF9fTVQ4MTk1X0NMS19IDQorDQorc3RydWN0IHNuZF9zb2Zf ZGV2Ow0KKw0KKy8qRFNQIGNsb2NrKi8NCitlbnVtIGFkc3BfY2xrX2lkIHsNCisJQ0xLX1RPUF9B RFNQLA0KKwlDTEtfVE9QX0NMSzI2TSwNCisJQ0xLX1RPUF9BVURJT19MT0NBTF9CVVMsDQorCUNM S19UT1BfTUFJTlBMTF9EN19EMiwNCisJQ0xLX1NDUF9BRFNQX0FVRElPRFNQLA0KKwlDTEtfVE9Q X0FVRElPX0gsDQorCUFEU1BfQ0xLX01BWA0KK307DQorDQoraW50IG10ODE5NV9hZHNwX2luaXRf Y2xvY2soc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KTsNCitpbnQgYWRzcF9jbG9ja19vbihzdHJ1 Y3Qgc25kX3NvZl9kZXYgKnNkZXYpOw0KK2ludCBhZHNwX2Nsb2NrX29mZihzdHJ1Y3Qgc25kX3Nv Zl9kZXYgKnNkZXYpOw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0 ZWsvbXQ4MTk1L210ODE5NS5jIGIvc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1 LmMNCmluZGV4IDk5MDc1NTk4YTM1YS4uNWJmYWU5Mzc5YWM4IDEwMDY0NA0KLS0tIGEvc291bmQv c29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1LmMNCisrKyBiL3NvdW5kL3NvYy9zb2YvbWVk aWF0ZWsvbXQ4MTk1L210ODE5NS5jDQpAQCAtMjUsNiArMjUsNyBAQA0KICNpbmNsdWRlICIuLi9h ZHNwX2hlbHBlci5oIg0KICNpbmNsdWRlICIuLi9tZWRpYXRlay1vcHMuaCINCiAjaW5jbHVkZSAi bXQ4MTk1LmgiDQorI2luY2x1ZGUgIm10ODE5NS1jbGsuaCINCiANCiBzdGF0aWMgaW50IHBsYXRm b3JtX3BhcnNlX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRh dGEpDQogew0KQEAgLTIzMSwxMCArMjMyLDIyIEBAIHN0YXRpYyBpbnQgbXQ4MTk1X2RzcF9wcm9i ZShzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYpDQogCWlmIChyZXQpDQogCQlyZXR1cm4gcmV0Ow0K IA0KKwlyZXQgPSBtdDgxOTVfYWRzcF9pbml0X2Nsb2NrKHNkZXYpOw0KKwlpZiAocmV0KSB7DQor CQlkZXZfZXJyKHNkZXYtPmRldiwgIm10ODE5NV9hZHNwX2luaXRfY2xvY2sgZmFpbGVkXG4iKTsN CisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXJldCA9IGFkc3BfY2xvY2tfb24oc2Rldik7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoc2Rldi0+ZGV2LCAiYWRzcF9jbG9ja19vbiBmYWls IVxuIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KIAlyZXQgPSBhZHNwX3NyYW1fcG93 ZXJfb24oc2Rldi0+ZGV2LCB0cnVlKTsNCiAJaWYgKHJldCkgew0KIAkJZGV2X2VycihzZGV2LT5k ZXYsICJhZHNwX3NyYW1fcG93ZXJfb24gZmFpbCFcbiIpOw0KLQkJcmV0dXJuIHJldDsNCisJCWdv dG8gZXhpdF9jbGtfZGlzYWJsZTsNCiAJfQ0KIA0KIAlyZXQgPSBhZHNwX21lbW9yeV9yZW1hcF9p bml0KCZwZGV2LT5kZXYsIHByaXYtPmFkc3ApOw0KQEAgLTI4Miw2ICsyOTUsOCBAQCBzdGF0aWMg aW50IG10ODE5NV9kc3BfcHJvYmUoc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KIA0KIGVycl9h ZHNwX3NyYW1fcG93ZXJfb2ZmOg0KIAlhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwgZmFs c2UpOw0KK2V4aXRfY2xrX2Rpc2FibGU6DQorCWFkc3BfY2xvY2tfb2ZmKHNkZXYpOw0KIA0KIAly ZXR1cm4gcmV0Ow0KIH0NCkBAIC0yOTAsNyArMzA1LDEwIEBAIHN0YXRpYyBpbnQgbXQ4MTk1X2Rz cF9yZW1vdmUoc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KIHsNCiAJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihzZGV2LT5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UsIGRldik7DQogDQotCXJldHVybiBhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwg ZmFsc2UpOw0KKwlhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwgZmFsc2UpOw0KKwlhZHNw X2Nsb2NrX29mZihzZGV2KTsNCisNCisJcmV0dXJuIDA7DQogfQ0KIA0KIC8qIG9uIG10ODE5NSB0 aGVyZSBpcyAxIHRvIDEgbWF0Y2ggYmV0d2VlbiB0eXBlIGFuZCBCQVIgaWR4ICovDQotLSANCjIu MTguMA0K 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3219DC433FE for ; Mon, 25 Oct 2021 10:58:01 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (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 AB65360241 for ; Mon, 25 Oct 2021 10:58:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org AB65360241 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 7DE3616D3; Mon, 25 Oct 2021 12:57:08 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 7DE3616D3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1635159478; bh=U480vXybgkx6L1mzbarsT6++qw25ikjo5mSkLRFQFH4=; h=From:To:Subject:Date:In-Reply-To:References:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=UVWE1KUqmgJjBzwUbppfAPjnWeN3DjnybgoQfmKvGTFNHY2VCl1T+kQ65f7X4C9vD M5SCC2+PEttDK11iywxc2VBX+nigm+FUetAC0u7hrl81Ek8d3d5/rTIySLcpGDQKeD QVbeGRgZyxp2LqnV08QWBXuRKhK4oVbYsITrMveA= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id F309AF804E2; Mon, 25 Oct 2021 12:57:07 +0200 (CEST) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 4ACB9F80271; Mon, 25 Oct 2021 12:57:05 +0200 (CEST) Received: from mailgw02.mediatek.com (unknown [1.203.163.81]) by alsa1.perex.cz (Postfix) with ESMTP id C695EF8032B for ; Mon, 25 Oct 2021 12:56:58 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz C695EF8032B Authentication-Results: alsa1.perex.cz; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ueSzTLVK" X-UUID: 99751796aade4fdabe1c5dd496464516-20211025 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=U480vXybgkx6L1mzbarsT6++qw25ikjo5mSkLRFQFH4=; b=ueSzTLVK/K9xvNDMLFJ0SNjX9WsgZeG0/kMSlZSm6DjAlDrV2ZYWJ5etC025mdUdKQYY4hTt7Y+cZhdv/RYWgR7HdTnNPwxT1tvRI6rrYk1LiZ7TQmCmBC4jwNg5uUwRxEGz3Crg0znAlIs9lD/4UW8j385h9JwggGNVV+efm+I=; X-UUID: 99751796aade4fdabe1c5dd496464516-20211025 Received: from mtkmbs10n1.mediatek.inc [(172.27.5.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1704538561; Mon, 25 Oct 2021 18:56:48 +0800 Received: from mtkexhb01.mediatek.inc (172.21.101.102) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.3; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb01.mediatek.inc (172.21.101.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 25 Oct 2021 18:56:48 +0800 From: YC Hung To: , , , Subject: [PATCH v3 1/2] ASoC: SOF: mediatek: Add mt8195 dsp clock support Date: Mon, 25 Oct 2021 18:56:34 +0800 Message-ID: <20211025105635.30625-2-yc.hung@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20211025105635.30625-1-yc.hung@mediatek.com> References: <20211025105635.30625-1-yc.hung@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, allen-kh.cheng@mediatek.com, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, trevor.wu@mediatek.com, yc.hung@mediatek.com, daniel.baluta@nxp.com, linux-arm-kernel@lists.infradead.org, angelogioacchino.delregno@collabora.com X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" QWRkIGFkc3AgY2xvY2sgb24vb2ZmIHN1cHBvcnQgb24gbXQ4MTk1IHBsYXRmb3JtLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBZQyBIdW5nIDx5Yy5odW5nQG1lZGlhdGVrLmNvbT4NCi0tLQ0KIHNvdW5kL3Nv Yy9zb2YvbWVkaWF0ZWsvYWRzcF9oZWxwZXIuaCAgICAgICB8ICAgMiArLQ0KIHNvdW5kL3NvYy9z b2YvbWVkaWF0ZWsvbXQ4MTk1L01ha2VmaWxlICAgICB8ICAgMiArLQ0KIHNvdW5kL3NvYy9zb2Yv bWVkaWF0ZWsvbXQ4MTk1L210ODE5NS1jbGsuYyB8IDE2MyArKysrKysrKysrKysrKysrKysrKysN CiBzb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9tdDgxOTUtY2xrLmggfCAgMjggKysrKw0K IHNvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L210ODE5NS5jICAgICB8ICAyMiArKy0NCiA1 IGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9tdDgxOTUtY2xrLmMN CiBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1 LWNsay5oDQoNCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVy LmggYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVyLmgNCmluZGV4IDM0Njk1M2Rk MjJkYi4uNjczNGUyYzBjNmIxIDEwMDY0NA0KLS0tIGEvc291bmQvc29jL3NvZi9tZWRpYXRlay9h ZHNwX2hlbHBlci5oDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL2Fkc3BfaGVscGVyLmgN CkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBhZHNwX3ByaXYgew0KIAlzdHJ1Y3QgbWJveF9jb250 cm9sbGVyICphZHNwX21ib3g7DQogDQogCXN0cnVjdCBtdGtfYWRzcF9jaGlwX2luZm8gKmFkc3A7 DQotDQorCXN0cnVjdCBjbGsgKipjbGs7DQogCXUzMiAoKmFwMmFkc3BfYWRkcikodTMyIGFkZHIs IHZvaWQgKmRhdGEpOw0KIAl1MzIgKCphZHNwMmFwX2FkZHIpKHUzMiBhZGRyLCB2b2lkICpkYXRh KTsNCiANCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9NYWtlZmls ZSBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L01ha2VmaWxlDQppbmRleCA2MGZjYTI0 YzA2OGEuLjY1MGY0YmNlOTliMiAxMDA2NDQNCi0tLSBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsv bXQ4MTk1L01ha2VmaWxlDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9NYWtl ZmlsZQ0KQEAgLTEsNCArMSw0IEBADQogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0y LjAtb25seSBPUiBCU0QtMy1DbGF1c2UpDQotc25kLXNvZi1tdDgxOTUtb2JqcyA6PSBtdDgxOTUu byBtdDgxOTUtbG9hZGVyLm8NCitzbmQtc29mLW10ODE5NS1vYmpzIDo9IG10ODE5NS5vIG10ODE5 NS1jbGsubyBtdDgxOTUtbG9hZGVyLm8NCiBvYmotJChDT05GSUdfU05EX1NPQ19TT0ZfTVQ4MTk1 KSArPSBzbmQtc29mLW10ODE5NS5vDQogDQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvZi9tZWRp YXRlay9tdDgxOTUvbXQ4MTk1LWNsay5jIGIvc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUv bXQ4MTk1LWNsay5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5i NGYzOTBkOWZhMTMNCi0tLSAvZGV2L251bGwNCisrKyBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsv bXQ4MTk1L210ODE5NS1jbGsuYw0KQEAgLTAsMCArMSwxNjMgQEANCisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMy1DbGF1c2UpDQorLy8NCisvLyBDb3B5 cmlnaHQoYykgMjAyMSBNZWRpYXRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N CisvLw0KKy8vIEF1dGhvcjogWUMgSHVuZyA8eWMuaHVuZ0BtZWRpYXRlay5jb20+DQorLy8NCisv LyBIYXJkd2FyZSBpbnRlcmZhY2UgZm9yIG10ODE5NSBEU1AgY2xvY2sNCisNCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8 bGludXgvaW8uaD4NCisjaW5jbHVkZSAibXQ4MTk1LmgiDQorI2luY2x1ZGUgIm10ODE5NS1jbGsu aCINCisjaW5jbHVkZSAiLi4vYWRzcF9oZWxwZXIuaCINCisjaW5jbHVkZSAiLi4vLi4vc29mLWF1 ZGlvLmgiDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKmFkc3BfY2xrc1tBRFNQX0NMS19NQVhdID0g ew0KKwlbQ0xLX1RPUF9BRFNQXSA9ICJhZHNwX3NlbCIsDQorCVtDTEtfVE9QX0NMSzI2TV0gPSAi Y2xrMjZtX2NrIiwNCisJW0NMS19UT1BfQVVESU9fTE9DQUxfQlVTXSA9ICJhdWRpb19sb2NhbF9i dXMiLA0KKwlbQ0xLX1RPUF9NQUlOUExMX0Q3X0QyXSA9ICJtYWlucGxsX2Q3X2QyIiwNCisJW0NM S19TQ1BfQURTUF9BVURJT0RTUF0gPSAic2NwX2Fkc3BfYXVkaW9kc3AiLA0KKwlbQ0xLX1RPUF9B VURJT19IXSA9ICJhdWRpb19oIiwNCit9Ow0KKw0KK2ludCBtdDgxOTVfYWRzcF9pbml0X2Nsb2Nr KHN0cnVjdCBzbmRfc29mX2RldiAqc2RldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNk ZXYtPmRldjsNCisJc3RydWN0IGFkc3BfcHJpdiAqcHJpdiA9IHNkZXYtPnBkYXRhLT5od19wZGF0 YTsNCisJaW50IGk7DQorDQorCXByaXYtPmNsayA9IGRldm1fa2NhbGxvYyhkZXYsIEFEU1BfQ0xL X01BWCwNCisJCQkJIHNpemVvZigqcHJpdi0+Y2xrKSwgR0ZQX0tFUk5FTCk7DQorDQorCWlmICgh cHJpdi0+Y2xrKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZvciAoaSA9IDA7IGkgPCBBRFNQ X0NMS19NQVg7IGkrKykgew0KKwkJcHJpdi0+Y2xrW2ldID0gZGV2bV9jbGtfZ2V0KGRldiwgYWRz cF9jbGtzW2ldKTsNCisJCWlmIChJU19FUlIocHJpdi0+Y2xrW2ldKSkgew0KKwkJCWRldl9lcnIo ZGV2LCAiJXMoKSwgZGV2bV9jbGtfZ2V0ICVzIGZhaWwsIHJldCAlbGRcbiIsDQorCQkJCV9fZnVu Y19fLCBhZHNwX2Nsa3NbaV0sDQorCQkJCVBUUl9FUlIocHJpdi0+Y2xrW2ldKSk7DQorCQkJcmV0 dXJuIFBUUl9FUlIocHJpdi0+Y2xrW2ldKTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBhZHNwX2VuYWJsZV9jbG9jayhzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNk ZXYpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzZGV2LT5kZXY7DQorCXN0cnVjdCBhZHNw X3ByaXYgKnByaXYgPSBzZGV2LT5wZGF0YS0+aHdfcGRhdGE7DQorCWludCByZXQ7DQorDQorCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xLX1RPUF9NQUlOUExMX0Q3X0QyXSk7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMgY2xrX3ByZXBhcmVfZW5hYmxlKG1h aW5wbGxfZDdfZDIpIGZhaWwgJWRcbiIsDQorCQkJX19mdW5jX18sIHJldCk7DQorCQlyZXR1cm4g cmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xLX1RP UF9BRFNQXSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMgY2xrX3ByZXBhcmVf ZW5hYmxlKGFkc3Bfc2VsKSBmYWlsICVkXG4iLA0KKwkJCV9fZnVuY19fLCByZXQpOw0KKwkJZ290 byBkaXNhYmxlX21haW5wbGxfZDdfZDJfY2xrOw0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShwcml2LT5jbGtbQ0xLX1RPUF9BVURJT19MT0NBTF9CVVNdKTsNCisJaWYgKHJldCkg ew0KKwkJZGV2X2VycihkZXYsICIlcyBjbGtfcHJlcGFyZV9lbmFibGUoYXVkaW9fbG9jYWxfYnVz KSBmYWlsICVkXG4iLA0KKwkJCV9fZnVuY19fLCByZXQpOw0KKwkJZ290byBkaXNhYmxlX2RzcF9z ZWxfY2xrOw0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtbQ0xL X1NDUF9BRFNQX0FVRElPRFNQXSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiJXMg Y2xrX3ByZXBhcmVfZW5hYmxlKHNjcF9hZHNwX2F1ZGlvZHNwKSBmYWlsICVkXG4iLA0KKwkJCV9f ZnVuY19fLCByZXQpOw0KKwkJZ290byBkaXNhYmxlX2F1ZGlvX2xvY2FsX2J1c19jbGs7DQorCX0N CisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsa1tDTEtfVE9QX0FVRElPX0hd KTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICIlcyBjbGtfcHJlcGFyZV9lbmFibGUo YXVkaW9faCkgZmFpbCAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcmV0KTsNCisJCWdvdG8gZGlzYWJs ZV9zY3BfYWRzcF9hdWRpb2RzcF9jbGs7DQorCX0NCisNCisJcmV0dXJuIDA7DQorDQorZGlzYWJs ZV9zY3BfYWRzcF9hdWRpb2RzcF9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGtbQ0xLX1NDUF9BRFNQX0FVRElPRFNQXSk7DQorZGlzYWJsZV9hdWRpb19sb2NhbF9idXNfY2xr Og0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrW0NMS19UT1BfQVVESU9fTE9DQUxf QlVTXSk7DQorZGlzYWJsZV9kc3Bfc2VsX2NsazoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBy aXYtPmNsa1tDTEtfVE9QX0FEU1BdKTsNCitkaXNhYmxlX21haW5wbGxfZDdfZDJfY2xrOg0KKwlj bGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrW0NMS19UT1BfTUFJTlBMTF9EN19EMl0pOw0K Kw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBhZHNwX2Rpc2FibGVfY2xvY2so c3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KK3sNCisJc3RydWN0IGFkc3BfcHJpdiAqcHJpdiA9 IHNkZXYtPnBkYXRhLT5od19wZGF0YTsNCisNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYt PmNsa1tDTEtfVE9QX0FVRElPX0hdKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNs a1tDTEtfU0NQX0FEU1BfQVVESU9EU1BdKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYt PmNsa1tDTEtfVE9QX0FVRElPX0xPQ0FMX0JVU10pOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUo cHJpdi0+Y2xrW0NMS19UT1BfQURTUF0pOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ Y2xrW0NMS19UT1BfTUFJTlBMTF9EN19EMl0pOw0KK30NCisNCitzdGF0aWMgaW50IGFkc3BfZGVm YXVsdF9jbGtfaW5pdChzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYsIGJvb2wgZW5hYmxlKQ0KK3sN CisJc3RydWN0IGRldmljZSAqZGV2ID0gc2Rldi0+ZGV2Ow0KKwlzdHJ1Y3QgYWRzcF9wcml2ICpw cml2ID0gc2Rldi0+cGRhdGEtPmh3X3BkYXRhOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJZGV2X2Ri ZyhkZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBlbmFibGUgPyAib24iIDogIm9mZiIpOw0KKw0K KwlpZiAoZW5hYmxlKSB7DQorCQlyZXQgPSBjbGtfc2V0X3BhcmVudChwcml2LT5jbGtbQ0xLX1RP UF9BRFNQXSwNCisJCQkJICAgICBwcml2LT5jbGtbQ0xLX1RPUF9DTEsyNk1dKTsNCisJCWlmIChy ZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgZHNwX3NlbCB0byBjbGsyNm06 ICVkXG4iLCByZXQpOw0KKwkJCXJldHVybiByZXQ7DQorCQl9DQorDQorCQlyZXQgPSBjbGtfc2V0 X3BhcmVudChwcml2LT5jbGtbQ0xLX1RPUF9BVURJT19MT0NBTF9CVVNdLA0KKwkJCQkgICAgIHBy aXYtPmNsa1tDTEtfVE9QX01BSU5QTExfRDdfRDJdKTsNCisJCWlmIChyZXQpIHsNCisJCQlkZXZf ZXJyKGRldiwgInNldCBhdWRpb19sb2NhbF9idXMgZmFpbGVkICVkXG4iLCByZXQpOw0KKwkJCXJl dHVybiByZXQ7DQorCQl9DQorDQorCQlyZXQgPSBhZHNwX2VuYWJsZV9jbG9jayhzZGV2KTsNCisJ CWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZHNwX2VuYWJsZV9jbG9j azogJWRcbiIsIHJldCk7DQorCQkJcmV0dXJuIHJldDsNCisJCX0NCisJfSBlbHNlIHsNCisJCWFk c3BfZGlzYWJsZV9jbG9jayhzZGV2KTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50 IGFkc3BfY2xvY2tfb24oc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KK3sNCisJLyogT3BlbiBB RFNQIGNsb2NrICovDQorCXJldHVybiBhZHNwX2RlZmF1bHRfY2xrX2luaXQoc2RldiwgMSk7DQor fQ0KKw0KK2ludCBhZHNwX2Nsb2NrX29mZihzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYpDQorew0K KwkvKiBDbG9zZSBBRFNQIGNsb2NrICovDQorCXJldHVybiBhZHNwX2RlZmF1bHRfY2xrX2luaXQo c2RldiwgMCk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4 MTk1L210ODE5NS1jbGsuaCBiL3NvdW5kL3NvYy9zb2YvbWVkaWF0ZWsvbXQ4MTk1L210ODE5NS1j bGsuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uOWNjMDU3M2Q1 Y2QyDQotLS0gL2Rldi9udWxsDQorKysgYi9zb3VuZC9zb2Mvc29mL21lZGlhdGVrL210ODE5NS9t dDgxOTUtY2xrLmgNCkBAIC0wLDAgKzEsMjggQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLw0KKw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogIEhlYWRlciBmaWxlIGZv ciB0aGUgbXQ4MTk1IERTUCBjbG9jayAgZGVmaW5pdGlvbg0KKyAqLw0KKw0KKyNpZm5kZWYgX19N VDgxOTVfQ0xLX0gNCisjZGVmaW5lIF9fTVQ4MTk1X0NMS19IDQorDQorc3RydWN0IHNuZF9zb2Zf ZGV2Ow0KKw0KKy8qRFNQIGNsb2NrKi8NCitlbnVtIGFkc3BfY2xrX2lkIHsNCisJQ0xLX1RPUF9B RFNQLA0KKwlDTEtfVE9QX0NMSzI2TSwNCisJQ0xLX1RPUF9BVURJT19MT0NBTF9CVVMsDQorCUNM S19UT1BfTUFJTlBMTF9EN19EMiwNCisJQ0xLX1NDUF9BRFNQX0FVRElPRFNQLA0KKwlDTEtfVE9Q X0FVRElPX0gsDQorCUFEU1BfQ0xLX01BWA0KK307DQorDQoraW50IG10ODE5NV9hZHNwX2luaXRf Y2xvY2soc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KTsNCitpbnQgYWRzcF9jbG9ja19vbihzdHJ1 Y3Qgc25kX3NvZl9kZXYgKnNkZXYpOw0KK2ludCBhZHNwX2Nsb2NrX29mZihzdHJ1Y3Qgc25kX3Nv Zl9kZXYgKnNkZXYpOw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2YvbWVkaWF0 ZWsvbXQ4MTk1L210ODE5NS5jIGIvc291bmQvc29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1 LmMNCmluZGV4IDk5MDc1NTk4YTM1YS4uNWJmYWU5Mzc5YWM4IDEwMDY0NA0KLS0tIGEvc291bmQv c29jL3NvZi9tZWRpYXRlay9tdDgxOTUvbXQ4MTk1LmMNCisrKyBiL3NvdW5kL3NvYy9zb2YvbWVk aWF0ZWsvbXQ4MTk1L210ODE5NS5jDQpAQCAtMjUsNiArMjUsNyBAQA0KICNpbmNsdWRlICIuLi9h ZHNwX2hlbHBlci5oIg0KICNpbmNsdWRlICIuLi9tZWRpYXRlay1vcHMuaCINCiAjaW5jbHVkZSAi bXQ4MTk1LmgiDQorI2luY2x1ZGUgIm10ODE5NS1jbGsuaCINCiANCiBzdGF0aWMgaW50IHBsYXRm b3JtX3BhcnNlX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRh dGEpDQogew0KQEAgLTIzMSwxMCArMjMyLDIyIEBAIHN0YXRpYyBpbnQgbXQ4MTk1X2RzcF9wcm9i ZShzdHJ1Y3Qgc25kX3NvZl9kZXYgKnNkZXYpDQogCWlmIChyZXQpDQogCQlyZXR1cm4gcmV0Ow0K IA0KKwlyZXQgPSBtdDgxOTVfYWRzcF9pbml0X2Nsb2NrKHNkZXYpOw0KKwlpZiAocmV0KSB7DQor CQlkZXZfZXJyKHNkZXYtPmRldiwgIm10ODE5NV9hZHNwX2luaXRfY2xvY2sgZmFpbGVkXG4iKTsN CisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXJldCA9IGFkc3BfY2xvY2tfb24oc2Rldik7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoc2Rldi0+ZGV2LCAiYWRzcF9jbG9ja19vbiBmYWls IVxuIik7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KIAlyZXQgPSBhZHNwX3NyYW1fcG93 ZXJfb24oc2Rldi0+ZGV2LCB0cnVlKTsNCiAJaWYgKHJldCkgew0KIAkJZGV2X2VycihzZGV2LT5k ZXYsICJhZHNwX3NyYW1fcG93ZXJfb24gZmFpbCFcbiIpOw0KLQkJcmV0dXJuIHJldDsNCisJCWdv dG8gZXhpdF9jbGtfZGlzYWJsZTsNCiAJfQ0KIA0KIAlyZXQgPSBhZHNwX21lbW9yeV9yZW1hcF9p bml0KCZwZGV2LT5kZXYsIHByaXYtPmFkc3ApOw0KQEAgLTI4Miw2ICsyOTUsOCBAQCBzdGF0aWMg aW50IG10ODE5NV9kc3BfcHJvYmUoc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KIA0KIGVycl9h ZHNwX3NyYW1fcG93ZXJfb2ZmOg0KIAlhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwgZmFs c2UpOw0KK2V4aXRfY2xrX2Rpc2FibGU6DQorCWFkc3BfY2xvY2tfb2ZmKHNkZXYpOw0KIA0KIAly ZXR1cm4gcmV0Ow0KIH0NCkBAIC0yOTAsNyArMzA1LDEwIEBAIHN0YXRpYyBpbnQgbXQ4MTk1X2Rz cF9yZW1vdmUoc3RydWN0IHNuZF9zb2ZfZGV2ICpzZGV2KQ0KIHsNCiAJc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihzZGV2LT5kZXYsIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UsIGRldik7DQogDQotCXJldHVybiBhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwg ZmFsc2UpOw0KKwlhZHNwX3NyYW1fcG93ZXJfb24oJnBkZXYtPmRldiwgZmFsc2UpOw0KKwlhZHNw X2Nsb2NrX29mZihzZGV2KTsNCisNCisJcmV0dXJuIDA7DQogfQ0KIA0KIC8qIG9uIG10ODE5NSB0 aGVyZSBpcyAxIHRvIDEgbWF0Y2ggYmV0d2VlbiB0eXBlIGFuZCBCQVIgaWR4ICovDQotLSANCjIu MTguMA0K 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 833B2C433F5 for ; Mon, 25 Oct 2021 11:01:44 +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 42A3760EDF for ; Mon, 25 Oct 2021 11:01:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 42A3760EDF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=StqhVQnaIftyd9MBPbJ7z6fDVeXzA7FfYziiHGpbcvg=; b=3YknZ/4zuULPEP nbx9Plab+UnKSIazlWeemSD/HEs1twI9ct5JPpWw0+hz2eW6kw5aSl/d7uNVUk8kdNlxDdiM8NaCl AZEKH/fxei28LS1kHn35OGR9wpkGYVSvFLVo4X7MYkJLzB/2FD+938KBVe8ZFJk96OXLLv3dt1vk1 7ialj6BDcyoLpF7EdZT8LNUDmuUx8CZ0mf8xCyMcbCYSjP1GiEoDjR6bBr+23ZM1tX+t4igBtKGAY 8V+KwDnMhNwksrqO0d125WYv7fRZzJRq43OfjcQs8jSX9vXd3+Z0eZXOOeVt1Fk7C8kWY9lJQRLVP DNfEOjPeAvJ8ksRv0zBA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mexjO-00GBmx-V0; Mon, 25 Oct 2021 11:01:31 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mexf6-00G9tC-Qi; Mon, 25 Oct 2021 10:57:06 +0000 X-UUID: 8ddecc26eed04c748dcd00ad8c488cb0-20211025 X-UUID: 8ddecc26eed04c748dcd00ad8c488cb0-20211025 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 163682807; Mon, 25 Oct 2021 03:56:58 -0700 Received: from mtkexhb01.mediatek.inc (172.21.101.102) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 03:56:56 -0700 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb01.mediatek.inc (172.21.101.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 25 Oct 2021 18:56:48 +0800 From: YC Hung To: , , , CC: , , , , , , , , , Subject: [PATCH v3 1/2] ASoC: SOF: mediatek: Add mt8195 dsp clock support Date: Mon, 25 Oct 2021 18:56:34 +0800 Message-ID: <20211025105635.30625-2-yc.hung@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20211025105635.30625-1-yc.hung@mediatek.com> References: <20211025105635.30625-1-yc.hung@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-20211025_035704_928224_2E4246DB X-CRM114-Status: GOOD ( 23.77 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 Add adsp clock on/off support on mt8195 platform. Signed-off-by: YC Hung --- sound/soc/sof/mediatek/adsp_helper.h | 2 +- sound/soc/sof/mediatek/mt8195/Makefile | 2 +- sound/soc/sof/mediatek/mt8195/mt8195-clk.c | 163 +++++++++++++++++++++ sound/soc/sof/mediatek/mt8195/mt8195-clk.h | 28 ++++ sound/soc/sof/mediatek/mt8195/mt8195.c | 22 ++- 5 files changed, 213 insertions(+), 4 deletions(-) create mode 100644 sound/soc/sof/mediatek/mt8195/mt8195-clk.c create mode 100644 sound/soc/sof/mediatek/mt8195/mt8195-clk.h diff --git a/sound/soc/sof/mediatek/adsp_helper.h b/sound/soc/sof/mediatek/adsp_helper.h index 346953dd22db..6734e2c0c6b1 100644 --- a/sound/soc/sof/mediatek/adsp_helper.h +++ b/sound/soc/sof/mediatek/adsp_helper.h @@ -39,7 +39,7 @@ struct adsp_priv { struct mbox_controller *adsp_mbox; struct mtk_adsp_chip_info *adsp; - + struct clk **clk; u32 (*ap2adsp_addr)(u32 addr, void *data); u32 (*adsp2ap_addr)(u32 addr, void *data); diff --git a/sound/soc/sof/mediatek/mt8195/Makefile b/sound/soc/sof/mediatek/mt8195/Makefile index 60fca24c068a..650f4bce99b2 100644 --- a/sound/soc/sof/mediatek/mt8195/Makefile +++ b/sound/soc/sof/mediatek/mt8195/Makefile @@ -1,4 +1,4 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) -snd-sof-mt8195-objs := mt8195.o mt8195-loader.o +snd-sof-mt8195-objs := mt8195.o mt8195-clk.o mt8195-loader.o obj-$(CONFIG_SND_SOC_SOF_MT8195) += snd-sof-mt8195.o diff --git a/sound/soc/sof/mediatek/mt8195/mt8195-clk.c b/sound/soc/sof/mediatek/mt8195/mt8195-clk.c new file mode 100644 index 000000000000..b4f390d9fa13 --- /dev/null +++ b/sound/soc/sof/mediatek/mt8195/mt8195-clk.c @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) +// +// Copyright(c) 2021 Mediatek Corporation. All rights reserved. +// +// Author: YC Hung +// +// Hardware interface for mt8195 DSP clock + +#include +#include +#include +#include "mt8195.h" +#include "mt8195-clk.h" +#include "../adsp_helper.h" +#include "../../sof-audio.h" + +static const char *adsp_clks[ADSP_CLK_MAX] = { + [CLK_TOP_ADSP] = "adsp_sel", + [CLK_TOP_CLK26M] = "clk26m_ck", + [CLK_TOP_AUDIO_LOCAL_BUS] = "audio_local_bus", + [CLK_TOP_MAINPLL_D7_D2] = "mainpll_d7_d2", + [CLK_SCP_ADSP_AUDIODSP] = "scp_adsp_audiodsp", + [CLK_TOP_AUDIO_H] = "audio_h", +}; + +int mt8195_adsp_init_clock(struct snd_sof_dev *sdev) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int i; + + priv->clk = devm_kcalloc(dev, ADSP_CLK_MAX, + sizeof(*priv->clk), GFP_KERNEL); + + if (!priv->clk) + return -ENOMEM; + + for (i = 0; i < ADSP_CLK_MAX; i++) { + priv->clk[i] = devm_clk_get(dev, adsp_clks[i]); + if (IS_ERR(priv->clk[i])) { + dev_err(dev, "%s(), devm_clk_get %s fail, ret %ld\n", + __func__, adsp_clks[i], + PTR_ERR(priv->clk[i])); + return PTR_ERR(priv->clk[i]); + } + } + + return 0; +} + +static int adsp_enable_clock(struct snd_sof_dev *sdev) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int ret; + + ret = clk_prepare_enable(priv->clk[CLK_TOP_MAINPLL_D7_D2]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(mainpll_d7_d2) fail %d\n", + __func__, ret); + return ret; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_ADSP]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(adsp_sel) fail %d\n", + __func__, ret); + goto disable_mainpll_d7_d2_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(audio_local_bus) fail %d\n", + __func__, ret); + goto disable_dsp_sel_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_SCP_ADSP_AUDIODSP]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(scp_adsp_audiodsp) fail %d\n", + __func__, ret); + goto disable_audio_local_bus_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_AUDIO_H]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(audio_h) fail %d\n", + __func__, ret); + goto disable_scp_adsp_audiodsp_clk; + } + + return 0; + +disable_scp_adsp_audiodsp_clk: + clk_disable_unprepare(priv->clk[CLK_SCP_ADSP_AUDIODSP]); +disable_audio_local_bus_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); +disable_dsp_sel_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_ADSP]); +disable_mainpll_d7_d2_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_MAINPLL_D7_D2]); + + return ret; +} + +static void adsp_disable_clock(struct snd_sof_dev *sdev) +{ + struct adsp_priv *priv = sdev->pdata->hw_pdata; + + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_H]); + clk_disable_unprepare(priv->clk[CLK_SCP_ADSP_AUDIODSP]); + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); + clk_disable_unprepare(priv->clk[CLK_TOP_ADSP]); + clk_disable_unprepare(priv->clk[CLK_TOP_MAINPLL_D7_D2]); +} + +static int adsp_default_clk_init(struct snd_sof_dev *sdev, bool enable) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int ret = 0; + + dev_dbg(dev, "%s: %s\n", __func__, enable ? "on" : "off"); + + if (enable) { + ret = clk_set_parent(priv->clk[CLK_TOP_ADSP], + priv->clk[CLK_TOP_CLK26M]); + if (ret) { + dev_err(dev, "failed to set dsp_sel to clk26m: %d\n", ret); + return ret; + } + + ret = clk_set_parent(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS], + priv->clk[CLK_TOP_MAINPLL_D7_D2]); + if (ret) { + dev_err(dev, "set audio_local_bus failed %d\n", ret); + return ret; + } + + ret = adsp_enable_clock(sdev); + if (ret) { + dev_err(dev, "failed to adsp_enable_clock: %d\n", ret); + return ret; + } + } else { + adsp_disable_clock(sdev); + } + + return 0; +} + +int adsp_clock_on(struct snd_sof_dev *sdev) +{ + /* Open ADSP clock */ + return adsp_default_clk_init(sdev, 1); +} + +int adsp_clock_off(struct snd_sof_dev *sdev) +{ + /* Close ADSP clock */ + return adsp_default_clk_init(sdev, 0); +} + diff --git a/sound/soc/sof/mediatek/mt8195/mt8195-clk.h b/sound/soc/sof/mediatek/mt8195/mt8195-clk.h new file mode 100644 index 000000000000..9cc0573d5cd2 --- /dev/null +++ b/sound/soc/sof/mediatek/mt8195/mt8195-clk.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright (c) 2021 MediaTek Corporation. All rights reserved. + * + * Header file for the mt8195 DSP clock definition + */ + +#ifndef __MT8195_CLK_H +#define __MT8195_CLK_H + +struct snd_sof_dev; + +/*DSP clock*/ +enum adsp_clk_id { + CLK_TOP_ADSP, + CLK_TOP_CLK26M, + CLK_TOP_AUDIO_LOCAL_BUS, + CLK_TOP_MAINPLL_D7_D2, + CLK_SCP_ADSP_AUDIODSP, + CLK_TOP_AUDIO_H, + ADSP_CLK_MAX +}; + +int mt8195_adsp_init_clock(struct snd_sof_dev *sdev); +int adsp_clock_on(struct snd_sof_dev *sdev); +int adsp_clock_off(struct snd_sof_dev *sdev); +#endif diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c index 99075598a35a..5bfae9379ac8 100644 --- a/sound/soc/sof/mediatek/mt8195/mt8195.c +++ b/sound/soc/sof/mediatek/mt8195/mt8195.c @@ -25,6 +25,7 @@ #include "../adsp_helper.h" #include "../mediatek-ops.h" #include "mt8195.h" +#include "mt8195-clk.h" static int platform_parse_resource(struct platform_device *pdev, void *data) { @@ -231,10 +232,22 @@ static int mt8195_dsp_probe(struct snd_sof_dev *sdev) if (ret) return ret; + ret = mt8195_adsp_init_clock(sdev); + if (ret) { + dev_err(sdev->dev, "mt8195_adsp_init_clock failed\n"); + return -EINVAL; + } + + ret = adsp_clock_on(sdev); + if (ret) { + dev_err(sdev->dev, "adsp_clock_on fail!\n"); + return -EINVAL; + } + ret = adsp_sram_power_on(sdev->dev, true); if (ret) { dev_err(sdev->dev, "adsp_sram_power_on fail!\n"); - return ret; + goto exit_clk_disable; } ret = adsp_memory_remap_init(&pdev->dev, priv->adsp); @@ -282,6 +295,8 @@ static int mt8195_dsp_probe(struct snd_sof_dev *sdev) err_adsp_sram_power_off: adsp_sram_power_on(&pdev->dev, false); +exit_clk_disable: + adsp_clock_off(sdev); return ret; } @@ -290,7 +305,10 @@ static int mt8195_dsp_remove(struct snd_sof_dev *sdev) { struct platform_device *pdev = container_of(sdev->dev, struct platform_device, dev); - return adsp_sram_power_on(&pdev->dev, false); + adsp_sram_power_on(&pdev->dev, false); + adsp_clock_off(sdev); + + return 0; } /* on mt8195 there is 1 to 1 match between type and BAR idx */ -- 2.18.0 _______________________________________________ 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E350BC433EF for ; Mon, 25 Oct 2021 11:02:27 +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 B3C83604AC for ; Mon, 25 Oct 2021 11:02:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org B3C83604AC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4aqYjofZwUh2qJxN2n1O3AJWZcM+pNB7YHV1frjIK34=; b=LG0l+NXSRTqc4t RWaOLtxLsBpqti10gAoNw8OyHdQ1VNDpHQoa7m/JOHjKB3lhGwzTyTyNDja3lSQ2kvve1egVj/GD6 jnDGJGb6x4qY0oCTAUE4AqOwIq6iU/4GX+lrOpM+y6NedXbIfKYh7aGEFdbNHCTuVqEQLmaw4lb6/ 3lx9UNCycosNtUaGJ4qlIdNH6o3/X+IE/X8yQN06ZLPTQBHPKJ7F6qXhgKWk3Vzd+cqcmzGoyu6JC aF3aMK7TVQdbNWs+G1OfRu38mkhxVNAzosjoeWNPFQ2CuoY7eaZfnS83RqM1XJIpoEWYy5ktfd3Zg 1wtl+leS63yWMNu12z+Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mexie-00GBT8-Oe; Mon, 25 Oct 2021 11:00:45 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mexf6-00G9tC-Qi; Mon, 25 Oct 2021 10:57:06 +0000 X-UUID: 8ddecc26eed04c748dcd00ad8c488cb0-20211025 X-UUID: 8ddecc26eed04c748dcd00ad8c488cb0-20211025 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 163682807; Mon, 25 Oct 2021 03:56:58 -0700 Received: from mtkexhb01.mediatek.inc (172.21.101.102) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 03:56:56 -0700 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkexhb01.mediatek.inc (172.21.101.102) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 25 Oct 2021 18:56:49 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 25 Oct 2021 18:56:48 +0800 From: YC Hung To: , , , CC: , , , , , , , , , Subject: [PATCH v3 1/2] ASoC: SOF: mediatek: Add mt8195 dsp clock support Date: Mon, 25 Oct 2021 18:56:34 +0800 Message-ID: <20211025105635.30625-2-yc.hung@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20211025105635.30625-1-yc.hung@mediatek.com> References: <20211025105635.30625-1-yc.hung@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-20211025_035704_928224_2E4246DB X-CRM114-Status: GOOD ( 23.77 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add adsp clock on/off support on mt8195 platform. Signed-off-by: YC Hung --- sound/soc/sof/mediatek/adsp_helper.h | 2 +- sound/soc/sof/mediatek/mt8195/Makefile | 2 +- sound/soc/sof/mediatek/mt8195/mt8195-clk.c | 163 +++++++++++++++++++++ sound/soc/sof/mediatek/mt8195/mt8195-clk.h | 28 ++++ sound/soc/sof/mediatek/mt8195/mt8195.c | 22 ++- 5 files changed, 213 insertions(+), 4 deletions(-) create mode 100644 sound/soc/sof/mediatek/mt8195/mt8195-clk.c create mode 100644 sound/soc/sof/mediatek/mt8195/mt8195-clk.h diff --git a/sound/soc/sof/mediatek/adsp_helper.h b/sound/soc/sof/mediatek/adsp_helper.h index 346953dd22db..6734e2c0c6b1 100644 --- a/sound/soc/sof/mediatek/adsp_helper.h +++ b/sound/soc/sof/mediatek/adsp_helper.h @@ -39,7 +39,7 @@ struct adsp_priv { struct mbox_controller *adsp_mbox; struct mtk_adsp_chip_info *adsp; - + struct clk **clk; u32 (*ap2adsp_addr)(u32 addr, void *data); u32 (*adsp2ap_addr)(u32 addr, void *data); diff --git a/sound/soc/sof/mediatek/mt8195/Makefile b/sound/soc/sof/mediatek/mt8195/Makefile index 60fca24c068a..650f4bce99b2 100644 --- a/sound/soc/sof/mediatek/mt8195/Makefile +++ b/sound/soc/sof/mediatek/mt8195/Makefile @@ -1,4 +1,4 @@ # SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) -snd-sof-mt8195-objs := mt8195.o mt8195-loader.o +snd-sof-mt8195-objs := mt8195.o mt8195-clk.o mt8195-loader.o obj-$(CONFIG_SND_SOC_SOF_MT8195) += snd-sof-mt8195.o diff --git a/sound/soc/sof/mediatek/mt8195/mt8195-clk.c b/sound/soc/sof/mediatek/mt8195/mt8195-clk.c new file mode 100644 index 000000000000..b4f390d9fa13 --- /dev/null +++ b/sound/soc/sof/mediatek/mt8195/mt8195-clk.c @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) +// +// Copyright(c) 2021 Mediatek Corporation. All rights reserved. +// +// Author: YC Hung +// +// Hardware interface for mt8195 DSP clock + +#include +#include +#include +#include "mt8195.h" +#include "mt8195-clk.h" +#include "../adsp_helper.h" +#include "../../sof-audio.h" + +static const char *adsp_clks[ADSP_CLK_MAX] = { + [CLK_TOP_ADSP] = "adsp_sel", + [CLK_TOP_CLK26M] = "clk26m_ck", + [CLK_TOP_AUDIO_LOCAL_BUS] = "audio_local_bus", + [CLK_TOP_MAINPLL_D7_D2] = "mainpll_d7_d2", + [CLK_SCP_ADSP_AUDIODSP] = "scp_adsp_audiodsp", + [CLK_TOP_AUDIO_H] = "audio_h", +}; + +int mt8195_adsp_init_clock(struct snd_sof_dev *sdev) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int i; + + priv->clk = devm_kcalloc(dev, ADSP_CLK_MAX, + sizeof(*priv->clk), GFP_KERNEL); + + if (!priv->clk) + return -ENOMEM; + + for (i = 0; i < ADSP_CLK_MAX; i++) { + priv->clk[i] = devm_clk_get(dev, adsp_clks[i]); + if (IS_ERR(priv->clk[i])) { + dev_err(dev, "%s(), devm_clk_get %s fail, ret %ld\n", + __func__, adsp_clks[i], + PTR_ERR(priv->clk[i])); + return PTR_ERR(priv->clk[i]); + } + } + + return 0; +} + +static int adsp_enable_clock(struct snd_sof_dev *sdev) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int ret; + + ret = clk_prepare_enable(priv->clk[CLK_TOP_MAINPLL_D7_D2]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(mainpll_d7_d2) fail %d\n", + __func__, ret); + return ret; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_ADSP]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(adsp_sel) fail %d\n", + __func__, ret); + goto disable_mainpll_d7_d2_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(audio_local_bus) fail %d\n", + __func__, ret); + goto disable_dsp_sel_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_SCP_ADSP_AUDIODSP]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(scp_adsp_audiodsp) fail %d\n", + __func__, ret); + goto disable_audio_local_bus_clk; + } + + ret = clk_prepare_enable(priv->clk[CLK_TOP_AUDIO_H]); + if (ret) { + dev_err(dev, "%s clk_prepare_enable(audio_h) fail %d\n", + __func__, ret); + goto disable_scp_adsp_audiodsp_clk; + } + + return 0; + +disable_scp_adsp_audiodsp_clk: + clk_disable_unprepare(priv->clk[CLK_SCP_ADSP_AUDIODSP]); +disable_audio_local_bus_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); +disable_dsp_sel_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_ADSP]); +disable_mainpll_d7_d2_clk: + clk_disable_unprepare(priv->clk[CLK_TOP_MAINPLL_D7_D2]); + + return ret; +} + +static void adsp_disable_clock(struct snd_sof_dev *sdev) +{ + struct adsp_priv *priv = sdev->pdata->hw_pdata; + + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_H]); + clk_disable_unprepare(priv->clk[CLK_SCP_ADSP_AUDIODSP]); + clk_disable_unprepare(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS]); + clk_disable_unprepare(priv->clk[CLK_TOP_ADSP]); + clk_disable_unprepare(priv->clk[CLK_TOP_MAINPLL_D7_D2]); +} + +static int adsp_default_clk_init(struct snd_sof_dev *sdev, bool enable) +{ + struct device *dev = sdev->dev; + struct adsp_priv *priv = sdev->pdata->hw_pdata; + int ret = 0; + + dev_dbg(dev, "%s: %s\n", __func__, enable ? "on" : "off"); + + if (enable) { + ret = clk_set_parent(priv->clk[CLK_TOP_ADSP], + priv->clk[CLK_TOP_CLK26M]); + if (ret) { + dev_err(dev, "failed to set dsp_sel to clk26m: %d\n", ret); + return ret; + } + + ret = clk_set_parent(priv->clk[CLK_TOP_AUDIO_LOCAL_BUS], + priv->clk[CLK_TOP_MAINPLL_D7_D2]); + if (ret) { + dev_err(dev, "set audio_local_bus failed %d\n", ret); + return ret; + } + + ret = adsp_enable_clock(sdev); + if (ret) { + dev_err(dev, "failed to adsp_enable_clock: %d\n", ret); + return ret; + } + } else { + adsp_disable_clock(sdev); + } + + return 0; +} + +int adsp_clock_on(struct snd_sof_dev *sdev) +{ + /* Open ADSP clock */ + return adsp_default_clk_init(sdev, 1); +} + +int adsp_clock_off(struct snd_sof_dev *sdev) +{ + /* Close ADSP clock */ + return adsp_default_clk_init(sdev, 0); +} + diff --git a/sound/soc/sof/mediatek/mt8195/mt8195-clk.h b/sound/soc/sof/mediatek/mt8195/mt8195-clk.h new file mode 100644 index 000000000000..9cc0573d5cd2 --- /dev/null +++ b/sound/soc/sof/mediatek/mt8195/mt8195-clk.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright (c) 2021 MediaTek Corporation. All rights reserved. + * + * Header file for the mt8195 DSP clock definition + */ + +#ifndef __MT8195_CLK_H +#define __MT8195_CLK_H + +struct snd_sof_dev; + +/*DSP clock*/ +enum adsp_clk_id { + CLK_TOP_ADSP, + CLK_TOP_CLK26M, + CLK_TOP_AUDIO_LOCAL_BUS, + CLK_TOP_MAINPLL_D7_D2, + CLK_SCP_ADSP_AUDIODSP, + CLK_TOP_AUDIO_H, + ADSP_CLK_MAX +}; + +int mt8195_adsp_init_clock(struct snd_sof_dev *sdev); +int adsp_clock_on(struct snd_sof_dev *sdev); +int adsp_clock_off(struct snd_sof_dev *sdev); +#endif diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c index 99075598a35a..5bfae9379ac8 100644 --- a/sound/soc/sof/mediatek/mt8195/mt8195.c +++ b/sound/soc/sof/mediatek/mt8195/mt8195.c @@ -25,6 +25,7 @@ #include "../adsp_helper.h" #include "../mediatek-ops.h" #include "mt8195.h" +#include "mt8195-clk.h" static int platform_parse_resource(struct platform_device *pdev, void *data) { @@ -231,10 +232,22 @@ static int mt8195_dsp_probe(struct snd_sof_dev *sdev) if (ret) return ret; + ret = mt8195_adsp_init_clock(sdev); + if (ret) { + dev_err(sdev->dev, "mt8195_adsp_init_clock failed\n"); + return -EINVAL; + } + + ret = adsp_clock_on(sdev); + if (ret) { + dev_err(sdev->dev, "adsp_clock_on fail!\n"); + return -EINVAL; + } + ret = adsp_sram_power_on(sdev->dev, true); if (ret) { dev_err(sdev->dev, "adsp_sram_power_on fail!\n"); - return ret; + goto exit_clk_disable; } ret = adsp_memory_remap_init(&pdev->dev, priv->adsp); @@ -282,6 +295,8 @@ static int mt8195_dsp_probe(struct snd_sof_dev *sdev) err_adsp_sram_power_off: adsp_sram_power_on(&pdev->dev, false); +exit_clk_disable: + adsp_clock_off(sdev); return ret; } @@ -290,7 +305,10 @@ static int mt8195_dsp_remove(struct snd_sof_dev *sdev) { struct platform_device *pdev = container_of(sdev->dev, struct platform_device, dev); - return adsp_sram_power_on(&pdev->dev, false); + adsp_sram_power_on(&pdev->dev, false); + adsp_clock_off(sdev); + + return 0; } /* on mt8195 there is 1 to 1 match between type and BAR idx */ -- 2.18.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel