-LINUX_VERSION-5.10 = .100
-LINUX_KERNEL_HASH-5.10.100 = d56965afc9b6a3d26d53db40ccd37fd9d15f2ca6bfd54ef6f0f8b6e92c170999
+LINUX_VERSION-5.10 = .101
+LINUX_KERNEL_HASH-5.10.101 = 0749258cb7ee47c478dfc34857e8930d41bfe0b074e80e9f57cbfa56d0ba1c8e
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1491,9 +1491,6 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1493,9 +1493,6 @@ static int vc4_hdmi_cec_init(struct vc4_
u32 value;
int ret;
vc4_hdmi->cec_adap = cec_allocate_adapter(&vc4_hdmi_cec_adap_ops,
vc4_hdmi, "vc4",
CEC_CAP_DEFAULTS |
-@@ -1926,7 +1923,6 @@ static const struct vc4_hdmi_variant bcm
+@@ -1928,7 +1925,6 @@ static const struct vc4_hdmi_variant bcm
.debugfs_name = "hdmi_regs",
.card_name = "vc4-hdmi",
.max_pixel_clock = 162000000,
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -989,6 +989,44 @@ static void vc4_hdmi_audio_shutdown(stru
+@@ -991,6 +991,44 @@ static void vc4_hdmi_audio_shutdown(stru
vc4_hdmi->audio.substream = NULL;
}
/* HDMI audio codec callbacks */
static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
-@@ -999,6 +1037,8 @@ static int vc4_hdmi_audio_hw_params(stru
+@@ -1001,6 +1039,8 @@ static int vc4_hdmi_audio_hw_params(stru
struct device *dev = &vc4_hdmi->pdev->dev;
u32 audio_packet_config, channel_mask;
u32 channel_map;
if (substream != vc4_hdmi->audio.substream)
return -EINVAL;
-@@ -1019,6 +1059,14 @@ static int vc4_hdmi_audio_hw_params(stru
+@@ -1021,6 +1061,14 @@ static int vc4_hdmi_audio_hw_params(stru
vc4_hdmi_audio_set_mai_clock(vc4_hdmi);
#include <sound/dmaengine_pcm.h>
#include <sound/pcm_drm_eld.h>
#include <sound/pcm_params.h>
-@@ -1180,6 +1181,47 @@ static int vc4_hdmi_audio_eld_ctl_get(st
+@@ -1182,6 +1183,47 @@ static int vc4_hdmi_audio_eld_ctl_get(st
return 0;
}
static const struct snd_kcontrol_new vc4_hdmi_audio_controls[] = {
{
.access = SNDRV_CTL_ELEM_ACCESS_READ |
-@@ -1189,6 +1231,19 @@ static const struct snd_kcontrol_new vc4
+@@ -1191,6 +1233,19 @@ static const struct snd_kcontrol_new vc4
.info = vc4_hdmi_audio_eld_ctl_info,
.get = vc4_hdmi_audio_eld_ctl_get,
},
};
static const struct snd_soc_dapm_widget vc4_hdmi_audio_widgets[] = {
-@@ -1309,6 +1364,11 @@ static int vc4_hdmi_audio_init(struct vc
+@@ -1311,6 +1366,11 @@ static int vc4_hdmi_audio_init(struct vc
vc4_hdmi->audio.dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
vc4_hdmi->audio.dma_data.maxburst = 2;
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1029,9 +1029,8 @@ static int sample_rate_to_mai_fmt(int sa
+@@ -1031,9 +1031,8 @@ static int sample_rate_to_mai_fmt(int sa
}
/* HDMI audio codec callbacks */
{
struct vc4_hdmi *vc4_hdmi = dai_to_hdmi(dai);
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
-@@ -1044,12 +1043,15 @@ static int vc4_hdmi_audio_hw_params(stru
+@@ -1046,12 +1045,15 @@ static int vc4_hdmi_audio_hw_params(stru
if (substream != vc4_hdmi->audio.substream)
return -EINVAL;
HDMI_WRITE(HDMI_MAI_CTL,
VC4_HD_MAI_CTL_RESET |
-@@ -1271,7 +1273,7 @@ static const struct snd_soc_component_dr
+@@ -1273,7 +1275,7 @@ static const struct snd_soc_component_dr
static const struct snd_soc_dai_ops vc4_hdmi_audio_dai_ops = {
.startup = vc4_hdmi_audio_startup,
.shutdown = vc4_hdmi_audio_shutdown,
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1063,7 +1063,11 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1065,7 +1065,11 @@ static int vc4_hdmi_audio_prepare(struct
vc4_hdmi_audio_set_mai_clock(vc4_hdmi);
mai_sample_rate = sample_rate_to_mai_fmt(vc4_hdmi->audio.samplerate);
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1084,22 +1084,12 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1086,22 +1086,12 @@ static int vc4_hdmi_audio_prepare(struct
audio_packet_config |= VC4_SET_FIELD(channel_mask,
VC4_HDMI_AUDIO_PACKET_CEA_MASK);
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1093,6 +1093,7 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1095,6 +1095,7 @@ static int vc4_hdmi_audio_prepare(struct
HDMI_WRITE(HDMI_MAI_CONFIG,
VC4_HDMI_MAI_CONFIG_BIT_REVERSE |
{}, \
}; \
\
-@@ -344,6 +355,11 @@ static void __exit fbtft_driver_module_e
+@@ -347,6 +358,11 @@ static void __exit fbtft_driver_module_e
module_init(fbtft_driver_module_init); \
module_exit(fbtft_driver_module_exit);
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1331,10 +1331,12 @@ static int vc4_hdmi_audio_init(struct vc
+@@ -1333,10 +1333,12 @@ static int vc4_hdmi_audio_init(struct vc
const __be32 *addr;
int index;
int ret;
return 0;
}
-@@ -1732,6 +1738,7 @@ static int vc5_hdmi_init_resources(struc
+@@ -1734,6 +1740,7 @@ static int vc5_hdmi_init_resources(struc
struct platform_device *pdev = vc4_hdmi->pdev;
struct device *dev = &pdev->dev;
struct resource *res;
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hdmi");
if (!res)
-@@ -1822,6 +1829,38 @@ static int vc5_hdmi_init_resources(struc
+@@ -1824,6 +1831,38 @@ static int vc5_hdmi_init_resources(struc
return PTR_ERR(vc4_hdmi->reset);
}
struct drm_display_mode *mode = &crtc_state->adjusted_mode;
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long long pixel_rate = mode->clock * 1000;
-@@ -875,6 +897,8 @@ static int vc4_hdmi_encoder_atomic_check
+@@ -876,6 +898,8 @@ static int vc4_hdmi_encoder_atomic_check
if (pixel_rate > vc4_hdmi->variant->max_pixel_clock)
return -EINVAL;
}
static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder,
-@@ -891,6 +951,14 @@ static int vc4_hdmi_encoder_atomic_check
+@@ -892,6 +952,14 @@ static int vc4_hdmi_encoder_atomic_check
pixel_rate = mode->clock * 1000;
}
value |= clk_cnt << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT;
HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
}
-@@ -1867,6 +1867,7 @@ static int vc4_hdmi_init_resources(struc
+@@ -1869,6 +1869,7 @@ static int vc4_hdmi_init_resources(struc
return PTR_ERR(vc4_hdmi->hsm_clock);
}
vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock;
return 0;
}
-@@ -1961,6 +1962,12 @@ static int vc5_hdmi_init_resources(struc
+@@ -1963,6 +1964,12 @@ static int vc5_hdmi_init_resources(struc
return PTR_ERR(vc4_hdmi->audio_clock);
}
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1572,15 +1572,22 @@ static int vc4_hdmi_audio_init(struct vc
+@@ -1574,15 +1574,22 @@ static int vc4_hdmi_audio_init(struct vc
}
#ifdef CONFIG_DRM_VC4_HDMI_CEC
cec_transmit_done(vc4_hdmi->cec_adap, CEC_TX_STATUS_OK,
0, 0, 0, 0);
} else {
-@@ -1594,6 +1601,19 @@ static irqreturn_t vc4_cec_irq_handler_t
+@@ -1596,6 +1603,19 @@ static irqreturn_t vc4_cec_irq_handler_t
return IRQ_HANDLED;
}
static void vc4_cec_read_msg(struct vc4_hdmi *vc4_hdmi, u32 cntrl1)
{
struct drm_device *dev = vc4_hdmi->connector.dev;
-@@ -1618,31 +1638,55 @@ static void vc4_cec_read_msg(struct vc4_
+@@ -1620,31 +1640,55 @@ static void vc4_cec_read_msg(struct vc4_
}
}
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1723,9 +1723,11 @@ static int vc4_hdmi_cec_adap_enable(stru
+@@ -1725,9 +1725,11 @@ static int vc4_hdmi_cec_adap_enable(stru
((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
}
-@@ -1797,8 +1799,6 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1799,8 +1801,6 @@ static int vc4_hdmi_cec_init(struct vc4_
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info);
value = HDMI_READ(HDMI_CEC_CNTRL_1);
/* Set the logical address to Unregistered */
value |= VC4_HDMI_CEC_ADDR_MASK;
-@@ -1806,12 +1806,32 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1808,12 +1808,32 @@ static int vc4_hdmi_cec_init(struct vc4_
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
ret = cec_register_adapter(vc4_hdmi->cec_adap, &pdev->dev);
if (ret < 0)
-@@ -2286,6 +2306,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2288,6 +2308,7 @@ static const struct vc4_hdmi_variant bcm
PHY_LANE_CK,
},
.unsupported_odd_h_timings = true,
.init_resources = vc5_hdmi_init_resources,
.csc_setup = vc5_hdmi_csc_setup,
-@@ -2312,6 +2333,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2314,6 +2335,7 @@ static const struct vc4_hdmi_variant bcm
PHY_LANE_2,
},
.unsupported_odd_h_timings = true,
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1785,9 +1785,15 @@ static int vc4_hdmi_cec_init(struct vc4_
+@@ -1787,9 +1787,15 @@ static int vc4_hdmi_cec_init(struct vc4_
{
struct cec_connector_info conn_info;
struct platform_device *pdev = vc4_hdmi->pdev;
}
static void vc4_hdmi_encoder_post_crtc_disable(struct drm_encoder *encoder,
-@@ -2296,6 +2321,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2298,6 +2323,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_enable = vc4_hdmi_phy_rng_enable,
.phy_rng_disable = vc4_hdmi_phy_rng_disable,
.channel_map = vc4_hdmi_channel_map,
};
static const struct vc4_hdmi_variant bcm2711_hdmi0_variant = {
-@@ -2323,6 +2349,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2325,6 +2351,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_enable = vc5_hdmi_phy_rng_enable,
.phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map,
};
static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = {
-@@ -2350,6 +2377,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2352,6 +2379,7 @@ static const struct vc4_hdmi_variant bcm
.phy_rng_enable = vc5_hdmi_phy_rng_enable,
.phy_rng_disable = vc5_hdmi_phy_rng_disable,
.channel_map = vc5_hdmi_channel_map,
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1295,10 +1295,10 @@ static int vc4_hdmi_audio_prepare(struct
+@@ -1297,10 +1297,10 @@ static int vc4_hdmi_audio_prepare(struct
/* Set the MAI threshold */
HDMI_WRITE(HDMI_MAI_THR,
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -2432,7 +2432,7 @@ static const struct vc4_hdmi_variant bcm
+@@ -2434,7 +2434,7 @@ static const struct vc4_hdmi_variant bcm
.encoder_type = VC4_ENCODER_TYPE_HDMI0,
.debugfs_name = "hdmi0_regs",
.card_name = "vc4-hdmi-0",
+++ /dev/null
-From 9f7c0728efb0036f6f197126aa62da40cdf4713a Mon Sep 17 00:00:00 2001
-From: Dave Stevenson <dave.stevenson@raspberrypi.com>
-Date: Wed, 28 Apr 2021 16:14:21 +0100
-Subject: [PATCH] drm/vc4: Allow DBLCLK modes even if horz timing is
- odd.
-
-The 2711 pixel valve can't produce odd horizontal timings, and
-checks were added to vc4_hdmi_encoder_atomic_check and
-vc4_hdmi_encoder_mode_valid to filter out/block selection of
-such modes.
-
-Modes with DRM_MODE_FLAG_DBLCLK double all the horizontal timing
-values before programming them into the PV. The PV values,
-therefore, can not be odd, and so the modes can be supported.
-
-Amend the filtering appropriately.
-
-See https://github.com/raspberrypi/linux/issues/4307
-
-Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
----
- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/gpu/drm/vc4/vc4_hdmi.c
-+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
-@@ -1067,6 +1067,7 @@ static int vc4_hdmi_encoder_atomic_check
- unsigned long long tmds_rate;
-
- if (vc4_hdmi->variant->unsupported_odd_h_timings &&
-+ !(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
- ((mode->hdisplay % 2) || (mode->hsync_start % 2) ||
- (mode->hsync_end % 2) || (mode->htotal % 2)))
- return -EINVAL;
-@@ -1111,6 +1112,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
- struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
-
- if (vc4_hdmi->variant->unsupported_odd_h_timings &&
-+ !(mode->flags & DRM_MODE_FLAG_DBLCLK) &&
- ((mode->hdisplay % 2) || (mode->hsync_start % 2) ||
- (mode->hsync_end % 2) || (mode->htotal % 2)))
- return MODE_H_ILLEGAL;
- MEDIA_BUS_FMT_RGB666_1X24_CPADHI
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
-@@ -2093,6 +2093,38 @@ static const struct panel_desc innolux_a
+@@ -2094,6 +2094,38 @@ static const struct panel_desc innolux_a
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
};
static const struct drm_display_mode innolux_at070tn92_mode = {
.clock = 33333,
.hdisplay = 800,
-@@ -4076,6 +4108,9 @@ static const struct of_device_id platfor
+@@ -4077,6 +4109,9 @@ static const struct of_device_id platfor
.compatible = "innolux,at043tn24",
.data = &innolux_at043tn24,
}, {
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -1432,5 +1432,5 @@ subdir-y := overlays
+@@ -1433,5 +1433,5 @@ subdir-y := overlays
# Enable fixups to support overlays on BCM2835 platforms
ifeq ($(CONFIG_ARCH_BCM2835),y)
offset = CORE_STS_OVERRIDE_IMP;
else
offset = CORE_STS_OVERRIDE_IMP2;
-@@ -708,7 +709,8 @@ static void bcm_sf2_sw_mac_link_down(str
+@@ -711,7 +712,8 @@ static void bcm_sf2_sw_mac_link_down(str
u32 reg, offset;
if (port != core_readl(priv, CORE_IMP0_PRT_ID)) {
offset = CORE_STS_OVERRIDE_GMIIP_PORT(port);
else
offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
-@@ -735,7 +737,8 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -738,7 +740,8 @@ static void bcm_sf2_sw_mac_link_up(struc
bcm_sf2_sw_mac_link_set(ds, port, interface, true);
if (port != core_readl(priv, CORE_IMP0_PRT_ID)) {
offset = CORE_STS_OVERRIDE_GMIIP_PORT(port);
else
offset = CORE_STS_OVERRIDE_GMIIP2_PORT(port);
-@@ -1128,6 +1131,30 @@ struct bcm_sf2_of_data {
+@@ -1131,6 +1134,30 @@ struct bcm_sf2_of_data {
unsigned int num_cfp_rules;
};
/* Register offsets for the SWITCH_REG_* block */
static const u16 bcm_sf2_7445_reg_offsets[] = {
[REG_SWITCH_CNTRL] = 0x00,
-@@ -1176,6 +1203,9 @@ static const struct bcm_sf2_of_data bcm_
+@@ -1179,6 +1206,9 @@ static const struct bcm_sf2_of_data bcm_
};
static const struct of_device_id bcm_sf2_of_match[] = {
static void bcm_sf2_intr_disable(struct bcm_sf2_priv *priv)
{
intrl2_0_mask_set(priv, 0xffffffff);
-@@ -869,6 +907,8 @@ static int bcm_sf2_sw_resume(struct dsa_
+@@ -872,6 +910,8 @@ static int bcm_sf2_sw_resume(struct dsa_
return ret;
}
ret = bcm_sf2_cfp_resume(ds);
if (ret)
return ret;
-@@ -1140,6 +1180,7 @@ struct bcm_sf2_of_data {
+@@ -1143,6 +1183,7 @@ struct bcm_sf2_of_data {
const u16 *reg_offsets;
unsigned int core_reg_align;
unsigned int num_cfp_rules;
};
static const u16 bcm_sf2_4908_reg_offsets[] = {
-@@ -1164,6 +1205,7 @@ static const struct bcm_sf2_of_data bcm_
+@@ -1167,6 +1208,7 @@ static const struct bcm_sf2_of_data bcm_
.core_reg_align = 0,
.reg_offsets = bcm_sf2_4908_reg_offsets,
.num_cfp_rules = 0, /* FIXME */
};
/* Register offsets for the SWITCH_REG_* block */
-@@ -1274,6 +1316,7 @@ static int bcm_sf2_sw_probe(struct platf
+@@ -1277,6 +1319,7 @@ static int bcm_sf2_sw_probe(struct platf
priv->reg_offsets = data->reg_offsets;
priv->core_reg_align = data->core_reg_align;
priv->num_cfp_rules = data->num_cfp_rules;
priv->rcdev = devm_reset_control_get_optional_exclusive(&pdev->dev,
"switch");
-@@ -1347,6 +1390,8 @@ static int bcm_sf2_sw_probe(struct platf
+@@ -1350,6 +1393,8 @@ static int bcm_sf2_sw_probe(struct platf
goto out_clk_mdiv;
}
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
-@@ -1204,7 +1204,7 @@ static const struct bcm_sf2_of_data bcm_
+@@ -1207,7 +1207,7 @@ static const struct bcm_sf2_of_data bcm_
.type = BCM4908_DEVICE_ID,
.core_reg_align = 0,
.reg_offsets = bcm_sf2_4908_reg_offsets,
static void bcm_sf2_imp_setup(struct dsa_switch *ds, int port)
{
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
-@@ -693,6 +718,7 @@ static void bcm_sf2_sw_mac_config(struct
+@@ -696,6 +721,7 @@ static void bcm_sf2_sw_mac_config(struct
{
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
u32 id_mode_dis = 0, port_mode;
u32 reg;
if (port == core_readl(priv, CORE_IMP0_PRT_ID))
-@@ -716,10 +742,12 @@ static void bcm_sf2_sw_mac_config(struct
+@@ -719,10 +745,12 @@ static void bcm_sf2_sw_mac_config(struct
return;
}
reg &= ~ID_MODE_DIS;
reg &= ~(PORT_MODE_MASK << PORT_MODE_SHIFT);
-@@ -727,13 +755,14 @@ static void bcm_sf2_sw_mac_config(struct
+@@ -730,13 +758,14 @@ static void bcm_sf2_sw_mac_config(struct
if (id_mode_dis)
reg |= ID_MODE_DIS;
u32 reg;
if (!phy_interface_mode_is_rgmii(interface) &&
-@@ -741,13 +770,15 @@ static void bcm_sf2_sw_mac_link_set(stru
+@@ -744,13 +773,15 @@ static void bcm_sf2_sw_mac_link_set(stru
interface != PHY_INTERFACE_MODE_REVMII)
return;
}
static void bcm_sf2_sw_mac_link_down(struct dsa_switch *ds, int port,
-@@ -781,11 +812,15 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -784,11 +815,15 @@ static void bcm_sf2_sw_mac_link_up(struc
{
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
struct ethtool_eee *p = &priv->dev->ports[port].eee;
if (priv->type == BCM4908_DEVICE_ID ||
priv->type == BCM7445_DEVICE_ID)
offset = CORE_STS_OVERRIDE_GMIIP_PORT(port);
-@@ -796,7 +831,7 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -799,7 +834,7 @@ static void bcm_sf2_sw_mac_link_up(struc
interface == PHY_INTERFACE_MODE_RGMII_TXID ||
interface == PHY_INTERFACE_MODE_MII ||
interface == PHY_INTERFACE_MODE_REVMII) {
reg &= ~(RX_PAUSE_EN | TX_PAUSE_EN);
if (tx_pause)
-@@ -804,7 +839,7 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -807,7 +842,7 @@ static void bcm_sf2_sw_mac_link_up(struc
if (rx_pause)
reg |= RX_PAUSE_EN;
break;
default:
switch (port) {
-@@ -1227,9 +1232,7 @@ static const u16 bcm_sf2_4908_reg_offset
+@@ -1230,9 +1235,7 @@ static const u16 bcm_sf2_4908_reg_offset
[REG_PHY_REVISION] = 0x14,
[REG_SPHY_CNTRL] = 0x24,
[REG_CROSSBAR] = 0xc8,
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
-@@ -821,11 +821,9 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -824,11 +824,9 @@ static void bcm_sf2_sw_mac_link_up(struc
bcm_sf2_sw_mac_link_set(ds, port, interface, true);
if (port != core_readl(priv, CORE_IMP0_PRT_ID)) {
if (priv->type == BCM4908_DEVICE_ID ||
priv->type == BCM7445_DEVICE_ID)
offset = CORE_STS_OVERRIDE_GMIIP_PORT(port);
-@@ -836,6 +834,7 @@ static void bcm_sf2_sw_mac_link_up(struc
+@@ -839,6 +837,7 @@ static void bcm_sf2_sw_mac_link_up(struc
interface == PHY_INTERFACE_MODE_RGMII_TXID ||
interface == PHY_INTERFACE_MODE_MII ||
interface == PHY_INTERFACE_MODE_REVMII) {
}
}
-@@ -1232,9 +1269,14 @@ static const u16 bcm_sf2_4908_reg_offset
+@@ -1235,9 +1272,14 @@ static const u16 bcm_sf2_4908_reg_offset
[REG_SPHY_CNTRL] = 0x24,
[REG_CROSSBAR] = 0xc8,
[REG_RGMII_11_CNTRL] = 0x014c,
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
-@@ -1529,10 +1529,14 @@ static int bcm_sf2_sw_probe(struct platf
+@@ -1532,10 +1532,14 @@ static int bcm_sf2_sw_probe(struct platf
rev = reg_readl(priv, REG_PHY_REVISION);
priv->hw_params.gphy_rev = rev & PHY_REVISION_MASK;
--- a/drivers/net/dsa/bcm_sf2.c
+++ b/drivers/net/dsa/bcm_sf2.c
-@@ -1543,6 +1543,12 @@ static int bcm_sf2_sw_probe(struct platf
+@@ -1546,6 +1546,12 @@ static int bcm_sf2_sw_probe(struct platf
priv->hw_params.core_rev >> 8, priv->hw_params.core_rev & 0xff,
priv->irq0, priv->irq1);
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
-@@ -2140,6 +2140,19 @@ static int marvell_vct7_cable_test_get_s
+@@ -2141,6 +2141,19 @@ static int marvell_vct7_cable_test_get_s
}
#ifdef CONFIG_HWMON
static int m88e1121_get_temp(struct phy_device *phydev, long *temp)
{
int oldpage;
-@@ -2183,75 +2196,6 @@ error:
+@@ -2184,75 +2197,6 @@ error:
return phy_restore_page(phydev, oldpage, ret);
}
static int m88e1510_get_temp(struct phy_device *phydev, long *temp)
{
int ret;
-@@ -2314,92 +2258,6 @@ static int m88e1510_get_temp_alarm(struc
+@@ -2315,92 +2259,6 @@ static int m88e1510_get_temp_alarm(struc
return 0;
}
static int m88e6390_get_temp(struct phy_device *phydev, long *temp)
{
int sum = 0;
-@@ -2458,63 +2316,112 @@ error:
+@@ -2459,63 +2317,112 @@ error:
return ret;
}
};
static int marvell_hwmon_name(struct phy_device *phydev)
-@@ -2537,49 +2444,48 @@ static int marvell_hwmon_name(struct phy
+@@ -2538,49 +2445,48 @@ static int marvell_hwmon_name(struct phy
return 0;
}
{
return 0;
}
-@@ -2595,40 +2501,7 @@ static int marvell_probe(struct phy_devi
+@@ -2596,40 +2502,7 @@ static int marvell_probe(struct phy_devi
phydev->priv = priv;
}
static struct phy_driver marvell_drivers[] = {
-@@ -2713,8 +2586,9 @@ static struct phy_driver marvell_drivers
+@@ -2714,8 +2587,9 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1121R,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1121R",
.config_init = marvell_config_init,
.config_aneg = m88e1121_config_aneg,
.read_status = marvell_read_status,
-@@ -2833,9 +2707,10 @@ static struct phy_driver marvell_drivers
+@@ -2834,9 +2708,10 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1510,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1510",
.config_init = m88e1510_config_init,
.config_aneg = m88e1510_config_aneg,
.read_status = marvell_read_status,
-@@ -2862,9 +2737,10 @@ static struct phy_driver marvell_drivers
+@@ -2863,9 +2738,10 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1540,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1540",
.config_init = marvell_config_init,
.config_aneg = m88e1510_config_aneg,
.read_status = marvell_read_status,
-@@ -2888,7 +2764,8 @@ static struct phy_driver marvell_drivers
+@@ -2889,7 +2765,8 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1545,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1545",
/* PHY_GBIT_FEATURES */
.flags = PHY_POLL_CABLE_TEST,
.config_init = marvell_config_init,
-@@ -2934,9 +2811,10 @@ static struct phy_driver marvell_drivers
+@@ -2935,9 +2812,10 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E6341_FAMILY,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E6341 Family",
.config_init = marvell_config_init,
.config_aneg = m88e6390_config_aneg,
.read_status = marvell_read_status,
-@@ -2960,9 +2838,10 @@ static struct phy_driver marvell_drivers
+@@ -2961,9 +2839,10 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E6390_FAMILY,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E6390 Family",
.config_init = marvell_config_init,
.config_aneg = m88e6390_config_aneg,
.read_status = marvell_read_status,
-@@ -2986,7 +2865,8 @@ static struct phy_driver marvell_drivers
+@@ -2987,7 +2866,8 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1340S,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1340S",
/* PHY_GBIT_FEATURES */
.config_init = marvell_config_init,
.config_aneg = m88e1510_config_aneg,
-@@ -3008,7 +2888,8 @@ static struct phy_driver marvell_drivers
+@@ -3009,7 +2889,8 @@ static struct phy_driver marvell_drivers
.phy_id = MARVELL_PHY_ID_88E1548P,
.phy_id_mask = MARVELL_PHY_ID_MASK,
.name = "Marvell 88E1548P",
#define MII_88E1510_GEN_CTRL_REG_1_RESET 0x8000 /* Soft reset */
#define MII_VCT5_TX_RX_MDI0_COUPLING 0x10
-@@ -2504,6 +2513,100 @@ static int marvell_probe(struct phy_devi
+@@ -2505,6 +2514,100 @@ static int marvell_probe(struct phy_devi
return marvell_hwmon_probe(phydev);
}
static struct phy_driver marvell_drivers[] = {
{
.phy_id = MARVELL_PHY_ID_88E1101,
-@@ -2710,7 +2813,7 @@ static struct phy_driver marvell_drivers
+@@ -2711,7 +2814,7 @@ static struct phy_driver marvell_drivers
.driver_data = DEF_MARVELL_HWMON_OPS(m88e1510_hwmon_ops),
.features = PHY_GBIT_FIBRE_FEATURES,
.flags = PHY_POLL_CABLE_TEST,
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
-@@ -5431,6 +5431,7 @@ static int mv88e6xxx_register_switch(str
+@@ -5436,6 +5436,7 @@ static int mv88e6xxx_register_switch(str
ds->ops = &mv88e6xxx_switch_ops;
ds->ageing_time_min = chip->info->age_time_coeff;
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
+++ /dev/null
-From 67ae6887854e4b6e736c34d4fd7087540ed31d4e Mon Sep 17 00:00:00 2001
-From: Pawel Dembicki <paweldembicki@gmail.com>
-Date: Tue, 11 Jan 2022 21:59:50 +0100
-Subject: [PATCH] USB: serial: option: add ZTE MF286D modem
-
-Modem from ZTE MF286D is an Qualcomm MDM9250 based 3G/4G modem.
-
-T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=5000 MxCh= 0
-D: Ver= 3.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1
-P: Vendor=19d2 ProdID=1485 Rev=52.87
-S: Manufacturer=ZTE,Incorporated
-S: Product=ZTE Technologies MSM
-S: SerialNumber=MF286DZTED000000
-C:* #Ifs= 7 Cfg#= 1 Atr=80 MxPwr=896mA
-A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=06 Prot=00
-I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=ff Driver=rndis_host
-E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
-I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
-E: Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
-E: Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
-E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
-E: Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
-E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
-E: Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
-E: Ad=88(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
-E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
-E: Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-E: Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
-
-Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
-
-https://lore.kernel.org/linux-usb/20220111221205.14662-1-paweldembicki@gmail.com/
----
- drivers/usb/serial/option.c | 2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/usb/serial/option.c
-+++ b/drivers/usb/serial/option.c
-@@ -1649,6 +1649,8 @@ static const struct usb_device_id option
- .driver_info = RSVD(2) },
- { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0x00, 0x00) }, /* ZTE MF871A */
-+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff), /* ZTE MF286D */
-+ .driver_info = RSVD(5) },
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) },
- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -902,11 +902,74 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -903,11 +903,74 @@ dtb-$(CONFIG_ARCH_QCOM) += \
qcom-apq8074-dragonboard.dtb \
qcom-apq8084-ifc6540.dtb \
qcom-apq8084-mtp.dtb \
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -907,8 +907,29 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -908,8 +908,29 @@ dtb-$(CONFIG_ARCH_QCOM) += \
qcom-ipq4019-ap.dk04.1-c3.dtb \
qcom-ipq4019-ap.dk07.1-c1.dtb \
qcom-ipq4019-ap.dk07.1-c2.dtb \
struct gswip_hw_info {
int max_ports;
int cpu_port;
-@@ -851,10 +856,6 @@ static int gswip_setup(struct dsa_switch
+@@ -856,10 +861,6 @@ static int gswip_setup(struct dsa_switch
gswip_switch_mask(priv, 0, GSWIP_PCE_PCTRL_0_INGRESS,
GSWIP_PCE_PCTRL_0p(cpu_port));
gswip_switch_mask(priv, 0, GSWIP_BM_QUEUE_GCTRL_GL_MOD,
GSWIP_BM_QUEUE_GCTRL);
-@@ -871,6 +872,8 @@ static int gswip_setup(struct dsa_switch
+@@ -876,6 +877,8 @@ static int gswip_setup(struct dsa_switch
return err;
}
gswip_port_enable(ds, cpu_port, NULL);
return 0;
}
-@@ -1433,6 +1436,39 @@ static int gswip_port_fdb_dump(struct ds
+@@ -1438,6 +1441,39 @@ static int gswip_port_fdb_dump(struct ds
return 0;
}
static void gswip_phylink_validate(struct dsa_switch *ds, int port,
unsigned long *supported,
struct phylink_link_state *state)
-@@ -1776,6 +1812,8 @@ static const struct dsa_switch_ops gswip
+@@ -1781,6 +1817,8 @@ static const struct dsa_switch_ops gswip
.port_fdb_add = gswip_port_fdb_add,
.port_fdb_del = gswip_port_fdb_del,
.port_fdb_dump = gswip_port_fdb_dump,
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -1202,6 +1202,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+@@ -1203,6 +1203,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-h3-orangepi-zero-plus2.dtb \
sun8i-h3-rervision-dvk.dtb \
sun8i-h3-emlid-neutis-n5h3-devboard.dtb \
- const: gemei,g9
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
-@@ -1192,6 +1192,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+@@ -1193,6 +1193,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
sun8i-h3-nanopi-m1-plus.dtb \
sun8i-h3-nanopi-neo.dtb \
sun8i-h3-nanopi-neo-air.dtb \