mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-07 01:53:34 +08:00
kernel: bump to 5.4.255
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
parent
15bb8c3461
commit
949f0dd900
@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-5.4 = .252
|
||||
LINUX_KERNEL_HASH-5.4.252 = 3a78587523940374a7319089b63357c7dc412b90f5879d512265e59173588267
|
||||
LINUX_VERSION-5.4 = .255
|
||||
LINUX_KERNEL_HASH-5.4.255 = 34d5ed902f47d90f27b9d5d6b8db0d3fa660834111f9452e166d920968a4a061
|
||||
|
@ -610,7 +610,7 @@
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -741,13 +745,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
@@ -737,13 +741,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
*/
|
||||
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
|
||||
{
|
||||
@ -626,7 +626,7 @@
|
||||
if (xb)
|
||||
return i * 32 + 31 - __fls(ntohl(xb));
|
||||
}
|
||||
@@ -934,17 +938,18 @@ static inline int ip6_multipath_hash_pol
|
||||
@@ -930,17 +934,18 @@ static inline int ip6_multipath_hash_pol
|
||||
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
|
||||
__be32 flowlabel)
|
||||
{
|
||||
|
@ -222,7 +222,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
static inline int mmc_blk_part_switch(struct mmc_card *card,
|
||||
unsigned int part_type);
|
||||
|
||||
@@ -2895,6 +2902,7 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2896,6 +2903,7 @@ static int mmc_blk_probe(struct mmc_card
|
||||
{
|
||||
struct mmc_blk_data *md, *part_md;
|
||||
char cap_str[10];
|
||||
@ -230,7 +230,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
|
||||
/*
|
||||
* Check that the card supports the command class(es) we need.
|
||||
@@ -2902,7 +2910,16 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2903,7 +2911,16 @@ static int mmc_blk_probe(struct mmc_card
|
||||
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
|
||||
return -ENODEV;
|
||||
|
||||
@ -248,7 +248,7 @@ Signed-off-by: Yaroslav Rosomakho <yaroslavros@gmail.com>
|
||||
|
||||
card->complete_wq = alloc_workqueue("mmc_complete",
|
||||
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
|
||||
@@ -2917,9 +2934,14 @@ static int mmc_blk_probe(struct mmc_card
|
||||
@@ -2918,9 +2935,14 @@ static int mmc_blk_probe(struct mmc_card
|
||||
|
||||
string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2,
|
||||
cap_str, sizeof(cap_str));
|
||||
|
@ -33,7 +33,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
#define USB_VENDOR_ID_BELKIN 0x050d
|
||||
#define USB_DEVICE_ID_FLIP_KVM 0x3201
|
||||
|
||||
@@ -1272,6 +1275,9 @@
|
||||
@@ -1273,6 +1276,9 @@
|
||||
#define USB_VENDOR_ID_XAT 0x2505
|
||||
#define USB_DEVICE_ID_XAT_CSR 0x0220
|
||||
|
||||
@ -53,7 +53,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL },
|
||||
@@ -196,6 +197,7 @@ static const struct hid_device_id hid_qu
|
||||
@@ -197,6 +198,7 @@ static const struct hid_device_id hid_qu
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
|
||||
|
@ -83,7 +83,7 @@ Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
|
||||
* for the output and the capture buffer queue.
|
||||
--- a/include/media/v4l2-mem2mem.h
|
||||
+++ b/include/media/v4l2-mem2mem.h
|
||||
@@ -701,6 +701,10 @@ int v4l2_m2m_ioctl_try_encoder_cmd(struc
|
||||
@@ -715,6 +715,10 @@ int v4l2_m2m_ioctl_try_encoder_cmd(struc
|
||||
struct v4l2_encoder_cmd *ec);
|
||||
int v4l2_m2m_ioctl_try_decoder_cmd(struct file *file, void *fh,
|
||||
struct v4l2_decoder_cmd *dc);
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
return;
|
||||
|
||||
val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
|
||||
@@ -641,13 +642,21 @@ static struct phy_driver broadcom_driver
|
||||
@@ -652,13 +653,21 @@ static struct phy_driver broadcom_driver
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM54210E,
|
||||
@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
||||
.phy_id = PHY_ID_BCM5461,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM5461",
|
||||
@@ -775,7 +784,8 @@ module_phy_driver(broadcom_drivers);
|
||||
@@ -788,7 +797,8 @@ module_phy_driver(broadcom_drivers);
|
||||
static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
|
||||
{ PHY_ID_BCM5411, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5421, 0xfffffff0 },
|
||||
|
@ -8,7 +8,7 @@ This fixes OpenWrt ticket #1485: https://dev.openwrt.org/ticket/1485
|
||||
---
|
||||
--- a/arch/mips/include/asm/cpu-features.h
|
||||
+++ b/arch/mips/include/asm/cpu-features.h
|
||||
@@ -243,6 +243,9 @@
|
||||
@@ -260,6 +260,9 @@
|
||||
#ifndef cpu_has_pindexed_dcache
|
||||
#define cpu_has_pindexed_dcache (cpu_data[0].dcache.flags & MIPS_CACHE_PINDEX)
|
||||
#endif
|
||||
|
@ -47,7 +47,7 @@ Tested-by: Yu Zhao <yuzhao@chromium.org>
|
||||
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -1327,7 +1327,6 @@ static inline struct mem_cgroup *page_me
|
||||
@@ -1329,7 +1329,6 @@ static inline struct mem_cgroup *page_me
|
||||
}
|
||||
static inline struct mem_cgroup *page_memcg_rcu(struct page *page)
|
||||
{
|
||||
|
@ -91,7 +91,7 @@ Commit-Queue: Yu Zhao <yuzhao@chromium.org>
|
||||
return 1;
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -924,6 +924,8 @@ vm_fault_t finish_mkwrite_fault(struct v
|
||||
@@ -926,6 +926,8 @@ vm_fault_t finish_mkwrite_fault(struct v
|
||||
#define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH)
|
||||
#define LAST_CPUPID_PGOFF (ZONES_PGOFF - LAST_CPUPID_WIDTH)
|
||||
#define KASAN_TAG_PGOFF (LAST_CPUPID_PGOFF - KASAN_TAG_WIDTH)
|
||||
|
@ -104,7 +104,7 @@ Commit-Queue: Yu Zhao <yuzhao@chromium.org>
|
||||
return false;
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -1513,6 +1513,23 @@ void unmap_mapping_pages(struct address_
|
||||
@@ -1515,6 +1515,23 @@ void unmap_mapping_pages(struct address_
|
||||
pgoff_t start, pgoff_t nr, bool even_cows);
|
||||
void unmap_mapping_range(struct address_space *mapping,
|
||||
loff_t const holebegin, loff_t const holelen, int even_cows);
|
||||
@ -128,7 +128,7 @@ Commit-Queue: Yu Zhao <yuzhao@chromium.org>
|
||||
#else
|
||||
static inline vm_fault_t handle_mm_fault(struct vm_area_struct *vma,
|
||||
unsigned long address, unsigned int flags)
|
||||
@@ -1534,6 +1551,19 @@ static inline void unmap_mapping_pages(s
|
||||
@@ -1536,6 +1553,19 @@ static inline void unmap_mapping_pages(s
|
||||
pgoff_t start, pgoff_t nr, bool even_cows) { }
|
||||
static inline void unmap_mapping_range(struct address_space *mapping,
|
||||
loff_t const holebegin, loff_t const holelen, int even_cows) { }
|
||||
|
@ -48,7 +48,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
MODULE_AUTHOR("Pablo Neira Ayuso <pablo@netfilter.org>");
|
||||
--- a/net/netfilter/nft_flow_offload.c
|
||||
+++ b/net/netfilter/nft_flow_offload.c
|
||||
@@ -234,47 +234,14 @@ static struct nft_expr_type nft_flow_off
|
||||
@@ -236,47 +236,14 @@ static struct nft_expr_type nft_flow_off
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
@ -202,7 +202,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
}
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -4884,7 +4884,8 @@ static struct mv88e6xxx_chip *mv88e6xxx_
|
||||
@@ -4892,7 +4892,8 @@ static struct mv88e6xxx_chip *mv88e6xxx_
|
||||
}
|
||||
|
||||
static enum dsa_tag_protocol mv88e6xxx_get_tag_protocol(struct dsa_switch *ds,
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -2384,7 +2384,14 @@ static int mv88e6xxx_setup_upstream_port
|
||||
@@ -2392,7 +2392,14 @@ static int mv88e6xxx_setup_upstream_port
|
||||
|
||||
if (chip->info->ops->set_egress_port) {
|
||||
err = chip->info->ops->set_egress_port(chip,
|
||||
|
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -4935,6 +4935,80 @@ static int mv88e6xxx_port_mdb_del(struct
|
||||
@@ -4943,6 +4943,80 @@ static int mv88e6xxx_port_mdb_del(struct
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
static int mv88e6xxx_port_egress_floods(struct dsa_switch *ds, int port,
|
||||
bool unicast, bool multicast)
|
||||
{
|
||||
@@ -4989,6 +5063,8 @@ static const struct dsa_switch_ops mv88e
|
||||
@@ -4997,6 +5071,8 @@ static const struct dsa_switch_ops mv88e
|
||||
.port_mdb_prepare = mv88e6xxx_port_mdb_prepare,
|
||||
.port_mdb_add = mv88e6xxx_port_mdb_add,
|
||||
.port_mdb_del = mv88e6xxx_port_mdb_del,
|
||||
|
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -5002,7 +5002,7 @@ static void mv88e6xxx_port_mirror_del(st
|
||||
@@ -5010,7 +5010,7 @@ static void mv88e6xxx_port_mirror_del(st
|
||||
if (chip->info->ops->set_egress_port(chip,
|
||||
direction,
|
||||
dsa_upstream_port(ds,
|
||||
|
@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
device, it has to decide which ones to send first, which ones to
|
||||
--- a/net/sched/sch_api.c
|
||||
+++ b/net/sched/sch_api.c
|
||||
@@ -2300,7 +2300,7 @@ static int __init pktsched_init(void)
|
||||
@@ -2327,7 +2327,7 @@ static int __init pktsched_init(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -2497,6 +2497,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||
@@ -2505,6 +2505,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||
if (dsa_is_cpu_port(ds, port))
|
||||
reg = 0;
|
||||
|
||||
|
@ -69,7 +69,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
||||
{
|
||||
struct dst_entry *dst = __sk_dst_get(sk);
|
||||
@@ -1760,9 +1773,11 @@ static void __sk_free(struct sock *sk)
|
||||
@@ -1763,9 +1776,11 @@ static void __sk_free(struct sock *sk)
|
||||
if (likely(sk->sk_net_refcnt))
|
||||
sock_inuse_add(sock_net(sk), -1);
|
||||
|
||||
|
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -3668,6 +3668,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -3671,6 +3671,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
|
@ -10,7 +10,7 @@
|
||||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */
|
||||
--- a/drivers/usb/serial/option.c
|
||||
+++ b/drivers/usb/serial/option.c
|
||||
@@ -404,6 +404,7 @@ static void option_instat_callback(struc
|
||||
@@ -406,6 +406,7 @@ static void option_instat_callback(struc
|
||||
* Mobidata, etc sell under their own brand names.
|
||||
*/
|
||||
#define LONGCHEER_VENDOR_ID 0x1c9e
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
/* 4G Systems products */
|
||||
/* This one was sold as the VW and Skoda "Carstick LTE" */
|
||||
@@ -621,6 +622,16 @@ static void option_instat_callback(struc
|
||||
@@ -623,6 +624,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) },
|
||||
@@ -655,6 +666,8 @@ static const struct usb_device_id option
|
||||
@@ -657,6 +668,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) },
|
||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#define PACKET_FANOUT_LB 1
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -1802,6 +1802,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1806,6 +1806,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
{
|
||||
struct sock *sk;
|
||||
struct sockaddr_pkt *spkt;
|
||||
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* When we registered the protocol we saved the socket in the data
|
||||
@@ -1809,6 +1810,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1813,6 +1814,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
*/
|
||||
|
||||
sk = pt->af_packet_priv;
|
||||
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
/*
|
||||
* Yank back the headers [hope the device set this
|
||||
@@ -1821,7 +1823,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
@@ -1825,7 +1827,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||
* so that this procedure is noop.
|
||||
*/
|
||||
|
||||
@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
goto out;
|
||||
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
@@ -2067,12 +2069,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
@@ -2071,12 +2073,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||
unsigned int snaplen, res;
|
||||
bool is_drop_n_account = false;
|
||||
|
||||
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -2198,12 +2200,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
@@ -2202,12 +2204,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
|
||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -3313,6 +3315,7 @@ static int packet_create(struct net *net
|
||||
@@ -3317,6 +3319,7 @@ static int packet_create(struct net *net
|
||||
mutex_init(&po->pg_vec_lock);
|
||||
po->rollover = NULL;
|
||||
po->prot_hook.func = packet_rcv;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sock->type == SOCK_PACKET)
|
||||
po->prot_hook.func = packet_rcv_spkt;
|
||||
@@ -3952,6 +3955,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
@@ -3956,6 +3959,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
WRITE_ONCE(po->xmit, val ? packet_direct_xmit : dev_queue_xmit);
|
||||
return 0;
|
||||
}
|
||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
default:
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
@@ -4008,6 +4021,13 @@ static int packet_getsockopt(struct sock
|
||||
@@ -4012,6 +4025,13 @@ static int packet_getsockopt(struct sock
|
||||
case PACKET_VNET_HDR:
|
||||
val = po->has_vnet_hdr;
|
||||
break;
|
||||
|
@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
+MODULE_ALIAS("nf-flow-table-hw");
|
||||
--- a/net/netfilter/nf_tables_api.c
|
||||
+++ b/net/netfilter/nf_tables_api.c
|
||||
@@ -5857,6 +5857,13 @@ static int nf_tables_flowtable_parse_hoo
|
||||
@@ -5888,6 +5888,13 @@ static int nf_tables_flowtable_parse_hoo
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
|
||||
if (!ops)
|
||||
return -ENOMEM;
|
||||
@@ -5987,10 +5994,19 @@ static int nf_tables_newflowtable(struct
|
||||
@@ -6023,10 +6030,19 @@ static int nf_tables_newflowtable(struct
|
||||
}
|
||||
|
||||
flowtable->data.type = type;
|
||||
@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
|
||||
flowtable);
|
||||
if (err < 0)
|
||||
@@ -6111,7 +6127,8 @@ static int nf_tables_fill_flowtable_info
|
||||
@@ -6149,7 +6165,8 @@ static int nf_tables_fill_flowtable_info
|
||||
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
|
||||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
|
||||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: DENG Qingfang <dqfext@gmail.com>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -2668,6 +2668,7 @@ static int mv88e6xxx_setup(struct dsa_sw
|
||||
@@ -2676,6 +2676,7 @@ static int mv88e6xxx_setup(struct dsa_sw
|
||||
|
||||
chip->ds = ds;
|
||||
ds->slave_mii_bus = mv88e6xxx_default_mdio_bus(chip);
|
||||
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
|
||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||
@@ -5089,6 +5089,7 @@ static int mv88e6xxx_register_switch(str
|
||||
@@ -5097,6 +5097,7 @@ static int mv88e6xxx_register_switch(str
|
||||
ds->ops = &mv88e6xxx_switch_ops;
|
||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 4eb89c73f32d3c87a6938065bd230b3a93619e3e Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Thu, 31 Aug 2023 11:04:59 +0800
|
||||
Subject: [PATCH] Revert "ASoC: fsl_sai: Disable bit clock with transmitter"
|
||||
|
||||
This reverts commit 94239d1830a1f30c30cd0e14efcad47a4379563b.
|
||||
---
|
||||
sound/soc/fsl/fsl_sai.c | 2 +-
|
||||
sound/soc/fsl/fsl_sai.h | 1 -
|
||||
2 files changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
--- a/sound/soc/fsl/fsl_sai.c
|
||||
+++ b/sound/soc/fsl/fsl_sai.c
|
||||
@@ -548,7 +548,7 @@ static void fsl_sai_config_disable(struc
|
||||
u32 xcsr, count = 100;
|
||||
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
- FSL_SAI_CSR_TERE | FSL_SAI_CSR_BCE, 0);
|
||||
+ FSL_SAI_CSR_TERE, 0);
|
||||
|
||||
/* TERE will remain set till the end of current frame */
|
||||
do {
|
||||
--- a/sound/soc/fsl/fsl_sai.h
|
||||
+++ b/sound/soc/fsl/fsl_sai.h
|
||||
@@ -87,7 +87,6 @@
|
||||
/* SAI Transmit/Receive Control Register */
|
||||
#define FSL_SAI_CSR_TERE BIT(31)
|
||||
#define FSL_SAI_CSR_SE BIT(30)
|
||||
-#define FSL_SAI_CSR_BCE BIT(28)
|
||||
#define FSL_SAI_CSR_FR BIT(25)
|
||||
#define FSL_SAI_CSR_SR BIT(24)
|
||||
#define FSL_SAI_CSR_xF_SHIFT 16
|
@ -0,0 +1,182 @@
|
||||
From 04493d5f2adffe3473941a860ef77bfd5ee05ed3 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Thu, 31 Aug 2023 11:05:06 +0800
|
||||
Subject: [PATCH] Revert "ASoC: fsl_sai: Add new added registers and new bit
|
||||
definition"
|
||||
|
||||
This reverts commit ef9cae4a6c8d4f8822540bed20c2d1eb37722408.
|
||||
---
|
||||
sound/soc/fsl/fsl_sai.c | 23 ----------------
|
||||
sound/soc/fsl/fsl_sai.h | 59 -----------------------------------------
|
||||
2 files changed, 82 deletions(-)
|
||||
|
||||
--- a/sound/soc/fsl/fsl_sai.c
|
||||
+++ b/sound/soc/fsl/fsl_sai.c
|
||||
@@ -810,8 +810,6 @@ static struct reg_default fsl_sai_reg_de
|
||||
{FSL_SAI_RCR4(8), 0},
|
||||
{FSL_SAI_RCR5(8), 0},
|
||||
{FSL_SAI_RMR, 0},
|
||||
- {FSL_SAI_MCTL, 0},
|
||||
- {FSL_SAI_MDIV, 0},
|
||||
};
|
||||
|
||||
static bool fsl_sai_readable_reg(struct device *dev, unsigned int reg)
|
||||
@@ -852,18 +850,6 @@ static bool fsl_sai_readable_reg(struct
|
||||
case FSL_SAI_RFR6:
|
||||
case FSL_SAI_RFR7:
|
||||
case FSL_SAI_RMR:
|
||||
- case FSL_SAI_MCTL:
|
||||
- case FSL_SAI_MDIV:
|
||||
- case FSL_SAI_VERID:
|
||||
- case FSL_SAI_PARAM:
|
||||
- case FSL_SAI_TTCTN:
|
||||
- case FSL_SAI_RTCTN:
|
||||
- case FSL_SAI_TTCTL:
|
||||
- case FSL_SAI_TBCTN:
|
||||
- case FSL_SAI_TTCAP:
|
||||
- case FSL_SAI_RTCTL:
|
||||
- case FSL_SAI_RBCTN:
|
||||
- case FSL_SAI_RTCAP:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -878,10 +864,6 @@ static bool fsl_sai_volatile_reg(struct
|
||||
if (reg == FSL_SAI_TCSR(ofs) || reg == FSL_SAI_RCSR(ofs))
|
||||
return true;
|
||||
|
||||
- /* Set VERID and PARAM be volatile for reading value in probe */
|
||||
- if (ofs == 8 && (reg == FSL_SAI_VERID || reg == FSL_SAI_PARAM))
|
||||
- return true;
|
||||
-
|
||||
switch (reg) {
|
||||
case FSL_SAI_TFR0:
|
||||
case FSL_SAI_TFR1:
|
||||
@@ -935,10 +917,6 @@ static bool fsl_sai_writeable_reg(struct
|
||||
case FSL_SAI_TDR7:
|
||||
case FSL_SAI_TMR:
|
||||
case FSL_SAI_RMR:
|
||||
- case FSL_SAI_MCTL:
|
||||
- case FSL_SAI_MDIV:
|
||||
- case FSL_SAI_TTCTL:
|
||||
- case FSL_SAI_RTCTL:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -987,7 +965,6 @@ static int fsl_sai_probe(struct platform
|
||||
|
||||
if (sai->soc_data->reg_offset == 8) {
|
||||
fsl_sai_regmap_config.reg_defaults = fsl_sai_reg_defaults_ofs8;
|
||||
- fsl_sai_regmap_config.max_register = FSL_SAI_MDIV;
|
||||
fsl_sai_regmap_config.num_reg_defaults =
|
||||
ARRAY_SIZE(fsl_sai_reg_defaults_ofs8);
|
||||
}
|
||||
--- a/sound/soc/fsl/fsl_sai.h
|
||||
+++ b/sound/soc/fsl/fsl_sai.h
|
||||
@@ -14,8 +14,6 @@
|
||||
SNDRV_PCM_FMTBIT_S32_LE)
|
||||
|
||||
/* SAI Register Map Register */
|
||||
-#define FSL_SAI_VERID 0x00 /* SAI Version ID Register */
|
||||
-#define FSL_SAI_PARAM 0x04 /* SAI Parameter Register */
|
||||
#define FSL_SAI_TCSR(ofs) (0x00 + ofs) /* SAI Transmit Control */
|
||||
#define FSL_SAI_TCR1(ofs) (0x04 + ofs) /* SAI Transmit Configuration 1 */
|
||||
#define FSL_SAI_TCR2(ofs) (0x08 + ofs) /* SAI Transmit Configuration 2 */
|
||||
@@ -39,10 +37,6 @@
|
||||
#define FSL_SAI_TFR6 0x58 /* SAI Transmit FIFO 6 */
|
||||
#define FSL_SAI_TFR7 0x5C /* SAI Transmit FIFO 7 */
|
||||
#define FSL_SAI_TMR 0x60 /* SAI Transmit Mask */
|
||||
-#define FSL_SAI_TTCTL 0x70 /* SAI Transmit Timestamp Control Register */
|
||||
-#define FSL_SAI_TTCTN 0x74 /* SAI Transmit Timestamp Counter Register */
|
||||
-#define FSL_SAI_TBCTN 0x78 /* SAI Transmit Bit Counter Register */
|
||||
-#define FSL_SAI_TTCAP 0x7C /* SAI Transmit Timestamp Capture */
|
||||
#define FSL_SAI_RCSR(ofs) (0x80 + ofs) /* SAI Receive Control */
|
||||
#define FSL_SAI_RCR1(ofs) (0x84 + ofs)/* SAI Receive Configuration 1 */
|
||||
#define FSL_SAI_RCR2(ofs) (0x88 + ofs) /* SAI Receive Configuration 2 */
|
||||
@@ -66,13 +60,6 @@
|
||||
#define FSL_SAI_RFR6 0xd8 /* SAI Receive FIFO 6 */
|
||||
#define FSL_SAI_RFR7 0xdc /* SAI Receive FIFO 7 */
|
||||
#define FSL_SAI_RMR 0xe0 /* SAI Receive Mask */
|
||||
-#define FSL_SAI_RTCTL 0xf0 /* SAI Receive Timestamp Control Register */
|
||||
-#define FSL_SAI_RTCTN 0xf4 /* SAI Receive Timestamp Counter Register */
|
||||
-#define FSL_SAI_RBCTN 0xf8 /* SAI Receive Bit Counter Register */
|
||||
-#define FSL_SAI_RTCAP 0xfc /* SAI Receive Timestamp Capture */
|
||||
-
|
||||
-#define FSL_SAI_MCTL 0x100 /* SAI MCLK Control Register */
|
||||
-#define FSL_SAI_MDIV 0x104 /* SAI MCLK Divide Register */
|
||||
|
||||
#define FSL_SAI_xCSR(tx, ofs) (tx ? FSL_SAI_TCSR(ofs) : FSL_SAI_RCSR(ofs))
|
||||
#define FSL_SAI_xCR1(tx, ofs) (tx ? FSL_SAI_TCR1(ofs) : FSL_SAI_RCR1(ofs))
|
||||
@@ -86,7 +73,6 @@
|
||||
|
||||
/* SAI Transmit/Receive Control Register */
|
||||
#define FSL_SAI_CSR_TERE BIT(31)
|
||||
-#define FSL_SAI_CSR_SE BIT(30)
|
||||
#define FSL_SAI_CSR_FR BIT(25)
|
||||
#define FSL_SAI_CSR_SR BIT(24)
|
||||
#define FSL_SAI_CSR_xF_SHIFT 16
|
||||
@@ -120,7 +106,6 @@
|
||||
#define FSL_SAI_CR2_MSEL(ID) ((ID) << 26)
|
||||
#define FSL_SAI_CR2_BCP BIT(25)
|
||||
#define FSL_SAI_CR2_BCD_MSTR BIT(24)
|
||||
-#define FSL_SAI_CR2_BYP BIT(23) /* BCLK bypass */
|
||||
#define FSL_SAI_CR2_DIV_MASK 0xff
|
||||
|
||||
/* SAI Transmit and Receive Configuration 3 Register */
|
||||
@@ -130,13 +115,6 @@
|
||||
#define FSL_SAI_CR3_WDFL_MASK 0x1f
|
||||
|
||||
/* SAI Transmit and Receive Configuration 4 Register */
|
||||
-
|
||||
-#define FSL_SAI_CR4_FCONT BIT(28)
|
||||
-#define FSL_SAI_CR4_FCOMB_SHIFT BIT(26)
|
||||
-#define FSL_SAI_CR4_FCOMB_SOFT BIT(27)
|
||||
-#define FSL_SAI_CR4_FCOMB_MASK (0x3 << 26)
|
||||
-#define FSL_SAI_CR4_FPACK_8 (0x2 << 24)
|
||||
-#define FSL_SAI_CR4_FPACK_16 (0x3 << 24)
|
||||
#define FSL_SAI_CR4_FRSZ(x) (((x) - 1) << 16)
|
||||
#define FSL_SAI_CR4_FRSZ_MASK (0x1f << 16)
|
||||
#define FSL_SAI_CR4_SYWD(x) (((x) - 1) << 8)
|
||||
@@ -154,43 +132,6 @@
|
||||
#define FSL_SAI_CR5_FBT(x) ((x) << 8)
|
||||
#define FSL_SAI_CR5_FBT_MASK (0x1f << 8)
|
||||
|
||||
-/* SAI MCLK Control Register */
|
||||
-#define FSL_SAI_MCTL_MCLK_EN BIT(30) /* MCLK Enable */
|
||||
-#define FSL_SAI_MCTL_MSEL_MASK (0x3 << 24)
|
||||
-#define FSL_SAI_MCTL_MSEL(ID) ((ID) << 24)
|
||||
-#define FSL_SAI_MCTL_MSEL_BUS 0
|
||||
-#define FSL_SAI_MCTL_MSEL_MCLK1 BIT(24)
|
||||
-#define FSL_SAI_MCTL_MSEL_MCLK2 BIT(25)
|
||||
-#define FSL_SAI_MCTL_MSEL_MCLK3 (BIT(24) | BIT(25))
|
||||
-#define FSL_SAI_MCTL_DIV_EN BIT(23)
|
||||
-#define FSL_SAI_MCTL_DIV_MASK 0xFF
|
||||
-
|
||||
-/* SAI VERID Register */
|
||||
-#define FSL_SAI_VERID_MAJOR_SHIFT 24
|
||||
-#define FSL_SAI_VERID_MAJOR_MASK GENMASK(31, 24)
|
||||
-#define FSL_SAI_VERID_MINOR_SHIFT 16
|
||||
-#define FSL_SAI_VERID_MINOR_MASK GENMASK(23, 16)
|
||||
-#define FSL_SAI_VERID_FEATURE_SHIFT 0
|
||||
-#define FSL_SAI_VERID_FEATURE_MASK GENMASK(15, 0)
|
||||
-#define FSL_SAI_VERID_EFIFO_EN BIT(0)
|
||||
-#define FSL_SAI_VERID_TSTMP_EN BIT(1)
|
||||
-
|
||||
-/* SAI PARAM Register */
|
||||
-#define FSL_SAI_PARAM_SPF_SHIFT 16
|
||||
-#define FSL_SAI_PARAM_SPF_MASK GENMASK(19, 16)
|
||||
-#define FSL_SAI_PARAM_WPF_SHIFT 8
|
||||
-#define FSL_SAI_PARAM_WPF_MASK GENMASK(11, 8)
|
||||
-#define FSL_SAI_PARAM_DLN_MASK GENMASK(3, 0)
|
||||
-
|
||||
-/* SAI MCLK Divide Register */
|
||||
-#define FSL_SAI_MDIV_MASK 0xFFFFF
|
||||
-
|
||||
-/* SAI timestamp and bitcounter */
|
||||
-#define FSL_SAI_xTCTL_TSEN BIT(0)
|
||||
-#define FSL_SAI_xTCTL_TSINC BIT(1)
|
||||
-#define FSL_SAI_xTCTL_RTSC BIT(8)
|
||||
-#define FSL_SAI_xTCTL_RBC BIT(9)
|
||||
-
|
||||
/* SAI type */
|
||||
#define FSL_SAI_DMA BIT(0)
|
||||
#define FSL_SAI_USE_AC97 BIT(1)
|
@ -0,0 +1,175 @@
|
||||
From f12dcaf65b9a780f0cc72e3b86479e71a59116f1 Mon Sep 17 00:00:00 2001
|
||||
From: Tianling Shen <cnsztl@gmail.com>
|
||||
Date: Thu, 31 Aug 2023 11:05:11 +0800
|
||||
Subject: [PATCH] Revert "ASoC: fsl_sai: Refine enable/disable TE/RE sequence
|
||||
in trigger()"
|
||||
|
||||
This reverts commit 1b3d751045425ec38e1e68cd1d64da1856772144.
|
||||
---
|
||||
sound/soc/fsl/fsl_sai.c | 126 +++++++++++++---------------------------
|
||||
1 file changed, 41 insertions(+), 85 deletions(-)
|
||||
|
||||
--- a/sound/soc/fsl/fsl_sai.c
|
||||
+++ b/sound/soc/fsl/fsl_sai.c
|
||||
@@ -37,24 +37,6 @@ static const struct snd_pcm_hw_constrain
|
||||
.list = fsl_sai_rates,
|
||||
};
|
||||
|
||||
-/**
|
||||
- * fsl_sai_dir_is_synced - Check if stream is synced by the opposite stream
|
||||
- *
|
||||
- * SAI supports synchronous mode using bit/frame clocks of either Transmitter's
|
||||
- * or Receiver's for both streams. This function is used to check if clocks of
|
||||
- * the stream's are synced by the opposite stream.
|
||||
- *
|
||||
- * @sai: SAI context
|
||||
- * @dir: stream direction
|
||||
- */
|
||||
-static inline bool fsl_sai_dir_is_synced(struct fsl_sai *sai, int dir)
|
||||
-{
|
||||
- int adir = (dir == TX) ? RX : TX;
|
||||
-
|
||||
- /* current dir in async mode while opposite dir in sync mode */
|
||||
- return !sai->synchronous[dir] && sai->synchronous[adir];
|
||||
-}
|
||||
-
|
||||
static irqreturn_t fsl_sai_isr(int irq, void *devid)
|
||||
{
|
||||
struct fsl_sai *sai = (struct fsl_sai *)devid;
|
||||
@@ -541,38 +523,6 @@ static int fsl_sai_hw_free(struct snd_pc
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void fsl_sai_config_disable(struct fsl_sai *sai, int dir)
|
||||
-{
|
||||
- unsigned int ofs = sai->soc_data->reg_offset;
|
||||
- bool tx = dir == TX;
|
||||
- u32 xcsr, count = 100;
|
||||
-
|
||||
- regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
- FSL_SAI_CSR_TERE, 0);
|
||||
-
|
||||
- /* TERE will remain set till the end of current frame */
|
||||
- do {
|
||||
- udelay(10);
|
||||
- regmap_read(sai->regmap, FSL_SAI_xCSR(tx, ofs), &xcsr);
|
||||
- } while (--count && xcsr & FSL_SAI_CSR_TERE);
|
||||
-
|
||||
- regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
- FSL_SAI_CSR_FR, FSL_SAI_CSR_FR);
|
||||
-
|
||||
- /*
|
||||
- * For sai master mode, after several open/close sai,
|
||||
- * there will be no frame clock, and can't recover
|
||||
- * anymore. Add software reset to fix this issue.
|
||||
- * This is a hardware bug, and will be fix in the
|
||||
- * next sai version.
|
||||
- */
|
||||
- if (!sai->is_slave_mode) {
|
||||
- /* Software Reset */
|
||||
- regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), FSL_SAI_CSR_SR);
|
||||
- /* Clear SR bit to finish the reset */
|
||||
- regmap_write(sai->regmap, FSL_SAI_xCSR(tx, ofs), 0);
|
||||
- }
|
||||
-}
|
||||
|
||||
static int fsl_sai_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
struct snd_soc_dai *cpu_dai)
|
||||
@@ -581,9 +531,7 @@ static int fsl_sai_trigger(struct snd_pc
|
||||
unsigned int ofs = sai->soc_data->reg_offset;
|
||||
|
||||
bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
|
||||
- int adir = tx ? RX : TX;
|
||||
- int dir = tx ? TX : RX;
|
||||
- u32 xcsr;
|
||||
+ u32 xcsr, count = 100;
|
||||
|
||||
/*
|
||||
* Asynchronous mode: Clear SYNC for both Tx and Rx.
|
||||
@@ -606,22 +554,10 @@ static int fsl_sai_trigger(struct snd_pc
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
FSL_SAI_CSR_FRDE, FSL_SAI_CSR_FRDE);
|
||||
|
||||
- regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs),
|
||||
+ FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE);
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs),
|
||||
FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE);
|
||||
- /*
|
||||
- * Enable the opposite direction for synchronous mode
|
||||
- * 1. Tx sync with Rx: only set RE for Rx; set TE & RE for Tx
|
||||
- * 2. Rx sync with Tx: only set TE for Tx; set RE & TE for Rx
|
||||
- *
|
||||
- * RM recommends to enable RE after TE for case 1 and to enable
|
||||
- * TE after RE for case 2, but we here may not always guarantee
|
||||
- * that happens: "arecord 1.wav; aplay 2.wav" in case 1 enables
|
||||
- * TE after RE, which is against what RM recommends but should
|
||||
- * be safe to do, judging by years of testing results.
|
||||
- */
|
||||
- if (fsl_sai_dir_is_synced(sai, adir))
|
||||
- regmap_update_bits(sai->regmap, FSL_SAI_xCSR((!tx), ofs),
|
||||
- FSL_SAI_CSR_TERE, FSL_SAI_CSR_TERE);
|
||||
|
||||
regmap_update_bits(sai->regmap, FSL_SAI_xCSR(tx, ofs),
|
||||
FSL_SAI_CSR_xIE_MASK, FSL_SAI_FLAGS);
|
||||
@@ -636,23 +572,43 @@ static int fsl_sai_trigger(struct snd_pc
|
||||
|
||||
/* Check if the opposite FRDE is also disabled */
|
||||
regmap_read(sai->regmap, FSL_SAI_xCSR(!tx, ofs), &xcsr);
|
||||
-
|
||||
- /*
|
||||
- * If opposite stream provides clocks for synchronous mode and
|
||||
- * it is inactive, disable it before disabling the current one
|
||||
- */
|
||||
- if (fsl_sai_dir_is_synced(sai, adir) && !(xcsr & FSL_SAI_CSR_FRDE))
|
||||
- fsl_sai_config_disable(sai, adir);
|
||||
-
|
||||
- /*
|
||||
- * Disable current stream if either of:
|
||||
- * 1. current stream doesn't provide clocks for synchronous mode
|
||||
- * 2. current stream provides clocks for synchronous mode but no
|
||||
- * more stream is active.
|
||||
- */
|
||||
- if (!fsl_sai_dir_is_synced(sai, dir) || !(xcsr & FSL_SAI_CSR_FRDE))
|
||||
- fsl_sai_config_disable(sai, dir);
|
||||
-
|
||||
+ if (!(xcsr & FSL_SAI_CSR_FRDE)) {
|
||||
+ /* Disable both directions and reset their FIFOs */
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs),
|
||||
+ FSL_SAI_CSR_TERE, 0);
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs),
|
||||
+ FSL_SAI_CSR_TERE, 0);
|
||||
+
|
||||
+ /* TERE will remain set till the end of current frame */
|
||||
+ do {
|
||||
+ udelay(10);
|
||||
+ regmap_read(sai->regmap,
|
||||
+ FSL_SAI_xCSR(tx, ofs), &xcsr);
|
||||
+ } while (--count && xcsr & FSL_SAI_CSR_TERE);
|
||||
+
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_TCSR(ofs),
|
||||
+ FSL_SAI_CSR_FR, FSL_SAI_CSR_FR);
|
||||
+ regmap_update_bits(sai->regmap, FSL_SAI_RCSR(ofs),
|
||||
+ FSL_SAI_CSR_FR, FSL_SAI_CSR_FR);
|
||||
+
|
||||
+ /*
|
||||
+ * For sai master mode, after several open/close sai,
|
||||
+ * there will be no frame clock, and can't recover
|
||||
+ * anymore. Add software reset to fix this issue.
|
||||
+ * This is a hardware bug, and will be fix in the
|
||||
+ * next sai version.
|
||||
+ */
|
||||
+ if (!sai->is_slave_mode) {
|
||||
+ /* Software Reset for both Tx and Rx */
|
||||
+ regmap_write(sai->regmap, FSL_SAI_TCSR(ofs),
|
||||
+ FSL_SAI_CSR_SR);
|
||||
+ regmap_write(sai->regmap, FSL_SAI_RCSR(ofs),
|
||||
+ FSL_SAI_CSR_SR);
|
||||
+ /* Clear SR bit to finish the reset */
|
||||
+ regmap_write(sai->regmap, FSL_SAI_TCSR(ofs), 0);
|
||||
+ regmap_write(sai->regmap, FSL_SAI_RCSR(ofs), 0);
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
@ -168,7 +168,7 @@ This reverts commit cf9441adb1a35506d7606866c382b9d8614169b5.
|
||||
if (ret) {
|
||||
--- a/sound/soc/fsl/fsl_spdif.c
|
||||
+++ b/sound/soc/fsl/fsl_spdif.c
|
||||
@@ -1248,8 +1248,10 @@ static int fsl_spdif_probe(struct platfo
|
||||
@@ -1250,8 +1250,10 @@ static int fsl_spdif_probe(struct platfo
|
||||
}
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
@ -16,7 +16,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -1275,6 +1275,17 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1259,6 +1259,17 @@ static void dwc3_get_properties(struct d
|
||||
|
||||
dwc->maximum_speed = usb_get_maximum_speed(dev);
|
||||
dwc->dr_mode = usb_get_dr_mode(dev);
|
||||
@ -36,7 +36,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||
dwc->sysdev_is_parent = device_property_read_bool(dev,
|
||||
--- a/drivers/usb/dwc3/core.h
|
||||
+++ b/drivers/usb/dwc3/core.h
|
||||
@@ -955,6 +955,7 @@ struct dwc3_scratchpad_array {
|
||||
@@ -952,6 +952,7 @@ struct dwc3_scratchpad_array {
|
||||
* @nr_scratch: number of scratch buffers
|
||||
* @u1u2: only used on revisions <1.83a for workaround
|
||||
* @maximum_speed: maximum speed requested (mainly for testing purposes)
|
||||
@ -44,7 +44,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||
* @revision: revision register contents
|
||||
* @version_type: VERSIONTYPE register contents, a sub release of a revision
|
||||
* @dr_mode: requested mode of operation
|
||||
@@ -1112,6 +1113,7 @@ struct dwc3 {
|
||||
@@ -1109,6 +1110,7 @@ struct dwc3 {
|
||||
u32 nr_scratch;
|
||||
u32 u1u2;
|
||||
u32 maximum_speed;
|
||||
@ -54,7 +54,7 @@ Signed-off-by: Peter Chen <peter.chen@nxp.com>
|
||||
* All 3.1 IP version constants are greater than the 3.0 IP
|
||||
--- a/drivers/usb/dwc3/gadget.c
|
||||
+++ b/drivers/usb/dwc3/gadget.c
|
||||
@@ -3713,6 +3713,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
||||
@@ -3718,6 +3718,10 @@ int dwc3_gadget_init(struct dwc3 *dwc)
|
||||
dwc->gadget.sg_supported = true;
|
||||
dwc->gadget.name = "dwc3-gadget";
|
||||
dwc->gadget.lpm_capable = true;
|
||||
|
@ -23,7 +23,7 @@ Signed-off-by: Li Jun <jun.li@nxp.com>
|
||||
#include <linux/ulpi/interface.h>
|
||||
|
||||
#include <linux/phy/phy.h>
|
||||
@@ -1097,6 +1098,7 @@ struct dwc3 {
|
||||
@@ -1094,6 +1095,7 @@ struct dwc3 {
|
||||
void __iomem *regs;
|
||||
size_t regs_size;
|
||||
|
||||
|
@ -32,7 +32,7 @@ Reviewed-by: Peter Chen <peter.chen@nxp.com>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -1370,6 +1370,9 @@ static void dwc3_get_properties(struct d
|
||||
@@ -1354,6 +1354,9 @@ static void dwc3_get_properties(struct d
|
||||
dwc->dis_split_quirk = device_property_read_bool(dev,
|
||||
"snps,dis-split-quirk");
|
||||
|
||||
@ -44,7 +44,7 @@ Reviewed-by: Peter Chen <peter.chen@nxp.com>
|
||||
|
||||
--- a/drivers/usb/dwc3/core.h
|
||||
+++ b/drivers/usb/dwc3/core.h
|
||||
@@ -1049,6 +1049,8 @@ struct dwc3_scratchpad_array {
|
||||
@@ -1046,6 +1046,8 @@ struct dwc3_scratchpad_array {
|
||||
* 3 - Reserved
|
||||
* @dis_metastability_quirk: set to disable metastability quirk.
|
||||
* @dis_split_quirk: set to disable split boundary.
|
||||
@ -53,7 +53,7 @@ Reviewed-by: Peter Chen <peter.chen@nxp.com>
|
||||
* @imod_interval: set the interrupt moderation interval in 250ns
|
||||
* increments or 0 to disable.
|
||||
*/
|
||||
@@ -1245,6 +1247,8 @@ struct dwc3 {
|
||||
@@ -1242,6 +1244,8 @@ struct dwc3 {
|
||||
|
||||
unsigned dis_split_quirk:1;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user