kernel: bump 6.12 to 6.12.35
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.35 Remove upstreamed patches: bcm27xx/patches-6.12/950-0961-media-imx335-Use-correct-register-width-for-HNUM.patch [1] bcm27xx/patches-6.12/950-1003-drivers-media-i2c-imx335-Fix-frame-size-enumeration.patch [2] gemini/patches-6.12/0001-net-ethernet-cortina-Use-TOE-TSO-on-all-TCP.patch [3] generic/backport-6.12/300-v6.16-mips-Add-std-flag-specified.patch [4] mvebu/patches-6.12/0004-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch [5] mvebu/patches-6.12/0005-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch [6] mvebu/patches-6.12/0006-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch [7] mvebu/patches-6.12/0007-v6.16-pinctrl-armada-37xx-propagate-error-from-armada_37xx.patch [8] Manually rebased patches: bcm27xx/patches-6.12/950-0392-fbdev-Allow-client-to-request-a-particular-dev-fbN-n.patch [9] All other patches are automatically refreshed. [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=b93864e0865f235a791e69dc9ef4f896e559ef77 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=1f78790d988c9d55cf8d4b4d511d4b3e38ecb81d [3] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=2bd434bb0eeb680c2b3dd6c68ca319b30cb8d47f [4] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=6dbda47fe8bd6aa978c150bc9d321a286d2cc3f4 [5] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=2cd2022c38fa26257cc6eec100ae122de9c1541c [6] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=133f17922b3dbae44fe583fb898b92b03558a657 [7] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=aefe45843ea667366e35df4fcfef5ff9051a86c9 [8] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=461d5a73ae45fbe6c300a6e64600f9792684eb52 [9] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.35&id=3f2098f4fba7718eb2501207ca6e99d22427f25a Signed-off-by: Shiji Yang <yangshiji66@outlook.com> Link: https://github.com/openwrt/openwrt/pull/19249 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
e32977f7ac
commit
9ddeb30499
40 changed files with 96 additions and 457 deletions
|
@ -623,7 +623,7 @@ SVN-Revision: 35130
|
|||
|
||||
/*
|
||||
* Jumbo payload option, as described in RFC 2675 2.
|
||||
@@ -651,8 +651,8 @@ static inline void __ipv6_addr_set_half(
|
||||
@@ -642,8 +642,8 @@ static inline void __ipv6_addr_set_half(
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -634,7 +634,7 @@ SVN-Revision: 35130
|
|||
}
|
||||
|
||||
static inline void ipv6_addr_set(struct in6_addr *addr,
|
||||
@@ -711,6 +711,8 @@ static inline bool ipv6_prefix_equal(con
|
||||
@@ -702,6 +702,8 @@ static inline bool ipv6_prefix_equal(con
|
||||
const __be32 *a1 = addr1->s6_addr32;
|
||||
const __be32 *a2 = addr2->s6_addr32;
|
||||
unsigned int pdw, pbi;
|
||||
|
@ -643,7 +643,7 @@ SVN-Revision: 35130
|
|||
|
||||
/* check complete u32 in prefix */
|
||||
pdw = prefixlen >> 5;
|
||||
@@ -719,7 +721,9 @@ static inline bool ipv6_prefix_equal(con
|
||||
@@ -710,7 +712,9 @@ static inline bool ipv6_prefix_equal(con
|
||||
|
||||
/* check incomplete u32 in prefix */
|
||||
pbi = prefixlen & 0x1f;
|
||||
|
@ -654,7 +654,7 @@ SVN-Revision: 35130
|
|||
return false;
|
||||
|
||||
return true;
|
||||
@@ -836,13 +840,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
@@ -827,13 +831,13 @@ static inline void ipv6_addr_set_v4mappe
|
||||
*/
|
||||
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
|
||||
{
|
||||
|
@ -670,7 +670,7 @@ SVN-Revision: 35130
|
|||
if (xb)
|
||||
return i * 32 + 31 - __fls(ntohl(xb));
|
||||
}
|
||||
@@ -1037,17 +1041,18 @@ static inline u32 ip6_multipath_hash_fie
|
||||
@@ -1028,17 +1032,18 @@ static inline u32 ip6_multipath_hash_fie
|
||||
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
|
||||
__be32 flowlabel)
|
||||
{
|
||||
|
@ -750,7 +750,7 @@ SVN-Revision: 35130
|
|||
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4329,14 +4329,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
@@ -4338,14 +4338,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||
{
|
||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||
|
||||
|
|
|
@ -344,7 +344,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
}
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -143,6 +143,14 @@ static const struct mmc_fixup __maybe_un
|
||||
@@ -153,6 +153,14 @@ static const struct mmc_fixup __maybe_un
|
||||
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
|
||||
MMC_QUIRK_BROKEN_SD_DISCARD),
|
||||
|
||||
|
@ -2011,10 +2011,10 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
sdhci_dumpregs(host);
|
||||
--- a/include/linux/mmc/card.h
|
||||
+++ b/include/linux/mmc/card.h
|
||||
@@ -295,6 +295,7 @@ struct mmc_card {
|
||||
#define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */
|
||||
@@ -296,6 +296,7 @@ struct mmc_card {
|
||||
#define MMC_QUIRK_BROKEN_CACHE_FLUSH (1<<16) /* Don't flush cache until the write has occurred */
|
||||
#define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17) /* Disable broken SD poweroff notify support */
|
||||
#define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */
|
||||
+#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */
|
||||
|
||||
bool written_flag; /* Indicates eMMC has been written since power on */
|
||||
|
|
|
@ -367,7 +367,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
spin_lock_init(&bp->lock);
|
||||
spin_lock_init(&bp->stats_lock);
|
||||
|
||||
@@ -5165,6 +5284,21 @@ static int macb_probe(struct platform_de
|
||||
@@ -5169,6 +5288,21 @@ static int macb_probe(struct platform_de
|
||||
else
|
||||
bp->phy_interface = interface;
|
||||
|
||||
|
@ -389,7 +389,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
/* IP specific init */
|
||||
err = init(pdev);
|
||||
if (err)
|
||||
@@ -5239,6 +5373,19 @@ static void macb_remove(struct platform_
|
||||
@@ -5243,6 +5377,19 @@ static void macb_remove(struct platform_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -409,7 +409,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
static int __maybe_unused macb_suspend(struct device *dev)
|
||||
{
|
||||
struct net_device *netdev = dev_get_drvdata(dev);
|
||||
@@ -5492,6 +5639,7 @@ static const struct dev_pm_ops macb_pm_o
|
||||
@@ -5496,6 +5643,7 @@ static const struct dev_pm_ops macb_pm_o
|
||||
static struct platform_driver macb_driver = {
|
||||
.probe = macb_probe,
|
||||
.remove_new = macb_remove,
|
||||
|
|
|
@ -22,33 +22,40 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||
#define for_each_registered_fb(i) \
|
||||
for (i = 0; i < FB_MAX; i++) \
|
||||
if (!registered_fb[i]) {} else
|
||||
@@ -398,10 +399,12 @@ static int do_register_framebuffer(struc
|
||||
@@ -399,9 +400,12 @@ static int do_register_framebuffer(struc
|
||||
if (num_registered_fb == FB_MAX)
|
||||
return -ENXIO;
|
||||
|
||||
num_registered_fb++;
|
||||
- for (i = 0 ; i < FB_MAX; i++)
|
||||
- if (!registered_fb[i])
|
||||
- break;
|
||||
- fb_info->node = i;
|
||||
+ if (!fb_info->custom_fb_num || fb_info->node >= FB_MAX || registered_fb[fb_info->node]) {
|
||||
+ for (i = min_dynamic_fb ; i < FB_MAX; i++)
|
||||
+ if (!registered_fb[i])
|
||||
+ break;
|
||||
+ fb_info->node = i;
|
||||
+ }
|
||||
|
||||
if (!fb_info->modelist.prev || !fb_info->modelist.next)
|
||||
INIT_LIST_HEAD(&fb_info->modelist);
|
||||
@@ -411,7 +415,6 @@ static int do_register_framebuffer(struc
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
- fb_info->node = i;
|
||||
refcount_set(&fb_info->count, 1);
|
||||
mutex_init(&fb_info->lock);
|
||||
mutex_init(&fb_info->mm_lock);
|
||||
@@ -436,7 +439,7 @@ static int do_register_framebuffer(struc
|
||||
@@ -442,7 +445,7 @@ static int do_register_framebuffer(struc
|
||||
pm_vt_switch_required(fb_info->device, true);
|
||||
|
||||
fb_var_to_videomode(&mode, &fb_info->var);
|
||||
fb_add_videomode(&mode, &fb_info->modelist);
|
||||
num_registered_fb++;
|
||||
- registered_fb[i] = fb_info;
|
||||
+ registered_fb[fb_info->node] = fb_info;
|
||||
|
||||
#ifdef CONFIG_GUMSTIX_AM200EPD
|
||||
{
|
||||
@@ -497,6 +500,12 @@ static void do_unregister_framebuffer(st
|
||||
@@ -503,6 +506,12 @@ static void do_unregister_framebuffer(st
|
||||
put_fb_info(fb_info);
|
||||
}
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
cmd.flags &= ~MMC_RSP_CRC; /* Ignore CRC */
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1011,8 +1011,8 @@ static bool mmc_sd_card_using_v18(struct
|
||||
@@ -1027,8 +1027,8 @@ static bool mmc_sd_card_using_v18(struct
|
||||
(SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50);
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
{
|
||||
struct mmc_host *host = card->host;
|
||||
struct mmc_request mrq = {};
|
||||
@@ -1170,8 +1170,14 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1186,8 +1186,14 @@ static int sd_parse_ext_reg_perf(struct
|
||||
card->ext_perf.feature_support |= SD_EXT_PERF_CACHE;
|
||||
|
||||
/* Command queue support indicated via queue depth bits (0 to 4). */
|
||||
|
@ -118,7 +118,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
card->ext_perf.fno = fno;
|
||||
card->ext_perf.page = page;
|
||||
@@ -1558,13 +1564,41 @@ cont:
|
||||
@@ -1574,13 +1580,41 @@ cont:
|
||||
goto free_card;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
kfree(card);
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1021,9 +1021,8 @@ int sd_write_ext_reg(struct mmc_card *ca
|
||||
@@ -1037,9 +1037,8 @@ int sd_write_ext_reg(struct mmc_card *ca
|
||||
struct scatterlist sg;
|
||||
u8 *reg_buf;
|
||||
|
||||
|
@ -42,7 +42,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
mrq.cmd = &cmd;
|
||||
mrq.data = &data;
|
||||
@@ -1055,8 +1054,6 @@ int sd_write_ext_reg(struct mmc_card *ca
|
||||
@@ -1071,8 +1070,6 @@ int sd_write_ext_reg(struct mmc_card *ca
|
||||
mmc_set_data_timeout(&data, card);
|
||||
mmc_wait_for_req(host, &mrq);
|
||||
|
||||
|
@ -51,7 +51,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
/*
|
||||
* Note that, the SD card is allowed to signal busy on DAT0 up to 1s
|
||||
* after the CMD49. Although, let's leave this to be managed by the
|
||||
@@ -1097,9 +1094,7 @@ static int sd_parse_ext_reg_power(struct
|
||||
@@ -1113,9 +1110,7 @@ static int sd_parse_ext_reg_power(struct
|
||||
int err;
|
||||
u8 *reg_buf;
|
||||
|
||||
|
@ -62,7 +62,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
/* Read the extension register for power management function. */
|
||||
err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf);
|
||||
@@ -1129,7 +1124,6 @@ static int sd_parse_ext_reg_power(struct
|
||||
@@ -1145,7 +1140,6 @@ static int sd_parse_ext_reg_power(struct
|
||||
card->ext_power.offset = offset;
|
||||
|
||||
out:
|
||||
|
@ -70,7 +70,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
return err;
|
||||
}
|
||||
|
||||
@@ -1139,9 +1133,7 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1155,9 +1149,7 @@ static int sd_parse_ext_reg_perf(struct
|
||||
int err;
|
||||
u8 *reg_buf;
|
||||
|
||||
|
@ -81,7 +81,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
err = sd_read_ext_reg(card, fno, page, offset, 512, reg_buf);
|
||||
if (err) {
|
||||
@@ -1184,7 +1176,6 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1200,7 +1192,6 @@ static int sd_parse_ext_reg_perf(struct
|
||||
card->ext_perf.offset = offset;
|
||||
|
||||
out:
|
||||
|
@ -89,7 +89,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
return err;
|
||||
}
|
||||
|
||||
@@ -1255,6 +1246,12 @@ static int sd_read_ext_regs(struct mmc_c
|
||||
@@ -1271,6 +1262,12 @@ static int sd_read_ext_regs(struct mmc_c
|
||||
if (!gen_info_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -102,7 +102,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
/*
|
||||
* Read 512 bytes of general info, which is found at function number 0,
|
||||
* at page 0 and with no offset.
|
||||
@@ -1321,9 +1318,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
@@ -1337,9 +1334,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
if (!sd_cache_enabled(host))
|
||||
return 0;
|
||||
|
||||
|
@ -113,7 +113,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
/*
|
||||
* Set Flush Cache at bit 0 in the performance enhancement register at
|
||||
@@ -1359,21 +1354,15 @@ static int sd_flush_cache(struct mmc_hos
|
||||
@@ -1375,21 +1370,15 @@ static int sd_flush_cache(struct mmc_hos
|
||||
if (reg_buf[0] & BIT(0))
|
||||
err = -ETIMEDOUT;
|
||||
out:
|
||||
|
@ -135,7 +135,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
/*
|
||||
* Set Cache Enable at bit 0 in the performance enhancement register at
|
||||
* 260 bytes offset.
|
||||
@@ -1392,7 +1381,6 @@ static int sd_enable_cache(struct mmc_ca
|
||||
@@ -1408,7 +1397,6 @@ static int sd_enable_cache(struct mmc_ca
|
||||
card->ext_perf.feature_enabled |= SD_EXT_PERF_CACHE;
|
||||
|
||||
out:
|
||||
|
@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/include/linux/mmc/card.h
|
||||
+++ b/include/linux/mmc/card.h
|
||||
@@ -320,6 +320,7 @@ struct mmc_card {
|
||||
@@ -321,6 +321,7 @@ struct mmc_card {
|
||||
struct sd_switch_caps sw_caps; /* switch (CMD6) caps */
|
||||
struct sd_ext_reg ext_power; /* SD extension reg for PM */
|
||||
struct sd_ext_reg ext_perf; /* SD extension reg for PERF */
|
||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1011,83 +1011,6 @@ static bool mmc_sd_card_using_v18(struct
|
||||
@@ -1027,83 +1027,6 @@ static bool mmc_sd_card_using_v18(struct
|
||||
(SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50);
|
||||
}
|
||||
|
||||
|
@ -100,7 +100,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
static int sd_parse_ext_reg_power(struct mmc_card *card, u8 fno, u8 page,
|
||||
u16 offset)
|
||||
{
|
||||
@@ -1097,7 +1020,7 @@ static int sd_parse_ext_reg_power(struct
|
||||
@@ -1113,7 +1036,7 @@ static int sd_parse_ext_reg_power(struct
|
||||
reg_buf = card->ext_reg_buf;
|
||||
|
||||
/* Read the extension register for power management function. */
|
||||
|
@ -109,7 +109,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err) {
|
||||
pr_warn("%s: error %d reading PM func of ext reg\n",
|
||||
mmc_hostname(card->host), err);
|
||||
@@ -1135,7 +1058,7 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1151,7 +1074,7 @@ static int sd_parse_ext_reg_perf(struct
|
||||
|
||||
reg_buf = card->ext_reg_buf;
|
||||
|
||||
|
@ -118,7 +118,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err) {
|
||||
pr_warn("%s: error %d reading PERF func of ext reg\n",
|
||||
mmc_hostname(card->host), err);
|
||||
@@ -1230,7 +1153,7 @@ static int sd_parse_ext_reg(struct mmc_c
|
||||
@@ -1246,7 +1169,7 @@ static int sd_parse_ext_reg(struct mmc_c
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
{
|
||||
int err, i;
|
||||
u8 num_ext, *gen_info_buf;
|
||||
@@ -1256,7 +1179,7 @@ static int sd_read_ext_regs(struct mmc_c
|
||||
@@ -1272,7 +1195,7 @@ static int sd_read_ext_regs(struct mmc_c
|
||||
* Read 512 bytes of general info, which is found at function number 0,
|
||||
* at page 0 and with no offset.
|
||||
*/
|
||||
|
@ -136,7 +136,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err) {
|
||||
pr_err("%s: error %d reading general info of SD ext reg\n",
|
||||
mmc_hostname(card->host), err);
|
||||
@@ -1328,7 +1251,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
@@ -1344,7 +1267,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
page = card->ext_perf.page;
|
||||
offset = card->ext_perf.offset + 261;
|
||||
|
||||
|
@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err) {
|
||||
pr_warn("%s: error %d writing Cache Flush bit\n",
|
||||
mmc_hostname(host), err);
|
||||
@@ -1344,7 +1267,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
@@ -1360,7 +1283,7 @@ static int sd_flush_cache(struct mmc_hos
|
||||
* Read the Flush Cache bit. The card shall reset it, to confirm that
|
||||
* it's has completed the flushing of the cache.
|
||||
*/
|
||||
|
@ -154,7 +154,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err) {
|
||||
pr_warn("%s: error %d reading Cache Flush bit\n",
|
||||
mmc_hostname(host), err);
|
||||
@@ -1367,7 +1290,7 @@ static int sd_enable_cache(struct mmc_ca
|
||||
@@ -1383,7 +1306,7 @@ static int sd_enable_cache(struct mmc_ca
|
||||
* Set Cache Enable at bit 0 in the performance enhancement register at
|
||||
* 260 bytes offset.
|
||||
*/
|
||||
|
@ -163,7 +163,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
card->ext_perf.offset + 260, BIT(0));
|
||||
if (err) {
|
||||
pr_warn("%s: error %d writing Cache Enable bit\n",
|
||||
@@ -1540,7 +1463,7 @@ retry:
|
||||
@@ -1556,7 +1479,7 @@ retry:
|
||||
cont:
|
||||
if (!oldcard) {
|
||||
/* Read/parse the extension registers. */
|
||||
|
@ -172,7 +172,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (err)
|
||||
goto free_card;
|
||||
}
|
||||
@@ -1667,7 +1590,7 @@ static int sd_busy_poweroff_notify_cb(vo
|
||||
@@ -1683,7 +1606,7 @@ static int sd_busy_poweroff_notify_cb(vo
|
||||
* one byte offset and is one byte long. The Power Off Notification
|
||||
* Ready is bit 0.
|
||||
*/
|
||||
|
@ -181,7 +181,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
card->ext_power.offset + 1, 1, data->reg_buf);
|
||||
if (err) {
|
||||
pr_warn("%s: error %d reading status reg of PM func\n",
|
||||
@@ -1693,7 +1616,7 @@ static int sd_poweroff_notify(struct mmc
|
||||
@@ -1709,7 +1632,7 @@ static int sd_poweroff_notify(struct mmc
|
||||
* Set the Power Off Notification bit in the power management settings
|
||||
* register at 2 bytes offset.
|
||||
*/
|
||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1084,8 +1084,12 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1100,8 +1100,12 @@ static int sd_parse_ext_reg_perf(struct
|
||||
if ((reg_buf[4] & BIT(0)) && !mmc_card_broken_sd_cache(card))
|
||||
card->ext_perf.feature_support |= SD_EXT_PERF_CACHE;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
pr_info("%s: Host Software Queue enabled\n",
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -710,7 +710,8 @@ MMC_DEV_ATTR(oemid, "0x%04x\n", card->ci
|
||||
@@ -726,7 +726,8 @@ MMC_DEV_ATTR(oemid, "0x%04x\n", card->ci
|
||||
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
|
||||
MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
|
||||
MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
|
||||
|
@ -36,7 +36,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
static ssize_t mmc_dsr_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
@@ -772,6 +773,8 @@ static struct attribute *sd_std_attrs[]
|
||||
@@ -788,6 +789,8 @@ static struct attribute *sd_std_attrs[]
|
||||
&dev_attr_ocr.attr,
|
||||
&dev_attr_rca.attr,
|
||||
&dev_attr_dsr.attr,
|
||||
|
@ -45,7 +45,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
NULL,
|
||||
};
|
||||
|
||||
@@ -1507,8 +1510,8 @@ cont:
|
||||
@@ -1523,8 +1526,8 @@ cont:
|
||||
host->cqe_enabled = true;
|
||||
|
||||
if (card->ext_csd.cmdq_en) {
|
||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1172,7 +1172,7 @@ static int mmc_sd_read_ext_regs(struct m
|
||||
@@ -1188,7 +1188,7 @@ static int mmc_sd_read_ext_regs(struct m
|
||||
if (!(card->scr.cmds & SD_SCR_CMD48_SUPPORT))
|
||||
return 0;
|
||||
|
||||
|
@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (!gen_info_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -1203,14 +1203,23 @@ static int mmc_sd_read_ext_regs(struct m
|
||||
@@ -1219,14 +1219,23 @@ static int mmc_sd_read_ext_regs(struct m
|
||||
num_ext = gen_info_buf[4];
|
||||
|
||||
/*
|
||||
|
|
|
@ -145,7 +145,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
bool busy;
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1099,6 +1099,15 @@ static int sd_parse_ext_reg_perf(struct
|
||||
@@ -1115,6 +1115,15 @@ static int sd_parse_ext_reg_perf(struct
|
||||
pr_debug("%s: Command Queue supported depth %u\n",
|
||||
mmc_hostname(card->host),
|
||||
card->ext_csd.cmdq_depth);
|
||||
|
@ -161,7 +161,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
}
|
||||
|
||||
card->ext_perf.fno = fno;
|
||||
@@ -1362,6 +1371,7 @@ retry:
|
||||
@@ -1378,6 +1387,7 @@ retry:
|
||||
|
||||
card->ocr = ocr;
|
||||
card->type = MMC_TYPE_SD;
|
||||
|
@ -171,7 +171,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/include/linux/mmc/card.h
|
||||
+++ b/include/linux/mmc/card.h
|
||||
@@ -343,6 +343,8 @@ struct mmc_card {
|
||||
@@ -344,6 +344,8 @@ struct mmc_card {
|
||||
unsigned int nr_parts;
|
||||
|
||||
struct workqueue_struct *complete_wq; /* Private workqueue */
|
||||
|
|
|
@ -26,13 +26,13 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
#define CID_MANFID_SAMSUNG 0x15
|
||||
+#define CID_MANFID_SAMSUNG_SD 0x1b
|
||||
#define CID_MANFID_APACER 0x27
|
||||
#define CID_MANFID_SWISSBIT 0x5D
|
||||
#define CID_MANFID_KINGSTON 0x70
|
||||
#define CID_MANFID_HYNIX 0x90
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -34,6 +34,14 @@ static const struct mmc_fixup __maybe_un
|
||||
MMC_QUIRK_BROKEN_SD_CACHE | MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY,
|
||||
EXT_CSD_REV_ANY),
|
||||
@@ -44,6 +44,14 @@ static const struct mmc_fixup __maybe_un
|
||||
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
|
||||
MMC_QUIRK_NO_UHS_DDR50_TUNING, EXT_CSD_REV_ANY),
|
||||
|
||||
+ /*
|
||||
+ * Samsung Pro Plus/EVO Plus/Pro Ultimate SD cards (2023) claim to cache
|
||||
|
|
|
@ -14,7 +14,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -42,6 +42,18 @@ static const struct mmc_fixup __maybe_un
|
||||
@@ -52,6 +52,18 @@ static const struct mmc_fixup __maybe_un
|
||||
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
|
||||
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -171,6 +171,15 @@ static const struct mmc_fixup __maybe_un
|
||||
@@ -181,6 +181,15 @@ static const struct mmc_fixup __maybe_un
|
||||
MMC_FIXUP("SD32G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
|
||||
MMC_FIXUP("SD64G", 0x41, 0x3432, add_quirk, MMC_QUIRK_ERASE_BROKEN),
|
||||
|
||||
|
|
|
@ -22,8 +22,8 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/card.h
|
||||
+++ b/drivers/mmc/core/card.h
|
||||
@@ -295,4 +295,9 @@ static inline int mmc_card_broken_sd_pow
|
||||
return c->quirks & MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY;
|
||||
@@ -301,4 +301,9 @@ static inline int mmc_card_no_uhs_ddr50_
|
||||
return c->quirks & MMC_QUIRK_NO_UHS_DDR50_TUNING;
|
||||
}
|
||||
|
||||
+static inline int mmc_card_working_sd_cq(const struct mmc_card *c)
|
||||
|
@ -34,7 +34,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
#endif
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1501,6 +1501,10 @@ cont:
|
||||
@@ -1517,6 +1517,10 @@ cont:
|
||||
goto free_card;
|
||||
}
|
||||
|
||||
|
@ -47,10 +47,10 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
/*
|
||||
--- a/include/linux/mmc/card.h
|
||||
+++ b/include/linux/mmc/card.h
|
||||
@@ -295,6 +295,7 @@ struct mmc_card {
|
||||
#define MMC_QUIRK_BROKEN_SD_CACHE (1<<15) /* Disable broken SD cache support */
|
||||
@@ -296,6 +296,7 @@ struct mmc_card {
|
||||
#define MMC_QUIRK_BROKEN_CACHE_FLUSH (1<<16) /* Don't flush cache until the write has occurred */
|
||||
#define MMC_QUIRK_BROKEN_SD_POWEROFF_NOTIFY (1<<17) /* Disable broken SD poweroff notify support */
|
||||
#define MMC_QUIRK_NO_UHS_DDR50_TUNING (1<<18) /* Disable DDR50 tuning */
|
||||
+#define MMC_QUIRK_WORKING_SD_CQ (1<<30) /* SD card has known-good CQ implementation */
|
||||
#define MMC_QUIRK_ERASE_BROKEN (1<<31) /* Skip erase */
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/mmc/core/card.h
|
||||
+++ b/drivers/mmc/core/card.h
|
||||
@@ -93,6 +93,7 @@ struct mmc_fixup {
|
||||
@@ -94,6 +94,7 @@ struct mmc_fixup {
|
||||
#define CID_MANFID_KINGSTON 0x70
|
||||
#define CID_MANFID_HYNIX 0x90
|
||||
#define CID_MANFID_KINGSTON_SD 0x9F
|
||||
|
@ -26,7 +26,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
#define END_FIXUP { NULL }
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -66,6 +66,12 @@ static const struct mmc_fixup __maybe_un
|
||||
@@ -76,6 +76,12 @@ static const struct mmc_fixup __maybe_un
|
||||
0, -1ull, SDIO_ANY_ID, SDIO_ANY_ID, add_quirk_sd,
|
||||
MMC_QUIRK_BROKEN_SD_CACHE, EXT_CSD_REV_ANY),
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
if (host->caps & MMC_CAP_NONREMOVABLE)
|
||||
--- a/drivers/mmc/core/sd.c
|
||||
+++ b/drivers/mmc/core/sd.c
|
||||
@@ -1501,8 +1501,8 @@ cont:
|
||||
@@ -1517,8 +1517,8 @@ cont:
|
||||
goto free_card;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20250113154741.67520-2-mcana
|
|||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
@@ -673,8 +673,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc
|
||||
@@ -677,8 +677,6 @@ v3d_cpu_job_run(struct drm_sched_job *sc
|
||||
struct v3d_cpu_job *job = to_cpu_job(sched_job);
|
||||
struct v3d_dev *v3d = job->base.v3d;
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
@@ -226,8 +226,12 @@ static struct dma_fence *v3d_bin_job_run
|
||||
@@ -230,8 +230,12 @@ static struct dma_fence *v3d_bin_job_run
|
||||
struct dma_fence *fence;
|
||||
unsigned long irqflags;
|
||||
|
||||
|
@ -47,7 +47,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
|
||||
/* Lock required around bin_job update vs
|
||||
* v3d_overflow_mem_work().
|
||||
@@ -281,8 +285,10 @@ static struct dma_fence *v3d_render_job_
|
||||
@@ -285,8 +289,10 @@ static struct dma_fence *v3d_render_job_
|
||||
struct drm_device *dev = &v3d->drm;
|
||||
struct dma_fence *fence;
|
||||
|
||||
|
@ -59,7 +59,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
|
||||
v3d->render_job = job;
|
||||
|
||||
@@ -327,8 +333,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
@@ -331,8 +337,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
struct drm_device *dev = &v3d->drm;
|
||||
struct dma_fence *fence;
|
||||
|
||||
|
@ -71,7 +71,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
|
||||
v3d->tfu_job = job;
|
||||
|
||||
@@ -373,8 +381,10 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
@@ -377,8 +385,10 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
struct dma_fence *fence;
|
||||
int i, csd_cfg0_reg;
|
||||
|
||||
|
|
|
@ -444,7 +444,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
}
|
||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
@@ -357,11 +357,11 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
@@ -361,11 +361,11 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
V3D_WRITE(V3D_TFU_ICA(v3d->ver), job->args.ica);
|
||||
V3D_WRITE(V3D_TFU_IUA(v3d->ver), job->args.iua);
|
||||
V3D_WRITE(V3D_TFU_IOA(v3d->ver), job->args.ioa);
|
||||
|
@ -458,7 +458,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
|||
V3D_WRITE(V3D_TFU_COEF1(v3d->ver), job->args.coef[1]);
|
||||
V3D_WRITE(V3D_TFU_COEF2(v3d->ver), job->args.coef[2]);
|
||||
V3D_WRITE(V3D_TFU_COEF3(v3d->ver), job->args.coef[3]);
|
||||
@@ -412,7 +412,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
@@ -416,7 +416,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
*
|
||||
* XXX: Set the CFG7 register
|
||||
*/
|
||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -6232,6 +6232,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
@@ -6255,6 +6255,22 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56b1, aspm_l1_acceptable_latency);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c0, aspm_l1_acceptable_latency);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x56c1, aspm_l1_acceptable_latency);
|
||||
|
|
|
@ -153,7 +153,7 @@ Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|||
case V4L2_CID_TEST_PATTERN:
|
||||
ret = imx335_update_test_pattern(imx335, ctrl->val);
|
||||
|
||||
@@ -1175,7 +1235,7 @@ static int imx335_init_controls(struct i
|
||||
@@ -1176,7 +1236,7 @@ static int imx335_init_controls(struct i
|
||||
return ret;
|
||||
|
||||
/* v4l2_fwnode_device_properties can add two more controls */
|
||||
|
@ -162,7 +162,7 @@ Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -1210,6 +1270,13 @@ static int imx335_init_controls(struct i
|
||||
@@ -1211,6 +1271,13 @@ static int imx335_init_controls(struct i
|
||||
|
||||
v4l2_ctrl_cluster(2, &imx335->exp_ctrl);
|
||||
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
From a8e38e0532fd0b25fcaebf771ddd14f4e04283fa Mon Sep 17 00:00:00 2001
|
||||
From: Umang Jain <umang.jain@ideasonboard.com>
|
||||
Date: Thu, 8 Aug 2024 22:11:04 +0530
|
||||
Subject: [PATCH] media: imx335: Use correct register width for HNUM
|
||||
|
||||
CCI_REG_HNUM should be using CCI_REG16_LE() instead of CCI_REG8()
|
||||
as HNUM spans from 0x302e[0:7] to 0x302f[0:3].
|
||||
|
||||
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/imx335.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/media/i2c/imx335.c
|
||||
+++ b/drivers/media/i2c/imx335.c
|
||||
@@ -31,7 +31,7 @@
|
||||
#define IMX335_REG_CPWAIT_TIME CCI_REG8(0x300d)
|
||||
#define IMX335_REG_WINMODE CCI_REG8(0x3018)
|
||||
#define IMX335_REG_HTRIMMING_START CCI_REG16_LE(0x302c)
|
||||
-#define IMX335_REG_HNUM CCI_REG8(0x302e)
|
||||
+#define IMX335_REG_HNUM CCI_REG16_LE(0x302e)
|
||||
|
||||
/* Lines per frame */
|
||||
#define IMX335_REG_VMAX CCI_REG24_LE(0x3030)
|
|
@ -1,34 +0,0 @@
|
|||
From 3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16 Mon Sep 17 00:00:00 2001
|
||||
From: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
||||
Date: Mon, 28 Apr 2025 17:07:20 +0100
|
||||
Subject: [PATCH] drivers: media: i2c: imx335: Fix frame size enumeration
|
||||
|
||||
In commit cfa49ff0558a ("media: i2c: imx335: Support 2592x1940 10-bit
|
||||
mode") the IMX335 driver was extended to support multiple output modes.
|
||||
|
||||
This incorrectly extended the frame size enumeration to check against
|
||||
the supported mbus_codes array instead of the supported mode/frame
|
||||
array. This has the unwanted side effect of reporting the currently
|
||||
supported frame size 2592x1944 three times.
|
||||
|
||||
Fix the check accordingly to report a frame size for each supported
|
||||
size, which is presently only a single entry.
|
||||
|
||||
Fixes: cfa49ff0558a ("media: i2c: imx335: Support 2592x1940 10-bit mode")
|
||||
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
||||
---
|
||||
drivers/media/i2c/imx335.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/media/i2c/imx335.c
|
||||
+++ b/drivers/media/i2c/imx335.c
|
||||
@@ -720,7 +720,8 @@ static int imx335_enum_frame_size(struct
|
||||
struct imx335 *imx335 = to_imx335(sd);
|
||||
u32 code;
|
||||
|
||||
- if (fsize->index > ARRAY_SIZE(imx335_mbus_codes))
|
||||
+ /* Only a single supported_mode available. */
|
||||
+ if (fsize->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
code = imx335_get_format_code(imx335, fsize->code);
|
|
@ -1,122 +0,0 @@
|
|||
From 4d5c3828a8dd0062eeeb56b7d857a76130c3683c Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Tue, 8 Apr 2025 11:26:58 +0200
|
||||
Subject: [PATCH 1/2] net: ethernet: cortina: Use TOE/TSO on all TCP
|
||||
|
||||
It is desireable to push the hardware accelerator to also
|
||||
process non-segmented TCP frames: we pass the skb->len
|
||||
to the "TOE/TSO" offloader and it will handle them.
|
||||
|
||||
Without this quirk the driver becomes unstable and lock
|
||||
up and and crash.
|
||||
|
||||
I do not know exactly why, but it is probably due to the
|
||||
TOE (TCP offload engine) feature that is coupled with the
|
||||
segmentation feature - it is not possible to turn one
|
||||
part off and not the other, either both TOE and TSO are
|
||||
active, or neither of them.
|
||||
|
||||
Not having the TOE part active seems detrimental, as if
|
||||
that hardware feature is not really supposed to be turned
|
||||
off.
|
||||
|
||||
The datasheet says:
|
||||
|
||||
"Based on packet parsing and TCP connection/NAT table
|
||||
lookup results, the NetEngine puts the packets
|
||||
belonging to the same TCP connection to the same queue
|
||||
for the software to process. The NetEngine puts
|
||||
incoming packets to the buffer or series of buffers
|
||||
for a jumbo packet. With this hardware acceleration,
|
||||
IP/TCP header parsing, checksum validation and
|
||||
connection lookup are offloaded from the software
|
||||
processing."
|
||||
|
||||
After numerous tests with the hardware locking up after
|
||||
something between minutes and hours depending on load
|
||||
using iperf3 I have concluded this is necessary to stabilize
|
||||
the hardware.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Link: https://patch.msgid.link/20250408-gemini-ethernet-tso-always-v1-1-e669f932359c@linaro.org
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 37 +++++++++++++++++++++------
|
||||
1 file changed, 29 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -1143,6 +1143,7 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
struct gmac_txdesc *txd;
|
||||
skb_frag_t *skb_frag;
|
||||
dma_addr_t mapping;
|
||||
+ bool tcp = false;
|
||||
void *buffer;
|
||||
u16 mss;
|
||||
int ret;
|
||||
@@ -1150,6 +1151,13 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
word1 = skb->len;
|
||||
word3 = SOF_BIT;
|
||||
|
||||
+ /* Determine if we are doing TCP */
|
||||
+ if (skb->protocol == htons(ETH_P_IP))
|
||||
+ tcp = (ip_hdr(skb)->protocol == IPPROTO_TCP);
|
||||
+ else
|
||||
+ /* IPv6 */
|
||||
+ tcp = (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP);
|
||||
+
|
||||
mss = skb_shinfo(skb)->gso_size;
|
||||
if (mss) {
|
||||
/* This means we are dealing with TCP and skb->len is the
|
||||
@@ -1162,8 +1170,26 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
mss, skb->len);
|
||||
word1 |= TSS_MTU_ENABLE_BIT;
|
||||
word3 |= mss;
|
||||
+ } else if (tcp) {
|
||||
+ /* Even if we are not using TSO, use the hardware offloader
|
||||
+ * for transferring the TCP frame: this hardware has partial
|
||||
+ * TCP awareness (called TOE - TCP Offload Engine) and will
|
||||
+ * according to the datasheet put packets belonging to the
|
||||
+ * same TCP connection in the same queue for the TOE/TSO
|
||||
+ * engine to process. The engine will deal with chopping
|
||||
+ * up frames that exceed ETH_DATA_LEN which the
|
||||
+ * checksumming engine cannot handle (see below) into
|
||||
+ * manageable chunks. It flawlessly deals with quite big
|
||||
+ * frames and frames containing custom DSA EtherTypes.
|
||||
+ */
|
||||
+ mss = netdev->mtu + skb_tcp_all_headers(skb);
|
||||
+ mss = min(mss, skb->len);
|
||||
+ netdev_dbg(netdev, "TOE/TSO len %04x mtu %04x mss %04x\n",
|
||||
+ skb->len, netdev->mtu, mss);
|
||||
+ word1 |= TSS_MTU_ENABLE_BIT;
|
||||
+ word3 |= mss;
|
||||
} else if (skb->len >= ETH_FRAME_LEN) {
|
||||
- /* Hardware offloaded checksumming isn't working on frames
|
||||
+ /* Hardware offloaded checksumming isn't working on non-TCP frames
|
||||
* bigger than 1514 bytes. A hypothesis about this is that the
|
||||
* checksum buffer is only 1518 bytes, so when the frames get
|
||||
* bigger they get truncated, or the last few bytes get
|
||||
@@ -1180,21 +1206,16 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
- int tcp = 0;
|
||||
-
|
||||
/* We do not switch off the checksumming on non TCP/UDP
|
||||
* frames: as is shown from tests, the checksumming engine
|
||||
* is smart enough to see that a frame is not actually TCP
|
||||
* or UDP and then just pass it through without any changes
|
||||
* to the frame.
|
||||
*/
|
||||
- if (skb->protocol == htons(ETH_P_IP)) {
|
||||
+ if (skb->protocol == htons(ETH_P_IP))
|
||||
word1 |= TSS_IP_CHKSUM_BIT;
|
||||
- tcp = ip_hdr(skb)->protocol == IPPROTO_TCP;
|
||||
- } else { /* IPv6 */
|
||||
+ else
|
||||
word1 |= TSS_IPV6_ENABLE_BIT;
|
||||
- tcp = ipv6_hdr(skb)->nexthdr == IPPROTO_TCP;
|
||||
- }
|
||||
|
||||
word1 |= tcp ? TSS_TCP_CHKSUM_BIT : TSS_UDP_CHKSUM_BIT;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
From 0f4ae7c6ecb89bfda026d210dcf8216fb67d2333 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 29 Mar 2025 08:39:03 -0700
|
||||
Subject: mips: Add -std= flag specified in KBUILD_CFLAGS to vdso CFLAGS
|
||||
|
||||
GCC 15 changed the default C standard dialect from gnu17 to gnu23,
|
||||
which should not have impacted the kernel because it explicitly requests
|
||||
the gnu11 standard in the main Makefile. However, mips/vdso code uses
|
||||
its own CFLAGS without a '-std=' value, which break with this dialect
|
||||
change because of the kernel's own definitions of bool, false, and true
|
||||
conflicting with the C23 reserved keywords.
|
||||
|
||||
include/linux/stddef.h:11:9: error: cannot use keyword 'false' as enumeration constant
|
||||
11 | false = 0,
|
||||
| ^~~~~
|
||||
include/linux/stddef.h:11:9: note: 'false' is a keyword with '-std=c23' onwards
|
||||
include/linux/types.h:35:33: error: 'bool' cannot be defined via 'typedef'
|
||||
35 | typedef _Bool bool;
|
||||
| ^~~~
|
||||
include/linux/types.h:35:33: note: 'bool' is a keyword with '-std=c23' onwards
|
||||
|
||||
Add -std as specified in KBUILD_CFLAGS to the decompressor and purgatory
|
||||
CFLAGS to eliminate these errors and make the C standard version of these
|
||||
areas match the rest of the kernel.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||
---
|
||||
arch/mips/vdso/Makefile | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
(limited to 'arch/mips/vdso')
|
||||
|
||||
--- a/arch/mips/vdso/Makefile
|
||||
+++ b/arch/mips/vdso/Makefile
|
||||
@@ -27,6 +27,7 @@ endif
|
||||
# offsets.
|
||||
cflags-vdso := $(ccflags-vdso) \
|
||||
$(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \
|
||||
+ $(filter -std=%,$(KBUILD_CFLAGS)) \
|
||||
-O3 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \
|
||||
-mrelax-pic-calls $(call cc-option, -mexplicit-relocs) \
|
||||
-fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \
|
|
@ -902,7 +902,7 @@ Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||
+ write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL);
|
||||
}
|
||||
|
||||
nandc->buf_count = len;
|
||||
nandc->buf_count = 512;
|
||||
@@ -2926,9 +2877,10 @@ static int qcom_param_page_type_exec(str
|
||||
nandc->buf_count, 0);
|
||||
|
||||
|
|
|
@ -844,7 +844,7 @@ Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||
+ qcom_write_reg_dma(nandc, &nandc->regs->cmd1, NAND_DEV_CMD1, 1, NAND_BAM_NEXT_SGL);
|
||||
}
|
||||
|
||||
nandc->buf_count = len;
|
||||
nandc->buf_count = 512;
|
||||
@@ -2873,17 +2873,17 @@ static int qcom_param_page_type_exec(str
|
||||
|
||||
config_nand_single_cw_page_read(chip, false, 0);
|
||||
|
|
|
@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/core/page_pool.c
|
||||
+++ b/net/core/page_pool.c
|
||||
@@ -1120,7 +1120,7 @@ static void page_pool_release_retry(stru
|
||||
@@ -1124,7 +1124,7 @@ static void page_pool_release_retry(stru
|
||||
struct delayed_work *dwq = to_delayed_work(wq);
|
||||
struct page_pool *pool = container_of(dwq, typeof(*pool), release_dw);
|
||||
void *netdev;
|
||||
|
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
inflight = page_pool_release(pool);
|
||||
/* In rare cases, a driver bug may cause inflight to go negative.
|
||||
@@ -1132,6 +1132,17 @@ static void page_pool_release_retry(stru
|
||||
@@ -1136,6 +1136,17 @@ static void page_pool_release_retry(stru
|
||||
if (inflight <= 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||
|
||||
#include "gpiolib.h"
|
||||
#include "gpiolib-of.h"
|
||||
@@ -1189,3 +1191,73 @@ void of_gpiochip_remove(struct gpio_chip
|
||||
@@ -1198,3 +1200,73 @@ void of_gpiochip_remove(struct gpio_chip
|
||||
{
|
||||
of_node_put(dev_of_node(&chip->gpiodev->dev));
|
||||
}
|
||||
|
|
|
@ -396,7 +396,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
--- a/net/ipv4/route.c
|
||||
+++ b/net/ipv4/route.c
|
||||
@@ -378,6 +378,9 @@ static struct pernet_operations ip_rt_pr
|
||||
@@ -382,6 +382,9 @@ static struct pernet_operations ip_rt_pr
|
||||
|
||||
static int __init ip_rt_proc_init(void)
|
||||
{
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
LINUX_VERSION-6.12 = .34
|
||||
LINUX_KERNEL_HASH-6.12.34 = a7f3fe381f67eca4172e9b63efb61a14bd7f9e1278e03603d0ff5a93f270c24d
|
||||
LINUX_VERSION-6.12 = .35
|
||||
LINUX_KERNEL_HASH-6.12.35 = 05f4e0b01dde578c3328eb539d305cccec7b84e939f6dd5f21fdaf5f313da748
|
||||
|
|
|
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
@@ -567,6 +573,17 @@ full_scan:
|
||||
@@ -569,6 +575,17 @@ full_scan:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
|||
|
||||
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
@@ -432,9 +432,7 @@ static int armada_37xx_gpio_direction_ou
|
||||
@@ -433,9 +433,7 @@ static int armada_37xx_gpio_direction_ou
|
||||
reg = OUTPUT_EN;
|
||||
armada_37xx_update_reg(®, &en_offset);
|
||||
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
From 57273ff8bb16f3842c2597b5bbcd49e7fa12edf7 Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Date: Wed, 14 May 2025 21:18:35 +0200
|
||||
Subject: [PATCH 4/7] pinctrl: armada-37xx: propagate error from
|
||||
armada_37xx_gpio_get()
|
||||
|
||||
The regmap_read() function can fail, so propagate its error up to
|
||||
the stack instead of silently ignoring that.
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-4-07e9ac1ab737@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
@@ -440,11 +440,14 @@ static int armada_37xx_gpio_get(struct g
|
||||
struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
|
||||
unsigned int reg = INPUT_VAL;
|
||||
unsigned int val, mask;
|
||||
+ int ret;
|
||||
|
||||
armada_37xx_update_reg(®, &offset);
|
||||
mask = BIT(offset);
|
||||
|
||||
- regmap_read(info->regmap, reg, &val);
|
||||
+ ret = regmap_read(info->regmap, reg, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
return (val & mask) != 0;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
From bfa0ff804ffa8b1246ade8be08de98c9eb19d16f Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Date: Wed, 14 May 2025 21:18:36 +0200
|
||||
Subject: [PATCH 5/7] pinctrl: armada-37xx: propagate error from
|
||||
armada_37xx_pmx_gpio_set_direction()
|
||||
|
||||
The armada_37xx_gpio_direction_{in,out}put() functions can fail, so
|
||||
propagate their error values back to the stack instead of silently
|
||||
ignoring those.
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-5-07e9ac1ab737@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
@@ -472,16 +472,17 @@ static int armada_37xx_pmx_gpio_set_dire
|
||||
{
|
||||
struct armada_37xx_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
|
||||
struct gpio_chip *chip = range->gc;
|
||||
+ int ret;
|
||||
|
||||
dev_dbg(info->dev, "gpio_direction for pin %u as %s-%d to %s\n",
|
||||
offset, range->name, offset, input ? "input" : "output");
|
||||
|
||||
if (input)
|
||||
- armada_37xx_gpio_direction_input(chip, offset);
|
||||
+ ret = armada_37xx_gpio_direction_input(chip, offset);
|
||||
else
|
||||
- armada_37xx_gpio_direction_output(chip, offset, 0);
|
||||
+ ret = armada_37xx_gpio_direction_output(chip, offset, 0);
|
||||
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int armada_37xx_gpio_request_enable(struct pinctrl_dev *pctldev,
|
|
@ -1,35 +0,0 @@
|
|||
From 6481c0a83367b0672951ccc876fbae7ee37b594b Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Date: Wed, 14 May 2025 21:18:37 +0200
|
||||
Subject: [PATCH 6/7] pinctrl: armada-37xx: propagate error from
|
||||
armada_37xx_gpio_get_direction()
|
||||
|
||||
The regmap_read() function can fail, so propagate its error up to
|
||||
the stack instead of silently ignoring that.
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-6-07e9ac1ab737@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
@@ -402,10 +402,13 @@ static int armada_37xx_gpio_get_directio
|
||||
struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
|
||||
unsigned int reg = OUTPUT_EN;
|
||||
unsigned int val, mask;
|
||||
+ int ret;
|
||||
|
||||
armada_37xx_update_reg(®, &offset);
|
||||
mask = BIT(offset);
|
||||
- regmap_read(info->regmap, reg, &val);
|
||||
+ ret = regmap_read(info->regmap, reg, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
|
||||
if (val & mask)
|
||||
return GPIO_LINE_DIRECTION_OUT;
|
|
@ -1,31 +0,0 @@
|
|||
From 4229c28323db141eda69cb99427be75d3edba071 Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Date: Wed, 14 May 2025 21:18:38 +0200
|
||||
Subject: [PATCH 7/7] pinctrl: armada-37xx: propagate error from
|
||||
armada_37xx_pmx_set_by_name()
|
||||
|
||||
The regmap_update_bits() function can fail, so propagate its error
|
||||
up to the stack instead of silently ignoring that.
|
||||
|
||||
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||
Link: https://lore.kernel.org/20250514-pinctrl-a37xx-fixes-v2-7-07e9ac1ab737@gmail.com
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
|
||||
@@ -358,9 +358,7 @@ static int armada_37xx_pmx_set_by_name(s
|
||||
|
||||
val = grp->val[func];
|
||||
|
||||
- regmap_update_bits(info->regmap, reg, mask, val);
|
||||
-
|
||||
- return 0;
|
||||
+ return regmap_update_bits(info->regmap, reg, mask, val);
|
||||
}
|
||||
|
||||
static int armada_37xx_pmx_set(struct pinctrl_dev *pctldev,
|
|
@ -13,7 +13,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||
|
||||
--- a/drivers/media/usb/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
||||
@@ -3174,6 +3174,18 @@ static const struct usb_device_id uvc_id
|
||||
@@ -3185,6 +3185,18 @@ static const struct usb_device_id uvc_id
|
||||
.bInterfaceSubClass = 1,
|
||||
.bInterfaceProtocol = 0,
|
||||
.driver_info = UVC_INFO_META(V4L2_META_FMT_D4XX) },
|
||||
|
|
|
@ -19,7 +19,7 @@ Signed-off-by: Matteo Croce <mcroce@microsoft.com>
|
|||
|
||||
if (priv->dma_cap.host_dma_width <= 32)
|
||||
gfp |= GFP_DMA32;
|
||||
@@ -4795,7 +4795,7 @@ static inline void stmmac_rx_refill(stru
|
||||
@@ -4792,7 +4792,7 @@ static inline void stmmac_rx_refill(stru
|
||||
struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
|
||||
int dirty = stmmac_rx_dirty(priv, queue);
|
||||
unsigned int entry = rx_q->dirty_rx;
|
||||
|
|
Loading…
Reference in a new issue