summaryrefslogtreecommitdiff
path: root/drivers/mtd/maps
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/maps')
-rw-r--r--drivers/mtd/maps/Kconfig11
-rw-r--r--drivers/mtd/maps/Makefile1
-rw-r--r--drivers/mtd/maps/amd76xrom.c2
-rw-r--r--drivers/mtd/maps/ck804xrom.c2
-rw-r--r--drivers/mtd/maps/esb2rom.c2
-rw-r--r--drivers/mtd/maps/ichxrom.c2
-rw-r--r--drivers/mtd/maps/pci.c2
-rw-r--r--drivers/mtd/maps/pcmciamtd.c3
-rw-r--r--drivers/mtd/maps/physmap-bt1-rom.c125
-rw-r--r--drivers/mtd/maps/physmap-bt1-rom.h17
-rw-r--r--drivers/mtd/maps/physmap-core.c7
-rw-r--r--drivers/mtd/maps/physmap-gemini.c2
-rw-r--r--drivers/mtd/maps/pismo.c2
-rw-r--r--drivers/mtd/maps/plat-ram.c2
-rw-r--r--drivers/mtd/maps/pxa2xx-flash.c2
-rw-r--r--drivers/mtd/maps/sa1100-flash.c4
-rw-r--r--drivers/mtd/maps/sun_uflash.c2
-rw-r--r--drivers/mtd/maps/vmu-flash.c14
18 files changed, 21 insertions, 181 deletions
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 8a8b19874e23..99d5ff9a1fbe 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -75,17 +75,6 @@ config MTD_PHYSMAP_OF
physically into the CPU's memory. The mapping description here is
taken from OF device tree.
-config MTD_PHYSMAP_BT1_ROM
- bool "Baikal-T1 Boot ROMs OF-based physical memory map handling"
- depends on MTD_PHYSMAP_OF
- depends on MIPS_BAIKAL_T1 || COMPILE_TEST
- select MTD_COMPLEX_MAPPINGS
- select MULTIPLEXER
- select MUX_MMIO
- help
- This provides some extra DT physmap parsing for the Baikal-T1
- platforms, some detection and setting up ROMs-specific accessors.
-
config MTD_PHYSMAP_VERSATILE
bool "ARM Versatile OF-based physical memory map handling"
depends on MTD_PHYSMAP_OF
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index 019f1e92cc41..51af1d2ebd52 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -19,7 +19,6 @@ obj-$(CONFIG_MTD_TSUNAMI) += tsunami_flash.o
obj-$(CONFIG_MTD_PXA2XX) += pxa2xx-flash.o
obj-$(CONFIG_MTD_PHYSMAP) += physmap.o
physmap-y := physmap-core.o
-physmap-$(CONFIG_MTD_PHYSMAP_BT1_ROM) += physmap-bt1-rom.o
physmap-$(CONFIG_MTD_PHYSMAP_VERSATILE) += physmap-versatile.o
physmap-$(CONFIG_MTD_PHYSMAP_GEMINI) += physmap-gemini.o
physmap-$(CONFIG_MTD_PHYSMAP_IXP4XX) += physmap-ixp4xx.o
diff --git a/drivers/mtd/maps/amd76xrom.c b/drivers/mtd/maps/amd76xrom.c
index 281fcbaa74e7..95f9b99ce5fc 100644
--- a/drivers/mtd/maps/amd76xrom.c
+++ b/drivers/mtd/maps/amd76xrom.c
@@ -188,7 +188,7 @@ static int amd76xrom_init_one(struct pci_dev *pdev,
int i;
if (!map) {
- map = kmalloc(sizeof(*map), GFP_KERNEL);
+ map = kmalloc_obj(*map);
if (!map)
goto out;
}
diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c
index c0216bc740cc..5e44134caa8e 100644
--- a/drivers/mtd/maps/ck804xrom.c
+++ b/drivers/mtd/maps/ck804xrom.c
@@ -218,7 +218,7 @@ static int __init ck804xrom_init_one(struct pci_dev *pdev,
int i;
if (!map) {
- map = kmalloc(sizeof(*map), GFP_KERNEL);
+ map = kmalloc_obj(*map);
if (!map)
goto out;
}
diff --git a/drivers/mtd/maps/esb2rom.c b/drivers/mtd/maps/esb2rom.c
index 15d5b76ff504..fc7f2c3a62b0 100644
--- a/drivers/mtd/maps/esb2rom.c
+++ b/drivers/mtd/maps/esb2rom.c
@@ -278,7 +278,7 @@ static int __init esb2rom_init_one(struct pci_dev *pdev,
int i;
if (!map) {
- map = kmalloc(sizeof(*map), GFP_KERNEL);
+ map = kmalloc_obj(*map);
if (!map)
goto out;
}
diff --git a/drivers/mtd/maps/ichxrom.c b/drivers/mtd/maps/ichxrom.c
index c8b2793691db..6608b782149b 100644
--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -212,7 +212,7 @@ static int __init ichxrom_init_one(struct pci_dev *pdev,
int i;
if (!map) {
- map = kmalloc(sizeof(*map), GFP_KERNEL);
+ map = kmalloc_obj(*map);
if (!map)
goto out;
}
diff --git a/drivers/mtd/maps/pci.c b/drivers/mtd/maps/pci.c
index ca00d211e73e..4a84ca8aed40 100644
--- a/drivers/mtd/maps/pci.c
+++ b/drivers/mtd/maps/pci.c
@@ -264,7 +264,7 @@ static int mtd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
if (err)
goto out;
- map = kmalloc(sizeof(*map), GFP_KERNEL);
+ map = kmalloc_obj(*map);
err = -ENOMEM;
if (!map)
goto release;
diff --git a/drivers/mtd/maps/pcmciamtd.c b/drivers/mtd/maps/pcmciamtd.c
index 2ac79e1cedd9..a2e5a63e5d18 100644
--- a/drivers/mtd/maps/pcmciamtd.c
+++ b/drivers/mtd/maps/pcmciamtd.c
@@ -665,6 +665,7 @@ static void pcmciamtd_detach(struct pcmcia_device *link)
}
pcmciamtd_release(link);
+ kfree(dev);
}
@@ -673,7 +674,7 @@ static int pcmciamtd_probe(struct pcmcia_device *link)
struct pcmciamtd_dev *dev;
/* Create new memory card device */
- dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+ dev = kzalloc_obj(*dev);
if (!dev) return -ENOMEM;
pr_debug("dev=0x%p\n", dev);
diff --git a/drivers/mtd/maps/physmap-bt1-rom.c b/drivers/mtd/maps/physmap-bt1-rom.c
deleted file mode 100644
index 60dccc48f99e..000000000000
--- a/drivers/mtd/maps/physmap-bt1-rom.c
+++ /dev/null
@@ -1,125 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC
- *
- * Authors:
- * Serge Semin <Sergey.Semin@baikalelectronics.ru>
- *
- * Baikal-T1 Physically Mapped Internal ROM driver
- */
-#include <linux/bits.h>
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/mtd/map.h>
-#include <linux/mtd/xip.h>
-#include <linux/mux/consumer.h>
-#include <linux/of.h>
-#include <linux/platform_device.h>
-#include <linux/string.h>
-#include <linux/types.h>
-
-#include "physmap-bt1-rom.h"
-
-/*
- * Baikal-T1 SoC ROMs are only accessible by the dword-aligned instructions.
- * We have to take this into account when implementing the data read-methods.
- * Note there is no need in bothering with endianness, since both Baikal-T1
- * CPU and MMIO are LE.
- */
-static map_word __xipram bt1_rom_map_read(struct map_info *map,
- unsigned long ofs)
-{
- void __iomem *src = map->virt + ofs;
- unsigned int shift;
- map_word ret;
- u32 data;
-
- /* Read data within offset dword. */
- shift = (uintptr_t)src & 0x3;
- data = readl_relaxed(src - shift);
- if (!shift) {
- ret.x[0] = data;
- return ret;
- }
- ret.x[0] = data >> (shift * BITS_PER_BYTE);
-
- /* Read data from the next dword. */
- shift = 4 - shift;
- if (ofs + shift >= map->size)
- return ret;
-
- data = readl_relaxed(src + shift);
- ret.x[0] |= data << (shift * BITS_PER_BYTE);
-
- return ret;
-}
-
-static void __xipram bt1_rom_map_copy_from(struct map_info *map,
- void *to, unsigned long from,
- ssize_t len)
-{
- void __iomem *src = map->virt + from;
- unsigned int shift, chunk;
- u32 data;
-
- if (len <= 0 || from >= map->size)
- return;
-
- /* Make sure we don't go over the map limit. */
- len = min_t(ssize_t, map->size - from, len);
-
- /*
- * Since requested data size can be pretty big we have to implement
- * the copy procedure as optimal as possible. That's why it's split
- * up into the next three stages: unaligned head, aligned body,
- * unaligned tail.
- */
- shift = (uintptr_t)src & 0x3;
- if (shift) {
- chunk = min_t(ssize_t, 4 - shift, len);
- data = readl_relaxed(src - shift);
- memcpy(to, (char *)&data + shift, chunk);
- src += chunk;
- to += chunk;
- len -= chunk;
- }
-
- while (len >= 4) {
- data = readl_relaxed(src);
- memcpy(to, &data, 4);
- src += 4;
- to += 4;
- len -= 4;
- }
-
- if (len) {
- data = readl_relaxed(src);
- memcpy(to, &data, len);
- }
-}
-
-int of_flash_probe_bt1_rom(struct platform_device *pdev,
- struct device_node *np,
- struct map_info *map)
-{
- struct device *dev = &pdev->dev;
-
- /* It's supposed to be read-only MTD. */
- if (!of_device_is_compatible(np, "mtd-rom")) {
- dev_info(dev, "No mtd-rom compatible string\n");
- return 0;
- }
-
- /* Multiplatform guard. */
- if (!of_device_is_compatible(np, "baikal,bt1-int-rom"))
- return 0;
-
- /* Sanity check the device parameters retrieved from DTB. */
- if (map->bankwidth != 4)
- dev_warn(dev, "Bank width is supposed to be 32 bits wide\n");
-
- map->read = bt1_rom_map_read;
- map->copy_from = bt1_rom_map_copy_from;
-
- return 0;
-}
diff --git a/drivers/mtd/maps/physmap-bt1-rom.h b/drivers/mtd/maps/physmap-bt1-rom.h
deleted file mode 100644
index 6782899598a4..000000000000
--- a/drivers/mtd/maps/physmap-bt1-rom.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-#include <linux/mtd/map.h>
-#include <linux/of.h>
-
-#ifdef CONFIG_MTD_PHYSMAP_BT1_ROM
-int of_flash_probe_bt1_rom(struct platform_device *pdev,
- struct device_node *np,
- struct map_info *map);
-#else
-static inline
-int of_flash_probe_bt1_rom(struct platform_device *pdev,
- struct device_node *np,
- struct map_info *map)
-{
- return 0;
-}
-#endif
diff --git a/drivers/mtd/maps/physmap-core.c b/drivers/mtd/maps/physmap-core.c
index 2bd7a1af898c..dcda7685fc99 100644
--- a/drivers/mtd/maps/physmap-core.c
+++ b/drivers/mtd/maps/physmap-core.c
@@ -42,7 +42,6 @@
#include <linux/pm_runtime.h>
#include <linux/gpio/consumer.h>
-#include "physmap-bt1-rom.h"
#include "physmap-gemini.h"
#include "physmap-ixp4xx.h"
#include "physmap-versatile.h"
@@ -268,7 +267,7 @@ static const struct of_device_id of_flash_match[] = {
MODULE_DEVICE_TABLE(of, of_flash_match);
static const char * const of_default_part_probes[] = {
- "cmdlinepart", "RedBoot", "ofpart", "ofoldpart", NULL
+ "cmdlinepart", "ofpart", "ofoldpart", "RedBoot", NULL
};
static const char * const *of_get_part_probes(struct platform_device *dev)
@@ -365,10 +364,6 @@ static int physmap_flash_of_init(struct platform_device *dev)
info->maps[i].bankwidth = bankwidth;
info->maps[i].device_node = dp;
- err = of_flash_probe_bt1_rom(dev, dp, &info->maps[i]);
- if (err)
- return err;
-
err = of_flash_probe_gemini(dev, dp, &info->maps[i]);
if (err)
return err;
diff --git a/drivers/mtd/maps/physmap-gemini.c b/drivers/mtd/maps/physmap-gemini.c
index 9d3b4bf84a1a..1c34b4ef77ea 100644
--- a/drivers/mtd/maps/physmap-gemini.c
+++ b/drivers/mtd/maps/physmap-gemini.c
@@ -181,7 +181,7 @@ int of_flash_probe_gemini(struct platform_device *pdev,
dev_err(dev, "no enabled pin control state\n");
gf->disabled_state = pinctrl_lookup_state(gf->p, "disabled");
- if (IS_ERR(gf->enabled_state)) {
+ if (IS_ERR(gf->disabled_state)) {
dev_err(dev, "no disabled pin control state\n");
} else {
ret = pinctrl_select_state(gf->p, gf->disabled_state);
diff --git a/drivers/mtd/maps/pismo.c b/drivers/mtd/maps/pismo.c
index ecf68922da73..b0310fddcaa3 100644
--- a/drivers/mtd/maps/pismo.c
+++ b/drivers/mtd/maps/pismo.c
@@ -218,7 +218,7 @@ static int pismo_probe(struct i2c_client *client)
return -EIO;
}
- pismo = kzalloc(sizeof(*pismo), GFP_KERNEL);
+ pismo = kzalloc_obj(*pismo);
if (!pismo)
return -ENOMEM;
diff --git a/drivers/mtd/maps/plat-ram.c b/drivers/mtd/maps/plat-ram.c
index 1c541eaf477a..816111031cf1 100644
--- a/drivers/mtd/maps/plat-ram.c
+++ b/drivers/mtd/maps/plat-ram.c
@@ -109,7 +109,7 @@ static int platram_probe(struct platform_device *pdev)
pdata = dev_get_platdata(&pdev->dev);
- info = kzalloc(sizeof(*info), GFP_KERNEL);
+ info = kzalloc_obj(*info);
if (info == NULL) {
err = -ENOMEM;
goto exit_error;
diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c
index f27c25db6778..bc303a9909d4 100644
--- a/drivers/mtd/maps/pxa2xx-flash.c
+++ b/drivers/mtd/maps/pxa2xx-flash.c
@@ -51,7 +51,7 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
if (!res)
return -ENODEV;
- info = kzalloc(sizeof(struct pxa2xx_flash_info), GFP_KERNEL);
+ info = kzalloc_obj(struct pxa2xx_flash_info);
if (!info)
return -ENOMEM;
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c
index 6a54a84d0d9c..4506b27a905e 100644
--- a/drivers/mtd/maps/sa1100-flash.c
+++ b/drivers/mtd/maps/sa1100-flash.c
@@ -170,7 +170,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
/*
* Allocate the map_info structs in one go.
*/
- info = kzalloc(struct_size(info, subdev, nr), GFP_KERNEL);
+ info = kzalloc_flex(*info, subdev, nr);
if (!info) {
ret = -ENOMEM;
goto out;
@@ -222,7 +222,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
} else if (info->num_subdev > 1) {
struct mtd_info **cdev;
- cdev = kmalloc_array(nr, sizeof(*cdev), GFP_KERNEL);
+ cdev = kmalloc_objs(*cdev, nr);
if (!cdev) {
ret = -ENOMEM;
goto err;
diff --git a/drivers/mtd/maps/sun_uflash.c b/drivers/mtd/maps/sun_uflash.c
index ea3aa026b55b..cac780cd23f9 100644
--- a/drivers/mtd/maps/sun_uflash.c
+++ b/drivers/mtd/maps/sun_uflash.c
@@ -61,7 +61,7 @@ static int uflash_devinit(struct platform_device *op, struct device_node *dp)
return -ENODEV;
}
- up = kzalloc(sizeof(struct uflash_dev), GFP_KERNEL);
+ up = kzalloc_obj(struct uflash_dev);
if (!up)
return -ENOMEM;
diff --git a/drivers/mtd/maps/vmu-flash.c b/drivers/mtd/maps/vmu-flash.c
index 53019d313db7..75e06d249ce9 100644
--- a/drivers/mtd/maps/vmu-flash.c
+++ b/drivers/mtd/maps/vmu-flash.c
@@ -73,7 +73,7 @@ static struct vmu_block *ofs_to_block(unsigned long src_ofs,
if (num > card->parts[partition].numblocks)
goto failed;
- vblock = kmalloc(sizeof(struct vmu_block), GFP_KERNEL);
+ vblock = kmalloc_obj(struct vmu_block);
if (!vblock)
goto failed;
@@ -539,7 +539,7 @@ static void vmu_queryblocks(struct mapleq *mq)
mtd_cur->_sync = vmu_flash_sync;
mtd_cur->writesize = card->blocklen;
- mpart = kmalloc(sizeof(struct mdev_part), GFP_KERNEL);
+ mpart = kmalloc_obj(struct mdev_part);
if (!mpart)
goto fail_mpart;
@@ -548,7 +548,7 @@ static void vmu_queryblocks(struct mapleq *mq)
mtd_cur->priv = mpart;
mtd_cur->owner = THIS_MODULE;
- pcache = kzalloc(sizeof(struct vmu_cache), GFP_KERNEL);
+ pcache = kzalloc_obj(struct vmu_cache);
if (!pcache)
goto fail_cache_create;
part_cur->pcache = pcache;
@@ -609,7 +609,7 @@ static int vmu_connect(struct maple_device *mdev)
basic_flash_data = be32_to_cpu(mdev->devinfo.function_data[c - 1]);
- card = kmalloc(sizeof(struct memcard), GFP_KERNEL);
+ card = kmalloc_obj(struct memcard);
if (!card) {
error = -ENOMEM;
goto fail_nomem;
@@ -627,15 +627,13 @@ static int vmu_connect(struct maple_device *mdev)
* Not sure there are actually any multi-partition devices in the
* real world, but the hardware supports them, so, so will we
*/
- card->parts = kmalloc_array(card->partitions, sizeof(struct vmupart),
- GFP_KERNEL);
+ card->parts = kmalloc_objs(struct vmupart, card->partitions);
if (!card->parts) {
error = -ENOMEM;
goto fail_partitions;
}
- card->mtd = kmalloc_array(card->partitions, sizeof(struct mtd_info),
- GFP_KERNEL);
+ card->mtd = kmalloc_objs(struct mtd_info, card->partitions);
if (!card->mtd) {
error = -ENOMEM;
goto fail_mtd_info;