Merge ff7afaeca1 ("Merge tag 'nfs-for-6.12-3' of git://git.linux-nfs.org/projects/anna/linux-nfs") into android-mainline
Steps on the way to 6.12-rc6 Change-Id: I6f90f7862f6520b00787fd723346b7e5f1074396 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -124,7 +124,7 @@ properties:
|
||||
atomic mode of operation, even if requested.
|
||||
default: 0
|
||||
|
||||
max-rx-timeout-ms:
|
||||
arm,max-rx-timeout-ms:
|
||||
description:
|
||||
An optional time value, expressed in milliseconds, representing the
|
||||
transport maximum timeout value for the receive channel. The value should
|
||||
|
||||
+5
-7
@@ -2852,7 +2852,7 @@ F: Documentation/devicetree/bindings/arm/qcom.yaml
|
||||
F: Documentation/devicetree/bindings/bus/qcom*
|
||||
F: Documentation/devicetree/bindings/cache/qcom,llcc.yaml
|
||||
F: Documentation/devicetree/bindings/firmware/qcom,scm.yaml
|
||||
F: Documentation/devicetree/bindings/reserved-memory/qcom
|
||||
F: Documentation/devicetree/bindings/reserved-memory/qcom*
|
||||
F: Documentation/devicetree/bindings/soc/qcom/
|
||||
F: arch/arm/boot/dts/qcom/
|
||||
F: arch/arm/configs/qcom_defconfig
|
||||
@@ -19853,12 +19853,10 @@ L: linux-riscv@lists.infradead.org
|
||||
S: Maintained
|
||||
Q: https://patchwork.kernel.org/project/linux-riscv/list/
|
||||
T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/
|
||||
F: Documentation/devicetree/bindings/riscv/
|
||||
F: arch/riscv/boot/dts/
|
||||
X: arch/riscv/boot/dts/allwinner/
|
||||
X: arch/riscv/boot/dts/renesas/
|
||||
X: arch/riscv/boot/dts/sophgo/
|
||||
X: arch/riscv/boot/dts/thead/
|
||||
F: arch/riscv/boot/dts/canaan/
|
||||
F: arch/riscv/boot/dts/microchip/
|
||||
F: arch/riscv/boot/dts/sifive/
|
||||
F: arch/riscv/boot/dts/starfive/
|
||||
|
||||
RISC-V PMU DRIVERS
|
||||
M: Atish Patra <atishp@atishpatra.org>
|
||||
|
||||
@@ -325,8 +325,8 @@
|
||||
&i2c2 {
|
||||
status = "okay";
|
||||
|
||||
rt5616: rt5616@1b {
|
||||
compatible = "rt5616";
|
||||
rt5616: audio-codec@1b {
|
||||
compatible = "realtek,rt5616";
|
||||
reg = <0x1b>;
|
||||
clocks = <&cru SCLK_I2S_OUT>;
|
||||
clock-names = "mclk";
|
||||
|
||||
@@ -384,12 +384,13 @@
|
||||
};
|
||||
};
|
||||
|
||||
acodec: acodec-ana@20030000 {
|
||||
compatible = "rk3036-codec";
|
||||
acodec: audio-codec@20030000 {
|
||||
compatible = "rockchip,rk3036-codec";
|
||||
reg = <0x20030000 0x4000>;
|
||||
rockchip,grf = <&grf>;
|
||||
clock-names = "acodec_pclk";
|
||||
clocks = <&cru PCLK_ACODEC>;
|
||||
rockchip,grf = <&grf>;
|
||||
#sound-dai-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -399,7 +400,6 @@
|
||||
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_HDMI>;
|
||||
clock-names = "pclk";
|
||||
rockchip,grf = <&grf>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hdmi_ctl>;
|
||||
#sound-dai-cells = <0>;
|
||||
@@ -553,11 +553,11 @@
|
||||
};
|
||||
|
||||
spi: spi@20074000 {
|
||||
compatible = "rockchip,rockchip-spi";
|
||||
compatible = "rockchip,rk3036-spi";
|
||||
reg = <0x20074000 0x1000>;
|
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_SPI>, <&cru SCLK_SPI>;
|
||||
clock-names = "apb-pclk","spi_pclk";
|
||||
clocks = <&cru SCLK_SPI>, <&cru PCLK_SPI>;
|
||||
clock-names = "spiclk", "apb_pclk";
|
||||
dmas = <&pdma 8>, <&pdma 9>;
|
||||
dma-names = "tx", "rx";
|
||||
pinctrl-names = "default";
|
||||
|
||||
@@ -14,7 +14,7 @@ lvds0_subsys: bus@56240000 {
|
||||
compatible = "fsl,imx8qxp-lpcg";
|
||||
reg = <0x56243000 0x4>;
|
||||
#clock-cells = <1>;
|
||||
clock-output-names = "mipi1_lis_lpcg_ipg_clk";
|
||||
clock-output-names = "lvds0_lis_lpcg_ipg_clk";
|
||||
power-domains = <&pd IMX_SC_R_MIPI_1>;
|
||||
};
|
||||
|
||||
@@ -22,9 +22,9 @@ lvds0_subsys: bus@56240000 {
|
||||
compatible = "fsl,imx8qxp-lpcg";
|
||||
reg = <0x5624300c 0x4>;
|
||||
#clock-cells = <1>;
|
||||
clock-output-names = "mipi1_pwm_lpcg_clk",
|
||||
"mipi1_pwm_lpcg_ipg_clk",
|
||||
"mipi1_pwm_lpcg_32k_clk";
|
||||
clock-output-names = "lvds0_pwm_lpcg_clk",
|
||||
"lvds0_pwm_lpcg_ipg_clk",
|
||||
"lvds0_pwm_lpcg_32k_clk";
|
||||
power-domains = <&pd IMX_SC_R_MIPI_1_PWM_0>;
|
||||
};
|
||||
|
||||
@@ -32,8 +32,8 @@ lvds0_subsys: bus@56240000 {
|
||||
compatible = "fsl,imx8qxp-lpcg";
|
||||
reg = <0x56243010 0x4>;
|
||||
#clock-cells = <1>;
|
||||
clock-output-names = "mipi1_i2c0_lpcg_clk",
|
||||
"mipi1_i2c0_lpcg_ipg_clk";
|
||||
clock-output-names = "lvds0_i2c0_lpcg_clk",
|
||||
"lvds0_i2c0_lpcg_ipg_clk";
|
||||
power-domains = <&pd IMX_SC_R_MIPI_1_I2C_0>;
|
||||
};
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ vpu: vpu@2c000000 {
|
||||
mu_m0: mailbox@2d000000 {
|
||||
compatible = "fsl,imx6sx-mu";
|
||||
reg = <0x2d000000 0x20000>;
|
||||
interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#mbox-cells = <2>;
|
||||
power-domains = <&pd IMX_SC_R_VPU_MU_0>;
|
||||
status = "disabled";
|
||||
@@ -24,7 +24,7 @@ vpu: vpu@2c000000 {
|
||||
mu1_m0: mailbox@2d020000 {
|
||||
compatible = "fsl,imx6sx-mu";
|
||||
reg = <0x2d020000 0x20000>;
|
||||
interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#mbox-cells = <2>;
|
||||
power-domains = <&pd IMX_SC_R_VPU_MU_1>;
|
||||
status = "disabled";
|
||||
|
||||
@@ -218,6 +218,18 @@
|
||||
};
|
||||
};
|
||||
|
||||
&media_blk_ctrl {
|
||||
/*
|
||||
* The LVDS panel on this device uses 72.4 MHz pixel clock,
|
||||
* set IMX8MP_VIDEO_PLL1 to 72.4 * 7 = 506.8 MHz so the LDB
|
||||
* serializer and LCDIFv3 scanout engine can reach accurate
|
||||
* pixel clock of exactly 72.4 MHz.
|
||||
*/
|
||||
assigned-clock-rates = <500000000>, <200000000>,
|
||||
<0>, <0>, <500000000>,
|
||||
<506800000>;
|
||||
};
|
||||
|
||||
&snvs_pwrkey {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
assigned-clock-rates = <500000000>, <200000000>, <0>,
|
||||
/* IMX8MP_CLK_MEDIA_DISP2_PIX = pixelclk of lvds panel */
|
||||
<68900000>,
|
||||
<500000000>,
|
||||
/* IMX8MP_VIDEO_PLL1 = IMX8MP_CLK_MEDIA_LDB * 2 */
|
||||
<964600000>;
|
||||
};
|
||||
|
||||
@@ -1261,7 +1261,7 @@
|
||||
compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||
reg = <0x30b40000 0x10000>;
|
||||
interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX8MP_CLK_DUMMY>,
|
||||
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
||||
<&clk IMX8MP_CLK_NAND_USDHC_BUS>,
|
||||
<&clk IMX8MP_CLK_USDHC1_ROOT>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
@@ -1275,7 +1275,7 @@
|
||||
compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||
reg = <0x30b50000 0x10000>;
|
||||
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX8MP_CLK_DUMMY>,
|
||||
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
||||
<&clk IMX8MP_CLK_NAND_USDHC_BUS>,
|
||||
<&clk IMX8MP_CLK_USDHC2_ROOT>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
@@ -1289,7 +1289,7 @@
|
||||
compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc";
|
||||
reg = <0x30b60000 0x10000>;
|
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clk IMX8MP_CLK_DUMMY>,
|
||||
clocks = <&clk IMX8MP_CLK_IPG_ROOT>,
|
||||
<&clk IMX8MP_CLK_NAND_USDHC_BUS>,
|
||||
<&clk IMX8MP_CLK_USDHC3_ROOT>;
|
||||
clock-names = "ipg", "ahb", "per";
|
||||
|
||||
@@ -5,6 +5,14 @@
|
||||
* Author: Alexander Stein
|
||||
*/
|
||||
|
||||
&mu_m0 {
|
||||
interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&mu1_m0 {
|
||||
interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
&vpu_core0 {
|
||||
reg = <0x2d040000 0x10000>;
|
||||
};
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
};
|
||||
|
||||
flexspi2: spi@29810000 {
|
||||
compatible = "nxp,imx8mm-fspi";
|
||||
compatible = "nxp,imx8ulp-fspi";
|
||||
reg = <0x29810000 0x10000>, <0x60000000 0x10000000>;
|
||||
reg-names = "fspi_base", "fspi_mmap";
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
smd-edge {
|
||||
interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
|
||||
mboxes = <&apcs1_mbox 0>;
|
||||
qcom,ipc = <&apcs1_mbox 8 0>;
|
||||
qcom,smd-edge = <15>;
|
||||
|
||||
rpm_requests: rpm-requests {
|
||||
|
||||
@@ -1973,7 +1973,7 @@
|
||||
|
||||
clocks = <&gcc GCC_PCIE_1_PIPE_CLK>,
|
||||
<&gcc GCC_PCIE_1_PIPE_CLK_SRC>,
|
||||
<&pcie1_phy>,
|
||||
<&pcie1_phy QMP_PCIE_PIPE_CLK>,
|
||||
<&rpmhcc RPMH_CXO_CLK>,
|
||||
<&gcc GCC_PCIE_1_AUX_CLK>,
|
||||
<&gcc GCC_PCIE_1_CFG_AHB_CLK>,
|
||||
|
||||
@@ -139,6 +139,8 @@
|
||||
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
vph_pwr: regulator-vph-pwr {
|
||||
|
||||
@@ -134,6 +134,8 @@
|
||||
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -177,9 +177,9 @@
|
||||
compatible = "qcom,x1e80100-sndcard";
|
||||
model = "X1E80100-CRD";
|
||||
audio-routing = "WooferLeft IN", "WSA WSA_SPK1 OUT",
|
||||
"TwitterLeft IN", "WSA WSA_SPK2 OUT",
|
||||
"TweeterLeft IN", "WSA WSA_SPK2 OUT",
|
||||
"WooferRight IN", "WSA2 WSA_SPK2 OUT",
|
||||
"TwitterRight IN", "WSA2 WSA_SPK2 OUT",
|
||||
"TweeterRight IN", "WSA2 WSA_SPK2 OUT",
|
||||
"IN1_HPHL", "HPHL_OUT",
|
||||
"IN2_HPHR", "HPHR_OUT",
|
||||
"AMIC2", "MIC BIAS2",
|
||||
@@ -300,6 +300,8 @@
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
vreg_wwan: regulator-wwan {
|
||||
@@ -933,7 +935,7 @@
|
||||
reg = <0 1>;
|
||||
reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>;
|
||||
#sound-dai-cells = <0>;
|
||||
sound-name-prefix = "TwitterLeft";
|
||||
sound-name-prefix = "TweeterLeft";
|
||||
vdd-1p8-supply = <&vreg_l15b_1p8>;
|
||||
vdd-io-supply = <&vreg_l12b_1p2>;
|
||||
qcom,port-mapping = <4 5 6 7 11 13>;
|
||||
@@ -986,7 +988,7 @@
|
||||
reg = <0 1>;
|
||||
reset-gpios = <&lpass_tlmm 13 GPIO_ACTIVE_LOW>;
|
||||
#sound-dai-cells = <0>;
|
||||
sound-name-prefix = "TwitterRight";
|
||||
sound-name-prefix = "TweeterRight";
|
||||
vdd-1p8-supply = <&vreg_l15b_1p8>;
|
||||
vdd-io-supply = <&vreg_l12b_1p2>;
|
||||
qcom,port-mapping = <4 5 6 7 11 13>;
|
||||
|
||||
@@ -205,6 +205,8 @@
|
||||
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -164,6 +164,8 @@
|
||||
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -253,6 +253,8 @@
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&nvme_reg_en>;
|
||||
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -2924,14 +2924,14 @@
|
||||
"mhi";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
ranges = <0x01000000 0 0x00000000 0 0x70200000 0 0x100000>,
|
||||
<0x02000000 0 0x70300000 0 0x70300000 0 0x3d00000>;
|
||||
bus-range = <0 0xff>;
|
||||
ranges = <0x01000000 0x0 0x00000000 0x0 0x70200000 0x0 0x100000>,
|
||||
<0x02000000 0x0 0x70300000 0x0 0x70300000 0x0 0x1d00000>;
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
dma-coherent;
|
||||
|
||||
linux,pci-domain = <6>;
|
||||
num-lanes = <2>;
|
||||
num-lanes = <4>;
|
||||
|
||||
interrupts = <GIC_SPI 773 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 774 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -2997,19 +2997,22 @@
|
||||
};
|
||||
|
||||
pcie6a_phy: phy@1bfc000 {
|
||||
compatible = "qcom,x1e80100-qmp-gen4x2-pcie-phy";
|
||||
reg = <0 0x01bfc000 0 0x2000>;
|
||||
compatible = "qcom,x1e80100-qmp-gen4x4-pcie-phy";
|
||||
reg = <0 0x01bfc000 0 0x2000>,
|
||||
<0 0x01bfe000 0 0x2000>;
|
||||
|
||||
clocks = <&gcc GCC_PCIE_6A_PHY_AUX_CLK>,
|
||||
<&gcc GCC_PCIE_6A_CFG_AHB_CLK>,
|
||||
<&rpmhcc RPMH_CXO_CLK>,
|
||||
<&tcsr TCSR_PCIE_4L_CLKREF_EN>,
|
||||
<&gcc GCC_PCIE_6A_PHY_RCHNG_CLK>,
|
||||
<&gcc GCC_PCIE_6A_PIPE_CLK>;
|
||||
<&gcc GCC_PCIE_6A_PIPE_CLK>,
|
||||
<&gcc GCC_PCIE_6A_PIPEDIV2_CLK>;
|
||||
clock-names = "aux",
|
||||
"cfg_ahb",
|
||||
"ref",
|
||||
"rchng",
|
||||
"pipe";
|
||||
"pipe",
|
||||
"pipediv2";
|
||||
|
||||
resets = <&gcc GCC_PCIE_6A_PHY_BCR>,
|
||||
<&gcc GCC_PCIE_6A_NOCSR_COM_PHY_BCR>;
|
||||
@@ -3021,6 +3024,8 @@
|
||||
|
||||
power-domains = <&gcc GCC_PCIE_6_PHY_GDSC>;
|
||||
|
||||
qcom,4ln-config-sel = <&tcsr 0x1a000 0>;
|
||||
|
||||
#clock-cells = <0>;
|
||||
clock-output-names = "pcie6a_pipe_clk";
|
||||
|
||||
@@ -3097,7 +3102,7 @@
|
||||
assigned-clocks = <&gcc GCC_PCIE_5_AUX_CLK>;
|
||||
assigned-clock-rates = <19200000>;
|
||||
|
||||
interconnects = <&pcie_south_anoc MASTER_PCIE_5 QCOM_ICC_TAG_ALWAYS
|
||||
interconnects = <&pcie_north_anoc MASTER_PCIE_5 QCOM_ICC_TAG_ALWAYS
|
||||
&mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
|
||||
<&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
|
||||
&cnoc_main SLAVE_PCIE_5 QCOM_ICC_TAG_ALWAYS>;
|
||||
@@ -3124,14 +3129,16 @@
|
||||
|
||||
clocks = <&gcc GCC_PCIE_5_AUX_CLK>,
|
||||
<&gcc GCC_PCIE_5_CFG_AHB_CLK>,
|
||||
<&rpmhcc RPMH_CXO_CLK>,
|
||||
<&tcsr TCSR_PCIE_2L_5_CLKREF_EN>,
|
||||
<&gcc GCC_PCIE_5_PHY_RCHNG_CLK>,
|
||||
<&gcc GCC_PCIE_5_PIPE_CLK>;
|
||||
<&gcc GCC_PCIE_5_PIPE_CLK>,
|
||||
<&gcc GCC_PCIE_5_PIPEDIV2_CLK>;
|
||||
clock-names = "aux",
|
||||
"cfg_ahb",
|
||||
"ref",
|
||||
"rchng",
|
||||
"pipe";
|
||||
"pipe",
|
||||
"pipediv2";
|
||||
|
||||
resets = <&gcc GCC_PCIE_5_PHY_BCR>;
|
||||
reset-names = "phy";
|
||||
@@ -3166,8 +3173,8 @@
|
||||
"mhi";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
ranges = <0x01000000 0 0x00000000 0 0x7c200000 0 0x100000>,
|
||||
<0x02000000 0 0x7c300000 0 0x7c300000 0 0x3d00000>;
|
||||
ranges = <0x01000000 0x0 0x00000000 0x0 0x7c200000 0x0 0x100000>,
|
||||
<0x02000000 0x0 0x7c300000 0x0 0x7c300000 0x0 0x1d00000>;
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
dma-coherent;
|
||||
@@ -3217,7 +3224,7 @@
|
||||
assigned-clocks = <&gcc GCC_PCIE_4_AUX_CLK>;
|
||||
assigned-clock-rates = <19200000>;
|
||||
|
||||
interconnects = <&pcie_south_anoc MASTER_PCIE_4 QCOM_ICC_TAG_ALWAYS
|
||||
interconnects = <&pcie_north_anoc MASTER_PCIE_4 QCOM_ICC_TAG_ALWAYS
|
||||
&mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
|
||||
<&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS
|
||||
&cnoc_main SLAVE_PCIE_4 QCOM_ICC_TAG_ALWAYS>;
|
||||
@@ -3254,14 +3261,16 @@
|
||||
|
||||
clocks = <&gcc GCC_PCIE_4_AUX_CLK>,
|
||||
<&gcc GCC_PCIE_4_CFG_AHB_CLK>,
|
||||
<&rpmhcc RPMH_CXO_CLK>,
|
||||
<&tcsr TCSR_PCIE_2L_4_CLKREF_EN>,
|
||||
<&gcc GCC_PCIE_4_PHY_RCHNG_CLK>,
|
||||
<&gcc GCC_PCIE_4_PIPE_CLK>;
|
||||
<&gcc GCC_PCIE_4_PIPE_CLK>,
|
||||
<&gcc GCC_PCIE_4_PIPEDIV2_CLK>;
|
||||
clock-names = "aux",
|
||||
"cfg_ahb",
|
||||
"ref",
|
||||
"rchng",
|
||||
"pipe";
|
||||
"pipe",
|
||||
"pipediv2";
|
||||
|
||||
resets = <&gcc GCC_PCIE_4_PHY_BCR>;
|
||||
reset-names = "phy";
|
||||
@@ -6084,7 +6093,8 @@
|
||||
<0 0x25a00000 0 0x200000>,
|
||||
<0 0x25c00000 0 0x200000>,
|
||||
<0 0x25e00000 0 0x200000>,
|
||||
<0 0x26000000 0 0x200000>;
|
||||
<0 0x26000000 0 0x200000>,
|
||||
<0 0x26200000 0 0x200000>;
|
||||
reg-names = "llcc0_base",
|
||||
"llcc1_base",
|
||||
"llcc2_base",
|
||||
@@ -6093,7 +6103,8 @@
|
||||
"llcc5_base",
|
||||
"llcc6_base",
|
||||
"llcc7_base",
|
||||
"llcc_broadcast_base";
|
||||
"llcc_broadcast_base",
|
||||
"llcc_broadcast_and_base";
|
||||
interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
|
||||
@@ -66,7 +66,6 @@
|
||||
bus-width = <8>;
|
||||
cap-mmc-highspeed;
|
||||
mmc-hs200-1_8v;
|
||||
supports-emmc;
|
||||
mmc-pwrseq = <&emmc_pwrseq>;
|
||||
non-removable;
|
||||
vmmc-supply = <&vcc_3v3>;
|
||||
|
||||
@@ -36,14 +36,14 @@
|
||||
|
||||
power_led: led-0 {
|
||||
label = "firefly:red:power";
|
||||
linux,default-trigger = "ir-power-click";
|
||||
linux,default-trigger = "default-on";
|
||||
default-state = "on";
|
||||
gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
user_led: led-1 {
|
||||
label = "firefly:blue:user";
|
||||
linux,default-trigger = "ir-user-click";
|
||||
linux,default-trigger = "rc-feedback";
|
||||
default-state = "off";
|
||||
gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
@@ -24,9 +24,7 @@
|
||||
disable-wp;
|
||||
mmc-hs200-1_8v;
|
||||
non-removable;
|
||||
num-slots = <1>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
|
||||
supports-emmc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -754,8 +754,7 @@
|
||||
compatible = "rockchip,rk3328-dw-hdmi";
|
||||
reg = <0x0 0xff3c0000 0x0 0x20000>;
|
||||
reg-io-width = <4>;
|
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru PCLK_HDMI>,
|
||||
<&cru SCLK_HDMI_SFC>,
|
||||
<&cru SCLK_RTC32K>;
|
||||
|
||||
@@ -61,7 +61,6 @@
|
||||
fan: fan@18 {
|
||||
compatible = "ti,amc6821";
|
||||
reg = <0x18>;
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
rtc_twi: rtc@6f {
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
status = "okay";
|
||||
|
||||
rt5651: audio-codec@1a {
|
||||
compatible = "rockchip,rt5651";
|
||||
compatible = "realtek,rt5651";
|
||||
reg = <0x1a>;
|
||||
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
||||
clock-names = "mclk";
|
||||
|
||||
@@ -166,7 +166,6 @@
|
||||
regulator-max-microvolt = <1800000>;
|
||||
vin-supply = <&vcc3v3_sys>;
|
||||
gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
/* MIPI DSI panel 2.8v supply */
|
||||
@@ -178,7 +177,6 @@
|
||||
regulator-max-microvolt = <2800000>;
|
||||
vin-supply = <&vcc3v3_sys>;
|
||||
gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
vibrator {
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
es8388: es8388@11 {
|
||||
compatible = "everest,es8388";
|
||||
reg = <0x11>;
|
||||
clock-names = "mclk";
|
||||
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
|
||||
@@ -576,7 +576,7 @@
|
||||
bluetooth {
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
clocks = <&rk808 1>;
|
||||
clock-names = "ext_clock";
|
||||
clock-names = "txco";
|
||||
device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>;
|
||||
host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>;
|
||||
shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
status = "okay";
|
||||
|
||||
rt5651: rt5651@1a {
|
||||
compatible = "rockchip,rt5651";
|
||||
compatible = "realtek,rt5651";
|
||||
reg = <0x1a>;
|
||||
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
||||
clock-names = "mclk";
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pintctrl-names = "default";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c2m1_xfer>;
|
||||
status = "okay";
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
pintctrl-names = "default";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c2m1_xfer>;
|
||||
status = "okay";
|
||||
|
||||
|
||||
@@ -449,9 +449,9 @@
|
||||
bluetooth {
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
clocks = <&pmucru CLK_RTC_32K>;
|
||||
clock-names = "ext_clock";
|
||||
device-wake-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
host-wake-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
|
||||
clock-names = "txco";
|
||||
device-wakeup-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||
host-wakeup-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
|
||||
shutdown-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;
|
||||
|
||||
@@ -507,7 +507,6 @@
|
||||
non-removable;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>;
|
||||
supports-emmc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -684,11 +684,11 @@
|
||||
compatible = "brcm,bcm43438-bt";
|
||||
clocks = <&rk817 1>;
|
||||
clock-names = "lpo";
|
||||
device-wake-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
|
||||
host-wake-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_LOW>;
|
||||
device-wakeup-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
|
||||
host-wakeup-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-0 = <&bt_enable_h>, <&bt_host_wake_l>, <&bt_wake_h>;
|
||||
pinctrl-names = "default";
|
||||
shutdown-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
|
||||
vbat-supply = <&vcc_wl>;
|
||||
vddio-supply = <&vcca_1v8_pmu>;
|
||||
};
|
||||
|
||||
@@ -402,9 +402,9 @@
|
||||
clock-names = "lpo";
|
||||
device-wakeup-gpios = <&gpio2 RK_PB2 GPIO_ACTIVE_HIGH>;
|
||||
host-wakeup-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&bt_host_wake_h &bt_reg_on_h &bt_wake_host_h>;
|
||||
shutdown-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
|
||||
vbat-supply = <&vcc_3v3>;
|
||||
vddio-supply = <&vcc_1v8>;
|
||||
};
|
||||
|
||||
@@ -589,7 +589,6 @@
|
||||
non-removable;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>;
|
||||
supports-emmc;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -272,7 +272,6 @@
|
||||
regulator-name = "vdd_logic";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-init-microvolt = <900000>;
|
||||
regulator-initial-mode = <0x2>;
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1350000>;
|
||||
@@ -285,7 +284,6 @@
|
||||
|
||||
vdd_gpu: DCDC_REG2 {
|
||||
regulator-name = "vdd_gpu";
|
||||
regulator-init-microvolt = <900000>;
|
||||
regulator-initial-mode = <0x2>;
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1350000>;
|
||||
@@ -309,7 +307,6 @@
|
||||
|
||||
vdd_npu: DCDC_REG4 {
|
||||
regulator-name = "vdd_npu";
|
||||
regulator-init-microvolt = <900000>;
|
||||
regulator-initial-mode = <0x2>;
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1350000>;
|
||||
|
||||
@@ -337,15 +337,19 @@
|
||||
cache-unified;
|
||||
next-level-cache = <&l3_cache>;
|
||||
};
|
||||
};
|
||||
|
||||
l3_cache: l3-cache {
|
||||
compatible = "cache";
|
||||
cache-size = <3145728>;
|
||||
cache-line-size = <64>;
|
||||
cache-sets = <4096>;
|
||||
cache-level = <3>;
|
||||
cache-unified;
|
||||
};
|
||||
/*
|
||||
* The L3 cache belongs to the DynamIQ Shared Unit (DSU),
|
||||
* so it's represented here, outside the "cpus" node
|
||||
*/
|
||||
l3_cache: l3-cache {
|
||||
compatible = "cache";
|
||||
cache-size = <3145728>;
|
||||
cache-line-size = <64>;
|
||||
cache-sets = <4096>;
|
||||
cache-level = <3>;
|
||||
cache-unified;
|
||||
};
|
||||
|
||||
display_subsystem: display-subsystem {
|
||||
|
||||
@@ -328,7 +328,6 @@
|
||||
compatible = "everest,es8388";
|
||||
reg = <0x11>;
|
||||
clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
clock-names = "mclk";
|
||||
AVDD-supply = <&vcc_1v8_s0>;
|
||||
DVDD-supply = <&vcc_1v8_s0>;
|
||||
HPVDD-supply = <&vcc_3v3_s0>;
|
||||
|
||||
@@ -316,7 +316,6 @@
|
||||
assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
assigned-clock-rates = <12288000>;
|
||||
clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
clock-names = "mclk";
|
||||
AVDD-supply = <&avcc_1v8_codec_s0>;
|
||||
DVDD-supply = <&avcc_1v8_codec_s0>;
|
||||
HPVDD-supply = <&vcc_3v3_s0>;
|
||||
|
||||
@@ -304,12 +304,12 @@
|
||||
};
|
||||
|
||||
cooling-maps {
|
||||
map1 {
|
||||
map0 {
|
||||
trip = <&package_fan0>;
|
||||
cooling-device = <&fan THERMAL_NO_LIMIT 1>;
|
||||
};
|
||||
|
||||
map2 {
|
||||
map1 {
|
||||
trip = <&package_fan1>;
|
||||
cooling-device = <&fan 2 THERMAL_NO_LIMIT>;
|
||||
};
|
||||
|
||||
@@ -428,7 +428,6 @@
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <550000>;
|
||||
regulator-max-microvolt = <950000>;
|
||||
regulator-init-microvolt = <750000>;
|
||||
regulator-ramp-delay = <12500>;
|
||||
|
||||
regulator-state-mem {
|
||||
|
||||
@@ -296,6 +296,7 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>,
|
||||
<&rk806_dvs2_null>, <&rk806_dvs3_null>;
|
||||
system-power-controller;
|
||||
|
||||
vcc1-supply = <&vcc5v0_sys>;
|
||||
vcc2-supply = <&vcc5v0_sys>;
|
||||
|
||||
@@ -377,7 +377,6 @@
|
||||
assigned-clock-rates = <12288000>;
|
||||
assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
AVDD-supply = <&vcc_3v3_s3>;
|
||||
clock-names = "mclk";
|
||||
clocks = <&cru I2S0_8CH_MCLKOUT>;
|
||||
DVDD-supply = <&vcc_1v8_s3>;
|
||||
HPVDD-supply = <&vcc_3v3_s3>;
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
compatible = "snps,dw-apb-gpio-port";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
snps,nr-gpios = <32>;
|
||||
ngpios = <32>;
|
||||
reg = <0>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
@@ -134,7 +134,7 @@
|
||||
compatible = "snps,dw-apb-gpio-port";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
snps,nr-gpios = <32>;
|
||||
ngpios = <32>;
|
||||
reg = <0>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
@@ -156,7 +156,7 @@
|
||||
compatible = "snps,dw-apb-gpio-port";
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
snps,nr-gpios = <32>;
|
||||
ngpios = <32>;
|
||||
reg = <0>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
|
||||
@@ -128,7 +128,6 @@
|
||||
assigned-clocks = <&ispcrg JH7110_ISPCLK_DOM4_APB_FUNC>,
|
||||
<&ispcrg JH7110_ISPCLK_MIPI_RX0_PXL>;
|
||||
assigned-clock-rates = <49500000>, <198000000>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
@@ -151,7 +150,6 @@
|
||||
&csi2rx {
|
||||
assigned-clocks = <&ispcrg JH7110_ISPCLK_VIN_SYS>;
|
||||
assigned-clock-rates = <297000000>;
|
||||
status = "okay";
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -44,8 +44,7 @@
|
||||
};
|
||||
|
||||
&phy0 {
|
||||
rx-internal-delay-ps = <1900>;
|
||||
tx-internal-delay-ps = <1500>;
|
||||
rx-internal-delay-ps = <1500>;
|
||||
motorcomm,rx-clk-drv-microamp = <2910>;
|
||||
motorcomm,rx-data-drv-microamp = <2910>;
|
||||
motorcomm,tx-clk-adj-enabled;
|
||||
|
||||
@@ -525,10 +525,6 @@ static int tpm_hwrng_read(struct hwrng *rng, void *data, size_t max, bool wait)
|
||||
{
|
||||
struct tpm_chip *chip = container_of(rng, struct tpm_chip, hwrng);
|
||||
|
||||
/* Give back zero bytes, as TPM chip has not yet fully resumed: */
|
||||
if (chip->flags & TPM_CHIP_FLAG_SUSPENDED)
|
||||
return 0;
|
||||
|
||||
return tpm_get_random(chip, data, max);
|
||||
}
|
||||
|
||||
|
||||
@@ -370,6 +370,13 @@ int tpm_pm_suspend(struct device *dev)
|
||||
if (!chip)
|
||||
return -ENODEV;
|
||||
|
||||
rc = tpm_try_get_ops(chip);
|
||||
if (rc) {
|
||||
/* Can be safely set out of locks, as no action cannot race: */
|
||||
chip->flags |= TPM_CHIP_FLAG_SUSPENDED;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)
|
||||
goto suspended;
|
||||
|
||||
@@ -377,21 +384,19 @@ int tpm_pm_suspend(struct device *dev)
|
||||
!pm_suspend_via_firmware())
|
||||
goto suspended;
|
||||
|
||||
rc = tpm_try_get_ops(chip);
|
||||
if (!rc) {
|
||||
if (chip->flags & TPM_CHIP_FLAG_TPM2) {
|
||||
tpm2_end_auth_session(chip);
|
||||
tpm2_shutdown(chip, TPM2_SU_STATE);
|
||||
} else {
|
||||
rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
|
||||
}
|
||||
|
||||
tpm_put_ops(chip);
|
||||
if (chip->flags & TPM_CHIP_FLAG_TPM2) {
|
||||
tpm2_end_auth_session(chip);
|
||||
tpm2_shutdown(chip, TPM2_SU_STATE);
|
||||
goto suspended;
|
||||
}
|
||||
|
||||
rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
|
||||
|
||||
suspended:
|
||||
chip->flags |= TPM_CHIP_FLAG_SUSPENDED;
|
||||
tpm_put_ops(chip);
|
||||
|
||||
out:
|
||||
if (rc)
|
||||
dev_err(dev, "Ignoring error %d while suspending\n", rc);
|
||||
return 0;
|
||||
@@ -440,11 +445,18 @@ int tpm_get_random(struct tpm_chip *chip, u8 *out, size_t max)
|
||||
if (!chip)
|
||||
return -ENODEV;
|
||||
|
||||
/* Give back zero bytes, as TPM chip has not yet fully resumed: */
|
||||
if (chip->flags & TPM_CHIP_FLAG_SUSPENDED) {
|
||||
rc = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (chip->flags & TPM_CHIP_FLAG_TPM2)
|
||||
rc = tpm2_get_random(chip, out, max);
|
||||
else
|
||||
rc = tpm1_get_random(chip, out, max);
|
||||
|
||||
out:
|
||||
tpm_put_ops(chip);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -342,9 +342,11 @@ static int qcom_llcc_edac_probe(struct platform_device *pdev)
|
||||
int ecc_irq;
|
||||
int rc;
|
||||
|
||||
rc = qcom_llcc_core_setup(llcc_driv_data, llcc_driv_data->bcast_regmap);
|
||||
if (rc)
|
||||
return rc;
|
||||
if (!llcc_driv_data->ecc_irq_configured) {
|
||||
rc = qcom_llcc_core_setup(llcc_driv_data, llcc_driv_data->bcast_regmap);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Allocate edac control info */
|
||||
edev_ctl = edac_device_alloc_ctl_info(0, "qcom-llcc", 1, "bank",
|
||||
|
||||
@@ -325,7 +325,10 @@ EXPORT_SYMBOL_GPL(scmi_driver_unregister);
|
||||
|
||||
static void scmi_device_release(struct device *dev)
|
||||
{
|
||||
kfree(to_scmi_dev(dev));
|
||||
struct scmi_device *scmi_dev = to_scmi_dev(dev);
|
||||
|
||||
kfree_const(scmi_dev->name);
|
||||
kfree(scmi_dev);
|
||||
}
|
||||
|
||||
static void __scmi_device_destroy(struct scmi_device *scmi_dev)
|
||||
@@ -338,7 +341,6 @@ static void __scmi_device_destroy(struct scmi_device *scmi_dev)
|
||||
if (scmi_dev->protocol_id == SCMI_PROTOCOL_SYSTEM)
|
||||
atomic_set(&scmi_syspower_registered, 0);
|
||||
|
||||
kfree_const(scmi_dev->name);
|
||||
ida_free(&scmi_bus_id, scmi_dev->id);
|
||||
device_unregister(&scmi_dev->dev);
|
||||
}
|
||||
@@ -410,7 +412,6 @@ __scmi_device_create(struct device_node *np, struct device *parent,
|
||||
|
||||
return scmi_dev;
|
||||
put_dev:
|
||||
kfree_const(scmi_dev->name);
|
||||
put_device(&scmi_dev->dev);
|
||||
ida_free(&scmi_bus_id, id);
|
||||
return NULL;
|
||||
|
||||
@@ -163,6 +163,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);
|
||||
* used to initialize this channel
|
||||
* @dev: Reference to device in the SCMI hierarchy corresponding to this
|
||||
* channel
|
||||
* @is_p2a: A flag to identify a channel as P2A (RX)
|
||||
* @rx_timeout_ms: The configured RX timeout in milliseconds.
|
||||
* @handle: Pointer to SCMI entity handle
|
||||
* @no_completion_irq: Flag to indicate that this channel has no completion
|
||||
@@ -174,6 +175,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id);
|
||||
struct scmi_chan_info {
|
||||
int id;
|
||||
struct device *dev;
|
||||
bool is_p2a;
|
||||
unsigned int rx_timeout_ms;
|
||||
struct scmi_handle *handle;
|
||||
bool no_completion_irq;
|
||||
|
||||
@@ -1048,6 +1048,11 @@ static inline void scmi_xfer_command_release(struct scmi_info *info,
|
||||
static inline void scmi_clear_channel(struct scmi_info *info,
|
||||
struct scmi_chan_info *cinfo)
|
||||
{
|
||||
if (!cinfo->is_p2a) {
|
||||
dev_warn(cinfo->dev, "Invalid clear on A2P channel !\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (info->desc->ops->clear_channel)
|
||||
info->desc->ops->clear_channel(cinfo);
|
||||
}
|
||||
@@ -2638,6 +2643,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct device_node *of_node,
|
||||
if (!cinfo)
|
||||
return -ENOMEM;
|
||||
|
||||
cinfo->is_p2a = !tx;
|
||||
cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms;
|
||||
|
||||
/* Create a unique name for this transport device */
|
||||
@@ -3042,10 +3048,10 @@ static const struct scmi_desc *scmi_transport_setup(struct device *dev)
|
||||
|
||||
dev_info(dev, "Using %s\n", dev_driver_string(trans->supplier));
|
||||
|
||||
ret = of_property_read_u32(dev->of_node, "max-rx-timeout-ms",
|
||||
ret = of_property_read_u32(dev->of_node, "arm,max-rx-timeout-ms",
|
||||
&trans->desc->max_rx_timeout_ms);
|
||||
if (ret && ret != -EINVAL)
|
||||
dev_err(dev, "Malformed max-rx-timeout-ms DT property.\n");
|
||||
dev_err(dev, "Malformed arm,max-rx-timeout-ms DT property.\n");
|
||||
|
||||
dev_info(dev, "SCMI max-rx-timeout: %dms\n",
|
||||
trans->desc->max_rx_timeout_ms);
|
||||
|
||||
@@ -76,14 +76,11 @@
|
||||
#define AUTO_UPDATE_INFO_SIZE SZ_1M
|
||||
#define AUTO_UPDATE_BITSTREAM_BASE (AUTO_UPDATE_DIRECTORY_SIZE + AUTO_UPDATE_INFO_SIZE)
|
||||
|
||||
#define AUTO_UPDATE_TIMEOUT_MS 60000
|
||||
|
||||
struct mpfs_auto_update_priv {
|
||||
struct mpfs_sys_controller *sys_controller;
|
||||
struct device *dev;
|
||||
struct mtd_info *flash;
|
||||
struct fw_upload *fw_uploader;
|
||||
struct completion programming_complete;
|
||||
size_t size_per_bitstream;
|
||||
bool cancel_request;
|
||||
};
|
||||
@@ -156,19 +153,6 @@ static void mpfs_auto_update_cancel(struct fw_upload *fw_uploader)
|
||||
|
||||
static enum fw_upload_err mpfs_auto_update_poll_complete(struct fw_upload *fw_uploader)
|
||||
{
|
||||
struct mpfs_auto_update_priv *priv = fw_uploader->dd_handle;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* There is no meaningful way to get the status of the programming while
|
||||
* it is in progress, so attempting anything other than waiting for it
|
||||
* to complete would be misplaced.
|
||||
*/
|
||||
ret = wait_for_completion_timeout(&priv->programming_complete,
|
||||
msecs_to_jiffies(AUTO_UPDATE_TIMEOUT_MS));
|
||||
if (!ret)
|
||||
return FW_UPLOAD_ERR_TIMEOUT;
|
||||
|
||||
return FW_UPLOAD_ERR_NONE;
|
||||
}
|
||||
|
||||
@@ -349,33 +333,23 @@ static enum fw_upload_err mpfs_auto_update_write(struct fw_upload *fw_uploader,
|
||||
u32 offset, u32 size, u32 *written)
|
||||
{
|
||||
struct mpfs_auto_update_priv *priv = fw_uploader->dd_handle;
|
||||
enum fw_upload_err err = FW_UPLOAD_ERR_NONE;
|
||||
int ret;
|
||||
|
||||
reinit_completion(&priv->programming_complete);
|
||||
|
||||
ret = mpfs_auto_update_write_bitstream(fw_uploader, data, offset, size, written);
|
||||
if (ret) {
|
||||
err = FW_UPLOAD_ERR_RW_ERROR;
|
||||
goto out;
|
||||
}
|
||||
if (ret)
|
||||
return FW_UPLOAD_ERR_RW_ERROR;
|
||||
|
||||
if (priv->cancel_request) {
|
||||
err = FW_UPLOAD_ERR_CANCELED;
|
||||
goto out;
|
||||
}
|
||||
if (priv->cancel_request)
|
||||
return FW_UPLOAD_ERR_CANCELED;
|
||||
|
||||
if (mpfs_auto_update_is_bitstream_info(data, size))
|
||||
goto out;
|
||||
return FW_UPLOAD_ERR_NONE;
|
||||
|
||||
ret = mpfs_auto_update_verify_image(fw_uploader);
|
||||
if (ret)
|
||||
err = FW_UPLOAD_ERR_FW_INVALID;
|
||||
return FW_UPLOAD_ERR_FW_INVALID;
|
||||
|
||||
out:
|
||||
complete(&priv->programming_complete);
|
||||
|
||||
return err;
|
||||
return FW_UPLOAD_ERR_NONE;
|
||||
}
|
||||
|
||||
static const struct fw_upload_ops mpfs_auto_update_ops = {
|
||||
@@ -461,8 +435,6 @@ static int mpfs_auto_update_probe(struct platform_device *pdev)
|
||||
return dev_err_probe(dev, ret,
|
||||
"The current bitstream does not support auto-update\n");
|
||||
|
||||
init_completion(&priv->programming_complete);
|
||||
|
||||
fw_uploader = firmware_upload_register(THIS_MODULE, dev, "mpfs-auto-update",
|
||||
&mpfs_auto_update_ops, priv);
|
||||
if (IS_ERR(fw_uploader))
|
||||
|
||||
@@ -112,6 +112,7 @@ enum qcom_scm_qseecom_tz_cmd_info {
|
||||
};
|
||||
|
||||
#define QSEECOM_MAX_APP_NAME_SIZE 64
|
||||
#define SHMBRIDGE_RESULT_NOTSUPP 4
|
||||
|
||||
/* Each bit configures cold/warm boot address for one of the 4 CPUs */
|
||||
static const u8 qcom_scm_cpu_cold_bits[QCOM_SCM_BOOT_MAX_CPUS] = {
|
||||
@@ -216,7 +217,7 @@ static DEFINE_SPINLOCK(scm_query_lock);
|
||||
|
||||
struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void)
|
||||
{
|
||||
return __scm->mempool;
|
||||
return __scm ? __scm->mempool : NULL;
|
||||
}
|
||||
|
||||
static enum qcom_scm_convention __get_convention(void)
|
||||
@@ -545,7 +546,7 @@ static void qcom_scm_set_download_mode(u32 dload_mode)
|
||||
} else if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_BOOT,
|
||||
QCOM_SCM_BOOT_SET_DLOAD_MODE)) {
|
||||
ret = __qcom_scm_set_dload_mode(__scm->dev, !!dload_mode);
|
||||
} else {
|
||||
} else if (dload_mode) {
|
||||
dev_err(__scm->dev,
|
||||
"No available mechanism for setting download mode\n");
|
||||
}
|
||||
@@ -1361,6 +1362,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh_available);
|
||||
|
||||
int qcom_scm_shm_bridge_enable(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
struct qcom_scm_desc desc = {
|
||||
.svc = QCOM_SCM_SVC_MP,
|
||||
.cmd = QCOM_SCM_MP_SHM_BRIDGE_ENABLE,
|
||||
@@ -1373,7 +1376,15 @@ int qcom_scm_shm_bridge_enable(void)
|
||||
QCOM_SCM_MP_SHM_BRIDGE_ENABLE))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return qcom_scm_call(__scm->dev, &desc, &res) ?: res.result[0];
|
||||
ret = qcom_scm_call(__scm->dev, &desc, &res);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (res.result[0] == SHMBRIDGE_RESULT_NOTSUPP)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return res.result[0];
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_enable);
|
||||
|
||||
|
||||
@@ -1875,7 +1875,7 @@ u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)
|
||||
|
||||
u32 len = hid_report_len(report) + 7;
|
||||
|
||||
return kmalloc(len, flags);
|
||||
return kzalloc(len, flags);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hid_alloc_report_buf);
|
||||
|
||||
|
||||
@@ -1905,16 +1905,13 @@ static void check_migrations(struct work_struct *ws)
|
||||
* This function gets called on the error paths of the constructor, so we
|
||||
* have to cope with a partially initialised struct.
|
||||
*/
|
||||
static void destroy(struct cache *cache)
|
||||
static void __destroy(struct cache *cache)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
mempool_exit(&cache->migration_pool);
|
||||
|
||||
if (cache->prison)
|
||||
dm_bio_prison_destroy_v2(cache->prison);
|
||||
|
||||
cancel_delayed_work_sync(&cache->waker);
|
||||
if (cache->wq)
|
||||
destroy_workqueue(cache->wq);
|
||||
|
||||
@@ -1942,13 +1939,22 @@ static void destroy(struct cache *cache)
|
||||
if (cache->policy)
|
||||
dm_cache_policy_destroy(cache->policy);
|
||||
|
||||
bioset_exit(&cache->bs);
|
||||
|
||||
kfree(cache);
|
||||
}
|
||||
|
||||
static void destroy(struct cache *cache)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
cancel_delayed_work_sync(&cache->waker);
|
||||
|
||||
for (i = 0; i < cache->nr_ctr_args ; i++)
|
||||
kfree(cache->ctr_args[i]);
|
||||
kfree(cache->ctr_args);
|
||||
|
||||
bioset_exit(&cache->bs);
|
||||
|
||||
kfree(cache);
|
||||
__destroy(cache);
|
||||
}
|
||||
|
||||
static void cache_dtr(struct dm_target *ti)
|
||||
@@ -2003,7 +2009,6 @@ struct cache_args {
|
||||
sector_t cache_sectors;
|
||||
|
||||
struct dm_dev *origin_dev;
|
||||
sector_t origin_sectors;
|
||||
|
||||
uint32_t block_size;
|
||||
|
||||
@@ -2084,6 +2089,7 @@ static int parse_cache_dev(struct cache_args *ca, struct dm_arg_set *as,
|
||||
static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
|
||||
char **error)
|
||||
{
|
||||
sector_t origin_sectors;
|
||||
int r;
|
||||
|
||||
if (!at_least_one_arg(as, error))
|
||||
@@ -2096,8 +2102,8 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
|
||||
return r;
|
||||
}
|
||||
|
||||
ca->origin_sectors = get_dev_size(ca->origin_dev);
|
||||
if (ca->ti->len > ca->origin_sectors) {
|
||||
origin_sectors = get_dev_size(ca->origin_dev);
|
||||
if (ca->ti->len > origin_sectors) {
|
||||
*error = "Device size larger than cached device";
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -2407,7 +2413,7 @@ static int cache_create(struct cache_args *ca, struct cache **result)
|
||||
|
||||
ca->metadata_dev = ca->origin_dev = ca->cache_dev = NULL;
|
||||
|
||||
origin_blocks = cache->origin_sectors = ca->origin_sectors;
|
||||
origin_blocks = cache->origin_sectors = ti->len;
|
||||
origin_blocks = block_div(origin_blocks, ca->block_size);
|
||||
cache->origin_blocks = to_oblock(origin_blocks);
|
||||
|
||||
@@ -2561,7 +2567,7 @@ static int cache_create(struct cache_args *ca, struct cache **result)
|
||||
*result = cache;
|
||||
return 0;
|
||||
bad:
|
||||
destroy(cache);
|
||||
__destroy(cache);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -2612,7 +2618,7 @@ static int cache_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
|
||||
r = copy_ctr_args(cache, argc - 3, (const char **)argv + 3);
|
||||
if (r) {
|
||||
destroy(cache);
|
||||
__destroy(cache);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -2895,19 +2901,19 @@ static dm_cblock_t get_cache_dev_size(struct cache *cache)
|
||||
static bool can_resize(struct cache *cache, dm_cblock_t new_size)
|
||||
{
|
||||
if (from_cblock(new_size) > from_cblock(cache->cache_size)) {
|
||||
if (cache->sized) {
|
||||
DMERR("%s: unable to extend cache due to missing cache table reload",
|
||||
cache_device_name(cache));
|
||||
return false;
|
||||
}
|
||||
DMERR("%s: unable to extend cache due to missing cache table reload",
|
||||
cache_device_name(cache));
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* We can't drop a dirty block when shrinking the cache.
|
||||
*/
|
||||
while (from_cblock(new_size) < from_cblock(cache->cache_size)) {
|
||||
new_size = to_cblock(from_cblock(new_size) + 1);
|
||||
if (is_dirty(cache, new_size)) {
|
||||
if (cache->loaded_mappings) {
|
||||
new_size = to_cblock(find_next_bit(cache->dirty_bitset,
|
||||
from_cblock(cache->cache_size),
|
||||
from_cblock(new_size)));
|
||||
if (new_size != cache->cache_size) {
|
||||
DMERR("%s: unable to shrink cache; cache block %llu is dirty",
|
||||
cache_device_name(cache),
|
||||
(unsigned long long) from_cblock(new_size));
|
||||
@@ -2943,20 +2949,15 @@ static int cache_preresume(struct dm_target *ti)
|
||||
/*
|
||||
* Check to see if the cache has resized.
|
||||
*/
|
||||
if (!cache->sized) {
|
||||
r = resize_cache_dev(cache, csize);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
cache->sized = true;
|
||||
|
||||
} else if (csize != cache->cache_size) {
|
||||
if (!cache->sized || csize != cache->cache_size) {
|
||||
if (!can_resize(cache, csize))
|
||||
return -EINVAL;
|
||||
|
||||
r = resize_cache_dev(cache, csize);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
cache->sized = true;
|
||||
}
|
||||
|
||||
if (!cache->loaded_mappings) {
|
||||
|
||||
@@ -85,8 +85,8 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
}
|
||||
uc->physical_start = start;
|
||||
|
||||
uc->unstripe_offset = uc->unstripe * uc->chunk_size;
|
||||
uc->unstripe_width = (uc->stripes - 1) * uc->chunk_size;
|
||||
uc->unstripe_offset = (sector_t)uc->unstripe * uc->chunk_size;
|
||||
uc->unstripe_width = (sector_t)(uc->stripes - 1) * uc->chunk_size;
|
||||
uc->chunk_shift = is_power_of_2(uc->chunk_size) ? fls(uc->chunk_size) - 1 : 0;
|
||||
|
||||
tmp_len = ti->len;
|
||||
|
||||
@@ -356,9 +356,9 @@ static int verity_verify_level(struct dm_verity *v, struct dm_verity_io *io,
|
||||
else if (verity_handle_err(v,
|
||||
DM_VERITY_BLOCK_TYPE_METADATA,
|
||||
hash_block)) {
|
||||
struct bio *bio =
|
||||
dm_bio_from_per_bio_data(io,
|
||||
v->ti->per_io_data_size);
|
||||
struct bio *bio;
|
||||
io->had_mismatch = true;
|
||||
bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size);
|
||||
dm_audit_log_bio(DM_MSG_PREFIX, "verify-metadata", bio,
|
||||
block, 0);
|
||||
r = -EIO;
|
||||
@@ -482,6 +482,7 @@ static int verity_handle_data_hash_mismatch(struct dm_verity *v,
|
||||
return -EIO; /* Error correction failed; Just return error */
|
||||
|
||||
if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA, blkno)) {
|
||||
io->had_mismatch = true;
|
||||
dm_audit_log_bio(DM_MSG_PREFIX, "verify-data", bio, blkno, 0);
|
||||
return -EIO;
|
||||
}
|
||||
@@ -606,6 +607,7 @@ static void verity_finish_io(struct dm_verity_io *io, blk_status_t status)
|
||||
|
||||
if (unlikely(status != BLK_STS_OK) &&
|
||||
unlikely(!(bio->bi_opf & REQ_RAHEAD)) &&
|
||||
!io->had_mismatch &&
|
||||
!verity_is_system_shutting_down()) {
|
||||
if (v->error_mode == DM_VERITY_MODE_PANIC) {
|
||||
panic("dm-verity device has I/O error");
|
||||
@@ -779,6 +781,7 @@ static int verity_map(struct dm_target *ti, struct bio *bio)
|
||||
io->orig_bi_end_io = bio->bi_end_io;
|
||||
io->block = bio->bi_iter.bi_sector >> (v->data_dev_block_bits - SECTOR_SHIFT);
|
||||
io->n_blocks = bio->bi_iter.bi_size >> v->data_dev_block_bits;
|
||||
io->had_mismatch = false;
|
||||
|
||||
bio->bi_end_io = verity_end_io;
|
||||
bio->bi_private = io;
|
||||
|
||||
@@ -92,6 +92,7 @@ struct dm_verity_io {
|
||||
sector_t block;
|
||||
unsigned int n_blocks;
|
||||
bool in_bh;
|
||||
bool had_mismatch;
|
||||
|
||||
struct work_struct work;
|
||||
struct work_struct bh_work;
|
||||
|
||||
+3
-1
@@ -2290,8 +2290,10 @@ static struct mapped_device *alloc_dev(int minor)
|
||||
* override accordingly.
|
||||
*/
|
||||
md->disk = blk_alloc_disk(NULL, md->numa_node_id);
|
||||
if (IS_ERR(md->disk))
|
||||
if (IS_ERR(md->disk)) {
|
||||
md->disk = NULL;
|
||||
goto bad;
|
||||
}
|
||||
md->queue = md->disk->queue;
|
||||
|
||||
init_waitqueue_head(&md->wait);
|
||||
|
||||
@@ -892,28 +892,40 @@ static void gl9767_disable_ssc_pll(struct pci_dev *pdev)
|
||||
gl9767_vhs_read(pdev);
|
||||
}
|
||||
|
||||
static void gl9767_set_low_power_negotiation(struct pci_dev *pdev, bool enable)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
gl9767_vhs_write(pdev);
|
||||
|
||||
pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
|
||||
if (enable)
|
||||
value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
|
||||
else
|
||||
value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
|
||||
pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
|
||||
|
||||
gl9767_vhs_read(pdev);
|
||||
}
|
||||
|
||||
static void sdhci_gl9767_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||
{
|
||||
struct sdhci_pci_slot *slot = sdhci_priv(host);
|
||||
struct mmc_ios *ios = &host->mmc->ios;
|
||||
struct pci_dev *pdev;
|
||||
u32 value;
|
||||
u16 clk;
|
||||
|
||||
pdev = slot->chip->pdev;
|
||||
host->mmc->actual_clock = 0;
|
||||
|
||||
gl9767_vhs_write(pdev);
|
||||
|
||||
pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
|
||||
value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
|
||||
pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
|
||||
|
||||
gl9767_set_low_power_negotiation(pdev, false);
|
||||
gl9767_disable_ssc_pll(pdev);
|
||||
sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
|
||||
|
||||
if (clock == 0)
|
||||
if (clock == 0) {
|
||||
gl9767_set_low_power_negotiation(pdev, true);
|
||||
return;
|
||||
}
|
||||
|
||||
clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
|
||||
if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
|
||||
@@ -922,12 +934,7 @@ static void sdhci_gl9767_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||
}
|
||||
|
||||
sdhci_enable_clk(host, clk);
|
||||
|
||||
pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
|
||||
value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
|
||||
pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
|
||||
|
||||
gl9767_vhs_read(pdev);
|
||||
gl9767_set_low_power_negotiation(pdev, true);
|
||||
}
|
||||
|
||||
static void gli_set_9767(struct sdhci_host *host)
|
||||
@@ -1061,6 +1068,9 @@ static int gl9767_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
|
||||
sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
|
||||
}
|
||||
|
||||
pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
|
||||
value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
|
||||
pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
|
||||
gl9767_vhs_read(pdev);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -998,6 +998,11 @@ static int amd_pmc_s2d_init(struct amd_pmc_dev *dev)
|
||||
amd_pmc_send_cmd(dev, S2D_PHYS_ADDR_LOW, &phys_addr_low, dev->s2d_msg_id, true);
|
||||
amd_pmc_send_cmd(dev, S2D_PHYS_ADDR_HIGH, &phys_addr_hi, dev->s2d_msg_id, true);
|
||||
|
||||
if (!phys_addr_hi && !phys_addr_low) {
|
||||
dev_err(dev->dev, "STB is not enabled on the system; disable enable_stb or contact system vendor\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
stb_phys_addr = ((u64)phys_addr_hi << 32 | phys_addr_low);
|
||||
|
||||
/* Clear msg_port for other SMU operation */
|
||||
|
||||
@@ -261,6 +261,7 @@ int amd_pmf_set_dram_addr(struct amd_pmf_dev *dev, bool alloc_buffer)
|
||||
dev->mtable_size = sizeof(dev->m_table);
|
||||
break;
|
||||
case PCI_DEVICE_ID_AMD_1AH_M20H_ROOT:
|
||||
case PCI_DEVICE_ID_AMD_1AH_M60H_ROOT:
|
||||
dev->mtable_size = sizeof(dev->m_table_v2);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -86,6 +86,7 @@ static void amd_pmf_get_smu_info(struct amd_pmf_dev *dev, struct ta_pmf_enact_ta
|
||||
ARRAY_SIZE(dev->m_table.avg_core_c0residency), in);
|
||||
break;
|
||||
case PCI_DEVICE_ID_AMD_1AH_M20H_ROOT:
|
||||
case PCI_DEVICE_ID_AMD_1AH_M60H_ROOT:
|
||||
memcpy(&dev->m_table_v2, dev->buf, dev->mtable_size);
|
||||
in->ev_info.socket_power = dev->m_table_v2.apu_power + dev->m_table_v2.dgpu_power;
|
||||
in->ev_info.skin_temperature = dev->m_table_v2.skin_temp;
|
||||
|
||||
@@ -576,6 +576,7 @@ static int __init dell_smbios_init(void)
|
||||
int ret, wmi, smm;
|
||||
|
||||
if (!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Dell System", NULL) &&
|
||||
!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "Alienware", NULL) &&
|
||||
!dmi_find_device(DMI_DEV_TYPE_OEM_STRING, "www.dell.com", NULL)) {
|
||||
pr_err("Unable to run on non-Dell system\n");
|
||||
return -ENODEV;
|
||||
|
||||
@@ -80,6 +80,12 @@ static const struct dmi_system_id dell_wmi_smbios_list[] __initconst = {
|
||||
static const struct key_entry dell_wmi_keymap_type_0000[] = {
|
||||
{ KE_IGNORE, 0x003a, { KEY_CAPSLOCK } },
|
||||
|
||||
/* Meta key lock */
|
||||
{ KE_IGNORE, 0xe000, { KEY_RIGHTMETA } },
|
||||
|
||||
/* Meta key unlock */
|
||||
{ KE_IGNORE, 0xe001, { KEY_RIGHTMETA } },
|
||||
|
||||
/* Key code is followed by brightness level */
|
||||
{ KE_KEY, 0xe005, { KEY_BRIGHTNESSDOWN } },
|
||||
{ KE_KEY, 0xe006, { KEY_BRIGHTNESSUP } },
|
||||
|
||||
@@ -1294,6 +1294,9 @@ static const struct key_entry ideapad_keymap[] = {
|
||||
{ KE_KEY, 0x27 | IDEAPAD_WMI_KEY, { KEY_HELP } },
|
||||
/* Refresh Rate Toggle */
|
||||
{ KE_KEY, 0x0a | IDEAPAD_WMI_KEY, { KEY_REFRESH_RATE_TOGGLE } },
|
||||
/* Specific to some newer models */
|
||||
{ KE_KEY, 0x3e | IDEAPAD_WMI_KEY, { KEY_MICMUTE } },
|
||||
{ KE_KEY, 0x3f | IDEAPAD_WMI_KEY, { KEY_RFKILL } },
|
||||
|
||||
{ KE_END },
|
||||
};
|
||||
|
||||
@@ -7936,6 +7936,7 @@ static u8 fan_control_resume_level;
|
||||
static int fan_watchdog_maxinterval;
|
||||
|
||||
static bool fan_with_ns_addr;
|
||||
static bool ecfw_with_fan_dec_rpm;
|
||||
|
||||
static struct mutex fan_mutex;
|
||||
|
||||
@@ -8682,7 +8683,11 @@ static ssize_t fan_fan1_input_show(struct device *dev,
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
||||
return sysfs_emit(buf, "%u\n", speed);
|
||||
/* Check for fan speeds displayed in hexadecimal */
|
||||
if (!ecfw_with_fan_dec_rpm)
|
||||
return sysfs_emit(buf, "%u\n", speed);
|
||||
else
|
||||
return sysfs_emit(buf, "%x\n", speed);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(fan1_input, S_IRUGO, fan_fan1_input_show, NULL);
|
||||
@@ -8699,7 +8704,11 @@ static ssize_t fan_fan2_input_show(struct device *dev,
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
||||
return sysfs_emit(buf, "%u\n", speed);
|
||||
/* Check for fan speeds displayed in hexadecimal */
|
||||
if (!ecfw_with_fan_dec_rpm)
|
||||
return sysfs_emit(buf, "%u\n", speed);
|
||||
else
|
||||
return sysfs_emit(buf, "%x\n", speed);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(fan2_input, S_IRUGO, fan_fan2_input_show, NULL);
|
||||
@@ -8775,6 +8784,7 @@ static const struct attribute_group fan_driver_attr_group = {
|
||||
#define TPACPI_FAN_2CTL 0x0004 /* selects fan2 control */
|
||||
#define TPACPI_FAN_NOFAN 0x0008 /* no fan available */
|
||||
#define TPACPI_FAN_NS 0x0010 /* For EC with non-Standard register addresses */
|
||||
#define TPACPI_FAN_DECRPM 0x0020 /* For ECFW's with RPM in register as decimal */
|
||||
|
||||
static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
|
||||
TPACPI_QEC_IBM('1', 'Y', TPACPI_FAN_Q1),
|
||||
@@ -8803,6 +8813,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
|
||||
TPACPI_Q_LNV3('R', '1', 'D', TPACPI_FAN_NS), /* 11e Gen5 GL-R */
|
||||
TPACPI_Q_LNV3('R', '0', 'V', TPACPI_FAN_NS), /* 11e Gen5 KL-Y */
|
||||
TPACPI_Q_LNV3('N', '1', 'O', TPACPI_FAN_NOFAN), /* X1 Tablet (2nd gen) */
|
||||
TPACPI_Q_LNV3('R', '0', 'Q', TPACPI_FAN_DECRPM),/* L480 */
|
||||
};
|
||||
|
||||
static int __init fan_init(struct ibm_init_struct *iibm)
|
||||
@@ -8847,6 +8858,13 @@ static int __init fan_init(struct ibm_init_struct *iibm)
|
||||
tp_features.fan_ctrl_status_undef = 1;
|
||||
}
|
||||
|
||||
/* Check for the EC/BIOS with RPM reported in decimal*/
|
||||
if (quirks & TPACPI_FAN_DECRPM) {
|
||||
pr_info("ECFW with fan RPM as decimal in EC register\n");
|
||||
ecfw_with_fan_dec_rpm = 1;
|
||||
tp_features.fan_ctrl_status_undef = 1;
|
||||
}
|
||||
|
||||
if (gfan_handle) {
|
||||
/* 570, 600e/x, 770e, 770x */
|
||||
fan_status_access_mode = TPACPI_FAN_RD_ACPI_GFAN;
|
||||
@@ -9067,7 +9085,11 @@ static int fan_read(struct seq_file *m)
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
seq_printf(m, "speed:\t\t%d\n", speed);
|
||||
/* Check for fan speeds displayed in hexadecimal */
|
||||
if (!ecfw_with_fan_dec_rpm)
|
||||
seq_printf(m, "speed:\t\t%d\n", speed);
|
||||
else
|
||||
seq_printf(m, "speed:\t\t%x\n", speed);
|
||||
|
||||
if (fan_status_access_mode == TPACPI_FAN_RD_TPEC_NS) {
|
||||
/*
|
||||
|
||||
@@ -1440,14 +1440,18 @@ static int qcom_glink_request_intent(struct qcom_glink *glink,
|
||||
goto unlock;
|
||||
|
||||
ret = wait_event_timeout(channel->intent_req_wq,
|
||||
READ_ONCE(channel->intent_req_result) >= 0 &&
|
||||
READ_ONCE(channel->intent_received),
|
||||
READ_ONCE(channel->intent_req_result) == 0 ||
|
||||
(READ_ONCE(channel->intent_req_result) > 0 &&
|
||||
READ_ONCE(channel->intent_received)) ||
|
||||
glink->abort_tx,
|
||||
10 * HZ);
|
||||
if (!ret) {
|
||||
dev_err(glink->dev, "intent request timed out\n");
|
||||
ret = -ETIMEDOUT;
|
||||
} else if (glink->abort_tx) {
|
||||
ret = -ECANCELED;
|
||||
} else {
|
||||
ret = READ_ONCE(channel->intent_req_result) ? 0 : -ECANCELED;
|
||||
ret = READ_ONCE(channel->intent_req_result) ? 0 : -EAGAIN;
|
||||
}
|
||||
|
||||
unlock:
|
||||
|
||||
@@ -139,6 +139,7 @@ struct qcom_llcc_config {
|
||||
int size;
|
||||
bool need_llcc_cfg;
|
||||
bool no_edac;
|
||||
bool irq_configured;
|
||||
};
|
||||
|
||||
struct qcom_sct_config {
|
||||
@@ -718,6 +719,7 @@ static const struct qcom_llcc_config x1e80100_cfg[] = {
|
||||
.need_llcc_cfg = true,
|
||||
.reg_offset = llcc_v2_1_reg_offset,
|
||||
.edac_reg_offset = &llcc_v2_1_edac_reg_offset,
|
||||
.irq_configured = true,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1345,6 +1347,7 @@ static int qcom_llcc_probe(struct platform_device *pdev)
|
||||
drv_data->cfg = llcc_cfg;
|
||||
drv_data->cfg_size = sz;
|
||||
drv_data->edac_reg_offset = cfg->edac_reg_offset;
|
||||
drv_data->ecc_irq_configured = cfg->irq_configured;
|
||||
mutex_init(&drv_data->lock);
|
||||
platform_set_drvdata(pdev, drv_data);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
* Copyright (c) 2022, Linaro Ltd
|
||||
*/
|
||||
#include <linux/auxiliary_bus.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -13,6 +14,8 @@
|
||||
#include <linux/soc/qcom/pmic_glink.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#define PMIC_GLINK_SEND_TIMEOUT (5 * HZ)
|
||||
|
||||
enum {
|
||||
PMIC_GLINK_CLIENT_BATT = 0,
|
||||
PMIC_GLINK_CLIENT_ALTMODE,
|
||||
@@ -112,13 +115,29 @@ EXPORT_SYMBOL_GPL(pmic_glink_client_register);
|
||||
int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len)
|
||||
{
|
||||
struct pmic_glink *pg = client->pg;
|
||||
bool timeout_reached = false;
|
||||
unsigned long start;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&pg->state_lock);
|
||||
if (!pg->ept)
|
||||
if (!pg->ept) {
|
||||
ret = -ECONNRESET;
|
||||
else
|
||||
ret = rpmsg_send(pg->ept, data, len);
|
||||
} else {
|
||||
start = jiffies;
|
||||
for (;;) {
|
||||
ret = rpmsg_send(pg->ept, data, len);
|
||||
if (ret != -EAGAIN)
|
||||
break;
|
||||
|
||||
if (timeout_reached) {
|
||||
ret = -ETIMEDOUT;
|
||||
break;
|
||||
}
|
||||
|
||||
usleep_range(1000, 5000);
|
||||
timeout_reached = time_after(jiffies, start + PMIC_GLINK_SEND_TIMEOUT);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&pg->state_lock);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -786,10 +786,16 @@ static int qcom_socinfo_probe(struct platform_device *pdev)
|
||||
qs->attr.revision = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%u.%u",
|
||||
SOCINFO_MAJOR(le32_to_cpu(info->ver)),
|
||||
SOCINFO_MINOR(le32_to_cpu(info->ver)));
|
||||
if (offsetof(struct socinfo, serial_num) <= item_size)
|
||||
if (!qs->attr.soc_id || !qs->attr.revision)
|
||||
return -ENOMEM;
|
||||
|
||||
if (offsetof(struct socinfo, serial_num) <= item_size) {
|
||||
qs->attr.serial_number = devm_kasprintf(&pdev->dev, GFP_KERNEL,
|
||||
"%u",
|
||||
le32_to_cpu(info->serial_num));
|
||||
if (!qs->attr.serial_number)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
qs->soc_dev = soc_device_register(&qs->attr);
|
||||
if (IS_ERR(qs->soc_dev))
|
||||
|
||||
+1
-2
@@ -181,8 +181,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)
|
||||
#if IS_ENABLED(CONFIG_NFS_LOCALIO)
|
||||
seqlock_init(&clp->cl_boot_lock);
|
||||
ktime_get_real_ts64(&clp->cl_nfssvc_boot);
|
||||
clp->cl_uuid.net = NULL;
|
||||
clp->cl_uuid.dom = NULL;
|
||||
nfs_uuid_init(&clp->cl_uuid);
|
||||
spin_lock_init(&clp->cl_localio_lock);
|
||||
#endif /* CONFIG_NFS_LOCALIO */
|
||||
|
||||
|
||||
+47
-23
@@ -205,12 +205,15 @@ void nfs_set_cache_invalid(struct inode *inode, unsigned long flags)
|
||||
nfs_fscache_invalidate(inode, 0);
|
||||
flags &= ~NFS_INO_REVAL_FORCED;
|
||||
|
||||
nfsi->cache_validity |= flags;
|
||||
flags |= nfsi->cache_validity;
|
||||
if (inode->i_mapping->nrpages == 0)
|
||||
flags &= ~NFS_INO_INVALID_DATA;
|
||||
|
||||
if (inode->i_mapping->nrpages == 0) {
|
||||
nfsi->cache_validity &= ~NFS_INO_INVALID_DATA;
|
||||
nfs_ooo_clear(nfsi);
|
||||
} else if (nfsi->cache_validity & NFS_INO_INVALID_DATA) {
|
||||
/* pairs with nfs_clear_invalid_mapping()'s smp_load_acquire() */
|
||||
smp_store_release(&nfsi->cache_validity, flags);
|
||||
|
||||
if (inode->i_mapping->nrpages == 0 ||
|
||||
nfsi->cache_validity & NFS_INO_INVALID_DATA) {
|
||||
nfs_ooo_clear(nfsi);
|
||||
}
|
||||
trace_nfs_set_cache_invalid(inode, 0);
|
||||
@@ -628,23 +631,35 @@ nfs_fattr_fixup_delegated(struct inode *inode, struct nfs_fattr *fattr)
|
||||
}
|
||||
}
|
||||
|
||||
static void nfs_update_timestamps(struct inode *inode, unsigned int ia_valid)
|
||||
{
|
||||
enum file_time_flags time_flags = 0;
|
||||
unsigned int cache_flags = 0;
|
||||
|
||||
if (ia_valid & ATTR_MTIME) {
|
||||
time_flags |= S_MTIME | S_CTIME;
|
||||
cache_flags |= NFS_INO_INVALID_CTIME | NFS_INO_INVALID_MTIME;
|
||||
}
|
||||
if (ia_valid & ATTR_ATIME) {
|
||||
time_flags |= S_ATIME;
|
||||
cache_flags |= NFS_INO_INVALID_ATIME;
|
||||
}
|
||||
inode_update_timestamps(inode, time_flags);
|
||||
NFS_I(inode)->cache_validity &= ~cache_flags;
|
||||
}
|
||||
|
||||
void nfs_update_delegated_atime(struct inode *inode)
|
||||
{
|
||||
spin_lock(&inode->i_lock);
|
||||
if (nfs_have_delegated_atime(inode)) {
|
||||
inode_update_timestamps(inode, S_ATIME);
|
||||
NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ATIME;
|
||||
}
|
||||
if (nfs_have_delegated_atime(inode))
|
||||
nfs_update_timestamps(inode, ATTR_ATIME);
|
||||
spin_unlock(&inode->i_lock);
|
||||
}
|
||||
|
||||
void nfs_update_delegated_mtime_locked(struct inode *inode)
|
||||
{
|
||||
if (nfs_have_delegated_mtime(inode)) {
|
||||
inode_update_timestamps(inode, S_CTIME | S_MTIME);
|
||||
NFS_I(inode)->cache_validity &= ~(NFS_INO_INVALID_CTIME |
|
||||
NFS_INO_INVALID_MTIME);
|
||||
}
|
||||
if (nfs_have_delegated_mtime(inode))
|
||||
nfs_update_timestamps(inode, ATTR_MTIME);
|
||||
}
|
||||
|
||||
void nfs_update_delegated_mtime(struct inode *inode)
|
||||
@@ -682,15 +697,16 @@ nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
|
||||
attr->ia_valid &= ~ATTR_SIZE;
|
||||
}
|
||||
|
||||
if (nfs_have_delegated_mtime(inode)) {
|
||||
if (attr->ia_valid & ATTR_MTIME) {
|
||||
nfs_update_delegated_mtime(inode);
|
||||
attr->ia_valid &= ~ATTR_MTIME;
|
||||
}
|
||||
if (attr->ia_valid & ATTR_ATIME) {
|
||||
nfs_update_delegated_atime(inode);
|
||||
attr->ia_valid &= ~ATTR_ATIME;
|
||||
}
|
||||
if (nfs_have_delegated_mtime(inode) && attr->ia_valid & ATTR_MTIME) {
|
||||
spin_lock(&inode->i_lock);
|
||||
nfs_update_timestamps(inode, attr->ia_valid);
|
||||
spin_unlock(&inode->i_lock);
|
||||
attr->ia_valid &= ~(ATTR_MTIME | ATTR_ATIME);
|
||||
} else if (nfs_have_delegated_atime(inode) &&
|
||||
attr->ia_valid & ATTR_ATIME &&
|
||||
!(attr->ia_valid & ATTR_MTIME)) {
|
||||
nfs_update_delegated_atime(inode);
|
||||
attr->ia_valid &= ~ATTR_ATIME;
|
||||
}
|
||||
|
||||
/* Optimization: if the end result is no change, don't RPC */
|
||||
@@ -1408,6 +1424,13 @@ int nfs_clear_invalid_mapping(struct address_space *mapping)
|
||||
TASK_KILLABLE|TASK_FREEZABLE_UNSAFE);
|
||||
if (ret)
|
||||
goto out;
|
||||
smp_rmb(); /* pairs with smp_wmb() below */
|
||||
if (test_bit(NFS_INO_INVALIDATING, bitlock))
|
||||
continue;
|
||||
/* pairs with nfs_set_cache_invalid()'s smp_store_release() */
|
||||
if (!(smp_load_acquire(&nfsi->cache_validity) & NFS_INO_INVALID_DATA))
|
||||
goto out;
|
||||
/* Slow-path that double-checks with spinlock held */
|
||||
spin_lock(&inode->i_lock);
|
||||
if (test_bit(NFS_INO_INVALIDATING, bitlock)) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
@@ -1633,6 +1656,7 @@ void nfs_fattr_init(struct nfs_fattr *fattr)
|
||||
fattr->gencount = nfs_inc_attr_generation_counter();
|
||||
fattr->owner_name = NULL;
|
||||
fattr->group_name = NULL;
|
||||
fattr->mdsthreshold = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_fattr_init);
|
||||
|
||||
|
||||
+2
-1
@@ -205,7 +205,8 @@ void nfs_local_probe(struct nfs_client *clp)
|
||||
nfs_local_disable(clp);
|
||||
}
|
||||
|
||||
nfs_uuid_begin(&clp->cl_uuid);
|
||||
if (!nfs_uuid_begin(&clp->cl_uuid))
|
||||
return;
|
||||
if (nfs_server_uuid_is_local(clp))
|
||||
nfs_local_enable(clp);
|
||||
nfs_uuid_end(&clp->cl_uuid);
|
||||
|
||||
@@ -3452,6 +3452,10 @@ static int nfs4_do_setattr(struct inode *inode, const struct cred *cred,
|
||||
adjust_flags |= NFS_INO_INVALID_MODE;
|
||||
if (sattr->ia_valid & (ATTR_UID | ATTR_GID))
|
||||
adjust_flags |= NFS_INO_INVALID_OTHER;
|
||||
if (sattr->ia_valid & ATTR_ATIME)
|
||||
adjust_flags |= NFS_INO_INVALID_ATIME;
|
||||
if (sattr->ia_valid & ATTR_MTIME)
|
||||
adjust_flags |= NFS_INO_INVALID_MTIME;
|
||||
|
||||
do {
|
||||
nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, fattr->label),
|
||||
|
||||
+9
-1
@@ -885,7 +885,15 @@ static int nfs_request_mount(struct fs_context *fc,
|
||||
* Now ask the mount server to map our export path
|
||||
* to a file handle.
|
||||
*/
|
||||
status = nfs_mount(&request, ctx->timeo, ctx->retrans);
|
||||
if ((request.protocol == XPRT_TRANSPORT_UDP) ==
|
||||
!(ctx->flags & NFS_MOUNT_TCP))
|
||||
/*
|
||||
* NFS protocol and mount protocol are both UDP or neither UDP
|
||||
* so timeouts are compatible. Use NFS timeouts for MOUNT
|
||||
*/
|
||||
status = nfs_mount(&request, ctx->timeo, ctx->retrans);
|
||||
else
|
||||
status = nfs_mount(&request, NFS_UNSPEC_TIMEO, NFS_UNSPEC_RETRANS);
|
||||
if (status != 0) {
|
||||
dfprintk(MOUNT, "NFS: unable to mount server %s, error %d\n",
|
||||
request.hostname, status);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/nfslocalio.h>
|
||||
#include <net/netns/generic.h>
|
||||
|
||||
@@ -20,15 +20,27 @@ static DEFINE_SPINLOCK(nfs_uuid_lock);
|
||||
*/
|
||||
static LIST_HEAD(nfs_uuids);
|
||||
|
||||
void nfs_uuid_begin(nfs_uuid_t *nfs_uuid)
|
||||
void nfs_uuid_init(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
nfs_uuid->net = NULL;
|
||||
nfs_uuid->dom = NULL;
|
||||
uuid_gen(&nfs_uuid->uuid);
|
||||
INIT_LIST_HEAD(&nfs_uuid->list);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_uuid_init);
|
||||
|
||||
bool nfs_uuid_begin(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
spin_lock(&nfs_uuid_lock);
|
||||
list_add_tail_rcu(&nfs_uuid->list, &nfs_uuids);
|
||||
/* Is this nfs_uuid already in use? */
|
||||
if (!list_empty(&nfs_uuid->list)) {
|
||||
spin_unlock(&nfs_uuid_lock);
|
||||
return false;
|
||||
}
|
||||
uuid_gen(&nfs_uuid->uuid);
|
||||
list_add_tail(&nfs_uuid->list, &nfs_uuids);
|
||||
spin_unlock(&nfs_uuid_lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_uuid_begin);
|
||||
|
||||
@@ -36,7 +48,8 @@ void nfs_uuid_end(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
if (nfs_uuid->net == NULL) {
|
||||
spin_lock(&nfs_uuid_lock);
|
||||
list_del_init(&nfs_uuid->list);
|
||||
if (nfs_uuid->net == NULL)
|
||||
list_del_init(&nfs_uuid->list);
|
||||
spin_unlock(&nfs_uuid_lock);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-3
@@ -392,6 +392,9 @@ static int tracefs_reconfigure(struct fs_context *fc)
|
||||
struct tracefs_fs_info *sb_opts = sb->s_fs_info;
|
||||
struct tracefs_fs_info *new_opts = fc->s_fs_info;
|
||||
|
||||
if (!new_opts)
|
||||
return 0;
|
||||
|
||||
sync_filesystem(sb);
|
||||
/* structure copy of new mount options to sb */
|
||||
*sb_opts = *new_opts;
|
||||
@@ -478,14 +481,17 @@ static int tracefs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
sb->s_op = &tracefs_super_operations;
|
||||
sb->s_d_op = &tracefs_dentry_operations;
|
||||
|
||||
tracefs_apply_options(sb, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tracefs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return get_tree_single(fc, tracefs_fill_super);
|
||||
int err = get_tree_single(fc, tracefs_fill_super);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
return tracefs_reconfigure(fc);
|
||||
}
|
||||
|
||||
static void tracefs_free_fc(struct fs_context *fc)
|
||||
|
||||
@@ -32,7 +32,8 @@ typedef struct {
|
||||
struct auth_domain *dom; /* auth_domain for localio */
|
||||
} nfs_uuid_t;
|
||||
|
||||
void nfs_uuid_begin(nfs_uuid_t *);
|
||||
void nfs_uuid_init(nfs_uuid_t *);
|
||||
bool nfs_uuid_begin(nfs_uuid_t *);
|
||||
void nfs_uuid_end(nfs_uuid_t *);
|
||||
void nfs_uuid_is_local(const uuid_t *, struct list_head *,
|
||||
struct net *, struct auth_domain *, struct module *);
|
||||
|
||||
@@ -125,6 +125,7 @@ struct llcc_edac_reg_offset {
|
||||
* @num_banks: Number of llcc banks
|
||||
* @bitmap: Bit map to track the active slice ids
|
||||
* @ecc_irq: interrupt for llcc cache error detection and reporting
|
||||
* @ecc_irq_configured: 'True' if firmware has already configured the irq propagation
|
||||
* @version: Indicates the LLCC version
|
||||
*/
|
||||
struct llcc_drv_data {
|
||||
@@ -139,6 +140,7 @@ struct llcc_drv_data {
|
||||
u32 num_banks;
|
||||
unsigned long *bitmap;
|
||||
int ecc_irq;
|
||||
bool ecc_irq_configured;
|
||||
u32 version;
|
||||
};
|
||||
|
||||
|
||||
@@ -5499,6 +5499,10 @@ static const struct file_operations tracing_iter_fops = {
|
||||
|
||||
static const char readme_msg[] =
|
||||
"tracing mini-HOWTO:\n\n"
|
||||
"By default tracefs removes all OTH file permission bits.\n"
|
||||
"When mounting tracefs an optional group id can be specified\n"
|
||||
"which adds the group to every directory and file in tracefs:\n\n"
|
||||
"\t e.g. mount -t tracefs [-o [gid=<gid>]] nodev /sys/kernel/tracing\n\n"
|
||||
"# echo 0 > tracing_on : quick way to disable tracing\n"
|
||||
"# echo 1 > tracing_on : quick way to re-enable tracing\n\n"
|
||||
" Important files:\n"
|
||||
|
||||
@@ -2459,6 +2459,7 @@ static void xs_tcp_setup_socket(struct work_struct *work)
|
||||
case -EHOSTUNREACH:
|
||||
case -EADDRINUSE:
|
||||
case -ENOBUFS:
|
||||
case -ENOTCONN:
|
||||
break;
|
||||
default:
|
||||
printk("%s: connect returned unhandled error %d\n",
|
||||
|
||||
@@ -772,8 +772,11 @@ ascend_to_node:
|
||||
for (; slot < ASSOC_ARRAY_FAN_OUT; slot++) {
|
||||
ptr = READ_ONCE(node->slots[slot]);
|
||||
|
||||
if (assoc_array_ptr_is_meta(ptr) && node->back_pointer)
|
||||
goto descend_to_node;
|
||||
if (assoc_array_ptr_is_meta(ptr)) {
|
||||
if (node->back_pointer ||
|
||||
assoc_array_ptr_is_shortcut(ptr))
|
||||
goto descend_to_node;
|
||||
}
|
||||
|
||||
if (!keyring_ptr_is_keyring(ptr))
|
||||
continue;
|
||||
|
||||
@@ -133,6 +133,7 @@ static int do_aead_crypto(u8 *in, u8 *out, size_t len, u8 *key, u8 *nonce,
|
||||
struct scatterlist src_sg, dst_sg;
|
||||
struct crypto_aead *aead;
|
||||
int ret;
|
||||
DECLARE_CRYPTO_WAIT(wait);
|
||||
|
||||
aead = crypto_alloc_aead("gcm(aes)", 0, CRYPTO_ALG_ASYNC);
|
||||
if (IS_ERR(aead)) {
|
||||
@@ -163,8 +164,8 @@ static int do_aead_crypto(u8 *in, u8 *out, size_t len, u8 *key, u8 *nonce,
|
||||
}
|
||||
|
||||
aead_request_set_crypt(aead_req, &src_sg, &dst_sg, len, nonce);
|
||||
aead_request_set_callback(aead_req, CRYPTO_TFM_REQ_MAY_SLEEP, NULL,
|
||||
NULL);
|
||||
aead_request_set_callback(aead_req, CRYPTO_TFM_REQ_MAY_SLEEP,
|
||||
crypto_req_done, &wait);
|
||||
aead_request_set_ad(aead_req, 0);
|
||||
|
||||
if (crypto_aead_setkey(aead, key, AES_KEYSIZE_128)) {
|
||||
@@ -174,9 +175,9 @@ static int do_aead_crypto(u8 *in, u8 *out, size_t len, u8 *key, u8 *nonce,
|
||||
}
|
||||
|
||||
if (do_encrypt)
|
||||
ret = crypto_aead_encrypt(aead_req);
|
||||
ret = crypto_wait_req(crypto_aead_encrypt(aead_req), &wait);
|
||||
else
|
||||
ret = crypto_aead_decrypt(aead_req);
|
||||
ret = crypto_wait_req(crypto_aead_decrypt(aead_req), &wait);
|
||||
|
||||
free_req:
|
||||
aead_request_free(aead_req);
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Test tracefs GID mount option
|
||||
# requires: "[gid=<gid>]":README
|
||||
|
||||
fail() {
|
||||
local msg="$1"
|
||||
|
||||
echo "FAILED: $msg"
|
||||
exit_fail
|
||||
}
|
||||
|
||||
find_alternate_gid() {
|
||||
local original_gid="$1"
|
||||
tac /etc/group | grep -v ":$original_gid:" | head -1 | cut -d: -f3
|
||||
}
|
||||
|
||||
mount_tracefs_with_options() {
|
||||
local mount_point="$1"
|
||||
local options="$2"
|
||||
|
||||
mount -t tracefs -o "$options" nodev "$mount_point"
|
||||
|
||||
setup
|
||||
}
|
||||
|
||||
unmount_tracefs() {
|
||||
local mount_point="$1"
|
||||
|
||||
# Need to make sure the mount isn't busy so that we can umount it
|
||||
(cd $mount_point; finish_ftrace;)
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
create_instance() {
|
||||
local mount_point="$1"
|
||||
local instance="$mount_point/instances/$(mktemp -u test-XXXXXX)"
|
||||
|
||||
mkdir "$instance"
|
||||
echo "$instance"
|
||||
}
|
||||
|
||||
remove_instance() {
|
||||
local instance="$1"
|
||||
|
||||
rmdir "$instance"
|
||||
}
|
||||
|
||||
check_gid() {
|
||||
local mount_point="$1"
|
||||
local expected_gid="$2"
|
||||
|
||||
echo "Checking permission group ..."
|
||||
|
||||
cd "$mount_point"
|
||||
|
||||
for file in "." "events" "events/sched" "events/sched/sched_switch" "events/sched/sched_switch/enable"; do
|
||||
local gid=`stat -c "%g" $file`
|
||||
if [ "$gid" -ne "$expected_gid" ]; then
|
||||
cd - # Return to the previous working directory (tracefs root)
|
||||
fail "$(realpath $file): Expected group $expected_gid; Got group $gid"
|
||||
fi
|
||||
done
|
||||
|
||||
cd - # Return to the previous working directory (tracefs root)
|
||||
}
|
||||
|
||||
test_gid_mount_option() {
|
||||
local mount_point=$(get_mount_point)
|
||||
local mount_options=$(get_mnt_options "$mount_point")
|
||||
local original_group=$(stat -c "%g" .)
|
||||
local other_group=$(find_alternate_gid "$original_group")
|
||||
|
||||
# Set up mount options with new GID for testing
|
||||
local new_options=`echo "$mount_options" | sed -e "s/gid=[0-9]*/gid=$other_group/"`
|
||||
if [ "$new_options" = "$mount_options" ]; then
|
||||
new_options="$mount_options,gid=$other_group"
|
||||
mount_options="$mount_options,gid=$original_group"
|
||||
fi
|
||||
|
||||
# Unmount existing tracefs instance and mount with new GID
|
||||
unmount_tracefs "$mount_point"
|
||||
mount_tracefs_with_options "$mount_point" "$new_options"
|
||||
|
||||
check_gid "$mount_point" "$other_group"
|
||||
|
||||
# Check that files created after the mount inherit the GID
|
||||
local instance=$(create_instance "$mount_point")
|
||||
check_gid "$instance" "$other_group"
|
||||
remove_instance "$instance"
|
||||
|
||||
# Unmount and remount with the original GID
|
||||
unmount_tracefs "$mount_point"
|
||||
mount_tracefs_with_options "$mount_point" "$mount_options"
|
||||
check_gid "$mount_point" "$original_group"
|
||||
}
|
||||
|
||||
test_gid_mount_option
|
||||
|
||||
exit 0
|
||||
@@ -1,24 +1,14 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: Test file and directory ownership changes for eventfs
|
||||
# requires: "[gid=<gid>]":README
|
||||
|
||||
original_group=`stat -c "%g" .`
|
||||
original_owner=`stat -c "%u" .`
|
||||
|
||||
mount_point=`stat -c '%m' .`
|
||||
local mount_point=$(get_mount_point)
|
||||
|
||||
# If stat -c '%m' does not work (e.g. busybox) or failed, try to use the
|
||||
# current working directory (which should be a tracefs) as the mount point.
|
||||
if [ ! -d "$mount_point" ]; then
|
||||
if mount | grep -qw $PWD ; then
|
||||
mount_point=$PWD
|
||||
else
|
||||
# If PWD doesn't work, that is an environmental problem.
|
||||
exit_unresolved
|
||||
fi
|
||||
fi
|
||||
|
||||
mount_options=`mount | grep "$mount_point" | sed -e 's/.*(\(.*\)).*/\1/'`
|
||||
mount_options=$(get_mnt_options "$mount_point")
|
||||
|
||||
# find another owner and group that is not the original
|
||||
other_group=`tac /etc/group | grep -v ":$original_group:" | head -1 | cut -d: -f3`
|
||||
|
||||
@@ -193,3 +193,28 @@ ftrace_errlog_check() { # err-prefix command-with-error-pos-by-^ command-file
|
||||
# " Command: " and "^\n" => 13
|
||||
test $(expr 13 + $pos) -eq $N
|
||||
}
|
||||
|
||||
# Helper to get the tracefs mount point
|
||||
get_mount_point() {
|
||||
local mount_point=`stat -c '%m' .`
|
||||
|
||||
# If stat -c '%m' does not work (e.g. busybox) or failed, try to use the
|
||||
# current working directory (which should be a tracefs) as the mount point.
|
||||
if [ ! -d "$mount_point" ]; then
|
||||
if mount | grep -qw "$PWD"; then
|
||||
mount_point=$PWD
|
||||
else
|
||||
# If PWD doesn't work, that is an environmental problem.
|
||||
exit_unresolved
|
||||
fi
|
||||
fi
|
||||
echo "$mount_point"
|
||||
}
|
||||
|
||||
# Helper function to retrieve mount options for a given mount point
|
||||
get_mnt_options() {
|
||||
local mnt_point="$1"
|
||||
local opts=$(mount | grep -m1 "$mnt_point" | sed -e 's/.*(\(.*\)).*/\1/')
|
||||
|
||||
echo "$opts"
|
||||
}
|
||||
Reference in New Issue
Block a user