Merge d934aef6bb ("Merge tag 'dmaengine-6.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine") into android-mainline
Steps on the way to 6.7-rc1 Change-Id: Ia0841f9588ef5f6e8d9be220c14493bfc0a8d53b Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -270,6 +270,12 @@ Description: Shows the operation capability bits displayed in bitmap format
|
||||
correlates to the operations allowed. It's visible only
|
||||
on platforms that support the capability.
|
||||
|
||||
What: /sys/bus/dsa/devices/wq<m>.<n>/driver_name
|
||||
Date: Sept 8, 2023
|
||||
KernelVersion: 6.7.0
|
||||
Contact: dmaengine@vger.kernel.org
|
||||
Description: Name of driver to be bounded to the wq.
|
||||
|
||||
What: /sys/bus/dsa/devices/engine<m>.<n>/group_id
|
||||
Date: Oct 25, 2019
|
||||
KernelVersion: 5.6.0
|
||||
|
||||
@@ -35,4 +35,6 @@ Description:
|
||||
req_number the number of pre-allocated requests
|
||||
for both capture and playback
|
||||
function_name name of the interface
|
||||
c_terminal_type code of the capture terminal type
|
||||
p_terminal_type code of the playback terminal type
|
||||
===================== =======================================
|
||||
|
||||
@@ -313,6 +313,15 @@ Description:
|
||||
Inter-Chip SSIC devices support asymmetric lanes up to 4 lanes per
|
||||
direction. Devices before USB 3.2 are single lane (tx_lanes = 1)
|
||||
|
||||
What: /sys/bus/usb/devices/.../typec
|
||||
Date: November 2023
|
||||
Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
|
||||
Description:
|
||||
Symlink to the USB Type-C partner device. USB Type-C partner
|
||||
represents the component that communicates over the
|
||||
Configuration Channel (CC signal on USB Type-C connectors and
|
||||
cables) with the local port.
|
||||
|
||||
What: /sys/bus/usb/devices/usbX/bAlternateSetting
|
||||
Description:
|
||||
The current interface alternate setting number, in decimal.
|
||||
|
||||
@@ -124,6 +124,13 @@ Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
|
||||
Description:
|
||||
The voltage the supply supports in millivolts.
|
||||
|
||||
What: /sys/class/usb_power_delivery/.../source-capabilities/<position>:fixed_supply/peak_current
|
||||
Date: October 2023
|
||||
Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
|
||||
Description:
|
||||
This file shows the value of the Fixed Power Source Peak Current
|
||||
Capability field.
|
||||
|
||||
What: /sys/class/usb_power_delivery/.../source-capabilities/<position>:fixed_supply/maximum_current
|
||||
Date: May 2022
|
||||
Contact: Heikki Krogerus <heikki.krogerus@linux.intel.com>
|
||||
|
||||
@@ -87,19 +87,22 @@ What: /sys/class/tty/ttyS<x>/close_delay
|
||||
Date: October 2012
|
||||
Contact: Alan Cox <alan@linux.intel.com>
|
||||
Description:
|
||||
Show the closing delay time for this port in ms.
|
||||
Show the closing delay time for this port in centiseconds.
|
||||
|
||||
These sysfs values expose the TIOCGSERIAL interface via
|
||||
sysfs rather than via ioctls.
|
||||
These sysfs values expose the TIOCGSERIAL interface via
|
||||
sysfs rather than via ioctls.
|
||||
|
||||
What: /sys/class/tty/ttyS<x>/closing_wait
|
||||
Date: October 2012
|
||||
Contact: Alan Cox <alan@linux.intel.com>
|
||||
Description:
|
||||
Show the close wait time for this port in ms.
|
||||
Show the close wait time for this port in centiseconds.
|
||||
|
||||
These sysfs values expose the TIOCGSERIAL interface via
|
||||
sysfs rather than via ioctls.
|
||||
Waiting forever is represented as 0. If waiting on close is
|
||||
disabled then the value is 65535.
|
||||
|
||||
These sysfs values expose the TIOCGSERIAL interface via
|
||||
sysfs rather than via ioctls.
|
||||
|
||||
What: /sys/class/tty/ttyS<x>/custom_divisor
|
||||
Date: October 2012
|
||||
|
||||
@@ -69,6 +69,8 @@ properties:
|
||||
dma-channel-mask:
|
||||
maxItems: 1
|
||||
|
||||
dma-coherent: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
@@ -20,6 +20,7 @@ properties:
|
||||
- qcom,qcm2290-qmp-usb3-phy
|
||||
- qcom,sa8775p-qmp-usb3-uni-phy
|
||||
- qcom,sc8280xp-qmp-usb3-uni-phy
|
||||
- qcom,sdx75-qmp-usb3-uni-phy
|
||||
- qcom,sm6115-qmp-usb3-phy
|
||||
|
||||
reg:
|
||||
@@ -75,6 +76,7 @@ allOf:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,ipq9574-qmp-usb3-phy
|
||||
- qcom,sdx75-qmp-usb3-uni-phy
|
||||
then:
|
||||
properties:
|
||||
clock-names:
|
||||
|
||||
@@ -14,7 +14,12 @@ description:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,sm8550-snps-eusb2-phy
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- qcom,sdx75-snps-eusb2-phy
|
||||
- const: qcom,sm8550-snps-eusb2-phy
|
||||
- const: qcom,sm8550-snps-eusb2-phy
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/esp,esp32-acm.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: ESP32S3 ACM gadget controller
|
||||
|
||||
maintainers:
|
||||
- Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
description:
|
||||
Fixed function USB CDC-ACM gadget controller of the Espressif ESP32S3 SoC.
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: esp,esp32s3-acm
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
serial@60038000 {
|
||||
compatible = "esp,esp32s3-acm";
|
||||
reg = <0x60038000 0x1000>;
|
||||
interrupts = <96 3 0>;
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/esp,esp32-uart.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: ESP32xx UART controllers
|
||||
|
||||
maintainers:
|
||||
- Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
description:
|
||||
ESP32 UART controller is a part of the ESP32 SoC.
|
||||
ESP32S3 UART controller is a part of the ESP32S3 SoC.
|
||||
Both SoCs are produced by Espressif Systems Co. Ltd.
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- esp,esp32-uart
|
||||
- esp,esp32s3-uart
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
serial@60000000 {
|
||||
compatible = "esp,esp32s3-uart";
|
||||
reg = <0x60000000 0x80>;
|
||||
interrupts = <27 1 0>;
|
||||
clocks = <&serial_clk>;
|
||||
};
|
||||
@@ -70,6 +70,8 @@ properties:
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
wakeup-source: true
|
||||
|
||||
fsl,dte-mode:
|
||||
$ref: /schemas/types.yaml#/definitions/flag
|
||||
description: |
|
||||
|
||||
@@ -14,10 +14,13 @@ allOf:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- fsl,imx23-auart
|
||||
- fsl,imx28-auart
|
||||
- alphascale,asm9260-auart
|
||||
oneOf:
|
||||
- const: fsl,imx23-auart
|
||||
- const: alphascale,asm9260-auart
|
||||
- items:
|
||||
- enum:
|
||||
- fsl,imx28-auart
|
||||
- const: fsl,imx23-auart
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -82,7 +85,7 @@ examples:
|
||||
};
|
||||
|
||||
auart0: serial@8006a000 {
|
||||
compatible = "fsl,imx28-auart";
|
||||
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
|
||||
reg = <0x8006a000 0x2000>;
|
||||
interrupts = <112>;
|
||||
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
* Maxim MAX310X advanced Universal Asynchronous Receiver-Transmitter (UART)
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of the following:
|
||||
- "maxim,max3107" for Maxim MAX3107,
|
||||
- "maxim,max3108" for Maxim MAX3108,
|
||||
- "maxim,max3109" for Maxim MAX3109,
|
||||
- "maxim,max14830" for Maxim MAX14830.
|
||||
- reg: SPI chip select number.
|
||||
- interrupts: Specifies the interrupt source of the parent interrupt
|
||||
controller. The format of the interrupt specifier depends on the
|
||||
parent interrupt controller.
|
||||
- clocks: phandle to the IC source clock.
|
||||
- clock-names: Should be "xtal" if clock is an external crystal or
|
||||
"osc" if an external clock source is used.
|
||||
|
||||
Optional properties:
|
||||
- gpio-controller: Marks the device node as a GPIO controller.
|
||||
- #gpio-cells: Should be two. The first cell is the GPIO number and
|
||||
the second cell is used to specify the GPIO polarity:
|
||||
0 = active high,
|
||||
1 = active low.
|
||||
|
||||
Example:
|
||||
|
||||
/ {
|
||||
clocks {
|
||||
spi_uart_clk: osc_max14830 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <3686400>;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
max14830: max14830@0 {
|
||||
compatible = "maxim,max14830";
|
||||
reg = <0>;
|
||||
clocks = <&spi_uart_clk>;
|
||||
clock-names = "osc";
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,74 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/maxim,max310x.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Maxim MAX310X Advanced Universal Asynchronous Receiver-Transmitter (UART)
|
||||
|
||||
maintainers:
|
||||
- Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- maxim,max3107
|
||||
- maxim,max3108
|
||||
- maxim,max3109
|
||||
- maxim,max14830
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
enum:
|
||||
- xtal # External crystal
|
||||
- osc # External clock source
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
"#gpio-cells":
|
||||
const: 2
|
||||
|
||||
gpio-line-names:
|
||||
minItems: 1
|
||||
maxItems: 16
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/spi/spi-peripheral-props.yaml#
|
||||
- $ref: /schemas/serial/serial.yaml#
|
||||
- $ref: /schemas/serial/rs485.yaml#
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
serial@2c {
|
||||
compatible = "maxim,max3107";
|
||||
reg = <0x2c>;
|
||||
clocks = <&xtal4m>;
|
||||
clock-names = "xtal";
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
@@ -91,11 +91,6 @@ properties:
|
||||
- description: range upper bound
|
||||
- description: adjustment (in permyriad, i.e. 0.01%)
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
@@ -106,6 +101,11 @@ required:
|
||||
- dmas
|
||||
- dma-names
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/tegra30-car.h>
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
* NXP SC16IS7xx advanced Universal Asynchronous Receiver-Transmitter (UART)
|
||||
* i2c as bus
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of the following:
|
||||
- "nxp,sc16is740" for NXP SC16IS740,
|
||||
- "nxp,sc16is741" for NXP SC16IS741,
|
||||
- "nxp,sc16is750" for NXP SC16IS750,
|
||||
- "nxp,sc16is752" for NXP SC16IS752,
|
||||
- "nxp,sc16is760" for NXP SC16IS760,
|
||||
- "nxp,sc16is762" for NXP SC16IS762.
|
||||
- reg: I2C address of the SC16IS7xx device.
|
||||
- interrupts: Should contain the UART interrupt
|
||||
- clocks: Reference to the IC source clock.
|
||||
OR (when there is no clock provider visible to the platform)
|
||||
- clock-frequency: The source clock frequency for the IC.
|
||||
|
||||
Optional properties:
|
||||
- gpio-controller: Marks the device node as a GPIO controller.
|
||||
- #gpio-cells: Should be two. The first cell is the GPIO number and
|
||||
the second cell is used to specify the GPIO polarity:
|
||||
0 = active high,
|
||||
1 = active low.
|
||||
- irda-mode-ports: An array that lists the indices of the port that
|
||||
should operate in IrDA mode.
|
||||
- nxp,modem-control-line-ports: An array that lists the indices of the port that
|
||||
should have shared GPIO lines configured as
|
||||
modem control lines.
|
||||
|
||||
Example:
|
||||
sc16is750: sc16is750@51 {
|
||||
compatible = "nxp,sc16is750";
|
||||
reg = <0x51>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@53 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x53>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */
|
||||
gpio-controller; /* Port 0 as GPIOs */
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@54 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x54>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */
|
||||
};
|
||||
|
||||
* spi as bus
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of the following:
|
||||
- "nxp,sc16is740" for NXP SC16IS740,
|
||||
- "nxp,sc16is741" for NXP SC16IS741,
|
||||
- "nxp,sc16is750" for NXP SC16IS750,
|
||||
- "nxp,sc16is752" for NXP SC16IS752,
|
||||
- "nxp,sc16is760" for NXP SC16IS760,
|
||||
- "nxp,sc16is762" for NXP SC16IS762.
|
||||
- reg: SPI chip select number.
|
||||
- interrupts: Specifies the interrupt source of the parent interrupt
|
||||
controller. The format of the interrupt specifier depends on the
|
||||
parent interrupt controller.
|
||||
- clocks: phandle to the IC source clock.
|
||||
|
||||
Optional properties:
|
||||
- gpio-controller: Marks the device node as a GPIO controller.
|
||||
- #gpio-cells: Should be two. The first cell is the GPIO number and
|
||||
the second cell is used to specify the GPIO polarity:
|
||||
0 = active high,
|
||||
1 = active low.
|
||||
- irda-mode-ports: An array that lists the indices of the port that
|
||||
should operate in IrDA mode.
|
||||
- nxp,modem-control-line-ports: An array that lists the indices of the port that
|
||||
should have shared GPIO lines configured as
|
||||
modem control lines.
|
||||
|
||||
Example:
|
||||
sc16is750: sc16is750@0 {
|
||||
compatible = "nxp,sc16is750";
|
||||
reg = <0>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@1 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <1>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */
|
||||
gpio-controller; /* Port 0 as GPIOs */
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
sc16is752: sc16is752@2 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <2>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */
|
||||
};
|
||||
@@ -0,0 +1,127 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/nxp,sc16is7xx.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: NXP SC16IS7xx Advanced Universal Asynchronous Receiver-Transmitter (UART)
|
||||
|
||||
maintainers:
|
||||
- Hugo Villeneuve <hvilleneuve@dimonoff.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- nxp,sc16is740
|
||||
- nxp,sc16is741
|
||||
- nxp,sc16is750
|
||||
- nxp,sc16is752
|
||||
- nxp,sc16is760
|
||||
- nxp,sc16is762
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-frequency:
|
||||
description:
|
||||
When there is no clock provider visible to the platform, this
|
||||
is the source crystal or external clock frequency for the IC in Hz.
|
||||
minimum: 1
|
||||
maximum: 80000000
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
"#gpio-cells":
|
||||
const: 2
|
||||
|
||||
gpio-line-names:
|
||||
minItems: 1
|
||||
maxItems: 8
|
||||
|
||||
irda-mode-ports:
|
||||
description: |
|
||||
An array that lists the indices of the port that should operate in IrDA
|
||||
mode:
|
||||
0: port A
|
||||
1: port B
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
items:
|
||||
minimum: 0
|
||||
maximum: 1
|
||||
|
||||
nxp,modem-control-line-ports:
|
||||
description: |
|
||||
An array that lists the indices of the port that should have shared GPIO
|
||||
lines configured as modem control lines:
|
||||
0: port A
|
||||
1: port B
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
items:
|
||||
minimum: 0
|
||||
maximum: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/spi/spi-peripheral-props.yaml#
|
||||
- $ref: /schemas/serial/serial.yaml#
|
||||
- $ref: /schemas/serial/rs485.yaml#
|
||||
|
||||
oneOf:
|
||||
- required:
|
||||
- clocks
|
||||
- required:
|
||||
- clock-frequency
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
serial@51 {
|
||||
compatible = "nxp,sc16is750";
|
||||
reg = <0x51>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
serial@53 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x53>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */
|
||||
gpio-controller; /* Port 0 as GPIOs */
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
serial@54 {
|
||||
compatible = "nxp,sc16is752";
|
||||
reg = <0x54>;
|
||||
clocks = <&clk20m>;
|
||||
interrupt-parent = <&gpio3>;
|
||||
interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
|
||||
nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */
|
||||
};
|
||||
};
|
||||
@@ -40,11 +40,11 @@ required:
|
||||
- interrupts
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/serial/serial.yaml#
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
serial@a9c00000 {
|
||||
|
||||
@@ -78,8 +78,6 @@ required:
|
||||
- interrupts
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/serial/serial.yaml#
|
||||
|
||||
@@ -97,6 +95,8 @@ allOf:
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
|
||||
@@ -38,6 +38,13 @@ properties:
|
||||
- const: sclk
|
||||
- const: pclk
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml#
|
||||
|
||||
@@ -53,13 +60,6 @@ allOf:
|
||||
clock-names:
|
||||
minItems: 2
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
@@ -111,8 +111,6 @@ required:
|
||||
- clock-names
|
||||
- power-domains
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
@@ -125,6 +123,8 @@ then:
|
||||
required:
|
||||
- resets
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/r8a7795-cpg-mssr.h>
|
||||
|
||||
@@ -79,6 +79,7 @@ properties:
|
||||
- enum:
|
||||
- renesas,scif-r9a07g043 # RZ/G2UL and RZ/Five
|
||||
- renesas,scif-r9a07g054 # RZ/V2L
|
||||
- renesas,scif-r9a08g045 # RZ/G3S
|
||||
- const: renesas,scif-r9a07g044 # RZ/G2{L,LC} fallback
|
||||
|
||||
reg:
|
||||
|
||||
@@ -77,8 +77,6 @@ required:
|
||||
- clock-names
|
||||
- power-domains
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
@@ -89,6 +87,8 @@ then:
|
||||
required:
|
||||
- resets
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/r8a7790-cpg-mssr.h>
|
||||
|
||||
@@ -77,8 +77,6 @@ required:
|
||||
- clock-names
|
||||
- power-domains
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
if:
|
||||
properties:
|
||||
compatible:
|
||||
@@ -89,6 +87,8 @@ then:
|
||||
required:
|
||||
- resets
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/r8a7740-clock.h>
|
||||
|
||||
@@ -29,6 +29,10 @@ properties:
|
||||
default: 0
|
||||
maximum: 100
|
||||
|
||||
rs485-rts-active-high:
|
||||
description: drive RTS high when sending (this is the default).
|
||||
$ref: /schemas/types.yaml#/definitions/flag
|
||||
|
||||
rs485-rts-active-low:
|
||||
description: drive RTS low when sending (default is high).
|
||||
$ref: /schemas/types.yaml#/definitions/flag
|
||||
|
||||
@@ -24,9 +24,6 @@ properties:
|
||||
- enum:
|
||||
- apple,s5l-uart
|
||||
- axis,artpec8-uart
|
||||
- samsung,s3c2410-uart
|
||||
- samsung,s3c2412-uart
|
||||
- samsung,s3c2440-uart
|
||||
- samsung,s3c6400-uart
|
||||
- samsung,s5pv210-uart
|
||||
- samsung,exynos4210-uart
|
||||
@@ -86,8 +83,6 @@ required:
|
||||
- interrupts
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
allOf:
|
||||
- $ref: serial.yaml#
|
||||
|
||||
@@ -96,7 +91,6 @@ allOf:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- samsung,s3c2410-uart
|
||||
- samsung,s5pv210-uart
|
||||
then:
|
||||
properties:
|
||||
@@ -128,6 +122,8 @@ allOf:
|
||||
- const: uart
|
||||
- const: clk_uart_baud0
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/samsung,s3c64xx-clock.h>
|
||||
|
||||
@@ -87,16 +87,8 @@ properties:
|
||||
description:
|
||||
TX FIFO threshold configuration (in bytes).
|
||||
|
||||
if:
|
||||
required:
|
||||
- uart-has-rtscts
|
||||
then:
|
||||
properties:
|
||||
cts-gpios: false
|
||||
rts-gpios: false
|
||||
|
||||
patternProperties:
|
||||
"^bluetooth|gnss|gps|mcu$":
|
||||
"^(bluetooth|bluetooth-gnss|gnss|gps|mcu)$":
|
||||
if:
|
||||
type: object
|
||||
then:
|
||||
@@ -136,6 +128,14 @@ patternProperties:
|
||||
required:
|
||||
- compatible
|
||||
|
||||
if:
|
||||
required:
|
||||
- uart-has-rtscts
|
||||
then:
|
||||
properties:
|
||||
cts-gpios: false
|
||||
rts-gpios: false
|
||||
|
||||
additionalProperties: true
|
||||
|
||||
examples:
|
||||
|
||||
@@ -35,6 +35,12 @@ properties:
|
||||
'#size-cells':
|
||||
const: 0
|
||||
|
||||
orientation-gpios:
|
||||
description: Array of input gpios for the Type-C connector orientation indication.
|
||||
The GPIO indication is used to detect the orientation of the Type-C connector.
|
||||
The array should contain a gpio entry for each PMIC Glink connector, in reg order.
|
||||
It is defined that GPIO active level means "CC2" or Reversed/Flipped orientation.
|
||||
|
||||
patternProperties:
|
||||
'^connector@\d$':
|
||||
$ref: /schemas/connector/usb-connector.yaml#
|
||||
@@ -44,6 +50,19 @@ patternProperties:
|
||||
required:
|
||||
- compatible
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
not:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,sm8450-pmic-glink
|
||||
- qcom,sm8550-pmic-glink
|
||||
then:
|
||||
properties:
|
||||
orientation-gpios: false
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
|
||||
@@ -15,7 +15,9 @@ properties:
|
||||
oneOf:
|
||||
- enum:
|
||||
- chipidea,usb2
|
||||
- fsl,imx27-usb
|
||||
- lsi,zevio-usb
|
||||
- nuvoton,npcm750-udc
|
||||
- nvidia,tegra20-ehci
|
||||
- nvidia,tegra20-udc
|
||||
- nvidia,tegra30-ehci
|
||||
@@ -66,6 +68,10 @@ properties:
|
||||
- items:
|
||||
- const: xlnx,zynq-usb-2.20a
|
||||
- const: chipidea,usb2
|
||||
- items:
|
||||
- enum:
|
||||
- nuvoton,npcm845-udc
|
||||
- const: nuvoton,npcm750-udc
|
||||
|
||||
reg:
|
||||
minItems: 1
|
||||
@@ -388,6 +394,7 @@ allOf:
|
||||
enum:
|
||||
- chipidea,usb2
|
||||
- lsi,zevio-usb
|
||||
- nuvoton,npcm750-udc
|
||||
- nvidia,tegra20-udc
|
||||
- nvidia,tegra30-udc
|
||||
- nvidia,tegra114-udc
|
||||
|
||||
@@ -11,8 +11,12 @@ maintainers:
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- fcs,fsa4480
|
||||
oneOf:
|
||||
- const: fcs,fsa4480
|
||||
- items:
|
||||
- enum:
|
||||
- ocs,ocp96011
|
||||
- const: fcs,fsa4480
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
@@ -32,10 +36,43 @@ properties:
|
||||
type: boolean
|
||||
|
||||
port:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
$ref: /schemas/graph.yaml#/$defs/port-base
|
||||
description:
|
||||
A port node to link the FSA4480 to a TypeC controller for the purpose of
|
||||
handling altmode muxing and orientation switching.
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
endpoint:
|
||||
$ref: /schemas/graph.yaml#/$defs/endpoint-base
|
||||
unevaluatedProperties: false
|
||||
|
||||
properties:
|
||||
data-lanes:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description:
|
||||
Specifies how the AUX+/- lines are connected to SBU1/2.
|
||||
oneOf:
|
||||
- items:
|
||||
- const: 0
|
||||
- const: 1
|
||||
description: |
|
||||
Default AUX/SBU layout (FSA4480)
|
||||
- AUX+ connected to SBU2
|
||||
- AUX- connected to SBU1
|
||||
Default AUX/SBU layout (OCP96011)
|
||||
- AUX+ connected to SBU1
|
||||
- AUX- connected to SBU2
|
||||
- items:
|
||||
- const: 1
|
||||
- const: 0
|
||||
description: |
|
||||
Swapped AUX/SBU layout (FSA4480)
|
||||
- AUX+ connected to SBU1
|
||||
- AUX- connected to SBU2
|
||||
Swapped AUX/SBU layout (OCP96011)
|
||||
- AUX+ connected to SBU2
|
||||
- AUX- connected to SBU1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
$id: http://devicetree.org/schemas/usb/genesys,gl850g.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Genesys Logic GL850G USB 2.0 hub controller
|
||||
title: Genesys Logic USB hub controller
|
||||
|
||||
maintainers:
|
||||
- Icenowy Zheng <uwu@icenowy.me>
|
||||
@@ -18,6 +18,7 @@ properties:
|
||||
- usb5e3,608
|
||||
- usb5e3,610
|
||||
- usb5e3,620
|
||||
- usb5e3,626
|
||||
|
||||
reg: true
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- nxp,cbdtu02043
|
||||
- onnn,fsusb43l10x
|
||||
- pericom,pi3usb102
|
||||
- const: gpio-sbu-mux
|
||||
@@ -50,7 +51,6 @@ required:
|
||||
- compatible
|
||||
- enable-gpios
|
||||
- select-gpios
|
||||
- mode-switch
|
||||
- orientation-switch
|
||||
- port
|
||||
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/usb/nxp,ptn36502.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: NXP PTN36502 Type-C USB 3.1 Gen 1 and DisplayPort v1.2 combo redriver
|
||||
|
||||
maintainers:
|
||||
- Luca Weiss <luca.weiss@fairphone.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- nxp,ptn36502
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
vdd18-supply:
|
||||
description: Power supply for VDD18 pin
|
||||
|
||||
retimer-switch:
|
||||
description: Flag the port as possible handle of SuperSpeed signals retiming
|
||||
type: boolean
|
||||
|
||||
orientation-switch:
|
||||
description: Flag the port as possible handler of orientation switching
|
||||
type: boolean
|
||||
|
||||
ports:
|
||||
$ref: /schemas/graph.yaml#/properties/ports
|
||||
properties:
|
||||
port@0:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
description: Super Speed (SS) Output endpoint to the Type-C connector
|
||||
|
||||
port@1:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
description: Super Speed (SS) Input endpoint from the Super-Speed PHY
|
||||
|
||||
port@2:
|
||||
$ref: /schemas/graph.yaml#/properties/port
|
||||
description:
|
||||
Sideband Use (SBU) AUX lines endpoint to the Type-C connector for the purpose of
|
||||
handling altmode muxing and orientation switching.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
typec-mux@1a {
|
||||
compatible = "nxp,ptn36502";
|
||||
reg = <0x1a>;
|
||||
|
||||
vdd18-supply = <&usb_redrive_1v8>;
|
||||
|
||||
retimer-switch;
|
||||
orientation-switch;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
usb_con_ss: endpoint {
|
||||
remote-endpoint = <&typec_con_ss>;
|
||||
};
|
||||
};
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
phy_con_ss: endpoint {
|
||||
remote-endpoint = <&usb_phy_ss>;
|
||||
};
|
||||
};
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
usb_con_sbu: endpoint {
|
||||
remote-endpoint = <&typec_dp_aux>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
@@ -14,6 +14,7 @@ properties:
|
||||
items:
|
||||
- enum:
|
||||
- qcom,ipq4019-dwc3
|
||||
- qcom,ipq5018-dwc3
|
||||
- qcom,ipq5332-dwc3
|
||||
- qcom,ipq6018-dwc3
|
||||
- qcom,ipq8064-dwc3
|
||||
@@ -34,6 +35,7 @@ properties:
|
||||
- qcom,sdm845-dwc3
|
||||
- qcom,sdx55-dwc3
|
||||
- qcom,sdx65-dwc3
|
||||
- qcom,sdx75-dwc3
|
||||
- qcom,sm4250-dwc3
|
||||
- qcom,sm6115-dwc3
|
||||
- qcom,sm6125-dwc3
|
||||
@@ -180,6 +182,8 @@ allOf:
|
||||
- qcom,sdm670-dwc3
|
||||
- qcom,sdm845-dwc3
|
||||
- qcom,sdx55-dwc3
|
||||
- qcom,sdx65-dwc3
|
||||
- qcom,sdx75-dwc3
|
||||
- qcom,sm6350-dwc3
|
||||
then:
|
||||
properties:
|
||||
@@ -238,6 +242,7 @@ allOf:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,ipq5018-dwc3
|
||||
- qcom,ipq5332-dwc3
|
||||
- qcom,msm8994-dwc3
|
||||
- qcom,qcs404-dwc3
|
||||
@@ -363,6 +368,7 @@ allOf:
|
||||
- qcom,sdm845-dwc3
|
||||
- qcom,sdx55-dwc3
|
||||
- qcom,sdx65-dwc3
|
||||
- qcom,sdx75-dwc3
|
||||
- qcom,sm4250-dwc3
|
||||
- qcom,sm6125-dwc3
|
||||
- qcom,sm6350-dwc3
|
||||
@@ -411,6 +417,7 @@ allOf:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,ipq5018-dwc3
|
||||
- qcom,ipq5332-dwc3
|
||||
- qcom,sdm660-dwc3
|
||||
then:
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
# Copyright 2023 Realtek Semiconductor Corporation
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/usb/realtek,rtd-dwc3.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Realtek DWC3 USB SoC Controller Glue
|
||||
|
||||
maintainers:
|
||||
- Stanley Chang <stanley_chang@realtek.com>
|
||||
|
||||
description:
|
||||
The Realtek DHC SoC embeds a DWC3 USB IP Core configured for USB 2.0
|
||||
and USB 3.0 in host or dual-role mode.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- realtek,rtd1295-dwc3
|
||||
- realtek,rtd1315e-dwc3
|
||||
- realtek,rtd1319-dwc3
|
||||
- realtek,rtd1319d-dwc3
|
||||
- realtek,rtd1395-dwc3
|
||||
- realtek,rtd1619-dwc3
|
||||
- realtek,rtd1619b-dwc3
|
||||
- const: realtek,rtd-dwc3
|
||||
|
||||
reg:
|
||||
items:
|
||||
- description: Address and length of register set for wrapper of dwc3 core.
|
||||
- description: Address and length of register set for pm control.
|
||||
|
||||
'#address-cells':
|
||||
const: 1
|
||||
|
||||
'#size-cells':
|
||||
const: 1
|
||||
|
||||
ranges: true
|
||||
|
||||
patternProperties:
|
||||
"^usb@[0-9a-f]+$":
|
||||
$ref: snps,dwc3.yaml#
|
||||
description: Required child node
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
- ranges
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
usb@98013e00 {
|
||||
compatible = "realtek,rtd1319d-dwc3", "realtek,rtd-dwc3";
|
||||
reg = <0x98013e00 0x140>, <0x98013f60 0x4>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
usb@98050000 {
|
||||
compatible = "snps,dwc3";
|
||||
reg = <0x98050000 0x9000>;
|
||||
interrupts = <0 94 4>;
|
||||
phys = <&usb2phy &usb3phy>;
|
||||
phy-names = "usb2-phy", "usb3-phy";
|
||||
dr_mode = "otg";
|
||||
usb-role-switch;
|
||||
role-switch-default-mode = "host";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,parkmode-disable-ss-quirk;
|
||||
snps,parkmode-disable-hs-quirk;
|
||||
maximum-speed = "high-speed";
|
||||
};
|
||||
};
|
||||
@@ -20,9 +20,6 @@ description:
|
||||
Type-C PHY
|
||||
Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt
|
||||
|
||||
allOf:
|
||||
- $ref: snps,dwc3.yaml#
|
||||
|
||||
select:
|
||||
properties:
|
||||
compatible:
|
||||
@@ -30,6 +27,7 @@ select:
|
||||
enum:
|
||||
- rockchip,rk3328-dwc3
|
||||
- rockchip,rk3568-dwc3
|
||||
- rockchip,rk3588-dwc3
|
||||
required:
|
||||
- compatible
|
||||
|
||||
@@ -39,6 +37,7 @@ properties:
|
||||
- enum:
|
||||
- rockchip,rk3328-dwc3
|
||||
- rockchip,rk3568-dwc3
|
||||
- rockchip,rk3588-dwc3
|
||||
- const: snps,dwc3
|
||||
|
||||
reg:
|
||||
@@ -58,7 +57,9 @@ properties:
|
||||
Master/Core clock, must to be >= 62.5 MHz for SS
|
||||
operation and >= 30MHz for HS operation
|
||||
- description:
|
||||
Controller grf clock
|
||||
Controller grf clock OR UTMI clock
|
||||
- description:
|
||||
PIPE clock
|
||||
|
||||
clock-names:
|
||||
minItems: 3
|
||||
@@ -66,7 +67,10 @@ properties:
|
||||
- const: ref_clk
|
||||
- const: suspend_clk
|
||||
- const: bus_clk
|
||||
- const: grf_clk
|
||||
- enum:
|
||||
- grf_clk
|
||||
- utmi
|
||||
- const: pipe
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
@@ -86,6 +90,52 @@ required:
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: snps,dwc3.yaml#
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: rockchip,rk3328-dwc3
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 3
|
||||
maxItems: 4
|
||||
clock-names:
|
||||
minItems: 3
|
||||
items:
|
||||
- const: ref_clk
|
||||
- const: suspend_clk
|
||||
- const: bus_clk
|
||||
- const: grf_clk
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: rockchip,rk3568-dwc3
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
maxItems: 3
|
||||
clock-names:
|
||||
maxItems: 3
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: rockchip,rk3588-dwc3
|
||||
then:
|
||||
properties:
|
||||
clock-names:
|
||||
minItems: 3
|
||||
items:
|
||||
- const: ref_clk
|
||||
- const: suspend_clk
|
||||
- const: bus_clk
|
||||
- const: utmi
|
||||
- const: pipe
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/rk3328-cru.h>
|
||||
|
||||
@@ -310,6 +310,62 @@ properties:
|
||||
maximum: 62
|
||||
deprecated: true
|
||||
|
||||
snps,rx-thr-num-pkt:
|
||||
description:
|
||||
USB RX packet threshold count. In host mode, this field specifies
|
||||
the space that must be available in the RX FIFO before the core can
|
||||
start the corresponding USB RX transaction (burst).
|
||||
In device mode, this field specifies the space that must be
|
||||
available in the RX FIFO before the core can send ERDY for a
|
||||
flow-controlled endpoint. It is only used for SuperSpeed.
|
||||
The valid values for this field are from 1 to 15. (DWC3 SuperSpeed
|
||||
USB 3.0 Controller Databook)
|
||||
$ref: /schemas/types.yaml#/definitions/uint8
|
||||
minimum: 1
|
||||
maximum: 15
|
||||
|
||||
snps,rx-max-burst:
|
||||
description:
|
||||
Max USB RX burst size. In host mode, this field specifies the
|
||||
Maximum Bulk IN burst the DWC_usb3 core can perform. When the system
|
||||
bus is slower than the USB, RX FIFO can overrun during a long burst.
|
||||
You can program a smaller value to this field to limit the RX burst
|
||||
size that the core can perform. It only applies to SS Bulk,
|
||||
Isochronous, and Interrupt IN endpoints in the host mode.
|
||||
In device mode, this field specifies the NUMP value that is sent in
|
||||
ERDY for an OUT endpoint.
|
||||
The valid values for this field are from 1 to 16. (DWC3 SuperSpeed
|
||||
USB 3.0 Controller Databook)
|
||||
$ref: /schemas/types.yaml#/definitions/uint8
|
||||
minimum: 1
|
||||
maximum: 16
|
||||
|
||||
snps,tx-thr-num-pkt:
|
||||
description:
|
||||
USB TX packet threshold count. This field specifies the number of
|
||||
packets that must be in the TXFIFO before the core can start
|
||||
transmission for the corresponding USB transaction (burst).
|
||||
This count is valid in both host and device modes. It is only used
|
||||
for SuperSpeed operation.
|
||||
Valid values are from 1 to 15. (DWC3 SuperSpeed USB 3.0 Controller
|
||||
Databook)
|
||||
$ref: /schemas/types.yaml#/definitions/uint8
|
||||
minimum: 1
|
||||
maximum: 15
|
||||
|
||||
snps,tx-max-burst:
|
||||
description:
|
||||
Max USB TX burst size. When the system bus is slower than the USB,
|
||||
TX FIFO can underrun during a long burst. Program a smaller value
|
||||
to this field to limit the TX burst size that the core can execute.
|
||||
In Host mode, it only applies to SS Bulk, Isochronous, and Interrupt
|
||||
OUT endpoints. This value is not used in device mode.
|
||||
Valid values are from 1 to 16. (DWC3 SuperSpeed USB 3.0 Controller
|
||||
Databook)
|
||||
$ref: /schemas/types.yaml#/definitions/uint8
|
||||
minimum: 1
|
||||
maximum: 16
|
||||
|
||||
snps,rx-thr-num-pkt-prd:
|
||||
description:
|
||||
Periodic ESS RX packet threshold count (host mode only). Set this and
|
||||
|
||||
@@ -20,8 +20,23 @@ properties:
|
||||
enum:
|
||||
- ti,tps6598x
|
||||
- apple,cd321x
|
||||
- ti,tps25750
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
minItems: 1
|
||||
items:
|
||||
- description: main PD controller address
|
||||
- description: |
|
||||
I2C slave address field in PBMs input data
|
||||
which is used as the device address when writing the
|
||||
patch for TPS25750.
|
||||
The patch address can be any value except 0x00, 0x20,
|
||||
0x21, 0x22, and 0x23
|
||||
|
||||
reg-names:
|
||||
items:
|
||||
- const: main
|
||||
- const: patch-address
|
||||
|
||||
wakeup-source: true
|
||||
|
||||
@@ -35,10 +50,42 @@ properties:
|
||||
connector:
|
||||
$ref: /schemas/connector/usb-connector.yaml#
|
||||
|
||||
firmware-name:
|
||||
description: |
|
||||
Should contain the name of the default patch binary
|
||||
file located on the firmware search path which is
|
||||
used to switch the controller into APP mode.
|
||||
This is used when tps25750 doesn't have an EEPROM
|
||||
connected to it.
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
allOf:
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: ti,tps25750
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
maxItems: 2
|
||||
|
||||
connector:
|
||||
required:
|
||||
- data-role
|
||||
|
||||
required:
|
||||
- connector
|
||||
- reg-names
|
||||
else:
|
||||
properties:
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
@@ -71,4 +118,36 @@ examples:
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
typec@21 {
|
||||
compatible = "ti,tps25750";
|
||||
reg = <0x21>, <0x0f>;
|
||||
reg-names = "main", "patch-address";
|
||||
|
||||
interrupt-parent = <&msmgpio>;
|
||||
interrupts = <100 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-names = "irq";
|
||||
firmware-name = "tps25750.bin";
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&typec_pins>;
|
||||
|
||||
typec_con0: connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
data-role = "dual";
|
||||
port {
|
||||
typec_ep0: endpoint {
|
||||
remote-endpoint = <&otg_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
|
||||
@@ -37,7 +37,6 @@ properties:
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- reset-gpios
|
||||
- vdd-supply
|
||||
- peer-hub
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ In-detail description of the named TTY structures is in separate documents:
|
||||
tty_struct
|
||||
tty_ldisc
|
||||
tty_buffer
|
||||
tty_ioctl
|
||||
tty_internals
|
||||
|
||||
Writing TTY Driver
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=================
|
||||
TTY IOCTL Helpers
|
||||
=================
|
||||
|
||||
.. kernel-doc:: drivers/tty/tty_ioctl.c
|
||||
|
||||
.. kernel-doc:: include/linux/tty.h
|
||||
:identifiers: tty_get_baud_rate
|
||||
@@ -93,44 +93,18 @@ DMA address space of the device. However, most buffers passed to your
|
||||
driver can safely be used with such DMA mapping. (See the first section
|
||||
of Documentation/core-api/dma-api-howto.rst, titled "What memory is DMA-able?")
|
||||
|
||||
- When you're using scatterlists, you can map everything at once. On some
|
||||
systems, this kicks in an IOMMU and turns the scatterlists into single
|
||||
DMA transactions::
|
||||
- When you have the scatterlists which have been mapped for the USB controller,
|
||||
you could use the new ``usb_sg_*()`` calls, which would turn scatterlist
|
||||
into URBs::
|
||||
|
||||
int usb_buffer_map_sg (struct usb_device *dev, unsigned pipe,
|
||||
struct scatterlist *sg, int nents);
|
||||
int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
|
||||
unsigned pipe, unsigned period, struct scatterlist *sg,
|
||||
int nents, size_t length, gfp_t mem_flags);
|
||||
|
||||
void usb_buffer_dmasync_sg (struct usb_device *dev, unsigned pipe,
|
||||
struct scatterlist *sg, int n_hw_ents);
|
||||
void usb_sg_wait(struct usb_sg_request *io);
|
||||
|
||||
void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe,
|
||||
struct scatterlist *sg, int n_hw_ents);
|
||||
void usb_sg_cancel(struct usb_sg_request *io);
|
||||
|
||||
It's probably easier to use the new ``usb_sg_*()`` calls, which do the DMA
|
||||
mapping and apply other tweaks to make scatterlist i/o be fast.
|
||||
|
||||
- Some drivers may prefer to work with the model that they're mapping large
|
||||
buffers, synchronizing their safe re-use. (If there's no re-use, then let
|
||||
usbcore do the map/unmap.) Large periodic transfers make good examples
|
||||
here, since it's cheaper to just synchronize the buffer than to unmap it
|
||||
each time an urb completes and then re-map it on during resubmission.
|
||||
|
||||
These calls all work with initialized urbs: ``urb->dev``, ``urb->pipe``,
|
||||
``urb->transfer_buffer``, and ``urb->transfer_buffer_length`` must all be
|
||||
valid when these calls are used (``urb->setup_packet`` must be valid too
|
||||
if urb is a control request)::
|
||||
|
||||
struct urb *usb_buffer_map (struct urb *urb);
|
||||
|
||||
void usb_buffer_dmasync (struct urb *urb);
|
||||
|
||||
void usb_buffer_unmap (struct urb *urb);
|
||||
|
||||
The calls manage ``urb->transfer_dma`` for you, and set
|
||||
``URB_NO_TRANSFER_DMA_MAP`` so that usbcore won't map or unmap the buffer.
|
||||
They cannot be used for setup_packet buffers in control requests.
|
||||
|
||||
Note that several of those interfaces are currently commented out, since
|
||||
they don't have current users. See the source code. Other than the dmasync
|
||||
calls (where the underlying DMA primitives have changed), most of them can
|
||||
easily be commented back in if you want to use them.
|
||||
When the USB controller doesn't support DMA, the ``usb_sg_init()`` would try
|
||||
to submit URBs in PIO way as long as the page in scatterlists is not in the
|
||||
Highmem, which could be very rare in modern architectures.
|
||||
|
||||
@@ -15,7 +15,6 @@ Contents:
|
||||
ethernet/index
|
||||
fddi/index
|
||||
hamradio/index
|
||||
qlogic/index
|
||||
wifi/index
|
||||
wwan/index
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
|
||||
QLogic QLGE Device Drivers
|
||||
===============================================
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
qlge
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
Indices
|
||||
=======
|
||||
|
||||
* :ref:`genindex`
|
||||
@@ -1,118 +0,0 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=======================================
|
||||
QLogic QLGE 10Gb Ethernet device driver
|
||||
=======================================
|
||||
|
||||
This driver use drgn and devlink for debugging.
|
||||
|
||||
Dump kernel data structures in drgn
|
||||
-----------------------------------
|
||||
|
||||
To dump kernel data structures, the following Python script can be used
|
||||
in drgn:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def align(x, a):
|
||||
"""the alignment a should be a power of 2
|
||||
"""
|
||||
mask = a - 1
|
||||
return (x+ mask) & ~mask
|
||||
|
||||
def struct_size(struct_type):
|
||||
struct_str = "struct {}".format(struct_type)
|
||||
return sizeof(Object(prog, struct_str, address=0x0))
|
||||
|
||||
def netdev_priv(netdevice):
|
||||
NETDEV_ALIGN = 32
|
||||
return netdevice.value_() + align(struct_size("net_device"), NETDEV_ALIGN)
|
||||
|
||||
name = 'xxx'
|
||||
qlge_device = None
|
||||
netdevices = prog['init_net'].dev_base_head.address_of_()
|
||||
for netdevice in list_for_each_entry("struct net_device", netdevices, "dev_list"):
|
||||
if netdevice.name.string_().decode('ascii') == name:
|
||||
print(netdevice.name)
|
||||
|
||||
ql_adapter = Object(prog, "struct ql_adapter", address=netdev_priv(qlge_device))
|
||||
|
||||
The struct ql_adapter will be printed in drgn as follows,
|
||||
|
||||
>>> ql_adapter
|
||||
(struct ql_adapter){
|
||||
.ricb = (struct ricb){
|
||||
.base_cq = (u8)0,
|
||||
.flags = (u8)120,
|
||||
.mask = (__le16)26637,
|
||||
.hash_cq_id = (u8 [1024]){ 172, 142, 255, 255 },
|
||||
.ipv6_hash_key = (__le32 [10]){},
|
||||
.ipv4_hash_key = (__le32 [4]){},
|
||||
},
|
||||
.flags = (unsigned long)0,
|
||||
.wol = (u32)0,
|
||||
.nic_stats = (struct nic_stats){
|
||||
.tx_pkts = (u64)0,
|
||||
.tx_bytes = (u64)0,
|
||||
.tx_mcast_pkts = (u64)0,
|
||||
.tx_bcast_pkts = (u64)0,
|
||||
.tx_ucast_pkts = (u64)0,
|
||||
.tx_ctl_pkts = (u64)0,
|
||||
.tx_pause_pkts = (u64)0,
|
||||
...
|
||||
},
|
||||
.active_vlans = (unsigned long [64]){
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52780853100545, 18446744073709551615,
|
||||
18446619461681283072, 0, 42949673024, 2147483647,
|
||||
},
|
||||
.rx_ring = (struct rx_ring [17]){
|
||||
{
|
||||
.cqicb = (struct cqicb){
|
||||
.msix_vect = (u8)0,
|
||||
.reserved1 = (u8)0,
|
||||
.reserved2 = (u8)0,
|
||||
.flags = (u8)0,
|
||||
.len = (__le16)0,
|
||||
.rid = (__le16)0,
|
||||
...
|
||||
},
|
||||
.cq_base = (void *)0x0,
|
||||
.cq_base_dma = (dma_addr_t)0,
|
||||
}
|
||||
...
|
||||
}
|
||||
}
|
||||
|
||||
coredump via devlink
|
||||
--------------------
|
||||
|
||||
|
||||
And the coredump obtained via devlink in json format looks like,
|
||||
|
||||
.. code:: shell
|
||||
|
||||
$ devlink health dump show DEVICE reporter coredump -p -j
|
||||
{
|
||||
"Core Registers": {
|
||||
"segment": 1,
|
||||
"values": [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ]
|
||||
},
|
||||
"Test Logic Regs": {
|
||||
"segment": 2,
|
||||
"values": [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ]
|
||||
},
|
||||
"RMII Registers": {
|
||||
"segment": 3,
|
||||
"values": [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ]
|
||||
},
|
||||
...
|
||||
"Sem Registers": {
|
||||
"segment": 50,
|
||||
"values": [ 0,0,0,0 ]
|
||||
}
|
||||
}
|
||||
|
||||
When the module parameter qlge_force_coredump is set to be true, the MPI
|
||||
RISC reset before coredumping. So coredumping will much longer since
|
||||
devlink tool has to wait for 5 secs for the resetting to be
|
||||
finished.
|
||||
@@ -755,6 +755,8 @@ The uac2 function provides these attributes in its function directory:
|
||||
req_number the number of pre-allocated request for both capture
|
||||
and playback
|
||||
function_name name of the interface
|
||||
c_terminal_type code of the capture terminal type
|
||||
p_terminal_type code of the playback terminal type
|
||||
================ ====================================================
|
||||
|
||||
The attributes have sane default values.
|
||||
|
||||
+8
-9
@@ -8338,6 +8338,14 @@ F: Documentation/devicetree/bindings/spi/spi-fsl-dspi.txt
|
||||
F: drivers/spi/spi-fsl-dspi.c
|
||||
F: include/linux/spi/spi-fsl-dspi.h
|
||||
|
||||
FREESCALE eDMA DRIVER
|
||||
M: Frank Li <Frank.Li@nxp.com>
|
||||
L: imx@lists.linux.dev
|
||||
L: dmaengine@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/dma/fsl,edma.yaml
|
||||
F: drivers/dma/fsl-edma*.*
|
||||
|
||||
FREESCALE ENETC ETHERNET DRIVERS
|
||||
M: Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||
M: Vladimir Oltean <vladimir.oltean@nxp.com>
|
||||
@@ -17680,15 +17688,6 @@ L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/ethernet/qlogic/qlcnic/
|
||||
|
||||
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||
M: Manish Chopra <manishc@marvell.com>
|
||||
M: GR-Linux-NIC-Dev@marvell.com
|
||||
M: Coiby Xu <coiby.xu@gmail.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/networking/device_drivers/qlogic/qlge.rst
|
||||
F: drivers/staging/qlge/
|
||||
|
||||
QM1D1B0004 MEDIA DRIVER
|
||||
M: Akihiro Tsukada <tskd08@gmail.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
/* Prototypes of functions used across modules here in this directory. */
|
||||
@@ -113,6 +114,7 @@ extern int boot_cpuid;
|
||||
#ifdef CONFIG_VERBOSE_MCHECK
|
||||
extern unsigned long alpha_verbose_mcheck;
|
||||
#endif
|
||||
extern struct screen_info vgacon_screen_info;
|
||||
|
||||
/* srmcons.c */
|
||||
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM)
|
||||
|
||||
@@ -131,13 +131,14 @@ static void determine_cpu_caches (unsigned int);
|
||||
|
||||
static char __initdata command_line[COMMAND_LINE_SIZE];
|
||||
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
/*
|
||||
* The format of "screen_info" is strange, and due to early
|
||||
* i386-setup code. This is just enough to make the console
|
||||
* code think we're on a VGA color display.
|
||||
*/
|
||||
|
||||
struct screen_info screen_info = {
|
||||
struct screen_info vgacon_screen_info = {
|
||||
.orig_x = 0,
|
||||
.orig_y = 25,
|
||||
.orig_video_cols = 80,
|
||||
@@ -145,8 +146,7 @@ struct screen_info screen_info = {
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 16
|
||||
};
|
||||
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The direct map I/O window, if any. This should be the same
|
||||
@@ -652,7 +652,7 @@ setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
#if defined(CONFIG_VGA_CONSOLE)
|
||||
conswitchp = &vga_con;
|
||||
vgacon_register_screen(&vgacon_screen_info);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -57,11 +57,13 @@ sio_init_irq(void)
|
||||
static inline void __init
|
||||
alphabook1_init_arch(void)
|
||||
{
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
/* The AlphaBook1 has LCD video fixed at 800x600,
|
||||
37 rows and 100 cols. */
|
||||
screen_info.orig_y = 37;
|
||||
screen_info.orig_video_cols = 100;
|
||||
screen_info.orig_video_lines = 37;
|
||||
vgacon_screen_info.orig_y = 37;
|
||||
vgacon_screen_info.orig_video_cols = 100;
|
||||
vgacon_screen_info.orig_video_lines = 37;
|
||||
#endif
|
||||
|
||||
lca_init_arch();
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#ifndef __ASMARM_SETUP_H
|
||||
#define __ASMARM_SETUP_H
|
||||
|
||||
#include <linux/screen_info.h>
|
||||
#include <uapi/asm/setup.h>
|
||||
|
||||
|
||||
@@ -35,4 +36,8 @@ void early_mm_init(const struct machine_desc *);
|
||||
void adjust_lowmem_bounds(void);
|
||||
void setup_dma_zone(const struct machine_desc *desc);
|
||||
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
extern struct screen_info vgacon_screen_info;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <linux/io.h>
|
||||
|
||||
extern unsigned long vga_base;
|
||||
extern struct screen_info vgacon_screen_info;
|
||||
|
||||
#define VGA_MAP_MEM(x,s) (vga_base + (x))
|
||||
|
||||
|
||||
@@ -69,18 +69,18 @@ static int __init parse_tag_mem32(const struct tag *tag)
|
||||
|
||||
__tagtable(ATAG_MEM, parse_tag_mem32);
|
||||
|
||||
#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE)
|
||||
#if defined(CONFIG_ARCH_FOOTBRIDGE) && defined(CONFIG_VGA_CONSOLE)
|
||||
static int __init parse_tag_videotext(const struct tag *tag)
|
||||
{
|
||||
screen_info.orig_x = tag->u.videotext.x;
|
||||
screen_info.orig_y = tag->u.videotext.y;
|
||||
screen_info.orig_video_page = tag->u.videotext.video_page;
|
||||
screen_info.orig_video_mode = tag->u.videotext.video_mode;
|
||||
screen_info.orig_video_cols = tag->u.videotext.video_cols;
|
||||
screen_info.orig_video_ega_bx = tag->u.videotext.video_ega_bx;
|
||||
screen_info.orig_video_lines = tag->u.videotext.video_lines;
|
||||
screen_info.orig_video_isVGA = tag->u.videotext.video_isvga;
|
||||
screen_info.orig_video_points = tag->u.videotext.video_points;
|
||||
vgacon_screen_info.orig_x = tag->u.videotext.x;
|
||||
vgacon_screen_info.orig_y = tag->u.videotext.y;
|
||||
vgacon_screen_info.orig_video_page = tag->u.videotext.video_page;
|
||||
vgacon_screen_info.orig_video_mode = tag->u.videotext.video_mode;
|
||||
vgacon_screen_info.orig_video_cols = tag->u.videotext.video_cols;
|
||||
vgacon_screen_info.orig_video_ega_bx = tag->u.videotext.video_ega_bx;
|
||||
vgacon_screen_info.orig_video_lines = tag->u.videotext.video_lines;
|
||||
vgacon_screen_info.orig_video_isVGA = tag->u.videotext.video_isvga;
|
||||
vgacon_screen_info.orig_video_points = tag->u.videotext.video_points;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -123,12 +123,6 @@ void __init arm_efi_init(void)
|
||||
{
|
||||
efi_init();
|
||||
|
||||
if (screen_info.orig_video_isVGA == VIDEO_TYPE_EFI) {
|
||||
/* dummycon on ARM needs non-zero values for columns/lines */
|
||||
screen_info.orig_video_cols = 80;
|
||||
screen_info.orig_video_lines = 25;
|
||||
}
|
||||
|
||||
/* ARM does not permit early mappings to persist across paging_init() */
|
||||
efi_memmap_unmap();
|
||||
|
||||
|
||||
@@ -928,9 +928,8 @@ static void __init request_standard_resources(const struct machine_desc *mdesc)
|
||||
request_resource(&ioport_resource, &lp2);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) || \
|
||||
defined(CONFIG_EFI)
|
||||
struct screen_info screen_info = {
|
||||
#if defined(CONFIG_VGA_CONSOLE)
|
||||
struct screen_info vgacon_screen_info = {
|
||||
.orig_video_lines = 30,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_mode = 0,
|
||||
@@ -1194,7 +1193,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
#if defined(CONFIG_VGA_CONSOLE)
|
||||
conswitchp = &vga_con;
|
||||
vgacon_register_screen(&vgacon_screen_info);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
compatible = "qcom,sm8550-pmic-glink", "qcom,pmic-glink";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
orientation-gpios = <&tlmm 11 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
connector@0 {
|
||||
compatible = "usb-c-connector";
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
compatible = "qcom,sm8550-pmic-glink", "qcom,pmic-glink";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
orientation-gpios = <&tlmm 11 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
connector@0 {
|
||||
compatible = "usb-c-connector";
|
||||
|
||||
@@ -443,6 +443,27 @@
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb_host2_xhci: usb@fcd00000 {
|
||||
compatible = "rockchip,rk3588-dwc3", "snps,dwc3";
|
||||
reg = <0x0 0xfcd00000 0x0 0x400000>;
|
||||
interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
clocks = <&cru REF_CLK_USB3OTG2>, <&cru SUSPEND_CLK_USB3OTG2>,
|
||||
<&cru ACLK_USB3OTG2>, <&cru CLK_UTMI_OTG2>,
|
||||
<&cru CLK_PIPEPHY2_PIPE_U3_G>;
|
||||
clock-names = "ref_clk", "suspend_clk", "bus_clk", "utmi", "pipe";
|
||||
dr_mode = "host";
|
||||
phys = <&combphy2_psu PHY_TYPE_USB3>;
|
||||
phy-names = "usb3-phy";
|
||||
phy_type = "utmi_wide";
|
||||
resets = <&cru SRST_A_USB3OTG2>;
|
||||
snps,dis_enblslpm_quirk;
|
||||
snps,dis-u2-freeclk-exists-quirk;
|
||||
snps,dis-del-phy-power-chg-quirk;
|
||||
snps,dis-tx-ipgap-linecheck-quirk;
|
||||
snps,dis_rxdet_inp3_quirk;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pmu1grf: syscon@fd58a000 {
|
||||
compatible = "rockchip,rk3588-pmugrf", "syscon", "simple-mfd";
|
||||
reg = <0x0 0xfd58a000 0x0 0x10000>;
|
||||
|
||||
@@ -71,10 +71,6 @@ static __init pteval_t create_mapping_protection(efi_memory_desc_t *md)
|
||||
return pgprot_val(PAGE_KERNEL_EXEC);
|
||||
}
|
||||
|
||||
/* we will fill this structure from the stub, so don't put it in .bss */
|
||||
struct screen_info screen_info __section(".data");
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
|
||||
int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md)
|
||||
{
|
||||
pteval_t prot_val = create_mapping_protection(md);
|
||||
|
||||
@@ -27,7 +27,9 @@ PROVIDE(__efistub__text = _text);
|
||||
PROVIDE(__efistub__end = _end);
|
||||
PROVIDE(__efistub___inittext_end = __inittext_end);
|
||||
PROVIDE(__efistub__edata = _edata);
|
||||
#if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB)
|
||||
PROVIDE(__efistub_screen_info = screen_info);
|
||||
#endif
|
||||
PROVIDE(__efistub__ctype = _ctype);
|
||||
|
||||
PROVIDE(__pi___memcpy = __pi_memcpy);
|
||||
|
||||
@@ -8,22 +8,10 @@
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/start_kernel.h>
|
||||
#include <linux/dma-map-ops.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
#ifdef CONFIG_DUMMY_CONSOLE
|
||||
struct screen_info screen_info = {
|
||||
.orig_video_lines = 30,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_mode = 0,
|
||||
.orig_video_ega_bx = 0,
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 8
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init csky_memblock_init(void)
|
||||
{
|
||||
unsigned long lowmem_size = PFN_DOWN(LOWMEM_LIMIT - PHYS_OFFSET_OFFSET);
|
||||
|
||||
@@ -17,5 +17,3 @@ obj-y += vm_vectors.o
|
||||
obj-$(CONFIG_HAS_DMA) += dma.o
|
||||
|
||||
obj-$(CONFIG_STACKTRACE) += stacktrace.o
|
||||
|
||||
obj-$(CONFIG_VGA_CONSOLE) += screen_info.o
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
struct screen_info screen_info;
|
||||
@@ -68,6 +68,11 @@ void __init efi_runtime_init(void)
|
||||
|
||||
unsigned long __initdata screen_info_table = EFI_INVALID_TABLE_ADDR;
|
||||
|
||||
#if defined(CONFIG_SYSFB) || defined(CONFIG_EFI_EARLYCON)
|
||||
struct screen_info screen_info __section(".data");
|
||||
EXPORT_SYMBOL_GPL(screen_info);
|
||||
#endif
|
||||
|
||||
static void __init init_screen_info(void)
|
||||
{
|
||||
struct screen_info *si;
|
||||
@@ -115,7 +120,8 @@ void __init efi_init(void)
|
||||
|
||||
set_bit(EFI_CONFIG_TABLES, &efi.flags);
|
||||
|
||||
init_screen_info();
|
||||
if (IS_ENABLED(CONFIG_EFI_EARLYCON) || IS_ENABLED(CONFIG_SYSFB))
|
||||
init_screen_info();
|
||||
|
||||
if (boot_memmap == EFI_INVALID_TABLE_ADDR)
|
||||
return;
|
||||
|
||||
@@ -12,7 +12,9 @@ __efistub_kernel_entry = kernel_entry;
|
||||
__efistub_kernel_asize = kernel_asize;
|
||||
__efistub_kernel_fsize = kernel_fsize;
|
||||
__efistub_kernel_offset = kernel_offset;
|
||||
#if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB)
|
||||
__efistub_screen_info = screen_info;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/ioport.h>
|
||||
@@ -57,8 +56,6 @@
|
||||
#define SMBIOS_CORE_PACKAGE_OFFSET 0x23
|
||||
#define LOONGSON_EFI_ENABLE (1 << 3)
|
||||
|
||||
struct screen_info screen_info __section(".data");
|
||||
|
||||
unsigned long fw_arg0, fw_arg1, fw_arg2;
|
||||
DEFINE_PER_CPU(unsigned long, kernelsp);
|
||||
struct cpuinfo_loongarch cpu_data[NR_CPUS] __read_mostly;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
@@ -76,14 +75,6 @@ void __init plat_mem_setup(void)
|
||||
|
||||
_machine_restart = jazz_machine_restart;
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
screen_info = (struct screen_info) {
|
||||
.orig_video_cols = 160,
|
||||
.orig_video_lines = 64,
|
||||
.orig_video_points = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
add_preferred_console("ttyS", 0, "9600");
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/root_dev.h>
|
||||
@@ -54,10 +53,6 @@ struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
|
||||
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
struct screen_info screen_info;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Setup information
|
||||
*
|
||||
@@ -793,12 +788,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (IS_ENABLED(CONFIG_CPU_R4X00_BUGS64))
|
||||
check_bugs64_early();
|
||||
|
||||
#if defined(CONFIG_VT)
|
||||
#if defined(CONFIG_VGA_CONSOLE)
|
||||
conswitchp = &vga_con;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
arch_mem_init(cmdline_p);
|
||||
dmi_setup();
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ static void __init pci_clock_check(void)
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
|
||||
static void __init screen_info_setup(void)
|
||||
{
|
||||
screen_info = (struct screen_info) {
|
||||
static struct screen_info si = {
|
||||
.orig_x = 0,
|
||||
.orig_y = 25,
|
||||
.ext_mem_k = 0,
|
||||
@@ -175,6 +175,8 @@ static void __init screen_info_setup(void)
|
||||
.orig_video_isVGA = VIDEO_TYPE_VGAC,
|
||||
.orig_video_points = 16
|
||||
};
|
||||
|
||||
vgacon_register_screen(&si);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/initrd.h>
|
||||
|
||||
@@ -112,6 +113,19 @@ int update_persistent_clock64(struct timespec64 now)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
static struct screen_info vgacon_screen_info = {
|
||||
.orig_video_page = 52,
|
||||
.orig_video_mode = 3,
|
||||
.orig_video_cols = 80,
|
||||
.flags = 12,
|
||||
.orig_video_ega_bx = 3,
|
||||
.orig_video_lines = 25,
|
||||
.orig_video_isVGA = 0x22,
|
||||
.orig_video_points = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
void __init plat_mem_setup(void)
|
||||
{
|
||||
#ifdef CONFIG_SIBYTE_BCM1x80
|
||||
@@ -129,17 +143,8 @@ void __init plat_mem_setup(void)
|
||||
if (m41t81_probe())
|
||||
swarm_rtc_type = RTC_M41T81;
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
screen_info = (struct screen_info) {
|
||||
.orig_video_page = 52,
|
||||
.orig_video_mode = 3,
|
||||
.orig_video_cols = 80,
|
||||
.flags = 12,
|
||||
.orig_video_ega_bx = 3,
|
||||
.orig_video_lines = 25,
|
||||
.orig_video_isVGA = 0x22,
|
||||
.orig_video_points = 16,
|
||||
};
|
||||
#ifdef CONFIG_VGA_CONSOLE
|
||||
vgacon_register_screen(&vgacon_screen_info);
|
||||
/* XXXKW for CFE, get lines/cols from environment */
|
||||
#endif
|
||||
}
|
||||
|
||||
+10
-8
@@ -38,19 +38,21 @@ extern void sni_machine_power_off(void);
|
||||
|
||||
static void __init sni_display_setup(void)
|
||||
{
|
||||
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
|
||||
struct screen_info *si = &screen_info;
|
||||
#if defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
|
||||
static struct screen_info si;
|
||||
DISPLAY_STATUS *di;
|
||||
|
||||
di = ArcGetDisplayStatus(1);
|
||||
|
||||
if (di) {
|
||||
si->orig_x = di->CursorXPosition;
|
||||
si->orig_y = di->CursorYPosition;
|
||||
si->orig_video_cols = di->CursorMaxXPosition;
|
||||
si->orig_video_lines = di->CursorMaxYPosition;
|
||||
si->orig_video_isVGA = VIDEO_TYPE_VGAC;
|
||||
si->orig_video_points = 16;
|
||||
si.orig_x = di->CursorXPosition;
|
||||
si.orig_y = di->CursorYPosition;
|
||||
si.orig_video_cols = di->CursorMaxXPosition;
|
||||
si.orig_video_lines = di->CursorMaxYPosition;
|
||||
si.orig_video_isVGA = VIDEO_TYPE_VGAC;
|
||||
si.orig_video_points = 16;
|
||||
|
||||
vgacon_register_screen(&si);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/sections.h>
|
||||
@@ -36,10 +35,6 @@ static struct pt_regs fake_regs = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
0};
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
struct screen_info screen_info;
|
||||
#endif
|
||||
|
||||
/* Copy a short hook instruction sequence to the exception address */
|
||||
static inline void copy_exception_handler(unsigned int addr)
|
||||
{
|
||||
|
||||
@@ -248,7 +248,6 @@ CONFIG_UIO_AEC=m
|
||||
CONFIG_UIO_SERCOS3=m
|
||||
CONFIG_UIO_PCI_GENERIC=m
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_QLGE=m
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/unistd.h>
|
||||
@@ -98,21 +97,6 @@ int boot_cpu_hwid = -1;
|
||||
int dcache_bsize;
|
||||
int icache_bsize;
|
||||
|
||||
/*
|
||||
* This still seems to be needed... -- paulus
|
||||
*/
|
||||
struct screen_info screen_info = {
|
||||
.orig_x = 0,
|
||||
.orig_y = 25,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_lines = 25,
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 16
|
||||
};
|
||||
#if defined(CONFIG_FB_VGA16_MODULE)
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
#endif
|
||||
|
||||
/* Variables required to store legacy IO irq routing */
|
||||
int of_i8042_kbd_irq;
|
||||
EXPORT_SYMBOL_GPL(of_i8042_kbd_irq);
|
||||
|
||||
@@ -28,7 +28,9 @@ __efistub__start_kernel = _start_kernel;
|
||||
__efistub__end = _end;
|
||||
__efistub__edata = _edata;
|
||||
__efistub___init_text_end = __init_text_end;
|
||||
#if defined(CONFIG_EFI_EARLYCON) || defined(CONFIG_SYSFB)
|
||||
__efistub_screen_info = screen_info;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/sched/task.h>
|
||||
#include <linux/smp.h>
|
||||
@@ -40,17 +39,6 @@
|
||||
|
||||
#include "head.h"
|
||||
|
||||
#if defined(CONFIG_DUMMY_CONSOLE) || defined(CONFIG_EFI)
|
||||
struct screen_info screen_info __section(".data") = {
|
||||
.orig_video_lines = 30,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_mode = 0,
|
||||
.orig_video_ega_bx = 0,
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 8
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The lucky hart to first increment this variable will boot the other cores.
|
||||
* This is used before the kernel initializes the BSS so it can't be in the
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
* Copyright (C) 1999 Niibe Yutaka
|
||||
* Copyright (C) 2002 - 2010 Paul Mundt
|
||||
*/
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/initrd.h>
|
||||
@@ -69,10 +68,6 @@ EXPORT_SYMBOL(cpu_data);
|
||||
struct sh_machine_vector sh_mv = { .mv_name = "generic", };
|
||||
EXPORT_SYMBOL(sh_mv);
|
||||
|
||||
#ifdef CONFIG_VT
|
||||
struct screen_info screen_info;
|
||||
#endif
|
||||
|
||||
extern int root_mountflags;
|
||||
|
||||
#define RAMDISK_IMAGE_START_MASK 0x07FF
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <linux/initrd.h>
|
||||
#include <asm/smp.h>
|
||||
#include <linux/user.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
@@ -51,18 +50,6 @@
|
||||
|
||||
#include "kernel.h"
|
||||
|
||||
struct screen_info screen_info = {
|
||||
0, 0, /* orig-x, orig-y */
|
||||
0, /* unused */
|
||||
0, /* orig-video-page */
|
||||
0, /* orig-video-mode */
|
||||
128, /* orig-video-cols */
|
||||
0,0,0, /* ega_ax, ega_bx, ega_cx */
|
||||
54, /* orig-video-lines */
|
||||
0, /* orig-video-isVGA */
|
||||
16 /* orig-video-points */
|
||||
};
|
||||
|
||||
/* Typing sync at the prom prompt calls the function pointed to by
|
||||
* romvec->pv_synchook which I set to the following function.
|
||||
* This should sync all filesystems and return, for now it just
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include <linux/ptrace.h>
|
||||
#include <asm/smp.h>
|
||||
#include <linux/user.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
@@ -68,18 +67,6 @@
|
||||
DEFINE_SPINLOCK(ns87303_lock);
|
||||
EXPORT_SYMBOL(ns87303_lock);
|
||||
|
||||
struct screen_info screen_info = {
|
||||
0, 0, /* orig-x, orig-y */
|
||||
0, /* unused */
|
||||
0, /* orig-video-page */
|
||||
0, /* orig-video-mode */
|
||||
128, /* orig-video-cols */
|
||||
0, 0, 0, /* unused, ega_bx, unused */
|
||||
54, /* orig-video-lines */
|
||||
0, /* orig-video-isVGA */
|
||||
16 /* orig-video-points */
|
||||
};
|
||||
|
||||
static void
|
||||
prom_console_write(struct console *con, const char *s, unsigned int n)
|
||||
{
|
||||
|
||||
@@ -1167,7 +1167,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
#ifdef CONFIG_VT
|
||||
#if defined(CONFIG_VGA_CONSOLE)
|
||||
if (!efi_enabled(EFI_BOOT) || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
|
||||
conswitchp = &vga_con;
|
||||
vgacon_register_screen(&screen_info);
|
||||
#endif
|
||||
#endif
|
||||
x86_init.oem.banner();
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/reboot.h>
|
||||
@@ -49,17 +48,6 @@
|
||||
#include <asm/timex.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE)
|
||||
struct screen_info screen_info = {
|
||||
.orig_x = 0,
|
||||
.orig_y = 24,
|
||||
.orig_video_cols = 80,
|
||||
.orig_video_lines = 24,
|
||||
.orig_video_isVGA = 1,
|
||||
.orig_video_points = 16,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
extern unsigned long initrd_start;
|
||||
extern unsigned long initrd_end;
|
||||
|
||||
+1
-1
@@ -362,7 +362,7 @@ config INTEL_IOATDMA
|
||||
|
||||
config K3_DMA
|
||||
tristate "Hisilicon K3 DMA support"
|
||||
depends on ARCH_HI3xxx || ARCH_HISI || COMPILE_TEST
|
||||
depends on ARCH_HISI || COMPILE_TEST
|
||||
select DMA_ENGINE
|
||||
select DMA_VIRTUAL_CHANNELS
|
||||
help
|
||||
|
||||
@@ -923,7 +923,7 @@ fail:
|
||||
*
|
||||
* Return: Always '0'
|
||||
*/
|
||||
static int msgdma_remove(struct platform_device *pdev)
|
||||
static void msgdma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct msgdma_device *mdev = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -933,8 +933,6 @@ static int msgdma_remove(struct platform_device *pdev)
|
||||
msgdma_dev_remove(mdev);
|
||||
|
||||
dev_notice(&pdev->dev, "Altera mSGDMA driver removed\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
@@ -952,7 +950,7 @@ static struct platform_driver msgdma_driver = {
|
||||
.of_match_table = of_match_ptr(msgdma_match),
|
||||
},
|
||||
.probe = msgdma_probe,
|
||||
.remove = msgdma_remove,
|
||||
.remove_new = msgdma_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(msgdma_driver);
|
||||
|
||||
@@ -128,7 +128,7 @@ struct admac_data {
|
||||
int irq;
|
||||
int irq_index;
|
||||
int nchannels;
|
||||
struct admac_chan channels[];
|
||||
struct admac_chan channels[] __counted_by(nchannels);
|
||||
};
|
||||
|
||||
struct admac_tx {
|
||||
@@ -925,7 +925,7 @@ free_reset:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int admac_remove(struct platform_device *pdev)
|
||||
static void admac_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct admac_data *ad = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -933,8 +933,6 @@ static int admac_remove(struct platform_device *pdev)
|
||||
dma_async_device_unregister(&ad->dma);
|
||||
free_irq(ad->irq, ad);
|
||||
reset_control_rearm(ad->rstc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id admac_of_match[] = {
|
||||
@@ -949,7 +947,7 @@ static struct platform_driver apple_admac_driver = {
|
||||
.of_match_table = admac_of_match,
|
||||
},
|
||||
.probe = admac_probe,
|
||||
.remove = admac_remove,
|
||||
.remove_new = admac_remove,
|
||||
};
|
||||
module_platform_driver(apple_admac_driver);
|
||||
|
||||
|
||||
@@ -239,7 +239,7 @@ struct at_desc {
|
||||
bool memset_buffer;
|
||||
dma_addr_t memset_paddr;
|
||||
int *memset_vaddr;
|
||||
struct atdma_sg sg[];
|
||||
struct atdma_sg sg[] __counted_by(sglen);
|
||||
};
|
||||
|
||||
/*-- Channels --------------------------------------------------------*/
|
||||
@@ -2100,7 +2100,7 @@ err_irq:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int at_dma_remove(struct platform_device *pdev)
|
||||
static void at_dma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct at_dma *atdma = platform_get_drvdata(pdev);
|
||||
struct dma_chan *chan, *_chan;
|
||||
@@ -2122,8 +2122,6 @@ static int at_dma_remove(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
clk_disable_unprepare(atdma->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void at_dma_shutdown(struct platform_device *pdev)
|
||||
@@ -2242,7 +2240,7 @@ static const struct dev_pm_ops __maybe_unused at_dma_dev_pm_ops = {
|
||||
};
|
||||
|
||||
static struct platform_driver at_dma_driver = {
|
||||
.remove = at_dma_remove,
|
||||
.remove_new = at_dma_remove,
|
||||
.shutdown = at_dma_shutdown,
|
||||
.id_table = atdma_devtypes,
|
||||
.driver = {
|
||||
|
||||
@@ -2431,7 +2431,7 @@ err_free_irq:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int at_xdmac_remove(struct platform_device *pdev)
|
||||
static void at_xdmac_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct at_xdmac *atxdmac = (struct at_xdmac *)platform_get_drvdata(pdev);
|
||||
int i;
|
||||
@@ -2452,8 +2452,6 @@ static int at_xdmac_remove(struct platform_device *pdev)
|
||||
tasklet_kill(&atchan->tasklet);
|
||||
at_xdmac_free_chan_resources(&atchan->chan);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops __maybe_unused atmel_xdmac_dev_pm_ops = {
|
||||
@@ -2478,7 +2476,7 @@ MODULE_DEVICE_TABLE(of, atmel_xdmac_dt_ids);
|
||||
|
||||
static struct platform_driver at_xdmac_driver = {
|
||||
.probe = at_xdmac_probe,
|
||||
.remove = at_xdmac_remove,
|
||||
.remove_new = at_xdmac_remove,
|
||||
.driver = {
|
||||
.name = "at_xdmac",
|
||||
.of_match_table = of_match_ptr(atmel_xdmac_dt_ids),
|
||||
|
||||
@@ -1734,7 +1734,7 @@ fail_free_mchan:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sba_remove(struct platform_device *pdev)
|
||||
static void sba_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct sba_device *sba = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1745,8 +1745,6 @@ static int sba_remove(struct platform_device *pdev)
|
||||
sba_freeup_channel_resources(sba);
|
||||
|
||||
mbox_free_channel(sba->mchan);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id sba_of_match[] = {
|
||||
@@ -1758,7 +1756,7 @@ MODULE_DEVICE_TABLE(of, sba_of_match);
|
||||
|
||||
static struct platform_driver sba_driver = {
|
||||
.probe = sba_probe,
|
||||
.remove = sba_remove,
|
||||
.remove_new = sba_remove,
|
||||
.driver = {
|
||||
.name = "bcm-sba-raid",
|
||||
.of_match_table = sba_of_match,
|
||||
|
||||
@@ -1019,19 +1019,17 @@ err_no_dma:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int bcm2835_dma_remove(struct platform_device *pdev)
|
||||
static void bcm2835_dma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct bcm2835_dmadev *od = platform_get_drvdata(pdev);
|
||||
|
||||
dma_async_device_unregister(&od->ddev);
|
||||
bcm2835_dma_free(od);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver bcm2835_dma_driver = {
|
||||
.probe = bcm2835_dma_probe,
|
||||
.remove = bcm2835_dma_remove,
|
||||
.remove_new = bcm2835_dma_remove,
|
||||
.driver = {
|
||||
.name = "bcm2835-dma",
|
||||
.of_match_table = of_match_ptr(bcm2835_dma_of_match),
|
||||
|
||||
@@ -455,7 +455,7 @@ error_ofput:
|
||||
}
|
||||
|
||||
|
||||
static int mpc52xx_bcom_remove(struct platform_device *op)
|
||||
static void mpc52xx_bcom_remove(struct platform_device *op)
|
||||
{
|
||||
/* Clean up the engine */
|
||||
bcom_engine_cleanup();
|
||||
@@ -473,8 +473,6 @@ static int mpc52xx_bcom_remove(struct platform_device *op)
|
||||
/* Release memory */
|
||||
kfree(bcom_eng);
|
||||
bcom_eng = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id mpc52xx_bcom_of_match[] = {
|
||||
@@ -488,7 +486,7 @@ MODULE_DEVICE_TABLE(of, mpc52xx_bcom_of_match);
|
||||
|
||||
static struct platform_driver mpc52xx_bcom_of_platform_driver = {
|
||||
.probe = mpc52xx_bcom_probe,
|
||||
.remove = mpc52xx_bcom_remove,
|
||||
.remove_new = mpc52xx_bcom_remove,
|
||||
.driver = {
|
||||
.name = DRIVER_NAME,
|
||||
.of_match_table = mpc52xx_bcom_of_match,
|
||||
|
||||
@@ -117,7 +117,7 @@ struct axi_dmac_desc {
|
||||
unsigned int num_submitted;
|
||||
unsigned int num_completed;
|
||||
unsigned int num_sgs;
|
||||
struct axi_dmac_sg sg[];
|
||||
struct axi_dmac_sg sg[] __counted_by(num_sgs);
|
||||
};
|
||||
|
||||
struct axi_dmac_chan {
|
||||
@@ -484,12 +484,11 @@ static struct axi_dmac_desc *axi_dmac_alloc_desc(unsigned int num_sgs)
|
||||
desc = kzalloc(struct_size(desc, sg, num_sgs), GFP_NOWAIT);
|
||||
if (!desc)
|
||||
return NULL;
|
||||
desc->num_sgs = num_sgs;
|
||||
|
||||
for (i = 0; i < num_sgs; i++)
|
||||
desc->sg[i].id = AXI_DMAC_SG_UNUSED;
|
||||
|
||||
desc->num_sgs = num_sgs;
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
@@ -1029,7 +1028,7 @@ err_clk_disable:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int axi_dmac_remove(struct platform_device *pdev)
|
||||
static void axi_dmac_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct axi_dmac *dmac = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1038,8 +1037,6 @@ static int axi_dmac_remove(struct platform_device *pdev)
|
||||
tasklet_kill(&dmac->chan.vchan.task);
|
||||
dma_async_device_unregister(&dmac->dma_dev);
|
||||
clk_disable_unprepare(dmac->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id axi_dmac_of_match_table[] = {
|
||||
@@ -1054,7 +1051,7 @@ static struct platform_driver axi_dmac_driver = {
|
||||
.of_match_table = axi_dmac_of_match_table,
|
||||
},
|
||||
.probe = axi_dmac_probe,
|
||||
.remove = axi_dmac_remove,
|
||||
.remove_new = axi_dmac_remove,
|
||||
};
|
||||
module_platform_driver(axi_dmac_driver);
|
||||
|
||||
|
||||
@@ -1008,7 +1008,7 @@ err_disable_clk:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int jz4780_dma_remove(struct platform_device *pdev)
|
||||
static void jz4780_dma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct jz4780_dma_dev *jzdma = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
@@ -1020,8 +1020,6 @@ static int jz4780_dma_remove(struct platform_device *pdev)
|
||||
|
||||
for (i = 0; i < jzdma->soc_data->nb_channels; i++)
|
||||
tasklet_kill(&jzdma->chan[i].vchan.task);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct jz4780_dma_soc_data jz4740_dma_soc_data = {
|
||||
@@ -1124,7 +1122,7 @@ MODULE_DEVICE_TABLE(of, jz4780_dma_dt_match);
|
||||
|
||||
static struct platform_driver jz4780_dma_driver = {
|
||||
.probe = jz4780_dma_probe,
|
||||
.remove = jz4780_dma_remove,
|
||||
.remove_new = jz4780_dma_remove,
|
||||
.driver = {
|
||||
.name = "jz4780-dma",
|
||||
.of_match_table = jz4780_dma_dt_match,
|
||||
|
||||
@@ -62,6 +62,17 @@ static inline u32 axi_dma_ioread32(struct axi_dma_chip *chip, u32 reg)
|
||||
return ioread32(chip->regs + reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
axi_dma_iowrite64(struct axi_dma_chip *chip, u32 reg, u64 val)
|
||||
{
|
||||
iowrite64(val, chip->regs + reg);
|
||||
}
|
||||
|
||||
static inline u64 axi_dma_ioread64(struct axi_dma_chip *chip, u32 reg)
|
||||
{
|
||||
return ioread64(chip->regs + reg);
|
||||
}
|
||||
|
||||
static inline void
|
||||
axi_chan_iowrite32(struct axi_dma_chan *chan, u32 reg, u32 val)
|
||||
{
|
||||
@@ -182,38 +193,73 @@ static inline u32 axi_chan_irq_read(struct axi_dma_chan *chan)
|
||||
|
||||
static inline void axi_chan_disable(struct axi_dma_chan *chan)
|
||||
{
|
||||
u32 val;
|
||||
u64 val;
|
||||
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_EN_SHIFT);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels)
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_WE_SHIFT;
|
||||
else
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN2_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
if (chan->chip->dw->hdata->nr_channels >= DMAC_CHAN_16) {
|
||||
val = axi_dma_ioread64(chan->chip, DMAC_CHEN);
|
||||
if (chan->id >= DMAC_CHAN_16) {
|
||||
val &= ~((u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_EN_SHIFT + DMAC_CHAN_BLOCK_SHIFT));
|
||||
val |= (u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_EN2_WE_SHIFT + DMAC_CHAN_BLOCK_SHIFT);
|
||||
} else {
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_EN_SHIFT);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN2_WE_SHIFT;
|
||||
}
|
||||
axi_dma_iowrite64(chan->chip, DMAC_CHEN, val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_EN_SHIFT);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels)
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_WE_SHIFT;
|
||||
else
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN2_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, (u32)val);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void axi_chan_enable(struct axi_dma_chan *chan)
|
||||
{
|
||||
u32 val;
|
||||
u64 val;
|
||||
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels)
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_EN_WE_SHIFT;
|
||||
else
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_SHIFT |
|
||||
if (chan->chip->dw->hdata->nr_channels >= DMAC_CHAN_16) {
|
||||
val = axi_dma_ioread64(chan->chip, DMAC_CHEN);
|
||||
if (chan->id >= DMAC_CHAN_16) {
|
||||
val |= (u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_EN_SHIFT + DMAC_CHAN_BLOCK_SHIFT) |
|
||||
(u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_EN2_WE_SHIFT + DMAC_CHAN_BLOCK_SHIFT);
|
||||
} else {
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_EN2_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
}
|
||||
axi_dma_iowrite64(chan->chip, DMAC_CHEN, val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_EN_WE_SHIFT;
|
||||
} else {
|
||||
val |= BIT(chan->id) << DMAC_CHAN_EN_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_EN2_WE_SHIFT;
|
||||
}
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, (u32)val);
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool axi_chan_is_hw_enable(struct axi_dma_chan *chan)
|
||||
{
|
||||
u32 val;
|
||||
u64 val;
|
||||
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
if (chan->chip->dw->hdata->nr_channels >= DMAC_CHAN_16)
|
||||
val = axi_dma_ioread64(chan->chip, DMAC_CHEN);
|
||||
else
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
|
||||
return !!(val & (BIT(chan->id) << DMAC_CHAN_EN_SHIFT));
|
||||
if (chan->id >= DMAC_CHAN_16)
|
||||
return !!(val & ((u64)(BIT(chan->id) >> DMAC_CHAN_16) << DMAC_CHAN_BLOCK_SHIFT));
|
||||
else
|
||||
return !!(val & (BIT(chan->id) << DMAC_CHAN_EN_SHIFT));
|
||||
}
|
||||
|
||||
static void axi_dma_hw_init(struct axi_dma_chip *chip)
|
||||
@@ -1175,20 +1221,34 @@ static int dma_chan_pause(struct dma_chan *dchan)
|
||||
struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
|
||||
unsigned long flags;
|
||||
unsigned int timeout = 20; /* timeout iterations */
|
||||
u32 val;
|
||||
u64 val;
|
||||
|
||||
spin_lock_irqsave(&chan->vc.lock, flags);
|
||||
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
if (chan->chip->dw->hdata->nr_channels >= DMAC_CHAN_16) {
|
||||
val = axi_dma_ioread64(chan->chip, DMAC_CHSUSPREG);
|
||||
if (chan->id >= DMAC_CHAN_16) {
|
||||
val |= (u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_SUSP2_SHIFT + DMAC_CHAN_BLOCK_SHIFT) |
|
||||
(u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_SUSP2_WE_SHIFT + DMAC_CHAN_BLOCK_SHIFT);
|
||||
} else {
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT;
|
||||
}
|
||||
axi_dma_iowrite64(chan->chip, DMAC_CHSUSPREG, val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT |
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, (u32)val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val |= BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT |
|
||||
BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT;
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, (u32)val);
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
@@ -1210,18 +1270,32 @@ static int dma_chan_pause(struct dma_chan *dchan)
|
||||
/* Called in chan locked context */
|
||||
static inline void axi_chan_resume(struct axi_dma_chan *chan)
|
||||
{
|
||||
u32 val;
|
||||
u64 val;
|
||||
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, val);
|
||||
if (chan->chip->dw->hdata->nr_channels >= DMAC_CHAN_16) {
|
||||
val = axi_dma_ioread64(chan->chip, DMAC_CHSUSPREG);
|
||||
if (chan->id >= DMAC_CHAN_16) {
|
||||
val &= ~((u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_SUSP2_SHIFT + DMAC_CHAN_BLOCK_SHIFT));
|
||||
val |= ((u64)(BIT(chan->id) >> DMAC_CHAN_16)
|
||||
<< (DMAC_CHAN_SUSP2_WE_SHIFT + DMAC_CHAN_BLOCK_SHIFT));
|
||||
} else {
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT);
|
||||
}
|
||||
axi_dma_iowrite64(chan->chip, DMAC_CHSUSPREG, val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val);
|
||||
if (chan->chip->dw->hdata->reg_map_8_channels) {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHEN);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHEN, (u32)val);
|
||||
} else {
|
||||
val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG);
|
||||
val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT);
|
||||
val |= (BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT);
|
||||
axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, (u32)val);
|
||||
}
|
||||
}
|
||||
|
||||
chan->is_paused = false;
|
||||
@@ -1535,7 +1609,7 @@ err_pm_disable:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dw_remove(struct platform_device *pdev)
|
||||
static void dw_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct axi_dma_chip *chip = platform_get_drvdata(pdev);
|
||||
struct dw_axi_dma *dw = chip->dw;
|
||||
@@ -1564,8 +1638,6 @@ static int dw_remove(struct platform_device *pdev)
|
||||
list_del(&chan->vc.chan.device_node);
|
||||
tasklet_kill(&chan->vc.task);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops dw_axi_dma_pm_ops = {
|
||||
@@ -1588,7 +1660,7 @@ MODULE_DEVICE_TABLE(of, dw_dma_of_id_table);
|
||||
|
||||
static struct platform_driver dw_driver = {
|
||||
.probe = dw_probe,
|
||||
.remove = dw_remove,
|
||||
.remove_new = dw_remove,
|
||||
.driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.of_match_table = dw_dma_of_id_table,
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "../virt-dma.h"
|
||||
|
||||
#define DMAC_MAX_CHANNELS 16
|
||||
#define DMAC_MAX_CHANNELS 32
|
||||
#define DMAC_MAX_MASTERS 2
|
||||
#define DMAC_MAX_BLK_SIZE 0x200000
|
||||
|
||||
@@ -222,6 +222,10 @@ static inline struct axi_dma_chan *dchan_to_axi_dma_chan(struct dma_chan *dchan)
|
||||
/* DMAC_CHEN2 */
|
||||
#define DMAC_CHAN_EN2_WE_SHIFT 16
|
||||
|
||||
/* DMAC CHAN BLOCKS */
|
||||
#define DMAC_CHAN_BLOCK_SHIFT 32
|
||||
#define DMAC_CHAN_16 16
|
||||
|
||||
/* DMAC_CHSUSP */
|
||||
#define DMAC_CHAN_SUSP2_SHIFT 0
|
||||
#define DMAC_CHAN_SUSP2_WE_SHIFT 16
|
||||
|
||||
@@ -93,7 +93,7 @@ err_dw_dma_probe:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int dw_remove(struct platform_device *pdev)
|
||||
static void dw_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct dw_dma_chip_pdata *data = platform_get_drvdata(pdev);
|
||||
struct dw_dma_chip *chip = data->chip;
|
||||
@@ -109,8 +109,6 @@ static int dw_remove(struct platform_device *pdev)
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
clk_disable_unprepare(chip->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dw_shutdown(struct platform_device *pdev)
|
||||
@@ -193,7 +191,7 @@ static const struct dev_pm_ops dw_dev_pm_ops = {
|
||||
|
||||
static struct platform_driver dw_driver = {
|
||||
.probe = dw_probe,
|
||||
.remove = dw_remove,
|
||||
.remove_new = dw_remove,
|
||||
.shutdown = dw_shutdown,
|
||||
.driver = {
|
||||
.name = DRV_NAME,
|
||||
|
||||
@@ -213,7 +213,7 @@ struct ep93xx_dma_engine {
|
||||
#define INTERRUPT_NEXT_BUFFER 2
|
||||
|
||||
size_t num_channels;
|
||||
struct ep93xx_dma_chan channels[];
|
||||
struct ep93xx_dma_chan channels[] __counted_by(num_channels);
|
||||
};
|
||||
|
||||
static inline struct device *chan2dev(struct ep93xx_dma_chan *edmac)
|
||||
|
||||
@@ -814,7 +814,6 @@ static const struct fsl_mc_device_id dpaa2_qdma_id_table[] = {
|
||||
static struct fsl_mc_driver dpaa2_qdma_driver = {
|
||||
.driver = {
|
||||
.name = "dpaa2-qdma",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = dpaa2_qdma_probe,
|
||||
.remove = dpaa2_qdma_remove,
|
||||
|
||||
@@ -225,7 +225,7 @@ struct fsl_edma_engine {
|
||||
bool big_endian;
|
||||
struct edma_regs regs;
|
||||
u64 chan_masked;
|
||||
struct fsl_edma_chan chans[];
|
||||
struct fsl_edma_chan chans[] __counted_by(n_chans);
|
||||
};
|
||||
|
||||
#define edma_read_tcdreg(chan, __name) \
|
||||
|
||||
@@ -13,13 +13,11 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_dma.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/pm_domain.h>
|
||||
#include <linux/property.h>
|
||||
|
||||
#include "fsl-edma-common.h"
|
||||
|
||||
@@ -232,10 +230,8 @@ static int fsl_edma3_irq_init(struct platform_device *pdev, struct fsl_edma_engi
|
||||
|
||||
/* request channel irq */
|
||||
fsl_chan->txirq = platform_get_irq(pdev, i);
|
||||
if (fsl_chan->txirq < 0) {
|
||||
dev_err(&pdev->dev, "Can't get chan %d's irq.\n", i);
|
||||
if (fsl_chan->txirq < 0)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = devm_request_irq(&pdev->dev, fsl_chan->txirq,
|
||||
fsl_edma3_tx_handler, IRQF_SHARED,
|
||||
@@ -418,8 +414,6 @@ static int fsl_edma3_attach_pd(struct platform_device *pdev, struct fsl_edma_eng
|
||||
|
||||
static int fsl_edma_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct of_device_id *of_id =
|
||||
of_match_device(fsl_edma_dt_ids, &pdev->dev);
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct fsl_edma_engine *fsl_edma;
|
||||
const struct fsl_edma_drvdata *drvdata = NULL;
|
||||
@@ -428,8 +422,7 @@ static int fsl_edma_probe(struct platform_device *pdev)
|
||||
int chans;
|
||||
int ret, i;
|
||||
|
||||
if (of_id)
|
||||
drvdata = of_id->data;
|
||||
drvdata = device_get_match_data(&pdev->dev);
|
||||
if (!drvdata) {
|
||||
dev_err(&pdev->dev, "unable to find driver data\n");
|
||||
return -EINVAL;
|
||||
@@ -617,7 +610,7 @@ static int fsl_edma_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fsl_edma_remove(struct platform_device *pdev)
|
||||
static void fsl_edma_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
struct fsl_edma_engine *fsl_edma = platform_get_drvdata(pdev);
|
||||
@@ -627,8 +620,6 @@ static int fsl_edma_remove(struct platform_device *pdev)
|
||||
of_dma_controller_free(np);
|
||||
dma_async_device_unregister(&fsl_edma->dma_dev);
|
||||
fsl_disable_clocks(fsl_edma, fsl_edma->drvdata->dmamuxs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fsl_edma_suspend_late(struct device *dev)
|
||||
@@ -692,7 +683,7 @@ static struct platform_driver fsl_edma_driver = {
|
||||
.pm = &fsl_edma_pm_ops,
|
||||
},
|
||||
.probe = fsl_edma_probe,
|
||||
.remove = fsl_edma_remove,
|
||||
.remove_new = fsl_edma_remove,
|
||||
};
|
||||
|
||||
static int __init fsl_edma_init(void)
|
||||
|
||||
@@ -1266,7 +1266,7 @@ static void fsl_qdma_cleanup_vchan(struct dma_device *dmadev)
|
||||
}
|
||||
}
|
||||
|
||||
static int fsl_qdma_remove(struct platform_device *pdev)
|
||||
static void fsl_qdma_remove(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
struct fsl_qdma_queue *status;
|
||||
@@ -1283,7 +1283,6 @@ static int fsl_qdma_remove(struct platform_device *pdev)
|
||||
dma_free_coherent(&pdev->dev, sizeof(struct fsl_qdma_format) *
|
||||
status->n_cq, status->cq, status->bus_addr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id fsl_qdma_dt_ids[] = {
|
||||
@@ -1298,7 +1297,7 @@ static struct platform_driver fsl_qdma_driver = {
|
||||
.of_match_table = fsl_qdma_dt_ids,
|
||||
},
|
||||
.probe = fsl_qdma_probe,
|
||||
.remove = fsl_qdma_remove,
|
||||
.remove_new = fsl_qdma_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(fsl_qdma_driver);
|
||||
|
||||
@@ -857,7 +857,7 @@ static void fsl_re_remove_chan(struct fsl_re_chan *chan)
|
||||
chan->oub_phys_addr);
|
||||
}
|
||||
|
||||
static int fsl_re_remove(struct platform_device *ofdev)
|
||||
static void fsl_re_remove(struct platform_device *ofdev)
|
||||
{
|
||||
struct fsl_re_drv_private *re_priv;
|
||||
struct device *dev;
|
||||
@@ -872,8 +872,6 @@ static int fsl_re_remove(struct platform_device *ofdev)
|
||||
|
||||
/* Unregister the driver */
|
||||
dma_async_device_unregister(&re_priv->dma_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id fsl_re_ids[] = {
|
||||
@@ -888,7 +886,7 @@ static struct platform_driver fsl_re_driver = {
|
||||
.of_match_table = fsl_re_ids,
|
||||
},
|
||||
.probe = fsl_re_probe,
|
||||
.remove = fsl_re_remove,
|
||||
.remove_new = fsl_re_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(fsl_re_driver);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user