This patch bumps the 4.4 kernel from .28 to .30 and refreshes the patches.
Compile-tested on ar71xx, x86/64, ramips/mt7621, brcm47xx and kirkwood.
Run-tested on ar71xx & ramips/mt7621, brcm47xx and kirkwood (last two confirmed
by P. Wassi).
Signed-off-by: Stijn Segers <francesco.borromini@inventati.org>
LINUX_VERSION-3.18 = .43
LINUX_VERSION-4.1 = .34
-LINUX_VERSION-4.4 = .28
+LINUX_VERSION-4.4 = .30
LINUX_KERNEL_MD5SUM-3.18.43 = b1faeb4a2e1e70ffe061bdbb3452840a
LINUX_KERNEL_MD5SUM-4.1.34 = fba99f0f4765ebf01033e69518740a3c
-LINUX_KERNEL_MD5SUM-4.4.28 = 841acb9109a893ab2f60b02355e1527e80fa09251e46339317f6984d69b1f4fc
+LINUX_KERNEL_MD5SUM-4.4.30 = 9d249133bd12dde04f434bb4a5a4a23dd42ead721803c0ba4b5742efd239995c
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -873,6 +873,18 @@ static const struct flash_info *spi_nor_
+@@ -874,6 +874,18 @@ static const struct flash_info *spi_nor_
}
dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %2x, %2x\n",
id[0], id[1], id[2]);
spifi->nor.write = nxp_spifi_write;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1111,7 +1111,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1112,7 +1112,7 @@ int spi_nor_scan(struct spi_nor *nor, co
const struct flash_info *info = NULL;
struct device *dev = nor->dev;
struct mtd_info *mtd = &nor->mtd;
-out_free_link:
if (link)
free_page((unsigned long) link);
-
+
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -408,28 +408,13 @@ static int ovl_create_or_link(struct den
---- a/drivers/mtd/spi-nor/spi-nor.c 2016-10-09 00:34:19.206155838 +0200
-+++ b/drivers/mtd/spi-nor/spi-nor.c 2016-10-09 00:37:11.048495602 +0200
+--- a/drivers/mtd/spi-nor/spi-nor.c
++++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -721,6 +721,7 @@ static const struct flash_info spi_nor_i
{ "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, SECT_4K) },
{ "mx25l3255e", INFO(0xc29e16, 0, 64 * 1024, 64, SECT_4K) },
+MODULE_AUTHOR("LXDB");
+MODULE_DESCRIPTION("Software Watchdog For VPE1");
+MODULE_LICENSE("GPL");
-
--- a/arch/mips/lantiq/Makefile
+++ b/arch/mips/lantiq/Makefile
@@ -6,6 +6,8 @@
--- a/arch/mips/lantiq/prom.c
+++ b/arch/mips/lantiq/prom.c
-@@ -74,8 +74,8 @@ void __init plat_mem_setup(void)
+@@ -78,8 +78,8 @@ void __init plat_mem_setup(void)
set_io_port_base((unsigned long) KSEG1);
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1217,6 +1217,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1218,6 +1218,7 @@ int spi_nor_scan(struct spi_nor *nor, co
mtd->flags |= MTD_NO_ERASE;
mtd->dev.parent = dev;
spifi->nor.write = nxp_spifi_write;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1111,7 +1111,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1112,7 +1112,7 @@ int spi_nor_scan(struct spi_nor *nor, co
const struct flash_info *info = NULL;
struct device *dev = nor->dev;
struct mtd_info *mtd = &nor->mtd;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1217,7 +1217,6 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1218,7 +1218,6 @@ int spi_nor_scan(struct spi_nor *nor, co
mtd->flags |= MTD_NO_ERASE;
mtd->dev.parent = dev;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -860,7 +860,7 @@ static const struct flash_info *spi_nor_
+@@ -861,7 +861,7 @@ static const struct flash_info *spi_nor_
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
if (tmp < 0) {
addr += mtd->erasesize;
len -= mtd->erasesize;
-@@ -1098,7 +1121,7 @@ static int set_quad_mode(struct spi_nor
+@@ -1099,7 +1122,7 @@ static int set_quad_mode(struct spi_nor
static int spi_nor_check(struct spi_nor *nor)
{
if (!nor->dev || !nor->read || !nor->write ||
pr_err("spi-nor: please fill all the necessary fields!\n");
return -EINVAL;
}
-@@ -1299,6 +1322,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1300,6 +1323,12 @@ int spi_nor_scan(struct spi_nor *nor, co
nor->addr_width = 3;
}
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -894,7 +894,7 @@ static const struct flash_info *spi_nor_
+@@ -895,7 +895,7 @@ static const struct flash_info *spi_nor_
return &spi_nor_ids[tmp];
}
}
/* Cannot unlock; would unlock larger region than requested */
if (stm_is_locked_sr(nor, ofs - mtd->erasesize, mtd->erasesize,
-@@ -1036,6 +1040,8 @@ static int macronix_quad_enable(struct s
+@@ -1037,6 +1041,8 @@ static int macronix_quad_enable(struct s
int ret, val;
val = read_sr(nor);
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1139,6 +1139,26 @@ static int spi_nor_check(struct spi_nor
+@@ -1140,6 +1140,26 @@ static int spi_nor_check(struct spi_nor
return 0;
}
int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
{
const struct flash_info *info = NULL;
-@@ -1186,18 +1206,9 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1187,18 +1207,9 @@ int spi_nor_scan(struct spi_nor *nor, co
mutex_init(&nor->lock);
if (!mtd->name)
mtd->name = dev_name(dev);
-@@ -1363,6 +1374,45 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1364,6 +1375,45 @@ int spi_nor_scan(struct spi_nor *nor, co
}
EXPORT_SYMBOL_GPL(spi_nor_scan);
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -922,7 +922,10 @@ static int spi_nor_read(struct mtd_info
+@@ -923,7 +923,10 @@ static int spi_nor_read(struct mtd_info
ret = nor->read(nor, from, len, retlen, buf);
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
}
static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
-@@ -948,10 +951,14 @@ static int sst_write(struct mtd_info *mt
+@@ -949,10 +952,14 @@ static int sst_write(struct mtd_info *mt
nor->program_opcode = SPINOR_OP_BP;
/* write one byte. */
}
to += actual;
-@@ -960,10 +967,14 @@ static int sst_write(struct mtd_info *mt
+@@ -961,10 +968,14 @@ static int sst_write(struct mtd_info *mt
nor->program_opcode = SPINOR_OP_AAI_WP;
/* write two bytes. */
to += 2;
nor->sst_write_second = true;
}
-@@ -972,21 +983,24 @@ static int sst_write(struct mtd_info *mt
+@@ -973,21 +984,24 @@ static int sst_write(struct mtd_info *mt
write_disable(nor);
ret = spi_nor_wait_till_ready(nor);
if (ret)
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
return ret;
}
-@@ -1015,14 +1029,18 @@ static int spi_nor_write(struct mtd_info
+@@ -1016,14 +1030,18 @@ static int spi_nor_write(struct mtd_info
/* do all the bytes fit onto one page? */
if (page_offset + len <= nor->page_size) {
page_size = len - i;
if (page_size > nor->page_size)
page_size = nor->page_size;
-@@ -1033,7 +1051,11 @@ static int spi_nor_write(struct mtd_info
+@@ -1034,7 +1052,11 @@ static int spi_nor_write(struct mtd_info
write_enable(nor);
u8 cmd = nor->read_opcode;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -919,12 +919,13 @@ static int spi_nor_read(struct mtd_info
+@@ -920,12 +920,13 @@ static int spi_nor_read(struct mtd_info
if (ret)
return ret;
return 0;
}
-@@ -951,7 +952,7 @@ static int sst_write(struct mtd_info *mt
+@@ -952,7 +953,7 @@ static int sst_write(struct mtd_info *mt
nor->program_opcode = SPINOR_OP_BP;
/* write one byte. */
if (ret < 0)
goto sst_write_err;
WARN(ret != 1, "While writing 1 byte written %i bytes\n",
-@@ -967,7 +968,7 @@ static int sst_write(struct mtd_info *mt
+@@ -968,7 +969,7 @@ static int sst_write(struct mtd_info *mt
nor->program_opcode = SPINOR_OP_AAI_WP;
/* write two bytes. */
if (ret < 0)
goto sst_write_err;
WARN(ret != 2, "While writing 2 bytes written %i bytes\n",
-@@ -990,7 +991,7 @@ static int sst_write(struct mtd_info *mt
+@@ -991,7 +992,7 @@ static int sst_write(struct mtd_info *mt
write_enable(nor);
nor->program_opcode = SPINOR_OP_BP;
if (ret < 0)
goto sst_write_err;
WARN(ret != 1, "While writing 1 byte written %i bytes\n",
-@@ -999,8 +1000,10 @@ static int sst_write(struct mtd_info *mt
+@@ -1000,8 +1001,10 @@ static int sst_write(struct mtd_info *mt
if (ret)
goto sst_write_err;
write_disable(nor);
spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
return ret;
}
-@@ -1029,15 +1032,17 @@ static int spi_nor_write(struct mtd_info
+@@ -1030,15 +1033,17 @@ static int spi_nor_write(struct mtd_info
/* do all the bytes fit onto one page? */
if (page_offset + len <= nor->page_size) {
/* write everything in nor->page_size chunks */
for (i = ret; i < len; ) {
-@@ -1051,10 +1056,10 @@ static int spi_nor_write(struct mtd_info
+@@ -1052,10 +1057,10 @@ static int spi_nor_write(struct mtd_info
write_enable(nor);
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1017,8 +1017,8 @@ static int spi_nor_write(struct mtd_info
+@@ -1018,8 +1018,8 @@ static int spi_nor_write(struct mtd_info
size_t *retlen, const u_char *buf)
{
struct spi_nor *nor = mtd_to_spi_nor(mtd);
dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
-@@ -1026,45 +1026,37 @@ static int spi_nor_write(struct mtd_info
+@@ -1027,45 +1027,37 @@ static int spi_nor_write(struct mtd_info
if (ret)
return ret;
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -919,14 +919,22 @@ static int spi_nor_read(struct mtd_info
+@@ -920,14 +920,22 @@ static int spi_nor_read(struct mtd_info
if (ret)
return ret;
struct flash_info {
char *name;
-@@ -1237,6 +1238,14 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1238,6 +1239,14 @@ int spi_nor_scan(struct spi_nor *nor, co
if (ret)
return ret;
static const struct flash_info *spi_nor_match_id(const char *name);
-@@ -784,6 +790,7 @@ static const struct flash_info spi_nor_i
+@@ -785,6 +791,7 @@ static const struct flash_info spi_nor_i
*/
{ "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25sl064p", INFO(0x010216, 0x4d00, 64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
{ "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-@@ -908,6 +915,53 @@ static const struct flash_info *spi_nor_
+@@ -909,6 +916,53 @@ static const struct flash_info *spi_nor_
return ERR_PTR(-ENODEV);
}
static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
size_t *retlen, u_char *buf)
{
-@@ -1246,6 +1300,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1247,6 +1301,12 @@ int spi_nor_scan(struct spi_nor *nor, co
write_sr(nor, ret);
}
case SPI_NOR_NORMAL:
return 0;
}
-@@ -797,7 +802,8 @@ static const struct flash_info spi_nor_i
+@@ -798,7 +803,8 @@ static const struct flash_info spi_nor_i
{ "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) },
{ "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) },
{ "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl129p1", INFO(0x012018, 0x4d01, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25sl004a", INFO(0x010212, 0, 64 * 1024, 8, 0) },
-@@ -1186,6 +1192,23 @@ static int spansion_quad_enable(struct s
+@@ -1187,6 +1193,23 @@ static int spansion_quad_enable(struct s
return 0;
}
static int set_quad_mode(struct spi_nor *nor, const struct flash_info *info)
{
int status;
-@@ -1375,8 +1398,15 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1376,8 +1399,15 @@ int spi_nor_scan(struct spi_nor *nor, co
if (info->flags & SPI_NOR_NO_FR)
nor->flash_read = SPI_NOR_NORMAL;
ret = set_quad_mode(nor, info);
if (ret) {
dev_err(dev, "quad mode not supported\n");
-@@ -1389,6 +1419,14 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1390,6 +1420,14 @@ int spi_nor_scan(struct spi_nor *nor, co
/* Default commands */
switch (nor->flash_read) {
case SPI_NOR_QUAD:
nor->read_opcode = SPINOR_OP_READ_1_1_4;
break;
-@@ -1416,6 +1454,9 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1417,6 +1455,9 @@ int spi_nor_scan(struct spi_nor *nor, co
if (JEDEC_MFR(info) == SNOR_MFR_SPANSION) {
/* Dedicated 4-byte command set */
switch (nor->flash_read) {
case SPI_NOR_QUAD:
nor->read_opcode = SPINOR_OP_READ4_1_1_4;
break;
-@@ -1445,7 +1486,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1446,7 +1487,7 @@ int spi_nor_scan(struct spi_nor *nor, co
return -EINVAL;
}
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -796,6 +796,7 @@ static const struct flash_info spi_nor_i
+@@ -797,6 +797,7 @@ static const struct flash_info spi_nor_i
{ "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25sl064p", INFO(0x010216, 0x4d00, 64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fs256s1", INFO6(0x010219, 0x4d0181, 64 * 1024, 512, 0)},
{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
{ "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-@@ -962,9 +963,11 @@ static int spansion_s25fs_disable_4kb_er
+@@ -963,9 +964,11 @@ static int spansion_s25fs_disable_4kb_er
ret = nor->read_reg(nor, SPINOR_OP_SPANSION_RDAR, &cr3v, 1);
if (ret)
return ret;
* Used for Spansion S25FS-S family flash only.
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -796,7 +796,6 @@ static const struct flash_info spi_nor_i
+@@ -797,7 +797,6 @@ static const struct flash_info spi_nor_i
{ "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25sl064p", INFO(0x010216, 0x4d00, 64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fs256s1", INFO6(0x010219, 0x4d0181, 64 * 1024, 512, 0)},
{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
{ "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
-@@ -963,11 +962,9 @@ static int spansion_s25fs_disable_4kb_er
+@@ -964,11 +963,9 @@ static int spansion_s25fs_disable_4kb_er
ret = nor->read_reg(nor, SPINOR_OP_SPANSION_RDAR, &cr3v, 1);
if (ret)
return ret;
return 0;
}
-@@ -1334,6 +1331,8 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1335,6 +1332,8 @@ int spi_nor_scan(struct spi_nor *nor, co
if (!mtd->name)
mtd->name = dev_name(dev);
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -802,7 +802,7 @@ static const struct flash_info spi_nor_i
+@@ -803,7 +803,7 @@ static const struct flash_info spi_nor_i
{ "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) },
{ "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) },
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
-@@ -1148,7 +1149,6 @@ bad_args:
+@@ -1152,7 +1153,6 @@ bad_args:
}
#ifdef CONFIG_PPC
This option is overridden by CONFIG_RELOCATABLE
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
-@@ -224,6 +224,23 @@ config SGI_XP
+@@ -236,6 +236,23 @@ config SGI_XP
this feature will allow for direct communication between SSIs
based on a network adapter and DMA messaging.
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -281,12 +281,13 @@ config GPIO_MPC5200
+@@ -282,12 +282,13 @@ config GPIO_MPC5200
depends on PPC_MPC52xx
config GPIO_MPC8XXX
.compat = "fsl,ls1043a-clockgen",
.init_periph = t2080_init_periph,
.cmux_groups = {
-@@ -1268,6 +1286,7 @@ CLK_OF_DECLARE(qoriq_clockgen_2, "fsl,qo
+@@ -1272,6 +1290,7 @@ CLK_OF_DECLARE(qoriq_clockgen_2, "fsl,qo
CLK_OF_DECLARE(qoriq_clockgen_ls1021a, "fsl,ls1021a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls1043a, "fsl,ls1043a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls2080a, "fsl,ls2080a-clockgen", clockgen_init);
}
/*
-@@ -735,8 +868,8 @@ static const struct flash_info spi_nor_i
+@@ -736,8 +869,8 @@ static const struct flash_info spi_nor_i
{ "n25q032a", INFO(0x20bb16, 0, 64 * 1024, 64, SPI_NOR_QUAD_READ) },
{ "n25q064", INFO(0x20ba17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
{ "n25q064a", INFO(0x20bb17, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_QUAD_READ) },
{ "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_QUAD_READ) },
{ "n25q512a", INFO(0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
{ "n25q512ax3", INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
-@@ -770,6 +903,7 @@ static const struct flash_info spi_nor_i
+@@ -771,6 +904,7 @@ static const struct flash_info spi_nor_i
{ "s25fl008k", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
{ "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
{ "s25fl132k", INFO(0x014016, 0, 64 * 1024, 64, SECT_4K) },
{ "s25fl164k", INFO(0x014017, 0, 64 * 1024, 128, SECT_4K) },
{ "s25fl204k", INFO(0x014013, 0, 64 * 1024, 8, SECT_4K | SPI_NOR_DUAL_READ) },
-@@ -833,11 +967,23 @@ static const struct flash_info spi_nor_i
+@@ -834,11 +968,23 @@ static const struct flash_info spi_nor_i
{ "w25x16", INFO(0xef3015, 0, 64 * 1024, 32, SECT_4K) },
{ "w25x32", INFO(0xef3016, 0, 64 * 1024, 64, SECT_4K) },
{ "w25q32", INFO(0xef4016, 0, 64 * 1024, 64, SECT_4K) },
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
-@@ -860,7 +1006,7 @@ static const struct flash_info *spi_nor_
+@@ -861,7 +1007,7 @@ static const struct flash_info *spi_nor_
tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
if (tmp < 0) {
return ERR_PTR(tmp);
}
-@@ -871,7 +1017,7 @@ static const struct flash_info *spi_nor_
+@@ -872,7 +1018,7 @@ static const struct flash_info *spi_nor_
return &spi_nor_ids[tmp];
}
}
id[0], id[1], id[2]);
return ERR_PTR(-ENODEV);
}
-@@ -1017,6 +1163,8 @@ static int macronix_quad_enable(struct s
+@@ -1018,6 +1164,8 @@ static int macronix_quad_enable(struct s
int ret, val;
val = read_sr(nor);
write_enable(nor);
write_sr(nor, val | SR_QUAD_EN_MX);
-@@ -1098,7 +1246,7 @@ static int set_quad_mode(struct spi_nor
+@@ -1099,7 +1247,7 @@ static int set_quad_mode(struct spi_nor
static int spi_nor_check(struct spi_nor *nor)
{
if (!nor->dev || !nor->read || !nor->write ||
pr_err("spi-nor: please fill all the necessary fields!\n");
return -EINVAL;
}
-@@ -1111,7 +1259,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1112,7 +1260,7 @@ int spi_nor_scan(struct spi_nor *nor, co
const struct flash_info *info = NULL;
struct device *dev = nor->dev;
struct mtd_info *mtd = &nor->mtd;
int ret;
int i;
-@@ -1161,9 +1309,11 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1162,9 +1310,11 @@ int spi_nor_scan(struct spi_nor *nor, co
if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
JEDEC_MFR(info) == SNOR_MFR_INTEL ||
JEDEC_MFR(info) == SNOR_MFR_MACRONIX ||
}
if (!mtd->name)
-@@ -1177,7 +1327,8 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1178,7 +1328,8 @@ int spi_nor_scan(struct spi_nor *nor, co
mtd->_read = spi_nor_read;
/* NOR protection support for STmicro/Micron chips and similar */
nor->flash_lock = stm_lock;
nor->flash_unlock = stm_unlock;
nor->flash_is_locked = stm_is_locked;
-@@ -1197,6 +1348,8 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1198,6 +1349,8 @@ int spi_nor_scan(struct spi_nor *nor, co
if (info->flags & USE_FSR)
nor->flags |= SNOR_F_USE_FSR;
#ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
/* prefer "small sector" erase if possible */
-@@ -1299,6 +1452,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1300,6 +1453,12 @@ int spi_nor_scan(struct spi_nor *nor, co
nor->addr_width = 3;
}
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -749,6 +749,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
- armada-385-linksys-caiman.dtb \
+@@ -750,6 +750,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
armada-385-linksys-cobra.dtb \
+ armada-385-linksys-rango.dtb \
armada-385-linksys-shelby.dtb \
+ armada-388-clearfog.dtb \
armada-388-db.dtb \
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
-@@ -1012,6 +1012,66 @@ write_err:
+@@ -1013,6 +1013,66 @@ write_err:
return ret;
}
static int macronix_quad_enable(struct spi_nor *nor)
{
int ret, val;
-@@ -1190,10 +1250,12 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1191,10 +1251,12 @@ int spi_nor_scan(struct spi_nor *nor, co
}
/* sst nor chips use AAI word program */
if (info->flags & USE_FSR)
nor->flags |= SNOR_F_USE_FSR;
-@@ -1221,11 +1283,20 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -1222,11 +1284,20 @@ int spi_nor_scan(struct spi_nor *nor, co
mtd->writebufsize = nor->page_size;
if (np) {