mirror of https://gitee.com/openkylin/linux.git
Merge branch 'mlx5_active_speed' into rdma.git for-next
Leon Romanovsky says: ==================== IBTA declares speed as 16 bits, but kernel stores it in u8. This series fixes in-kernel declaration while keeping external interface intact. ==================== Based on the mlx5-next branch at git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux due to dependencies. * branch 'mlx5_active_speed': RDMA: Fix link active_speed size RDMA/mlx5: Delete duplicated mlx5_ptys_width enum net/mlx5: Refactor query port speed functions
This commit is contained in:
commit
5dee5872f8
|
@ -111,6 +111,7 @@ ForEachMacros:
|
||||||
- 'css_for_each_descendant_pre'
|
- 'css_for_each_descendant_pre'
|
||||||
- 'device_for_each_child_node'
|
- 'device_for_each_child_node'
|
||||||
- 'dma_fence_chain_for_each'
|
- 'dma_fence_chain_for_each'
|
||||||
|
- 'do_for_each_ftrace_op'
|
||||||
- 'drm_atomic_crtc_for_each_plane'
|
- 'drm_atomic_crtc_for_each_plane'
|
||||||
- 'drm_atomic_crtc_state_for_each_plane'
|
- 'drm_atomic_crtc_state_for_each_plane'
|
||||||
- 'drm_atomic_crtc_state_for_each_plane_state'
|
- 'drm_atomic_crtc_state_for_each_plane_state'
|
||||||
|
@ -136,6 +137,7 @@ ForEachMacros:
|
||||||
- 'for_each_active_dev_scope'
|
- 'for_each_active_dev_scope'
|
||||||
- 'for_each_active_drhd_unit'
|
- 'for_each_active_drhd_unit'
|
||||||
- 'for_each_active_iommu'
|
- 'for_each_active_iommu'
|
||||||
|
- 'for_each_aggr_pgid'
|
||||||
- 'for_each_available_child_of_node'
|
- 'for_each_available_child_of_node'
|
||||||
- 'for_each_bio'
|
- 'for_each_bio'
|
||||||
- 'for_each_board_func_rsrc'
|
- 'for_each_board_func_rsrc'
|
||||||
|
@ -234,6 +236,7 @@ ForEachMacros:
|
||||||
- 'for_each_node_state'
|
- 'for_each_node_state'
|
||||||
- 'for_each_node_with_cpus'
|
- 'for_each_node_with_cpus'
|
||||||
- 'for_each_node_with_property'
|
- 'for_each_node_with_property'
|
||||||
|
- 'for_each_nonreserved_multicast_dest_pgid'
|
||||||
- 'for_each_of_allnodes'
|
- 'for_each_of_allnodes'
|
||||||
- 'for_each_of_allnodes_from'
|
- 'for_each_of_allnodes_from'
|
||||||
- 'for_each_of_cpu_node'
|
- 'for_each_of_cpu_node'
|
||||||
|
@ -256,6 +259,7 @@ ForEachMacros:
|
||||||
- 'for_each_pci_dev'
|
- 'for_each_pci_dev'
|
||||||
- 'for_each_pci_msi_entry'
|
- 'for_each_pci_msi_entry'
|
||||||
- 'for_each_pcm_streams'
|
- 'for_each_pcm_streams'
|
||||||
|
- 'for_each_physmem_range'
|
||||||
- 'for_each_populated_zone'
|
- 'for_each_populated_zone'
|
||||||
- 'for_each_possible_cpu'
|
- 'for_each_possible_cpu'
|
||||||
- 'for_each_present_cpu'
|
- 'for_each_present_cpu'
|
||||||
|
@ -265,6 +269,8 @@ ForEachMacros:
|
||||||
- 'for_each_process_thread'
|
- 'for_each_process_thread'
|
||||||
- 'for_each_property_of_node'
|
- 'for_each_property_of_node'
|
||||||
- 'for_each_registered_fb'
|
- 'for_each_registered_fb'
|
||||||
|
- 'for_each_requested_gpio'
|
||||||
|
- 'for_each_requested_gpio_in_range'
|
||||||
- 'for_each_reserved_mem_region'
|
- 'for_each_reserved_mem_region'
|
||||||
- 'for_each_rtd_codec_dais'
|
- 'for_each_rtd_codec_dais'
|
||||||
- 'for_each_rtd_codec_dais_rollback'
|
- 'for_each_rtd_codec_dais_rollback'
|
||||||
|
@ -278,12 +284,17 @@ ForEachMacros:
|
||||||
- 'for_each_sg'
|
- 'for_each_sg'
|
||||||
- 'for_each_sg_dma_page'
|
- 'for_each_sg_dma_page'
|
||||||
- 'for_each_sg_page'
|
- 'for_each_sg_page'
|
||||||
|
- 'for_each_sgtable_dma_page'
|
||||||
|
- 'for_each_sgtable_dma_sg'
|
||||||
|
- 'for_each_sgtable_page'
|
||||||
|
- 'for_each_sgtable_sg'
|
||||||
- 'for_each_sibling_event'
|
- 'for_each_sibling_event'
|
||||||
- 'for_each_subelement'
|
- 'for_each_subelement'
|
||||||
- 'for_each_subelement_extid'
|
- 'for_each_subelement_extid'
|
||||||
- 'for_each_subelement_id'
|
- 'for_each_subelement_id'
|
||||||
- '__for_each_thread'
|
- '__for_each_thread'
|
||||||
- 'for_each_thread'
|
- 'for_each_thread'
|
||||||
|
- 'for_each_unicast_dest_pgid'
|
||||||
- 'for_each_wakeup_source'
|
- 'for_each_wakeup_source'
|
||||||
- 'for_each_zone'
|
- 'for_each_zone'
|
||||||
- 'for_each_zone_zonelist'
|
- 'for_each_zone_zonelist'
|
||||||
|
@ -465,6 +476,7 @@ ForEachMacros:
|
||||||
- 'v4l2_m2m_for_each_src_buf'
|
- 'v4l2_m2m_for_each_src_buf'
|
||||||
- 'v4l2_m2m_for_each_src_buf_safe'
|
- 'v4l2_m2m_for_each_src_buf_safe'
|
||||||
- 'virtio_device_for_each_vq'
|
- 'virtio_device_for_each_vq'
|
||||||
|
- 'while_for_each_ftrace_op'
|
||||||
- 'xa_for_each'
|
- 'xa_for_each'
|
||||||
- 'xa_for_each_marked'
|
- 'xa_for_each_marked'
|
||||||
- 'xa_for_each_range'
|
- 'xa_for_each_range'
|
||||||
|
|
1
.mailmap
1
.mailmap
|
@ -308,6 +308,7 @@ Tony Luck <tony.luck@intel.com>
|
||||||
TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org>
|
TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org>
|
||||||
TripleX Chung <xxx.phy@gmail.com> <zhongyu@18mail.cn>
|
TripleX Chung <xxx.phy@gmail.com> <zhongyu@18mail.cn>
|
||||||
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
||||||
|
Tycho Andersen <tycho@tycho.pizza> <tycho@tycho.ws>
|
||||||
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||||
Uwe Kleine-König <ukl@pengutronix.de>
|
Uwe Kleine-König <ukl@pengutronix.de>
|
||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
|
|
|
@ -49,7 +49,7 @@ checking of rcu_dereference() primitives:
|
||||||
is invoked by both RCU-sched readers and updaters.
|
is invoked by both RCU-sched readers and updaters.
|
||||||
srcu_dereference_check(p, c):
|
srcu_dereference_check(p, c):
|
||||||
Use explicit check expression "c" along with
|
Use explicit check expression "c" along with
|
||||||
srcu_read_lock_held()(). This is useful in code that
|
srcu_read_lock_held(). This is useful in code that
|
||||||
is invoked by both SRCU readers and updaters.
|
is invoked by both SRCU readers and updaters.
|
||||||
rcu_dereference_raw(p):
|
rcu_dereference_raw(p):
|
||||||
Don't check. (Use sparingly, if at all.)
|
Don't check. (Use sparingly, if at all.)
|
||||||
|
|
|
@ -1662,7 +1662,7 @@
|
||||||
|
|
||||||
98 block User-mode virtual block device
|
98 block User-mode virtual block device
|
||||||
0 = /dev/ubda First user-mode block device
|
0 = /dev/ubda First user-mode block device
|
||||||
16 = /dev/udbb Second user-mode block device
|
16 = /dev/ubdb Second user-mode block device
|
||||||
...
|
...
|
||||||
|
|
||||||
Partitions are handled in the same way as for IDE
|
Partitions are handled in the same way as for IDE
|
||||||
|
|
|
@ -156,7 +156,6 @@ against. Possible keywords are:::
|
||||||
``line-range`` cannot contain space, e.g.
|
``line-range`` cannot contain space, e.g.
|
||||||
"1-30" is valid range but "1 - 30" is not.
|
"1-30" is valid range but "1 - 30" is not.
|
||||||
|
|
||||||
``module=foo`` combined keyword=value form is interchangably accepted
|
|
||||||
|
|
||||||
The meanings of each keyword are:
|
The meanings of each keyword are:
|
||||||
|
|
||||||
|
|
|
@ -1434,7 +1434,7 @@ on the feature, restricting the viewing angles.
|
||||||
|
|
||||||
|
|
||||||
DYTC Lapmode sensor
|
DYTC Lapmode sensor
|
||||||
------------------
|
-------------------
|
||||||
|
|
||||||
sysfs: dytc_lapmode
|
sysfs: dytc_lapmode
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,9 @@ Energy-Performance Bias (EPB) knob (otherwise), which means that the processor's
|
||||||
internal P-state selection logic is expected to focus entirely on performance.
|
internal P-state selection logic is expected to focus entirely on performance.
|
||||||
|
|
||||||
This will override the EPP/EPB setting coming from the ``sysfs`` interface
|
This will override the EPP/EPB setting coming from the ``sysfs`` interface
|
||||||
(see `Energy vs Performance Hints`_ below).
|
(see `Energy vs Performance Hints`_ below). Moreover, any attempts to change
|
||||||
|
the EPP/EPB to a value different from 0 ("performance") via ``sysfs`` in this
|
||||||
|
configuration will be rejected.
|
||||||
|
|
||||||
Also, in this configuration the range of P-states available to the processor's
|
Also, in this configuration the range of P-states available to the processor's
|
||||||
internal P-state selection logic is always restricted to the upper boundary
|
internal P-state selection logic is always restricted to the upper boundary
|
||||||
|
|
|
@ -30,9 +30,13 @@ allOf:
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
clock-output-names:
|
clock-output-names:
|
||||||
items:
|
oneOf:
|
||||||
- const: clk_out_sd0
|
- items:
|
||||||
- const: clk_in_sd0
|
- const: clk_out_sd0
|
||||||
|
- const: clk_in_sd0
|
||||||
|
- items:
|
||||||
|
- const: clk_out_sd1
|
||||||
|
- const: clk_in_sd1
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
|
|
|
@ -50,6 +50,8 @@ Optional properties:
|
||||||
error caused by stop clock(fifo full)
|
error caused by stop clock(fifo full)
|
||||||
Valid range = [0:0x7]. if not present, default value is 0.
|
Valid range = [0:0x7]. if not present, default value is 0.
|
||||||
applied to compatible "mediatek,mt2701-mmc".
|
applied to compatible "mediatek,mt2701-mmc".
|
||||||
|
- resets: Phandle and reset specifier pair to softreset line of MSDC IP.
|
||||||
|
- reset-names: Should be "hrst".
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
mmc0: mmc@11230000 {
|
mmc0: mmc@11230000 {
|
||||||
|
|
|
@ -15,8 +15,15 @@ Required properties:
|
||||||
- "nvidia,tegra210-sdhci": for Tegra210
|
- "nvidia,tegra210-sdhci": for Tegra210
|
||||||
- "nvidia,tegra186-sdhci": for Tegra186
|
- "nvidia,tegra186-sdhci": for Tegra186
|
||||||
- "nvidia,tegra194-sdhci": for Tegra194
|
- "nvidia,tegra194-sdhci": for Tegra194
|
||||||
- clocks : Must contain one entry, for the module clock.
|
- clocks: For Tegra210, Tegra186 and Tegra194 must contain two entries.
|
||||||
See ../clocks/clock-bindings.txt for details.
|
One for the module clock and one for the timeout clock.
|
||||||
|
For all other Tegra devices, must contain a single entry for
|
||||||
|
the module clock. See ../clocks/clock-bindings.txt for details.
|
||||||
|
- clock-names: For Tegra210, Tegra186 and Tegra194 must contain the
|
||||||
|
strings 'sdhci' and 'tmclk' to represent the module and
|
||||||
|
the timeout clocks, respectively.
|
||||||
|
For all other Tegra devices must contain the string 'sdhci'
|
||||||
|
to represent the module clock.
|
||||||
- resets : Must contain an entry for each entry in reset-names.
|
- resets : Must contain an entry for each entry in reset-names.
|
||||||
See ../reset/reset.txt for details.
|
See ../reset/reset.txt for details.
|
||||||
- reset-names : Must include the following entries:
|
- reset-names : Must include the following entries:
|
||||||
|
@ -99,7 +106,7 @@ Optional properties for Tegra210, Tegra186 and Tegra194:
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
sdhci@700b0000 {
|
sdhci@700b0000 {
|
||||||
compatible = "nvidia,tegra210-sdhci", "nvidia,tegra124-sdhci";
|
compatible = "nvidia,tegra124-sdhci";
|
||||||
reg = <0x0 0x700b0000 0x0 0x200>;
|
reg = <0x0 0x700b0000 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
|
||||||
|
@ -115,3 +122,22 @@ sdhci@700b0000 {
|
||||||
nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
|
nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sdhci@700b0000 {
|
||||||
|
compatible = "nvidia,tegra210-sdhci";
|
||||||
|
reg = <0x0 0x700b0000 0x0 0x200>;
|
||||||
|
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
|
||||||
|
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
|
resets = <&tegra_car 14>;
|
||||||
|
reset-names = "sdhci";
|
||||||
|
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8";
|
||||||
|
pinctrl-0 = <&sdmmc1_3v3>;
|
||||||
|
pinctrl-1 = <&sdmmc1_1v8>;
|
||||||
|
nvidia,pad-autocal-pull-up-offset-3v3 = <0x00>;
|
||||||
|
nvidia,pad-autocal-pull-down-offset-3v3 = <0x7d>;
|
||||||
|
nvidia,pad-autocal-pull-up-offset-1v8 = <0x7b>;
|
||||||
|
nvidia,pad-autocal-pull-down-offset-1v8 = <0x7b>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Distributed Switch Architecture Device Tree Bindings
|
Distributed Switch Architecture Device Tree Bindings
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
|
||||||
See Documentation/devicetree/bindings/net/dsa/dsa.yaml for the documenation.
|
See Documentation/devicetree/bindings/net/dsa/dsa.yaml for the documentation.
|
||||||
|
|
|
@ -23,8 +23,8 @@ Required properties:
|
||||||
|
|
||||||
- compatible:
|
- compatible:
|
||||||
Must be one of :
|
Must be one of :
|
||||||
"brcm,spi-bcm-qspi", "brcm,spi-brcmstb-qspi" : MSPI+BSPI on BRCMSTB SoCs
|
"brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi" : MSPI+BSPI on BRCMSTB SoCs
|
||||||
"brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
|
"brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi" : Second Instance of MSPI
|
||||||
BRCMSTB SoCs
|
BRCMSTB SoCs
|
||||||
"brcm,spi-bcm7425-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
|
"brcm,spi-bcm7425-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
|
||||||
BRCMSTB SoCs
|
BRCMSTB SoCs
|
||||||
|
@ -36,8 +36,8 @@ Required properties:
|
||||||
BRCMSTB SoCs
|
BRCMSTB SoCs
|
||||||
"brcm,spi-bcm7278-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
|
"brcm,spi-bcm7278-qspi", "brcm,spi-bcm-qspi", "brcm,spi-brcmstb-mspi" : Second Instance of MSPI
|
||||||
BRCMSTB SoCs
|
BRCMSTB SoCs
|
||||||
"brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi" : MSPI+BSPI on Cygnus, NSP
|
"brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi" : MSPI+BSPI on Cygnus, NSP
|
||||||
"brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi" : NS2 SoCs
|
"brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi" : NS2 SoCs
|
||||||
|
|
||||||
- reg:
|
- reg:
|
||||||
Define the bases and ranges of the associated I/O address spaces.
|
Define the bases and ranges of the associated I/O address spaces.
|
||||||
|
@ -86,7 +86,7 @@ BRCMSTB SoC Example:
|
||||||
spi@f03e3400 {
|
spi@f03e3400 {
|
||||||
#address-cells = <0x1>;
|
#address-cells = <0x1>;
|
||||||
#size-cells = <0x0>;
|
#size-cells = <0x0>;
|
||||||
compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-brcmstb-qspi";
|
compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0xf03e0920 0x4 0xf03e3400 0x188 0xf03e3200 0x50>;
|
reg = <0xf03e0920 0x4 0xf03e3400 0x188 0xf03e3200 0x50>;
|
||||||
reg-names = "cs_reg", "mspi", "bspi";
|
reg-names = "cs_reg", "mspi", "bspi";
|
||||||
interrupts = <0x6 0x5 0x4 0x3 0x2 0x1 0x0>;
|
interrupts = <0x6 0x5 0x4 0x3 0x2 0x1 0x0>;
|
||||||
|
@ -149,7 +149,7 @@ BRCMSTB SoC Example:
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
clocks = <&upg_fixed>;
|
clocks = <&upg_fixed>;
|
||||||
compatible = "brcm,spi-brcmstb-qspi", "brcm,spi-brcmstb-mspi";
|
compatible = "brcm,spi-brcmstb-mspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0xf0416000 0x180>;
|
reg = <0xf0416000 0x180>;
|
||||||
reg-names = "mspi";
|
reg-names = "mspi";
|
||||||
interrupts = <0x14>;
|
interrupts = <0x14>;
|
||||||
|
@ -160,7 +160,7 @@ BRCMSTB SoC Example:
|
||||||
iProc SoC Example:
|
iProc SoC Example:
|
||||||
|
|
||||||
qspi: spi@18027200 {
|
qspi: spi@18027200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi";
|
compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x18027200 0x184>,
|
reg = <0x18027200 0x184>,
|
||||||
<0x18027000 0x124>,
|
<0x18027000 0x124>,
|
||||||
<0x1811c408 0x004>,
|
<0x1811c408 0x004>,
|
||||||
|
@ -191,7 +191,7 @@ iProc SoC Example:
|
||||||
NS2 SoC Example:
|
NS2 SoC Example:
|
||||||
|
|
||||||
qspi: spi@66470200 {
|
qspi: spi@66470200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi";
|
compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x66470200 0x184>,
|
reg = <0x66470200 0x184>,
|
||||||
<0x66470000 0x124>,
|
<0x66470000 0x124>,
|
||||||
<0x67017408 0x004>,
|
<0x67017408 0x004>,
|
||||||
|
|
|
@ -179,7 +179,7 @@ DMA Fence uABI/Sync File
|
||||||
:internal:
|
:internal:
|
||||||
|
|
||||||
Indefinite DMA Fences
|
Indefinite DMA Fences
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
At various times &dma_fence with an indefinite time until dma_fence_wait()
|
At various times &dma_fence with an indefinite time until dma_fence_wait()
|
||||||
finishes have been proposed. Examples include:
|
finishes have been proposed. Examples include:
|
||||||
|
|
|
@ -6,9 +6,9 @@ API to implement a new FPGA bridge
|
||||||
|
|
||||||
* struct :c:type:`fpga_bridge` — The FPGA Bridge structure
|
* struct :c:type:`fpga_bridge` — The FPGA Bridge structure
|
||||||
* struct :c:type:`fpga_bridge_ops` — Low level Bridge driver ops
|
* struct :c:type:`fpga_bridge_ops` — Low level Bridge driver ops
|
||||||
* :c:func:`devm_fpga_bridge_create()` — Allocate and init a bridge struct
|
* devm_fpga_bridge_create() — Allocate and init a bridge struct
|
||||||
* :c:func:`fpga_bridge_register()` — Register a bridge
|
* fpga_bridge_register() — Register a bridge
|
||||||
* :c:func:`fpga_bridge_unregister()` — Unregister a bridge
|
* fpga_bridge_unregister() — Unregister a bridge
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/fpga/fpga-bridge.h
|
.. kernel-doc:: include/linux/fpga/fpga-bridge.h
|
||||||
:functions: fpga_bridge
|
:functions: fpga_bridge
|
||||||
|
|
|
@ -104,9 +104,9 @@ API for implementing a new FPGA Manager driver
|
||||||
* ``fpga_mgr_states`` — Values for :c:member:`fpga_manager->state`.
|
* ``fpga_mgr_states`` — Values for :c:member:`fpga_manager->state`.
|
||||||
* struct :c:type:`fpga_manager` — the FPGA manager struct
|
* struct :c:type:`fpga_manager` — the FPGA manager struct
|
||||||
* struct :c:type:`fpga_manager_ops` — Low level FPGA manager driver ops
|
* struct :c:type:`fpga_manager_ops` — Low level FPGA manager driver ops
|
||||||
* :c:func:`devm_fpga_mgr_create` — Allocate and init a manager struct
|
* devm_fpga_mgr_create() — Allocate and init a manager struct
|
||||||
* :c:func:`fpga_mgr_register` — Register an FPGA manager
|
* fpga_mgr_register() — Register an FPGA manager
|
||||||
* :c:func:`fpga_mgr_unregister` — Unregister an FPGA manager
|
* fpga_mgr_unregister() — Unregister an FPGA manager
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/fpga/fpga-mgr.h
|
.. kernel-doc:: include/linux/fpga/fpga-mgr.h
|
||||||
:functions: fpga_mgr_states
|
:functions: fpga_mgr_states
|
||||||
|
|
|
@ -6,9 +6,9 @@ Overview
|
||||||
|
|
||||||
The in-kernel API for FPGA programming is a combination of APIs from
|
The in-kernel API for FPGA programming is a combination of APIs from
|
||||||
FPGA manager, bridge, and regions. The actual function used to
|
FPGA manager, bridge, and regions. The actual function used to
|
||||||
trigger FPGA programming is :c:func:`fpga_region_program_fpga()`.
|
trigger FPGA programming is fpga_region_program_fpga().
|
||||||
|
|
||||||
:c:func:`fpga_region_program_fpga()` uses functionality supplied by
|
fpga_region_program_fpga() uses functionality supplied by
|
||||||
the FPGA manager and bridges. It will:
|
the FPGA manager and bridges. It will:
|
||||||
|
|
||||||
* lock the region's mutex
|
* lock the region's mutex
|
||||||
|
@ -20,8 +20,8 @@ the FPGA manager and bridges. It will:
|
||||||
* release the locks
|
* release the locks
|
||||||
|
|
||||||
The struct fpga_image_info specifies what FPGA image to program. It is
|
The struct fpga_image_info specifies what FPGA image to program. It is
|
||||||
allocated/freed by :c:func:`fpga_image_info_alloc()` and freed with
|
allocated/freed by fpga_image_info_alloc() and freed with
|
||||||
:c:func:`fpga_image_info_free()`
|
fpga_image_info_free()
|
||||||
|
|
||||||
How to program an FPGA using a region
|
How to program an FPGA using a region
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
@ -84,10 +84,10 @@ will generate that list. Here's some sample code of what to do next::
|
||||||
API for programming an FPGA
|
API for programming an FPGA
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
* :c:func:`fpga_region_program_fpga` — Program an FPGA
|
* fpga_region_program_fpga() — Program an FPGA
|
||||||
* :c:type:`fpga_image_info` — Specifies what FPGA image to program
|
* fpga_image_info() — Specifies what FPGA image to program
|
||||||
* :c:func:`fpga_image_info_alloc()` — Allocate an FPGA image info struct
|
* fpga_image_info_alloc() — Allocate an FPGA image info struct
|
||||||
* :c:func:`fpga_image_info_free()` — Free an FPGA image info struct
|
* fpga_image_info_free() — Free an FPGA image info struct
|
||||||
|
|
||||||
.. kernel-doc:: drivers/fpga/fpga-region.c
|
.. kernel-doc:: drivers/fpga/fpga-region.c
|
||||||
:functions: fpga_region_program_fpga
|
:functions: fpga_region_program_fpga
|
||||||
|
|
|
@ -46,18 +46,18 @@ API to add a new FPGA region
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
* struct :c:type:`fpga_region` — The FPGA region struct
|
* struct :c:type:`fpga_region` — The FPGA region struct
|
||||||
* :c:func:`devm_fpga_region_create` — Allocate and init a region struct
|
* devm_fpga_region_create() — Allocate and init a region struct
|
||||||
* :c:func:`fpga_region_register` — Register an FPGA region
|
* fpga_region_register() — Register an FPGA region
|
||||||
* :c:func:`fpga_region_unregister` — Unregister an FPGA region
|
* fpga_region_unregister() — Unregister an FPGA region
|
||||||
|
|
||||||
The FPGA region's probe function will need to get a reference to the FPGA
|
The FPGA region's probe function will need to get a reference to the FPGA
|
||||||
Manager it will be using to do the programming. This usually would happen
|
Manager it will be using to do the programming. This usually would happen
|
||||||
during the region's probe function.
|
during the region's probe function.
|
||||||
|
|
||||||
* :c:func:`fpga_mgr_get` — Get a reference to an FPGA manager, raise ref count
|
* fpga_mgr_get() — Get a reference to an FPGA manager, raise ref count
|
||||||
* :c:func:`of_fpga_mgr_get` — Get a reference to an FPGA manager, raise ref count,
|
* of_fpga_mgr_get() — Get a reference to an FPGA manager, raise ref count,
|
||||||
given a device node.
|
given a device node.
|
||||||
* :c:func:`fpga_mgr_put` — Put an FPGA manager
|
* fpga_mgr_put() — Put an FPGA manager
|
||||||
|
|
||||||
The FPGA region will need to specify which bridges to control while programming
|
The FPGA region will need to specify which bridges to control while programming
|
||||||
the FPGA. The region driver can build a list of bridges during probe time
|
the FPGA. The region driver can build a list of bridges during probe time
|
||||||
|
@ -66,11 +66,11 @@ the list of bridges to program just before programming
|
||||||
(:c:member:`fpga_region->get_bridges`). The FPGA bridge framework supplies the
|
(:c:member:`fpga_region->get_bridges`). The FPGA bridge framework supplies the
|
||||||
following APIs to handle building or tearing down that list.
|
following APIs to handle building or tearing down that list.
|
||||||
|
|
||||||
* :c:func:`fpga_bridge_get_to_list` — Get a ref of an FPGA bridge, add it to a
|
* fpga_bridge_get_to_list() — Get a ref of an FPGA bridge, add it to a
|
||||||
list
|
list
|
||||||
* :c:func:`of_fpga_bridge_get_to_list` — Get a ref of an FPGA bridge, add it to a
|
* of_fpga_bridge_get_to_list() — Get a ref of an FPGA bridge, add it to a
|
||||||
list, given a device node
|
list, given a device node
|
||||||
* :c:func:`fpga_bridges_put` — Given a list of bridges, put them
|
* fpga_bridges_put() — Given a list of bridges, put them
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/fpga/fpga-region.h
|
.. kernel-doc:: include/linux/fpga/fpga-region.h
|
||||||
:functions: fpga_region
|
:functions: fpga_region
|
||||||
|
|
|
@ -11,10 +11,10 @@ Industrial I/O Devices
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
* struct :c:type:`iio_dev` - industrial I/O device
|
* struct :c:type:`iio_dev` - industrial I/O device
|
||||||
* :c:func:`iio_device_alloc()` - allocate an :c:type:`iio_dev` from a driver
|
* iio_device_alloc() - allocate an :c:type:`iio_dev` from a driver
|
||||||
* :c:func:`iio_device_free()` - free an :c:type:`iio_dev` from a driver
|
* iio_device_free() - free an :c:type:`iio_dev` from a driver
|
||||||
* :c:func:`iio_device_register()` - register a device with the IIO subsystem
|
* iio_device_register() - register a device with the IIO subsystem
|
||||||
* :c:func:`iio_device_unregister()` - unregister a device from the IIO
|
* iio_device_unregister() - unregister a device from the IIO
|
||||||
subsystem
|
subsystem
|
||||||
|
|
||||||
An IIO device usually corresponds to a single hardware sensor and it
|
An IIO device usually corresponds to a single hardware sensor and it
|
||||||
|
@ -34,17 +34,17 @@ A typical IIO driver will register itself as an :doc:`I2C <../i2c>` or
|
||||||
|
|
||||||
At probe:
|
At probe:
|
||||||
|
|
||||||
1. Call :c:func:`iio_device_alloc()`, which allocates memory for an IIO device.
|
1. Call iio_device_alloc(), which allocates memory for an IIO device.
|
||||||
2. Initialize IIO device fields with driver specific information (e.g.
|
2. Initialize IIO device fields with driver specific information (e.g.
|
||||||
device name, device channels).
|
device name, device channels).
|
||||||
3. Call :c:func:`iio_device_register()`, this registers the device with the
|
3. Call iio_device_register(), this registers the device with the
|
||||||
IIO core. After this call the device is ready to accept requests from user
|
IIO core. After this call the device is ready to accept requests from user
|
||||||
space applications.
|
space applications.
|
||||||
|
|
||||||
At remove, we free the resources allocated in probe in reverse order:
|
At remove, we free the resources allocated in probe in reverse order:
|
||||||
|
|
||||||
1. :c:func:`iio_device_unregister()`, unregister the device from the IIO core.
|
1. iio_device_unregister(), unregister the device from the IIO core.
|
||||||
2. :c:func:`iio_device_free()`, free the memory allocated for the IIO device.
|
2. iio_device_free(), free the memory allocated for the IIO device.
|
||||||
|
|
||||||
IIO device sysfs interface
|
IIO device sysfs interface
|
||||||
==========================
|
==========================
|
||||||
|
|
|
@ -110,13 +110,15 @@ The Amiga protection flags RWEDRWEDHSPARWED are handled as follows:
|
||||||
|
|
||||||
- R maps to r for user, group and others. On directories, R implies x.
|
- R maps to r for user, group and others. On directories, R implies x.
|
||||||
|
|
||||||
- If both W and D are allowed, w will be set.
|
- W maps to w.
|
||||||
|
|
||||||
- E maps to x.
|
- E maps to x.
|
||||||
|
|
||||||
- H and P are always retained and ignored under Linux.
|
- D is ignored.
|
||||||
|
|
||||||
- A is always reset when a file is written to.
|
- H, S and P are always retained and ignored under Linux.
|
||||||
|
|
||||||
|
- A is cleared when a file is written to.
|
||||||
|
|
||||||
User id and group id will be used unless set[gu]id are given as mount
|
User id and group id will be used unless set[gu]id are given as mount
|
||||||
options. Since most of the Amiga file systems are single user systems
|
options. Since most of the Amiga file systems are single user systems
|
||||||
|
@ -128,11 +130,13 @@ Linux -> Amiga:
|
||||||
|
|
||||||
The Linux rwxrwxrwx file mode is handled as follows:
|
The Linux rwxrwxrwx file mode is handled as follows:
|
||||||
|
|
||||||
- r permission will set R for user, group and others.
|
- r permission will allow R for user, group and others.
|
||||||
|
|
||||||
- w permission will set W and D for user, group and others.
|
- w permission will allow W for user, group and others.
|
||||||
|
|
||||||
- x permission of the user will set E for plain files.
|
- x permission of the user will allow E for plain files.
|
||||||
|
|
||||||
|
- D will be allowed for user, group and others.
|
||||||
|
|
||||||
- All other flags (suid, sgid, ...) are ignored and will
|
- All other flags (suid, sgid, ...) are ignored and will
|
||||||
not be retained.
|
not be retained.
|
||||||
|
|
|
@ -68,7 +68,7 @@ See below for all known bank addresses, numbers of sensors in that bank,
|
||||||
number of bytes data per sensor and contents/meaning of those bytes.
|
number of bytes data per sensor and contents/meaning of those bytes.
|
||||||
|
|
||||||
Although both this document and the kernel driver have kept the sensor
|
Although both this document and the kernel driver have kept the sensor
|
||||||
terminoligy for the addressing within a bank this is not 100% correct, in
|
terminology for the addressing within a bank this is not 100% correct, in
|
||||||
bank 0x24 for example the addressing within the bank selects a PWM output not
|
bank 0x24 for example the addressing within the bank selects a PWM output not
|
||||||
a sensor.
|
a sensor.
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ After wider testing of the Linux kernel driver some variants of the uGuru have
|
||||||
turned up which do not hold 0x08 at DATA within 250 reads after writing the
|
turned up which do not hold 0x08 at DATA within 250 reads after writing the
|
||||||
bank address. With these versions this happens quite frequent, using larger
|
bank address. With these versions this happens quite frequent, using larger
|
||||||
timeouts doesn't help, they just go offline for a second or 2, doing some
|
timeouts doesn't help, they just go offline for a second or 2, doing some
|
||||||
internal callibration or whatever. Your code should be prepared to handle
|
internal calibration or whatever. Your code should be prepared to handle
|
||||||
this and in case of no response in this specific case just goto sleep for a
|
this and in case of no response in this specific case just goto sleep for a
|
||||||
while and then retry.
|
while and then retry.
|
||||||
|
|
||||||
|
@ -331,6 +331,6 @@ the voltage / clock programming out, I tried reading and only reading banks
|
||||||
0-0x30 with the reading code used for the sensor banks (0x20-0x28) and this
|
0-0x30 with the reading code used for the sensor banks (0x20-0x28) and this
|
||||||
resulted in a _permanent_ reprogramming of the voltages, luckily I had the
|
resulted in a _permanent_ reprogramming of the voltages, luckily I had the
|
||||||
sensors part configured so that it would shutdown my system on any out of spec
|
sensors part configured so that it would shutdown my system on any out of spec
|
||||||
voltages which proprably safed my computer (after a reboot I managed to
|
voltages which probably safed my computer (after a reboot I managed to
|
||||||
immediately enter the bios and reload the defaults). This probably means that
|
immediately enter the bios and reload the defaults). This probably means that
|
||||||
the read/write cycle for the non sensor part is different from the sensor part.
|
the read/write cycle for the non sensor part is different from the sensor part.
|
||||||
|
|
|
@ -17,7 +17,7 @@ Supported chips:
|
||||||
Note:
|
Note:
|
||||||
The uGuru is a microcontroller with onboard firmware which programs
|
The uGuru is a microcontroller with onboard firmware which programs
|
||||||
it to behave as a hwmon IC. There are many different revisions of the
|
it to behave as a hwmon IC. There are many different revisions of the
|
||||||
firmware and thus effectivly many different revisions of the uGuru.
|
firmware and thus effectively many different revisions of the uGuru.
|
||||||
Below is an incomplete list with which revisions are used for which
|
Below is an incomplete list with which revisions are used for which
|
||||||
Motherboards:
|
Motherboards:
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ Supported chips:
|
||||||
sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's
|
sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's
|
||||||
this does not always work. For these uGuru's the autodetection can
|
this does not always work. For these uGuru's the autodetection can
|
||||||
be overridden with the bank1_types module param. For all 3 known
|
be overridden with the bank1_types module param. For all 3 known
|
||||||
revison 1 motherboards the correct use of this param is:
|
revision 1 motherboards the correct use of this param is:
|
||||||
bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1
|
bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1
|
||||||
You may also need to specify the fan_sensors option for these boards
|
You may also need to specify the fan_sensors option for these boards
|
||||||
fan_sensors=5
|
fan_sensors=5
|
||||||
|
|
|
@ -13,7 +13,7 @@ Supported chips:
|
||||||
Note:
|
Note:
|
||||||
The uGuru is a microcontroller with onboard firmware which programs
|
The uGuru is a microcontroller with onboard firmware which programs
|
||||||
it to behave as a hwmon IC. There are many different revisions of the
|
it to behave as a hwmon IC. There are many different revisions of the
|
||||||
firmware and thus effectivly many different revisions of the uGuru.
|
firmware and thus effectively many different revisions of the uGuru.
|
||||||
Below is an incomplete list with which revisions are used for which
|
Below is an incomplete list with which revisions are used for which
|
||||||
Motherboards:
|
Motherboards:
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ Supported chips:
|
||||||
- uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X,
|
- uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X,
|
||||||
AW9D-MAX)
|
AW9D-MAX)
|
||||||
|
|
||||||
The abituguru3 driver is only for revison 3.0.x.x motherboards,
|
The abituguru3 driver is only for revision 3.0.x.x motherboards,
|
||||||
this driver will not work on older motherboards. For older
|
this driver will not work on older motherboards. For older
|
||||||
motherboards use the abituguru (without the 3 !) driver.
|
motherboards use the abituguru (without the 3 !) driver.
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ supports C and the GNU C extensions required by the kernel, and is pronounced
|
||||||
Clang
|
Clang
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The compiler used can be swapped out via `CC=` command line argument to `make`.
|
The compiler used can be swapped out via ``CC=`` command line argument to ``make``.
|
||||||
`CC=` should be set when selecting a config and during a build.
|
``CC=`` should be set when selecting a config and during a build. ::
|
||||||
|
|
||||||
make CC=clang defconfig
|
make CC=clang defconfig
|
||||||
|
|
||||||
|
@ -34,33 +34,33 @@ Cross Compiling
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
A single Clang compiler binary will typically contain all supported backends,
|
A single Clang compiler binary will typically contain all supported backends,
|
||||||
which can help simplify cross compiling.
|
which can help simplify cross compiling. ::
|
||||||
|
|
||||||
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang
|
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang
|
||||||
|
|
||||||
`CROSS_COMPILE` is not used to prefix the Clang compiler binary, instead
|
``CROSS_COMPILE`` is not used to prefix the Clang compiler binary, instead
|
||||||
`CROSS_COMPILE` is used to set a command line flag: `--target <triple>`. For
|
``CROSS_COMPILE`` is used to set a command line flag: ``--target <triple>``. For
|
||||||
example:
|
example: ::
|
||||||
|
|
||||||
clang --target aarch64-linux-gnu foo.c
|
clang --target aarch64-linux-gnu foo.c
|
||||||
|
|
||||||
LLVM Utilities
|
LLVM Utilities
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
LLVM has substitutes for GNU binutils utilities. Kbuild supports `LLVM=1`
|
LLVM has substitutes for GNU binutils utilities. Kbuild supports ``LLVM=1``
|
||||||
to enable them.
|
to enable them. ::
|
||||||
|
|
||||||
make LLVM=1
|
make LLVM=1
|
||||||
|
|
||||||
They can be enabled individually. The full list of the parameters:
|
They can be enabled individually. The full list of the parameters: ::
|
||||||
|
|
||||||
make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \\
|
make CC=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \
|
||||||
OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump OBJSIZE=llvm-size \\
|
OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump OBJSIZE=llvm-size \
|
||||||
READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar \\
|
READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar \
|
||||||
HOSTLD=ld.lld
|
HOSTLD=ld.lld
|
||||||
|
|
||||||
Currently, the integrated assembler is disabled by default. You can pass
|
Currently, the integrated assembler is disabled by default. You can pass
|
||||||
`LLVM_IAS=1` to enable it.
|
``LLVM_IAS=1`` to enable it.
|
||||||
|
|
||||||
Getting Help
|
Getting Help
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -16,7 +16,7 @@ This document describes the Linux kernel Makefiles.
|
||||||
--- 3.5 Library file goals - lib-y
|
--- 3.5 Library file goals - lib-y
|
||||||
--- 3.6 Descending down in directories
|
--- 3.6 Descending down in directories
|
||||||
--- 3.7 Compilation flags
|
--- 3.7 Compilation flags
|
||||||
--- 3.8 Command line dependency
|
--- 3.8 <deleted>
|
||||||
--- 3.9 Dependency tracking
|
--- 3.9 Dependency tracking
|
||||||
--- 3.10 Special Rules
|
--- 3.10 Special Rules
|
||||||
--- 3.11 $(CC) support functions
|
--- 3.11 $(CC) support functions
|
||||||
|
@ -39,8 +39,8 @@ This document describes the Linux kernel Makefiles.
|
||||||
|
|
||||||
=== 7 Architecture Makefiles
|
=== 7 Architecture Makefiles
|
||||||
--- 7.1 Set variables to tweak the build to the architecture
|
--- 7.1 Set variables to tweak the build to the architecture
|
||||||
--- 7.2 Add prerequisites to archheaders:
|
--- 7.2 Add prerequisites to archheaders
|
||||||
--- 7.3 Add prerequisites to archprepare:
|
--- 7.3 Add prerequisites to archprepare
|
||||||
--- 7.4 List directories to visit when descending
|
--- 7.4 List directories to visit when descending
|
||||||
--- 7.5 Architecture-specific boot images
|
--- 7.5 Architecture-specific boot images
|
||||||
--- 7.6 Building non-kbuild targets
|
--- 7.6 Building non-kbuild targets
|
||||||
|
@ -129,7 +129,7 @@ The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
|
||||||
be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
|
be used and if both a 'Makefile' and a 'Kbuild' file exists, then the 'Kbuild'
|
||||||
file will be used.
|
file will be used.
|
||||||
|
|
||||||
Section 3.1 "Goal definitions" is a quick intro, further chapters provide
|
Section 3.1 "Goal definitions" is a quick intro; further chapters provide
|
||||||
more details, with real examples.
|
more details, with real examples.
|
||||||
|
|
||||||
3.1 Goal definitions
|
3.1 Goal definitions
|
||||||
|
@ -965,7 +965,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
KBUILD_LDFLAGS := -m elf_s390
|
KBUILD_LDFLAGS := -m elf_s390
|
||||||
|
|
||||||
Note: ldflags-y can be used to further customise
|
Note: ldflags-y can be used to further customise
|
||||||
the flags used. See chapter 3.7.
|
the flags used. See section 3.7.
|
||||||
|
|
||||||
LDFLAGS_vmlinux
|
LDFLAGS_vmlinux
|
||||||
Options for $(LD) when linking vmlinux
|
Options for $(LD) when linking vmlinux
|
||||||
|
@ -1121,7 +1121,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
|
|
||||||
In this example, the file target maketools will be processed
|
In this example, the file target maketools will be processed
|
||||||
before descending down in the subdirectories.
|
before descending down in the subdirectories.
|
||||||
See also chapter XXX-TODO that describe how kbuild supports
|
See also chapter XXX-TODO that describes how kbuild supports
|
||||||
generating offset header files.
|
generating offset header files.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1261,7 +1261,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
always be built.
|
always be built.
|
||||||
Assignments to $(targets) are without $(obj)/ prefix.
|
Assignments to $(targets) are without $(obj)/ prefix.
|
||||||
if_changed may be used in conjunction with custom commands as
|
if_changed may be used in conjunction with custom commands as
|
||||||
defined in 6.8 "Custom kbuild commands".
|
defined in 7.8 "Custom kbuild commands".
|
||||||
|
|
||||||
Note: It is a typical mistake to forget the FORCE prerequisite.
|
Note: It is a typical mistake to forget the FORCE prerequisite.
|
||||||
Another common pitfall is that whitespace is sometimes
|
Another common pitfall is that whitespace is sometimes
|
||||||
|
@ -1411,7 +1411,7 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
that may be shared between individual architectures.
|
that may be shared between individual architectures.
|
||||||
The recommended approach how to use a generic header file is
|
The recommended approach how to use a generic header file is
|
||||||
to list the file in the Kbuild file.
|
to list the file in the Kbuild file.
|
||||||
See "7.2 generic-y" for further info on syntax etc.
|
See "8.2 generic-y" for further info on syntax etc.
|
||||||
|
|
||||||
7.11 Post-link pass
|
7.11 Post-link pass
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -1601,4 +1601,4 @@ is the right choice.
|
||||||
|
|
||||||
- Describe how kbuild supports shipped files with _shipped.
|
- Describe how kbuild supports shipped files with _shipped.
|
||||||
- Generating offset header files.
|
- Generating offset header files.
|
||||||
- Add more variables to section 7?
|
- Add more variables to chapters 7 or 9?
|
||||||
|
|
|
@ -164,14 +164,14 @@ by disabling preemption or interrupts.
|
||||||
On non-PREEMPT_RT kernels local_lock operations map to the preemption and
|
On non-PREEMPT_RT kernels local_lock operations map to the preemption and
|
||||||
interrupt disabling and enabling primitives:
|
interrupt disabling and enabling primitives:
|
||||||
|
|
||||||
=========================== ======================
|
=============================== ======================
|
||||||
local_lock(&llock) preempt_disable()
|
local_lock(&llock) preempt_disable()
|
||||||
local_unlock(&llock) preempt_enable()
|
local_unlock(&llock) preempt_enable()
|
||||||
local_lock_irq(&llock) local_irq_disable()
|
local_lock_irq(&llock) local_irq_disable()
|
||||||
local_unlock_irq(&llock) local_irq_enable()
|
local_unlock_irq(&llock) local_irq_enable()
|
||||||
local_lock_save(&llock) local_irq_save()
|
local_lock_irqsave(&llock) local_irq_save()
|
||||||
local_lock_restore(&llock) local_irq_save()
|
local_unlock_irqrestore(&llock) local_irq_restore()
|
||||||
=========================== ======================
|
=============================== ======================
|
||||||
|
|
||||||
The named scope of local_lock has two advantages over the regular
|
The named scope of local_lock has two advantages over the regular
|
||||||
primitives:
|
primitives:
|
||||||
|
@ -353,14 +353,14 @@ protection scope. So the following substitution is wrong::
|
||||||
{
|
{
|
||||||
local_irq_save(flags); -> local_lock_irqsave(&local_lock_1, flags);
|
local_irq_save(flags); -> local_lock_irqsave(&local_lock_1, flags);
|
||||||
func3();
|
func3();
|
||||||
local_irq_restore(flags); -> local_lock_irqrestore(&local_lock_1, flags);
|
local_irq_restore(flags); -> local_unlock_irqrestore(&local_lock_1, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
func2()
|
func2()
|
||||||
{
|
{
|
||||||
local_irq_save(flags); -> local_lock_irqsave(&local_lock_2, flags);
|
local_irq_save(flags); -> local_lock_irqsave(&local_lock_2, flags);
|
||||||
func3();
|
func3();
|
||||||
local_irq_restore(flags); -> local_lock_irqrestore(&local_lock_2, flags);
|
local_irq_restore(flags); -> local_unlock_irqrestore(&local_lock_2, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
func3()
|
func3()
|
||||||
|
@ -379,14 +379,14 @@ PREEMPT_RT-specific semantics of spinlock_t. The correct substitution is::
|
||||||
{
|
{
|
||||||
local_irq_save(flags); -> local_lock_irqsave(&local_lock, flags);
|
local_irq_save(flags); -> local_lock_irqsave(&local_lock, flags);
|
||||||
func3();
|
func3();
|
||||||
local_irq_restore(flags); -> local_lock_irqrestore(&local_lock, flags);
|
local_irq_restore(flags); -> local_unlock_irqrestore(&local_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
func2()
|
func2()
|
||||||
{
|
{
|
||||||
local_irq_save(flags); -> local_lock_irqsave(&local_lock, flags);
|
local_irq_save(flags); -> local_lock_irqsave(&local_lock, flags);
|
||||||
func3();
|
func3();
|
||||||
local_irq_restore(flags); -> local_lock_irqrestore(&local_lock, flags);
|
local_irq_restore(flags); -> local_unlock_irqrestore(&local_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
func3()
|
func3()
|
||||||
|
|
|
@ -101,3 +101,4 @@ to do something different in the near future.
|
||||||
|
|
||||||
../doc-guide/maintainer-profile
|
../doc-guide/maintainer-profile
|
||||||
../nvdimm/maintainer-entry-profile
|
../nvdimm/maintainer-entry-profile
|
||||||
|
../riscv/patch-acceptance
|
||||||
|
|
|
@ -180,7 +180,7 @@ The configuration can only be set up via VLAN tagging and bridge setup.
|
||||||
|
|
||||||
# bring up the slave interfaces
|
# bring up the slave interfaces
|
||||||
ip link set lan1 up
|
ip link set lan1 up
|
||||||
ip link set lan1 up
|
ip link set lan2 up
|
||||||
ip link set lan3 up
|
ip link set lan3 up
|
||||||
|
|
||||||
# create bridge
|
# create bridge
|
||||||
|
|
|
@ -142,7 +142,7 @@ only NUL-terminated strings. The safe replacement is strscpy().
|
||||||
(Users of strscpy() still needing NUL-padding should instead
|
(Users of strscpy() still needing NUL-padding should instead
|
||||||
use strscpy_pad().)
|
use strscpy_pad().)
|
||||||
|
|
||||||
If a caller is using non-NUL-terminated strings, strncpy()() can
|
If a caller is using non-NUL-terminated strings, strncpy() can
|
||||||
still be used, but destinations should be marked with the `__nonstring
|
still be used, but destinations should be marked with the `__nonstring
|
||||||
<https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html>`_
|
<https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html>`_
|
||||||
attribute to avoid future compiler warnings.
|
attribute to avoid future compiler warnings.
|
||||||
|
|
|
@ -332,7 +332,7 @@ WO 9901953 (A1)
|
||||||
|
|
||||||
|
|
||||||
US Patents (https://www.uspto.gov/)
|
US Patents (https://www.uspto.gov/)
|
||||||
----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
US 5925841
|
US 5925841
|
||||||
Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
||||||
|
|
|
@ -337,7 +337,7 @@ WO 9901953 (A1)
|
||||||
|
|
||||||
|
|
||||||
US Patents (https://www.uspto.gov/)
|
US Patents (https://www.uspto.gov/)
|
||||||
----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
US 5925841
|
US 5925841
|
||||||
Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
||||||
|
|
|
@ -143,7 +143,7 @@ timestamp shows when the information is put together by the driver
|
||||||
before returning from the ``STATUS`` and ``STATUS_EXT`` ioctl. in most cases
|
before returning from the ``STATUS`` and ``STATUS_EXT`` ioctl. in most cases
|
||||||
this driver_timestamp will be identical to the regular system tstamp.
|
this driver_timestamp will be identical to the regular system tstamp.
|
||||||
|
|
||||||
Examples of typestamping with HDaudio:
|
Examples of timestamping with HDAudio:
|
||||||
|
|
||||||
1. DMA timestamp, no compensation for DMA+analog delay
|
1. DMA timestamp, no compensation for DMA+analog delay
|
||||||
::
|
::
|
||||||
|
|
|
@ -130,7 +130,7 @@ chi usa solo stringe terminate. La versione sicura da usare è
|
||||||
strscpy(). (chi usa strscpy() e necessita di estendere la
|
strscpy(). (chi usa strscpy() e necessita di estendere la
|
||||||
terminazione con NUL deve aggiungere una chiamata a memset())
|
terminazione con NUL deve aggiungere una chiamata a memset())
|
||||||
|
|
||||||
Se il chiamate no usa stringhe terminate con NUL, allore strncpy()()
|
Se il chiamate no usa stringhe terminate con NUL, allore strncpy()
|
||||||
può continuare ad essere usata, ma i buffer di destinazione devono essere
|
può continuare ad essere usata, ma i buffer di destinazione devono essere
|
||||||
marchiati con l'attributo `__nonstring <https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html>`_
|
marchiati con l'attributo `__nonstring <https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html>`_
|
||||||
per evitare avvisi durante la compilazione.
|
per evitare avvisi durante la compilazione.
|
||||||
|
|
|
@ -6130,7 +6130,7 @@ HvCallSendSyntheticClusterIpi, HvCallSendSyntheticClusterIpiEx.
|
||||||
8.21 KVM_CAP_HYPERV_DIRECT_TLBFLUSH
|
8.21 KVM_CAP_HYPERV_DIRECT_TLBFLUSH
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
:Architecture: x86
|
:Architectures: x86
|
||||||
|
|
||||||
This capability indicates that KVM running on top of Hyper-V hypervisor
|
This capability indicates that KVM running on top of Hyper-V hypervisor
|
||||||
enables Direct TLB flush for its guests meaning that TLB flush
|
enables Direct TLB flush for its guests meaning that TLB flush
|
||||||
|
@ -6143,19 +6143,33 @@ in CPUID and only exposes Hyper-V identification. In this case, guest
|
||||||
thinks it's running on Hyper-V and only use Hyper-V hypercalls.
|
thinks it's running on Hyper-V and only use Hyper-V hypercalls.
|
||||||
|
|
||||||
8.22 KVM_CAP_S390_VCPU_RESETS
|
8.22 KVM_CAP_S390_VCPU_RESETS
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
Architectures: s390
|
:Architectures: s390
|
||||||
|
|
||||||
This capability indicates that the KVM_S390_NORMAL_RESET and
|
This capability indicates that the KVM_S390_NORMAL_RESET and
|
||||||
KVM_S390_CLEAR_RESET ioctls are available.
|
KVM_S390_CLEAR_RESET ioctls are available.
|
||||||
|
|
||||||
8.23 KVM_CAP_S390_PROTECTED
|
8.23 KVM_CAP_S390_PROTECTED
|
||||||
|
---------------------------
|
||||||
|
|
||||||
Architecture: s390
|
:Architectures: s390
|
||||||
|
|
||||||
|
|
||||||
This capability indicates that the Ultravisor has been initialized and
|
This capability indicates that the Ultravisor has been initialized and
|
||||||
KVM can therefore start protected VMs.
|
KVM can therefore start protected VMs.
|
||||||
This capability governs the KVM_S390_PV_COMMAND ioctl and the
|
This capability governs the KVM_S390_PV_COMMAND ioctl and the
|
||||||
KVM_MP_STATE_LOAD MP_STATE. KVM_SET_MP_STATE can fail for protected
|
KVM_MP_STATE_LOAD MP_STATE. KVM_SET_MP_STATE can fail for protected
|
||||||
guests when the state change is invalid.
|
guests when the state change is invalid.
|
||||||
|
|
||||||
|
8.24 KVM_CAP_STEAL_TIME
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
:Architectures: arm64, x86
|
||||||
|
|
||||||
|
This capability indicates that KVM supports steal time accounting.
|
||||||
|
When steal time accounting is supported it may be enabled with
|
||||||
|
architecture-specific interfaces. This capability and the architecture-
|
||||||
|
specific interfaces must be consistent, i.e. if one says the feature
|
||||||
|
is supported, than the other should as well and vice versa. For arm64
|
||||||
|
see Documentation/virt/kvm/devices/vcpu.rst "KVM_ARM_VCPU_PVTIME_CTRL".
|
||||||
|
For x86 see Documentation/virt/kvm/msr.rst "MSR_KVM_STEAL_TIME".
|
||||||
|
|
71
MAINTAINERS
71
MAINTAINERS
|
@ -1694,7 +1694,6 @@ F: arch/arm/mach-cns3xxx/
|
||||||
|
|
||||||
ARM/CAVIUM THUNDER NETWORK DRIVER
|
ARM/CAVIUM THUNDER NETWORK DRIVER
|
||||||
M: Sunil Goutham <sgoutham@marvell.com>
|
M: Sunil Goutham <sgoutham@marvell.com>
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/cavium/thunder/
|
F: drivers/net/ethernet/cavium/thunder/
|
||||||
|
@ -3389,6 +3388,7 @@ M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: openwrt-devel@lists.openwrt.org (subscribers-only)
|
L: openwrt-devel@lists.openwrt.org (subscribers-only)
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/net/dsa/b53.txt
|
||||||
F: drivers/net/dsa/b53/*
|
F: drivers/net/dsa/b53/*
|
||||||
F: include/linux/platform_data/b53.h
|
F: include/linux/platform_data/b53.h
|
||||||
|
|
||||||
|
@ -3574,13 +3574,28 @@ L: bcm-kernel-feedback-list@broadcom.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/phy/broadcom/phy-brcm-usb*
|
F: drivers/phy/broadcom/phy-brcm-usb*
|
||||||
|
|
||||||
|
BROADCOM ETHERNET PHY DRIVERS
|
||||||
|
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
L: bcm-kernel-feedback-list@broadcom.com
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/net/broadcom-bcm87xx.txt
|
||||||
|
F: drivers/net/phy/bcm*.[ch]
|
||||||
|
F: drivers/net/phy/broadcom.c
|
||||||
|
F: include/linux/brcmphy.h
|
||||||
|
|
||||||
BROADCOM GENET ETHERNET DRIVER
|
BROADCOM GENET ETHERNET DRIVER
|
||||||
M: Doug Berger <opendmb@gmail.com>
|
M: Doug Berger <opendmb@gmail.com>
|
||||||
M: Florian Fainelli <f.fainelli@gmail.com>
|
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
L: bcm-kernel-feedback-list@broadcom.com
|
L: bcm-kernel-feedback-list@broadcom.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
|
||||||
|
F: Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt
|
||||||
F: drivers/net/ethernet/broadcom/genet/
|
F: drivers/net/ethernet/broadcom/genet/
|
||||||
|
F: drivers/net/mdio/mdio-bcm-unimac.c
|
||||||
|
F: include/linux/platform_data/bcmgenet.h
|
||||||
|
F: include/linux/platform_data/mdio-bcm-unimac.h
|
||||||
|
|
||||||
BROADCOM IPROC ARM ARCHITECTURE
|
BROADCOM IPROC ARM ARCHITECTURE
|
||||||
M: Ray Jui <rjui@broadcom.com>
|
M: Ray Jui <rjui@broadcom.com>
|
||||||
|
@ -3932,8 +3947,8 @@ W: https://wireless.wiki.kernel.org/en/users/Drivers/carl9170
|
||||||
F: drivers/net/wireless/ath/carl9170/
|
F: drivers/net/wireless/ath/carl9170/
|
||||||
|
|
||||||
CAVIUM I2C DRIVER
|
CAVIUM I2C DRIVER
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
S: Supported
|
S: Odd Fixes
|
||||||
W: http://www.marvell.com
|
W: http://www.marvell.com
|
||||||
F: drivers/i2c/busses/i2c-octeon*
|
F: drivers/i2c/busses/i2c-octeon*
|
||||||
F: drivers/i2c/busses/i2c-thunderx*
|
F: drivers/i2c/busses/i2c-thunderx*
|
||||||
|
@ -3948,8 +3963,8 @@ W: http://www.marvell.com
|
||||||
F: drivers/net/ethernet/cavium/liquidio/
|
F: drivers/net/ethernet/cavium/liquidio/
|
||||||
|
|
||||||
CAVIUM MMC DRIVER
|
CAVIUM MMC DRIVER
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
S: Supported
|
S: Odd Fixes
|
||||||
W: http://www.marvell.com
|
W: http://www.marvell.com
|
||||||
F: drivers/mmc/host/cavium*
|
F: drivers/mmc/host/cavium*
|
||||||
|
|
||||||
|
@ -3961,9 +3976,9 @@ W: http://www.marvell.com
|
||||||
F: drivers/crypto/cavium/cpt/
|
F: drivers/crypto/cavium/cpt/
|
||||||
|
|
||||||
CAVIUM THUNDERX2 ARM64 SOC
|
CAVIUM THUNDERX2 ARM64 SOC
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: Documentation/devicetree/bindings/arm/cavium-thunder2.txt
|
F: Documentation/devicetree/bindings/arm/cavium-thunder2.txt
|
||||||
F: arch/arm64/boot/dts/cavium/thunder2-99xx*
|
F: arch/arm64/boot/dts/cavium/thunder2-99xx*
|
||||||
|
|
||||||
|
@ -4242,6 +4257,8 @@ S: Maintained
|
||||||
F: .clang-format
|
F: .clang-format
|
||||||
|
|
||||||
CLANG/LLVM BUILD SUPPORT
|
CLANG/LLVM BUILD SUPPORT
|
||||||
|
M: Nathan Chancellor <natechancellor@gmail.com>
|
||||||
|
M: Nick Desaulniers <ndesaulniers@google.com>
|
||||||
L: clang-built-linux@googlegroups.com
|
L: clang-built-linux@googlegroups.com
|
||||||
S: Supported
|
S: Supported
|
||||||
W: https://clangbuiltlinux.github.io/
|
W: https://clangbuiltlinux.github.io/
|
||||||
|
@ -5240,6 +5257,7 @@ DOCUMENTATION
|
||||||
M: Jonathan Corbet <corbet@lwn.net>
|
M: Jonathan Corbet <corbet@lwn.net>
|
||||||
L: linux-doc@vger.kernel.org
|
L: linux-doc@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
P: Documentation/doc-guide/maintainer-profile.rst
|
||||||
T: git git://git.lwn.net/linux.git docs-next
|
T: git git://git.lwn.net/linux.git docs-next
|
||||||
F: Documentation/
|
F: Documentation/
|
||||||
F: scripts/documentation-file-ref-check
|
F: scripts/documentation-file-ref-check
|
||||||
|
@ -6174,16 +6192,15 @@ F: drivers/edac/highbank*
|
||||||
|
|
||||||
EDAC-CAVIUM OCTEON
|
EDAC-CAVIUM OCTEON
|
||||||
M: Ralf Baechle <ralf@linux-mips.org>
|
M: Ralf Baechle <ralf@linux-mips.org>
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
|
||||||
L: linux-edac@vger.kernel.org
|
L: linux-edac@vger.kernel.org
|
||||||
L: linux-mips@vger.kernel.org
|
L: linux-mips@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/edac/octeon_edac*
|
F: drivers/edac/octeon_edac*
|
||||||
|
|
||||||
EDAC-CAVIUM THUNDERX
|
EDAC-CAVIUM THUNDERX
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
L: linux-edac@vger.kernel.org
|
L: linux-edac@vger.kernel.org
|
||||||
S: Supported
|
S: Odd Fixes
|
||||||
F: drivers/edac/thunderx_edac*
|
F: drivers/edac/thunderx_edac*
|
||||||
|
|
||||||
EDAC-CORE
|
EDAC-CORE
|
||||||
|
@ -6191,7 +6208,7 @@ M: Borislav Petkov <bp@alien8.de>
|
||||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||||
M: Tony Luck <tony.luck@intel.com>
|
M: Tony Luck <tony.luck@intel.com>
|
||||||
R: James Morse <james.morse@arm.com>
|
R: James Morse <james.morse@arm.com>
|
||||||
R: Robert Richter <rrichter@marvell.com>
|
R: Robert Richter <rric@kernel.org>
|
||||||
L: linux-edac@vger.kernel.org
|
L: linux-edac@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras.git edac-for-next
|
||||||
|
@ -6495,7 +6512,6 @@ F: net/bridge/
|
||||||
|
|
||||||
ETHERNET PHY LIBRARY
|
ETHERNET PHY LIBRARY
|
||||||
M: Andrew Lunn <andrew@lunn.ch>
|
M: Andrew Lunn <andrew@lunn.ch>
|
||||||
M: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
M: Heiner Kallweit <hkallweit1@gmail.com>
|
M: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
R: Russell King <linux@armlinux.org.uk>
|
R: Russell King <linux@armlinux.org.uk>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -6885,6 +6901,14 @@ L: linuxppc-dev@lists.ozlabs.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/dma/fsldma.*
|
F: drivers/dma/fsldma.*
|
||||||
|
|
||||||
|
FREESCALE DSPI DRIVER
|
||||||
|
M: Vladimir Oltean <olteanv@gmail.com>
|
||||||
|
L: linux-spi@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
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 ENETC ETHERNET DRIVERS
|
FREESCALE ENETC ETHERNET DRIVERS
|
||||||
M: Claudiu Manoil <claudiu.manoil@nxp.com>
|
M: Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -8256,7 +8280,7 @@ IA64 (Itanium) PLATFORM
|
||||||
M: Tony Luck <tony.luck@intel.com>
|
M: Tony Luck <tony.luck@intel.com>
|
||||||
M: Fenghua Yu <fenghua.yu@intel.com>
|
M: Fenghua Yu <fenghua.yu@intel.com>
|
||||||
L: linux-ia64@vger.kernel.org
|
L: linux-ia64@vger.kernel.org
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
|
||||||
F: Documentation/ia64/
|
F: Documentation/ia64/
|
||||||
F: arch/ia64/
|
F: arch/ia64/
|
||||||
|
@ -9776,7 +9800,7 @@ F: drivers/scsi/53c700*
|
||||||
|
|
||||||
LEAKING_ADDRESSES
|
LEAKING_ADDRESSES
|
||||||
M: Tobin C. Harding <me@tobin.cc>
|
M: Tobin C. Harding <me@tobin.cc>
|
||||||
M: Tycho Andersen <tycho@tycho.ws>
|
M: Tycho Andersen <tycho@tycho.pizza>
|
||||||
L: kernel-hardening@lists.openwall.com
|
L: kernel-hardening@lists.openwall.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tobin/leaks.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tobin/leaks.git
|
||||||
|
@ -13430,10 +13454,10 @@ F: Documentation/devicetree/bindings/pci/axis,artpec*
|
||||||
F: drivers/pci/controller/dwc/*artpec*
|
F: drivers/pci/controller/dwc/*artpec*
|
||||||
|
|
||||||
PCIE DRIVER FOR CAVIUM THUNDERX
|
PCIE DRIVER FOR CAVIUM THUNDERX
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
L: linux-pci@vger.kernel.org
|
L: linux-pci@vger.kernel.org
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Odd Fixes
|
||||||
F: drivers/pci/controller/pci-thunder-*
|
F: drivers/pci/controller/pci-thunder-*
|
||||||
|
|
||||||
PCIE DRIVER FOR HISILICON
|
PCIE DRIVER FOR HISILICON
|
||||||
|
@ -13570,12 +13594,18 @@ F: kernel/events/*
|
||||||
F: tools/lib/perf/
|
F: tools/lib/perf/
|
||||||
F: tools/perf/
|
F: tools/perf/
|
||||||
|
|
||||||
PERFORMANCE EVENTS SUBSYSTEM ARM64 PMU EVENTS
|
PERFORMANCE EVENTS TOOLING ARM64
|
||||||
R: John Garry <john.garry@huawei.com>
|
R: John Garry <john.garry@huawei.com>
|
||||||
R: Will Deacon <will@kernel.org>
|
R: Will Deacon <will@kernel.org>
|
||||||
|
R: Mathieu Poirier <mathieu.poirier@linaro.org>
|
||||||
|
R: Leo Yan <leo.yan@linaro.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: tools/build/feature/test-libopencsd.c
|
||||||
|
F: tools/perf/arch/arm*/
|
||||||
F: tools/perf/pmu-events/arch/arm64/
|
F: tools/perf/pmu-events/arch/arm64/
|
||||||
|
F: tools/perf/util/arm-spe*
|
||||||
|
F: tools/perf/util/cs-etm*
|
||||||
|
|
||||||
PERSONALITY HANDLING
|
PERSONALITY HANDLING
|
||||||
M: Christoph Hellwig <hch@infradead.org>
|
M: Christoph Hellwig <hch@infradead.org>
|
||||||
|
@ -14366,7 +14396,7 @@ M: Rob Clark <robdclark@gmail.com>
|
||||||
L: iommu@lists.linux-foundation.org
|
L: iommu@lists.linux-foundation.org
|
||||||
L: linux-arm-msm@vger.kernel.org
|
L: linux-arm-msm@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/iommu/qcom_iommu.c
|
F: drivers/iommu/arm/arm-smmu/qcom_iommu.c
|
||||||
|
|
||||||
QUALCOMM IPCC MAILBOX DRIVER
|
QUALCOMM IPCC MAILBOX DRIVER
|
||||||
M: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
M: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
||||||
|
@ -15547,6 +15577,7 @@ F: include/uapi/linux/sed*
|
||||||
SECURITY CONTACT
|
SECURITY CONTACT
|
||||||
M: Security Officers <security@kernel.org>
|
M: Security Officers <security@kernel.org>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/admin-guide/security-bugs.rst
|
||||||
|
|
||||||
SECURITY SUBSYSTEM
|
SECURITY SUBSYSTEM
|
||||||
M: James Morris <jmorris@namei.org>
|
M: James Morris <jmorris@namei.org>
|
||||||
|
@ -17215,8 +17246,8 @@ S: Maintained
|
||||||
F: drivers/net/thunderbolt.c
|
F: drivers/net/thunderbolt.c
|
||||||
|
|
||||||
THUNDERX GPIO DRIVER
|
THUNDERX GPIO DRIVER
|
||||||
M: Robert Richter <rrichter@marvell.com>
|
M: Robert Richter <rric@kernel.org>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/gpio/gpio-thunderx.c
|
F: drivers/gpio/gpio-thunderx.c
|
||||||
|
|
||||||
TI AM437X VPFE DRIVER
|
TI AM437X VPFE DRIVER
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -2,7 +2,7 @@
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 9
|
PATCHLEVEL = 9
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc5
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -882,10 +882,6 @@ KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections
|
||||||
LDFLAGS_vmlinux += --gc-sections
|
LDFLAGS_vmlinux += --gc-sections
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_LIVEPATCH
|
|
||||||
KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_SHADOW_CALL_STACK
|
ifdef CONFIG_SHADOW_CALL_STACK
|
||||||
CC_FLAGS_SCS := -fsanitize=shadow-call-stack
|
CC_FLAGS_SCS := -fsanitize=shadow-call-stack
|
||||||
KBUILD_CFLAGS += $(CC_FLAGS_SCS)
|
KBUILD_CFLAGS += $(CC_FLAGS_SCS)
|
||||||
|
|
|
@ -88,6 +88,8 @@ idu_intc: idu-interrupt-controller {
|
||||||
|
|
||||||
arcpct: pct {
|
arcpct: pct {
|
||||||
compatible = "snps,archs-pct";
|
compatible = "snps,archs-pct";
|
||||||
|
interrupt-parent = <&cpu_intc>;
|
||||||
|
interrupts = <20>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TIMER0 with interrupt for clockevent */
|
/* TIMER0 with interrupt for clockevent */
|
||||||
|
@ -208,7 +210,7 @@ gmac: ethernet@8000 {
|
||||||
reg = <0x8000 0x2000>;
|
reg = <0x8000 0x2000>;
|
||||||
interrupts = <10>;
|
interrupts = <10>;
|
||||||
interrupt-names = "macirq";
|
interrupt-names = "macirq";
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii-id";
|
||||||
snps,pbl = <32>;
|
snps,pbl = <32>;
|
||||||
snps,multicast-filter-bins = <256>;
|
snps,multicast-filter-bins = <256>;
|
||||||
clocks = <&gmacclk>;
|
clocks = <&gmacclk>;
|
||||||
|
@ -226,7 +228,7 @@ mdio {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "snps,dwmac-mdio";
|
compatible = "snps,dwmac-mdio";
|
||||||
phy0: ethernet-phy@0 {
|
phy0: ethernet-phy@0 { /* Micrel KSZ9031 */
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
* vineetg: April 2010
|
* vineetg: April 2010
|
||||||
* -Switched pgtable_t from being struct page * to unsigned long
|
* -Switched pgtable_t from being struct page * to unsigned long
|
||||||
* =Needed so that Page Table allocator (pte_alloc_one) is not forced to
|
* =Needed so that Page Table allocator (pte_alloc_one) is not forced to
|
||||||
* to deal with struct page. Thay way in future we can make it allocate
|
* deal with struct page. That way in future we can make it allocate
|
||||||
* multiple PG Tbls in one Page Frame
|
* multiple PG Tbls in one Page Frame
|
||||||
* =sweet side effect is avoiding calls to ugly page_address( ) from the
|
* =sweet side effect is avoiding calls to ugly page_address( ) from the
|
||||||
* pg-tlb allocator sub-sys (pte_alloc_one, ptr_free, pmd_populate
|
* pg-tlb allocator sub-sys (pte_alloc_one, ptr_free, pmd_populate)
|
||||||
*
|
*
|
||||||
* Amit Bhor, Sameer Dhavale: Codito Technologies 2004
|
* Amit Bhor, Sameer Dhavale: Codito Technologies 2004
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -562,7 +562,7 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct arc_reg_pct_build pct_bcr;
|
struct arc_reg_pct_build pct_bcr;
|
||||||
struct arc_reg_cc_build cc_bcr;
|
struct arc_reg_cc_build cc_bcr;
|
||||||
int i, has_interrupts;
|
int i, has_interrupts, irq;
|
||||||
int counter_size; /* in bits */
|
int counter_size; /* in bits */
|
||||||
|
|
||||||
union cc_name {
|
union cc_name {
|
||||||
|
@ -637,13 +637,7 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
|
||||||
.attr_groups = arc_pmu->attr_groups,
|
.attr_groups = arc_pmu->attr_groups,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (has_interrupts) {
|
if (has_interrupts && (irq = platform_get_irq(pdev, 0) >= 0)) {
|
||||||
int irq = platform_get_irq(pdev, 0);
|
|
||||||
|
|
||||||
if (irq < 0) {
|
|
||||||
pr_err("Cannot get IRQ number for the platform\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
arc_pmu->irq = irq;
|
arc_pmu->irq = irq;
|
||||||
|
|
||||||
|
@ -652,9 +646,9 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
|
||||||
this_cpu_ptr(&arc_pmu_cpu));
|
this_cpu_ptr(&arc_pmu_cpu));
|
||||||
|
|
||||||
on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1);
|
on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1);
|
||||||
|
} else {
|
||||||
} else
|
|
||||||
arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
|
arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* perf parser doesn't really like '-' symbol in events name, so let's
|
* perf parser doesn't really like '-' symbol in events name, so let's
|
||||||
|
|
|
@ -18,44 +18,37 @@
|
||||||
|
|
||||||
#define ARC_PATH_MAX 256
|
#define ARC_PATH_MAX 256
|
||||||
|
|
||||||
/*
|
static noinline void print_regs_scratch(struct pt_regs *regs)
|
||||||
* Common routine to print scratch regs (r0-r12) or callee regs (r13-r25)
|
|
||||||
* -Prints 3 regs per line and a CR.
|
|
||||||
* -To continue, callee regs right after scratch, special handling of CR
|
|
||||||
*/
|
|
||||||
static noinline void print_reg_file(long *reg_rev, int start_num)
|
|
||||||
{
|
{
|
||||||
unsigned int i;
|
pr_cont("BTA: 0x%08lx\n SP: 0x%08lx FP: 0x%08lx BLK: %pS\n",
|
||||||
char buf[512];
|
regs->bta, regs->sp, regs->fp, (void *)regs->blink);
|
||||||
int n = 0, len = sizeof(buf);
|
pr_cont("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n",
|
||||||
|
regs->lp_start, regs->lp_end, regs->lp_count);
|
||||||
|
|
||||||
for (i = start_num; i < start_num + 13; i++) {
|
pr_info("r00: 0x%08lx\tr01: 0x%08lx\tr02: 0x%08lx\n" \
|
||||||
n += scnprintf(buf + n, len - n, "r%02u: 0x%08lx\t",
|
"r03: 0x%08lx\tr04: 0x%08lx\tr05: 0x%08lx\n" \
|
||||||
i, (unsigned long)*reg_rev);
|
"r06: 0x%08lx\tr07: 0x%08lx\tr08: 0x%08lx\n" \
|
||||||
|
"r09: 0x%08lx\tr10: 0x%08lx\tr11: 0x%08lx\n" \
|
||||||
if (((i + 1) % 3) == 0)
|
"r12: 0x%08lx\t",
|
||||||
n += scnprintf(buf + n, len - n, "\n");
|
regs->r0, regs->r1, regs->r2,
|
||||||
|
regs->r3, regs->r4, regs->r5,
|
||||||
/* because pt_regs has regs reversed: r12..r0, r25..r13 */
|
regs->r6, regs->r7, regs->r8,
|
||||||
if (is_isa_arcv2() && start_num == 0)
|
regs->r9, regs->r10, regs->r11,
|
||||||
reg_rev++;
|
regs->r12);
|
||||||
else
|
|
||||||
reg_rev--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start_num != 0)
|
|
||||||
n += scnprintf(buf + n, len - n, "\n\n");
|
|
||||||
|
|
||||||
/* To continue printing callee regs on same line as scratch regs */
|
|
||||||
if (start_num == 0)
|
|
||||||
pr_info("%s", buf);
|
|
||||||
else
|
|
||||||
pr_cont("%s\n", buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_callee_regs(struct callee_regs *cregs)
|
static void print_regs_callee(struct callee_regs *regs)
|
||||||
{
|
{
|
||||||
print_reg_file(&(cregs->r13), 13);
|
pr_cont("r13: 0x%08lx\tr14: 0x%08lx\n" \
|
||||||
|
"r15: 0x%08lx\tr16: 0x%08lx\tr17: 0x%08lx\n" \
|
||||||
|
"r18: 0x%08lx\tr19: 0x%08lx\tr20: 0x%08lx\n" \
|
||||||
|
"r21: 0x%08lx\tr22: 0x%08lx\tr23: 0x%08lx\n" \
|
||||||
|
"r24: 0x%08lx\tr25: 0x%08lx\n",
|
||||||
|
regs->r13, regs->r14,
|
||||||
|
regs->r15, regs->r16, regs->r17,
|
||||||
|
regs->r18, regs->r19, regs->r20,
|
||||||
|
regs->r21, regs->r22, regs->r23,
|
||||||
|
regs->r24, regs->r25);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_task_path_n_nm(struct task_struct *tsk)
|
static void print_task_path_n_nm(struct task_struct *tsk)
|
||||||
|
@ -175,7 +168,7 @@ static void show_ecr_verbose(struct pt_regs *regs)
|
||||||
void show_regs(struct pt_regs *regs)
|
void show_regs(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
struct callee_regs *cregs;
|
struct callee_regs *cregs = (struct callee_regs *)tsk->thread.callee_reg;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* generic code calls us with preemption disabled, but some calls
|
* generic code calls us with preemption disabled, but some calls
|
||||||
|
@ -204,25 +197,15 @@ void show_regs(struct pt_regs *regs)
|
||||||
STS_BIT(regs, A2), STS_BIT(regs, A1),
|
STS_BIT(regs, A2), STS_BIT(regs, A1),
|
||||||
STS_BIT(regs, E2), STS_BIT(regs, E1));
|
STS_BIT(regs, E2), STS_BIT(regs, E1));
|
||||||
#else
|
#else
|
||||||
pr_cont(" [%2s%2s%2s%2s]",
|
pr_cont(" [%2s%2s%2s%2s] ",
|
||||||
STS_BIT(regs, IE),
|
STS_BIT(regs, IE),
|
||||||
(regs->status32 & STATUS_U_MASK) ? "U " : "K ",
|
(regs->status32 & STATUS_U_MASK) ? "U " : "K ",
|
||||||
STS_BIT(regs, DE), STS_BIT(regs, AE));
|
STS_BIT(regs, DE), STS_BIT(regs, AE));
|
||||||
#endif
|
#endif
|
||||||
pr_cont(" BTA: 0x%08lx\n SP: 0x%08lx FP: 0x%08lx BLK: %pS\n",
|
|
||||||
regs->bta, regs->sp, regs->fp, (void *)regs->blink);
|
|
||||||
pr_info("LPS: 0x%08lx\tLPE: 0x%08lx\tLPC: 0x%08lx\n",
|
|
||||||
regs->lp_start, regs->lp_end, regs->lp_count);
|
|
||||||
|
|
||||||
/* print regs->r0 thru regs->r12
|
print_regs_scratch(regs);
|
||||||
* Sequential printing was generating horrible code
|
|
||||||
*/
|
|
||||||
print_reg_file(&(regs->r0), 0);
|
|
||||||
|
|
||||||
/* If Callee regs were saved, display them too */
|
|
||||||
cregs = (struct callee_regs *)current->thread.callee_reg;
|
|
||||||
if (cregs)
|
if (cregs)
|
||||||
show_callee_regs(cregs);
|
print_regs_callee(cregs);
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ static unsigned long low_mem_sz;
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
static unsigned long min_high_pfn, max_high_pfn;
|
static unsigned long min_high_pfn, max_high_pfn;
|
||||||
static u64 high_mem_start;
|
static phys_addr_t high_mem_start;
|
||||||
static u64 high_mem_sz;
|
static phys_addr_t high_mem_sz;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DISCONTIGMEM
|
#ifdef CONFIG_DISCONTIGMEM
|
||||||
|
@ -69,6 +69,7 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
|
||||||
high_mem_sz = size;
|
high_mem_sz = size;
|
||||||
in_use = 1;
|
in_use = 1;
|
||||||
memblock_add_node(base, size, 1);
|
memblock_add_node(base, size, 1);
|
||||||
|
memblock_reserve(base, size);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +158,7 @@ void __init setup_arch_memory(void)
|
||||||
min_high_pfn = PFN_DOWN(high_mem_start);
|
min_high_pfn = PFN_DOWN(high_mem_start);
|
||||||
max_high_pfn = PFN_DOWN(high_mem_start + high_mem_sz);
|
max_high_pfn = PFN_DOWN(high_mem_start + high_mem_sz);
|
||||||
|
|
||||||
max_zone_pfn[ZONE_HIGHMEM] = max_high_pfn;
|
max_zone_pfn[ZONE_HIGHMEM] = min_low_pfn;
|
||||||
|
|
||||||
high_memory = (void *)(min_high_pfn << PAGE_SHIFT);
|
high_memory = (void *)(min_high_pfn << PAGE_SHIFT);
|
||||||
kmap_init();
|
kmap_init();
|
||||||
|
@ -166,6 +167,17 @@ void __init setup_arch_memory(void)
|
||||||
free_area_init(max_zone_pfn);
|
free_area_init(max_zone_pfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init highmem_init(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
unsigned long tmp;
|
||||||
|
|
||||||
|
memblock_free(high_mem_start, high_mem_sz);
|
||||||
|
for (tmp = min_high_pfn; tmp < max_high_pfn; tmp++)
|
||||||
|
free_highmem_page(pfn_to_page(tmp));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mem_init - initializes memory
|
* mem_init - initializes memory
|
||||||
*
|
*
|
||||||
|
@ -174,14 +186,7 @@ void __init setup_arch_memory(void)
|
||||||
*/
|
*/
|
||||||
void __init mem_init(void)
|
void __init mem_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_HIGHMEM
|
|
||||||
unsigned long tmp;
|
|
||||||
|
|
||||||
reset_all_zones_managed_pages();
|
|
||||||
for (tmp = min_high_pfn; tmp < max_high_pfn; tmp++)
|
|
||||||
free_highmem_page(pfn_to_page(tmp));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
memblock_free_all();
|
memblock_free_all();
|
||||||
|
highmem_init();
|
||||||
mem_init_print_info(NULL);
|
mem_init_print_info(NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)
|
#define CTOP_AUX_DPC (CTOP_AUX_BASE + 0x02C)
|
||||||
#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)
|
#define CTOP_AUX_LPC (CTOP_AUX_BASE + 0x030)
|
||||||
#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080)
|
#define CTOP_AUX_EFLAGS (CTOP_AUX_BASE + 0x080)
|
||||||
#define CTOP_AUX_IACK (CTOP_AUX_BASE + 0x088)
|
|
||||||
#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)
|
#define CTOP_AUX_GPA1 (CTOP_AUX_BASE + 0x08C)
|
||||||
#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
|
#define CTOP_AUX_UDMC (CTOP_AUX_BASE + 0x300)
|
||||||
|
|
||||||
|
|
|
@ -217,7 +217,7 @@ rng: rng@33000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
qspi: spi@27200 {
|
qspi: spi@27200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi";
|
compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x027200 0x184>,
|
reg = <0x027200 0x184>,
|
||||||
<0x027000 0x124>,
|
<0x027000 0x124>,
|
||||||
<0x11c408 0x004>,
|
<0x11c408 0x004>,
|
||||||
|
|
|
@ -284,7 +284,7 @@ nand: nand@26000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
qspi: spi@27200 {
|
qspi: spi@27200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi";
|
compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x027200 0x184>,
|
reg = <0x027200 0x184>,
|
||||||
<0x027000 0x124>,
|
<0x027000 0x124>,
|
||||||
<0x11c408 0x004>,
|
<0x11c408 0x004>,
|
||||||
|
|
|
@ -488,7 +488,7 @@ nand: nand@18028000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
spi@18029200 {
|
spi@18029200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-nsp-qspi";
|
compatible = "brcm,spi-nsp-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x18029200 0x184>,
|
reg = <0x18029200 0x184>,
|
||||||
<0x18029000 0x124>,
|
<0x18029000 0x124>,
|
||||||
<0x1811b408 0x004>,
|
<0x1811b408 0x004>,
|
||||||
|
|
|
@ -13,7 +13,7 @@ / {
|
||||||
|
|
||||||
backlight: backlight-lvds {
|
backlight: backlight-lvds {
|
||||||
compatible = "pwm-backlight";
|
compatible = "pwm-backlight";
|
||||||
pwms = <&pwm3 0 20000>;
|
pwms = <&pwm3 0 20000 0>;
|
||||||
brightness-levels = <0 4 8 16 32 64 128 255>;
|
brightness-levels = <0 4 8 16 32 64 128 255>;
|
||||||
default-brightness-level = <6>;
|
default-brightness-level = <6>;
|
||||||
power-supply = <®_lcd>;
|
power-supply = <®_lcd>;
|
||||||
|
|
|
@ -30,7 +30,7 @@ usdhc2_wifi_pwrseq: usdhc2_wifi_pwrseq {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* PRTWD2 rev 1 bitbang I2C for Ethernet Switch */
|
/* PRTWD2 rev 1 bitbang I2C for Ethernet Switch */
|
||||||
i2c@4 {
|
i2c {
|
||||||
compatible = "i2c-gpio";
|
compatible = "i2c-gpio";
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_i2c4>;
|
pinctrl-0 = <&pinctrl_i2c4>;
|
||||||
|
|
|
@ -22,8 +22,6 @@ chosen {
|
||||||
|
|
||||||
gpio-keys {
|
gpio-keys {
|
||||||
compatible = "gpio-keys";
|
compatible = "gpio-keys";
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
user-pb {
|
user-pb {
|
||||||
label = "user_pb";
|
label = "user_pb";
|
||||||
|
|
|
@ -1026,7 +1026,7 @@
|
||||||
#define MX6SX_PAD_QSPI1B_DQS__SIM_M_HADDR_15 0x01B0 0x04F8 0x0000 0x7 0x0
|
#define MX6SX_PAD_QSPI1B_DQS__SIM_M_HADDR_15 0x01B0 0x04F8 0x0000 0x7 0x0
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__QSPI1_B_SCLK 0x01B4 0x04FC 0x0000 0x0 0x0
|
#define MX6SX_PAD_QSPI1B_SCLK__QSPI1_B_SCLK 0x01B4 0x04FC 0x0000 0x0 0x0
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__UART3_DCE_RX 0x01B4 0x04FC 0x0840 0x1 0x4
|
#define MX6SX_PAD_QSPI1B_SCLK__UART3_DCE_RX 0x01B4 0x04FC 0x0840 0x1 0x4
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__UART3_DTE_TX 0x01B4 0x04FC 0x0000 0x0 0x0
|
#define MX6SX_PAD_QSPI1B_SCLK__UART3_DTE_TX 0x01B4 0x04FC 0x0000 0x1 0x0
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__ECSPI3_SCLK 0x01B4 0x04FC 0x0730 0x2 0x1
|
#define MX6SX_PAD_QSPI1B_SCLK__ECSPI3_SCLK 0x01B4 0x04FC 0x0730 0x2 0x1
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__ESAI_RX_HF_CLK 0x01B4 0x04FC 0x0780 0x3 0x2
|
#define MX6SX_PAD_QSPI1B_SCLK__ESAI_RX_HF_CLK 0x01B4 0x04FC 0x0780 0x3 0x2
|
||||||
#define MX6SX_PAD_QSPI1B_SCLK__CSI1_DATA_16 0x01B4 0x04FC 0x06DC 0x4 0x1
|
#define MX6SX_PAD_QSPI1B_SCLK__CSI1_DATA_16 0x01B4 0x04FC 0x06DC 0x4 0x1
|
||||||
|
|
|
@ -58,7 +58,7 @@ &fec1 {
|
||||||
<&clks IMX7D_ENET1_TIME_ROOT_CLK>;
|
<&clks IMX7D_ENET1_TIME_ROOT_CLK>;
|
||||||
assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>;
|
assigned-clock-parents = <&clks IMX7D_PLL_ENET_MAIN_100M_CLK>;
|
||||||
assigned-clock-rates = <0>, <100000000>;
|
assigned-clock-rates = <0>, <100000000>;
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii-id";
|
||||||
phy-handle = <&fec1_phy>;
|
phy-handle = <&fec1_phy>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
|
|
@ -394,7 +394,7 @@ gpio_ptc: gpio@40ae0000 {
|
||||||
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
||||||
<&pcc3 IMX7ULP_CLK_PCTLC>;
|
<&pcc3 IMX7ULP_CLK_PCTLC>;
|
||||||
clock-names = "gpio", "port";
|
clock-names = "gpio", "port";
|
||||||
gpio-ranges = <&iomuxc1 0 0 32>;
|
gpio-ranges = <&iomuxc1 0 0 20>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio_ptd: gpio@40af0000 {
|
gpio_ptd: gpio@40af0000 {
|
||||||
|
@ -408,7 +408,7 @@ gpio_ptd: gpio@40af0000 {
|
||||||
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
||||||
<&pcc3 IMX7ULP_CLK_PCTLD>;
|
<&pcc3 IMX7ULP_CLK_PCTLD>;
|
||||||
clock-names = "gpio", "port";
|
clock-names = "gpio", "port";
|
||||||
gpio-ranges = <&iomuxc1 0 32 32>;
|
gpio-ranges = <&iomuxc1 0 32 12>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio_pte: gpio@40b00000 {
|
gpio_pte: gpio@40b00000 {
|
||||||
|
@ -422,7 +422,7 @@ gpio_pte: gpio@40b00000 {
|
||||||
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
||||||
<&pcc3 IMX7ULP_CLK_PCTLE>;
|
<&pcc3 IMX7ULP_CLK_PCTLE>;
|
||||||
clock-names = "gpio", "port";
|
clock-names = "gpio", "port";
|
||||||
gpio-ranges = <&iomuxc1 0 64 32>;
|
gpio-ranges = <&iomuxc1 0 64 16>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio_ptf: gpio@40b10000 {
|
gpio_ptf: gpio@40b10000 {
|
||||||
|
@ -436,7 +436,7 @@ gpio_ptf: gpio@40b10000 {
|
||||||
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
clocks = <&pcc2 IMX7ULP_CLK_RGPIO2P1>,
|
||||||
<&pcc3 IMX7ULP_CLK_PCTLF>;
|
<&pcc3 IMX7ULP_CLK_PCTLF>;
|
||||||
clock-names = "gpio", "port";
|
clock-names = "gpio", "port";
|
||||||
gpio-ranges = <&iomuxc1 0 96 32>;
|
gpio-ranges = <&iomuxc1 0 96 20>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,8 @@ &vaux4 {
|
||||||
|
|
||||||
&mcbsp2 {
|
&mcbsp2 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mcbsp2_pins>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&charger {
|
&charger {
|
||||||
|
@ -102,35 +104,18 @@ video_reg: video_reg {
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
lcd0: display@0 {
|
lcd0: display {
|
||||||
compatible = "panel-dpi";
|
/* This isn't the exact LCD, but the timings meet spec */
|
||||||
label = "28";
|
compatible = "logicpd,type28";
|
||||||
status = "okay";
|
|
||||||
/* default-on; */
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&lcd_enable_pin>;
|
pinctrl-0 = <&lcd_enable_pin>;
|
||||||
enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd INI */
|
backlight = <&bl>;
|
||||||
|
enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>;
|
||||||
port {
|
port {
|
||||||
lcd_in: endpoint {
|
lcd_in: endpoint {
|
||||||
remote-endpoint = <&dpi_out>;
|
remote-endpoint = <&dpi_out>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
panel-timing {
|
|
||||||
clock-frequency = <9000000>;
|
|
||||||
hactive = <480>;
|
|
||||||
vactive = <272>;
|
|
||||||
hfront-porch = <3>;
|
|
||||||
hback-porch = <2>;
|
|
||||||
hsync-len = <42>;
|
|
||||||
vback-porch = <3>;
|
|
||||||
vfront-porch = <2>;
|
|
||||||
vsync-len = <11>;
|
|
||||||
hsync-active = <1>;
|
|
||||||
vsync-active = <1>;
|
|
||||||
de-active = <1>;
|
|
||||||
pixelclk-active = <0>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bl: backlight {
|
bl: backlight {
|
||||||
|
|
|
@ -81,6 +81,8 @@ &vaux4 {
|
||||||
};
|
};
|
||||||
|
|
||||||
&mcbsp2 {
|
&mcbsp2 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mcbsp2_pins>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ qspi: spi@1550000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <0x0 0x1550000 0x0 0x10000>,
|
reg = <0x0 0x1550000 0x0 0x10000>,
|
||||||
<0x0 0x40000000 0x0 0x40000000>;
|
<0x0 0x40000000 0x0 0x20000000>;
|
||||||
reg-names = "QuadSPI", "QuadSPI-memory";
|
reg-names = "QuadSPI", "QuadSPI-memory";
|
||||||
interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clock-names = "qspi_en", "qspi";
|
clock-names = "qspi_en", "qspi";
|
||||||
|
|
|
@ -488,11 +488,11 @@ rfbi: encoder@0 {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
target-module@5000 {
|
target-module@4000 {
|
||||||
compatible = "ti,sysc-omap2", "ti,sysc";
|
compatible = "ti,sysc-omap2", "ti,sysc";
|
||||||
reg = <0x5000 0x4>,
|
reg = <0x4000 0x4>,
|
||||||
<0x5010 0x4>,
|
<0x4010 0x4>,
|
||||||
<0x5014 0x4>;
|
<0x4014 0x4>;
|
||||||
reg-names = "rev", "sysc", "syss";
|
reg-names = "rev", "sysc", "syss";
|
||||||
ti,sysc-sidle = <SYSC_IDLE_FORCE>,
|
ti,sysc-sidle = <SYSC_IDLE_FORCE>,
|
||||||
<SYSC_IDLE_NO>,
|
<SYSC_IDLE_NO>,
|
||||||
|
@ -504,7 +504,7 @@ SYSC_OMAP2_SOFTRESET |
|
||||||
ti,syss-mask = <1>;
|
ti,syss-mask = <1>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0 0x5000 0x1000>;
|
ranges = <0 0x4000 0x1000>;
|
||||||
|
|
||||||
dsi1: encoder@0 {
|
dsi1: encoder@0 {
|
||||||
compatible = "ti,omap5-dsi";
|
compatible = "ti,omap5-dsi";
|
||||||
|
@ -514,8 +514,9 @@ dsi1: encoder@0 {
|
||||||
reg-names = "proto", "phy", "pll";
|
reg-names = "proto", "phy", "pll";
|
||||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>;
|
clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>,
|
||||||
clock-names = "fck";
|
<&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 10>;
|
||||||
|
clock-names = "fck", "sys_clk";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -545,8 +546,9 @@ dsi2: encoder@0 {
|
||||||
reg-names = "proto", "phy", "pll";
|
reg-names = "proto", "phy", "pll";
|
||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>;
|
clocks = <&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 8>,
|
||||||
clock-names = "fck";
|
<&dss_clkctrl OMAP5_DSS_CORE_CLKCTRL 10>;
|
||||||
|
clock-names = "fck", "sys_clk";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -821,7 +821,7 @@ timer2: timer2@ffd00000 {
|
||||||
timer3: timer3@ffd00100 {
|
timer3: timer3@ffd00100 {
|
||||||
compatible = "snps,dw-apb-timer";
|
compatible = "snps,dw-apb-timer";
|
||||||
interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 118 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
reg = <0xffd01000 0x100>;
|
reg = <0xffd00100 0x100>;
|
||||||
clocks = <&l4_sys_free_clk>;
|
clocks = <&l4_sys_free_clk>;
|
||||||
clock-names = "timer";
|
clock-names = "timer";
|
||||||
resets = <&rst L4SYSTIMER1_RESET>;
|
resets = <&rst L4SYSTIMER1_RESET>;
|
||||||
|
|
|
@ -495,7 +495,7 @@ edma1: dma-controller@40098000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
ocotp: ocotp@400a5000 {
|
ocotp: ocotp@400a5000 {
|
||||||
compatible = "fsl,vf610-ocotp";
|
compatible = "fsl,vf610-ocotp", "syscon";
|
||||||
reg = <0x400a5000 0x1000>;
|
reg = <0x400a5000 0x1000>;
|
||||||
clocks = <&clks VF610_CLK_OCOTP>;
|
clocks = <&clks VF610_CLK_OCOTP>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_ARCH_MULTI_V4T=y
|
CONFIG_ARCH_MULTI_V4T=y
|
||||||
CONFIG_ARCH_MULTI_V5=y
|
CONFIG_ARCH_MULTI_V5=y
|
||||||
# CONFIG_ARCH_MULTI_V7 is not set
|
# CONFIG_ARCH_MULTI_V7 is not set
|
||||||
|
@ -15,19 +13,17 @@ CONFIG_ARCH_INTEGRATOR=y
|
||||||
CONFIG_ARCH_INTEGRATOR_AP=y
|
CONFIG_ARCH_INTEGRATOR_AP=y
|
||||||
CONFIG_INTEGRATOR_IMPD1=y
|
CONFIG_INTEGRATOR_IMPD1=y
|
||||||
CONFIG_ARCH_INTEGRATOR_CP=y
|
CONFIG_ARCH_INTEGRATOR_CP=y
|
||||||
CONFIG_PCI=y
|
|
||||||
CONFIG_PREEMPT=y
|
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
# CONFIG_ATAGS is not set
|
# CONFIG_ATAGS is not set
|
||||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
|
||||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
|
||||||
CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp"
|
CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp"
|
||||||
CONFIG_CPU_FREQ=y
|
CONFIG_CPU_FREQ=y
|
||||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||||
CONFIG_CPUFREQ_DT=y
|
CONFIG_CPUFREQ_DT=y
|
||||||
CONFIG_CMA=y
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -37,6 +33,7 @@ CONFIG_IP_PNP=y
|
||||||
CONFIG_IP_PNP_DHCP=y
|
CONFIG_IP_PNP_DHCP=y
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
CONFIG_IP_PNP_BOOTP=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
|
CONFIG_PCI=y
|
||||||
CONFIG_MTD=y
|
CONFIG_MTD=y
|
||||||
CONFIG_MTD_CMDLINE_PARTS=y
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
CONFIG_MTD_AFS_PARTS=y
|
CONFIG_MTD_AFS_PARTS=y
|
||||||
|
@ -52,9 +49,12 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_E100=y
|
CONFIG_E100=y
|
||||||
CONFIG_SMC91X=y
|
CONFIG_SMC91X=y
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_KEYBOARD_ATKBD is not set
|
# CONFIG_KEYBOARD_ATKBD is not set
|
||||||
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_SERIO_SERPORT is not set
|
# CONFIG_SERIO_SERPORT is not set
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
|
CONFIG_DRM_DISPLAY_CONNECTOR=y
|
||||||
CONFIG_DRM_SIMPLE_BRIDGE=y
|
CONFIG_DRM_SIMPLE_BRIDGE=y
|
||||||
CONFIG_DRM_PL111=y
|
CONFIG_DRM_PL111=y
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
|
|
@ -74,7 +74,7 @@ static struct powerdomain *_get_pwrdm(struct device *dev)
|
||||||
return pwrdm;
|
return pwrdm;
|
||||||
|
|
||||||
clk = of_clk_get(dev->of_node->parent, 0);
|
clk = of_clk_get(dev->of_node->parent, 0);
|
||||||
if (!clk) {
|
if (IS_ERR(clk)) {
|
||||||
dev_err(dev, "no fck found\n");
|
dev_err(dev, "no fck found\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -745,7 +745,7 @@ nand: nand@66460000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
qspi: spi@66470200 {
|
qspi: spi@66470200 {
|
||||||
compatible = "brcm,spi-bcm-qspi", "brcm,spi-ns2-qspi";
|
compatible = "brcm,spi-ns2-qspi", "brcm,spi-bcm-qspi";
|
||||||
reg = <0x66470200 0x184>,
|
reg = <0x66470200 0x184>,
|
||||||
<0x66470000 0x124>,
|
<0x66470000 0x124>,
|
||||||
<0x67017408 0x004>,
|
<0x67017408 0x004>,
|
||||||
|
|
|
@ -28,6 +28,7 @@ dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-honeycomb.dtb
|
||||||
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-qds.dtb
|
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-qds.dtb
|
||||||
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-rdb.dtb
|
dtb-$(CONFIG_ARCH_LAYERSCAPE) += fsl-lx2160a-rdb.dtb
|
||||||
|
|
||||||
|
dtb-$(CONFIG_ARCH_MXC) += imx8mm-beacon-kit.dtb
|
||||||
dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk.dtb
|
dtb-$(CONFIG_ARCH_MXC) += imx8mm-evk.dtb
|
||||||
dtb-$(CONFIG_ARCH_MXC) += imx8mn-evk.dtb
|
dtb-$(CONFIG_ARCH_MXC) += imx8mn-evk.dtb
|
||||||
dtb-$(CONFIG_ARCH_MXC) += imx8mn-ddr4-evk.dtb
|
dtb-$(CONFIG_ARCH_MXC) += imx8mn-ddr4-evk.dtb
|
||||||
|
|
|
@ -702,7 +702,7 @@ sdma1: dma-controller@30bd0000 {
|
||||||
reg = <0x30bd0000 0x10000>;
|
reg = <0x30bd0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MP_CLK_SDMA1_ROOT>,
|
clocks = <&clk IMX8MP_CLK_SDMA1_ROOT>,
|
||||||
<&clk IMX8MP_CLK_SDMA1_ROOT>;
|
<&clk IMX8MP_CLK_AHB>;
|
||||||
clock-names = "ipg", "ahb";
|
clock-names = "ipg", "ahb";
|
||||||
#dma-cells = <3>;
|
#dma-cells = <3>;
|
||||||
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
|
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
|
||||||
|
|
|
@ -423,7 +423,7 @@ gpio5: gpio@30240000 {
|
||||||
tmu: tmu@30260000 {
|
tmu: tmu@30260000 {
|
||||||
compatible = "fsl,imx8mq-tmu";
|
compatible = "fsl,imx8mq-tmu";
|
||||||
reg = <0x30260000 0x10000>;
|
reg = <0x30260000 0x10000>;
|
||||||
interrupt = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MQ_CLK_TMU_ROOT>;
|
clocks = <&clk IMX8MQ_CLK_TMU_ROOT>;
|
||||||
little-endian;
|
little-endian;
|
||||||
fsl,tmu-range = <0xb0000 0xa0026 0x80048 0x70061>;
|
fsl,tmu-range = <0xb0000 0xa0026 0x80048 0x70061>;
|
||||||
|
|
|
@ -686,6 +686,8 @@ mmc0: mmc@11230000 {
|
||||||
clocks = <&pericfg CLK_PERI_MSDC30_0_PD>,
|
clocks = <&pericfg CLK_PERI_MSDC30_0_PD>,
|
||||||
<&topckgen CLK_TOP_MSDC50_0_SEL>;
|
<&topckgen CLK_TOP_MSDC50_0_SEL>;
|
||||||
clock-names = "source", "hclk";
|
clock-names = "source", "hclk";
|
||||||
|
resets = <&pericfg MT7622_PERI_MSDC0_SW_RST>;
|
||||||
|
reset-names = "hrst";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -337,8 +337,9 @@ sdmmc1: mmc@3400000 {
|
||||||
compatible = "nvidia,tegra186-sdhci";
|
compatible = "nvidia,tegra186-sdhci";
|
||||||
reg = <0x0 0x03400000 0x0 0x10000>;
|
reg = <0x0 0x03400000 0x0 0x10000>;
|
||||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA186_CLK_SDMMC1>;
|
clocks = <&bpmp TEGRA186_CLK_SDMMC1>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&bpmp TEGRA186_RESET_SDMMC1>;
|
resets = <&bpmp TEGRA186_RESET_SDMMC1>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRA &emc>,
|
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRA &emc>,
|
||||||
|
@ -366,8 +367,9 @@ sdmmc2: mmc@3420000 {
|
||||||
compatible = "nvidia,tegra186-sdhci";
|
compatible = "nvidia,tegra186-sdhci";
|
||||||
reg = <0x0 0x03420000 0x0 0x10000>;
|
reg = <0x0 0x03420000 0x0 0x10000>;
|
||||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA186_CLK_SDMMC2>;
|
clocks = <&bpmp TEGRA186_CLK_SDMMC2>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&bpmp TEGRA186_RESET_SDMMC2>;
|
resets = <&bpmp TEGRA186_RESET_SDMMC2>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRAA &emc>,
|
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCRAA &emc>,
|
||||||
|
@ -390,8 +392,9 @@ sdmmc3: mmc@3440000 {
|
||||||
compatible = "nvidia,tegra186-sdhci";
|
compatible = "nvidia,tegra186-sdhci";
|
||||||
reg = <0x0 0x03440000 0x0 0x10000>;
|
reg = <0x0 0x03440000 0x0 0x10000>;
|
||||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA186_CLK_SDMMC3>;
|
clocks = <&bpmp TEGRA186_CLK_SDMMC3>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&bpmp TEGRA186_RESET_SDMMC3>;
|
resets = <&bpmp TEGRA186_RESET_SDMMC3>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCR &emc>,
|
interconnects = <&mc TEGRA186_MEMORY_CLIENT_SDMMCR &emc>,
|
||||||
|
@ -416,8 +419,9 @@ sdmmc4: mmc@3460000 {
|
||||||
compatible = "nvidia,tegra186-sdhci";
|
compatible = "nvidia,tegra186-sdhci";
|
||||||
reg = <0x0 0x03460000 0x0 0x10000>;
|
reg = <0x0 0x03460000 0x0 0x10000>;
|
||||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA186_CLK_SDMMC4>;
|
clocks = <&bpmp TEGRA186_CLK_SDMMC4>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA186_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
assigned-clocks = <&bpmp TEGRA186_CLK_SDMMC4>,
|
assigned-clocks = <&bpmp TEGRA186_CLK_SDMMC4>,
|
||||||
<&bpmp TEGRA186_CLK_PLLC4_VCO>;
|
<&bpmp TEGRA186_CLK_PLLC4_VCO>;
|
||||||
assigned-clock-parents = <&bpmp TEGRA186_CLK_PLLC4_VCO>;
|
assigned-clock-parents = <&bpmp TEGRA186_CLK_PLLC4_VCO>;
|
||||||
|
|
|
@ -460,8 +460,9 @@ sdmmc1: mmc@3400000 {
|
||||||
compatible = "nvidia,tegra194-sdhci";
|
compatible = "nvidia,tegra194-sdhci";
|
||||||
reg = <0x03400000 0x10000>;
|
reg = <0x03400000 0x10000>;
|
||||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA194_CLK_SDMMC1>;
|
clocks = <&bpmp TEGRA194_CLK_SDMMC1>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&bpmp TEGRA194_RESET_SDMMC1>;
|
resets = <&bpmp TEGRA194_RESET_SDMMC1>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCRA &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCRA &emc>,
|
||||||
|
@ -485,8 +486,9 @@ sdmmc3: mmc@3440000 {
|
||||||
compatible = "nvidia,tegra194-sdhci";
|
compatible = "nvidia,tegra194-sdhci";
|
||||||
reg = <0x03440000 0x10000>;
|
reg = <0x03440000 0x10000>;
|
||||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA194_CLK_SDMMC3>;
|
clocks = <&bpmp TEGRA194_CLK_SDMMC3>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&bpmp TEGRA194_RESET_SDMMC3>;
|
resets = <&bpmp TEGRA194_RESET_SDMMC3>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCR &emc>,
|
interconnects = <&mc TEGRA194_MEMORY_CLIENT_SDMMCR &emc>,
|
||||||
|
@ -511,8 +513,9 @@ sdmmc4: mmc@3460000 {
|
||||||
compatible = "nvidia,tegra194-sdhci";
|
compatible = "nvidia,tegra194-sdhci";
|
||||||
reg = <0x03460000 0x10000>;
|
reg = <0x03460000 0x10000>;
|
||||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&bpmp TEGRA194_CLK_SDMMC4>;
|
clocks = <&bpmp TEGRA194_CLK_SDMMC4>,
|
||||||
clock-names = "sdhci";
|
<&bpmp TEGRA194_CLK_SDMMC_LEGACY_TM>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
assigned-clocks = <&bpmp TEGRA194_CLK_SDMMC4>,
|
assigned-clocks = <&bpmp TEGRA194_CLK_SDMMC4>,
|
||||||
<&bpmp TEGRA194_CLK_PLLC4>;
|
<&bpmp TEGRA194_CLK_PLLC4>;
|
||||||
assigned-clock-parents =
|
assigned-clock-parents =
|
||||||
|
|
|
@ -1194,8 +1194,9 @@ mmc@700b0000 {
|
||||||
compatible = "nvidia,tegra210-sdhci";
|
compatible = "nvidia,tegra210-sdhci";
|
||||||
reg = <0x0 0x700b0000 0x0 0x200>;
|
reg = <0x0 0x700b0000 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>;
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC1>,
|
||||||
clock-names = "sdhci";
|
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&tegra_car 14>;
|
resets = <&tegra_car 14>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
|
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
|
||||||
|
@ -1222,8 +1223,9 @@ mmc@700b0200 {
|
||||||
compatible = "nvidia,tegra210-sdhci";
|
compatible = "nvidia,tegra210-sdhci";
|
||||||
reg = <0x0 0x700b0200 0x0 0x200>;
|
reg = <0x0 0x700b0200 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC2>;
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC2>,
|
||||||
clock-names = "sdhci";
|
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&tegra_car 9>;
|
resets = <&tegra_car 9>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
pinctrl-names = "sdmmc-1v8-drv";
|
pinctrl-names = "sdmmc-1v8-drv";
|
||||||
|
@ -1239,8 +1241,9 @@ mmc@700b0400 {
|
||||||
compatible = "nvidia,tegra210-sdhci";
|
compatible = "nvidia,tegra210-sdhci";
|
||||||
reg = <0x0 0x700b0400 0x0 0x200>;
|
reg = <0x0 0x700b0400 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC3>;
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC3>,
|
||||||
clock-names = "sdhci";
|
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&tegra_car 69>;
|
resets = <&tegra_car 69>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
|
pinctrl-names = "sdmmc-3v3", "sdmmc-1v8",
|
||||||
|
@ -1262,8 +1265,9 @@ mmc@700b0600 {
|
||||||
compatible = "nvidia,tegra210-sdhci";
|
compatible = "nvidia,tegra210-sdhci";
|
||||||
reg = <0x0 0x700b0600 0x0 0x200>;
|
reg = <0x0 0x700b0600 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&tegra_car TEGRA210_CLK_SDMMC4>;
|
clocks = <&tegra_car TEGRA210_CLK_SDMMC4>,
|
||||||
clock-names = "sdhci";
|
<&tegra_car TEGRA210_CLK_SDMMC_LEGACY>;
|
||||||
|
clock-names = "sdhci", "tmclk";
|
||||||
resets = <&tegra_car 15>;
|
resets = <&tegra_car 15>;
|
||||||
reset-names = "sdhci";
|
reset-names = "sdhci";
|
||||||
pinctrl-names = "sdmmc-3v3-drv", "sdmmc-1v8-drv";
|
pinctrl-names = "sdmmc-3v3-drv", "sdmmc-1v8-drv";
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dt-bindings/power/xlnx-zynqmp-power.h>
|
#include <dt-bindings/power/xlnx-zynqmp-power.h>
|
||||||
|
#include <dt-bindings/reset/xlnx-zynqmp-resets.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "xlnx,zynqmp";
|
compatible = "xlnx,zynqmp";
|
||||||
|
@ -558,6 +559,15 @@ pcie_intc: legacy-interrupt-controller {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
psgtr: phy@fd400000 {
|
||||||
|
compatible = "xlnx,zynqmp-psgtr-v1.1";
|
||||||
|
status = "disabled";
|
||||||
|
reg = <0x0 0xfd400000 0x0 0x40000>,
|
||||||
|
<0x0 0xfd3d0000 0x0 0x1000>;
|
||||||
|
reg-names = "serdes", "siou";
|
||||||
|
#phy-cells = <4>;
|
||||||
|
};
|
||||||
|
|
||||||
rtc: rtc@ffa60000 {
|
rtc: rtc@ffa60000 {
|
||||||
compatible = "xlnx,zynqmp-rtc";
|
compatible = "xlnx,zynqmp-rtc";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -601,7 +611,7 @@ sdhci1: mmc@ff170000 {
|
||||||
power-domains = <&zynqmp_firmware PD_SD_1>;
|
power-domains = <&zynqmp_firmware PD_SD_1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
smmu: smmu@fd800000 {
|
smmu: iommu@fd800000 {
|
||||||
compatible = "arm,mmu-500";
|
compatible = "arm,mmu-500";
|
||||||
reg = <0x0 0xfd800000 0x0 0x20000>;
|
reg = <0x0 0xfd800000 0x0 0x20000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -724,6 +724,17 @@ CONFIG_USB_GADGET=y
|
||||||
CONFIG_USB_RENESAS_USBHS_UDC=m
|
CONFIG_USB_RENESAS_USBHS_UDC=m
|
||||||
CONFIG_USB_RENESAS_USB3=m
|
CONFIG_USB_RENESAS_USB3=m
|
||||||
CONFIG_USB_TEGRA_XUDC=m
|
CONFIG_USB_TEGRA_XUDC=m
|
||||||
|
CONFIG_USB_CONFIGFS=m
|
||||||
|
CONFIG_USB_CONFIGFS_SERIAL=y
|
||||||
|
CONFIG_USB_CONFIGFS_ACM=y
|
||||||
|
CONFIG_USB_CONFIGFS_OBEX=y
|
||||||
|
CONFIG_USB_CONFIGFS_NCM=y
|
||||||
|
CONFIG_USB_CONFIGFS_ECM=y
|
||||||
|
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
|
||||||
|
CONFIG_USB_CONFIGFS_RNDIS=y
|
||||||
|
CONFIG_USB_CONFIGFS_EEM=y
|
||||||
|
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
|
||||||
|
CONFIG_USB_CONFIGFS_F_FS=y
|
||||||
CONFIG_TYPEC=m
|
CONFIG_TYPEC=m
|
||||||
CONFIG_TYPEC_TCPM=m
|
CONFIG_TYPEC_TCPM=m
|
||||||
CONFIG_TYPEC_FUSB302=m
|
CONFIG_TYPEC_FUSB302=m
|
||||||
|
@ -914,6 +925,7 @@ CONFIG_ARCH_TEGRA_194_SOC=y
|
||||||
CONFIG_ARCH_K3_AM6_SOC=y
|
CONFIG_ARCH_K3_AM6_SOC=y
|
||||||
CONFIG_ARCH_K3_J721E_SOC=y
|
CONFIG_ARCH_K3_J721E_SOC=y
|
||||||
CONFIG_TI_SCI_PM_DOMAINS=y
|
CONFIG_TI_SCI_PM_DOMAINS=y
|
||||||
|
CONFIG_EXTCON_PTN5150=m
|
||||||
CONFIG_EXTCON_USB_GPIO=y
|
CONFIG_EXTCON_USB_GPIO=y
|
||||||
CONFIG_EXTCON_USBC_CROS_EC=y
|
CONFIG_EXTCON_USBC_CROS_EC=y
|
||||||
CONFIG_IIO=y
|
CONFIG_IIO=y
|
||||||
|
|
|
@ -368,7 +368,6 @@ struct kvm_vcpu_arch {
|
||||||
|
|
||||||
/* Guest PV state */
|
/* Guest PV state */
|
||||||
struct {
|
struct {
|
||||||
u64 steal;
|
|
||||||
u64 last_steal;
|
u64 last_steal;
|
||||||
gpa_t base;
|
gpa_t base;
|
||||||
} steal;
|
} steal;
|
||||||
|
@ -544,6 +543,7 @@ long kvm_hypercall_pv_features(struct kvm_vcpu *vcpu);
|
||||||
gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu);
|
gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu);
|
||||||
void kvm_update_stolen_time(struct kvm_vcpu *vcpu);
|
void kvm_update_stolen_time(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
|
bool kvm_arm_pvtime_supported(void);
|
||||||
int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
|
int kvm_arm_pvtime_set_attr(struct kvm_vcpu *vcpu,
|
||||||
struct kvm_device_attr *attr);
|
struct kvm_device_attr *attr);
|
||||||
int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
|
int kvm_arm_pvtime_get_attr(struct kvm_vcpu *vcpu,
|
||||||
|
|
|
@ -305,8 +305,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
|
||||||
mod->arch.core.plt_shndx = i;
|
mod->arch.core.plt_shndx = i;
|
||||||
else if (!strcmp(secstrings + sechdrs[i].sh_name, ".init.plt"))
|
else if (!strcmp(secstrings + sechdrs[i].sh_name, ".init.plt"))
|
||||||
mod->arch.init.plt_shndx = i;
|
mod->arch.init.plt_shndx = i;
|
||||||
else if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE) &&
|
else if (!strcmp(secstrings + sechdrs[i].sh_name,
|
||||||
!strcmp(secstrings + sechdrs[i].sh_name,
|
|
||||||
".text.ftrace_trampoline"))
|
".text.ftrace_trampoline"))
|
||||||
tramp = sechdrs + i;
|
tramp = sechdrs + i;
|
||||||
else if (sechdrs[i].sh_type == SHT_SYMTAB)
|
else if (sechdrs[i].sh_type == SHT_SYMTAB)
|
||||||
|
|
|
@ -280,7 +280,6 @@ u64 cpu_logical_map(int cpu)
|
||||||
{
|
{
|
||||||
return __cpu_logical_map[cpu];
|
return __cpu_logical_map[cpu];
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(cpu_logical_map);
|
|
||||||
|
|
||||||
void __init __no_sanitize_address setup_arch(char **cmdline_p)
|
void __init __no_sanitize_address setup_arch(char **cmdline_p)
|
||||||
{
|
{
|
||||||
|
|
|
@ -206,6 +206,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
||||||
*/
|
*/
|
||||||
r = 1;
|
r = 1;
|
||||||
break;
|
break;
|
||||||
|
case KVM_CAP_STEAL_TIME:
|
||||||
|
r = kvm_arm_pvtime_supported();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
r = kvm_arch_vm_ioctl_check_extension(kvm, ext);
|
r = kvm_arch_vm_ioctl_check_extension(kvm, ext);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1877,6 +1877,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
||||||
!fault_supports_stage2_huge_mapping(memslot, hva, vma_pagesize)) {
|
!fault_supports_stage2_huge_mapping(memslot, hva, vma_pagesize)) {
|
||||||
force_pte = true;
|
force_pte = true;
|
||||||
vma_pagesize = PAGE_SIZE;
|
vma_pagesize = PAGE_SIZE;
|
||||||
|
vma_shift = PAGE_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1970,7 +1971,12 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
||||||
(fault_status == FSC_PERM &&
|
(fault_status == FSC_PERM &&
|
||||||
stage2_is_exec(mmu, fault_ipa, vma_pagesize));
|
stage2_is_exec(mmu, fault_ipa, vma_pagesize));
|
||||||
|
|
||||||
if (vma_pagesize == PUD_SIZE) {
|
/*
|
||||||
|
* If PUD_SIZE == PMD_SIZE, there is no real PUD level, and
|
||||||
|
* all we have is a 2-level page table. Trying to map a PUD in
|
||||||
|
* this case would be fatally wrong.
|
||||||
|
*/
|
||||||
|
if (PUD_SIZE != PMD_SIZE && vma_pagesize == PUD_SIZE) {
|
||||||
pud_t new_pud = kvm_pfn_pud(pfn, mem_type);
|
pud_t new_pud = kvm_pfn_pud(pfn, mem_type);
|
||||||
|
|
||||||
new_pud = kvm_pud_mkhuge(new_pud);
|
new_pud = kvm_pud_mkhuge(new_pud);
|
||||||
|
|
|
@ -13,25 +13,22 @@
|
||||||
void kvm_update_stolen_time(struct kvm_vcpu *vcpu)
|
void kvm_update_stolen_time(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm *kvm = vcpu->kvm;
|
struct kvm *kvm = vcpu->kvm;
|
||||||
u64 steal;
|
|
||||||
__le64 steal_le;
|
|
||||||
u64 offset;
|
|
||||||
int idx;
|
|
||||||
u64 base = vcpu->arch.steal.base;
|
u64 base = vcpu->arch.steal.base;
|
||||||
|
u64 last_steal = vcpu->arch.steal.last_steal;
|
||||||
|
u64 offset = offsetof(struct pvclock_vcpu_stolen_time, stolen_time);
|
||||||
|
u64 steal = 0;
|
||||||
|
int idx;
|
||||||
|
|
||||||
if (base == GPA_INVALID)
|
if (base == GPA_INVALID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Let's do the local bookkeeping */
|
|
||||||
steal = vcpu->arch.steal.steal;
|
|
||||||
steal += current->sched_info.run_delay - vcpu->arch.steal.last_steal;
|
|
||||||
vcpu->arch.steal.last_steal = current->sched_info.run_delay;
|
|
||||||
vcpu->arch.steal.steal = steal;
|
|
||||||
|
|
||||||
steal_le = cpu_to_le64(steal);
|
|
||||||
idx = srcu_read_lock(&kvm->srcu);
|
idx = srcu_read_lock(&kvm->srcu);
|
||||||
offset = offsetof(struct pvclock_vcpu_stolen_time, stolen_time);
|
if (!kvm_get_guest(kvm, base + offset, steal)) {
|
||||||
kvm_put_guest(kvm, base + offset, steal_le, u64);
|
steal = le64_to_cpu(steal);
|
||||||
|
vcpu->arch.steal.last_steal = READ_ONCE(current->sched_info.run_delay);
|
||||||
|
steal += vcpu->arch.steal.last_steal - last_steal;
|
||||||
|
kvm_put_guest(kvm, base + offset, cpu_to_le64(steal));
|
||||||
|
}
|
||||||
srcu_read_unlock(&kvm->srcu, idx);
|
srcu_read_unlock(&kvm->srcu, idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +40,8 @@ long kvm_hypercall_pv_features(struct kvm_vcpu *vcpu)
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case ARM_SMCCC_HV_PV_TIME_FEATURES:
|
case ARM_SMCCC_HV_PV_TIME_FEATURES:
|
||||||
case ARM_SMCCC_HV_PV_TIME_ST:
|
case ARM_SMCCC_HV_PV_TIME_ST:
|
||||||
val = SMCCC_RET_SUCCESS;
|
if (vcpu->arch.steal.base != GPA_INVALID)
|
||||||
|
val = SMCCC_RET_SUCCESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +62,6 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
|
||||||
* Start counting stolen time from the time the guest requests
|
* Start counting stolen time from the time the guest requests
|
||||||
* the feature enabled.
|
* the feature enabled.
|
||||||
*/
|
*/
|
||||||
vcpu->arch.steal.steal = 0;
|
|
||||||
vcpu->arch.steal.last_steal = current->sched_info.run_delay;
|
vcpu->arch.steal.last_steal = current->sched_info.run_delay;
|
||||||
|
|
||||||
idx = srcu_read_lock(&kvm->srcu);
|
idx = srcu_read_lock(&kvm->srcu);
|
||||||
|
@ -74,7 +71,7 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool kvm_arm_pvtime_supported(void)
|
bool kvm_arm_pvtime_supported(void)
|
||||||
{
|
{
|
||||||
return !!sched_info_on();
|
return !!sched_info_on();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ TRACE_EVENT(kvm_entry,
|
||||||
__entry->vcpu_pc = vcpu_pc;
|
__entry->vcpu_pc = vcpu_pc;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("PC: 0x%08lx", __entry->vcpu_pc)
|
TP_printk("PC: 0x%016lx", __entry->vcpu_pc)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_exit,
|
TRACE_EVENT(kvm_exit,
|
||||||
|
@ -42,7 +42,7 @@ TRACE_EVENT(kvm_exit,
|
||||||
__entry->vcpu_pc = vcpu_pc;
|
__entry->vcpu_pc = vcpu_pc;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%08lx",
|
TP_printk("%s: HSR_EC: 0x%04x (%s), PC: 0x%016lx",
|
||||||
__print_symbolic(__entry->ret, kvm_arm_exception_type),
|
__print_symbolic(__entry->ret, kvm_arm_exception_type),
|
||||||
__entry->esr_ec,
|
__entry->esr_ec,
|
||||||
__print_symbolic(__entry->esr_ec, kvm_arm_exception_class),
|
__print_symbolic(__entry->esr_ec, kvm_arm_exception_class),
|
||||||
|
@ -69,7 +69,7 @@ TRACE_EVENT(kvm_guest_fault,
|
||||||
__entry->ipa = ipa;
|
__entry->ipa = ipa;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#08lx",
|
TP_printk("ipa %#llx, hsr %#08lx, hxfar %#08lx, pc %#016lx",
|
||||||
__entry->ipa, __entry->hsr,
|
__entry->ipa, __entry->hsr,
|
||||||
__entry->hxfar, __entry->vcpu_pc)
|
__entry->hxfar, __entry->vcpu_pc)
|
||||||
);
|
);
|
||||||
|
@ -131,7 +131,7 @@ TRACE_EVENT(kvm_mmio_emulate,
|
||||||
__entry->cpsr = cpsr;
|
__entry->cpsr = cpsr;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("Emulate MMIO at: 0x%08lx (instr: %08lx, cpsr: %08lx)",
|
TP_printk("Emulate MMIO at: 0x%016lx (instr: %08lx, cpsr: %08lx)",
|
||||||
__entry->vcpu_pc, __entry->instr, __entry->cpsr)
|
__entry->vcpu_pc, __entry->instr, __entry->cpsr)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ TRACE_EVENT(kvm_unmap_hva_range,
|
||||||
__entry->end = end;
|
__entry->end = end;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("mmu notifier unmap range: %#08lx -- %#08lx",
|
TP_printk("mmu notifier unmap range: %#016lx -- %#016lx",
|
||||||
__entry->start, __entry->end)
|
__entry->start, __entry->end)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ TRACE_EVENT(kvm_set_spte_hva,
|
||||||
__entry->hva = hva;
|
__entry->hva = hva;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("mmu notifier set pte hva: %#08lx", __entry->hva)
|
TP_printk("mmu notifier set pte hva: %#016lx", __entry->hva)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_age_hva,
|
TRACE_EVENT(kvm_age_hva,
|
||||||
|
@ -182,7 +182,7 @@ TRACE_EVENT(kvm_age_hva,
|
||||||
__entry->end = end;
|
__entry->end = end;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("mmu notifier age hva: %#08lx -- %#08lx",
|
TP_printk("mmu notifier age hva: %#016lx -- %#016lx",
|
||||||
__entry->start, __entry->end)
|
__entry->start, __entry->end)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ TRACE_EVENT(kvm_test_age_hva,
|
||||||
__entry->hva = hva;
|
__entry->hva = hva;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("mmu notifier test age hva: %#08lx", __entry->hva)
|
TP_printk("mmu notifier test age hva: %#016lx", __entry->hva)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_set_way_flush,
|
TRACE_EVENT(kvm_set_way_flush,
|
||||||
|
|
|
@ -22,7 +22,7 @@ TRACE_EVENT(kvm_wfx_arm64,
|
||||||
__entry->is_wfe = is_wfe;
|
__entry->is_wfe = is_wfe;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("guest executed wf%c at: 0x%08lx",
|
TP_printk("guest executed wf%c at: 0x%016lx",
|
||||||
__entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
|
__entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ TRACE_EVENT(kvm_hvc_arm64,
|
||||||
__entry->imm = imm;
|
__entry->imm = imm;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx)",
|
TP_printk("HVC at 0x%016lx (r0: 0x%016lx, imm: 0x%lx)",
|
||||||
__entry->vcpu_pc, __entry->r0, __entry->imm)
|
__entry->vcpu_pc, __entry->r0, __entry->imm)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ TRACE_EVENT(trap_reg,
|
||||||
__entry->write_value = write_value;
|
__entry->write_value = write_value;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("%s %s reg %d (0x%08llx)", __entry->fn, __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
|
TP_printk("%s %s reg %d (0x%016llx)", __entry->fn, __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(kvm_handle_sys_reg,
|
TRACE_EVENT(kvm_handle_sys_reg,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* Architecture-specific kernel symbols
|
* Architecture-specific kernel symbols
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_VIRTUAL_MEM_MAP
|
#if defined(CONFIG_VIRTUAL_MEM_MAP) || defined(CONFIG_DISCONTIGMEM)
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
|
|
@ -46,6 +46,9 @@ unsigned long memory_size;
|
||||||
EXPORT_SYMBOL(memory_size);
|
EXPORT_SYMBOL(memory_size);
|
||||||
unsigned long lowmem_size;
|
unsigned long lowmem_size;
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(min_low_pfn);
|
||||||
|
EXPORT_SYMBOL(max_low_pfn);
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
pte_t *kmap_pte;
|
pte_t *kmap_pte;
|
||||||
EXPORT_SYMBOL(kmap_pte);
|
EXPORT_SYMBOL(kmap_pte);
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#define cpu_has_counter 1
|
#define cpu_has_counter 1
|
||||||
#define cpu_has_dc_aliases (PAGE_SIZE < 0x4000)
|
#define cpu_has_dc_aliases (PAGE_SIZE < 0x4000)
|
||||||
#define cpu_has_divec 0
|
#define cpu_has_divec 0
|
||||||
#define cpu_has_ejtag 0
|
|
||||||
#define cpu_has_inclusive_pcaches 1
|
#define cpu_has_inclusive_pcaches 1
|
||||||
#define cpu_has_llsc 1
|
#define cpu_has_llsc 1
|
||||||
#define cpu_has_mcheck 0
|
#define cpu_has_mcheck 0
|
||||||
|
@ -42,7 +41,6 @@
|
||||||
#define cpu_has_veic 0
|
#define cpu_has_veic 0
|
||||||
#define cpu_has_vint 0
|
#define cpu_has_vint 0
|
||||||
#define cpu_has_vtag_icache 0
|
#define cpu_has_vtag_icache 0
|
||||||
#define cpu_has_watch 1
|
|
||||||
#define cpu_has_wsbh 1
|
#define cpu_has_wsbh 1
|
||||||
#define cpu_has_ic_fills_f_dc 1
|
#define cpu_has_ic_fills_f_dc 1
|
||||||
#define cpu_hwrena_impl_bits 0xc0000000
|
#define cpu_hwrena_impl_bits 0xc0000000
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
#ifndef __ASM_MACH_LOONGSON64_IRQ_H_
|
#ifndef __ASM_MACH_LOONGSON64_IRQ_H_
|
||||||
#define __ASM_MACH_LOONGSON64_IRQ_H_
|
#define __ASM_MACH_LOONGSON64_IRQ_H_
|
||||||
|
|
||||||
#include <boot_param.h>
|
|
||||||
|
|
||||||
/* cpu core interrupt numbers */
|
/* cpu core interrupt numbers */
|
||||||
#define NR_IRQS_LEGACY 16
|
#define NR_IRQS_LEGACY 16
|
||||||
#define NR_MIPS_CPU_IRQS 8
|
#define NR_MIPS_CPU_IRQS 8
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
#ifndef _ASM_MACH_LOONGSON64_MMZONE_H
|
#ifndef _ASM_MACH_LOONGSON64_MMZONE_H
|
||||||
#define _ASM_MACH_LOONGSON64_MMZONE_H
|
#define _ASM_MACH_LOONGSON64_MMZONE_H
|
||||||
|
|
||||||
#include <boot_param.h>
|
|
||||||
#define NODE_ADDRSPACE_SHIFT 44
|
#define NODE_ADDRSPACE_SHIFT 44
|
||||||
#define NODE0_ADDRSPACE_OFFSET 0x000000000000UL
|
#define NODE0_ADDRSPACE_OFFSET 0x000000000000UL
|
||||||
#define NODE1_ADDRSPACE_OFFSET 0x100000000000UL
|
#define NODE1_ADDRSPACE_OFFSET 0x100000000000UL
|
||||||
|
|
|
@ -1898,8 +1898,8 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
|
||||||
(base_id >= 64 && base_id < 90) ||
|
(base_id >= 64 && base_id < 90) ||
|
||||||
(base_id >= 128 && base_id < 164) ||
|
(base_id >= 128 && base_id < 164) ||
|
||||||
(base_id >= 192 && base_id < 200) ||
|
(base_id >= 192 && base_id < 200) ||
|
||||||
(base_id >= 256 && base_id < 274) ||
|
(base_id >= 256 && base_id < 275) ||
|
||||||
(base_id >= 320 && base_id < 358) ||
|
(base_id >= 320 && base_id < 361) ||
|
||||||
(base_id >= 384 && base_id < 574))
|
(base_id >= 384 && base_id < 574))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -239,6 +239,8 @@ static int bmips_boot_secondary(int cpu, struct task_struct *idle)
|
||||||
*/
|
*/
|
||||||
static void bmips_init_secondary(void)
|
static void bmips_init_secondary(void)
|
||||||
{
|
{
|
||||||
|
bmips_cpu_setup();
|
||||||
|
|
||||||
switch (current_cpu_type()) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_BMIPS4350:
|
case CPU_BMIPS4350:
|
||||||
case CPU_BMIPS4380:
|
case CPU_BMIPS4380:
|
||||||
|
|
|
@ -1287,6 +1287,18 @@ static int enable_restore_fp_context(int msa)
|
||||||
err = own_fpu_inatomic(1);
|
err = own_fpu_inatomic(1);
|
||||||
if (msa && !err) {
|
if (msa && !err) {
|
||||||
enable_msa();
|
enable_msa();
|
||||||
|
/*
|
||||||
|
* with MSA enabled, userspace can see MSACSR
|
||||||
|
* and MSA regs, but the values in them are from
|
||||||
|
* other task before current task, restore them
|
||||||
|
* from saved fp/msa context
|
||||||
|
*/
|
||||||
|
write_msa_csr(current->thread.fpu.msacsr);
|
||||||
|
/*
|
||||||
|
* own_fpu_inatomic(1) just restore low 64bit,
|
||||||
|
* fix the high 64bit
|
||||||
|
*/
|
||||||
|
init_msa_upper();
|
||||||
set_thread_flag(TIF_USEDMSA);
|
set_thread_flag(TIF_USEDMSA);
|
||||||
set_thread_flag(TIF_MSA_CTX_LIVE);
|
set_thread_flag(TIF_MSA_CTX_LIVE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,8 @@ extern void kvm_init_loongson_ipi(struct kvm *kvm);
|
||||||
int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case KVM_VM_MIPS_AUTO:
|
||||||
|
break;
|
||||||
#ifdef CONFIG_KVM_MIPS_VZ
|
#ifdef CONFIG_KVM_MIPS_VZ
|
||||||
case KVM_VM_MIPS_VZ:
|
case KVM_VM_MIPS_VZ:
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1712,7 +1712,11 @@ static void setup_scache(void)
|
||||||
printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
|
printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
|
||||||
scache_size >> 10,
|
scache_size >> 10,
|
||||||
way_string[c->scache.ways], c->scache.linesz);
|
way_string[c->scache.ways], c->scache.linesz);
|
||||||
|
|
||||||
|
if (current_cpu_type() == CPU_BMIPS5000)
|
||||||
|
c->options |= MIPS_CPU_INCLUSIVE_CACHES;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
|
if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
|
||||||
panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
|
panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
|
||||||
|
|
|
@ -245,7 +245,6 @@ static int mipsxx_perfcount_handler(void)
|
||||||
|
|
||||||
switch (counters) {
|
switch (counters) {
|
||||||
#define HANDLE_COUNTER(n) \
|
#define HANDLE_COUNTER(n) \
|
||||||
fallthrough; \
|
|
||||||
case n + 1: \
|
case n + 1: \
|
||||||
control = r_c0_perfctrl ## n(); \
|
control = r_c0_perfctrl ## n(); \
|
||||||
counter = r_c0_perfcntr ## n(); \
|
counter = r_c0_perfcntr ## n(); \
|
||||||
|
@ -256,8 +255,11 @@ static int mipsxx_perfcount_handler(void)
|
||||||
handled = IRQ_HANDLED; \
|
handled = IRQ_HANDLED; \
|
||||||
}
|
}
|
||||||
HANDLE_COUNTER(3)
|
HANDLE_COUNTER(3)
|
||||||
|
fallthrough;
|
||||||
HANDLE_COUNTER(2)
|
HANDLE_COUNTER(2)
|
||||||
|
fallthrough;
|
||||||
HANDLE_COUNTER(1)
|
HANDLE_COUNTER(1)
|
||||||
|
fallthrough;
|
||||||
HANDLE_COUNTER(0)
|
HANDLE_COUNTER(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,8 +222,8 @@ void __init sni_a20r_irq_init(void)
|
||||||
irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
|
irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
|
||||||
sni_hwint = a20r_hwint;
|
sni_hwint = a20r_hwint;
|
||||||
change_c0_status(ST0_IM, IE_IRQ0);
|
change_c0_status(ST0_IM, IE_IRQ0);
|
||||||
if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
|
if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler,
|
||||||
NULL))
|
IRQF_SHARED, "ISA", sni_isa_irq_handler))
|
||||||
pr_err("Failed to register ISA interrupt\n");
|
pr_err("Failed to register ISA interrupt\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,19 +165,19 @@ struct __large_struct {
|
||||||
|
|
||||||
#define __get_user_nocheck(x, ptr, size) \
|
#define __get_user_nocheck(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
long __gu_err, __gu_val; \
|
long __gu_err; \
|
||||||
__get_user_size(__gu_val, (ptr), (size), __gu_err); \
|
__get_user_size((x), (ptr), (size), __gu_err); \
|
||||||
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __get_user_check(x, ptr, size) \
|
#define __get_user_check(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
long __gu_err = -EFAULT, __gu_val = 0; \
|
long __gu_err = -EFAULT; \
|
||||||
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
|
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
|
||||||
if (access_ok(__gu_addr, size)) \
|
if (access_ok(__gu_addr, size)) \
|
||||||
__get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
|
__get_user_size((x), __gu_addr, (size), __gu_err); \
|
||||||
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
else \
|
||||||
|
(x) = (__typeof__(*(ptr))) 0; \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -191,11 +191,13 @@ do { \
|
||||||
case 2: __get_user_asm(x, ptr, retval, "l.lhz"); break; \
|
case 2: __get_user_asm(x, ptr, retval, "l.lhz"); break; \
|
||||||
case 4: __get_user_asm(x, ptr, retval, "l.lwz"); break; \
|
case 4: __get_user_asm(x, ptr, retval, "l.lwz"); break; \
|
||||||
case 8: __get_user_asm2(x, ptr, retval); break; \
|
case 8: __get_user_asm2(x, ptr, retval); break; \
|
||||||
default: (x) = __get_user_bad(); \
|
default: (x) = (__typeof__(*(ptr)))__get_user_bad(); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define __get_user_asm(x, addr, err, op) \
|
#define __get_user_asm(x, addr, err, op) \
|
||||||
|
{ \
|
||||||
|
unsigned long __gu_tmp; \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
"1: "op" %1,0(%2)\n" \
|
"1: "op" %1,0(%2)\n" \
|
||||||
"2:\n" \
|
"2:\n" \
|
||||||
|
@ -209,10 +211,14 @@ do { \
|
||||||
" .align 2\n" \
|
" .align 2\n" \
|
||||||
" .long 1b,3b\n" \
|
" .long 1b,3b\n" \
|
||||||
".previous" \
|
".previous" \
|
||||||
: "=r"(err), "=r"(x) \
|
: "=r"(err), "=r"(__gu_tmp) \
|
||||||
: "r"(addr), "i"(-EFAULT), "0"(err))
|
: "r"(addr), "i"(-EFAULT), "0"(err)); \
|
||||||
|
(x) = (__typeof__(*(addr)))__gu_tmp; \
|
||||||
|
}
|
||||||
|
|
||||||
#define __get_user_asm2(x, addr, err) \
|
#define __get_user_asm2(x, addr, err) \
|
||||||
|
{ \
|
||||||
|
unsigned long long __gu_tmp; \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
"1: l.lwz %1,0(%2)\n" \
|
"1: l.lwz %1,0(%2)\n" \
|
||||||
"2: l.lwz %H1,4(%2)\n" \
|
"2: l.lwz %H1,4(%2)\n" \
|
||||||
|
@ -229,8 +235,11 @@ do { \
|
||||||
" .long 1b,4b\n" \
|
" .long 1b,4b\n" \
|
||||||
" .long 2b,4b\n" \
|
" .long 2b,4b\n" \
|
||||||
".previous" \
|
".previous" \
|
||||||
: "=r"(err), "=&r"(x) \
|
: "=r"(err), "=&r"(__gu_tmp) \
|
||||||
: "r"(addr), "i"(-EFAULT), "0"(err))
|
: "r"(addr), "i"(-EFAULT), "0"(err)); \
|
||||||
|
(x) = (__typeof__(*(addr)))( \
|
||||||
|
(__typeof__((x)-(x)))__gu_tmp); \
|
||||||
|
}
|
||||||
|
|
||||||
/* more complex routines */
|
/* more complex routines */
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,16 @@ static void __init setup_memory(void)
|
||||||
*/
|
*/
|
||||||
memblock_reserve(__pa(_stext), _end - _stext);
|
memblock_reserve(__pa(_stext), _end - _stext);
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
|
/* Then reserve the initrd, if any */
|
||||||
|
if (initrd_start && (initrd_end > initrd_start)) {
|
||||||
|
unsigned long aligned_start = ALIGN_DOWN(initrd_start, PAGE_SIZE);
|
||||||
|
unsigned long aligned_end = ALIGN(initrd_end, PAGE_SIZE);
|
||||||
|
|
||||||
|
memblock_reserve(__pa(aligned_start), aligned_end - aligned_start);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_BLK_DEV_INITRD */
|
||||||
|
|
||||||
early_init_fdt_reserve_self();
|
early_init_fdt_reserve_self();
|
||||||
early_init_fdt_scan_reserved_mem();
|
early_init_fdt_scan_reserved_mem();
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
static void cache_loop(struct page *page, const unsigned int reg)
|
static __always_inline void cache_loop(struct page *page, const unsigned int reg)
|
||||||
{
|
{
|
||||||
unsigned long paddr = page_to_pfn(page) << PAGE_SHIFT;
|
unsigned long paddr = page_to_pfn(page) << PAGE_SHIFT;
|
||||||
unsigned long line = paddr & ~(L1_CACHE_BYTES - 1);
|
unsigned long line = paddr & ~(L1_CACHE_BYTES - 1);
|
||||||
|
|
|
@ -30,7 +30,7 @@ config GENERIC_BUG_RELATIVE_POINTERS
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
config GENERIC_LOCKBREAK
|
config GENERIC_LOCKBREAK
|
||||||
def_bool y if PREEMPTTION
|
def_bool y if PREEMPTION
|
||||||
|
|
||||||
config PGSTE
|
config PGSTE
|
||||||
def_bool y if KVM
|
def_bool y if KVM
|
||||||
|
|
|
@ -626,6 +626,7 @@ CONFIG_NTFS_RW=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
CONFIG_TMPFS_POSIX_ACL=y
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
|
CONFIG_TMPFS_INODE64=y
|
||||||
CONFIG_HUGETLBFS=y
|
CONFIG_HUGETLBFS=y
|
||||||
CONFIG_CONFIGFS_FS=m
|
CONFIG_CONFIGFS_FS=m
|
||||||
CONFIG_ECRYPT_FS=m
|
CONFIG_ECRYPT_FS=m
|
||||||
|
@ -807,6 +808,7 @@ CONFIG_DEBUG_NOTIFIERS=y
|
||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_DEBUG_CREDENTIALS=y
|
CONFIG_DEBUG_CREDENTIALS=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
|
CONFIG_RCU_REF_SCALE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
|
@ -818,6 +820,7 @@ CONFIG_PREEMPT_TRACER=y
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
CONFIG_FTRACE_SYSCALLS=y
|
CONFIG_FTRACE_SYSCALLS=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
|
CONFIG_BPF_KPROBE_OVERRIDE=y
|
||||||
CONFIG_HIST_TRIGGERS=y
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
||||||
|
@ -829,6 +832,7 @@ CONFIG_FAIL_MAKE_REQUEST=y
|
||||||
CONFIG_FAIL_IO_TIMEOUT=y
|
CONFIG_FAIL_IO_TIMEOUT=y
|
||||||
CONFIG_FAIL_FUTEX=y
|
CONFIG_FAIL_FUTEX=y
|
||||||
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||||
|
CONFIG_FAIL_FUNCTION=y
|
||||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_TEST_LIST_SORT=y
|
CONFIG_TEST_LIST_SORT=y
|
||||||
|
|
|
@ -617,6 +617,7 @@ CONFIG_NTFS_RW=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
CONFIG_TMPFS_POSIX_ACL=y
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
|
CONFIG_TMPFS_INODE64=y
|
||||||
CONFIG_HUGETLBFS=y
|
CONFIG_HUGETLBFS=y
|
||||||
CONFIG_CONFIGFS_FS=m
|
CONFIG_CONFIGFS_FS=m
|
||||||
CONFIG_ECRYPT_FS=m
|
CONFIG_ECRYPT_FS=m
|
||||||
|
@ -763,6 +764,7 @@ CONFIG_PANIC_ON_OOPS=y
|
||||||
CONFIG_TEST_LOCKUP=m
|
CONFIG_TEST_LOCKUP=m
|
||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
|
CONFIG_RCU_REF_SCALE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
CONFIG_BOOTTIME_TRACING=y
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
|
@ -771,6 +773,7 @@ CONFIG_STACK_TRACER=y
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
CONFIG_FTRACE_SYSCALLS=y
|
CONFIG_FTRACE_SYSCALLS=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
|
CONFIG_BPF_KPROBE_OVERRIDE=y
|
||||||
CONFIG_HIST_TRIGGERS=y
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
|
|
|
@ -74,5 +74,6 @@ CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_PANIC_ON_OOPS=y
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
# CONFIG_SCHED_DEBUG is not set
|
# CONFIG_SCHED_DEBUG is not set
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
|
# CONFIG_RCU_TRACE is not set
|
||||||
# CONFIG_FTRACE is not set
|
# CONFIG_FTRACE is not set
|
||||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||||
|
|
|
@ -60,16 +60,10 @@ __visible noinstr void do_syscall_64(unsigned long nr, struct pt_regs *regs)
|
||||||
#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
|
#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
|
||||||
static __always_inline unsigned int syscall_32_enter(struct pt_regs *regs)
|
static __always_inline unsigned int syscall_32_enter(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int nr = (unsigned int)regs->orig_ax;
|
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_IA32_EMULATION))
|
if (IS_ENABLED(CONFIG_IA32_EMULATION))
|
||||||
current_thread_info()->status |= TS_COMPAT;
|
current_thread_info()->status |= TS_COMPAT;
|
||||||
/*
|
|
||||||
* Subtlety here: if ptrace pokes something larger than 2^32-1 into
|
return (unsigned int)regs->orig_ax;
|
||||||
* orig_ax, the unsigned int return value truncates it. This may
|
|
||||||
* or may not be necessary, but it matches the old asm behavior.
|
|
||||||
*/
|
|
||||||
return (unsigned int)syscall_enter_from_user_mode(regs, nr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -91,15 +85,29 @@ __visible noinstr void do_int80_syscall_32(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int nr = syscall_32_enter(regs);
|
unsigned int nr = syscall_32_enter(regs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Subtlety here: if ptrace pokes something larger than 2^32-1 into
|
||||||
|
* orig_ax, the unsigned int return value truncates it. This may
|
||||||
|
* or may not be necessary, but it matches the old asm behavior.
|
||||||
|
*/
|
||||||
|
nr = (unsigned int)syscall_enter_from_user_mode(regs, nr);
|
||||||
|
|
||||||
do_syscall_32_irqs_on(regs, nr);
|
do_syscall_32_irqs_on(regs, nr);
|
||||||
syscall_exit_to_user_mode(regs);
|
syscall_exit_to_user_mode(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static noinstr bool __do_fast_syscall_32(struct pt_regs *regs)
|
static noinstr bool __do_fast_syscall_32(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int nr = syscall_32_enter(regs);
|
unsigned int nr = syscall_32_enter(regs);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This cannot use syscall_enter_from_user_mode() as it has to
|
||||||
|
* fetch EBP before invoking any of the syscall entry work
|
||||||
|
* functions.
|
||||||
|
*/
|
||||||
|
syscall_enter_from_user_mode_prepare(regs);
|
||||||
|
|
||||||
instrumentation_begin();
|
instrumentation_begin();
|
||||||
/* Fetch EBP from where the vDSO stashed it. */
|
/* Fetch EBP from where the vDSO stashed it. */
|
||||||
if (IS_ENABLED(CONFIG_X86_64)) {
|
if (IS_ENABLED(CONFIG_X86_64)) {
|
||||||
|
@ -122,6 +130,9 @@ static noinstr bool __do_fast_syscall_32(struct pt_regs *regs)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The case truncates any ptrace induced syscall nr > 2^32 -1 */
|
||||||
|
nr = (unsigned int)syscall_enter_from_user_mode_work(regs, nr);
|
||||||
|
|
||||||
/* Now this is just like a normal syscall. */
|
/* Now this is just like a normal syscall. */
|
||||||
do_syscall_32_irqs_on(regs, nr);
|
do_syscall_32_irqs_on(regs, nr);
|
||||||
syscall_exit_to_user_mode(regs);
|
syscall_exit_to_user_mode(regs);
|
||||||
|
|
|
@ -18,8 +18,16 @@ static __always_inline void arch_check_user_regs(struct pt_regs *regs)
|
||||||
* state, not the interrupt state as imagined by Xen.
|
* state, not the interrupt state as imagined by Xen.
|
||||||
*/
|
*/
|
||||||
unsigned long flags = native_save_fl();
|
unsigned long flags = native_save_fl();
|
||||||
WARN_ON_ONCE(flags & (X86_EFLAGS_AC | X86_EFLAGS_DF |
|
unsigned long mask = X86_EFLAGS_DF | X86_EFLAGS_NT;
|
||||||
X86_EFLAGS_NT));
|
|
||||||
|
/*
|
||||||
|
* For !SMAP hardware we patch out CLAC on entry.
|
||||||
|
*/
|
||||||
|
if (boot_cpu_has(X86_FEATURE_SMAP) ||
|
||||||
|
(IS_ENABLED(CONFIG_64_BIT) && boot_cpu_has(X86_FEATURE_XENPV)))
|
||||||
|
mask |= X86_EFLAGS_AC;
|
||||||
|
|
||||||
|
WARN_ON_ONCE(flags & mask);
|
||||||
|
|
||||||
/* We think we came from user mode. Make sure pt_regs agrees. */
|
/* We think we came from user mode. Make sure pt_regs agrees. */
|
||||||
WARN_ON_ONCE(!user_mode(regs));
|
WARN_ON_ONCE(!user_mode(regs));
|
||||||
|
|
|
@ -327,8 +327,8 @@ static inline unsigned long regs_get_kernel_argument(struct pt_regs *regs,
|
||||||
static const unsigned int argument_offs[] = {
|
static const unsigned int argument_offs[] = {
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
offsetof(struct pt_regs, ax),
|
offsetof(struct pt_regs, ax),
|
||||||
offsetof(struct pt_regs, cx),
|
|
||||||
offsetof(struct pt_regs, dx),
|
offsetof(struct pt_regs, dx),
|
||||||
|
offsetof(struct pt_regs, cx),
|
||||||
#define NR_REG_ARGUMENTS 3
|
#define NR_REG_ARGUMENTS 3
|
||||||
#else
|
#else
|
||||||
offsetof(struct pt_regs, di),
|
offsetof(struct pt_regs, di),
|
||||||
|
|
|
@ -270,9 +270,8 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_asyncpf_interrupt)
|
||||||
{
|
{
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
u32 token;
|
u32 token;
|
||||||
irqentry_state_t state;
|
|
||||||
|
|
||||||
state = irqentry_enter(regs);
|
ack_APIC_irq();
|
||||||
|
|
||||||
inc_irq_stat(irq_hv_callback_count);
|
inc_irq_stat(irq_hv_callback_count);
|
||||||
|
|
||||||
|
@ -283,7 +282,6 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_kvm_asyncpf_interrupt)
|
||||||
wrmsrl(MSR_KVM_ASYNC_PF_ACK, 1);
|
wrmsrl(MSR_KVM_ASYNC_PF_ACK, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
irqentry_exit(regs, state);
|
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -654,7 +652,6 @@ static void __init kvm_guest_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pv_tlb_flush_supported()) {
|
if (pv_tlb_flush_supported()) {
|
||||||
pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others;
|
|
||||||
pv_ops.mmu.tlb_remove_table = tlb_remove_table;
|
pv_ops.mmu.tlb_remove_table = tlb_remove_table;
|
||||||
pr_info("KVM setup pv remote TLB flush\n");
|
pr_info("KVM setup pv remote TLB flush\n");
|
||||||
}
|
}
|
||||||
|
@ -767,6 +764,14 @@ static __init int activate_jump_labels(void)
|
||||||
}
|
}
|
||||||
arch_initcall(activate_jump_labels);
|
arch_initcall(activate_jump_labels);
|
||||||
|
|
||||||
|
static void kvm_free_pv_cpu_mask(void)
|
||||||
|
{
|
||||||
|
unsigned int cpu;
|
||||||
|
|
||||||
|
for_each_possible_cpu(cpu)
|
||||||
|
free_cpumask_var(per_cpu(__pv_cpu_mask, cpu));
|
||||||
|
}
|
||||||
|
|
||||||
static __init int kvm_alloc_cpumask(void)
|
static __init int kvm_alloc_cpumask(void)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
@ -785,11 +790,20 @@ static __init int kvm_alloc_cpumask(void)
|
||||||
|
|
||||||
if (alloc)
|
if (alloc)
|
||||||
for_each_possible_cpu(cpu) {
|
for_each_possible_cpu(cpu) {
|
||||||
zalloc_cpumask_var_node(per_cpu_ptr(&__pv_cpu_mask, cpu),
|
if (!zalloc_cpumask_var_node(
|
||||||
GFP_KERNEL, cpu_to_node(cpu));
|
per_cpu_ptr(&__pv_cpu_mask, cpu),
|
||||||
|
GFP_KERNEL, cpu_to_node(cpu))) {
|
||||||
|
goto zalloc_cpumask_fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself;
|
||||||
|
pv_ops.mmu.flush_tlb_others = kvm_flush_tlb_others;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
zalloc_cpumask_fail:
|
||||||
|
kvm_free_pv_cpu_mask();
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
arch_initcall(kvm_alloc_cpumask);
|
arch_initcall(kvm_alloc_cpumask);
|
||||||
|
|
||||||
|
|
|
@ -729,20 +729,9 @@ static bool is_sysenter_singlestep(struct pt_regs *regs)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static __always_inline void debug_enter(unsigned long *dr6, unsigned long *dr7)
|
static __always_inline unsigned long debug_read_clear_dr6(void)
|
||||||
{
|
{
|
||||||
/*
|
unsigned long dr6;
|
||||||
* Disable breakpoints during exception handling; recursive exceptions
|
|
||||||
* are exceedingly 'fun'.
|
|
||||||
*
|
|
||||||
* Since this function is NOKPROBE, and that also applies to
|
|
||||||
* HW_BREAKPOINT_X, we can't hit a breakpoint before this (XXX except a
|
|
||||||
* HW_BREAKPOINT_W on our stack)
|
|
||||||
*
|
|
||||||
* Entry text is excluded for HW_BP_X and cpu_entry_area, which
|
|
||||||
* includes the entry stack is excluded for everything.
|
|
||||||
*/
|
|
||||||
*dr7 = local_db_save();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Intel SDM says:
|
* The Intel SDM says:
|
||||||
|
@ -755,15 +744,12 @@ static __always_inline void debug_enter(unsigned long *dr6, unsigned long *dr7)
|
||||||
*
|
*
|
||||||
* Keep it simple: clear DR6 immediately.
|
* Keep it simple: clear DR6 immediately.
|
||||||
*/
|
*/
|
||||||
get_debugreg(*dr6, 6);
|
get_debugreg(dr6, 6);
|
||||||
set_debugreg(0, 6);
|
set_debugreg(0, 6);
|
||||||
/* Filter out all the reserved bits which are preset to 1 */
|
/* Filter out all the reserved bits which are preset to 1 */
|
||||||
*dr6 &= ~DR6_RESERVED;
|
dr6 &= ~DR6_RESERVED;
|
||||||
}
|
|
||||||
|
|
||||||
static __always_inline void debug_exit(unsigned long dr7)
|
return dr6;
|
||||||
{
|
|
||||||
local_db_restore(dr7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -863,6 +849,18 @@ static void handle_debug(struct pt_regs *regs, unsigned long dr6, bool user)
|
||||||
static __always_inline void exc_debug_kernel(struct pt_regs *regs,
|
static __always_inline void exc_debug_kernel(struct pt_regs *regs,
|
||||||
unsigned long dr6)
|
unsigned long dr6)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Disable breakpoints during exception handling; recursive exceptions
|
||||||
|
* are exceedingly 'fun'.
|
||||||
|
*
|
||||||
|
* Since this function is NOKPROBE, and that also applies to
|
||||||
|
* HW_BREAKPOINT_X, we can't hit a breakpoint before this (XXX except a
|
||||||
|
* HW_BREAKPOINT_W on our stack)
|
||||||
|
*
|
||||||
|
* Entry text is excluded for HW_BP_X and cpu_entry_area, which
|
||||||
|
* includes the entry stack is excluded for everything.
|
||||||
|
*/
|
||||||
|
unsigned long dr7 = local_db_save();
|
||||||
bool irq_state = idtentry_enter_nmi(regs);
|
bool irq_state = idtentry_enter_nmi(regs);
|
||||||
instrumentation_begin();
|
instrumentation_begin();
|
||||||
|
|
||||||
|
@ -883,6 +881,8 @@ static __always_inline void exc_debug_kernel(struct pt_regs *regs,
|
||||||
|
|
||||||
instrumentation_end();
|
instrumentation_end();
|
||||||
idtentry_exit_nmi(regs, irq_state);
|
idtentry_exit_nmi(regs, irq_state);
|
||||||
|
|
||||||
|
local_db_restore(dr7);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __always_inline void exc_debug_user(struct pt_regs *regs,
|
static __always_inline void exc_debug_user(struct pt_regs *regs,
|
||||||
|
@ -894,6 +894,15 @@ static __always_inline void exc_debug_user(struct pt_regs *regs,
|
||||||
*/
|
*/
|
||||||
WARN_ON_ONCE(!user_mode(regs));
|
WARN_ON_ONCE(!user_mode(regs));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NB: We can't easily clear DR7 here because
|
||||||
|
* idtentry_exit_to_usermode() can invoke ptrace, schedule, access
|
||||||
|
* user memory, etc. This means that a recursive #DB is possible. If
|
||||||
|
* this happens, that #DB will hit exc_debug_kernel() and clear DR7.
|
||||||
|
* Since we're not on the IST stack right now, everything will be
|
||||||
|
* fine.
|
||||||
|
*/
|
||||||
|
|
||||||
irqentry_enter_from_user_mode(regs);
|
irqentry_enter_from_user_mode(regs);
|
||||||
instrumentation_begin();
|
instrumentation_begin();
|
||||||
|
|
||||||
|
@ -907,36 +916,24 @@ static __always_inline void exc_debug_user(struct pt_regs *regs,
|
||||||
/* IST stack entry */
|
/* IST stack entry */
|
||||||
DEFINE_IDTENTRY_DEBUG(exc_debug)
|
DEFINE_IDTENTRY_DEBUG(exc_debug)
|
||||||
{
|
{
|
||||||
unsigned long dr6, dr7;
|
exc_debug_kernel(regs, debug_read_clear_dr6());
|
||||||
|
|
||||||
debug_enter(&dr6, &dr7);
|
|
||||||
exc_debug_kernel(regs, dr6);
|
|
||||||
debug_exit(dr7);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* User entry, runs on regular task stack */
|
/* User entry, runs on regular task stack */
|
||||||
DEFINE_IDTENTRY_DEBUG_USER(exc_debug)
|
DEFINE_IDTENTRY_DEBUG_USER(exc_debug)
|
||||||
{
|
{
|
||||||
unsigned long dr6, dr7;
|
exc_debug_user(regs, debug_read_clear_dr6());
|
||||||
|
|
||||||
debug_enter(&dr6, &dr7);
|
|
||||||
exc_debug_user(regs, dr6);
|
|
||||||
debug_exit(dr7);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* 32 bit does not have separate entry points. */
|
/* 32 bit does not have separate entry points. */
|
||||||
DEFINE_IDTENTRY_RAW(exc_debug)
|
DEFINE_IDTENTRY_RAW(exc_debug)
|
||||||
{
|
{
|
||||||
unsigned long dr6, dr7;
|
unsigned long dr6 = debug_read_clear_dr6();
|
||||||
|
|
||||||
debug_enter(&dr6, &dr7);
|
|
||||||
|
|
||||||
if (user_mode(regs))
|
if (user_mode(regs))
|
||||||
exc_debug_user(regs, dr6);
|
exc_debug_user(regs, dr6);
|
||||||
else
|
else
|
||||||
exc_debug_kernel(regs, dr6);
|
exc_debug_kernel(regs, dr6);
|
||||||
|
|
||||||
debug_exit(dr7);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue