kernel: bump to 4.9.249, 4.14.213, 4.19.164

Remove upstreamed:
 - generic/pending-4.14/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch
 - generic/pending-4.9/499-mtd-parser-cmdline-Fix-parsing-of-part-names-with-co.patch
 - ipq806x/patches-4.14/0071-2-PCI-qcom-Fixed-IPQ806x-PCIE-reset-changes.patch
 - ipq806x/patches-4.19/0071-2-PCI-qcom-Fixed-IPQ806x-PCIE-reset-changes.patch

Resolve conflicted:
 - generic/pending-4.19/611-netfilter_match_bypass_default_table.patch
 - ipq40xx/patches-4.19/995-ipq40xx-unlock-cpu-frequency.patch

Signed-off-by: CN_SZTL <cnsztl@project-openwrt.eu.org>
This commit is contained in:
CN_SZTL 2020-12-31 20:56:25 +08:00
parent ed2d813126
commit 74969cab15
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
49 changed files with 86 additions and 352 deletions

View File

@ -6,13 +6,13 @@ ifdef CONFIG_TESTING_KERNEL
KERNEL_PATCHVER:=$(KERNEL_TESTING_PATCHVER)
endif
LINUX_VERSION-4.9 = .248
LINUX_VERSION-4.14 = .212
LINUX_VERSION-4.19 = .163
LINUX_VERSION-4.9 = .249
LINUX_VERSION-4.14 = .213
LINUX_VERSION-4.19 = .164
LINUX_KERNEL_HASH-4.9.248 = 4687268061c9933c298b30d28e4bf1a30dfbab7c0da4bee194968e4f81ffeccf
LINUX_KERNEL_HASH-4.14.212 = 0e1bc32c4842c3bbee3a15454408f528acd4d3c5e83312b93008d5ee2e9a0c79
LINUX_KERNEL_HASH-4.19.163 = 3eeec4e5eb8a129be3536357ecb028fae7d82fac933dcfac0b6089ee398fc5fc
LINUX_KERNEL_HASH-4.9.249 = b1f38696ff5bce89e1d8248126aa2a8ce5b19100efdd68f1d335a9f736e04c4e
LINUX_KERNEL_HASH-4.14.213 = fd7bcedb79feb1378b89b257e68bfb86cb0aeb23380808c6a7e84a12e8ec2a1d
LINUX_KERNEL_HASH-4.19.164 = e5fa3ab5364d4080cfcf7e0cfb054ade124f20e185fd7809506424dc3c74aaaa
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))

View File

@ -30,7 +30,7 @@ Signed-off-by: Sungbo Eo <mans0n@gorani.run>
uport->cons->cflag = 0;
}
/*
@@ -2072,8 +2074,10 @@ uart_set_options(struct uart_port *port,
@@ -2076,8 +2078,10 @@ uart_set_options(struct uart_port *port,
* Allow the setting of the UART parameters with a NULL console
* too:
*/

View File

@ -30,7 +30,7 @@ Signed-off-by: Sungbo Eo <mans0n@gorani.run>
uport->cons->cflag = 0;
}
/*
@@ -2055,8 +2057,10 @@ uart_set_options(struct uart_port *port,
@@ -2059,8 +2061,10 @@ uart_set_options(struct uart_port *port,
* Allow the setting of the UART parameters with a NULL console
* too:
*/

View File

@ -212,7 +212,7 @@
+MODULE_ALIAS("platform:" DRIVER_NAME);
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1647,6 +1647,13 @@ config PIC32_DMT
@@ -1648,6 +1648,13 @@ config PIC32_DMT
To compile this driver as a loadable module, choose M here.
The module will be called pic32-dmt.

View File

@ -30,7 +30,7 @@ Signed-off-by: Sungbo Eo <mans0n@gorani.run>
uport->cons->cflag = 0;
}
/*
@@ -2072,8 +2074,10 @@ uart_set_options(struct uart_port *port,
@@ -2076,8 +2078,10 @@ uart_set_options(struct uart_port *port,
* Allow the setting of the UART parameters with a NULL console
* too:
*/

View File

@ -728,7 +728,7 @@
EXPORT_SYMBOL(xfrm_parse_spi);
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3907,14 +3907,16 @@ static bool tcp_parse_aligned_timestamp(
@@ -3908,14 +3908,16 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);

View File

@ -11,7 +11,7 @@ other with conf_req and conf_rsp messages, in a demented game of tag.
--- a/drivers/bluetooth/hci_h5.c
+++ b/drivers/bluetooth/hci_h5.c
@@ -352,7 +352,8 @@ static void h5_handle_internal_rx(struct
@@ -355,7 +355,8 @@ static void h5_handle_internal_rx(struct
h5_link_control(hu, conf_req, 3);
} else if (memcmp(data, conf_req, 2) == 0) {
h5_link_control(hu, conf_rsp, 2);

View File

@ -19,7 +19,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -745,7 +745,9 @@ static void spi_set_cs(struct spi_device
@@ -746,7 +746,9 @@ static void spi_set_cs(struct spi_device
enable = !enable;
if (gpio_is_valid(spi->cs_gpio)) {

View File

@ -61,7 +61,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
#include <linux/clockchips.h>
#include <linux/clocksource.h>
#include <linux/interrupt.h>
@@ -836,6 +837,16 @@ static void arch_timer_of_configure_rate
@@ -845,6 +846,16 @@ static void arch_timer_of_configure_rate
if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
arch_timer_rate = rate;

View File

@ -61,7 +61,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
#include <linux/clockchips.h>
#include <linux/clocksource.h>
#include <linux/interrupt.h>
@@ -919,6 +920,16 @@ static void arch_timer_of_configure_rate
@@ -928,6 +929,16 @@ static void arch_timer_of_configure_rate
if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
arch_timer_rate = rate;

View File

@ -4,7 +4,7 @@ Signed-off-by: Mathias Adam <m.adam--openwrt@adamis.de>
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1473,6 +1473,15 @@ config WDT_MTX1
@@ -1474,6 +1474,15 @@ config WDT_MTX1
Hardware driver for the MTX-1 boards. This is a watchdog timer that
will reboot the machine after a 100 seconds timer expired.

View File

@ -4,7 +4,7 @@ Signed-off-by: Mathias Adam <m.adam--openwrt@adamis.de>
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1498,6 +1498,15 @@ config WDT_MTX1
@@ -1499,6 +1499,15 @@ config WDT_MTX1
Hardware driver for the MTX-1 boards. This is a watchdog timer that
will reboot the machine after a 100 seconds timer expired.

View File

@ -39,7 +39,7 @@
/**
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1032,6 +1032,9 @@ static int spi_transfer_one_message(stru
@@ -1033,6 +1033,9 @@ static int spi_transfer_one_message(stru
list_for_each_entry(xfer, &msg->transfers, transfer_list) {
trace_spi_transfer_start(msg, xfer);

View File

@ -65,7 +65,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
* Before updating sk_refcnt, we must commit prior changes to memory
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1699,7 +1699,7 @@ u32 tcp_tso_autosize(const struct sock *
@@ -1700,7 +1700,7 @@ u32 tcp_tso_autosize(const struct sock *
{
u32 bytes, segs;
@ -74,7 +74,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
sk->sk_gso_max_size - 1 - MAX_TCP_HEADER);
/* Goal is to send at least one packet per ms,
@@ -2217,7 +2217,7 @@ static bool tcp_small_queue_check(struct
@@ -2218,7 +2218,7 @@ static bool tcp_small_queue_check(struct
{
unsigned int limit;

View File

@ -30,7 +30,7 @@ Signed-off-by: Johan Hovold <johan@kernel.org>
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2012,7 +2012,8 @@ static const struct usb_device_id option
@@ -2015,7 +2015,8 @@ static const struct usb_device_id option
{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d01, 0xff) }, /* D-Link DWM-156 (variant) */
{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d02, 0xff) },
{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d03, 0xff) },

View File

@ -28,7 +28,7 @@ Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -762,6 +762,7 @@ static const struct nand_ops spinand_ops
@@ -766,6 +766,7 @@ static const struct nand_ops spinand_ops
static const struct spinand_manufacturer *spinand_manufacturers[] = {
&macronix_spinand_manufacturer,
&micron_spinand_manufacturer,

View File

@ -25,7 +25,7 @@ Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -760,6 +760,7 @@ static const struct nand_ops spinand_ops
@@ -764,6 +764,7 @@ static const struct nand_ops spinand_ops
};
static const struct spinand_manufacturer *spinand_manufacturers[] = {

View File

@ -17,7 +17,7 @@ Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -851,7 +851,7 @@ spinand_select_op_variant(struct spinand
@@ -855,7 +855,7 @@ spinand_select_op_variant(struct spinand
*/
int spinand_match_and_init(struct spinand_device *spinand,
const struct spinand_info *table,

View File

@ -33,7 +33,7 @@ ADOPTED FROM UPSTREAM due to upstream commit 377e517b5fa5 in Linux 5.2
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -763,6 +763,7 @@ static const struct spinand_manufacturer
@@ -767,6 +767,7 @@ static const struct spinand_manufacturer
&gigadevice_spinand_manufacturer,
&macronix_spinand_manufacturer,
&micron_spinand_manufacturer,

View File

@ -60,7 +60,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
nval = cmpxchg(&tp->tsq_flags, oval, nval);
if (nval != oval)
continue;
@@ -2239,6 +2239,8 @@ static bool tcp_write_xmit(struct sock *
@@ -2240,6 +2240,8 @@ static bool tcp_write_xmit(struct sock *
unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
break;

View File

@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2144,6 +2144,15 @@ static bool tcp_small_queue_check(struct
@@ -2145,6 +2145,15 @@ static bool tcp_small_queue_check(struct
limit <<= factor;
if (atomic_read(&sk->sk_wmem_alloc) > limit) {

View File

@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1976,26 +1976,26 @@ static bool tcp_can_coalesce_send_queue_
@@ -1977,26 +1977,26 @@ static bool tcp_can_coalesce_send_queue_
*/
static int tcp_mtu_probe(struct sock *sk)
{

View File

@ -114,7 +114,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (nval != oval)
continue;
@@ -2153,7 +2153,7 @@ static bool tcp_small_queue_check(struct
@@ -2154,7 +2154,7 @@ static bool tcp_small_queue_check(struct
skb->prev == sk->sk_write_queue.next)
return false;
@ -123,7 +123,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
/* It is possible TX completion already happened
* before we set TSQ_THROTTLED, so we must
* test again the condition.
@@ -2251,8 +2251,8 @@ static bool tcp_write_xmit(struct sock *
@@ -2252,8 +2252,8 @@ static bool tcp_write_xmit(struct sock *
unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
break;
@ -134,7 +134,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (tcp_small_queue_check(sk, skb, 0))
break;
@@ -3574,8 +3574,6 @@ void __tcp_send_ack(struct sock *sk, u32
@@ -3577,8 +3577,6 @@ void __tcp_send_ack(struct sock *sk, u32
/* We do not want pure acks influencing TCP Small Queues or fq/pacing
* too much.
* SKB_TRUESIZE(max(1 .. 66, MAX_TCP_HEADER)) is unfortunately ~784

View File

@ -65,7 +65,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
* Before updating sk_refcnt, we must commit prior changes to memory
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1609,7 +1609,7 @@ u32 tcp_tso_autosize(const struct sock *
@@ -1610,7 +1610,7 @@ u32 tcp_tso_autosize(const struct sock *
{
u32 bytes, segs;
@ -74,7 +74,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
sk->sk_gso_max_size - 1 - MAX_TCP_HEADER);
/* Goal is to send at least one packet per ms,
@@ -2140,7 +2140,7 @@ static bool tcp_small_queue_check(struct
@@ -2141,7 +2141,7 @@ static bool tcp_small_queue_check(struct
{
unsigned int limit;

View File

@ -1095,7 +1095,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
dma_intr_ena = smsc9420_reg_read(pd, DMAC_INTR_ENA);
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2702,7 +2702,7 @@ static int stmmac_poll(struct napi_struc
@@ -2704,7 +2704,7 @@ static int stmmac_poll(struct napi_struc
work_done = stmmac_rx(priv, budget);
if (work_done < budget) {

View File

@ -18,7 +18,7 @@
/* 4G Systems products */
/* This is the 4G XS Stick W14 a.k.a. Mobilcom Debitel Surf-Stick *
@@ -578,6 +579,16 @@ static void option_instat_callback(struc
@@ -581,6 +582,16 @@ static void option_instat_callback(struc
/* Device needs ZLP */
#define ZLP BIT(17)
@ -35,7 +35,7 @@
static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
@@ -612,6 +623,8 @@ static const struct usb_device_id option
@@ -615,6 +626,8 @@ static const struct usb_device_id option
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
{ USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
.driver_info = RSVD(4) },

View File

@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/Makefile
+++ b/Makefile
@@ -1260,7 +1260,6 @@ endif
@@ -1263,7 +1263,6 @@ endif
PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
@$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
@@ -1289,7 +1288,6 @@ _modinst_:
@@ -1292,7 +1291,6 @@ _modinst_:
rm -f $(MODLIB)/build ; \
ln -s $(CURDIR) $(MODLIB)/build ; \
fi

View File

@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
@@ -792,11 +797,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
@@ -795,11 +800,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
endif

View File

@ -18,7 +18,7 @@
/* 4G Systems products */
/* This is the 4G XS Stick W14 a.k.a. Mobilcom Debitel Surf-Stick *
@@ -575,6 +576,16 @@ static void option_instat_callback(struc
@@ -578,6 +579,16 @@ static void option_instat_callback(struc
/* Device needs ZLP */
#define ZLP BIT(17)
@ -35,7 +35,7 @@
static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
@@ -609,6 +620,8 @@ static const struct usb_device_id option
@@ -612,6 +623,8 @@ static const struct usb_device_id option
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
{ USB_DEVICE(QUANTA_VENDOR_ID, 0xea42),
.driver_info = RSVD(4) },

View File

@ -1,61 +0,0 @@
From: Sven Eckelmann <sven@narfation.org>
Date: Sun, 22 Nov 2020 00:48:33 +0100
Subject: [PATCH RFC] mtd: parser: cmdline: Fix parsing of part-names with colons
Some devices (especially QCA ones) are already using hardcoded partition
names with colons in it. The OpenMesh A62 for example provides following
mtd relevant information via cmdline:
root=31:11 mtdparts=spi0.0:256k(0:SBL1),128k(0:MIBIB),384k(0:QSEE),64k(0:CDT),64k(0:DDRPARAMS),64k(0:APPSBLENV),512k(0:APPSBL),64k(0:ART),64k(custom),64k(0:KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive) rootfsname=rootfs rootwait
The change to split only on the last colon between mtd-id and partitions
will cause newpart to see following string for the first partition:
KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive)
Such a partition list cannot be parsed and thus the device fails to boot.
Avoid this behavior by making sure that the start of the first part-name
("(") will also be the last byte the mtd-id split algorithm is using for
its colon search.
Forwarded: https://patchwork.ozlabs.org/project/linux-mtd/patch/20201122001533.985641-1-sven@narfation.org/
Fixes: eb13fa022741 ("mtd: parser: cmdline: Support MTD names containing one or more colons")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
--- a/drivers/mtd/cmdlinepart.c
+++ b/drivers/mtd/cmdlinepart.c
@@ -228,7 +228,7 @@ static int mtdpart_setup_real(char *s)
struct cmdline_mtd_partition *this_mtd;
struct mtd_partition *parts;
int mtd_id_len, num_parts;
- char *p, *mtd_id, *semicol;
+ char *p, *mtd_id, *semicol, *open_parenth;
/*
* Replace the first ';' by a NULL char so strrchr can work
@@ -238,6 +238,13 @@ static int mtdpart_setup_real(char *s)
if (semicol)
*semicol = '\0';
+ /* make sure that part-names with ":" will not be handled as
+ * part of the mtd-id with an ":"
+ */
+ open_parenth = strchr(s, '(');
+ if (open_parenth)
+ *open_parenth = '\0';
+
mtd_id = s;
/*
@@ -247,6 +254,10 @@ static int mtdpart_setup_real(char *s)
*/
p = strrchr(s, ':');
+ /* Restore the '(' now. */
+ if (open_parenth)
+ *open_parenth = '(';
+
/* Restore the ';' now. */
if (semicol)
*semicol = ';';

View File

@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -745,7 +745,7 @@ static void spi_set_cs(struct spi_device
@@ -746,7 +746,7 @@ static void spi_set_cs(struct spi_device
enable = !enable;
if (gpio_is_valid(spi->cs_gpio)) {

View File

@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
return -ENOMEM;
@@ -821,6 +849,7 @@ copy_entries_to_user(unsigned int total_
const struct xt_table_info *private = table->private;
const struct xt_table_info *private = xt_table_get_private_protected(table);
int ret = 0;
const void *loc_cpu_entry;
+ u8 flags;

View File

@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/* Initialization */
+ WARN_ON(!(table->valid_hooks & (1 << hook)));
+ local_bh_disable();
+ private = READ_ONCE(table->private); /* Address dependency. */
+ private = rcu_access_pointer(table->private);
+ cpu = smp_processor_id();
+ table_base = private->entries;
+
@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- WARN_ON(!(table->valid_hooks & (1 << hook)));
- local_bh_disable();
addend = xt_write_recseq_begin();
- private = READ_ONCE(table->private); /* Address dependency. */
- private = rcu_access_pointer(table->private);
- cpu = smp_processor_id();
- table_base = private->entries;
jumpstack = (struct ipt_entry **)private->jumpstack[cpu];

View File

@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -700,7 +700,7 @@ static void spi_set_cs(struct spi_device
@@ -712,7 +712,7 @@ static void spi_set_cs(struct spi_device
enable = !enable;
if (gpio_is_valid(spi->cs_gpio))

View File

@ -1,61 +0,0 @@
From: Sven Eckelmann <sven@narfation.org>
Date: Sun, 22 Nov 2020 00:48:33 +0100
Subject: [PATCH RFC] mtd: parser: cmdline: Fix parsing of part-names with colons
Some devices (especially QCA ones) are already using hardcoded partition
names with colons in it. The OpenMesh A62 for example provides following
mtd relevant information via cmdline:
root=31:11 mtdparts=spi0.0:256k(0:SBL1),128k(0:MIBIB),384k(0:QSEE),64k(0:CDT),64k(0:DDRPARAMS),64k(0:APPSBLENV),512k(0:APPSBL),64k(0:ART),64k(custom),64k(0:KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive) rootfsname=rootfs rootwait
The change to split only on the last colon between mtd-id and partitions
will cause newpart to see following string for the first partition:
KEYS),0x002b0000(kernel),0x00c80000(rootfs),15552k(inactive)
Such a partition list cannot be parsed and thus the device fails to boot.
Avoid this behavior by making sure that the start of the first part-name
("(") will also be the last byte the mtd-id split algorithm is using for
its colon search.
Forwarded: https://patchwork.ozlabs.org/project/linux-mtd/patch/20201122001533.985641-1-sven@narfation.org/
Fixes: eb13fa022741 ("mtd: parser: cmdline: Support MTD names containing one or more colons")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
--- a/drivers/mtd/cmdlinepart.c
+++ b/drivers/mtd/cmdlinepart.c
@@ -228,7 +228,7 @@ static int mtdpart_setup_real(char *s)
struct cmdline_mtd_partition *this_mtd;
struct mtd_partition *parts;
int mtd_id_len, num_parts;
- char *p, *mtd_id, *semicol;
+ char *p, *mtd_id, *semicol, *open_parenth;
/*
* Replace the first ';' by a NULL char so strrchr can work
@@ -238,6 +238,13 @@ static int mtdpart_setup_real(char *s)
if (semicol)
*semicol = '\0';
+ /* make sure that part-names with ":" will not be handled as
+ * part of the mtd-id with an ":"
+ */
+ open_parenth = strchr(s, '(');
+ if (open_parenth)
+ *open_parenth = '\0';
+
mtd_id = s;
/*
@@ -247,6 +254,10 @@ static int mtdpart_setup_real(char *s)
*/
p = strrchr(s, ':');
+ /* Restore the '(' now. */
+ if (open_parenth)
+ *open_parenth = '(';
+
/* Restore the ';' now. */
if (semicol)
*semicol = ';';

View File

@ -10,38 +10,42 @@ Signed-off-by: William <gw826943555@qq.com>
---
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
@@ -114,20 +114,24 @@
@@ -121,23 +121,28 @@
opp-48000000 {
opp-hz = /bits/ 64 <48000000>;
opp-microvolt = <1100000>;
- clock-latency-ns = <256000>;
+ clock-latency-ns = <100000>;
};
opp-200000000 {
opp-hz = /bits/ 64 <200000000>;
opp-microvolt = <1100000>;
- clock-latency-ns = <256000>;
+ clock-latency-ns = <100000>;
};
opp-500000000 {
opp-hz = /bits/ 64 <500000000>;
opp-microvolt = <1100000>;
- clock-latency-ns = <256000>;
+ clock-latency-ns = <100000>;
};
opp-716000000 {
opp-hz = /bits/ 64 <716000000>;
opp-microvolt = <1100000>;
- clock-latency-ns = <256000>;
+ clock-latency-ns = <100000>;
};
+ opp-896000000 {
+ opp-hz = /bits/ 64 <896000000>;
+ opp-microvolt = <1100000>;
+ clock-latency-ns = <100000>;
+ };
};
memory {
pmu {
--- a/drivers/clk/qcom/gcc-ipq4019.c
+++ b/drivers/clk/qcom/gcc-ipq4019.c
@@ -579,6 +579,9 @@ static const struct freq_tbl ftbl_gcc_ap
@@ -587,6 +587,9 @@ static const struct freq_tbl ftbl_gcc_ap
F(632000000, P_DDRPLLAPSS, 1, 0, 0),
F(672000000, P_DDRPLLAPSS, 1, 0, 0),
F(716000000, P_DDRPLLAPSS, 1, 0, 0),

View File

@ -20,7 +20,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
struct reset_control *pci_reset;
struct reset_control *axi_reset;
struct reset_control *ahb_reset;
@@ -249,6 +251,14 @@ static int qcom_pcie_get_resources_2_1_0
@@ -250,6 +252,14 @@ static int qcom_pcie_get_resources_2_1_0
if (IS_ERR(res->phy_clk))
return PTR_ERR(res->phy_clk);
@ -35,7 +35,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
res->pci_reset = devm_reset_control_get_exclusive(dev, "pci");
if (IS_ERR(res->pci_reset))
return PTR_ERR(res->pci_reset);
@@ -281,6 +291,8 @@ static void qcom_pcie_deinit_2_1_0(struc
@@ -287,6 +297,8 @@ static void qcom_pcie_deinit_2_1_0(struc
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
clk_disable_unprepare(res->phy_clk);
@ -44,7 +44,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
regulator_disable(res->vdda);
regulator_disable(res->vdda_phy);
regulator_disable(res->vdda_refclk);
@@ -324,16 +336,28 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -330,16 +342,28 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_assert_ahb;
}
@ -76,7 +76,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
}
ret = reset_control_deassert(res->ahb_reset);
@@ -389,10 +413,14 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -401,10 +425,14 @@ static int qcom_pcie_init_2_1_0(struct q
return 0;
err_deassert_ahb:

View File

@ -1,85 +0,0 @@
From 490d103232287eb51c92c49a4ef8865fd0a9d59e Mon Sep 17 00:00:00 2001
From: Sham Muthayyan <smuthayy@codeaurora.org>
Date: Tue, 19 Jul 2016 18:58:18 +0530
Subject: PCI: qcom: Fixed IPQ806x PCIE reset changes
Change-Id: Ia6590e960b9754b1e8b7a51f318788cd63e9e321
Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
---
drivers/pci/host/pcie-qcom.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
--- a/drivers/pci/dwc/pcie-qcom.c
+++ b/drivers/pci/dwc/pcie-qcom.c
@@ -98,6 +98,7 @@ struct qcom_pcie_resources_2_1_0 {
struct reset_control *ahb_reset;
struct reset_control *por_reset;
struct reset_control *phy_reset;
+ struct reset_control *ext_reset;
struct regulator *vdda;
struct regulator *vdda_phy;
struct regulator *vdda_refclk;
@@ -275,6 +276,10 @@ static int qcom_pcie_get_resources_2_1_0
if (IS_ERR(res->por_reset))
return PTR_ERR(res->por_reset);
+ res->ext_reset = devm_reset_control_get(dev, "ext");
+ if (IS_ERR(res->ext_reset))
+ return PTR_ERR(res->ext_reset);
+
res->phy_reset = devm_reset_control_get_exclusive(dev, "phy");
return PTR_ERR_OR_ZERO(res->phy_reset);
}
@@ -288,6 +293,7 @@ static void qcom_pcie_deinit_2_1_0(struc
reset_control_assert(res->ahb_reset);
reset_control_assert(res->por_reset);
reset_control_assert(res->pci_reset);
+ reset_control_assert(res->ext_reset);
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
clk_disable_unprepare(res->phy_clk);
@@ -306,6 +312,12 @@ static int qcom_pcie_init_2_1_0(struct q
u32 val;
int ret;
+ ret = reset_control_assert(res->ahb_reset);
+ if (ret) {
+ dev_err(dev, "cannot assert ahb reset\n");
+ return ret;
+ }
+
ret = regulator_enable(res->vdda);
if (ret) {
dev_err(dev, "cannot enable vdda regulator\n");
@@ -324,16 +336,16 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_vdda_phy;
}
- ret = reset_control_assert(res->ahb_reset);
+ ret = reset_control_deassert(res->ext_reset);
if (ret) {
- dev_err(dev, "cannot assert ahb reset\n");
- goto err_assert_ahb;
+ dev_err(dev, "cannot assert ext reset\n");
+ goto err_reset_ext;
}
ret = clk_prepare_enable(res->iface_clk);
if (ret) {
dev_err(dev, "cannot prepare/enable iface clock\n");
- goto err_assert_ahb;
+ goto err_iface;
}
ret = clk_prepare_enable(res->core_clk);
@@ -422,7 +434,9 @@ err_clk_phy:
clk_disable_unprepare(res->core_clk);
err_clk_core:
clk_disable_unprepare(res->iface_clk);
-err_assert_ahb:
+err_iface:
+ reset_control_assert(res->ext_reset);
+err_reset_ext:
regulator_disable(res->vdda_phy);
err_vdda_phy:
regulator_disable(res->vdda_refclk);

View File

@ -87,7 +87,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
- u32 val;
int ret;
ret = reset_control_assert(res->ahb_reset);
ret = regulator_enable(res->vdda);
@@ -378,15 +410,26 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_deassert_ahb;
}

View File

@ -40,7 +40,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
/* Set the Max TLP size to 2K, instead of using default of 4K */
@@ -1382,6 +1390,8 @@ static int qcom_pcie_probe(struct platfo
@@ -1380,6 +1388,8 @@ static int qcom_pcie_probe(struct platfo
struct dw_pcie *pci;
struct qcom_pcie *pcie;
int ret;
@ -49,7 +49,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
if (!pcie)
@@ -1403,6 +1413,9 @@ static int qcom_pcie_probe(struct platfo
@@ -1401,6 +1411,9 @@ static int qcom_pcie_probe(struct platfo
if (IS_ERR(pcie->reset))
return PTR_ERR(pcie->reset);

View File

@ -31,7 +31,7 @@ Signed-off-by: Gokul Sriram Palanisamy <gpalan@codeaurora.org>
struct qcom_pcie_resources_2_1_0 {
struct clk *iface_clk;
struct clk *core_clk;
@@ -1472,6 +1480,35 @@ static int qcom_pcie_probe(struct platfo
@@ -1470,6 +1478,35 @@ static int qcom_pcie_probe(struct platfo
return 0;
}

View File

@ -47,14 +47,14 @@ Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
reset_control_assert(res->axi_reset);
reset_control_assert(res->ahb_reset);
@@ -415,7 +416,6 @@ static void qcom_pcie_deinit_2_1_0(struc
reset_control_assert(res->ext_reset);
reset_control_assert(res->pci_reset);
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
- clk_disable_unprepare(res->phy_clk);
clk_disable_unprepare(res->aux_clk);
clk_disable_unprepare(res->ref_clk);
regulator_disable(res->vdda);
@@ -472,12 +472,6 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -466,12 +466,6 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_clk_core;
}

View File

@ -18,7 +18,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
struct reset_control *pci_reset;
struct reset_control *axi_reset;
struct reset_control *ahb_reset;
@@ -253,6 +255,14 @@ static int qcom_pcie_get_resources_2_1_0
@@ -254,6 +256,14 @@ static int qcom_pcie_get_resources_2_1_0
if (IS_ERR(res->phy_clk))
return PTR_ERR(res->phy_clk);
@ -33,7 +33,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
res->pci_reset = devm_reset_control_get_exclusive(dev, "pci");
if (IS_ERR(res->pci_reset))
return PTR_ERR(res->pci_reset);
@@ -285,6 +295,8 @@ static void qcom_pcie_deinit_2_1_0(struc
@@ -291,6 +301,8 @@ static void qcom_pcie_deinit_2_1_0(struc
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
clk_disable_unprepare(res->phy_clk);
@ -42,7 +42,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
}
@@ -315,16 +327,28 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -321,16 +333,28 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_assert_ahb;
}
@ -74,7 +74,7 @@ Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
}
ret = reset_control_deassert(res->ahb_reset);
@@ -400,10 +424,14 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -412,10 +436,14 @@ static int qcom_pcie_init_2_1_0(struct q
return 0;
err_deassert_ahb:

View File

@ -1,62 +0,0 @@
From 490d103232287eb51c92c49a4ef8865fd0a9d59e Mon Sep 17 00:00:00 2001
From: Sham Muthayyan <smuthayy@codeaurora.org>
Date: Tue, 19 Jul 2016 18:58:18 +0530
Subject: PCI: qcom: Fixed IPQ806x PCIE reset changes
Change-Id: Ia6590e960b9754b1e8b7a51f318788cd63e9e321
Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
---
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -110,6 +110,7 @@ struct qcom_pcie_resources_2_1_0 {
struct reset_control *ahb_reset;
struct reset_control *por_reset;
struct reset_control *phy_reset;
+ struct reset_control *ext_reset;
struct regulator_bulk_data supplies[QCOM_PCIE_2_1_0_MAX_SUPPLY];
};
@@ -279,6 +280,10 @@ static int qcom_pcie_get_resources_2_1_0
if (IS_ERR(res->por_reset))
return PTR_ERR(res->por_reset);
+ res->ext_reset = devm_reset_control_get(dev, "ext");
+ if (IS_ERR(res->ext_reset))
+ return PTR_ERR(res->ext_reset);
+
res->phy_reset = devm_reset_control_get_exclusive(dev, "phy");
return PTR_ERR_OR_ZERO(res->phy_reset);
}
@@ -292,6 +297,7 @@ static void qcom_pcie_deinit_2_1_0(struc
reset_control_assert(res->ahb_reset);
reset_control_assert(res->por_reset);
reset_control_assert(res->pci_reset);
+ reset_control_assert(res->ext_reset);
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
clk_disable_unprepare(res->phy_clk);
@@ -309,15 +315,21 @@ static int qcom_pcie_init_2_1_0(struct q
u32 val;
int ret;
+ ret = reset_control_assert(res->ahb_reset);
+ if (ret) {
+ dev_err(dev, "cannot assert ahb reset\n");
+ return ret;
+ }
+
ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
if (ret < 0) {
dev_err(dev, "cannot enable regulators\n");
return ret;
}
- ret = reset_control_assert(res->ahb_reset);
+ ret = reset_control_deassert(res->ext_reset);
if (ret) {
- dev_err(dev, "cannot assert ahb reset\n");
+ dev_err(dev, "cannot assert ext reset\n");
goto err_assert_ahb;
}

View File

@ -47,14 +47,14 @@ Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
reset_control_assert(res->axi_reset);
reset_control_assert(res->ahb_reset);
@@ -386,7 +387,6 @@ static void qcom_pcie_deinit_2_1_0(struc
reset_control_assert(res->ext_reset);
reset_control_assert(res->pci_reset);
clk_disable_unprepare(res->iface_clk);
clk_disable_unprepare(res->core_clk);
- clk_disable_unprepare(res->phy_clk);
clk_disable_unprepare(res->aux_clk);
clk_disable_unprepare(res->ref_clk);
regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
@@ -431,12 +431,6 @@ static int qcom_pcie_init_2_1_0(struct q
@@ -425,12 +425,6 @@ static int qcom_pcie_init_2_1_0(struct q
goto err_clk_core;
}

View File

@ -18,7 +18,7 @@
uart->capabilities = up->capabilities;
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2259,6 +2259,7 @@ uart_report_port(struct uart_driver *drv
@@ -2263,6 +2263,7 @@ uart_report_port(struct uart_driver *drv
snprintf(address, sizeof(address),
"I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
break;
@ -26,7 +26,7 @@
case UPIO_MEM:
case UPIO_MEM16:
case UPIO_MEM32:
@@ -2932,6 +2933,7 @@ int uart_match_port(struct uart_port *po
@@ -2936,6 +2937,7 @@ int uart_match_port(struct uart_port *po
case UPIO_HUB6:
return (port1->iobase == port2->iobase) &&
(port1->hub6 == port2->hub6);

View File

@ -371,7 +371,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
static irqreturn_t dpio_irq_handler(int irq_num, void *arg)
{
struct device *dev = (struct device *)arg;
@@ -113,7 +91,7 @@ static int dpaa2_dpio_probe(struct fsl_m
@@ -110,7 +88,7 @@ static int dpaa2_dpio_probe(struct fsl_m
struct dpio_priv *priv;
int err = -ENOMEM;
struct device *dev = &dpio_dev->dev;
@ -380,7 +380,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv)
@@ -135,6 +113,12 @@ static int dpaa2_dpio_probe(struct fsl_m
@@ -132,6 +110,12 @@ static int dpaa2_dpio_probe(struct fsl_m
goto err_open;
}
@ -393,7 +393,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
err = dpio_get_attributes(dpio_dev->mc_io, 0, dpio_dev->mc_handle,
&dpio_attrs);
if (err) {
@@ -155,26 +139,35 @@ static int dpaa2_dpio_probe(struct fsl_m
@@ -152,26 +136,35 @@ static int dpaa2_dpio_probe(struct fsl_m
desc.dpio_id = dpio_dev->obj_desc.id;
/* get the cpu to use for the affinity hint */
@ -444,7 +444,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
err = fsl_mc_allocate_irqs(dpio_dev);
if (err) {
@@ -186,7 +179,7 @@ static int dpaa2_dpio_probe(struct fsl_m
@@ -183,7 +176,7 @@ static int dpaa2_dpio_probe(struct fsl_m
if (err)
goto err_register_dpio_irq;
@ -453,7 +453,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
if (!priv->io) {
dev_err(dev, "dpaa2_io_create failed\n");
goto err_dpaa2_io_create;
@@ -196,7 +189,6 @@ static int dpaa2_dpio_probe(struct fsl_m
@@ -193,7 +186,6 @@ static int dpaa2_dpio_probe(struct fsl_m
dev_dbg(dev, " receives_notifications = %d\n",
desc.receives_notifications);
dpio_close(dpio_dev->mc_io, 0, dpio_dev->mc_handle);
@ -461,7 +461,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
return 0;
@@ -207,6 +199,7 @@ err_register_dpio_irq:
@@ -204,6 +196,7 @@ err_register_dpio_irq:
err_allocate_irqs:
dpio_disable(dpio_dev->mc_io, 0, dpio_dev->mc_handle);
err_get_attr:
@ -469,7 +469,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
dpio_close(dpio_dev->mc_io, 0, dpio_dev->mc_handle);
err_open:
fsl_mc_portal_free(dpio_dev->mc_io);
@@ -227,7 +220,7 @@ static int dpaa2_dpio_remove(struct fsl_
@@ -224,7 +217,7 @@ static int dpaa2_dpio_remove(struct fsl_
{
struct device *dev;
struct dpio_priv *priv;
@ -478,7 +478,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
dev = &dpio_dev->dev;
priv = dev_get_drvdata(dev);
@@ -236,11 +229,8 @@ static int dpaa2_dpio_remove(struct fsl_
@@ -233,11 +226,8 @@ static int dpaa2_dpio_remove(struct fsl_
dpio_teardown_irqs(dpio_dev);
@ -492,7 +492,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
err = dpio_open(dpio_dev->mc_io, 0, dpio_dev->obj_desc.id,
&dpio_dev->mc_handle);
@@ -261,7 +251,7 @@ static int dpaa2_dpio_remove(struct fsl_
@@ -258,7 +248,7 @@ static int dpaa2_dpio_remove(struct fsl_
err_open:
fsl_mc_portal_free(dpio_dev->mc_io);
@ -501,7 +501,7 @@ Signed-off-by: Youri Querry <youri.querry_1@nxp.com>
return err;
}
@@ -285,11 +275,16 @@ static struct fsl_mc_driver dpaa2_dpio_d
@@ -282,11 +272,16 @@ static struct fsl_mc_driver dpaa2_dpio_d
static int dpio_driver_init(void)
{

View File

@ -11,7 +11,7 @@ Signed-off-by: Xiangsheng Hou <xiangsheng.hou@mediatek.com>
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -552,7 +552,7 @@ static int spinand_mtd_read(struct mtd_i
@@ -556,7 +556,7 @@ static int spinand_mtd_read(struct mtd_i
int ret = 0;
if (ops->mode != MTD_OPS_RAW && spinand->eccinfo.ooblayout)
@ -20,7 +20,7 @@ Signed-off-by: Xiangsheng Hou <xiangsheng.hou@mediatek.com>
mutex_lock(&spinand->lock);
@@ -600,7 +600,7 @@ static int spinand_mtd_write(struct mtd_
@@ -604,7 +604,7 @@ static int spinand_mtd_write(struct mtd_
int ret = 0;
if (ops->mode != MTD_OPS_RAW && mtd->ooblayout)

View File

@ -65,7 +65,7 @@
#define MT7621_GPIO_MODE_UART1 1
#define MT7621_GPIO_MODE_I2C 2
#define MT7621_GPIO_MODE_UART3_MASK 0x3
@@ -111,49 +111,98 @@ static struct rt2880_pmx_group mt7621_pi
@@ -113,49 +113,98 @@ static struct rt2880_pmx_group mt7621_pi
{ 0 }
};
@ -152,7 +152,6 @@
- } else {
- /* 20Mhz Xtal */
- cpu_clk = 20 * fbdiv * 1000 * 1000;
- }
+ pll = rt_memc_r32(MEMC_REG_CPU_PLL);
+ if ((pll & 0x7f0) == 0x2b0) {
+ volatile u32 i;
@ -162,7 +161,7 @@
+ pll |= 0x312;
+ rt_memc_w32(pll, MEMC_REG_CPU_PLL);
+ for (i = 0; i < 1000; i++);
+ }
}
+ fbdiv = (pll >> CPU_PLL_FBDIV_SHIFT) & CPU_PLL_FBDIV_MASK;
+ prediv = (pll >> CPU_PLL_PREDIV_SHIFT) & CPU_PLL_PREDIV_MASK;
+ cpu_clk = ((fbdiv + 1) * xtal_clk) >> prediv_tbl[prediv];