From: Sasha Levin Date: Tue, 30 Mar 2021 21:59:21 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v4.4.265~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=144cabd5b872824b2f7ace88b8283f52a1766e5e;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch b/queue-4.19/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch new file mode 100644 index 00000000000..ed5db2cb4d2 --- /dev/null +++ b/queue-4.19/asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch @@ -0,0 +1,57 @@ +From edaf597095f82c59a80272c78b489dd1e41d9ad4 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Mar 2021 17:34:32 +0000 +Subject: ASoC: cs42l42: Always wait at least 3ms after reset + +From: Lucas Tanure + +[ Upstream commit 19325cfea04446bc79b36bffd4978af15f46a00e ] + +This delay is part of the power-up sequence defined in the datasheet. +A runtime_resume is a power-up so must also include the delay. + +Signed-off-by: Lucas Tanure +Link: https://lore.kernel.org/r/20210305173442.195740-6-tanureal@opensource.cirrus.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/cs42l42.c | 3 ++- + sound/soc/codecs/cs42l42.h | 1 + + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c +index a8ba518ba043..fddfd227a9c0 100644 +--- a/sound/soc/codecs/cs42l42.c ++++ b/sound/soc/codecs/cs42l42.c +@@ -1800,7 +1800,7 @@ static int cs42l42_i2c_probe(struct i2c_client *i2c_client, + dev_dbg(&i2c_client->dev, "Found reset GPIO\n"); + gpiod_set_value_cansleep(cs42l42->reset_gpio, 1); + } +- mdelay(3); ++ usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2); + + /* Request IRQ */ + ret = devm_request_threaded_irq(&i2c_client->dev, +@@ -1925,6 +1925,7 @@ static int cs42l42_runtime_resume(struct device *dev) + } + + gpiod_set_value_cansleep(cs42l42->reset_gpio, 1); ++ usleep_range(CS42L42_BOOT_TIME_US, CS42L42_BOOT_TIME_US * 2); + + regcache_cache_only(cs42l42->regmap, false); + regcache_sync(cs42l42->regmap); +diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h +index 23b1a63315ca..bcaf4f22408d 100644 +--- a/sound/soc/codecs/cs42l42.h ++++ b/sound/soc/codecs/cs42l42.h +@@ -744,6 +744,7 @@ + #define CS42L42_FRAC2_VAL(val) (((val) & 0xff0000) >> 16) + + #define CS42L42_NUM_SUPPLIES 5 ++#define CS42L42_BOOT_TIME_US 3000 + + static const char *const cs42l42_supply_names[CS42L42_NUM_SUPPLIES] = { + "VA", +-- +2.30.1 + diff --git a/queue-4.19/asoc-cs42l42-fix-bitclock-polarity-inversion.patch b/queue-4.19/asoc-cs42l42-fix-bitclock-polarity-inversion.patch new file mode 100644 index 00000000000..5bf9f4f1a85 --- /dev/null +++ b/queue-4.19/asoc-cs42l42-fix-bitclock-polarity-inversion.patch @@ -0,0 +1,87 @@ +From e1c7f7e6c8e40ddb9659b3b27e70a5f37858b5e6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Mar 2021 17:34:28 +0000 +Subject: ASoC: cs42l42: Fix Bitclock polarity inversion + +From: Lucas Tanure + +[ Upstream commit e793c965519b8b7f2fea51a48398405e2a501729 ] + +The driver was setting bit clock polarity opposite to intended polarity. +Also simplify the code by grouping ADC and DAC clock configurations into +a single field. + +Signed-off-by: Lucas Tanure +Link: https://lore.kernel.org/r/20210305173442.195740-2-tanureal@opensource.cirrus.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/cs42l42.c | 20 ++++++++------------ + sound/soc/codecs/cs42l42.h | 11 ++++++----- + 2 files changed, 14 insertions(+), 17 deletions(-) + +diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c +index 651329bf9743..c7baa19bf317 100644 +--- a/sound/soc/codecs/cs42l42.c ++++ b/sound/soc/codecs/cs42l42.c +@@ -801,27 +801,23 @@ static int cs42l42_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) + /* Bitclock/frame inversion */ + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { + case SND_SOC_DAIFMT_NB_NF: ++ asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT; + break; + case SND_SOC_DAIFMT_NB_IF: +- asp_cfg_val |= CS42L42_ASP_POL_INV << +- CS42L42_ASP_LCPOL_IN_SHIFT; ++ asp_cfg_val |= CS42L42_ASP_SCPOL_NOR << CS42L42_ASP_SCPOL_SHIFT; ++ asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT; + break; + case SND_SOC_DAIFMT_IB_NF: +- asp_cfg_val |= CS42L42_ASP_POL_INV << +- CS42L42_ASP_SCPOL_IN_DAC_SHIFT; + break; + case SND_SOC_DAIFMT_IB_IF: +- asp_cfg_val |= CS42L42_ASP_POL_INV << +- CS42L42_ASP_LCPOL_IN_SHIFT; +- asp_cfg_val |= CS42L42_ASP_POL_INV << +- CS42L42_ASP_SCPOL_IN_DAC_SHIFT; ++ asp_cfg_val |= CS42L42_ASP_LCPOL_INV << CS42L42_ASP_LCPOL_SHIFT; + break; + } + +- snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG, +- CS42L42_ASP_MODE_MASK | +- CS42L42_ASP_SCPOL_IN_DAC_MASK | +- CS42L42_ASP_LCPOL_IN_MASK, asp_cfg_val); ++ snd_soc_component_update_bits(component, CS42L42_ASP_CLK_CFG, CS42L42_ASP_MODE_MASK | ++ CS42L42_ASP_SCPOL_MASK | ++ CS42L42_ASP_LCPOL_MASK, ++ asp_cfg_val); + + return 0; + } +diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h +index 09b0a93203ef..9d04ed75e5c8 100644 +--- a/sound/soc/codecs/cs42l42.h ++++ b/sound/soc/codecs/cs42l42.h +@@ -262,11 +262,12 @@ + #define CS42L42_ASP_SLAVE_MODE 0x00 + #define CS42L42_ASP_MODE_SHIFT 4 + #define CS42L42_ASP_MODE_MASK (1 << CS42L42_ASP_MODE_SHIFT) +-#define CS42L42_ASP_SCPOL_IN_DAC_SHIFT 2 +-#define CS42L42_ASP_SCPOL_IN_DAC_MASK (1 << CS42L42_ASP_SCPOL_IN_DAC_SHIFT) +-#define CS42L42_ASP_LCPOL_IN_SHIFT 0 +-#define CS42L42_ASP_LCPOL_IN_MASK (1 << CS42L42_ASP_LCPOL_IN_SHIFT) +-#define CS42L42_ASP_POL_INV 1 ++#define CS42L42_ASP_SCPOL_SHIFT 2 ++#define CS42L42_ASP_SCPOL_MASK (3 << CS42L42_ASP_SCPOL_SHIFT) ++#define CS42L42_ASP_SCPOL_NOR 3 ++#define CS42L42_ASP_LCPOL_SHIFT 0 ++#define CS42L42_ASP_LCPOL_MASK (3 << CS42L42_ASP_LCPOL_SHIFT) ++#define CS42L42_ASP_LCPOL_INV 3 + + #define CS42L42_ASP_FRM_CFG (CS42L42_PAGE_12 + 0x08) + #define CS42L42_ASP_STP_SHIFT 4 +-- +2.30.1 + diff --git a/queue-4.19/asoc-cs42l42-fix-channel-width-support.patch b/queue-4.19/asoc-cs42l42-fix-channel-width-support.patch new file mode 100644 index 00000000000..ec5bb406cc0 --- /dev/null +++ b/queue-4.19/asoc-cs42l42-fix-channel-width-support.patch @@ -0,0 +1,112 @@ +From 679eb80d469c00c229fdccc412573c4012894071 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Mar 2021 17:34:29 +0000 +Subject: ASoC: cs42l42: Fix channel width support + +From: Lucas Tanure + +[ Upstream commit 2bdc4f5c6838f7c3feb4fe68e4edbeea158ec0a2 ] + +Remove the hard coded 32 bits width and replace with the correct width +calculated by params_width. + +Signed-off-by: Lucas Tanure +Link: https://lore.kernel.org/r/20210305173442.195740-3-tanureal@opensource.cirrus.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/cs42l42.c | 47 ++++++++++++++++++-------------------- + sound/soc/codecs/cs42l42.h | 1 - + 2 files changed, 22 insertions(+), 26 deletions(-) + +diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c +index c7baa19bf317..a5bd9cff7085 100644 +--- a/sound/soc/codecs/cs42l42.c ++++ b/sound/soc/codecs/cs42l42.c +@@ -695,24 +695,6 @@ static int cs42l42_pll_config(struct snd_soc_component *component) + CS42L42_CLK_OASRC_SEL_MASK, + CS42L42_CLK_OASRC_SEL_12 << + CS42L42_CLK_OASRC_SEL_SHIFT); +- /* channel 1 on low LRCLK, 32 bit */ +- snd_soc_component_update_bits(component, +- CS42L42_ASP_RX_DAI0_CH1_AP_RES, +- CS42L42_ASP_RX_CH_AP_MASK | +- CS42L42_ASP_RX_CH_RES_MASK, +- (CS42L42_ASP_RX_CH_AP_LOW << +- CS42L42_ASP_RX_CH_AP_SHIFT) | +- (CS42L42_ASP_RX_CH_RES_32 << +- CS42L42_ASP_RX_CH_RES_SHIFT)); +- /* Channel 2 on high LRCLK, 32 bit */ +- snd_soc_component_update_bits(component, +- CS42L42_ASP_RX_DAI0_CH2_AP_RES, +- CS42L42_ASP_RX_CH_AP_MASK | +- CS42L42_ASP_RX_CH_RES_MASK, +- (CS42L42_ASP_RX_CH_AP_HI << +- CS42L42_ASP_RX_CH_AP_SHIFT) | +- (CS42L42_ASP_RX_CH_RES_32 << +- CS42L42_ASP_RX_CH_RES_SHIFT)); + if (pll_ratio_table[i].mclk_src_sel == 0) { + /* Pass the clock straight through */ + snd_soc_component_update_bits(component, +@@ -828,14 +810,29 @@ static int cs42l42_pcm_hw_params(struct snd_pcm_substream *substream, + { + struct snd_soc_component *component = dai->component; + struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component); +- int retval; ++ unsigned int width = (params_width(params) / 8) - 1; ++ unsigned int val = 0; + + cs42l42->srate = params_rate(params); +- cs42l42->swidth = params_width(params); + +- retval = cs42l42_pll_config(component); ++ switch(substream->stream) { ++ case SNDRV_PCM_STREAM_PLAYBACK: ++ val |= width << CS42L42_ASP_RX_CH_RES_SHIFT; ++ /* channel 1 on low LRCLK */ ++ snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH1_AP_RES, ++ CS42L42_ASP_RX_CH_AP_MASK | ++ CS42L42_ASP_RX_CH_RES_MASK, val); ++ /* Channel 2 on high LRCLK */ ++ val |= CS42L42_ASP_RX_CH_AP_HI << CS42L42_ASP_RX_CH_AP_SHIFT; ++ snd_soc_component_update_bits(component, CS42L42_ASP_RX_DAI0_CH2_AP_RES, ++ CS42L42_ASP_RX_CH_AP_MASK | ++ CS42L42_ASP_RX_CH_RES_MASK, val); ++ break; ++ default: ++ break; ++ } + +- return retval; ++ return cs42l42_pll_config(component); + } + + static int cs42l42_set_sysclk(struct snd_soc_dai *dai, +@@ -900,9 +897,9 @@ static int cs42l42_digital_mute(struct snd_soc_dai *dai, int mute) + return 0; + } + +-#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \ +- SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE | \ +- SNDRV_PCM_FMTBIT_S32_LE) ++#define CS42L42_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ ++ SNDRV_PCM_FMTBIT_S24_LE |\ ++ SNDRV_PCM_FMTBIT_S32_LE ) + + + static const struct snd_soc_dai_ops cs42l42_ops = { +diff --git a/sound/soc/codecs/cs42l42.h b/sound/soc/codecs/cs42l42.h +index 9d04ed75e5c8..23b1a63315ca 100644 +--- a/sound/soc/codecs/cs42l42.h ++++ b/sound/soc/codecs/cs42l42.h +@@ -761,7 +761,6 @@ struct cs42l42_private { + struct completion pdn_done; + u32 sclk; + u32 srate; +- u32 swidth; + u8 plug_state; + u8 hs_type; + u8 ts_inv; +-- +2.30.1 + diff --git a/queue-4.19/asoc-cs42l42-fix-mixer-volume-control.patch b/queue-4.19/asoc-cs42l42-fix-mixer-volume-control.patch new file mode 100644 index 00000000000..117c192ed18 --- /dev/null +++ b/queue-4.19/asoc-cs42l42-fix-mixer-volume-control.patch @@ -0,0 +1,44 @@ +From 985b35b6e4c624f20d2b5bcd4fcdee991d8fd0ab Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 5 Mar 2021 17:34:30 +0000 +Subject: ASoC: cs42l42: Fix mixer volume control + +From: Lucas Tanure + +[ Upstream commit 72d904763ae6a8576e7ad034f9da4f0e3c44bf24 ] + +The minimum value is 0x3f (-63dB), which also is mute + +Signed-off-by: Lucas Tanure +Link: https://lore.kernel.org/r/20210305173442.195740-4-tanureal@opensource.cirrus.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/cs42l42.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c +index a5bd9cff7085..a8ba518ba043 100644 +--- a/sound/soc/codecs/cs42l42.c ++++ b/sound/soc/codecs/cs42l42.c +@@ -405,7 +405,7 @@ static const struct regmap_config cs42l42_regmap = { + }; + + static DECLARE_TLV_DB_SCALE(adc_tlv, -9600, 100, false); +-static DECLARE_TLV_DB_SCALE(mixer_tlv, -6200, 100, false); ++static DECLARE_TLV_DB_SCALE(mixer_tlv, -6300, 100, true); + + static const char * const cs42l42_hpf_freq_text[] = { + "1.86Hz", "120Hz", "235Hz", "466Hz" +@@ -462,7 +462,7 @@ static const struct snd_kcontrol_new cs42l42_snd_controls[] = { + CS42L42_DAC_HPF_EN_SHIFT, true, false), + SOC_DOUBLE_R_TLV("Mixer Volume", CS42L42_MIXER_CHA_VOL, + CS42L42_MIXER_CHB_VOL, CS42L42_MIXER_CH_VOL_SHIFT, +- 0x3e, 1, mixer_tlv) ++ 0x3f, 1, mixer_tlv) + }; + + static int cs42l42_hpdrv_evt(struct snd_soc_dapm_widget *w, +-- +2.30.1 + diff --git a/queue-4.19/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch b/queue-4.19/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch new file mode 100644 index 00000000000..34d872112e6 --- /dev/null +++ b/queue-4.19/asoc-es8316-simplify-adc_pga_gain_tlv-table.patch @@ -0,0 +1,48 @@ +From 87cd2a9e452f29518d9b5daf896d853bf2ff3baa Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 28 Feb 2021 17:04:41 +0100 +Subject: ASoC: es8316: Simplify adc_pga_gain_tlv table + +From: Hans de Goede + +[ Upstream commit bb18c678754ce1514100fb4c0bf6113b5af36c48 ] + +Most steps in this table are steps of 3dB (300 centi-dB), so we can +simplify the table. + +This not only reduces the amount of space it takes inside the kernel, +this also makes alsa-lib's mixer code actually accept the table, where +as before this change alsa-lib saw the "ADC PGA Gain" control as a +control without a dB scale. + +Signed-off-by: Hans de Goede +Link: https://lore.kernel.org/r/20210228160441.241110-1-hdegoede@redhat.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/es8316.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c +index 9ebe77c3784a..57130edaf3ab 100644 +--- a/sound/soc/codecs/es8316.c ++++ b/sound/soc/codecs/es8316.c +@@ -56,13 +56,8 @@ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv, + 1, 1, TLV_DB_SCALE_ITEM(0, 0, 0), + 2, 2, TLV_DB_SCALE_ITEM(250, 0, 0), + 3, 3, TLV_DB_SCALE_ITEM(450, 0, 0), +- 4, 4, TLV_DB_SCALE_ITEM(700, 0, 0), +- 5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0), +- 6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0), +- 7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0), +- 8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0), +- 9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0), +- 10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0), ++ 4, 7, TLV_DB_SCALE_ITEM(700, 300, 0), ++ 8, 10, TLV_DB_SCALE_ITEM(1800, 300, 0), + ); + + static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(hpout_vol_tlv, +-- +2.30.1 + diff --git a/queue-4.19/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch b/queue-4.19/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch new file mode 100644 index 00000000000..f19ad44fef8 --- /dev/null +++ b/queue-4.19/asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch @@ -0,0 +1,54 @@ +From 4ba90f369ea06022639085ee5d38356efc2bf1ca Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Feb 2021 15:38:13 +0100 +Subject: ASoC: rt5640: Fix dac- and adc- vol-tlv values being off by a factor + of 10 + +From: Hans de Goede + +[ Upstream commit cfa26ed1f9f885c2fd8f53ca492989d1e16d0199 ] + +The adc_vol_tlv volume-control has a range from -17.625 dB to +30 dB, +not -176.25 dB to + 300 dB. This wrong scale is esp. a problem in userspace +apps which translate the dB scale to a linear scale. With the logarithmic +dB scale being of by a factor of 10 we loose all precision in the lower +area of the range when apps translate things to a linear scale. + +E.g. the 0 dB default, which corresponds with a value of 47 of the +0 - 127 range for the control, would be shown as 0/100 in alsa-mixer. + +Since the centi-dB values used in the TLV struct cannot represent the +0.375 dB step size used by these controls, change the TLV definition +for them to specify a min and max value instead of min + stepsize. + +Note this mirrors commit 3f31f7d9b540 ("ASoC: rt5670: Fix dac- and adc- +vol-tlv values being off by a factor of 10") which made the exact same +change to the rt5670 codec driver. + +Signed-off-by: Hans de Goede +Link: https://lore.kernel.org/r/20210226143817.84287-2-hdegoede@redhat.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/rt5640.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c +index 974e1a449172..63e19a6a9790 100644 +--- a/sound/soc/codecs/rt5640.c ++++ b/sound/soc/codecs/rt5640.c +@@ -342,9 +342,9 @@ static bool rt5640_readable_register(struct device *dev, unsigned int reg) + } + + static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0); +-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0); ++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0); + static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0); +-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0); ++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000); + static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0); + + /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */ +-- +2.30.1 + diff --git a/queue-4.19/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch b/queue-4.19/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch new file mode 100644 index 00000000000..d99e2c4cb81 --- /dev/null +++ b/queue-4.19/asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch @@ -0,0 +1,54 @@ +From c0db09fc1b59d74eb4b8e3cb77f080a87553f75f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Feb 2021 15:38:14 +0100 +Subject: ASoC: rt5651: Fix dac- and adc- vol-tlv values being off by a factor + of 10 + +From: Hans de Goede + +[ Upstream commit eee51df776bd6cac10a76b2779a9fdee3f622b2b ] + +The adc_vol_tlv volume-control has a range from -17.625 dB to +30 dB, +not -176.25 dB to + 300 dB. This wrong scale is esp. a problem in userspace +apps which translate the dB scale to a linear scale. With the logarithmic +dB scale being of by a factor of 10 we loose all precision in the lower +area of the range when apps translate things to a linear scale. + +E.g. the 0 dB default, which corresponds with a value of 47 of the +0 - 127 range for the control, would be shown as 0/100 in alsa-mixer. + +Since the centi-dB values used in the TLV struct cannot represent the +0.375 dB step size used by these controls, change the TLV definition +for them to specify a min and max value instead of min + stepsize. + +Note this mirrors commit 3f31f7d9b540 ("ASoC: rt5670: Fix dac- and adc- +vol-tlv values being off by a factor of 10") which made the exact same +change to the rt5670 codec driver. + +Signed-off-by: Hans de Goede +Link: https://lore.kernel.org/r/20210226143817.84287-3-hdegoede@redhat.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/rt5651.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c +index 985852fd9723..318a4c9b380f 100644 +--- a/sound/soc/codecs/rt5651.c ++++ b/sound/soc/codecs/rt5651.c +@@ -288,9 +288,9 @@ static bool rt5651_readable_register(struct device *dev, unsigned int reg) + } + + static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0); +-static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0); ++static const DECLARE_TLV_DB_MINMAX(dac_vol_tlv, -6562, 0); + static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0); +-static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -17625, 375, 0); ++static const DECLARE_TLV_DB_MINMAX(adc_vol_tlv, -1762, 3000); + static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0); + + /* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */ +-- +2.30.1 + diff --git a/queue-4.19/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch b/queue-4.19/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch new file mode 100644 index 00000000000..19c794cf989 --- /dev/null +++ b/queue-4.19/asoc-rt5659-update-mclk-rate-in-set_sysclk.patch @@ -0,0 +1,49 @@ +From d7675098a5a78f9942c48c887dd5b0164f925cf3 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Mar 2021 23:01:32 +0530 +Subject: ASoC: rt5659: Update MCLK rate in set_sysclk() + +From: Sameer Pujar + +[ Upstream commit dbf54a9534350d6aebbb34f5c1c606b81a4f35dd ] + +Simple-card/audio-graph-card drivers do not handle MCLK clock when it +is specified in the codec device node. The expectation here is that, +the codec should actually own up the MCLK clock and do necessary setup +in the driver. + +Suggested-by: Mark Brown +Suggested-by: Michael Walle +Signed-off-by: Sameer Pujar +Link: https://lore.kernel.org/r/1615829492-8972-3-git-send-email-spujar@nvidia.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/rt5659.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c +index 1c1a521c73cb..b331b3ba61a9 100644 +--- a/sound/soc/codecs/rt5659.c ++++ b/sound/soc/codecs/rt5659.c +@@ -3466,12 +3466,17 @@ static int rt5659_set_component_sysclk(struct snd_soc_component *component, int + { + struct rt5659_priv *rt5659 = snd_soc_component_get_drvdata(component); + unsigned int reg_val = 0; ++ int ret; + + if (freq == rt5659->sysclk && clk_id == rt5659->sysclk_src) + return 0; + + switch (clk_id) { + case RT5659_SCLK_S_MCLK: ++ ret = clk_set_rate(rt5659->mclk, freq); ++ if (ret) ++ return ret; ++ + reg_val |= RT5659_SCLK_SRC_MCLK; + break; + case RT5659_SCLK_S_PLL1: +-- +2.30.1 + diff --git a/queue-4.19/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch b/queue-4.19/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch new file mode 100644 index 00000000000..4699670a705 --- /dev/null +++ b/queue-4.19/asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch @@ -0,0 +1,72 @@ +From 6e373794c26511428913a5baeb72797f902606ae Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 19 Feb 2021 13:33:08 -0500 +Subject: ASoC: sgtl5000: set DAP_AVC_CTRL register to correct default value on + probe + +From: Benjamin Rood + +[ Upstream commit f86f58e3594fb0ab1993d833d3b9a2496f3c928c ] + +According to the SGTL5000 datasheet [1], the DAP_AVC_CTRL register has +the following bit field definitions: + +| BITS | FIELD | RW | RESET | DEFINITION | +| 15 | RSVD | RO | 0x0 | Reserved | +| 14 | RSVD | RW | 0x1 | Reserved | +| 13:12 | MAX_GAIN | RW | 0x1 | Max Gain of AVC in expander mode | +| 11:10 | RSVD | RO | 0x0 | Reserved | +| 9:8 | LBI_RESP | RW | 0x1 | Integrator Response | +| 7:6 | RSVD | RO | 0x0 | Reserved | +| 5 | HARD_LMT_EN | RW | 0x0 | Enable hard limiter mode | +| 4:1 | RSVD | RO | 0x0 | Reserved | +| 0 | EN | RW | 0x0 | Enable/Disable AVC | + +The original default value written to the DAP_AVC_CTRL register during +sgtl5000_i2c_probe() was 0x0510. This would incorrectly write values to +bits 4 and 10, which are defined as RESERVED. It would also not set +bits 12 and 14 to their correct RESET values of 0x1, and instead set +them to 0x0. While the DAP_AVC module is effectively disabled because +the EN bit is 0, this default value is still writing invalid values to +registers that are marked as read-only and RESERVED as well as not +setting bits 12 and 14 to their correct default values as defined by the +datasheet. + +The correct value that should be written to the DAP_AVC_CTRL register is +0x5100, which configures the register bits to the default values defined +by the datasheet, and prevents any writes to bits defined as +'read-only'. Generally speaking, it is best practice to NOT attempt to +write values to registers/bits defined as RESERVED, as it generally +produces unwanted/undefined behavior, or errors. + +Also, all credit for this patch should go to my colleague Dan MacDonald + for finding this error in the first +place. + +[1] https://www.nxp.com/docs/en/data-sheet/SGTL5000.pdf + +Signed-off-by: Benjamin Rood +Reviewed-by: Fabio Estevam +Link: https://lore.kernel.org/r/20210219183308.GA2117@ubuntu-dev +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/codecs/sgtl5000.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c +index 7c0a06b487f7..17255e9683f5 100644 +--- a/sound/soc/codecs/sgtl5000.c ++++ b/sound/soc/codecs/sgtl5000.c +@@ -71,7 +71,7 @@ static const struct reg_default sgtl5000_reg_defaults[] = { + { SGTL5000_DAP_EQ_BASS_BAND4, 0x002f }, + { SGTL5000_DAP_MAIN_CHAN, 0x8000 }, + { SGTL5000_DAP_MIX_CHAN, 0x0000 }, +- { SGTL5000_DAP_AVC_CTRL, 0x0510 }, ++ { SGTL5000_DAP_AVC_CTRL, 0x5100 }, + { SGTL5000_DAP_AVC_THRESHOLD, 0x1473 }, + { SGTL5000_DAP_AVC_ATTACK, 0x0028 }, + { SGTL5000_DAP_AVC_DECAY, 0x0050 }, +-- +2.30.1 + diff --git a/queue-4.19/ext4-do-not-iput-inode-under-running-transaction-in-.patch b/queue-4.19/ext4-do-not-iput-inode-under-running-transaction-in-.patch new file mode 100644 index 00000000000..ccf63147e16 --- /dev/null +++ b/queue-4.19/ext4-do-not-iput-inode-under-running-transaction-in-.patch @@ -0,0 +1,90 @@ +From 313692cbd343190df05b6d67f41857e7abcf0afc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 3 Mar 2021 21:17:03 +0800 +Subject: ext4: do not iput inode under running transaction in ext4_rename() + +From: zhangyi (F) + +[ Upstream commit 5dccdc5a1916d4266edd251f20bbbb113a5c495f ] + +In ext4_rename(), when RENAME_WHITEOUT failed to add new entry into +directory, it ends up dropping new created whiteout inode under the +running transaction. After commit <9b88f9fb0d2> ("ext4: Do not iput inode +under running transaction"), we follow the assumptions that evict() does +not get called from a transaction context but in ext4_rename() it breaks +this suggestion. Although it's not a real problem, better to obey it, so +this patch add inode to orphan list and stop transaction before final +iput(). + +Signed-off-by: zhangyi (F) +Link: https://lore.kernel.org/r/20210303131703.330415-2-yi.zhang@huawei.com +Signed-off-by: Theodore Ts'o +Signed-off-by: Sasha Levin +--- + fs/ext4/namei.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c +index 5f701d8dce47..358f6378882f 100644 +--- a/fs/ext4/namei.c ++++ b/fs/ext4/namei.c +@@ -3624,14 +3624,14 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, + */ + retval = -ENOENT; + if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino) +- goto end_rename; ++ goto release_bh; + + new.bh = ext4_find_entry(new.dir, &new.dentry->d_name, + &new.de, &new.inlined); + if (IS_ERR(new.bh)) { + retval = PTR_ERR(new.bh); + new.bh = NULL; +- goto end_rename; ++ goto release_bh; + } + if (new.bh) { + if (!new.inode) { +@@ -3648,15 +3648,13 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, + handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits); + if (IS_ERR(handle)) { + retval = PTR_ERR(handle); +- handle = NULL; +- goto end_rename; ++ goto release_bh; + } + } else { + whiteout = ext4_whiteout_for_rename(&old, credits, &handle); + if (IS_ERR(whiteout)) { + retval = PTR_ERR(whiteout); +- whiteout = NULL; +- goto end_rename; ++ goto release_bh; + } + } + +@@ -3764,16 +3762,18 @@ end_rename: + ext4_resetent(handle, &old, + old.inode->i_ino, old_file_type); + drop_nlink(whiteout); ++ ext4_orphan_add(handle, whiteout); + } + unlock_new_inode(whiteout); ++ ext4_journal_stop(handle); + iput(whiteout); +- ++ } else { ++ ext4_journal_stop(handle); + } ++release_bh: + brelse(old.dir_bh); + brelse(old.bh); + brelse(new.bh); +- if (handle) +- ext4_journal_stop(handle); + return retval; + } + +-- +2.30.1 + diff --git a/queue-4.19/ext4-fix-bh-ref-count-on-error-paths.patch b/queue-4.19/ext4-fix-bh-ref-count-on-error-paths.patch new file mode 100644 index 00000000000..0329441c639 --- /dev/null +++ b/queue-4.19/ext4-fix-bh-ref-count-on-error-paths.patch @@ -0,0 +1,43 @@ +From c85458a42731da0357362134721d34245d3e5f33 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 2 Mar 2021 17:42:31 +0800 +Subject: ext4: fix bh ref count on error paths + +From: Zhaolong Zhang + +[ Upstream commit c915fb80eaa6194fa9bd0a4487705cd5b0dda2f1 ] + +__ext4_journalled_writepage should drop bhs' ref count on error paths + +Signed-off-by: Zhaolong Zhang +Link: https://lore.kernel.org/r/1614678151-70481-1-git-send-email-zhangzl2013@126.com +Signed-off-by: Theodore Ts'o +Signed-off-by: Sasha Levin +--- + fs/ext4/inode.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c +index 1c6fd526ea97..7959aae4857e 100644 +--- a/fs/ext4/inode.c ++++ b/fs/ext4/inode.c +@@ -2072,13 +2072,13 @@ static int __ext4_journalled_writepage(struct page *page, + if (!ret) + ret = err; + +- if (!ext4_has_inline_data(inode)) +- ext4_walk_page_buffers(NULL, page_bufs, 0, len, +- NULL, bput_one); + ext4_set_inode_state(inode, EXT4_STATE_JDATA); + out: + unlock_page(page); + out_no_pagelock: ++ if (!inline_data && page_bufs) ++ ext4_walk_page_buffers(NULL, page_bufs, 0, len, ++ NULL, bput_one); + brelse(inode_bh); + return ret; + } +-- +2.30.1 + diff --git a/queue-4.19/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch b/queue-4.19/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch new file mode 100644 index 00000000000..851c668c893 --- /dev/null +++ b/queue-4.19/locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch @@ -0,0 +1,134 @@ +From 0165f17a97e747f477b5963eee55059a367908cb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 Mar 2021 11:31:16 -0400 +Subject: locking/ww_mutex: Simplify use_ww_ctx & ww_ctx handling + +From: Waiman Long + +[ Upstream commit 5de2055d31ea88fd9ae9709ac95c372a505a60fa ] + +The use_ww_ctx flag is passed to mutex_optimistic_spin(), but the +function doesn't use it. The frequent use of the (use_ww_ctx && ww_ctx) +combination is repetitive. + +In fact, ww_ctx should not be used at all if !use_ww_ctx. Simplify +ww_mutex code by dropping use_ww_ctx from mutex_optimistic_spin() an +clear ww_ctx if !use_ww_ctx. In this way, we can replace (use_ww_ctx && +ww_ctx) by just (ww_ctx). + +Signed-off-by: Waiman Long +Signed-off-by: Ingo Molnar +Acked-by: Davidlohr Bueso +Link: https://lore.kernel.org/r/20210316153119.13802-2-longman@redhat.com +Signed-off-by: Sasha Levin +--- + kernel/locking/mutex.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c +index 3f8a35104285..b3da782cdfbd 100644 +--- a/kernel/locking/mutex.c ++++ b/kernel/locking/mutex.c +@@ -609,7 +609,7 @@ static inline int mutex_can_spin_on_owner(struct mutex *lock) + */ + static __always_inline bool + mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx, +- const bool use_ww_ctx, struct mutex_waiter *waiter) ++ struct mutex_waiter *waiter) + { + if (!waiter) { + /* +@@ -685,7 +685,7 @@ fail: + #else + static __always_inline bool + mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx, +- const bool use_ww_ctx, struct mutex_waiter *waiter) ++ struct mutex_waiter *waiter) + { + return false; + } +@@ -905,10 +905,13 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + struct ww_mutex *ww; + int ret; + ++ if (!use_ww_ctx) ++ ww_ctx = NULL; ++ + might_sleep(); + + ww = container_of(lock, struct ww_mutex, base); +- if (use_ww_ctx && ww_ctx) { ++ if (ww_ctx) { + if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) + return -EALREADY; + +@@ -925,10 +928,10 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip); + + if (__mutex_trylock(lock) || +- mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, NULL)) { ++ mutex_optimistic_spin(lock, ww_ctx, NULL)) { + /* got the lock, yay! */ + lock_acquired(&lock->dep_map, ip); +- if (use_ww_ctx && ww_ctx) ++ if (ww_ctx) + ww_mutex_set_context_fastpath(ww, ww_ctx); + preempt_enable(); + return 0; +@@ -939,7 +942,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + * After waiting to acquire the wait_lock, try again. + */ + if (__mutex_trylock(lock)) { +- if (use_ww_ctx && ww_ctx) ++ if (ww_ctx) + __ww_mutex_check_waiters(lock, ww_ctx); + + goto skip_wait; +@@ -992,7 +995,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + goto err; + } + +- if (use_ww_ctx && ww_ctx) { ++ if (ww_ctx) { + ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx); + if (ret) + goto err; +@@ -1005,7 +1008,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + * ww_mutex needs to always recheck its position since its waiter + * list is not FIFO ordered. + */ +- if ((use_ww_ctx && ww_ctx) || !first) { ++ if (ww_ctx || !first) { + first = __mutex_waiter_is_first(lock, &waiter); + if (first) + __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF); +@@ -1018,7 +1021,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + * or we must see its unlock and acquire. + */ + if (__mutex_trylock(lock) || +- (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, &waiter))) ++ (first && mutex_optimistic_spin(lock, ww_ctx, &waiter))) + break; + + spin_lock(&lock->wait_lock); +@@ -1027,7 +1030,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, + acquired: + __set_current_state(TASK_RUNNING); + +- if (use_ww_ctx && ww_ctx) { ++ if (ww_ctx) { + /* + * Wound-Wait; we stole the lock (!first_waiter), check the + * waiters as anyone might want to wound us. +@@ -1047,7 +1050,7 @@ skip_wait: + /* got the lock - cleanup and rejoice! */ + lock_acquired(&lock->dep_map, ip); + +- if (use_ww_ctx && ww_ctx) ++ if (ww_ctx) + ww_mutex_lock_acquired(ww, ww_ctx); + + spin_unlock(&lock->wait_lock); +-- +2.30.1 + diff --git a/queue-4.19/rpc-fix-null-dereference-on-kmalloc-failure.patch b/queue-4.19/rpc-fix-null-dereference-on-kmalloc-failure.patch new file mode 100644 index 00000000000..7d97a39d387 --- /dev/null +++ b/queue-4.19/rpc-fix-null-dereference-on-kmalloc-failure.patch @@ -0,0 +1,64 @@ +From 60ea1e3a2d8df0f272d52dbb2f2a82453942a635 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 2 Mar 2021 10:48:38 -0500 +Subject: rpc: fix NULL dereference on kmalloc failure + +From: J. Bruce Fields + +[ Upstream commit 0ddc942394013f08992fc379ca04cffacbbe3dae ] + +I think this is unlikely but possible: + +svc_authenticate sets rq_authop and calls svcauth_gss_accept. The +kmalloc(sizeof(*svcdata), GFP_KERNEL) fails, leaving rq_auth_data NULL, +and returning SVC_DENIED. + +This causes svc_process_common to go to err_bad_auth, and eventually +call svc_authorise. That calls ->release == svcauth_gss_release, which +tries to dereference rq_auth_data. + +Signed-off-by: J. Bruce Fields +Link: https://lore.kernel.org/linux-nfs/3F1B347F-B809-478F-A1E9-0BE98E22B0F0@oracle.com/T/#t +Signed-off-by: Chuck Lever +Signed-off-by: Sasha Levin +--- + net/sunrpc/auth_gss/svcauth_gss.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c +index ab086081be9c..a85d78d2bdb7 100644 +--- a/net/sunrpc/auth_gss/svcauth_gss.c ++++ b/net/sunrpc/auth_gss/svcauth_gss.c +@@ -1766,11 +1766,14 @@ static int + svcauth_gss_release(struct svc_rqst *rqstp) + { + struct gss_svc_data *gsd = (struct gss_svc_data *)rqstp->rq_auth_data; +- struct rpc_gss_wire_cred *gc = &gsd->clcred; ++ struct rpc_gss_wire_cred *gc; + struct xdr_buf *resbuf = &rqstp->rq_res; + int stat = -EINVAL; + struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id); + ++ if (!gsd) ++ goto out; ++ gc = &gsd->clcred; + if (gc->gc_proc != RPC_GSS_PROC_DATA) + goto out; + /* Release can be called twice, but we only wrap once. */ +@@ -1811,10 +1814,10 @@ out_err: + if (rqstp->rq_cred.cr_group_info) + put_group_info(rqstp->rq_cred.cr_group_info); + rqstp->rq_cred.cr_group_info = NULL; +- if (gsd->rsci) ++ if (gsd && gsd->rsci) { + cache_put(&gsd->rsci->h, sn->rsc_cache); +- gsd->rsci = NULL; +- ++ gsd->rsci = NULL; ++ } + return stat; + } + +-- +2.30.1 + diff --git a/queue-4.19/scsi-qla2xxx-fix-broken-endif-placement.patch b/queue-4.19/scsi-qla2xxx-fix-broken-endif-placement.patch new file mode 100644 index 00000000000..0dfd187daaa --- /dev/null +++ b/queue-4.19/scsi-qla2xxx-fix-broken-endif-placement.patch @@ -0,0 +1,44 @@ +From 70ae1e3b403f4352c99a695ee83047d96a898d5f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sun, 14 Mar 2021 18:32:46 +0300 +Subject: scsi: qla2xxx: Fix broken #endif placement + +From: Alexey Dobriyan + +[ Upstream commit 5999b9e5b1f8a2f5417b755130919b3ac96f5550 ] + +Only half of the file is under include guard because terminating #endif +is placed too early. + +Link: https://lore.kernel.org/r/YE4snvoW1SuwcXAn@localhost.localdomain +Reviewed-by: Himanshu Madhani +Signed-off-by: Alexey Dobriyan +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qla2xxx/qla_target.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h +index 199d3ba1916d..67a74720c02c 100644 +--- a/drivers/scsi/qla2xxx/qla_target.h ++++ b/drivers/scsi/qla2xxx/qla_target.h +@@ -124,7 +124,6 @@ + (min(1270, ((ql) > 0) ? (QLA_TGT_DATASEGS_PER_CMD_24XX + \ + QLA_TGT_DATASEGS_PER_CONT_24XX*((ql) - 1)) : 0)) + #endif +-#endif + + #define GET_TARGET_ID(ha, iocb) ((HAS_EXTENDED_IDS(ha)) \ + ? le16_to_cpu((iocb)->u.isp2x.target.extended) \ +@@ -257,6 +256,7 @@ struct ctio_to_2xxx { + #ifndef CTIO_RET_TYPE + #define CTIO_RET_TYPE 0x17 /* CTIO return entry */ + #define ATIO_TYPE7 0x06 /* Accept target I/O entry for 24xx */ ++#endif + + struct fcp_hdr { + uint8_t r_ctl; +-- +2.30.1 + diff --git a/queue-4.19/scsi-st-fix-a-use-after-free-in-st_open.patch b/queue-4.19/scsi-st-fix-a-use-after-free-in-st_open.patch new file mode 100644 index 00000000000..1e603146308 --- /dev/null +++ b/queue-4.19/scsi-st-fix-a-use-after-free-in-st_open.patch @@ -0,0 +1,42 @@ +From df21afe26f679cfb6602199d67e4e7bbce4f7f84 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 10 Mar 2021 22:46:36 -0800 +Subject: scsi: st: Fix a use after free in st_open() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Lv Yunlong + +[ Upstream commit c8c165dea4c8f5ad67b1240861e4f6c5395fa4ac ] + +In st_open(), if STp->in_use is true, STp will be freed by +scsi_tape_put(). However, STp is still used by DEBC_printk() after. It is +better to DEBC_printk() before scsi_tape_put(). + +Link: https://lore.kernel.org/r/20210311064636.10522-1-lyl2019@mail.ustc.edu.cn +Acked-by: Kai Mäkisara +Signed-off-by: Lv Yunlong +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/st.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c +index 307df2fa39a3..5078db7743cd 100644 +--- a/drivers/scsi/st.c ++++ b/drivers/scsi/st.c +@@ -1265,8 +1265,8 @@ static int st_open(struct inode *inode, struct file *filp) + spin_lock(&st_use_lock); + if (STp->in_use) { + spin_unlock(&st_use_lock); +- scsi_tape_put(STp); + DEBC_printk(STp, "Device already in use.\n"); ++ scsi_tape_put(STp); + return (-EBUSY); + } + +-- +2.30.1 + diff --git a/queue-4.19/series b/queue-4.19/series index d56069a539a..2001889e219 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -1,3 +1,22 @@ selinux-vsock-set-sid-for-socket-returned-by-accept.patch tcp-relookup-sock-for-rst-ack-packets-handled-by-obs.patch ipv6-weaken-the-v4mapped-source-check.patch +ext4-fix-bh-ref-count-on-error-paths.patch +rpc-fix-null-dereference-on-kmalloc-failure.patch +asoc-rt5640-fix-dac-and-adc-vol-tlv-values-being-off.patch +asoc-rt5651-fix-dac-and-adc-vol-tlv-values-being-off.patch +asoc-sgtl5000-set-dap_avc_ctrl-register-to-correct-d.patch +asoc-es8316-simplify-adc_pga_gain_tlv-table.patch +asoc-cs42l42-fix-bitclock-polarity-inversion.patch +asoc-cs42l42-fix-channel-width-support.patch +asoc-cs42l42-fix-mixer-volume-control.patch +asoc-cs42l42-always-wait-at-least-3ms-after-reset.patch +vhost-fix-vhost_vq_reset.patch +scsi-st-fix-a-use-after-free-in-st_open.patch +scsi-qla2xxx-fix-broken-endif-placement.patch +staging-comedi-cb_pcidas-fix-request_irq-warn.patch +staging-comedi-cb_pcidas64-fix-request_irq-warn.patch +asoc-rt5659-update-mclk-rate-in-set_sysclk.patch +thermal-core-add-null-pointer-check-before-using-coo.patch +locking-ww_mutex-simplify-use_ww_ctx-ww_ctx-handling.patch +ext4-do-not-iput-inode-under-running-transaction-in-.patch diff --git a/queue-4.19/staging-comedi-cb_pcidas-fix-request_irq-warn.patch b/queue-4.19/staging-comedi-cb_pcidas-fix-request_irq-warn.patch new file mode 100644 index 00000000000..c5a25bee6b2 --- /dev/null +++ b/queue-4.19/staging-comedi-cb_pcidas-fix-request_irq-warn.patch @@ -0,0 +1,49 @@ +From cdc4a9209f92956f56441775bacb11c98624a47a Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Mar 2021 15:59:14 -0400 +Subject: staging: comedi: cb_pcidas: fix request_irq() warn + +From: Tong Zhang + +[ Upstream commit 2e5848a3d86f03024ae096478bdb892ab3d79131 ] + +request_irq() wont accept a name which contains slash so we need to +repalce it with something else -- otherwise it will trigger a warning +and the entry in /proc/irq/ will not be created +since the .name might be used by userspace and we don't want to break +userspace, so we are changing the parameters passed to request_irq() + +[ 1.630764] name 'pci-das1602/16' +[ 1.630950] WARNING: CPU: 0 PID: 181 at fs/proc/generic.c:180 __xlate_proc_name+0x93/0xb0 +[ 1.634009] RIP: 0010:__xlate_proc_name+0x93/0xb0 +[ 1.639441] Call Trace: +[ 1.639976] proc_mkdir+0x18/0x20 +[ 1.641946] request_threaded_irq+0xfe/0x160 +[ 1.642186] cb_pcidas_auto_attach+0xf4/0x610 [cb_pcidas] + +Suggested-by: Ian Abbott +Reviewed-by: Ian Abbott +Signed-off-by: Tong Zhang +Link: https://lore.kernel.org/r/20210315195914.4801-1-ztong0001@gmail.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/staging/comedi/drivers/cb_pcidas.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c +index 9b716c696477..86cae5d0e983 100644 +--- a/drivers/staging/comedi/drivers/cb_pcidas.c ++++ b/drivers/staging/comedi/drivers/cb_pcidas.c +@@ -1281,7 +1281,7 @@ static int cb_pcidas_auto_attach(struct comedi_device *dev, + devpriv->amcc + AMCC_OP_REG_INTCSR); + + ret = request_irq(pcidev->irq, cb_pcidas_interrupt, IRQF_SHARED, +- dev->board_name, dev); ++ "cb_pcidas", dev); + if (ret) { + dev_dbg(dev->class_dev, "unable to allocate irq %d\n", + pcidev->irq); +-- +2.30.1 + diff --git a/queue-4.19/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch b/queue-4.19/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch new file mode 100644 index 00000000000..2d8f60c4860 --- /dev/null +++ b/queue-4.19/staging-comedi-cb_pcidas64-fix-request_irq-warn.patch @@ -0,0 +1,49 @@ +From e1daa069308d2498f57a7866842c67d7ef213a6f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Mar 2021 15:58:12 -0400 +Subject: staging: comedi: cb_pcidas64: fix request_irq() warn + +From: Tong Zhang + +[ Upstream commit d2d106fe3badfc3bf0dd3899d1c3f210c7203eab ] + +request_irq() wont accept a name which contains slash so we need to +repalce it with something else -- otherwise it will trigger a warning +and the entry in /proc/irq/ will not be created +since the .name might be used by userspace and we don't want to break +userspace, so we are changing the parameters passed to request_irq() + +[ 1.565966] name 'pci-das6402/16' +[ 1.566149] WARNING: CPU: 0 PID: 184 at fs/proc/generic.c:180 __xlate_proc_name+0x93/0xb0 +[ 1.568923] RIP: 0010:__xlate_proc_name+0x93/0xb0 +[ 1.574200] Call Trace: +[ 1.574722] proc_mkdir+0x18/0x20 +[ 1.576629] request_threaded_irq+0xfe/0x160 +[ 1.576859] auto_attach+0x60a/0xc40 [cb_pcidas64] + +Suggested-by: Ian Abbott +Reviewed-by: Ian Abbott +Signed-off-by: Tong Zhang +Link: https://lore.kernel.org/r/20210315195814.4692-1-ztong0001@gmail.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/staging/comedi/drivers/cb_pcidas64.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c +index 631a703b345d..91403cc1bbf9 100644 +--- a/drivers/staging/comedi/drivers/cb_pcidas64.c ++++ b/drivers/staging/comedi/drivers/cb_pcidas64.c +@@ -4021,7 +4021,7 @@ static int auto_attach(struct comedi_device *dev, + init_stc_registers(dev); + + retval = request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, +- dev->board_name, dev); ++ "cb_pcidas64", dev); + if (retval) { + dev_dbg(dev->class_dev, "unable to allocate irq %u\n", + pcidev->irq); +-- +2.30.1 + diff --git a/queue-4.19/thermal-core-add-null-pointer-check-before-using-coo.patch b/queue-4.19/thermal-core-add-null-pointer-check-before-using-coo.patch new file mode 100644 index 00000000000..3d9b1e84cbb --- /dev/null +++ b/queue-4.19/thermal-core-add-null-pointer-check-before-using-coo.patch @@ -0,0 +1,61 @@ +From 82bd86103f76bb3934e245f5732f166f4afb4097 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 8 Dec 2020 00:23:01 +0530 +Subject: thermal/core: Add NULL pointer check before using cooling device + stats + +From: Manaf Meethalavalappu Pallikunhi + +[ Upstream commit 2046a24ae121cd107929655a6aaf3b8c5beea01f ] + +There is a possible chance that some cooling device stats buffer +allocation fails due to very high cooling device max state value. +Later cooling device update sysfs can try to access stats data +for the same cooling device. It will lead to NULL pointer +dereference issue. + +Add a NULL pointer check before accessing thermal cooling device +stats data. It fixes the following bug + +[ 26.812833] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000004 +[ 27.122960] Call trace: +[ 27.122963] do_raw_spin_lock+0x18/0xe8 +[ 27.122966] _raw_spin_lock+0x24/0x30 +[ 27.128157] thermal_cooling_device_stats_update+0x24/0x98 +[ 27.128162] cur_state_store+0x88/0xb8 +[ 27.128166] dev_attr_store+0x40/0x58 +[ 27.128169] sysfs_kf_write+0x50/0x68 +[ 27.133358] kernfs_fop_write+0x12c/0x1c8 +[ 27.133362] __vfs_write+0x54/0x160 +[ 27.152297] vfs_write+0xcc/0x188 +[ 27.157132] ksys_write+0x78/0x108 +[ 27.162050] ksys_write+0xf8/0x108 +[ 27.166968] __arm_smccc_hvc+0x158/0x4b0 +[ 27.166973] __arm_smccc_hvc+0x9c/0x4b0 +[ 27.186005] el0_svc+0x8/0xc + +Signed-off-by: Manaf Meethalavalappu Pallikunhi +Signed-off-by: Daniel Lezcano +Link: https://lore.kernel.org/r/1607367181-24589-1-git-send-email-manafm@codeaurora.org +Signed-off-by: Sasha Levin +--- + drivers/thermal/thermal_sysfs.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c +index aa99edb4dff7..4dce4a8f71ed 100644 +--- a/drivers/thermal/thermal_sysfs.c ++++ b/drivers/thermal/thermal_sysfs.c +@@ -770,6 +770,9 @@ void thermal_cooling_device_stats_update(struct thermal_cooling_device *cdev, + { + struct cooling_dev_stats *stats = cdev->stats; + ++ if (!stats) ++ return; ++ + spin_lock(&stats->lock); + + if (stats->state == new_state) +-- +2.30.1 + diff --git a/queue-4.19/vhost-fix-vhost_vq_reset.patch b/queue-4.19/vhost-fix-vhost_vq_reset.patch new file mode 100644 index 00000000000..26626627d8c --- /dev/null +++ b/queue-4.19/vhost-fix-vhost_vq_reset.patch @@ -0,0 +1,49 @@ +From d8711bbcaf763bd429b8198bf625c2fb2ba5c591 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 12 Mar 2021 15:09:13 +0100 +Subject: vhost: Fix vhost_vq_reset() + +From: Laurent Vivier + +[ Upstream commit beb691e69f4dec7bfe8b81b509848acfd1f0dbf9 ] + +vhost_reset_is_le() is vhost_init_is_le(), and in the case of +cross-endian legacy, vhost_init_is_le() depends on vq->user_be. + +vq->user_be is set by vhost_disable_cross_endian(). + +But in vhost_vq_reset(), we have: + + vhost_reset_is_le(vq); + vhost_disable_cross_endian(vq); + +And so user_be is used before being set. + +To fix that, reverse the lines order as there is no other dependency +between them. + +Signed-off-by: Laurent Vivier +Link: https://lore.kernel.org/r/20210312140913.788592-1-lvivier@redhat.com +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Sasha Levin +--- + drivers/vhost/vhost.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c +index 98b6eb902df9..732327756ee1 100644 +--- a/drivers/vhost/vhost.c ++++ b/drivers/vhost/vhost.c +@@ -322,8 +322,8 @@ static void vhost_vq_reset(struct vhost_dev *dev, + vq->kick = NULL; + vq->call_ctx = NULL; + vq->log_ctx = NULL; +- vhost_reset_is_le(vq); + vhost_disable_cross_endian(vq); ++ vhost_reset_is_le(vq); + vq->busyloop_timeout = 0; + vq->umem = NULL; + vq->iotlb = NULL; +-- +2.30.1 +