From patchwork Thu Oct 4 15:25:09 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matt Porter X-Patchwork-Id: 1546951 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork2.kernel.org (Postfix) with ESMTP id E7598DFFCF for ; Thu, 4 Oct 2012 15:27:01 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1TJnI6-0001ip-Pu; Thu, 04 Oct 2012 15:24:46 +0000 Received: from mail-ia0-f177.google.com ([209.85.210.177]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1TJnI2-0001i1-LB for linux-arm-kernel@lists.infradead.org; Thu, 04 Oct 2012 15:24:44 +0000 Received: by mail-ia0-f177.google.com with SMTP id x26so263248iak.36 for ; Thu, 04 Oct 2012 08:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=aaMG+2OhSWkrFdz45KUlhlLwxU/lWqsvLuG5JsiT1XM=; b=V8CgkFM4HoD3SYwIpLyD3gMJBg85hwB3Owhe7kRV6xbzJcBBjtgM/JrLaQRXcrfeKi BSj5Bo7uxWqN08kWTWnMOdAa+2h/pG2I+lR6VBnaxwZzXNz78be1z3drcdvWKGXfYM8A 0O5hOOD17/dVwosJKnqVCnxuRak4erRHvEL22ZygioPG4mpiQ09Q5K5C/ywJ2x1IS2zF WJd+YtU9o/KTxZB8zQV4wP5+BcmlRMh7kOJZ85vwsIWSYCJAjKJKPmBM2ij0/SGdhaHF UoroszwVNj9fZb+hCy6qyR5hmLAxYrCXAM7G2x68LGBKcCMFuCRm3Sl0/mvKBaQyKz3+ LtqQ== Received: by 10.42.91.75 with SMTP id o11mr4584073icm.57.1349364279829; Thu, 04 Oct 2012 08:24:39 -0700 (PDT) Received: from beef (cpe-24-166-64-7.neo.res.rr.com. [24.166.64.7]) by mx.google.com with ESMTPS id bp8sm5996029igb.12.2012.10.04.08.24.37 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 04 Oct 2012 08:24:38 -0700 (PDT) Date: Thu, 4 Oct 2012 11:25:09 -0400 From: Matt Porter To: Philipp Zabel Subject: Re: [PATCH v4 2/6] misc: Generic on-chip SRAM allocation driver Message-ID: <20121004152509.GJ11149@beef> References: <1347021828-23034-1-git-send-email-p.zabel@pengutronix.de> <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1347021828-23034-3-git-send-email-p.zabel@pengutronix.de> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.6 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [209.85.210.177 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (ohiomdp[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature Cc: Dong Aisheng , devicetree-discuss@lists.ozlabs.org, linux-kernel@vger.kernel.org, Rob Herring , Grant Likely , Paul Gortmaker , Richard Zhao , kernel@pengutronix.de, Shawn Guo , Huang Shijie , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org On Fri, Sep 07, 2012 at 02:43:44PM +0200, Philipp Zabel wrote: > This driver requests and remaps a memory region as configured in the > device tree. It serves memory from this region via the genalloc API. > > Other drivers can retrieve the genalloc pool from a phandle pointing > to this drivers' device node in the device tree. > + sram->pool = gen_pool_create(PAGE_SHIFT, -1); > + if (!sram->pool) > + return -ENOMEM; As mentioned in the uio_pruss/genalloc discussion, removing the hardcoded minimum allocation order will allow this to be used for a number of other cases. The most notable is moving mach-davinci/ off of its own genalloc-based SRAM arch driver. Some of the davinci SoCs have very small SRAMs and need the ability to allocate a smaller chunk. Here's a build-tested patch to add this option: From 6eced8c31eba2f86e72e854cf404d8f58fbeba85 Mon Sep 17 00:00:00 2001 From: Matt Porter Date: Thu, 4 Oct 2012 11:08:02 -0400 Subject: [PATCH] misc: sram: add support for configurable allocation order Adds support for setting the genalloc pool's minimum allocation order via DT or platform data. The allocation order is optional for both the DT property and platform data case. If it is not present then the order defaults to PAGE_SHIFT to preserve the current behavior. Signed-off-by: Matt Porter Tested-by: Philipp Zabel --- Documentation/devicetree/bindings/misc/sram.txt | 12 ++++++++++- drivers/misc/sram.c | 14 ++++++++++++- include/linux/platform_data/sram.h | 25 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 include/linux/platform_data/sram.h diff --git a/Documentation/devicetree/bindings/misc/sram.txt b/Documentation/devicetree/bindings/misc/sram.txt index b64136c..b1705ec 100644 --- a/Documentation/devicetree/bindings/misc/sram.txt +++ b/Documentation/devicetree/bindings/misc/sram.txt @@ -8,10 +8,20 @@ Required properties: - reg : SRAM iomem address range -Example: +Optional properties: + +- alloc-order : Minimum allocation order for the SRAM pool + +Examples: + +sram: sram@5c000000 { + compatible = "sram"; + reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ +}; sram: sram@5c000000 { compatible = "sram"; reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */ + alloc-order = <9>; /* Minimum 512 byte allocation */ }; diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c index 7a363f2..3bf8ed3 100644 --- a/drivers/misc/sram.c +++ b/drivers/misc/sram.c @@ -26,6 +26,7 @@ #include #include #include +#include struct sram_dev { struct gen_pool *pool; @@ -37,6 +38,7 @@ static int __devinit sram_probe(struct platform_device *pdev) struct sram_dev *sram; struct resource *res; unsigned long size; + u32 alloc_order = PAGE_SHIFT; int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -53,7 +55,17 @@ static int __devinit sram_probe(struct platform_device *pdev) if (!sram) return -ENOMEM; - sram->pool = gen_pool_create(PAGE_SHIFT, -1); + if (pdev->dev.of_node) + of_property_read_u32(pdev->dev.of_node, + "alloc-order", &alloc_order); + else + if (pdev->dev.platform_data) { + struct sram_pdata *pdata = pdev->dev.platform_data; + if (pdata->alloc_order) + alloc_order = pdata->alloc_order; + } + + sram->pool = gen_pool_create(alloc_order, -1); if (!sram->pool) return -ENOMEM; diff --git a/include/linux/platform_data/sram.h b/include/linux/platform_data/sram.h new file mode 100644 index 0000000..e17bdaa --- /dev/null +++ b/include/linux/platform_data/sram.h @@ -0,0 +1,25 @@ +/* + * include/linux/platform_data/sram.h + * + * Platform data for generic sram driver + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation version 2. + * + * This program is distributed "as is" WITHOUT ANY WARRANTY of any + * kind, whether express or implied; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _SRAM_H_ +#define _SRAM_H_ + +struct sram_pdata { + unsigned alloc_order; /* Optional: driver defaults to PAGE_SHIFT */ +}; + +#endif /* _SRAM_H_ */