mirror of https://gitee.com/openkylin/linux.git
Merge remote-tracking branch 'torvalds/master' into perf/core
To pick up fixes Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
commit
1796829d91
|
@ -122,6 +122,7 @@ ForEachMacros:
|
|||
- 'drm_for_each_bridge_in_chain'
|
||||
- 'drm_for_each_connector_iter'
|
||||
- 'drm_for_each_crtc'
|
||||
- 'drm_for_each_crtc_reverse'
|
||||
- 'drm_for_each_encoder'
|
||||
- 'drm_for_each_encoder_mask'
|
||||
- 'drm_for_each_fb'
|
||||
|
@ -203,14 +204,13 @@ ForEachMacros:
|
|||
- 'for_each_matching_node'
|
||||
- 'for_each_matching_node_and_match'
|
||||
- 'for_each_member'
|
||||
- 'for_each_mem_region'
|
||||
- 'for_each_memblock_type'
|
||||
- 'for_each_memcg_cache_index'
|
||||
- 'for_each_mem_pfn_range'
|
||||
- '__for_each_mem_range'
|
||||
- 'for_each_mem_range'
|
||||
- '__for_each_mem_range_rev'
|
||||
- 'for_each_mem_range_rev'
|
||||
- 'for_each_mem_region'
|
||||
- 'for_each_migratetype_order'
|
||||
- 'for_each_msi_entry'
|
||||
- 'for_each_msi_entry_safe'
|
||||
|
@ -276,10 +276,8 @@ ForEachMacros:
|
|||
- 'for_each_reserved_mem_range'
|
||||
- 'for_each_reserved_mem_region'
|
||||
- 'for_each_rtd_codec_dais'
|
||||
- 'for_each_rtd_codec_dais_rollback'
|
||||
- 'for_each_rtd_components'
|
||||
- 'for_each_rtd_cpu_dais'
|
||||
- 'for_each_rtd_cpu_dais_rollback'
|
||||
- 'for_each_rtd_dais'
|
||||
- 'for_each_set_bit'
|
||||
- 'for_each_set_bit_from'
|
||||
|
@ -298,6 +296,7 @@ ForEachMacros:
|
|||
- '__for_each_thread'
|
||||
- 'for_each_thread'
|
||||
- 'for_each_unicast_dest_pgid'
|
||||
- 'for_each_vsi'
|
||||
- 'for_each_wakeup_source'
|
||||
- 'for_each_zone'
|
||||
- 'for_each_zone_zonelist'
|
||||
|
@ -330,6 +329,7 @@ ForEachMacros:
|
|||
- 'hlist_for_each_entry_rcu_bh'
|
||||
- 'hlist_for_each_entry_rcu_notrace'
|
||||
- 'hlist_for_each_entry_safe'
|
||||
- 'hlist_for_each_entry_srcu'
|
||||
- '__hlist_for_each_rcu'
|
||||
- 'hlist_for_each_safe'
|
||||
- 'hlist_nulls_for_each_entry'
|
||||
|
@ -378,6 +378,7 @@ ForEachMacros:
|
|||
- 'list_for_each_entry_safe_continue'
|
||||
- 'list_for_each_entry_safe_from'
|
||||
- 'list_for_each_entry_safe_reverse'
|
||||
- 'list_for_each_entry_srcu'
|
||||
- 'list_for_each_prev'
|
||||
- 'list_for_each_prev_safe'
|
||||
- 'list_for_each_safe'
|
||||
|
@ -411,6 +412,8 @@ ForEachMacros:
|
|||
- 'of_property_for_each_string'
|
||||
- 'of_property_for_each_u32'
|
||||
- 'pci_bus_for_each_resource'
|
||||
- 'pcl_for_each_chunk'
|
||||
- 'pcl_for_each_segment'
|
||||
- 'pcm_for_each_format'
|
||||
- 'ping_portaddr_for_each_entry'
|
||||
- 'plist_for_each'
|
||||
|
|
|
@ -13,6 +13,22 @@ This file documents the driver for the Rockchip ISP1 that is part of RK3288
|
|||
and RK3399 SoCs. The driver is located under drivers/staging/media/rkisp1
|
||||
and uses the Media-Controller API.
|
||||
|
||||
Revisions
|
||||
=========
|
||||
|
||||
There exist multiple smaller revisions to this ISP that got introduced in
|
||||
later SoCs. Revisions can be found in the enum :c:type:`rkisp1_cif_isp_version`
|
||||
in the UAPI and the revision of the ISP inside the running SoC can be read
|
||||
in the field hw_revision of struct media_device_info as returned by
|
||||
ioctl MEDIA_IOC_DEVICE_INFO.
|
||||
|
||||
Versions in use are:
|
||||
|
||||
- RKISP1_V10: used at least in rk3288 and rk3399
|
||||
- RKISP1_V11: declared in the original vendor code, but not used
|
||||
- RKISP1_V12: used at least in rk3326 and px30
|
||||
- RKISP1_V13: used at least in rk1808
|
||||
|
||||
Topology
|
||||
========
|
||||
.. _rkisp1_topology_graph:
|
||||
|
|
|
@ -100,6 +100,11 @@ Instruction Macros
|
|||
~~~~~~~~~~~~~~~~~~
|
||||
This section covers ``SYM_FUNC_*`` and ``SYM_CODE_*`` enumerated above.
|
||||
|
||||
``objtool`` requires that all code must be contained in an ELF symbol. Symbol
|
||||
names that have a ``.L`` prefix do not emit symbol table entries. ``.L``
|
||||
prefixed symbols can be used within a code region, but should be avoided for
|
||||
denoting a range of code via ``SYM_*_START/END`` annotations.
|
||||
|
||||
* ``SYM_FUNC_START`` and ``SYM_FUNC_START_LOCAL`` are supposed to be **the
|
||||
most frequent markings**. They are used for functions with standard calling
|
||||
conventions -- global and local. Like in C, they both align the functions to
|
||||
|
|
|
@ -232,7 +232,6 @@ properties:
|
|||
by this cpu (see ./idle-states.yaml).
|
||||
|
||||
capacity-dmips-mhz:
|
||||
$ref: '/schemas/types.yaml#/definitions/uint32'
|
||||
description:
|
||||
u32 value representing CPU capacity (see ./cpu-capacity.txt) in
|
||||
DMIPS/MHz, relative to highest capacity-dmips-mhz
|
||||
|
|
|
@ -40,7 +40,7 @@ Optional properties:
|
|||
documents on how to describe the way the sii902x device is
|
||||
connected to the rest of the audio system:
|
||||
Documentation/devicetree/bindings/sound/simple-card.yaml
|
||||
Documentation/devicetree/bindings/sound/audio-graph-card.txt
|
||||
Documentation/devicetree/bindings/sound/audio-graph-card.yaml
|
||||
Note: In case of the audio-graph-card binding the used port
|
||||
index should be 3.
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ connected to.
|
|||
|
||||
For a description of the display interface sink function blocks, see
|
||||
Documentation/devicetree/bindings/display/mediatek/mediatek,dsi.txt and
|
||||
Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.txt.
|
||||
Documentation/devicetree/bindings/display/mediatek/mediatek,dpi.yaml.
|
||||
|
||||
Required properties (all function blocks):
|
||||
- compatible: "mediatek,<chip>-disp-<function>", one of
|
||||
|
@ -61,7 +61,7 @@ Required properties (DMA function blocks):
|
|||
"mediatek,<chip>-disp-wdma"
|
||||
the supported chips are mt2701, mt8167 and mt8173.
|
||||
- larb: Should contain a phandle pointing to the local arbiter device as defined
|
||||
in Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
in Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
||||
- iommus: Should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
|
|
|
@ -85,7 +85,6 @@ properties:
|
|||
wlf,micd-timeout-ms:
|
||||
description:
|
||||
Timeout for microphone detection, specified in milliseconds.
|
||||
$ref: "/schemas/types.yaml#/definitions/uint32"
|
||||
|
||||
wlf,micd-force-micbias:
|
||||
description:
|
||||
|
|
|
@ -49,7 +49,6 @@ properties:
|
|||
description:
|
||||
This property controls the Accumulation Dead band which allows to set the
|
||||
level of current below which no accumulation takes place.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
maximum: 255
|
||||
default: 0
|
||||
|
||||
|
|
|
@ -73,11 +73,9 @@ properties:
|
|||
description: |
|
||||
Temperature sensor trimming factor. It can be used to manually adjust the
|
||||
temperature measurements within 7.130 degrees Celsius.
|
||||
maxItems: 1
|
||||
items:
|
||||
default: 0
|
||||
minimum: 0
|
||||
maximum: 7130
|
||||
default: 0
|
||||
minimum: 0
|
||||
maximum: 7130
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@ properties:
|
|||
ti,bus-range-microvolt:
|
||||
description: |
|
||||
This is the operating range of the bus voltage in microvolt
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [16000000, 32000000]
|
||||
default: 32000000
|
||||
|
||||
|
|
|
@ -39,11 +39,9 @@ properties:
|
|||
|
||||
i2c-gpio,delay-us:
|
||||
description: delay between GPIO operations (may depend on each platform)
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
i2c-gpio,timeout-ms:
|
||||
description: timeout to get data
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
# Deprecated properties, do not use in new device tree sources:
|
||||
gpios:
|
||||
|
|
|
@ -66,21 +66,18 @@ properties:
|
|||
default: 400000
|
||||
|
||||
i2c-sda-hold-time-ns:
|
||||
maxItems: 1
|
||||
description: |
|
||||
The property should contain the SDA hold time in nanoseconds. This option
|
||||
is only supported in hardware blocks version 1.11a or newer or on
|
||||
Microsemi SoCs.
|
||||
|
||||
i2c-scl-falling-time-ns:
|
||||
maxItems: 1
|
||||
description: |
|
||||
The property should contain the SCL falling time in nanoseconds.
|
||||
This value is used to compute the tLOW period.
|
||||
default: 300
|
||||
|
||||
i2c-sda-falling-time-ns:
|
||||
maxItems: 1
|
||||
description: |
|
||||
The property should contain the SDA falling time in nanoseconds.
|
||||
This value is used to compute the tHIGH period.
|
||||
|
|
|
@ -80,7 +80,7 @@ properties:
|
|||
type: boolean
|
||||
|
||||
bipolar:
|
||||
description: see Documentation/devicetree/bindings/iio/adc/adc.txt
|
||||
description: see Documentation/devicetree/bindings/iio/adc/adc.yaml
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
|
|
|
@ -23,7 +23,6 @@ properties:
|
|||
maxItems: 1
|
||||
|
||||
shunt-resistor-micro-ohms:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: |
|
||||
Value in micro Ohms of the shunt resistor connected between the RS+ and
|
||||
RS- inputs, across which the current is measured. Value needed to compute
|
||||
|
|
|
@ -246,7 +246,6 @@ patternProperties:
|
|||
Resolution (bits) to use for conversions:
|
||||
- can be 6, 8, 10 or 12 on stm32f4
|
||||
- can be 8, 10, 12, 14 or 16 on stm32h7 and stm32mp1
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
st,adc-channels:
|
||||
description: |
|
||||
|
|
|
@ -42,7 +42,6 @@ properties:
|
|||
const: 1
|
||||
|
||||
ti,channel0-current-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Channel 0 current in uA.
|
||||
enum:
|
||||
- 0
|
||||
|
@ -51,7 +50,6 @@ properties:
|
|||
- 20
|
||||
|
||||
ti,channel3-current-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Channel 3 current in uA.
|
||||
enum:
|
||||
- 0
|
||||
|
|
|
@ -46,31 +46,42 @@ properties:
|
|||
two properties must be present:
|
||||
|
||||
adi,range-microvolt:
|
||||
$ref: /schemas/types.yaml#/definitions/int32-array
|
||||
description: |
|
||||
Voltage output range specified as <minimum, maximum>
|
||||
enum:
|
||||
- [[0, 5000000]]
|
||||
- [[0, 10000000]]
|
||||
- [[-5000000, 5000000]]
|
||||
- [[-10000000, 10000000]]
|
||||
oneOf:
|
||||
- items:
|
||||
- const: 0
|
||||
- enum: [5000000, 10000000]
|
||||
- items:
|
||||
- const: -5000000
|
||||
- const: 5000000
|
||||
- items:
|
||||
- const: -10000000
|
||||
- const: 10000000
|
||||
|
||||
adi,range-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/int32-array
|
||||
description: |
|
||||
Current output range specified as <minimum, maximum>
|
||||
enum:
|
||||
- [[0, 20000]]
|
||||
- [[0, 24000]]
|
||||
- [[4, 24000]]
|
||||
- [[-20000, 20000]]
|
||||
- [[-24000, 24000]]
|
||||
- [[-1000, 22000]]
|
||||
oneOf:
|
||||
- items:
|
||||
- const: 0
|
||||
- enum: [20000, 24000]
|
||||
- items:
|
||||
- const: 4
|
||||
- const: 24000
|
||||
- items:
|
||||
- const: -20000
|
||||
- const: 20000
|
||||
- items:
|
||||
- const: -24000
|
||||
- const: 24000
|
||||
- items:
|
||||
- const: -1000
|
||||
- const: 22000
|
||||
|
||||
reset-gpios: true
|
||||
|
||||
adi,dc-dc-ilim-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
enum: [150000, 200000, 250000, 300000, 350000, 400000]
|
||||
description: |
|
||||
The dc-to-dc converter current limit.
|
||||
|
|
|
@ -21,7 +21,6 @@ properties:
|
|||
description: Connected to ADC_RDY pin.
|
||||
|
||||
maxim,led-current-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
description: |
|
||||
|
|
|
@ -70,11 +70,9 @@ properties:
|
|||
|
||||
touchscreen-x-mm:
|
||||
description: horizontal length in mm of the touchscreen
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
touchscreen-y-mm:
|
||||
description: vertical length in mm of the touchscreen
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
dependencies:
|
||||
touchscreen-size-x: [ touchscreen-size-y ]
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/leds/richtek,rt8515.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Richtek RT8515 1.5A dual channel LED driver
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
description: |
|
||||
The Richtek RT8515 is a dual channel (two mode) LED driver that
|
||||
supports driving a white LED in flash or torch mode. The maximum
|
||||
current for each mode is defined in hardware using two resistors
|
||||
RFS and RTS.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: richtek,rt8515
|
||||
|
||||
enf-gpios:
|
||||
maxItems: 1
|
||||
description: A connection to the 'ENF' (enable flash) pin.
|
||||
|
||||
ent-gpios:
|
||||
maxItems: 1
|
||||
description: A connection to the 'ENT' (enable torch) pin.
|
||||
|
||||
richtek,rfs-ohms:
|
||||
minimum: 7680
|
||||
maximum: 367000
|
||||
description: The resistance value of the RFS resistor. This
|
||||
resistors limits the maximum flash current. This must be set
|
||||
for the property flash-max-microamp to work, the RFS resistor
|
||||
defines the range of the dimmer setting (brightness) of the
|
||||
flash LED.
|
||||
|
||||
richtek,rts-ohms:
|
||||
minimum: 7680
|
||||
maximum: 367000
|
||||
description: The resistance value of the RTS resistor. This
|
||||
resistors limits the maximum torch current. This must be set
|
||||
for the property torch-max-microamp to work, the RTS resistor
|
||||
defines the range of the dimmer setting (brightness) of the
|
||||
torch LED.
|
||||
|
||||
led:
|
||||
type: object
|
||||
$ref: common.yaml#
|
||||
properties:
|
||||
function: true
|
||||
color: true
|
||||
flash-max-timeout-us: true
|
||||
|
||||
flash-max-microamp:
|
||||
maximum: 700000
|
||||
description: The maximum current for flash mode
|
||||
is hardwired to the component using the RFS resistor to
|
||||
ground. The maximum hardware current setting is calculated
|
||||
according to the formula Imax = 5500 / RFS. The lowest
|
||||
allowed resistance value is 7.86 kOhm giving an absolute
|
||||
maximum current of 700mA. By setting this attribute in
|
||||
the device tree, you can further restrict the maximum
|
||||
current below the hardware limit. This requires the RFS
|
||||
to be defined as it defines the maximum range.
|
||||
|
||||
led-max-microamp:
|
||||
maximum: 700000
|
||||
description: The maximum current for torch mode
|
||||
is hardwired to the component using the RTS resistor to
|
||||
ground. The maximum hardware current setting is calculated
|
||||
according to the formula Imax = 5500 / RTS. The lowest
|
||||
allowed resistance value is 7.86 kOhm giving an absolute
|
||||
maximum current of 700mA. By setting this attribute in
|
||||
the device tree, you can further restrict the maximum
|
||||
current below the hardware limit. This requires the RTS
|
||||
to be defined as it defines the maximum range.
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- ent-gpios
|
||||
- enf-gpios
|
||||
- led
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
|
||||
led-controller {
|
||||
compatible = "richtek,rt8515";
|
||||
enf-gpios = <&gpio4 12 GPIO_ACTIVE_HIGH>;
|
||||
ent-gpios = <&gpio4 13 GPIO_ACTIVE_HIGH>;
|
||||
richtek,rfs-ohms = <16000>;
|
||||
richtek,rts-ohms = <100000>;
|
||||
|
||||
led {
|
||||
function = LED_FUNCTION_FLASH;
|
||||
color = <LED_COLOR_ID_WHITE>;
|
||||
flash-max-timeout-us = <250000>;
|
||||
flash-max-microamp = <150000>;
|
||||
led-max-microamp = <25000>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -16,7 +16,7 @@ Required properties:
|
|||
- power-domains: a phandle to the power domain, see
|
||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
||||
- mediatek,larb: must contain the local arbiters in the current Socs, see
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
||||
for details.
|
||||
- iommus: should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
|
|
|
@ -14,7 +14,7 @@ Required properties:
|
|||
- power-domains: a phandle to the power domain, see
|
||||
Documentation/devicetree/bindings/power/power_domain.txt for details.
|
||||
- mediatek,larb: must contain the local arbiters in the current SoCs, see
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
||||
for details.
|
||||
- iommus: should point to the respective IOMMU block with master port as
|
||||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
|
|
|
@ -28,7 +28,7 @@ Required properties (DMA function blocks, child node):
|
|||
argument, see Documentation/devicetree/bindings/iommu/mediatek,iommu.txt
|
||||
for details.
|
||||
- mediatek,larb: must contain the local arbiters in the current Socs, see
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.txt
|
||||
Documentation/devicetree/bindings/memory-controllers/mediatek,smi-larb.yaml
|
||||
for details.
|
||||
|
||||
Example:
|
||||
|
|
|
@ -259,7 +259,6 @@ properties:
|
|||
waiting for I/O signalling and card power supply to be stable,
|
||||
regardless of whether pwrseq-simple is used. Default to 10ms if
|
||||
no available.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
default: 10
|
||||
|
||||
supports-cqe:
|
||||
|
|
|
@ -41,13 +41,11 @@ properties:
|
|||
description:
|
||||
Delay in ms after powering the card and de-asserting the
|
||||
reset-gpios (if any).
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
power-off-delay-us:
|
||||
description:
|
||||
Delay in us after asserting the reset-gpios (if any)
|
||||
during power off of the card.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
|
|
@ -122,7 +122,6 @@ properties:
|
|||
such as flow control thresholds.
|
||||
|
||||
rx-internal-delay-ps:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: |
|
||||
RGMII Receive Clock Delay defined in pico seconds.
|
||||
This is used for controllers that have configurable RX internal delays.
|
||||
|
@ -140,7 +139,6 @@ properties:
|
|||
is used for components that can have configurable fifo sizes.
|
||||
|
||||
tx-internal-delay-ps:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: |
|
||||
RGMII Transmit Clock Delay defined in pico seconds.
|
||||
This is used for controllers that have configurable TX internal delays.
|
||||
|
|
|
@ -212,7 +212,6 @@ properties:
|
|||
Triplet of delays. The 1st cell is reset pre-delay in micro
|
||||
seconds. The 2nd cell is reset pulse in micro seconds. The 3rd
|
||||
cell is reset post-delay in micro seconds.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 3
|
||||
maxItems: 3
|
||||
|
||||
|
|
|
@ -83,21 +83,18 @@ properties:
|
|||
for each of the battery capacity lookup table.
|
||||
|
||||
operating-range-celsius:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: operating temperature range of a battery
|
||||
items:
|
||||
- description: minimum temperature at which battery can operate
|
||||
- description: maximum temperature at which battery can operate
|
||||
|
||||
ambient-celsius:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: safe range of ambient temperature
|
||||
items:
|
||||
- description: alert when ambient temperature is lower than this value
|
||||
- description: alert when ambient temperature is higher than this value
|
||||
|
||||
alert-celsius:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: safe range of battery temperature
|
||||
items:
|
||||
- description: alert when battery temperature is lower than this value
|
||||
|
|
|
@ -50,7 +50,6 @@ properties:
|
|||
maxItems: 1
|
||||
|
||||
input-current-limit-microamp:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: Maximum input current in micro Amps.
|
||||
minimum: 50000
|
||||
maximum: 500000
|
||||
|
|
|
@ -62,7 +62,6 @@ properties:
|
|||
description: IRQ line information.
|
||||
|
||||
dlg,irq-polling-delay-passive-ms:
|
||||
$ref: "/schemas/types.yaml#/definitions/uint32"
|
||||
minimum: 1000
|
||||
maximum: 10000
|
||||
description: |
|
||||
|
|
|
@ -72,11 +72,9 @@ properties:
|
|||
|
||||
startup-delay-us:
|
||||
description: startup time in microseconds
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
off-on-delay-us:
|
||||
description: off delay time in microseconds
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
enable-active-high:
|
||||
description:
|
||||
|
|
|
@ -27,7 +27,6 @@ properties:
|
|||
1: chargeable
|
||||
|
||||
quartz-load-femtofarads:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
The capacitive load of the quartz(x-tal), expressed in femto
|
||||
Farad (fF). The default value shall be listed (if optional),
|
||||
|
@ -47,7 +46,6 @@ properties:
|
|||
deprecated: true
|
||||
|
||||
trickle-resistor-ohms:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
Selected resistor for trickle charger. Should be given
|
||||
if trickle charger should be enabled.
|
||||
|
|
|
@ -88,14 +88,12 @@ properties:
|
|||
description:
|
||||
Rate at which poll occurs when auto-poll is set.
|
||||
default 100ms.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
default: 100
|
||||
|
||||
poll-timeout-ms:
|
||||
description:
|
||||
Poll timeout when auto-poll is set, default
|
||||
3000ms.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
default: 3000
|
||||
|
||||
required:
|
||||
|
|
|
@ -7,8 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
title: Mediatek MT8192 with MT6359, RT1015 and RT5682 ASoC sound card driver
|
||||
|
||||
maintainers:
|
||||
- Jiaxin Yu <jiaxin.yu@mediatek.com>
|
||||
- Shane Chien <shane.chien@mediatek.com>
|
||||
- Jiaxin Yu <jiaxin.yu@mediatek.com>
|
||||
- Shane Chien <shane.chien@mediatek.com>
|
||||
|
||||
description:
|
||||
This binding describes the MT8192 sound card.
|
||||
|
|
|
@ -41,14 +41,12 @@ properties:
|
|||
values of 2k, 4k or 8k. If set to 0 it will be off. If this node is not
|
||||
mentioned or if the value is unknown, then micbias resistor is set to
|
||||
4k.
|
||||
$ref: "/schemas/types.yaml#/definitions/uint32"
|
||||
enum: [ 0, 2, 4, 8 ]
|
||||
|
||||
micbias-voltage-m-volts:
|
||||
description: The bias voltage to be used in mVolts. The voltage can take
|
||||
values from 1.25V to 3V by 250mV steps. If this node is not mentioned
|
||||
or the value is unknown, then the value is set to 1.25V.
|
||||
$ref: "/schemas/types.yaml#/definitions/uint32"
|
||||
enum: [ 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000 ]
|
||||
|
||||
lrclk-strength:
|
||||
|
|
|
@ -21,6 +21,8 @@ properties:
|
|||
reg:
|
||||
description: module registers
|
||||
|
||||
ranges: true
|
||||
|
||||
power-domains:
|
||||
description:
|
||||
PM domain provider node and an args specifier containing
|
||||
|
@ -62,6 +64,8 @@ properties:
|
|||
'#size-cells':
|
||||
const: 2
|
||||
|
||||
dma-coherent: true
|
||||
|
||||
patternProperties:
|
||||
"^usb@":
|
||||
type: object
|
||||
|
|
|
@ -19,7 +19,6 @@ properties:
|
|||
pattern: "^watchdog(@.*|-[0-9a-f])?$"
|
||||
|
||||
timeout-sec:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description:
|
||||
Contains the watchdog timeout in seconds.
|
||||
|
||||
|
|
|
@ -1196,7 +1196,7 @@ icmp_errors_use_inbound_ifaddr - BOOLEAN
|
|||
|
||||
If non-zero, the message will be sent with the primary address of
|
||||
the interface that received the packet that caused the icmp error.
|
||||
This is the behaviour network many administrators will expect from
|
||||
This is the behaviour many network administrators will expect from
|
||||
a router. And it can make debugging complicated network layouts
|
||||
much easier.
|
||||
|
||||
|
@ -1807,12 +1807,24 @@ seg6_flowlabel - INTEGER
|
|||
``conf/default/*``:
|
||||
Change the interface-specific default settings.
|
||||
|
||||
These settings would be used during creating new interfaces.
|
||||
|
||||
|
||||
``conf/all/*``:
|
||||
Change all the interface-specific settings.
|
||||
|
||||
[XXX: Other special features than forwarding?]
|
||||
|
||||
conf/all/disable_ipv6 - BOOLEAN
|
||||
Changing this value is same as changing ``conf/default/disable_ipv6``
|
||||
setting and also all per-interface ``disable_ipv6`` settings to the same
|
||||
value.
|
||||
|
||||
Reading this value does not have any particular meaning. It does not say
|
||||
whether IPv6 support is enabled or disabled. Returned value can be 1
|
||||
also in the case when some interface has ``disable_ipv6`` set to 0 and
|
||||
has configured IPv6 addresses.
|
||||
|
||||
conf/all/forwarding - BOOLEAN
|
||||
Enable global IPv6 forwarding between all interfaces.
|
||||
|
||||
|
|
|
@ -3239,6 +3239,7 @@ L: netdev@vger.kernel.org
|
|||
S: Supported
|
||||
W: http://sourceforge.net/projects/bonding/
|
||||
F: drivers/net/bonding/
|
||||
F: include/net/bonding.h
|
||||
F: include/uapi/linux/if_bonding.h
|
||||
|
||||
BOSCH SENSORTEC BMA400 ACCELEROMETER IIO DRIVER
|
||||
|
@ -3411,7 +3412,7 @@ F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml
|
|||
F: drivers/pci/controller/pcie-brcmstb.c
|
||||
F: drivers/staging/vc04_services
|
||||
N: bcm2711
|
||||
N: bcm2835
|
||||
N: bcm283*
|
||||
|
||||
BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
|
||||
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||
|
@ -8433,11 +8434,8 @@ F: drivers/i3c/
|
|||
F: include/linux/i3c/
|
||||
|
||||
IA64 (Itanium) PLATFORM
|
||||
M: Tony Luck <tony.luck@intel.com>
|
||||
M: Fenghua Yu <fenghua.yu@intel.com>
|
||||
L: linux-ia64@vger.kernel.org
|
||||
S: Odd Fixes
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
|
||||
S: Orphan
|
||||
F: Documentation/ia64/
|
||||
F: arch/ia64/
|
||||
|
||||
|
@ -12415,6 +12413,7 @@ F: tools/testing/selftests/net/ipsec.c
|
|||
NETWORKING [IPv4/IPv6]
|
||||
M: "David S. Miller" <davem@davemloft.net>
|
||||
M: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
|
||||
M: David Ahern <dsahern@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
|
||||
|
|
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@
|
|||
VERSION = 5
|
||||
PATCHLEVEL = 11
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -15,7 +15,8 @@ static int node_offset(void *fdt, const char *node_path)
|
|||
{
|
||||
int offset = fdt_path_offset(fdt, node_path);
|
||||
if (offset == -FDT_ERR_NOTFOUND)
|
||||
offset = fdt_add_subnode(fdt, 0, node_path);
|
||||
/* Add the node to root if not found, dropping the leading '/' */
|
||||
offset = fdt_add_subnode(fdt, 0, node_path + 1);
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,13 @@ chosen {
|
|||
stdout-path = &uart1;
|
||||
};
|
||||
|
||||
aliases {
|
||||
mmc0 = &usdhc2;
|
||||
mmc1 = &usdhc3;
|
||||
mmc2 = &usdhc4;
|
||||
/delete-property/ mmc3;
|
||||
};
|
||||
|
||||
memory@10000000 {
|
||||
device_type = "memory";
|
||||
reg = <0x10000000 0x80000000>;
|
||||
|
|
|
@ -418,7 +418,7 @@ reg_2p5v: ldo2 {
|
|||
|
||||
/* VDD_AUD_1P8: Audio codec */
|
||||
reg_aud_1p8v: ldo3 {
|
||||
regulator-name = "vdd1p8";
|
||||
regulator-name = "vdd1p8a";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-boot-on;
|
||||
|
|
|
@ -137,7 +137,7 @@ lcd_out: endpoint {
|
|||
|
||||
lcd_backlight: lcd-backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm4 0 5000000>;
|
||||
pwms = <&pwm4 0 5000000 0>;
|
||||
pwm-names = "LCD_BKLT_PWM";
|
||||
|
||||
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
|
||||
|
@ -167,7 +167,7 @@ i2c_lcd: i2c-gpio-lcd {
|
|||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabld";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c_cam: i2c-gpio-cam {
|
||||
|
@ -179,7 +179,7 @@ i2c_cam: i2c-gpio-cam {
|
|||
i2c-gpio,delay-us = <2>; /* ~100 kHz */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabld";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -53,7 +53,6 @@ vcc_3v3: regulator-vcc-3v3 {
|
|||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
|
||||
phy-handle = <&phy>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-reset-duration = <2>;
|
||||
phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
|
||||
|
@ -63,10 +62,19 @@ mdio {
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy: ethernet-phy@0 {
|
||||
/*
|
||||
* The PHY can appear at either address 0 or 4 due to the
|
||||
* configuration (LED) pin not being pulled sufficiently.
|
||||
*/
|
||||
ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
qca,clk-out-frequency = <125000000>;
|
||||
};
|
||||
|
||||
ethernet-phy@4 {
|
||||
reg = <4>;
|
||||
qca,clk-out-frequency = <125000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ pcf2127: rtc@0 {
|
|||
compatible = "nxp,pcf2127";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <2000000>;
|
||||
reset-source;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -12,4 +12,42 @@ cpu@300 {
|
|||
200000 0>;
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
/* Modem trace memory */
|
||||
ram@06000000 {
|
||||
reg = <0x06000000 0x00f00000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/* Modem shared memory */
|
||||
ram@06f00000 {
|
||||
reg = <0x06f00000 0x00100000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/* Modem private memory */
|
||||
ram@07000000 {
|
||||
reg = <0x07000000 0x01000000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/*
|
||||
* Initial Secure Software ISSW memory
|
||||
*
|
||||
* This is probably only used if the kernel tries
|
||||
* to actually call into trustzone to run secure
|
||||
* applications, which the mainline kernel probably
|
||||
* will not do on this old chipset. But you can never
|
||||
* be too careful, so reserve this memory anyway.
|
||||
*/
|
||||
ram@17f00000 {
|
||||
reg = <0x17f00000 0x00100000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -12,4 +12,42 @@ cpu@300 {
|
|||
200000 0>;
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
/* Modem trace memory */
|
||||
ram@06000000 {
|
||||
reg = <0x06000000 0x00f00000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/* Modem shared memory */
|
||||
ram@06f00000 {
|
||||
reg = <0x06f00000 0x00100000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/* Modem private memory */
|
||||
ram@07000000 {
|
||||
reg = <0x07000000 0x01000000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
/*
|
||||
* Initial Secure Software ISSW memory
|
||||
*
|
||||
* This is probably only used if the kernel tries
|
||||
* to actually call into trustzone to run secure
|
||||
* applications, which the mainline kernel probably
|
||||
* will not do on this old chipset. But you can never
|
||||
* be too careful, so reserve this memory anyway.
|
||||
*/
|
||||
ram@17f00000 {
|
||||
reg = <0x17f00000 0x00100000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "ste-dbx5x0.dtsi"
|
||||
|
||||
/ {
|
||||
cpus {
|
||||
cpu@300 {
|
||||
/* cpufreq controls */
|
||||
operating-points = <1152000 0
|
||||
800000 0
|
||||
400000 0
|
||||
200000 0>;
|
||||
};
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
/*
|
||||
* Initial Secure Software ISSW memory
|
||||
*
|
||||
* This is probably only used if the kernel tries
|
||||
* to actually call into trustzone to run secure
|
||||
* applications, which the mainline kernel probably
|
||||
* will not do on this old chipset. But you can never
|
||||
* be too careful, so reserve this memory anyway.
|
||||
*/
|
||||
ram@17f00000 {
|
||||
reg = <0x17f00000 0x00100000>;
|
||||
no-map;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -4,7 +4,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include "ste-db8500.dtsi"
|
||||
#include "ste-db9500.dtsi"
|
||||
#include "ste-href-ab8500.dtsi"
|
||||
#include "ste-href-family-pinctrl.dtsi"
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
#define MX6Q_CCM_CCR 0x0
|
||||
|
||||
.align 3
|
||||
.arm
|
||||
|
||||
.macro sync_l2_cache
|
||||
|
||||
|
|
|
@ -4,11 +4,16 @@
|
|||
*/
|
||||
usb {
|
||||
compatible = "simple-bus";
|
||||
dma-ranges;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges = <0x0 0x0 0x0 0x68500000 0x0 0x00400000>;
|
||||
|
||||
/*
|
||||
* Internally, USB bus to the interconnect can only address up
|
||||
* to 40-bit
|
||||
*/
|
||||
dma-ranges = <0 0 0 0 0x100 0x0>;
|
||||
|
||||
usbphy0: usb-phy@0 {
|
||||
compatible = "brcm,sr-usb-combo-phy";
|
||||
reg = <0x0 0x00000000 0x0 0x100>;
|
||||
|
|
|
@ -101,7 +101,7 @@ optee {
|
|||
reboot {
|
||||
compatible ="syscon-reboot";
|
||||
regmap = <&rst>;
|
||||
offset = <0xb0>;
|
||||
offset = <0>;
|
||||
mask = <0x02>;
|
||||
};
|
||||
|
||||
|
|
|
@ -253,7 +253,7 @@ aips1: bus@30000000 {
|
|||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
spba: bus@30000000 {
|
||||
spba: spba-bus@30000000 {
|
||||
compatible = "fsl,spba-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
|
|
@ -266,7 +266,7 @@ gpio3: gpio@30220000 {
|
|||
#gpio-cells = <2>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
gpio-ranges = <&iomuxc 0 56 26>, <&iomuxc 0 144 4>;
|
||||
gpio-ranges = <&iomuxc 0 56 26>, <&iomuxc 26 144 4>;
|
||||
};
|
||||
|
||||
gpio4: gpio@30230000 {
|
||||
|
|
|
@ -991,8 +991,6 @@ CONFIG_ARCH_TEGRA_210_SOC=y
|
|||
CONFIG_ARCH_TEGRA_186_SOC=y
|
||||
CONFIG_ARCH_TEGRA_194_SOC=y
|
||||
CONFIG_ARCH_TEGRA_234_SOC=y
|
||||
CONFIG_ARCH_K3_AM6_SOC=y
|
||||
CONFIG_ARCH_K3_J721E_SOC=y
|
||||
CONFIG_TI_SCI_PM_DOMAINS=y
|
||||
CONFIG_EXTCON_PTN5150=m
|
||||
CONFIG_EXTCON_USB_GPIO=y
|
||||
|
|
|
@ -247,9 +247,11 @@ static inline const void *__tag_set(const void *addr, u8 tag)
|
|||
|
||||
|
||||
/*
|
||||
* The linear kernel range starts at the bottom of the virtual address space.
|
||||
* Check whether an arbitrary address is within the linear map, which
|
||||
* lives in the [PAGE_OFFSET, PAGE_END) interval at the bottom of the
|
||||
* kernel's TTBR1 address range.
|
||||
*/
|
||||
#define __is_lm_address(addr) (((u64)(addr) & ~PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET))
|
||||
#define __is_lm_address(addr) (((u64)(addr) ^ PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET))
|
||||
|
||||
#define __lm_to_phys(addr) (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
|
||||
#define __kimg_to_phys(addr) ((addr) - kimage_voffset)
|
||||
|
|
|
@ -54,7 +54,7 @@ extern void ia64_xchg_called_with_bad_pointer(void);
|
|||
})
|
||||
|
||||
#define xchg(ptr, x) \
|
||||
((__typeof__(*(ptr))) __xchg((unsigned long) (x), (ptr), sizeof(*(ptr))))
|
||||
({(__typeof__(*(ptr))) __xchg((unsigned long) (x), (ptr), sizeof(*(ptr)));})
|
||||
|
||||
/*
|
||||
* Atomic compare and exchange. Compare OLD with MEM, if identical,
|
||||
|
|
|
@ -171,30 +171,35 @@ void vtime_account_hardirq(struct task_struct *tsk)
|
|||
static irqreturn_t
|
||||
timer_interrupt (int irq, void *dev_id)
|
||||
{
|
||||
unsigned long cur_itm, new_itm, ticks;
|
||||
unsigned long new_itm;
|
||||
|
||||
if (cpu_is_offline(smp_processor_id())) {
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
new_itm = local_cpu_data->itm_next;
|
||||
cur_itm = ia64_get_itc();
|
||||
|
||||
if (!time_after(cur_itm, new_itm)) {
|
||||
if (!time_after(ia64_get_itc(), new_itm))
|
||||
printk(KERN_ERR "Oops: timer tick before it's due (itc=%lx,itm=%lx)\n",
|
||||
cur_itm, new_itm);
|
||||
ticks = 1;
|
||||
} else {
|
||||
ticks = DIV_ROUND_UP(cur_itm - new_itm,
|
||||
local_cpu_data->itm_delta);
|
||||
new_itm += ticks * local_cpu_data->itm_delta;
|
||||
ia64_get_itc(), new_itm);
|
||||
|
||||
while (1) {
|
||||
new_itm += local_cpu_data->itm_delta;
|
||||
|
||||
legacy_timer_tick(smp_processor_id() == time_keeper_id);
|
||||
|
||||
local_cpu_data->itm_next = new_itm;
|
||||
|
||||
if (time_after(new_itm, ia64_get_itc()))
|
||||
break;
|
||||
|
||||
/*
|
||||
* Allow IPIs to interrupt the timer loop.
|
||||
*/
|
||||
local_irq_enable();
|
||||
local_irq_disable();
|
||||
}
|
||||
|
||||
if (smp_processor_id() != time_keeper_id)
|
||||
ticks = 0;
|
||||
|
||||
legacy_timer_tick(ticks);
|
||||
|
||||
do {
|
||||
/*
|
||||
* If we're too close to the next clock tick for
|
||||
|
|
|
@ -180,14 +180,19 @@ void notrace restore_interrupts(void)
|
|||
|
||||
void replay_soft_interrupts(void)
|
||||
{
|
||||
/*
|
||||
* We use local_paca rather than get_paca() to avoid all
|
||||
* the debug_smp_processor_id() business in this low level
|
||||
* function
|
||||
*/
|
||||
unsigned char happened = local_paca->irq_happened;
|
||||
struct pt_regs regs;
|
||||
|
||||
/*
|
||||
* Be careful here, calling these interrupt handlers can cause
|
||||
* softirqs to be raised, which they may run when calling irq_exit,
|
||||
* which will cause local_irq_enable() to be run, which can then
|
||||
* recurse into this function. Don't keep any state across
|
||||
* interrupt handler calls which may change underneath us.
|
||||
*
|
||||
* We use local_paca rather than get_paca() to avoid all the
|
||||
* debug_smp_processor_id() business in this low level function.
|
||||
*/
|
||||
|
||||
ppc_save_regs(®s);
|
||||
regs.softe = IRQS_ENABLED;
|
||||
|
||||
|
@ -209,7 +214,7 @@ void replay_soft_interrupts(void)
|
|||
* This is a higher priority interrupt than the others, so
|
||||
* replay it first.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3S) && (happened & PACA_IRQ_HMI)) {
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3S) && (local_paca->irq_happened & PACA_IRQ_HMI)) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HMI;
|
||||
regs.trap = 0xe60;
|
||||
handle_hmi_exception(®s);
|
||||
|
@ -217,7 +222,7 @@ void replay_soft_interrupts(void)
|
|||
hard_irq_disable();
|
||||
}
|
||||
|
||||
if (happened & PACA_IRQ_DEC) {
|
||||
if (local_paca->irq_happened & PACA_IRQ_DEC) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DEC;
|
||||
regs.trap = 0x900;
|
||||
timer_interrupt(®s);
|
||||
|
@ -225,7 +230,7 @@ void replay_soft_interrupts(void)
|
|||
hard_irq_disable();
|
||||
}
|
||||
|
||||
if (happened & PACA_IRQ_EE) {
|
||||
if (local_paca->irq_happened & PACA_IRQ_EE) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_EE;
|
||||
regs.trap = 0x500;
|
||||
do_IRQ(®s);
|
||||
|
@ -233,7 +238,7 @@ void replay_soft_interrupts(void)
|
|||
hard_irq_disable();
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_PPC_DOORBELL) && (happened & PACA_IRQ_DBELL)) {
|
||||
if (IS_ENABLED(CONFIG_PPC_DOORBELL) && (local_paca->irq_happened & PACA_IRQ_DBELL)) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DBELL;
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3E))
|
||||
regs.trap = 0x280;
|
||||
|
@ -245,7 +250,7 @@ void replay_soft_interrupts(void)
|
|||
}
|
||||
|
||||
/* Book3E does not support soft-masking PMI interrupts */
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3S) && (happened & PACA_IRQ_PMI)) {
|
||||
if (IS_ENABLED(CONFIG_PPC_BOOK3S) && (local_paca->irq_happened & PACA_IRQ_PMI)) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_PMI;
|
||||
regs.trap = 0xf00;
|
||||
performance_monitor_exception(®s);
|
||||
|
@ -253,8 +258,7 @@ void replay_soft_interrupts(void)
|
|||
hard_irq_disable();
|
||||
}
|
||||
|
||||
happened = local_paca->irq_happened;
|
||||
if (happened & ~PACA_IRQ_HARD_DIS) {
|
||||
if (local_paca->irq_happened & ~PACA_IRQ_HARD_DIS) {
|
||||
/*
|
||||
* We are responding to the next interrupt, so interrupt-off
|
||||
* latencies should be reset here.
|
||||
|
|
|
@ -196,7 +196,7 @@ void __init setup_bootmem(void)
|
|||
max_pfn = PFN_DOWN(dram_end);
|
||||
max_low_pfn = max_pfn;
|
||||
dma32_phys_limit = min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_low_pfn));
|
||||
set_max_mapnr(max_low_pfn);
|
||||
set_max_mapnr(max_low_pfn - ARCH_PFN_OFFSET);
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
setup_initrd();
|
||||
|
|
|
@ -35,7 +35,7 @@ void uv_query_info(void)
|
|||
uv_info.guest_cpu_stor_len = uvcb.cpu_stor_len;
|
||||
uv_info.max_sec_stor_addr = ALIGN(uvcb.max_guest_stor_addr, PAGE_SIZE);
|
||||
uv_info.max_num_sec_conf = uvcb.max_num_sec_conf;
|
||||
uv_info.max_guest_cpus = uvcb.max_guest_cpus;
|
||||
uv_info.max_guest_cpu_id = uvcb.max_guest_cpu_id;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
|
||||
|
|
|
@ -96,7 +96,7 @@ struct uv_cb_qui {
|
|||
u32 max_num_sec_conf;
|
||||
u64 max_guest_stor_addr;
|
||||
u8 reserved88[158 - 136];
|
||||
u16 max_guest_cpus;
|
||||
u16 max_guest_cpu_id;
|
||||
u8 reserveda0[200 - 160];
|
||||
} __packed __aligned(8);
|
||||
|
||||
|
@ -273,7 +273,7 @@ struct uv_info {
|
|||
unsigned long guest_cpu_stor_len;
|
||||
unsigned long max_sec_stor_addr;
|
||||
unsigned int max_num_sec_conf;
|
||||
unsigned short max_guest_cpus;
|
||||
unsigned short max_guest_cpu_id;
|
||||
};
|
||||
|
||||
extern struct uv_info uv_info;
|
||||
|
|
|
@ -368,7 +368,7 @@ static ssize_t uv_query_max_guest_cpus(struct kobject *kobj,
|
|||
struct kobj_attribute *attr, char *page)
|
||||
{
|
||||
return scnprintf(page, PAGE_SIZE, "%d\n",
|
||||
uv_info.max_guest_cpus);
|
||||
uv_info.max_guest_cpu_id + 1);
|
||||
}
|
||||
|
||||
static struct kobj_attribute uv_query_max_guest_cpus_attr =
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include <asm/export.h>
|
||||
|
||||
/* rdi: arg1 ... normal C conventions. rax is saved/restored. */
|
||||
.macro THUNK name, func, put_ret_addr_in_rdi=0
|
||||
.macro THUNK name, func
|
||||
SYM_FUNC_START_NOALIGN(\name)
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
|
@ -25,13 +25,8 @@ SYM_FUNC_START_NOALIGN(\name)
|
|||
pushq %r10
|
||||
pushq %r11
|
||||
|
||||
.if \put_ret_addr_in_rdi
|
||||
/* 8(%rbp) is return addr on stack */
|
||||
movq 8(%rbp), %rdi
|
||||
.endif
|
||||
|
||||
call \func
|
||||
jmp .L_restore
|
||||
jmp __thunk_restore
|
||||
SYM_FUNC_END(\name)
|
||||
_ASM_NOKPROBE(\name)
|
||||
.endm
|
||||
|
@ -44,7 +39,7 @@ SYM_FUNC_END(\name)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_PREEMPTION
|
||||
SYM_CODE_START_LOCAL_NOALIGN(.L_restore)
|
||||
SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore)
|
||||
popq %r11
|
||||
popq %r10
|
||||
popq %r9
|
||||
|
@ -56,6 +51,6 @@ SYM_CODE_START_LOCAL_NOALIGN(.L_restore)
|
|||
popq %rdi
|
||||
popq %rbp
|
||||
ret
|
||||
_ASM_NOKPROBE(.L_restore)
|
||||
SYM_CODE_END(.L_restore)
|
||||
_ASM_NOKPROBE(__thunk_restore)
|
||||
SYM_CODE_END(__thunk_restore)
|
||||
#endif
|
||||
|
|
|
@ -613,6 +613,7 @@ DECLARE_IDTENTRY_VC(X86_TRAP_VC, exc_vmm_communication);
|
|||
|
||||
#ifdef CONFIG_XEN_PV
|
||||
DECLARE_IDTENTRY_XENCB(X86_TRAP_OTHER, exc_xen_hypervisor_callback);
|
||||
DECLARE_IDTENTRY_RAW(X86_TRAP_OTHER, exc_xen_unknown_trap);
|
||||
#endif
|
||||
|
||||
/* Device interrupts common/spurious */
|
||||
|
|
|
@ -583,6 +583,13 @@ DEFINE_IDTENTRY_RAW(xenpv_exc_debug)
|
|||
exc_debug(regs);
|
||||
}
|
||||
|
||||
DEFINE_IDTENTRY_RAW(exc_xen_unknown_trap)
|
||||
{
|
||||
/* This should never happen and there is no way to handle it. */
|
||||
pr_err("Unknown trap in Xen PV mode.");
|
||||
BUG();
|
||||
}
|
||||
|
||||
struct trap_array_entry {
|
||||
void (*orig)(void);
|
||||
void (*xen)(void);
|
||||
|
@ -631,6 +638,7 @@ static bool __ref get_trap_addr(void **addr, unsigned int ist)
|
|||
{
|
||||
unsigned int nr;
|
||||
bool ist_okay = false;
|
||||
bool found = false;
|
||||
|
||||
/*
|
||||
* Replace trap handler addresses by Xen specific ones.
|
||||
|
@ -645,6 +653,7 @@ static bool __ref get_trap_addr(void **addr, unsigned int ist)
|
|||
if (*addr == entry->orig) {
|
||||
*addr = entry->xen;
|
||||
ist_okay = entry->ist_okay;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -655,9 +664,13 @@ static bool __ref get_trap_addr(void **addr, unsigned int ist)
|
|||
nr = (*addr - (void *)early_idt_handler_array[0]) /
|
||||
EARLY_IDT_HANDLER_SIZE;
|
||||
*addr = (void *)xen_early_idt_handler_array[nr];
|
||||
found = true;
|
||||
}
|
||||
|
||||
if (WARN_ON(ist != 0 && !ist_okay))
|
||||
if (!found)
|
||||
*addr = (void *)xen_asm_exc_xen_unknown_trap;
|
||||
|
||||
if (WARN_ON(found && ist != 0 && !ist_okay))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -178,6 +178,7 @@ xen_pv_trap asm_exc_simd_coprocessor_error
|
|||
#ifdef CONFIG_IA32_EMULATION
|
||||
xen_pv_trap entry_INT80_compat
|
||||
#endif
|
||||
xen_pv_trap asm_exc_xen_unknown_trap
|
||||
xen_pv_trap asm_exc_xen_hypervisor_callback
|
||||
|
||||
__INIT
|
||||
|
|
|
@ -1016,6 +1016,8 @@ static void blkcg_css_offline(struct cgroup_subsys_state *css)
|
|||
*/
|
||||
void blkcg_destroy_blkgs(struct blkcg *blkcg)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
spin_lock_irq(&blkcg->lock);
|
||||
|
||||
while (!hlist_empty(&blkcg->blkg_list)) {
|
||||
|
@ -1023,14 +1025,20 @@ void blkcg_destroy_blkgs(struct blkcg *blkcg)
|
|||
struct blkcg_gq, blkcg_node);
|
||||
struct request_queue *q = blkg->q;
|
||||
|
||||
if (spin_trylock(&q->queue_lock)) {
|
||||
blkg_destroy(blkg);
|
||||
spin_unlock(&q->queue_lock);
|
||||
} else {
|
||||
if (need_resched() || !spin_trylock(&q->queue_lock)) {
|
||||
/*
|
||||
* Given that the system can accumulate a huge number
|
||||
* of blkgs in pathological cases, check to see if we
|
||||
* need to rescheduling to avoid softlockup.
|
||||
*/
|
||||
spin_unlock_irq(&blkcg->lock);
|
||||
cpu_relax();
|
||||
cond_resched();
|
||||
spin_lock_irq(&blkcg->lock);
|
||||
continue;
|
||||
}
|
||||
|
||||
blkg_destroy(blkg);
|
||||
spin_unlock(&q->queue_lock);
|
||||
}
|
||||
|
||||
spin_unlock_irq(&blkcg->lock);
|
||||
|
|
|
@ -304,7 +304,7 @@ static inline bool hctx_may_queue(struct blk_mq_hw_ctx *hctx,
|
|||
struct request_queue *q = hctx->queue;
|
||||
struct blk_mq_tag_set *set = q->tag_set;
|
||||
|
||||
if (!test_bit(BLK_MQ_S_TAG_ACTIVE, &q->queue_flags))
|
||||
if (!test_bit(QUEUE_FLAG_HCTX_ACTIVE, &q->queue_flags))
|
||||
return true;
|
||||
users = atomic_read(&set->active_queues_shared_sbitmap);
|
||||
} else {
|
||||
|
|
|
@ -45,10 +45,11 @@ static void disk_release_events(struct gendisk *disk);
|
|||
void set_capacity(struct gendisk *disk, sector_t sectors)
|
||||
{
|
||||
struct block_device *bdev = disk->part0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&bdev->bd_size_lock);
|
||||
spin_lock_irqsave(&bdev->bd_size_lock, flags);
|
||||
i_size_write(bdev->bd_inode, (loff_t)sectors << SECTOR_SHIFT);
|
||||
spin_unlock(&bdev->bd_size_lock);
|
||||
spin_unlock_irqrestore(&bdev->bd_size_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(set_capacity);
|
||||
|
||||
|
|
|
@ -88,9 +88,11 @@ static int (*check_part[])(struct parsed_partitions *) = {
|
|||
|
||||
static void bdev_set_nr_sectors(struct block_device *bdev, sector_t sectors)
|
||||
{
|
||||
spin_lock(&bdev->bd_size_lock);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&bdev->bd_size_lock, flags);
|
||||
i_size_write(bdev->bd_inode, (loff_t)sectors << SECTOR_SHIFT);
|
||||
spin_unlock(&bdev->bd_size_lock);
|
||||
spin_unlock_irqrestore(&bdev->bd_size_lock, flags);
|
||||
}
|
||||
|
||||
static struct parsed_partitions *allocate_partitions(struct gendisk *hd)
|
||||
|
@ -384,7 +386,7 @@ static struct block_device *add_partition(struct gendisk *disk, int partno,
|
|||
|
||||
err = blk_alloc_devt(bdev, &devt);
|
||||
if (err)
|
||||
goto out_bdput;
|
||||
goto out_put;
|
||||
pdev->devt = devt;
|
||||
|
||||
/* delay uevent until 'holders' subdir is created */
|
||||
|
|
|
@ -1107,6 +1107,11 @@ static int nc_dma_get_range(struct device *dev, u64 *size)
|
|||
|
||||
ncomp = (struct acpi_iort_named_component *)node->node_data;
|
||||
|
||||
if (!ncomp->memory_address_limit) {
|
||||
pr_warn(FW_BUG "Named component missing memory address limit\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*size = ncomp->memory_address_limit >= 64 ? U64_MAX :
|
||||
1ULL<<ncomp->memory_address_limit;
|
||||
|
||||
|
@ -1126,6 +1131,11 @@ static int rc_dma_get_range(struct device *dev, u64 *size)
|
|||
|
||||
rc = (struct acpi_iort_root_complex *)node->node_data;
|
||||
|
||||
if (!rc->memory_address_limit) {
|
||||
pr_warn(FW_BUG "Root complex missing memory address limit\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*size = rc->memory_address_limit >= 64 ? U64_MAX :
|
||||
1ULL<<rc->memory_address_limit;
|
||||
|
||||
|
@ -1173,8 +1183,8 @@ void iort_dma_setup(struct device *dev, u64 *dma_addr, u64 *dma_size)
|
|||
end = dmaaddr + size - 1;
|
||||
mask = DMA_BIT_MASK(ilog2(end) + 1);
|
||||
dev->bus_dma_limit = end;
|
||||
dev->coherent_dma_mask = mask;
|
||||
*dev->dma_mask = mask;
|
||||
dev->coherent_dma_mask = min(dev->coherent_dma_mask, mask);
|
||||
*dev->dma_mask = min(*dev->dma_mask, mask);
|
||||
}
|
||||
|
||||
*dma_addr = dmaaddr;
|
||||
|
|
|
@ -251,20 +251,12 @@ int __acpi_device_uevent_modalias(struct acpi_device *adev,
|
|||
if (add_uevent_var(env, "MODALIAS="))
|
||||
return -ENOMEM;
|
||||
|
||||
len = create_pnp_modalias(adev, &env->buf[env->buflen - 1],
|
||||
sizeof(env->buf) - env->buflen);
|
||||
if (len < 0)
|
||||
return len;
|
||||
|
||||
env->buflen += len;
|
||||
if (!adev->data.of_compatible)
|
||||
return 0;
|
||||
|
||||
if (len > 0 && add_uevent_var(env, "MODALIAS="))
|
||||
return -ENOMEM;
|
||||
|
||||
len = create_of_modalias(adev, &env->buf[env->buflen - 1],
|
||||
sizeof(env->buf) - env->buflen);
|
||||
if (adev->data.of_compatible)
|
||||
len = create_of_modalias(adev, &env->buf[env->buflen - 1],
|
||||
sizeof(env->buf) - env->buflen);
|
||||
else
|
||||
len = create_pnp_modalias(adev, &env->buf[env->buflen - 1],
|
||||
sizeof(env->buf) - env->buflen);
|
||||
if (len < 0)
|
||||
return len;
|
||||
|
||||
|
|
|
@ -174,6 +174,8 @@ struct acpi_thermal {
|
|||
struct thermal_zone_device *thermal_zone;
|
||||
int kelvin_offset; /* in millidegrees */
|
||||
struct work_struct thermal_check_work;
|
||||
struct mutex thermal_check_lock;
|
||||
refcount_t thermal_check_count;
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
|
@ -495,14 +497,6 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void acpi_thermal_check(void *data)
|
||||
{
|
||||
struct acpi_thermal *tz = data;
|
||||
|
||||
thermal_zone_device_update(tz->thermal_zone,
|
||||
THERMAL_EVENT_UNSPECIFIED);
|
||||
}
|
||||
|
||||
/* sys I/F for generic thermal sysfs support */
|
||||
|
||||
static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
|
||||
|
@ -900,6 +894,12 @@ static void acpi_thermal_unregister_thermal_zone(struct acpi_thermal *tz)
|
|||
Driver Interface
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
static void acpi_queue_thermal_check(struct acpi_thermal *tz)
|
||||
{
|
||||
if (!work_pending(&tz->thermal_check_work))
|
||||
queue_work(acpi_thermal_pm_queue, &tz->thermal_check_work);
|
||||
}
|
||||
|
||||
static void acpi_thermal_notify(struct acpi_device *device, u32 event)
|
||||
{
|
||||
struct acpi_thermal *tz = acpi_driver_data(device);
|
||||
|
@ -910,17 +910,17 @@ static void acpi_thermal_notify(struct acpi_device *device, u32 event)
|
|||
|
||||
switch (event) {
|
||||
case ACPI_THERMAL_NOTIFY_TEMPERATURE:
|
||||
acpi_thermal_check(tz);
|
||||
acpi_queue_thermal_check(tz);
|
||||
break;
|
||||
case ACPI_THERMAL_NOTIFY_THRESHOLDS:
|
||||
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_THRESHOLDS);
|
||||
acpi_thermal_check(tz);
|
||||
acpi_queue_thermal_check(tz);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
case ACPI_THERMAL_NOTIFY_DEVICES:
|
||||
acpi_thermal_trips_update(tz, ACPI_TRIPS_REFRESH_DEVICES);
|
||||
acpi_thermal_check(tz);
|
||||
acpi_queue_thermal_check(tz);
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
dev_name(&device->dev), event, 0);
|
||||
break;
|
||||
|
@ -1020,7 +1020,25 @@ static void acpi_thermal_check_fn(struct work_struct *work)
|
|||
{
|
||||
struct acpi_thermal *tz = container_of(work, struct acpi_thermal,
|
||||
thermal_check_work);
|
||||
acpi_thermal_check(tz);
|
||||
|
||||
/*
|
||||
* In general, it is not sufficient to check the pending bit, because
|
||||
* subsequent instances of this function may be queued after one of them
|
||||
* has started running (e.g. if _TMP sleeps). Avoid bailing out if just
|
||||
* one of them is running, though, because it may have done the actual
|
||||
* check some time ago, so allow at least one of them to block on the
|
||||
* mutex while another one is running the update.
|
||||
*/
|
||||
if (!refcount_dec_not_one(&tz->thermal_check_count))
|
||||
return;
|
||||
|
||||
mutex_lock(&tz->thermal_check_lock);
|
||||
|
||||
thermal_zone_device_update(tz->thermal_zone, THERMAL_EVENT_UNSPECIFIED);
|
||||
|
||||
refcount_inc(&tz->thermal_check_count);
|
||||
|
||||
mutex_unlock(&tz->thermal_check_lock);
|
||||
}
|
||||
|
||||
static int acpi_thermal_add(struct acpi_device *device)
|
||||
|
@ -1052,6 +1070,8 @@ static int acpi_thermal_add(struct acpi_device *device)
|
|||
if (result)
|
||||
goto free_memory;
|
||||
|
||||
refcount_set(&tz->thermal_check_count, 3);
|
||||
mutex_init(&tz->thermal_check_lock);
|
||||
INIT_WORK(&tz->thermal_check_work, acpi_thermal_check_fn);
|
||||
|
||||
pr_info(PREFIX "%s [%s] (%ld C)\n", acpi_device_name(device),
|
||||
|
@ -1117,7 +1137,7 @@ static int acpi_thermal_resume(struct device *dev)
|
|||
tz->state.active |= tz->trips.active[i].flags.enabled;
|
||||
}
|
||||
|
||||
queue_work(acpi_thermal_pm_queue, &tz->thermal_check_work);
|
||||
acpi_queue_thermal_check(tz);
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
|
|
@ -1022,6 +1022,12 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
|
|||
if (!sock)
|
||||
return err;
|
||||
|
||||
/*
|
||||
* We need to make sure we don't get any errant requests while we're
|
||||
* reallocating the ->socks array.
|
||||
*/
|
||||
blk_mq_freeze_queue(nbd->disk->queue);
|
||||
|
||||
if (!netlink && !nbd->task_setup &&
|
||||
!test_bit(NBD_RT_BOUND, &config->runtime_flags))
|
||||
nbd->task_setup = current;
|
||||
|
@ -1060,10 +1066,12 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
|
|||
nsock->cookie = 0;
|
||||
socks[config->num_connections++] = nsock;
|
||||
atomic_inc(&config->live_connections);
|
||||
blk_mq_unfreeze_queue(nbd->disk->queue);
|
||||
|
||||
return 0;
|
||||
|
||||
put_socket:
|
||||
blk_mq_unfreeze_queue(nbd->disk->queue);
|
||||
sockfd_put(sock);
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,10 @@
|
|||
#define CREATE_TRACE_POINTS
|
||||
#include "trace.h"
|
||||
|
||||
#define MB_TO_SECTS(mb) (((sector_t)mb * SZ_1M) >> SECTOR_SHIFT)
|
||||
static inline sector_t mb_to_sects(unsigned long mb)
|
||||
{
|
||||
return ((sector_t)mb * SZ_1M) >> SECTOR_SHIFT;
|
||||
}
|
||||
|
||||
static inline unsigned int null_zone_no(struct nullb_device *dev, sector_t sect)
|
||||
{
|
||||
|
@ -77,12 +80,11 @@ int null_init_zoned_dev(struct nullb_device *dev, struct request_queue *q)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
zone_capacity_sects = MB_TO_SECTS(dev->zone_capacity);
|
||||
dev_capacity_sects = MB_TO_SECTS(dev->size);
|
||||
dev->zone_size_sects = MB_TO_SECTS(dev->zone_size);
|
||||
dev->nr_zones = dev_capacity_sects >> ilog2(dev->zone_size_sects);
|
||||
if (dev_capacity_sects & (dev->zone_size_sects - 1))
|
||||
dev->nr_zones++;
|
||||
zone_capacity_sects = mb_to_sects(dev->zone_capacity);
|
||||
dev_capacity_sects = mb_to_sects(dev->size);
|
||||
dev->zone_size_sects = mb_to_sects(dev->zone_size);
|
||||
dev->nr_zones = round_up(dev_capacity_sects, dev->zone_size_sects)
|
||||
>> ilog2(dev->zone_size_sects);
|
||||
|
||||
dev->zones = kvmalloc_array(dev->nr_zones, sizeof(struct nullb_zone),
|
||||
GFP_KERNEL | __GFP_ZERO);
|
||||
|
|
|
@ -945,7 +945,8 @@ static void blkif_set_queue_limits(struct blkfront_info *info)
|
|||
if (info->feature_discard) {
|
||||
blk_queue_flag_set(QUEUE_FLAG_DISCARD, rq);
|
||||
blk_queue_max_discard_sectors(rq, get_capacity(gd));
|
||||
rq->limits.discard_granularity = info->discard_granularity;
|
||||
rq->limits.discard_granularity = info->discard_granularity ?:
|
||||
info->physical_sector_size;
|
||||
rq->limits.discard_alignment = info->discard_alignment;
|
||||
if (info->feature_secdiscard)
|
||||
blk_queue_flag_set(QUEUE_FLAG_SECERASE, rq);
|
||||
|
@ -2179,19 +2180,12 @@ static void blkfront_closing(struct blkfront_info *info)
|
|||
|
||||
static void blkfront_setup_discard(struct blkfront_info *info)
|
||||
{
|
||||
int err;
|
||||
unsigned int discard_granularity;
|
||||
unsigned int discard_alignment;
|
||||
|
||||
info->feature_discard = 1;
|
||||
err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
|
||||
"discard-granularity", "%u", &discard_granularity,
|
||||
"discard-alignment", "%u", &discard_alignment,
|
||||
NULL);
|
||||
if (!err) {
|
||||
info->discard_granularity = discard_granularity;
|
||||
info->discard_alignment = discard_alignment;
|
||||
}
|
||||
info->discard_granularity = xenbus_read_unsigned(info->xbdev->otherend,
|
||||
"discard-granularity",
|
||||
0);
|
||||
info->discard_alignment = xenbus_read_unsigned(info->xbdev->otherend,
|
||||
"discard-alignment", 0);
|
||||
info->feature_secdiscard =
|
||||
!!xenbus_read_unsigned(info->xbdev->otherend, "discard-secure",
|
||||
0);
|
||||
|
|
|
@ -54,6 +54,7 @@ static int integrator_lm_populate(int num, struct device *dev)
|
|||
ret = of_platform_default_populate(child, NULL, dev);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to populate module\n");
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@ config MXC_CLK
|
|||
|
||||
config MXC_CLK_SCU
|
||||
tristate
|
||||
depends on ARCH_MXC
|
||||
depends on IMX_SCU && HAVE_ARM_SMCCC
|
||||
|
||||
config CLK_IMX1
|
||||
def_bool SOC_IMX1
|
||||
|
|
|
@ -392,7 +392,8 @@ static int mmp2_audio_clk_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused mmp2_audio_clk_suspend(struct device *dev)
|
||||
#ifdef CONFIG_PM
|
||||
static int mmp2_audio_clk_suspend(struct device *dev)
|
||||
{
|
||||
struct mmp2_audio_clk *priv = dev_get_drvdata(dev);
|
||||
|
||||
|
@ -404,7 +405,7 @@ static int __maybe_unused mmp2_audio_clk_suspend(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused mmp2_audio_clk_resume(struct device *dev)
|
||||
static int mmp2_audio_clk_resume(struct device *dev)
|
||||
{
|
||||
struct mmp2_audio_clk *priv = dev_get_drvdata(dev);
|
||||
|
||||
|
@ -415,6 +416,7 @@ static int __maybe_unused mmp2_audio_clk_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct dev_pm_ops mmp2_audio_clk_pm_ops = {
|
||||
SET_RUNTIME_PM_OPS(mmp2_audio_clk_suspend, mmp2_audio_clk_resume, NULL)
|
||||
|
|
|
@ -891,21 +891,6 @@ static struct clk_branch gcc_boot_rom_ahb_clk = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct clk_branch gcc_camera_ahb_clk = {
|
||||
.halt_reg = 0xb008,
|
||||
.halt_check = BRANCH_HALT,
|
||||
.hwcg_reg = 0xb008,
|
||||
.hwcg_bit = 1,
|
||||
.clkr = {
|
||||
.enable_reg = 0xb008,
|
||||
.enable_mask = BIT(0),
|
||||
.hw.init = &(struct clk_init_data){
|
||||
.name = "gcc_camera_ahb_clk",
|
||||
.ops = &clk_branch2_ops,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk_branch gcc_camera_hf_axi_clk = {
|
||||
.halt_reg = 0xb020,
|
||||
.halt_check = BRANCH_HALT,
|
||||
|
@ -2317,7 +2302,6 @@ static struct clk_regmap *gcc_sc7180_clocks[] = {
|
|||
[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
|
||||
[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
|
||||
[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
|
||||
[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
|
||||
[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
|
||||
[GCC_CAMERA_THROTTLE_HF_AXI_CLK] = &gcc_camera_throttle_hf_axi_clk.clkr,
|
||||
[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
|
||||
|
@ -2519,11 +2503,12 @@ static int gcc_sc7180_probe(struct platform_device *pdev)
|
|||
|
||||
/*
|
||||
* Keep the clocks always-ON
|
||||
* GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_DISP_AHB_CLK
|
||||
* GCC_GPU_CFG_AHB_CLK
|
||||
* GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK,
|
||||
* GCC_DISP_AHB_CLK, GCC_GPU_CFG_AHB_CLK
|
||||
*/
|
||||
regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
|
||||
regmap_update_bits(regmap, 0x0b004, BIT(0), BIT(0));
|
||||
regmap_update_bits(regmap, 0x0b008, BIT(0), BIT(0));
|
||||
regmap_update_bits(regmap, 0x0b00c, BIT(0), BIT(0));
|
||||
regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
|
||||
|
||||
|
|
|
@ -722,7 +722,7 @@ static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
|
|||
.name = "gcc_sdcc2_apps_clk_src",
|
||||
.parent_data = gcc_parent_data_4,
|
||||
.num_parents = 5,
|
||||
.ops = &clk_rcg2_ops,
|
||||
.ops = &clk_rcg2_floor_ops,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -745,7 +745,7 @@ static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
|
|||
.name = "gcc_sdcc4_apps_clk_src",
|
||||
.parent_data = gcc_parent_data_0,
|
||||
.num_parents = 3,
|
||||
.ops = &clk_rcg2_ops,
|
||||
.ops = &clk_rcg2_floor_ops,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
* apple-properties.c - EFI device properties on Macs
|
||||
* Copyright (C) 2016 Lukas Wunner <lukas@wunner.de>
|
||||
*
|
||||
* Note, all properties are considered as u8 arrays.
|
||||
* To get a value of any of them the caller must use device_property_read_u8_array().
|
||||
* Properties are stored either as:
|
||||
* u8 arrays which can be retrieved with device_property_read_u8_array() or
|
||||
* booleans which can be queried with device_property_present().
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "apple-properties: " fmt
|
||||
|
@ -88,8 +89,12 @@ static void __init unmarshal_key_value_pairs(struct dev_header *dev_header,
|
|||
|
||||
entry_data = ptr + key_len + sizeof(val_len);
|
||||
entry_len = val_len - sizeof(val_len);
|
||||
entry[i] = PROPERTY_ENTRY_U8_ARRAY_LEN(key, entry_data,
|
||||
entry_len);
|
||||
if (entry_len)
|
||||
entry[i] = PROPERTY_ENTRY_U8_ARRAY_LEN(key, entry_data,
|
||||
entry_len);
|
||||
else
|
||||
entry[i] = PROPERTY_ENTRY_BOOL(key);
|
||||
|
||||
if (dump_properties) {
|
||||
dev_info(dev, "property: %s\n", key);
|
||||
print_hex_dump(KERN_INFO, pr_fmt(), DUMP_PREFIX_OFFSET,
|
||||
|
|
|
@ -13,6 +13,7 @@ config IMX_DSP
|
|||
config IMX_SCU
|
||||
bool "IMX SCU Protocol driver"
|
||||
depends on IMX_MBOX
|
||||
select SOC_BUS
|
||||
help
|
||||
The System Controller Firmware (SCFW) is a low-level system function
|
||||
which runs on a dedicated Cortex-M core to provide power, clock, and
|
||||
|
|
|
@ -32,8 +32,8 @@ DCN30 = dcn30_init.o dcn30_hubbub.o dcn30_hubp.o dcn30_dpp.o dcn30_optc.o \
|
|||
|
||||
|
||||
ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_resource.o := -mhard-float -msse
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_optc.o := -mhard-float -msse
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_resource.o := -msse
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_optc.o := -msse
|
||||
endif
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
|
@ -45,6 +45,8 @@ ifdef CONFIG_CC_IS_GCC
|
|||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
IS_OLD_GCC = 1
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_resource.o += -mhard-float
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn30/dcn30_optc.o += -mhard-float
|
||||
endif
|
||||
|
||||
ifdef CONFIG_X86
|
||||
|
|
|
@ -14,7 +14,7 @@ DCN301 = dcn301_init.o dcn301_resource.o dcn301_dccg.o \
|
|||
dcn301_dio_link_encoder.o dcn301_hwseq.o dcn301_panel_cntl.o dcn301_hubbub.o
|
||||
|
||||
ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn301/dcn301_resource.o := -mhard-float -msse
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn301/dcn301_resource.o := -msse
|
||||
endif
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
|
@ -25,6 +25,7 @@ ifdef CONFIG_CC_IS_GCC
|
|||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
IS_OLD_GCC = 1
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn301/dcn301_resource.o += -mhard-float
|
||||
endif
|
||||
|
||||
ifdef CONFIG_X86
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
DCN3_02 = dcn302_init.o dcn302_hwseq.o dcn302_resource.o
|
||||
|
||||
ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn302/dcn302_resource.o := -mhard-float -msse
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn302/dcn302_resource.o := -msse
|
||||
endif
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
|
@ -24,6 +24,7 @@ ifdef CONFIG_CC_IS_GCC
|
|||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
IS_OLD_GCC = 1
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn302/dcn302_resource.o += -mhard-float
|
||||
endif
|
||||
|
||||
ifdef CONFIG_X86
|
||||
|
|
|
@ -553,6 +553,7 @@ struct pptable_funcs {
|
|||
*clock_req);
|
||||
uint32_t (*get_fan_control_mode)(struct smu_context *smu);
|
||||
int (*set_fan_control_mode)(struct smu_context *smu, uint32_t mode);
|
||||
int (*set_fan_speed_percent)(struct smu_context *smu, uint32_t speed);
|
||||
int (*set_fan_speed_rpm)(struct smu_context *smu, uint32_t speed);
|
||||
int (*set_xgmi_pstate)(struct smu_context *smu, uint32_t pstate);
|
||||
int (*gfx_off_control)(struct smu_context *smu, bool enable);
|
||||
|
|
|
@ -203,6 +203,9 @@ int
|
|||
smu_v11_0_set_fan_control_mode(struct smu_context *smu,
|
||||
uint32_t mode);
|
||||
|
||||
int
|
||||
smu_v11_0_set_fan_speed_percent(struct smu_context *smu, uint32_t speed);
|
||||
|
||||
int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
|
||||
uint32_t speed);
|
||||
|
||||
|
|
|
@ -2151,19 +2151,14 @@ int smu_get_fan_speed_percent(struct smu_context *smu, uint32_t *speed)
|
|||
int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
|
||||
{
|
||||
int ret = 0;
|
||||
uint32_t rpm;
|
||||
|
||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&smu->mutex);
|
||||
|
||||
if (smu->ppt_funcs->set_fan_speed_rpm) {
|
||||
if (speed > 100)
|
||||
speed = 100;
|
||||
rpm = speed * smu->fan_max_rpm / 100;
|
||||
ret = smu->ppt_funcs->set_fan_speed_rpm(smu, rpm);
|
||||
}
|
||||
if (smu->ppt_funcs->set_fan_speed_percent)
|
||||
ret = smu->ppt_funcs->set_fan_speed_percent(smu, speed);
|
||||
|
||||
mutex_unlock(&smu->mutex);
|
||||
|
||||
|
|
|
@ -2326,6 +2326,7 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
|
|||
.display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
|
||||
.get_fan_control_mode = smu_v11_0_get_fan_control_mode,
|
||||
.set_fan_control_mode = smu_v11_0_set_fan_control_mode,
|
||||
.set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
|
||||
.set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
|
||||
.set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
|
||||
.gfx_off_control = smu_v11_0_gfx_off_control,
|
||||
|
|
|
@ -2456,6 +2456,7 @@ static const struct pptable_funcs navi10_ppt_funcs = {
|
|||
.display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
|
||||
.get_fan_control_mode = smu_v11_0_get_fan_control_mode,
|
||||
.set_fan_control_mode = smu_v11_0_set_fan_control_mode,
|
||||
.set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
|
||||
.set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
|
||||
.set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
|
||||
.gfx_off_control = smu_v11_0_gfx_off_control,
|
||||
|
|
|
@ -2802,6 +2802,7 @@ static const struct pptable_funcs sienna_cichlid_ppt_funcs = {
|
|||
.display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,
|
||||
.get_fan_control_mode = smu_v11_0_get_fan_control_mode,
|
||||
.set_fan_control_mode = smu_v11_0_set_fan_control_mode,
|
||||
.set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,
|
||||
.set_fan_speed_rpm = smu_v11_0_set_fan_speed_rpm,
|
||||
.set_xgmi_pstate = smu_v11_0_set_xgmi_pstate,
|
||||
.gfx_off_control = smu_v11_0_gfx_off_control,
|
||||
|
|
|
@ -1173,6 +1173,35 @@ smu_v11_0_set_fan_static_mode(struct smu_context *smu, uint32_t mode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
smu_v11_0_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
uint32_t duty100, duty;
|
||||
uint64_t tmp64;
|
||||
|
||||
if (speed > 100)
|
||||
speed = 100;
|
||||
|
||||
if (smu_v11_0_auto_fan_control(smu, 0))
|
||||
return -EINVAL;
|
||||
|
||||
duty100 = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL1),
|
||||
CG_FDO_CTRL1, FMAX_DUTY100);
|
||||
if (!duty100)
|
||||
return -EINVAL;
|
||||
|
||||
tmp64 = (uint64_t)speed * duty100;
|
||||
do_div(tmp64, 100);
|
||||
duty = (uint32_t)tmp64;
|
||||
|
||||
WREG32_SOC15(THM, 0, mmCG_FDO_CTRL0,
|
||||
REG_SET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL0),
|
||||
CG_FDO_CTRL0, FDO_STATIC_DUTY, duty));
|
||||
|
||||
return smu_v11_0_set_fan_static_mode(smu, FDO_PWM_MODE_STATIC);
|
||||
}
|
||||
|
||||
int
|
||||
smu_v11_0_set_fan_control_mode(struct smu_context *smu,
|
||||
uint32_t mode)
|
||||
|
@ -1181,7 +1210,7 @@ smu_v11_0_set_fan_control_mode(struct smu_context *smu,
|
|||
|
||||
switch (mode) {
|
||||
case AMD_FAN_CTRL_NONE:
|
||||
ret = smu_v11_0_set_fan_speed_rpm(smu, smu->fan_max_rpm);
|
||||
ret = smu_v11_0_set_fan_speed_percent(smu, 100);
|
||||
break;
|
||||
case AMD_FAN_CTRL_MANUAL:
|
||||
ret = smu_v11_0_auto_fan_control(smu, 0);
|
||||
|
|
|
@ -2755,12 +2755,11 @@ static void icl_mg_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
|
|||
u32 val;
|
||||
|
||||
ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
|
||||
/* The table does not have values for level 3 and level 9. */
|
||||
if (level >= n_entries || level == 3 || level == 9) {
|
||||
if (level >= n_entries) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"DDI translation not found for level %d. Using %d instead.",
|
||||
level, n_entries - 2);
|
||||
level = n_entries - 2;
|
||||
level, n_entries - 1);
|
||||
level = n_entries - 1;
|
||||
}
|
||||
|
||||
/* Set MG_TX_LINK_PARAMS cri_use_fs32 to 0. */
|
||||
|
|
|
@ -390,6 +390,16 @@ static void emit_batch(struct i915_vma * const vma,
|
|||
&cb_kernel_ivb,
|
||||
desc_count);
|
||||
|
||||
/* Reset inherited context registers */
|
||||
gen7_emit_pipeline_invalidate(&cmds);
|
||||
batch_add(&cmds, MI_LOAD_REGISTER_IMM(2));
|
||||
batch_add(&cmds, i915_mmio_reg_offset(CACHE_MODE_0_GEN7));
|
||||
batch_add(&cmds, 0xffff0000);
|
||||
batch_add(&cmds, i915_mmio_reg_offset(CACHE_MODE_1));
|
||||
batch_add(&cmds, 0xffff0000 | PIXEL_SUBSPAN_COLLECT_OPT_DISABLE);
|
||||
gen7_emit_pipeline_flush(&cmds);
|
||||
|
||||
/* Switch to the media pipeline and our base address */
|
||||
gen7_emit_pipeline_invalidate(&cmds);
|
||||
batch_add(&cmds, PIPELINE_SELECT | PIPELINE_SELECT_MEDIA);
|
||||
batch_add(&cmds, MI_NOOP);
|
||||
|
@ -399,9 +409,11 @@ static void emit_batch(struct i915_vma * const vma,
|
|||
gen7_emit_state_base_address(&cmds, descriptors);
|
||||
gen7_emit_pipeline_invalidate(&cmds);
|
||||
|
||||
/* Set the clear-residual kernel state */
|
||||
gen7_emit_vfe_state(&cmds, bv, urb_size - 1, 0, 0);
|
||||
gen7_emit_interface_descriptor_load(&cmds, descriptors, desc_count);
|
||||
|
||||
/* Execute the kernel on all HW threads */
|
||||
for (i = 0; i < num_primitives(bv); i++)
|
||||
gen7_emit_media_object(&cmds, i);
|
||||
|
||||
|
|
|
@ -526,16 +526,39 @@ static int init_ggtt(struct i915_ggtt *ggtt)
|
|||
|
||||
mutex_init(&ggtt->error_mutex);
|
||||
if (ggtt->mappable_end) {
|
||||
/* Reserve a mappable slot for our lockless error capture */
|
||||
ret = drm_mm_insert_node_in_range(&ggtt->vm.mm,
|
||||
&ggtt->error_capture,
|
||||
PAGE_SIZE, 0,
|
||||
I915_COLOR_UNEVICTABLE,
|
||||
0, ggtt->mappable_end,
|
||||
DRM_MM_INSERT_LOW);
|
||||
if (ret)
|
||||
return ret;
|
||||
/*
|
||||
* Reserve a mappable slot for our lockless error capture.
|
||||
*
|
||||
* We strongly prefer taking address 0x0 in order to protect
|
||||
* other critical buffers against accidental overwrites,
|
||||
* as writing to address 0 is a very common mistake.
|
||||
*
|
||||
* Since 0 may already be in use by the system (e.g. the BIOS
|
||||
* framebuffer), we let the reservation fail quietly and hope
|
||||
* 0 remains reserved always.
|
||||
*
|
||||
* If we fail to reserve 0, and then fail to find any space
|
||||
* for an error-capture, remain silent. We can afford not
|
||||
* to reserve an error_capture node as we have fallback
|
||||
* paths, and we trust that 0 will remain reserved. However,
|
||||
* the only likely reason for failure to insert is a driver
|
||||
* bug, which we expect to cause other failures...
|
||||
*/
|
||||
ggtt->error_capture.size = I915_GTT_PAGE_SIZE;
|
||||
ggtt->error_capture.color = I915_COLOR_UNEVICTABLE;
|
||||
if (drm_mm_reserve_node(&ggtt->vm.mm, &ggtt->error_capture))
|
||||
drm_mm_insert_node_in_range(&ggtt->vm.mm,
|
||||
&ggtt->error_capture,
|
||||
ggtt->error_capture.size, 0,
|
||||
ggtt->error_capture.color,
|
||||
0, ggtt->mappable_end,
|
||||
DRM_MM_INSERT_LOW);
|
||||
}
|
||||
if (drm_mm_node_allocated(&ggtt->error_capture))
|
||||
drm_dbg(&ggtt->vm.i915->drm,
|
||||
"Reserved GGTT:[%llx, %llx] for use by error capture\n",
|
||||
ggtt->error_capture.start,
|
||||
ggtt->error_capture.start + ggtt->error_capture.size);
|
||||
|
||||
/*
|
||||
* The upper portion of the GuC address space has a sizeable hole
|
||||
|
@ -548,9 +571,9 @@ static int init_ggtt(struct i915_ggtt *ggtt)
|
|||
|
||||
/* Clear any non-preallocated blocks */
|
||||
drm_mm_for_each_hole(entry, &ggtt->vm.mm, hole_start, hole_end) {
|
||||
drm_dbg_kms(&ggtt->vm.i915->drm,
|
||||
"clearing unused GTT space: [%lx, %lx]\n",
|
||||
hole_start, hole_end);
|
||||
drm_dbg(&ggtt->vm.i915->drm,
|
||||
"clearing unused GTT space: [%lx, %lx]\n",
|
||||
hole_start, hole_end);
|
||||
ggtt->vm.clear_range(&ggtt->vm, hole_start,
|
||||
hole_end - hole_start);
|
||||
}
|
||||
|
|
|
@ -631,24 +631,26 @@ static int flush_lazy_signals(struct i915_active *ref)
|
|||
|
||||
int __i915_active_wait(struct i915_active *ref, int state)
|
||||
{
|
||||
int err;
|
||||
|
||||
might_sleep();
|
||||
|
||||
if (!i915_active_acquire_if_busy(ref))
|
||||
return 0;
|
||||
|
||||
/* Any fence added after the wait begins will not be auto-signaled */
|
||||
err = flush_lazy_signals(ref);
|
||||
i915_active_release(ref);
|
||||
if (err)
|
||||
return err;
|
||||
if (i915_active_acquire_if_busy(ref)) {
|
||||
int err;
|
||||
|
||||
if (!i915_active_is_idle(ref) &&
|
||||
___wait_var_event(ref, i915_active_is_idle(ref),
|
||||
state, 0, 0, schedule()))
|
||||
return -EINTR;
|
||||
err = flush_lazy_signals(ref);
|
||||
i915_active_release(ref);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (___wait_var_event(ref, i915_active_is_idle(ref),
|
||||
state, 0, 0, schedule()))
|
||||
return -EINTR;
|
||||
}
|
||||
|
||||
/*
|
||||
* After the wait is complete, the caller may free the active.
|
||||
* We have to flush any concurrent retirement before returning.
|
||||
*/
|
||||
flush_work(&ref->work);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1346,7 +1346,7 @@ intel_subplatform(const struct intel_runtime_info *info, enum intel_platform p)
|
|||
{
|
||||
const unsigned int pi = __platform_mask_index(info, p);
|
||||
|
||||
return info->platform_mask[pi] & INTEL_SUBPLATFORM_BITS;
|
||||
return info->platform_mask[pi] & ((1 << INTEL_SUBPLATFORM_BITS) - 1);
|
||||
}
|
||||
|
||||
static __always_inline bool
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue