Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2158746ybl; Thu, 30 Jan 2020 12:23:33 -0800 (PST) X-Google-Smtp-Source: APXvYqzKbcAtm/On1nEC2FdLqdPydy3KbGsP8h8+hXzMxOxzPkvp3Rr/J+yzb+XoQfwTiYC359Cm X-Received: by 2002:a9d:7489:: with SMTP id t9mr4881357otk.205.1580415813017; Thu, 30 Jan 2020 12:23:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580415813; cv=none; d=google.com; s=arc-20160816; b=QYU0LhWAY02Ul39SHFUDJmXV4FO6Z13COHSxEMZjUuxNRnURrch6aV6iLtFm6Ec0K/ qrjsdYTSppsJS9SabGeasCm3kbot90DzEXBN2nLOURrSeigrO4M9SpAW5RhJg4lCxquj W0Oe+0Xk2KQNdQJopDC5xUPfycYT7hTJAEOmSy74jGxu2FhguLCj5YqMXF3B5WbDMmto U0jZE6UQCIL0iXOckoywi5DbbUS859yRl4TXWoaT121M8qXKGv7OrKWf4m18MkXlRtX/ oqfyWAsymwsxI3l1e0qKShON5DtowpuJK3Ewe5RydI0zvPA0NGZGs0bKgc+kWWJF+/5j +qaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=f9rMzOOvLA+U/oerycRaC6siozRFk+uiXMS8sNGl5zY=; b=ThbWu9Z7PbasX3Gmqfx7LMAwEIKljeh1AlHB7ZNyxsmHxksH62QpVf1JJGz2y6edW9 LgFIdxkJ5op7PtfKxOtc5Dfud9D9DBJti8jrwmWgGIhyzDruzrbEki8uBvNOYaoXVqyW dJroCNKVXZ9jZevVoMrJgDghsa3yd159EQt6QfKMunwUBGRrCnll7WNXltUYzP60lPG8 SUR4KY99eOuDMCagFGc+OIC+fc8HTUtmSkyRz52Mpp4qPFB88bS8kwbmwthO/LvYhMel YmLrtfzV3+DGyxxK5J6Lu9AHqIzOwWPoK/WJrkpR5fJH6lp/Xj65u9gh8zi/Orp4dBGy 9CoQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=n9oU19Tk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d2si3522105ote.9.2020.01.30.12.23.20; Thu, 30 Jan 2020 12:23:33 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=n9oU19Tk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727741AbgA3UWR (ORCPT + 99 others); Thu, 30 Jan 2020 15:22:17 -0500 Received: from fllv0016.ext.ti.com ([198.47.19.142]:51694 "EHLO fllv0016.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726514AbgA3UWR (ORCPT ); Thu, 30 Jan 2020 15:22:17 -0500 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 00UKMFjb001348; Thu, 30 Jan 2020 14:22:15 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1580415735; bh=f9rMzOOvLA+U/oerycRaC6siozRFk+uiXMS8sNGl5zY=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=n9oU19TkgejKF3xlc/5M1CBWX9DLgXFi0ClmqJcMW6HFtk3PJGVZtO6QlLXiGPrBN QP9zo5i19sbg+g9B2oRp0e6vF2KKdhMKrs92XOUX9pSKedN4CDXtAMiipwWCEDHz+C rYiWrfydaUzIU6no9ylqwbcM7vXlYSPeei0R1LIA= Received: from DLEE108.ent.ti.com (dlee108.ent.ti.com [157.170.170.38]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id 00UKMFRD083354; Thu, 30 Jan 2020 14:22:15 -0600 Received: from DLEE112.ent.ti.com (157.170.170.23) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Thu, 30 Jan 2020 14:22:15 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Thu, 30 Jan 2020 14:22:15 -0600 Received: from [10.250.70.160] (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 00UKMElr076026; Thu, 30 Jan 2020 14:22:14 -0600 Subject: Re: [PATCHv5 06/14] remoteproc/omap: Initialize and assign reserved memory node To: Suman Anna , Tero Kristo , , , CC: , , References: <20200116135332.7819-1-t-kristo@ti.com> <20200116135332.7819-7-t-kristo@ti.com> <249c293c-6a23-165f-1df5-4859ee47658a@ti.com> <37db5d57-b1cd-1cec-2c9b-31c49e3bdc10@ti.com> <2aaa4024-1e2c-5cab-c9f3-3be59c57e9ac@ti.com> From: "Andrew F. Davis" Message-ID: <7aed7a9f-3546-f622-37ac-34d33ddb4298@ti.com> Date: Thu, 30 Jan 2020 15:22:14 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/30/20 2:55 PM, Suman Anna wrote: > On 1/30/20 1:42 PM, Tero Kristo wrote: >> On 30/01/2020 21:20, Andrew F. Davis wrote: >>> On 1/30/20 2:18 PM, Tero Kristo wrote: >>>> On 30/01/2020 20:11, Andrew F. Davis wrote: >>>>> On 1/16/20 8:53 AM, Tero Kristo wrote: >>>>>> From: Suman Anna >>>>>> >>>>>> The reserved memory nodes are not assigned to platform devices by >>>>>> default in the driver core to avoid the lookup for every platform >>>>>> device and incur a penalty as the real users are expected to be >>>>>> only a few devices. >>>>>> >>>>>> OMAP remoteproc devices fall into the above category and the OMAP >>>>>> remoteproc driver _requires_ specific CMA pools to be assigned >>>>>> for each device at the moment to align on the location of the >>>>>> vrings and vring buffers in the RTOS-side firmware images. So, >>>>> >>>>> >>>>> Same comment as before, this is a firmware issue for only some >>>>> firmwares >>>>> that do not handle being assigned vring locations correctly and instead >>>>> hard-code them. > > As for this statement, this can do with some updating. Post 4.20, > because of the lazy allocation scheme used for carveouts including the > vrings, the resource tables now have to use FW_RSC_ADDR_ANY and will > have to wait for the vdev synchronization to happen. > >>>> >>>> I believe we discussed this topic in length in previous version but >>>> there was no conclusion on it. >>>> >>>> The commit desc might be a bit misleading, we are not actually forced to >>>> use specific CMA buffers, as we use IOMMU to map these to device >>>> addresses. For example IPU1/IPU2 use internally exact same memory >>>> addresses, iommu is used to map these to specific CMA buffer. >>>> >>>> CMA buffers are mostly used so that we get aligned large chunk of memory >>>> which can be mapped properly with the limited IOMMU OMAP family of chips >>>> have. Not sure if there is any sane way to get this done in any other >>>> manner. >>>> >>> >>> >>> Why not use the default CMA area? >> >> I think using default CMA area getting the actual memory block is not >> guaranteed and might fail. There are other users for the memory, and it >> might get fragmented at the very late phase we are grabbing the memory >> (omap remoteproc driver probe time.) Some chunks we need are pretty large. >> >> I believe I could experiment with this a bit though and see, or Suman >> could maybe provide feedback why this was designed initially like this >> and why this would not be a good idea. > > I have given some explanation on this on v4 as well, but if it is not > clear, there are restrictions with using default CMA. Default CMA has > switched to be assigned from the top of the memory (higher addresses, > since 3.18 IIRC), and the MMUs on IPUs and DSPs can only address > 32-bits. So, we cannot blindly use the default CMA pool, and this will > definitely not work on boards > 2 GB RAM. And, if you want to add in any > firewall capability, then specific physical addresses becomes mandatory. > If you need 32bit range allocations then dma_set_mask(dev, DMA_BIT_MASK(32)); I'm not saying don't have support for carveouts, just make them optional, keystone_remoteproc.c does this: if (of_reserved_mem_device_init(dev)) dev_warn(dev, "device does not have specific CMA pool\n"); There doesn't even needs to be a warning but that is up to you. Andrew > regards > Suman > >> >> -Tero >> >>> >>> Andrew >>> >>> >>>> -Tero >>>> >>>>> >>>>> This is not a requirement of the remote processor itself and so it >>>>> should not fail to probe if a specific memory carveout isn't given. >>>>> >>>>> >>>>>> use the of_reserved_mem_device_init/release() API appropriately >>>>>> to assign the corresponding reserved memory region to the OMAP >>>>>> remoteproc device. Note that only one region per device is >>>>>> allowed by the framework. >>>>>> >>>>>> Signed-off-by: Suman Anna >>>>>> Signed-off-by: Tero Kristo >>>>>> Reviewed-by: Bjorn Andersson >>>>>> --- >>>>>> v5: no changes >>>>>> >>>>>>    drivers/remoteproc/omap_remoteproc.c | 12 +++++++++++- >>>>>>    1 file changed, 11 insertions(+), 1 deletion(-) >>>>>> >>>>>> diff --git a/drivers/remoteproc/omap_remoteproc.c >>>>>> b/drivers/remoteproc/omap_remoteproc.c >>>>>> index 0846839b2c97..194303b860b2 100644 >>>>>> --- a/drivers/remoteproc/omap_remoteproc.c >>>>>> +++ b/drivers/remoteproc/omap_remoteproc.c >>>>>> @@ -17,6 +17,7 @@ >>>>>>    #include >>>>>>    #include >>>>>>    #include >>>>>> +#include >>>>>>    #include >>>>>>    #include >>>>>>    #include >>>>>> @@ -480,14 +481,22 @@ static int omap_rproc_probe(struct >>>>>> platform_device *pdev) >>>>>>        if (ret) >>>>>>            goto free_rproc; >>>>>>    +    ret = of_reserved_mem_device_init(&pdev->dev); >>>>>> +    if (ret) { >>>>>> +        dev_err(&pdev->dev, "device does not have specific CMA >>>>>> pool\n"); >>>>>> +        goto free_rproc; >>>>>> +    } >>>>>> + >>>>>>        platform_set_drvdata(pdev, rproc); >>>>>>          ret = rproc_add(rproc); >>>>>>        if (ret) >>>>>> -        goto free_rproc; >>>>>> +        goto release_mem; >>>>>>          return 0; >>>>>>    +release_mem: >>>>>> +    of_reserved_mem_device_release(&pdev->dev); >>>>>>    free_rproc: >>>>>>        rproc_free(rproc); >>>>>>        return ret; >>>>>> @@ -499,6 +508,7 @@ static int omap_rproc_remove(struct >>>>>> platform_device *pdev) >>>>>>          rproc_del(rproc); >>>>>>        rproc_free(rproc); >>>>>> +    of_reserved_mem_device_release(&pdev->dev); >>>>>>          return 0; >>>>>>    } >>>>>> >>>> >>>> --  >> >> -- >> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki >