mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-04 20:57:45 -04:00
Merge tag 'asoc-v6.20' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Updates for v7.0 This release is almost all abut driers, there's very little core work here, although some of that driver work is in more generic areas like SDCA and SOF: - Generic SDCA support for reporting jack events. - Continuing platform support, cleanup and feature improements for the AMD, Intel, Qualcomm and SOF code. - Platform description improvements for the Cirrus drivers. - Support for NXP i.MX952, Realtek RT1320 and RT5575, and Sophogo CV1800B. We also pulled in one small SPI API update and some more substantial regmap work (cache description improvements) for use in drivers.
This commit is contained in:
4
.mailmap
4
.mailmap
@@ -12,6 +12,7 @@
|
||||
#
|
||||
Aaron Durbin <adurbin@google.com>
|
||||
Abel Vesa <abelvesa@kernel.org> <abel.vesa@nxp.com>
|
||||
Abel Vesa <abelvesa@kernel.org> <abel.vesa@linaro.org>
|
||||
Abel Vesa <abelvesa@kernel.org> <abelvesa@gmail.com>
|
||||
Abhijeet Dharmapurikar <quic_adharmap@quicinc.com> <adharmap@codeaurora.org>
|
||||
Abhinav Kumar <quic_abhinavk@quicinc.com> <abhinavk@codeaurora.org>
|
||||
@@ -850,6 +851,7 @@ Valentin Schneider <vschneid@redhat.com> <valentin.schneider@arm.com>
|
||||
Veera Sundaram Sankaran <quic_veeras@quicinc.com> <veeras@codeaurora.org>
|
||||
Veerabhadrarao Badiganti <quic_vbadigan@quicinc.com> <vbadigan@codeaurora.org>
|
||||
Venkateswara Naralasetty <quic_vnaralas@quicinc.com> <vnaralas@codeaurora.org>
|
||||
Viacheslav Bocharov <v@baodeep.com> <adeep@lexina.in>
|
||||
Vikash Garodia <vikash.garodia@oss.qualcomm.com> <vgarodia@codeaurora.org>
|
||||
Vikash Garodia <vikash.garodia@oss.qualcomm.com> <quic_vgarodia@quicinc.com>
|
||||
Vincent Mailhol <mailhol@kernel.org> <mailhol.vincent@wanadoo.fr>
|
||||
@@ -878,6 +880,8 @@ Wolfram Sang <wsa@kernel.org> <wsa@the-dreams.de>
|
||||
Yakir Yang <kuankuan.y@gmail.com> <ykk@rock-chips.com>
|
||||
Yanteng Si <si.yanteng@linux.dev> <siyanteng@loongson.cn>
|
||||
Ying Huang <huang.ying.caritas@gmail.com> <ying.huang@intel.com>
|
||||
Yixun Lan <dlan@kernel.org> <dlan@gentoo.org>
|
||||
Yixun Lan <dlan@kernel.org> <yixun.lan@amlogic.com>
|
||||
Yosry Ahmed <yosry.ahmed@linux.dev> <yosryahmed@google.com>
|
||||
Yu-Chun Lin <eleanor.lin@realtek.com> <eleanor15x@gmail.com>
|
||||
Yusuke Goda <goda.yusuke@renesas.com>
|
||||
|
||||
4
CREDITS
4
CREDITS
@@ -2231,6 +2231,10 @@ S: Markham, Ontario
|
||||
S: L3R 8B2
|
||||
S: Canada
|
||||
|
||||
N: Krzysztof Kozlowski
|
||||
E: krzk@kernel.org
|
||||
D: NFC network subsystem and drivers maintainer
|
||||
|
||||
N: Christian Krafft
|
||||
D: PowerPC Cell support
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ information.
|
||||
|
||||
Manual fan control on the other hand, is not exposed directly by the AWCC
|
||||
interface. Instead it let's us control a fan `boost` value. This `boost` value
|
||||
has the following aproximate behavior over the fan pwm:
|
||||
has the following approximate behavior over the fan pwm:
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -231,6 +231,8 @@ eventually gets pushed out to disk. This tunable is used to define when dirty
|
||||
inode is old enough to be eligible for writeback by the kernel flusher threads.
|
||||
And, it is also used as the interval to wakeup dirtytime_writeback thread.
|
||||
|
||||
Setting this to zero disables periodic dirtytime writeback.
|
||||
|
||||
|
||||
dirty_writeback_centisecs
|
||||
=========================
|
||||
@@ -494,6 +496,10 @@ memory allocations.
|
||||
|
||||
The default value depends on CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT.
|
||||
|
||||
When CONFIG_MEM_ALLOC_PROFILING_DEBUG=y, this control is read-only to avoid
|
||||
warnings produced by allocations made while profiling is disabled and freed
|
||||
when it's enabled.
|
||||
|
||||
|
||||
memory_failure_early_kill
|
||||
=========================
|
||||
|
||||
@@ -7,7 +7,9 @@ ISA string ordering in /proc/cpuinfo
|
||||
------------------------------------
|
||||
|
||||
The canonical order of ISA extension names in the ISA string is defined in
|
||||
chapter 27 of the unprivileged specification.
|
||||
Chapter 27 of the RISC-V Instruction Set Manual Volume I Unprivileged ISA
|
||||
(Document Version 20191213).
|
||||
|
||||
The specification uses vague wording, such as should, when it comes to ordering,
|
||||
so for our purposes the following rules apply:
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ set of mailbox registers.
|
||||
|
||||
More details on the interface can be found in chapter
|
||||
"7 Host System Management Port (HSMP)" of the family/model PPR
|
||||
Eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip
|
||||
Eg: https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50
|
||||
|
||||
|
||||
HSMP interface is supported on EPYC line of server CPUs and MI300A (APU).
|
||||
@@ -185,7 +185,7 @@ what happened. The transaction returns 0 on success.
|
||||
|
||||
More details on the interface and message definitions can be found in chapter
|
||||
"7 Host System Management Port (HSMP)" of the respective family/model PPR
|
||||
eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip
|
||||
eg: https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50
|
||||
|
||||
User space C-APIs are made available by linking against the esmi library,
|
||||
which is provided by the E-SMS project https://www.amd.com/en/developer/e-sms.html.
|
||||
|
||||
@@ -11,7 +11,7 @@ maintainers:
|
||||
- Jitao shi <jitao.shi@mediatek.com>
|
||||
|
||||
description: |
|
||||
MediaTek DP and eDP are different hardwares and there are some features
|
||||
MediaTek DP and eDP are different hardware and there are some features
|
||||
which are not supported for eDP. For example, audio is not supported for
|
||||
eDP. Therefore, we need to use two different compatibles to describe them.
|
||||
In addition, We just need to enable the power domain of DP, so the clock
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
Android Goldfish Audio
|
||||
|
||||
Android goldfish audio device generated by android emulator.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should contain "google,goldfish-audio" to match emulator
|
||||
- reg : <registers mapping>
|
||||
- interrupts : <interrupt mapping>
|
||||
|
||||
Example:
|
||||
|
||||
goldfish_audio@9030000 {
|
||||
compatible = "google,goldfish-audio";
|
||||
reg = <0x9030000 0x100>;
|
||||
interrupts = <0x4>;
|
||||
};
|
||||
@@ -74,6 +74,37 @@ allOf:
|
||||
- description: aggre UFS CARD AXI clock
|
||||
- description: RPMH CC IPA clock
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sa8775p-config-noc
|
||||
- qcom,sa8775p-dc-noc
|
||||
- qcom,sa8775p-gem-noc
|
||||
- qcom,sa8775p-gpdsp-anoc
|
||||
- qcom,sa8775p-lpass-ag-noc
|
||||
- qcom,sa8775p-mmss-noc
|
||||
- qcom,sa8775p-nspa-noc
|
||||
- qcom,sa8775p-nspb-noc
|
||||
- qcom,sa8775p-pcie-anoc
|
||||
- qcom,sa8775p-system-noc
|
||||
then:
|
||||
properties:
|
||||
clocks: false
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sa8775p-clk-virt
|
||||
- qcom,sa8775p-mc-virt
|
||||
then:
|
||||
properties:
|
||||
reg: false
|
||||
clocks: false
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
@@ -88,7 +88,7 @@ patternProperties:
|
||||
pcie1_clkreq, pcie1_wakeup, pmic0, pmic1, ptp, ptp_clk,
|
||||
ptp_trig, pwm0, pwm1, pwm2, pwm3, rgmii, sdio0, sdio_sb, smi,
|
||||
spi_cs1, spi_cs2, spi_cs3, spi_quad, uart1, uart2,
|
||||
usb2_drvvbus1, usb32_drvvbus ]
|
||||
usb2_drvvbus1, usb32_drvvbus0 ]
|
||||
|
||||
function:
|
||||
enum: [ drvbus, emmc, gpio, i2c, jtag, led, mii, mii_err, onewire,
|
||||
|
||||
@@ -15,12 +15,15 @@ description:
|
||||
sound quallity, which is a new high efficiency, low
|
||||
noise, constant large volume, 6th Smart K audio amplifier.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: awinic,aw87390
|
||||
oneOf:
|
||||
- enum:
|
||||
- awinic,aw87390
|
||||
- items:
|
||||
- enum:
|
||||
- anbernic,rgds-amp
|
||||
- const: awinic,aw87391
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -40,10 +43,31 @@ required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#sound-dai-cells"
|
||||
- awinic,audio-channel
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- awinic,aw87390
|
||||
then:
|
||||
required:
|
||||
- awinic,audio-channel
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- anbernic,rgds-amp
|
||||
then:
|
||||
properties:
|
||||
vdd-supply: true
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
|
||||
@@ -33,6 +33,8 @@ properties:
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
dvdd-supply: true
|
||||
|
||||
awinic,audio-channel:
|
||||
description:
|
||||
It is used to distinguish multiple PA devices, so that different
|
||||
@@ -65,6 +67,17 @@ allOf:
|
||||
then:
|
||||
properties:
|
||||
reset-gpios: false
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: awinic,aw88261
|
||||
then:
|
||||
required:
|
||||
- dvdd-supply
|
||||
else:
|
||||
properties:
|
||||
dvdd-supply: false
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
|
||||
@@ -40,11 +40,33 @@ properties:
|
||||
tdm-slots:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
number of channels over one serializer
|
||||
the property is ignored in DIT mode
|
||||
Number of channels over one serializer. This property
|
||||
specifies the TX playback TDM slot count, along with default RX slot count
|
||||
if tdm-slots-rx is not specified.
|
||||
The property is ignored in DIT mode.
|
||||
minimum: 2
|
||||
maximum: 32
|
||||
|
||||
tdm-slots-rx:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
Number of RX capture channels over one serializer. If specified,
|
||||
allows independent RX TDM slot count separate from TX. Requires
|
||||
ti,async-mode to be enabled for independent TX/RX clock rates.
|
||||
The property is ignored in DIT mode.
|
||||
minimum: 2
|
||||
maximum: 32
|
||||
|
||||
ti,async-mode:
|
||||
description:
|
||||
Specify to allow independent TX & RX clocking,
|
||||
to enable audio playback & record with different sampling rate,
|
||||
and different number of bits per frame.
|
||||
if property is omitted, TX and RX will share same bit clock and frame clock signals,
|
||||
thus RX need to use same bits per frame and sampling rate as TX in synchronous mode.
|
||||
the property is ignored in DIT mode (as DIT is TX-only)
|
||||
type: boolean
|
||||
|
||||
serial-dir:
|
||||
description:
|
||||
A list of serializer configuration
|
||||
@@ -125,7 +147,21 @@ properties:
|
||||
|
||||
auxclk-fs-ratio:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: ratio of AUCLK and FS rate if applicable
|
||||
description:
|
||||
Ratio of AUCLK and FS rate if applicable. This property specifies
|
||||
the TX ratio, along with default RX ratio if auxclk-fs-ratio-rx
|
||||
is not specified.
|
||||
When not specified, the inputted system clock frequency via set_sysclk
|
||||
callback by the machine driver is used for divider calculation.
|
||||
|
||||
auxclk-fs-ratio-rx:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
Ratio of AUCLK and FS rate for RX. If specified, allows
|
||||
for a different RX ratio. Requires ti,async-mode to be
|
||||
enabled when the ratio differs from auxclk-fs-ratio.
|
||||
When not specified, it defaults to the value of auxclk-fs-ratio.
|
||||
The property is ignored in DIT mode.
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
@@ -170,14 +206,38 @@ allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
- if:
|
||||
properties:
|
||||
opmode:
|
||||
op-mode:
|
||||
enum:
|
||||
- 0
|
||||
|
||||
then:
|
||||
required:
|
||||
- tdm-slots
|
||||
|
||||
- if:
|
||||
properties:
|
||||
op-mode:
|
||||
const: 1
|
||||
then:
|
||||
properties:
|
||||
tdm-slots: false
|
||||
tdm-slots-rx: false
|
||||
ti,async-mode: false
|
||||
auxclk-fs-ratio-rx: false
|
||||
|
||||
- if:
|
||||
required:
|
||||
- tdm-slots-rx
|
||||
then:
|
||||
required:
|
||||
- ti,async-mode
|
||||
|
||||
- if:
|
||||
required:
|
||||
- auxclk-fs-ratio-rx
|
||||
then:
|
||||
required:
|
||||
- ti,async-mode
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
@@ -190,6 +250,7 @@ examples:
|
||||
interrupt-names = "tx", "rx";
|
||||
op-mode = <0>; /* MCASP_IIS_MODE */
|
||||
tdm-slots = <2>;
|
||||
ti,async-mode;
|
||||
dmas = <&main_udmap 0xc400>, <&main_udmap 0x4400>;
|
||||
dma-names = "tx", "rx";
|
||||
serial-dir = <
|
||||
|
||||
@@ -30,10 +30,20 @@ properties:
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
vdda-supply:
|
||||
description:
|
||||
Analogue power supply.
|
||||
|
||||
vddd-supply:
|
||||
description:
|
||||
Interface power supply.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#sound-dai-cells"
|
||||
- vddd-supply
|
||||
- vdda-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
@@ -46,5 +56,7 @@ examples:
|
||||
compatible = "everest,es8389";
|
||||
reg = <0x10>;
|
||||
#sound-dai-cells = <0>;
|
||||
vddd-supply = <&vdd3v3>;
|
||||
vdda-supply = <&vdd3v3>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -34,7 +34,9 @@ description: |
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: fsl,imx8qm-audmix
|
||||
enum:
|
||||
- fsl,imx8qm-audmix
|
||||
- fsl,imx952-audmix
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -80,7 +82,17 @@ required:
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- power-domains
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- fsl,imx8qm-audmix
|
||||
then:
|
||||
required:
|
||||
- power-domains
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ properties:
|
||||
- fsl,imx53-asrc
|
||||
- fsl,imx8qm-asrc
|
||||
- fsl,imx8qxp-asrc
|
||||
- fsl,imx952-asrc
|
||||
- items:
|
||||
- enum:
|
||||
- fsl,imx6sx-asrc
|
||||
|
||||
@@ -63,6 +63,16 @@ required:
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- fsl,imx6sx-mqs
|
||||
- fsl,imx93-mqs
|
||||
then:
|
||||
required:
|
||||
- gpr
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
@@ -91,8 +101,6 @@ allOf:
|
||||
clock-names:
|
||||
items:
|
||||
- const: mclk
|
||||
required:
|
||||
- gpr
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
|
||||
@@ -22,14 +22,20 @@ allOf:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- fsl,imx7ulp-rpmsg-audio
|
||||
- fsl,imx8mn-rpmsg-audio
|
||||
- fsl,imx8mm-rpmsg-audio
|
||||
- fsl,imx8mp-rpmsg-audio
|
||||
- fsl,imx8ulp-rpmsg-audio
|
||||
- fsl,imx93-rpmsg-audio
|
||||
- fsl,imx95-rpmsg-audio
|
||||
oneOf:
|
||||
- enum:
|
||||
- fsl,imx7ulp-rpmsg-audio
|
||||
- fsl,imx8mn-rpmsg-audio
|
||||
- fsl,imx8mm-rpmsg-audio
|
||||
- fsl,imx8mp-rpmsg-audio
|
||||
- fsl,imx8ulp-rpmsg-audio
|
||||
- fsl,imx93-rpmsg-audio
|
||||
- fsl,imx95-rpmsg-audio
|
||||
- items:
|
||||
- enum:
|
||||
- fsl,imx94-rpmsg-audio
|
||||
- fsl,imx952-rpmsg-audio
|
||||
- const: fsl,imx95-rpmsg-audio
|
||||
|
||||
clocks:
|
||||
items:
|
||||
|
||||
@@ -133,6 +133,13 @@ properties:
|
||||
- description: dataline mask for 'rx'
|
||||
- description: dataline mask for 'tx'
|
||||
|
||||
fsl,sai-amix-mode:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
description:
|
||||
The audmix module is bypassed from hardware or not.
|
||||
enum: [none, bypass, audmix]
|
||||
default: none
|
||||
|
||||
fsl,sai-mclk-direction-output:
|
||||
description: SAI will output the SAI MCLK clock.
|
||||
type: boolean
|
||||
@@ -180,6 +187,15 @@ allOf:
|
||||
properties:
|
||||
fsl,sai-synchronous-rx: false
|
||||
|
||||
- if:
|
||||
required:
|
||||
- fsl,sai-amix-mode
|
||||
then:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: fsl,imx952-sai
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/google,goldfish-audio.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Android Goldfish Audio
|
||||
|
||||
maintainers:
|
||||
- Kuan-Wei Chiu <visitorckw@gmail.com>
|
||||
|
||||
description:
|
||||
Android goldfish audio device generated by Android emulator.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: google,goldfish-audio
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
sound@9030000 {
|
||||
compatible = "google,goldfish-audio";
|
||||
reg = <0x9030000 0x100>;
|
||||
interrupts = <4>;
|
||||
};
|
||||
@@ -47,16 +47,118 @@ properties:
|
||||
- description: AFE clock
|
||||
- description: ADDA DAC clock
|
||||
- description: ADDA DAC pre-distortion clock
|
||||
- description: audio infra sys clock
|
||||
- description: audio infra 26M clock
|
||||
- description: ADDA ADC clock
|
||||
- description: ADDA6 ADC clock
|
||||
- description: Audio low-jitter 22.5792m clock
|
||||
- description: Audio low-jitter 24.576m clock
|
||||
- description: Audio PLL1 tuner clock
|
||||
- description: Audio PLL2 tuner clock
|
||||
- description: Audio Time-Division Multiplexing interface clock
|
||||
- description: ADDA ADC Sine Generator clock
|
||||
- description: audio Non-LE clock
|
||||
- description: Audio DAC High-Resolution clock
|
||||
- description: Audio High-Resolution ADC clock
|
||||
- description: Audio High-Resolution ADC SineGen clock
|
||||
- description: Audio ADDA6 High-Resolution ADC clock
|
||||
- description: Tertiary ADDA DAC clock
|
||||
- description: Tertiary ADDA DAC pre-distortion clock
|
||||
- description: Tertiary ADDA DAC Sine Generator clock
|
||||
- description: Tertiary ADDA DAC High-Resolution clock
|
||||
- description: Audio infra sys clock
|
||||
- description: Audio infra 26M clock
|
||||
- description: Mux for audio clock
|
||||
- description: Mux for audio internal bus clock
|
||||
- description: Mux main divider by 4
|
||||
- description: Primary audio mux
|
||||
- description: Primary audio PLL
|
||||
- description: Secondary audio mux
|
||||
- description: Secondary audio PLL
|
||||
- description: Primary audio en-generator clock
|
||||
- description: Primary PLL divider by 4 for IEC
|
||||
- description: Secondary audio en-generator clock
|
||||
- description: Secondary PLL divider by 4 for IEC
|
||||
- description: Mux selector for I2S port 0
|
||||
- description: Mux selector for I2S port 1
|
||||
- description: Mux selector for I2S port 2
|
||||
- description: Mux selector for I2S port 3
|
||||
- description: Mux selector for I2S port 4
|
||||
- description: Mux selector for I2S port 5
|
||||
- description: Mux selector for I2S port 6
|
||||
- description: Mux selector for I2S port 7
|
||||
- description: Mux selector for I2S port 8
|
||||
- description: Mux selector for I2S port 9
|
||||
- description: APLL1 and APLL2 divider for I2S port 0
|
||||
- description: APLL1 and APLL2 divider for I2S port 1
|
||||
- description: APLL1 and APLL2 divider for I2S port 2
|
||||
- description: APLL1 and APLL2 divider for I2S port 3
|
||||
- description: APLL1 and APLL2 divider for I2S port 4
|
||||
- description: APLL1 and APLL2 divider for IEC
|
||||
- description: APLL1 and APLL2 divider for I2S port 5
|
||||
- description: APLL1 and APLL2 divider for I2S port 6
|
||||
- description: APLL1 and APLL2 divider for I2S port 7
|
||||
- description: APLL1 and APLL2 divider for I2S port 8
|
||||
- description: APLL1 and APLL2 divider for I2S port 9
|
||||
- description: Top mux for audio subsystem
|
||||
- description: 26MHz clock for audio subsystem
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: aud_afe_clk
|
||||
- const: aud_dac_clk
|
||||
- const: aud_dac_predis_clk
|
||||
- const: aud_adc_clk
|
||||
- const: aud_adda6_adc_clk
|
||||
- const: aud_apll22m_clk
|
||||
- const: aud_apll24m_clk
|
||||
- const: aud_apll1_tuner_clk
|
||||
- const: aud_apll2_tuner_clk
|
||||
- const: aud_tdm_clk
|
||||
- const: aud_tml_clk
|
||||
- const: aud_nle
|
||||
- const: aud_dac_hires_clk
|
||||
- const: aud_adc_hires_clk
|
||||
- const: aud_adc_hires_tml
|
||||
- const: aud_adda6_adc_hires_clk
|
||||
- const: aud_3rd_dac_clk
|
||||
- const: aud_3rd_dac_predis_clk
|
||||
- const: aud_3rd_dac_tml
|
||||
- const: aud_3rd_dac_hires_clk
|
||||
- const: aud_infra_clk
|
||||
- const: aud_infra_26m_clk
|
||||
- const: top_mux_audio
|
||||
- const: top_mux_audio_int
|
||||
- const: top_mainpll_d4_d4
|
||||
- const: top_mux_aud_1
|
||||
- const: top_apll1_ck
|
||||
- const: top_mux_aud_2
|
||||
- const: top_apll2_ck
|
||||
- const: top_mux_aud_eng1
|
||||
- const: top_apll1_d4
|
||||
- const: top_mux_aud_eng2
|
||||
- const: top_apll2_d4
|
||||
- const: top_i2s0_m_sel
|
||||
- const: top_i2s1_m_sel
|
||||
- const: top_i2s2_m_sel
|
||||
- const: top_i2s3_m_sel
|
||||
- const: top_i2s4_m_sel
|
||||
- const: top_i2s5_m_sel
|
||||
- const: top_i2s6_m_sel
|
||||
- const: top_i2s7_m_sel
|
||||
- const: top_i2s8_m_sel
|
||||
- const: top_i2s9_m_sel
|
||||
- const: top_apll12_div0
|
||||
- const: top_apll12_div1
|
||||
- const: top_apll12_div2
|
||||
- const: top_apll12_div3
|
||||
- const: top_apll12_div4
|
||||
- const: top_apll12_divb
|
||||
- const: top_apll12_div5
|
||||
- const: top_apll12_div6
|
||||
- const: top_apll12_div7
|
||||
- const: top_apll12_div8
|
||||
- const: top_apll12_div9
|
||||
- const: top_mux_audio_h
|
||||
- const: top_clk26m_clk
|
||||
|
||||
required:
|
||||
- compatible
|
||||
@@ -83,23 +185,69 @@ examples:
|
||||
afe: mt8192-afe-pcm {
|
||||
compatible = "mediatek,mt8192-audio";
|
||||
interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&audsys CLK_AUD_AFE>, <&audsys CLK_AUD_DAC>,
|
||||
<&audsys CLK_AUD_DAC_PREDIS>, <&audsys CLK_AUD_ADC>,
|
||||
<&audsys CLK_AUD_ADDA6_ADC>, <&audsys CLK_AUD_22M>,
|
||||
<&audsys CLK_AUD_24M>, <&audsys CLK_AUD_APLL_TUNER>,
|
||||
<&audsys CLK_AUD_APLL2_TUNER>, <&audsys CLK_AUD_TDM>,
|
||||
<&audsys CLK_AUD_TML>, <&audsys CLK_AUD_NLE>,
|
||||
<&audsys CLK_AUD_DAC_HIRES>, <&audsys CLK_AUD_ADC_HIRES>,
|
||||
<&audsys CLK_AUD_ADC_HIRES_TML>, <&audsys CLK_AUD_ADDA6_ADC_HIRES>,
|
||||
<&audsys CLK_AUD_3RD_DAC>, <&audsys CLK_AUD_3RD_DAC_PREDIS>,
|
||||
<&audsys CLK_AUD_3RD_DAC_TML>, <&audsys CLK_AUD_3RD_DAC_HIRES>,
|
||||
<&infracfg CLK_INFRA_AUDIO>, <&infracfg CLK_INFRA_AUDIO_26M_B>,
|
||||
<&topckgen CLK_TOP_AUDIO_SEL>, <&topckgen CLK_TOP_AUD_INTBUS_SEL>,
|
||||
<&topckgen CLK_TOP_MAINPLL_D4_D4>, <&topckgen CLK_TOP_AUD_1_SEL>,
|
||||
<&topckgen CLK_TOP_APLL1>, <&topckgen CLK_TOP_AUD_2_SEL>,
|
||||
<&topckgen CLK_TOP_APLL2>, <&topckgen CLK_TOP_AUD_ENGEN1_SEL>,
|
||||
<&topckgen CLK_TOP_APLL1_D4>, <&topckgen CLK_TOP_AUD_ENGEN2_SEL>,
|
||||
<&topckgen CLK_TOP_APLL2_D4>, <&topckgen CLK_TOP_APLL_I2S0_M_SEL>,
|
||||
<&topckgen CLK_TOP_APLL_I2S1_M_SEL>, <&topckgen CLK_TOP_APLL_I2S2_M_SEL>,
|
||||
<&topckgen CLK_TOP_APLL_I2S3_M_SEL>, <&topckgen CLK_TOP_APLL_I2S4_M_SEL>,
|
||||
<&topckgen CLK_TOP_APLL_I2S5_M_SEL>, <&topckgen CLK_TOP_APLL_I2S6_M_SEL>,
|
||||
<&topckgen CLK_TOP_APLL_I2S7_M_SEL>, <&topckgen CLK_TOP_APLL_I2S8_M_SEL>,
|
||||
<&topckgen CLK_TOP_APLL_I2S9_M_SEL>, <&topckgen CLK_TOP_APLL12_DIV0>,
|
||||
<&topckgen CLK_TOP_APLL12_DIV1>, <&topckgen CLK_TOP_APLL12_DIV2>,
|
||||
<&topckgen CLK_TOP_APLL12_DIV3>, <&topckgen CLK_TOP_APLL12_DIV4>,
|
||||
<&topckgen CLK_TOP_APLL12_DIVB>, <&topckgen CLK_TOP_APLL12_DIV5>,
|
||||
<&topckgen CLK_TOP_APLL12_DIV6>, <&topckgen CLK_TOP_APLL12_DIV7>,
|
||||
<&topckgen CLK_TOP_APLL12_DIV8>, <&topckgen CLK_TOP_APLL12_DIV9>,
|
||||
<&topckgen CLK_TOP_AUDIO_H_SEL>, <&clk26m>;
|
||||
clock-names = "aud_afe_clk", "aud_dac_clk",
|
||||
"aud_dac_predis_clk", "aud_adc_clk",
|
||||
"aud_adda6_adc_clk", "aud_apll22m_clk",
|
||||
"aud_apll24m_clk", "aud_apll1_tuner_clk",
|
||||
"aud_apll2_tuner_clk", "aud_tdm_clk",
|
||||
"aud_tml_clk", "aud_nle",
|
||||
"aud_dac_hires_clk", "aud_adc_hires_clk",
|
||||
"aud_adc_hires_tml", "aud_adda6_adc_hires_clk",
|
||||
"aud_3rd_dac_clk", "aud_3rd_dac_predis_clk",
|
||||
"aud_3rd_dac_tml", "aud_3rd_dac_hires_clk",
|
||||
"aud_infra_clk", "aud_infra_26m_clk",
|
||||
"top_mux_audio", "top_mux_audio_int",
|
||||
"top_mainpll_d4_d4", "top_mux_aud_1",
|
||||
"top_apll1_ck", "top_mux_aud_2",
|
||||
"top_apll2_ck", "top_mux_aud_eng1",
|
||||
"top_apll1_d4", "top_mux_aud_eng2",
|
||||
"top_apll2_d4", "top_i2s0_m_sel",
|
||||
"top_i2s1_m_sel", "top_i2s2_m_sel",
|
||||
"top_i2s3_m_sel", "top_i2s4_m_sel",
|
||||
"top_i2s5_m_sel", "top_i2s6_m_sel",
|
||||
"top_i2s7_m_sel", "top_i2s8_m_sel",
|
||||
"top_i2s9_m_sel", "top_apll12_div0",
|
||||
"top_apll12_div1", "top_apll12_div2",
|
||||
"top_apll12_div3", "top_apll12_div4",
|
||||
"top_apll12_divb", "top_apll12_div5",
|
||||
"top_apll12_div6", "top_apll12_div7",
|
||||
"top_apll12_div8", "top_apll12_div9",
|
||||
"top_mux_audio_h", "top_clk26m_clk";
|
||||
memory-region = <&afe_dma_mem>;
|
||||
power-domains = <&scpsys MT8192_POWER_DOMAIN_AUDIO>;
|
||||
resets = <&watchdog MT8192_TOPRGU_AUDIO_SW_RST>;
|
||||
reset-names = "audiosys";
|
||||
mediatek,apmixedsys = <&apmixedsys>;
|
||||
mediatek,infracfg = <&infracfg>;
|
||||
mediatek,topckgen = <&topckgen>;
|
||||
power-domains = <&scpsys MT8192_POWER_DOMAIN_AUDIO>;
|
||||
clocks = <&audsys CLK_AUD_AFE>,
|
||||
<&audsys CLK_AUD_DAC>,
|
||||
<&audsys CLK_AUD_DAC_PREDIS>,
|
||||
<&infracfg CLK_INFRA_AUDIO>,
|
||||
<&infracfg CLK_INFRA_AUDIO_26M_B>;
|
||||
clock-names = "aud_afe_clk",
|
||||
"aud_dac_clk",
|
||||
"aud_dac_predis_clk",
|
||||
"aud_infra_clk",
|
||||
"aud_infra_26m_clk";
|
||||
memory-region = <&afe_dma_mem>;
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
61
Documentation/devicetree/bindings/sound/realtek,rt5575.yaml
Normal file
61
Documentation/devicetree/bindings/sound/realtek,rt5575.yaml
Normal file
@@ -0,0 +1,61 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/realtek,rt5575.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: ALC5575 audio CODEC
|
||||
|
||||
maintainers:
|
||||
- Oder Chiou <oder_chiou@realtek.com>
|
||||
|
||||
description:
|
||||
The device supports both I2C and SPI. I2C is mandatory, while SPI is
|
||||
optional depending on the hardware configuration. SPI is used for
|
||||
firmware loading if present.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: realtek,rt5575
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
spi-parent:
|
||||
description:
|
||||
Optional phandle reference to the SPI controller used for firmware
|
||||
loading. The argument specifies the chip select.
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
# I2C-only node
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
codec@57 {
|
||||
compatible = "realtek,rt5575";
|
||||
reg = <0x57>;
|
||||
};
|
||||
};
|
||||
|
||||
# I2C + optional SPI node
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
codec@57 {
|
||||
compatible = "realtek,rt5575";
|
||||
reg = <0x57>;
|
||||
spi-parent = <&spi0 0>; /* chip-select 0 */
|
||||
};
|
||||
};
|
||||
100
Documentation/devicetree/bindings/sound/realtek,rt5651.yaml
Normal file
100
Documentation/devicetree/bindings/sound/realtek,rt5651.yaml
Normal file
@@ -0,0 +1,100 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/realtek,rt5651.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Realtek RT5651 audio CODEC
|
||||
|
||||
maintainers:
|
||||
- Bard Liao <bardliao@realtek.com>
|
||||
|
||||
description: >
|
||||
This device supports I2C only.
|
||||
|
||||
Pins on the device (for linking into audio routes) for RT5651:
|
||||
|
||||
* DMIC L1
|
||||
* DMIC R1
|
||||
* IN1P
|
||||
* IN2P
|
||||
* IN2N
|
||||
* IN3P
|
||||
* HPOL
|
||||
* HPOR
|
||||
* LOUTL
|
||||
* LOUTR
|
||||
* PDML
|
||||
* PDMR
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/sound/dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: realtek,rt5651
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
const: mclk
|
||||
|
||||
'#sound-dai-cells':
|
||||
const: 0
|
||||
|
||||
realtek,in2-differential:
|
||||
type: boolean
|
||||
description: Indicate MIC2 input are differential, rather than single-ended.
|
||||
|
||||
realtek,dmic-en:
|
||||
type: boolean
|
||||
description: Indicates DMIC is used.
|
||||
|
||||
realtek,jack-detect-source:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Select jack-detect input pin.
|
||||
enum: [1, 2, 3]
|
||||
|
||||
realtek,jack-detect-not-inverted:
|
||||
type: boolean
|
||||
description:
|
||||
Normal jack-detect switches give an inverted (active-low) signal. Set this
|
||||
bool in the rare case you've a jack-detect switch which is not inverted.
|
||||
|
||||
realtek,over-current-threshold-microamp:
|
||||
description: Micbias over-current detection threshold in µA.
|
||||
enum: [600, 1500, 2000]
|
||||
|
||||
realtek,over-current-scale-factor:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: >
|
||||
Micbias over-current detection scale factor:
|
||||
|
||||
0: scale current by 0.5
|
||||
1: scale current by 0.75
|
||||
2: scale current by 1.0
|
||||
3: scale current by 1.5
|
||||
enum: [0, 1, 2, 3]
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
codec@1a {
|
||||
compatible = "realtek,rt5651";
|
||||
reg = <0x1a>;
|
||||
realtek,dmic-en;
|
||||
realtek,in2-differential;
|
||||
};
|
||||
};
|
||||
@@ -14,13 +14,21 @@ description:
|
||||
class-D audio power amplifier and delivering 4x75W into 4OHm at 10%
|
||||
THD+N from a 25V supply in automotive applications.
|
||||
|
||||
The RTQ9154 is the family series of RTQ9128. The major change is to modify
|
||||
the package size. Beside this, whole functions are almost all the same.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- richtek,rtq9128
|
||||
oneOf:
|
||||
- enum:
|
||||
- richtek,rtq9128
|
||||
- items:
|
||||
- enum:
|
||||
- richtek,rtq9154
|
||||
- const: richtek,rtq9128
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
RT5651 audio CODEC
|
||||
|
||||
This device supports I2C only.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : "realtek,rt5651".
|
||||
|
||||
- reg : The I2C address of the device.
|
||||
|
||||
Optional properties:
|
||||
|
||||
- realtek,in2-differential
|
||||
Boolean. Indicate MIC2 input are differential, rather than single-ended.
|
||||
|
||||
- realtek,dmic-en
|
||||
Boolean. true if dmic is used.
|
||||
|
||||
- realtek,jack-detect-source
|
||||
u32. Valid values:
|
||||
1: Use JD1_1 pin for jack-detect
|
||||
2: Use JD1_2 pin for jack-detect
|
||||
3: Use JD2 pin for jack-detect
|
||||
|
||||
- realtek,jack-detect-not-inverted
|
||||
bool. Normal jack-detect switches give an inverted (active-low) signal,
|
||||
set this bool in the rare case you've a jack-detect switch which is not
|
||||
inverted.
|
||||
|
||||
- realtek,over-current-threshold-microamp
|
||||
u32, micbias over-current detection threshold in µA, valid values are
|
||||
600, 1500 and 2000µA.
|
||||
|
||||
- realtek,over-current-scale-factor
|
||||
u32, micbias over-current detection scale-factor, valid values are:
|
||||
0: Scale current by 0.5
|
||||
1: Scale current by 0.75
|
||||
2: Scale current by 1.0
|
||||
3: Scale current by 1.5
|
||||
|
||||
Pins on the device (for linking into audio routes) for RT5651:
|
||||
|
||||
* DMIC L1
|
||||
* DMIC R1
|
||||
* IN1P
|
||||
* IN2P
|
||||
* IN2N
|
||||
* IN3P
|
||||
* HPOL
|
||||
* HPOR
|
||||
* LOUTL
|
||||
* LOUTR
|
||||
* PDML
|
||||
* PDMR
|
||||
|
||||
Example:
|
||||
|
||||
rt5651: codec@1a {
|
||||
compatible = "realtek,rt5651";
|
||||
reg = <0x1a>;
|
||||
realtek,dmic-en = "true";
|
||||
realtek,in2-diff = "false";
|
||||
};
|
||||
@@ -0,0 +1,46 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/sophgo,cv1800b-codecs.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sophgo CV1800B Internal ADC/DAC Codec
|
||||
|
||||
maintainers:
|
||||
- Anton D. Stavinskii <stavinsky@gmail.com>
|
||||
|
||||
description:
|
||||
Internal ADC and DAC audio codecs integrated in the Sophgo CV1800B SoC.
|
||||
Codecs expose a single DAI and are intended to be connected
|
||||
to an I2S/TDM controller via an ASoC machine driver.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- sophgo,cv1800b-sound-adc
|
||||
- sophgo,cv1800b-sound-dac
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#sound-dai-cells"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
audio-codec@300a100 {
|
||||
compatible = "sophgo,cv1800b-sound-adc";
|
||||
reg = <0x0300a100 0x100>;
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
...
|
||||
@@ -0,0 +1,67 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/sophgo,cv1800b-i2s.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sophgo CV1800B I2S/TDM controller
|
||||
|
||||
maintainers:
|
||||
- Anton D. Stavinskii <stavinsky@gmail.com>
|
||||
|
||||
description: I2S/TDM controller found in CV1800B / Sophgo SG2002/SG2000 SoCs.
|
||||
|
||||
allOf:
|
||||
- $ref: dai-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sophgo,cv1800b-i2s
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
"#sound-dai-cells":
|
||||
const: 0
|
||||
|
||||
clocks:
|
||||
maxItems: 2
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: i2s
|
||||
- const: mclk
|
||||
|
||||
dmas:
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
dma-names:
|
||||
minItems: 1
|
||||
items:
|
||||
- enum: [rx, tx]
|
||||
- const: tx
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- "#sound-dai-cells"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/sophgo,cv1800.h>
|
||||
|
||||
i2s@4110000 {
|
||||
compatible = "sophgo,cv1800b-i2s";
|
||||
reg = <0x04110000 0x10000>;
|
||||
clocks = <&clk CLK_APB_I2S1>, <&clk CLK_SDMA_AUD1>;
|
||||
clock-names = "i2s", "mclk";
|
||||
dmas = <&dmamux 2 1>, <&dmamux 3 1>;
|
||||
dma-names = "rx", "tx";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
...
|
||||
@@ -1,36 +0,0 @@
|
||||
Texas Instruments - tas2552 Codec module
|
||||
|
||||
The tas2552 serial control bus communicates through I2C protocols
|
||||
|
||||
Required properties:
|
||||
- compatible - One of:
|
||||
"ti,tas2552" - TAS2552
|
||||
- reg - I2C slave address: it can be 0x40 if ADDR pin is 0
|
||||
or 0x41 if ADDR pin is 1.
|
||||
- supply-*: Required supply regulators are:
|
||||
"vbat" battery voltage
|
||||
"iovdd" I/O Voltage
|
||||
"avdd" Analog DAC Voltage
|
||||
|
||||
Optional properties:
|
||||
- enable-gpio - gpio pin to enable/disable the device
|
||||
|
||||
tas2552 can receive its reference clock via MCLK, BCLK, IVCLKIN pin or use the
|
||||
internal 1.8MHz. This CLKIN is used by the PLL. In addition to PLL, the PDM
|
||||
reference clock is also selectable: PLL, IVCLKIN, BCLK or MCLK.
|
||||
For system integration the dt-bindings/sound/tas2552.h header file provides
|
||||
defined values to select and configure the PLL and PDM reference clocks.
|
||||
|
||||
Example:
|
||||
|
||||
tas2552: tas2552@41 {
|
||||
compatible = "ti,tas2552";
|
||||
reg = <0x41>;
|
||||
vbat-supply = <®_vbat>;
|
||||
iovdd-supply = <®_iovdd>;
|
||||
avdd-supply = <®_avdd>;
|
||||
enable-gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
For more product information please see the link below:
|
||||
https://www.ti.com/product/TAS2552
|
||||
62
Documentation/devicetree/bindings/sound/ti,tas2552.yaml
Normal file
62
Documentation/devicetree/bindings/sound/ti,tas2552.yaml
Normal file
@@ -0,0 +1,62 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/sound/ti,tas2552.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Texas Instruments TAS2552 Codec
|
||||
|
||||
maintainers:
|
||||
- Shenghao Ding <shenghao-ding@ti.com>
|
||||
- Kevin Lu <kevin-lu@ti.com>
|
||||
- Baojun Xu <baojun.xu@ti.com>
|
||||
|
||||
description: >
|
||||
The TAS2552 can receive its reference clock via MCLK, BCLK, IVCLKIN pin or
|
||||
use the internal 1.8MHz. This CLKIN is used by the PLL. In addition to PLL,
|
||||
the PDM reference clock is also selectable: PLL, IVCLKIN, BCLK or MCLK.
|
||||
|
||||
For system integration the dt-bindings/sound/tas2552.h header file provides
|
||||
defined values to select and configure the PLL and PDM reference clocks.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: ti,tas2552
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
vbat-supply: true
|
||||
iovdd-supply: true
|
||||
avdd-supply: true
|
||||
|
||||
enable-gpio:
|
||||
maxItems: 1
|
||||
description: gpio pin to enable/disable the device
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- vbat-supply
|
||||
- iovdd-supply
|
||||
- avdd-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
audio-codec@41 {
|
||||
compatible = "ti,tas2552";
|
||||
reg = <0x41>;
|
||||
vbat-supply = <®_vbat>;
|
||||
iovdd-supply = <®_iovdd>;
|
||||
avdd-supply = <®_avdd>;
|
||||
enable-gpio = <&gpio4 2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
@@ -41,8 +41,11 @@ properties:
|
||||
|
||||
areg-supply:
|
||||
description: |
|
||||
Regulator with AVDD at 3.3V. If not defined then the internal regulator
|
||||
is enabled.
|
||||
External supply of 1.8V. If not defined then the internal regulator is
|
||||
enabled instead.
|
||||
|
||||
avdd-supply: true
|
||||
iovdd-supply: true
|
||||
|
||||
ti,mic-bias-source:
|
||||
description: |
|
||||
|
||||
@@ -15,7 +15,7 @@ and SB Temperature Sensor Interface (SB-TSI)).
|
||||
More details on the interface can be found in chapter
|
||||
"5 Advanced Platform Management Link (APML)" of the family/model PPR [1]_.
|
||||
|
||||
.. [1] https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip
|
||||
.. [1] https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50
|
||||
|
||||
|
||||
SBRMI device
|
||||
|
||||
@@ -33,6 +33,16 @@ Boot parameter:
|
||||
sysctl:
|
||||
/proc/sys/vm/mem_profiling
|
||||
|
||||
1: Enable memory profiling.
|
||||
|
||||
0: Disable memory profiling.
|
||||
|
||||
The default value depends on CONFIG_MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT.
|
||||
|
||||
When CONFIG_MEM_ALLOC_PROFILING_DEBUG=y, this control is read-only to avoid
|
||||
warnings produced by allocations made while profiling is disabled and freed
|
||||
when it's enabled.
|
||||
|
||||
Runtime info:
|
||||
/proc/allocinfo
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ attribute-sets:
|
||||
-
|
||||
name: ipproto
|
||||
type: u8
|
||||
checks:
|
||||
min: 1
|
||||
-
|
||||
name: type
|
||||
type: u8
|
||||
|
||||
41
Documentation/process/conclave.rst
Normal file
41
Documentation/process/conclave.rst
Normal file
@@ -0,0 +1,41 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Linux kernel project continuity
|
||||
===============================
|
||||
|
||||
The Linux kernel development project is widely distributed, with over
|
||||
100 maintainers each working to keep changes moving through their own
|
||||
repositories. The final step, though, is a centralized one where changes
|
||||
are pulled into the mainline repository. That is normally done by Linus
|
||||
Torvalds but, as was demonstrated by the 4.19 release in 2018, there are
|
||||
others who can do that work when the need arises.
|
||||
|
||||
Should the maintainers of that repository become unwilling or unable to
|
||||
do that work going forward (including facilitating a transition), the
|
||||
project will need to find one or more replacements without delay. The
|
||||
process by which that will be done is listed below. $ORGANIZER is the
|
||||
last Maintainer Summit organizer or the current Linux Foundation (LF)
|
||||
Technical Advisory Board (TAB) Chair as a backup.
|
||||
|
||||
- Within 72 hours, $ORGANIZER will open a discussion with the invitees
|
||||
of the most recently concluded Maintainers Summit. A meeting of those
|
||||
invitees and the TAB, either online or in-person, will be set as soon
|
||||
as possible in a way that maximizes the number of people who can
|
||||
participate.
|
||||
|
||||
- If there has been no Maintainers Summit in the last 15 months, the set of
|
||||
invitees for this meeting will be determined by the TAB.
|
||||
|
||||
- The invitees to this meeting may bring in other maintainers as needed.
|
||||
|
||||
- This meeting, chaired by $ORGANIZER, will consider options for the
|
||||
ongoing management of the top-level kernel repository consistent with
|
||||
the expectation that it maximizes the long term health of the project
|
||||
and its community.
|
||||
|
||||
- Within two weeks, a representative of this group will communicate to the
|
||||
broader community, using the ksummit@lists.linux.dev mailing list, what
|
||||
the next steps will be.
|
||||
|
||||
The Linux Foundation, as guided by the TAB, will take the steps
|
||||
necessary to support and implement this plan.
|
||||
@@ -68,6 +68,7 @@ beyond).
|
||||
stable-kernel-rules
|
||||
management-style
|
||||
researcher-guidelines
|
||||
conclave
|
||||
|
||||
Dealing with bugs
|
||||
-----------------
|
||||
|
||||
@@ -363,6 +363,18 @@ just do it. As a result, a sequence of smaller series gets merged quicker and
|
||||
with better review coverage. Re-posting large series also increases the mailing
|
||||
list traffic.
|
||||
|
||||
Limit patches outstanding on mailing list
|
||||
-----------------------------------------
|
||||
|
||||
Avoid having more than 15 patches, across all series, outstanding for
|
||||
review on the mailing list for a single tree. In other words, a maximum of
|
||||
15 patches under review on net, and a maximum of 15 patches under review on
|
||||
net-next.
|
||||
|
||||
This limit is intended to focus developer effort on testing patches before
|
||||
upstream review. Aiding the quality of upstream submissions, and easing the
|
||||
load on reviewers.
|
||||
|
||||
.. _rcs:
|
||||
|
||||
Local variable ordering ("reverse xmas tree", "RCS")
|
||||
|
||||
22
MAINTAINERS
22
MAINTAINERS
@@ -1030,6 +1030,13 @@ L: dmaengine@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/dma/amd/ae4dma/
|
||||
|
||||
AMD ASoC DRIVERS
|
||||
M: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
|
||||
R: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
|
||||
L: linux-sound@vger.kernel.org
|
||||
S: Supported
|
||||
F: sound/soc/amd/
|
||||
|
||||
AMD AXI W1 DRIVER
|
||||
M: Kris Chaplin <kris.chaplin@amd.com>
|
||||
R: Thomas Delev <thomas.delev@amd.com>
|
||||
@@ -3132,6 +3139,7 @@ F: drivers/*/*ma35*
|
||||
K: ma35d1
|
||||
|
||||
ARM/NUVOTON NPCM ARCHITECTURE
|
||||
M: Andrew Jeffery <andrew@codeconstruct.com.au>
|
||||
M: Avi Fishman <avifishman70@gmail.com>
|
||||
M: Tomer Maimon <tmaimon77@gmail.com>
|
||||
M: Tali Perry <tali.perry1@gmail.com>
|
||||
@@ -3140,6 +3148,7 @@ R: Nancy Yuen <yuenn@google.com>
|
||||
R: Benjamin Fair <benjaminfair@google.com>
|
||||
L: openbmc@lists.ozlabs.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bmc/linux.git
|
||||
F: Documentation/devicetree/bindings/*/*/*npcm*
|
||||
F: Documentation/devicetree/bindings/*/*npcm*
|
||||
F: Documentation/devicetree/bindings/rtc/nuvoton,nct3018y.yaml
|
||||
@@ -9258,7 +9267,6 @@ F: drivers/scsi/be2iscsi/
|
||||
EMULEX 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER (be2net)
|
||||
M: Ajit Khaparde <ajit.khaparde@broadcom.com>
|
||||
M: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
|
||||
M: Somnath Kotur <somnath.kotur@broadcom.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.emulex.com
|
||||
@@ -13170,6 +13178,7 @@ F: Documentation/devicetree/bindings/interconnect/
|
||||
F: Documentation/driver-api/interconnect.rst
|
||||
F: drivers/interconnect/
|
||||
F: include/dt-bindings/interconnect/
|
||||
F: include/linux/interconnect-clk.h
|
||||
F: include/linux/interconnect-provider.h
|
||||
F: include/linux/interconnect.h
|
||||
|
||||
@@ -18484,9 +18493,8 @@ F: include/uapi/linux/nexthop.h
|
||||
F: net/ipv4/nexthop.c
|
||||
|
||||
NFC SUBSYSTEM
|
||||
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: Documentation/devicetree/bindings/net/nfc/
|
||||
F: drivers/nfc/
|
||||
F: include/net/nfc/
|
||||
@@ -21103,6 +21111,10 @@ S: Maintained
|
||||
F: rust/helpers/pwm.c
|
||||
F: rust/kernel/pwm.rs
|
||||
|
||||
PWM SUBSYSTEM DRIVERS [RUST]
|
||||
R: Michal Wilczynski <m.wilczynski@samsung.com>
|
||||
F: drivers/pwm/*.rs
|
||||
|
||||
PXA GPIO DRIVER
|
||||
M: Robert Jarzmik <robert.jarzmik@free.fr>
|
||||
L: linux-gpio@vger.kernel.org
|
||||
@@ -22532,7 +22544,7 @@ F: drivers/mailbox/riscv-sbi-mpxy-mbox.c
|
||||
F: include/linux/mailbox/riscv-rpmi-message.h
|
||||
|
||||
RISC-V SPACEMIT SoC Support
|
||||
M: Yixun Lan <dlan@gentoo.org>
|
||||
M: Yixun Lan <dlan@kernel.org>
|
||||
L: linux-riscv@lists.infradead.org
|
||||
L: spacemit@lists.linux.dev
|
||||
S: Maintained
|
||||
@@ -25781,7 +25793,7 @@ M: Kevin Lu <kevin-lu@ti.com>
|
||||
M: Baojun Xu <baojun.xu@ti.com>
|
||||
L: linux-sound@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/sound/tas2552.txt
|
||||
F: Documentation/devicetree/bindings/sound/ti,tas2552.yaml
|
||||
F: Documentation/devicetree/bindings/sound/ti,tas2562.yaml
|
||||
F: Documentation/devicetree/bindings/sound/ti,tas2770.yaml
|
||||
F: Documentation/devicetree/bindings/sound/ti,tas27xx.yaml
|
||||
|
||||
5
Makefile
5
Makefile
@@ -2,7 +2,7 @@
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc6
|
||||
EXTRAVERSION = -rc8
|
||||
NAME = Baby Opossum Posse
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@@ -1624,7 +1624,8 @@ MRPROPER_FILES += include/config include/generated \
|
||||
certs/x509.genkey \
|
||||
vmlinux-gdb.py \
|
||||
rpmbuild \
|
||||
rust/libmacros.so rust/libmacros.dylib
|
||||
rust/libmacros.so rust/libmacros.dylib \
|
||||
rust/libpin_init_internal.so rust/libpin_init_internal.dylib
|
||||
|
||||
# clean - Delete most, but leave enough to build external modules
|
||||
#
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
&mdio0 {
|
||||
pinctrl-0 = <&miim_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
reset-gpios = <&gpio 53 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
|
||||
ext_phy0: ethernet-phy@7 {
|
||||
|
||||
@@ -527,7 +527,7 @@
|
||||
interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 37>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
dmas = <&dma0 AT91_XDMAC_DT_PERID(12)>,
|
||||
<&dma0 AT91_XDMAC_DT_PERID(11)>;
|
||||
dma-names = "tx", "rx";
|
||||
@@ -676,7 +676,7 @@
|
||||
flx9: flexcom@e2820000 {
|
||||
compatible = "microchip,sama7d65-flexcom", "atmel,sama5d2-flexcom";
|
||||
reg = <0xe2820000 0x200>;
|
||||
ranges = <0x0 0xe281c000 0x800>;
|
||||
ranges = <0x0 0xe2820000 0x800>;
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 43>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@@ -30,7 +30,6 @@ config ARCH_NPCM7XX
|
||||
select ARM_ERRATA_764369 if SMP
|
||||
select ARM_ERRATA_720789
|
||||
select ARM_ERRATA_754322
|
||||
select ARM_ERRATA_794072
|
||||
select PL310_ERRATA_588369
|
||||
select PL310_ERRATA_727915
|
||||
select MFD_SYSCON
|
||||
|
||||
@@ -202,19 +202,6 @@
|
||||
|
||||
nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
|
||||
nvidia,head = <0>;
|
||||
|
||||
interconnects = <&mc TEGRA210_MC_DISPLAY0A &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAY0B &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAY0C &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAYHC &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAYD &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAYT &emc>;
|
||||
interconnect-names = "wina",
|
||||
"winb",
|
||||
"winc",
|
||||
"cursor",
|
||||
"wind",
|
||||
"wint";
|
||||
};
|
||||
|
||||
dc@54240000 {
|
||||
@@ -230,15 +217,6 @@
|
||||
|
||||
nvidia,outputs = <&dsia &dsib &sor0 &sor1>;
|
||||
nvidia,head = <1>;
|
||||
|
||||
interconnects = <&mc TEGRA210_MC_DISPLAY0AB &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAY0BB &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAY0CB &emc>,
|
||||
<&mc TEGRA210_MC_DISPLAYHCB &emc>;
|
||||
interconnect-names = "wina",
|
||||
"winb",
|
||||
"winc",
|
||||
"cursor";
|
||||
};
|
||||
|
||||
dsia: dsi@54300000 {
|
||||
@@ -1052,7 +1030,6 @@
|
||||
|
||||
#iommu-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
#interconnect-cells = <1>;
|
||||
};
|
||||
|
||||
emc: external-memory-controller@7001b000 {
|
||||
@@ -1066,7 +1043,6 @@
|
||||
nvidia,memory-controller = <&mc>;
|
||||
operating-points-v2 = <&emc_icc_dvfs_opp_table>;
|
||||
|
||||
#interconnect-cells = <0>;
|
||||
#cooling-cells = <2>;
|
||||
};
|
||||
|
||||
|
||||
@@ -5788,8 +5788,12 @@
|
||||
clocks = <&rpmhcc RPMH_CXO_CLK>;
|
||||
clock-names = "xo";
|
||||
|
||||
power-domains = <&rpmhpd SC8280XP_NSP>;
|
||||
power-domain-names = "nsp";
|
||||
power-domains = <&rpmhpd SC8280XP_NSP>,
|
||||
<&rpmhpd SC8280XP_CX>,
|
||||
<&rpmhpd SC8280XP_MXC>;
|
||||
power-domain-names = "nsp",
|
||||
"cx",
|
||||
"mxc";
|
||||
|
||||
memory-region = <&pil_nsp0_mem>;
|
||||
|
||||
@@ -5919,8 +5923,12 @@
|
||||
clocks = <&rpmhcc RPMH_CXO_CLK>;
|
||||
clock-names = "xo";
|
||||
|
||||
power-domains = <&rpmhpd SC8280XP_NSP>;
|
||||
power-domain-names = "nsp";
|
||||
power-domains = <&rpmhpd SC8280XP_NSP>,
|
||||
<&rpmhpd SC8280XP_CX>,
|
||||
<&rpmhpd SC8280XP_MXC>;
|
||||
power-domain-names = "nsp",
|
||||
"cx",
|
||||
"mxc";
|
||||
|
||||
memory-region = <&pil_nsp1_mem>;
|
||||
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
};
|
||||
|
||||
&display_panel {
|
||||
status = "okay";
|
||||
compatible = "samsung,sofef00-ams628nw01", "samsung,sofef00";
|
||||
|
||||
compatible = "samsung,sofef00";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&bq27441_fg {
|
||||
|
||||
@@ -4133,8 +4133,6 @@
|
||||
usb_1: usb@a600000 {
|
||||
compatible = "qcom,sm8550-dwc3", "qcom,snps-dwc3";
|
||||
reg = <0x0 0x0a600000 0x0 0xfc100>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>,
|
||||
<&gcc GCC_USB30_PRIM_MASTER_CLK>,
|
||||
|
||||
@@ -5150,9 +5150,6 @@
|
||||
|
||||
dma-coherent;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
status = "disabled";
|
||||
|
||||
ports {
|
||||
|
||||
@@ -1399,10 +1399,10 @@
|
||||
<&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
|
||||
<&gcc GCC_UFS_PHY_AHB_CLK>,
|
||||
<&gcc GCC_UFS_PHY_UNIPRO_CORE_CLK>,
|
||||
<&gcc GCC_UFS_PHY_ICE_CORE_CLK>,
|
||||
<&rpmhcc RPMH_CXO_CLK>,
|
||||
<&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
|
||||
<&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>;
|
||||
<&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
|
||||
<&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
|
||||
clock-names = "core_clk",
|
||||
"bus_aggr_clk",
|
||||
"iface_clk",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
compatible = "brcm,bcm43455-fmac", "brcm,bcm4329-fmac";
|
||||
reg = <1>;
|
||||
interrupt-parent = <&gpio0>;
|
||||
interrupts = <RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
interrupts = <RK_PA3 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "host-wake";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&wifi_host_wake>;
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
|
||||
joystick_mux_controller: mux-controller {
|
||||
compatible = "gpio-mux";
|
||||
pinctrl = <&mux_en_pins>;
|
||||
pinctrl-0 = <&mux_en_pins>;
|
||||
pinctrl-names = "default";
|
||||
#mux-control-cells = <0>;
|
||||
|
||||
mux-gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>,
|
||||
|
||||
@@ -424,9 +424,7 @@
|
||||
|
||||
&pcie0 {
|
||||
ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||
max-link-speed = <2>;
|
||||
num-lanes = <2>;
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
vpcie12v-supply = <&vcc12v_dcin>;
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
};
|
||||
|
||||
&pcie0 {
|
||||
max-link-speed = <1>;
|
||||
num-lanes = <1>;
|
||||
vpcie3v3-supply = <&vcc3v3_sys>;
|
||||
};
|
||||
|
||||
@@ -969,7 +969,6 @@
|
||||
};
|
||||
|
||||
&spi1 {
|
||||
max-freq = <10000000>;
|
||||
status = "okay";
|
||||
|
||||
spiflash: flash@0 {
|
||||
|
||||
@@ -40,13 +40,13 @@
|
||||
button-up {
|
||||
label = "Volume Up";
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
press-threshold-microvolt = <100000>;
|
||||
press-threshold-microvolt = <2000>;
|
||||
};
|
||||
|
||||
button-down {
|
||||
label = "Volume Down";
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
press-threshold-microvolt = <600000>;
|
||||
press-threshold-microvolt = <300000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -483,7 +483,7 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
|
||||
|
||||
gpios {
|
||||
gpio-pins {
|
||||
bios_disable_override_hog_pin: bios-disable-override-hog-pin {
|
||||
rockchip,pins =
|
||||
<3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
|
||||
@@ -529,11 +529,11 @@
|
||||
rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||
};
|
||||
|
||||
vsel1_gpio: vsel1-gpio {
|
||||
vsel1_gpio: vsel1-gpio-pin {
|
||||
rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
|
||||
vsel2_gpio: vsel2-gpio {
|
||||
vsel2_gpio: vsel2-gpio-pin {
|
||||
rockchip,pins = <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_down>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#include "rk3568-wolfvision-pf5-display.dtsi"
|
||||
|
||||
&st7789 {
|
||||
compatible = "jasonic,jt240mhqs-hwt-ek-e3",
|
||||
"sitronix,st7789v";
|
||||
compatible = "jasonic,jt240mhqs-hwt-ek-e3";
|
||||
rotation = <270>;
|
||||
};
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hp_det_l>;
|
||||
|
||||
simple-audio-card,bitclock-master = <&masterdai>;
|
||||
simple-audio-card,format = "i2s";
|
||||
simple-audio-card,hp-det-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_LOW>;
|
||||
simple-audio-card,mclk-fs = <256>;
|
||||
@@ -211,15 +212,16 @@
|
||||
"Headphones", "HPOR",
|
||||
"IN1P", "Microphone Jack";
|
||||
simple-audio-card,widgets =
|
||||
"Headphone", "Headphone Jack",
|
||||
"Headphone", "Headphones",
|
||||
"Microphone", "Microphone Jack";
|
||||
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&rt5616>;
|
||||
};
|
||||
|
||||
simple-audio-card,cpu {
|
||||
masterdai: simple-audio-card,cpu {
|
||||
sound-dai = <&sai2>;
|
||||
system-clock-frequency = <12288000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -727,10 +729,12 @@
|
||||
rt5616: audio-codec@1b {
|
||||
compatible = "realtek,rt5616";
|
||||
reg = <0x1b>;
|
||||
assigned-clocks = <&cru CLK_SAI2_MCLKOUT>;
|
||||
assigned-clocks = <&cru CLK_SAI2_MCLKOUT_TO_IO>;
|
||||
assigned-clock-rates = <12288000>;
|
||||
clocks = <&cru CLK_SAI2_MCLKOUT>;
|
||||
clocks = <&cru CLK_SAI2_MCLKOUT_TO_IO>;
|
||||
clock-names = "mclk";
|
||||
pinctrl-0 = <&sai2m0_mclk>;
|
||||
pinctrl-names = "default";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1261,7 +1261,7 @@
|
||||
|
||||
gpu: gpu@27800000 {
|
||||
compatible = "rockchip,rk3576-mali", "arm,mali-bifrost";
|
||||
reg = <0x0 0x27800000 0x0 0x200000>;
|
||||
reg = <0x0 0x27800000 0x0 0x20000>;
|
||||
assigned-clocks = <&scmi_clk SCMI_CLK_GPU>;
|
||||
assigned-clock-rates = <198000000>;
|
||||
clocks = <&cru CLK_GPU>;
|
||||
|
||||
@@ -1200,7 +1200,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rknn_mmu_1: iommu@fdac9000 {
|
||||
rknn_mmu_1: iommu@fdaca000 {
|
||||
compatible = "rockchip,rk3588-iommu", "rockchip,rk3568-iommu";
|
||||
reg = <0x0 0xfdaca000 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
@@ -1230,7 +1230,7 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
rknn_mmu_2: iommu@fdad9000 {
|
||||
rknn_mmu_2: iommu@fdada000 {
|
||||
compatible = "rockchip,rk3588-iommu", "rockchip,rk3568-iommu";
|
||||
reg = <0x0 0xfdada000 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
|
||||
@@ -670,7 +670,6 @@ CONFIG_PINCTRL_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SC7280_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SM6115_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SM8250_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SM8350_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SM8450_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SC8280XP_LPASS_LPI=m
|
||||
CONFIG_PINCTRL_SM8550_LPASS_LPI=m
|
||||
|
||||
@@ -300,6 +300,8 @@ void kvm_get_kimage_voffset(struct alt_instr *alt,
|
||||
__le32 *origptr, __le32 *updptr, int nr_inst);
|
||||
void kvm_compute_final_ctr_el0(struct alt_instr *alt,
|
||||
__le32 *origptr, __le32 *updptr, int nr_inst);
|
||||
void kvm_pan_patch_el2_entry(struct alt_instr *alt,
|
||||
__le32 *origptr, __le32 *updptr, int nr_inst);
|
||||
void __noreturn __cold nvhe_hyp_panic_handler(u64 esr, u64 spsr, u64 elr_virt,
|
||||
u64 elr_phys, u64 par, uintptr_t vcpu, u64 far, u64 hpfar);
|
||||
|
||||
|
||||
@@ -119,22 +119,6 @@ static inline unsigned long *vcpu_hcr(struct kvm_vcpu *vcpu)
|
||||
return (unsigned long *)&vcpu->arch.hcr_el2;
|
||||
}
|
||||
|
||||
static inline void vcpu_clear_wfx_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
vcpu->arch.hcr_el2 &= ~HCR_TWE;
|
||||
if (atomic_read(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe.vlpi_count) ||
|
||||
vcpu->kvm->arch.vgic.nassgireq)
|
||||
vcpu->arch.hcr_el2 &= ~HCR_TWI;
|
||||
else
|
||||
vcpu->arch.hcr_el2 |= HCR_TWI;
|
||||
}
|
||||
|
||||
static inline void vcpu_set_wfx_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
vcpu->arch.hcr_el2 |= HCR_TWE;
|
||||
vcpu->arch.hcr_el2 |= HCR_TWI;
|
||||
}
|
||||
|
||||
static inline unsigned long vcpu_get_vsesr(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return vcpu->arch.vsesr_el2;
|
||||
|
||||
@@ -87,7 +87,15 @@ typedef u64 kvm_pte_t;
|
||||
|
||||
#define KVM_PTE_LEAF_ATTR_HI_SW GENMASK(58, 55)
|
||||
|
||||
#define KVM_PTE_LEAF_ATTR_HI_S1_XN BIT(54)
|
||||
#define __KVM_PTE_LEAF_ATTR_HI_S1_XN BIT(54)
|
||||
#define __KVM_PTE_LEAF_ATTR_HI_S1_UXN BIT(54)
|
||||
#define __KVM_PTE_LEAF_ATTR_HI_S1_PXN BIT(53)
|
||||
|
||||
#define KVM_PTE_LEAF_ATTR_HI_S1_XN \
|
||||
({ cpus_have_final_cap(ARM64_KVM_HVHE) ? \
|
||||
(__KVM_PTE_LEAF_ATTR_HI_S1_UXN | \
|
||||
__KVM_PTE_LEAF_ATTR_HI_S1_PXN) : \
|
||||
__KVM_PTE_LEAF_ATTR_HI_S1_XN; })
|
||||
|
||||
#define KVM_PTE_LEAF_ATTR_HI_S2_XN GENMASK(54, 53)
|
||||
|
||||
@@ -293,8 +301,8 @@ typedef bool (*kvm_pgtable_force_pte_cb_t)(u64 addr, u64 end,
|
||||
* children.
|
||||
* @KVM_PGTABLE_WALK_SHARED: Indicates the page-tables may be shared
|
||||
* with other software walkers.
|
||||
* @KVM_PGTABLE_WALK_HANDLE_FAULT: Indicates the page-table walk was
|
||||
* invoked from a fault handler.
|
||||
* @KVM_PGTABLE_WALK_IGNORE_EAGAIN: Don't terminate the walk early if
|
||||
* the walker returns -EAGAIN.
|
||||
* @KVM_PGTABLE_WALK_SKIP_BBM_TLBI: Visit and update table entries
|
||||
* without Break-before-make's
|
||||
* TLB invalidation.
|
||||
@@ -307,7 +315,7 @@ enum kvm_pgtable_walk_flags {
|
||||
KVM_PGTABLE_WALK_TABLE_PRE = BIT(1),
|
||||
KVM_PGTABLE_WALK_TABLE_POST = BIT(2),
|
||||
KVM_PGTABLE_WALK_SHARED = BIT(3),
|
||||
KVM_PGTABLE_WALK_HANDLE_FAULT = BIT(4),
|
||||
KVM_PGTABLE_WALK_IGNORE_EAGAIN = BIT(4),
|
||||
KVM_PGTABLE_WALK_SKIP_BBM_TLBI = BIT(5),
|
||||
KVM_PGTABLE_WALK_SKIP_CMO = BIT(6),
|
||||
};
|
||||
|
||||
@@ -91,7 +91,8 @@
|
||||
*/
|
||||
#define pstate_field(op1, op2) ((op1) << Op1_shift | (op2) << Op2_shift)
|
||||
#define PSTATE_Imm_shift CRm_shift
|
||||
#define SET_PSTATE(x, r) __emit_inst(0xd500401f | PSTATE_ ## r | ((!!x) << PSTATE_Imm_shift))
|
||||
#define ENCODE_PSTATE(x, r) (0xd500401f | PSTATE_ ## r | ((!!x) << PSTATE_Imm_shift))
|
||||
#define SET_PSTATE(x, r) __emit_inst(ENCODE_PSTATE(x, r))
|
||||
|
||||
#define PSTATE_PAN pstate_field(0, 4)
|
||||
#define PSTATE_UAO pstate_field(0, 3)
|
||||
|
||||
@@ -402,7 +402,7 @@ int swsusp_arch_suspend(void)
|
||||
* Memory allocated by get_safe_page() will be dealt with by the hibernate code,
|
||||
* we don't need to free it here.
|
||||
*/
|
||||
int swsusp_arch_resume(void)
|
||||
int __nocfi swsusp_arch_resume(void)
|
||||
{
|
||||
int rc;
|
||||
void *zero_page;
|
||||
|
||||
@@ -86,6 +86,7 @@ KVM_NVHE_ALIAS(kvm_patch_vector_branch);
|
||||
KVM_NVHE_ALIAS(kvm_update_va_mask);
|
||||
KVM_NVHE_ALIAS(kvm_get_kimage_voffset);
|
||||
KVM_NVHE_ALIAS(kvm_compute_final_ctr_el0);
|
||||
KVM_NVHE_ALIAS(kvm_pan_patch_el2_entry);
|
||||
KVM_NVHE_ALIAS(spectre_bhb_patch_loop_iter);
|
||||
KVM_NVHE_ALIAS(spectre_bhb_patch_loop_mitigation_enable);
|
||||
KVM_NVHE_ALIAS(spectre_bhb_patch_wa3);
|
||||
|
||||
@@ -968,20 +968,18 @@ static int sve_set_common(struct task_struct *target,
|
||||
vq = sve_vq_from_vl(task_get_vl(target, type));
|
||||
|
||||
/* Enter/exit streaming mode */
|
||||
if (system_supports_sme()) {
|
||||
switch (type) {
|
||||
case ARM64_VEC_SVE:
|
||||
target->thread.svcr &= ~SVCR_SM_MASK;
|
||||
set_tsk_thread_flag(target, TIF_SVE);
|
||||
break;
|
||||
case ARM64_VEC_SME:
|
||||
target->thread.svcr |= SVCR_SM_MASK;
|
||||
set_tsk_thread_flag(target, TIF_SME);
|
||||
break;
|
||||
default:
|
||||
WARN_ON_ONCE(1);
|
||||
return -EINVAL;
|
||||
}
|
||||
switch (type) {
|
||||
case ARM64_VEC_SVE:
|
||||
target->thread.svcr &= ~SVCR_SM_MASK;
|
||||
set_tsk_thread_flag(target, TIF_SVE);
|
||||
break;
|
||||
case ARM64_VEC_SME:
|
||||
target->thread.svcr |= SVCR_SM_MASK;
|
||||
set_tsk_thread_flag(target, TIF_SME);
|
||||
break;
|
||||
default:
|
||||
WARN_ON_ONCE(1);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Always zero V regs, FPSR, and FPCR */
|
||||
|
||||
@@ -449,12 +449,28 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)
|
||||
if (user->sve_size < SVE_SIG_CONTEXT_SIZE(vq))
|
||||
return -EINVAL;
|
||||
|
||||
if (sm) {
|
||||
sme_alloc(current, false);
|
||||
if (!current->thread.sme_state)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
sve_alloc(current, true);
|
||||
if (!current->thread.sve_state) {
|
||||
clear_thread_flag(TIF_SVE);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (sm) {
|
||||
current->thread.svcr |= SVCR_SM_MASK;
|
||||
set_thread_flag(TIF_SME);
|
||||
} else {
|
||||
current->thread.svcr &= ~SVCR_SM_MASK;
|
||||
set_thread_flag(TIF_SVE);
|
||||
}
|
||||
|
||||
current->thread.fp_type = FP_STATE_SVE;
|
||||
|
||||
err = __copy_from_user(current->thread.sve_state,
|
||||
(char __user const *)user->sve +
|
||||
SVE_SIG_REGS_OFFSET,
|
||||
@@ -462,12 +478,6 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)
|
||||
if (err)
|
||||
return -EFAULT;
|
||||
|
||||
if (flags & SVE_SIG_FLAG_SM)
|
||||
current->thread.svcr |= SVCR_SM_MASK;
|
||||
else
|
||||
set_thread_flag(TIF_SVE);
|
||||
current->thread.fp_type = FP_STATE_SVE;
|
||||
|
||||
err = read_fpsimd_context(&fpsimd, user);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -576,6 +586,10 @@ static int restore_za_context(struct user_ctxs *user)
|
||||
if (user->za_size < ZA_SIG_CONTEXT_SIZE(vq))
|
||||
return -EINVAL;
|
||||
|
||||
sve_alloc(current, false);
|
||||
if (!current->thread.sve_state)
|
||||
return -ENOMEM;
|
||||
|
||||
sme_alloc(current, true);
|
||||
if (!current->thread.sme_state) {
|
||||
current->thread.svcr &= ~SVCR_ZA_MASK;
|
||||
|
||||
@@ -569,6 +569,7 @@ static bool kvm_vcpu_should_clear_twi(struct kvm_vcpu *vcpu)
|
||||
return kvm_wfi_trap_policy == KVM_WFX_NOTRAP;
|
||||
|
||||
return single_task_running() &&
|
||||
vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 &&
|
||||
(atomic_read(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe.vlpi_count) ||
|
||||
vcpu->kvm->arch.vgic.nassgireq);
|
||||
}
|
||||
|
||||
@@ -403,6 +403,7 @@ static int walk_s1(struct kvm_vcpu *vcpu, struct s1_walk_info *wi,
|
||||
struct s1_walk_result *wr, u64 va)
|
||||
{
|
||||
u64 va_top, va_bottom, baddr, desc, new_desc, ipa;
|
||||
struct kvm_s2_trans s2_trans = {};
|
||||
int level, stride, ret;
|
||||
|
||||
level = wi->sl;
|
||||
@@ -420,8 +421,6 @@ static int walk_s1(struct kvm_vcpu *vcpu, struct s1_walk_info *wi,
|
||||
ipa = baddr | index;
|
||||
|
||||
if (wi->s2) {
|
||||
struct kvm_s2_trans s2_trans = {};
|
||||
|
||||
ret = kvm_walk_nested_s2(vcpu, ipa, &s2_trans);
|
||||
if (ret) {
|
||||
fail_s1_walk(wr,
|
||||
@@ -515,6 +514,11 @@ static int walk_s1(struct kvm_vcpu *vcpu, struct s1_walk_info *wi,
|
||||
new_desc |= PTE_AF;
|
||||
|
||||
if (new_desc != desc) {
|
||||
if (wi->s2 && !kvm_s2_trans_writable(&s2_trans)) {
|
||||
fail_s1_walk(wr, ESR_ELx_FSC_PERM_L(level), true);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
ret = kvm_swap_s1_desc(vcpu, ipa, desc, new_desc, wi);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -126,7 +126,9 @@ SYM_INNER_LABEL(__guest_exit, SYM_L_GLOBAL)
|
||||
|
||||
add x1, x1, #VCPU_CONTEXT
|
||||
|
||||
ALTERNATIVE(nop, SET_PSTATE_PAN(1), ARM64_HAS_PAN, CONFIG_ARM64_PAN)
|
||||
alternative_cb ARM64_ALWAYS_SYSTEM, kvm_pan_patch_el2_entry
|
||||
nop
|
||||
alternative_cb_end
|
||||
|
||||
// Store the guest regs x2 and x3
|
||||
stp x2, x3, [x1, #CPU_XREG_OFFSET(2)]
|
||||
|
||||
@@ -854,7 +854,7 @@ static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code,
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void synchronize_vcpu_pstate(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||
static inline void synchronize_vcpu_pstate(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
/*
|
||||
* Check for the conditions of Cortex-A510's #2077057. When these occur
|
||||
|
||||
@@ -180,6 +180,9 @@ static void handle___pkvm_vcpu_load(struct kvm_cpu_context *host_ctxt)
|
||||
/* Propagate WFx trapping flags */
|
||||
hyp_vcpu->vcpu.arch.hcr_el2 &= ~(HCR_TWE | HCR_TWI);
|
||||
hyp_vcpu->vcpu.arch.hcr_el2 |= hcr_el2 & (HCR_TWE | HCR_TWI);
|
||||
} else {
|
||||
memcpy(&hyp_vcpu->vcpu.arch.fgt, hyp_vcpu->host_vcpu->arch.fgt,
|
||||
sizeof(hyp_vcpu->vcpu.arch.fgt));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -172,7 +172,6 @@ static int pkvm_vcpu_init_traps(struct pkvm_hyp_vcpu *hyp_vcpu)
|
||||
|
||||
/* Trust the host for non-protected vcpu features. */
|
||||
vcpu->arch.hcrx_el2 = host_vcpu->arch.hcrx_el2;
|
||||
memcpy(vcpu->arch.fgt, host_vcpu->arch.fgt, sizeof(vcpu->arch.fgt));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||
{
|
||||
const exit_handler_fn *handlers = kvm_get_exit_handler_array(vcpu);
|
||||
|
||||
synchronize_vcpu_pstate(vcpu, exit_code);
|
||||
synchronize_vcpu_pstate(vcpu);
|
||||
|
||||
/*
|
||||
* Some guests (e.g., protected VMs) are not be allowed to run in
|
||||
|
||||
@@ -144,7 +144,7 @@ static bool kvm_pgtable_walk_continue(const struct kvm_pgtable_walker *walker,
|
||||
* page table walk.
|
||||
*/
|
||||
if (r == -EAGAIN)
|
||||
return !(walker->flags & KVM_PGTABLE_WALK_HANDLE_FAULT);
|
||||
return walker->flags & KVM_PGTABLE_WALK_IGNORE_EAGAIN;
|
||||
|
||||
return !r;
|
||||
}
|
||||
@@ -1262,7 +1262,8 @@ int kvm_pgtable_stage2_wrprotect(struct kvm_pgtable *pgt, u64 addr, u64 size)
|
||||
{
|
||||
return stage2_update_leaf_attrs(pgt, addr, size, 0,
|
||||
KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W,
|
||||
NULL, NULL, 0);
|
||||
NULL, NULL,
|
||||
KVM_PGTABLE_WALK_IGNORE_EAGAIN);
|
||||
}
|
||||
|
||||
void kvm_pgtable_stage2_mkyoung(struct kvm_pgtable *pgt, u64 addr,
|
||||
|
||||
@@ -536,7 +536,7 @@ static const exit_handler_fn hyp_exit_handlers[] = {
|
||||
|
||||
static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||
{
|
||||
synchronize_vcpu_pstate(vcpu, exit_code);
|
||||
synchronize_vcpu_pstate(vcpu);
|
||||
|
||||
/*
|
||||
* If we were in HYP context on entry, adjust the PSTATE view
|
||||
|
||||
@@ -497,7 +497,7 @@ static int share_pfn_hyp(u64 pfn)
|
||||
this->count = 1;
|
||||
rb_link_node(&this->node, parent, node);
|
||||
rb_insert_color(&this->node, &hyp_shared_pfns);
|
||||
ret = kvm_call_hyp_nvhe(__pkvm_host_share_hyp, pfn, 1);
|
||||
ret = kvm_call_hyp_nvhe(__pkvm_host_share_hyp, pfn);
|
||||
unlock:
|
||||
mutex_unlock(&hyp_shared_pfns_lock);
|
||||
|
||||
@@ -523,7 +523,7 @@ static int unshare_pfn_hyp(u64 pfn)
|
||||
|
||||
rb_erase(&this->node, &hyp_shared_pfns);
|
||||
kfree(this);
|
||||
ret = kvm_call_hyp_nvhe(__pkvm_host_unshare_hyp, pfn, 1);
|
||||
ret = kvm_call_hyp_nvhe(__pkvm_host_unshare_hyp, pfn);
|
||||
unlock:
|
||||
mutex_unlock(&hyp_shared_pfns_lock);
|
||||
|
||||
@@ -1563,14 +1563,12 @@ static void adjust_nested_exec_perms(struct kvm *kvm,
|
||||
*prot &= ~KVM_PGTABLE_PROT_PX;
|
||||
}
|
||||
|
||||
#define KVM_PGTABLE_WALK_MEMABORT_FLAGS (KVM_PGTABLE_WALK_HANDLE_FAULT | KVM_PGTABLE_WALK_SHARED)
|
||||
|
||||
static int gmem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
||||
struct kvm_s2_trans *nested,
|
||||
struct kvm_memory_slot *memslot, bool is_perm)
|
||||
{
|
||||
bool write_fault, exec_fault, writable;
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_MEMABORT_FLAGS;
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_SHARED;
|
||||
enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
|
||||
struct kvm_pgtable *pgt = vcpu->arch.hw_mmu->pgt;
|
||||
unsigned long mmu_seq;
|
||||
@@ -1665,7 +1663,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
||||
struct kvm_pgtable *pgt;
|
||||
struct page *page;
|
||||
vm_flags_t vm_flags;
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_MEMABORT_FLAGS;
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_SHARED;
|
||||
|
||||
if (fault_is_perm)
|
||||
fault_granule = kvm_vcpu_trap_get_perm_fault_granule(vcpu);
|
||||
@@ -1933,7 +1931,7 @@ out_unlock:
|
||||
/* Resolve the access fault by making the page young again. */
|
||||
static void handle_access_fault(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa)
|
||||
{
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_HANDLE_FAULT | KVM_PGTABLE_WALK_SHARED;
|
||||
enum kvm_pgtable_walk_flags flags = KVM_PGTABLE_WALK_SHARED;
|
||||
struct kvm_s2_mmu *mmu;
|
||||
|
||||
trace_kvm_access_fault(fault_ipa);
|
||||
|
||||
@@ -4668,7 +4668,10 @@ static void perform_access(struct kvm_vcpu *vcpu,
|
||||
* that we don't know how to handle. This certainly qualifies
|
||||
* as a gross bug that should be fixed right away.
|
||||
*/
|
||||
BUG_ON(!r->access);
|
||||
if (!r->access) {
|
||||
bad_trap(vcpu, params, r, "register access");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Skip instruction if instructed so */
|
||||
if (likely(r->access(vcpu, params, r)))
|
||||
|
||||
@@ -296,3 +296,31 @@ void kvm_compute_final_ctr_el0(struct alt_instr *alt,
|
||||
generate_mov_q(read_sanitised_ftr_reg(SYS_CTR_EL0),
|
||||
origptr, updptr, nr_inst);
|
||||
}
|
||||
|
||||
void kvm_pan_patch_el2_entry(struct alt_instr *alt,
|
||||
__le32 *origptr, __le32 *updptr, int nr_inst)
|
||||
{
|
||||
/*
|
||||
* If we're running at EL1 without hVHE, then SCTLR_EL2.SPAN means
|
||||
* nothing to us (it is RES1), and we don't need to set PSTATE.PAN
|
||||
* to anything useful.
|
||||
*/
|
||||
if (!is_kernel_in_hyp_mode() && !cpus_have_cap(ARM64_KVM_HVHE))
|
||||
return;
|
||||
|
||||
/*
|
||||
* Leap of faith: at this point, we must be running VHE one way or
|
||||
* another, and FEAT_PAN is required to be implemented. If KVM
|
||||
* explodes at runtime because your system does not abide by this
|
||||
* requirement, call your favourite HW vendor, they have screwed up.
|
||||
*
|
||||
* We don't expect hVHE to access any userspace mapping, so always
|
||||
* set PSTATE.PAN on enty. Same thing if we have PAN enabled on an
|
||||
* EL2 kernel. Only force it to 0 if we have not configured PAN in
|
||||
* the kernel (and you know this is really silly).
|
||||
*/
|
||||
if (cpus_have_cap(ARM64_KVM_HVHE) || IS_ENABLED(CONFIG_ARM64_PAN))
|
||||
*updptr = cpu_to_le32(ENCODE_PSTATE(1, PAN));
|
||||
else
|
||||
*updptr = cpu_to_le32(ENCODE_PSTATE(0, PAN));
|
||||
}
|
||||
|
||||
@@ -723,7 +723,7 @@ static struct page *kvmppc_uvmem_get_page(unsigned long gpa, struct kvm *kvm)
|
||||
|
||||
dpage = pfn_to_page(uvmem_pfn);
|
||||
dpage->zone_device_data = pvt;
|
||||
zone_device_page_init(dpage, 0);
|
||||
zone_device_page_init(dpage, &kvmppc_uvmem_pgmap, 0);
|
||||
return dpage;
|
||||
out_clear:
|
||||
spin_lock(&kvmppc_uvmem_bitmap_lock);
|
||||
|
||||
@@ -84,6 +84,7 @@ config ERRATA_STARFIVE_JH7100
|
||||
select DMA_GLOBAL_POOL
|
||||
select RISCV_DMA_NONCOHERENT
|
||||
select RISCV_NONSTANDARD_CACHE_OPS
|
||||
select CACHEMAINT_FOR_DMA
|
||||
select SIFIVE_CCACHE
|
||||
default n
|
||||
help
|
||||
|
||||
@@ -75,26 +75,12 @@ static u32 __init_or_module sifive_errata_probe(unsigned long archid,
|
||||
return cpu_req_errata;
|
||||
}
|
||||
|
||||
static void __init_or_module warn_miss_errata(u32 miss_errata)
|
||||
{
|
||||
int i;
|
||||
|
||||
pr_warn("----------------------------------------------------------------\n");
|
||||
pr_warn("WARNING: Missing the following errata may cause potential issues\n");
|
||||
for (i = 0; i < ERRATA_SIFIVE_NUMBER; i++)
|
||||
if (miss_errata & 0x1 << i)
|
||||
pr_warn("\tSiFive Errata[%d]:%s\n", i, errata_list[i].name);
|
||||
pr_warn("Please enable the corresponding Kconfig to apply them\n");
|
||||
pr_warn("----------------------------------------------------------------\n");
|
||||
}
|
||||
|
||||
void sifive_errata_patch_func(struct alt_entry *begin, struct alt_entry *end,
|
||||
unsigned long archid, unsigned long impid,
|
||||
unsigned int stage)
|
||||
{
|
||||
struct alt_entry *alt;
|
||||
u32 cpu_req_errata;
|
||||
u32 cpu_apply_errata = 0;
|
||||
u32 tmp;
|
||||
|
||||
BUILD_BUG_ON(ERRATA_SIFIVE_NUMBER >= RISCV_VENDOR_EXT_ALTERNATIVES_BASE);
|
||||
@@ -118,10 +104,6 @@ void sifive_errata_patch_func(struct alt_entry *begin, struct alt_entry *end,
|
||||
patch_text_nosync(ALT_OLD_PTR(alt), ALT_ALT_PTR(alt),
|
||||
alt->alt_len);
|
||||
mutex_unlock(&text_mutex);
|
||||
cpu_apply_errata |= tmp;
|
||||
}
|
||||
}
|
||||
if (stage != RISCV_ALTERNATIVES_MODULE &&
|
||||
cpu_apply_errata != cpu_req_errata)
|
||||
warn_miss_errata(cpu_req_errata - cpu_apply_errata);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#ifndef __ASM_COMPAT_H
|
||||
#define __ASM_COMPAT_H
|
||||
|
||||
#define COMPAT_UTS_MACHINE "riscv\0\0"
|
||||
#define COMPAT_UTS_MACHINE "riscv32\0\0"
|
||||
|
||||
/*
|
||||
* Architecture specific compatibility types
|
||||
|
||||
@@ -20,7 +20,7 @@ extern void * const sys_call_table[];
|
||||
extern void * const compat_sys_call_table[];
|
||||
|
||||
/*
|
||||
* Only the low 32 bits of orig_r0 are meaningful, so we return int.
|
||||
* Only the low 32 bits of orig_a0 are meaningful, so we return int.
|
||||
* This importantly ignores the high bits on 64-bit, so comparisons
|
||||
* sign-extend the low 32 bits.
|
||||
*/
|
||||
|
||||
@@ -97,13 +97,23 @@ static inline unsigned long __untagged_addr_remote(struct mm_struct *mm, unsigne
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
|
||||
/*
|
||||
* Use a temporary variable for the output of the asm goto to avoid a
|
||||
* triggering an LLVM assertion due to sign extending the output when
|
||||
* it is used in later function calls:
|
||||
* https://github.com/llvm/llvm-project/issues/143795
|
||||
*/
|
||||
#define __get_user_asm(insn, x, ptr, label) \
|
||||
do { \
|
||||
u64 __tmp; \
|
||||
asm_goto_output( \
|
||||
"1:\n" \
|
||||
" " insn " %0, %1\n" \
|
||||
_ASM_EXTABLE_UACCESS_ERR(1b, %l2, %0) \
|
||||
: "=&r" (x) \
|
||||
: "m" (*(ptr)) : : label)
|
||||
: "=&r" (__tmp) \
|
||||
: "m" (*(ptr)) : : label); \
|
||||
(x) = (__typeof__(x))(unsigned long)__tmp; \
|
||||
} while (0)
|
||||
#else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
|
||||
#define __get_user_asm(insn, x, ptr, label) \
|
||||
do { \
|
||||
|
||||
@@ -145,14 +145,14 @@ struct arch_ext_priv {
|
||||
long (*save)(struct pt_regs *regs, void __user *sc_vec);
|
||||
};
|
||||
|
||||
struct arch_ext_priv arch_ext_list[] = {
|
||||
static struct arch_ext_priv arch_ext_list[] = {
|
||||
{
|
||||
.magic = RISCV_V_MAGIC,
|
||||
.save = &save_v_state,
|
||||
},
|
||||
};
|
||||
|
||||
const size_t nr_arch_exts = ARRAY_SIZE(arch_ext_list);
|
||||
static const size_t nr_arch_exts = ARRAY_SIZE(arch_ext_list);
|
||||
|
||||
static long restore_sigcontext(struct pt_regs *regs,
|
||||
struct sigcontext __user *sc)
|
||||
@@ -297,7 +297,7 @@ static long setup_sigcontext(struct rt_sigframe __user *frame,
|
||||
} else {
|
||||
err |= __put_user(arch_ext->magic, &sc_ext_ptr->magic);
|
||||
err |= __put_user(ext_size, &sc_ext_ptr->size);
|
||||
sc_ext_ptr = (void *)sc_ext_ptr + ext_size;
|
||||
sc_ext_ptr = (void __user *)sc_ext_ptr + ext_size;
|
||||
}
|
||||
}
|
||||
/* Write zero to fp-reserved space and check it on restore_sigcontext */
|
||||
|
||||
@@ -51,10 +51,11 @@ void suspend_restore_csrs(struct suspend_context *context)
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
if (riscv_has_extension_unlikely(RISCV_ISA_EXT_SSTC)) {
|
||||
csr_write(CSR_STIMECMP, context->stimecmp);
|
||||
#if __riscv_xlen < 64
|
||||
csr_write(CSR_STIMECMP, ULONG_MAX);
|
||||
csr_write(CSR_STIMECMPH, context->stimecmph);
|
||||
#endif
|
||||
csr_write(CSR_STIMECMP, context->stimecmp);
|
||||
}
|
||||
|
||||
csr_write(CSR_SATP, context->satp);
|
||||
|
||||
@@ -72,8 +72,9 @@ static int kvm_riscv_vcpu_timer_cancel(struct kvm_vcpu_timer *t)
|
||||
static int kvm_riscv_vcpu_update_vstimecmp(struct kvm_vcpu *vcpu, u64 ncycles)
|
||||
{
|
||||
#if defined(CONFIG_32BIT)
|
||||
ncsr_write(CSR_VSTIMECMP, ncycles & 0xFFFFFFFF);
|
||||
ncsr_write(CSR_VSTIMECMP, ULONG_MAX);
|
||||
ncsr_write(CSR_VSTIMECMPH, ncycles >> 32);
|
||||
ncsr_write(CSR_VSTIMECMP, (u32)ncycles);
|
||||
#else
|
||||
ncsr_write(CSR_VSTIMECMP, ncycles);
|
||||
#endif
|
||||
@@ -307,8 +308,9 @@ void kvm_riscv_vcpu_timer_restore(struct kvm_vcpu *vcpu)
|
||||
return;
|
||||
|
||||
#if defined(CONFIG_32BIT)
|
||||
ncsr_write(CSR_VSTIMECMP, (u32)t->next_cycles);
|
||||
ncsr_write(CSR_VSTIMECMP, ULONG_MAX);
|
||||
ncsr_write(CSR_VSTIMECMPH, (u32)(t->next_cycles >> 32));
|
||||
ncsr_write(CSR_VSTIMECMP, (u32)(t->next_cycles));
|
||||
#else
|
||||
ncsr_write(CSR_VSTIMECMP, t->next_cycles);
|
||||
#endif
|
||||
|
||||
@@ -137,6 +137,15 @@ SECTIONS
|
||||
}
|
||||
_end = .;
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
COMMON_DISCARDS
|
||||
*(.eh_frame)
|
||||
*(*__ksymtab*)
|
||||
*(___kcrctab*)
|
||||
*(.modinfo)
|
||||
}
|
||||
|
||||
DWARF_DEBUG
|
||||
ELF_DETAILS
|
||||
|
||||
@@ -161,12 +170,4 @@ SECTIONS
|
||||
*(.rela.*) *(.rela_*)
|
||||
}
|
||||
ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
COMMON_DISCARDS
|
||||
*(.eh_frame)
|
||||
*(*__ksymtab*)
|
||||
*(___kcrctab*)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ KBUILD_CFLAGS_VDSO := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAG
|
||||
KBUILD_CFLAGS_VDSO := $(filter-out -munaligned-symbols,$(KBUILD_CFLAGS_VDSO))
|
||||
KBUILD_CFLAGS_VDSO := $(filter-out -fno-asynchronous-unwind-tables,$(KBUILD_CFLAGS_VDSO))
|
||||
KBUILD_CFLAGS_VDSO += -fPIC -fno-common -fno-builtin -fasynchronous-unwind-tables
|
||||
KBUILD_CFLAGS_VDSO += -fno-stack-protector
|
||||
KBUILD_CFLAGS_VDSO += -fno-stack-protector $(DISABLE_KSTACK_ERASE)
|
||||
ldflags-y := -shared -soname=linux-vdso.so.1 \
|
||||
--hash-style=both --build-id=sha1 -T
|
||||
|
||||
|
||||
@@ -1574,13 +1574,22 @@ static inline bool intel_pmu_has_bts_period(struct perf_event *event, u64 period
|
||||
struct hw_perf_event *hwc = &event->hw;
|
||||
unsigned int hw_event, bts_event;
|
||||
|
||||
if (event->attr.freq)
|
||||
/*
|
||||
* Only use BTS for fixed rate period==1 events.
|
||||
*/
|
||||
if (event->attr.freq || period != 1)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* BTS doesn't virtualize.
|
||||
*/
|
||||
if (event->attr.exclude_host)
|
||||
return false;
|
||||
|
||||
hw_event = hwc->config & INTEL_ARCH_EVENT_MASK;
|
||||
bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS);
|
||||
|
||||
return hw_event == bts_event && period == 1;
|
||||
return hw_event == bts_event;
|
||||
}
|
||||
|
||||
static inline bool intel_pmu_has_bts(struct perf_event *event)
|
||||
|
||||
@@ -42,10 +42,34 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
|
||||
{
|
||||
unsigned int level;
|
||||
pte_t *pte = lookup_address(addr, &level);
|
||||
pteval_t val;
|
||||
|
||||
if (WARN_ON(!pte || level != PG_LEVEL_4K))
|
||||
return false;
|
||||
|
||||
val = pte_val(*pte);
|
||||
|
||||
/*
|
||||
* protect requires making the page not-present. If the PTE is
|
||||
* already in the right state, there's nothing to do.
|
||||
*/
|
||||
if (protect != !!(val & _PAGE_PRESENT))
|
||||
return true;
|
||||
|
||||
/*
|
||||
* Otherwise, invert the entire PTE. This avoids writing out an
|
||||
* L1TF-vulnerable PTE (not present, without the high address bits
|
||||
* set).
|
||||
*/
|
||||
set_pte(pte, __pte(~val));
|
||||
|
||||
/*
|
||||
* If the page was protected (non-present) and we're making it
|
||||
* present, there is no need to flush the TLB at all.
|
||||
*/
|
||||
if (!protect)
|
||||
return true;
|
||||
|
||||
/*
|
||||
* We need to avoid IPIs, as we may get KFENCE allocations or faults
|
||||
* with interrupts disabled. Therefore, the below is best-effort, and
|
||||
@@ -53,11 +77,6 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
|
||||
* lazy fault handling takes care of faults after the page is PRESENT.
|
||||
*/
|
||||
|
||||
if (protect)
|
||||
set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT));
|
||||
else
|
||||
set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT));
|
||||
|
||||
/*
|
||||
* Flush this CPU's TLB, assuming whoever did the allocation/free is
|
||||
* likely to continue running on this CPU.
|
||||
|
||||
@@ -821,8 +821,6 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
|
||||
force_sig_pkuerr((void __user *)address, pkey);
|
||||
else
|
||||
force_sig_fault(SIGSEGV, si_code, (void __user *)address);
|
||||
|
||||
local_irq_disable();
|
||||
}
|
||||
|
||||
static noinline void
|
||||
@@ -1474,15 +1472,12 @@ handle_page_fault(struct pt_regs *regs, unsigned long error_code,
|
||||
do_kern_addr_fault(regs, error_code, address);
|
||||
} else {
|
||||
do_user_addr_fault(regs, error_code, address);
|
||||
/*
|
||||
* User address page fault handling might have reenabled
|
||||
* interrupts. Fixing up all potential exit points of
|
||||
* do_user_addr_fault() and its leaf functions is just not
|
||||
* doable w/o creating an unholy mess or turning the code
|
||||
* upside down.
|
||||
*/
|
||||
local_irq_disable();
|
||||
}
|
||||
/*
|
||||
* page fault handling might have reenabled interrupts,
|
||||
* make sure to disable them again.
|
||||
*/
|
||||
local_irq_disable();
|
||||
}
|
||||
|
||||
DEFINE_IDTENTRY_RAW_ERRORCODE(exc_page_fault)
|
||||
|
||||
@@ -1480,7 +1480,7 @@ EXPORT_SYMBOL_GPL(blk_rq_is_poll);
|
||||
static void blk_rq_poll_completion(struct request *rq, struct completion *wait)
|
||||
{
|
||||
do {
|
||||
blk_hctx_poll(rq->q, rq->mq_hctx, NULL, 0);
|
||||
blk_hctx_poll(rq->q, rq->mq_hctx, NULL, BLK_POLL_ONESHOT);
|
||||
cond_resched();
|
||||
} while (!completion_done(wait));
|
||||
}
|
||||
|
||||
@@ -1957,6 +1957,7 @@ static int disk_update_zone_resources(struct gendisk *disk,
|
||||
|
||||
disk->nr_zones = args->nr_zones;
|
||||
if (args->nr_conv_zones >= disk->nr_zones) {
|
||||
queue_limits_cancel_update(q);
|
||||
pr_warn("%s: Invalid number of conventional zones %u / %u\n",
|
||||
disk->disk_name, args->nr_conv_zones, disk->nr_zones);
|
||||
ret = -ENODEV;
|
||||
|
||||
@@ -169,6 +169,9 @@ static int crypto_authenc_esn_encrypt(struct aead_request *req)
|
||||
struct scatterlist *src, *dst;
|
||||
int err;
|
||||
|
||||
if (assoclen < 8)
|
||||
return -EINVAL;
|
||||
|
||||
sg_init_table(areq_ctx->src, 2);
|
||||
src = scatterwalk_ffwd(areq_ctx->src, req->src, assoclen);
|
||||
dst = src;
|
||||
@@ -256,6 +259,9 @@ static int crypto_authenc_esn_decrypt(struct aead_request *req)
|
||||
u32 tmp[2];
|
||||
int err;
|
||||
|
||||
if (assoclen < 8)
|
||||
return -EINVAL;
|
||||
|
||||
cryptlen -= authsize;
|
||||
|
||||
if (req->src != dst)
|
||||
|
||||
@@ -2094,13 +2094,13 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (ap->flags & ATA_FLAG_EM)
|
||||
ap->em_message_type = hpriv->em_msg_type;
|
||||
|
||||
ahci_mark_external_port(ap);
|
||||
|
||||
ahci_update_initial_lpm_policy(ap);
|
||||
|
||||
/* disabled/not-implemented port */
|
||||
if (!(hpriv->port_map & (1 << i)))
|
||||
if (!(hpriv->port_map & (1 << i))) {
|
||||
ap->ops = &ata_dummy_port_ops;
|
||||
} else {
|
||||
ahci_mark_external_port(ap);
|
||||
ahci_update_initial_lpm_policy(ap);
|
||||
}
|
||||
}
|
||||
|
||||
/* apply workaround for ASUS P5W DH Deluxe mainboard */
|
||||
|
||||
@@ -2872,7 +2872,8 @@ static void ata_dev_config_lpm(struct ata_device *dev)
|
||||
|
||||
static void ata_dev_print_features(struct ata_device *dev)
|
||||
{
|
||||
if (!(dev->flags & ATA_DFLAG_FEATURES_MASK))
|
||||
if (!(dev->flags & ATA_DFLAG_FEATURES_MASK) && !dev->cpr_log &&
|
||||
!ata_id_has_hipm(dev->id) && !ata_id_has_dipm(dev->id))
|
||||
return;
|
||||
|
||||
ata_dev_info(dev,
|
||||
@@ -3116,6 +3117,11 @@ int ata_dev_configure(struct ata_device *dev)
|
||||
ata_mode_string(xfer_mask),
|
||||
cdb_intr_string, atapi_an_string,
|
||||
dma_dir_string);
|
||||
|
||||
ata_dev_config_lpm(dev);
|
||||
|
||||
if (print_info)
|
||||
ata_dev_print_features(dev);
|
||||
}
|
||||
|
||||
/* determine max_sectors */
|
||||
|
||||
@@ -909,7 +909,7 @@ static bool ata_scsi_lpm_supported(struct ata_port *ap)
|
||||
struct ata_link *link;
|
||||
struct ata_device *dev;
|
||||
|
||||
if (ap->flags & ATA_FLAG_NO_LPM)
|
||||
if ((ap->flags & ATA_FLAG_NO_LPM) || !ap->ops->set_lpm)
|
||||
return false;
|
||||
|
||||
ata_for_each_link(link, ap, EDGE) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user