mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 18:47:06 +00:00
9261e7447e
This makes the patches which were just copied in the previous commit apply on top of kernel 4.19. The patches in the backports-4.19 folder were checked if they are really in kernel 4.19 based on the title and only removed if they were found in the upstream kernel. The following additional patches form the pending folder went into upstream Linux 4.19: pending-4.19/171-usb-dwc2-Fix-inefficient-copy-of-unaligned-buffers.patch pending-4.19/190-2-5-e1000e-Fix-wrong-comment-related-to-link-detection.patch pending-4.19/478-mtd-spi-nor-Add-support-for-XM25QH64A-and-XM25QH128A.patch pending-4.19/479-mtd-spi-nor-add-eon-en25qh32.patch pending-4.19/950-tty-serial-exar-generalize-rs485-setup.patch pending-4.19/340-MIPS-mm-remove-mips_dma_mapping_error.patch Bigger changes were introduced to the m25p80 spi nor driver, as far as I saw it in the new code, it now has the functionality provided in this patch: pending-4.19/450-mtd-m25p80-allow-fallback-from-spi_flash_read-to-reg.patch Part of this patch went upstream independent of OpenWrt: hack-4.19/220-gc_sections.patch This patch was reworked to match the changes done upstream. The MIPS DMA API changed a lot, this patch was rewritten to match the new DMA handling: pending-4.19/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch I did bigger manual changes to the following patches and I am not 100% sure if they are all correct: pending-4.19/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch pending-4.19/411-mtd-partial_eraseblock_write.patch pending-4.19/600-netfilter_conntrack_flush.patch pending-4.19/611-netfilter_match_bypass_default_table.patch pending-4.19/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch hack-4.19/211-host_tools_portability.patch hack-4.19/221-module_exports.patch hack-4.19/321-powerpc_crtsavres_prereq.patch hack-4.19/902-debloat_proc.patch This is based on patchset from Marko Ratkaj <marko.ratkaj@sartura.hr> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
117 lines
3.5 KiB
Diff
117 lines
3.5 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Subject: block2mtd
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
drivers/mtd/devices/block2mtd.c | 30 ++++++++++++++++++++----------
|
|
1 file changed, 20 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/mtd/devices/block2mtd.c
|
|
+++ b/drivers/mtd/devices/block2mtd.c
|
|
@@ -26,6 +26,7 @@
|
|
#include <linux/list.h>
|
|
#include <linux/init.h>
|
|
#include <linux/mtd/mtd.h>
|
|
+#include <linux/mtd/partitions.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/mount.h>
|
|
#include <linux/slab.h>
|
|
@@ -214,7 +215,7 @@ static void block2mtd_free_device(struct
|
|
|
|
|
|
static struct block2mtd_dev *add_device(char *devname, int erase_size,
|
|
- int timeout)
|
|
+ const char *mtdname, int timeout)
|
|
{
|
|
#ifndef MODULE
|
|
int i;
|
|
@@ -222,6 +223,7 @@ static struct block2mtd_dev *add_device(
|
|
const fmode_t mode = FMODE_READ | FMODE_WRITE | FMODE_EXCL;
|
|
struct block_device *bdev;
|
|
struct block2mtd_dev *dev;
|
|
+ struct mtd_partition *part;
|
|
char *name;
|
|
|
|
if (!devname)
|
|
@@ -278,13 +280,16 @@ static struct block2mtd_dev *add_device(
|
|
|
|
/* Setup the MTD structure */
|
|
/* make the name contain the block device in */
|
|
- name = kasprintf(GFP_KERNEL, "block2mtd: %s", devname);
|
|
+ if (!mtdname)
|
|
+ mtdname = devname;
|
|
+ name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
|
|
if (!name)
|
|
goto err_destroy_mutex;
|
|
|
|
+ strcpy(name, mtdname);
|
|
dev->mtd.name = name;
|
|
|
|
- dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
|
|
+ dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
|
|
dev->mtd.erasesize = erase_size;
|
|
dev->mtd.writesize = 1;
|
|
dev->mtd.writebufsize = PAGE_SIZE;
|
|
@@ -297,7 +302,11 @@ static struct block2mtd_dev *add_device(
|
|
dev->mtd.priv = dev;
|
|
dev->mtd.owner = THIS_MODULE;
|
|
|
|
- if (mtd_device_register(&dev->mtd, NULL, 0)) {
|
|
+ part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
|
|
+ part->name = name;
|
|
+ part->offset = 0;
|
|
+ part->size = dev->mtd.size;
|
|
+ if (mtd_device_register(&dev->mtd, part, 1)) {
|
|
/* Device didn't get added, so free the entry */
|
|
goto err_destroy_mutex;
|
|
}
|
|
@@ -305,8 +314,7 @@ static struct block2mtd_dev *add_device(
|
|
list_add(&dev->list, &blkmtd_device_list);
|
|
pr_info("mtd%d: [%s] erase_size = %dKiB [%d]\n",
|
|
dev->mtd.index,
|
|
- dev->mtd.name + strlen("block2mtd: "),
|
|
- dev->mtd.erasesize >> 10, dev->mtd.erasesize);
|
|
+ mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
|
|
return dev;
|
|
|
|
err_destroy_mutex:
|
|
@@ -379,7 +387,7 @@ static int block2mtd_setup2(const char *
|
|
/* 80 for device, 12 for erase size, 80 for name, 8 for timeout */
|
|
char buf[80 + 12 + 80 + 8];
|
|
char *str = buf;
|
|
- char *token[2];
|
|
+ char *token[3];
|
|
char *name;
|
|
size_t erase_size = PAGE_SIZE;
|
|
unsigned long timeout = MTD_DEFAULT_TIMEOUT;
|
|
@@ -393,7 +401,7 @@ static int block2mtd_setup2(const char *
|
|
strcpy(str, val);
|
|
kill_final_newline(str);
|
|
|
|
- for (i = 0; i < 2; i++)
|
|
+ for (i = 0; i < 3; i++)
|
|
token[i] = strsep(&str, ",");
|
|
|
|
if (str) {
|
|
@@ -419,8 +427,10 @@ static int block2mtd_setup2(const char *
|
|
return 0;
|
|
}
|
|
}
|
|
+ if (token[2] && (strlen(token[2]) + 1 > 80))
|
|
+ pr_err("mtd device name too long\n");
|
|
|
|
- add_device(name, erase_size, timeout);
|
|
+ add_device(name, erase_size, token[2], timeout);
|
|
|
|
return 0;
|
|
}
|
|
@@ -454,7 +464,7 @@ static int block2mtd_setup(const char *v
|
|
|
|
|
|
module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
|
|
-MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
|
|
+MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
|
|
|
|
static int __init block2mtd_init(void)
|
|
{
|