Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
76ae895eb4
@ -103,6 +103,16 @@ define Build/append-rootfs
|
|||||||
dd if=$(IMAGE_ROOTFS) >> $@
|
dd if=$(IMAGE_ROOTFS) >> $@
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Build/append-squashfs-fakeroot-be
|
||||||
|
rm -rf $@.fakefs $@.fakesquashfs
|
||||||
|
mkdir $@.fakefs
|
||||||
|
$(STAGING_DIR_HOST)/bin/mksquashfs3-lzma \
|
||||||
|
$@.fakefs $@.fakesquashfs \
|
||||||
|
-noappend -root-owned -be -nopad -b 65536 \
|
||||||
|
$(if $(SOURCE_DATE_EPOCH),-fixed-time $(SOURCE_DATE_EPOCH))
|
||||||
|
cat $@.fakesquashfs >> $@
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/append-squashfs4-fakeroot
|
define Build/append-squashfs4-fakeroot
|
||||||
rm -rf $@.fakefs $@.fakesquashfs
|
rm -rf $@.fakefs $@.fakesquashfs
|
||||||
mkdir $@.fakefs
|
mkdir $@.fakefs
|
||||||
|
|||||||
@ -0,0 +1,222 @@
|
|||||||
|
From 3b07c3a6e4adebd0466f5e539f318224db8cfc37 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Sat, 6 May 2023 15:29:52 +0200
|
||||||
|
Subject: [PATCH] ath10k-ct: fix compilation warning for debug level
|
||||||
|
|
||||||
|
Rework read_debug_level function as it does exceed the stack limit for
|
||||||
|
some arch.
|
||||||
|
Fix compilation error:
|
||||||
|
/__w/openwrt/openwrt/openwrt/build_dir/target-mips-openwrt-linux-musl_musl/linux-malta_be/ath10k-ct-regular/ath10k-ct-2022-05-13-f808496f/ath10k-5.15/debug.c: In function 'ath10k_read_debug_level':
|
||||||
|
/__w/openwrt/openwrt/openwrt/build_dir/target-mips-openwrt-linux-musl_musl/linux-malta_be/ath10k-ct-regular/ath10k-ct-2022-05-13-f808496f/ath10k-5.15/debug.c:1388:1: error: the frame size of 1440 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
|
||||||
|
1388 | }
|
||||||
|
| ^
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
ath10k-5.15/debug.c | 85 +++++++++++++++++++++++++--------------------
|
||||||
|
ath10k-5.17/debug.c | 85 +++++++++++++++++++++++++--------------------
|
||||||
|
2 files changed, 96 insertions(+), 74 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ath10k-5.15/debug.c b/ath10k-5.15/debug.c
|
||||||
|
index af84012..d0fa911 100644
|
||||||
|
--- a/ath10k-5.15/debug.c
|
||||||
|
+++ b/ath10k-5.15/debug.c
|
||||||
|
@@ -1344,47 +1344,58 @@ static const struct file_operations fops_simulate_fw_crash = {
|
||||||
|
.llseek = default_llseek,
|
||||||
|
};
|
||||||
|
|
||||||
|
+static const char debug_level_buf[] =
|
||||||
|
+ "To change debug level, set value adding up desired flags:\n"
|
||||||
|
+ "PCI: 0x1\n"
|
||||||
|
+ "WMI: 0x2\n"
|
||||||
|
+ "HTC: 0x4\n"
|
||||||
|
+ "HTT: 0x8\n"
|
||||||
|
+ "MAC: 0x10\n"
|
||||||
|
+ "BOOT: 0x20\n"
|
||||||
|
+ "PCI-DUMP: 0x40\n"
|
||||||
|
+ "HTT-DUMP: 0x80\n"
|
||||||
|
+ "MGMT: 0x100\n"
|
||||||
|
+ "DATA: 0x200\n"
|
||||||
|
+ "BMI: 0x400\n"
|
||||||
|
+ "REGULATORY: 0x800\n"
|
||||||
|
+ "TESTMODE: 0x1000\n"
|
||||||
|
+ "WMI-PRINT: 0x2000\n"
|
||||||
|
+ "PCI-PS: 0x4000\n"
|
||||||
|
+ "AHB: 0x8000\n"
|
||||||
|
+ "SDIO: 0x10000\n"
|
||||||
|
+ "SDIO_DUMP: 0x20000\n"
|
||||||
|
+ "USB: 0x40000\n"
|
||||||
|
+ "USB_BULK: 0x80000\n"
|
||||||
|
+ "SNOC: 0x100000\n"
|
||||||
|
+ "QMI: 0x200000\n"
|
||||||
|
+ "BEACONS: 0x8000000\n"
|
||||||
|
+ "NO-FW-DBGLOG:0x10000000\n"
|
||||||
|
+ "MAC2: 0x20000000\n"
|
||||||
|
+ "INFO-AS-DBG: 0x40000000\n"
|
||||||
|
+ "FW: 0x80000000\n"
|
||||||
|
+ "ALL: 0xEFFFFFFF\n";
|
||||||
|
+
|
||||||
|
+#define READ_DEBUG_LEVEL_SIZE sizeof(debug_level_buf) + 60
|
||||||
|
+
|
||||||
|
static ssize_t ath10k_read_debug_level(struct file *file,
|
||||||
|
char __user *user_buf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
- int sz;
|
||||||
|
- const char buf[] =
|
||||||
|
- "To change debug level, set value adding up desired flags:\n"
|
||||||
|
- "PCI: 0x1\n"
|
||||||
|
- "WMI: 0x2\n"
|
||||||
|
- "HTC: 0x4\n"
|
||||||
|
- "HTT: 0x8\n"
|
||||||
|
- "MAC: 0x10\n"
|
||||||
|
- "BOOT: 0x20\n"
|
||||||
|
- "PCI-DUMP: 0x40\n"
|
||||||
|
- "HTT-DUMP: 0x80\n"
|
||||||
|
- "MGMT: 0x100\n"
|
||||||
|
- "DATA: 0x200\n"
|
||||||
|
- "BMI: 0x400\n"
|
||||||
|
- "REGULATORY: 0x800\n"
|
||||||
|
- "TESTMODE: 0x1000\n"
|
||||||
|
- "WMI-PRINT: 0x2000\n"
|
||||||
|
- "PCI-PS: 0x4000\n"
|
||||||
|
- "AHB: 0x8000\n"
|
||||||
|
- "SDIO: 0x10000\n"
|
||||||
|
- "SDIO_DUMP: 0x20000\n"
|
||||||
|
- "USB: 0x40000\n"
|
||||||
|
- "USB_BULK: 0x80000\n"
|
||||||
|
- "SNOC: 0x100000\n"
|
||||||
|
- "QMI: 0x200000\n"
|
||||||
|
- "BEACONS: 0x8000000\n"
|
||||||
|
- "NO-FW-DBGLOG:0x10000000\n"
|
||||||
|
- "MAC2: 0x20000000\n"
|
||||||
|
- "INFO-AS-DBG: 0x40000000\n"
|
||||||
|
- "FW: 0x80000000\n"
|
||||||
|
- "ALL: 0xEFFFFFFF\n";
|
||||||
|
- char wbuf[sizeof(buf) + 60];
|
||||||
|
- sz = snprintf(wbuf, sizeof(wbuf), "Current debug level: 0x%x\n\n%s",
|
||||||
|
- ath10k_debug_mask, buf);
|
||||||
|
- wbuf[sizeof(wbuf) - 1] = 0;
|
||||||
|
-
|
||||||
|
- return simple_read_from_buffer(user_buf, count, ppos, wbuf, sz);
|
||||||
|
+ int sz, ret;
|
||||||
|
+ char *wbuf;
|
||||||
|
+
|
||||||
|
+ wbuf = kcalloc(READ_DEBUG_LEVEL_SIZE, sizeof(char), GFP_KERNEL);
|
||||||
|
+ if (!wbuf)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ sz = snprintf(wbuf, READ_DEBUG_LEVEL_SIZE,
|
||||||
|
+ "Current debug level: 0x%x\n\n%s",
|
||||||
|
+ ath10k_debug_mask, debug_level_buf);
|
||||||
|
+
|
||||||
|
+ ret = simple_read_from_buffer(user_buf, count, ppos, wbuf, sz);
|
||||||
|
+ kfree(wbuf);
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set logging level.
|
||||||
|
diff --git a/ath10k-5.17/debug.c b/ath10k-5.17/debug.c
|
||||||
|
index af84012..d0fa911 100644
|
||||||
|
--- a/ath10k-5.17/debug.c
|
||||||
|
+++ b/ath10k-5.17/debug.c
|
||||||
|
@@ -1344,47 +1344,58 @@ static const struct file_operations fops_simulate_fw_crash = {
|
||||||
|
.llseek = default_llseek,
|
||||||
|
};
|
||||||
|
|
||||||
|
+static const char debug_level_buf[] =
|
||||||
|
+ "To change debug level, set value adding up desired flags:\n"
|
||||||
|
+ "PCI: 0x1\n"
|
||||||
|
+ "WMI: 0x2\n"
|
||||||
|
+ "HTC: 0x4\n"
|
||||||
|
+ "HTT: 0x8\n"
|
||||||
|
+ "MAC: 0x10\n"
|
||||||
|
+ "BOOT: 0x20\n"
|
||||||
|
+ "PCI-DUMP: 0x40\n"
|
||||||
|
+ "HTT-DUMP: 0x80\n"
|
||||||
|
+ "MGMT: 0x100\n"
|
||||||
|
+ "DATA: 0x200\n"
|
||||||
|
+ "BMI: 0x400\n"
|
||||||
|
+ "REGULATORY: 0x800\n"
|
||||||
|
+ "TESTMODE: 0x1000\n"
|
||||||
|
+ "WMI-PRINT: 0x2000\n"
|
||||||
|
+ "PCI-PS: 0x4000\n"
|
||||||
|
+ "AHB: 0x8000\n"
|
||||||
|
+ "SDIO: 0x10000\n"
|
||||||
|
+ "SDIO_DUMP: 0x20000\n"
|
||||||
|
+ "USB: 0x40000\n"
|
||||||
|
+ "USB_BULK: 0x80000\n"
|
||||||
|
+ "SNOC: 0x100000\n"
|
||||||
|
+ "QMI: 0x200000\n"
|
||||||
|
+ "BEACONS: 0x8000000\n"
|
||||||
|
+ "NO-FW-DBGLOG:0x10000000\n"
|
||||||
|
+ "MAC2: 0x20000000\n"
|
||||||
|
+ "INFO-AS-DBG: 0x40000000\n"
|
||||||
|
+ "FW: 0x80000000\n"
|
||||||
|
+ "ALL: 0xEFFFFFFF\n";
|
||||||
|
+
|
||||||
|
+#define READ_DEBUG_LEVEL_SIZE sizeof(debug_level_buf) + 60
|
||||||
|
+
|
||||||
|
static ssize_t ath10k_read_debug_level(struct file *file,
|
||||||
|
char __user *user_buf,
|
||||||
|
size_t count, loff_t *ppos)
|
||||||
|
{
|
||||||
|
- int sz;
|
||||||
|
- const char buf[] =
|
||||||
|
- "To change debug level, set value adding up desired flags:\n"
|
||||||
|
- "PCI: 0x1\n"
|
||||||
|
- "WMI: 0x2\n"
|
||||||
|
- "HTC: 0x4\n"
|
||||||
|
- "HTT: 0x8\n"
|
||||||
|
- "MAC: 0x10\n"
|
||||||
|
- "BOOT: 0x20\n"
|
||||||
|
- "PCI-DUMP: 0x40\n"
|
||||||
|
- "HTT-DUMP: 0x80\n"
|
||||||
|
- "MGMT: 0x100\n"
|
||||||
|
- "DATA: 0x200\n"
|
||||||
|
- "BMI: 0x400\n"
|
||||||
|
- "REGULATORY: 0x800\n"
|
||||||
|
- "TESTMODE: 0x1000\n"
|
||||||
|
- "WMI-PRINT: 0x2000\n"
|
||||||
|
- "PCI-PS: 0x4000\n"
|
||||||
|
- "AHB: 0x8000\n"
|
||||||
|
- "SDIO: 0x10000\n"
|
||||||
|
- "SDIO_DUMP: 0x20000\n"
|
||||||
|
- "USB: 0x40000\n"
|
||||||
|
- "USB_BULK: 0x80000\n"
|
||||||
|
- "SNOC: 0x100000\n"
|
||||||
|
- "QMI: 0x200000\n"
|
||||||
|
- "BEACONS: 0x8000000\n"
|
||||||
|
- "NO-FW-DBGLOG:0x10000000\n"
|
||||||
|
- "MAC2: 0x20000000\n"
|
||||||
|
- "INFO-AS-DBG: 0x40000000\n"
|
||||||
|
- "FW: 0x80000000\n"
|
||||||
|
- "ALL: 0xEFFFFFFF\n";
|
||||||
|
- char wbuf[sizeof(buf) + 60];
|
||||||
|
- sz = snprintf(wbuf, sizeof(wbuf), "Current debug level: 0x%x\n\n%s",
|
||||||
|
- ath10k_debug_mask, buf);
|
||||||
|
- wbuf[sizeof(wbuf) - 1] = 0;
|
||||||
|
-
|
||||||
|
- return simple_read_from_buffer(user_buf, count, ppos, wbuf, sz);
|
||||||
|
+ int sz, ret;
|
||||||
|
+ char *wbuf;
|
||||||
|
+
|
||||||
|
+ wbuf = kcalloc(READ_DEBUG_LEVEL_SIZE, sizeof(char), GFP_KERNEL);
|
||||||
|
+ if (!wbuf)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ sz = snprintf(wbuf, READ_DEBUG_LEVEL_SIZE,
|
||||||
|
+ "Current debug level: 0x%x\n\n%s",
|
||||||
|
+ ath10k_debug_mask, debug_level_buf);
|
||||||
|
+
|
||||||
|
+ ret = simple_read_from_buffer(user_buf, count, ppos, wbuf, sz);
|
||||||
|
+ kfree(wbuf);
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set logging level.
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
||||||
@ -105,6 +105,15 @@ MAKE_KMOD := $(KERNEL_MAKE) \
|
|||||||
|
|
||||||
define Build/Prepare
|
define Build/Prepare
|
||||||
$(call Build/Prepare/Default)
|
$(call Build/Prepare/Default)
|
||||||
|
|
||||||
|
# New kernel version changed the sysmbol exported from printk to _printk
|
||||||
|
# The object file provided by broadcom require modification to correctly
|
||||||
|
# modprobe and generate a .ko
|
||||||
|
$(TARGET_CROSS)objcopy $(PKG_BUILD_DIR)/driver/wl_apsta/wl_prebuilt.o \
|
||||||
|
--redefine-sym printk=_printk
|
||||||
|
$(TARGET_CROSS)objcopy $(PKG_BUILD_DIR)/driver/wl_apsta_mini/wl_prebuilt.o \
|
||||||
|
--redefine-sym printk=_printk
|
||||||
|
|
||||||
$(CP) $(PKG_BUILD_DIR)/driver $(PKG_BUILD_DIR)/driver-mini
|
$(CP) $(PKG_BUILD_DIR)/driver $(PKG_BUILD_DIR)/driver-mini
|
||||||
$(CP) ./src/glue $(PKG_BUILD_DIR)/glue
|
$(CP) ./src/glue $(PKG_BUILD_DIR)/glue
|
||||||
endef
|
endef
|
||||||
|
|||||||
@ -0,0 +1,15 @@
|
|||||||
|
--- a/driver/wl_iw.c
|
||||||
|
+++ a/driver/wl_iw.c
|
||||||
|
@@ -381,9 +381,9 @@ wl_iw_set_freq(
|
||||||
|
while (fwrq->e++ < 6)
|
||||||
|
fwrq->m /= 10;
|
||||||
|
}
|
||||||
|
- /* handle 4.9GHz frequencies as Japan 4 GHz based channelization */
|
||||||
|
- if (fwrq->m > 4000 && fwrq->m < 5000)
|
||||||
|
- sf = WF_CHAN_FACTOR_4_G; /* start factor for 4 GHz */
|
||||||
|
+ /* handle 4.9GHz frequencies as Japan 4 GHz based channelization */
|
||||||
|
+ if (fwrq->m > 4000 && fwrq->m < 5000)
|
||||||
|
+ sf = WF_CHAN_FACTOR_4_G; /* start factor for 4 GHz */
|
||||||
|
|
||||||
|
chan = wf_mhz2channel(fwrq->m, sf);
|
||||||
|
}
|
||||||
@ -0,0 +1,297 @@
|
|||||||
|
--- a/driver/wl_iw.c
|
||||||
|
+++ b/driver/wl_iw.c
|
||||||
|
@@ -495,9 +495,9 @@ wl_iw_get_range(
|
||||||
|
)
|
||||||
|
{
|
||||||
|
struct iw_range *range = (struct iw_range *) extra;
|
||||||
|
- int channels[MAXCHANNEL+1];
|
||||||
|
- wl_uint32_list_t *list = (wl_uint32_list_t *) channels;
|
||||||
|
- wl_rateset_t rateset;
|
||||||
|
+ int *channels;
|
||||||
|
+ wl_uint32_list_t *list;
|
||||||
|
+ wl_rateset_t *rateset;
|
||||||
|
int error, i;
|
||||||
|
uint sf, ch;
|
||||||
|
|
||||||
|
@@ -506,6 +506,17 @@ wl_iw_get_range(
|
||||||
|
if (!extra)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
+ channels = kcalloc(MAXCHANNEL+1, sizeof(*channels), GFP_KERNEL);
|
||||||
|
+ if (!channels)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+ list = (wl_uint32_list_t *) channels;
|
||||||
|
+
|
||||||
|
+ rateset = kzalloc(sizeof(*rateset), GFP_KERNEL);
|
||||||
|
+ if (!rateset) {
|
||||||
|
+ error = -ENOMEM;
|
||||||
|
+ goto free_channels;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
dwrq->length = sizeof(struct iw_range);
|
||||||
|
memset(range, 0, sizeof(range));
|
||||||
|
|
||||||
|
@@ -514,8 +525,9 @@ wl_iw_get_range(
|
||||||
|
|
||||||
|
/* Set available channels/frequencies */
|
||||||
|
list->count = htod32(MAXCHANNEL);
|
||||||
|
- if ((error = dev_wlc_ioctl(dev, WLC_GET_VALID_CHANNELS, channels, sizeof(channels))))
|
||||||
|
- return error;
|
||||||
|
+ if ((error = dev_wlc_ioctl(dev, WLC_GET_VALID_CHANNELS, channels,
|
||||||
|
+ (MAXCHANNEL+1) * sizeof(*channels))))
|
||||||
|
+ goto free_rateset;
|
||||||
|
for (i = 0; i < dtoh32(list->count) && i < IW_MAX_FREQUENCIES; i++) {
|
||||||
|
range->freq[i].i = dtoh32(list->element[i]);
|
||||||
|
|
||||||
|
@@ -549,19 +561,19 @@ wl_iw_get_range(
|
||||||
|
#endif /* WIRELESS_EXT > 11 */
|
||||||
|
|
||||||
|
/* Set available bitrates */
|
||||||
|
- if ((error = dev_wlc_ioctl(dev, WLC_GET_CURR_RATESET, &rateset, sizeof(rateset))))
|
||||||
|
- return error;
|
||||||
|
- rateset.count = dtoh32(rateset.count);
|
||||||
|
- range->num_bitrates = rateset.count;
|
||||||
|
- for (i = 0; i < rateset.count && i < IW_MAX_BITRATES; i++)
|
||||||
|
- range->bitrate[i] = (rateset.rates[i] & 0x7f) * 500000; /* convert to bps */
|
||||||
|
+ if ((error = dev_wlc_ioctl(dev, WLC_GET_CURR_RATESET, rateset, sizeof(*rateset))))
|
||||||
|
+ goto free_rateset;
|
||||||
|
+ rateset->count = dtoh32(rateset->count);
|
||||||
|
+ range->num_bitrates = rateset->count;
|
||||||
|
+ for (i = 0; i < rateset->count && i < IW_MAX_BITRATES; i++)
|
||||||
|
+ range->bitrate[i] = (rateset->rates[i] & 0x7f) * 500000; /* convert to bps */
|
||||||
|
|
||||||
|
/* Set an indication of the max TCP throughput
|
||||||
|
* in bit/s that we can expect using this interface.
|
||||||
|
* May be use for QoS stuff... Jean II
|
||||||
|
*/
|
||||||
|
if ((error = dev_wlc_ioctl(dev, WLC_GET_PHYTYPE, &i, sizeof(i))))
|
||||||
|
- return error;
|
||||||
|
+ goto free_rateset;
|
||||||
|
i = dtoh32(i);
|
||||||
|
if (i == WLC_PHY_TYPE_A)
|
||||||
|
range->throughput = 24000000; /* 24 Mbits/s */
|
||||||
|
@@ -624,7 +636,12 @@ wl_iw_get_range(
|
||||||
|
#endif
|
||||||
|
#endif /* WIRELESS_EXT > 17 */
|
||||||
|
|
||||||
|
- return 0;
|
||||||
|
+free_rateset:
|
||||||
|
+ kfree(rateset);
|
||||||
|
+free_channels:
|
||||||
|
+ kfree(channels);
|
||||||
|
+
|
||||||
|
+ return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
--- a/driver/bcmsrom.c
|
||||||
|
+++ b/driver/bcmsrom.c
|
||||||
|
@@ -437,20 +437,37 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
uint byteoff, uint nbytes, uint16 *buf)
|
||||||
|
{
|
||||||
|
uint i, nw, crc_range;
|
||||||
|
- uint16 old[SROM_MAXW], new[SROM_MAXW];
|
||||||
|
+ uint16 *old, *new;
|
||||||
|
uint8 crc;
|
||||||
|
volatile uint32 val32;
|
||||||
|
+ int rc = 0;
|
||||||
|
|
||||||
|
ASSERT(bustype == BUSTYPE(bustype));
|
||||||
|
|
||||||
|
+ old = MALLOC(osh, SROM_MAXW);
|
||||||
|
+ ASSERT(old != NULL);
|
||||||
|
+ if (!old)
|
||||||
|
+ return -2;
|
||||||
|
+
|
||||||
|
+ new = MALLOC(osh, SROM_MAXW);
|
||||||
|
+ ASSERT(new != NULL);
|
||||||
|
+ if (!new) {
|
||||||
|
+ rc = -2;
|
||||||
|
+ goto free_old;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* check input - 16-bit access only. use byteoff 0x55aa to indicate
|
||||||
|
* srclear
|
||||||
|
*/
|
||||||
|
- if ((byteoff != 0x55aa) && ((byteoff & 1) || (nbytes & 1)))
|
||||||
|
- return 1;
|
||||||
|
+ if ((byteoff != 0x55aa) && ((byteoff & 1) || (nbytes & 1))) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if ((byteoff != 0x55aa) && ((byteoff + nbytes) > SROM_MAX))
|
||||||
|
- return 1;
|
||||||
|
+ if ((byteoff != 0x55aa) && ((byteoff + nbytes) > SROM_MAX)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (BUSTYPE(bustype) == PCMCIA_BUS) {
|
||||||
|
crc_range = SROM_MAX;
|
||||||
|
@@ -467,8 +484,10 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
|
||||||
|
nw = crc_range / 2;
|
||||||
|
/* read first small number words from srom, then adjust the length, read all */
|
||||||
|
- if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE))
|
||||||
|
- return 1;
|
||||||
|
+ if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
BS_ERROR(("%s: old[SROM4_SIGN] 0x%x, old[SROM8_SIGN] 0x%x\n",
|
||||||
|
__FUNCTION__, old[SROM4_SIGN], old[SROM8_SIGN]));
|
||||||
|
@@ -481,10 +500,13 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
__FUNCTION__, buf[SROM4_SIGN], buf[SROM8_SIGN]));
|
||||||
|
|
||||||
|
/* block invalid buffer size */
|
||||||
|
- if (nbytes < SROM4_WORDS * 2)
|
||||||
|
- return BCME_BUFTOOSHORT;
|
||||||
|
- else if (nbytes > SROM4_WORDS * 2)
|
||||||
|
- return BCME_BUFTOOLONG;
|
||||||
|
+ if (nbytes < SROM4_WORDS * 2) {
|
||||||
|
+ rc = BCME_BUFTOOSHORT;
|
||||||
|
+ goto free_new;
|
||||||
|
+ } else if (nbytes > SROM4_WORDS * 2) {
|
||||||
|
+ rc = BCME_BUFTOOLONG;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
nw = SROM4_WORDS;
|
||||||
|
} else if (nbytes == SROM_WORDS * 2){ /* the other possible SROM format */
|
||||||
|
@@ -493,17 +515,22 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
nw = SROM_WORDS;
|
||||||
|
} else {
|
||||||
|
BS_ERROR(("%s: Invalid input file signature\n", __FUNCTION__));
|
||||||
|
- return BCME_BADARG;
|
||||||
|
+ rc = BCME_BADARG;
|
||||||
|
+ goto free_new;
|
||||||
|
}
|
||||||
|
crc_range = nw * 2;
|
||||||
|
- if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE))
|
||||||
|
- return 1;
|
||||||
|
+ if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
} else if ((old[SROM4_SIGN] == SROM4_SIGNATURE) ||
|
||||||
|
(old[SROM8_SIGN] == SROM4_SIGNATURE)) {
|
||||||
|
nw = SROM4_WORDS;
|
||||||
|
crc_range = nw * 2;
|
||||||
|
- if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE))
|
||||||
|
- return 1;
|
||||||
|
+ if (srom_read(sih, bustype, curmap, osh, 0, crc_range, old, FALSE)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
/* Assert that we have already read enough for sromrev 2 */
|
||||||
|
ASSERT(crc_range >= SROM_WORDS * 2);
|
||||||
|
@@ -562,8 +589,10 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
}
|
||||||
|
} else if (BUSTYPE(bustype) == PCMCIA_BUS) {
|
||||||
|
/* enable writes to the SPROM */
|
||||||
|
- if (sprom_cmd_pcmcia(osh, SROM_WEN))
|
||||||
|
- return 1;
|
||||||
|
+ if (sprom_cmd_pcmcia(osh, SROM_WEN)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
bcm_mdelay(WRITE_ENABLE_DELAY);
|
||||||
|
/* write srom */
|
||||||
|
for (i = 0; i < nw; i++) {
|
||||||
|
@@ -573,14 +602,15 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* disable writes to the SPROM */
|
||||||
|
- if (sprom_cmd_pcmcia(osh, SROM_WDS))
|
||||||
|
- return 1;
|
||||||
|
+ if (sprom_cmd_pcmcia(osh, SROM_WDS)) {
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
+ }
|
||||||
|
} else if (BUSTYPE(bustype) == SI_BUS) {
|
||||||
|
#if defined(BCMUSBDEV)
|
||||||
|
if (SPROMBUS == PCMCIA_BUS) {
|
||||||
|
uint origidx;
|
||||||
|
void *regs;
|
||||||
|
- int rc;
|
||||||
|
bool wasup;
|
||||||
|
|
||||||
|
origidx = si_coreidx(sih);
|
||||||
|
@@ -596,16 +626,24 @@ srom_write(si_t *sih, uint bustype, void *curmap, osl_t *osh,
|
||||||
|
si_core_disable(sih, 0);
|
||||||
|
|
||||||
|
si_setcoreidx(sih, origidx);
|
||||||
|
- return rc;
|
||||||
|
+ goto free_new;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- return 1;
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
} else {
|
||||||
|
- return 1;
|
||||||
|
+ rc = 1;
|
||||||
|
+ goto free_new;
|
||||||
|
}
|
||||||
|
|
||||||
|
bcm_mdelay(WRITE_ENABLE_DELAY);
|
||||||
|
- return 0;
|
||||||
|
+ rc = 0;
|
||||||
|
+
|
||||||
|
+free_new:
|
||||||
|
+ MFREE(osh, new, SROM_MAXW);
|
||||||
|
+free_old:
|
||||||
|
+ MFREE(osh, old, SROM_MAXW);
|
||||||
|
+ return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BCMUSBDEV)
|
||||||
|
--- a/driver/linux_osl.c
|
||||||
|
+++ b/driver/linux_osl.c
|
||||||
|
@@ -600,20 +600,29 @@ int
|
||||||
|
osl_printf(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
- char buf[1024];
|
||||||
|
+ char *buf;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
+ buf = kcalloc(1024, sizeof(*buf), GFP_KERNEL);
|
||||||
|
+ if (!buf)
|
||||||
|
+ return (-ENOMEM);
|
||||||
|
+
|
||||||
|
/* sprintf into a local buffer because there *is* no "vprintk()".. */
|
||||||
|
va_start(args, format);
|
||||||
|
len = vsnprintf(buf, 1024, format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
- if (len > sizeof(buf)) {
|
||||||
|
+ if (len > (sizeof(*buf) * 1024)) {
|
||||||
|
printk("osl_printf: buffer overrun\n");
|
||||||
|
- return (0);
|
||||||
|
+ goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return (printk(buf));
|
||||||
|
+ printk(buf);
|
||||||
|
+
|
||||||
|
+exit:
|
||||||
|
+ kfree(buf);
|
||||||
|
+
|
||||||
|
+ return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
--- a/driver/bcmutils.c
|
||||||
|
+++ b/driver/bcmutils.c
|
||||||
|
@@ -13,6 +13,7 @@
|
||||||
|
|
||||||
|
#include <typedefs.h>
|
||||||
|
#include <bcmdefs.h>
|
||||||
|
+#define __need___va_list
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <bcmutils.h>
|
||||||
|
#ifdef BCMDRIVER
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
--- a/driver/aiutils.c
|
||||||
|
+++ b/driver/aiutils.c
|
||||||
|
@@ -228,9 +228,10 @@ ai_scan(si_t *sih, void *regs, uint devid)
|
||||||
|
do {
|
||||||
|
asd = get_asd(sih, &eromptr, 0, j, AD_ST_SLAVE, &addrl, &addrh,
|
||||||
|
&sizel, &sizeh);
|
||||||
|
- if ((asd != 0) && (j == 1) && (sizel == SI_CORE_SIZE))
|
||||||
|
+ if ((asd != 0) && (j == 1) && (sizel == SI_CORE_SIZE)) {
|
||||||
|
sii->coresba2[idx] = addrl;
|
||||||
|
sii->coresba2_size[idx] = sizel;
|
||||||
|
+ }
|
||||||
|
j++;
|
||||||
|
} while (asd != 0);
|
||||||
|
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
--- a/driver/hnddma.c
|
||||||
|
+++ b/driver/hnddma.c
|
||||||
|
@@ -1896,7 +1896,8 @@ dma64_txfast(dma_info_t *di, void *p0, bool commit)
|
||||||
|
if (!(flags & D64_CTRL1_EOF)) {
|
||||||
|
#if defined(linux) && defined(__mips__)
|
||||||
|
if (CHIPID(di->sih->chip) == BCM5356_CHIP_ID && di->sih->chiprev == 0) {
|
||||||
|
- uint32 ctrl1, ctrl2, addrlow, addrhigh;
|
||||||
|
+ uint32 ctrl2, addrlow, addrhigh;
|
||||||
|
+ // uint32 ctrl1;
|
||||||
|
|
||||||
|
addrlow = R_SM((volatile uint32 *)&di->txd64[PREVTXD(txout)].addrlow);
|
||||||
|
addrhigh = R_SM((volatile uint32 *)&di->txd64[PREVTXD(txout)].addrhigh);
|
||||||
|
|
||||||
|
--- a/driver/include/linux_osl.h
|
||||||
|
+++ b/driver/include/linux_osl.h
|
||||||
|
@@ -580,9 +580,9 @@ extern void osl_writew(uint16 v, volatile uint16 *r);
|
||||||
|
extern void osl_writel(uint32 v, volatile uint32 *r);
|
||||||
|
|
||||||
|
/* uncached/cached virtual address */
|
||||||
|
-#define OSL_UNCACHED(va) osl_uncached((va))
|
||||||
|
+#define OSL_UNCACHED(va) osl_uncached((void *)(va))
|
||||||
|
extern void *osl_uncached(void *va);
|
||||||
|
-#define OSL_CACHED(va) osl_cached((va))
|
||||||
|
+#define OSL_CACHED(va) osl_cached((void *)(va))
|
||||||
|
extern void *osl_cached(void *va);
|
||||||
|
|
||||||
|
/* get processor cycle count */
|
||||||
|
--- a/driver/siutils.c
|
||||||
|
+++ b/driver/siutils.c
|
||||||
|
@@ -495,11 +495,13 @@ BCMATTACHFN(si_doattach)(si_info_t *sii, uint devid, osl_t *osh, void *regs,
|
||||||
|
}
|
||||||
|
|
||||||
|
sih->bustype = bustype;
|
||||||
|
+#ifdef BCMBUSTYPE
|
||||||
|
if (bustype != BUSTYPE(bustype)) {
|
||||||
|
SI_ERROR(("si_doattach: bus type %d does not match configured bus type %d\n",
|
||||||
|
bustype, BUSTYPE(bustype)));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* bus/core/clk setup for register access */
|
||||||
|
if (!si_buscore_prep(sii, bustype, devid, sdh)) {
|
||||||
|
@@ -1716,6 +1718,9 @@ si_clkctl_xtal(si_t *sih, uint what, bool on)
|
||||||
|
outen);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ return (0);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
default:
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
--- a/driver/bcmsrom.c
|
||||||
|
+++ b/driver/bcmsrom.c
|
||||||
|
@@ -1005,6 +1043,7 @@ BCMNMIATTACHFN(srom_parsecis)(osl_t *osh, uint8 *pcis[], uint ciscnt, char **var
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
case CISTPL_MANFID: FROMHOST();
|
||||||
|
varbuf_append(&b, vstr_manfid, (cis[i + 1] << 8) + cis[i]);
|
||||||
|
varbuf_append(&b, vstr_prodid, (cis[i + 3] << 8) + cis[i + 2]);
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
--- a/driver/wl_linux.c
|
||||||
|
+++ b/driver/wl_linux.c
|
||||||
|
@@ -1109,6 +1109,7 @@ wl_module_exit(void)
|
||||||
|
|
||||||
|
module_init(wl_module_init);
|
||||||
|
module_exit(wl_module_exit);
|
||||||
|
+MODULE_LICENSE("Proprietary");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function frees the WL per-device resources.
|
||||||
@ -409,8 +409,6 @@ static int __init nct5104d_gpio_init(void)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct nct5104d_sio sio;
|
struct nct5104d_sio sio;
|
||||||
const char *board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
|
|
||||||
const char *board_name = dmi_get_system_info(DMI_BOARD_NAME);
|
|
||||||
|
|
||||||
if (nct5104d_find(0x2e, &sio) &&
|
if (nct5104d_find(0x2e, &sio) &&
|
||||||
nct5104d_find(0x4e, &sio))
|
nct5104d_find(0x4e, &sio))
|
||||||
|
|||||||
@ -1620,7 +1620,9 @@ DSL_BSP_FWDownload (DSL_DEV_Device_t * pDev, const char *buf,
|
|||||||
IFX_MEI_EMSG ("Firmware size is too small!\n");
|
IFX_MEI_EMSG ("Firmware size is too small!\n");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
copy_from_user ((char *) &img_hdr_tmp, buf, sizeof (img_hdr_tmp));
|
if (copy_from_user ((char *) &img_hdr_tmp, buf, sizeof (img_hdr_tmp)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
// header of image_size and crc are not included.
|
// header of image_size and crc are not included.
|
||||||
DSL_DEV_PRIVATE(pDev)->image_size = le32_to_cpu (img_hdr_tmp.size) + 8;
|
DSL_DEV_PRIVATE(pDev)->image_size = le32_to_cpu (img_hdr_tmp.size) + 8;
|
||||||
|
|
||||||
@ -1698,7 +1700,9 @@ DSL_BSP_FWDownload (DSL_DEV_Device_t * pDev, const char *buf,
|
|||||||
nCopy = SDRAM_SEGMENT_SIZE - offset;
|
nCopy = SDRAM_SEGMENT_SIZE - offset;
|
||||||
else
|
else
|
||||||
nCopy = size - nRead;
|
nCopy = size - nRead;
|
||||||
copy_from_user (mem_ptr, buf + nRead, nCopy);
|
if (copy_from_user (mem_ptr, buf + nRead, nCopy))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
for (offset = 0; offset < (nCopy / 4); offset++) {
|
for (offset = 0; offset < (nCopy / 4); offset++) {
|
||||||
((unsigned long *) mem_ptr)[offset] = le32_to_cpu (((unsigned long *) mem_ptr)[offset]);
|
((unsigned long *) mem_ptr)[offset] = le32_to_cpu (((unsigned long *) mem_ptr)[offset]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
--- a/src/pm/drv_dsl_cpe_pm_core.c
|
||||||
|
+++ b/src/pm/drv_dsl_cpe_pm_core.c
|
||||||
|
@@ -2274,16 +2274,18 @@ DSL_Error_t DSL_DRV_PM_CountersReset(
|
||||||
|
}
|
||||||
|
#endif /* #ifdef INCLUDE_DSL_CPE_PM_HISTORY*/
|
||||||
|
|
||||||
|
- if (ResetType == DSL_PM_RESET_HISTORY)
|
||||||
|
- break;
|
||||||
|
+ if (ResetType == DSL_PM_RESET_HISTORY)
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
case DSL_PM_RESET_TOTAL:
|
||||||
|
#ifdef INCLUDE_DSL_CPE_PM_TOTAL_COUNTERS
|
||||||
|
memset(EpData.pRecTotal, 0x0, EpData.nEpRecElementSize);
|
||||||
|
#endif /* #ifdef INCLUDE_DSL_CPE_PM_TOTAL_COUNTERS*/
|
||||||
|
- if (ResetType == DSL_PM_RESET_TOTAL)
|
||||||
|
- break;
|
||||||
|
+ if (ResetType == DSL_PM_RESET_TOTAL)
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
case DSL_PM_RESET_HISTORY_SHOWTIME:
|
||||||
|
#ifdef INCLUDE_DSL_CPE_PM_SHOWTIME_COUNTERS
|
||||||
|
nErrCode = DSL_DRV_PM_HistoryDelete(pContext, EpData.pHistShowtime );
|
||||||
|
--- a/src/device/drv_dsl_cpe_device_danube.c
|
||||||
|
+++ b/src/device/drv_dsl_cpe_device_danube.c
|
||||||
|
@@ -3193,7 +3193,7 @@ DSL_Error_t DSL_DRV_DEV_AutobootHandleTraining(
|
||||||
|
DSL_DEV_NUM(pContext)));
|
||||||
|
}
|
||||||
|
#endif /* INCLUDE_DSL_DELT*/
|
||||||
|
- /* Pass through */
|
||||||
|
+ fallthrough ;
|
||||||
|
case DSL_LINESTATE_IDLE:
|
||||||
|
#if defined(INCLUDE_DSL_PM) && defined(INCLUDE_DSL_CPE_PM_LINE_COUNTERS)
|
||||||
|
if ( (pContext->bGotFullInit == DSL_TRUE) &&
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
--- a/src/g997/drv_dsl_cpe_api_g997_danube.c
|
||||||
|
+++ b/src/g997/drv_dsl_cpe_api_g997_danube.c
|
||||||
|
@@ -1984,41 +1984,53 @@ DSL_Error_t DSL_DRV_DEV_G997_DeltHlogGet(
|
||||||
|
{
|
||||||
|
if (nDirection == DSL_DOWNSTREAM)
|
||||||
|
{
|
||||||
|
- DSL_G997_DeltHlogData_t HlogData;
|
||||||
|
+ DSL_G997_DeltHlogData_t *HlogData;
|
||||||
|
|
||||||
|
- memset(&HlogData, 0x0, sizeof(DSL_G997_DeltHlogData_t));
|
||||||
|
+ HlogData = kzalloc(sizeof(*HlogData), GFP_KERNEL);
|
||||||
|
+ if (!HlogData)
|
||||||
|
+ {
|
||||||
|
+ DSL_DEBUG(DSL_DBG_ERR,
|
||||||
|
+ (pContext, "DSL[%02d]: ERROR - Alloc HlogData failed!"DSL_DRV_CRLF,
|
||||||
|
+ DSL_DEV_NUM(pContext)));
|
||||||
|
+ return DSL_ERR_MEMORY;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ memset(HlogData, 0x0, sizeof(DSL_G997_DeltHlogData_t));
|
||||||
|
|
||||||
|
/* Get SHOWTIME Hlog values*/
|
||||||
|
nErrCode = DSL_DRV_DANUBE_G997_DeltHlogGet(
|
||||||
|
- pContext, nDirection, &HlogData);
|
||||||
|
+ pContext, nDirection, HlogData);
|
||||||
|
if (nErrCode != DSL_SUCCESS)
|
||||||
|
{
|
||||||
|
DSL_DEBUG(DSL_DBG_ERR,
|
||||||
|
(pContext, "DSL[%02d]: ERROR - Showtime Hlog get failed!"DSL_DRV_CRLF,
|
||||||
|
DSL_DEV_NUM(pContext)));
|
||||||
|
+ kfree(HlogData);
|
||||||
|
return nErrCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if actual group size != 1, values should be spread */
|
||||||
|
- if (HlogData.nGroupSize != 1)
|
||||||
|
+ if (HlogData->nGroupSize != 1)
|
||||||
|
{
|
||||||
|
nErrCode = DSL_DRV_DANUBE_G997_DeltValuesSpread(
|
||||||
|
- 0x1, HlogData.nGroupSize, HlogData.deltHlog.nNumData,
|
||||||
|
- HlogData.deltHlog.nNSCData, pData->deltHlog.nNSCData);
|
||||||
|
+ 0x1, HlogData->nGroupSize, HlogData->deltHlog.nNumData,
|
||||||
|
+ HlogData->deltHlog.nNSCData, pData->deltHlog.nNSCData);
|
||||||
|
|
||||||
|
if (nErrCode == DSL_SUCCESS)
|
||||||
|
{
|
||||||
|
pData->deltHlog.nNumData =
|
||||||
|
- (DSL_uint16_t)(HlogData.deltHlog.nNumData * HlogData.nGroupSize);
|
||||||
|
+ (DSL_uint16_t)(HlogData->deltHlog.nNumData * HlogData->nGroupSize);
|
||||||
|
pData->nGroupSize = 1;
|
||||||
|
- pData->nMeasurementTime = HlogData.nMeasurementTime;
|
||||||
|
+ pData->nMeasurementTime = HlogData->nMeasurementTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* No spread needed, copy data*/
|
||||||
|
- memcpy(pData, &HlogData, sizeof(DSL_G997_DeltHlogData_t));
|
||||||
|
+ memcpy(pData, HlogData, sizeof(DSL_G997_DeltHlogData_t));
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ kfree(HlogData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
--- a/src/g997/drv_dsl_cpe_api_g997_danube.c
|
||||||
|
+++ b/src/g997/drv_dsl_cpe_api_g997_danube.c
|
||||||
|
@@ -2512,6 +2524,7 @@ DSL_Error_t DSL_DRV_DEV_G997_PowerManagementStateForcedTrigger(
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* read L3 request failure reason */
|
||||||
|
+ DSL_uint8_t nErrCodeL3;
|
||||||
|
nErrCode = DSL_DRV_DANUBE_CmvRead(pContext, DSL_CMV_GROUP_STAT,
|
||||||
|
DSL_CMV_ADDRESS_STAT_L3_FAILURE_REASON, 0, 1, &nVal);
|
||||||
|
DSL_DEBUG(DSL_DBG_MSG,
|
||||||
|
@@ -2525,11 +2538,13 @@ DSL_Error_t DSL_DRV_DEV_G997_PowerManagementStateForcedTrigger(
|
||||||
|
nErrCode = DSL_ERR_MSG_EXCHANGE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- if (((nVal >> 4) & 0x15) == 0x5)
|
||||||
|
+
|
||||||
|
+ nErrCodeL3 = (nVal >> 4) & 0x15;
|
||||||
|
+ if (nErrCodeL3 == 0x5)
|
||||||
|
{
|
||||||
|
nErrCode = DSL_ERR_L3_NOT_IN_L0;
|
||||||
|
}
|
||||||
|
- else if (((nVal >> 4) & 0x15) == 0x9)
|
||||||
|
+ else if (nErrCodeL3 == 0x9)
|
||||||
|
{
|
||||||
|
nErrCode = DSL_ERR_L3_TIMED_OUT;
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
--- a/ltq_atm.c
|
||||||
|
+++ b/ltq_atm.c
|
||||||
|
@@ -338,7 +338,8 @@ static int ppe_ioctl(struct atm_dev *dev
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PPE_ATM_MIB_VCC: /* VCC related MIB */
|
||||||
|
- copy_from_user(&mib_vcc, arg, sizeof(mib_vcc));
|
||||||
|
+ if (copy_from_user(&mib_vcc, arg, sizeof(mib_vcc)))
|
||||||
|
+ return -EFAULT;
|
||||||
|
conn = find_vpivci(mib_vcc.vpi, mib_vcc.vci);
|
||||||
|
if (conn >= 0) {
|
||||||
|
mib_vcc.mib_vcc.aal5VccCrcErrors = g_atm_priv_data.conn[conn].aal5_vcc_crc_err;
|
||||||
@ -257,7 +257,7 @@ void ifx_deu_aes (void *ctx_arg, u8 *out_arg, const u8 *in_arg,
|
|||||||
{
|
{
|
||||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||||
volatile struct aes_t *aes = (volatile struct aes_t *) AES_START;
|
volatile struct aes_t *aes = (volatile struct aes_t *) AES_START;
|
||||||
struct aes_ctx *ctx = (struct aes_ctx *)ctx_arg;
|
//struct aes_ctx *ctx = (struct aes_ctx *)ctx_arg;
|
||||||
unsigned long flag;
|
unsigned long flag;
|
||||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -699,7 +699,7 @@ void ifx_deu_aes_xts (void *ctx_arg, u8 *out_arg, const u8 *in_arg,
|
|||||||
{
|
{
|
||||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||||
volatile struct aes_t *aes = (volatile struct aes_t *) AES_START;
|
volatile struct aes_t *aes = (volatile struct aes_t *) AES_START;
|
||||||
struct aes_ctx *ctx = (struct aes_ctx *)ctx_arg;
|
//struct aes_ctx *ctx = (struct aes_ctx *)ctx_arg;
|
||||||
unsigned long flag;
|
unsigned long flag;
|
||||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||||
u8 oldiv[16];
|
u8 oldiv[16];
|
||||||
|
|||||||
@ -205,12 +205,13 @@ void ifx_deu_des (void *ctx_arg, u8 *out_arg, const u8 *in_arg,
|
|||||||
des->K3HR = DEU_ENDIAN_SWAP(*((u32 *) key + 4));
|
des->K3HR = DEU_ENDIAN_SWAP(*((u32 *) key + 4));
|
||||||
des->K3LR = DEU_ENDIAN_SWAP(*((u32 *) key + 5));
|
des->K3LR = DEU_ENDIAN_SWAP(*((u32 *) key + 5));
|
||||||
/* no break; */
|
/* no break; */
|
||||||
|
fallthrough;
|
||||||
case 16:
|
case 16:
|
||||||
des->K2HR = DEU_ENDIAN_SWAP(*((u32 *) key + 2));
|
des->K2HR = DEU_ENDIAN_SWAP(*((u32 *) key + 2));
|
||||||
des->K2LR = DEU_ENDIAN_SWAP(*((u32 *) key + 3));
|
des->K2LR = DEU_ENDIAN_SWAP(*((u32 *) key + 3));
|
||||||
|
|
||||||
/* no break; */
|
/* no break; */
|
||||||
|
fallthrough;
|
||||||
case 8:
|
case 8:
|
||||||
des->K1HR = DEU_ENDIAN_SWAP(*((u32 *) key + 0));
|
des->K1HR = DEU_ENDIAN_SWAP(*((u32 *) key + 0));
|
||||||
des->K1LR = DEU_ENDIAN_SWAP(*((u32 *) key + 1));
|
des->K1LR = DEU_ENDIAN_SWAP(*((u32 *) key + 1));
|
||||||
|
|||||||
@ -143,7 +143,7 @@ static inline void md5_transform_helper(struct md5_ctx *ctx)
|
|||||||
static int md5_init(struct shash_desc *desc)
|
static int md5_init(struct shash_desc *desc)
|
||||||
{
|
{
|
||||||
struct md5_ctx *mctx = shash_desc_ctx(desc);
|
struct md5_ctx *mctx = shash_desc_ctx(desc);
|
||||||
volatile struct deu_hash_t *hash = (struct deu_hash_t *) HASH_START;
|
//volatile struct deu_hash_t *hash = (struct deu_hash_t *) HASH_START;
|
||||||
|
|
||||||
mctx->byte_count = 0;
|
mctx->byte_count = 0;
|
||||||
mctx->started = 0;
|
mctx->started = 0;
|
||||||
@ -200,8 +200,8 @@ static int md5_final(struct shash_desc *desc, u8 *out)
|
|||||||
const unsigned int offset = mctx->byte_count & 0x3f;
|
const unsigned int offset = mctx->byte_count & 0x3f;
|
||||||
char *p = (char *)mctx->block + offset;
|
char *p = (char *)mctx->block + offset;
|
||||||
int padding = 56 - (offset + 1);
|
int padding = 56 - (offset + 1);
|
||||||
volatile struct deu_hash_t *hashs = (struct deu_hash_t *) HASH_START;
|
//volatile struct deu_hash_t *hashs = (struct deu_hash_t *) HASH_START;
|
||||||
unsigned long flag;
|
//unsigned long flag;
|
||||||
|
|
||||||
*p++ = 0x80;
|
*p++ = 0x80;
|
||||||
if (padding < 0) {
|
if (padding < 0) {
|
||||||
|
|||||||
@ -199,8 +199,8 @@ static int sha1_final(struct shash_desc *desc, u8 *out)
|
|||||||
u64 t;
|
u64 t;
|
||||||
u8 bits[8] = { 0, };
|
u8 bits[8] = { 0, };
|
||||||
static const u8 padding[64] = { 0x80, };
|
static const u8 padding[64] = { 0x80, };
|
||||||
volatile struct deu_hash_t *hashs = (struct deu_hash_t *) HASH_START;
|
//volatile struct deu_hash_t *hashs = (struct deu_hash_t *) HASH_START;
|
||||||
unsigned long flag;
|
//unsigned long flag;
|
||||||
|
|
||||||
t = sctx->count;
|
t = sctx->count;
|
||||||
bits[7] = 0xff & t;
|
bits[7] = 0xff & t;
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
--- a/ifxmips_ptm_adsl.c
|
||||||
|
+++ b/ifxmips_ptm_adsl.c
|
||||||
|
@@ -175,9 +175,11 @@ static INLINE void mailbox_signal(unsign
|
||||||
|
*/
|
||||||
|
static INLINE void proc_file_create(void);
|
||||||
|
static INLINE void proc_file_delete(void);
|
||||||
|
+#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
static int proc_read_version(char *, char **, off_t, int, int *, void *);
|
||||||
|
static int proc_read_wanmib(char *, char **, off_t, int, int *, void *);
|
||||||
|
static int proc_write_wanmib(struct file *, const char *, unsigned long, void *);
|
||||||
|
+#endif
|
||||||
|
#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC
|
||||||
|
static int proc_read_genconf(char *, char **, off_t, int, int *, void *);
|
||||||
|
#endif
|
||||||
|
@@ -889,6 +891,7 @@ static INLINE void proc_file_delete(void
|
||||||
|
remove_proc_entry("driver/ifx_ptm", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
static int proc_read_version(char *buf, char **start, off_t offset, int count, int *eof, void *data)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
@@ -963,8 +966,9 @@ static int proc_write_wanmib(struct file
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
-#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC
|
||||||
|
+#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC && defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
|
||||||
|
static int proc_read_genconf(char *page, char **start, off_t off, int count, int *eof, void *data)
|
||||||
|
{
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
--- a/ifxmips_ptm_adsl.c
|
||||||
|
+++ b/ifxmips_ptm_adsl.c
|
||||||
|
@@ -180,7 +180,7 @@ static int proc_read_version(char *, char **, off_t, int, int *, void *);
|
||||||
|
static int proc_read_wanmib(char *, char **, off_t, int, int *, void *);
|
||||||
|
static int proc_write_wanmib(struct file *, const char *, unsigned long, void *);
|
||||||
|
#endif
|
||||||
|
-#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC
|
||||||
|
+#if defined(ENABLE_FW_PROC) && ENABLE_FW_PROC && defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
static int proc_read_genconf(char *, char **, off_t, int, int *, void *);
|
||||||
|
#endif
|
||||||
|
#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
@@ -191,8 +191,8 @@ static int proc_write_wanmib(struct file *, const char *, unsigned long, void *)
|
||||||
|
/*
|
||||||
|
* Proc Help Functions
|
||||||
|
*/
|
||||||
|
-static INLINE int stricmp(const char *, const char *);
|
||||||
|
#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
+ static INLINE int stricmp(const char *, const char *);
|
||||||
|
static INLINE int strincmp(const char *, const char *, int);
|
||||||
|
#endif
|
||||||
|
static INLINE int ifx_ptm_version(char *);
|
||||||
|
@@ -1159,8 +1159,6 @@ static int proc_write_dbg(struct file *file, const char *buf, unsigned long coun
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#endif // defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
-
|
||||||
|
static INLINE int stricmp(const char *p1, const char *p2)
|
||||||
|
{
|
||||||
|
int c1, c2;
|
||||||
|
@@ -1178,7 +1176,6 @@ static INLINE int stricmp(const char *p1, const char *p2)
|
||||||
|
return *p1 - *p2;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if defined(ENABLE_DBG_PROC) && ENABLE_DBG_PROC
|
||||||
|
static INLINE int strincmp(const char *p1, const char *p2, int n)
|
||||||
|
{
|
||||||
|
int c1 = 0, c2;
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
--- a/src/drv_tapi_cid.c
|
||||||
|
+++ b/src/drv_tapi_cid.c
|
||||||
|
@@ -1424,6 +1424,8 @@ static IFX_int32_t cid_lookup_transparent(TAPI_CIDTX_DATA_t *pTxData,
|
||||||
|
|
||||||
|
cidfsk_set_tx_time (pTxData, &pConfData->TapiCidFskConf);
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
+
|
||||||
|
case IFX_TAPI_CID_GEN_TYPE_DTMF:
|
||||||
|
memcpy (pTxData->cidBuf[IFX_TAPI_CID_GEN_TYPE_DTMF].pBuf,
|
||||||
|
pMessage[0].transparent.data, pMessage[0].transparent.len);
|
||||||
|
@@ -1497,6 +1499,7 @@ static IFX_int32_t cid_prepare_data(TAPI_CHANNEL *pChannel,
|
||||||
|
break;
|
||||||
|
case IFX_TAPI_CID_STD_KPN_DTMF:
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case IFX_TAPI_CID_STD_KPN_DTMF_FSK:
|
||||||
|
if (IFX_TAPI_CID_HM_ONHOOK == pTxData->txHookMode)
|
||||||
|
{
|
||||||
|
@@ -1506,6 +1509,7 @@ static IFX_int32_t cid_prepare_data(TAPI_CHANNEL *pChannel,
|
||||||
|
}
|
||||||
|
/* KPN CID Type 2 (off-hook) always using FSK */
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
default:
|
||||||
|
pTxData->cidGenType = IFX_TAPI_CID_GEN_TYPE_FSK;
|
||||||
|
break;
|
||||||
|
@@ -1532,6 +1536,7 @@ static IFX_int32_t cid_prepare_data(TAPI_CHANNEL *pChannel,
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case IFX_TAPI_CID_GEN_TYPE_FSK:
|
||||||
|
|
||||||
|
if (IFX_TAPI_CID_STD_NTT == pConfData->nStandard)
|
||||||
|
@@ -2036,6 +2041,7 @@ static FSM_STATUS_t cid_fsm_alert_exec(TAPI_CHANNEL *pChannel)
|
||||||
|
}
|
||||||
|
pTxData->nCidSubState++;
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case 1:
|
||||||
|
if (pConfData->OSIoffhook && pConfData->nSAStone)
|
||||||
|
{
|
||||||
|
@@ -2052,6 +2058,7 @@ static FSM_STATUS_t cid_fsm_alert_exec(TAPI_CHANNEL *pChannel)
|
||||||
|
}
|
||||||
|
pTxData->nCidSubState++;
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case 2:
|
||||||
|
if (pConfData->nSAStone)
|
||||||
|
{
|
||||||
|
@@ -2069,6 +2076,7 @@ static FSM_STATUS_t cid_fsm_alert_exec(TAPI_CHANNEL *pChannel)
|
||||||
|
}
|
||||||
|
pTxData->nCidSubState++;
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
default:
|
||||||
|
/* Play CAS tone on data channel, use unprotected function, protection
|
||||||
|
is done around cid_fsm_alert_exec */
|
||||||
|
@@ -3458,6 +3466,7 @@ IFX_int32_t TAPI_Phone_CID_Stop_Tx(TAPI_CHANNEL *pChannel)
|
||||||
|
}
|
||||||
|
/* deliberately fall through */
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case TAPI_CID_STATE_ACK:
|
||||||
|
/* deactivate the DTMF override - last two params are ignored */
|
||||||
|
if (ptr_chk(pDrvCtx->SIG.DTMFD_Override, ""))
|
||||||
|
@@ -3469,6 +3478,7 @@ IFX_int32_t TAPI_Phone_CID_Stop_Tx(TAPI_CHANNEL *pChannel)
|
||||||
|
}
|
||||||
|
/* deliberately fall through */
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
case TAPI_CID_STATE_SENDING:
|
||||||
|
TAPI_Stop_Timer (pTxData->CidTimerID);
|
||||||
|
break;
|
||||||
|
@@ -4066,6 +4076,7 @@ IFX_int32_t TAPI_Phone_Get_CidRxData (TAPI_CHANNEL *pChannel,
|
||||||
|
/* If the fifo is not empty take the data from the fifo first. */
|
||||||
|
/* deliberately fallthrough to default case */
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
default:
|
||||||
|
/* Allow readout of data in all other states not handled above.
|
||||||
|
When there is no data in the fifo TAPI_statusErr is returned. */
|
||||||
|
--- a/src/drv_tapi_dial.c
|
||||||
|
+++ b/src/drv_tapi_dial.c
|
||||||
|
@@ -319,6 +319,8 @@ static IFX_void_t ifx_tapi_dial_OnTimer(Timer_ID Timer, IFX_ulong_t nArg)
|
||||||
|
/* NOTE: the "break" statement has been intentionally omitted */
|
||||||
|
/*lint -fallthrough */
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
+
|
||||||
|
case TAPI_HOOK_STATE_DIAL_L_VAL:
|
||||||
|
/* digit_l_min expires: onhook has lasted long enough to be a
|
||||||
|
certain low pulse (not noise). The next state is the overlap with
|
||||||
|
--- a/src/drv_tapi_event.c
|
||||||
|
+++ b/src/drv_tapi_event.c
|
||||||
|
@@ -1545,6 +1545,7 @@ IFX_int32_t IFX_TAPI_Event_Dispatch_ProcessCtx(IFX_TAPI_EXT_EVENT_PARAM_t*
|
||||||
|
/**\todo put in device fifo */
|
||||||
|
pEvent->ch = IFX_TAPI_DEVICE_CH_NUMBER;
|
||||||
|
/*lint -fallthrough */
|
||||||
|
+ fallthrough;
|
||||||
|
case IFX_TAPI_ERRSRC_LL_CH:
|
||||||
|
pEvent->data.value |= IFX_TAPI_ERRSRC_LL;
|
||||||
|
break;
|
||||||
|
--- a/src/drv_tapi_ioctl.c
|
||||||
|
+++ b/src/drv_tapi_ioctl.c
|
||||||
|
@@ -1552,6 +1553,7 @@ static IFX_int32_t TAPI_IoctlCh (IFX_TAPI_DRV_CTX_t* pDrvCtx,
|
||||||
|
/* Dial Services */
|
||||||
|
ret = TAPI_statusNotSupported;
|
||||||
|
/*lint -fallthrough*/
|
||||||
|
+ fallthrough;
|
||||||
|
default:
|
||||||
|
bHandled = IFX_FALSE;
|
||||||
|
break;
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
--- a/src/drv_tapi_ioctl.c
|
||||||
|
+++ b/src/drv_tapi_ioctl.c
|
||||||
|
@@ -702,7 +702,8 @@ static IFX_int32_t TAPI_IoctlDev (IFX_TAPI_DRV_CTX_t* pDrvCtx,
|
||||||
|
|
||||||
|
if (ret == TAPI_statusOk || ret == 1)
|
||||||
|
{
|
||||||
|
- copy_to_user ((IFX_void_t*)ioarg, p_tmp, sizeof(IFX_TAPI_CAP_t));
|
||||||
|
+ if (copy_to_user ((IFX_void_t*)ioarg, p_tmp, sizeof(IFX_TAPI_CAP_t)))
|
||||||
|
+ ret = TAPI_statusErrKernCpy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TAPI_OS_Free (p_tmp);
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
--- a/src/drv_mei_cpe_api_intern.c
|
||||||
|
+++ b/src/drv_mei_cpe_api_intern.c
|
||||||
|
@@ -421,7 +421,9 @@ IFX_int32_t MEI_InternalMsgSend(
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static IFX_void_t MEI_Internal_DumpMessage(
|
||||||
|
+#define MEI_Internal_DumpMessage_bufSize 10
|
||||||
|
+
|
||||||
|
+static IFX_int32_t MEI_Internal_DumpMessage(
|
||||||
|
MEI_DYN_CNTRL_T *pMeiDynCntrl,
|
||||||
|
const IFX_uint16_t nMsgId,
|
||||||
|
const IFX_uint16_t *pData,
|
||||||
|
@@ -435,15 +437,20 @@ static IFX_void_t MEI_Internal_DumpMessa
|
||||||
|
IFX_uint8_t i;
|
||||||
|
const IFX_uint32_t nCommonPayloadSize = 5*nSize/2;
|
||||||
|
const IFX_uint8_t nInfoSize = 35;
|
||||||
|
- const IFX_uint8_t nBufSize = 10;
|
||||||
|
IFX_uint32_t nMsgSize = nCommonPayloadSize + nInfoSize;
|
||||||
|
IFX_uint32_t nCharsWrittenToBuf = 0;
|
||||||
|
- char msg[nMsgSize];
|
||||||
|
- char buf[nBufSize];
|
||||||
|
+ char *msg;
|
||||||
|
+ char buf[MEI_Internal_DumpMessage_bufSize];
|
||||||
|
|
||||||
|
if((pData == IFX_NULL) || (nSize < 4))
|
||||||
|
{
|
||||||
|
- return ;
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ msg = kcalloc(nMsgSize, sizeof(*msg), GFP_KERNEL);
|
||||||
|
+ if (!msg)
|
||||||
|
+ {
|
||||||
|
+ return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
pMsg16 = (IFX_uint16_t*)(pData+2);
|
||||||
|
@@ -464,7 +471,8 @@ static IFX_void_t MEI_Internal_DumpMessa
|
||||||
|
/* 32-bit payload elements */
|
||||||
|
for (i=0; i<((nSize-4)/4); i++)
|
||||||
|
{
|
||||||
|
- nCharsWrittenToBuf = snprintf(buf, nBufSize, " %08X", pMsg32[i]);
|
||||||
|
+ nCharsWrittenToBuf = snprintf(buf, MEI_Internal_DumpMessage_bufSize,
|
||||||
|
+ " %08X", pMsg32[i]);
|
||||||
|
strncat(msg, buf, nMsgSize);
|
||||||
|
nMsgSize -= nCharsWrittenToBuf;
|
||||||
|
}
|
||||||
|
@@ -474,7 +482,8 @@ static IFX_void_t MEI_Internal_DumpMessa
|
||||||
|
/* 16-bit payload elements */
|
||||||
|
for (i=0; i<((nSize-4)/2); i++)
|
||||||
|
{
|
||||||
|
- nCharsWrittenToBuf = snprintf(buf, nBufSize, " %04X", pMsg16[i]);
|
||||||
|
+ nCharsWrittenToBuf = snprintf(buf, MEI_Internal_DumpMessage_bufSize,
|
||||||
|
+ " %04X", pMsg16[i]);
|
||||||
|
strncat(msg, buf, nMsgSize);
|
||||||
|
nMsgSize -= nCharsWrittenToBuf;
|
||||||
|
}
|
||||||
|
@@ -482,6 +491,10 @@ static IFX_void_t MEI_Internal_DumpMessa
|
||||||
|
strncat(msg, MEI_DRV_CRLF, nMsgSize);
|
||||||
|
|
||||||
|
PRN_DBG_USR_RAW(MEI_MSG_DUMP_API, dbg_level, (msg));
|
||||||
|
+
|
||||||
|
+ kfree(msg);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
IFX_int32_t MEI_InternalSendMessage(
|
||||||
|
@@ -503,18 +516,25 @@ IFX_int32_t MEI_InternalSendMessage(
|
||||||
|
msg.ack_msg.pPayload = (unsigned char *)pDataAck;
|
||||||
|
msg.ack_msg.paylSize_byte = nLenAck;
|
||||||
|
|
||||||
|
- MEI_Internal_DumpMessage(pMeiDynCntrl, msg.write_msg.msgId,
|
||||||
|
+ ret = MEI_Internal_DumpMessage(pMeiDynCntrl, msg.write_msg.msgId,
|
||||||
|
(IFX_uint16_t *)msg.write_msg.pPayload, msg.write_msg.paylSize_byte,
|
||||||
|
IFX_FALSE, MEI_DRV_PRN_LEVEL_NORMAL);
|
||||||
|
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ {
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ret = MEI_InternalMsgSend(pMeiDynCntrl, &msg);
|
||||||
|
|
||||||
|
- if (ret >= 0)
|
||||||
|
+ if (ret < 0)
|
||||||
|
{
|
||||||
|
- MEI_Internal_DumpMessage(pMeiDynCntrl, msg.ack_msg.msgId,
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ret = MEI_Internal_DumpMessage(pMeiDynCntrl, msg.ack_msg.msgId,
|
||||||
|
(IFX_uint16_t *)msg.ack_msg.pPayload, msg.ack_msg.paylSize_byte,
|
||||||
|
IFX_TRUE, MEI_DRV_PRN_LEVEL_NORMAL);
|
||||||
|
- }
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
--- a/src/drv_mei_cpe_linux.c
|
||||||
|
+++ b/src/drv_mei_cpe_linux.c
|
||||||
|
@@ -1267,7 +1267,9 @@ static long MEI_Ioctl( struct file *filp,
|
||||||
|
MEI_IOCTL_RETURN:
|
||||||
|
|
||||||
|
local_args.drv_ioctl.retCode = ret;
|
||||||
|
- copy_to_user( ((IOCTL_MEI_arg_t *)nArgument), &local_args, retSize);
|
||||||
|
+ if (copy_to_user( ((IOCTL_MEI_arg_t *)nArgument), &local_args, retSize))
|
||||||
|
+ PRN_ERR_USR_NL( MEI_DRV, MEI_DRV_PRN_LEVEL_ERR,
|
||||||
|
+ ("MEI_DRV[??] Error ioctl - copy_to_user failed!" MEI_DRV_CRLF));
|
||||||
|
|
||||||
|
return (ret < 0) ? -1 : 0;
|
||||||
|
}
|
||||||
|
@@ -3571,9 +3573,11 @@ static int MEI_IoctlMeiDbgAccessWr_Wrap(
|
||||||
|
ret = MEI_IoctlMeiDbgAccessWr( pMeiDynCntrl, pLocalArgument);
|
||||||
|
|
||||||
|
/* return arguments - count */
|
||||||
|
- copy_to_user( (void *)&pUserArgument->count,
|
||||||
|
+ if (copy_to_user( (void *)&pUserArgument->count,
|
||||||
|
(void *)&pLocalArgument->count,
|
||||||
|
- sizeof(pUserArgument->count) ) ;
|
||||||
|
+ sizeof(pUserArgument->count) ))
|
||||||
|
+ PRN_ERR_USR_NL( MEI_DRV, MEI_DRV_PRN_LEVEL_ERR,
|
||||||
|
+ ("MEI_DRV[??] Error ioctl - copy_to_user failed!" MEI_DRV_CRLF));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -3600,16 +3604,20 @@ static int MEI_IoctlMeiDbgAccessRd_Wrap(
|
||||||
|
if ( pLocalArgument->count )
|
||||||
|
{
|
||||||
|
/* return the buffer */
|
||||||
|
- copy_to_user( pUserBuf,
|
||||||
|
+ if (copy_to_user( pUserBuf,
|
||||||
|
pLocalArgument->pData_32,
|
||||||
|
- pLocalArgument->count * sizeof(IFX_uint32_t) ) ;
|
||||||
|
+ pLocalArgument->count * sizeof(IFX_uint32_t) ))
|
||||||
|
+ PRN_ERR_USR_NL( MEI_DRV, MEI_DRV_PRN_LEVEL_ERR,
|
||||||
|
+ ("MEI_DRV[??] Error ioctl - copy_to_user failed!" MEI_DRV_CRLF));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return count argument */
|
||||||
|
- copy_to_user( (void *)&pUserArgument->count,
|
||||||
|
+ if (copy_to_user( (void *)&pUserArgument->count,
|
||||||
|
(void *)&pLocalArgument->count,
|
||||||
|
- sizeof(pUserArgument->count) ) ;
|
||||||
|
+ sizeof(pUserArgument->count) ))
|
||||||
|
+ PRN_ERR_USR_NL( MEI_DRV, MEI_DRV_PRN_LEVEL_ERR,
|
||||||
|
+ ("MEI_DRV[??] Error ioctl - copy_to_user failed!" MEI_DRV_CRLF));
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
--- a/src/device/drv_dsl_cpe_device_vrx.c
|
||||||
|
+++ b/src/device/drv_dsl_cpe_device_vrx.c
|
||||||
|
@@ -8885,6 +8885,9 @@ DSL_Error_t DSL_DRV_DEV_AutobootHandleTr
|
||||||
|
(pContext, SYS_DBG_MSG"DSL[%02d]: ORDERLY_SHUTDOWN state reached"
|
||||||
|
DSL_DRV_CRLF, DSL_DEV_NUM(pContext)));
|
||||||
|
/* do not use break here, continue handling */
|
||||||
|
+
|
||||||
|
+ fallthrough;
|
||||||
|
+
|
||||||
|
#endif /* INCLUDE_DSL_CPE_API_VRX */
|
||||||
|
case DSL_LINESTATE_EXCEPTION:
|
||||||
|
if (!bPreFail)
|
||||||
|
--- a/src/pm/drv_dsl_cpe_pm_core.c
|
||||||
|
+++ b/src/pm/drv_dsl_cpe_pm_core.c
|
||||||
|
@@ -2355,15 +2355,19 @@ DSL_Error_t DSL_DRV_PM_CountersReset(
|
||||||
|
}
|
||||||
|
#endif /* #ifdef INCLUDE_DSL_CPE_PM_HISTORY*/
|
||||||
|
|
||||||
|
- if (ResetType == DSL_PM_RESET_HISTORY)
|
||||||
|
- break;
|
||||||
|
+ if (ResetType == DSL_PM_RESET_HISTORY)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ fallthrough;
|
||||||
|
|
||||||
|
case DSL_PM_RESET_TOTAL:
|
||||||
|
#ifdef INCLUDE_DSL_CPE_PM_TOTAL_COUNTERS
|
||||||
|
memset(EpData.pRecTotal, nFillValue, EpData.nEpRecElementSize);
|
||||||
|
#endif /* #ifdef INCLUDE_DSL_CPE_PM_TOTAL_COUNTERS*/
|
||||||
|
- if (ResetType == DSL_PM_RESET_TOTAL)
|
||||||
|
- break;
|
||||||
|
+ if (ResetType == DSL_PM_RESET_TOTAL)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ fallthrough;
|
||||||
|
|
||||||
|
case DSL_PM_RESET_HISTORY_SHOWTIME:
|
||||||
|
#ifdef INCLUDE_DSL_CPE_PM_SHOWTIME_COUNTERS
|
||||||
|
--- a/src/common/drv_dsl_cpe_api.c
|
||||||
|
+++ b/src/common/drv_dsl_cpe_api.c
|
||||||
|
@@ -2652,6 +2652,8 @@ DSL_Error_t DSL_DRV_AutobootControlSet(
|
||||||
|
/* no break */
|
||||||
|
/* ... pass to restart*/
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
+
|
||||||
|
#if defined (DSL_VRX_DEVICE_VR11)
|
||||||
|
case DSL_AUTOBOOT_CTRL_STOP_PD:
|
||||||
|
#endif
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
--- a/src/drv_vmmc_bbd.c
|
||||||
|
+++ b/src/drv_vmmc_bbd.c
|
||||||
|
@@ -1025,6 +1025,7 @@ static IFX_int32_t vmmc_BBD_WhiteListedCmdWr(VMMC_CHANNEL *pCh,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ fallthrough;
|
||||||
|
case VMMC_WL_SDD_RING_CFG:
|
||||||
|
case VMMC_WL_SDD_DCDC_CFG:
|
||||||
|
case VMMC_WL_SDD_MWI_CFG:
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
--- a/src/drv_vmmc_ioctl.c
|
||||||
|
+++ b/src/drv_vmmc_ioctl.c
|
||||||
|
@@ -108,9 +108,11 @@ extern IFX_int32_t VMMC_ChipAccessInit (
|
||||||
|
{\
|
||||||
|
arg* p_arg = VMMC_OS_Malloc (sizeof(arg));\
|
||||||
|
VMMC_ASSERT (p_arg != IFX_NULL);\
|
||||||
|
- copy_from_user (p_arg, (IFX_uint8_t*)ioarg, sizeof(arg));\
|
||||||
|
+ if (copy_from_user (p_arg, (IFX_uint8_t*)ioarg, sizeof(arg)))\
|
||||||
|
+ ret = -EFAULT;\
|
||||||
|
ret = func((pContext), p_arg);\
|
||||||
|
- copy_to_user ((IFX_uint8_t*)ioarg, p_arg, sizeof(arg));\
|
||||||
|
+ if (copy_to_user ((IFX_uint8_t*)ioarg, p_arg, sizeof(arg)))\
|
||||||
|
+ ret = -EFAULT;\
|
||||||
|
VMMC_OS_Free (p_arg);\
|
||||||
|
}\
|
||||||
|
break
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
--- a/dcdp/atm_tc.c
|
||||||
|
+++ b/dcdp/atm_tc.c
|
||||||
|
@@ -746,7 +746,8 @@ static void atm_aca_init(struct atm_priv
|
||||||
|
ACA_TXOUT_EN | ACA_RXIN_EN | ACA_RXOUT_EN, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int print_datetime(char *buffer, const struct timespec64 *datetime)
|
||||||
|
+static int print_datetime(char *buffer, int buffer_size,
|
||||||
|
+ const struct timespec64 *datetime)
|
||||||
|
{
|
||||||
|
struct tm nowtm;
|
||||||
|
char tmbuf[64];
|
||||||
|
@@ -765,7 +766,8 @@ static int print_datetime(char *buffer,
|
||||||
|
nowtm.tm_hour,
|
||||||
|
nowtm.tm_min,
|
||||||
|
nowtm.tm_sec);
|
||||||
|
- snprintf(buffer, sizeof(buffer), "%s.%06d", tmbuf, (int)datetime->tv_nsec / 1000);
|
||||||
|
+ snprintf(buffer, sizeof(tmbuf)+buffer_size, "%s.%06d",
|
||||||
|
+ tmbuf, (int)datetime->tv_nsec / 1000);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -967,7 +969,7 @@ void show_atm_pvc(struct seq_file *seq,
|
||||||
|
char buf[64];
|
||||||
|
|
||||||
|
seq_printf(seq, "\tNet device: %s\n", pvc->dev->name);
|
||||||
|
- print_datetime(buf, &(pvc->access_time));
|
||||||
|
+ print_datetime(buf, sizeof(buf), &(pvc->access_time));
|
||||||
|
seq_printf(seq, "\tLast user cell: %s\n", buf);
|
||||||
|
seq_printf(seq, "\tPort: %d\n", pvc->port);
|
||||||
|
seq_printf(seq, "\tSoftware TX Queue: %u\n", pvc->sw_txq_tbl);
|
||||||
@ -0,0 +1,206 @@
|
|||||||
|
--- a/dcdp/ptm_tc.c
|
||||||
|
+++ b/dcdp/ptm_tc.c
|
||||||
|
@@ -298,15 +298,19 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||||
|
)
|
||||||
|
{
|
||||||
|
struct rtnl_link_stats64 *stat;
|
||||||
|
- struct wan_rx_mib_table rx_mib;
|
||||||
|
+ struct wan_rx_mib_table *rx_mib;
|
||||||
|
unsigned int cur_cnt, last_cnt;
|
||||||
|
struct intel_tc_ptm_sl_stats *ptm_sl_stats;
|
||||||
|
struct ptm_priv *ptm_tc;
|
||||||
|
+ int ret = 0;
|
||||||
|
if (!priv || !stats)
|
||||||
|
return -EFAULT;
|
||||||
|
ptm_tc = priv->ptm_tc;
|
||||||
|
if (!ptm_tc)
|
||||||
|
return -EFAULT;
|
||||||
|
+ rx_mib = kzalloc(sizeof(*rx_mib), GFP_KERNEL);
|
||||||
|
+ if (!rx_mib)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
if (bonding)
|
||||||
|
stats->tc_info = TC_PTM_BND_MODE;
|
||||||
|
else
|
||||||
|
@@ -340,11 +344,11 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||||
|
? cur_cnt - last_cnt
|
||||||
|
: cur_cnt + ((unsigned int)(-1) - last_cnt);
|
||||||
|
|
||||||
|
- tc_mem_read(priv, &rx_mib,
|
||||||
|
+ tc_mem_read(priv, rx_mib,
|
||||||
|
fpi_addr(__RX_GIF_MIB_BASE),
|
||||||
|
- sizeof(rx_mib)
|
||||||
|
+ sizeof(*rx_mib)
|
||||||
|
);
|
||||||
|
- ptm_sl_stats->wrx_gif_drop_pdu = rx_mib.wrx_dropdes_pdu;
|
||||||
|
+ ptm_sl_stats->wrx_gif_drop_pdu = rx_mib->wrx_dropdes_pdu;
|
||||||
|
|
||||||
|
cur_cnt = tc_r32(GIF0_RX_CRC_ERR_CNT);
|
||||||
|
last_cnt = priv->ptm_mib.rx_crc_err_pdu[0];
|
||||||
|
@@ -358,7 +362,7 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||||
|
? cur_cnt - last_cnt
|
||||||
|
: cur_cnt + ((unsigned int)(-1) - last_cnt);
|
||||||
|
|
||||||
|
- ptm_sl_stats->wrx_gif_total_bytes = rx_mib.wrx_total_bytes;
|
||||||
|
+ ptm_sl_stats->wrx_gif_total_bytes = rx_mib->wrx_total_bytes;
|
||||||
|
cur_cnt = sb_r32(__US_TC_LOCAL_Q_CFG_CTXT_BASE +
|
||||||
|
offsetof(desq_cfg_ctxt_t, deq_pkt_cnt) / 4);
|
||||||
|
last_cnt = priv->ptm_mib.tx_total_pdu[0];
|
||||||
|
@@ -376,90 +380,108 @@ static int ptm_tc_get_stats(struct ptm_e
|
||||||
|
/* For bonding information */
|
||||||
|
if (bonding) {
|
||||||
|
int i;
|
||||||
|
- struct intel_tc_ptm_bonding_stats ptm_ds;
|
||||||
|
- struct intel_tc_ptm_bonding_stats ptm_us;
|
||||||
|
+ struct intel_tc_ptm_bonding_stats *ptm_ds;
|
||||||
|
+ struct intel_tc_ptm_bonding_stats *ptm_us;
|
||||||
|
struct intel_tc_ptm_bonding_stats *ptm_bonding_stats;
|
||||||
|
+
|
||||||
|
+ ptm_ds = kzalloc(sizeof(*ptm_ds), GFP_KERNEL);
|
||||||
|
+ if (!ptm_ds) {
|
||||||
|
+ ret = -ENOMEM;
|
||||||
|
+ goto free_rx_mib;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ptm_us = kzalloc(sizeof(*ptm_us), GFP_KERNEL);
|
||||||
|
+ if (!ptm_us) {
|
||||||
|
+ ret = -ENOMEM;
|
||||||
|
+ goto free_ptm_ds;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
priv = tc_ep_priv(0);
|
||||||
|
- ptm_tc_bond_get_stats(priv, &ptm_ds);
|
||||||
|
+ ptm_tc_bond_get_stats(priv, ptm_ds);
|
||||||
|
priv = tc_ep_priv(1);
|
||||||
|
- ptm_tc_bond_get_stats(priv, &ptm_us);
|
||||||
|
+ ptm_tc_bond_get_stats(priv, ptm_us);
|
||||||
|
ptm_bonding_stats =
|
||||||
|
&(stats->stats.ptm_tc_stats.pmt_bonding_stats);
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
ptm_bonding_stats->us_gif_mib[i] =
|
||||||
|
- ptm_ds.us_gif_mib[i] + ptm_us.us_gif_mib[i];
|
||||||
|
+ ptm_ds->us_gif_mib[i] + ptm_us->us_gif_mib[i];
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_frag_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_frag_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_frag_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_frag_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_frag_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_of_frag_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_of_frag_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_of_frag_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_of_frag_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_of_frag_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_of_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_of_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_of_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_of_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_of_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_oor_frag_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_oor_frag_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_oor_frag_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_oor_frag_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_oor_frag_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_miss_frag_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_miss_frag_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_miss_frag_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_miss_frag_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_miss_frag_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_gif_mib[i].rx_to_frag_byte_cnt =
|
||||||
|
- ptm_ds.ds_gif_mib[i].rx_to_frag_byte_cnt
|
||||||
|
- + ptm_us.ds_gif_mib[i].rx_to_frag_byte_cnt;
|
||||||
|
+ ptm_ds->ds_gif_mib[i].rx_to_frag_byte_cnt
|
||||||
|
+ + ptm_us->ds_gif_mib[i].rx_to_frag_byte_cnt;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].conform_pkt_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].conform_pkt_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].conform_pkt_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].conform_pkt_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].conform_pkt_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].conform_frag_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].conform_frag_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].conform_frag_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].conform_frag_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].conform_frag_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].conform_byte_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].conform_byte_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].conform_byte_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].conform_byte_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].conform_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_sop_pkt_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_sop_pkt_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_sop_pkt_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_sop_pkt_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_sop_pkt_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_sop_frag_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_sop_frag_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_sop_frag_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_sop_frag_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_sop_frag_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_sop_byte_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_sop_byte_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_sop_byte_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_sop_byte_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_sop_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_eop_pkt_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_eop_pkt_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_eop_pkt_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_eop_pkt_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_eop_pkt_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_eop_frag_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_eop_frag_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_eop_frag_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_eop_frag_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_eop_frag_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].no_eop_byte_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].no_eop_byte_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].no_eop_byte_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].no_eop_byte_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].no_eop_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].oversize_pkt_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].oversize_pkt_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].oversize_pkt_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].oversize_pkt_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].oversize_pkt_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].oversize_frag_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].oversize_frag_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].oversize_frag_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].oversize_frag_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].oversize_frag_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].oversize_byte_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].oversize_byte_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].oversize_byte_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].oversize_byte_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].oversize_byte_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].noncosec_pkt_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].noncosec_pkt_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].noncosec_pkt_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].noncosec_pkt_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].noncosec_pkt_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].noncosec_frag_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].noncosec_frag_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].noncosec_frag_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].noncosec_frag_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].noncosec_frag_cnt;
|
||||||
|
ptm_bonding_stats->ds_bg_mib[i].noncosec_byte_cnt =
|
||||||
|
- ptm_ds.ds_bg_mib[i].noncosec_byte_cnt
|
||||||
|
- + ptm_us.ds_bg_mib[i].noncosec_byte_cnt;
|
||||||
|
+ ptm_ds->ds_bg_mib[i].noncosec_byte_cnt
|
||||||
|
+ + ptm_us->ds_bg_mib[i].noncosec_byte_cnt;
|
||||||
|
}
|
||||||
|
+ kfree(ptm_us);
|
||||||
|
+free_ptm_ds:
|
||||||
|
+ kfree(ptm_ds);
|
||||||
|
}
|
||||||
|
- return 0;
|
||||||
|
+free_rx_mib:
|
||||||
|
+ kfree(rx_mib);
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||||
|
{
|
||||||
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||||
@@ -1413,6 +1413,53 @@ void ath9k_deinit_debug(struct ath_softc
|
@@ -1413,6 +1413,54 @@ void ath9k_deinit_debug(struct ath_softc
|
||||||
ath9k_cmn_spectral_deinit_debug(&sc->spec_priv);
|
ath9k_cmn_spectral_deinit_debug(&sc->spec_priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,8 @@
|
|||||||
+ } else {
|
+ } else {
|
||||||
+ bytes = 2;
|
+ bytes = 2;
|
||||||
+ }
|
+ }
|
||||||
+ copy_to_user(user_buf, from, bytes);
|
+ if (copy_to_user(user_buf, from, bytes))
|
||||||
|
+ return -EFAULT;
|
||||||
+ user_buf += bytes;
|
+ user_buf += bytes;
|
||||||
+ }
|
+ }
|
||||||
+ return *ppos - pos;
|
+ return *ppos - pos;
|
||||||
|
|||||||
@ -65,22 +65,26 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
+}
|
+}
|
||||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
|
||||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
|
||||||
@@ -5,9 +5,16 @@
|
@@ -5,9 +5,20 @@
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
||||||
struct brcmf_mp_device *settings);
|
struct brcmf_mp_device *settings);
|
||||||
|
+#ifdef CPTCFG_BRCMFMAC_SDIO
|
||||||
+struct brcmf_firmware_mapping *
|
+struct brcmf_firmware_mapping *
|
||||||
+brcmf_of_fwnames(struct device *dev, u32 *map_count);
|
+brcmf_of_fwnames(struct device *dev, u32 *map_count);
|
||||||
|
+#endif
|
||||||
#else
|
#else
|
||||||
static void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
static void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
||||||
struct brcmf_mp_device *settings)
|
struct brcmf_mp_device *settings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
+#ifdef CPTCFG_BRCMFMAC_SDIO
|
||||||
+static struct brcmf_firmware_mapping *
|
+static struct brcmf_firmware_mapping *
|
||||||
+brcmf_of_fwnames(struct device *dev, u32 *map_count)
|
+brcmf_of_fwnames(struct device *dev, u32 *map_count)
|
||||||
+{
|
+{
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+}
|
+}
|
||||||
|
+#endif
|
||||||
#endif /* CONFIG_OF */
|
#endif /* CONFIG_OF */
|
||||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
|||||||
@ -0,0 +1,176 @@
|
|||||||
|
From ed4422e98ababf956674da3438ac42b3aa32c66e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Wed, 10 May 2023 00:41:06 +0200
|
||||||
|
Subject: [PATCH] Fix compilation warning with 64 bit system
|
||||||
|
|
||||||
|
Use %zu and %zd where possible for ssize_t and size_t.
|
||||||
|
Use PTR_ERR to correctly convert to negative error.
|
||||||
|
Use universal pointer to support both 32 and 64bit systems.
|
||||||
|
|
||||||
|
Fix compilation warning:
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/fwcmd.c: In function 'mwl_fwcmd_get_fw_core_dump':
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/fwcmd.c:3608:31: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
|
||||||
|
3608 | (const void *)((u32)pcmd +
|
||||||
|
| ^
|
||||||
|
In file included from ./include/linux/device.h:15,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/device.h:3,
|
||||||
|
from ./include/linux/dma-mapping.h:7,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/dma-mapping.h:3,
|
||||||
|
from ./include/linux/skbuff.h:31,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/skbuff.h:3,
|
||||||
|
from ./include/linux/if_ether.h:19,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/if_ether.h:3,
|
||||||
|
from ./include/linux/etherdevice.h:20,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/etherdevice.h:3,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:20:
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c: In function 'pcie_tx_init_ndp':
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:38: error: format '%d' expects argument of type 'int', but argument 3 has type 'long unsigned int' [-Werror=format=]
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
./include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
|
||||||
|
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
|
||||||
|
| ^~~
|
||||||
|
./include/linux/dev_printk.h:144:56: note: in expansion of macro 'dev_fmt'
|
||||||
|
144 | dev_printk_index_wrap(_dev_err, KERN_ERR, dev, dev_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
| ^~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211/net/cfg80211.h:8828:9: note: in expansion of macro 'dev_err'
|
||||||
|
8828 | dev_err(&(wiphy)->dev, format, ##args)
|
||||||
|
| ^~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:17: note: in expansion of macro 'wiphy_err'
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ^~~~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:67: note: format string is defined here
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ~^
|
||||||
|
| |
|
||||||
|
| int
|
||||||
|
| %ld
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:38: error: format '%d' expects argument of type 'int', but argument 4 has type 'long unsigned int' [-Werror=format=]
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
./include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
|
||||||
|
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
|
||||||
|
| ^~~
|
||||||
|
./include/linux/dev_printk.h:144:56: note: in expansion of macro 'dev_fmt'
|
||||||
|
144 | dev_printk_index_wrap(_dev_err, KERN_ERR, dev, dev_fmt(fmt), ##__VA_ARGS__)
|
||||||
|
| ^~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211/net/cfg80211.h:8828:9: note: in expansion of macro 'dev_err'
|
||||||
|
8828 | dev_err(&(wiphy)->dev, format, ##args)
|
||||||
|
| ^~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:17: note: in expansion of macro 'wiphy_err'
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ^~~~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.c:338:71: note: format string is defined here
|
||||||
|
338 | wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
| ~^
|
||||||
|
| |
|
||||||
|
| int
|
||||||
|
| %ld
|
||||||
|
CC [M] /home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/debugfs.o
|
||||||
|
In file included from ./include/linux/device.h:15,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/device.h:3,
|
||||||
|
from ./include/linux/dma-mapping.h:7,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/dma-mapping.h:3,
|
||||||
|
from ./include/linux/skbuff.h:31,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/skbuff.h:3,
|
||||||
|
from ./include/linux/if_ether.h:19,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/if_ether.h:3,
|
||||||
|
from ./include/linux/etherdevice.h:20,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211-backport/linux/etherdevice.h:3,
|
||||||
|
from /home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/pcie.c:19:
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/pcie.c: In function 'pcie_bf_mimo_ctrl_decode':
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/pcie.c:1325:37: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
|
||||||
|
1325 | filename, (unsigned int)fp_data);
|
||||||
|
| ^
|
||||||
|
./include/linux/dev_printk.h:110:37: note: in definition of macro 'dev_printk_index_wrap'
|
||||||
|
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
|
||||||
|
| ^~~~~~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/staging_dir/target-aarch64_cortex-a53_musl/usr/include/mac80211/net/cfg80211.h:8828:9: note: in expansion of macro 'dev_err'
|
||||||
|
8828 | dev_err(&(wiphy)->dev, format, ##args)
|
||||||
|
| ^~~~~~~
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/pcie.c:1324:17: note: in expansion of macro 'wiphy_err'
|
||||||
|
1324 | wiphy_err(priv->hw->wiphy, "Error opening %s! %x\n",
|
||||||
|
| ^~~~~~~~~
|
||||||
|
cc1: all warnings being treated as errors
|
||||||
|
make[4]: *** [scripts/Makefile.build:289: /home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/tx_ndp.o] Error 1
|
||||||
|
make[4]: *** Waiting for unfinished jobs....
|
||||||
|
cc1: all warnings being treated as errors
|
||||||
|
make[4]: *** [scripts/Makefile.build:289: /home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/hif/pcie/pcie.o] Error 1
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/debugfs.c: In function 'mwl_debugfs_regrdwr_read':
|
||||||
|
/home/ansuel/openwrt-ansuel/openwrt/build_dir/target-aarch64_cortex-a53_musl/linux-ipq807x_generic/mwlwifi-2023-04-29-6a436714/debugfs.c:1335:43: error: format '%d' expects argument of type 'int', but argument 4 has type 'ssize_t' {aka 'long int'} [-Werror=format=]
|
||||||
|
1335 | "error: %d(%u 0x%08x 0x%08x)\n",
|
||||||
|
| ~^
|
||||||
|
| |
|
||||||
|
| int
|
||||||
|
| %ld
|
||||||
|
1336 | ret, priv->reg_type, priv->reg_offset,
|
||||||
|
| ~~~
|
||||||
|
| |
|
||||||
|
| ssize_t {aka long int}
|
||||||
|
cc1: all warnings being treated as errors
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
debugfs.c | 2 +-
|
||||||
|
hif/fwcmd.c | 2 +-
|
||||||
|
hif/pcie/pcie.c | 4 ++--
|
||||||
|
hif/pcie/tx_ndp.c | 2 +-
|
||||||
|
4 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/debugfs.c b/debugfs.c
|
||||||
|
index 39b09fd..42efd28 100644
|
||||||
|
--- a/debugfs.c
|
||||||
|
+++ b/debugfs.c
|
||||||
|
@@ -1332,7 +1332,7 @@ done:
|
||||||
|
priv->reg_value);
|
||||||
|
else
|
||||||
|
len += scnprintf(p + len, size - len,
|
||||||
|
- "error: %d(%u 0x%08x 0x%08x)\n",
|
||||||
|
+ "error: %zd(%u 0x%08x 0x%08x)\n",
|
||||||
|
ret, priv->reg_type, priv->reg_offset,
|
||||||
|
priv->reg_value);
|
||||||
|
|
||||||
|
diff --git a/hif/fwcmd.c b/hif/fwcmd.c
|
||||||
|
index 376b58f..582c8d2 100644
|
||||||
|
--- a/hif/fwcmd.c
|
||||||
|
+++ b/hif/fwcmd.c
|
||||||
|
@@ -3604,7 +3604,7 @@ int mwl_fwcmd_get_fw_core_dump(struct ieee80211_hw *hw,
|
||||||
|
core_dump->size_kb = pcmd->cmd_data.coredump.size_kb;
|
||||||
|
core_dump->flags = pcmd->cmd_data.coredump.flags;
|
||||||
|
memcpy(buff,
|
||||||
|
- (const void *)((u32)pcmd +
|
||||||
|
+ (const void *)((uintptr_t)pcmd +
|
||||||
|
sizeof(struct hostcmd_cmd_get_fw_core_dump) -
|
||||||
|
sizeof(struct hostcmd_cmd_get_fw_core_dump_)),
|
||||||
|
MAX_CORE_DUMP_BUFFER);
|
||||||
|
diff --git a/hif/pcie/pcie.c b/hif/pcie/pcie.c
|
||||||
|
index 24453b6..5b6c633 100644
|
||||||
|
--- a/hif/pcie/pcie.c
|
||||||
|
+++ b/hif/pcie/pcie.c
|
||||||
|
@@ -1320,8 +1320,8 @@ static void pcie_bf_mimo_ctrl_decode(struct mwl_priv *priv,
|
||||||
|
&fp_data->f_pos);
|
||||||
|
filp_close(fp_data, current->files);
|
||||||
|
} else {
|
||||||
|
- wiphy_err(priv->hw->wiphy, "Error opening %s! %x\n",
|
||||||
|
- filename, (unsigned int)fp_data);
|
||||||
|
+ wiphy_err(priv->hw->wiphy, "Error opening %s! %ld\n",
|
||||||
|
+ filename, PTR_ERR(fp_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,10,0)
|
||||||
|
diff --git a/hif/pcie/tx_ndp.c b/hif/pcie/tx_ndp.c
|
||||||
|
index 6758cde..3140a2e 100644
|
||||||
|
--- a/hif/pcie/tx_ndp.c
|
||||||
|
+++ b/hif/pcie/tx_ndp.c
|
||||||
|
@@ -335,7 +335,7 @@ int pcie_tx_init_ndp(struct ieee80211_hw *hw)
|
||||||
|
|
||||||
|
if (sizeof(struct pcie_tx_ctrl_ndp) >
|
||||||
|
sizeof(tx_info->status.status_driver_data)) {
|
||||||
|
- wiphy_err(hw->wiphy, "driver data is not enough: %d (%d)\n",
|
||||||
|
+ wiphy_err(hw->wiphy, "driver data is not enough: %zu (%zu)\n",
|
||||||
|
sizeof(struct pcie_tx_ctrl_ndp),
|
||||||
|
sizeof(tx_info->status.status_driver_data));
|
||||||
|
return -ENOMEM;
|
||||||
|
--
|
||||||
|
2.39.2
|
||||||
|
|
||||||
@ -3,11 +3,11 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=nat46
|
PKG_NAME:=nat46
|
||||||
|
|
||||||
PKG_MIRROR_HASH:=c26b8c60aa991a087011b8b6492e43a6749f0a5d9dc79ffcfd352da5fa20b78d
|
PKG_MIRROR_HASH:=aeff95aa278ec1e197b59700284c0210f32b92c1fb757e5c3088bd00b3b403d4
|
||||||
PKG_SOURCE_URL:=https://github.com/ayourtch/nat46.git
|
PKG_SOURCE_URL:=https://github.com/ayourtch/nat46.git
|
||||||
PKG_SOURCE_DATE:=2022-03-30
|
PKG_SOURCE_DATE:=2022-09-19
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_VERSION:=95ca1c3b99376da2d0306919f2df4a8d3c9bb78b
|
PKG_SOURCE_VERSION:=4c5beee236841724219598fabb1edc93d4f08ce5
|
||||||
|
|
||||||
PKG_MAINTAINER:=Hans Dedecker <dedeckeh@gmail.com>
|
PKG_MAINTAINER:=Hans Dedecker <dedeckeh@gmail.com>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
@ -15,7 +15,7 @@ PKG_LICENSE:=GPL-2.0
|
|||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
define KernelPackage/nat46
|
define KernelPackage/nat46
|
||||||
DEPENDS:=@IPV6
|
DEPENDS:=@IPV6 +kmod-nf-conntrack6
|
||||||
TITLE:=Stateless NAT46 translation kernel module
|
TITLE:=Stateless NAT46 translation kernel module
|
||||||
SECTION:=kernel
|
SECTION:=kernel
|
||||||
SUBMENU:=Network Support
|
SUBMENU:=Network Support
|
||||||
|
|||||||
@ -134,7 +134,7 @@ static int gpio_latch_probe(struct platform_device *pdev)
|
|||||||
GPIOD_OUT_LOW);
|
GPIOD_OUT_LOW);
|
||||||
if (IS_ERR(glc->gpios[i])) {
|
if (IS_ERR(glc->gpios[i])) {
|
||||||
if (PTR_ERR(glc->gpios[i]) != -EPROBE_DEFER) {
|
if (PTR_ERR(glc->gpios[i]) != -EPROBE_DEFER) {
|
||||||
dev_err(dev, "failed to get gpio %d: %d\n", i,
|
dev_err(dev, "failed to get gpio %d: %ld\n", i,
|
||||||
PTR_ERR(glc->gpios[i]));
|
PTR_ERR(glc->gpios[i]));
|
||||||
}
|
}
|
||||||
return PTR_ERR(glc->gpios[i]);
|
return PTR_ERR(glc->gpios[i]);
|
||||||
|
|||||||
@ -286,7 +286,7 @@ static int rb91x_nand_probe(struct platform_device *pdev)
|
|||||||
gpios = gpiod_get_array(dev, NULL, GPIOD_OUT_LOW);
|
gpios = gpiod_get_array(dev, NULL, GPIOD_OUT_LOW);
|
||||||
if (IS_ERR(gpios)) {
|
if (IS_ERR(gpios)) {
|
||||||
if (PTR_ERR(gpios) != -EPROBE_DEFER) {
|
if (PTR_ERR(gpios) != -EPROBE_DEFER) {
|
||||||
dev_err(dev, "failed to get gpios: %d\n",
|
dev_err(dev, "failed to get gpios: %ld\n",
|
||||||
PTR_ERR(gpios));
|
PTR_ERR(gpios));
|
||||||
}
|
}
|
||||||
return PTR_ERR(gpios);
|
return PTR_ERR(gpios);
|
||||||
|
|||||||
@ -60,9 +60,6 @@ define Build/relocate-kernel
|
|||||||
rm -rf $@.relocate
|
rm -rf $@.relocate
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/append-squashfs-fakeroot-be
|
|
||||||
cat ./empty-squashfs-lzma >> $@
|
|
||||||
endef
|
|
||||||
|
|
||||||
define Device/Default
|
define Device/Default
|
||||||
DEVICE_DTS_DIR := ../dts
|
DEVICE_DTS_DIR := ../dts
|
||||||
|
|||||||
Binary file not shown.
@ -141,7 +141,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
irq_set_chained_handler_and_data(apc->irq, ar71xx_pci_irq_handler,
|
irq_set_chained_handler_and_data(apc->irq, ar71xx_pci_irq_handler,
|
||||||
apc);
|
apc);
|
||||||
}
|
}
|
||||||
@@ -325,6 +337,11 @@ static void ar71xx_pci_reset(void)
|
@@ -325,10 +337,14 @@ static void ar71xx_pci_reset(void)
|
||||||
mdelay(100);
|
mdelay(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,7 +153,11 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
static int ar71xx_pci_probe(struct platform_device *pdev)
|
static int ar71xx_pci_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct ar71xx_pci_controller *apc;
|
struct ar71xx_pci_controller *apc;
|
||||||
@@ -345,26 +362,6 @@ static int ar71xx_pci_probe(struct platf
|
- struct resource *res;
|
||||||
|
u32 t;
|
||||||
|
|
||||||
|
apc = devm_kzalloc(&pdev->dev, sizeof(struct ar71xx_pci_controller),
|
||||||
|
@@ -345,26 +361,6 @@ static int ar71xx_pci_probe(struct platf
|
||||||
if (apc->irq < 0)
|
if (apc->irq < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -180,7 +184,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
ar71xx_pci_reset();
|
ar71xx_pci_reset();
|
||||||
|
|
||||||
/* setup COMMAND register */
|
/* setup COMMAND register */
|
||||||
@@ -377,9 +374,11 @@ static int ar71xx_pci_probe(struct platf
|
@@ -377,9 +373,11 @@ static int ar71xx_pci_probe(struct platf
|
||||||
|
|
||||||
ar71xx_pci_irq_init(apc);
|
ar71xx_pci_irq_init(apc);
|
||||||
|
|
||||||
@ -192,7 +196,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
|
|
||||||
register_pci_controller(&apc->pci_ctrl);
|
register_pci_controller(&apc->pci_ctrl);
|
||||||
|
|
||||||
@@ -390,6 +389,7 @@ static struct platform_driver ar71xx_pci
|
@@ -390,6 +388,7 @@ static struct platform_driver ar71xx_pci
|
||||||
.probe = ar71xx_pci_probe,
|
.probe = ar71xx_pci_probe,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "ar71xx-pci",
|
.name = "ar71xx-pci",
|
||||||
|
|||||||
@ -154,7 +154,15 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
irq_set_chained_handler_and_data(apc->irq, ar724x_pci_irq_handler,
|
irq_set_chained_handler_and_data(apc->irq, ar724x_pci_irq_handler,
|
||||||
apc);
|
apc);
|
||||||
}
|
}
|
||||||
@@ -388,29 +396,11 @@ static int ar724x_pci_probe(struct platf
|
@@ -360,7 +368,6 @@ static void ar724x_pci_hw_init(struct ar
|
||||||
|
static int ar724x_pci_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct ar724x_pci_controller *apc;
|
||||||
|
- struct resource *res;
|
||||||
|
int id;
|
||||||
|
|
||||||
|
id = pdev->id;
|
||||||
|
@@ -388,29 +395,11 @@ static int ar724x_pci_probe(struct platf
|
||||||
if (apc->irq < 0)
|
if (apc->irq < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -186,7 +194,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Do the full PCIE Root Complex Initialization Sequence if the PCIe
|
* Do the full PCIE Root Complex Initialization Sequence if the PCIe
|
||||||
@@ -432,10 +422,16 @@ static int ar724x_pci_probe(struct platf
|
@@ -432,10 +421,16 @@ static int ar724x_pci_probe(struct platf
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -127,7 +127,7 @@ Submitted-by: John Crispin <john@phrozen.org>
|
|||||||
static void ar71xx_pci_reset(void)
|
static void ar71xx_pci_reset(void)
|
||||||
{
|
{
|
||||||
ath79_device_reset_set(AR71XX_RESET_PCI_BUS | AR71XX_RESET_PCI_CORE);
|
ath79_device_reset_set(AR71XX_RESET_PCI_BUS | AR71XX_RESET_PCI_CORE);
|
||||||
@@ -358,10 +258,6 @@ static int ar71xx_pci_probe(struct platf
|
@@ -357,10 +257,6 @@ static int ar71xx_pci_probe(struct platf
|
||||||
if (IS_ERR(apc->cfg_base))
|
if (IS_ERR(apc->cfg_base))
|
||||||
return PTR_ERR(apc->cfg_base);
|
return PTR_ERR(apc->cfg_base);
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ Submitted-by: John Crispin <john@phrozen.org>
|
|||||||
ar71xx_pci_reset();
|
ar71xx_pci_reset();
|
||||||
|
|
||||||
/* setup COMMAND register */
|
/* setup COMMAND register */
|
||||||
@@ -372,8 +268,6 @@ static int ar71xx_pci_probe(struct platf
|
@@ -371,8 +267,6 @@ static int ar71xx_pci_probe(struct platf
|
||||||
/* clear bus errors */
|
/* clear bus errors */
|
||||||
ar71xx_pci_check_error(apc, 1);
|
ar71xx_pci_check_error(apc, 1);
|
||||||
|
|
||||||
|
|||||||
@ -96,7 +96,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
|
|
||||||
/* set PCIE Application Control to ready */
|
/* set PCIE Application Control to ready */
|
||||||
app = __raw_readl(apc->ctrl_base + AR724X_PCI_REG_APP);
|
app = __raw_readl(apc->ctrl_base + AR724X_PCI_REG_APP);
|
||||||
@@ -396,6 +412,14 @@ static int ar724x_pci_probe(struct platf
|
@@ -395,6 +411,14 @@ static int ar724x_pci_probe(struct platf
|
||||||
if (apc->irq < 0)
|
if (apc->irq < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
apc->np = pdev->dev.of_node;
|
apc->np = pdev->dev.of_node;
|
||||||
apc->pci_controller.pci_ops = &ar724x_pci_ops;
|
apc->pci_controller.pci_ops = &ar724x_pci_ops;
|
||||||
apc->pci_controller.io_resource = &apc->io_res;
|
apc->pci_controller.io_resource = &apc->io_res;
|
||||||
@@ -406,7 +430,7 @@ static int ar724x_pci_probe(struct platf
|
@@ -405,7 +429,7 @@ static int ar724x_pci_probe(struct platf
|
||||||
* Do the full PCIE Root Complex Initialization Sequence if the PCIe
|
* Do the full PCIE Root Complex Initialization Sequence if the PCIe
|
||||||
* host controller is in reset.
|
* host controller is in reset.
|
||||||
*/
|
*/
|
||||||
@ -120,7 +120,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
ar724x_pci_hw_init(apc);
|
ar724x_pci_hw_init(apc);
|
||||||
|
|
||||||
apc->link_up = ar724x_pci_check_link(apc);
|
apc->link_up = ar724x_pci_check_link(apc);
|
||||||
@@ -424,6 +448,7 @@ static int ar724x_pci_probe(struct platf
|
@@ -423,6 +447,7 @@ static int ar724x_pci_probe(struct platf
|
||||||
|
|
||||||
static const struct of_device_id ar724x_pci_ids[] = {
|
static const struct of_device_id ar724x_pci_ids[] = {
|
||||||
{ .compatible = "qcom,ar7240-pci" },
|
{ .compatible = "qcom,ar7240-pci" },
|
||||||
|
|||||||
@ -97,7 +97,7 @@ SVN-Revision: 32639
|
|||||||
static inline u32 ar71xx_pci_get_ble(int where, int size, int local)
|
static inline u32 ar71xx_pci_get_ble(int where, int size, int local)
|
||||||
{
|
{
|
||||||
u32 t;
|
u32 t;
|
||||||
@@ -276,6 +315,9 @@ static int ar71xx_pci_probe(struct platf
|
@@ -275,6 +314,9 @@ static int ar71xx_pci_probe(struct platf
|
||||||
|
|
||||||
register_pci_controller(&apc->pci_ctrl);
|
register_pci_controller(&apc->pci_ctrl);
|
||||||
|
|
||||||
|
|||||||
@ -1,23 +1,25 @@
|
|||||||
--- a/drivers/pcmcia/yenta_socket.c
|
--- a/drivers/pcmcia/yenta_socket.c
|
||||||
+++ b/drivers/pcmcia/yenta_socket.c
|
+++ b/drivers/pcmcia/yenta_socket.c
|
||||||
@@ -932,6 +932,8 @@ static unsigned int yenta_probe_irq(stru
|
@@ -923,6 +923,8 @@ static struct cardbus_type cardbus_type[
|
||||||
* Probe for usable interrupts using the force
|
|
||||||
* register to generate bogus card status events.
|
|
||||||
*/
|
|
||||||
+#ifndef CONFIG_BCM47XX
|
|
||||||
+ /* WRT54G3G does not like this */
|
|
||||||
cb_writel(socket, CB_SOCKET_EVENT, -1);
|
|
||||||
cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
|
|
||||||
reg = exca_readb(socket, I365_CSCINT);
|
|
||||||
@@ -947,6 +949,7 @@ static unsigned int yenta_probe_irq(stru
|
|
||||||
}
|
|
||||||
cb_writel(socket, CB_SOCKET_MASK, 0);
|
|
||||||
exca_writeb(socket, I365_CSCINT, reg);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
|
static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask)
|
||||||
|
{
|
||||||
|
+/* WRT54G3G does not like this */
|
||||||
|
+#ifndef CONFIG_BCM47XX
|
||||||
|
int i;
|
||||||
|
unsigned long val;
|
||||||
|
u32 mask;
|
||||||
|
@@ -951,6 +953,9 @@ static unsigned int yenta_probe_irq(stru
|
||||||
mask = probe_irq_mask(val) & 0xffff;
|
mask = probe_irq_mask(val) & 0xffff;
|
||||||
|
|
||||||
@@ -1031,6 +1034,10 @@ static void yenta_get_socket_capabilitie
|
return mask;
|
||||||
|
+#else
|
||||||
|
+ return 0;
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1031,6 +1036,10 @@ static void yenta_get_socket_capabilitie
|
||||||
else
|
else
|
||||||
socket->socket.irq_mask = 0;
|
socket->socket.irq_mask = 0;
|
||||||
|
|
||||||
@ -28,7 +30,7 @@
|
|||||||
dev_info(&socket->dev->dev, "ISA IRQ mask 0x%04x, PCI irq %d\n",
|
dev_info(&socket->dev->dev, "ISA IRQ mask 0x%04x, PCI irq %d\n",
|
||||||
socket->socket.irq_mask, socket->cb_irq);
|
socket->socket.irq_mask, socket->cb_irq);
|
||||||
}
|
}
|
||||||
@@ -1262,6 +1269,15 @@ static int yenta_probe(struct pci_dev *d
|
@@ -1262,6 +1271,15 @@ static int yenta_probe(struct pci_dev *d
|
||||||
dev_info(&dev->dev, "Socket status: %08x\n",
|
dev_info(&dev->dev, "Socket status: %08x\n",
|
||||||
cb_readl(socket, CB_SOCKET_STATE));
|
cb_readl(socket, CB_SOCKET_STATE));
|
||||||
|
|
||||||
|
|||||||
@ -379,50 +379,50 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
|||||||
+
|
+
|
||||||
+struct bcm4908_pinctrl_function {
|
+struct bcm4908_pinctrl_function {
|
||||||
+ const char *name;
|
+ const char *name;
|
||||||
+ const char * const *groups;
|
+ const char **groups;
|
||||||
+ const unsigned int num_groups;
|
+ const unsigned int num_groups;
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+static const char * const led_0_groups[] = { "led_0_grp_a" };
|
+static const char *led_0_groups[] = { "led_0_grp_a" };
|
||||||
+static const char * const led_1_groups[] = { "led_1_grp_a" };
|
+static const char *led_1_groups[] = { "led_1_grp_a" };
|
||||||
+static const char * const led_2_groups[] = { "led_2_grp_a" };
|
+static const char *led_2_groups[] = { "led_2_grp_a" };
|
||||||
+static const char * const led_3_groups[] = { "led_3_grp_a" };
|
+static const char *led_3_groups[] = { "led_3_grp_a" };
|
||||||
+static const char * const led_4_groups[] = { "led_4_grp_a" };
|
+static const char *led_4_groups[] = { "led_4_grp_a" };
|
||||||
+static const char * const led_5_groups[] = { "led_5_grp_a" };
|
+static const char *led_5_groups[] = { "led_5_grp_a" };
|
||||||
+static const char * const led_6_groups[] = { "led_6_grp_a" };
|
+static const char *led_6_groups[] = { "led_6_grp_a" };
|
||||||
+static const char * const led_7_groups[] = { "led_7_grp_a" };
|
+static const char *led_7_groups[] = { "led_7_grp_a" };
|
||||||
+static const char * const led_8_groups[] = { "led_8_grp_a" };
|
+static const char *led_8_groups[] = { "led_8_grp_a" };
|
||||||
+static const char * const led_9_groups[] = { "led_9_grp_a" };
|
+static const char *led_9_groups[] = { "led_9_grp_a" };
|
||||||
+static const char * const led_10_groups[] = { "led_10_grp_a", "led_10_grp_b" };
|
+static const char *led_10_groups[] = { "led_10_grp_a", "led_10_grp_b" };
|
||||||
+static const char * const led_11_groups[] = { "led_11_grp_a", "led_11_grp_b" };
|
+static const char *led_11_groups[] = { "led_11_grp_a", "led_11_grp_b" };
|
||||||
+static const char * const led_12_groups[] = { "led_12_grp_a", "led_12_grp_b" };
|
+static const char *led_12_groups[] = { "led_12_grp_a", "led_12_grp_b" };
|
||||||
+static const char * const led_13_groups[] = { "led_13_grp_a", "led_13_grp_b" };
|
+static const char *led_13_groups[] = { "led_13_grp_a", "led_13_grp_b" };
|
||||||
+static const char * const led_14_groups[] = { "led_14_grp_a" };
|
+static const char *led_14_groups[] = { "led_14_grp_a" };
|
||||||
+static const char * const led_15_groups[] = { "led_15_grp_a" };
|
+static const char *led_15_groups[] = { "led_15_grp_a" };
|
||||||
+static const char * const led_16_groups[] = { "led_16_grp_a" };
|
+static const char *led_16_groups[] = { "led_16_grp_a" };
|
||||||
+static const char * const led_17_groups[] = { "led_17_grp_a" };
|
+static const char *led_17_groups[] = { "led_17_grp_a" };
|
||||||
+static const char * const led_18_groups[] = { "led_18_grp_a" };
|
+static const char *led_18_groups[] = { "led_18_grp_a" };
|
||||||
+static const char * const led_19_groups[] = { "led_19_grp_a" };
|
+static const char *led_19_groups[] = { "led_19_grp_a" };
|
||||||
+static const char * const led_20_groups[] = { "led_20_grp_a" };
|
+static const char *led_20_groups[] = { "led_20_grp_a" };
|
||||||
+static const char * const led_21_groups[] = { "led_21_grp_a" };
|
+static const char *led_21_groups[] = { "led_21_grp_a" };
|
||||||
+static const char * const led_22_groups[] = { "led_22_grp_a" };
|
+static const char *led_22_groups[] = { "led_22_grp_a" };
|
||||||
+static const char * const led_23_groups[] = { "led_23_grp_a" };
|
+static const char *led_23_groups[] = { "led_23_grp_a" };
|
||||||
+static const char * const led_24_groups[] = { "led_24_grp_a" };
|
+static const char *led_24_groups[] = { "led_24_grp_a" };
|
||||||
+static const char * const led_25_groups[] = { "led_25_grp_a" };
|
+static const char *led_25_groups[] = { "led_25_grp_a" };
|
||||||
+static const char * const led_26_groups[] = { "led_26_grp_a" };
|
+static const char *led_26_groups[] = { "led_26_grp_a" };
|
||||||
+static const char * const led_27_groups[] = { "led_27_grp_a" };
|
+static const char *led_27_groups[] = { "led_27_grp_a" };
|
||||||
+static const char * const led_28_groups[] = { "led_28_grp_a" };
|
+static const char *led_28_groups[] = { "led_28_grp_a" };
|
||||||
+static const char * const led_29_groups[] = { "led_29_grp_a" };
|
+static const char *led_29_groups[] = { "led_29_grp_a" };
|
||||||
+static const char * const led_30_groups[] = { "led_30_grp_a" };
|
+static const char *led_30_groups[] = { "led_30_grp_a" };
|
||||||
+static const char * const led_31_groups[] = { "led_31_grp_a", "led_31_grp_b" };
|
+static const char *led_31_groups[] = { "led_31_grp_a", "led_31_grp_b" };
|
||||||
+static const char * const hs_uart_groups[] = { "hs_uart_grp" };
|
+static const char *hs_uart_groups[] = { "hs_uart_grp" };
|
||||||
+static const char * const i2c_groups[] = { "i2c_grp_a", "i2c_grp_b" };
|
+static const char *i2c_groups[] = { "i2c_grp_a", "i2c_grp_b" };
|
||||||
+static const char * const i2s_groups[] = { "i2s_grp" };
|
+static const char *i2s_groups[] = { "i2s_grp" };
|
||||||
+static const char * const nand_ctrl_groups[] = { "nand_ctrl_grp" };
|
+static const char *nand_ctrl_groups[] = { "nand_ctrl_grp" };
|
||||||
+static const char * const nand_data_groups[] = { "nand_data_grp" };
|
+static const char *nand_data_groups[] = { "nand_data_grp" };
|
||||||
+static const char * const emmc_ctrl_groups[] = { "emmc_ctrl_grp" };
|
+static const char *emmc_ctrl_groups[] = { "emmc_ctrl_grp" };
|
||||||
+static const char * const usb0_pwr_groups[] = { "usb0_pwr_grp" };
|
+static const char *usb0_pwr_groups[] = { "usb0_pwr_grp" };
|
||||||
+static const char * const usb1_pwr_groups[] = { "usb1_pwr_grp" };
|
+static const char *usb1_pwr_groups[] = { "usb1_pwr_grp" };
|
||||||
+
|
+
|
||||||
+static const struct bcm4908_pinctrl_function bcm4908_pinctrl_functions[] = {
|
+static const struct bcm4908_pinctrl_function bcm4908_pinctrl_functions[] = {
|
||||||
+ { "led_0", led_0_groups, ARRAY_SIZE(led_0_groups) },
|
+ { "led_0", led_0_groups, ARRAY_SIZE(led_0_groups) },
|
||||||
|
|||||||
@ -0,0 +1,154 @@
|
|||||||
|
From 00cf359b486a3d14c29014e9d57d92ab81972866 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Tue, 9 May 2023 14:03:08 +0200
|
||||||
|
Subject: [PATCH] drivers: mtd: nand: macronix: comment unused function
|
||||||
|
|
||||||
|
Comment unused function since macronix_nand_block_protection_support
|
||||||
|
cause booting problems.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/mtd/nand/raw/nand_macronix.c | 132 +++++++++++++--------------
|
||||||
|
1 file changed, 66 insertions(+), 66 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/nand/raw/nand_macronix.c
|
||||||
|
+++ b/drivers/mtd/nand/raw/nand_macronix.c
|
||||||
|
@@ -179,72 +179,72 @@ static void macronix_nand_fix_broken_get
|
||||||
|
ONFI_FEATURE_ADDR_TIMING_MODE, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Macronix NAND supports Block Protection by Protectoin(PT) pin;
|
||||||
|
- * active high at power-on which protects the entire chip even the #WP is
|
||||||
|
- * disabled. Lock/unlock protection area can be partition according to
|
||||||
|
- * protection bits, i.e. upper 1/2 locked, upper 1/4 locked and so on.
|
||||||
|
- */
|
||||||
|
-static int mxic_nand_lock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_LOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("%s all blocks failed\n", __func__);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static int mxic_nand_unlock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("%s all blocks failed\n", __func__);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void macronix_nand_block_protection_support(struct nand_chip *chip)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- bitmap_set(chip->parameters.get_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret || feature[0] != MXIC_BLOCK_PROTECTION_ALL_LOCK) {
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("Block protection check failed\n");
|
||||||
|
-
|
||||||
|
- bitmap_clear(chip->parameters.get_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bitmap_set(chip->parameters.set_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
-
|
||||||
|
- chip->ops.lock_area = mxic_nand_lock;
|
||||||
|
- chip->ops.unlock_area = mxic_nand_unlock;
|
||||||
|
-}
|
||||||
|
+// /*
|
||||||
|
+// * Macronix NAND supports Block Protection by Protectoin(PT) pin;
|
||||||
|
+// * active high at power-on which protects the entire chip even the #WP is
|
||||||
|
+// * disabled. Lock/unlock protection area can be partition according to
|
||||||
|
+// * protection bits, i.e. upper 1/2 locked, upper 1/4 locked and so on.
|
||||||
|
+// */
|
||||||
|
+// static int mxic_nand_lock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_LOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("%s all blocks failed\n", __func__);
|
||||||
|
+
|
||||||
|
+// return ret;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// static int mxic_nand_unlock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("%s all blocks failed\n", __func__);
|
||||||
|
+
|
||||||
|
+// return ret;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// static void macronix_nand_block_protection_support(struct nand_chip *chip)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// bitmap_set(chip->parameters.get_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret || feature[0] != MXIC_BLOCK_PROTECTION_ALL_LOCK) {
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("Block protection check failed\n");
|
||||||
|
+
|
||||||
|
+// bitmap_clear(chip->parameters.get_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+// return;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// bitmap_set(chip->parameters.set_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+
|
||||||
|
+// chip->ops.lock_area = mxic_nand_lock;
|
||||||
|
+// chip->ops.unlock_area = mxic_nand_unlock;
|
||||||
|
+// }
|
||||||
|
|
||||||
|
static int nand_power_down_op(struct nand_chip *chip)
|
||||||
|
{
|
||||||
@ -0,0 +1,154 @@
|
|||||||
|
From 00cf359b486a3d14c29014e9d57d92ab81972866 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Tue, 9 May 2023 14:03:08 +0200
|
||||||
|
Subject: [PATCH] drivers: mtd: nand: macronix: comment unused function
|
||||||
|
|
||||||
|
Comment unused function since macronix_nand_block_protection_support
|
||||||
|
cause booting problems.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/mtd/nand/raw/nand_macronix.c | 132 +++++++++++++--------------
|
||||||
|
1 file changed, 66 insertions(+), 66 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/nand/raw/nand_macronix.c
|
||||||
|
+++ b/drivers/mtd/nand/raw/nand_macronix.c
|
||||||
|
@@ -179,72 +179,72 @@ static void macronix_nand_fix_broken_get
|
||||||
|
ONFI_FEATURE_ADDR_TIMING_MODE, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Macronix NAND supports Block Protection by Protectoin(PT) pin;
|
||||||
|
- * active high at power-on which protects the entire chip even the #WP is
|
||||||
|
- * disabled. Lock/unlock protection area can be partition according to
|
||||||
|
- * protection bits, i.e. upper 1/2 locked, upper 1/4 locked and so on.
|
||||||
|
- */
|
||||||
|
-static int mxic_nand_lock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_LOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("%s all blocks failed\n", __func__);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static int mxic_nand_unlock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("%s all blocks failed\n", __func__);
|
||||||
|
-
|
||||||
|
- return ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void macronix_nand_block_protection_support(struct nand_chip *chip)
|
||||||
|
-{
|
||||||
|
- u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- bitmap_set(chip->parameters.get_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
-
|
||||||
|
- feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
- nand_select_target(chip, 0);
|
||||||
|
- ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
- feature);
|
||||||
|
- nand_deselect_target(chip);
|
||||||
|
- if (ret || feature[0] != MXIC_BLOCK_PROTECTION_ALL_LOCK) {
|
||||||
|
- if (ret)
|
||||||
|
- pr_err("Block protection check failed\n");
|
||||||
|
-
|
||||||
|
- bitmap_clear(chip->parameters.get_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bitmap_set(chip->parameters.set_feature_list,
|
||||||
|
- ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
-
|
||||||
|
- chip->ops.lock_area = mxic_nand_lock;
|
||||||
|
- chip->ops.unlock_area = mxic_nand_unlock;
|
||||||
|
-}
|
||||||
|
+// /*
|
||||||
|
+// * Macronix NAND supports Block Protection by Protectoin(PT) pin;
|
||||||
|
+// * active high at power-on which protects the entire chip even the #WP is
|
||||||
|
+// * disabled. Lock/unlock protection area can be partition according to
|
||||||
|
+// * protection bits, i.e. upper 1/2 locked, upper 1/4 locked and so on.
|
||||||
|
+// */
|
||||||
|
+// static int mxic_nand_lock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_LOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("%s all blocks failed\n", __func__);
|
||||||
|
+
|
||||||
|
+// return ret;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// static int mxic_nand_unlock(struct nand_chip *chip, loff_t ofs, uint64_t len)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("%s all blocks failed\n", __func__);
|
||||||
|
+
|
||||||
|
+// return ret;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// static void macronix_nand_block_protection_support(struct nand_chip *chip)
|
||||||
|
+// {
|
||||||
|
+// u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
|
||||||
|
+// int ret;
|
||||||
|
+
|
||||||
|
+// bitmap_set(chip->parameters.get_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+
|
||||||
|
+// feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
|
||||||
|
+// nand_select_target(chip, 0);
|
||||||
|
+// ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
|
||||||
|
+// feature);
|
||||||
|
+// nand_deselect_target(chip);
|
||||||
|
+// if (ret || feature[0] != MXIC_BLOCK_PROTECTION_ALL_LOCK) {
|
||||||
|
+// if (ret)
|
||||||
|
+// pr_err("Block protection check failed\n");
|
||||||
|
+
|
||||||
|
+// bitmap_clear(chip->parameters.get_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+// return;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// bitmap_set(chip->parameters.set_feature_list,
|
||||||
|
+// ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
|
||||||
|
+
|
||||||
|
+// chip->ops.lock_area = mxic_nand_lock;
|
||||||
|
+// chip->ops.unlock_area = mxic_nand_unlock;
|
||||||
|
+// }
|
||||||
|
|
||||||
|
static int nand_power_down_op(struct nand_chip *chip)
|
||||||
|
{
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
From ee1a0696934a8b77a6a2098f92832c46d34ec5da Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Wed, 27 Oct 2021 14:31:35 +0200
|
||||||
|
Subject: [PATCH] watchdog: bcm63xx_wdt: fix fallthrough warning
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This fixes:
|
||||||
|
drivers/watchdog/bcm63xx_wdt.c: In function 'bcm63xx_wdt_ioctl':
|
||||||
|
drivers/watchdog/bcm63xx_wdt.c:208:17: warning: this statement may fall through [-Wimplicit-fallthrough=]
|
||||||
|
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
|
||||||
|
Link: https://lore.kernel.org/r/20211027123135.27458-1-zajec5@gmail.com
|
||||||
|
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||||
|
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
|
||||||
|
---
|
||||||
|
drivers/watchdog/bcm63xx_wdt.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/watchdog/bcm63xx_wdt.c
|
||||||
|
+++ b/drivers/watchdog/bcm63xx_wdt.c
|
||||||
|
@@ -207,6 +207,8 @@ static long bcm63xx_wdt_ioctl(struct fil
|
||||||
|
|
||||||
|
bcm63xx_wdt_pet();
|
||||||
|
|
||||||
|
+ fallthrough;
|
||||||
|
+
|
||||||
|
case WDIOC_GETTIMEOUT:
|
||||||
|
return put_user(wdt_time, p);
|
||||||
|
|
||||||
@ -7483,7 +7483,7 @@ CONFIG_WATCHDOG_OPEN_TIMEOUT=0
|
|||||||
# CONFIG_WD80x3 is not set
|
# CONFIG_WD80x3 is not set
|
||||||
# CONFIG_WDAT_WDT is not set
|
# CONFIG_WDAT_WDT is not set
|
||||||
# CONFIG_WDTPCI is not set
|
# CONFIG_WDTPCI is not set
|
||||||
# CONFIG_WERROR is not set
|
CONFIG_WERROR=y
|
||||||
# CONFIG_WEXT_CORE is not set
|
# CONFIG_WEXT_CORE is not set
|
||||||
# CONFIG_WEXT_PRIV is not set
|
# CONFIG_WEXT_PRIV is not set
|
||||||
# CONFIG_WEXT_PROC is not set
|
# CONFIG_WEXT_PROC is not set
|
||||||
|
|||||||
@ -307,7 +307,6 @@ static const struct switch_dev_ops psb6970_ops = {
|
|||||||
static int psb6970_config_init(struct phy_device *pdev)
|
static int psb6970_config_init(struct phy_device *pdev)
|
||||||
{
|
{
|
||||||
struct psb6970_priv *priv;
|
struct psb6970_priv *priv;
|
||||||
struct net_device *dev = pdev->attached_dev;
|
|
||||||
struct switch_dev *swdev;
|
struct switch_dev *swdev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,66 @@
|
|||||||
|
From cc225d163b5a4f7a0d1968298bf7927306646a47 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Fri, 28 Apr 2023 01:53:01 +0200
|
||||||
|
Subject: [PATCH] net: phy: mediatek-ge: add LED configuration interface
|
||||||
|
|
||||||
|
This adds a small hack similar to the one used for ar8xxx switches to
|
||||||
|
read a reg:value map for configuring the LED configuration registers.
|
||||||
|
|
||||||
|
This allows OpenWrt to write device-specific LED action as well as blink
|
||||||
|
configurations. It is unlikely to be accepted upstream, as upstream
|
||||||
|
plans on integrating their own framework for handling these LEDs.
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
drivers/net/phy/mediatek-ge.c | 33 +++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 33 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/phy/mediatek-ge.c
|
||||||
|
+++ b/drivers/net/phy/mediatek-ge.c
|
||||||
|
@@ -53,6 +53,36 @@ static int mt7530_phy_config_init(struct
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int mt7530_led_config_of(struct phy_device *phydev)
|
||||||
|
+{
|
||||||
|
+ struct device_node *np = phydev->mdio.dev.of_node;
|
||||||
|
+ const __be32 *paddr;
|
||||||
|
+ int len;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ paddr = of_get_property(np, "mediatek,led-config", &len);
|
||||||
|
+ if (!paddr)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (len < (2 * sizeof(*paddr)))
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ len /= sizeof(*paddr);
|
||||||
|
+
|
||||||
|
+ phydev_warn(phydev, "Configure LED registers (num=%d)\n", len);
|
||||||
|
+ for (i = 0; i < len - 1; i += 2) {
|
||||||
|
+ u32 reg;
|
||||||
|
+ u32 val;
|
||||||
|
+
|
||||||
|
+ reg = be32_to_cpup(paddr + i);
|
||||||
|
+ val = be32_to_cpup(paddr + i + 1);
|
||||||
|
+
|
||||||
|
+ phy_write_mmd(phydev, MDIO_MMD_VEND2, reg, val);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int mt7531_phy_config_init(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
mtk_gephy_config_init(phydev);
|
||||||
|
@@ -65,6 +95,9 @@ static int mt7531_phy_config_init(struct
|
||||||
|
phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x13, 0x404);
|
||||||
|
phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x14, 0x404);
|
||||||
|
|
||||||
|
+ /* LED Config*/
|
||||||
|
+ mt7530_led_config_of(phydev);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
From ca71e00839fcdd26f122fb6d9e97903c9fe198f7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Sat, 6 May 2023 08:08:35 +0200
|
||||||
|
Subject: [PATCH] binfmt_elf: dynamically allocate note.data in
|
||||||
|
parse_elf_properties
|
||||||
|
|
||||||
|
Dynamically allocate note.data in parse_elf_properties to fix
|
||||||
|
compilation warning on some arch.
|
||||||
|
|
||||||
|
On some arch note.data exceet the stack limit for a single function and
|
||||||
|
this cause the following compilation warning:
|
||||||
|
fs/binfmt_elf.c: In function 'parse_elf_properties.isra':
|
||||||
|
fs/binfmt_elf.c:821:1: error: the frame size of 1040 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
|
||||||
|
821 | }
|
||||||
|
| ^
|
||||||
|
cc1: all warnings being treated as errors
|
||||||
|
|
||||||
|
Fix this by dynamically allocating the array.
|
||||||
|
|
||||||
|
Fixes: 00e19ceec80b ("ELF: Add ELF program property parsing support")
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Cc: stable@vger.kernel.org # v5.8+
|
||||||
|
---
|
||||||
|
fs/binfmt_elf.c | 32 +++++++++++++++++++++++---------
|
||||||
|
1 file changed, 23 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
--- a/fs/binfmt_elf.c
|
||||||
|
+++ b/fs/binfmt_elf.c
|
||||||
|
@@ -768,7 +768,7 @@ static int parse_elf_properties(struct f
|
||||||
|
{
|
||||||
|
union {
|
||||||
|
struct elf_note nhdr;
|
||||||
|
- char data[NOTE_DATA_SZ];
|
||||||
|
+ char *data;
|
||||||
|
} note;
|
||||||
|
loff_t pos;
|
||||||
|
ssize_t n;
|
||||||
|
@@ -788,26 +788,38 @@ static int parse_elf_properties(struct f
|
||||||
|
if (phdr->p_filesz > sizeof(note))
|
||||||
|
return -ENOEXEC;
|
||||||
|
|
||||||
|
+ note.data = kcalloc(NOTE_DATA_SZ, sizeof(*note.data), GFP_KERNEL);
|
||||||
|
+ if (!note.data)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
pos = phdr->p_offset;
|
||||||
|
n = kernel_read(f, ¬e, phdr->p_filesz, &pos);
|
||||||
|
|
||||||
|
BUILD_BUG_ON(sizeof(note) < sizeof(note.nhdr) + NOTE_NAME_SZ);
|
||||||
|
- if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ)
|
||||||
|
- return -EIO;
|
||||||
|
+ if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ) {
|
||||||
|
+ ret = -EIO;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (note.nhdr.n_type != NT_GNU_PROPERTY_TYPE_0 ||
|
||||||
|
note.nhdr.n_namesz != NOTE_NAME_SZ ||
|
||||||
|
strncmp(note.data + sizeof(note.nhdr),
|
||||||
|
- GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr)))
|
||||||
|
- return -ENOEXEC;
|
||||||
|
+ GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr))) {
|
||||||
|
+ ret = -ENOEXEC;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
off = round_up(sizeof(note.nhdr) + NOTE_NAME_SZ,
|
||||||
|
ELF_GNU_PROPERTY_ALIGN);
|
||||||
|
- if (off > n)
|
||||||
|
- return -ENOEXEC;
|
||||||
|
-
|
||||||
|
- if (note.nhdr.n_descsz > n - off)
|
||||||
|
- return -ENOEXEC;
|
||||||
|
+ if (off > n) {
|
||||||
|
+ ret = -ENOEXEC;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (note.nhdr.n_descsz > n - off) {
|
||||||
|
+ ret = -ENOEXEC;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
datasz = off + note.nhdr.n_descsz;
|
||||||
|
|
||||||
|
have_prev_type = false;
|
||||||
|
@@ -817,6 +829,8 @@ static int parse_elf_properties(struct f
|
||||||
|
have_prev_type = true;
|
||||||
|
} while (!ret);
|
||||||
|
|
||||||
|
+exit:
|
||||||
|
+ kfree(note.data);
|
||||||
|
return ret == -ENOENT ? 0 : ret;
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
From eee53f6eb7561f516b9c4bac829ce31c48096130 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Fabian Frederick <fabf@skynet.be>
|
||||||
|
Date: Tue, 9 May 2017 22:30:03 +0200
|
||||||
|
Subject: [PATCH] jffs2: reduce stack usage in jffs2_build_xattr_subsystem()
|
||||||
|
|
||||||
|
Use kcalloc() for allocation/flush of 128 pointers table to
|
||||||
|
reduce stack usage.
|
||||||
|
|
||||||
|
Function now returns -ENOMEM or 0 on success.
|
||||||
|
|
||||||
|
stackusage
|
||||||
|
Before:
|
||||||
|
./fs/jffs2/xattr.c:775 jffs2_build_xattr_subsystem 1208
|
||||||
|
dynamic,bounded
|
||||||
|
|
||||||
|
After:
|
||||||
|
./fs/jffs2/xattr.c:775 jffs2_build_xattr_subsystem 192
|
||||||
|
dynamic,bounded
|
||||||
|
|
||||||
|
Also update definition when CONFIG_JFFS2_FS_XATTR is not enabled
|
||||||
|
|
||||||
|
Tested with an MTD mount point and some user set/getfattr.
|
||||||
|
|
||||||
|
Many current target on OpenWRT also suffer from a compilation warning
|
||||||
|
(that become an error with CONFIG_WERROR) with the following output:
|
||||||
|
|
||||||
|
fs/jffs2/xattr.c: In function 'jffs2_build_xattr_subsystem':
|
||||||
|
fs/jffs2/xattr.c:887:1: error: the frame size of 1088 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
|
||||||
|
887 | }
|
||||||
|
| ^
|
||||||
|
|
||||||
|
Using dynamic allocation fix this compilation warning.
|
||||||
|
|
||||||
|
Fixes: c9f700f840bd ("[JFFS2][XATTR] using 'delete marker' for xdatum/xref deletion")
|
||||||
|
Reported-by: Tim Gardner <tim.gardner@canonical.com>
|
||||||
|
Reported-by: kernel test robot <lkp@intel.com>
|
||||||
|
Reported-by: Ron Economos <re@w6rz.net>
|
||||||
|
Reported-by: Nathan Chancellor <nathan@kernel.org>
|
||||||
|
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
|
||||||
|
Signed-off-by: Fabian Frederick <fabf@skynet.be>
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Cc: stable@vger.kernel.org
|
||||||
|
---
|
||||||
|
fs/jffs2/build.c | 5 ++++-
|
||||||
|
fs/jffs2/xattr.c | 13 +++++++++----
|
||||||
|
fs/jffs2/xattr.h | 4 ++--
|
||||||
|
3 files changed, 15 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
--- a/fs/jffs2/build.c
|
||||||
|
+++ b/fs/jffs2/build.c
|
||||||
|
@@ -211,7 +211,10 @@ static int jffs2_build_filesystem(struct
|
||||||
|
ic->scan_dents = NULL;
|
||||||
|
cond_resched();
|
||||||
|
}
|
||||||
|
- jffs2_build_xattr_subsystem(c);
|
||||||
|
+ ret = jffs2_build_xattr_subsystem(c);
|
||||||
|
+ if (ret)
|
||||||
|
+ goto exit;
|
||||||
|
+
|
||||||
|
c->flags &= ~JFFS2_SB_FLAG_BUILDING;
|
||||||
|
|
||||||
|
dbg_fsbuild("FS build complete\n");
|
||||||
|
--- a/fs/jffs2/xattr.c
|
||||||
|
+++ b/fs/jffs2/xattr.c
|
||||||
|
@@ -772,10 +772,10 @@ void jffs2_clear_xattr_subsystem(struct
|
||||||
|
}
|
||||||
|
|
||||||
|
#define XREF_TMPHASH_SIZE (128)
|
||||||
|
-void jffs2_build_xattr_subsystem(struct jffs2_sb_info *c)
|
||||||
|
+int jffs2_build_xattr_subsystem(struct jffs2_sb_info *c)
|
||||||
|
{
|
||||||
|
struct jffs2_xattr_ref *ref, *_ref;
|
||||||
|
- struct jffs2_xattr_ref *xref_tmphash[XREF_TMPHASH_SIZE];
|
||||||
|
+ struct jffs2_xattr_ref **xref_tmphash;
|
||||||
|
struct jffs2_xattr_datum *xd, *_xd;
|
||||||
|
struct jffs2_inode_cache *ic;
|
||||||
|
struct jffs2_raw_node_ref *raw;
|
||||||
|
@@ -784,9 +784,12 @@ void jffs2_build_xattr_subsystem(struct
|
||||||
|
|
||||||
|
BUG_ON(!(c->flags & JFFS2_SB_FLAG_BUILDING));
|
||||||
|
|
||||||
|
+ xref_tmphash = kcalloc(XREF_TMPHASH_SIZE,
|
||||||
|
+ sizeof(struct jffs2_xattr_ref *), GFP_KERNEL);
|
||||||
|
+ if (!xref_tmphash)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
/* Phase.1 : Merge same xref */
|
||||||
|
- for (i=0; i < XREF_TMPHASH_SIZE; i++)
|
||||||
|
- xref_tmphash[i] = NULL;
|
||||||
|
for (ref=c->xref_temp; ref; ref=_ref) {
|
||||||
|
struct jffs2_xattr_ref *tmp;
|
||||||
|
|
||||||
|
@@ -884,6 +887,8 @@ void jffs2_build_xattr_subsystem(struct
|
||||||
|
"%u of xref (%u dead, %u orphan) found.\n",
|
||||||
|
xdatum_count, xdatum_unchecked_count, xdatum_orphan_count,
|
||||||
|
xref_count, xref_dead_count, xref_orphan_count);
|
||||||
|
+ kfree(xref_tmphash);
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct jffs2_xattr_datum *jffs2_setup_xattr_datum(struct jffs2_sb_info *c,
|
||||||
|
--- a/fs/jffs2/xattr.h
|
||||||
|
+++ b/fs/jffs2/xattr.h
|
||||||
|
@@ -71,7 +71,7 @@ static inline int is_xattr_ref_dead(stru
|
||||||
|
#ifdef CONFIG_JFFS2_FS_XATTR
|
||||||
|
|
||||||
|
extern void jffs2_init_xattr_subsystem(struct jffs2_sb_info *c);
|
||||||
|
-extern void jffs2_build_xattr_subsystem(struct jffs2_sb_info *c);
|
||||||
|
+extern int jffs2_build_xattr_subsystem(struct jffs2_sb_info *c);
|
||||||
|
extern void jffs2_clear_xattr_subsystem(struct jffs2_sb_info *c);
|
||||||
|
|
||||||
|
extern struct jffs2_xattr_datum *jffs2_setup_xattr_datum(struct jffs2_sb_info *c,
|
||||||
|
@@ -103,7 +103,7 @@ extern ssize_t jffs2_listxattr(struct de
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define jffs2_init_xattr_subsystem(c)
|
||||||
|
-#define jffs2_build_xattr_subsystem(c)
|
||||||
|
+#define jffs2_build_xattr_subsystem(c) (0)
|
||||||
|
#define jffs2_clear_xattr_subsystem(c)
|
||||||
|
|
||||||
|
#define jffs2_xattr_do_crccheck_inode(c, ic)
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
From 1d81e51d6d79d9098013b2e8cdd677bae998c5d8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Fri, 28 Apr 2023 02:22:59 +0200
|
||||||
|
Subject: [PATCH 1/2] mt7530: register OF node for internal MDIO bus
|
||||||
|
|
||||||
|
The MT753x switches provide a switch-internal MDIO bus for the embedded
|
||||||
|
PHYs.
|
||||||
|
|
||||||
|
Register a OF sub-node on the switch OF-node for this internal MDIO bus.
|
||||||
|
This allows to configure the embedded PHYs using device-tree.
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
drivers/net/dsa/mt7530.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/dsa/mt7530.c
|
||||||
|
+++ b/drivers/net/dsa/mt7530.c
|
||||||
|
@@ -2081,10 +2081,13 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||||
|
{
|
||||||
|
struct dsa_switch *ds = priv->ds;
|
||||||
|
struct device *dev = priv->dev;
|
||||||
|
+ struct device_node *np, *mnp;
|
||||||
|
struct mii_bus *bus;
|
||||||
|
static int idx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
+ np = priv->dev->of_node;
|
||||||
|
+
|
||||||
|
bus = devm_mdiobus_alloc(dev);
|
||||||
|
if (!bus)
|
||||||
|
return -ENOMEM;
|
||||||
|
@@ -2101,7 +2104,9 @@ mt7530_setup_mdio(struct mt7530_priv *pr
|
||||||
|
if (priv->irq)
|
||||||
|
mt7530_setup_mdio_irq(priv);
|
||||||
|
|
||||||
|
- ret = devm_mdiobus_register(dev, bus);
|
||||||
|
+ mnp = of_get_child_by_name(np, "mdio");
|
||||||
|
+ ret = devm_of_mdiobus_register(dev, bus, mnp);
|
||||||
|
+ of_node_put(mnp);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "failed to register MDIO bus: %d\n", ret);
|
||||||
|
if (priv->irq)
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
From 28edd829133766eb3cefaf2e49d3ee701968061b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Tue, 9 May 2023 01:57:17 +0200
|
||||||
|
Subject: [PATCH] mmc: sdhci-msm: comment unused sdhci_msm_set_clock
|
||||||
|
|
||||||
|
comment unused sdhci_msm_set_clock and __sdhci_msm_set_clock as due to some
|
||||||
|
current problem, we are forced to use sdhci_set_clock.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/mmc/host/sdhci-msm.c | 86 ++++++++++++++++++------------------
|
||||||
|
1 file changed, 43 insertions(+), 43 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mmc/host/sdhci-msm.c
|
||||||
|
+++ b/drivers/mmc/host/sdhci-msm.c
|
||||||
|
@@ -1751,49 +1751,49 @@ static unsigned int sdhci_msm_get_min_cl
|
||||||
|
return SDHCI_MSM_MIN_CLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * __sdhci_msm_set_clock - sdhci_msm clock control.
|
||||||
|
- *
|
||||||
|
- * Description:
|
||||||
|
- * MSM controller does not use internal divider and
|
||||||
|
- * instead directly control the GCC clock as per
|
||||||
|
- * HW recommendation.
|
||||||
|
- **/
|
||||||
|
-static void __sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||||
|
-{
|
||||||
|
- u16 clk;
|
||||||
|
-
|
||||||
|
- sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
|
||||||
|
-
|
||||||
|
- if (clock == 0)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * MSM controller do not use clock divider.
|
||||||
|
- * Thus read SDHCI_CLOCK_CONTROL and only enable
|
||||||
|
- * clock with no divider value programmed.
|
||||||
|
- */
|
||||||
|
- clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
|
||||||
|
- sdhci_enable_clk(host, clk);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/* sdhci_msm_set_clock - Called with (host->lock) spinlock held. */
|
||||||
|
-static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||||
|
-{
|
||||||
|
- struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||||
|
- struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
|
||||||
|
-
|
||||||
|
- if (!clock) {
|
||||||
|
- host->mmc->actual_clock = msm_host->clk_rate = 0;
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- sdhci_msm_hc_select_mode(host);
|
||||||
|
-
|
||||||
|
- msm_set_clock_rate_for_bus_mode(host, clock);
|
||||||
|
-out:
|
||||||
|
- __sdhci_msm_set_clock(host, clock);
|
||||||
|
-}
|
||||||
|
+// /*
|
||||||
|
+// * __sdhci_msm_set_clock - sdhci_msm clock control.
|
||||||
|
+// *
|
||||||
|
+// * Description:
|
||||||
|
+// * MSM controller does not use internal divider and
|
||||||
|
+// * instead directly control the GCC clock as per
|
||||||
|
+// * HW recommendation.
|
||||||
|
+// **/
|
||||||
|
+// static void __sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||||
|
+// {
|
||||||
|
+// u16 clk;
|
||||||
|
+
|
||||||
|
+// sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
|
||||||
|
+
|
||||||
|
+// if (clock == 0)
|
||||||
|
+// return;
|
||||||
|
+
|
||||||
|
+// /*
|
||||||
|
+// * MSM controller do not use clock divider.
|
||||||
|
+// * Thus read SDHCI_CLOCK_CONTROL and only enable
|
||||||
|
+// * clock with no divider value programmed.
|
||||||
|
+// */
|
||||||
|
+// clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
|
||||||
|
+// sdhci_enable_clk(host, clk);
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// /* sdhci_msm_set_clock - Called with (host->lock) spinlock held. */
|
||||||
|
+// static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||||
|
+// {
|
||||||
|
+// struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||||
|
+// struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
|
||||||
|
+
|
||||||
|
+// if (!clock) {
|
||||||
|
+// host->mmc->actual_clock = msm_host->clk_rate = 0;
|
||||||
|
+// goto out;
|
||||||
|
+// }
|
||||||
|
+
|
||||||
|
+// sdhci_msm_hc_select_mode(host);
|
||||||
|
+
|
||||||
|
+// msm_set_clock_rate_for_bus_mode(host, clock);
|
||||||
|
+// out:
|
||||||
|
+// __sdhci_msm_set_clock(host, clock);
|
||||||
|
+// }
|
||||||
|
|
||||||
|
/*****************************************************************************\
|
||||||
|
* *
|
||||||
@ -1,4 +1,4 @@
|
|||||||
From 3e1825e00dafb68eec25df389b63f3ab3d905b59 Mon Sep 17 00:00:00 2001
|
From 157ac9f52fd9b9a22cf12f7755a905fb34ef72f7 Mon Sep 17 00:00:00 2001
|
||||||
From: Gabor Juhos <j4g8y7@gmail.com>
|
From: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
Date: Fri, 25 Dec 2020 08:02:47 +0100
|
Date: Fri, 25 Dec 2020 08:02:47 +0100
|
||||||
Subject: [PATCH] net: phy: define PSGMII PHY interface mode
|
Subject: [PATCH] net: phy: define PSGMII PHY interface mode
|
||||||
@ -16,9 +16,9 @@ of connection between the MAC and PHY.
|
|||||||
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
||||||
---
|
---
|
||||||
Documentation/devicetree/bindings/net/ethernet-controller.yaml | 1 +
|
Documentation/devicetree/bindings/net/ethernet-controller.yaml | 1 +
|
||||||
drivers/net/phy/phylink.c | 1 +
|
drivers/net/phy/phylink.c | 2 ++
|
||||||
include/linux/phy.h | 3 +++
|
include/linux/phy.h | 3 +++
|
||||||
3 files changed, 5 insertions(+)
|
3 files changed, 6 insertions(+)
|
||||||
|
|
||||||
--- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml
|
--- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml
|
||||||
+++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
|
+++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml
|
||||||
@ -32,7 +32,15 @@ Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
|
|||||||
- rev-mii
|
- rev-mii
|
||||||
--- a/drivers/net/phy/phylink.c
|
--- a/drivers/net/phy/phylink.c
|
||||||
+++ b/drivers/net/phy/phylink.c
|
+++ b/drivers/net/phy/phylink.c
|
||||||
@@ -629,6 +629,7 @@ static int phylink_parse_mode(struct phy
|
@@ -366,6 +366,7 @@ void phylink_get_linkmodes(unsigned long
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_RXID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||||
|
case PHY_INTERFACE_MODE_RGMII:
|
||||||
|
+ case PHY_INTERFACE_MODE_PSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_QSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
case PHY_INTERFACE_MODE_GMII:
|
||||||
|
@@ -629,6 +630,7 @@ static int phylink_parse_mode(struct phy
|
||||||
|
|
||||||
switch (pl->link_config.interface) {
|
switch (pl->link_config.interface) {
|
||||||
case PHY_INTERFACE_MODE_SGMII:
|
case PHY_INTERFACE_MODE_SGMII:
|
||||||
|
|||||||
@ -1,21 +0,0 @@
|
|||||||
From 4d8e29642661397a339ac3485f212c6360445421 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Crispin <john@phrozen.org>
|
|
||||||
Date: Thu, 9 Mar 2017 09:33:32 +0100
|
|
||||||
Subject: [PATCH 65/69] arm: override compiler flags
|
|
||||||
|
|
||||||
Signed-off-by: John Crispin <john@phrozen.org>
|
|
||||||
---
|
|
||||||
arch/arm/Makefile | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/arch/arm/Makefile
|
|
||||||
+++ b/arch/arm/Makefile
|
|
||||||
@@ -61,7 +61,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-i
|
|
||||||
# macro, but instead defines a whole series of macros which makes
|
|
||||||
# testing for a specific architecture or later rather impossible.
|
|
||||||
arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m
|
|
||||||
-arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a
|
|
||||||
+arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -mcpu=cortex-a15
|
|
||||||
arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6
|
|
||||||
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
|
||||||
# always available in ARMv7
|
|
||||||
@ -51,10 +51,52 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
#else
|
#else
|
||||||
#define do_extend_cmdline 0
|
#define do_extend_cmdline 0
|
||||||
#endif
|
#endif
|
||||||
@@ -69,6 +71,80 @@ static uint32_t get_cell_size(const void
|
@@ -20,6 +22,7 @@ static int node_offset(void *fdt, const
|
||||||
return cell_size;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop(void *fdt, const char *node_path, const char *property,
|
||||||
|
void *val_array, int size)
|
||||||
|
{
|
||||||
|
@@ -28,6 +31,7 @@ static int setprop(void *fdt, const char
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop(fdt, offset, property, val_array, size);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static int setprop_string(void *fdt, const char *node_path,
|
||||||
|
const char *property, const char *string)
|
||||||
|
@@ -38,6 +42,7 @@ static int setprop_string(void *fdt, con
|
||||||
|
return fdt_setprop_string(fdt, offset, property, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop_cell(void *fdt, const char *node_path,
|
||||||
|
const char *property, uint32_t val)
|
||||||
|
{
|
||||||
|
@@ -46,6 +51,7 @@ static int setprop_cell(void *fdt, const
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop_cell(fdt, offset, property, val);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static const void *getprop(const void *fdt, const char *node_path,
|
||||||
|
const char *property, int *len)
|
||||||
|
@@ -58,6 +64,7 @@ static const void *getprop(const void *f
|
||||||
|
return fdt_getprop(fdt, offset, property, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static uint32_t get_cell_size(const void *fdt)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
@@ -68,6 +75,81 @@ static uint32_t get_cell_size(const void
|
||||||
|
cell_size = fdt32_to_cpu(*size_len);
|
||||||
|
return cell_size;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
||||||
+/**
|
+/**
|
||||||
+ * taken from arch/x86/boot/string.c
|
+ * taken from arch/x86/boot/string.c
|
||||||
@ -82,13 +124,13 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
||||||
+{
|
+{
|
||||||
+ char *ptr, *end, *tmp;
|
+ char *ptr, *end, *tmp;
|
||||||
+ char *root="root=";
|
+ const char *root="root=";
|
||||||
+ char *find_rootblock;
|
+ const char *find_rootblock;
|
||||||
+ int i, l;
|
+ int i, l;
|
||||||
+ const char *rootblock;
|
+ const char *rootblock;
|
||||||
+
|
+
|
||||||
+ find_rootblock = getprop(fdt, "/chosen", "find-rootblock", &l);
|
+ find_rootblock = getprop(fdt, "/chosen", "find-rootblock", &l);
|
||||||
+ if(!find_rootblock)
|
+ if (!find_rootblock)
|
||||||
+ find_rootblock = root;
|
+ find_rootblock = root;
|
||||||
+
|
+
|
||||||
+ //ARM doesn't have __HAVE_ARCH_STRSTR, so it was copied from x86
|
+ //ARM doesn't have __HAVE_ARCH_STRSTR, so it was copied from x86
|
||||||
@ -128,11 +170,10 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
+ return dest;
|
+ return dest;
|
||||||
+}
|
+}
|
||||||
+#endif
|
+#endif
|
||||||
+
|
|
||||||
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
||||||
{
|
{
|
||||||
char cmdline[COMMAND_LINE_SIZE];
|
@@ -88,18 +170,28 @@ static void merge_fdt_bootargs(void *fdt
|
||||||
@@ -88,12 +164,21 @@ static void merge_fdt_bootargs(void *fdt
|
|
||||||
|
|
||||||
/* and append the ATAG_CMDLINE */
|
/* and append the ATAG_CMDLINE */
|
||||||
if (fdt_cmdline) {
|
if (fdt_cmdline) {
|
||||||
@ -154,7 +195,36 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
}
|
}
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
|
|
||||||
@@ -168,7 +253,9 @@ int atags_to_fdt(void *atag_list, void *
|
setprop_string(fdt, "/chosen", "bootargs", cmdline);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static void hex_str(char *out, uint32_t value)
|
||||||
|
{
|
||||||
|
uint32_t digit;
|
||||||
|
@@ -117,6 +209,7 @@ static void hex_str(char *out, uint32_t
|
||||||
|
}
|
||||||
|
*out = '\0';
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert and fold provided ATAGs into the provided FDT.
|
||||||
|
@@ -131,9 +224,11 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
|
struct tag *atag = atag_list;
|
||||||
|
/* In the case of 64 bits memory size, need to reserve 2 cells for
|
||||||
|
* address and size for each bank */
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
__be32 mem_reg_property[2 * 2 * NR_BANKS];
|
||||||
|
- int memcount = 0;
|
||||||
|
- int ret, memsize;
|
||||||
|
+ int memsize, memcount = 0;
|
||||||
|
+#endif
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
/* make sure we've got an aligned pointer */
|
||||||
|
if ((u32)atag_list & 0x3)
|
||||||
|
@@ -168,7 +263,9 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
else
|
else
|
||||||
setprop_string(fdt, "/chosen", "bootargs",
|
setprop_string(fdt, "/chosen", "bootargs",
|
||||||
atag->u.cmdline.cmdline);
|
atag->u.cmdline.cmdline);
|
||||||
@ -165,7 +235,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
if (memcount >= sizeof(mem_reg_property)/4)
|
if (memcount >= sizeof(mem_reg_property)/4)
|
||||||
continue;
|
continue;
|
||||||
if (!atag->u.mem.size)
|
if (!atag->u.mem.size)
|
||||||
@@ -212,6 +299,10 @@ int atags_to_fdt(void *atag_list, void *
|
@@ -212,6 +309,10 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
setprop(fdt, "/memory", "reg", mem_reg_property,
|
setprop(fdt, "/memory", "reg", mem_reg_property,
|
||||||
4 * memcount * memsize);
|
4 * memcount * memsize);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
|
|
||||||
extern void board_putc(int ch);
|
extern void board_putc(char ch);
|
||||||
|
|
||||||
/* this is the maximum width for a variable */
|
/* this is the maximum width for a variable */
|
||||||
#define LP_MAX_BUF 256
|
#define LP_MAX_BUF 256
|
||||||
|
|||||||
@ -210,7 +210,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
- memcpy(&mac, &priv->pldata->mac, sizeof(struct sockaddr));
|
- memcpy(&mac, &priv->pldata->mac, sizeof(struct sockaddr));
|
||||||
+ memcpy(&mac.sa_data, ltq_get_eth_mac(), ETH_ALEN);
|
+ memcpy(&mac.sa_data, ltq_get_eth_mac(), ETH_ALEN);
|
||||||
+
|
+
|
||||||
+ if (priv->mac && !is_valid_ether_addr(mac.sa_data))
|
+ if (!is_valid_ether_addr(mac.sa_data))
|
||||||
+ memcpy(&mac.sa_data, priv->mac, ETH_ALEN);
|
+ memcpy(&mac.sa_data, priv->mac, ETH_ALEN);
|
||||||
+
|
+
|
||||||
if (!is_valid_ether_addr(mac.sa_data)) {
|
if (!is_valid_ether_addr(mac.sa_data)) {
|
||||||
|
|||||||
@ -0,0 +1,62 @@
|
|||||||
|
From 118fe2c88b35482711adeee0d8758bddfe958701 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aleksander Jan Bajkowski <olek2@wp.pl>
|
||||||
|
Date: Sat, 6 May 2023 14:32:00 +0200
|
||||||
|
Subject: [PATCH] mtd: cfi_cmdset_0001: Disable write buffer functions if
|
||||||
|
FORCE_WORD_WRITE is 1
|
||||||
|
|
||||||
|
Some write buffer functions are not used when FORCE_WORD_WRITE is set to 1.
|
||||||
|
So the compile warning messages are output if FORCE_WORD_WRITE is 1. To
|
||||||
|
resolve this disable the write buffer functions if FORCE_WORD_WRITE is 1.
|
||||||
|
|
||||||
|
This is similar fix to: 557c759036fc3976a5358cef23e65a263853b93f.
|
||||||
|
|
||||||
|
Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
|
||||||
|
---
|
||||||
|
drivers/mtd/chips/cfi_cmdset_0001.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
|
||||||
|
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
|
||||||
|
@@ -61,8 +61,10 @@
|
||||||
|
|
||||||
|
static int cfi_intelext_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
|
||||||
|
static int cfi_intelext_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
|
||||||
|
+#if !FORCE_WORD_WRITE
|
||||||
|
static int cfi_intelext_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
|
||||||
|
static int cfi_intelext_writev(struct mtd_info *, const struct kvec *, unsigned long, loff_t, size_t *);
|
||||||
|
+#endif
|
||||||
|
static int cfi_intelext_erase_varsize(struct mtd_info *, struct erase_info *);
|
||||||
|
static void cfi_intelext_sync (struct mtd_info *);
|
||||||
|
static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
|
||||||
|
@@ -304,6 +306,7 @@ static void fixup_use_point(struct mtd_i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+#if !FORCE_WORD_WRITE
|
||||||
|
static void fixup_use_write_buffers(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
struct map_info *map = mtd->priv;
|
||||||
|
@@ -314,6 +317,7 @@ static void fixup_use_write_buffers(stru
|
||||||
|
mtd->_writev = cfi_intelext_writev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+#endif /* !FORCE_WORD_WRITE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some chips power-up with all sectors locked by default.
|
||||||
|
@@ -1703,6 +1707,7 @@ static int cfi_intelext_write_words (str
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+#if !FORCE_WORD_WRITE
|
||||||
|
static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
|
||||||
|
unsigned long adr, const struct kvec **pvec,
|
||||||
|
unsigned long *pvec_seek, int len)
|
||||||
|
@@ -1931,6 +1936,7 @@ static int cfi_intelext_write_buffers (s
|
||||||
|
|
||||||
|
return cfi_intelext_writev(mtd, &vec, 1, to, retlen);
|
||||||
|
}
|
||||||
|
+#endif /* !FORCE_WORD_WRITE */
|
||||||
|
|
||||||
|
static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
||||||
|
unsigned long adr, int len, void *thunk)
|
||||||
@ -2507,7 +2507,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+{
|
+{
|
||||||
+ int ret = 0;
|
+ int ret = 0;
|
||||||
+
|
+
|
||||||
+ pr_info("PFE CDEV attempt copying (%lu) size of user.\n",
|
+ pr_info("PFE CDEV attempt copying (%zu) size of user.\n",
|
||||||
+ sizeof(link_states));
|
+ sizeof(link_states));
|
||||||
+
|
+
|
||||||
+ pr_debug("Dump link_state on screen before copy_to_user\n");
|
+ pr_debug("Dump link_state on screen before copy_to_user\n");
|
||||||
@ -2520,14 +2520,14 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+ /* Copy to user the value in buffer sized len */
|
+ /* Copy to user the value in buffer sized len */
|
||||||
+ ret = copy_to_user(buf, &link_states, sizeof(link_states));
|
+ ret = copy_to_user(buf, &link_states, sizeof(link_states));
|
||||||
+ if (ret != 0) {
|
+ if (ret != 0) {
|
||||||
+ pr_err("Failed to send (%d)bytes of (%lu) requested.\n",
|
+ pr_err("Failed to send (%d)bytes of (%zu) requested.\n",
|
||||||
+ ret, len);
|
+ ret, len);
|
||||||
+ return -EFAULT;
|
+ return -EFAULT;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* offset set back to 0 as there is contextual reading offset */
|
+ /* offset set back to 0 as there is contextual reading offset */
|
||||||
+ *off = 0;
|
+ *off = 0;
|
||||||
+ pr_debug("Read of (%lu) bytes performed.\n", sizeof(link_states));
|
+ pr_debug("Read of (%zu) bytes performed.\n", sizeof(link_states));
|
||||||
+
|
+
|
||||||
+ return sizeof(link_states);
|
+ return sizeof(link_states);
|
||||||
+}
|
+}
|
||||||
@ -6422,7 +6422,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+#endif /* _PFE_FIRMWARE_H_ */
|
+#endif /* _PFE_FIRMWARE_H_ */
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/staging/fsl_ppfe/pfe_hal.c
|
+++ b/drivers/staging/fsl_ppfe/pfe_hal.c
|
||||||
@@ -0,0 +1,1517 @@
|
@@ -0,0 +1,1516 @@
|
||||||
+// SPDX-License-Identifier: GPL-2.0+
|
+// SPDX-License-Identifier: GPL-2.0+
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright 2015-2016 Freescale Semiconductor, Inc.
|
+ * Copyright 2015-2016 Freescale Semiconductor, Inc.
|
||||||
@ -7030,7 +7030,6 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+ util_pmem_memcpy(DDR_PHYS_TO_VIRT(
|
+ util_pmem_memcpy(DDR_PHYS_TO_VIRT(
|
||||||
+ DDR_PFE_TO_PHYS(addr)),
|
+ DDR_PFE_TO_PHYS(addr)),
|
||||||
+ data + offset, size);
|
+ data + offset, size);
|
||||||
+ }
|
|
||||||
+#endif
|
+#endif
|
||||||
+ } else {
|
+ } else {
|
||||||
+ pr_err(
|
+ pr_err(
|
||||||
@ -8060,11 +8059,11 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+ 0x33221100, 0xa8c05544, 0x00000301, 0x00000000,
|
+ 0x33221100, 0xa8c05544, 0x00000301, 0x00000000,
|
||||||
+ 0x00000000, 0x00000000, 0x00000000, 0xbe86c51f };
|
+ 0x00000000, 0x00000000, 0x00000000, 0xbe86c51f };
|
||||||
+
|
+
|
||||||
+ ddr_ptr = (void *)((u64)readl(BMU2_BASE_ADDR + BMU_ALLOC_CTRL));
|
+ ddr_ptr = (void *)((uintptr_t)readl(BMU2_BASE_ADDR + BMU_ALLOC_CTRL));
|
||||||
+ if (!ddr_ptr)
|
+ if (!ddr_ptr)
|
||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
+ lmem_ptr = (void *)((u64)readl(BMU1_BASE_ADDR + BMU_ALLOC_CTRL));
|
+ lmem_ptr = (void *)((uintptr_t)readl(BMU1_BASE_ADDR + BMU_ALLOC_CTRL));
|
||||||
+ if (!lmem_ptr)
|
+ if (!lmem_ptr)
|
||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
@ -8131,16 +8130,16 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+void pfe_hif_desc_dump(struct pfe_hif *hif)
|
+void pfe_hif_desc_dump(struct pfe_hif *hif)
|
||||||
+{
|
+{
|
||||||
+ struct hif_desc *desc;
|
+ struct hif_desc *desc;
|
||||||
+ unsigned long desc_p;
|
+ u64 desc_p;
|
||||||
+ int ii = 0;
|
+ int ii = 0;
|
||||||
+
|
+
|
||||||
+ pr_info("%s\n", __func__);
|
+ pr_info("%s\n", __func__);
|
||||||
+
|
+
|
||||||
+ desc = hif->rx_base;
|
+ desc = hif->rx_base;
|
||||||
+ desc_p = (u32)((u64)desc - (u64)hif->descr_baseaddr_v +
|
+ desc_p = ((void *)desc - hif->descr_baseaddr_v +
|
||||||
+ hif->descr_baseaddr_p);
|
+ hif->descr_baseaddr_p);
|
||||||
+
|
+
|
||||||
+ pr_info("HIF Rx desc base %p physical %x\n", desc, (u32)desc_p);
|
+ pr_info("HIF Rx desc base %p physical %llx\n", desc, desc_p);
|
||||||
+ for (ii = 0; ii < hif->rx_ring_size; ii++) {
|
+ for (ii = 0; ii < hif->rx_ring_size; ii++) {
|
||||||
+ pr_info("status: %08x, ctrl: %08x, data: %08x, next: %x\n",
|
+ pr_info("status: %08x, ctrl: %08x, data: %08x, next: %x\n",
|
||||||
+ readl(&desc->status), readl(&desc->ctrl),
|
+ readl(&desc->status), readl(&desc->ctrl),
|
||||||
@ -8149,10 +8148,10 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ desc = hif->tx_base;
|
+ desc = hif->tx_base;
|
||||||
+ desc_p = ((u64)desc - (u64)hif->descr_baseaddr_v +
|
+ desc_p = ((void *)desc - hif->descr_baseaddr_v +
|
||||||
+ hif->descr_baseaddr_p);
|
+ hif->descr_baseaddr_p);
|
||||||
+
|
+
|
||||||
+ pr_info("HIF Tx desc base %p physical %x\n", desc, (u32)desc_p);
|
+ pr_info("HIF Tx desc base %p physical %llx\n", desc, desc_p);
|
||||||
+ for (ii = 0; ii < hif->tx_ring_size; ii++) {
|
+ for (ii = 0; ii < hif->tx_ring_size; ii++) {
|
||||||
+ pr_info("status: %08x, ctrl: %08x, data: %08x, next: %x\n",
|
+ pr_info("status: %08x, ctrl: %08x, data: %08x, next: %x\n",
|
||||||
+ readl(&desc->status), readl(&desc->ctrl),
|
+ readl(&desc->status), readl(&desc->ctrl),
|
||||||
@ -11479,7 +11478,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
|||||||
+static ssize_t pfe_set_util(struct device *dev, struct device_attribute *attr,
|
+static ssize_t pfe_set_util(struct device *dev, struct device_attribute *attr,
|
||||||
+ const char *buf, size_t count)
|
+ const char *buf, size_t count)
|
||||||
+{
|
+{
|
||||||
+ util_do_clear = kstrtoul(buf, NULL, 0);
|
+ util_do_clear = kstrtoul(buf, 0, 0);
|
||||||
+ return count;
|
+ return count;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
|||||||
@ -11,6 +11,27 @@ Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
|
|||||||
include/linux/phy.h | 3 +++
|
include/linux/phy.h | 3 +++
|
||||||
1 file changed, 3 insertions(+)
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/phy/phylink.c
|
||||||
|
+++ b/drivers/net/phy/phylink.c
|
||||||
|
@@ -393,6 +393,7 @@ void phylink_get_linkmodes(unsigned long
|
||||||
|
caps |= MAC_1000FD;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case PHY_INTERFACE_MODE_2500SGMII:
|
||||||
|
case PHY_INTERFACE_MODE_2500BASEX:
|
||||||
|
caps |= MAC_2500FD;
|
||||||
|
break;
|
||||||
|
@@ -646,6 +647,10 @@ static int phylink_parse_mode(struct phy
|
||||||
|
phylink_set(pl->supported, 2500baseX_Full);
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case PHY_INTERFACE_MODE_2500SGMII:
|
||||||
|
+ phylink_set(pl->supported, 2500baseT_Full);
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case PHY_INTERFACE_MODE_5GBASER:
|
||||||
|
phylink_set(pl->supported, 5000baseT_Full);
|
||||||
|
break;
|
||||||
--- a/include/linux/phy.h
|
--- a/include/linux/phy.h
|
||||||
+++ b/include/linux/phy.h
|
+++ b/include/linux/phy.h
|
||||||
@@ -152,6 +152,7 @@ typedef enum {
|
@@ -152,6 +152,7 @@ typedef enum {
|
||||||
|
|||||||
@ -129,7 +129,7 @@
|
|||||||
reset-deassert-us = <10000>;
|
reset-deassert-us = <10000>;
|
||||||
|
|
||||||
/* LED0: CONN (WAN white) */
|
/* LED0: CONN (WAN white) */
|
||||||
mxl,led-config = <0x00f0 0x0 0x0 0x0>;
|
mxl,led-config = <0x03f0 0x0 0x0 0x0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
switch: switch@0 {
|
switch: switch@0 {
|
||||||
@ -267,6 +267,67 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
phy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
mediatek,led-config = <
|
||||||
|
0x21 0x8009 /* BASIC_CTRL */
|
||||||
|
0x22 0x0c00 /* ON_DURATION */
|
||||||
|
0x23 0x1400 /* BLINK_DURATION */
|
||||||
|
0x24 0x8000 /* LED0_ON_CTRL */
|
||||||
|
0x25 0x0000 /* LED0_BLINK_CTRL */
|
||||||
|
0x26 0xc007 /* LED1_ON_CTRL */
|
||||||
|
0x27 0x003f /* LED1_BLINK_CTRL */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
phy@2 {
|
||||||
|
reg = <2>;
|
||||||
|
|
||||||
|
mediatek,led-config = <
|
||||||
|
0x21 0x8009 /* BASIC_CTRL */
|
||||||
|
0x22 0x0c00 /* ON_DURATION */
|
||||||
|
0x23 0x1400 /* BLINK_DURATION */
|
||||||
|
0x24 0x8000 /* LED0_ON_CTRL */
|
||||||
|
0x25 0x0000 /* LED0_BLINK_CTRL */
|
||||||
|
0x26 0xc007 /* LED1_ON_CTRL */
|
||||||
|
0x27 0x003f /* LED1_BLINK_CTRL */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
phy@3 {
|
||||||
|
reg = <3>;
|
||||||
|
|
||||||
|
mediatek,led-config = <
|
||||||
|
0x21 0x8009 /* BASIC_CTRL */
|
||||||
|
0x22 0x0c00 /* ON_DURATION */
|
||||||
|
0x23 0x1400 /* BLINK_DURATION */
|
||||||
|
0x24 0x8000 /* LED0_ON_CTRL */
|
||||||
|
0x25 0x0000 /* LED0_BLINK_CTRL */
|
||||||
|
0x26 0xc007 /* LED1_ON_CTRL */
|
||||||
|
0x27 0x003f /* LED1_BLINK_CTRL */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
phy@4 {
|
||||||
|
reg = <4>;
|
||||||
|
|
||||||
|
mediatek,led-config = <
|
||||||
|
0x21 0x8009 /* BASIC_CTRL */
|
||||||
|
0x22 0x0c00 /* ON_DURATION */
|
||||||
|
0x23 0x1400 /* BLINK_DURATION */
|
||||||
|
0x24 0x8000 /* LED0_ON_CTRL */
|
||||||
|
0x25 0x0000 /* LED0_BLINK_CTRL */
|
||||||
|
0x26 0xc007 /* LED1_ON_CTRL */
|
||||||
|
0x27 0x003f /* LED1_BLINK_CTRL */
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&wmac {
|
&wmac {
|
||||||
|
|||||||
@ -57,16 +57,58 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
#else
|
#else
|
||||||
#define do_extend_cmdline 0
|
#define do_extend_cmdline 0
|
||||||
#endif
|
#endif
|
||||||
@@ -69,6 +71,72 @@ static uint32_t get_cell_size(const void
|
@@ -20,6 +22,7 @@ static int node_offset(void *fdt, const
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop(void *fdt, const char *node_path, const char *property,
|
||||||
|
void *val_array, int size)
|
||||||
|
{
|
||||||
|
@@ -28,6 +31,7 @@ static int setprop(void *fdt, const char
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop(fdt, offset, property, val_array, size);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static int setprop_string(void *fdt, const char *node_path,
|
||||||
|
const char *property, const char *string)
|
||||||
|
@@ -38,6 +42,7 @@ static int setprop_string(void *fdt, con
|
||||||
|
return fdt_setprop_string(fdt, offset, property, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop_cell(void *fdt, const char *node_path,
|
||||||
|
const char *property, uint32_t val)
|
||||||
|
{
|
||||||
|
@@ -46,6 +51,7 @@ static int setprop_cell(void *fdt, const
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop_cell(fdt, offset, property, val);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static const void *getprop(const void *fdt, const char *node_path,
|
||||||
|
const char *property, int *len)
|
||||||
|
@@ -58,6 +64,7 @@ static const void *getprop(const void *f
|
||||||
|
return fdt_getprop(fdt, offset, property, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static uint32_t get_cell_size(const void *fdt)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
@@ -69,6 +76,74 @@ static uint32_t get_cell_size(const void
|
||||||
return cell_size;
|
return cell_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
||||||
+
|
+
|
||||||
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
||||||
+{
|
+{
|
||||||
+ char *ptr, *end;
|
+ const char *ptr, *end;
|
||||||
+ char *root="root=";
|
+ const char *root="root=";
|
||||||
+ int i, l;
|
+ int i, l;
|
||||||
+ const char *rootblock;
|
+ const char *rootblock;
|
||||||
+
|
+
|
||||||
@ -130,7 +172,7 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
||||||
{
|
{
|
||||||
char cmdline[COMMAND_LINE_SIZE];
|
char cmdline[COMMAND_LINE_SIZE];
|
||||||
@@ -88,12 +156,21 @@ static void merge_fdt_bootargs(void *fdt
|
@@ -88,18 +163,28 @@ static void merge_fdt_bootargs(void *fdt
|
||||||
|
|
||||||
/* and append the ATAG_CMDLINE */
|
/* and append the ATAG_CMDLINE */
|
||||||
if (fdt_cmdline) {
|
if (fdt_cmdline) {
|
||||||
@ -152,7 +194,36 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
}
|
}
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
|
|
||||||
@@ -168,7 +245,9 @@ int atags_to_fdt(void *atag_list, void *
|
setprop_string(fdt, "/chosen", "bootargs", cmdline);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static void hex_str(char *out, uint32_t value)
|
||||||
|
{
|
||||||
|
uint32_t digit;
|
||||||
|
@@ -117,6 +202,7 @@ static void hex_str(char *out, uint32_t
|
||||||
|
}
|
||||||
|
*out = '\0';
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert and fold provided ATAGs into the provided FDT.
|
||||||
|
@@ -131,9 +217,11 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
|
struct tag *atag = atag_list;
|
||||||
|
/* In the case of 64 bits memory size, need to reserve 2 cells for
|
||||||
|
* address and size for each bank */
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
__be32 mem_reg_property[2 * 2 * NR_BANKS];
|
||||||
|
- int memcount = 0;
|
||||||
|
- int ret, memsize;
|
||||||
|
+ int memsize, memcount = 0;
|
||||||
|
+#endif
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
/* make sure we've got an aligned pointer */
|
||||||
|
if ((u32)atag_list & 0x3)
|
||||||
|
@@ -168,7 +256,9 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
else
|
else
|
||||||
setprop_string(fdt, "/chosen", "bootargs",
|
setprop_string(fdt, "/chosen", "bootargs",
|
||||||
atag->u.cmdline.cmdline);
|
atag->u.cmdline.cmdline);
|
||||||
@ -163,7 +234,7 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
if (memcount >= sizeof(mem_reg_property)/4)
|
if (memcount >= sizeof(mem_reg_property)/4)
|
||||||
continue;
|
continue;
|
||||||
if (!atag->u.mem.size)
|
if (!atag->u.mem.size)
|
||||||
@@ -212,6 +291,10 @@ int atags_to_fdt(void *atag_list, void *
|
@@ -212,6 +302,10 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
setprop(fdt, "/memory", "reg", mem_reg_property,
|
setprop(fdt, "/memory", "reg", mem_reg_property,
|
||||||
4 * memcount * memsize);
|
4 * memcount * memsize);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,16 +51,58 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
#else
|
#else
|
||||||
#define do_extend_cmdline 0
|
#define do_extend_cmdline 0
|
||||||
#endif
|
#endif
|
||||||
@@ -69,6 +71,59 @@ static uint32_t get_cell_size(const void
|
@@ -20,6 +22,7 @@ static int node_offset(void *fdt, const
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop(void *fdt, const char *node_path, const char *property,
|
||||||
|
void *val_array, int size)
|
||||||
|
{
|
||||||
|
@@ -28,6 +31,7 @@ static int setprop(void *fdt, const char
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop(fdt, offset, property, val_array, size);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static int setprop_string(void *fdt, const char *node_path,
|
||||||
|
const char *property, const char *string)
|
||||||
|
@@ -38,6 +42,7 @@ static int setprop_string(void *fdt, con
|
||||||
|
return fdt_setprop_string(fdt, offset, property, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static int setprop_cell(void *fdt, const char *node_path,
|
||||||
|
const char *property, uint32_t val)
|
||||||
|
{
|
||||||
|
@@ -46,6 +51,7 @@ static int setprop_cell(void *fdt, const
|
||||||
|
return offset;
|
||||||
|
return fdt_setprop_cell(fdt, offset, property, val);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
static const void *getprop(const void *fdt, const char *node_path,
|
||||||
|
const char *property, int *len)
|
||||||
|
@@ -58,6 +64,7 @@ static const void *getprop(const void *f
|
||||||
|
return fdt_getprop(fdt, offset, property, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static uint32_t get_cell_size(const void *fdt)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
@@ -69,6 +76,61 @@ static uint32_t get_cell_size(const void
|
||||||
return cell_size;
|
return cell_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
+#if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE)
|
||||||
+
|
+
|
||||||
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
+static char *append_rootblock(char *dest, const char *str, int len, void *fdt)
|
||||||
+{
|
+{
|
||||||
+ char *ptr, *end;
|
+ const char *ptr, *end;
|
||||||
+ char *root="root=";
|
+ const char *root="root=";
|
||||||
+ int i, l;
|
+ int i, l;
|
||||||
+ const char *rootblock;
|
+ const char *rootblock;
|
||||||
+
|
+
|
||||||
@ -111,7 +153,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
|
||||||
{
|
{
|
||||||
char cmdline[COMMAND_LINE_SIZE];
|
char cmdline[COMMAND_LINE_SIZE];
|
||||||
@@ -88,12 +143,21 @@ static void merge_fdt_bootargs(void *fdt
|
@@ -88,18 +150,28 @@ static void merge_fdt_bootargs(void *fdt
|
||||||
|
|
||||||
/* and append the ATAG_CMDLINE */
|
/* and append the ATAG_CMDLINE */
|
||||||
if (fdt_cmdline) {
|
if (fdt_cmdline) {
|
||||||
@ -133,7 +175,36 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
}
|
}
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
|
|
||||||
@@ -168,7 +232,9 @@ int atags_to_fdt(void *atag_list, void *
|
setprop_string(fdt, "/chosen", "bootargs", cmdline);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
static void hex_str(char *out, uint32_t value)
|
||||||
|
{
|
||||||
|
uint32_t digit;
|
||||||
|
@@ -117,6 +189,7 @@ static void hex_str(char *out, uint32_t
|
||||||
|
}
|
||||||
|
*out = '\0';
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert and fold provided ATAGs into the provided FDT.
|
||||||
|
@@ -131,9 +204,11 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
|
struct tag *atag = atag_list;
|
||||||
|
/* In the case of 64 bits memory size, need to reserve 2 cells for
|
||||||
|
* address and size for each bank */
|
||||||
|
+#ifndef CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_MANGLE
|
||||||
|
__be32 mem_reg_property[2 * 2 * NR_BANKS];
|
||||||
|
- int memcount = 0;
|
||||||
|
- int ret, memsize;
|
||||||
|
+ int memsize, memcount = 0;
|
||||||
|
+#endif
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
/* make sure we've got an aligned pointer */
|
||||||
|
if ((u32)atag_list & 0x3)
|
||||||
|
@@ -168,7 +243,9 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
else
|
else
|
||||||
setprop_string(fdt, "/chosen", "bootargs",
|
setprop_string(fdt, "/chosen", "bootargs",
|
||||||
atag->u.cmdline.cmdline);
|
atag->u.cmdline.cmdline);
|
||||||
@ -144,7 +215,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
if (memcount >= sizeof(mem_reg_property)/4)
|
if (memcount >= sizeof(mem_reg_property)/4)
|
||||||
continue;
|
continue;
|
||||||
if (!atag->u.mem.size)
|
if (!atag->u.mem.size)
|
||||||
@@ -212,6 +278,10 @@ int atags_to_fdt(void *atag_list, void *
|
@@ -212,6 +289,10 @@ int atags_to_fdt(void *atag_list, void *
|
||||||
setprop(fdt, "/memory", "reg", mem_reg_property,
|
setprop(fdt, "/memory", "reg", mem_reg_property,
|
||||||
4 * memcount * memsize);
|
4 * memcount * memsize);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,8 +48,6 @@
|
|||||||
#include "mt6575_sd.h"
|
#include "mt6575_sd.h"
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
|
||||||
static char cmd_buf[256];
|
|
||||||
|
|
||||||
/* for debug zone */
|
/* for debug zone */
|
||||||
unsigned int sd_debug_zone[4] = {
|
unsigned int sd_debug_zone[4] = {
|
||||||
0,
|
0,
|
||||||
@ -59,6 +57,9 @@ unsigned int sd_debug_zone[4] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if defined(MT6575_SD_DEBUG)
|
#if defined(MT6575_SD_DEBUG)
|
||||||
|
|
||||||
|
static char cmd_buf[256];
|
||||||
|
|
||||||
/* for driver profile */
|
/* for driver profile */
|
||||||
#define TICKS_ONE_MS (13000)
|
#define TICKS_ONE_MS (13000)
|
||||||
u32 gpt_enable;
|
u32 gpt_enable;
|
||||||
|
|||||||
@ -766,7 +766,6 @@ static irqreturn_t esw_interrupt(int irq, void *_esw)
|
|||||||
{
|
{
|
||||||
struct rt305x_esw *esw = (struct rt305x_esw *) _esw;
|
struct rt305x_esw *esw = (struct rt305x_esw *) _esw;
|
||||||
u32 status;
|
u32 status;
|
||||||
int i;
|
|
||||||
|
|
||||||
status = esw_r32(esw, RT305X_ESW_REG_ISR);
|
status = esw_r32(esw, RT305X_ESW_REG_ISR);
|
||||||
if (status & RT305X_ESW_PORT_ST_CHG) {
|
if (status & RT305X_ESW_PORT_ST_CHG) {
|
||||||
@ -1533,7 +1532,7 @@ int rt3050_esw_init(struct fe_priv *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dev_info(&pdev->dev, "mediatek esw at 0x%08lx, irq %d initialized\n",
|
dev_info(&pdev->dev, "mediatek esw at 0x%08lx, irq %d initialized\n",
|
||||||
esw->base, esw->irq);
|
(long unsigned int)esw->base, esw->irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -197,6 +197,7 @@ int mtk_gsw_init(struct fe_priv *priv)
|
|||||||
struct platform_device *pdev = of_find_device_by_node(np);
|
struct platform_device *pdev = of_find_device_by_node(np);
|
||||||
struct mt7620_gsw *gsw;
|
struct mt7620_gsw *gsw;
|
||||||
const __be32 *id;
|
const __be32 *id;
|
||||||
|
int ret;
|
||||||
u8 val;
|
u8 val;
|
||||||
|
|
||||||
if (!pdev)
|
if (!pdev)
|
||||||
@ -233,8 +234,12 @@ int mtk_gsw_init(struct fe_priv *priv)
|
|||||||
mt7620_ephy_init(gsw);
|
mt7620_ephy_init(gsw);
|
||||||
|
|
||||||
if (gsw->irq) {
|
if (gsw->irq) {
|
||||||
request_irq(gsw->irq, gsw_interrupt_mt7620, 0,
|
ret = request_irq(gsw->irq, gsw_interrupt_mt7620, 0,
|
||||||
"gsw", priv);
|
"gsw", priv);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&pdev->dev, "Failed to request irq");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
mtk_switch_w32(gsw, ~PORT_IRQ_ST_CHG, GSW_REG_IMR);
|
mtk_switch_w32(gsw, ~PORT_IRQ_ST_CHG, GSW_REG_IMR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1561,7 +1561,9 @@ static int fe_probe(struct platform_device *pdev)
|
|||||||
struct clk *sysclk;
|
struct clk *sysclk;
|
||||||
int err, napi_weight;
|
int err, napi_weight;
|
||||||
|
|
||||||
device_reset(&pdev->dev);
|
err = device_reset(&pdev->dev);
|
||||||
|
if (err)
|
||||||
|
dev_err(&pdev->dev, "failed to reset device\n");
|
||||||
|
|
||||||
match = of_match_device(of_fe_match, &pdev->dev);
|
match = of_match_device(of_fe_match, &pdev->dev);
|
||||||
soc = (struct fe_soc_data *)match->data;
|
soc = (struct fe_soc_data *)match->data;
|
||||||
|
|||||||
@ -0,0 +1,31 @@
|
|||||||
|
From 3f6dfa25128e428acfba20792bc7506d58806baa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Sun, 7 May 2023 01:06:17 +0200
|
||||||
|
Subject: [PATCH] drivers: mt7621-dma: handle error from device_reset
|
||||||
|
|
||||||
|
Handle error from device reset to fix compilation warning.
|
||||||
|
Fix compilation warning:
|
||||||
|
drivers/staging/mt7621-dma/hsdma-mt7621.c: In function 'mtk_hsdma_probe':
|
||||||
|
drivers/staging/mt7621-dma/hsdma-mt7621.c:685:9: error: ignoring return value of 'device_reset' declared with attribute 'warn_unused_result' [-Werror=unused-result]
|
||||||
|
685 | device_reset(&pdev->dev);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
cc1: all warnings being treated as errors
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
drivers/staging/mt7621-dma/hsdma-mt7621.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/staging/mt7621-dma/hsdma-mt7621.c
|
||||||
|
+++ b/drivers/staging/mt7621-dma/hsdma-mt7621.c
|
||||||
|
@@ -682,7 +682,9 @@ static int mtk_hsdma_probe(struct platfo
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
- device_reset(&pdev->dev);
|
||||||
|
+ ret = device_reset(&pdev->dev);
|
||||||
|
+ if (ret)
|
||||||
|
+ dev_err(&pdev->dev, "failed to reset device\n");
|
||||||
|
|
||||||
|
dd = &hsdma->ddev;
|
||||||
|
dma_cap_set(DMA_MEMCPY, dd->cap_mask);
|
||||||
@ -41,7 +41,7 @@ Acked-by: John Crispin <blogic@openwrt.org>
|
|||||||
obj-$(CONFIG_SPI_S3C64XX) += spi-s3c64xx.o
|
obj-$(CONFIG_SPI_S3C64XX) += spi-s3c64xx.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/spi/spi-rt2880.c
|
+++ b/drivers/spi/spi-rt2880.c
|
||||||
@@ -0,0 +1,530 @@
|
@@ -0,0 +1,535 @@
|
||||||
+/*
|
+/*
|
||||||
+ * spi-rt2880.c -- Ralink RT288x/RT305x SPI controller driver
|
+ * spi-rt2880.c -- Ralink RT288x/RT305x SPI controller driver
|
||||||
+ *
|
+ *
|
||||||
@ -514,8 +514,13 @@ Acked-by: John Crispin <blogic@openwrt.org>
|
|||||||
+ rs->base = base;
|
+ rs->base = base;
|
||||||
+ rs->clk = clk;
|
+ rs->clk = clk;
|
||||||
+
|
+
|
||||||
+ if (atomic_inc_return(&hw_reset_count) == 1)
|
+ if (atomic_inc_return(&hw_reset_count) == 1) {
|
||||||
+ device_reset(&pdev->dev);
|
+ ret = device_reset(&pdev->dev);
|
||||||
|
+ if (ret) {
|
||||||
|
+ dev_err(&pdev->dev, "device_reset error.\n");
|
||||||
|
+ goto err_master;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ ret = devm_spi_register_master(&pdev->dev, master);
|
+ ret = devm_spi_register_master(&pdev->dev, master);
|
||||||
+ if (ret < 0) {
|
+ if (ret < 0) {
|
||||||
|
|||||||
@ -69,7 +69,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
obj-$(CONFIG_I2C_QUP) += i2c-qup.o
|
obj-$(CONFIG_I2C_QUP) += i2c-qup.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/drivers/i2c/busses/i2c-ralink.c
|
+++ b/drivers/i2c/busses/i2c-ralink.c
|
||||||
@@ -0,0 +1,435 @@
|
@@ -0,0 +1,440 @@
|
||||||
+/*
|
+/*
|
||||||
+ * drivers/i2c/busses/i2c-ralink.c
|
+ * drivers/i2c/busses/i2c-ralink.c
|
||||||
+ *
|
+ *
|
||||||
@ -245,7 +245,12 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
+
|
+
|
||||||
+static void rt_i2c_reset(struct rt_i2c *i2c)
|
+static void rt_i2c_reset(struct rt_i2c *i2c)
|
||||||
+{
|
+{
|
||||||
+ device_reset(i2c->adap.dev.parent);
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ ret = device_reset(i2c->adap.dev.parent);
|
||||||
|
+ if (ret)
|
||||||
|
+ dev_err(i2c->dev, "Failed to reset device");
|
||||||
|
+
|
||||||
+ barrier();
|
+ barrier();
|
||||||
+ rt_i2c_w32(i2c, i2c->clk_div, REG_CLKDIV_REG);
|
+ rt_i2c_w32(i2c, i2c->clk_div, REG_CLKDIV_REG);
|
||||||
+}
|
+}
|
||||||
|
|||||||
@ -60,7 +60,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
+obj-$(CONFIG_SND_RALINK_SOC_I2S) += snd-soc-ralink-i2s.o
|
+obj-$(CONFIG_SND_RALINK_SOC_I2S) += snd-soc-ralink-i2s.o
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/sound/soc/ralink/ralink-i2s.c
|
+++ b/sound/soc/ralink/ralink-i2s.c
|
||||||
@@ -0,0 +1,966 @@
|
@@ -0,0 +1,970 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
|
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
|
||||||
+ * Copyright (C) 2016 Michael Lee <igvtee@gmail.com>
|
+ * Copyright (C) 2016 Michael Lee <igvtee@gmail.com>
|
||||||
@ -945,7 +945,11 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
+
|
+
|
||||||
+ ralink_i2s_init_dma_data(i2s, res);
|
+ ralink_i2s_init_dma_data(i2s, res);
|
||||||
+
|
+
|
||||||
+ device_reset(&pdev->dev);
|
+ ret = device_reset(&pdev->dev);
|
||||||
|
+ if (ret) {
|
||||||
|
+ dev_err(&pdev->dev, "failed to reset device\n");
|
||||||
|
+ goto err_clk_disable;
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ ret = ralink_i2s_debugfs_create(i2s);
|
+ ret = ralink_i2s_debugfs_create(i2s);
|
||||||
+ if (ret) {
|
+ if (ret) {
|
||||||
|
|||||||
@ -527,24 +527,25 @@ int rtl83xx_lag_del(struct dsa_switch *ds, int group, int port)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a 64 bit octet counter located in the LOG HW table */
|
// Currently Unused
|
||||||
static int rtl83xx_octet_cntr_alloc(struct rtl838x_switch_priv *priv)
|
// /* Allocate a 64 bit octet counter located in the LOG HW table */
|
||||||
{
|
// static int rtl83xx_octet_cntr_alloc(struct rtl838x_switch_priv *priv)
|
||||||
int idx;
|
// {
|
||||||
|
// int idx;
|
||||||
|
|
||||||
mutex_lock(&priv->reg_mutex);
|
// mutex_lock(&priv->reg_mutex);
|
||||||
|
|
||||||
idx = find_first_zero_bit(priv->octet_cntr_use_bm, MAX_COUNTERS);
|
// idx = find_first_zero_bit(priv->octet_cntr_use_bm, MAX_COUNTERS);
|
||||||
if (idx >= priv->n_counters) {
|
// if (idx >= priv->n_counters) {
|
||||||
mutex_unlock(&priv->reg_mutex);
|
// mutex_unlock(&priv->reg_mutex);
|
||||||
return -1;
|
// return -1;
|
||||||
}
|
// }
|
||||||
|
|
||||||
set_bit(idx, priv->octet_cntr_use_bm);
|
// set_bit(idx, priv->octet_cntr_use_bm);
|
||||||
mutex_unlock(&priv->reg_mutex);
|
// mutex_unlock(&priv->reg_mutex);
|
||||||
|
|
||||||
return idx;
|
// return idx;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/* Allocate a 32-bit packet counter
|
/* Allocate a 32-bit packet counter
|
||||||
* 2 32-bit packet counters share the location of a 64-bit octet counter
|
* 2 32-bit packet counters share the location of a 64-bit octet counter
|
||||||
@ -1427,7 +1428,7 @@ static int rtl83xx_fib_event(struct notifier_block *this, unsigned long event, v
|
|||||||
fib_info_hold(fib_work->fen_info.fi);
|
fib_info_hold(fib_work->fen_info.fi);
|
||||||
|
|
||||||
} else if (info->family == AF_INET6) {
|
} else if (info->family == AF_INET6) {
|
||||||
struct fib6_entry_notifier_info *fen6_info = ptr;
|
//struct fib6_entry_notifier_info *fen6_info = ptr;
|
||||||
pr_warn("%s: FIB_RULE ADD/DEL for IPv6 not supported\n", __func__);
|
pr_warn("%s: FIB_RULE ADD/DEL for IPv6 not supported\n", __func__);
|
||||||
kfree(fib_work);
|
kfree(fib_work);
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
|
|||||||
@ -1991,8 +1991,6 @@ static bool rtl83xx_lag_can_offload(struct dsa_switch *ds,
|
|||||||
|
|
||||||
static int rtl83xx_port_lag_change(struct dsa_switch *ds, int port)
|
static int rtl83xx_port_lag_change(struct dsa_switch *ds, int port)
|
||||||
{
|
{
|
||||||
struct rtl838x_switch_priv *priv = ds->priv;
|
|
||||||
|
|
||||||
pr_debug("%s: %d\n", __func__, port);
|
pr_debug("%s: %d\n", __func__, port);
|
||||||
/* Nothing to be done... */
|
/* Nothing to be done... */
|
||||||
|
|
||||||
|
|||||||
@ -291,7 +291,7 @@ static void rtl839x_rate_control_init(struct rtl838x_switch_priv *priv)
|
|||||||
|
|
||||||
void rtl838x_setup_prio2queue_matrix(int *min_queues)
|
void rtl838x_setup_prio2queue_matrix(int *min_queues)
|
||||||
{
|
{
|
||||||
u32 v;
|
u32 v = 0;
|
||||||
|
|
||||||
pr_info("Current Intprio2queue setting: %08x\n", sw_r32(RTL838X_QM_INTPRI2QID_CTRL));
|
pr_info("Current Intprio2queue setting: %08x\n", sw_r32(RTL838X_QM_INTPRI2QID_CTRL));
|
||||||
for (int i = 0; i < MAX_PRIOS; i++)
|
for (int i = 0; i < MAX_PRIOS; i++)
|
||||||
@ -313,7 +313,7 @@ void rtl83xx_setup_prio2queue_cpu_matrix(int *max_queues)
|
|||||||
{
|
{
|
||||||
int reg = soc_info.family == RTL8380_FAMILY_ID ? RTL838X_QM_PKT2CPU_INTPRI_MAP
|
int reg = soc_info.family == RTL8380_FAMILY_ID ? RTL838X_QM_PKT2CPU_INTPRI_MAP
|
||||||
: RTL839X_QM_PKT2CPU_INTPRI_MAP;
|
: RTL839X_QM_PKT2CPU_INTPRI_MAP;
|
||||||
u32 v;
|
u32 v = 0;
|
||||||
|
|
||||||
pr_info("QM_PKT2CPU_INTPRI_MAP: %08x\n", sw_r32(reg));
|
pr_info("QM_PKT2CPU_INTPRI_MAP: %08x\n", sw_r32(reg));
|
||||||
for (int i = 0; i < MAX_PRIOS; i++)
|
for (int i = 0; i < MAX_PRIOS; i++)
|
||||||
|
|||||||
@ -1300,15 +1300,16 @@ static void rtl838x_pie_rule_dump_raw(u32 r[])
|
|||||||
pr_info("Sel : %08x\n", r[17]);
|
pr_info("Sel : %08x\n", r[17]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl838x_pie_rule_dump(struct pie_rule *pr)
|
// Currently not used
|
||||||
{
|
// static void rtl838x_pie_rule_dump(struct pie_rule *pr)
|
||||||
pr_info("Drop: %d, fwd: %d, ovid: %d, ivid: %d, flt: %d, log: %d, rmk: %d, meter: %d tagst: %d, mir: %d, nopri: %d, cpupri: %d, otpid: %d, itpid: %d, shape: %d\n",
|
// {
|
||||||
pr->drop, pr->fwd_sel, pr->ovid_sel, pr->ivid_sel, pr->flt_sel, pr->log_sel, pr->rmk_sel, pr->log_sel, pr->tagst_sel, pr->mir_sel, pr->nopri_sel,
|
// pr_info("Drop: %d, fwd: %d, ovid: %d, ivid: %d, flt: %d, log: %d, rmk: %d, meter: %d tagst: %d, mir: %d, nopri: %d, cpupri: %d, otpid: %d, itpid: %d, shape: %d\n",
|
||||||
pr->cpupri_sel, pr->otpid_sel, pr->itpid_sel, pr->shaper_sel);
|
// pr->drop, pr->fwd_sel, pr->ovid_sel, pr->ivid_sel, pr->flt_sel, pr->log_sel, pr->rmk_sel, pr->log_sel, pr->tagst_sel, pr->mir_sel, pr->nopri_sel,
|
||||||
if (pr->fwd_sel)
|
// pr->cpupri_sel, pr->otpid_sel, pr->itpid_sel, pr->shaper_sel);
|
||||||
pr_info("FWD: %08x\n", pr->fwd_data);
|
// if (pr->fwd_sel)
|
||||||
pr_info("TID: %x, %x\n", pr->tid, pr->tid_m);
|
// pr_info("FWD: %08x\n", pr->fwd_data);
|
||||||
}
|
// pr_info("TID: %x, %x\n", pr->tid, pr->tid_m);
|
||||||
|
// }
|
||||||
|
|
||||||
static int rtl838x_pie_rule_read(struct rtl838x_switch_priv *priv, int idx, struct pie_rule *pr)
|
static int rtl838x_pie_rule_read(struct rtl838x_switch_priv *priv, int idx, struct pie_rule *pr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -992,57 +992,58 @@ static u32 rtl930x_l3_hash4(u32 ip, int algorithm, bool move_dip)
|
|||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 rtl930x_l3_hash6(struct in6_addr *ip6, int algorithm, bool move_dip)
|
// Currently not used
|
||||||
{
|
// static u32 rtl930x_l3_hash6(struct in6_addr *ip6, int algorithm, bool move_dip)
|
||||||
u32 rows[16];
|
// {
|
||||||
u32 hash;
|
// u32 rows[16];
|
||||||
u32 s0, s1, pH;
|
// u32 hash;
|
||||||
|
// u32 s0, s1, pH;
|
||||||
|
|
||||||
rows[0] = (HASH_PICK(ip6->s6_addr[0], 6, 2) << 0);
|
// rows[0] = (HASH_PICK(ip6->s6_addr[0], 6, 2) << 0);
|
||||||
rows[1] = (HASH_PICK(ip6->s6_addr[0], 0, 6) << 3) | HASH_PICK(ip6->s6_addr[1], 5, 3);
|
// rows[1] = (HASH_PICK(ip6->s6_addr[0], 0, 6) << 3) | HASH_PICK(ip6->s6_addr[1], 5, 3);
|
||||||
rows[2] = (HASH_PICK(ip6->s6_addr[1], 0, 5) << 4) | HASH_PICK(ip6->s6_addr[2], 4, 4);
|
// rows[2] = (HASH_PICK(ip6->s6_addr[1], 0, 5) << 4) | HASH_PICK(ip6->s6_addr[2], 4, 4);
|
||||||
rows[3] = (HASH_PICK(ip6->s6_addr[2], 0, 4) << 5) | HASH_PICK(ip6->s6_addr[3], 3, 5);
|
// rows[3] = (HASH_PICK(ip6->s6_addr[2], 0, 4) << 5) | HASH_PICK(ip6->s6_addr[3], 3, 5);
|
||||||
rows[4] = (HASH_PICK(ip6->s6_addr[3], 0, 3) << 6) | HASH_PICK(ip6->s6_addr[4], 2, 6);
|
// rows[4] = (HASH_PICK(ip6->s6_addr[3], 0, 3) << 6) | HASH_PICK(ip6->s6_addr[4], 2, 6);
|
||||||
rows[5] = (HASH_PICK(ip6->s6_addr[4], 0, 2) << 7) | HASH_PICK(ip6->s6_addr[5], 1, 7);
|
// rows[5] = (HASH_PICK(ip6->s6_addr[4], 0, 2) << 7) | HASH_PICK(ip6->s6_addr[5], 1, 7);
|
||||||
rows[6] = (HASH_PICK(ip6->s6_addr[5], 0, 1) << 8) | HASH_PICK(ip6->s6_addr[6], 0, 8);
|
// rows[6] = (HASH_PICK(ip6->s6_addr[5], 0, 1) << 8) | HASH_PICK(ip6->s6_addr[6], 0, 8);
|
||||||
rows[7] = (HASH_PICK(ip6->s6_addr[7], 0, 8) << 1) | HASH_PICK(ip6->s6_addr[8], 7, 1);
|
// rows[7] = (HASH_PICK(ip6->s6_addr[7], 0, 8) << 1) | HASH_PICK(ip6->s6_addr[8], 7, 1);
|
||||||
rows[8] = (HASH_PICK(ip6->s6_addr[8], 0, 7) << 2) | HASH_PICK(ip6->s6_addr[9], 6, 2);
|
// rows[8] = (HASH_PICK(ip6->s6_addr[8], 0, 7) << 2) | HASH_PICK(ip6->s6_addr[9], 6, 2);
|
||||||
rows[9] = (HASH_PICK(ip6->s6_addr[9], 0, 6) << 3) | HASH_PICK(ip6->s6_addr[10], 5, 3);
|
// rows[9] = (HASH_PICK(ip6->s6_addr[9], 0, 6) << 3) | HASH_PICK(ip6->s6_addr[10], 5, 3);
|
||||||
rows[10] = (HASH_PICK(ip6->s6_addr[10], 0, 5) << 4) | HASH_PICK(ip6->s6_addr[11], 4, 4);
|
// rows[10] = (HASH_PICK(ip6->s6_addr[10], 0, 5) << 4) | HASH_PICK(ip6->s6_addr[11], 4, 4);
|
||||||
if (!algorithm) {
|
// if (!algorithm) {
|
||||||
rows[11] = (HASH_PICK(ip6->s6_addr[11], 0, 4) << 5) |
|
// rows[11] = (HASH_PICK(ip6->s6_addr[11], 0, 4) << 5) |
|
||||||
(HASH_PICK(ip6->s6_addr[12], 3, 5) << 0);
|
// (HASH_PICK(ip6->s6_addr[12], 3, 5) << 0);
|
||||||
rows[12] = (HASH_PICK(ip6->s6_addr[12], 0, 3) << 6) |
|
// rows[12] = (HASH_PICK(ip6->s6_addr[12], 0, 3) << 6) |
|
||||||
(HASH_PICK(ip6->s6_addr[13], 2, 6) << 0);
|
// (HASH_PICK(ip6->s6_addr[13], 2, 6) << 0);
|
||||||
rows[13] = (HASH_PICK(ip6->s6_addr[13], 0, 2) << 7) |
|
// rows[13] = (HASH_PICK(ip6->s6_addr[13], 0, 2) << 7) |
|
||||||
(HASH_PICK(ip6->s6_addr[14], 1, 7) << 0);
|
// (HASH_PICK(ip6->s6_addr[14], 1, 7) << 0);
|
||||||
if (!move_dip) {
|
// if (!move_dip) {
|
||||||
rows[14] = (HASH_PICK(ip6->s6_addr[14], 0, 1) << 8) |
|
// rows[14] = (HASH_PICK(ip6->s6_addr[14], 0, 1) << 8) |
|
||||||
(HASH_PICK(ip6->s6_addr[15], 0, 8) << 0);
|
// (HASH_PICK(ip6->s6_addr[15], 0, 8) << 0);
|
||||||
}
|
// }
|
||||||
hash = rows[0] ^ rows[1] ^ rows[2] ^ rows[3] ^ rows[4] ^
|
// hash = rows[0] ^ rows[1] ^ rows[2] ^ rows[3] ^ rows[4] ^
|
||||||
rows[5] ^ rows[6] ^ rows[7] ^ rows[8] ^ rows[9] ^
|
// rows[5] ^ rows[6] ^ rows[7] ^ rows[8] ^ rows[9] ^
|
||||||
rows[10] ^ rows[11] ^ rows[12] ^ rows[13] ^ rows[14];
|
// rows[10] ^ rows[11] ^ rows[12] ^ rows[13] ^ rows[14];
|
||||||
} else {
|
// } else {
|
||||||
rows[11] = (HASH_PICK(ip6->s6_addr[11], 0, 4) << 5);
|
// rows[11] = (HASH_PICK(ip6->s6_addr[11], 0, 4) << 5);
|
||||||
rows[12] = (HASH_PICK(ip6->s6_addr[12], 3, 5) << 0);
|
// rows[12] = (HASH_PICK(ip6->s6_addr[12], 3, 5) << 0);
|
||||||
rows[13] = (HASH_PICK(ip6->s6_addr[12], 0, 3) << 6) |
|
// rows[13] = (HASH_PICK(ip6->s6_addr[12], 0, 3) << 6) |
|
||||||
HASH_PICK(ip6->s6_addr[13], 2, 6);
|
// HASH_PICK(ip6->s6_addr[13], 2, 6);
|
||||||
rows[14] = (HASH_PICK(ip6->s6_addr[13], 0, 2) << 7) |
|
// rows[14] = (HASH_PICK(ip6->s6_addr[13], 0, 2) << 7) |
|
||||||
HASH_PICK(ip6->s6_addr[14], 1, 7);
|
// HASH_PICK(ip6->s6_addr[14], 1, 7);
|
||||||
if (!move_dip) {
|
// if (!move_dip) {
|
||||||
rows[15] = (HASH_PICK(ip6->s6_addr[14], 0, 1) << 8) |
|
// rows[15] = (HASH_PICK(ip6->s6_addr[14], 0, 1) << 8) |
|
||||||
(HASH_PICK(ip6->s6_addr[15], 0, 8) << 0);
|
// (HASH_PICK(ip6->s6_addr[15], 0, 8) << 0);
|
||||||
}
|
// }
|
||||||
s0 = rows[12] + rows[13] + rows[14];
|
// s0 = rows[12] + rows[13] + rows[14];
|
||||||
s1 = (s0 & 0x1ff) + ((s0 & (0x1ff << 9)) >> 9);
|
// s1 = (s0 & 0x1ff) + ((s0 & (0x1ff << 9)) >> 9);
|
||||||
pH = (s1 & 0x1ff) + ((s1 & (0x1ff << 9)) >> 9);
|
// pH = (s1 & 0x1ff) + ((s1 & (0x1ff << 9)) >> 9);
|
||||||
hash = rows[0] ^ rows[1] ^ rows[2] ^ rows[3] ^ rows[4] ^
|
// hash = rows[0] ^ rows[1] ^ rows[2] ^ rows[3] ^ rows[4] ^
|
||||||
rows[5] ^ rows[6] ^ rows[7] ^ rows[8] ^ rows[9] ^
|
// rows[5] ^ rows[6] ^ rows[7] ^ rows[8] ^ rows[9] ^
|
||||||
rows[10] ^ rows[11] ^ pH ^ rows[15];
|
// rows[10] ^ rows[11] ^ pH ^ rows[15];
|
||||||
}
|
// }
|
||||||
return hash;
|
// return hash;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/* Read a prefix route entry from the L3_PREFIX_ROUTE_IPUC table
|
/* Read a prefix route entry from the L3_PREFIX_ROUTE_IPUC table
|
||||||
* We currently only support IPv4 and IPv6 unicast route
|
* We currently only support IPv4 and IPv6 unicast route
|
||||||
@ -1411,85 +1412,89 @@ static void rtl930x_get_l3_nexthop(int idx, u16 *dmac_id, u16 *interface)
|
|||||||
*interface = v & 0x7f;
|
*interface = v & 0x7f;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl930x_l3_mtu_del(struct rtl838x_switch_priv *priv, int mtu)
|
// Currently not used
|
||||||
{
|
// static int rtl930x_l3_mtu_del(struct rtl838x_switch_priv *priv, int mtu)
|
||||||
int i;
|
// {
|
||||||
|
// int i;
|
||||||
|
|
||||||
for (i = 0; i < MAX_INTF_MTUS; i++) {
|
// for (i = 0; i < MAX_INTF_MTUS; i++) {
|
||||||
if (mtu == priv->intf_mtus[i])
|
// if (mtu == priv->intf_mtus[i])
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
if (i >= MAX_INTF_MTUS || !priv->intf_mtu_count[i]) {
|
// if (i >= MAX_INTF_MTUS || !priv->intf_mtu_count[i]) {
|
||||||
pr_err("%s: No MTU slot found for MTU: %d\n", __func__, mtu);
|
// pr_err("%s: No MTU slot found for MTU: %d\n", __func__, mtu);
|
||||||
return -EINVAL;
|
// return -EINVAL;
|
||||||
}
|
// }
|
||||||
|
|
||||||
priv->intf_mtu_count[i]--;
|
// priv->intf_mtu_count[i]--;
|
||||||
}
|
// }
|
||||||
|
|
||||||
static int rtl930x_l3_mtu_add(struct rtl838x_switch_priv *priv, int mtu)
|
// Currently not used
|
||||||
{
|
// static int rtl930x_l3_mtu_add(struct rtl838x_switch_priv *priv, int mtu)
|
||||||
int i, free_mtu;
|
// {
|
||||||
int mtu_id;
|
// int i, free_mtu;
|
||||||
|
// int mtu_id;
|
||||||
|
|
||||||
/* Try to find an existing mtu-value or a free slot */
|
// /* Try to find an existing mtu-value or a free slot */
|
||||||
free_mtu = MAX_INTF_MTUS;
|
// free_mtu = MAX_INTF_MTUS;
|
||||||
for (i = 0; i < MAX_INTF_MTUS && priv->intf_mtus[i] != mtu; i++) {
|
// for (i = 0; i < MAX_INTF_MTUS && priv->intf_mtus[i] != mtu; i++) {
|
||||||
if ((!priv->intf_mtu_count[i]) && (free_mtu == MAX_INTF_MTUS))
|
// if ((!priv->intf_mtu_count[i]) && (free_mtu == MAX_INTF_MTUS))
|
||||||
free_mtu = i;
|
// free_mtu = i;
|
||||||
}
|
// }
|
||||||
i = (i < MAX_INTF_MTUS) ? i : free_mtu;
|
// i = (i < MAX_INTF_MTUS) ? i : free_mtu;
|
||||||
if (i < MAX_INTF_MTUS) {
|
// if (i < MAX_INTF_MTUS) {
|
||||||
mtu_id = i;
|
// mtu_id = i;
|
||||||
} else {
|
// } else {
|
||||||
pr_err("%s: No free MTU slot available!\n", __func__);
|
// pr_err("%s: No free MTU slot available!\n", __func__);
|
||||||
return -EINVAL;
|
// return -EINVAL;
|
||||||
}
|
// }
|
||||||
|
|
||||||
priv->intf_mtus[i] = mtu;
|
// priv->intf_mtus[i] = mtu;
|
||||||
pr_info("Writing MTU %d to slot %d\n", priv->intf_mtus[i], i);
|
// pr_info("Writing MTU %d to slot %d\n", priv->intf_mtus[i], i);
|
||||||
/* Set MTU-value of the slot TODO: distinguish between IPv4/IPv6 routes / slots */
|
// /* Set MTU-value of the slot TODO: distinguish between IPv4/IPv6 routes / slots */
|
||||||
sw_w32_mask(0xffff << ((i % 2) * 16), priv->intf_mtus[i] << ((i % 2) * 16),
|
// sw_w32_mask(0xffff << ((i % 2) * 16), priv->intf_mtus[i] << ((i % 2) * 16),
|
||||||
RTL930X_L3_IP_MTU_CTRL(i));
|
// RTL930X_L3_IP_MTU_CTRL(i));
|
||||||
sw_w32_mask(0xffff << ((i % 2) * 16), priv->intf_mtus[i] << ((i % 2) * 16),
|
// sw_w32_mask(0xffff << ((i % 2) * 16), priv->intf_mtus[i] << ((i % 2) * 16),
|
||||||
RTL930X_L3_IP6_MTU_CTRL(i));
|
// RTL930X_L3_IP6_MTU_CTRL(i));
|
||||||
|
|
||||||
priv->intf_mtu_count[i]++;
|
// priv->intf_mtu_count[i]++;
|
||||||
|
|
||||||
return mtu_id;
|
// return mtu_id;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/* Creates an interface for a route by setting up the HW tables in the SoC */
|
|
||||||
static int rtl930x_l3_intf_add(struct rtl838x_switch_priv *priv, struct rtl838x_l3_intf *intf)
|
|
||||||
{
|
|
||||||
int i, intf_id, mtu_id;
|
|
||||||
/* number of MTU-values < 16384 */
|
|
||||||
|
|
||||||
/* Use the same IPv6 mtu as the ip4 mtu for this route if unset */
|
// Currently not used
|
||||||
intf->ip6_mtu = intf->ip6_mtu ? intf->ip6_mtu : intf->ip4_mtu;
|
// /* Creates an interface for a route by setting up the HW tables in the SoC
|
||||||
|
// static int rtl930x_l3_intf_add(struct rtl838x_switch_priv *priv, struct rtl838x_l3_intf *intf)
|
||||||
|
// {
|
||||||
|
// int i, intf_id, mtu_id;
|
||||||
|
// /* number of MTU-values < 16384 *\/
|
||||||
|
|
||||||
mtu_id = rtl930x_l3_mtu_add(priv, intf->ip4_mtu);
|
// /* Use the same IPv6 mtu as the ip4 mtu for this route if unset */
|
||||||
pr_info("%s: added mtu %d with mtu-id %d\n", __func__, intf->ip4_mtu, mtu_id);
|
// intf->ip6_mtu = intf->ip6_mtu ? intf->ip6_mtu : intf->ip4_mtu;
|
||||||
if (mtu_id < 0)
|
|
||||||
return -ENOSPC;
|
|
||||||
intf->ip4_mtu_id = mtu_id;
|
|
||||||
intf->ip6_mtu_id = mtu_id;
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_INTERFACES; i++) {
|
// mtu_id = rtl930x_l3_mtu_add(priv, intf->ip4_mtu);
|
||||||
if (!priv->interfaces[i])
|
// pr_info("%s: added mtu %d with mtu-id %d\n", __func__, intf->ip4_mtu, mtu_id);
|
||||||
break;
|
// if (mtu_id < 0)
|
||||||
}
|
// return -ENOSPC;
|
||||||
if (i >= MAX_INTERFACES) {
|
// intf->ip4_mtu_id = mtu_id;
|
||||||
pr_err("%s: cannot find free interface entry\n", __func__);
|
// intf->ip6_mtu_id = mtu_id;
|
||||||
return -EINVAL;
|
|
||||||
}
|
// for (i = 0; i < MAX_INTERFACES; i++) {
|
||||||
intf_id = i;
|
// if (!priv->interfaces[i])
|
||||||
priv->interfaces[i] = kzalloc(sizeof(struct rtl838x_l3_intf), GFP_KERNEL);
|
// break;
|
||||||
if (!priv->interfaces[i]) {
|
// }
|
||||||
pr_err("%s: no memory to allocate new interface\n", __func__);
|
// if (i >= MAX_INTERFACES) {
|
||||||
return -ENOMEM;
|
// pr_err("%s: cannot find free interface entry\n", __func__);
|
||||||
}
|
// return -EINVAL;
|
||||||
}
|
// }
|
||||||
|
// intf_id = i;
|
||||||
|
// priv->interfaces[i] = kzalloc(sizeof(struct rtl838x_l3_intf), GFP_KERNEL);
|
||||||
|
// if (!priv->interfaces[i]) {
|
||||||
|
// pr_err("%s: no memory to allocate new interface\n", __func__);
|
||||||
|
// return -ENOMEM;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
/* Set the destination MAC and L3 egress interface ID for a nexthop entry in the SoC's
|
/* Set the destination MAC and L3 egress interface ID for a nexthop entry in the SoC's
|
||||||
* L3_NEXTHOP table. The nexthop entry is identified by idx.
|
* L3_NEXTHOP table. The nexthop entry is identified by idx.
|
||||||
@ -1683,49 +1688,50 @@ static void rtl930x_write_pie_templated(u32 r[], struct pie_rule *pr, enum templ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl930x_read_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
// Currently not used
|
||||||
{
|
// static void rtl930x_read_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
||||||
pr->stacking_port = r[6] & BIT(31);
|
// {
|
||||||
pr->spn = (r[6] >> 24) & 0x7f;
|
// pr->stacking_port = r[6] & BIT(31);
|
||||||
pr->mgnt_vlan = r[6] & BIT(23);
|
// pr->spn = (r[6] >> 24) & 0x7f;
|
||||||
if (pr->phase == PHASE_IACL)
|
// pr->mgnt_vlan = r[6] & BIT(23);
|
||||||
pr->dmac_hit_sw = r[6] & BIT(22);
|
// if (pr->phase == PHASE_IACL)
|
||||||
else
|
// pr->dmac_hit_sw = r[6] & BIT(22);
|
||||||
pr->content_too_deep = r[6] & BIT(22);
|
// else
|
||||||
pr->not_first_frag = r[6] & BIT(21);
|
// pr->content_too_deep = r[6] & BIT(22);
|
||||||
pr->frame_type_l4 = (r[6] >> 18) & 7;
|
// pr->not_first_frag = r[6] & BIT(21);
|
||||||
pr->frame_type = (r[6] >> 16) & 3;
|
// pr->frame_type_l4 = (r[6] >> 18) & 7;
|
||||||
pr->otag_fmt = (r[6] >> 15) & 1;
|
// pr->frame_type = (r[6] >> 16) & 3;
|
||||||
pr->itag_fmt = (r[6] >> 14) & 1;
|
// pr->otag_fmt = (r[6] >> 15) & 1;
|
||||||
pr->otag_exist = (r[6] >> 13) & 1;
|
// pr->itag_fmt = (r[6] >> 14) & 1;
|
||||||
pr->itag_exist = (r[6] >> 12) & 1;
|
// pr->otag_exist = (r[6] >> 13) & 1;
|
||||||
pr->frame_type_l2 = (r[6] >> 10) & 3;
|
// pr->itag_exist = (r[6] >> 12) & 1;
|
||||||
pr->igr_normal_port = (r[6] >> 9) & 1;
|
// pr->frame_type_l2 = (r[6] >> 10) & 3;
|
||||||
pr->tid = (r[6] >> 8) & 1;
|
// pr->igr_normal_port = (r[6] >> 9) & 1;
|
||||||
|
// pr->tid = (r[6] >> 8) & 1;
|
||||||
|
|
||||||
pr->stacking_port_m = r[12] & BIT(7);
|
// pr->stacking_port_m = r[12] & BIT(7);
|
||||||
pr->spn_m = r[12] & 0x7f;
|
// pr->spn_m = r[12] & 0x7f;
|
||||||
pr->mgnt_vlan_m = r[13] & BIT(31);
|
// pr->mgnt_vlan_m = r[13] & BIT(31);
|
||||||
if (pr->phase == PHASE_IACL)
|
// if (pr->phase == PHASE_IACL)
|
||||||
pr->dmac_hit_sw_m = r[13] & BIT(30);
|
// pr->dmac_hit_sw_m = r[13] & BIT(30);
|
||||||
else
|
// else
|
||||||
pr->content_too_deep_m = r[13] & BIT(30);
|
// pr->content_too_deep_m = r[13] & BIT(30);
|
||||||
pr->not_first_frag_m = r[13] & BIT(29);
|
// pr->not_first_frag_m = r[13] & BIT(29);
|
||||||
pr->frame_type_l4_m = (r[13] >> 26) & 7;
|
// pr->frame_type_l4_m = (r[13] >> 26) & 7;
|
||||||
pr->frame_type_m = (r[13] >> 24) & 3;
|
// pr->frame_type_m = (r[13] >> 24) & 3;
|
||||||
pr->otag_fmt_m = r[13] & BIT(23);
|
// pr->otag_fmt_m = r[13] & BIT(23);
|
||||||
pr->itag_fmt_m = r[13] & BIT(22);
|
// pr->itag_fmt_m = r[13] & BIT(22);
|
||||||
pr->otag_exist_m = r[13] & BIT(21);
|
// pr->otag_exist_m = r[13] & BIT(21);
|
||||||
pr->itag_exist_m = r[13] & BIT (20);
|
// pr->itag_exist_m = r[13] & BIT (20);
|
||||||
pr->frame_type_l2_m = (r[13] >> 18) & 3;
|
// pr->frame_type_l2_m = (r[13] >> 18) & 3;
|
||||||
pr->igr_normal_port_m = r[13] & BIT(17);
|
// pr->igr_normal_port_m = r[13] & BIT(17);
|
||||||
pr->tid_m = (r[13] >> 16) & 1;
|
// pr->tid_m = (r[13] >> 16) & 1;
|
||||||
|
|
||||||
pr->valid = r[13] & BIT(15);
|
// pr->valid = r[13] & BIT(15);
|
||||||
pr->cond_not = r[13] & BIT(14);
|
// pr->cond_not = r[13] & BIT(14);
|
||||||
pr->cond_and1 = r[13] & BIT(13);
|
// pr->cond_and1 = r[13] & BIT(13);
|
||||||
pr->cond_and2 = r[13] & BIT(12);
|
// pr->cond_and2 = r[13] & BIT(12);
|
||||||
}
|
// }
|
||||||
|
|
||||||
static void rtl930x_write_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
static void rtl930x_write_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1113,45 +1113,46 @@ static void rtl931x_write_pie_templated(u32 r[], struct pie_rule *pr, enum templ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl931x_read_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
// Currently unused
|
||||||
{
|
// static void rtl931x_read_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
||||||
pr->mgnt_vlan = r[7] & BIT(31);
|
// {
|
||||||
if (pr->phase == PHASE_IACL)
|
// pr->mgnt_vlan = r[7] & BIT(31);
|
||||||
pr->dmac_hit_sw = r[7] & BIT(30);
|
// if (pr->phase == PHASE_IACL)
|
||||||
else /* TODO: EACL/VACL phase handling */
|
// pr->dmac_hit_sw = r[7] & BIT(30);
|
||||||
pr->content_too_deep = r[7] & BIT(30);
|
// else /* TODO: EACL/VACL phase handling */
|
||||||
pr->not_first_frag = r[7] & BIT(29);
|
// pr->content_too_deep = r[7] & BIT(30);
|
||||||
pr->frame_type_l4 = (r[7] >> 26) & 7;
|
// pr->not_first_frag = r[7] & BIT(29);
|
||||||
pr->frame_type = (r[7] >> 24) & 3;
|
// pr->frame_type_l4 = (r[7] >> 26) & 7;
|
||||||
pr->otag_fmt = (r[7] >> 23) & 1;
|
// pr->frame_type = (r[7] >> 24) & 3;
|
||||||
pr->itag_fmt = (r[7] >> 22) & 1;
|
// pr->otag_fmt = (r[7] >> 23) & 1;
|
||||||
pr->otag_exist = (r[7] >> 21) & 1;
|
// pr->itag_fmt = (r[7] >> 22) & 1;
|
||||||
pr->itag_exist = (r[7] >> 20) & 1;
|
// pr->otag_exist = (r[7] >> 21) & 1;
|
||||||
pr->frame_type_l2 = (r[7] >> 18) & 3;
|
// pr->itag_exist = (r[7] >> 20) & 1;
|
||||||
pr->igr_normal_port = (r[7] >> 17) & 1;
|
// pr->frame_type_l2 = (r[7] >> 18) & 3;
|
||||||
pr->tid = (r[7] >> 16) & 1;
|
// pr->igr_normal_port = (r[7] >> 17) & 1;
|
||||||
|
// pr->tid = (r[7] >> 16) & 1;
|
||||||
|
|
||||||
pr->mgnt_vlan_m = r[14] & BIT(15);
|
// pr->mgnt_vlan_m = r[14] & BIT(15);
|
||||||
if (pr->phase == PHASE_IACL)
|
// if (pr->phase == PHASE_IACL)
|
||||||
pr->dmac_hit_sw_m = r[14] & BIT(14);
|
// pr->dmac_hit_sw_m = r[14] & BIT(14);
|
||||||
else
|
// else
|
||||||
pr->content_too_deep_m = r[14] & BIT(14);
|
// pr->content_too_deep_m = r[14] & BIT(14);
|
||||||
pr->not_first_frag_m = r[14] & BIT(13);
|
// pr->not_first_frag_m = r[14] & BIT(13);
|
||||||
pr->frame_type_l4_m = (r[14] >> 10) & 7;
|
// pr->frame_type_l4_m = (r[14] >> 10) & 7;
|
||||||
pr->frame_type_m = (r[14] >> 8) & 3;
|
// pr->frame_type_m = (r[14] >> 8) & 3;
|
||||||
pr->otag_fmt_m = r[14] & BIT(7);
|
// pr->otag_fmt_m = r[14] & BIT(7);
|
||||||
pr->itag_fmt_m = r[14] & BIT(6);
|
// pr->itag_fmt_m = r[14] & BIT(6);
|
||||||
pr->otag_exist_m = r[14] & BIT(5);
|
// pr->otag_exist_m = r[14] & BIT(5);
|
||||||
pr->itag_exist_m = r[14] & BIT (4);
|
// pr->itag_exist_m = r[14] & BIT (4);
|
||||||
pr->frame_type_l2_m = (r[14] >> 2) & 3;
|
// pr->frame_type_l2_m = (r[14] >> 2) & 3;
|
||||||
pr->igr_normal_port_m = r[14] & BIT(1);
|
// pr->igr_normal_port_m = r[14] & BIT(1);
|
||||||
pr->tid_m = r[14] & 1;
|
// pr->tid_m = r[14] & 1;
|
||||||
|
|
||||||
pr->valid = r[15] & BIT(31);
|
// pr->valid = r[15] & BIT(31);
|
||||||
pr->cond_not = r[15] & BIT(30);
|
// pr->cond_not = r[15] & BIT(30);
|
||||||
pr->cond_and1 = r[15] & BIT(29);
|
// pr->cond_and1 = r[15] & BIT(29);
|
||||||
pr->cond_and2 = r[15] & BIT(28);
|
// pr->cond_and2 = r[15] & BIT(28);
|
||||||
}
|
// }
|
||||||
|
|
||||||
static void rtl931x_write_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
static void rtl931x_write_pie_fixed_fields(u32 r[], struct pie_rule *pr)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -161,12 +161,13 @@ static void rtl931x_create_tx_header(struct p_hdr *h, unsigned int dest_port, in
|
|||||||
h->cpu_tag[2] = (BIT(5) | (prio & 0x1f)) << 8;
|
h->cpu_tag[2] = (BIT(5) | (prio & 0x1f)) << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl93xx_header_vlan_set(struct p_hdr *h, int vlan)
|
// Currently unused
|
||||||
{
|
// static void rtl93xx_header_vlan_set(struct p_hdr *h, int vlan)
|
||||||
h->cpu_tag[2] |= BIT(4); /* Enable VLAN forwarding offload */
|
// {
|
||||||
h->cpu_tag[2] |= (vlan >> 8) & 0xf;
|
// h->cpu_tag[2] |= BIT(4); /* Enable VLAN forwarding offload */
|
||||||
h->cpu_tag[3] |= (vlan & 0xff) << 8;
|
// h->cpu_tag[2] |= (vlan >> 8) & 0xf;
|
||||||
}
|
// h->cpu_tag[3] |= (vlan & 0xff) << 8;
|
||||||
|
// }
|
||||||
|
|
||||||
struct rtl838x_rx_q {
|
struct rtl838x_rx_q {
|
||||||
int id;
|
int id;
|
||||||
@ -1957,7 +1958,7 @@ static int rtl930x_mdio_reset(struct mii_bus *bus)
|
|||||||
break; /* Serdes: Value = 0 */
|
break; /* Serdes: Value = 0 */
|
||||||
case PHY_INTERFACE_MODE_HSGMII:
|
case PHY_INTERFACE_MODE_HSGMII:
|
||||||
private_poll_mask |= BIT(i);
|
private_poll_mask |= BIT(i);
|
||||||
/* fallthrough */
|
fallthrough;
|
||||||
case PHY_INTERFACE_MODE_USXGMII:
|
case PHY_INTERFACE_MODE_USXGMII:
|
||||||
v |= BIT(mac_type_bit[i]);
|
v |= BIT(mac_type_bit[i]);
|
||||||
uses_usxgmii = true;
|
uses_usxgmii = true;
|
||||||
|
|||||||
@ -743,9 +743,10 @@ static int rtl8380_configure_int_rtl8218b(struct phy_device *phydev)
|
|||||||
rtl838x_6275B_intPhy_perport = (void *)h + sizeof(struct fw_header) + h->parts[8].start;
|
rtl838x_6275B_intPhy_perport = (void *)h + sizeof(struct fw_header) + h->parts[8].start;
|
||||||
rtl8218b_6276B_hwEsd_perport = (void *)h + sizeof(struct fw_header) + h->parts[9].start;
|
rtl8218b_6276B_hwEsd_perport = (void *)h + sizeof(struct fw_header) + h->parts[9].start;
|
||||||
|
|
||||||
if (sw_r32(RTL838X_DMY_REG31) == 0x1) {
|
// Currently not used
|
||||||
int ipd_flag = 1;
|
// if (sw_r32(RTL838X_DMY_REG31) == 0x1) {
|
||||||
}
|
// int ipd_flag = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
val = phy_read(phydev, 0);
|
val = phy_read(phydev, 0);
|
||||||
if (val & BIT(11))
|
if (val & BIT(11))
|
||||||
@ -3330,13 +3331,14 @@ static void rtl931x_sds_rx_rst(u32 sds)
|
|||||||
mdelay(50);
|
mdelay(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtl931x_sds_disable(u32 sds)
|
// Currently not used
|
||||||
{
|
// static void rtl931x_sds_disable(u32 sds)
|
||||||
u32 v = 0x1f;
|
// {
|
||||||
|
// u32 v = 0x1f;
|
||||||
|
|
||||||
v |= BIT(7);
|
// v |= BIT(7);
|
||||||
sw_w32(v, RTL931X_SERDES_MODE_CTRL + (sds >> 2) * 4);
|
// sw_w32(v, RTL931X_SERDES_MODE_CTRL + (sds >> 2) * 4);
|
||||||
}
|
// }
|
||||||
|
|
||||||
static void rtl931x_sds_mii_mode_set(u32 sds, phy_interface_t mode)
|
static void rtl931x_sds_mii_mode_set(u32 sds, phy_interface_t mode)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -9,9 +9,28 @@ protocol.
|
|||||||
|
|
||||||
Submitted-by: Birger Koblitz <git@birger-koblitz.de>
|
Submitted-by: Birger Koblitz <git@birger-koblitz.de>
|
||||||
---
|
---
|
||||||
|
drivers/net/phy/phylink.c | 2 ++
|
||||||
include/linux/phy.h | 3 +++
|
include/linux/phy.h | 3 +++
|
||||||
1 file changed, 3 insertions(+)
|
2 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/net/phy/phylink.c
|
||||||
|
+++ b/drivers/net/phy/phylink.c
|
||||||
|
@@ -403,6 +403,7 @@ void phylink_get_linkmodes(unsigned long
|
||||||
|
|
||||||
|
case PHY_INTERFACE_MODE_XGMII:
|
||||||
|
case PHY_INTERFACE_MODE_RXAUI:
|
||||||
|
+ case PHY_INTERFACE_MODE_HSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_XAUI:
|
||||||
|
case PHY_INTERFACE_MODE_10GBASER:
|
||||||
|
case PHY_INTERFACE_MODE_10GKR:
|
||||||
|
@@ -657,6 +658,7 @@ static int phylink_parse_mode(struct phy
|
||||||
|
fallthrough;
|
||||||
|
case PHY_INTERFACE_MODE_USXGMII:
|
||||||
|
case PHY_INTERFACE_MODE_10GKR:
|
||||||
|
+ case PHY_INTERFACE_MODE_HSGMII:
|
||||||
|
case PHY_INTERFACE_MODE_10GBASER:
|
||||||
|
phylink_set(pl->supported, 10baseT_Half);
|
||||||
|
phylink_set(pl->supported, 10baseT_Full);
|
||||||
--- a/include/linux/phy.h
|
--- a/include/linux/phy.h
|
||||||
+++ b/include/linux/phy.h
|
+++ b/include/linux/phy.h
|
||||||
@@ -138,6 +138,7 @@ typedef enum {
|
@@ -138,6 +138,7 @@ typedef enum {
|
||||||
|
|||||||
@ -120,49 +120,29 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
|||||||
|
|
||||||
--- a/include/linux/mdio/mdio-i2c.h
|
--- a/include/linux/mdio/mdio-i2c.h
|
||||||
+++ b/include/linux/mdio/mdio-i2c.h
|
+++ b/include/linux/mdio/mdio-i2c.h
|
||||||
@@ -12,5 +12,21 @@ struct i2c_adapter;
|
@@ -12,5 +12,8 @@ struct i2c_adapter;
|
||||||
struct mii_bus;
|
struct mii_bus;
|
||||||
|
|
||||||
struct mii_bus *mdio_i2c_alloc(struct device *parent, struct i2c_adapter *i2c);
|
struct mii_bus *mdio_i2c_alloc(struct device *parent, struct i2c_adapter *i2c);
|
||||||
+struct mii_bus *mdio_smbus_alloc(struct device *parent, struct i2c_adapter *i2c);
|
+struct mii_bus *mdio_smbus_alloc(struct device *parent, struct i2c_adapter *i2c);
|
||||||
+
|
+bool i2c_mii_valid_phy_id(int phy_id);
|
||||||
+/*
|
+unsigned int i2c_mii_phy_addr(int phy_id);
|
||||||
+ * I2C bus addresses 0x50 and 0x51 are normally an EEPROM, which is
|
|
||||||
+ * specified to be present in SFP modules. These correspond with PHY
|
|
||||||
+ * addresses 16 and 17. Disallow access to these "phy" addresses.
|
|
||||||
+ */
|
|
||||||
+static bool i2c_mii_valid_phy_id(int phy_id)
|
|
||||||
+{
|
|
||||||
+ return phy_id != 0x10 && phy_id != 0x11;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static unsigned int i2c_mii_phy_addr(int phy_id)
|
|
||||||
+{
|
|
||||||
+ return phy_id + 0x40;
|
|
||||||
+}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
--- a/drivers/net/mdio/mdio-i2c.c
|
--- a/drivers/net/mdio/mdio-i2c.c
|
||||||
+++ b/drivers/net/mdio/mdio-i2c.c
|
+++ b/drivers/net/mdio/mdio-i2c.c
|
||||||
@@ -13,21 +13,6 @@
|
@@ -18,12 +18,12 @@
|
||||||
#include <linux/mdio/mdio-i2c.h>
|
* specified to be present in SFP modules. These correspond with PHY
|
||||||
#include <linux/phy.h>
|
* addresses 16 and 17. Disallow access to these "phy" addresses.
|
||||||
|
*/
|
||||||
-/*
|
|
||||||
- * I2C bus addresses 0x50 and 0x51 are normally an EEPROM, which is
|
|
||||||
- * specified to be present in SFP modules. These correspond with PHY
|
|
||||||
- * addresses 16 and 17. Disallow access to these "phy" addresses.
|
|
||||||
- */
|
|
||||||
-static bool i2c_mii_valid_phy_id(int phy_id)
|
-static bool i2c_mii_valid_phy_id(int phy_id)
|
||||||
-{
|
+bool i2c_mii_valid_phy_id(int phy_id)
|
||||||
- return phy_id != 0x10 && phy_id != 0x11;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static unsigned int i2c_mii_phy_addr(int phy_id)
|
|
||||||
-{
|
|
||||||
- return phy_id + 0x40;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static int i2c_mii_read(struct mii_bus *bus, int phy_id, int reg)
|
|
||||||
{
|
{
|
||||||
struct i2c_adapter *i2c = bus->priv;
|
return phy_id != 0x10 && phy_id != 0x11;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static unsigned int i2c_mii_phy_addr(int phy_id)
|
||||||
|
+unsigned int i2c_mii_phy_addr(int phy_id)
|
||||||
|
{
|
||||||
|
return phy_id + 0x40;
|
||||||
|
}
|
||||||
|
|||||||
@ -69,7 +69,7 @@ define Device/Default
|
|||||||
PROFILES := Default
|
PROFILES := Default
|
||||||
KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||||
IMAGES := sysupgrade.img.gz
|
IMAGES := sysupgrade.img.gz
|
||||||
IMAGE/sysupgrade.img.gz = boot-common | boot-script | $$(BOOT_FLOW) | gzip | append-metadata
|
IMAGE/sysupgrade.img.gz = boot-common | boot-script $$(BOOT_SCRIPT) | $$(BOOT_FLOW) | gzip | append-metadata
|
||||||
DEVICE_DTS = rockchip/$$(SOC)-$(lastword $(subst _, ,$(1)))
|
DEVICE_DTS = rockchip/$$(SOC)-$(lastword $(subst _, ,$(1)))
|
||||||
UBOOT_DEVICE_NAME = $(lastword $(subst _, ,$(1)))-$$(SOC)
|
UBOOT_DEVICE_NAME = $(lastword $(subst _, ,$(1)))-$$(SOC)
|
||||||
endef
|
endef
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
--- a/squashfs-tools/mksquashfs.c
|
||||||
|
+++ b/squashfs-tools/mksquashfs.c
|
||||||
|
@@ -1822,7 +1822,7 @@ int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct stat buf, source_buf;
|
||||||
|
int i;
|
||||||
|
- squashfs_super_block sBlk;
|
||||||
|
+ squashfs_super_block sBlk = {};
|
||||||
|
char *b, *root_name = NULL;
|
||||||
|
int be, nopad = FALSE, keep_as_directory = FALSE, orig_be;
|
||||||
|
squashfs_inode inode;
|
||||||
Loading…
Reference in New Issue
Block a user