You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge 5.10.147 into android12-5.10-lts
Changes in 5.10.147 thunderbolt: Add support for Intel Maple Ridge thunderbolt: Add support for Intel Maple Ridge single port controller ALSA: hda/tegra: Use clk_bulk helpers ALSA: hda/tegra: Reset hardware ALSA: hda/hdmi: let new platforms assign the pcm slot dynamically ALSA: hda: Fix Nvidia dp infoframe btrfs: fix hang during unmount when stopping a space reclaim worker uas: add no-uas quirk for Hiksemi usb_disk usb-storage: Add Hiksemi USB3-FW to IGNORE_UAS uas: ignore UAS for Thinkplus chips usb: typec: ucsi: Remove incorrect warning thunderbolt: Explicitly reset plug events delay back to USB4 spec value net: usb: qmi_wwan: Add new usb-id for Dell branded EM7455 Input: snvs_pwrkey - fix SNVS_HPVIDR1 register address clk: ingenic-tcu: Properly enable registers before accessing timers ARM: dts: integrator: Tag PCI host with device_type ntfs: fix BUG_ON in ntfs_lookup_inode_by_name() net: mt7531: only do PLL once after the reset libata: add ATA_HORKAGE_NOLPM for Pioneer BDR-207M and BDR-205 mmc: moxart: fix 4-bit bus width and remove 8-bit bus width mmc: hsq: Fix data stomping during mmc recovery mm/page_alloc: fix race condition between build_all_zonelists and page allocation mm: prevent page_frag_alloc() from corrupting the memory mm/migrate_device.c: flush TLB while holding PTL mm: fix madivse_pageout mishandling on non-LRU page media: dvb_vb2: fix possible out of bound access media: rkvdec: Disable H.264 error detection swiotlb: max mapping size takes min align mask into account scsi: hisi_sas: Revert "scsi: hisi_sas: Limit max hw sectors for v3 HW" ARM: dts: am33xx: Fix MMCHS0 dma properties reset: imx7: Fix the iMX8MP PCIe PHY PERST support soc: sunxi: sram: Actually claim SRAM regions soc: sunxi: sram: Prevent the driver from being unbound soc: sunxi_sram: Make use of the helper function devm_platform_ioremap_resource() soc: sunxi: sram: Fix probe function ordering issues soc: sunxi: sram: Fix debugfs info for A64 SRAM C ASoC: tas2770: Reinit regcache on reset Revert "drm: bridge: analogix/dp: add panel prepare/unprepare in suspend/resume time" Input: melfas_mip4 - fix return value check in mip4_probe() usbnet: Fix memory leak in usbnet_disconnect() net: sched: act_ct: fix possible refcount leak in tcf_ct_init() cxgb4: fix missing unlock on ETHOFLD desc collect fail path nvme: add new line after variable declatation nvme: Fix IOC_PR_CLEAR and IOC_PR_RELEASE ioctls for nvme devices net: stmmac: power up/down serdes in stmmac_open/release selftests: Fix the if conditions of in test_extra_filter() clk: imx: imx6sx: remove the SET_RATE_PARENT flag for QSPI clocks clk: iproc: Do not rely on node name for correct PLL setup KVM: x86: Hide IA32_PLATFORM_DCA_CAP[31:0] from the guest x86/alternative: Fix race in try_get_desc() ALSA: hda/hdmi: fix warning about PCM count when used with SOF Linux 5.10.147 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ie6bbda212478a9c78498458b61e39200e6637f31
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 146
|
||||
SUBLEVEL = 147
|
||||
EXTRAVERSION =
|
||||
NAME = Dare mighty things
|
||||
|
||||
|
||||
@@ -1352,8 +1352,7 @@
|
||||
mmc1: mmc@0 {
|
||||
compatible = "ti,am335-sdhci";
|
||||
ti,needs-special-reset;
|
||||
dmas = <&edma_xbar 24 0 0
|
||||
&edma_xbar 25 0 0>;
|
||||
dmas = <&edma 24 0>, <&edma 25 0>;
|
||||
dma-names = "tx", "rx";
|
||||
interrupts = <64>;
|
||||
reg = <0x0 0x1000>;
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
|
||||
pci: pciv3@62000000 {
|
||||
compatible = "arm,integrator-ap-pci", "v3,v360epc-pci";
|
||||
device_type = "pci";
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
|
||||
@@ -1317,22 +1317,23 @@ struct bp_patching_desc {
|
||||
atomic_t refs;
|
||||
};
|
||||
|
||||
static struct bp_patching_desc *bp_desc;
|
||||
static struct bp_patching_desc bp_desc;
|
||||
|
||||
static __always_inline
|
||||
struct bp_patching_desc *try_get_desc(struct bp_patching_desc **descp)
|
||||
struct bp_patching_desc *try_get_desc(void)
|
||||
{
|
||||
/* rcu_dereference */
|
||||
struct bp_patching_desc *desc = __READ_ONCE(*descp);
|
||||
struct bp_patching_desc *desc = &bp_desc;
|
||||
|
||||
if (!desc || !arch_atomic_inc_not_zero(&desc->refs))
|
||||
if (!arch_atomic_inc_not_zero(&desc->refs))
|
||||
return NULL;
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
static __always_inline void put_desc(struct bp_patching_desc *desc)
|
||||
static __always_inline void put_desc(void)
|
||||
{
|
||||
struct bp_patching_desc *desc = &bp_desc;
|
||||
|
||||
smp_mb__before_atomic();
|
||||
arch_atomic_dec(&desc->refs);
|
||||
}
|
||||
@@ -1365,15 +1366,15 @@ noinstr int poke_int3_handler(struct pt_regs *regs)
|
||||
|
||||
/*
|
||||
* Having observed our INT3 instruction, we now must observe
|
||||
* bp_desc:
|
||||
* bp_desc with non-zero refcount:
|
||||
*
|
||||
* bp_desc = desc INT3
|
||||
* bp_desc.refs = 1 INT3
|
||||
* WMB RMB
|
||||
* write INT3 if (desc)
|
||||
* write INT3 if (bp_desc.refs != 0)
|
||||
*/
|
||||
smp_rmb();
|
||||
|
||||
desc = try_get_desc(&bp_desc);
|
||||
desc = try_get_desc();
|
||||
if (!desc)
|
||||
return 0;
|
||||
|
||||
@@ -1427,7 +1428,7 @@ noinstr int poke_int3_handler(struct pt_regs *regs)
|
||||
ret = 1;
|
||||
|
||||
out_put:
|
||||
put_desc(desc);
|
||||
put_desc();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1458,18 +1459,20 @@ static int tp_vec_nr;
|
||||
*/
|
||||
static void text_poke_bp_batch(struct text_poke_loc *tp, unsigned int nr_entries)
|
||||
{
|
||||
struct bp_patching_desc desc = {
|
||||
.vec = tp,
|
||||
.nr_entries = nr_entries,
|
||||
.refs = ATOMIC_INIT(1),
|
||||
};
|
||||
unsigned char int3 = INT3_INSN_OPCODE;
|
||||
unsigned int i;
|
||||
int do_sync;
|
||||
|
||||
lockdep_assert_held(&text_mutex);
|
||||
|
||||
smp_store_release(&bp_desc, &desc); /* rcu_assign_pointer */
|
||||
bp_desc.vec = tp;
|
||||
bp_desc.nr_entries = nr_entries;
|
||||
|
||||
/*
|
||||
* Corresponds to the implicit memory barrier in try_get_desc() to
|
||||
* ensure reading a non-zero refcount provides up to date bp_desc data.
|
||||
*/
|
||||
atomic_set_release(&bp_desc.refs, 1);
|
||||
|
||||
/*
|
||||
* Corresponding read barrier in int3 notifier for making sure the
|
||||
@@ -1557,12 +1560,10 @@ static void text_poke_bp_batch(struct text_poke_loc *tp, unsigned int nr_entries
|
||||
text_poke_sync();
|
||||
|
||||
/*
|
||||
* Remove and synchronize_rcu(), except we have a very primitive
|
||||
* refcount based completion.
|
||||
* Remove and wait for refs to be zero.
|
||||
*/
|
||||
WRITE_ONCE(bp_desc, NULL); /* RCU_INIT_POINTER */
|
||||
if (!atomic_dec_and_test(&desc.refs))
|
||||
atomic_cond_read_acquire(&desc.refs, !VAL);
|
||||
if (!atomic_dec_and_test(&bp_desc.refs))
|
||||
atomic_cond_read_acquire(&bp_desc.refs, !VAL);
|
||||
}
|
||||
|
||||
static void text_poke_loc_init(struct text_poke_loc *tp, void *addr,
|
||||
|
||||
@@ -661,8 +661,6 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
|
||||
entry->edx = 0;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
break;
|
||||
case 0xa: { /* Architectural Performance Monitoring */
|
||||
struct x86_pmu_capability cap;
|
||||
union cpuid10_eax eax;
|
||||
|
||||
@@ -3936,6 +3936,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
{ "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
|
||||
/* These specific Pioneer models have LPM issues */
|
||||
{ "PIONEER BD-RW BDR-207M", NULL, ATA_HORKAGE_NOLPM },
|
||||
{ "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
/* Crucial BX100 SSD 500GB has broken LPM support */
|
||||
{ "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM },
|
||||
|
||||
|
||||
@@ -736,6 +736,7 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
const char *parent_name;
|
||||
struct iproc_clk *iclk_array;
|
||||
struct clk_hw_onecell_data *clk_data;
|
||||
const char *clk_name;
|
||||
|
||||
if (WARN_ON(!pll_ctrl) || WARN_ON(!clk_ctrl))
|
||||
return;
|
||||
@@ -783,7 +784,12 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
iclk = &iclk_array[0];
|
||||
iclk->pll = pll;
|
||||
|
||||
init.name = node->name;
|
||||
ret = of_property_read_string_index(node, "clock-output-names",
|
||||
0, &clk_name);
|
||||
if (WARN_ON(ret))
|
||||
goto err_pll_register;
|
||||
|
||||
init.name = clk_name;
|
||||
init.ops = &iproc_pll_ops;
|
||||
init.flags = 0;
|
||||
parent_name = of_clk_get_parent_name(node, 0);
|
||||
@@ -803,13 +809,11 @@ void iproc_pll_clk_setup(struct device_node *node,
|
||||
goto err_pll_register;
|
||||
|
||||
clk_data->hws[0] = &iclk->hw;
|
||||
parent_name = clk_name;
|
||||
|
||||
/* now initialize and register all leaf clocks */
|
||||
for (i = 1; i < num_clks; i++) {
|
||||
const char *clk_name;
|
||||
|
||||
memset(&init, 0, sizeof(init));
|
||||
parent_name = node->name;
|
||||
|
||||
ret = of_property_read_string_index(node, "clock-output-names",
|
||||
i, &clk_name);
|
||||
|
||||
@@ -280,13 +280,13 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)
|
||||
hws[IMX6SX_CLK_SSI3_SEL] = imx_clk_hw_mux("ssi3_sel", base + 0x1c, 14, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_SSI2_SEL] = imx_clk_hw_mux("ssi2_sel", base + 0x1c, 12, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_SSI1_SEL] = imx_clk_hw_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels));
|
||||
hws[IMX6SX_CLK_QSPI1_SEL] = imx_clk_hw_mux_flags("qspi1_sel", base + 0x1c, 7, 3, qspi1_sels, ARRAY_SIZE(qspi1_sels), CLK_SET_RATE_PARENT);
|
||||
hws[IMX6SX_CLK_QSPI1_SEL] = imx_clk_hw_mux("qspi1_sel", base + 0x1c, 7, 3, qspi1_sels, ARRAY_SIZE(qspi1_sels));
|
||||
hws[IMX6SX_CLK_PERCLK_SEL] = imx_clk_hw_mux("perclk_sel", base + 0x1c, 6, 1, perclk_sels, ARRAY_SIZE(perclk_sels));
|
||||
hws[IMX6SX_CLK_VID_SEL] = imx_clk_hw_mux("vid_sel", base + 0x20, 21, 3, vid_sels, ARRAY_SIZE(vid_sels));
|
||||
hws[IMX6SX_CLK_ESAI_SEL] = imx_clk_hw_mux("esai_sel", base + 0x20, 19, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_CAN_SEL] = imx_clk_hw_mux("can_sel", base + 0x20, 8, 2, can_sels, ARRAY_SIZE(can_sels));
|
||||
hws[IMX6SX_CLK_UART_SEL] = imx_clk_hw_mux("uart_sel", base + 0x24, 6, 1, uart_sels, ARRAY_SIZE(uart_sels));
|
||||
hws[IMX6SX_CLK_QSPI2_SEL] = imx_clk_hw_mux_flags("qspi2_sel", base + 0x2c, 15, 3, qspi2_sels, ARRAY_SIZE(qspi2_sels), CLK_SET_RATE_PARENT);
|
||||
hws[IMX6SX_CLK_QSPI2_SEL] = imx_clk_hw_mux("qspi2_sel", base + 0x2c, 15, 3, qspi2_sels, ARRAY_SIZE(qspi2_sels));
|
||||
hws[IMX6SX_CLK_SPDIF_SEL] = imx_clk_hw_mux("spdif_sel", base + 0x30, 20, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_AUDIO_SEL] = imx_clk_hw_mux("audio_sel", base + 0x30, 7, 2, audio_sels, ARRAY_SIZE(audio_sels));
|
||||
hws[IMX6SX_CLK_ENET_PRE_SEL] = imx_clk_hw_mux("enet_pre_sel", base + 0x34, 15, 3, enet_pre_sels, ARRAY_SIZE(enet_pre_sels));
|
||||
|
||||
@@ -100,15 +100,11 @@ static bool ingenic_tcu_enable_regs(struct clk_hw *hw)
|
||||
bool enabled = false;
|
||||
|
||||
/*
|
||||
* If the SoC has no global TCU clock, we must ungate the channel's
|
||||
* clock to be able to access its registers.
|
||||
* If we have a TCU clock, it will be enabled automatically as it has
|
||||
* been attached to the regmap.
|
||||
* According to the programming manual, a timer channel's registers can
|
||||
* only be accessed when the channel's stop bit is clear.
|
||||
*/
|
||||
if (!tcu->clk) {
|
||||
enabled = !!ingenic_tcu_is_enabled(hw);
|
||||
regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit));
|
||||
}
|
||||
enabled = !!ingenic_tcu_is_enabled(hw);
|
||||
regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit));
|
||||
|
||||
return enabled;
|
||||
}
|
||||
@@ -119,8 +115,7 @@ static void ingenic_tcu_disable_regs(struct clk_hw *hw)
|
||||
const struct ingenic_tcu_clk_info *info = tcu_clk->info;
|
||||
struct ingenic_tcu *tcu = tcu_clk->tcu;
|
||||
|
||||
if (!tcu->clk)
|
||||
regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit));
|
||||
regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit));
|
||||
}
|
||||
|
||||
static u8 ingenic_tcu_get_parent(struct clk_hw *hw)
|
||||
|
||||
@@ -1865,12 +1865,6 @@ EXPORT_SYMBOL_GPL(analogix_dp_remove);
|
||||
int analogix_dp_suspend(struct analogix_dp_device *dp)
|
||||
{
|
||||
clk_disable_unprepare(dp->clock);
|
||||
|
||||
if (dp->plat_data->panel) {
|
||||
if (drm_panel_unprepare(dp->plat_data->panel))
|
||||
DRM_ERROR("failed to turnoff the panel\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_suspend);
|
||||
@@ -1885,13 +1879,6 @@ int analogix_dp_resume(struct analogix_dp_device *dp)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (dp->plat_data->panel) {
|
||||
if (drm_panel_prepare(dp->plat_data->panel)) {
|
||||
DRM_ERROR("failed to setup the panel\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_resume);
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#define SNVS_HPVIDR1_REG 0xF8
|
||||
#define SNVS_HPVIDR1_REG 0xBF8
|
||||
#define SNVS_LPSR_REG 0x4C /* LP Status Register */
|
||||
#define SNVS_LPCR_REG 0x38 /* LP Control Register */
|
||||
#define SNVS_HPSR_REG 0x14
|
||||
|
||||
@@ -1453,7 +1453,7 @@ static int mip4_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
"ce", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(ts->gpio_ce)) {
|
||||
error = PTR_ERR(ts->gpio_ce);
|
||||
if (error != EPROBE_DEFER)
|
||||
if (error != -EPROBE_DEFER)
|
||||
dev_err(&client->dev,
|
||||
"Failed to get gpio: %d\n", error);
|
||||
return error;
|
||||
|
||||
@@ -358,6 +358,12 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)
|
||||
|
||||
int dvb_vb2_querybuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
|
||||
{
|
||||
struct vb2_queue *q = &ctx->vb_q;
|
||||
|
||||
if (b->index >= q->num_buffers) {
|
||||
dprintk(1, "[%s] buffer index out of range\n", ctx->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
vb2_core_querybuf(&ctx->vb_q, b->index, b);
|
||||
dprintk(3, "[%s] index=%d\n", ctx->name, b->index);
|
||||
return 0;
|
||||
@@ -382,8 +388,13 @@ int dvb_vb2_expbuf(struct dvb_vb2_ctx *ctx, struct dmx_exportbuffer *exp)
|
||||
|
||||
int dvb_vb2_qbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)
|
||||
{
|
||||
struct vb2_queue *q = &ctx->vb_q;
|
||||
int ret;
|
||||
|
||||
if (b->index >= q->num_buffers) {
|
||||
dprintk(1, "[%s] buffer index out of range\n", ctx->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = vb2_core_qbuf(&ctx->vb_q, b->index, b, NULL);
|
||||
if (ret) {
|
||||
dprintk(1, "[%s] index=%d errno=%d\n", ctx->name,
|
||||
|
||||
@@ -34,7 +34,7 @@ static void mmc_hsq_pump_requests(struct mmc_hsq *hsq)
|
||||
spin_lock_irqsave(&hsq->lock, flags);
|
||||
|
||||
/* Make sure we are not already running a request now */
|
||||
if (hsq->mrq) {
|
||||
if (hsq->mrq || hsq->recovery_halt) {
|
||||
spin_unlock_irqrestore(&hsq->lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -111,8 +111,8 @@
|
||||
#define CLK_DIV_MASK 0x7f
|
||||
|
||||
/* REG_BUS_WIDTH */
|
||||
#define BUS_WIDTH_8 BIT(2)
|
||||
#define BUS_WIDTH_4 BIT(1)
|
||||
#define BUS_WIDTH_4_SUPPORT BIT(3)
|
||||
#define BUS_WIDTH_4 BIT(2)
|
||||
#define BUS_WIDTH_1 BIT(0)
|
||||
|
||||
#define MMC_VDD_360 23
|
||||
@@ -527,9 +527,6 @@ static void moxart_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
||||
case MMC_BUS_WIDTH_4:
|
||||
writel(BUS_WIDTH_4, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
case MMC_BUS_WIDTH_8:
|
||||
writel(BUS_WIDTH_8, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
default:
|
||||
writel(BUS_WIDTH_1, host->base + REG_BUS_WIDTH);
|
||||
break;
|
||||
@@ -654,16 +651,8 @@ static int moxart_probe(struct platform_device *pdev)
|
||||
dmaengine_slave_config(host->dma_chan_rx, &cfg);
|
||||
}
|
||||
|
||||
switch ((readl(host->base + REG_BUS_WIDTH) >> 3) & 3) {
|
||||
case 1:
|
||||
if (readl(host->base + REG_BUS_WIDTH) & BUS_WIDTH_4_SUPPORT)
|
||||
mmc->caps |= MMC_CAP_4_BIT_DATA;
|
||||
break;
|
||||
case 2:
|
||||
mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
writel(0, host->base + REG_INTERRUPT_MASK);
|
||||
|
||||
|
||||
@@ -502,14 +502,19 @@ static bool mt7531_dual_sgmii_supported(struct mt7530_priv *priv)
|
||||
static int
|
||||
mt7531_pad_setup(struct dsa_switch *ds, phy_interface_t interface)
|
||||
{
|
||||
struct mt7530_priv *priv = ds->priv;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
mt7531_pll_setup(struct mt7530_priv *priv)
|
||||
{
|
||||
u32 top_sig;
|
||||
u32 hwstrap;
|
||||
u32 xtal;
|
||||
u32 val;
|
||||
|
||||
if (mt7531_dual_sgmii_supported(priv))
|
||||
return 0;
|
||||
return;
|
||||
|
||||
val = mt7530_read(priv, MT7531_CREV);
|
||||
top_sig = mt7530_read(priv, MT7531_TOP_SIG_SR);
|
||||
@@ -588,8 +593,6 @@ mt7531_pad_setup(struct dsa_switch *ds, phy_interface_t interface)
|
||||
val |= EN_COREPLL;
|
||||
mt7530_write(priv, MT7531_PLLGP_EN, val);
|
||||
usleep_range(25, 35);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1731,6 +1734,8 @@ mt7531_setup(struct dsa_switch *ds)
|
||||
SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST |
|
||||
SYS_CTRL_REG_RST);
|
||||
|
||||
mt7531_pll_setup(priv);
|
||||
|
||||
if (mt7531_dual_sgmii_supported(priv)) {
|
||||
priv->p5_intf_sel = P5_INTF_SEL_GMAC5_SGMII;
|
||||
|
||||
@@ -2281,8 +2286,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port)
|
||||
case 6:
|
||||
interface = PHY_INTERFACE_MODE_2500BASEX;
|
||||
|
||||
mt7531_pad_setup(ds, interface);
|
||||
|
||||
priv->p6_interface = interface;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "cudbg_entity.h"
|
||||
#include "cudbg_lib.h"
|
||||
#include "cudbg_zlib.h"
|
||||
#include "cxgb4_tc_mqprio.h"
|
||||
|
||||
static const u32 t6_tp_pio_array[][IREG_NUM_ELEM] = {
|
||||
{0x7e40, 0x7e44, 0x020, 28}, /* t6_tp_pio_regs_20_to_3b */
|
||||
@@ -3476,7 +3477,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,
|
||||
for (i = 0; i < utxq->ntxq; i++)
|
||||
QDESC_GET_TXQ(&utxq->uldtxq[i].q,
|
||||
cudbg_uld_txq_to_qtype(j),
|
||||
out_unlock);
|
||||
out_unlock_uld);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3493,7 +3494,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,
|
||||
for (i = 0; i < urxq->nrxq; i++)
|
||||
QDESC_GET_RXQ(&urxq->uldrxq[i].rspq,
|
||||
cudbg_uld_rxq_to_qtype(j),
|
||||
out_unlock);
|
||||
out_unlock_uld);
|
||||
}
|
||||
|
||||
/* ULD FLQ */
|
||||
@@ -3505,7 +3506,7 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,
|
||||
for (i = 0; i < urxq->nrxq; i++)
|
||||
QDESC_GET_FLQ(&urxq->uldrxq[i].fl,
|
||||
cudbg_uld_flq_to_qtype(j),
|
||||
out_unlock);
|
||||
out_unlock_uld);
|
||||
}
|
||||
|
||||
/* ULD CIQ */
|
||||
@@ -3518,29 +3519,34 @@ int cudbg_collect_qdesc(struct cudbg_init *pdbg_init,
|
||||
for (i = 0; i < urxq->nciq; i++)
|
||||
QDESC_GET_RXQ(&urxq->uldrxq[base + i].rspq,
|
||||
cudbg_uld_ciq_to_qtype(j),
|
||||
out_unlock);
|
||||
out_unlock_uld);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&uld_mutex);
|
||||
|
||||
if (!padap->tc_mqprio)
|
||||
goto out;
|
||||
|
||||
mutex_lock(&padap->tc_mqprio->mqprio_mutex);
|
||||
/* ETHOFLD TXQ */
|
||||
if (s->eohw_txq)
|
||||
for (i = 0; i < s->eoqsets; i++)
|
||||
QDESC_GET_TXQ(&s->eohw_txq[i].q,
|
||||
CUDBG_QTYPE_ETHOFLD_TXQ, out);
|
||||
CUDBG_QTYPE_ETHOFLD_TXQ, out_unlock_mqprio);
|
||||
|
||||
/* ETHOFLD RXQ and FLQ */
|
||||
if (s->eohw_rxq) {
|
||||
for (i = 0; i < s->eoqsets; i++)
|
||||
QDESC_GET_RXQ(&s->eohw_rxq[i].rspq,
|
||||
CUDBG_QTYPE_ETHOFLD_RXQ, out);
|
||||
CUDBG_QTYPE_ETHOFLD_RXQ, out_unlock_mqprio);
|
||||
|
||||
for (i = 0; i < s->eoqsets; i++)
|
||||
QDESC_GET_FLQ(&s->eohw_rxq[i].fl,
|
||||
CUDBG_QTYPE_ETHOFLD_FLQ, out);
|
||||
CUDBG_QTYPE_ETHOFLD_FLQ, out_unlock_mqprio);
|
||||
}
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&uld_mutex);
|
||||
out_unlock_mqprio:
|
||||
mutex_unlock(&padap->tc_mqprio->mqprio_mutex);
|
||||
|
||||
out:
|
||||
qdesc_info->qdesc_entry_size = sizeof(*qdesc_entry);
|
||||
@@ -3578,6 +3584,10 @@ out_free:
|
||||
#undef QDESC_GET
|
||||
|
||||
return rc;
|
||||
|
||||
out_unlock_uld:
|
||||
mutex_unlock(&uld_mutex);
|
||||
goto out;
|
||||
}
|
||||
|
||||
int cudbg_collect_flash(struct cudbg_init *pdbg_init,
|
||||
|
||||
@@ -2907,6 +2907,15 @@ static int stmmac_open(struct net_device *dev)
|
||||
goto init_error;
|
||||
}
|
||||
|
||||
if (priv->plat->serdes_powerup) {
|
||||
ret = priv->plat->serdes_powerup(dev, priv->plat->bsp_priv);
|
||||
if (ret < 0) {
|
||||
netdev_err(priv->dev, "%s: Serdes powerup failed\n",
|
||||
__func__);
|
||||
goto init_error;
|
||||
}
|
||||
}
|
||||
|
||||
ret = stmmac_hw_setup(dev, true);
|
||||
if (ret < 0) {
|
||||
netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
|
||||
@@ -3022,6 +3031,10 @@ static int stmmac_release(struct net_device *dev)
|
||||
/* Disable the MAC Rx/Tx */
|
||||
stmmac_mac_set(priv, priv->ioaddr, false);
|
||||
|
||||
/* Powerdown Serdes if there is */
|
||||
if (priv->plat->serdes_powerdown)
|
||||
priv->plat->serdes_powerdown(dev, priv->plat->bsp_priv);
|
||||
|
||||
netif_carrier_off(dev);
|
||||
|
||||
stmmac_release_ptp(priv);
|
||||
@@ -5178,14 +5191,6 @@ int stmmac_dvr_probe(struct device *device,
|
||||
goto error_netdev_register;
|
||||
}
|
||||
|
||||
if (priv->plat->serdes_powerup) {
|
||||
ret = priv->plat->serdes_powerup(ndev,
|
||||
priv->plat->bsp_priv);
|
||||
|
||||
if (ret < 0)
|
||||
goto error_serdes_powerup;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
stmmac_init_fs(ndev);
|
||||
#endif
|
||||
@@ -5197,8 +5202,6 @@ int stmmac_dvr_probe(struct device *device,
|
||||
|
||||
return ret;
|
||||
|
||||
error_serdes_powerup:
|
||||
unregister_netdev(ndev);
|
||||
error_netdev_register:
|
||||
phylink_destroy(priv->phylink);
|
||||
error_phy_setup:
|
||||
|
||||
@@ -1332,6 +1332,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b3, 8)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b6, 8)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81b6, 10)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81c2, 8)}, /* Dell Wireless 5811e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81cc, 8)}, /* Dell Wireless 5816e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81d7, 0)}, /* Dell Wireless 5821e */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81d7, 1)}, /* Dell Wireless 5821e preproduction config */
|
||||
|
||||
@@ -1567,6 +1567,7 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||
struct usbnet *dev;
|
||||
struct usb_device *xdev;
|
||||
struct net_device *net;
|
||||
struct urb *urb;
|
||||
|
||||
dev = usb_get_intfdata(intf);
|
||||
usb_set_intfdata(intf, NULL);
|
||||
@@ -1583,7 +1584,11 @@ void usbnet_disconnect (struct usb_interface *intf)
|
||||
net = dev->net;
|
||||
unregister_netdev (net);
|
||||
|
||||
usb_scuttle_anchored_urbs(&dev->deferred);
|
||||
while ((urb = usb_get_from_anchor(&dev->deferred))) {
|
||||
dev_kfree_skb(urb->context);
|
||||
kfree(urb->sg);
|
||||
usb_free_urb(urb);
|
||||
}
|
||||
|
||||
if (dev->driver_info->unbind)
|
||||
dev->driver_info->unbind (dev, intf);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user