mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-01 16:58:22 +00:00
kernel: bump 5.15 to 5.15.123
Manually rebased: bcm4908/patches-5.15/071-v6.1-0001-net-broadcom-bcm4908_enet-handle-EPROBE_DEFER-when-g.patch bcm53xx/patches-5.15/180-usb-xhci-add-support-for-performing-fake-doorbell.patch ipq40xx/patches-5.15/902-dts-ipq4019-ap-dk04.1.patch[*] bcm27xx/patches-5.15/950-0600-xhci-quirks-add-link-TRB-quirk-for-VL805.patch bcm27xx/patches-5.15/950-0606-usb-xhci-add-VLI_TRB_CACHE_BUG-quirk.patch bcm27xx/patches-5.15/950-0717-usb-xhci-add-a-quirk-for-Superspeed-bulk-OUT-transfe.patch Removed upstreamed: backport-5.15/735-v6.5-net-bgmac-postpone-turning-IRQs-off-to-avoid-SoC-han.patch[1] backport-5.15/817-v6.5-01-leds-trigger-netdev-Recheck-NETDEV_LED_MODE_LINKUP-o.patch[2] pending-5.15/143-jffs2-reduce-stack-usage-in-jffs2_build_xattr_subsys.patch[3] pending-5.15/160-workqueue-fix-enum-type-for-gcc-13.patch[4] bcm53xx/patches-5.15/036-v6.5-0003-ARM-dts-BCM5301X-Drop-clock-names-from-the-SPI-node.patch[5] bcm53xx/patches-5.15/036-v6.5-0015-ARM-dts-BCM5301X-fix-duplex-full-full-duplex.patch[6] ipq807x/patches-5.15/0048-v6.1-clk-qcom-reset-Allow-specifying-custom-reset-delay.patch[7] ipq807x/patches-5.15/0049-v6.2-clk-qcom-reset-support-resetting-multiple-bits.patch[8] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=02474292a44205c1eb5a03634ead155a3c9134f4 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=86b93cbfe104e99fd3d25a49748b99fb88101573 3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=79b9ab357b6f5675007f4c02ff8765cbd8dc06a2 4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=d528faa9e828b9fc46dfb684a2a9fd8c2e860ed8 5. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=5899bc4058e89d5110a23797ff94439c53b77c25 6. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=95afd2c7c7d26087730dc938709e025a303e5499 7. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=40844343a8853a08b049d50c967e2a1e28f0ece6 8. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.123&id=6ad5ded420f5d96f7c65b68135f5787a1c7e58d7 Build system: x86/64 Build-tested: ramips/tplink_archer-a6-v3 Run-tested: ramips/tplink_archer-a6-v3 Co-authored-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: John Audia <therealgraysky@proton.me> [rebased ipq40xx/patches-5.15/902-dts-ipq4019-ap-dk04.1.patch ] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> (cherry picked from commit 8590531048f138ff719c8b317c443a6a7538a762) [Refreshed on top of openwrt-23.05] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
017827e205
commit
7efec0acca
@ -1,2 +1,2 @@
|
|||||||
LINUX_VERSION-5.15 = .120
|
LINUX_VERSION-5.15 = .123
|
||||||
LINUX_KERNEL_HASH-5.15.120 = 6499089eae6b271063cb3e873ab7f4ba0543cfb21dcc9c54d9bcf5357db683f6
|
LINUX_KERNEL_HASH-5.15.123 = 2de69544a12e6a059163c58fc901c13bcf22e8cac39c66b56f8fbb633399bf93
|
||||||
|
@ -750,7 +750,7 @@ SVN-Revision: 35130
|
|||||||
EXPORT_SYMBOL(xfrm_parse_spi);
|
EXPORT_SYMBOL(xfrm_parse_spi);
|
||||||
--- a/net/ipv4/tcp_input.c
|
--- a/net/ipv4/tcp_input.c
|
||||||
+++ b/net/ipv4/tcp_input.c
|
+++ b/net/ipv4/tcp_input.c
|
||||||
@@ -4152,14 +4152,16 @@ static bool tcp_parse_aligned_timestamp(
|
@@ -4158,14 +4158,16 @@ static bool tcp_parse_aligned_timestamp(
|
||||||
{
|
{
|
||||||
const __be32 *ptr = (const __be32 *)(th + 1);
|
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
@@ -376,7 +376,7 @@ static const struct gpio_chip bcm2835_gp
|
@@ -374,7 +374,7 @@ static const struct gpio_chip bcm2835_gp
|
||||||
.get = bcm2835_gpio_get,
|
.get = bcm2835_gpio_get,
|
||||||
.set = bcm2835_gpio_set,
|
.set = bcm2835_gpio_set,
|
||||||
.set_config = gpiochip_generic_config,
|
.set_config = gpiochip_generic_config,
|
||||||
@ -29,7 +29,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
.ngpio = BCM2835_NUM_GPIOS,
|
.ngpio = BCM2835_NUM_GPIOS,
|
||||||
.can_sleep = false,
|
.can_sleep = false,
|
||||||
.of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback,
|
.of_gpio_ranges_fallback = bcm2835_of_gpio_ranges_fallback,
|
||||||
@@ -393,7 +393,7 @@ static const struct gpio_chip bcm2711_gp
|
@@ -391,7 +391,7 @@ static const struct gpio_chip bcm2711_gp
|
||||||
.get = bcm2835_gpio_get,
|
.get = bcm2835_gpio_get,
|
||||||
.set = bcm2835_gpio_set,
|
.set = bcm2835_gpio_set,
|
||||||
.set_config = gpiochip_generic_config,
|
.set_config = gpiochip_generic_config,
|
||||||
|
@ -303,7 +303,7 @@ bcm2835-mmc: uninitialized_var is no more
|
|||||||
}
|
}
|
||||||
--- a/drivers/mmc/core/quirks.h
|
--- a/drivers/mmc/core/quirks.h
|
||||||
+++ b/drivers/mmc/core/quirks.h
|
+++ b/drivers/mmc/core/quirks.h
|
||||||
@@ -105,6 +105,14 @@ static const struct mmc_fixup __maybe_un
|
@@ -119,6 +119,14 @@ static const struct mmc_fixup __maybe_un
|
||||||
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
|
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_SANDISK_SD, 0x5344, add_quirk_sd,
|
||||||
MMC_QUIRK_BROKEN_SD_DISCARD),
|
MMC_QUIRK_BROKEN_SD_DISCARD),
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|||||||
|
|
||||||
--- a/drivers/usb/host/xhci-mem.c
|
--- a/drivers/usb/host/xhci-mem.c
|
||||||
+++ b/drivers/usb/host/xhci-mem.c
|
+++ b/drivers/usb/host/xhci-mem.c
|
||||||
@@ -2520,9 +2520,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
@@ -2541,9 +2541,11 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||||
* Event ring setup: Allocate a normal ring, but also setup
|
* Event ring setup: Allocate a normal ring, but also setup
|
||||||
* the event ring segment table (ERST). Section 4.9.3.
|
* the event ring segment table (ERST). Section 4.9.3.
|
||||||
*/
|
*/
|
||||||
@ -36,7 +36,7 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|||||||
if (!xhci->event_ring)
|
if (!xhci->event_ring)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (xhci_check_trb_in_td_math(xhci) < 0)
|
if (xhci_check_trb_in_td_math(xhci) < 0)
|
||||||
@@ -2535,7 +2537,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
@@ -2556,7 +2558,7 @@ int xhci_mem_init(struct xhci_hcd *xhci,
|
||||||
/* set ERST count with the number of entries in the segment table */
|
/* set ERST count with the number of entries in the segment table */
|
||||||
val = readl(&xhci->ir_set->erst_size);
|
val = readl(&xhci->ir_set->erst_size);
|
||||||
val &= ERST_SIZE_MASK;
|
val &= ERST_SIZE_MASK;
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||||||
|
|
||||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
@@ -1337,7 +1337,7 @@ static int bcm2835_pinctrl_probe(struct
|
@@ -1335,7 +1335,7 @@ static int bcm2835_pinctrl_probe(struct
|
||||||
girq->default_type = IRQ_TYPE_NONE;
|
girq->default_type = IRQ_TYPE_NONE;
|
||||||
girq->handler = handle_level_irq;
|
girq->handler = handle_level_irq;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ Signed-off-by: Joerg Quinten <aBUGSworstnightmare@gmail.com>
|
|||||||
- MEDIA_BUS_FMT_RGB666_1X24_CPADHI
|
- MEDIA_BUS_FMT_RGB666_1X24_CPADHI
|
||||||
--- a/drivers/gpu/drm/panel/panel-simple.c
|
--- a/drivers/gpu/drm/panel/panel-simple.c
|
||||||
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
||||||
@@ -2472,6 +2472,38 @@ static const struct panel_desc innolux_a
|
@@ -2473,6 +2473,38 @@ static const struct panel_desc innolux_a
|
||||||
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
|
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ Signed-off-by: Joerg Quinten <aBUGSworstnightmare@gmail.com>
|
|||||||
static const struct drm_display_mode innolux_at070tn92_mode = {
|
static const struct drm_display_mode innolux_at070tn92_mode = {
|
||||||
.clock = 33333,
|
.clock = 33333,
|
||||||
.hdisplay = 800,
|
.hdisplay = 800,
|
||||||
@@ -4662,6 +4694,9 @@ static const struct of_device_id platfor
|
@@ -4664,6 +4696,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "innolux,at043tn24",
|
.compatible = "innolux,at043tn24",
|
||||||
.data = &innolux_at043tn24,
|
.data = &innolux_at043tn24,
|
||||||
}, {
|
}, {
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/gpu/drm/panel/panel-simple.c
|
--- a/drivers/gpu/drm/panel/panel-simple.c
|
||||||
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
+++ b/drivers/gpu/drm/panel/panel-simple.c
|
||||||
@@ -3761,6 +3761,31 @@ static const struct panel_desc qishenglo
|
@@ -3763,6 +3763,31 @@ static const struct panel_desc qishenglo
|
||||||
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|||||||
static const struct display_timing rocktech_rk070er9427_timing = {
|
static const struct display_timing rocktech_rk070er9427_timing = {
|
||||||
.pixelclock = { 26400000, 33300000, 46800000 },
|
.pixelclock = { 26400000, 33300000, 46800000 },
|
||||||
.hactive = { 800, 800, 800 },
|
.hactive = { 800, 800, 800 },
|
||||||
@@ -4841,6 +4866,9 @@ static const struct of_device_id platfor
|
@@ -4843,6 +4868,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "qishenglong,gopher2b-lcd",
|
.compatible = "qishenglong,gopher2b-lcd",
|
||||||
.data = &qishenglong_gopher2b_lcd,
|
.data = &qishenglong_gopher2b_lcd,
|
||||||
}, {
|
}, {
|
||||||
|
@ -50,11 +50,11 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
|
addr = xhci_trb_virt_to_dma(new_seg, new_deq);
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1906,6 +1906,7 @@ struct xhci_hcd {
|
@@ -1908,6 +1908,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
|
|
||||||
#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)
|
|
||||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
||||||
+#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(45)
|
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
|
||||||
|
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
|
||||||
|
+#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(47)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
@ -63,11 +63,11 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1908,6 +1908,7 @@ struct xhci_hcd {
|
@@ -1910,6 +1910,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)
|
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
|
||||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
|
||||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(45)
|
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(47)
|
||||||
+#define XHCI_VLI_TRB_CACHE_BUG BIT_ULL(46)
|
+#define XHCI_VLI_TRB_CACHE_BUG BIT_ULL(48)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
@ -46,7 +46,7 @@ Acked-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
static const struct drm_display_mode giantplus_gpg482739qs5_mode = {
|
static const struct drm_display_mode giantplus_gpg482739qs5_mode = {
|
||||||
.clock = 9000,
|
.clock = 9000,
|
||||||
.hdisplay = 480,
|
.hdisplay = 480,
|
||||||
@@ -4704,6 +4730,9 @@ static const struct of_device_id platfor
|
@@ -4706,6 +4732,9 @@ static const struct of_device_id platfor
|
||||||
.compatible = "friendlyarm,hd702e",
|
.compatible = "friendlyarm,hd702e",
|
||||||
.data = &friendlyarm_hd702e,
|
.data = &friendlyarm_hd702e,
|
||||||
}, {
|
}, {
|
||||||
|
@ -86,11 +86,11 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
|
|||||||
first_trb = false;
|
first_trb = false;
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1909,6 +1909,7 @@ struct xhci_hcd {
|
@@ -1911,6 +1911,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
|
||||||
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(45)
|
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(47)
|
||||||
#define XHCI_VLI_TRB_CACHE_BUG BIT_ULL(46)
|
#define XHCI_VLI_TRB_CACHE_BUG BIT_ULL(48)
|
||||||
+#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(47)
|
+#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(49)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
|
|
||||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||||
@@ -908,9 +908,12 @@ static int bcm2835_pmx_free(struct pinct
|
@@ -906,9 +906,12 @@ static int bcm2835_pmx_free(struct pinct
|
||||||
unsigned offset)
|
unsigned offset)
|
||||||
{
|
{
|
||||||
struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
|
struct bcm2835_pinctrl *pc = pinctrl_dev_get_drvdata(pctldev);
|
||||||
@ -28,7 +28,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -952,10 +955,7 @@ static void bcm2835_pmx_gpio_disable_fre
|
@@ -950,10 +953,7 @@ static void bcm2835_pmx_gpio_disable_fre
|
||||||
struct pinctrl_gpio_range *range,
|
struct pinctrl_gpio_range *range,
|
||||||
unsigned offset)
|
unsigned offset)
|
||||||
{
|
{
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
|
|
||||||
--- a/drivers/gpu/drm/drm_atomic_helper.c
|
--- a/drivers/gpu/drm/drm_atomic_helper.c
|
||||||
+++ b/drivers/gpu/drm/drm_atomic_helper.c
|
+++ b/drivers/gpu/drm/drm_atomic_helper.c
|
||||||
@@ -1498,13 +1498,6 @@ drm_atomic_helper_wait_for_vblanks(struc
|
@@ -1507,13 +1507,6 @@ drm_atomic_helper_wait_for_vblanks(struc
|
||||||
int i, ret;
|
int i, ret;
|
||||||
unsigned int crtc_mask = 0;
|
unsigned int crtc_mask = 0;
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|||||||
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
|
for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
|
||||||
if (!new_crtc_state->active)
|
if (!new_crtc_state->active)
|
||||||
continue;
|
continue;
|
||||||
@@ -2132,12 +2125,6 @@ int drm_atomic_helper_setup_commit(struc
|
@@ -2141,12 +2134,6 @@ int drm_atomic_helper_setup_commit(struc
|
||||||
complete_all(&commit->flip_done);
|
complete_all(&commit->flip_done);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ when a switch driver is in use.
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||||
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
||||||
@@ -4267,7 +4267,8 @@ static int tg3_power_down_prepare(struct
|
@@ -4268,7 +4268,8 @@ static int tg3_power_down_prepare(struct
|
||||||
static void tg3_power_down(struct tg3 *tp)
|
static void tg3_power_down(struct tg3 *tp)
|
||||||
{
|
{
|
||||||
pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
|
pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
@@ -720,6 +720,8 @@ static int bcm4908_enet_probe(struct pla
|
@@ -720,6 +720,8 @@ static int bcm4908_enet_probe(struct pla
|
||||||
|
|
||||||
SET_NETDEV_DEV(netdev, &pdev->dev);
|
SET_NETDEV_DEV(netdev, &pdev->dev);
|
||||||
err = of_get_mac_address(dev->of_node, netdev->dev_addr);
|
err = of_get_ethdev_address(dev->of_node, netdev);
|
||||||
+ if (err == -EPROBE_DEFER)
|
+ if (err == -EPROBE_DEFER)
|
||||||
+ goto err_dma_free;
|
+ goto err_dma_free;
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -460,7 +460,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -558,24 +390,4 @@
|
@@ -557,24 +389,4 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
From d3c8e2c5757153bbfad70019ec1decbca86f3def Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
||||||
Date: Wed, 3 May 2023 14:28:30 +0200
|
|
||||||
Subject: [PATCH] ARM: dts: BCM5301X: Drop "clock-names" from the SPI node
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
There is no such property in the SPI controller binding documentation.
|
|
||||||
Also Linux driver doesn't look for it.
|
|
||||||
|
|
||||||
This fixes:
|
|
||||||
arch/arm/boot/dts/bcm4708-asus-rt-ac56u.dtb: spi@18029200: Unevaluated properties are not allowed ('clock-names' was unexpected)
|
|
||||||
From schema: Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
|
|
||||||
|
|
||||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
||||||
Link: https://lore.kernel.org/r/20230503122830.3200-1-zajec5@gmail.com
|
|
||||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/bcm5301x.dtsi | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/bcm5301x.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
|
|
||||||
@@ -335,7 +335,6 @@
|
|
||||||
"spi_lr_session_done",
|
|
||||||
"spi_lr_overread";
|
|
||||||
clocks = <&iprocmed>;
|
|
||||||
- clock-names = "iprocmed";
|
|
||||||
num-cs = <2>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
@ -1,44 +0,0 @@
|
|||||||
From fd274b733bfdde3ca72f0fa2a37f032f3a8c402c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
Date: Thu, 8 Jun 2023 17:36:29 +0200
|
|
||||||
Subject: [PATCH] ARM: dts: BCM5301X: fix duplex-full => full-duplex
|
|
||||||
|
|
||||||
this typo was found by the dtbs_check
|
|
||||||
| ports:port@5:fixed-link: 'oneOf' conditional failed,
|
|
||||||
| {'speed': [[1000]], 'duplex-full': True} is not of type 'array'
|
|
||||||
| 'duplex-full' does not match any of the regexes: 'pinctrl-[0-]..."
|
|
||||||
|
|
||||||
this should have been full-duplex;
|
|
||||||
|
|
||||||
Fixes: 935327a73553 ("ARM: dts: BCM5301X: Add DT for Meraki MR26")
|
|
||||||
Fixes: ec88a9c344d9 ("ARM: BCM5301X: Add DT for Meraki MR32")
|
|
||||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
|
||||||
Link: https://lore.kernel.org/r/50522f45566951a9eabd22820647924cc6b4a264.1686238550.git.chunkeey@gmail.com
|
|
||||||
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/bcm53015-meraki-mr26.dts | 2 +-
|
|
||||||
arch/arm/boot/dts/bcm53016-meraki-mr32.dts | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/bcm53015-meraki-mr26.dts
|
|
||||||
+++ b/arch/arm/boot/dts/bcm53015-meraki-mr26.dts
|
|
||||||
@@ -121,7 +121,7 @@
|
|
||||||
|
|
||||||
fixed-link {
|
|
||||||
speed = <1000>;
|
|
||||||
- duplex-full;
|
|
||||||
+ full-duplex;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
--- a/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
|
|
||||||
+++ b/arch/arm/boot/dts/bcm53016-meraki-mr32.dts
|
|
||||||
@@ -182,7 +182,7 @@
|
|
||||||
|
|
||||||
fixed-link {
|
|
||||||
speed = <1000>;
|
|
||||||
- duplex-full;
|
|
||||||
+ full-duplex;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
@ -127,11 +127,11 @@ it on BCM4708 family.
|
|||||||
/*
|
/*
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1906,6 +1906,7 @@ struct xhci_hcd {
|
@@ -1908,6 +1908,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
|
|
||||||
#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)
|
|
||||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
||||||
+#define XHCI_FAKE_DOORBELL BIT_ULL(45)
|
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
|
||||||
|
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
|
||||||
|
+#define XHCI_FAKE_DOORBELL BIT_ULL(47)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
@ -53,7 +53,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
map->format.format_write(map, reg, val);
|
map->format.format_write(map, reg, val);
|
||||||
|
|
||||||
trace_regmap_hw_write_start(map, reg, 1);
|
trace_regmap_hw_write_start(map, reg, 1);
|
||||||
@@ -2348,6 +2351,7 @@ static int _regmap_raw_multi_reg_write(s
|
@@ -2346,6 +2349,7 @@ static int _regmap_raw_multi_reg_write(s
|
||||||
unsigned int reg = regs[i].reg;
|
unsigned int reg = regs[i].reg;
|
||||||
unsigned int val = regs[i].def;
|
unsigned int val = regs[i].def;
|
||||||
trace_regmap_hw_write_start(map, reg, 1);
|
trace_regmap_hw_write_start(map, reg, 1);
|
||||||
@ -61,7 +61,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
map->format.format_reg(u8, reg, map->reg_shift);
|
map->format.format_reg(u8, reg, map->reg_shift);
|
||||||
u8 += reg_bytes + pad_bytes;
|
u8 += reg_bytes + pad_bytes;
|
||||||
map->format.format_val(u8, val, 0);
|
map->format.format_val(u8, val, 0);
|
||||||
@@ -2675,6 +2679,7 @@ static int _regmap_raw_read(struct regma
|
@@ -2673,6 +2677,7 @@ static int _regmap_raw_read(struct regma
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
reg >>= map->format.reg_downshift;
|
reg >>= map->format.reg_downshift;
|
||||||
map->format.format_write(map, reg, val);
|
map->format.format_write(map, reg, val);
|
||||||
|
|
||||||
@@ -2351,6 +2355,7 @@ static int _regmap_raw_multi_reg_write(s
|
@@ -2349,6 +2353,7 @@ static int _regmap_raw_multi_reg_write(s
|
||||||
unsigned int reg = regs[i].reg;
|
unsigned int reg = regs[i].reg;
|
||||||
unsigned int val = regs[i].def;
|
unsigned int val = regs[i].def;
|
||||||
trace_regmap_hw_write_start(map, reg, 1);
|
trace_regmap_hw_write_start(map, reg, 1);
|
||||||
@ -66,7 +66,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
reg >>= map->format.reg_downshift;
|
reg >>= map->format.reg_downshift;
|
||||||
map->format.format_reg(u8, reg, map->reg_shift);
|
map->format.format_reg(u8, reg, map->reg_shift);
|
||||||
u8 += reg_bytes + pad_bytes;
|
u8 += reg_bytes + pad_bytes;
|
||||||
@@ -2679,6 +2684,7 @@ static int _regmap_raw_read(struct regma
|
@@ -2677,6 +2682,7 @@ static int _regmap_raw_read(struct regma
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
return map->bus->reg_write(map->bus_context, reg, val);
|
return map->bus->reg_write(map->bus_context, reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2705,6 +2707,8 @@ static int _regmap_bus_reg_read(void *co
|
@@ -2703,6 +2705,8 @@ static int _regmap_bus_reg_read(void *co
|
||||||
{
|
{
|
||||||
struct regmap *map = context;
|
struct regmap *map = context;
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ Signed-off-by: Mark Brown <broonie@kernel.org>
|
|||||||
return map->bus->reg_read(map->bus_context, reg, val);
|
return map->bus->reg_read(map->bus_context, reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3080,6 +3084,8 @@ static int _regmap_update_bits(struct re
|
@@ -3078,6 +3082,8 @@ static int _regmap_update_bits(struct re
|
||||||
*change = false;
|
*change = false;
|
||||||
|
|
||||||
if (regmap_volatile(map, reg) && map->reg_update_bits) {
|
if (regmap_volatile(map, reg) && map->reg_update_bits) {
|
||||||
|
@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
||||||
ret = device_reset(eth->dev);
|
ret = device_reset(eth->dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -3079,6 +3086,35 @@ free_netdev:
|
@@ -3072,6 +3079,35 @@ free_netdev:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
static int mtk_probe(struct platform_device *pdev)
|
static int mtk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device_node *mac_np;
|
struct device_node *mac_np;
|
||||||
@@ -3092,6 +3128,7 @@ static int mtk_probe(struct platform_dev
|
@@ -3085,6 +3121,7 @@ static int mtk_probe(struct platform_dev
|
||||||
eth->soc = of_device_get_match_data(&pdev->dev);
|
eth->soc = of_device_get_match_data(&pdev->dev);
|
||||||
|
|
||||||
eth->dev = &pdev->dev;
|
eth->dev = &pdev->dev;
|
||||||
@ -269,7 +269,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
eth->base = devm_platform_ioremap_resource(pdev, 0);
|
eth->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
if (IS_ERR(eth->base))
|
if (IS_ERR(eth->base))
|
||||||
return PTR_ERR(eth->base);
|
return PTR_ERR(eth->base);
|
||||||
@@ -3140,6 +3177,16 @@ static int mtk_probe(struct platform_dev
|
@@ -3133,6 +3170,16 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
static int mtk_msg_level = -1;
|
static int mtk_msg_level = -1;
|
||||||
module_param_named(msg_level, mtk_msg_level, int, 0);
|
module_param_named(msg_level, mtk_msg_level, int, 0);
|
||||||
@@ -3209,6 +3210,22 @@ static int mtk_probe(struct platform_dev
|
@@ -3202,6 +3203,22 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -3301,10 +3301,11 @@ static int mtk_probe(struct platform_dev
|
@@ -3294,10 +3294,11 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
||||||
(trxd.rxd2 & RX_DMA_VTAG))
|
(trxd.rxd2 & RX_DMA_VTAG))
|
||||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||||
@@ -3301,7 +3307,7 @@ static int mtk_probe(struct platform_dev
|
@@ -3294,7 +3300,7 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
mediatek,hifsys = <&hifsys>;
|
mediatek,hifsys = <&hifsys>;
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3188,7 +3188,7 @@ static int mtk_probe(struct platform_dev
|
@@ -3181,7 +3181,7 @@ static int mtk_probe(struct platform_dev
|
||||||
struct regmap *cci;
|
struct regmap *cci;
|
||||||
|
|
||||||
cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
|
cci = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
|
||||||
|
@ -85,7 +85,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
eth->scratch_ring = NULL;
|
eth->scratch_ring = NULL;
|
||||||
eth->phy_scratch_ring = 0;
|
eth->phy_scratch_ring = 0;
|
||||||
}
|
}
|
||||||
@@ -3391,6 +3394,9 @@ static const struct mtk_soc_data mt2701_
|
@@ -3384,6 +3387,9 @@ static const struct mtk_soc_data mt2701_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7621_data = {
|
static const struct mtk_soc_data mt7621_data = {
|
||||||
@@ -3399,6 +3405,9 @@ static const struct mtk_soc_data mt7621_
|
@@ -3392,6 +3398,9 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -105,7 +105,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7622_data = {
|
static const struct mtk_soc_data mt7622_data = {
|
||||||
@@ -3408,6 +3417,9 @@ static const struct mtk_soc_data mt7622_
|
@@ -3401,6 +3410,9 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_clks = MT7622_CLKS_BITMAP,
|
.required_clks = MT7622_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -115,7 +115,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7623_data = {
|
static const struct mtk_soc_data mt7623_data = {
|
||||||
@@ -3416,6 +3428,9 @@ static const struct mtk_soc_data mt7623_
|
@@ -3409,6 +3421,9 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -125,7 +125,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7629_data = {
|
static const struct mtk_soc_data mt7629_data = {
|
||||||
@@ -3424,6 +3439,9 @@ static const struct mtk_soc_data mt7629_
|
@@ -3417,6 +3432,9 @@ static const struct mtk_soc_data mt7629_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7629_CLKS_BITMAP,
|
.required_clks = MT7629_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -135,7 +135,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data rt5350_data = {
|
static const struct mtk_soc_data rt5350_data = {
|
||||||
@@ -3431,6 +3449,9 @@ static const struct mtk_soc_data rt5350_
|
@@ -3424,6 +3442,9 @@ static const struct mtk_soc_data rt5350_
|
||||||
.hw_features = MTK_HW_FEATURES_MT7628,
|
.hw_features = MTK_HW_FEATURES_MT7628,
|
||||||
.required_clks = MT7628_CLKS_BITMAP,
|
.required_clks = MT7628_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
|
@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
ring->dma = NULL;
|
ring->dma = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3406,6 +3405,7 @@ static const struct mtk_soc_data mt2701_
|
@@ -3399,6 +3398,7 @@ static const struct mtk_soc_data mt2701_
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3417,6 +3417,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -3410,6 +3410,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3429,6 +3430,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -3422,6 +3423,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@ -58,7 +58,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3440,6 +3442,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -3433,6 +3435,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@ -66,7 +66,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3451,6 +3454,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -3444,6 +3447,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@ -74,7 +74,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3461,6 +3465,7 @@ static const struct mtk_soc_data rt5350_
|
@@ -3454,6 +3458,7 @@ static const struct mtk_soc_data rt5350_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
|
@ -507,7 +507,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
mtk_w32(eth, 0x21021000, MTK_FE_INT_GRP);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -3171,14 +3234,6 @@ static int mtk_probe(struct platform_dev
|
@@ -3164,14 +3227,6 @@ static int mtk_probe(struct platform_dev
|
||||||
if (IS_ERR(eth->base))
|
if (IS_ERR(eth->base))
|
||||||
return PTR_ERR(eth->base);
|
return PTR_ERR(eth->base);
|
||||||
|
|
||||||
@ -522,7 +522,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
||||||
eth->rx_dma_l4_valid = RX_DMA_L4_VALID_PDMA;
|
eth->rx_dma_l4_valid = RX_DMA_L4_VALID_PDMA;
|
||||||
eth->ip_align = NET_IP_ALIGN;
|
eth->ip_align = NET_IP_ALIGN;
|
||||||
@@ -3412,6 +3467,7 @@ static int mtk_remove(struct platform_de
|
@@ -3405,6 +3460,7 @@ static int mtk_remove(struct platform_de
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct mtk_soc_data mt2701_data = {
|
static const struct mtk_soc_data mt2701_data = {
|
||||||
@ -530,7 +530,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.caps = MT7623_CAPS | MTK_HWLRO,
|
.caps = MT7623_CAPS | MTK_HWLRO,
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
@@ -3423,6 +3479,7 @@ static const struct mtk_soc_data mt2701_
|
@@ -3416,6 +3472,7 @@ static const struct mtk_soc_data mt2701_
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7621_data = {
|
static const struct mtk_soc_data mt7621_data = {
|
||||||
@ -538,7 +538,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.caps = MT7621_CAPS,
|
.caps = MT7621_CAPS,
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
@@ -3435,6 +3492,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -3428,6 +3485,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7622_data = {
|
static const struct mtk_soc_data mt7622_data = {
|
||||||
@ -546,7 +546,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.ana_rgc3 = 0x2028,
|
.ana_rgc3 = 0x2028,
|
||||||
.caps = MT7622_CAPS | MTK_HWLRO,
|
.caps = MT7622_CAPS | MTK_HWLRO,
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
@@ -3448,6 +3506,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -3441,6 +3499,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7623_data = {
|
static const struct mtk_soc_data mt7623_data = {
|
||||||
@ -554,7 +554,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.caps = MT7623_CAPS | MTK_HWLRO,
|
.caps = MT7623_CAPS | MTK_HWLRO,
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
@@ -3460,6 +3519,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -3453,6 +3512,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7629_data = {
|
static const struct mtk_soc_data mt7629_data = {
|
||||||
@ -562,7 +562,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.ana_rgc3 = 0x128,
|
.ana_rgc3 = 0x128,
|
||||||
.caps = MT7629_CAPS | MTK_HWLRO,
|
.caps = MT7629_CAPS | MTK_HWLRO,
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
@@ -3472,6 +3532,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -3465,6 +3525,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data rt5350_data = {
|
static const struct mtk_soc_data rt5350_data = {
|
||||||
|
@ -568,7 +568,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_disable_pm:
|
err_disable_pm:
|
||||||
@@ -3234,12 +3403,8 @@ static int mtk_probe(struct platform_dev
|
@@ -3227,12 +3396,8 @@ static int mtk_probe(struct platform_dev
|
||||||
if (IS_ERR(eth->base))
|
if (IS_ERR(eth->base))
|
||||||
return PTR_ERR(eth->base);
|
return PTR_ERR(eth->base);
|
||||||
|
|
||||||
@ -582,7 +582,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
spin_lock_init(ð->page_lock);
|
spin_lock_init(ð->page_lock);
|
||||||
spin_lock_init(ð->tx_irq_lock);
|
spin_lock_init(ð->tx_irq_lock);
|
||||||
@@ -3475,6 +3640,10 @@ static const struct mtk_soc_data mt2701_
|
@@ -3468,6 +3633,10 @@ static const struct mtk_soc_data mt2701_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@ -593,7 +593,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3488,6 +3657,10 @@ static const struct mtk_soc_data mt7621_
|
@@ -3481,6 +3650,10 @@ static const struct mtk_soc_data mt7621_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@ -604,7 +604,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3502,6 +3675,10 @@ static const struct mtk_soc_data mt7622_
|
@@ -3495,6 +3668,10 @@ static const struct mtk_soc_data mt7622_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@ -615,7 +615,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3515,6 +3692,10 @@ static const struct mtk_soc_data mt7623_
|
@@ -3508,6 +3685,10 @@ static const struct mtk_soc_data mt7623_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@ -626,7 +626,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3528,6 +3709,10 @@ static const struct mtk_soc_data mt7629_
|
@@ -3521,6 +3702,10 @@ static const struct mtk_soc_data mt7629_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@ -637,7 +637,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3540,6 +3725,10 @@ static const struct mtk_soc_data rt5350_
|
@@ -3533,6 +3718,10 @@ static const struct mtk_soc_data rt5350_
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
|
@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
|
void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)
|
||||||
@@ -3712,6 +3749,21 @@ static const struct mtk_soc_data mt7629_
|
@@ -3705,6 +3742,21 @@ static const struct mtk_soc_data mt7629_
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static const struct mtk_soc_data rt5350_data = {
|
static const struct mtk_soc_data rt5350_data = {
|
||||||
.reg_map = &mt7628_reg_map,
|
.reg_map = &mt7628_reg_map,
|
||||||
.caps = MT7628_CAPS,
|
.caps = MT7628_CAPS,
|
||||||
@@ -3734,6 +3786,7 @@ const struct of_device_id of_mtk_match[]
|
@@ -3727,6 +3779,7 @@ const struct of_device_id of_mtk_match[]
|
||||||
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
||||||
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
||||||
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
||||||
|
@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
else
|
else
|
||||||
skb_checksum_none_assert(skb);
|
skb_checksum_none_assert(skb);
|
||||||
@@ -3759,6 +3765,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -3752,6 +3758,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||||
.rx_irq_done_mask = MTK_RX_DONE_INT_V2,
|
.rx_irq_done_mask = MTK_RX_DONE_INT_V2,
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3355,6 +3355,26 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3348,6 +3348,26 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||||
|
@ -72,7 +72,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.mac_pcs_get_state = mtk_mac_pcs_get_state,
|
.mac_pcs_get_state = mtk_mac_pcs_get_state,
|
||||||
.mac_an_restart = mtk_mac_an_restart,
|
.mac_an_restart = mtk_mac_an_restart,
|
||||||
.mac_config = mtk_mac_config,
|
.mac_config = mtk_mac_config,
|
||||||
@@ -3317,6 +3269,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3310,6 +3262,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3269,6 +3269,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3262,6 +3262,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3568,9 +3568,9 @@ static int mtk_probe(struct platform_dev
|
@@ -3561,9 +3561,9 @@ static int mtk_probe(struct platform_dev
|
||||||
*/
|
*/
|
||||||
init_dummy_netdev(ð->dummy_dev);
|
init_dummy_netdev(ð->dummy_dev);
|
||||||
netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx,
|
netif_napi_add(ð->dummy_dev, ð->tx_napi, mtk_napi_tx,
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3264,7 +3264,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3257,7 +3257,6 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
/* mac config is not set */
|
/* mac config is not set */
|
||||||
mac->interface = PHY_INTERFACE_MODE_NA;
|
mac->interface = PHY_INTERFACE_MODE_NA;
|
||||||
|
@ -38,7 +38,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
|
mcr &= ~(MAC_MCR_SPEED_100 | MAC_MCR_SPEED_1000 |
|
||||||
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
|
MAC_MCR_FORCE_DPX | MAC_MCR_FORCE_TX_FC |
|
||||||
MAC_MCR_FORCE_RX_FC);
|
MAC_MCR_FORCE_RX_FC);
|
||||||
@@ -3268,9 +3278,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3261,9 +3271,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
|
|
||||||
mac->phylink_config.dev = ð->netdev[id]->dev;
|
mac->phylink_config.dev = ð->netdev[id]->dev;
|
||||||
mac->phylink_config.type = PHYLINK_NETDEV;
|
mac->phylink_config.type = PHYLINK_NETDEV;
|
||||||
|
@ -257,7 +257,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
|
static void ethsys_reset(struct mtk_eth *eth, u32 reset_bits)
|
||||||
{
|
{
|
||||||
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
|
regmap_update_bits(eth->ethsys, ETHSYS_RSTCTRL,
|
||||||
@@ -3005,6 +3122,12 @@ static int mtk_change_mtu(struct net_dev
|
@@ -2988,6 +3105,12 @@ static int mtk_change_mtu(struct net_dev
|
||||||
struct mtk_eth *eth = mac->hw;
|
struct mtk_eth *eth = mac->hw;
|
||||||
u32 mcr_cur, mcr_new;
|
u32 mcr_cur, mcr_new;
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
if (!MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
||||||
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
|
||||||
mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
|
mcr_new = mcr_cur & ~MAC_MCR_MAX_RX_MASK;
|
||||||
@@ -3332,6 +3455,7 @@ static const struct net_device_ops mtk_n
|
@@ -3314,6 +3437,7 @@ static const struct net_device_ops mtk_n
|
||||||
.ndo_poll_controller = mtk_poll_controller,
|
.ndo_poll_controller = mtk_poll_controller,
|
||||||
#endif
|
#endif
|
||||||
.ndo_setup_tc = mtk_eth_setup_tc,
|
.ndo_setup_tc = mtk_eth_setup_tc,
|
||||||
|
@ -304,7 +304,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
mtk_tx_unmap(eth, tx_buf, true);
|
mtk_tx_unmap(eth, tx_buf, true);
|
||||||
@@ -3478,6 +3627,7 @@ static const struct net_device_ops mtk_n
|
@@ -3460,6 +3609,7 @@ static const struct net_device_ops mtk_n
|
||||||
#endif
|
#endif
|
||||||
.ndo_setup_tc = mtk_eth_setup_tc,
|
.ndo_setup_tc = mtk_eth_setup_tc,
|
||||||
.ndo_bpf = mtk_xdp,
|
.ndo_bpf = mtk_xdp,
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
MediaTek SoC family.
|
MediaTek SoC family.
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3488,11 +3488,18 @@ static void mtk_get_strings(struct net_d
|
@@ -3471,11 +3471,18 @@ static void mtk_get_strings(struct net_d
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (stringset) {
|
switch (stringset) {
|
||||||
@ -46,7 +46,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3500,13 +3507,35 @@ static void mtk_get_strings(struct net_d
|
@@ -3483,13 +3490,35 @@ static void mtk_get_strings(struct net_d
|
||||||
static int mtk_get_sset_count(struct net_device *dev, int sset)
|
static int mtk_get_sset_count(struct net_device *dev, int sset)
|
||||||
{
|
{
|
||||||
switch (sset) {
|
switch (sset) {
|
||||||
@ -84,7 +84,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void mtk_get_ethtool_stats(struct net_device *dev,
|
static void mtk_get_ethtool_stats(struct net_device *dev,
|
||||||
struct ethtool_stats *stats, u64 *data)
|
struct ethtool_stats *stats, u64 *data)
|
||||||
{
|
{
|
||||||
@@ -3534,6 +3563,8 @@ static void mtk_get_ethtool_stats(struct
|
@@ -3517,6 +3546,8 @@ static void mtk_get_ethtool_stats(struct
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
|
for (i = 0; i < ARRAY_SIZE(mtk_ethtool_stats); i++)
|
||||||
*data_dst++ = *(data_src + mtk_ethtool_stats[i].offset);
|
*data_dst++ = *(data_src + mtk_ethtool_stats[i].offset);
|
||||||
|
@ -84,7 +84,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
refcount_set(ð->dma_refcnt, 1);
|
refcount_set(ð->dma_refcnt, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -4048,7 +4053,9 @@ static int mtk_probe(struct platform_dev
|
@@ -4041,7 +4046,9 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4151,6 +4151,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4144,6 +4144,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -52,7 +52,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4169,6 +4170,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4162,6 +4163,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_clks = MT7622_CLKS_BITMAP,
|
.required_clks = MT7622_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -60,7 +60,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4186,6 +4188,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4179,6 +4181,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
@ -68,7 +68,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4219,6 +4222,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4212,6 +4215,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.caps = MT7986_CAPS,
|
.caps = MT7986_CAPS,
|
||||||
.required_clks = MT7986_CLKS_BITMAP,
|
.required_clks = MT7986_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
|
@ -100,7 +100,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -4053,12 +4058,19 @@ static int mtk_probe(struct platform_dev
|
@@ -4046,12 +4051,19 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -39,7 +39,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* strings used by ethtool */
|
/* strings used by ethtool */
|
||||||
@@ -3970,16 +3978,12 @@ static int mtk_probe(struct platform_dev
|
@@ -3963,16 +3971,12 @@ static int mtk_probe(struct platform_dev
|
||||||
for (i = 0;; i++) {
|
for (i = 0;; i++) {
|
||||||
struct device_node *np = of_parse_phandle(pdev->dev.of_node,
|
struct device_node *np = of_parse_phandle(pdev->dev.of_node,
|
||||||
"mediatek,wed", i);
|
"mediatek,wed", i);
|
||||||
|
@ -21,7 +21,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4168,6 +4168,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4161,6 +4161,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -29,7 +29,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4187,6 +4188,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4180,6 +4181,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -37,7 +37,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4205,6 +4207,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4198,6 +4200,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3895,6 +3895,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
@@ -3888,6 +3888,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||||
|
|
||||||
static int mtk_probe(struct platform_device *pdev)
|
static int mtk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
struct device_node *mac_np;
|
struct device_node *mac_np;
|
||||||
struct mtk_eth *eth;
|
struct mtk_eth *eth;
|
||||||
int err, i;
|
int err, i;
|
||||||
@@ -3975,16 +3976,31 @@ static int mtk_probe(struct platform_dev
|
@@ -3968,16 +3969,31 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
|
if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED)
|
||||||
mtk_ppe_check_skb(eth->ppe[0], skb, hash);
|
mtk_ppe_check_skb(eth->ppe[0], skb, hash);
|
||||||
|
|
||||||
@@ -4184,7 +4185,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4177,7 +4178,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -58,7 +58,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4204,7 +4205,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4197,7 +4198,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -67,7 +67,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4223,7 +4224,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4216,7 +4217,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -76,7 +76,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4255,9 +4256,11 @@ static const struct mtk_soc_data mt7986_
|
@@ -4248,9 +4249,11 @@ static const struct mtk_soc_data mt7986_
|
||||||
.reg_map = &mt7986_reg_map,
|
.reg_map = &mt7986_reg_map,
|
||||||
.ana_rgc3 = 0x128,
|
.ana_rgc3 = 0x128,
|
||||||
.caps = MT7986_CAPS,
|
.caps = MT7986_CAPS,
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4259,6 +4259,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4252,6 +4252,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7986_CLKS_BITMAP,
|
.required_clks = MT7986_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4011,19 +4011,23 @@ static int mtk_probe(struct platform_dev
|
@@ -4004,19 +4004,23 @@ static int mtk_probe(struct platform_dev
|
||||||
eth->irq[i] = platform_get_irq(pdev, i);
|
eth->irq[i] = platform_get_irq(pdev, i);
|
||||||
if (eth->irq[i] < 0) {
|
if (eth->irq[i] < 0) {
|
||||||
dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
|
dev_err(&pdev->dev, "no IRQ%d resource found\n", i);
|
||||||
@ -45,7 +45,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
eth->clks[i] = NULL;
|
eth->clks[i] = NULL;
|
||||||
}
|
}
|
||||||
@@ -4034,7 +4038,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4027,7 +4031,7 @@ static int mtk_probe(struct platform_dev
|
||||||
|
|
||||||
err = mtk_hw_init(eth);
|
err = mtk_hw_init(eth);
|
||||||
if (err)
|
if (err)
|
||||||
@ -54,7 +54,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
eth->hwlro = MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO);
|
eth->hwlro = MTK_HAS_CAPS(eth->soc->caps, MTK_HWLRO);
|
||||||
|
|
||||||
@@ -4132,6 +4136,8 @@ err_free_dev:
|
@@ -4125,6 +4129,8 @@ err_free_dev:
|
||||||
mtk_free_dev(eth);
|
mtk_free_dev(eth);
|
||||||
err_deinit_hw:
|
err_deinit_hw:
|
||||||
mtk_hw_deinit(eth);
|
mtk_hw_deinit(eth);
|
||||||
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -4151,6 +4157,7 @@ static int mtk_remove(struct platform_de
|
@@ -4144,6 +4150,7 @@ static int mtk_remove(struct platform_de
|
||||||
phylink_disconnect_phy(mac->phylink);
|
phylink_disconnect_phy(mac->phylink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
/* Indicates CDM to parse the MTK special tag from CPU
|
/* Indicates CDM to parse the MTK special tag from CPU
|
||||||
* which also is working out for untag packets.
|
* which also is working out for untag packets.
|
||||||
@@ -3367,7 +3399,6 @@ static int mtk_change_mtu(struct net_dev
|
@@ -3350,7 +3382,6 @@ static int mtk_change_mtu(struct net_dev
|
||||||
int length = new_mtu + MTK_RX_ETH_HLEN;
|
int length = new_mtu + MTK_RX_ETH_HLEN;
|
||||||
struct mtk_mac *mac = netdev_priv(dev);
|
struct mtk_mac *mac = netdev_priv(dev);
|
||||||
struct mtk_eth *eth = mac->hw;
|
struct mtk_eth *eth = mac->hw;
|
||||||
@ -71,7 +71,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
if (rcu_access_pointer(eth->prog) &&
|
if (rcu_access_pointer(eth->prog) &&
|
||||||
length > MTK_PP_MAX_BUF_SIZE) {
|
length > MTK_PP_MAX_BUF_SIZE) {
|
||||||
@@ -3375,23 +3406,7 @@ static int mtk_change_mtu(struct net_dev
|
@@ -3358,23 +3389,7 @@ static int mtk_change_mtu(struct net_dev
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3437,11 +3437,8 @@ static void mtk_pending_work(struct work
|
@@ -3420,11 +3420,8 @@ static void mtk_pending_work(struct work
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
||||||
dev_dbg(eth->dev, "[%s][%d] reset\n", __func__, __LINE__);
|
dev_dbg(eth->dev, "[%s][%d] reset\n", __func__, __LINE__);
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
@@ -3475,7 +3472,7 @@ static void mtk_pending_work(struct work
|
@@ -3458,7 +3455,7 @@ static void mtk_pending_work(struct work
|
||||||
|
|
||||||
dev_dbg(eth->dev, "[%s][%d] reset done\n", __func__, __LINE__);
|
dev_dbg(eth->dev, "[%s][%d] reset done\n", __func__, __LINE__);
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
|
||||||
/* Set FE to PDMAv2 if necessary */
|
/* Set FE to PDMAv2 if necessary */
|
||||||
@@ -3465,7 +3517,7 @@ static void mtk_pending_work(struct work
|
@@ -3448,7 +3500,7 @@ static void mtk_pending_work(struct work
|
||||||
if (eth->dev->pins)
|
if (eth->dev->pins)
|
||||||
pinctrl_select_state(eth->dev->pins->p,
|
pinctrl_select_state(eth->dev->pins->p,
|
||||||
eth->dev->pins->default_state);
|
eth->dev->pins->default_state);
|
||||||
@ -96,7 +96,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
/* restart DMA and enable IRQs */
|
/* restart DMA and enable IRQs */
|
||||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||||
@@ -4057,7 +4109,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4050,7 +4102,7 @@ static int mtk_probe(struct platform_dev
|
||||||
eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
|
eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);
|
||||||
INIT_WORK(ð->pending_work, mtk_pending_work);
|
INIT_WORK(ð->pending_work, mtk_pending_work);
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -3489,30 +3508,53 @@ static int mtk_do_ioctl(struct net_devic
|
@@ -3472,30 +3491,53 @@ static int mtk_do_ioctl(struct net_devic
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
if (eth->dev->pins)
|
if (eth->dev->pins)
|
||||||
pinctrl_select_state(eth->dev->pins->p,
|
pinctrl_select_state(eth->dev->pins->p,
|
||||||
@@ -3523,15 +3565,19 @@ static void mtk_pending_work(struct work
|
@@ -3506,15 +3548,19 @@ static void mtk_pending_work(struct work
|
||||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||||
if (!test_bit(i, &restart))
|
if (!test_bit(i, &restart))
|
||||||
continue;
|
continue;
|
||||||
|
@ -152,7 +152,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
static int mtk_hw_init(struct mtk_eth *eth, bool reset)
|
static int mtk_hw_init(struct mtk_eth *eth, bool reset)
|
||||||
{
|
{
|
||||||
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
u32 dma_mask = ETHSYS_DMA_AG_MAP_PDMA | ETHSYS_DMA_AG_MAP_QDMA |
|
||||||
@@ -3615,6 +3717,7 @@ static int mtk_cleanup(struct mtk_eth *e
|
@@ -3598,6 +3700,7 @@ static int mtk_cleanup(struct mtk_eth *e
|
||||||
mtk_unreg_dev(eth);
|
mtk_unreg_dev(eth);
|
||||||
mtk_free_dev(eth);
|
mtk_free_dev(eth);
|
||||||
cancel_work_sync(ð->pending_work);
|
cancel_work_sync(ð->pending_work);
|
||||||
@ -160,7 +160,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -4042,6 +4145,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4035,6 +4138,7 @@ static int mtk_probe(struct platform_dev
|
||||||
|
|
||||||
eth->rx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
eth->rx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
||||||
INIT_WORK(ð->rx_dim.work, mtk_dim_rx);
|
INIT_WORK(ð->rx_dim.work, mtk_dim_rx);
|
||||||
@ -168,7 +168,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
eth->tx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
eth->tx_dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
|
||||||
INIT_WORK(ð->tx_dim.work, mtk_dim_tx);
|
INIT_WORK(ð->tx_dim.work, mtk_dim_tx);
|
||||||
@@ -4246,6 +4350,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4239,6 +4343,8 @@ static int mtk_probe(struct platform_dev
|
||||||
NAPI_POLL_WEIGHT);
|
NAPI_POLL_WEIGHT);
|
||||||
|
|
||||||
platform_set_drvdata(pdev, eth);
|
platform_set_drvdata(pdev, eth);
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3646,6 +3646,11 @@ static void mtk_pending_work(struct work
|
@@ -3629,6 +3629,11 @@ static void mtk_pending_work(struct work
|
||||||
set_bit(MTK_RESETTING, ð->state);
|
set_bit(MTK_RESETTING, ð->state);
|
||||||
|
|
||||||
mtk_prepare_for_reset(eth);
|
mtk_prepare_for_reset(eth);
|
||||||
@ -26,7 +26,7 @@ Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||||||
|
|
||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||||
@@ -3683,6 +3688,8 @@ static void mtk_pending_work(struct work
|
@@ -3666,6 +3671,8 @@ static void mtk_pending_work(struct work
|
||||||
|
|
||||||
clear_bit(MTK_RESETTING, ð->state);
|
clear_bit(MTK_RESETTING, ð->state);
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4428,7 +4428,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4421,7 +4421,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -21,7 +21,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
@@ -4467,7 +4467,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4460,7 +4460,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
|
@ -489,7 +489,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3717,8 +3873,12 @@ static int mtk_unreg_dev(struct mtk_eth
|
@@ -3700,8 +3856,12 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
for (i = 0; i < MTK_MAC_COUNT; i++) {
|
||||||
@ -502,7 +502,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
unregister_netdev(eth->netdev[i]);
|
unregister_netdev(eth->netdev[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3935,6 +4095,23 @@ static int mtk_set_rxnfc(struct net_devi
|
@@ -3918,6 +4078,23 @@ static int mtk_set_rxnfc(struct net_devi
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,7 +526,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
static const struct ethtool_ops mtk_ethtool_ops = {
|
static const struct ethtool_ops mtk_ethtool_ops = {
|
||||||
.get_link_ksettings = mtk_get_link_ksettings,
|
.get_link_ksettings = mtk_get_link_ksettings,
|
||||||
.set_link_ksettings = mtk_set_link_ksettings,
|
.set_link_ksettings = mtk_set_link_ksettings,
|
||||||
@@ -3970,6 +4147,7 @@ static const struct net_device_ops mtk_n
|
@@ -3952,6 +4129,7 @@ static const struct net_device_ops mtk_n
|
||||||
.ndo_setup_tc = mtk_eth_setup_tc,
|
.ndo_setup_tc = mtk_eth_setup_tc,
|
||||||
.ndo_bpf = mtk_xdp,
|
.ndo_bpf = mtk_xdp,
|
||||||
.ndo_xdp_xmit = mtk_xdp_xmit,
|
.ndo_xdp_xmit = mtk_xdp_xmit,
|
||||||
@ -534,7 +534,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||||
@@ -3979,6 +4157,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3961,6 +4139,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
struct phylink *phylink;
|
struct phylink *phylink;
|
||||||
struct mtk_mac *mac;
|
struct mtk_mac *mac;
|
||||||
int id, err;
|
int id, err;
|
||||||
@ -542,7 +542,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (!_id) {
|
if (!_id) {
|
||||||
dev_err(eth->dev, "missing mac id\n");
|
dev_err(eth->dev, "missing mac id\n");
|
||||||
@@ -3996,7 +4175,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3978,7 +4157,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,7 +554,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!eth->netdev[id]) {
|
if (!eth->netdev[id]) {
|
||||||
dev_err(eth->dev, "alloc_etherdev failed\n");
|
dev_err(eth->dev, "alloc_etherdev failed\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -4093,6 +4275,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4086,6 +4268,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
else
|
else
|
||||||
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
|
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
/* Enable RX VLan Offloading */
|
/* Enable RX VLan Offloading */
|
||||||
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
||||||
@@ -3865,6 +3925,12 @@ static int mtk_free_dev(struct mtk_eth *
|
@@ -3848,6 +3908,12 @@ static int mtk_free_dev(struct mtk_eth *
|
||||||
free_netdev(eth->netdev[i]);
|
free_netdev(eth->netdev[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mtk_eth_path_name(path), __func__, updated);
|
mtk_eth_path_name(path), __func__, updated);
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4755,6 +4755,26 @@ static const struct mtk_soc_data mt7629_
|
@@ -4748,6 +4748,26 @@ static const struct mtk_soc_data mt7629_
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
static const struct mtk_soc_data mt7986_data = {
|
static const struct mtk_soc_data mt7986_data = {
|
||||||
.reg_map = &mt7986_reg_map,
|
.reg_map = &mt7986_reg_map,
|
||||||
.ana_rgc3 = 0x128,
|
.ana_rgc3 = 0x128,
|
||||||
@@ -4797,6 +4817,7 @@ const struct of_device_id of_mtk_match[]
|
@@ -4790,6 +4810,7 @@ const struct of_device_id of_mtk_match[]
|
||||||
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
{ .compatible = "mediatek,mt7622-eth", .data = &mt7622_data},
|
||||||
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
{ .compatible = "mediatek,mt7623-eth", .data = &mt7623_data},
|
||||||
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
{ .compatible = "mediatek,mt7629-eth", .data = &mt7629_data},
|
||||||
|
@ -60,7 +60,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -3977,8 +3978,17 @@ static int mtk_unreg_dev(struct mtk_eth
|
@@ -3960,8 +3961,17 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
mtk_unreg_dev(eth);
|
mtk_unreg_dev(eth);
|
||||||
mtk_free_dev(eth);
|
mtk_free_dev(eth);
|
||||||
cancel_work_sync(ð->pending_work);
|
cancel_work_sync(ð->pending_work);
|
||||||
@@ -4408,6 +4418,36 @@ void mtk_eth_set_dma_device(struct mtk_e
|
@@ -4401,6 +4411,36 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
static int mtk_probe(struct platform_device *pdev)
|
static int mtk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct resource *res = NULL;
|
struct resource *res = NULL;
|
||||||
@@ -4471,13 +4511,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4464,13 +4504,7 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SGMII)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SGMII)) {
|
||||||
@ -130,7 +130,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@@ -4488,14 +4522,17 @@ static int mtk_probe(struct platform_dev
|
@@ -4481,14 +4515,17 @@ static int mtk_probe(struct platform_dev
|
||||||
"mediatek,pctl");
|
"mediatek,pctl");
|
||||||
if (IS_ERR(eth->pctl)) {
|
if (IS_ERR(eth->pctl)) {
|
||||||
dev_err(&pdev->dev, "no pctl regmap found\n");
|
dev_err(&pdev->dev, "no pctl regmap found\n");
|
||||||
@ -151,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
@@ -4655,6 +4692,8 @@ err_deinit_hw:
|
@@ -4648,6 +4685,8 @@ err_deinit_hw:
|
||||||
mtk_hw_deinit(eth);
|
mtk_hw_deinit(eth);
|
||||||
err_wed_exit:
|
err_wed_exit:
|
||||||
mtk_wed_exit();
|
mtk_wed_exit();
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
From e7731194fdf085f46d58b1adccfddbd0dfee4873 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
||||||
Date: Fri, 7 Jul 2023 08:53:25 +0200
|
|
||||||
Subject: [PATCH] net: bgmac: postpone turning IRQs off to avoid SoC hangs
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Turning IRQs off is done by accessing Ethernet controller registers.
|
|
||||||
That can't be done until device's clock is enabled. It results in a SoC
|
|
||||||
hang otherwise.
|
|
||||||
|
|
||||||
This bug remained unnoticed for years as most bootloaders keep all
|
|
||||||
Ethernet interfaces turned on. It seems to only affect a niche SoC
|
|
||||||
family BCM47189. It has two Ethernet controllers but CFE bootloader uses
|
|
||||||
only the first one.
|
|
||||||
|
|
||||||
Fixes: 34322615cbaa ("net: bgmac: Mask interrupts during probe")
|
|
||||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
||||||
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
|
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
||||||
---
|
|
||||||
drivers/net/ethernet/broadcom/bgmac.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
@@ -1492,8 +1492,6 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
|
||||||
|
|
||||||
bgmac->in_init = true;
|
|
||||||
|
|
||||||
- bgmac_chip_intrs_off(bgmac);
|
|
||||||
-
|
|
||||||
net_dev->irq = bgmac->irq;
|
|
||||||
SET_NETDEV_DEV(net_dev, bgmac->dev);
|
|
||||||
dev_set_drvdata(bgmac->dev, bgmac);
|
|
||||||
@@ -1511,6 +1509,8 @@ int bgmac_enet_probe(struct bgmac *bgmac
|
|
||||||
*/
|
|
||||||
bgmac_clk_enable(bgmac, 0);
|
|
||||||
|
|
||||||
+ bgmac_chip_intrs_off(bgmac);
|
|
||||||
+
|
|
||||||
/* This seems to be fixing IRQ by assigning OOB #6 to the core */
|
|
||||||
if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
|
|
||||||
if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)
|
|
@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
stmmac_clear_tx_descriptors(priv, queue);
|
stmmac_clear_tx_descriptors(priv, queue);
|
||||||
|
|
||||||
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
|
||||||
@@ -7417,6 +7412,25 @@ int stmmac_suspend(struct device *dev)
|
@@ -7411,6 +7406,25 @@ int stmmac_suspend(struct device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(stmmac_suspend);
|
EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
/**
|
/**
|
||||||
* stmmac_reset_queues_param - reset queue parameters
|
* stmmac_reset_queues_param - reset queue parameters
|
||||||
* @priv: device pointer
|
* @priv: device pointer
|
||||||
@@ -7427,22 +7441,11 @@ static void stmmac_reset_queues_param(st
|
@@ -7421,22 +7435,11 @@ static void stmmac_reset_queues_param(st
|
||||||
u32 tx_cnt = priv->plat->tx_queues_to_use;
|
u32 tx_cnt = priv->plat->tx_queues_to_use;
|
||||||
u32 queue;
|
u32 queue;
|
||||||
|
|
||||||
|
@ -1210,7 +1210,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (netif_running(dev))
|
if (netif_running(dev))
|
||||||
ret = stmmac_open(dev);
|
ret = stmmac_open(dev);
|
||||||
@@ -7363,7 +7367,7 @@ int stmmac_suspend(struct device *dev)
|
@@ -7357,7 +7361,7 @@ int stmmac_suspend(struct device *dev)
|
||||||
stmmac_disable_all_queues(priv);
|
stmmac_disable_all_queues(priv);
|
||||||
|
|
||||||
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
|
||||||
@ -1219,7 +1219,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (priv->eee_enabled) {
|
if (priv->eee_enabled) {
|
||||||
priv->tx_path_in_lpi_mode = false;
|
priv->tx_path_in_lpi_mode = false;
|
||||||
@@ -7414,7 +7418,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend);
|
@@ -7408,7 +7412,7 @@ EXPORT_SYMBOL_GPL(stmmac_suspend);
|
||||||
|
|
||||||
static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)
|
static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)
|
||||||
{
|
{
|
||||||
@ -1228,7 +1228,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
rx_q->cur_rx = 0;
|
rx_q->cur_rx = 0;
|
||||||
rx_q->dirty_rx = 0;
|
rx_q->dirty_rx = 0;
|
||||||
@@ -7422,7 +7426,7 @@ static void stmmac_reset_rx_queue(struct
|
@@ -7416,7 +7420,7 @@ static void stmmac_reset_rx_queue(struct
|
||||||
|
|
||||||
static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)
|
static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)
|
||||||
{
|
{
|
||||||
|
@ -1150,7 +1150,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
dma_desc_error:
|
dma_desc_error:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -7509,7 +7625,7 @@ int stmmac_resume(struct device *dev)
|
@@ -7503,7 +7619,7 @@ int stmmac_resume(struct device *dev)
|
||||||
stmmac_reset_queues_param(priv);
|
stmmac_reset_queues_param(priv);
|
||||||
|
|
||||||
stmmac_free_tx_skbufs(priv);
|
stmmac_free_tx_skbufs(priv);
|
||||||
|
@ -143,7 +143,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/scripts/mod/modpost.c
|
--- a/scripts/mod/modpost.c
|
||||||
+++ b/scripts/mod/modpost.c
|
+++ b/scripts/mod/modpost.c
|
||||||
@@ -2036,7 +2036,9 @@ static void read_symbols(const char *mod
|
@@ -2000,7 +2000,9 @@ static void read_symbols(const char *mod
|
||||||
symname = remove_dot(info.strtab + sym->st_name);
|
symname = remove_dot(info.strtab + sym->st_name);
|
||||||
|
|
||||||
handle_symbol(mod, &info, sym, symname);
|
handle_symbol(mod, &info, sym, symname);
|
||||||
@ -153,7 +153,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
|
for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
|
||||||
@@ -2215,8 +2217,10 @@ static void add_header(struct buffer *b,
|
@@ -2179,8 +2181,10 @@ static void add_header(struct buffer *b,
|
||||||
buf_printf(b, "BUILD_SALT;\n");
|
buf_printf(b, "BUILD_SALT;\n");
|
||||||
buf_printf(b, "BUILD_LTO_INFO;\n");
|
buf_printf(b, "BUILD_LTO_INFO;\n");
|
||||||
buf_printf(b, "\n");
|
buf_printf(b, "\n");
|
||||||
@ -164,7 +164,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
buf_printf(b, "\n");
|
buf_printf(b, "\n");
|
||||||
buf_printf(b, "__visible struct module __this_module\n");
|
buf_printf(b, "__visible struct module __this_module\n");
|
||||||
buf_printf(b, "__section(\".gnu.linkonce.this_module\") = {\n");
|
buf_printf(b, "__section(\".gnu.linkonce.this_module\") = {\n");
|
||||||
@@ -2233,8 +2237,10 @@ static void add_header(struct buffer *b,
|
@@ -2197,8 +2201,10 @@ static void add_header(struct buffer *b,
|
||||||
|
|
||||||
static void add_intree_flag(struct buffer *b, int is_intree)
|
static void add_intree_flag(struct buffer *b, int is_intree)
|
||||||
{
|
{
|
||||||
@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Cannot check for assembler */
|
/* Cannot check for assembler */
|
||||||
@@ -2247,8 +2253,10 @@ static void add_retpoline(struct buffer
|
@@ -2211,8 +2217,10 @@ static void add_retpoline(struct buffer
|
||||||
|
|
||||||
static void add_staging_flag(struct buffer *b, const char *name)
|
static void add_staging_flag(struct buffer *b, const char *name)
|
||||||
{
|
{
|
||||||
@ -186,7 +186,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2328,11 +2336,13 @@ static void add_depends(struct buffer *b
|
@@ -2292,11 +2300,13 @@ static void add_depends(struct buffer *b
|
||||||
|
|
||||||
static void add_srcversion(struct buffer *b, struct module *mod)
|
static void add_srcversion(struct buffer *b, struct module *mod)
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void write_buf(struct buffer *b, const char *fname)
|
static void write_buf(struct buffer *b, const char *fname)
|
||||||
@@ -2581,7 +2591,9 @@ int main(int argc, char **argv)
|
@@ -2545,7 +2555,9 @@ int main(int argc, char **argv)
|
||||||
add_staging_flag(&buf, mod->name);
|
add_staging_flag(&buf, mod->name);
|
||||||
add_versions(&buf, mod);
|
add_versions(&buf, mod);
|
||||||
add_depends(&buf, mod);
|
add_depends(&buf, mod);
|
||||||
|
@ -125,7 +125,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/property.h>
|
#include <linux/property.h>
|
||||||
@@ -3360,3 +3361,5 @@ static int __init regmap_initcall(void)
|
@@ -3358,3 +3359,5 @@ static int __init regmap_initcall(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
postcore_initcall(regmap_initcall);
|
postcore_initcall(regmap_initcall);
|
||||||
|
@ -29,7 +29,7 @@ Subject: [PATCH] net/usb/qmi_wwan: add MeigLink modem support
|
|||||||
|
|
||||||
#define QUECTEL_VENDOR_ID 0x2c7c
|
#define QUECTEL_VENDOR_ID 0x2c7c
|
||||||
/* These Quectel products use Quectel's vendor ID */
|
/* These Quectel products use Quectel's vendor ID */
|
||||||
@@ -1173,6 +1175,11 @@ static const struct usb_device_id option
|
@@ -1177,6 +1179,11 @@ static const struct usb_device_id option
|
||||||
.driver_info = ZLP },
|
.driver_info = ZLP },
|
||||||
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
|
||||||
.driver_info = RSVD(4) },
|
.driver_info = RSVD(4) },
|
||||||
|
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -3866,6 +3866,8 @@ static __net_initdata struct pernet_oper
|
@@ -3877,6 +3877,8 @@ static __net_initdata struct pernet_oper
|
||||||
|
|
||||||
static int __init proto_init(void)
|
static int __init proto_init(void)
|
||||||
{
|
{
|
||||||
|
@ -1,121 +0,0 @@
|
|||||||
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)
|
|
@ -20,7 +20,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
|||||||
|
|
||||||
--- a/net/core/of_net.c
|
--- a/net/core/of_net.c
|
||||||
+++ b/net/core/of_net.c
|
+++ b/net/core/of_net.c
|
||||||
@@ -119,27 +119,62 @@ static int of_get_mac_addr_nvmem(struct
|
@@ -119,28 +119,63 @@ static int of_get_mac_addr_nvmem(struct
|
||||||
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
|
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
|
||||||
* but is all zeros.
|
* but is all zeros.
|
||||||
*
|
*
|
||||||
@ -87,3 +87,4 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
|||||||
+ return ret;
|
+ return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_get_mac_address);
|
EXPORT_SYMBOL(of_get_mac_address);
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@@ -4673,6 +4673,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4666,6 +4666,8 @@ static int mtk_probe(struct platform_dev
|
||||||
* for NAPI to work
|
* for NAPI to work
|
||||||
*/
|
*/
|
||||||
init_dummy_netdev(ð->dummy_dev);
|
init_dummy_netdev(ð->dummy_dev);
|
||||||
|
@ -161,7 +161,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
struct rtnl_link {
|
struct rtnl_link {
|
||||||
rtnl_doit_func doit;
|
rtnl_doit_func doit;
|
||||||
@@ -4706,7 +4706,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
@@ -4712,7 +4712,9 @@ int ndo_dflt_bridge_getlink(struct sk_bu
|
||||||
brport_nla_put_flag(skb, flags, mask,
|
brport_nla_put_flag(skb, flags, mask,
|
||||||
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
|
||||||
brport_nla_put_flag(skb, flags, mask,
|
brport_nla_put_flag(skb, flags, mask,
|
||||||
|
@ -53,7 +53,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4642,8 +4642,8 @@ static int mtk_probe(struct platform_dev
|
@@ -4635,8 +4635,8 @@ static int mtk_probe(struct platform_dev
|
||||||
for (i = 0; i < num_ppe; i++) {
|
for (i = 0; i < num_ppe; i++) {
|
||||||
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
u32 ppe_addr = eth->soc->reg_map->ppe_base + i * 0x400;
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||||||
if (!eth->ppe[i]) {
|
if (!eth->ppe[i]) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto err_free_dev;
|
goto err_free_dev;
|
||||||
@@ -4770,6 +4770,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4763,6 +4763,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -72,7 +72,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@@ -4807,6 +4808,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -4800,6 +4801,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7629_CLKS_BITMAP,
|
.required_clks = MT7629_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -80,7 +80,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4827,6 +4829,7 @@ static const struct mtk_soc_data mt7981_
|
@@ -4820,6 +4822,7 @@ static const struct mtk_soc_data mt7981_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
@ -88,7 +88,7 @@ v2: fix wrong variable name in return value check spotted by Denis Kirjanov
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||||
@@ -4847,6 +4850,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4840,6 +4843,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
|
@ -180,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
/* set interrupt delays based on current Net DIM sample */
|
/* set interrupt delays based on current Net DIM sample */
|
||||||
mtk_dim_rx(ð->rx_dim.work);
|
mtk_dim_rx(ð->rx_dim.work);
|
||||||
@@ -4365,7 +4334,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4358,7 +4327,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
eth->netdev[id]->hw_features |= NETIF_F_LRO;
|
eth->netdev[id]->hw_features |= NETIF_F_LRO;
|
||||||
|
|
||||||
eth->netdev[id]->vlan_features = eth->soc->hw_features &
|
eth->netdev[id]->vlan_features = eth->soc->hw_features &
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -3989,7 +3989,10 @@ static void mtk_sgmii_destroy(struct mtk
|
@@ -3972,7 +3972,10 @@ static void mtk_sgmii_destroy(struct mtk
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
mtk_pcs_lynxi_destroy(eth->sgmii_pcs[i]);
|
mtk_pcs_lynxi_destroy(eth->sgmii_pcs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4432,7 +4435,12 @@ static int mtk_sgmii_init(struct mtk_eth
|
@@ -4425,7 +4428,12 @@ static int mtk_sgmii_init(struct mtk_eth
|
||||||
u32 flags;
|
u32 flags;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
np = of_parse_phandle(eth->dev->of_node, "mediatek,sgmiisys", i);
|
np = of_parse_phandle(eth->dev->of_node, "mediatek,sgmiisys", i);
|
||||||
if (!np)
|
if (!np)
|
||||||
break;
|
break;
|
||||||
@@ -4477,6 +4485,18 @@ static int mtk_probe(struct platform_dev
|
@@ -4470,6 +4478,18 @@ static int mtk_probe(struct platform_dev
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
|
||||||
eth->ip_align = NET_IP_ALIGN;
|
eth->ip_align = NET_IP_ALIGN;
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
spin_lock_init(ð->page_lock);
|
spin_lock_init(ð->page_lock);
|
||||||
spin_lock_init(ð->tx_irq_lock);
|
spin_lock_init(ð->tx_irq_lock);
|
||||||
spin_lock_init(ð->rx_irq_lock);
|
spin_lock_init(ð->rx_irq_lock);
|
||||||
@@ -4662,7 +4682,7 @@ static int mtk_probe(struct platform_dev
|
@@ -4655,7 +4675,7 @@ static int mtk_probe(struct platform_dev
|
||||||
goto err_free_dev;
|
goto err_free_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -4739,6 +4759,7 @@ static const struct mtk_soc_data mt2701_
|
@@ -4732,6 +4752,7 @@ static const struct mtk_soc_data mt2701_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7623_CLKS_BITMAP,
|
.required_clks = MT7623_CLKS_BITMAP,
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4757,6 +4778,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -4750,6 +4771,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -85,7 +85,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@@ -4778,6 +4800,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -4771,6 +4793,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@ -93,7 +93,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@@ -4797,6 +4820,7 @@ static const struct mtk_soc_data mt7623_
|
@@ -4790,6 +4813,7 @@ static const struct mtk_soc_data mt7623_
|
||||||
.required_pctl = true,
|
.required_pctl = true,
|
||||||
.offload_version = 1,
|
.offload_version = 1,
|
||||||
.hash_offset = 2,
|
.hash_offset = 2,
|
||||||
@ -101,7 +101,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
.foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
@@ -4816,6 +4840,7 @@ static const struct mtk_soc_data mt7629_
|
@@ -4809,6 +4833,7 @@ static const struct mtk_soc_data mt7629_
|
||||||
.required_clks = MT7629_CLKS_BITMAP,
|
.required_clks = MT7629_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@ -109,7 +109,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma),
|
.txd_size = sizeof(struct mtk_tx_dma),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma),
|
.rxd_size = sizeof(struct mtk_rx_dma),
|
||||||
@@ -4837,6 +4862,7 @@ static const struct mtk_soc_data mt7981_
|
@@ -4830,6 +4855,7 @@ static const struct mtk_soc_data mt7981_
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
@ -117,7 +117,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.txrx = {
|
.txrx = {
|
||||||
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
.txd_size = sizeof(struct mtk_tx_dma_v2),
|
||||||
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
.rxd_size = sizeof(struct mtk_rx_dma_v2),
|
||||||
@@ -4856,6 +4882,7 @@ static const struct mtk_soc_data mt7986_
|
@@ -4849,6 +4875,7 @@ static const struct mtk_soc_data mt7986_
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
.offload_version = 2,
|
.offload_version = 2,
|
||||||
.hash_offset = 4,
|
.hash_offset = 4,
|
||||||
@ -125,7 +125,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
.foe_entry_size = sizeof(struct mtk_foe_entry),
|
||||||
.has_accounting = true,
|
.has_accounting = true,
|
||||||
.txrx = {
|
.txrx = {
|
||||||
@@ -4874,6 +4901,7 @@ static const struct mtk_soc_data rt5350_
|
@@ -4867,6 +4894,7 @@ static const struct mtk_soc_data rt5350_
|
||||||
.hw_features = MTK_HW_FEATURES_MT7628,
|
.hw_features = MTK_HW_FEATURES_MT7628,
|
||||||
.required_clks = MT7628_CLKS_BITMAP,
|
.required_clks = MT7628_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
|
@ -78,7 +78,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
struct net_device *dev = eth->netdev[i];
|
struct net_device *dev = eth->netdev[i];
|
||||||
|
|
||||||
mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
mtk_w32(eth, MAC_MCR_FORCE_LINK_DOWN, MTK_MAC_MCR(i));
|
||||||
@@ -3909,7 +3909,7 @@ static void mtk_pending_work(struct work
|
@@ -3892,7 +3892,7 @@ static void mtk_pending_work(struct work
|
||||||
mtk_prepare_for_reset(eth);
|
mtk_prepare_for_reset(eth);
|
||||||
|
|
||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
if (!eth->netdev[i] || !netif_running(eth->netdev[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -3925,7 +3925,7 @@ static void mtk_pending_work(struct work
|
@@ -3908,7 +3908,7 @@ static void mtk_pending_work(struct work
|
||||||
mtk_hw_init(eth, true);
|
mtk_hw_init(eth, true);
|
||||||
|
|
||||||
/* restart DMA and enable IRQs */
|
/* restart DMA and enable IRQs */
|
||||||
@ -96,7 +96,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
if (!test_bit(i, &restart))
|
if (!test_bit(i, &restart))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -3953,7 +3953,7 @@ static int mtk_free_dev(struct mtk_eth *
|
@@ -3936,7 +3936,7 @@ static int mtk_free_dev(struct mtk_eth *
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
free_netdev(eth->netdev[i]);
|
free_netdev(eth->netdev[i]);
|
||||||
@@ -3972,7 +3972,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
@@ -3955,7 +3955,7 @@ static int mtk_unreg_dev(struct mtk_eth
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
struct mtk_mac *mac;
|
struct mtk_mac *mac;
|
||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
@@ -4277,7 +4277,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4259,7 +4259,7 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
}
|
}
|
||||||
|
|
||||||
id = be32_to_cpup(_id);
|
id = be32_to_cpup(_id);
|
||||||
@ -123,7 +123,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
dev_err(eth->dev, "%d is not a valid mac id\n", id);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@@ -4407,7 +4407,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
@@ -4400,7 +4400,7 @@ void mtk_eth_set_dma_device(struct mtk_e
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
dev = eth->netdev[i];
|
dev = eth->netdev[i];
|
||||||
|
|
||||||
if (!dev || !(dev->flags & IFF_UP))
|
if (!dev || !(dev->flags & IFF_UP))
|
||||||
@@ -4734,7 +4734,7 @@ static int mtk_remove(struct platform_de
|
@@ -4727,7 +4727,7 @@ static int mtk_remove(struct platform_de
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* stop all devices to make sure that dma is properly shut down */
|
/* stop all devices to make sure that dma is properly shut down */
|
||||||
|
@ -182,7 +182,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
/* PSE should not drop port8 and port9 packets from WDMA Tx */
|
||||||
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
mtk_w32(eth, 0x00000300, PSE_DROP_CFG);
|
||||||
|
|
||||||
@@ -4314,7 +4379,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4307,7 +4372,11 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
}
|
}
|
||||||
spin_lock_init(&mac->hw_stats->stats_lock);
|
spin_lock_init(&mac->hw_stats->stats_lock);
|
||||||
u64_stats_init(&mac->hw_stats->syncp);
|
u64_stats_init(&mac->hw_stats->syncp);
|
||||||
|
@ -150,7 +150,7 @@ mtk_eth_soc driver.
|
|||||||
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
data |= TX_DMA_SWC_V2 | QID_BITS_V2(info->qid);
|
||||||
WRITE_ONCE(desc->txd4, data);
|
WRITE_ONCE(desc->txd4, data);
|
||||||
|
|
||||||
@@ -4964,6 +5065,25 @@ static const struct mtk_soc_data mt7986_
|
@@ -4957,6 +5058,25 @@ static const struct mtk_soc_data mt7986_
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ mtk_eth_soc driver.
|
|||||||
static const struct mtk_soc_data rt5350_data = {
|
static const struct mtk_soc_data rt5350_data = {
|
||||||
.reg_map = &mt7628_reg_map,
|
.reg_map = &mt7628_reg_map,
|
||||||
.caps = MT7628_CAPS,
|
.caps = MT7628_CAPS,
|
||||||
@@ -4982,14 +5102,15 @@ static const struct mtk_soc_data rt5350_
|
@@ -4975,14 +5095,15 @@ static const struct mtk_soc_data rt5350_
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct of_device_id of_mtk_match[] = {
|
const struct of_device_id of_mtk_match[] = {
|
||||||
|
@ -607,7 +607,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
mtk_w32(eth, val, MTK_PPSC);
|
mtk_w32(eth, val, MTK_PPSC);
|
||||||
|
|
||||||
dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
|
dev_dbg(eth->dev, "MDC is running on %d Hz\n", MDC_MAX_FREQ / divider);
|
||||||
@@ -4433,8 +4636,8 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4415,8 +4618,8 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
const __be32 *_id = of_get_property(np, "reg", NULL);
|
const __be32 *_id = of_get_property(np, "reg", NULL);
|
||||||
phy_interface_t phy_mode;
|
phy_interface_t phy_mode;
|
||||||
struct phylink *phylink;
|
struct phylink *phylink;
|
||||||
@ -617,7 +617,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
int txqs = 1;
|
int txqs = 1;
|
||||||
|
|
||||||
if (!_id) {
|
if (!_id) {
|
||||||
@@ -4525,6 +4728,32 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4518,6 +4721,32 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
mac->phylink_config.supported_interfaces);
|
mac->phylink_config.supported_interfaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,7 +650,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
phylink = phylink_create(&mac->phylink_config,
|
phylink = phylink_create(&mac->phylink_config,
|
||||||
of_fwnode_handle(mac->of_node),
|
of_fwnode_handle(mac->of_node),
|
||||||
phy_mode, &mtk_phylink_ops);
|
phy_mode, &mtk_phylink_ops);
|
||||||
@@ -4712,6 +4941,13 @@ static int mtk_probe(struct platform_dev
|
@@ -4705,6 +4934,13 @@ static int mtk_probe(struct platform_dev
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
|
|||||||
|
|
||||||
--- a/net/core/skbuff.c
|
--- a/net/core/skbuff.c
|
||||||
+++ b/net/core/skbuff.c
|
+++ b/net/core/skbuff.c
|
||||||
@@ -4347,6 +4347,15 @@ int skb_gro_receive(struct sk_buff *p, s
|
@@ -4352,6 +4352,15 @@ int skb_gro_receive(struct sk_buff *p, s
|
||||||
if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush))
|
if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush))
|
||||||
return -E2BIG;
|
return -E2BIG;
|
||||||
|
|
||||||
|
@ -116,21 +116,17 @@
|
|||||||
spi-max-frequency = <24000000>;
|
spi-max-frequency = <24000000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -103,9 +129,48 @@
|
@@ -102,6 +128,45 @@
|
||||||
|
status = "okay";
|
||||||
perst-gpio = <&tlmm 38 0x1>;
|
perst-gpio = <&tlmm 38 0x1>;
|
||||||
};
|
};
|
||||||
|
+
|
||||||
+ i2c0: i2c@78b7000 { /* BLSP1 QUP2 */
|
+ i2c0: i2c@78b7000 { /* BLSP1 QUP2 */
|
||||||
+ pinctrl-0 = <&i2c_0_pins>;
|
+ pinctrl-0 = <&i2c_0_pins>;
|
||||||
+ pinctrl-names = "default";
|
+ pinctrl-names = "default";
|
||||||
+
|
+
|
||||||
+ status = "okay";
|
+ status = "okay";
|
||||||
+ };
|
+ };
|
||||||
+
|
|
||||||
qpic-nand@79b0000 {
|
|
||||||
pinctrl-0 = <&nand_pins>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
};
|
|
||||||
+
|
+
|
||||||
+ usb3_ss_phy: ssphy@9a000 {
|
+ usb3_ss_phy: ssphy@9a000 {
|
||||||
+ status = "okay";
|
+ status = "okay";
|
||||||
@ -165,3 +161,4 @@
|
|||||||
+ };
|
+ };
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
From 72bc31aa621e21a7c36a7da8aa6f6a77bb234e0b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
|
|
||||||
Date: Wed, 6 Jul 2022 15:41:29 +0200
|
|
||||||
Subject: [PATCH] clk: qcom: reset: Allow specifying custom reset delay
|
|
||||||
|
|
||||||
The amount of time required between asserting and deasserting the reset
|
|
||||||
signal can vary depending on the involved hardware component. Sometimes
|
|
||||||
1 us might not be enough and a larger delay is necessary to conform to
|
|
||||||
the specifications.
|
|
||||||
|
|
||||||
Usually this is worked around in the consuming drivers, by replacing
|
|
||||||
reset_control_reset() with a sequence of reset_control_assert(), waiting
|
|
||||||
for a custom delay, followed by reset_control_deassert().
|
|
||||||
|
|
||||||
However, in some cases the driver making use of the reset is generic and
|
|
||||||
can be used with different reset controllers. In this case the reset
|
|
||||||
time requirement is better handled directly by the reset controller
|
|
||||||
driver.
|
|
||||||
|
|
||||||
Make this possible by adding an "udelay" field to the qcom_reset_map
|
|
||||||
that allows setting a different reset delay (in microseconds).
|
|
||||||
|
|
||||||
Signed-off-by: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
|
|
||||||
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
|
||||||
Link: https://lore.kernel.org/r/20220706134132.3623415-4-stephan.gerhold@kernkonzept.com
|
|
||||||
---
|
|
||||||
drivers/clk/qcom/reset.c | 4 +++-
|
|
||||||
drivers/clk/qcom/reset.h | 1 +
|
|
||||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/clk/qcom/reset.c
|
|
||||||
+++ b/drivers/clk/qcom/reset.c
|
|
||||||
@@ -13,8 +13,10 @@
|
|
||||||
|
|
||||||
static int qcom_reset(struct reset_controller_dev *rcdev, unsigned long id)
|
|
||||||
{
|
|
||||||
+ struct qcom_reset_controller *rst = to_qcom_reset_controller(rcdev);
|
|
||||||
+
|
|
||||||
rcdev->ops->assert(rcdev, id);
|
|
||||||
- udelay(1);
|
|
||||||
+ udelay(rst->reset_map[id].udelay ?: 1); /* use 1 us as default */
|
|
||||||
rcdev->ops->deassert(rcdev, id);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--- a/drivers/clk/qcom/reset.h
|
|
||||||
+++ b/drivers/clk/qcom/reset.h
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
struct qcom_reset_map {
|
|
||||||
unsigned int reg;
|
|
||||||
u8 bit;
|
|
||||||
+ u8 udelay;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct regmap;
|
|
@ -1,59 +0,0 @@
|
|||||||
From 813ba3e427671ba3ff35c825087b03f0ad91cf02 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Robert Marko <robimarko@gmail.com>
|
|
||||||
Date: Mon, 7 Nov 2022 14:28:59 +0100
|
|
||||||
Subject: [PATCH] clk: qcom: reset: support resetting multiple bits
|
|
||||||
|
|
||||||
This patch adds the support for giving the complete bitmask
|
|
||||||
in reset structure and reset operation will use this bitmask
|
|
||||||
for all reset operations.
|
|
||||||
|
|
||||||
Currently, reset structure only takes a single bit for each reset
|
|
||||||
and then calculates the bitmask by using the BIT() macro.
|
|
||||||
|
|
||||||
However, this is not sufficient anymore for newer SoC-s like IPQ8074,
|
|
||||||
IPQ6018 and more, since their networking resets require multiple bits
|
|
||||||
to be asserted in order to properly reset the HW block completely.
|
|
||||||
|
|
||||||
So, in order to allow asserting multiple bits add "bitmask" field to
|
|
||||||
qcom_reset_map, and then use that bitmask value if its populated in the
|
|
||||||
driver, if its not populated, then we just default to existing behaviour
|
|
||||||
and calculate the bitmask on the fly.
|
|
||||||
|
|
||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
||||||
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
|
||||||
Link: https://lore.kernel.org/r/20221107132901.489240-1-robimarko@gmail.com
|
|
||||||
---
|
|
||||||
drivers/clk/qcom/reset.c | 4 ++--
|
|
||||||
drivers/clk/qcom/reset.h | 1 +
|
|
||||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/clk/qcom/reset.c
|
|
||||||
+++ b/drivers/clk/qcom/reset.c
|
|
||||||
@@ -30,7 +30,7 @@ qcom_reset_assert(struct reset_controlle
|
|
||||||
|
|
||||||
rst = to_qcom_reset_controller(rcdev);
|
|
||||||
map = &rst->reset_map[id];
|
|
||||||
- mask = BIT(map->bit);
|
|
||||||
+ mask = map->bitmask ? map->bitmask : BIT(map->bit);
|
|
||||||
|
|
||||||
return regmap_update_bits(rst->regmap, map->reg, mask, mask);
|
|
||||||
}
|
|
||||||
@@ -44,7 +44,7 @@ qcom_reset_deassert(struct reset_control
|
|
||||||
|
|
||||||
rst = to_qcom_reset_controller(rcdev);
|
|
||||||
map = &rst->reset_map[id];
|
|
||||||
- mask = BIT(map->bit);
|
|
||||||
+ mask = map->bitmask ? map->bitmask : BIT(map->bit);
|
|
||||||
|
|
||||||
return regmap_update_bits(rst->regmap, map->reg, mask, 0);
|
|
||||||
}
|
|
||||||
--- a/drivers/clk/qcom/reset.h
|
|
||||||
+++ b/drivers/clk/qcom/reset.h
|
|
||||||
@@ -12,6 +12,7 @@ struct qcom_reset_map {
|
|
||||||
unsigned int reg;
|
|
||||||
u8 bit;
|
|
||||||
u8 udelay;
|
|
||||||
+ u32 bitmask;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct regmap;
|
|
@ -30,7 +30,7 @@ Reviewed-by: Stephen Boyd <swboyd@chromium.org>
|
|||||||
struct qcom_pcie {
|
struct qcom_pcie {
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
void __iomem *parf; /* DT parf */
|
void __iomem *parf; /* DT parf */
|
||||||
@@ -1467,6 +1471,38 @@ static const struct qcom_pcie_ops ops_1_
|
@@ -1469,6 +1473,38 @@ static const struct qcom_pcie_ops ops_1_
|
||||||
.config_sid = qcom_pcie_config_sid_sm8250,
|
.config_sid = qcom_pcie_config_sid_sm8250,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Reviewed-by: Stephen Boyd <swboyd@chromium.org>
|
|||||||
static const struct dw_pcie_ops dw_pcie_ops = {
|
static const struct dw_pcie_ops dw_pcie_ops = {
|
||||||
.link_up = qcom_pcie_link_up,
|
.link_up = qcom_pcie_link_up,
|
||||||
.start_link = qcom_pcie_start_link,
|
.start_link = qcom_pcie_start_link,
|
||||||
@@ -1478,6 +1514,7 @@ static int qcom_pcie_probe(struct platfo
|
@@ -1480,6 +1516,7 @@ static int qcom_pcie_probe(struct platfo
|
||||||
struct pcie_port *pp;
|
struct pcie_port *pp;
|
||||||
struct dw_pcie *pci;
|
struct dw_pcie *pci;
|
||||||
struct qcom_pcie *pcie;
|
struct qcom_pcie *pcie;
|
||||||
@ -77,7 +77,7 @@ Reviewed-by: Stephen Boyd <swboyd@chromium.org>
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
|
pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
|
||||||
@@ -1499,7 +1536,13 @@ static int qcom_pcie_probe(struct platfo
|
@@ -1501,7 +1538,13 @@ static int qcom_pcie_probe(struct platfo
|
||||||
|
|
||||||
pcie->pci = pci;
|
pcie->pci = pci;
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ Reviewed-by: Stephen Boyd <swboyd@chromium.org>
|
|||||||
|
|
||||||
pcie->reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_HIGH);
|
pcie->reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_HIGH);
|
||||||
if (IS_ERR(pcie->reset)) {
|
if (IS_ERR(pcie->reset)) {
|
||||||
@@ -1555,16 +1598,17 @@ err_pm_runtime_put:
|
@@ -1557,16 +1600,17 @@ err_pm_runtime_put:
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id qcom_pcie_match[] = {
|
static const struct of_device_id qcom_pcie_match[] = {
|
||||||
|
@ -70,7 +70,7 @@ Acked-by: Stanimir Varbanov <svarbanov@mm-sol.com>
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct qcom_pcie;
|
struct qcom_pcie;
|
||||||
@@ -1280,6 +1290,112 @@ static void qcom_pcie_post_deinit_2_7_0(
|
@@ -1282,6 +1292,112 @@ static void qcom_pcie_post_deinit_2_7_0(
|
||||||
clk_disable_unprepare(res->pipe_clk);
|
clk_disable_unprepare(res->pipe_clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ Acked-by: Stanimir Varbanov <svarbanov@mm-sol.com>
|
|||||||
static int qcom_pcie_link_up(struct dw_pcie *pci)
|
static int qcom_pcie_link_up(struct dw_pcie *pci)
|
||||||
{
|
{
|
||||||
u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
|
u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
|
||||||
@@ -1471,6 +1587,15 @@ static const struct qcom_pcie_ops ops_1_
|
@@ -1473,6 +1589,15 @@ static const struct qcom_pcie_ops ops_1_
|
||||||
.config_sid = qcom_pcie_config_sid_sm8250,
|
.config_sid = qcom_pcie_config_sid_sm8250,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ Acked-by: Stanimir Varbanov <svarbanov@mm-sol.com>
|
|||||||
static const struct qcom_pcie_cfg apq8084_cfg = {
|
static const struct qcom_pcie_cfg apq8084_cfg = {
|
||||||
.ops = &ops_1_0_0,
|
.ops = &ops_1_0_0,
|
||||||
};
|
};
|
||||||
@@ -1503,6 +1628,10 @@ static const struct qcom_pcie_cfg sc7280
|
@@ -1505,6 +1630,10 @@ static const struct qcom_pcie_cfg sc7280
|
||||||
.ops = &ops_1_9_0,
|
.ops = &ops_1_9_0,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ Acked-by: Stanimir Varbanov <svarbanov@mm-sol.com>
|
|||||||
static const struct dw_pcie_ops dw_pcie_ops = {
|
static const struct dw_pcie_ops dw_pcie_ops = {
|
||||||
.link_up = qcom_pcie_link_up,
|
.link_up = qcom_pcie_link_up,
|
||||||
.start_link = qcom_pcie_start_link,
|
.start_link = qcom_pcie_start_link,
|
||||||
@@ -1609,6 +1738,7 @@ static const struct of_device_id qcom_pc
|
@@ -1611,6 +1740,7 @@ static const struct of_device_id qcom_pc
|
||||||
{ .compatible = "qcom,pcie-sdm845", .data = &sdm845_cfg },
|
{ .compatible = "qcom,pcie-sdm845", .data = &sdm845_cfg },
|
||||||
{ .compatible = "qcom,pcie-sm8250", .data = &sm8250_cfg },
|
{ .compatible = "qcom,pcie-sm8250", .data = &sm8250_cfg },
|
||||||
{ .compatible = "qcom,pcie-sc7280", .data = &sc7280_cfg },
|
{ .compatible = "qcom,pcie-sc7280", .data = &sc7280_cfg },
|
||||||
|
@ -13,7 +13,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
|
|
||||||
--- a/drivers/pci/controller/dwc/pcie-qcom.c
|
--- a/drivers/pci/controller/dwc/pcie-qcom.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
|
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
|
||||||
@@ -1733,6 +1733,7 @@ static const struct of_device_id qcom_pc
|
@@ -1735,6 +1735,7 @@ static const struct of_device_id qcom_pc
|
||||||
{ .compatible = "qcom,pcie-apq8064", .data = &ipq8064_cfg },
|
{ .compatible = "qcom,pcie-apq8064", .data = &ipq8064_cfg },
|
||||||
{ .compatible = "qcom,pcie-msm8996", .data = &msm8996_cfg },
|
{ .compatible = "qcom,pcie-msm8996", .data = &msm8996_cfg },
|
||||||
{ .compatible = "qcom,pcie-ipq8074", .data = &ipq8074_cfg },
|
{ .compatible = "qcom,pcie-ipq8074", .data = &ipq8074_cfg },
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
},
|
},
|
||||||
[PORT_NPCM] = {
|
[PORT_NPCM] = {
|
||||||
.name = "Nuvoton 16550",
|
.name = "Nuvoton 16550",
|
||||||
@@ -2766,6 +2766,11 @@ serial8250_do_set_termios(struct uart_po
|
@@ -2763,6 +2763,11 @@ serial8250_do_set_termios(struct uart_po
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int baud, quot, frac = 0;
|
unsigned int baud, quot, frac = 0;
|
||||||
|
|
||||||
|
@ -425,7 +425,7 @@ Signed-off-by: Wolfram Sang <wsa@kernel.org>
|
|||||||
if (ret)
|
if (ret)
|
||||||
--- a/drivers/i2c/busses/i2c-qup.c
|
--- a/drivers/i2c/busses/i2c-qup.c
|
||||||
+++ b/drivers/i2c/busses/i2c-qup.c
|
+++ b/drivers/i2c/busses/i2c-qup.c
|
||||||
@@ -1878,7 +1878,7 @@ nodma:
|
@@ -1885,7 +1885,7 @@ nodma:
|
||||||
qup->adap.dev.of_node = pdev->dev.of_node;
|
qup->adap.dev.of_node = pdev->dev.of_node;
|
||||||
qup->is_last = true;
|
qup->is_last = true;
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
* managed to set the command line, unless CONFIG_CMDLINE_FORCE
|
* managed to set the command line, unless CONFIG_CMDLINE_FORCE
|
||||||
--- a/arch/arm64/Kconfig
|
--- a/arch/arm64/Kconfig
|
||||||
+++ b/arch/arm64/Kconfig
|
+++ b/arch/arm64/Kconfig
|
||||||
@@ -1942,6 +1942,14 @@ config CMDLINE_FORCE
|
@@ -1983,6 +1983,14 @@ config CMDLINE_FORCE
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Tim Harvey <tharvey@gateworks.com>
|
|||||||
#include <linux/platform_data/x86/apple.h>
|
#include <linux/platform_data/x86/apple.h>
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
@@ -5854,3 +5855,34 @@ static void nvidia_ion_ahci_fixup(struct
|
@@ -5856,3 +5857,34 @@ static void nvidia_ion_ahci_fixup(struct
|
||||||
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
|
pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
|
||||||
}
|
}
|
||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -4633,6 +4633,7 @@ static const struct net_device_ops mtk_n
|
@@ -4615,6 +4615,7 @@ static const struct net_device_ops mtk_n
|
||||||
|
|
||||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
|||||||
const __be32 *_id = of_get_property(np, "reg", NULL);
|
const __be32 *_id = of_get_property(np, "reg", NULL);
|
||||||
phy_interface_t phy_mode;
|
phy_interface_t phy_mode;
|
||||||
struct phylink *phylink;
|
struct phylink *phylink;
|
||||||
@@ -4791,6 +4792,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -4784,6 +4785,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
register_netdevice_notifier(&mac->device_notifier);
|
register_netdevice_notifier(&mac->device_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/usb/dwc2/platform.c
|
--- a/drivers/usb/dwc2/platform.c
|
||||||
+++ b/drivers/usb/dwc2/platform.c
|
+++ b/drivers/usb/dwc2/platform.c
|
||||||
@@ -498,6 +498,12 @@ static int dwc2_driver_probe(struct plat
|
@@ -508,6 +508,12 @@ static int dwc2_driver_probe(struct plat
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user