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=-13.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 4DD0BC4361B for ; Mon, 7 Dec 2020 12:32:07 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 D75D5233EA for ; Mon, 7 Dec 2020 12:32:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D75D5233EA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=CiPpQpEBdAgqqjeMKLTG/AgnE2AqEb+Dsphy9iHuDL4=; b=GPTGdstICh9ncJaXTI0iLeCvz gXEVxqZXv7kIyEbYPjvxjCPtfNQt1R5zEFwwyk1tHAM6XL2zDxNkOw0egcNpZM+X36LWxcM7Yumrj cdkPk/GRkOL5siHvHp4NmJ2jsHzLBRo9WI8JuQJPSlCN2FYC+s4BwaTtZqnUORczcAthxE5J7+50s OtNtEwHb3lC/cJ1fL5Lh+LbAmWe0TwX3R/xR0IyHUSsdmtIJ//30o1ER+AZqtoxTkxq8SsK4O3apv UGiS+xt9rJdnkae6cUtBCyjC5bRmmqaO/rBFZR9UNhMCOE4j0KF1MvY5Oo3NNNAFu07qR98FvQo3S cjZ0KlBEg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmFeu-0001dg-G8; Mon, 07 Dec 2020 12:30:28 +0000 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmFeq-0001c1-HH for linux-arm-kernel@lists.infradead.org; Mon, 07 Dec 2020 12:30:25 +0000 Received: by mail-lj1-x242.google.com with SMTP id o24so14748998ljj.6 for ; Mon, 07 Dec 2020 04:30:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=l6q6cwZyHaIAJmhwBlFnsHM9f3N2rodwyz5czidYR/M=; b=beA7jUmr394HhKgz+trffpZSkL1+utbgokP6SvLmtVKyJ7A2slL+yKIN30aUDeYkmm U59xQupZ6EvyxpLauu+orPk9Oq7vtrn3ZiZQkWh4LHYo+1O7Ds2ilTICyvFOHBOvIOrk ++zx33b85/gpyrP2dJt/RjgKEsyt+OhryOdFeLAQUm43bGG/T+2dUs/NI0czGTQIRWNA dBy9rzPuEl2adDDxMb+5IRWCLCkn2JQVD/SDCtadjG53rcQe1R+NsB6tXG6cHLMV2dsn FoclHiRVrYp9+pLzwLeEaCTT29vn0QGx9iayxVwwxhPe4K0oyQBNdTarRrmZXpnJT88I 1OwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=l6q6cwZyHaIAJmhwBlFnsHM9f3N2rodwyz5czidYR/M=; b=K5zuAGRtyCmZZsJKyJe4l0U9vmiVTpmihd+5PFu230ZIYLZoAHytEilBHGWXemXpX8 OEuqfaLlX4I3WZEJHIj6nxKqjp7nINQLKJn5/TH5QaFSI6f9AuBwHQMGFiWprBR7eEHg BCNwVeqcmBe1dqZBPIDj4wuP5j3DVwpG4Ats6kKv8Z3VgOP0QBFSw9N3eFYdl2df2N4a W42eamcGCRWEfmp7WtOemZrDH6dY5JvUvO2BAslphCP152V4GRlQZsj7CL7Myapsbt3b 729QQoF1bIznaYvciiUYUrrKhn6Gy7blLbO0rSY3xGhQSXnF2O126xzAU0ISc/MIwQjK qnxw== X-Gm-Message-State: AOAM532C3EztqDaViKtnKu/k6fPdDTw5h49px2xNrCEOHn/U7h+HzUIa Sij0X5kfdQJXI535BV2xcoI9+w== X-Google-Smtp-Source: ABdhPJzdhu7IYZ7yv9t8FSyUIxQKURljFqOdBV4U0QPZ9lDRESF50Ohhtu+KT3J9RP7pvYWxnUmd9g== X-Received: by 2002:a2e:2284:: with SMTP id i126mr3668225lji.93.1607344221055; Mon, 07 Dec 2020 04:30:21 -0800 (PST) Received: from jade (h-249-223.A175.priv.bahnhof.se. [98.128.249.223]) by smtp.gmail.com with ESMTPSA id n1sm991662lfg.162.2020.12.07.04.30.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Dec 2020 04:30:20 -0800 (PST) Date: Mon, 7 Dec 2020 13:30:18 +0100 From: Jens Wiklander To: Sudeep Holla Subject: Re: [PATCH v3 6/7] firmware: arm_ffa: Setup in-kernel users of FFA partitions Message-ID: <20201207123018.GA1748888@jade> References: <20201204121137.2966778-1-sudeep.holla@arm.com> <20201204121137.2966778-7-sudeep.holla@arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20201204121137.2966778-7-sudeep.holla@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201207_073024_866434_B76A62EB X-CRM114-Status: GOOD ( 28.98 ) 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: Trilok Soni , devicetree@vger.kernel.org, David Hartley , Andrew Walbran , Achin Gupta , arve@android.com, Arunachalam Ganapathy , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU3VkZWVwLAoKU29tZSBjb21tZW50cyBiZWxvdy4KCk9uIEZyaSwgRGVjIDA0LCAyMDIwIGF0 IDEyOjExOjM2UE0gKzAwMDAsIFN1ZGVlcCBIb2xsYSB3cm90ZToKPiBQYXJzZSB0aGUgRkZBIG5v ZGVzIGZyb20gdGhlIGRldmljZS10cmVlIGFuZCByZWdpc3RlciBhbGwgdGhlIHBhcnRpdGlvbnMK PiB3aG9zZSBzZXJ2aWNlcyB3aWxsIGJlIHVzZWQgaW4gdGhlIGtlcm5lbC4KPiAKPiBJbiBvcmRl ciB0byBhbHNvIGVuYWJsZSBpbi1rZXJuZWwgdXNlcnMgb2YgRkZBIGludGVyZmFjZSwgbGV0IHVz IGFkZAo+IHNpbXBsZSBzZXQgb2Ygb3BlcmF0aW9ucyBmb3Igc3VjaCBkZXZpY2VzLgo+IAo+IFRo ZSBpbi1rZXJuZWwgdXNlcnMgYXJlIHJlZ2lzdGVyZWQgd2l0aG91dCB0aGUgY2hhcmFjdGVyIGRl dmljZSBpbnRlcmZhY2UuCj4gCj4gU2lnbmVkLW9mZi1ieTogU3VkZWVwIEhvbGxhIDxzdWRlZXAu aG9sbGFAYXJtLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2NvbW1vbi5o IHwgICAyICsKPiAgZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2RyaXZlci5jIHwgMTg2ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2xpbnV4L2FybV9mZmEuaCAgICAg ICAgICAgfCAgMzYgKysrKystCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjIzIGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9hcm1fZmZh L2NvbW1vbi5oIGIvZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2NvbW1vbi5oCj4gaW5kZXggZDAx OTM0OGJmNjdkLi5lYjEzNzFjMmIyYjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9maXJtd2FyZS9h cm1fZmZhL2NvbW1vbi5oCj4gKysrIGIvZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL2NvbW1vbi5o Cj4gQEAgLTYsNiArNiw3IEBACj4gICNpZm5kZWYgX0ZGQV9DT01NT05fSAo+ICAjZGVmaW5lIF9G RkFfQ09NTU9OX0gKPiAgCj4gKyNpbmNsdWRlIDxsaW51eC9hcm1fZmZhLmg+Cj4gICNpbmNsdWRl IDxsaW51eC9hcm0tc21jY2MuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICAKPiBAQCAt MTcsNiArMTgsNyBAQCB0eXBlZGVmIGZmYV9yZXNfdAo+ICAKPiAgaW50IF9faW5pdCBhcm1fZmZh X2J1c19pbml0KHZvaWQpOwo+ICB2b2lkIF9fZXhpdCBhcm1fZmZhX2J1c19leGl0KHZvaWQpOwo+ ICtib29sIGZmYV9kZXZpY2VfaXNfdmFsaWQoc3RydWN0IGZmYV9kZXZpY2UgKmZmYV9kZXYpOwo+ ICAKPiAgI2lmZGVmIENPTkZJR19BUk1fRkZBX1NNQ0NDCj4gIGludCBfX2luaXQgZmZhX3RyYW5z cG9ydF9pbml0KGZmYV9mbiAqKmludm9rZV9mZmFfZm4pOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJp dmVyLmMKPiBpbmRleCAyNTdiMzMxZDc4MWMuLjNlNGJhODQxZGJmOCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvZHJpdmVyLmMKPiArKysgYi9kcml2ZXJzL2Zpcm13YXJl L2FybV9mZmEvZHJpdmVyLmMKPiBAQCAtMjQsOSArMjQsMTMgQEAKPiAgCj4gICNpbmNsdWRlIDxs aW51eC9hcm1fZmZhLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUg PGxpbnV4L29mLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC91dWlkLmg+Cj4gIAo+ICAjaW5jbHVkZSAiY29tbW9uLmgiCj4gIAo+IEBAIC0xNzksNiArMTgz LDIwIEBAIHN0YXRpYyBpbnQgZmZhX3ZlcnNpb25fY2hlY2sodTMyICp2ZXJzaW9uKQo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgZmZhX3J4X3JlbGVhc2Uodm9pZCkKPiArewo+ ICsJZmZhX3Jlc190IHJldDsKPiArCj4gKwlyZXQgPSBpbnZva2VfZmZhX2ZuKEZGQV9SWF9SRUxF QVNFLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKPiArCj4gKwlpZiAocmV0LmEwID09IEZGQV9FUlJP UikKPiArCQlyZXR1cm4gZmZhX3RvX2xpbnV4X2Vycm5vKChpbnQpcmV0LmEyKTsKPiArCj4gKwkv KiBjaGVjayBmb3IgcmV0LmEwID09IEZGQV9SWF9SRUxFQVNFID8gKi8KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiAgc3RhdGljIGludCBmZmFfcnh0eF9tYXAocGh5c19hZGRyX3QgdHhfYnVm LCBwaHlzX2FkZHJfdCByeF9idWYsIHUzMiBwZ19jbnQpCj4gIHsKPiAgCWZmYV9yZXNfdCByZXQ7 Cj4gQEAgLTIwMyw2ICsyMjEsNTAgQEAgc3RhdGljIGludCBmZmFfcnh0eF91bm1hcCh1MTYgdm1f aWQpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBfX2ZmYV9wYXJ0aXRpb25f aW5mb19nZXQodTMyIHV1aWQwLCB1MzIgdXVpZDEsIHUzMiB1dWlkMiwgdTMyIHV1aWQzLAo+ICsJ CQkJICAgIHN0cnVjdCBmZmFfcGFydGl0aW9uX2luZm8gKipidWZmZXIpCj4gK3sKPiArCWludCBj b3VudDsKPiArCWZmYV9yZXNfdCBwYXJ0aXRpb25faW5mbzsKPiArCj4gKwltdXRleF9sb2NrKCZk cnZfaW5mby0+cnhfbG9jayk7Cj4gKwlwYXJ0aXRpb25faW5mbyA9IGludm9rZV9mZmFfZm4oRkZB X1BBUlRJVElPTl9JTkZPX0dFVCwgdXVpZDAsIHV1aWQxLAo+ICsJCQkJICAgICAgIHV1aWQyLCB1 dWlkMywgMCwgMCwgMCk7Cj4gKwo+ICsJaWYgKHBhcnRpdGlvbl9pbmZvLmEwID09IEZGQV9FUlJP UikKPiArCQlyZXR1cm4gZmZhX3RvX2xpbnV4X2Vycm5vKChpbnQpcGFydGl0aW9uX2luZm8uYTIp Owo+ICsKPiArCWNvdW50ID0gcGFydGl0aW9uX2luZm8uYTI7Cj4gKwo+ICsJaWYgKGJ1ZmZlcikK PiArCQltZW1jcHkoKmJ1ZmZlciwgZHJ2X2luZm8tPnJ4X2J1ZmZlciwgc2l6ZW9mKCpidWZmZXIp ICogY291bnQpOwo+ICsKPiArCWZmYV9yeF9yZWxlYXNlKCk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZkcnZfaW5mby0+cnhfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGZmYV9wYXJ0aXRpb25fcHJvYmUoY29uc3QgY2hhciAqdXVpZF9zdHIsCj4gKwkJ CSAgICAgICBzdHJ1Y3QgZmZhX3BhcnRpdGlvbl9pbmZvICpidWZmZXIpCj4gK3sKPiArCWludCBj b3VudDsKPiArCXV1aWRfdCB1dWlkOwo+ICsJdTMyIHV1aWQwXzRbNF0gPSB7IDAgfTsKPiArCj4g KwlpZiAodXVpZF9wYXJzZSh1dWlkX3N0ciwgJnV1aWQpKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlk IHV1aWQgKCVzKVxuIiwgdXVpZF9zdHIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsK PiArCWV4cG9ydF91dWlkKCh1OCAqKXV1aWQwXzQsICZ1dWlkKTsKPiArCWNvdW50ID0gX19mZmFf cGFydGl0aW9uX2luZm9fZ2V0KHV1aWQwXzRbMF0sIHV1aWQwXzRbMV0sIHV1aWQwXzRbMl0sCj4g KwkJCQkJIHV1aWQwXzRbM10sICZidWZmZXIpOwo+ICsKPiArCXJldHVybiBjb3VudDsKPiArfQo+ ICsKPiAgI2RlZmluZSBWTV9JRF9NQVNLCUdFTk1BU0soMTUsIDApCj4gIHN0YXRpYyBpbnQgZmZh X2lkX2dldCh1MTYgKnZtX2lkKQo+ICB7Cj4gQEAgLTIxOCw5ICsyODAsMTI1IEBAIHN0YXRpYyBp bnQgZmZhX2lkX2dldCh1MTYgKnZtX2lkKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gK3N0YXRp YyBpbnQgZmZhX21zZ19zZW5kX2RpcmVjdF9yZXEodTE2IHNyY19pZCwgdTE2IGRzdF9pZCwKPiAr CQkJCSAgIHN0cnVjdCBmZmFfc2VuZF9kaXJlY3RfZGF0YSAqZGF0YSkKPiArewo+ICsJdTMyIHNy Y19kc3RfaWRzID0gUEFDS19UQVJHRVRfSU5GTyhzcmNfaWQsIGRzdF9pZCk7Cj4gKwlmZmFfcmVz X3QgcmV0Owo+ICsKPiArCXJldCA9IGludm9rZV9mZmFfZm4oRkZBX0ZOX05BVElWRShNU0dfU0VO RF9ESVJFQ1RfUkVRKSwgc3JjX2RzdF9pZHMsIDAsCj4gKwkJCSAgICBkYXRhLT5kYXRhMCwgZGF0 YS0+ZGF0YTEsIGRhdGEtPmRhdGEyLAo+ICsJCQkgICAgZGF0YS0+ZGF0YTMsIGRhdGEtPmRhdGE0 KTsKPiArCj4gKwl3aGlsZSAocmV0LmEwID09IEZGQV9JTlRFUlJVUFQpCj4gKwkJcmV0ID0gaW52 b2tlX2ZmYV9mbihGRkFfUlVOLCByZXQuYTEsIDAsIDAsIDAsIDAsIDAsIDApOwo+ICsJaWYgKHJl dC5hMCA9PSBGRkFfRVJST1IpCj4gKwkJcmV0dXJuIGZmYV90b19saW51eF9lcnJubygoaW50KXJl dC5hMik7Cj4gKwo+ICsJaWYgKHJldC5hMCA9PSBGRkFfRk5fTkFUSVZFKE1TR19TRU5EX0RJUkVD VF9SRVNQKSkgewo+ICsJCWRhdGEtPmRhdGEwID0gcmV0LmEzOwo+ICsJCWRhdGEtPmRhdGExID0g cmV0LmE0Owo+ICsJCWRhdGEtPmRhdGEyID0gcmV0LmE1Owo+ICsJCWRhdGEtPmRhdGEzID0gcmV0 LmE2Owo+ICsJCWRhdGEtPmRhdGE0ID0gcmV0LmE3Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGZmYV9hcGlfdmVyc2lvbl9nZXQodm9pZCkKPiArewo+ICsJ cmV0dXJuIGRydl9pbmZvLT52ZXJzaW9uOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTE2IGZmYV9wYXJ0 aXRpb25faWRfZ2V0KHN0cnVjdCBmZmFfZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBkZXYt PnZtX2lkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZmYV9wYXJ0aXRpb25faW5mb19nZXQoY29u c3QgY2hhciAqdXVpZF9zdHIsCj4gKwkJCQkgIHN0cnVjdCBmZmFfcGFydGl0aW9uX2luZm8gKmJ1 ZmZlcikKPiArewo+ICsJaWYgKGZmYV9wYXJ0aXRpb25fcHJvYmUodXVpZF9zdHIsIGJ1ZmZlcikg PT0gMSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gLUVOT0VOVDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBmZmFfc3luY19zZW5kX3JlY2VpdmUoc3RydWN0IGZmYV9kZXZpY2UgKmRldiwg dTE2IGVwLAo+ICsJCQkJIHN0cnVjdCBmZmFfc2VuZF9kaXJlY3RfZGF0YSAqZGF0YSkKPiArewo+ ICsJcmV0dXJuIGZmYV9tc2dfc2VuZF9kaXJlY3RfcmVxKGRldi0+dm1faWQsIGVwLCBkYXRhKTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmZmFfZGV2X29wcyBmZmFfb3BzID0gewo+ ICsJLmFwaV92ZXJzaW9uX2dldCA9IGZmYV9hcGlfdmVyc2lvbl9nZXQsCj4gKwkucGFydGl0aW9u X2lkX2dldCA9IGZmYV9wYXJ0aXRpb25faWRfZ2V0LAo+ICsJLnBhcnRpdGlvbl9pbmZvX2dldCA9 IGZmYV9wYXJ0aXRpb25faW5mb19nZXQsCj4gKwkuc3luY19zZW5kX3JlY2VpdmUgPSBmZmFfc3lu Y19zZW5kX3JlY2VpdmUsCj4gK307Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgZmZhX2Rldl9vcHMgKmZm YV9kZXZfb3BzX2dldChzdHJ1Y3QgZmZhX2RldmljZSAqZGV2KQo+ICt7Cj4gKwlpZiAoZmZhX2Rl dmljZV9pc192YWxpZChkZXYpKQo+ICsJCXJldHVybiAmZmZhX29wczsKPiArCj4gKwlyZXR1cm4g TlVMTDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChmZmFfZGV2X29wc19nZXQpOwo+ICsKPiAr aW50IGZmYV9zZXR1cF9wYXJ0aXRpb25zKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCj4gK3sKPiAr CWludCByZXQ7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwo+ICsJc3RydWN0IGZmYV9k ZXZpY2UgKmZmYV9kZXY7Cj4gKwlzdHJ1Y3QgZmZhX3BhcnRpdGlvbl9pbmZvIHBidWY7Cj4gKwlj b25zdCBjaGFyICpwX3V1aWQsICpwZnggPSAiSWdub3JpbmcgRkZBIHBhcnRpdGlvbiI7Cj4gKwl1 dWlkX3QgdXVpZCA9IFVVSURfSU5JVCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsK PiArCj4gKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewoKVGhlIHNwZWMgc2F5 czoK4oCTIElmIHRoZSBOaWwgVVVJRCBpcyBzcGVjaWZpZWQgYXQgdGhlIE5vbi1zZWN1cmUgdmly dHVhbCBGRi1BIGluc3RhbmNlLAogIHRoZSBIeXBlcnZpc29yIG11c3QgcHJvdmlkZSBpbmZvcm1h dGlvbiBmb3IgcGFydGl0aW9ucyByZXNpZGVudCBpbiBib3RoCiAgc2VjdXJpdHkgc3RhdGVzLgoK RG9lc24ndCB0aGF0IG1ha2UgdGhpcyByZWR1bmRhbnQ/CgoKPiArCQlpZiAoIW9mX2RldmljZV9p c19jb21wYXRpYmxlKGNoaWxkLCAiYXJtLGZmYS0xLjAtcGFydGl0aW9uIikpIHsKPiArCQkJb2Zf bm9kZV9wdXQoY2hpbGQpOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWlmIChvZl9w cm9wZXJ0eV9yZWFkX3N0cmluZyhjaGlsZCwgInV1aWQiLCAmcF91dWlkKSkgewo+ICsJCQlwcl9l cnIoIiVzOiBmYWlsZWQgdG8gcGFyc2UgXCJ1dWlkXCIgcHJvcGVydHlcbiIsIHBmeCk7Cj4gKwkJ CW9mX25vZGVfcHV0KGNoaWxkKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlvZl9u b2RlX3B1dChjaGlsZCk7Cj4gKwo+ICsJCWlmICh1dWlkX3BhcnNlKHBfdXVpZCwgJnV1aWQpKSB7 Cj4gKwkJCXByX2VycigiJXM6IGludmFsaWQgXCJ1dWlkXCIgcHJvcGVydHkgKCVzKVxuIiwKPiAr CQkJICAgICAgIHBmeCwgcF91dWlkKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQly ZXQgPSBmZmFfcGFydGl0aW9uX3Byb2JlKHBfdXVpZCwgJnBidWYpOwo+ICsJCWlmIChyZXQgIT0g MSkgewoKSWYgcmV0IGlzID4gMSB3ZSdyZSBpbiBkZWVwIHRyb3VibGUgYXMgd2UgaGF2ZSBhIGJ1 ZmZlciBvdmVycnVuIG9uIHRoZQpzdGFjay4KCkNoZWVycywKSmVucwoKPiArCQkJcHJfZXJyKCIl czogJXMgcGFydGl0aW9uIGluZm8gcHJvYmUgZmFpbGVkXG4iLAo+ICsJCQkgICAgICAgcGZ4LCBw X3V1aWQpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWZmYV9kZXYgPSBm ZmFfZGV2aWNlX3JlZ2lzdGVyKHBfdXVpZCwgcGJ1Zi5pZCk7Cj4gKwkJaWYgKCFmZmFfZGV2KSB7 Cj4gKwkJCXByX2VycigiJXM6IGZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwgcGZ4LCBwX3V1aWQp Owo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWZmYV9kZXZfc2V0X2RydmRhdGEoZmZh X2RldiwgZHJ2X2luZm8pOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICBzdGF0 aWMgaW50IF9faW5pdCBmZmFfaW5pdCh2b2lkKQo+ICB7Cj4gIAlpbnQgcmV0Owo+ICsJc3RydWN0 IGRldmljZV9ub2RlICpucDsKPiAgCj4gIAlyZXQgPSBhcm1fZmZhX2J1c19pbml0KCk7Cj4gIAlp ZiAocmV0KQo+IEBAIC0yNjcsNiArNDQ1LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IGZmYV9pbml0 KHZvaWQpCj4gIAltdXRleF9pbml0KCZkcnZfaW5mby0+cnhfbG9jayk7Cj4gIAltdXRleF9pbml0 KCZkcnZfaW5mby0+dHhfbG9jayk7Cj4gIAo+ICsJLyogU2V0IHVwIGFsbCB0aGUgcGFydGl0aW9u cyAqLwo+ICsJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYXJtLGZm YS0xLjAiKTsKPiArCWlmICghbnApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZmZhX3NldHVwX3Bh cnRpdGlvbnMobnApOwo+ICsJb2Zfbm9kZV9wdXQobnApOwo+ICsKPiAgCXJldHVybiAwOwo+ICBm cmVlX3BhZ2VzOgo+ICAJaWYgKGRydl9pbmZvLT50eF9idWZmZXIpCj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvYXJtX2ZmYS5oIGIvaW5jbHVkZS9saW51eC9hcm1fZmZhLmgKPiBpbmRleCAz ZGVmZGRmYjQwZmMuLjg2MDRjNDgyODljZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2Fy bV9mZmEuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvYXJtX2ZmYS5oCj4gQEAgLTYsNyArNiw2IEBA Cj4gICNpZm5kZWYgX0xJTlVYX0FSTV9GRkFfSAo+ICAjZGVmaW5lIF9MSU5VWF9BUk1fRkZBX0gK PiAgCj4gLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9kZXZpY2Uu aD4KPiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KPiBAQCAtNDcsNiArNDYsNyBAQCB2b2lkIGZmYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qg ZmZhX2RldmljZSAqZmZhX2Rldik7Cj4gIGludCBmZmFfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBm ZmFfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAo+ICAJCQljb25zdCBjaGFy ICptb2RfbmFtZSk7Cj4gIHZvaWQgZmZhX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBmZmFfZHJp dmVyICpkcml2ZXIpOwo+ICtjb25zdCBzdHJ1Y3QgZmZhX2Rldl9vcHMgKmZmYV9kZXZfb3BzX2dl dChzdHJ1Y3QgZmZhX2RldmljZSAqZGV2KTsKPiAgCj4gICNlbHNlCj4gIHN0YXRpYyBpbmxpbmUK PiBAQCAtNjYsNiArNjYsMTAgQEAgZmZhX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZmZhX2RyaXZl ciAqZHJpdmVyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKPiAgCj4gIHN0YXRpYyBpbmxpbmUgdm9p ZCBmZmFfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGZmYV9kcml2ZXIgKmRyaXZlcikge30KPiAg Cj4gK2NvbnN0IHN0cnVjdCBmZmFfZGV2X29wcyAqZmZhX2Rldl9vcHNfZ2V0KHN0cnVjdCBmZmFf ZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gICNlbmRpZiAvKiBDT05G SUdfQVJNX0ZGQV9UUkFOU1BPUlQgKi8KPiAgCj4gICNkZWZpbmUgZmZhX3JlZ2lzdGVyKGRyaXZl cikgXAo+IEBAIC04NCw0ICs4OCwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmZhX2RyaXZlcl91 bnJlZ2lzdGVyKHN0cnVjdCBmZmFfZHJpdmVyICpkcml2ZXIpIHt9Cj4gICNkZWZpbmUgbW9kdWxl X2ZmYV9kcml2ZXIoX19mZmFfZHJpdmVyKQlcCj4gIAltb2R1bGVfZHJpdmVyKF9fZmZhX2RyaXZl ciwgZmZhX3JlZ2lzdGVyLCBmZmFfdW5yZWdpc3RlcikKPiAgCj4gKy8qIEZGQSB0cmFuc3BvcnQg cmVsYXRlZCAqLwo+ICtzdHJ1Y3QgZmZhX3BhcnRpdGlvbl9pbmZvIHsKPiArCXUxNiBpZDsKPiAr CXUxNiBleGVjX2N0eHQ7Cj4gKy8qIHBhcnRpdGlvbiBzdXBwb3J0cyByZWNlaXB0IG9mIGRpcmVj dCByZXF1ZXN0cyAqLwo+ICsjZGVmaW5lIEZGQV9QQVJUSVRJT05fRElSRUNUX1JFQ1YJQklUKDAp Cj4gKy8qIHBhcnRpdGlvbiBjYW4gc2VuZCBkaXJlY3QgcmVxdWVzdHMuICovCj4gKyNkZWZpbmUg RkZBX1BBUlRJVElPTl9ESVJFQ1RfU0VORAlCSVQoMSkKPiArLyogcGFydGl0aW9uIGNhbiBzZW5k IGFuZCByZWNlaXZlIGluZGlyZWN0IG1lc3NhZ2VzLiAqLwo+ICsjZGVmaW5lIEZGQV9QQVJUSVRJ T05fSU5ESVJFQ1RfTVNHCUJJVCgyKQo+ICsJdTMyIHByb3BlcnRpZXM7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgZmZhX3NlbmRfZGlyZWN0X2RhdGEgewo+ICsJdW5zaWduZWQgbG9uZyBkYXRhMDsKPiAr CXVuc2lnbmVkIGxvbmcgZGF0YTE7Cj4gKwl1bnNpZ25lZCBsb25nIGRhdGEyOwo+ICsJdW5zaWdu ZWQgbG9uZyBkYXRhMzsKPiArCXVuc2lnbmVkIGxvbmcgZGF0YTQ7Cj4gK307Cj4gKwo+ICtzdHJ1 Y3QgZmZhX2Rldl9vcHMgewo+ICsJdTMyICgqYXBpX3ZlcnNpb25fZ2V0KSh2b2lkKTsKPiArCXUx NiAoKnBhcnRpdGlvbl9pZF9nZXQpKHN0cnVjdCBmZmFfZGV2aWNlICpkZXYpOwo+ICsJaW50ICgq cGFydGl0aW9uX2luZm9fZ2V0KShjb25zdCBjaGFyICp1dWlkX3N0ciwKPiArCQkJCSAgc3RydWN0 IGZmYV9wYXJ0aXRpb25faW5mbyAqYnVmZmVyKTsKPiArCWludCAoKnN5bmNfc2VuZF9yZWNlaXZl KShzdHJ1Y3QgZmZhX2RldmljZSAqZGV2LCB1MTYgZXAsCj4gKwkJCQkgc3RydWN0IGZmYV9zZW5k X2RpcmVjdF9kYXRhICpkYXRhKTsKPiArfTsKPiArCj4gICNlbmRpZiAvKiBfTElOVVhfQVJNX0ZG QV9IICovCj4gLS0gCj4gMi4yNS4xCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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=-12.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY,URIBL_BLOCKED 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 4422BC433FE for ; Mon, 7 Dec 2020 12:31:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F0964233E2 for ; Mon, 7 Dec 2020 12:31:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726370AbgLGMbK (ORCPT ); Mon, 7 Dec 2020 07:31:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49810 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726254AbgLGMbK (ORCPT ); Mon, 7 Dec 2020 07:31:10 -0500 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C033DC0613D0 for ; Mon, 7 Dec 2020 04:30:23 -0800 (PST) Received: by mail-lj1-x244.google.com with SMTP id f11so2867293ljn.2 for ; Mon, 07 Dec 2020 04:30:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=l6q6cwZyHaIAJmhwBlFnsHM9f3N2rodwyz5czidYR/M=; b=beA7jUmr394HhKgz+trffpZSkL1+utbgokP6SvLmtVKyJ7A2slL+yKIN30aUDeYkmm U59xQupZ6EvyxpLauu+orPk9Oq7vtrn3ZiZQkWh4LHYo+1O7Ds2ilTICyvFOHBOvIOrk ++zx33b85/gpyrP2dJt/RjgKEsyt+OhryOdFeLAQUm43bGG/T+2dUs/NI0czGTQIRWNA dBy9rzPuEl2adDDxMb+5IRWCLCkn2JQVD/SDCtadjG53rcQe1R+NsB6tXG6cHLMV2dsn FoclHiRVrYp9+pLzwLeEaCTT29vn0QGx9iayxVwwxhPe4K0oyQBNdTarRrmZXpnJT88I 1OwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=l6q6cwZyHaIAJmhwBlFnsHM9f3N2rodwyz5czidYR/M=; b=PstS1aAvnbOb444cXR6hkt+bNmQxj+Ega1f3fbSSYRaqrWGmBO66KJZFCUV8QYUdDO /fbSAtqyMC3Mr0+8ppEmxDlli/V6hA+xApejkvlKJa2/mZxDcC/rcjchno5H+cEiADhP 9yKCBifWn3kx/vK5pXYLzBV0MhMFm84xWyAyim2kWE3CmJw2qrxngMbZoh5Iah7/HO/j lR5G6mtJJzw+9Atb3SUJlmPHSwuDTGsz34W1oJVh2Tb0iAuAw8B5RTjDtB8t85eY6Acd vker+8hkJttE5O+6dRQE6TNvmXB59n3g/0+Z9/oLqzGzV0rPCvhMrG1dMvr5avyW2252 rXjw== X-Gm-Message-State: AOAM531f0QNVU/0EUEqHA0UnabLeu40DVGQPWMY99lhOLBXSOROeK5zQ SmqFySJCCy4oHUOkzELvPYSBtg== X-Google-Smtp-Source: ABdhPJzdhu7IYZ7yv9t8FSyUIxQKURljFqOdBV4U0QPZ9lDRESF50Ohhtu+KT3J9RP7pvYWxnUmd9g== X-Received: by 2002:a2e:2284:: with SMTP id i126mr3668225lji.93.1607344221055; Mon, 07 Dec 2020 04:30:21 -0800 (PST) Received: from jade (h-249-223.A175.priv.bahnhof.se. [98.128.249.223]) by smtp.gmail.com with ESMTPSA id n1sm991662lfg.162.2020.12.07.04.30.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Dec 2020 04:30:20 -0800 (PST) Date: Mon, 7 Dec 2020 13:30:18 +0100 From: Jens Wiklander To: Sudeep Holla Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Trilok Soni , arve@android.com, Andrew Walbran , David Hartley , Achin Gupta , Arunachalam Ganapathy Subject: Re: [PATCH v3 6/7] firmware: arm_ffa: Setup in-kernel users of FFA partitions Message-ID: <20201207123018.GA1748888@jade> References: <20201204121137.2966778-1-sudeep.holla@arm.com> <20201204121137.2966778-7-sudeep.holla@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20201204121137.2966778-7-sudeep.holla@arm.com> Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi Sudeep, Some comments below. On Fri, Dec 04, 2020 at 12:11:36PM +0000, Sudeep Holla wrote: > Parse the FFA nodes from the device-tree and register all the partitions > whose services will be used in the kernel. > > In order to also enable in-kernel users of FFA interface, let us add > simple set of operations for such devices. > > The in-kernel users are registered without the character device interface. > > Signed-off-by: Sudeep Holla > --- > drivers/firmware/arm_ffa/common.h | 2 + > drivers/firmware/arm_ffa/driver.c | 186 ++++++++++++++++++++++++++++++ > include/linux/arm_ffa.h | 36 +++++- > 3 files changed, 223 insertions(+), 1 deletion(-) > > diff --git a/drivers/firmware/arm_ffa/common.h b/drivers/firmware/arm_ffa/common.h > index d019348bf67d..eb1371c2b2b8 100644 > --- a/drivers/firmware/arm_ffa/common.h > +++ b/drivers/firmware/arm_ffa/common.h > @@ -6,6 +6,7 @@ > #ifndef _FFA_COMMON_H > #define _FFA_COMMON_H > > +#include > #include > #include > > @@ -17,6 +18,7 @@ typedef ffa_res_t > > int __init arm_ffa_bus_init(void); > void __exit arm_ffa_bus_exit(void); > +bool ffa_device_is_valid(struct ffa_device *ffa_dev); > > #ifdef CONFIG_ARM_FFA_SMCCC > int __init ffa_transport_init(ffa_fn **invoke_ffa_fn); > diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c > index 257b331d781c..3e4ba841dbf8 100644 > --- a/drivers/firmware/arm_ffa/driver.c > +++ b/drivers/firmware/arm_ffa/driver.c > @@ -24,9 +24,13 @@ > > #include > #include > +#include > #include > +#include > #include > +#include > #include > +#include > > #include "common.h" > > @@ -179,6 +183,20 @@ static int ffa_version_check(u32 *version) > return 0; > } > > +static int ffa_rx_release(void) > +{ > + ffa_res_t ret; > + > + ret = invoke_ffa_fn(FFA_RX_RELEASE, 0, 0, 0, 0, 0, 0, 0); > + > + if (ret.a0 == FFA_ERROR) > + return ffa_to_linux_errno((int)ret.a2); > + > + /* check for ret.a0 == FFA_RX_RELEASE ? */ > + > + return 0; > +} > + > static int ffa_rxtx_map(phys_addr_t tx_buf, phys_addr_t rx_buf, u32 pg_cnt) > { > ffa_res_t ret; > @@ -203,6 +221,50 @@ static int ffa_rxtx_unmap(u16 vm_id) > return 0; > } > > +static int __ffa_partition_info_get(u32 uuid0, u32 uuid1, u32 uuid2, u32 uuid3, > + struct ffa_partition_info **buffer) > +{ > + int count; > + ffa_res_t partition_info; > + > + mutex_lock(&drv_info->rx_lock); > + partition_info = invoke_ffa_fn(FFA_PARTITION_INFO_GET, uuid0, uuid1, > + uuid2, uuid3, 0, 0, 0); > + > + if (partition_info.a0 == FFA_ERROR) > + return ffa_to_linux_errno((int)partition_info.a2); > + > + count = partition_info.a2; > + > + if (buffer) > + memcpy(*buffer, drv_info->rx_buffer, sizeof(*buffer) * count); > + > + ffa_rx_release(); > + > + mutex_unlock(&drv_info->rx_lock); > + > + return count; > +} > + > +static int ffa_partition_probe(const char *uuid_str, > + struct ffa_partition_info *buffer) > +{ > + int count; > + uuid_t uuid; > + u32 uuid0_4[4] = { 0 }; > + > + if (uuid_parse(uuid_str, &uuid)) { > + pr_err("invalid uuid (%s)\n", uuid_str); > + return -ENODEV; > + } > + > + export_uuid((u8 *)uuid0_4, &uuid); > + count = __ffa_partition_info_get(uuid0_4[0], uuid0_4[1], uuid0_4[2], > + uuid0_4[3], &buffer); > + > + return count; > +} > + > #define VM_ID_MASK GENMASK(15, 0) > static int ffa_id_get(u16 *vm_id) > { > @@ -218,9 +280,125 @@ static int ffa_id_get(u16 *vm_id) > return 0; > } > > +static int ffa_msg_send_direct_req(u16 src_id, u16 dst_id, > + struct ffa_send_direct_data *data) > +{ > + u32 src_dst_ids = PACK_TARGET_INFO(src_id, dst_id); > + ffa_res_t ret; > + > + ret = invoke_ffa_fn(FFA_FN_NATIVE(MSG_SEND_DIRECT_REQ), src_dst_ids, 0, > + data->data0, data->data1, data->data2, > + data->data3, data->data4); > + > + while (ret.a0 == FFA_INTERRUPT) > + ret = invoke_ffa_fn(FFA_RUN, ret.a1, 0, 0, 0, 0, 0, 0); > + if (ret.a0 == FFA_ERROR) > + return ffa_to_linux_errno((int)ret.a2); > + > + if (ret.a0 == FFA_FN_NATIVE(MSG_SEND_DIRECT_RESP)) { > + data->data0 = ret.a3; > + data->data1 = ret.a4; > + data->data2 = ret.a5; > + data->data3 = ret.a6; > + data->data4 = ret.a7; > + } > + > + return 0; > +} > + > +static u32 ffa_api_version_get(void) > +{ > + return drv_info->version; > +} > + > +static u16 ffa_partition_id_get(struct ffa_device *dev) > +{ > + return dev->vm_id; > +} > + > +static int ffa_partition_info_get(const char *uuid_str, > + struct ffa_partition_info *buffer) > +{ > + if (ffa_partition_probe(uuid_str, buffer) == 1) > + return 0; > + > + return -ENOENT; > +} > + > +static int ffa_sync_send_receive(struct ffa_device *dev, u16 ep, > + struct ffa_send_direct_data *data) > +{ > + return ffa_msg_send_direct_req(dev->vm_id, ep, data); > +} > + > +static const struct ffa_dev_ops ffa_ops = { > + .api_version_get = ffa_api_version_get, > + .partition_id_get = ffa_partition_id_get, > + .partition_info_get = ffa_partition_info_get, > + .sync_send_receive = ffa_sync_send_receive, > +}; > + > +const struct ffa_dev_ops *ffa_dev_ops_get(struct ffa_device *dev) > +{ > + if (ffa_device_is_valid(dev)) > + return &ffa_ops; > + > + return NULL; > +} > +EXPORT_SYMBOL_GPL(ffa_dev_ops_get); > + > +int ffa_setup_partitions(struct device_node *np) > +{ > + int ret; > + struct device_node *child; > + struct ffa_device *ffa_dev; > + struct ffa_partition_info pbuf; > + const char *p_uuid, *pfx = "Ignoring FFA partition"; > + uuid_t uuid = UUID_INIT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); > + > + for_each_child_of_node(np, child) { The spec says: – If the Nil UUID is specified at the Non-secure virtual FF-A instance, the Hypervisor must provide information for partitions resident in both security states. Doesn't that make this redundant? > + if (!of_device_is_compatible(child, "arm,ffa-1.0-partition")) { > + of_node_put(child); > + continue; > + } > + > + if (of_property_read_string(child, "uuid", &p_uuid)) { > + pr_err("%s: failed to parse \"uuid\" property\n", pfx); > + of_node_put(child); > + continue; > + } > + > + of_node_put(child); > + > + if (uuid_parse(p_uuid, &uuid)) { > + pr_err("%s: invalid \"uuid\" property (%s)\n", > + pfx, p_uuid); > + continue; > + } > + > + ret = ffa_partition_probe(p_uuid, &pbuf); > + if (ret != 1) { If ret is > 1 we're in deep trouble as we have a buffer overrun on the stack. Cheers, Jens > + pr_err("%s: %s partition info probe failed\n", > + pfx, p_uuid); > + return -EINVAL; > + } > + > + ffa_dev = ffa_device_register(p_uuid, pbuf.id); > + if (!ffa_dev) { > + pr_err("%s: failed to register %s\n", pfx, p_uuid); > + continue; > + } > + > + ffa_dev_set_drvdata(ffa_dev, drv_info); > + } > + > + return 0; > +} > + > static int __init ffa_init(void) > { > int ret; > + struct device_node *np; > > ret = arm_ffa_bus_init(); > if (ret) > @@ -267,6 +445,14 @@ static int __init ffa_init(void) > mutex_init(&drv_info->rx_lock); > mutex_init(&drv_info->tx_lock); > > + /* Set up all the partitions */ > + np = of_find_compatible_node(NULL, NULL, "arm,ffa-1.0"); > + if (!np) > + return 0; > + > + ffa_setup_partitions(np); > + of_node_put(np); > + > return 0; > free_pages: > if (drv_info->tx_buffer) > diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h > index 3defddfb40fc..8604c48289ce 100644 > --- a/include/linux/arm_ffa.h > +++ b/include/linux/arm_ffa.h > @@ -6,7 +6,6 @@ > #ifndef _LINUX_ARM_FFA_H > #define _LINUX_ARM_FFA_H > > -#include > #include > #include > #include > @@ -47,6 +46,7 @@ void ffa_device_unregister(struct ffa_device *ffa_dev); > int ffa_driver_register(struct ffa_driver *driver, struct module *owner, > const char *mod_name); > void ffa_driver_unregister(struct ffa_driver *driver); > +const struct ffa_dev_ops *ffa_dev_ops_get(struct ffa_device *dev); > > #else > static inline > @@ -66,6 +66,10 @@ ffa_driver_register(struct ffa_driver *driver, struct module *owner, > > static inline void ffa_driver_unregister(struct ffa_driver *driver) {} > > +const struct ffa_dev_ops *ffa_dev_ops_get(struct ffa_device *dev) > +{ > + return NULL; > +} > #endif /* CONFIG_ARM_FFA_TRANSPORT */ > > #define ffa_register(driver) \ > @@ -84,4 +88,34 @@ static inline void ffa_driver_unregister(struct ffa_driver *driver) {} > #define module_ffa_driver(__ffa_driver) \ > module_driver(__ffa_driver, ffa_register, ffa_unregister) > > +/* FFA transport related */ > +struct ffa_partition_info { > + u16 id; > + u16 exec_ctxt; > +/* partition supports receipt of direct requests */ > +#define FFA_PARTITION_DIRECT_RECV BIT(0) > +/* partition can send direct requests. */ > +#define FFA_PARTITION_DIRECT_SEND BIT(1) > +/* partition can send and receive indirect messages. */ > +#define FFA_PARTITION_INDIRECT_MSG BIT(2) > + u32 properties; > +}; > + > +struct ffa_send_direct_data { > + unsigned long data0; > + unsigned long data1; > + unsigned long data2; > + unsigned long data3; > + unsigned long data4; > +}; > + > +struct ffa_dev_ops { > + u32 (*api_version_get)(void); > + u16 (*partition_id_get)(struct ffa_device *dev); > + int (*partition_info_get)(const char *uuid_str, > + struct ffa_partition_info *buffer); > + int (*sync_send_receive)(struct ffa_device *dev, u16 ep, > + struct ffa_send_direct_data *data); > +}; > + > #endif /* _LINUX_ARM_FFA_H */ > -- > 2.25.1 >