Linux 5.13.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.13.9 kernel.
All users of the 5.13 kernel series must upgrade.
The updated 5.13.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.13.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/firmware/efi/mokvar-table.c | 5 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 3 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c | 6 drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c | 2 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 227 ---------- drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c | 4 drivers/gpu/drm/i915/i915_cmd_parser.c | 118 +++-- drivers/gpu/drm/i915/i915_drv.h | 7 drivers/gpu/drm/i915/i915_request.c | 8 drivers/net/dsa/sja1105/sja1105_clocking.c | 3 drivers/net/dsa/sja1105/sja1105_flower.c | 9 drivers/net/dsa/sja1105/sja1105_main.c | 75 +-- drivers/net/dsa/sja1105/sja1105_spi.c | 4 drivers/net/dsa/sja1105/sja1105_tas.c | 14 drivers/net/ethernet/qlogic/qed/qed_mcp.c | 23 - drivers/net/usb/r8152.c | 30 - drivers/nvme/host/trace.h | 6 drivers/power/supply/ab8500_btemp.c | 7 drivers/power/supply/ab8500_fg.c | 6 drivers/power/supply/abx500_chargalg.c | 7 drivers/regulator/mtk-dvfsrc-regulator.c | 3 drivers/regulator/rtmv20-regulator.c | 2 drivers/spi/spi-mt65xx.c | 19 drivers/spi/spi-stm32.c | 15 drivers/watchdog/iTCO_wdt.c | 12 fs/cifs/fs_context.c | 31 + fs/cifs/fs_context.h | 1 fs/io-wq.c | 7 fs/io_uring.c | 25 - include/linux/mfd/rt5033-private.h | 4 net/bluetooth/hci_core.c | 16 net/core/skbuff.c | 5 net/core/skmsg.c | 68 ++ sound/soc/codecs/rt5682.c | 8 sound/soc/codecs/tlv320aic31xx.h | 4 sound/soc/intel/boards/Kconfig | 18 sound/soc/intel/boards/Makefile | 28 - sound/soc/intel/boards/bxt_da7219_max98357a.c | 1 sound/soc/intel/boards/bxt_rt298.c | 1 sound/soc/intel/boards/cml_rt1011_rt5682.c | 1 sound/soc/intel/boards/ehl_rt5660.c | 1 sound/soc/intel/boards/glk_rt5682_max98357a.c | 1 sound/soc/intel/boards/hda_dsp_common.c | 5 sound/soc/intel/boards/skl_hda_dsp_generic.c | 1 sound/soc/intel/boards/sof_da7219_max98373.c | 1 sound/soc/intel/boards/sof_maxim_common.c | 24 - sound/soc/intel/boards/sof_maxim_common.h | 6 sound/soc/intel/boards/sof_pcm512x.c | 1 sound/soc/intel/boards/sof_rt5682.c | 6 sound/soc/intel/boards/sof_sdw.c | 2 sound/soc/intel/boards/sof_sdw_max98373.c | 81 ++- sound/soc/ti/j721e-evm.c | 18 53 files changed, 482 insertions(+), 500 deletions(-)
Alain Volmat (1):
spi: stm32h7: fix full duplex irq handler handling
Axel Lin (2):
regulator: rt5033: Fix n_voltages settings for BUCK and LDO
regulator: mtk-dvfsrc: Fix wrong dev pointer for devm_regulator_register
Borislav Petkov (1):
efi/mokvar: Reserve the table only if it is in boot services data
ChiYuan Huang (1):
regulator: rtmv20: Fix wrong mask for strobe-polarity-high
Cong Wang (2):
skmsg: Increase sk->sk_drops when dropping packets
skmsg: Pass source psock to sk_psock_skb_redirect()
Greg Kroah-Hartman (3):
Revert "Bluetooth: Shutdown controller after workqueues are flushed or cancelled" Revert "watchdog: iTCO_wdt: Account for rebooting on second timeout" Linux 5.13.9
Guenter Roeck (1):
spi: mediatek: Fix fifo transfer
Jason Ekstrand (2):
drm/i915: Revert "drm/i915/gem: Asynchronous cmdparser" Revert "drm/i915: Propagate errors on awaiting already signaled fences"
Jens Axboe (2):
io_uring: never attempt iopoll reissue from release path
io_uring: explicitly catch any illegal async queue attempt
Jia He (1):
qed: fix possible unpaired spin_{un}lock_bh in _qed_mcp_cmd_and_union()
John Fastabend (1):
bpf, sockmap: On cleanup we additionally need to remove cached skb
Keith Busch (1):
nvme: fix nvme_setup_command metadata trace event
Kyle Russell (1):
ASoC: tlv320aic31xx: fix reversed bclk/wclk master bits
Linus Walleij (1):
power: supply: ab8500: Call battery population once
Nicholas Kazlauskas (1):
drm/amd/display: Fix max vstartup calculation for modes with borders
Oder Chiou (1):
ASoC: rt5682: Fix the issue of garbled recording after powerd_dbus_suspend
Peter Ujfalusi (2):
ASoC: ti: j721e-evm: Fix unbalanced domain activity tracking during startup
ASoC: ti: j721e-evm: Check for not initialized parent_clk_id
Pierre-Louis Bossart (2):
ASoC: Intel: boards: handle hda-dsp-common as a module
ASoC: Intel: boards: create sof-maxim-common module
Pravin B Shelar (1):
net: Fix zero-copy head len calculation.
Rander Wang (1):
ASoC: Intel: boards: fix xrun issue on platform with max98373
Ronnie Sahlberg (2):
cifs: use helpers when parsing uid/gid mount options and validate them
cifs: add missing parsing of backupuid
Stylon Wang (1):
drm/amd/display: Fix ASSR regression on embedded panels
Takashi Iwai (2):
r8152: Fix potential PM refcount imbalance
r8152: Fix a deadlock by doubly PM resume
Victor Lu (1):
drm/amd/display: Fix comparison error in dcn21 DML
Vladimir Oltean (2):
net: dsa: sja1105: parameterize the number of ports
net: dsa: sja1105: fix address learning getting disabled on the CPU port
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 13 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Opossums on Parade
drivers/firmware/efi/mokvar-table.c +4 -1
@@ -180,7 +180,10 @@ void __init efi_mokvar_table_init(void)pr_err ("EFI MOKvar config table is not valid\n" );return ; } -efi_mem_reserve (efi.mokvar_table, map_size_needed); + +if (md.type ==EFI_BOOT_SERVICES_DATA ) +efi_mem_reserve (efi.mokvar_table, map_size_needed); + efi_mokvar_table_size = map_size_needed; }
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +0 -3
@@ -1675,9 +1675,6 @@ static enum dp_panel_mode try_enable_assr(struct dc_stream_state *stream) } else panel_mode =DP_PANEL_MODE_DEFAULT ; -#else -/* turn off ASSR if the implementation is not compiled in */ - panel_mode =DP_PANEL_MODE_DEFAULT ;#endif return panel_mode; }
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +4 -2
@@ -2093,8 +2093,10 @@ int dcn20_populate_dml_pipes_from_context( - timing->v_border_bottom; pipes[pipe_cnt].pipe.dest.htotal = timing->h_total; pipes[pipe_cnt].pipe.dest.vtotal = v_total; - pipes[pipe_cnt].pipe.dest.hactive = timing->h_addressable; - pipes[pipe_cnt].pipe.dest.vactive = timing->v_addressable; + pipes[pipe_cnt].pipe.dest.hactive = + timing->h_addressable + timing->h_border_left + timing->h_border_right; + pipes[pipe_cnt].pipe.dest.vactive = + timing->v_addressable + timing->v_border_top + timing->v_border_bottom; pipes[pipe_cnt].pipe.dest.interlaced = timing->flags.INTERLACE; pipes[pipe_cnt].pipe.dest.pixel_rate_mhz = timing->pix_clk_100hz/10000.0 ;if (timing->timing_3d_format ==TIMING_3D_FORMAT_HW_FRAME_PACKING )
drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c +1 -1
@@ -4889,7 +4889,7 @@ void dml21_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l } }while ((locals->PrefetchSupported[i][j] != true || locals->VRatioInPrefetchSupported[i][j] != true) && (mode_lib->vba.NextMaxVStartup != mode_lib->vba.MaxMaxVStartup[0 ][0 ] - || mode_lib->vba.NextPrefetchMode < mode_lib->vba.MaxPrefetchMode)); + || mode_lib->vba.NextPrefetchMode <= mode_lib->vba.MaxPrefetchMode));if (locals->PrefetchSupported[i][j] == true && locals->VRatioInPrefetchSupported[i][j] == true) { mode_lib->vba.BandwidthAvailableForImmediateFlip = locals->ReturnBWPerState[i][0 ];
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +13 -214
253 lines not on this page · raw message
drivers/gpu/drm/i915/gem/selftests/i915_gem_execbuffer.c +4 -0
@@ -125,6 +125,10 @@ static int igt_gpu_reloc(void *arg)intel_gt_pm_get (&eb.i915->gt);for_each_uabi_engine (eb.engine, eb.i915) { +if (intel_engine_requires_cmd_parser (eb.engine) || +intel_engine_using_cmd_parser (eb.engine)) +continue ; +reloc_cache_init (&eb.reloc_cache, eb.i915);memset (map,POISON_INUSE ,4096 );
drivers/gpu/drm/i915/i915_cmd_parser.c +73 -45
187 lines not on this page · raw message
drivers/gpu/drm/i915/i915_drv.h +1 -6
@@ -1881,17 +1881,12 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type);int i915_cmd_parser_get_version (struct drm_i915_private *dev_priv);int intel_engine_init_cmd_parser (struct intel_engine_cs *engine);void intel_engine_cleanup_cmd_parser (struct intel_engine_cs *engine); -unsigned long *intel_engine_cmd_parser_alloc_jump_whitelist (u32 batch_length, -bool trampoline); -int intel_engine_cmd_parser (struct intel_engine_cs *engine,struct i915_vma *batch,unsigned long batch_offset,unsigned long batch_length,struct i915_vma *shadow, -unsigned long *jump_whitelist, -void *shadow_map, -const void *batch_map); +bool trampoline);#define I915_CMD_PARSER_TRAMPOLINE_SIZE 8/* intel_device_info.c */
drivers/gpu/drm/i915/i915_request.c +2 -6
@@ -1426,10 +1426,8 @@ i915_request_await_execution(struct i915_request *rq, do { fence = *child++; - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { - i915_sw_fence_set_error_once(&rq->submit, fence->error); + if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) continue; - } if (fence->context == rq->fence.context) continue;
@@ -1527,10 +1525,8 @@ i915_request_await_dma_fence(struct i915_request *rq, struct dma_fence *fence) do { fence = *child++; - if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { - i915_sw_fence_set_error_once(&rq->submit, fence->error); + if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) continue; - } /* * Requests on the same timeline are explicitly ordered, along
drivers/net/dsa/sja1105/sja1105_clocking.c +2 -1
@@ -721,9 +721,10 @@ int sja1105_clocking_setup_port(struct sja1105_private *priv, int port)int sja1105_clocking_setup (struct sja1105_private *priv) { +struct dsa_switch *ds = priv->ds;int port, rc; -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) { rc =sja1105_clocking_setup_port (priv, port);if (rc <0 )return rc;
drivers/net/dsa/sja1105/sja1105_flower.c +5 -4
@@ -35,6 +35,7 @@ static int sja1105_setup_bcast_policer(struct sja1105_private *priv, {struct sja1105_rule *rule =sja1105_rule_find (priv, cookie);struct sja1105_l2_policing_entry *policing; +struct dsa_switch *ds = priv->ds;bool new_rule = false;unsigned long p;int rc;
@@ -59,7 +60,7 @@ static int sja1105_setup_bcast_policer(struct sja1105_private *priv, policing = priv->static_config.tables[BLK_IDX_L2_POLICING ].entries; -if (policing[(SJA1105_NUM_PORTS *SJA1105_NUM_TC ) + port].sharindx != port) { +if (policing[(ds->num_ports *SJA1105_NUM_TC ) + port].sharindx != port) {NL_SET_ERR_MSG_MOD (extack,"Port already has a broadcast policer" ); rc = -EEXIST ;
@@ -72,7 +73,7 @@ static int sja1105_setup_bcast_policer(struct sja1105_private *priv,* point to the newly allocated policer */ for_each_set_bit (p, &rule->port_mask,SJA1105_NUM_PORTS ) { -int bcast = (SJA1105_NUM_PORTS *SJA1105_NUM_TC ) + p; +int bcast = (ds->num_ports *SJA1105_NUM_TC ) + p; policing[bcast].sharindx = rule->bcast_pol.sharindx; }
@@ -435,7 +436,7 @@ int sja1105_cls_flower_del(struct dsa_switch *ds, int port, policing = priv->static_config.tables[BLK_IDX_L2_POLICING ].entries;if (rule->type ==SJA1105_RULE_BCAST_POLICER ) { -int bcast = (SJA1105_NUM_PORTS *SJA1105_NUM_TC ) + port; +int bcast = (ds->num_ports *SJA1105_NUM_TC ) + port; old_sharindx = policing[bcast].sharindx; policing[bcast].sharindx = port;
@@ -486,7 +487,7 @@ void sja1105_flower_setup(struct dsa_switch *ds)INIT_LIST_HEAD (&priv->flow_block.rules); -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) +for (port =0 ; port < ds->num_ports; port++) priv->flow_block.l2_policer_used[port] = true; }
drivers/net/dsa/sja1105/sja1105_main.c +42 -33
235 lines not on this page · raw message
drivers/net/dsa/sja1105/sja1105_spi.c +2 -2
@@ -339,10 +339,10 @@ int static_config_buf_prepare_for_upload(struct sja1105_private *priv,int sja1105_static_config_upload (struct sja1105_private *priv) { -unsigned long port_bitmap =GENMASK_ULL (SJA1105_NUM_PORTS -1 ,0 );struct sja1105_static_config *config = &priv->static_config;const struct sja1105_regs *regs = priv->info->regs;struct device *dev = &priv->spidev->dev; +struct dsa_switch *ds = priv->ds;struct sja1105_status status;int rc, retries =RETRIES ;u8 *config_buf;
@@ -363,7 +363,7 @@ int sja1105_static_config_upload(struct sja1105_private *priv)* Tx on all ports and waiting for current packet to drain. * Otherwise, the PHY will see an unterminated Ethernet packet. */ - rc =sja1105_inhibit_tx (priv, port_bitmap, true); + rc =sja1105_inhibit_tx (priv,GENMASK_ULL (ds->num_ports -1 ,0 ), true);if (rc <0 ) {dev_err (dev,"Failed to inhibit Tx on ports\n" ); rc = -ENXIO ;
drivers/net/dsa/sja1105/sja1105_tas.c +8 -6
@@ -27,7 +27,7 @@ static int sja1105_tas_set_runtime_params(struct sja1105_private *priv) tas_data->enabled = false; -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) {const struct tc_taprio_qopt_offload *offload; offload = tas_data->offload[port];
@@ -164,6 +164,7 @@ int sja1105_init_scheduling(struct sja1105_private *priv)struct sja1105_tas_data *tas_data = &priv->tas_data;struct sja1105_gating_config *gating_cfg = &tas_data->gating_cfg;struct sja1105_schedule_entry *schedule; +struct dsa_switch *ds = priv->ds;struct sja1105_table *table;int schedule_start_idx;s64 entry_point_delta;
@@ -207,7 +208,7 @@ int sja1105_init_scheduling(struct sja1105_private *priv) }/* Figure out the dimensioning of the problem */ -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) {if (tas_data->offload[port]) { num_entries += tas_data->offload[port]->num_entries; num_cycles++;
@@ -269,7 +270,7 @@ int sja1105_init_scheduling(struct sja1105_private *priv) schedule_entry_points_params->clksrc =SJA1105_TAS_CLKSRC_PTP ; schedule_entry_points_params->actsubsch = num_cycles -1 ; -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) {const struct tc_taprio_qopt_offload *offload;/* Relative base time */ s64 rbt;
@@ -468,6 +469,7 @@ bool sja1105_gating_check_conflicts(struct sja1105_private *priv, int port,struct sja1105_gating_config *gating_cfg = &priv->tas_data.gating_cfg;size_t num_entries = gating_cfg->num_entries;struct tc_taprio_qopt_offload *dummy; +struct dsa_switch *ds = priv->ds;struct sja1105_gate_entry *e;bool conflict;int i =0 ;
@@ -491,7 +493,7 @@ bool sja1105_gating_check_conflicts(struct sja1105_private *priv, int port,if (port !=-1 ) { conflict =sja1105_tas_check_conflicts (priv, port, dummy); }else { -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) { conflict =sja1105_tas_check_conflicts (priv, port, dummy);if (conflict)
@@ -554,7 +556,7 @@ int sja1105_setup_tc_taprio(struct dsa_switch *ds, int port, } } -for (other_port =0 ; other_port <SJA1105_NUM_PORTS ; other_port++) { +for (other_port =0 ; other_port < ds->num_ports; other_port++) {if (other_port == port)continue ;
@@ -885,7 +887,7 @@ void sja1105_tas_teardown(struct dsa_switch *ds)cancel_work_sync (&priv->tas_data.tas_work); -for (port =0 ; port <SJA1105_NUM_PORTS ; port++) { +for (port =0 ; port < ds->num_ports; port++) { offload = priv->tas_data.offload[port];if (!offload)continue ;
drivers/net/ethernet/qlogic/qed/qed_mcp.c +17 -6
@@ -474,14 +474,18 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,spin_lock_bh (&p_hwfn->mcp_info->cmd_lock); -if (!qed_mcp_has_pending_cmd (p_hwfn)) +if (!qed_mcp_has_pending_cmd (p_hwfn)) { +spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);break ; + } rc =qed_mcp_update_pending_cmd (p_hwfn, p_ptt); -if (!rc) +if (!rc) { +spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);break ; -else if (rc != -EAGAIN ) + }else if (rc != -EAGAIN ) { goto err; + }spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);
@@ -498,6 +502,8 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,return -EAGAIN ; } +spin_lock_bh (&p_hwfn->mcp_info->cmd_lock); +/* Send the mailbox command */ qed_mcp_reread_offsets (p_hwfn, p_ptt); seq_num = ++p_hwfn->mcp_info->drv_mb_seq;
@@ -524,14 +530,18 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,spin_lock_bh (&p_hwfn->mcp_info->cmd_lock); -if (p_cmd_elem->b_is_completed) +if (p_cmd_elem->b_is_completed) { +spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);break ; + } rc =qed_mcp_update_pending_cmd (p_hwfn, p_ptt); -if (!rc) +if (!rc) { +spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);break ; -else if (rc != -EAGAIN ) + }else if (rc != -EAGAIN ) { goto err; + }spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock); }while (++cnt < max_retries);
@@ -554,6 +564,7 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,return -EAGAIN ; } +spin_lock_bh (&p_hwfn->mcp_info->cmd_lock);qed_mcp_cmd_del_elem (p_hwfn, p_cmd_elem);spin_unlock_bh (&p_hwfn->mcp_info->cmd_lock);
drivers/net/usb/r8152.c +20 -10
@@ -1550,7 +1550,8 @@ static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, u32 advertising); -static int rtl8152_set_mac_address (struct net_device *netdev,void *p) +static int __rtl8152_set_mac_address (struct net_device *netdev,void *p, +bool in_resume) {struct r8152 *tp =netdev_priv (netdev);struct sockaddr *addr = p;
@@ -1559,9 +1560,11 @@ static int rtl8152_set_mac_address(struct net_device *netdev, void *p)if (!is_valid_ether_addr (addr->sa_data)) goto out1; - ret =usb_autopm_get_interface (tp->intf); -if (ret <0 ) - goto out1; +if (!in_resume) { + ret =usb_autopm_get_interface (tp->intf); +if (ret <0 ) + goto out1; + }mutex_lock (&tp->control);
@@ -1573,11 +1576,17 @@ static int rtl8152_set_mac_address(struct net_device *netdev, void *p)mutex_unlock (&tp->control); -usb_autopm_put_interface (tp->intf); +if (!in_resume) +usb_autopm_put_interface (tp->intf); out1:return ret; } +static int rtl8152_set_mac_address (struct net_device *netdev,void *p) +{ +return __rtl8152_set_mac_address (netdev, p, false); +} +/* Devices containing proper chips can support a persistent * host system provided MAC address. * Examples of this are Dell TB15 and Dell WD15 docks
@@ -1696,7 +1705,7 @@ static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)return ret; } -static int set_ethernet_addr (struct r8152 *tp) +static int set_ethernet_addr (struct r8152 *tp,bool in_resume) {struct net_device *dev = tp->netdev;struct sockaddr sa;
@@ -1709,7 +1718,7 @@ static int set_ethernet_addr(struct r8152 *tp)if (tp->version ==RTL_VER_01 )ether_addr_copy (dev->dev_addr, sa.sa_data);else - ret =rtl8152_set_mac_address (dev, &sa); + ret =__rtl8152_set_mac_address (dev, &sa, in_resume);return ret; }
@@ -6761,9 +6770,10 @@ static int rtl8152_close(struct net_device *netdev) tp->rtl_ops.down (tp);mutex_unlock (&tp->control); + } +if (!res)usb_autopm_put_interface (tp->intf); - }free_all_mem (tp);
@@ -8441,7 +8451,7 @@ static int rtl8152_reset_resume(struct usb_interface *intf)clear_bit (SELECTIVE_SUSPEND , &tp->flags); tp->rtl_ops.init (tp);queue_delayed_work (system_long_wq, &tp->hw_phy_work,0 ); -set_ethernet_addr (tp); +set_ethernet_addr (tp, true);return rtl8152_resume (intf); }
@@ -9561,7 +9571,7 @@ static int rtl8152_probe(struct usb_interface *intf, tp->rtl_fw.retry = true;#endif queue_delayed_work (system_long_wq, &tp->hw_phy_work,0 ); -set_ethernet_addr (tp); +set_ethernet_addr (tp, false);usb_set_intfdata (intf, tp);
drivers/nvme/host/trace.h +3 -3
@@ -56,7 +56,7 @@ TRACE_EVENT(nvme_setup_cmd, __field(u8, fctype) __field(u16, cid) __field(u32, nsid) - __field(u64, metadata) + __field(bool, metadata)__array (u8, cdw10,24 ) ), TP_fast_assign(
@@ -66,13 +66,13 @@ TRACE_EVENT(nvme_setup_cmd, __entry->flags = cmd->common.flags; __entry->cid = cmd->common.command_id; __entry->nsid =le32_to_cpu (cmd->common.nsid); - __entry->metadata =le64_to_cpu (cmd->common.metadata); + __entry->metadata = !!blk_integrity_rq (req); __entry->fctype = cmd->fabrics.fctype;__assign_disk_name (__entry->disk, req->rq_disk);memcpy (__entry->cdw10, &cmd->common.cdw10,sizeof (__entry->cdw10)); ), - TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%llx, cmd=(%s %s)", + TP_printk("nvme%d: %sqid=%d, cmdid=%u, nsid=%u, flags=0x%x, meta=0x%x, cmd=(%s %s)", __entry->ctrl_id, __print_disk_name(__entry->disk), __entry->qid, __entry->cid, __entry->nsid, __entry->flags, __entry->metadata,
drivers/power/supply/ab8500_btemp.c +0 -7
@@ -983,7 +983,6 @@ static const struct component_ops ab8500_btemp_component_ops = {static int ab8500_btemp_probe (struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node;struct power_supply_config psy_cfg = {};struct device *dev = &pdev->dev;struct ab8500_btemp *di;
@@ -996,12 +995,6 @@ static int ab8500_btemp_probe(struct platform_device *pdev) di->bm = &ab8500_bm_data; - ret =ab8500_bm_of_probe (dev, np, di->bm); -if (ret) { -dev_err (dev,"failed to get battery information\n" ); -return ret; - } -/* get parent data */ di->dev = dev; di->parent =dev_get_drvdata (pdev->dev.parent);
drivers/power/supply/ab8500_fg.c +0 -6
@@ -3058,12 +3058,6 @@ static int ab8500_fg_probe(struct platform_device *pdev) di->bm = &ab8500_bm_data; - ret =ab8500_bm_of_probe (dev, np, di->bm); -if (ret) { -dev_err (dev,"failed to get battery information\n" ); -return ret; - } -mutex_init (&di->cc_lock);/* get parent data */
drivers/power/supply/abx500_chargalg.c +0 -7
@@ -2002,7 +2002,6 @@ static const struct component_ops abx500_chargalg_component_ops = {static int abx500_chargalg_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev; -struct device_node *np = dev->of_node;struct power_supply_config psy_cfg = {};struct abx500_chargalg *di;int ret =0 ;
@@ -2013,12 +2012,6 @@ static int abx500_chargalg_probe(struct platform_device *pdev) di->bm = &ab8500_bm_data; - ret =ab8500_bm_of_probe (dev, np, di->bm); -if (ret) { -dev_err (dev,"failed to get battery information\n" ); -return ret; - } -/* get device struct and parent */ di->dev = dev; di->parent =dev_get_drvdata (pdev->dev.parent);
drivers/regulator/mtk-dvfsrc-regulator.c +1 -2
@@ -179,8 +179,7 @@ static int dvfsrc_vcore_regulator_probe(struct platform_device *pdev)for (i =0 ; i < regulator_init_data->size; i++) { config.dev = dev->parent; config.driver_data = (mt_regulators + i); - rdev =devm_regulator_register (dev->parent, - &(mt_regulators + i)->desc, + rdev =devm_regulator_register (dev, &(mt_regulators + i)->desc, &config);if (IS_ERR (rdev)) { dev_err(dev, "failed to register %s\n",
drivers/regulator/rtmv20-regulator.c +1 -1
@@ -37,7 +37,7 @@#define RTMV20_WIDTH2_MASK GENMASK(7, 0)#define RTMV20_LBPLVL_MASK GENMASK(3, 0)#define RTMV20_LBPEN_MASK BIT(7) -#define RTMV20_STROBEPOL_MASK BIT(1) +#define RTMV20_STROBEPOL_MASK BIT(0)#define RTMV20_VSYNPOL_MASK BIT(1)#define RTMV20_FSINEN_MASK BIT(7)#define RTMV20_ESEN_MASK BIT(6)
drivers/spi/spi-mt65xx.c +5 -14
@@ -426,24 +426,15 @@ static int mtk_spi_fifo_transfer(struct spi_master *master,mtk_spi_prepare_transfer (master, xfer);mtk_spi_setup_packet (master); - cnt = xfer->len /4 ; -if (xfer->tx_buf) +if (xfer->tx_buf) { + cnt = xfer->len /4 ;iowrite32_rep (mdata->base +SPI_TX_DATA_REG , xfer->tx_buf, cnt); - -if (xfer->rx_buf) -ioread32_rep (mdata->base +SPI_RX_DATA_REG , xfer->rx_buf, cnt); - - remainder = xfer->len %4 ; -if (remainder >0 ) { - reg_val =0 ; -if (xfer->tx_buf) { + remainder = xfer->len %4 ; +if (remainder >0 ) { + reg_val =0 ;memcpy (®_val, xfer->tx_buf + (cnt *4 ), remainder);writel (reg_val, mdata->base +SPI_TX_DATA_REG ); } -if (xfer->rx_buf) { - reg_val =readl (mdata->base +SPI_RX_DATA_REG ); -memcpy (xfer->rx_buf + (cnt *4 ), ®_val, remainder); - } }mtk_spi_enable_transfer (master);
drivers/spi/spi-stm32.c +9 -6
@@ -884,15 +884,18 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) ier =readl_relaxed (spi->base +STM32H7_SPI_IER ); mask = ier; -/* EOTIE is triggered on EOT, SUSP and TXC events. */ +/* +* EOTIE enables irq from EOT, SUSP and TXC events. We need to set +* SUSP to acknowledge it later. TXC is automatically cleared +*/ + mask |=STM32H7_SPI_SR_SUSP ;/* -* When TXTF is set, DXPIE and TXPIE are cleared. So in case of -* Full-Duplex, need to poll RXP event to know if there are remaining -* data, before disabling SPI. +* DXPIE is set in Full-Duplex, one IT will be raised if TXP and RXP +* are set. So in case of Full-Duplex, need to poll TXP and RXP event. */ -if (spi->rx_buf && !spi->cur_usedma) - mask |=STM32H7_SPI_SR_RXP ; +if ((spi->cur_comm ==SPI_FULL_DUPLEX ) && !spi->cur_usedma) + mask |=STM32H7_SPI_SR_TXP |STM32H7_SPI_SR_RXP ;if (!(sr & mask)) { dev_warn(spi->dev, "spurious IT (sr=0x%08x, ier=0x%08x)\n",
drivers/watchdog/iTCO_wdt.c +3 -9
@@ -71,8 +71,6 @@#define TCOBASE (p) ((p)->tco_res->start)/* SMI Control and Enable Register */ #define SMI_EN (p) ((p)->smi_res->start) -#define TCO_EN (1 << 13) -#define GBL_SMI_EN (1 << 0)#define TCO_RLD (p) (TCOBASE(p) + 0x00)/* TCO Timer Reload/Curr. Value */ #define TCOv1_TMR (p) (TCOBASE(p) + 0x01)/* TCOv1 Timer Initial Value*/
@@ -357,12 +355,8 @@ static int iTCO_wdt_set_timeout(struct watchdog_device *wd_dev, unsigned int t) tmrval =seconds_to_ticks (p, t); -/* -* If TCO SMIs are off, the timer counts down twice before rebooting. -* Otherwise, the BIOS generally reboots when the SMI triggers. -*/ -if (p->smi_res && - (SMI_EN (p) & (TCO_EN |GBL_SMI_EN )) != (TCO_EN |GBL_SMI_EN )) +/* For TCO v1 the timer counts down twice before rebooting */ +if (p->iTCO_version ==1 ) tmrval /=2 ;/* from the specs: */
@@ -527,7 +521,7 @@ static int iTCO_wdt_probe(struct platform_device *pdev)* Disables TCO logic generating an SMI# */ val32 =inl (SMI_EN (p)); - val32 &= ~TCO_EN ;/* Turn off SMI clearing watchdog */ + val32 &=0xffffdfff ;/* Turn off SMI clearing watchdog */ outl (val32,SMI_EN (p)); }
fs/cifs/fs_context.c +26 -5
@@ -322,7 +322,6 @@ smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx new_ctx->UNC =NULL ; new_ctx->source =NULL ; new_ctx->iocharset =NULL ; -/* * Make sure to stay in sync with smb3_cleanup_fs_context_contents() */
@@ -792,6 +791,8 @@ static int smb3_fs_context_parse_param(struct fs_context *fc,int i, opt;bool is_smb3 = !strcmp (fc->fs_type->name,"smb3" );bool skip_parsing = false; +kuid_t uid; +kgid_t gid;cifs_dbg (FYI ,"CIFS: parsing cifs mount option '%s'\n" , param->key);
@@ -904,18 +905,38 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, }break ;case Opt_uid: - ctx->linux_uid.val = result.uint_32; + uid =make_kuid (current_user_ns (), result.uint_32); +if (!uid_valid (uid)) + goto cifs_parse_mount_err; + ctx->linux_uid = uid; ctx->uid_specified = true;break ;case Opt_cruid: - ctx->cred_uid.val = result.uint_32; + uid =make_kuid (current_user_ns (), result.uint_32); +if (!uid_valid (uid)) + goto cifs_parse_mount_err; + ctx->cred_uid = uid; + ctx->cruid_specified = true; +break ; +case Opt_backupuid: + uid =make_kuid (current_user_ns (), result.uint_32); +if (!uid_valid (uid)) + goto cifs_parse_mount_err; + ctx->backupuid = uid; + ctx->backupuid_specified = true;break ;case Opt_backupgid: - ctx->backupgid.val = result.uint_32; + gid =make_kgid (current_user_ns (), result.uint_32); +if (!gid_valid (gid)) + goto cifs_parse_mount_err; + ctx->backupgid = gid; ctx->backupgid_specified = true;break ;case Opt_gid: - ctx->linux_gid.val = result.uint_32; + gid =make_kgid (current_user_ns (), result.uint_32); +if (!gid_valid (gid)) + goto cifs_parse_mount_err; + ctx->linux_gid = gid; ctx->gid_specified = true;break ;case Opt_port:
fs/cifs/fs_context.h +1 -0
@@ -155,6 +155,7 @@ enum cifs_param {struct smb3_fs_context {bool uid_specified; +bool cruid_specified;bool gid_specified;bool sloppy;bool got_ip;
fs/io-wq.c +6 -1
@@ -736,7 +736,12 @@ static void io_wqe_enqueue(struct io_wqe *wqe, struct io_wq_work *work)int work_flags;unsigned long flags; -if (test_bit (IO_WQ_BIT_EXIT , &wqe->wq->state)) { +/* +* If io-wq is exiting for this task, or if the request has explicitly +* been marked as one that should not get executed, cancel it here. +*/ +if (test_bit (IO_WQ_BIT_EXIT , &wqe->wq->state) || + (work->flags &IO_WQ_WORK_CANCEL )) {io_run_cancel (work, wqe);return ; }
fs/io_uring.c +18 -7
@@ -1282,6 +1282,17 @@ static void io_queue_async_work(struct io_kiocb *req)/* init ->work of the whole link before punting */ io_prep_async_link (req); + +/* +* Not expected to happen, but if we do have a bug where this _can_ +* happen, catch it here and ensure the request is marked as +* canceled. That will make io-wq go through the usual work cancel +* procedure rather than attempt to run this request (or create a new +* worker for it). +*/ +if (WARN_ON_ONCE (!same_thread_group (req->task, current))) + req->work.flags |=IO_WQ_WORK_CANCEL ; +trace_io_uring_queue_async_work (ctx,io_wq_is_hashed (&req->work), req, &req->work, req->flags);io_wq_enqueue (tctx->io_wq, &req->work);
@@ -2252,7 +2263,7 @@ static inline bool io_run_task_work(void)* Find and free completed poll iocbs */ static void io_iopoll_complete (struct io_ring_ctx *ctx,unsigned int *nr_events, -struct list_head *done) +struct list_head *done,bool resubmit) {struct req_batch rb;struct io_kiocb *req;
@@ -2267,7 +2278,7 @@ static void io_iopoll_complete(struct io_ring_ctx *ctx, unsigned int *nr_events, req = list_first_entry(done, struct io_kiocb, inflight_entry);list_del (&req->inflight_entry); -if (READ_ONCE (req->result) == -EAGAIN && +if (READ_ONCE (req->result) == -EAGAIN && resubmit && !(req->flags &REQ_F_DONT_REISSUE )) { req->iopoll_completed =0 ;req_ref_get (req);
@@ -2291,7 +2302,7 @@ static void io_iopoll_complete(struct io_ring_ctx *ctx, unsigned int *nr_events, }static int io_do_iopoll (struct io_ring_ctx *ctx,unsigned int *nr_events, -long min) +long min,bool resubmit) {struct io_kiocb *req, *tmp;LIST_HEAD (done);
@@ -2334,7 +2345,7 @@ static int io_do_iopoll(struct io_ring_ctx *ctx, unsigned int *nr_events, }if (!list_empty (&done)) -io_iopoll_complete (ctx, nr_events, &done); +io_iopoll_complete (ctx, nr_events, &done, resubmit);return ret; }
@@ -2352,7 +2363,7 @@ static void io_iopoll_try_reap_events(struct io_ring_ctx *ctx)while (!list_empty (&ctx->iopoll_list)) {unsigned int nr_events =0 ; -io_do_iopoll (ctx, &nr_events,0 ); +io_do_iopoll (ctx, &nr_events,0 , false);/* let it sleep and repeat later if can't complete a request */ if (nr_events ==0 )
@@ -2410,7 +2421,7 @@ static int io_iopoll_check(struct io_ring_ctx *ctx, long min)if (list_empty (&ctx->iopoll_list))break ; } - ret =io_do_iopoll (ctx, &nr_events, min); + ret =io_do_iopoll (ctx, &nr_events, min, true); }while (!ret && nr_events < min && !need_resched ()); out:mutex_unlock (&ctx->uring_lock);
@@ -6804,7 +6815,7 @@ static int __io_sq_thread(struct io_ring_ctx *ctx, bool cap_entries)mutex_lock (&ctx->uring_lock);if (!list_empty (&ctx->iopoll_list)) -io_do_iopoll (ctx, &nr_events,0 ); +io_do_iopoll (ctx, &nr_events,0 , true);/* * Don't submit if refs are dying, good for io_uring_register(),
include/linux/mfd/rt5033-private.h +2 -2
@@ -200,13 +200,13 @@ enum rt5033_reg {#define RT5033_REGULATOR_BUCK_VOLTAGE_MIN 1000000U#define RT5033_REGULATOR_BUCK_VOLTAGE_MAX 3000000U#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP 100000U -#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 32 +#define RT5033_REGULATOR_BUCK_VOLTAGE_STEP_NUM 21/* RT5033 regulator LDO output voltage uV */ #define RT5033_REGULATOR_LDO_VOLTAGE_MIN 1200000U#define RT5033_REGULATOR_LDO_VOLTAGE_MAX 3000000U#define RT5033_REGULATOR_LDO_VOLTAGE_STEP 100000U -#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 32 +#define RT5033_REGULATOR_LDO_VOLTAGE_STEP_NUM 19/* RT5033 regulator SAFE LDO output voltage uV */ #define RT5033_REGULATOR_SAFE_LDO_VOLTAGE 4900000U
net/bluetooth/hci_core.c +8 -8
@@ -1721,6 +1721,14 @@ int hci_dev_do_close(struct hci_dev *hdev)BT_DBG ("%s %p" , hdev->name, hdev); +if (!hci_dev_test_flag (hdev,HCI_UNREGISTER ) && + !hci_dev_test_flag (hdev,HCI_USER_CHANNEL ) && +test_bit (HCI_UP , &hdev->flags)) { +/* Execute vendor specific shutdown routine */ +if (hdev->shutdown) + hdev->shutdown (hdev); + } +cancel_delayed_work (&hdev->power_off);hci_request_cancel_all (hdev);
@@ -1797,14 +1805,6 @@ int hci_dev_do_close(struct hci_dev *hdev)clear_bit (HCI_INIT , &hdev->flags); } -if (!hci_dev_test_flag (hdev,HCI_UNREGISTER ) && - !hci_dev_test_flag (hdev,HCI_USER_CHANNEL ) && -test_bit (HCI_UP , &hdev->flags)) { -/* Execute vendor specific shutdown routine */ -if (hdev->shutdown) - hdev->shutdown (hdev); - } -/* flush cmd work */ flush_work (&hdev->cmd_work);
net/core/skbuff.c +4 -1
@@ -3006,8 +3006,11 @@ skb_zerocopy_headlen(const struct sk_buff *from)if (!from->head_frag ||skb_headlen (from) <L1_CACHE_BYTES || -skb_shinfo (from)->nr_frags >=MAX_SKB_FRAGS ) +skb_shinfo (from)->nr_frags >=MAX_SKB_FRAGS ) { hlen =skb_headlen (from); +if (!hlen) + hlen = from->len; + }if (skb_has_frag_list (from)) hlen = from->len;
net/core/skmsg.c +49 -19
167 lines not on this page · raw message
sound/soc/codecs/rt5682.c +6 -2
@@ -973,10 +973,14 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)rt5682_enable_push_button_irq (component, false);snd_soc_component_update_bits (component,RT5682_CBJ_CTRL_1 ,RT5682_TRIG_JD_MASK ,RT5682_TRIG_JD_LOW ); -if (!snd_soc_dapm_get_pin_status (dapm,"MICBIAS" )) +if (!snd_soc_dapm_get_pin_status (dapm,"MICBIAS" ) && + !snd_soc_dapm_get_pin_status (dapm,"PLL1" ) && + !snd_soc_dapm_get_pin_status (dapm,"PLL2B" ))snd_soc_component_update_bits (component,RT5682_PWR_ANLG_1 ,RT5682_PWR_MB ,0 ); -if (!snd_soc_dapm_get_pin_status (dapm,"Vref2" )) +if (!snd_soc_dapm_get_pin_status (dapm,"Vref2" ) && + !snd_soc_dapm_get_pin_status (dapm,"PLL1" ) && + !snd_soc_dapm_get_pin_status (dapm,"PLL2B" ))snd_soc_component_update_bits (component,RT5682_PWR_ANLG_1 ,RT5682_PWR_VREF2 ,0 ); snd_soc_component_update_bits(component, RT5682_PWR_ANLG_3,
sound/soc/codecs/tlv320aic31xx.h +2 -2
@@ -151,8 +151,8 @@ struct aic31xx_pdata {#define AIC31XX_WORD_LEN_24BITS 0x02#define AIC31XX_WORD_LEN_32BITS 0x03#define AIC31XX_IFACE1_MASTER_MASK GENMASK(3, 2) -#define AIC31XX_BCLK_MASTER BIT(2) -#define AIC31XX_WCLK_MASTER BIT(3) +#define AIC31XX_BCLK_MASTER BIT(3) +#define AIC31XX_WCLK_MASTER BIT(2)/* AIC31XX_DATA_OFFSET */ #define AIC31XX_DATA_OFFSET_MASK GENMASK(7, 0)
sound/soc/intel/boards/Kconfig +18 -0
@@ -26,6 +26,12 @@ config SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES interface. If unsure select N. +config SND_SOC_INTEL_HDA_DSP_COMMON + tristate + +config SND_SOC_INTEL_SOF_MAXIM_COMMON + tristate + if SND_SOC_INTEL_CATPT config SND_SOC_INTEL_HASWELL_MACH
@@ -278,6 +284,7 @@ config SND_SOC_INTEL_DA7219_MAX98357A_GENERIC select SND_SOC_MAX98390 select SND_SOC_DMIC select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON config SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON tristate
@@ -304,6 +311,7 @@ config SND_SOC_INTEL_BXT_RT298_MACH select SND_SOC_RT298 select SND_SOC_DMIC select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON help This adds support for ASoC machine driver for Broxton platforms with RT286 I2S audio codec.
@@ -422,6 +430,7 @@ config SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH select SND_SOC_MAX98357A select SND_SOC_DMIC select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON help This adds support for ASoC machine driver for Geminilake platforms with RT5682 + MAX98357A I2S audio codec.
@@ -437,6 +446,7 @@ config SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH depends on SND_HDA_CODEC_HDMI depends on GPIOLIB select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON select SND_SOC_DMIC # SND_SOC_HDAC_HDA is already selected help
@@ -461,6 +471,8 @@ config SND_SOC_INTEL_SOF_RT5682_MACH select SND_SOC_RT5682_I2C select SND_SOC_DMIC select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON + select SND_SOC_INTEL_SOF_MAXIM_COMMON help This adds support for ASoC machine driver for SOF platforms with rt5682 codec.
@@ -473,6 +485,7 @@ config SND_SOC_INTEL_SOF_PCM512x_MACH depends on (SND_SOC_SOF_HDA_AUDIO_CODEC && (MFD_INTEL_LPSS || COMPILE_TEST)) ||\ (SND_SOC_SOF_BAYTRAIL && (X86_INTEL_LPSS || COMPILE_TEST)) depends on SND_HDA_CODEC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON select SND_SOC_PCM512x_I2C help This adds support for ASoC machine driver for SOF platforms
@@ -504,6 +517,7 @@ config SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH select SND_SOC_RT5682_I2C select SND_SOC_DMIC select SND_SOC_HDAC_HDMI + select SND_SOC_INTEL_HDA_DSP_COMMON help This adds support for ASoC machine driver for SOF platform with RT1011 + RT5682 I2S codec.
@@ -519,6 +533,7 @@ config SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH depends on I2C && ACPI && GPIOLIB depends on MFD_INTEL_LPSS || COMPILE_TEST depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC + select SND_SOC_INTEL_HDA_DSP_COMMON select SND_SOC_DA7219 select SND_SOC_MAX98373_I2C select SND_SOC_DMIC
@@ -539,6 +554,7 @@ config SND_SOC_INTEL_EHL_RT5660_MACH depends on SND_HDA_CODEC_HDMI && SND_SOC_SOF_HDA_AUDIO_CODEC select SND_SOC_RT5660 select SND_SOC_DMIC + select SND_SOC_INTEL_HDA_DSP_COMMON help This adds support for ASoC machine driver for Elkhart Lake platform with RT5660 I2S audio codec.
@@ -566,6 +582,8 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH select SND_SOC_RT715_SDCA_SDW select SND_SOC_RT5682_SDW select SND_SOC_DMIC + select SND_SOC_INTEL_HDA_DSP_COMMON + select SND_SOC_INTEL_SOF_MAXIM_COMMON help Add support for Intel SoundWire-based platforms connected to MAX98373, RT700, RT711, RT1308 and RT715
sound/soc/intel/boards/Makefile +17 -11
@@ -3,11 +3,11 @@ snd-soc-sst-haswell-objs := haswell.o snd-soc-sst-bdw-rt5650-mach-objs := bdw-rt5650.o snd-soc-sst-bdw-rt5677-mach-objs := bdw-rt5677.o snd-soc-sst-broadwell-objs := broadwell.o -snd-soc-sst-bxt-da7219_max98357a-objs := bxt_da7219_max98357a.o hda_dsp_common.o -snd-soc-sst-bxt-rt298-objs := bxt_rt298.o hda_dsp_common.o -snd-soc-sst-sof-pcm512x-objs := sof_pcm512x.o hda_dsp_common.o +snd-soc-sst-bxt-da7219_max98357a-objs := bxt_da7219_max98357a.o +snd-soc-sst-bxt-rt298-objs := bxt_rt298.o +snd-soc-sst-sof-pcm512x-objs := sof_pcm512x.o snd-soc-sst-sof-wm8804-objs := sof_wm8804.o -snd-soc-sst-glk-rt5682_max98357a-objs := glk_rt5682_max98357a.o hda_dsp_common.o +snd-soc-sst-glk-rt5682_max98357a-objs := glk_rt5682_max98357a.o snd-soc-sst-bytcr-rt5640-objs := bytcr_rt5640.o snd-soc-sst-bytcr-rt5651-objs := bytcr_rt5651.o snd-soc-sst-bytcr-wm5102-objs := bytcr_wm5102.o
@@ -19,27 +19,26 @@ snd-soc-sst-byt-cht-cx2072x-objs := bytcht_cx2072x.o snd-soc-sst-byt-cht-da7213-objs := bytcht_da7213.o snd-soc-sst-byt-cht-es8316-objs := bytcht_es8316.o snd-soc-sst-byt-cht-nocodec-objs := bytcht_nocodec.o -snd-soc-sof_rt5682-objs := sof_rt5682.o hda_dsp_common.o sof_maxim_common.o sof_realtek_common.o -snd-soc-cml_rt1011_rt5682-objs := cml_rt1011_rt5682.o hda_dsp_common.o +snd-soc-sof_rt5682-objs := sof_rt5682.o sof_realtek_common.o +snd-soc-cml_rt1011_rt5682-objs := cml_rt1011_rt5682.o snd-soc-kbl_da7219_max98357a-objs := kbl_da7219_max98357a.o snd-soc-kbl_da7219_max98927-objs := kbl_da7219_max98927.o snd-soc-kbl_rt5663_max98927-objs := kbl_rt5663_max98927.o snd-soc-kbl_rt5663_rt5514_max98927-objs := kbl_rt5663_rt5514_max98927.o snd-soc-kbl_rt5660-objs := kbl_rt5660.o snd-soc-skl_rt286-objs := skl_rt286.o -snd-soc-skl_hda_dsp-objs := skl_hda_dsp_generic.o skl_hda_dsp_common.o hda_dsp_common.o +snd-soc-skl_hda_dsp-objs := skl_hda_dsp_generic.o skl_hda_dsp_common.o snd-skl_nau88l25_max98357a-objs := skl_nau88l25_max98357a.o snd-soc-skl_nau88l25_ssm4567-objs := skl_nau88l25_ssm4567.o -snd-soc-sof_da7219_max98373-objs := sof_da7219_max98373.o hda_dsp_common.o -snd-soc-ehl-rt5660-objs := ehl_rt5660.o hda_dsp_common.o +snd-soc-sof_da7219_max98373-objs := sof_da7219_max98373.o +snd-soc-ehl-rt5660-objs := ehl_rt5660.o snd-soc-sof-sdw-objs += sof_sdw.o \ sof_sdw_max98373.o \ sof_sdw_rt1308.o sof_sdw_rt1316.o \ sof_sdw_rt5682.o sof_sdw_rt700.o \ sof_sdw_rt711.o sof_sdw_rt711_sdca.o \ sof_sdw_rt715.o sof_sdw_rt715_sdca.o \ - sof_maxim_common.o \ - sof_sdw_dmic.o sof_sdw_hdmi.o hda_dsp_common.o + sof_sdw_dmic.o sof_sdw_hdmi.o obj-$(CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH) += snd-soc-sof_rt5682.o obj-$(CONFIG_SND_SOC_INTEL_HASWELL_MACH) += snd-soc-sst-haswell.o obj-$(CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON) += snd-soc-sst-bxt-da7219_max98357a.o
@@ -74,3 +73,10 @@ obj-$(CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH) += snd-soc-skl_hda_dsp.o obj-$(CONFIG_SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH) += snd-soc-sof_da7219_max98373.o obj-$(CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH) += snd-soc-ehl-rt5660.o obj-$(CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH) += snd-soc-sof-sdw.o + +# common modules +snd-soc-intel-hda-dsp-common-objs := hda_dsp_common.o +obj-$(CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON) += snd-soc-intel-hda-dsp-common.o + +snd-soc-intel-sof-maxim-common-objs += sof_maxim_common.o +obj-$(CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON) += snd-soc-intel-sof-maxim-common.o
sound/soc/intel/boards/bxt_da7219_max98357a.c +1 -0
@@ -869,3 +869,4 @@ MODULE_LICENSE("GPL v2");MODULE_ALIAS ("platform:bxt_da7219_max98357a" );MODULE_ALIAS ("platform:glk_da7219_max98357a" );MODULE_ALIAS ("platform:cml_da7219_max98357a" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/bxt_rt298.c +1 -0
@@ -667,3 +667,4 @@ MODULE_DESCRIPTION("Intel SST Audio for Broxton");MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:bxt_alc298s_i2s" );MODULE_ALIAS ("platform:glk_alc298s_i2s" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/cml_rt1011_rt5682.c +1 -0
@@ -594,3 +594,4 @@ MODULE_AUTHOR("Shuming Fan <[email protected]>");MODULE_AUTHOR ("Mac Chiang <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:cml_rt1011_rt5682" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/ehl_rt5660.c +1 -0
@@ -321,3 +321,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) Elkhartlake + rt5660 Machine driver");MODULE_AUTHOR ("[email protected]" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:ehl_rt5660" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/glk_rt5682_max98357a.c +1 -0
@@ -642,3 +642,4 @@ MODULE_AUTHOR("Naveen Manohar <[email protected]>");MODULE_AUTHOR ("Harsha Priya <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:glk_rt5682_max98357a" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/hda_dsp_common.c +5 -0
@@ -2,6 +2,7 @@// // Copyright(c) 2019 Intel Corporation. All rights reserved. +#include <linux/module.h> #include <sound/pcm.h> #include <sound/soc.h> #include <sound/hda_codec.h>
@@ -82,5 +83,9 @@ int hda_dsp_hdmi_build_controls(struct snd_soc_card *card, return err; } +EXPORT_SYMBOL_NS (hda_dsp_hdmi_build_controls,SND_SOC_INTEL_HDA_DSP_COMMON );#endif + +MODULE_DESCRIPTION ("ASoC Intel HDMI helpers" ); +MODULE_LICENSE ("GPL" );
sound/soc/intel/boards/skl_hda_dsp_generic.c +1 -0
@@ -258,3 +258,4 @@ MODULE_DESCRIPTION("SKL/KBL/BXT/APL HDA Generic Machine driver");MODULE_AUTHOR ("Rakesh Ughreja <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:skl_hda_dsp_generic" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/sof_da7219_max98373.c +1 -0
@@ -458,3 +458,4 @@ MODULE_AUTHOR("Yong Zhi <[email protected]>");MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:sof_da7219_max98360a" );MODULE_ALIAS ("platform:sof_da7219_max98373" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/sof_maxim_common.c +17 -7
@@ -1,6 +1,7 @@// SPDX-License-Identifier: GPL-2.0-only // // Copyright(c) 2020 Intel Corporation. All rights reserved. +#include <linux/module.h> #include <linux/string.h> #include <sound/pcm.h> #include <sound/soc.h>
@@ -16,6 +17,7 @@ const struct snd_soc_dapm_route max_98373_dapm_routes[] = { { "Left Spk", NULL, "Left BE_OUT" }, { "Right Spk", NULL, "Right BE_OUT" }, }; +EXPORT_SYMBOL_NS(max_98373_dapm_routes, SND_SOC_INTEL_SOF_MAXIM_COMMON); static struct snd_soc_codec_conf max_98373_codec_conf[] = { {
@@ -38,9 +40,10 @@ struct snd_soc_dai_link_component max_98373_components[] = { .dai_name = MAX_98373_CODEC_DAI, }, }; +EXPORT_SYMBOL_NS (max_98373_components,SND_SOC_INTEL_SOF_MAXIM_COMMON ); -static int max98373_hw_params (struct snd_pcm_substream *substream, -struct snd_pcm_hw_params *params) +static int max_98373_hw_params (struct snd_pcm_substream *substream, +struct snd_pcm_hw_params *params) {struct snd_soc_pcm_runtime *rtd =asoc_substream_to_rtd (substream);struct snd_soc_dai *codec_dai;
@@ -59,7 +62,7 @@ static int max98373_hw_params(struct snd_pcm_substream *substream,return 0 ; } -int max98373_trigger (struct snd_pcm_substream *substream,int cmd) +int max_98373_trigger (struct snd_pcm_substream *substream,int cmd) {struct snd_soc_pcm_runtime *rtd =asoc_substream_to_rtd (substream);struct snd_soc_dai *codec_dai;
@@ -102,13 +105,15 @@ int max98373_trigger(struct snd_pcm_substream *substream, int cmd)return ret; } +EXPORT_SYMBOL_NS (max_98373_trigger,SND_SOC_INTEL_SOF_MAXIM_COMMON );struct snd_soc_ops max_98373_ops = { - .hw_params = max98373_hw_params, - .trigger = max98373_trigger, + .hw_params = max_98373_hw_params, + .trigger = max_98373_trigger, }; +EXPORT_SYMBOL_NS (max_98373_ops,SND_SOC_INTEL_SOF_MAXIM_COMMON ); -int max98373_spk_codec_init (struct snd_soc_pcm_runtime *rtd) +int max_98373_spk_codec_init (struct snd_soc_pcm_runtime *rtd) {struct snd_soc_card *card = rtd->card;int ret;
@@ -119,9 +124,14 @@ int max98373_spk_codec_init(struct snd_soc_pcm_runtime *rtd)dev_err (rtd->dev,"Speaker map addition failed: %d\n" , ret);return ret; } +EXPORT_SYMBOL_NS (max_98373_spk_codec_init,SND_SOC_INTEL_SOF_MAXIM_COMMON ); -void sof_max98373_codec_conf (struct snd_soc_card *card) +void max_98373_set_codec_conf (struct snd_soc_card *card) { card->codec_conf = max_98373_codec_conf; card->num_configs =ARRAY_SIZE (max_98373_codec_conf); } +EXPORT_SYMBOL_NS (max_98373_set_codec_conf,SND_SOC_INTEL_SOF_MAXIM_COMMON ); + +MODULE_DESCRIPTION ("ASoC Intel SOF Maxim helpers" ); +MODULE_LICENSE ("GPL" );
sound/soc/intel/boards/sof_maxim_common.h +3 -3
@@ -20,8 +20,8 @@ extern struct snd_soc_dai_link_component max_98373_components[2];extern struct snd_soc_ops max_98373_ops;extern const struct snd_soc_dapm_route max_98373_dapm_routes[]; -int max98373_spk_codec_init (struct snd_soc_pcm_runtime *rtd); -void sof_max98373_codec_conf (struct snd_soc_card *card); -int max98373_trigger (struct snd_pcm_substream *substream,int cmd); +int max_98373_spk_codec_init (struct snd_soc_pcm_runtime *rtd); +void max_98373_set_codec_conf (struct snd_soc_card *card); +int max_98373_trigger (struct snd_pcm_substream *substream,int cmd);#endif /* __SOF_MAXIM_COMMON_H */
sound/soc/intel/boards/sof_pcm512x.c +1 -0
@@ -437,3 +437,4 @@ MODULE_DESCRIPTION("ASoC Intel(R) SOF + PCM512x Machine driver");MODULE_AUTHOR ("Pierre-Louis Bossart" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:sof_pcm512x" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON );
sound/soc/intel/boards/sof_rt5682.c +4 -2
@@ -742,7 +742,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev, SOF_MAX98373_SPEAKER_AMP_PRESENT) { links[id].codecs = max_98373_components; links[id].num_codecs =ARRAY_SIZE (max_98373_components); - links[id].init = max98373_spk_codec_init; + links[id].init = max_98373_spk_codec_init; links[id].ops = &max_98373_ops;/* feedback stream */ links[id].dpcm_capture =1 ;
@@ -863,7 +863,7 @@ static int sof_audio_probe(struct platform_device *pdev) sof_audio_card_rt5682.num_links++;if (sof_rt5682_quirk &SOF_MAX98373_SPEAKER_AMP_PRESENT ) -sof_max98373_codec_conf (&sof_audio_card_rt5682); +max_98373_set_codec_conf (&sof_audio_card_rt5682);else if (sof_rt5682_quirk &SOF_RT1011_SPEAKER_AMP_PRESENT )sof_rt1011_codec_conf (&sof_audio_card_rt5682);else if (sof_rt5682_quirk &SOF_RT1015P_SPEAKER_AMP_PRESENT )
@@ -994,3 +994,5 @@ MODULE_ALIAS("platform:jsl_rt5682_max98360a");MODULE_ALIAS ("platform:cml_rt1015_rt5682" );MODULE_ALIAS ("platform:tgl_rt1011_rt5682" );MODULE_ALIAS ("platform:jsl_rt5682_rt1015p" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON ); +MODULE_IMPORT_NS (SND_SOC_INTEL_SOF_MAXIM_COMMON );
sound/soc/intel/boards/sof_sdw.c +2 -0
@@ -1318,3 +1318,5 @@ MODULE_AUTHOR("Rander Wang <[email protected]>");MODULE_AUTHOR ("Pierre-Louis Bossart <[email protected]>" );MODULE_LICENSE ("GPL v2" );MODULE_ALIAS ("platform:sof_sdw" ); +MODULE_IMPORT_NS (SND_SOC_INTEL_HDA_DSP_COMMON ); +MODULE_IMPORT_NS (SND_SOC_INTEL_SOF_MAXIM_COMMON );
sound/soc/intel/boards/sof_sdw_max98373.c +53 -28
96 lines not on this page · raw message
sound/soc/ti/j721e-evm.c +12 -6
@@ -197,7 +197,7 @@ static int j721e_configure_refclk(struct j721e_priv *priv,return ret; } -if (priv->hsdiv_rates[domain->parent_clk_id] != scki) { +if (domain->parent_clk_id ==-1 || priv->hsdiv_rates[domain->parent_clk_id] != scki) { dev_dbg(priv->dev, "%s configuration for %u Hz: %s, %dxFS (SCKI: %u Hz)\n", audio_domain == J721E_AUDIO_DOMAIN_CPB ? "CPB" : "IVI",
@@ -278,23 +278,29 @@ static int j721e_audio_startup(struct snd_pcm_substream *substream) j721e_rule_rate, &priv->rate_range, SNDRV_PCM_HW_PARAM_RATE, -1); -mutex_unlock (&priv->mutex);if (ret) -return ret; + goto out;/* Reset TDM slots to 32 */ ret =snd_soc_dai_set_tdm_slot (cpu_dai,0x3 ,0x3 ,2 ,32 );if (ret && ret != -ENOTSUPP ) -return ret; + goto out;for_each_rtd_codec_dais (rtd, i, codec_dai) { ret =snd_soc_dai_set_tdm_slot (codec_dai,0x3 ,0x3 ,2 ,32 );if (ret && ret != -ENOTSUPP ) -return ret; + goto out; } -return 0 ; +if (ret == -ENOTSUPP ) + ret =0 ; +out: +if (ret) + domain->active--; +mutex_unlock (&priv->mutex); + +return ret; } static int j721e_audio_hw_params(struct snd_pcm_substream *substream,