From patchwork Wed Oct 26 13:32:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Gaignard X-Patchwork-Id: 79421 Delivered-To: patch@linaro.org Received: by 10.140.97.247 with SMTP id m110csp67065qge; Wed, 26 Oct 2016 06:34:30 -0700 (PDT) X-Received: by 10.98.102.84 with SMTP id a81mr4256077pfc.176.1477488870573; Wed, 26 Oct 2016 06:34:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g5si2746972pgc.78.2016.10.26.06.34.30; Wed, 26 Oct 2016 06:34:30 -0700 (PDT) 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=@linaro.org; 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=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934710AbcJZNe0 (ORCPT + 27 others); Wed, 26 Oct 2016 09:34:26 -0400 Received: from mail-wm0-f41.google.com ([74.125.82.41]:37532 "EHLO mail-wm0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964776AbcJZNdk (ORCPT ); Wed, 26 Oct 2016 09:33:40 -0400 Received: by mail-wm0-f41.google.com with SMTP id 140so19663365wmv.0 for ; Wed, 26 Oct 2016 06:33:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZYizUwor4lAbgte4/vtmaUJpA/WbzKmBNkC/6cfigLI=; b=I4BMDrEbDXJZiZlrbL5WYqbf4OOy3II2yhMNaJ/ACbX4bb78C5xuCqi2p7ssbtur2y AHbG2bTB8fxOBc/B6NJmKl+IVCg2ec8OPVi/vzkra/97rvr3QKYOzNi53FskooRIqa5F r/YUbZZO0ObGfUhuXvRrZNfLE7FbTQVmbJT9s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZYizUwor4lAbgte4/vtmaUJpA/WbzKmBNkC/6cfigLI=; b=BXdHTJ/73o6/YI17ICq38X5W8YRNYFvjZc4WNWwmkWzHRhLRw1gyCYDFzslLZnSkbB zYPJxwHqcsw/wkGYApnRjNkZUXXgfXt6yurzS4THxFgEHZayLGjYUK51ddkqIAsaWRTC yETyd241VcaXsLybhlEoY8Clmx63BXepUHzIgVjT1efxxxXq7j6u9mwZf3uMHBi2Jzr0 0NCQhA7qO/0NH62Bd6G4ZVf1Nds/JiExB1DW/1qUJYGHAVGp/G2o16qyYGsUvg7IPG74 RGFCUSizsJx/2TY/P8XHP4WtyLOixbc0HulC6MNOTbYlbcs4TBMPkGyzhl2lLghdnMll OcHQ== X-Gm-Message-State: ABUngvf2781uNqcTerfVkzI9QWSoZbf/+05P6hNadcRQuG+JxiNaBUgZ99WM3h0sdDCub+V2 X-Received: by 10.194.100.169 with SMTP id ez9mr2342907wjb.9.1477488817626; Wed, 26 Oct 2016 06:33:37 -0700 (PDT) Received: from lmenx321.st.com. ([80.215.105.33]) by smtp.gmail.com with ESMTPSA id y3sm2711856wjg.3.2016.10.26.06.33.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 26 Oct 2016 06:33:37 -0700 (PDT) From: Benjamin Gaignard To: labbott@redhat.com, sumit.semwal@linaro.org, gregkh@linuxfoundation.org, yudongbin@hisilicon.com, puck.chen@hisilicon.com, linux-kernel@vger.kernel.org Cc: linaro-kernel@lists.linaro.org, kernel@stlinux.com, Benjamin Gaignard Subject: [PATCH 2/3] add STIH4xx ION driver Date: Wed, 26 Oct 2016 15:32:27 +0200 Message-Id: <1477488748-10065-3-git-send-email-benjamin.gaignard@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1477488748-10065-1-git-send-email-benjamin.gaignard@linaro.org> References: <1477488748-10065-1-git-send-email-benjamin.gaignard@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This the same driver that Hisilicon one. Change the list of heap to fit with sti SoC needs. Rename/prefix some functions and structure with sti Signed-off-by: Benjamin Gaignard --- drivers/staging/android/ion/Kconfig | 7 ++ drivers/staging/android/ion/Makefile | 2 + drivers/staging/android/ion/sti/Makefile | 1 + drivers/staging/android/ion/sti/sti_ion.c | 103 ++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 drivers/staging/android/ion/sti/Makefile create mode 100644 drivers/staging/android/ion/sti/sti_ion.c -- 1.9.1 diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig index c8fb413..eb47230 100644 --- a/drivers/staging/android/ion/Kconfig +++ b/drivers/staging/android/ion/Kconfig @@ -42,6 +42,13 @@ config ION_HISI source "drivers/staging/android/ion/hisilicon/Kconfig" +config ION_STI + bool "stih4xx ION Driver" + depends on ARCH_STI && ION + select ION_OF + help + Choose this option if you wish to use ion on STIH4xx SoC. + config ION_OF bool "Devicetree support for Ion" depends on ION && OF_ADDRESS diff --git a/drivers/staging/android/ion/Makefile b/drivers/staging/android/ion/Makefile index 5d630a0..bc02ea4 100644 --- a/drivers/staging/android/ion/Makefile +++ b/drivers/staging/android/ion/Makefile @@ -9,5 +9,7 @@ endif obj-$(CONFIG_ION_DUMMY) += ion_dummy_driver.o obj-$(CONFIG_ION_TEGRA) += tegra/ obj-$(CONFIG_ION_HISI) += hisilicon/ +obj-$(CONFIG_ION_STI) += sti/ + obj-$(CONFIG_ION_OF) += ion_of.o diff --git a/drivers/staging/android/ion/sti/Makefile b/drivers/staging/android/ion/sti/Makefile new file mode 100644 index 0000000..5690431 --- /dev/null +++ b/drivers/staging/android/ion/sti/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_ION_STI) += sti_ion.o diff --git a/drivers/staging/android/ion/sti/sti_ion.c b/drivers/staging/android/ion/sti/sti_ion.c new file mode 100644 index 0000000..4c0f52b --- /dev/null +++ b/drivers/staging/android/ion/sti/sti_ion.c @@ -0,0 +1,103 @@ +/* + * STIH4xx ION Driver + * + * Copyright (c) 2016 STMicroelectronics + * + * Author: Benjamin Gaignard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include + +#include "../ion_priv.h" +#include "../ion.h" +#include "../ion_of.h" + +struct sti_ion_dev { + struct ion_heap **heaps; + struct ion_device *idev; + struct ion_platform_data *data; +}; + +static struct ion_of_heap sti_heaps[] = { + PLATFORM_HEAP("st,cma", 0, ION_HEAP_TYPE_DMA, "cma"), + {} +}; + +static int sti_ion_probe(struct platform_device *pdev) +{ + struct sti_ion_dev *ipdev; + int i; + + ipdev = devm_kzalloc(&pdev->dev, sizeof(*ipdev), GFP_KERNEL); + if (!ipdev) + return -ENOMEM; + + platform_set_drvdata(pdev, ipdev); + + ipdev->idev = ion_device_create(NULL); + if (IS_ERR(ipdev->idev)) + return PTR_ERR(ipdev->idev); + + ipdev->data = ion_parse_dt(pdev, sti_heaps); + if (IS_ERR(ipdev->data)) + return PTR_ERR(ipdev->data); + + ipdev->heaps = devm_kzalloc(&pdev->dev, + sizeof(struct ion_heap) * ipdev->data->nr, + GFP_KERNEL); + if (!ipdev->heaps) { + ion_destroy_platform_data(ipdev->data); + return -ENOMEM; + } + + for (i = 0; i < ipdev->data->nr; i++) { + ipdev->heaps[i] = ion_heap_create(&ipdev->data->heaps[i]); + if (!ipdev->heaps) { + ion_destroy_platform_data(ipdev->data); + return -ENOMEM; + } + ion_device_add_heap(ipdev->idev, ipdev->heaps[i]); + } + return 0; +} + +static int sti_ion_remove(struct platform_device *pdev) +{ + struct sti_ion_dev *ipdev; + int i; + + ipdev = platform_get_drvdata(pdev); + + for (i = 0; i < ipdev->data->nr; i++) + ion_heap_destroy(ipdev->heaps[i]); + + ion_destroy_platform_data(ipdev->data); + ion_device_destroy(ipdev->idev); + + return 0; +} + +static const struct of_device_id sti_ion_match_table[] = { + {.compatible = "st,sti-ion"}, + {}, +}; + +static struct platform_driver sti_ion_driver = { + .probe = sti_ion_probe, + .remove = sti_ion_remove, + .driver = { + .name = "ion-sti", + .of_match_table = sti_ion_match_table, + }, +}; + +module_platform_driver(sti_ion_driver);