Re: [PATCH] platform: goldfish: Retire pdev_bus

From: Roman Kiryanov
Date: Fri Jul 27 2018 - 16:56:30 EST


Hi Greg,

the get_maintainer script gave only the mailing list. Do you happen to
know if I need to mail my change somewhere else?

Regards,
Roman.
On Thu, Jul 19, 2018 at 4:07 PM <rkir@xxxxxxxxxx> wrote:
>
> From: Roman Kiryanov <rkir@xxxxxxxxxx>
>
> Not used by goldfish.
>
> Signed-off-by: Roman Kiryanov <rkir@xxxxxxxxxx>
> ---
> drivers/platform/goldfish/Kconfig | 5 -
> drivers/platform/goldfish/Makefile | 1 -
> drivers/platform/goldfish/pdev_bus.c | 232 ---------------------------
> 3 files changed, 238 deletions(-)
> delete mode 100644 drivers/platform/goldfish/pdev_bus.c
>
> diff --git a/drivers/platform/goldfish/Kconfig b/drivers/platform/goldfish/Kconfig
> index fefbb8370da0..479031aa4f88 100644
> --- a/drivers/platform/goldfish/Kconfig
> +++ b/drivers/platform/goldfish/Kconfig
> @@ -10,11 +10,6 @@ menuconfig GOLDFISH
>
> if GOLDFISH
>
> -config GOLDFISH_BUS
> - bool "Goldfish platform bus"
> - ---help---
> - This is a virtual bus to host Goldfish Android Virtual Devices.
> -
> config GOLDFISH_PIPE
> tristate "Goldfish virtual device for QEMU pipes"
> ---help---
> diff --git a/drivers/platform/goldfish/Makefile b/drivers/platform/goldfish/Makefile
> index d3487125838c..e0c202df9674 100644
> --- a/drivers/platform/goldfish/Makefile
> +++ b/drivers/platform/goldfish/Makefile
> @@ -1,5 +1,4 @@
> #
> # Makefile for Goldfish platform specific drivers
> #
> -obj-$(CONFIG_GOLDFISH_BUS) += pdev_bus.o
> obj-$(CONFIG_GOLDFISH_PIPE) += goldfish_pipe.o
> diff --git a/drivers/platform/goldfish/pdev_bus.c b/drivers/platform/goldfish/pdev_bus.c
> deleted file mode 100644
> index dd9ea463c2a4..000000000000
> --- a/drivers/platform/goldfish/pdev_bus.c
> +++ /dev/null
> @@ -1,232 +0,0 @@
> -/*
> - * Copyright (C) 2007 Google, Inc.
> - * Copyright (C) 2011 Intel, Inc.
> - * Copyright (C) 2013 Intel, Inc.
> - *
> - * This software is licensed under the terms of the GNU General Public
> - * License version 2, as published by the Free Software Foundation, and
> - * may be copied, distributed, and modified under those terms.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/init.h>
> -#include <linux/interrupt.h>
> -#include <linux/irq.h>
> -#include <linux/platform_device.h>
> -#include <linux/slab.h>
> -#include <linux/io.h>
> -
> -#define PDEV_BUS_OP_DONE (0x00)
> -#define PDEV_BUS_OP_REMOVE_DEV (0x04)
> -#define PDEV_BUS_OP_ADD_DEV (0x08)
> -
> -#define PDEV_BUS_OP_INIT (0x00)
> -
> -#define PDEV_BUS_OP (0x00)
> -#define PDEV_BUS_GET_NAME (0x04)
> -#define PDEV_BUS_NAME_LEN (0x08)
> -#define PDEV_BUS_ID (0x0c)
> -#define PDEV_BUS_IO_BASE (0x10)
> -#define PDEV_BUS_IO_SIZE (0x14)
> -#define PDEV_BUS_IRQ (0x18)
> -#define PDEV_BUS_IRQ_COUNT (0x1c)
> -#define PDEV_BUS_GET_NAME_HIGH (0x20)
> -
> -struct pdev_bus_dev {
> - struct list_head list;
> - struct platform_device pdev;
> - struct resource resources[0];
> -};
> -
> -static void goldfish_pdev_worker(struct work_struct *work);
> -
> -static void __iomem *pdev_bus_base;
> -static unsigned long pdev_bus_addr;
> -static unsigned long pdev_bus_len;
> -static u32 pdev_bus_irq;
> -static LIST_HEAD(pdev_bus_new_devices);
> -static LIST_HEAD(pdev_bus_registered_devices);
> -static LIST_HEAD(pdev_bus_removed_devices);
> -static DECLARE_WORK(pdev_bus_worker, goldfish_pdev_worker);
> -
> -
> -static void goldfish_pdev_worker(struct work_struct *work)
> -{
> - int ret;
> - struct pdev_bus_dev *pos, *n;
> -
> - list_for_each_entry_safe(pos, n, &pdev_bus_removed_devices, list) {
> - list_del(&pos->list);
> - platform_device_unregister(&pos->pdev);
> - kfree(pos);
> - }
> - list_for_each_entry_safe(pos, n, &pdev_bus_new_devices, list) {
> - list_del(&pos->list);
> - ret = platform_device_register(&pos->pdev);
> - if (ret)
> - pr_err("goldfish_pdev_worker failed to register device, %s\n",
> - pos->pdev.name);
> - list_add_tail(&pos->list, &pdev_bus_registered_devices);
> - }
> -}
> -
> -static void goldfish_pdev_remove(void)
> -{
> - struct pdev_bus_dev *pos, *n;
> - u32 base;
> -
> - base = readl(pdev_bus_base + PDEV_BUS_IO_BASE);
> -
> - list_for_each_entry_safe(pos, n, &pdev_bus_new_devices, list) {
> - if (pos->resources[0].start == base) {
> - list_del(&pos->list);
> - kfree(pos);
> - return;
> - }
> - }
> - list_for_each_entry_safe(pos, n, &pdev_bus_registered_devices, list) {
> - if (pos->resources[0].start == base) {
> - list_del(&pos->list);
> - list_add_tail(&pos->list, &pdev_bus_removed_devices);
> - schedule_work(&pdev_bus_worker);
> - return;
> - }
> - };
> - pr_err("goldfish_pdev_remove could not find device at %x\n", base);
> -}
> -
> -static int goldfish_new_pdev(void)
> -{
> - struct pdev_bus_dev *dev;
> - u32 name_len;
> - u32 irq = -1, irq_count;
> - int resource_count = 2;
> - u32 base;
> - char *name;
> -
> - base = readl(pdev_bus_base + PDEV_BUS_IO_BASE);
> -
> - irq_count = readl(pdev_bus_base + PDEV_BUS_IRQ_COUNT);
> - name_len = readl(pdev_bus_base + PDEV_BUS_NAME_LEN);
> - if (irq_count)
> - resource_count++;
> -
> - dev = kzalloc(sizeof(*dev) +
> - sizeof(struct resource) * resource_count +
> - name_len + 1 + sizeof(*dev->pdev.dev.dma_mask), GFP_ATOMIC);
> - if (dev == NULL)
> - return -ENOMEM;
> -
> - dev->pdev.num_resources = resource_count;
> - dev->pdev.resource = (struct resource *)(dev + 1);
> - dev->pdev.name = name = (char *)(dev->pdev.resource + resource_count);
> - dev->pdev.dev.coherent_dma_mask = ~0;
> - dev->pdev.dev.dma_mask = (void *)(dev->pdev.name + name_len + 1);
> - *dev->pdev.dev.dma_mask = ~0;
> -
> -#ifdef CONFIG_64BIT
> - writel((u32)((u64)name>>32), pdev_bus_base + PDEV_BUS_GET_NAME_HIGH);
> -#endif
> - writel((u32)(unsigned long)name, pdev_bus_base + PDEV_BUS_GET_NAME);
> - name[name_len] = '\0';
> - dev->pdev.id = readl(pdev_bus_base + PDEV_BUS_ID);
> - dev->pdev.resource[0].start = base;
> - dev->pdev.resource[0].end = base +
> - readl(pdev_bus_base + PDEV_BUS_IO_SIZE) - 1;
> - dev->pdev.resource[0].flags = IORESOURCE_MEM;
> - if (irq_count) {
> - irq = readl(pdev_bus_base + PDEV_BUS_IRQ);
> - dev->pdev.resource[1].start = irq;
> - dev->pdev.resource[1].end = irq + irq_count - 1;
> - dev->pdev.resource[1].flags = IORESOURCE_IRQ;
> - }
> -
> - pr_debug("goldfish_new_pdev %s at %x irq %d\n", name, base, irq);
> - list_add_tail(&dev->list, &pdev_bus_new_devices);
> - schedule_work(&pdev_bus_worker);
> -
> - return 0;
> -}
> -
> -static irqreturn_t goldfish_pdev_bus_interrupt(int irq, void *dev_id)
> -{
> - irqreturn_t ret = IRQ_NONE;
> -
> - while (1) {
> - u32 op = readl(pdev_bus_base + PDEV_BUS_OP);
> -
> - switch (op) {
> - case PDEV_BUS_OP_REMOVE_DEV:
> - goldfish_pdev_remove();
> - ret = IRQ_HANDLED;
> - break;
> -
> - case PDEV_BUS_OP_ADD_DEV:
> - goldfish_new_pdev();
> - ret = IRQ_HANDLED;
> - break;
> -
> - case PDEV_BUS_OP_DONE:
> - default:
> - return ret;
> - }
> - }
> -}
> -
> -static int goldfish_pdev_bus_probe(struct platform_device *pdev)
> -{
> - int ret;
> - struct resource *r;
> -
> - r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> - if (r == NULL)
> - return -EINVAL;
> -
> - pdev_bus_addr = r->start;
> - pdev_bus_len = resource_size(r);
> -
> - pdev_bus_base = ioremap(pdev_bus_addr, pdev_bus_len);
> - if (pdev_bus_base == NULL) {
> - ret = -ENOMEM;
> - dev_err(&pdev->dev, "unable to map Goldfish MMIO.\n");
> - goto free_resources;
> - }
> -
> - r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> - if (r == NULL) {
> - ret = -ENOENT;
> - goto free_map;
> - }
> -
> - pdev_bus_irq = r->start;
> -
> - ret = request_irq(pdev_bus_irq, goldfish_pdev_bus_interrupt,
> - IRQF_SHARED, "goldfish_pdev_bus", pdev);
> - if (ret) {
> - dev_err(&pdev->dev, "unable to request Goldfish IRQ\n");
> - goto free_map;
> - }
> -
> - writel(PDEV_BUS_OP_INIT, pdev_bus_base + PDEV_BUS_OP);
> - return 0;
> -
> -free_map:
> - iounmap(pdev_bus_base);
> -free_resources:
> - release_mem_region(pdev_bus_addr, pdev_bus_len);
> - return ret;
> -}
> -
> -static struct platform_driver goldfish_pdev_bus_driver = {
> - .probe = goldfish_pdev_bus_probe,
> - .driver = {
> - .name = "goldfish_pdev_bus"
> - }
> -};
> -builtin_platform_driver(goldfish_pdev_bus_driver);
> --
> 2.18.0.203.gfac676dfb9-goog
>