mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 22:53:55 +08:00
Merge 4.20-rc4 into usb-next
We want the USB fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
a62d2d4490
1
.mailmap
1
.mailmap
@ -159,6 +159,7 @@ Peter Oruba <peter@oruba.de>
|
|||||||
Peter Oruba <peter.oruba@amd.com>
|
Peter Oruba <peter.oruba@amd.com>
|
||||||
Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
|
Pratyush Anand <pratyush.anand@gmail.com> <pratyush.anand@st.com>
|
||||||
Praveen BP <praveenbp@ti.com>
|
Praveen BP <praveenbp@ti.com>
|
||||||
|
Punit Agrawal <punitagrawal@gmail.com> <punit.agrawal@arm.com>
|
||||||
Qais Yousef <qsyousef@gmail.com> <qais.yousef@imgtec.com>
|
Qais Yousef <qsyousef@gmail.com> <qais.yousef@imgtec.com>
|
||||||
Oleksij Rempel <linux@rempel-privat.de> <bug-track@fisher-privat.net>
|
Oleksij Rempel <linux@rempel-privat.de> <bug-track@fisher-privat.net>
|
||||||
Oleksij Rempel <linux@rempel-privat.de> <external.Oleksij.Rempel@de.bosch.com>
|
Oleksij Rempel <linux@rempel-privat.de> <external.Oleksij.Rempel@de.bosch.com>
|
||||||
|
8
CREDITS
8
CREDITS
@ -2138,6 +2138,10 @@ E: paul@laufernet.com
|
|||||||
D: Soundblaster driver fixes, ISAPnP quirk
|
D: Soundblaster driver fixes, ISAPnP quirk
|
||||||
S: California, USA
|
S: California, USA
|
||||||
|
|
||||||
|
N: Jarkko Lavinen
|
||||||
|
E: jarkko.lavinen@nokia.com
|
||||||
|
D: OMAP MMC support
|
||||||
|
|
||||||
N: Jonathan Layes
|
N: Jonathan Layes
|
||||||
D: ARPD support
|
D: ARPD support
|
||||||
|
|
||||||
@ -2200,6 +2204,10 @@ S: Post Office Box 371
|
|||||||
S: North Little Rock, Arkansas 72115
|
S: North Little Rock, Arkansas 72115
|
||||||
S: USA
|
S: USA
|
||||||
|
|
||||||
|
N: Christopher Li
|
||||||
|
E: sparse@chrisli.org
|
||||||
|
D: Sparse maintainer 2009 - 2018
|
||||||
|
|
||||||
N: Stephan Linz
|
N: Stephan Linz
|
||||||
E: linz@mazet.de
|
E: linz@mazet.de
|
||||||
E: Stephan.Linz@gmx.de
|
E: Stephan.Linz@gmx.de
|
||||||
|
@ -37,8 +37,8 @@ Description:
|
|||||||
0-| / \/ \/
|
0-| / \/ \/
|
||||||
+---0----1----2----3----4----5----6------------> time (s)
|
+---0----1----2----3----4----5----6------------> time (s)
|
||||||
|
|
||||||
2. To make the LED go instantly from one brigntess value to another,
|
2. To make the LED go instantly from one brightness value to another,
|
||||||
we should use use zero-time lengths (the brightness must be same as
|
we should use zero-time lengths (the brightness must be same as
|
||||||
the previous tuple's). So the format should be:
|
the previous tuple's). So the format should be:
|
||||||
"brightness_1 duration_1 brightness_1 0 brightness_2 duration_2
|
"brightness_1 duration_1 brightness_1 0 brightness_2 duration_2
|
||||||
brightness_2 0 ...". For example:
|
brightness_2 0 ...". For example:
|
||||||
|
@ -4713,6 +4713,8 @@
|
|||||||
prevent spurious wakeup);
|
prevent spurious wakeup);
|
||||||
n = USB_QUIRK_DELAY_CTRL_MSG (Device needs a
|
n = USB_QUIRK_DELAY_CTRL_MSG (Device needs a
|
||||||
pause after every control message);
|
pause after every control message);
|
||||||
|
o = USB_QUIRK_HUB_SLOW_RESET (Hub needs extra
|
||||||
|
delay after resetting its port);
|
||||||
Example: quirks=0781:5580:bk,0a5c:5834:gij
|
Example: quirks=0781:5580:bk,0a5c:5834:gij
|
||||||
|
|
||||||
usbhid.mousepoll=
|
usbhid.mousepoll=
|
||||||
|
@ -150,7 +150,7 @@ data structures necessary to handle the given policy and, possibly, to add
|
|||||||
a governor ``sysfs`` interface to it. Next, the governor is started by
|
a governor ``sysfs`` interface to it. Next, the governor is started by
|
||||||
invoking its ``->start()`` callback.
|
invoking its ``->start()`` callback.
|
||||||
|
|
||||||
That callback it expected to register per-CPU utilization update callbacks for
|
That callback is expected to register per-CPU utilization update callbacks for
|
||||||
all of the online CPUs belonging to the given policy with the CPU scheduler.
|
all of the online CPUs belonging to the given policy with the CPU scheduler.
|
||||||
The utilization update callbacks will be invoked by the CPU scheduler on
|
The utilization update callbacks will be invoked by the CPU scheduler on
|
||||||
important events, like task enqueue and dequeue, on every iteration of the
|
important events, like task enqueue and dequeue, on every iteration of the
|
||||||
|
@ -32,16 +32,17 @@ Disclosure and embargoed information
|
|||||||
The security list is not a disclosure channel. For that, see Coordination
|
The security list is not a disclosure channel. For that, see Coordination
|
||||||
below.
|
below.
|
||||||
|
|
||||||
Once a robust fix has been developed, our preference is to release the
|
Once a robust fix has been developed, the release process starts. Fixes
|
||||||
fix in a timely fashion, treating it no differently than any of the other
|
for publicly known bugs are released immediately.
|
||||||
thousands of changes and fixes the Linux kernel project releases every
|
|
||||||
month.
|
|
||||||
|
|
||||||
However, at the request of the reporter, we will postpone releasing the
|
Although our preference is to release fixes for publicly undisclosed bugs
|
||||||
fix for up to 5 business days after the date of the report or after the
|
as soon as they become available, this may be postponed at the request of
|
||||||
embargo has lifted; whichever comes first. The only exception to that
|
the reporter or an affected party for up to 7 calendar days from the start
|
||||||
rule is if the bug is publicly known, in which case the preference is to
|
of the release process, with an exceptional extension to 14 calendar days
|
||||||
release the fix as soon as it's available.
|
if it is agreed that the criticality of the bug requires more time. The
|
||||||
|
only valid reason for deferring the publication of a fix is to accommodate
|
||||||
|
the logistics of QA and large scale rollouts which require release
|
||||||
|
coordination.
|
||||||
|
|
||||||
Whilst embargoed information may be shared with trusted individuals in
|
Whilst embargoed information may be shared with trusted individuals in
|
||||||
order to develop a fix, such information will not be published alongside
|
order to develop a fix, such information will not be published alongside
|
||||||
|
@ -74,7 +74,8 @@ using :c:func:`xa_load`. xa_store will overwrite any entry with the
|
|||||||
new entry and return the previous entry stored at that index. You can
|
new entry and return the previous entry stored at that index. You can
|
||||||
use :c:func:`xa_erase` instead of calling :c:func:`xa_store` with a
|
use :c:func:`xa_erase` instead of calling :c:func:`xa_store` with a
|
||||||
``NULL`` entry. There is no difference between an entry that has never
|
``NULL`` entry. There is no difference between an entry that has never
|
||||||
been stored to and one that has most recently had ``NULL`` stored to it.
|
been stored to, one that has been erased and one that has most recently
|
||||||
|
had ``NULL`` stored to it.
|
||||||
|
|
||||||
You can conditionally replace an entry at an index by using
|
You can conditionally replace an entry at an index by using
|
||||||
:c:func:`xa_cmpxchg`. Like :c:func:`cmpxchg`, it will only succeed if
|
:c:func:`xa_cmpxchg`. Like :c:func:`cmpxchg`, it will only succeed if
|
||||||
@ -105,23 +106,44 @@ may result in the entry being marked at some, but not all of the other
|
|||||||
indices. Storing into one index may result in the entry retrieved by
|
indices. Storing into one index may result in the entry retrieved by
|
||||||
some, but not all of the other indices changing.
|
some, but not all of the other indices changing.
|
||||||
|
|
||||||
|
Sometimes you need to ensure that a subsequent call to :c:func:`xa_store`
|
||||||
|
will not need to allocate memory. The :c:func:`xa_reserve` function
|
||||||
|
will store a reserved entry at the indicated index. Users of the normal
|
||||||
|
API will see this entry as containing ``NULL``. If you do not need to
|
||||||
|
use the reserved entry, you can call :c:func:`xa_release` to remove the
|
||||||
|
unused entry. If another user has stored to the entry in the meantime,
|
||||||
|
:c:func:`xa_release` will do nothing; if instead you want the entry to
|
||||||
|
become ``NULL``, you should use :c:func:`xa_erase`.
|
||||||
|
|
||||||
|
If all entries in the array are ``NULL``, the :c:func:`xa_empty` function
|
||||||
|
will return ``true``.
|
||||||
|
|
||||||
Finally, you can remove all entries from an XArray by calling
|
Finally, you can remove all entries from an XArray by calling
|
||||||
:c:func:`xa_destroy`. If the XArray entries are pointers, you may wish
|
:c:func:`xa_destroy`. If the XArray entries are pointers, you may wish
|
||||||
to free the entries first. You can do this by iterating over all present
|
to free the entries first. You can do this by iterating over all present
|
||||||
entries in the XArray using the :c:func:`xa_for_each` iterator.
|
entries in the XArray using the :c:func:`xa_for_each` iterator.
|
||||||
|
|
||||||
ID assignment
|
Allocating XArrays
|
||||||
-------------
|
------------------
|
||||||
|
|
||||||
|
If you use :c:func:`DEFINE_XARRAY_ALLOC` to define the XArray, or
|
||||||
|
initialise it by passing ``XA_FLAGS_ALLOC`` to :c:func:`xa_init_flags`,
|
||||||
|
the XArray changes to track whether entries are in use or not.
|
||||||
|
|
||||||
You can call :c:func:`xa_alloc` to store the entry at any unused index
|
You can call :c:func:`xa_alloc` to store the entry at any unused index
|
||||||
in the XArray. If you need to modify the array from interrupt context,
|
in the XArray. If you need to modify the array from interrupt context,
|
||||||
you can use :c:func:`xa_alloc_bh` or :c:func:`xa_alloc_irq` to disable
|
you can use :c:func:`xa_alloc_bh` or :c:func:`xa_alloc_irq` to disable
|
||||||
interrupts while allocating the ID. Unlike :c:func:`xa_store`, allocating
|
interrupts while allocating the ID.
|
||||||
a ``NULL`` pointer does not delete an entry. Instead it reserves an
|
|
||||||
entry like :c:func:`xa_reserve` and you can release it using either
|
Using :c:func:`xa_store`, :c:func:`xa_cmpxchg` or :c:func:`xa_insert`
|
||||||
:c:func:`xa_erase` or :c:func:`xa_release`. To use ID assignment, the
|
will mark the entry as being allocated. Unlike a normal XArray, storing
|
||||||
XArray must be defined with :c:func:`DEFINE_XARRAY_ALLOC`, or initialised
|
``NULL`` will mark the entry as being in use, like :c:func:`xa_reserve`.
|
||||||
by passing ``XA_FLAGS_ALLOC`` to :c:func:`xa_init_flags`,
|
To free an entry, use :c:func:`xa_erase` (or :c:func:`xa_release` if
|
||||||
|
you only want to free the entry if it's ``NULL``).
|
||||||
|
|
||||||
|
You cannot use ``XA_MARK_0`` with an allocating XArray as this mark
|
||||||
|
is used to track whether an entry is free or not. The other marks are
|
||||||
|
available for your use.
|
||||||
|
|
||||||
Memory allocation
|
Memory allocation
|
||||||
-----------------
|
-----------------
|
||||||
@ -158,6 +180,8 @@ Takes RCU read lock:
|
|||||||
|
|
||||||
Takes xa_lock internally:
|
Takes xa_lock internally:
|
||||||
* :c:func:`xa_store`
|
* :c:func:`xa_store`
|
||||||
|
* :c:func:`xa_store_bh`
|
||||||
|
* :c:func:`xa_store_irq`
|
||||||
* :c:func:`xa_insert`
|
* :c:func:`xa_insert`
|
||||||
* :c:func:`xa_erase`
|
* :c:func:`xa_erase`
|
||||||
* :c:func:`xa_erase_bh`
|
* :c:func:`xa_erase_bh`
|
||||||
@ -167,6 +191,9 @@ Takes xa_lock internally:
|
|||||||
* :c:func:`xa_alloc`
|
* :c:func:`xa_alloc`
|
||||||
* :c:func:`xa_alloc_bh`
|
* :c:func:`xa_alloc_bh`
|
||||||
* :c:func:`xa_alloc_irq`
|
* :c:func:`xa_alloc_irq`
|
||||||
|
* :c:func:`xa_reserve`
|
||||||
|
* :c:func:`xa_reserve_bh`
|
||||||
|
* :c:func:`xa_reserve_irq`
|
||||||
* :c:func:`xa_destroy`
|
* :c:func:`xa_destroy`
|
||||||
* :c:func:`xa_set_mark`
|
* :c:func:`xa_set_mark`
|
||||||
* :c:func:`xa_clear_mark`
|
* :c:func:`xa_clear_mark`
|
||||||
@ -177,6 +204,7 @@ Assumes xa_lock held on entry:
|
|||||||
* :c:func:`__xa_erase`
|
* :c:func:`__xa_erase`
|
||||||
* :c:func:`__xa_cmpxchg`
|
* :c:func:`__xa_cmpxchg`
|
||||||
* :c:func:`__xa_alloc`
|
* :c:func:`__xa_alloc`
|
||||||
|
* :c:func:`__xa_reserve`
|
||||||
* :c:func:`__xa_set_mark`
|
* :c:func:`__xa_set_mark`
|
||||||
* :c:func:`__xa_clear_mark`
|
* :c:func:`__xa_clear_mark`
|
||||||
|
|
||||||
@ -234,7 +262,8 @@ Sharing the XArray with interrupt context is also possible, either
|
|||||||
using :c:func:`xa_lock_irqsave` in both the interrupt handler and process
|
using :c:func:`xa_lock_irqsave` in both the interrupt handler and process
|
||||||
context, or :c:func:`xa_lock_irq` in process context and :c:func:`xa_lock`
|
context, or :c:func:`xa_lock_irq` in process context and :c:func:`xa_lock`
|
||||||
in the interrupt handler. Some of the more common patterns have helper
|
in the interrupt handler. Some of the more common patterns have helper
|
||||||
functions such as :c:func:`xa_erase_bh` and :c:func:`xa_erase_irq`.
|
functions such as :c:func:`xa_store_bh`, :c:func:`xa_store_irq`,
|
||||||
|
:c:func:`xa_erase_bh` and :c:func:`xa_erase_irq`.
|
||||||
|
|
||||||
Sometimes you need to protect access to the XArray with a mutex because
|
Sometimes you need to protect access to the XArray with a mutex because
|
||||||
that lock sits above another mutex in the locking hierarchy. That does
|
that lock sits above another mutex in the locking hierarchy. That does
|
||||||
@ -322,7 +351,8 @@ to :c:func:`xas_retry`, and retry the operation if it returns ``true``.
|
|||||||
- :c:func:`xa_is_zero`
|
- :c:func:`xa_is_zero`
|
||||||
- Zero entries appear as ``NULL`` through the Normal API, but occupy
|
- Zero entries appear as ``NULL`` through the Normal API, but occupy
|
||||||
an entry in the XArray which can be used to reserve the index for
|
an entry in the XArray which can be used to reserve the index for
|
||||||
future use.
|
future use. This is used by allocating XArrays for allocated entries
|
||||||
|
which are ``NULL``.
|
||||||
|
|
||||||
Other internal entries may be added in the future. As far as possible, they
|
Other internal entries may be added in the future. As far as possible, they
|
||||||
will be handled by :c:func:`xas_retry`.
|
will be handled by :c:func:`xas_retry`.
|
||||||
|
@ -86,9 +86,11 @@ transitions.
|
|||||||
This will give a fine grained information about all the CPU frequency
|
This will give a fine grained information about all the CPU frequency
|
||||||
transitions. The cat output here is a two dimensional matrix, where an entry
|
transitions. The cat output here is a two dimensional matrix, where an entry
|
||||||
<i,j> (row i, column j) represents the count of number of transitions from
|
<i,j> (row i, column j) represents the count of number of transitions from
|
||||||
Freq_i to Freq_j. Freq_i is in descending order with increasing rows and
|
Freq_i to Freq_j. Freq_i rows and Freq_j columns follow the sorting order in
|
||||||
Freq_j is in descending order with increasing columns. The output here also
|
which the driver has provided the frequency table initially to the cpufreq core
|
||||||
contains the actual freq values for each row and column for better readability.
|
and so can be sorted (ascending or descending) or unsorted. The output here
|
||||||
|
also contains the actual freq values for each row and column for better
|
||||||
|
readability.
|
||||||
|
|
||||||
If the transition table is bigger than PAGE_SIZE, reading this will
|
If the transition table is bigger than PAGE_SIZE, reading this will
|
||||||
return an -EFBIG error.
|
return an -EFBIG error.
|
||||||
|
@ -27,7 +27,7 @@ SoCs:
|
|||||||
compatible = "renesas,r8a77470"
|
compatible = "renesas,r8a77470"
|
||||||
- RZ/G2M (R8A774A1)
|
- RZ/G2M (R8A774A1)
|
||||||
compatible = "renesas,r8a774a1"
|
compatible = "renesas,r8a774a1"
|
||||||
- RZ/G2E (RA8774C0)
|
- RZ/G2E (R8A774C0)
|
||||||
compatible = "renesas,r8a774c0"
|
compatible = "renesas,r8a774c0"
|
||||||
- R-Car M1A (R8A77781)
|
- R-Car M1A (R8A77781)
|
||||||
compatible = "renesas,r8a7778"
|
compatible = "renesas,r8a7778"
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
Generic ARM big LITTLE cpufreq driver's DT glue
|
|
||||||
-----------------------------------------------
|
|
||||||
|
|
||||||
This is DT specific glue layer for generic cpufreq driver for big LITTLE
|
|
||||||
systems.
|
|
||||||
|
|
||||||
Both required and optional properties listed below must be defined
|
|
||||||
under node /cpus/cpu@x. Where x is the first cpu inside a cluster.
|
|
||||||
|
|
||||||
FIXME: Cpus should boot in the order specified in DT and all cpus for a cluster
|
|
||||||
must be present contiguously. Generic DT driver will check only node 'x' for
|
|
||||||
cpu:x.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- operating-points: Refer to Documentation/devicetree/bindings/opp/opp.txt
|
|
||||||
for details
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- clock-latency: Specify the possible maximum transition latency for clock,
|
|
||||||
in unit of nanoseconds.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
cpu@0 {
|
|
||||||
compatible = "arm,cortex-a15";
|
|
||||||
reg = <0>;
|
|
||||||
next-level-cache = <&L2>;
|
|
||||||
operating-points = <
|
|
||||||
/* kHz uV */
|
|
||||||
792000 1100000
|
|
||||||
396000 950000
|
|
||||||
198000 850000
|
|
||||||
>;
|
|
||||||
clock-latency = <61036>; /* two CLK32 periods */
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu@1 {
|
|
||||||
compatible = "arm,cortex-a15";
|
|
||||||
reg = <1>;
|
|
||||||
next-level-cache = <&L2>;
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu@100 {
|
|
||||||
compatible = "arm,cortex-a7";
|
|
||||||
reg = <100>;
|
|
||||||
next-level-cache = <&L2>;
|
|
||||||
operating-points = <
|
|
||||||
/* kHz uV */
|
|
||||||
792000 950000
|
|
||||||
396000 750000
|
|
||||||
198000 450000
|
|
||||||
>;
|
|
||||||
clock-latency = <61036>; /* two CLK32 periods */
|
|
||||||
};
|
|
||||||
|
|
||||||
cpu@101 {
|
|
||||||
compatible = "arm,cortex-a7";
|
|
||||||
reg = <101>;
|
|
||||||
next-level-cache = <&L2>;
|
|
||||||
};
|
|
||||||
};
|
|
@ -1,8 +1,12 @@
|
|||||||
I2C for OMAP platforms
|
I2C for OMAP platforms
|
||||||
|
|
||||||
Required properties :
|
Required properties :
|
||||||
- compatible : Must be "ti,omap2420-i2c", "ti,omap2430-i2c", "ti,omap3-i2c"
|
- compatible : Must be
|
||||||
or "ti,omap4-i2c"
|
"ti,omap2420-i2c" for OMAP2420 SoCs
|
||||||
|
"ti,omap2430-i2c" for OMAP2430 SoCs
|
||||||
|
"ti,omap3-i2c" for OMAP3 SoCs
|
||||||
|
"ti,omap4-i2c" for OMAP4+ SoCs
|
||||||
|
"ti,am654-i2c", "ti,omap4-i2c" for AM654 SoCs
|
||||||
- ti,hwmods : Must be "i2c<n>", n being the instance number (1-based)
|
- ti,hwmods : Must be "i2c<n>", n being the instance number (1-based)
|
||||||
- #address-cells = <1>;
|
- #address-cells = <1>;
|
||||||
- #size-cells = <0>;
|
- #size-cells = <0>;
|
||||||
|
@ -17,7 +17,7 @@ Example:
|
|||||||
reg = <1>;
|
reg = <1>;
|
||||||
clocks = <&clk32m>;
|
clocks = <&clk32m>;
|
||||||
interrupt-parent = <&gpio4>;
|
interrupt-parent = <&gpio4>;
|
||||||
interrupts = <13 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <13 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
vdd-supply = <®5v0>;
|
vdd-supply = <®5v0>;
|
||||||
xceiver-supply = <®5v0>;
|
xceiver-supply = <®5v0>;
|
||||||
};
|
};
|
||||||
|
@ -5,6 +5,7 @@ Required properties:
|
|||||||
- compatible: "renesas,can-r8a7743" if CAN controller is a part of R8A7743 SoC.
|
- compatible: "renesas,can-r8a7743" if CAN controller is a part of R8A7743 SoC.
|
||||||
"renesas,can-r8a7744" if CAN controller is a part of R8A7744 SoC.
|
"renesas,can-r8a7744" if CAN controller is a part of R8A7744 SoC.
|
||||||
"renesas,can-r8a7745" if CAN controller is a part of R8A7745 SoC.
|
"renesas,can-r8a7745" if CAN controller is a part of R8A7745 SoC.
|
||||||
|
"renesas,can-r8a774a1" if CAN controller is a part of R8A774A1 SoC.
|
||||||
"renesas,can-r8a7778" if CAN controller is a part of R8A7778 SoC.
|
"renesas,can-r8a7778" if CAN controller is a part of R8A7778 SoC.
|
||||||
"renesas,can-r8a7779" if CAN controller is a part of R8A7779 SoC.
|
"renesas,can-r8a7779" if CAN controller is a part of R8A7779 SoC.
|
||||||
"renesas,can-r8a7790" if CAN controller is a part of R8A7790 SoC.
|
"renesas,can-r8a7790" if CAN controller is a part of R8A7790 SoC.
|
||||||
@ -14,26 +15,32 @@ Required properties:
|
|||||||
"renesas,can-r8a7794" if CAN controller is a part of R8A7794 SoC.
|
"renesas,can-r8a7794" if CAN controller is a part of R8A7794 SoC.
|
||||||
"renesas,can-r8a7795" if CAN controller is a part of R8A7795 SoC.
|
"renesas,can-r8a7795" if CAN controller is a part of R8A7795 SoC.
|
||||||
"renesas,can-r8a7796" if CAN controller is a part of R8A7796 SoC.
|
"renesas,can-r8a7796" if CAN controller is a part of R8A7796 SoC.
|
||||||
|
"renesas,can-r8a77965" if CAN controller is a part of R8A77965 SoC.
|
||||||
"renesas,rcar-gen1-can" for a generic R-Car Gen1 compatible device.
|
"renesas,rcar-gen1-can" for a generic R-Car Gen1 compatible device.
|
||||||
"renesas,rcar-gen2-can" for a generic R-Car Gen2 or RZ/G1
|
"renesas,rcar-gen2-can" for a generic R-Car Gen2 or RZ/G1
|
||||||
compatible device.
|
compatible device.
|
||||||
"renesas,rcar-gen3-can" for a generic R-Car Gen3 compatible device.
|
"renesas,rcar-gen3-can" for a generic R-Car Gen3 or RZ/G2
|
||||||
|
compatible device.
|
||||||
When compatible with the generic version, nodes must list the
|
When compatible with the generic version, nodes must list the
|
||||||
SoC-specific version corresponding to the platform first
|
SoC-specific version corresponding to the platform first
|
||||||
followed by the generic version.
|
followed by the generic version.
|
||||||
|
|
||||||
- reg: physical base address and size of the R-Car CAN register map.
|
- reg: physical base address and size of the R-Car CAN register map.
|
||||||
- interrupts: interrupt specifier for the sole interrupt.
|
- interrupts: interrupt specifier for the sole interrupt.
|
||||||
- clocks: phandles and clock specifiers for 3 CAN clock inputs.
|
- clocks: phandles and clock specifiers for 2 CAN clock inputs for RZ/G2
|
||||||
- clock-names: 3 clock input name strings: "clkp1", "clkp2", "can_clk".
|
devices.
|
||||||
|
phandles and clock specifiers for 3 CAN clock inputs for every other
|
||||||
|
SoC.
|
||||||
|
- clock-names: 2 clock input name strings for RZ/G2: "clkp1", "can_clk".
|
||||||
|
3 clock input name strings for every other SoC: "clkp1", "clkp2",
|
||||||
|
"can_clk".
|
||||||
- pinctrl-0: pin control group to be used for this controller.
|
- pinctrl-0: pin control group to be used for this controller.
|
||||||
- pinctrl-names: must be "default".
|
- pinctrl-names: must be "default".
|
||||||
|
|
||||||
Required properties for "renesas,can-r8a7795" and "renesas,can-r8a7796"
|
Required properties for R8A7795, R8A7796 and R8A77965:
|
||||||
compatible:
|
For the denoted SoCs, "clkp2" can be CANFD clock. This is a div6 clock and can
|
||||||
In R8A7795 and R8A7796 SoCs, "clkp2" can be CANFD clock. This is a div6 clock
|
be used by both CAN and CAN FD controller at the same time. It needs to be
|
||||||
and can be used by both CAN and CAN FD controller at the same time. It needs to
|
scaled to maximum frequency if any of these controllers use it. This is done
|
||||||
be scaled to maximum frequency if any of these controllers use it. This is done
|
|
||||||
using the below properties:
|
using the below properties:
|
||||||
|
|
||||||
- assigned-clocks: phandle of clkp2(CANFD) clock.
|
- assigned-clocks: phandle of clkp2(CANFD) clock.
|
||||||
@ -42,8 +49,9 @@ using the below properties:
|
|||||||
Optional properties:
|
Optional properties:
|
||||||
- renesas,can-clock-select: R-Car CAN Clock Source Select. Valid values are:
|
- renesas,can-clock-select: R-Car CAN Clock Source Select. Valid values are:
|
||||||
<0x0> (default) : Peripheral clock (clkp1)
|
<0x0> (default) : Peripheral clock (clkp1)
|
||||||
<0x1> : Peripheral clock (clkp2)
|
<0x1> : Peripheral clock (clkp2) (not supported by
|
||||||
<0x3> : Externally input clock
|
RZ/G2 devices)
|
||||||
|
<0x3> : External input clock
|
||||||
|
|
||||||
Example
|
Example
|
||||||
-------
|
-------
|
||||||
|
@ -7,7 +7,7 @@ limitations.
|
|||||||
Current Binding
|
Current Binding
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Switches are true Linux devices and can be probes by any means. Once
|
Switches are true Linux devices and can be probed by any means. Once
|
||||||
probed, they register to the DSA framework, passing a node
|
probed, they register to the DSA framework, passing a node
|
||||||
pointer. This node is expected to fulfil the following binding, and
|
pointer. This node is expected to fulfil the following binding, and
|
||||||
may contain additional properties as required by the device it is
|
may contain additional properties as required by the device it is
|
||||||
|
18
Documentation/i2c/busses/i2c-nvidia-gpu
Normal file
18
Documentation/i2c/busses/i2c-nvidia-gpu
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Kernel driver i2c-nvidia-gpu
|
||||||
|
|
||||||
|
Datasheet: not publicly available.
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
Ajay Gupta <ajayg@nvidia.com>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
i2c-nvidia-gpu is a driver for I2C controller included in NVIDIA Turing
|
||||||
|
and later GPUs and it is used to communicate with Type-C controller on GPUs.
|
||||||
|
|
||||||
|
If your 'lspci -v' listing shows something like the following,
|
||||||
|
|
||||||
|
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1ad9 (rev a1)
|
||||||
|
|
||||||
|
then this driver should support the I2C controller of your GPU.
|
@ -190,16 +190,7 @@ A few EV_REL codes have special meanings:
|
|||||||
* REL_WHEEL, REL_HWHEEL:
|
* REL_WHEEL, REL_HWHEEL:
|
||||||
|
|
||||||
- These codes are used for vertical and horizontal scroll wheels,
|
- These codes are used for vertical and horizontal scroll wheels,
|
||||||
respectively. The value is the number of "notches" moved on the wheel, the
|
respectively.
|
||||||
physical size of which varies by device. For high-resolution wheels (which
|
|
||||||
report multiple events for each notch of movement, or do not have notches)
|
|
||||||
this may be an approximation based on the high-resolution scroll events.
|
|
||||||
|
|
||||||
* REL_WHEEL_HI_RES:
|
|
||||||
|
|
||||||
- If a vertical scroll wheel supports high-resolution scrolling, this code
|
|
||||||
will be emitted in addition to REL_WHEEL. The value is the (approximate)
|
|
||||||
distance travelled by the user's finger, in microns.
|
|
||||||
|
|
||||||
EV_ABS
|
EV_ABS
|
||||||
------
|
------
|
||||||
|
@ -40,7 +40,7 @@ To use the :ref:`format` ioctls applications set the ``type`` field of the
|
|||||||
the desired operation. Both drivers and applications must set the remainder of
|
the desired operation. Both drivers and applications must set the remainder of
|
||||||
the :c:type:`v4l2_format` structure to 0.
|
the :c:type:`v4l2_format` structure to 0.
|
||||||
|
|
||||||
.. _v4l2-meta-format:
|
.. c:type:: v4l2_meta_format
|
||||||
|
|
||||||
.. tabularcolumns:: |p{1.4cm}|p{2.2cm}|p{13.9cm}|
|
.. tabularcolumns:: |p{1.4cm}|p{2.2cm}|p{13.9cm}|
|
||||||
|
|
||||||
|
@ -132,6 +132,11 @@ The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical
|
|||||||
- ``sdr``
|
- ``sdr``
|
||||||
- Definition of a data format, see :ref:`pixfmt`, used by SDR
|
- Definition of a data format, see :ref:`pixfmt`, used by SDR
|
||||||
capture and output devices.
|
capture and output devices.
|
||||||
|
* -
|
||||||
|
- struct :c:type:`v4l2_meta_format`
|
||||||
|
- ``meta``
|
||||||
|
- Definition of a metadata format, see :ref:`meta-formats`, used by
|
||||||
|
metadata capture devices.
|
||||||
* -
|
* -
|
||||||
- __u8
|
- __u8
|
||||||
- ``raw_data``\ [200]
|
- ``raw_data``\ [200]
|
||||||
|
@ -1056,18 +1056,23 @@ The kernel interface functions are as follows:
|
|||||||
|
|
||||||
u32 rxrpc_kernel_check_life(struct socket *sock,
|
u32 rxrpc_kernel_check_life(struct socket *sock,
|
||||||
struct rxrpc_call *call);
|
struct rxrpc_call *call);
|
||||||
|
void rxrpc_kernel_probe_life(struct socket *sock,
|
||||||
|
struct rxrpc_call *call);
|
||||||
|
|
||||||
This returns a number that is updated when ACKs are received from the peer
|
The first function returns a number that is updated when ACKs are received
|
||||||
(notably including PING RESPONSE ACKs which we can elicit by sending PING
|
from the peer (notably including PING RESPONSE ACKs which we can elicit by
|
||||||
ACKs to see if the call still exists on the server). The caller should
|
sending PING ACKs to see if the call still exists on the server). The
|
||||||
compare the numbers of two calls to see if the call is still alive after
|
caller should compare the numbers of two calls to see if the call is still
|
||||||
waiting for a suitable interval.
|
alive after waiting for a suitable interval.
|
||||||
|
|
||||||
This allows the caller to work out if the server is still contactable and
|
This allows the caller to work out if the server is still contactable and
|
||||||
if the call is still alive on the server whilst waiting for the server to
|
if the call is still alive on the server whilst waiting for the server to
|
||||||
process a client operation.
|
process a client operation.
|
||||||
|
|
||||||
This function may transmit a PING ACK.
|
The second function causes a ping ACK to be transmitted to try to provoke
|
||||||
|
the peer into responding, which would then cause the value returned by the
|
||||||
|
first function to change. Note that this must be called in TASK_RUNNING
|
||||||
|
state.
|
||||||
|
|
||||||
(*) Get reply timestamp.
|
(*) Get reply timestamp.
|
||||||
|
|
||||||
|
@ -34,23 +34,24 @@ __________________|____________|__________________|_________|___________________
|
|||||||
____________________________________________________________|___________________________________________________________
|
____________________________________________________________|___________________________________________________________
|
||||||
| | | |
|
| | | |
|
||||||
ffff800000000000 | -128 TB | ffff87ffffffffff | 8 TB | ... guard hole, also reserved for hypervisor
|
ffff800000000000 | -128 TB | ffff87ffffffffff | 8 TB | ... guard hole, also reserved for hypervisor
|
||||||
ffff880000000000 | -120 TB | ffffc7ffffffffff | 64 TB | direct mapping of all physical memory (page_offset_base)
|
ffff880000000000 | -120 TB | ffff887fffffffff | 0.5 TB | LDT remap for PTI
|
||||||
ffffc80000000000 | -56 TB | ffffc8ffffffffff | 1 TB | ... unused hole
|
ffff888000000000 | -119.5 TB | ffffc87fffffffff | 64 TB | direct mapping of all physical memory (page_offset_base)
|
||||||
|
ffffc88000000000 | -55.5 TB | ffffc8ffffffffff | 0.5 TB | ... unused hole
|
||||||
ffffc90000000000 | -55 TB | ffffe8ffffffffff | 32 TB | vmalloc/ioremap space (vmalloc_base)
|
ffffc90000000000 | -55 TB | ffffe8ffffffffff | 32 TB | vmalloc/ioremap space (vmalloc_base)
|
||||||
ffffe90000000000 | -23 TB | ffffe9ffffffffff | 1 TB | ... unused hole
|
ffffe90000000000 | -23 TB | ffffe9ffffffffff | 1 TB | ... unused hole
|
||||||
ffffea0000000000 | -22 TB | ffffeaffffffffff | 1 TB | virtual memory map (vmemmap_base)
|
ffffea0000000000 | -22 TB | ffffeaffffffffff | 1 TB | virtual memory map (vmemmap_base)
|
||||||
ffffeb0000000000 | -21 TB | ffffebffffffffff | 1 TB | ... unused hole
|
ffffeb0000000000 | -21 TB | ffffebffffffffff | 1 TB | ... unused hole
|
||||||
ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN shadow memory
|
ffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN shadow memory
|
||||||
|
__________________|____________|__________________|_________|____________________________________________________________
|
||||||
|
|
|
||||||
|
| Identical layout to the 56-bit one from here on:
|
||||||
|
____________________________________________________________|____________________________________________________________
|
||||||
|
| | | |
|
||||||
fffffc0000000000 | -4 TB | fffffdffffffffff | 2 TB | ... unused hole
|
fffffc0000000000 | -4 TB | fffffdffffffffff | 2 TB | ... unused hole
|
||||||
| | | | vaddr_end for KASLR
|
| | | | vaddr_end for KASLR
|
||||||
fffffe0000000000 | -2 TB | fffffe7fffffffff | 0.5 TB | cpu_entry_area mapping
|
fffffe0000000000 | -2 TB | fffffe7fffffffff | 0.5 TB | cpu_entry_area mapping
|
||||||
fffffe8000000000 | -1.5 TB | fffffeffffffffff | 0.5 TB | LDT remap for PTI
|
fffffe8000000000 | -1.5 TB | fffffeffffffffff | 0.5 TB | ... unused hole
|
||||||
ffffff0000000000 | -1 TB | ffffff7fffffffff | 0.5 TB | %esp fixup stacks
|
ffffff0000000000 | -1 TB | ffffff7fffffffff | 0.5 TB | %esp fixup stacks
|
||||||
__________________|____________|__________________|_________|____________________________________________________________
|
|
||||||
|
|
|
||||||
| Identical layout to the 47-bit one from here on:
|
|
||||||
____________________________________________________________|____________________________________________________________
|
|
||||||
| | | |
|
|
||||||
ffffff8000000000 | -512 GB | ffffffeeffffffff | 444 GB | ... unused hole
|
ffffff8000000000 | -512 GB | ffffffeeffffffff | 444 GB | ... unused hole
|
||||||
ffffffef00000000 | -68 GB | fffffffeffffffff | 64 GB | EFI region mapping space
|
ffffffef00000000 | -68 GB | fffffffeffffffff | 64 GB | EFI region mapping space
|
||||||
ffffffff00000000 | -4 GB | ffffffff7fffffff | 2 GB | ... unused hole
|
ffffffff00000000 | -4 GB | ffffffff7fffffff | 2 GB | ... unused hole
|
||||||
@ -83,7 +84,7 @@ Notes:
|
|||||||
__________________|____________|__________________|_________|___________________________________________________________
|
__________________|____________|__________________|_________|___________________________________________________________
|
||||||
| | | |
|
| | | |
|
||||||
0000800000000000 | +64 PB | ffff7fffffffffff | ~16K PB | ... huge, still almost 64 bits wide hole of non-canonical
|
0000800000000000 | +64 PB | ffff7fffffffffff | ~16K PB | ... huge, still almost 64 bits wide hole of non-canonical
|
||||||
| | | | virtual memory addresses up to the -128 TB
|
| | | | virtual memory addresses up to the -64 PB
|
||||||
| | | | starting offset of kernel mappings.
|
| | | | starting offset of kernel mappings.
|
||||||
__________________|____________|__________________|_________|___________________________________________________________
|
__________________|____________|__________________|_________|___________________________________________________________
|
||||||
|
|
|
|
||||||
@ -91,23 +92,24 @@ __________________|____________|__________________|_________|___________________
|
|||||||
____________________________________________________________|___________________________________________________________
|
____________________________________________________________|___________________________________________________________
|
||||||
| | | |
|
| | | |
|
||||||
ff00000000000000 | -64 PB | ff0fffffffffffff | 4 PB | ... guard hole, also reserved for hypervisor
|
ff00000000000000 | -64 PB | ff0fffffffffffff | 4 PB | ... guard hole, also reserved for hypervisor
|
||||||
ff10000000000000 | -60 PB | ff8fffffffffffff | 32 PB | direct mapping of all physical memory (page_offset_base)
|
ff10000000000000 | -60 PB | ff10ffffffffffff | 0.25 PB | LDT remap for PTI
|
||||||
ff90000000000000 | -28 PB | ff9fffffffffffff | 4 PB | LDT remap for PTI
|
ff11000000000000 | -59.75 PB | ff90ffffffffffff | 32 PB | direct mapping of all physical memory (page_offset_base)
|
||||||
|
ff91000000000000 | -27.75 PB | ff9fffffffffffff | 3.75 PB | ... unused hole
|
||||||
ffa0000000000000 | -24 PB | ffd1ffffffffffff | 12.5 PB | vmalloc/ioremap space (vmalloc_base)
|
ffa0000000000000 | -24 PB | ffd1ffffffffffff | 12.5 PB | vmalloc/ioremap space (vmalloc_base)
|
||||||
ffd2000000000000 | -11.5 PB | ffd3ffffffffffff | 0.5 PB | ... unused hole
|
ffd2000000000000 | -11.5 PB | ffd3ffffffffffff | 0.5 PB | ... unused hole
|
||||||
ffd4000000000000 | -11 PB | ffd5ffffffffffff | 0.5 PB | virtual memory map (vmemmap_base)
|
ffd4000000000000 | -11 PB | ffd5ffffffffffff | 0.5 PB | virtual memory map (vmemmap_base)
|
||||||
ffd6000000000000 | -10.5 PB | ffdeffffffffffff | 2.25 PB | ... unused hole
|
ffd6000000000000 | -10.5 PB | ffdeffffffffffff | 2.25 PB | ... unused hole
|
||||||
ffdf000000000000 | -8.25 PB | fffffdffffffffff | ~8 PB | KASAN shadow memory
|
ffdf000000000000 | -8.25 PB | fffffdffffffffff | ~8 PB | KASAN shadow memory
|
||||||
fffffc0000000000 | -4 TB | fffffdffffffffff | 2 TB | ... unused hole
|
|
||||||
| | | | vaddr_end for KASLR
|
|
||||||
fffffe0000000000 | -2 TB | fffffe7fffffffff | 0.5 TB | cpu_entry_area mapping
|
|
||||||
fffffe8000000000 | -1.5 TB | fffffeffffffffff | 0.5 TB | ... unused hole
|
|
||||||
ffffff0000000000 | -1 TB | ffffff7fffffffff | 0.5 TB | %esp fixup stacks
|
|
||||||
__________________|____________|__________________|_________|____________________________________________________________
|
__________________|____________|__________________|_________|____________________________________________________________
|
||||||
|
|
|
|
||||||
| Identical layout to the 47-bit one from here on:
|
| Identical layout to the 47-bit one from here on:
|
||||||
____________________________________________________________|____________________________________________________________
|
____________________________________________________________|____________________________________________________________
|
||||||
| | | |
|
| | | |
|
||||||
|
fffffc0000000000 | -4 TB | fffffdffffffffff | 2 TB | ... unused hole
|
||||||
|
| | | | vaddr_end for KASLR
|
||||||
|
fffffe0000000000 | -2 TB | fffffe7fffffffff | 0.5 TB | cpu_entry_area mapping
|
||||||
|
fffffe8000000000 | -1.5 TB | fffffeffffffffff | 0.5 TB | ... unused hole
|
||||||
|
ffffff0000000000 | -1 TB | ffffff7fffffffff | 0.5 TB | %esp fixup stacks
|
||||||
ffffff8000000000 | -512 GB | ffffffeeffffffff | 444 GB | ... unused hole
|
ffffff8000000000 | -512 GB | ffffffeeffffffff | 444 GB | ... unused hole
|
||||||
ffffffef00000000 | -68 GB | fffffffeffffffff | 64 GB | EFI region mapping space
|
ffffffef00000000 | -68 GB | fffffffeffffffff | 64 GB | EFI region mapping space
|
||||||
ffffffff00000000 | -4 GB | ffffffff7fffffff | 2 GB | ... unused hole
|
ffffffff00000000 | -4 GB | ffffffff7fffffff | 2 GB | ... unused hole
|
||||||
|
@ -25,7 +25,7 @@ Offset Proto Name Meaning
|
|||||||
0C8/004 ALL ext_cmd_line_ptr cmd_line_ptr high 32bits
|
0C8/004 ALL ext_cmd_line_ptr cmd_line_ptr high 32bits
|
||||||
140/080 ALL edid_info Video mode setup (struct edid_info)
|
140/080 ALL edid_info Video mode setup (struct edid_info)
|
||||||
1C0/020 ALL efi_info EFI 32 information (struct efi_info)
|
1C0/020 ALL efi_info EFI 32 information (struct efi_info)
|
||||||
1E0/004 ALL alk_mem_k Alternative mem check, in KB
|
1E0/004 ALL alt_mem_k Alternative mem check, in KB
|
||||||
1E4/004 ALL scratch Scratch field for the kernel setup code
|
1E4/004 ALL scratch Scratch field for the kernel setup code
|
||||||
1E8/001 ALL e820_entries Number of entries in e820_table (below)
|
1E8/001 ALL e820_entries Number of entries in e820_table (below)
|
||||||
1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
|
1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
|
||||||
|
82
MAINTAINERS
82
MAINTAINERS
@ -180,6 +180,7 @@ F: drivers/net/hamradio/6pack.c
|
|||||||
|
|
||||||
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
8169 10/100/1000 GIGABIT ETHERNET DRIVER
|
||||||
M: Realtek linux nic maintainers <nic_swsd@realtek.com>
|
M: Realtek linux nic maintainers <nic_swsd@realtek.com>
|
||||||
|
M: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/realtek/r8169.c
|
F: drivers/net/ethernet/realtek/r8169.c
|
||||||
@ -717,7 +718,7 @@ F: include/linux/mfd/altera-a10sr.h
|
|||||||
F: include/dt-bindings/reset/altr,rst-mgr-a10sr.h
|
F: include/dt-bindings/reset/altr,rst-mgr-a10sr.h
|
||||||
|
|
||||||
ALTERA TRIPLE SPEED ETHERNET DRIVER
|
ALTERA TRIPLE SPEED ETHERNET DRIVER
|
||||||
M: Vince Bridgers <vbridger@opensource.altera.com>
|
M: Thor Thayer <thor.thayer@linux.intel.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
|
L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -3276,6 +3277,12 @@ F: include/uapi/linux/caif/
|
|||||||
F: include/net/caif/
|
F: include/net/caif/
|
||||||
F: net/caif/
|
F: net/caif/
|
||||||
|
|
||||||
|
CAKE QDISC
|
||||||
|
M: Toke Høiland-Jørgensen <toke@toke.dk>
|
||||||
|
L: cake@lists.bufferbloat.net (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: net/sched/sch_cake.c
|
||||||
|
|
||||||
CALGARY x86-64 IOMMU
|
CALGARY x86-64 IOMMU
|
||||||
M: Muli Ben-Yehuda <mulix@mulix.org>
|
M: Muli Ben-Yehuda <mulix@mulix.org>
|
||||||
M: Jon Mason <jdmason@kudzu.us>
|
M: Jon Mason <jdmason@kudzu.us>
|
||||||
@ -5528,6 +5535,7 @@ 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: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
M: Heiner Kallweit <hkallweit1@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/ABI/testing/sysfs-bus-mdio
|
F: Documentation/ABI/testing/sysfs-bus-mdio
|
||||||
@ -6299,6 +6307,7 @@ F: tools/testing/selftests/gpio/
|
|||||||
|
|
||||||
GPIO SUBSYSTEM
|
GPIO SUBSYSTEM
|
||||||
M: Linus Walleij <linus.walleij@linaro.org>
|
M: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
M: Bartosz Golaszewski <bgolaszewski@baylibre.com>
|
||||||
L: linux-gpio@vger.kernel.org
|
L: linux-gpio@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -6607,9 +6616,9 @@ F: arch/*/include/asm/suspend*.h
|
|||||||
|
|
||||||
HID CORE LAYER
|
HID CORE LAYER
|
||||||
M: Jiri Kosina <jikos@kernel.org>
|
M: Jiri Kosina <jikos@kernel.org>
|
||||||
R: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
M: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||||
L: linux-input@vger.kernel.org
|
L: linux-input@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/hid/
|
F: drivers/hid/
|
||||||
F: include/linux/hid*
|
F: include/linux/hid*
|
||||||
@ -6861,6 +6870,13 @@ L: linux-acpi@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/i2c/i2c-core-acpi.c
|
F: drivers/i2c/i2c-core-acpi.c
|
||||||
|
|
||||||
|
I2C CONTROLLER DRIVER FOR NVIDIA GPU
|
||||||
|
M: Ajay Gupta <ajayg@nvidia.com>
|
||||||
|
L: linux-i2c@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/i2c/busses/i2c-nvidia-gpu
|
||||||
|
F: drivers/i2c/busses/i2c-nvidia-gpu.c
|
||||||
|
|
||||||
I2C MUXES
|
I2C MUXES
|
||||||
M: Peter Rosin <peda@axentia.se>
|
M: Peter Rosin <peda@axentia.se>
|
||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
@ -7429,6 +7445,20 @@ S: Maintained
|
|||||||
F: Documentation/fb/intelfb.txt
|
F: Documentation/fb/intelfb.txt
|
||||||
F: drivers/video/fbdev/intelfb/
|
F: drivers/video/fbdev/intelfb/
|
||||||
|
|
||||||
|
INTEL GPIO DRIVERS
|
||||||
|
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||||
|
L: linux-gpio@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
|
||||||
|
F: drivers/gpio/gpio-ich.c
|
||||||
|
F: drivers/gpio/gpio-intel-mid.c
|
||||||
|
F: drivers/gpio/gpio-lynxpoint.c
|
||||||
|
F: drivers/gpio/gpio-merrifield.c
|
||||||
|
F: drivers/gpio/gpio-ml-ioh.c
|
||||||
|
F: drivers/gpio/gpio-pch.c
|
||||||
|
F: drivers/gpio/gpio-sch.c
|
||||||
|
F: drivers/gpio/gpio-sodaville.c
|
||||||
|
|
||||||
INTEL GVT-g DRIVERS (Intel GPU Virtualization)
|
INTEL GVT-g DRIVERS (Intel GPU Virtualization)
|
||||||
M: Zhenyu Wang <zhenyuw@linux.intel.com>
|
M: Zhenyu Wang <zhenyuw@linux.intel.com>
|
||||||
M: Zhi Wang <zhi.a.wang@intel.com>
|
M: Zhi Wang <zhi.a.wang@intel.com>
|
||||||
@ -7439,12 +7469,6 @@ T: git https://github.com/intel/gvt-linux.git
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/i915/gvt/
|
F: drivers/gpu/drm/i915/gvt/
|
||||||
|
|
||||||
INTEL PMIC GPIO DRIVER
|
|
||||||
R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/gpio/gpio-*cove.c
|
|
||||||
F: drivers/gpio/gpio-msic.c
|
|
||||||
|
|
||||||
INTEL HID EVENT DRIVER
|
INTEL HID EVENT DRIVER
|
||||||
M: Alex Hung <alex.hung@canonical.com>
|
M: Alex Hung <alex.hung@canonical.com>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
@ -7532,12 +7556,6 @@ W: https://01.org/linux-acpi
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/intel_menlow.c
|
F: drivers/platform/x86/intel_menlow.c
|
||||||
|
|
||||||
INTEL MERRIFIELD GPIO DRIVER
|
|
||||||
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
|
||||||
L: linux-gpio@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/gpio/gpio-merrifield.c
|
|
||||||
|
|
||||||
INTEL MIC DRIVERS (mic)
|
INTEL MIC DRIVERS (mic)
|
||||||
M: Sudeep Dutt <sudeep.dutt@intel.com>
|
M: Sudeep Dutt <sudeep.dutt@intel.com>
|
||||||
M: Ashutosh Dixit <ashutosh.dixit@intel.com>
|
M: Ashutosh Dixit <ashutosh.dixit@intel.com>
|
||||||
@ -7570,6 +7588,13 @@ F: drivers/platform/x86/intel_punit_ipc.c
|
|||||||
F: arch/x86/include/asm/intel_pmc_ipc.h
|
F: arch/x86/include/asm/intel_pmc_ipc.h
|
||||||
F: arch/x86/include/asm/intel_punit_ipc.h
|
F: arch/x86/include/asm/intel_punit_ipc.h
|
||||||
|
|
||||||
|
INTEL PMIC GPIO DRIVERS
|
||||||
|
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||||
|
S: Maintained
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
|
||||||
|
F: drivers/gpio/gpio-*cove.c
|
||||||
|
F: drivers/gpio/gpio-msic.c
|
||||||
|
|
||||||
INTEL MULTIFUNCTION PMIC DEVICE DRIVERS
|
INTEL MULTIFUNCTION PMIC DEVICE DRIVERS
|
||||||
R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -8367,7 +8392,7 @@ F: drivers/media/dvb-frontends/lgdt3305.*
|
|||||||
LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
|
LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
|
||||||
M: Viresh Kumar <vireshk@kernel.org>
|
M: Viresh Kumar <vireshk@kernel.org>
|
||||||
L: linux-ide@vger.kernel.org
|
L: linux-ide@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/pata_arasan_cf_data.h
|
F: include/linux/pata_arasan_cf_data.h
|
||||||
F: drivers/ata/pata_arasan_cf.c
|
F: drivers/ata/pata_arasan_cf.c
|
||||||
@ -8384,7 +8409,7 @@ F: drivers/ata/ata_generic.c
|
|||||||
LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
|
LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
|
||||||
M: Linus Walleij <linus.walleij@linaro.org>
|
M: Linus Walleij <linus.walleij@linaro.org>
|
||||||
L: linux-ide@vger.kernel.org
|
L: linux-ide@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/ata/pata_ftide010.c
|
F: drivers/ata/pata_ftide010.c
|
||||||
F: drivers/ata/sata_gemini.c
|
F: drivers/ata/sata_gemini.c
|
||||||
@ -8403,7 +8428,7 @@ F: include/linux/ahci_platform.h
|
|||||||
LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER
|
LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER
|
||||||
M: Mikael Pettersson <mikpelinux@gmail.com>
|
M: Mikael Pettersson <mikpelinux@gmail.com>
|
||||||
L: linux-ide@vger.kernel.org
|
L: linux-ide@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/ata/sata_promise.*
|
F: drivers/ata/sata_promise.*
|
||||||
|
|
||||||
@ -10784,6 +10809,14 @@ L: linux-omap@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-omap2/omap_hwmod.*
|
F: arch/arm/mach-omap2/omap_hwmod.*
|
||||||
|
|
||||||
|
OMAP I2C DRIVER
|
||||||
|
M: Vignesh R <vigneshr@ti.com>
|
||||||
|
L: linux-omap@vger.kernel.org
|
||||||
|
L: linux-i2c@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-omap.txt
|
||||||
|
F: drivers/i2c/busses/i2c-omap.c
|
||||||
|
|
||||||
OMAP IMAGING SUBSYSTEM (OMAP3 ISP and OMAP4 ISS)
|
OMAP IMAGING SUBSYSTEM (OMAP3 ISP and OMAP4 ISS)
|
||||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
@ -10793,9 +10826,9 @@ F: drivers/media/platform/omap3isp/
|
|||||||
F: drivers/staging/media/omap4iss/
|
F: drivers/staging/media/omap4iss/
|
||||||
|
|
||||||
OMAP MMC SUPPORT
|
OMAP MMC SUPPORT
|
||||||
M: Jarkko Lavinen <jarkko.lavinen@nokia.com>
|
M: Aaro Koskinen <aaro.koskinen@iki.fi>
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/mmc/host/omap.c
|
F: drivers/mmc/host/omap.c
|
||||||
|
|
||||||
OMAP POWER MANAGEMENT SUPPORT
|
OMAP POWER MANAGEMENT SUPPORT
|
||||||
@ -11730,6 +11763,7 @@ F: Documentation/devicetree/bindings/pinctrl/fsl,*
|
|||||||
PIN CONTROLLER - INTEL
|
PIN CONTROLLER - INTEL
|
||||||
M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||||
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/pinctrl/intel/
|
F: drivers/pinctrl/intel/
|
||||||
|
|
||||||
@ -13962,11 +13996,10 @@ F: drivers/tty/serial/sunzilog.h
|
|||||||
F: drivers/tty/vcc.c
|
F: drivers/tty/vcc.c
|
||||||
|
|
||||||
SPARSE CHECKER
|
SPARSE CHECKER
|
||||||
M: "Christopher Li" <sparse@chrisli.org>
|
M: "Luc Van Oostenryck" <luc.vanoostenryck@gmail.com>
|
||||||
L: linux-sparse@vger.kernel.org
|
L: linux-sparse@vger.kernel.org
|
||||||
W: https://sparse.wiki.kernel.org/
|
W: https://sparse.wiki.kernel.org/
|
||||||
T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
|
T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
|
||||||
T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
|
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/compiler.h
|
F: include/linux/compiler.h
|
||||||
|
|
||||||
@ -14063,6 +14096,7 @@ F: Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt
|
|||||||
|
|
||||||
STABLE BRANCH
|
STABLE BRANCH
|
||||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
M: Sasha Levin <sashal@kernel.org>
|
||||||
L: stable@vger.kernel.org
|
L: stable@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/process/stable-kernel-rules.rst
|
F: Documentation/process/stable-kernel-rules.rst
|
||||||
@ -15436,9 +15470,9 @@ F: include/linux/usb/gadget*
|
|||||||
|
|
||||||
USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
|
USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
|
||||||
M: Jiri Kosina <jikos@kernel.org>
|
M: Jiri Kosina <jikos@kernel.org>
|
||||||
R: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
M: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/hid/hiddev.txt
|
F: Documentation/hid/hiddev.txt
|
||||||
F: drivers/hid/usbhid/
|
F: drivers/hid/usbhid/
|
||||||
|
4
Makefile
4
Makefile
@ -2,8 +2,8 @@
|
|||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 20
|
PATCHLEVEL = 20
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc4
|
||||||
NAME = "People's Front"
|
NAME = Shy Crocodile
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
@ -73,9 +73,15 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
#define user_termios_to_kernel_termios(k, u) \
|
#define user_termios_to_kernel_termios(k, u) \
|
||||||
copy_from_user(k, u, sizeof(struct termios))
|
copy_from_user(k, u, sizeof(struct termios2))
|
||||||
|
|
||||||
#define kernel_termios_to_user_termios(u, k) \
|
#define kernel_termios_to_user_termios(u, k) \
|
||||||
|
copy_to_user(u, k, sizeof(struct termios2))
|
||||||
|
|
||||||
|
#define user_termios_to_kernel_termios_1(k, u) \
|
||||||
|
copy_from_user(k, u, sizeof(struct termios))
|
||||||
|
|
||||||
|
#define kernel_termios_to_user_termios_1(u, k) \
|
||||||
copy_to_user(u, k, sizeof(struct termios))
|
copy_to_user(u, k, sizeof(struct termios))
|
||||||
|
|
||||||
#endif /* _ALPHA_TERMIOS_H */
|
#endif /* _ALPHA_TERMIOS_H */
|
||||||
|
@ -32,6 +32,11 @@
|
|||||||
#define TCXONC _IO('t', 30)
|
#define TCXONC _IO('t', 30)
|
||||||
#define TCFLSH _IO('t', 31)
|
#define TCFLSH _IO('t', 31)
|
||||||
|
|
||||||
|
#define TCGETS2 _IOR('T', 42, struct termios2)
|
||||||
|
#define TCSETS2 _IOW('T', 43, struct termios2)
|
||||||
|
#define TCSETSW2 _IOW('T', 44, struct termios2)
|
||||||
|
#define TCSETSF2 _IOW('T', 45, struct termios2)
|
||||||
|
|
||||||
#define TIOCSWINSZ _IOW('t', 103, struct winsize)
|
#define TIOCSWINSZ _IOW('t', 103, struct winsize)
|
||||||
#define TIOCGWINSZ _IOR('t', 104, struct winsize)
|
#define TIOCGWINSZ _IOR('t', 104, struct winsize)
|
||||||
#define TIOCSTART _IO('t', 110) /* start output, like ^Q */
|
#define TIOCSTART _IO('t', 110) /* start output, like ^Q */
|
||||||
|
@ -26,6 +26,19 @@ struct termios {
|
|||||||
speed_t c_ospeed; /* output speed */
|
speed_t c_ospeed; /* output speed */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Alpha has identical termios and termios2 */
|
||||||
|
|
||||||
|
struct termios2 {
|
||||||
|
tcflag_t c_iflag; /* input mode flags */
|
||||||
|
tcflag_t c_oflag; /* output mode flags */
|
||||||
|
tcflag_t c_cflag; /* control mode flags */
|
||||||
|
tcflag_t c_lflag; /* local mode flags */
|
||||||
|
cc_t c_cc[NCCS]; /* control characters */
|
||||||
|
cc_t c_line; /* line discipline (== c_cc[19]) */
|
||||||
|
speed_t c_ispeed; /* input speed */
|
||||||
|
speed_t c_ospeed; /* output speed */
|
||||||
|
};
|
||||||
|
|
||||||
/* Alpha has matching termios and ktermios */
|
/* Alpha has matching termios and ktermios */
|
||||||
|
|
||||||
struct ktermios {
|
struct ktermios {
|
||||||
@ -152,6 +165,7 @@ struct ktermios {
|
|||||||
#define B3000000 00034
|
#define B3000000 00034
|
||||||
#define B3500000 00035
|
#define B3500000 00035
|
||||||
#define B4000000 00036
|
#define B4000000 00036
|
||||||
|
#define BOTHER 00037
|
||||||
|
|
||||||
#define CSIZE 00001400
|
#define CSIZE 00001400
|
||||||
#define CS5 00000000
|
#define CS5 00000000
|
||||||
@ -169,6 +183,9 @@ struct ktermios {
|
|||||||
#define CMSPAR 010000000000 /* mark or space (stick) parity */
|
#define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||||
#define CRTSCTS 020000000000 /* flow control */
|
#define CRTSCTS 020000000000 /* flow control */
|
||||||
|
|
||||||
|
#define CIBAUD 07600000
|
||||||
|
#define IBSHIFT 16
|
||||||
|
|
||||||
/* c_lflag bits */
|
/* c_lflag bits */
|
||||||
#define ISIG 0x00000080
|
#define ISIG 0x00000080
|
||||||
#define ICANON 0x00000100
|
#define ICANON 0x00000100
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
stdout-path = "&uart1:115200n8";
|
stdout-path = "serial0:115200n8";
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@70000000 {
|
memory@70000000 {
|
||||||
|
@ -740,7 +740,7 @@
|
|||||||
i2c1: i2c@21a0000 {
|
i2c1: i2c@21a0000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "fs,imx6sll-i2c", "fsl,imx21-i2c";
|
compatible = "fsl,imx6sll-i2c", "fsl,imx21-i2c";
|
||||||
reg = <0x021a0000 0x4000>;
|
reg = <0x021a0000 0x4000>;
|
||||||
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX6SLL_CLK_I2C1>;
|
clocks = <&clks IMX6SLL_CLK_I2C1>;
|
||||||
|
@ -117,7 +117,9 @@
|
|||||||
regulator-name = "enet_3v3";
|
regulator-name = "enet_3v3";
|
||||||
regulator-min-microvolt = <3300000>;
|
regulator-min-microvolt = <3300000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
|
gpio = <&gpio2 6 GPIO_ACTIVE_LOW>;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
reg_pcie_gpio: regulator-pcie-gpio {
|
reg_pcie_gpio: regulator-pcie-gpio {
|
||||||
@ -180,6 +182,7 @@
|
|||||||
phy-supply = <®_enet_3v3>;
|
phy-supply = <®_enet_3v3>;
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii";
|
||||||
phy-handle = <ðphy1>;
|
phy-handle = <ðphy1>;
|
||||||
|
phy-reset-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
mdio {
|
mdio {
|
||||||
@ -373,6 +376,8 @@
|
|||||||
MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081
|
MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081
|
||||||
MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081
|
MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081
|
||||||
MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91
|
MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91
|
||||||
|
/* phy reset */
|
||||||
|
MX6SX_PAD_ENET2_CRS__GPIO2_IO_7 0x10b0
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@
|
|||||||
compatible = "fsl,vf610m4";
|
compatible = "fsl,vf610m4";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "console=ttyLP2,115200 clk_ignore_unused init=/linuxrc rw";
|
bootargs = "clk_ignore_unused init=/linuxrc rw";
|
||||||
stdout-path = "&uart2";
|
stdout-path = "serial2:115200";
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@8c000000 {
|
memory@8c000000 {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
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_CGROUPS=y
|
CONFIG_CGROUPS=y
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_EMBEDDED=y
|
CONFIG_EMBEDDED=y
|
||||||
|
@ -111,6 +111,7 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
extern unsigned int processor_id;
|
extern unsigned int processor_id;
|
||||||
|
struct proc_info_list *lookup_processor(u32 midr);
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15
|
#ifdef CONFIG_CPU_CP15
|
||||||
#define read_cpuid(reg) \
|
#define read_cpuid(reg) \
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#ifndef _ASM_PGTABLE_2LEVEL_H
|
#ifndef _ASM_PGTABLE_2LEVEL_H
|
||||||
#define _ASM_PGTABLE_2LEVEL_H
|
#define _ASM_PGTABLE_2LEVEL_H
|
||||||
|
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hardware-wise, we have a two level page table structure, where the first
|
* Hardware-wise, we have a two level page table structure, where the first
|
||||||
|
@ -23,7 +23,7 @@ struct mm_struct;
|
|||||||
/*
|
/*
|
||||||
* Don't change this structure - ASM code relies on it.
|
* Don't change this structure - ASM code relies on it.
|
||||||
*/
|
*/
|
||||||
extern struct processor {
|
struct processor {
|
||||||
/* MISC
|
/* MISC
|
||||||
* get data abort address/flags
|
* get data abort address/flags
|
||||||
*/
|
*/
|
||||||
@ -79,9 +79,13 @@ extern struct processor {
|
|||||||
unsigned int suspend_size;
|
unsigned int suspend_size;
|
||||||
void (*do_suspend)(void *);
|
void (*do_suspend)(void *);
|
||||||
void (*do_resume)(void *);
|
void (*do_resume)(void *);
|
||||||
} processor;
|
};
|
||||||
|
|
||||||
#ifndef MULTI_CPU
|
#ifndef MULTI_CPU
|
||||||
|
static inline void init_proc_vtable(const struct processor *p)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
extern void cpu_proc_init(void);
|
extern void cpu_proc_init(void);
|
||||||
extern void cpu_proc_fin(void);
|
extern void cpu_proc_fin(void);
|
||||||
extern int cpu_do_idle(void);
|
extern int cpu_do_idle(void);
|
||||||
@ -98,17 +102,50 @@ extern void cpu_reset(unsigned long addr, bool hvc) __attribute__((noreturn));
|
|||||||
extern void cpu_do_suspend(void *);
|
extern void cpu_do_suspend(void *);
|
||||||
extern void cpu_do_resume(void *);
|
extern void cpu_do_resume(void *);
|
||||||
#else
|
#else
|
||||||
#define cpu_proc_init processor._proc_init
|
|
||||||
#define cpu_proc_fin processor._proc_fin
|
|
||||||
#define cpu_reset processor.reset
|
|
||||||
#define cpu_do_idle processor._do_idle
|
|
||||||
#define cpu_dcache_clean_area processor.dcache_clean_area
|
|
||||||
#define cpu_set_pte_ext processor.set_pte_ext
|
|
||||||
#define cpu_do_switch_mm processor.switch_mm
|
|
||||||
|
|
||||||
/* These three are private to arch/arm/kernel/suspend.c */
|
extern struct processor processor;
|
||||||
#define cpu_do_suspend processor.do_suspend
|
#if defined(CONFIG_BIG_LITTLE) && defined(CONFIG_HARDEN_BRANCH_PREDICTOR)
|
||||||
#define cpu_do_resume processor.do_resume
|
#include <linux/smp.h>
|
||||||
|
/*
|
||||||
|
* This can't be a per-cpu variable because we need to access it before
|
||||||
|
* per-cpu has been initialised. We have a couple of functions that are
|
||||||
|
* called in a pre-emptible context, and so can't use smp_processor_id()
|
||||||
|
* there, hence PROC_TABLE(). We insist in init_proc_vtable() that the
|
||||||
|
* function pointers for these are identical across all CPUs.
|
||||||
|
*/
|
||||||
|
extern struct processor *cpu_vtable[];
|
||||||
|
#define PROC_VTABLE(f) cpu_vtable[smp_processor_id()]->f
|
||||||
|
#define PROC_TABLE(f) cpu_vtable[0]->f
|
||||||
|
static inline void init_proc_vtable(const struct processor *p)
|
||||||
|
{
|
||||||
|
unsigned int cpu = smp_processor_id();
|
||||||
|
*cpu_vtable[cpu] = *p;
|
||||||
|
WARN_ON_ONCE(cpu_vtable[cpu]->dcache_clean_area !=
|
||||||
|
cpu_vtable[0]->dcache_clean_area);
|
||||||
|
WARN_ON_ONCE(cpu_vtable[cpu]->set_pte_ext !=
|
||||||
|
cpu_vtable[0]->set_pte_ext);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define PROC_VTABLE(f) processor.f
|
||||||
|
#define PROC_TABLE(f) processor.f
|
||||||
|
static inline void init_proc_vtable(const struct processor *p)
|
||||||
|
{
|
||||||
|
processor = *p;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define cpu_proc_init PROC_VTABLE(_proc_init)
|
||||||
|
#define cpu_check_bugs PROC_VTABLE(check_bugs)
|
||||||
|
#define cpu_proc_fin PROC_VTABLE(_proc_fin)
|
||||||
|
#define cpu_reset PROC_VTABLE(reset)
|
||||||
|
#define cpu_do_idle PROC_VTABLE(_do_idle)
|
||||||
|
#define cpu_dcache_clean_area PROC_TABLE(dcache_clean_area)
|
||||||
|
#define cpu_set_pte_ext PROC_TABLE(set_pte_ext)
|
||||||
|
#define cpu_do_switch_mm PROC_VTABLE(switch_mm)
|
||||||
|
|
||||||
|
/* These two are private to arch/arm/kernel/suspend.c */
|
||||||
|
#define cpu_do_suspend PROC_VTABLE(do_suspend)
|
||||||
|
#define cpu_do_resume PROC_VTABLE(do_resume)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void cpu_resume(void);
|
extern void cpu_resume(void);
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
void check_other_bugs(void)
|
void check_other_bugs(void)
|
||||||
{
|
{
|
||||||
#ifdef MULTI_CPU
|
#ifdef MULTI_CPU
|
||||||
if (processor.check_bugs)
|
if (cpu_check_bugs)
|
||||||
processor.check_bugs();
|
cpu_check_bugs();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,6 +145,9 @@ __mmap_switched_data:
|
|||||||
#endif
|
#endif
|
||||||
.size __mmap_switched_data, . - __mmap_switched_data
|
.size __mmap_switched_data, . - __mmap_switched_data
|
||||||
|
|
||||||
|
__FINIT
|
||||||
|
.text
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This provides a C-API version of __lookup_processor_type
|
* This provides a C-API version of __lookup_processor_type
|
||||||
*/
|
*/
|
||||||
@ -156,9 +159,6 @@ ENTRY(lookup_processor_type)
|
|||||||
ldmfd sp!, {r4 - r6, r9, pc}
|
ldmfd sp!, {r4 - r6, r9, pc}
|
||||||
ENDPROC(lookup_processor_type)
|
ENDPROC(lookup_processor_type)
|
||||||
|
|
||||||
__FINIT
|
|
||||||
.text
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read processor ID register (CP#15, CR0), and look up in the linker-built
|
* Read processor ID register (CP#15, CR0), and look up in the linker-built
|
||||||
* supported processor list. Note that we can't use the absolute addresses
|
* supported processor list. Note that we can't use the absolute addresses
|
||||||
|
@ -114,6 +114,11 @@ EXPORT_SYMBOL(elf_hwcap2);
|
|||||||
|
|
||||||
#ifdef MULTI_CPU
|
#ifdef MULTI_CPU
|
||||||
struct processor processor __ro_after_init;
|
struct processor processor __ro_after_init;
|
||||||
|
#if defined(CONFIG_BIG_LITTLE) && defined(CONFIG_HARDEN_BRANCH_PREDICTOR)
|
||||||
|
struct processor *cpu_vtable[NR_CPUS] = {
|
||||||
|
[0] = &processor,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef MULTI_TLB
|
#ifdef MULTI_TLB
|
||||||
struct cpu_tlb_fns cpu_tlb __ro_after_init;
|
struct cpu_tlb_fns cpu_tlb __ro_after_init;
|
||||||
@ -666,28 +671,33 @@ static void __init smp_build_mpidr_hash(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* locate processor in the list of supported processor types. The linker
|
||||||
|
* builds this table for us from the entries in arch/arm/mm/proc-*.S
|
||||||
|
*/
|
||||||
|
struct proc_info_list *lookup_processor(u32 midr)
|
||||||
|
{
|
||||||
|
struct proc_info_list *list = lookup_processor_type(midr);
|
||||||
|
|
||||||
|
if (!list) {
|
||||||
|
pr_err("CPU%u: configuration botched (ID %08x), CPU halted\n",
|
||||||
|
smp_processor_id(), midr);
|
||||||
|
while (1)
|
||||||
|
/* can't use cpu_relax() here as it may require MMU setup */;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
static void __init setup_processor(void)
|
static void __init setup_processor(void)
|
||||||
{
|
{
|
||||||
struct proc_info_list *list;
|
unsigned int midr = read_cpuid_id();
|
||||||
|
struct proc_info_list *list = lookup_processor(midr);
|
||||||
/*
|
|
||||||
* locate processor in the list of supported processor
|
|
||||||
* types. The linker builds this table for us from the
|
|
||||||
* entries in arch/arm/mm/proc-*.S
|
|
||||||
*/
|
|
||||||
list = lookup_processor_type(read_cpuid_id());
|
|
||||||
if (!list) {
|
|
||||||
pr_err("CPU configuration botched (ID %08x), unable to continue.\n",
|
|
||||||
read_cpuid_id());
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu_name = list->cpu_name;
|
cpu_name = list->cpu_name;
|
||||||
__cpu_architecture = __get_cpu_architecture();
|
__cpu_architecture = __get_cpu_architecture();
|
||||||
|
|
||||||
#ifdef MULTI_CPU
|
init_proc_vtable(list->proc);
|
||||||
processor = *list->proc;
|
|
||||||
#endif
|
|
||||||
#ifdef MULTI_TLB
|
#ifdef MULTI_TLB
|
||||||
cpu_tlb = *list->tlb;
|
cpu_tlb = *list->tlb;
|
||||||
#endif
|
#endif
|
||||||
@ -699,7 +709,7 @@ static void __init setup_processor(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n",
|
pr_info("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n",
|
||||||
cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
|
list->cpu_name, midr, midr & 15,
|
||||||
proc_arch[cpu_architecture()], get_cr());
|
proc_arch[cpu_architecture()], get_cr());
|
||||||
|
|
||||||
snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
|
snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
|
#include <asm/procinfo.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
@ -102,6 +103,30 @@ static unsigned long get_arch_pgd(pgd_t *pgd)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_BIG_LITTLE) && defined(CONFIG_HARDEN_BRANCH_PREDICTOR)
|
||||||
|
static int secondary_biglittle_prepare(unsigned int cpu)
|
||||||
|
{
|
||||||
|
if (!cpu_vtable[cpu])
|
||||||
|
cpu_vtable[cpu] = kzalloc(sizeof(*cpu_vtable[cpu]), GFP_KERNEL);
|
||||||
|
|
||||||
|
return cpu_vtable[cpu] ? 0 : -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void secondary_biglittle_init(void)
|
||||||
|
{
|
||||||
|
init_proc_vtable(lookup_processor(read_cpuid_id())->proc);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static int secondary_biglittle_prepare(unsigned int cpu)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void secondary_biglittle_init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -109,6 +134,10 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
|||||||
if (!smp_ops.smp_boot_secondary)
|
if (!smp_ops.smp_boot_secondary)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
|
||||||
|
ret = secondary_biglittle_prepare(cpu);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to tell the secondary core where to find
|
* We need to tell the secondary core where to find
|
||||||
* its stack and the page tables.
|
* its stack and the page tables.
|
||||||
@ -359,6 +388,8 @@ asmlinkage void secondary_start_kernel(void)
|
|||||||
struct mm_struct *mm = &init_mm;
|
struct mm_struct *mm = &init_mm;
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
|
||||||
|
secondary_biglittle_init();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The identity mapping is uncached (strongly ordered), so
|
* The identity mapping is uncached (strongly ordered), so
|
||||||
* switch away from it before attempting any exclusive accesses.
|
* switch away from it before attempting any exclusive accesses.
|
||||||
|
@ -209,11 +209,61 @@ static int __init omapdss_init_fbdev(void)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static inline int omapdss_init_fbdev(void)
|
static const char * const omapdss_compat_names[] __initconst = {
|
||||||
|
"ti,omap2-dss",
|
||||||
|
"ti,omap3-dss",
|
||||||
|
"ti,omap4-dss",
|
||||||
|
"ti,omap5-dss",
|
||||||
|
"ti,dra7-dss",
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct device_node * __init omapdss_find_dss_of_node(void)
|
||||||
{
|
{
|
||||||
return 0;
|
struct device_node *node;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(omapdss_compat_names); ++i) {
|
||||||
|
node = of_find_compatible_node(NULL, NULL,
|
||||||
|
omapdss_compat_names[i]);
|
||||||
|
if (node)
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __init omapdss_init_of(void)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
struct device_node *node;
|
||||||
|
struct platform_device *pdev;
|
||||||
|
|
||||||
|
/* only create dss helper devices if dss is enabled in the .dts */
|
||||||
|
|
||||||
|
node = omapdss_find_dss_of_node();
|
||||||
|
if (!node)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!of_device_is_available(node))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pdev = of_find_device_by_node(node);
|
||||||
|
|
||||||
|
if (!pdev) {
|
||||||
|
pr_err("Unable to find DSS platform device\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = of_platform_populate(node, NULL, NULL, &pdev->dev);
|
||||||
|
if (r) {
|
||||||
|
pr_err("Unable to populate DSS submodule devices\n");
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
return omapdss_init_fbdev();
|
||||||
|
}
|
||||||
|
omap_device_initcall(omapdss_init_of);
|
||||||
#endif /* CONFIG_FB_OMAP2 */
|
#endif /* CONFIG_FB_OMAP2 */
|
||||||
|
|
||||||
static void dispc_disable_outputs(void)
|
static void dispc_disable_outputs(void)
|
||||||
@ -361,58 +411,3 @@ int omap_dss_reset(struct omap_hwmod *oh)
|
|||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * const omapdss_compat_names[] __initconst = {
|
|
||||||
"ti,omap2-dss",
|
|
||||||
"ti,omap3-dss",
|
|
||||||
"ti,omap4-dss",
|
|
||||||
"ti,omap5-dss",
|
|
||||||
"ti,dra7-dss",
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct device_node * __init omapdss_find_dss_of_node(void)
|
|
||||||
{
|
|
||||||
struct device_node *node;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(omapdss_compat_names); ++i) {
|
|
||||||
node = of_find_compatible_node(NULL, NULL,
|
|
||||||
omapdss_compat_names[i]);
|
|
||||||
if (node)
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init omapdss_init_of(void)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
struct device_node *node;
|
|
||||||
struct platform_device *pdev;
|
|
||||||
|
|
||||||
/* only create dss helper devices if dss is enabled in the .dts */
|
|
||||||
|
|
||||||
node = omapdss_find_dss_of_node();
|
|
||||||
if (!node)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (!of_device_is_available(node))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
pdev = of_find_device_by_node(node);
|
|
||||||
|
|
||||||
if (!pdev) {
|
|
||||||
pr_err("Unable to find DSS platform device\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = of_platform_populate(node, NULL, NULL, &pdev->dev);
|
|
||||||
if (r) {
|
|
||||||
pr_err("Unable to populate DSS submodule devices\n");
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return omapdss_init_fbdev();
|
|
||||||
}
|
|
||||||
omap_device_initcall(omapdss_init_of);
|
|
||||||
|
@ -52,8 +52,6 @@ static void cpu_v7_spectre_init(void)
|
|||||||
case ARM_CPU_PART_CORTEX_A17:
|
case ARM_CPU_PART_CORTEX_A17:
|
||||||
case ARM_CPU_PART_CORTEX_A73:
|
case ARM_CPU_PART_CORTEX_A73:
|
||||||
case ARM_CPU_PART_CORTEX_A75:
|
case ARM_CPU_PART_CORTEX_A75:
|
||||||
if (processor.switch_mm != cpu_v7_bpiall_switch_mm)
|
|
||||||
goto bl_error;
|
|
||||||
per_cpu(harden_branch_predictor_fn, cpu) =
|
per_cpu(harden_branch_predictor_fn, cpu) =
|
||||||
harden_branch_predictor_bpiall;
|
harden_branch_predictor_bpiall;
|
||||||
spectre_v2_method = "BPIALL";
|
spectre_v2_method = "BPIALL";
|
||||||
@ -61,8 +59,6 @@ static void cpu_v7_spectre_init(void)
|
|||||||
|
|
||||||
case ARM_CPU_PART_CORTEX_A15:
|
case ARM_CPU_PART_CORTEX_A15:
|
||||||
case ARM_CPU_PART_BRAHMA_B15:
|
case ARM_CPU_PART_BRAHMA_B15:
|
||||||
if (processor.switch_mm != cpu_v7_iciallu_switch_mm)
|
|
||||||
goto bl_error;
|
|
||||||
per_cpu(harden_branch_predictor_fn, cpu) =
|
per_cpu(harden_branch_predictor_fn, cpu) =
|
||||||
harden_branch_predictor_iciallu;
|
harden_branch_predictor_iciallu;
|
||||||
spectre_v2_method = "ICIALLU";
|
spectre_v2_method = "ICIALLU";
|
||||||
@ -88,11 +84,9 @@ static void cpu_v7_spectre_init(void)
|
|||||||
ARM_SMCCC_ARCH_WORKAROUND_1, &res);
|
ARM_SMCCC_ARCH_WORKAROUND_1, &res);
|
||||||
if ((int)res.a0 != 0)
|
if ((int)res.a0 != 0)
|
||||||
break;
|
break;
|
||||||
if (processor.switch_mm != cpu_v7_hvc_switch_mm && cpu)
|
|
||||||
goto bl_error;
|
|
||||||
per_cpu(harden_branch_predictor_fn, cpu) =
|
per_cpu(harden_branch_predictor_fn, cpu) =
|
||||||
call_hvc_arch_workaround_1;
|
call_hvc_arch_workaround_1;
|
||||||
processor.switch_mm = cpu_v7_hvc_switch_mm;
|
cpu_do_switch_mm = cpu_v7_hvc_switch_mm;
|
||||||
spectre_v2_method = "hypervisor";
|
spectre_v2_method = "hypervisor";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -101,11 +95,9 @@ static void cpu_v7_spectre_init(void)
|
|||||||
ARM_SMCCC_ARCH_WORKAROUND_1, &res);
|
ARM_SMCCC_ARCH_WORKAROUND_1, &res);
|
||||||
if ((int)res.a0 != 0)
|
if ((int)res.a0 != 0)
|
||||||
break;
|
break;
|
||||||
if (processor.switch_mm != cpu_v7_smc_switch_mm && cpu)
|
|
||||||
goto bl_error;
|
|
||||||
per_cpu(harden_branch_predictor_fn, cpu) =
|
per_cpu(harden_branch_predictor_fn, cpu) =
|
||||||
call_smc_arch_workaround_1;
|
call_smc_arch_workaround_1;
|
||||||
processor.switch_mm = cpu_v7_smc_switch_mm;
|
cpu_do_switch_mm = cpu_v7_smc_switch_mm;
|
||||||
spectre_v2_method = "firmware";
|
spectre_v2_method = "firmware";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -119,11 +111,6 @@ static void cpu_v7_spectre_init(void)
|
|||||||
if (spectre_v2_method)
|
if (spectre_v2_method)
|
||||||
pr_info("CPU%u: Spectre v2: using %s workaround\n",
|
pr_info("CPU%u: Spectre v2: using %s workaround\n",
|
||||||
smp_processor_id(), spectre_v2_method);
|
smp_processor_id(), spectre_v2_method);
|
||||||
return;
|
|
||||||
|
|
||||||
bl_error:
|
|
||||||
pr_err("CPU%u: Spectre v2: incorrect context switching function, system vulnerable\n",
|
|
||||||
cpu);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static void cpu_v7_spectre_init(void)
|
static void cpu_v7_spectre_init(void)
|
||||||
|
@ -112,7 +112,7 @@ ENTRY(cpu_v7_hvc_switch_mm)
|
|||||||
hvc #0
|
hvc #0
|
||||||
ldmfd sp!, {r0 - r3}
|
ldmfd sp!, {r0 - r3}
|
||||||
b cpu_v7_switch_mm
|
b cpu_v7_switch_mm
|
||||||
ENDPROC(cpu_v7_smc_switch_mm)
|
ENDPROC(cpu_v7_hvc_switch_mm)
|
||||||
#endif
|
#endif
|
||||||
ENTRY(cpu_v7_iciallu_switch_mm)
|
ENTRY(cpu_v7_iciallu_switch_mm)
|
||||||
mov r3, #0
|
mov r3, #0
|
||||||
|
@ -573,7 +573,7 @@ int vfp_preserve_user_clear_hwstate(struct user_vfp *ufp,
|
|||||||
*/
|
*/
|
||||||
ufp_exc->fpexc = hwstate->fpexc;
|
ufp_exc->fpexc = hwstate->fpexc;
|
||||||
ufp_exc->fpinst = hwstate->fpinst;
|
ufp_exc->fpinst = hwstate->fpinst;
|
||||||
ufp_exc->fpinst2 = ufp_exc->fpinst2;
|
ufp_exc->fpinst2 = hwstate->fpinst2;
|
||||||
|
|
||||||
/* Ensure that VFP is disabled. */
|
/* Ensure that VFP is disabled. */
|
||||||
vfp_flush_hwstate(thread);
|
vfp_flush_hwstate(thread);
|
||||||
|
@ -139,6 +139,7 @@
|
|||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth";
|
||||||
tx-fifo-depth = <16384>;
|
tx-fifo-depth = <16384>;
|
||||||
rx-fifo-depth = <16384>;
|
rx-fifo-depth = <16384>;
|
||||||
|
snps,multicast-filter-bins = <256>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -154,6 +155,7 @@
|
|||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth";
|
||||||
tx-fifo-depth = <16384>;
|
tx-fifo-depth = <16384>;
|
||||||
rx-fifo-depth = <16384>;
|
rx-fifo-depth = <16384>;
|
||||||
|
snps,multicast-filter-bins = <256>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -169,6 +171,7 @@
|
|||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth";
|
||||||
tx-fifo-depth = <16384>;
|
tx-fifo-depth = <16384>;
|
||||||
rx-fifo-depth = <16384>;
|
rx-fifo-depth = <16384>;
|
||||||
|
snps,multicast-filter-bins = <256>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -652,7 +652,7 @@
|
|||||||
clock-names = "fck", "brg_int", "scif_clk";
|
clock-names = "fck", "brg_int", "scif_clk";
|
||||||
dmas = <&dmac1 0x35>, <&dmac1 0x34>,
|
dmas = <&dmac1 0x35>, <&dmac1 0x34>,
|
||||||
<&dmac2 0x35>, <&dmac2 0x34>;
|
<&dmac2 0x35>, <&dmac2 0x34>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx", "tx", "rx";
|
||||||
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
|
||||||
resets = <&cpg 518>;
|
resets = <&cpg 518>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
aliases {
|
aliases {
|
||||||
serial0 = &scif0;
|
serial0 = &scif0;
|
||||||
ethernet0 = &avb;
|
ethernet0 = &gether;
|
||||||
};
|
};
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
@ -97,23 +97,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&avb {
|
|
||||||
pinctrl-0 = <&avb_pins>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
|
|
||||||
phy-mode = "rgmii-id";
|
|
||||||
phy-handle = <&phy0>;
|
|
||||||
renesas,no-ether-link;
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
phy0: ethernet-phy@0 {
|
|
||||||
rxc-skew-ps = <1500>;
|
|
||||||
reg = <0>;
|
|
||||||
interrupt-parent = <&gpio1>;
|
|
||||||
interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&canfd {
|
&canfd {
|
||||||
pinctrl-0 = <&canfd0_pins>;
|
pinctrl-0 = <&canfd0_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@ -139,6 +122,23 @@
|
|||||||
clock-frequency = <32768>;
|
clock-frequency = <32768>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gether {
|
||||||
|
pinctrl-0 = <&gether_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-handle = <&phy0>;
|
||||||
|
renesas,no-ether-link;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
phy0: ethernet-phy@0 {
|
||||||
|
rxc-skew-ps = <1500>;
|
||||||
|
reg = <0>;
|
||||||
|
interrupt-parent = <&gpio4>;
|
||||||
|
interrupts = <23 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&i2c0 {
|
&i2c0 {
|
||||||
pinctrl-0 = <&i2c0_pins>;
|
pinctrl-0 = <&i2c0_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@ -236,16 +236,17 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&pfc {
|
&pfc {
|
||||||
avb_pins: avb {
|
|
||||||
groups = "avb_mdio", "avb_rgmii";
|
|
||||||
function = "avb";
|
|
||||||
};
|
|
||||||
|
|
||||||
canfd0_pins: canfd0 {
|
canfd0_pins: canfd0 {
|
||||||
groups = "canfd0_data_a";
|
groups = "canfd0_data_a";
|
||||||
function = "canfd0";
|
function = "canfd0";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gether_pins: gether {
|
||||||
|
groups = "gether_mdio_a", "gether_rgmii",
|
||||||
|
"gether_txcrefclk", "gether_txcrefclk_mega";
|
||||||
|
function = "gether";
|
||||||
|
};
|
||||||
|
|
||||||
i2c0_pins: i2c0 {
|
i2c0_pins: i2c0 {
|
||||||
groups = "i2c0";
|
groups = "i2c0";
|
||||||
function = "i2c0";
|
function = "i2c0";
|
||||||
|
@ -24,6 +24,14 @@
|
|||||||
#define KERNEL_DS UL(-1)
|
#define KERNEL_DS UL(-1)
|
||||||
#define USER_DS (TASK_SIZE_64 - 1)
|
#define USER_DS (TASK_SIZE_64 - 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On arm64 systems, unaligned accesses by the CPU are cheap, and so there is
|
||||||
|
* no point in shifting all network buffers by 2 bytes just to make some IP
|
||||||
|
* header fields appear aligned in memory, potentially sacrificing some DMA
|
||||||
|
* performance on some platforms.
|
||||||
|
*/
|
||||||
|
#define NET_IP_ALIGN 0
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
@ -468,7 +468,7 @@
|
|||||||
SCTLR_ELx_SA | SCTLR_ELx_I | SCTLR_ELx_WXN | \
|
SCTLR_ELx_SA | SCTLR_ELx_I | SCTLR_ELx_WXN | \
|
||||||
SCTLR_ELx_DSSBS | ENDIAN_CLEAR_EL2 | SCTLR_EL2_RES0)
|
SCTLR_ELx_DSSBS | ENDIAN_CLEAR_EL2 | SCTLR_EL2_RES0)
|
||||||
|
|
||||||
#if (SCTLR_EL2_SET ^ SCTLR_EL2_CLEAR) != 0xffffffffffffffff
|
#if (SCTLR_EL2_SET ^ SCTLR_EL2_CLEAR) != 0xffffffffffffffffUL
|
||||||
#error "Inconsistent SCTLR_EL2 set/clear bits"
|
#error "Inconsistent SCTLR_EL2 set/clear bits"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -509,7 +509,7 @@
|
|||||||
SCTLR_EL1_UMA | SCTLR_ELx_WXN | ENDIAN_CLEAR_EL1 |\
|
SCTLR_EL1_UMA | SCTLR_ELx_WXN | ENDIAN_CLEAR_EL1 |\
|
||||||
SCTLR_ELx_DSSBS | SCTLR_EL1_NTWI | SCTLR_EL1_RES0)
|
SCTLR_ELx_DSSBS | SCTLR_EL1_NTWI | SCTLR_EL1_RES0)
|
||||||
|
|
||||||
#if (SCTLR_EL1_SET ^ SCTLR_EL1_CLEAR) != 0xffffffffffffffff
|
#if (SCTLR_EL1_SET ^ SCTLR_EL1_CLEAR) != 0xffffffffffffffffUL
|
||||||
#error "Inconsistent SCTLR_EL1 set/clear bits"
|
#error "Inconsistent SCTLR_EL1 set/clear bits"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1333,7 +1333,6 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
|
|||||||
.cpu_enable = cpu_enable_hw_dbm,
|
.cpu_enable = cpu_enable_hw_dbm,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARM64_SSBD
|
|
||||||
{
|
{
|
||||||
.desc = "CRC32 instructions",
|
.desc = "CRC32 instructions",
|
||||||
.capability = ARM64_HAS_CRC32,
|
.capability = ARM64_HAS_CRC32,
|
||||||
@ -1343,6 +1342,7 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
|
|||||||
.field_pos = ID_AA64ISAR0_CRC32_SHIFT,
|
.field_pos = ID_AA64ISAR0_CRC32_SHIFT,
|
||||||
.min_field_value = 1,
|
.min_field_value = 1,
|
||||||
},
|
},
|
||||||
|
#ifdef CONFIG_ARM64_SSBD
|
||||||
{
|
{
|
||||||
.desc = "Speculative Store Bypassing Safe (SSBS)",
|
.desc = "Speculative Store Bypassing Safe (SSBS)",
|
||||||
.capability = ARM64_SSBS,
|
.capability = ARM64_SSBS,
|
||||||
|
@ -313,6 +313,7 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
arm64_memblock_init();
|
arm64_memblock_init();
|
||||||
|
|
||||||
paging_init();
|
paging_init();
|
||||||
|
efi_apply_persistent_mem_reservations();
|
||||||
|
|
||||||
acpi_table_upgrade();
|
acpi_table_upgrade();
|
||||||
|
|
||||||
|
@ -483,8 +483,6 @@ void __init arm64_memblock_init(void)
|
|||||||
high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
|
high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
|
||||||
|
|
||||||
dma_contiguous_reserve(arm64_dma_phys_limit);
|
dma_contiguous_reserve(arm64_dma_phys_limit);
|
||||||
|
|
||||||
memblock_allow_resize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init bootmem_init(void)
|
void __init bootmem_init(void)
|
||||||
|
@ -659,6 +659,8 @@ void __init paging_init(void)
|
|||||||
|
|
||||||
memblock_free(__pa_symbol(init_pg_dir),
|
memblock_free(__pa_symbol(init_pg_dir),
|
||||||
__pa_symbol(init_pg_end) - __pa_symbol(init_pg_dir));
|
__pa_symbol(init_pg_end) - __pa_symbol(init_pg_dir));
|
||||||
|
|
||||||
|
memblock_allow_resize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -55,12 +55,12 @@
|
|||||||
*/
|
*/
|
||||||
#ifdef CONFIG_SUN3
|
#ifdef CONFIG_SUN3
|
||||||
#define PTRS_PER_PTE 16
|
#define PTRS_PER_PTE 16
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
#define PTRS_PER_PGD 2048
|
#define PTRS_PER_PGD 2048
|
||||||
#elif defined(CONFIG_COLDFIRE)
|
#elif defined(CONFIG_COLDFIRE)
|
||||||
#define PTRS_PER_PTE 512
|
#define PTRS_PER_PTE 512
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
#define PTRS_PER_PMD 1
|
#define PTRS_PER_PMD 1
|
||||||
#define PTRS_PER_PGD 1024
|
#define PTRS_PER_PGD 1024
|
||||||
#else
|
#else
|
||||||
|
@ -63,7 +63,7 @@ extern int mem_init_done;
|
|||||||
|
|
||||||
#include <asm-generic/4level-fixup.h>
|
#include <asm-generic/4level-fixup.h>
|
||||||
|
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
@ -67,7 +67,7 @@ void (*cvmx_override_pko_queue_priority) (int pko_port,
|
|||||||
void (*cvmx_override_ipd_port_setup) (int ipd_port);
|
void (*cvmx_override_ipd_port_setup) (int ipd_port);
|
||||||
|
|
||||||
/* Port count per interface */
|
/* Port count per interface */
|
||||||
static int interface_port_count[5];
|
static int interface_port_count[9];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the number of interfaces the chip has. Each interface
|
* Return the number of interfaces the chip has. Each interface
|
||||||
|
@ -140,6 +140,7 @@ CONFIG_RTC_CLASS=y
|
|||||||
CONFIG_RTC_DRV_DS1307=y
|
CONFIG_RTC_DRV_DS1307=y
|
||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
CONFIG_OCTEON_ETHERNET=y
|
CONFIG_OCTEON_ETHERNET=y
|
||||||
|
CONFIG_OCTEON_USB=y
|
||||||
# CONFIG_IOMMU_SUPPORT is not set
|
# CONFIG_IOMMU_SUPPORT is not set
|
||||||
CONFIG_RAS=y
|
CONFIG_RAS=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
|
@ -794,6 +794,7 @@ static void __init arch_mem_init(char **cmdline_p)
|
|||||||
|
|
||||||
/* call board setup routine */
|
/* call board setup routine */
|
||||||
plat_mem_setup();
|
plat_mem_setup();
|
||||||
|
memblock_set_bottom_up(true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure all kernel memory is in the maps. The "UP" and
|
* Make sure all kernel memory is in the maps. The "UP" and
|
||||||
|
@ -2260,10 +2260,8 @@ void __init trap_init(void)
|
|||||||
unsigned long size = 0x200 + VECTORSPACING*64;
|
unsigned long size = 0x200 + VECTORSPACING*64;
|
||||||
phys_addr_t ebase_pa;
|
phys_addr_t ebase_pa;
|
||||||
|
|
||||||
memblock_set_bottom_up(true);
|
|
||||||
ebase = (unsigned long)
|
ebase = (unsigned long)
|
||||||
memblock_alloc_from(size, 1 << fls(size), 0);
|
memblock_alloc_from(size, 1 << fls(size), 0);
|
||||||
memblock_set_bottom_up(false);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to ensure ebase resides in KSeg0 if possible.
|
* Try to ensure ebase resides in KSeg0 if possible.
|
||||||
@ -2307,6 +2305,7 @@ void __init trap_init(void)
|
|||||||
if (board_ebase_setup)
|
if (board_ebase_setup)
|
||||||
board_ebase_setup();
|
board_ebase_setup();
|
||||||
per_cpu_trap_init(true);
|
per_cpu_trap_init(true);
|
||||||
|
memblock_set_bottom_up(false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy the generic exception handlers to their final destination.
|
* Copy the generic exception handlers to their final destination.
|
||||||
|
@ -231,6 +231,8 @@ static __init void prom_meminit(void)
|
|||||||
cpumask_clear(&__node_data[(node)]->cpumask);
|
cpumask_clear(&__node_data[(node)]->cpumask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
max_low_pfn = PHYS_PFN(memblock_end_of_DRAM());
|
||||||
|
|
||||||
for (cpu = 0; cpu < loongson_sysconf.nr_cpus; cpu++) {
|
for (cpu = 0; cpu < loongson_sysconf.nr_cpus; cpu++) {
|
||||||
node = cpu / loongson_sysconf.cores_per_node;
|
node = cpu / loongson_sysconf.cores_per_node;
|
||||||
if (node >= num_online_nodes())
|
if (node >= num_online_nodes())
|
||||||
@ -248,19 +250,9 @@ static __init void prom_meminit(void)
|
|||||||
|
|
||||||
void __init paging_init(void)
|
void __init paging_init(void)
|
||||||
{
|
{
|
||||||
unsigned node;
|
|
||||||
unsigned long zones_size[MAX_NR_ZONES] = {0, };
|
unsigned long zones_size[MAX_NR_ZONES] = {0, };
|
||||||
|
|
||||||
pagetable_init();
|
pagetable_init();
|
||||||
|
|
||||||
for_each_online_node(node) {
|
|
||||||
unsigned long start_pfn, end_pfn;
|
|
||||||
|
|
||||||
get_pfn_range_for_nid(node, &start_pfn, &end_pfn);
|
|
||||||
|
|
||||||
if (end_pfn > max_low_pfn)
|
|
||||||
max_low_pfn = end_pfn;
|
|
||||||
}
|
|
||||||
#ifdef CONFIG_ZONE_DMA32
|
#ifdef CONFIG_ZONE_DMA32
|
||||||
zones_size[ZONE_DMA32] = MAX_DMA32_PFN;
|
zones_size[ZONE_DMA32] = MAX_DMA32_PFN;
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,7 +50,7 @@ void *arch_dma_alloc(struct device *dev, size_t size,
|
|||||||
void *ret;
|
void *ret;
|
||||||
|
|
||||||
ret = dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
|
ret = dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
|
||||||
if (!ret && !(attrs & DMA_ATTR_NON_CONSISTENT)) {
|
if (ret && !(attrs & DMA_ATTR_NON_CONSISTENT)) {
|
||||||
dma_cache_wback_inv((unsigned long) ret, size);
|
dma_cache_wback_inv((unsigned long) ret, size);
|
||||||
ret = (void *)UNCAC_ADDR(ret);
|
ret = (void *)UNCAC_ADDR(ret);
|
||||||
}
|
}
|
||||||
|
@ -435,6 +435,7 @@ void __init prom_meminit(void)
|
|||||||
|
|
||||||
mlreset();
|
mlreset();
|
||||||
szmem();
|
szmem();
|
||||||
|
max_low_pfn = PHYS_PFN(memblock_end_of_DRAM());
|
||||||
|
|
||||||
for (node = 0; node < MAX_COMPACT_NODES; node++) {
|
for (node = 0; node < MAX_COMPACT_NODES; node++) {
|
||||||
if (node_online(node)) {
|
if (node_online(node)) {
|
||||||
@ -455,18 +456,8 @@ extern void setup_zero_pages(void);
|
|||||||
void __init paging_init(void)
|
void __init paging_init(void)
|
||||||
{
|
{
|
||||||
unsigned long zones_size[MAX_NR_ZONES] = {0, };
|
unsigned long zones_size[MAX_NR_ZONES] = {0, };
|
||||||
unsigned node;
|
|
||||||
|
|
||||||
pagetable_init();
|
pagetable_init();
|
||||||
|
|
||||||
for_each_online_node(node) {
|
|
||||||
unsigned long start_pfn, end_pfn;
|
|
||||||
|
|
||||||
get_pfn_range_for_nid(node, &start_pfn, &end_pfn);
|
|
||||||
|
|
||||||
if (end_pfn > max_low_pfn)
|
|
||||||
max_low_pfn = end_pfn;
|
|
||||||
}
|
|
||||||
zones_size[ZONE_NORMAL] = max_low_pfn;
|
zones_size[ZONE_NORMAL] = max_low_pfn;
|
||||||
free_area_init_nodes(zones_size);
|
free_area_init_nodes(zones_size);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#ifndef _ASMNDS32_PGTABLE_H
|
#ifndef _ASMNDS32_PGTABLE_H
|
||||||
#define _ASMNDS32_PGTABLE_H
|
#define _ASMNDS32_PGTABLE_H
|
||||||
|
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
#include <asm-generic/4level-fixup.h>
|
#include <asm-generic/4level-fixup.h>
|
||||||
#include <asm-generic/sizes.h>
|
#include <asm-generic/sizes.h>
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ static inline void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
|||||||
#if CONFIG_PGTABLE_LEVELS == 3
|
#if CONFIG_PGTABLE_LEVELS == 3
|
||||||
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
|
#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
|
||||||
#else
|
#else
|
||||||
#define __PAGETABLE_PMD_FOLDED
|
#define __PAGETABLE_PMD_FOLDED 1
|
||||||
#define BITS_PER_PMD 0
|
#define BITS_PER_PMD 0
|
||||||
#endif
|
#endif
|
||||||
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
|
||||||
|
@ -37,8 +37,8 @@ static inline void arch_spin_unlock(arch_spinlock_t *x)
|
|||||||
volatile unsigned int *a;
|
volatile unsigned int *a;
|
||||||
|
|
||||||
a = __ldcw_align(x);
|
a = __ldcw_align(x);
|
||||||
/* Release with ordered store. */
|
mb();
|
||||||
__asm__ __volatile__("stw,ma %0,0(%1)" : : "r"(1), "r"(a) : "memory");
|
*a = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int arch_spin_trylock(arch_spinlock_t *x)
|
static inline int arch_spin_trylock(arch_spinlock_t *x)
|
||||||
|
@ -640,7 +640,8 @@ cas_action:
|
|||||||
sub,<> %r28, %r25, %r0
|
sub,<> %r28, %r25, %r0
|
||||||
2: stw %r24, 0(%r26)
|
2: stw %r24, 0(%r26)
|
||||||
/* Free lock */
|
/* Free lock */
|
||||||
stw,ma %r20, 0(%sr2,%r20)
|
sync
|
||||||
|
stw %r20, 0(%sr2,%r20)
|
||||||
#if ENABLE_LWS_DEBUG
|
#if ENABLE_LWS_DEBUG
|
||||||
/* Clear thread register indicator */
|
/* Clear thread register indicator */
|
||||||
stw %r0, 4(%sr2,%r20)
|
stw %r0, 4(%sr2,%r20)
|
||||||
@ -654,7 +655,8 @@ cas_action:
|
|||||||
3:
|
3:
|
||||||
/* Error occurred on load or store */
|
/* Error occurred on load or store */
|
||||||
/* Free lock */
|
/* Free lock */
|
||||||
stw,ma %r20, 0(%sr2,%r20)
|
sync
|
||||||
|
stw %r20, 0(%sr2,%r20)
|
||||||
#if ENABLE_LWS_DEBUG
|
#if ENABLE_LWS_DEBUG
|
||||||
stw %r0, 4(%sr2,%r20)
|
stw %r0, 4(%sr2,%r20)
|
||||||
#endif
|
#endif
|
||||||
@ -855,7 +857,8 @@ cas2_action:
|
|||||||
|
|
||||||
cas2_end:
|
cas2_end:
|
||||||
/* Free lock */
|
/* Free lock */
|
||||||
stw,ma %r20, 0(%sr2,%r20)
|
sync
|
||||||
|
stw %r20, 0(%sr2,%r20)
|
||||||
/* Enable interrupts */
|
/* Enable interrupts */
|
||||||
ssm PSW_SM_I, %r0
|
ssm PSW_SM_I, %r0
|
||||||
/* Return to userspace, set no error */
|
/* Return to userspace, set no error */
|
||||||
@ -865,7 +868,8 @@ cas2_end:
|
|||||||
22:
|
22:
|
||||||
/* Error occurred on load or store */
|
/* Error occurred on load or store */
|
||||||
/* Free lock */
|
/* Free lock */
|
||||||
stw,ma %r20, 0(%sr2,%r20)
|
sync
|
||||||
|
stw %r20, 0(%sr2,%r20)
|
||||||
ssm PSW_SM_I, %r0
|
ssm PSW_SM_I, %r0
|
||||||
ldo 1(%r0),%r28
|
ldo 1(%r0),%r28
|
||||||
b lws_exit
|
b lws_exit
|
||||||
|
@ -268,19 +268,13 @@ extern void _memcpy_toio(volatile void __iomem *dest, const void *src,
|
|||||||
* their hooks, a bitfield is reserved for use by the platform near the
|
* their hooks, a bitfield is reserved for use by the platform near the
|
||||||
* top of MMIO addresses (not PIO, those have to cope the hard way).
|
* top of MMIO addresses (not PIO, those have to cope the hard way).
|
||||||
*
|
*
|
||||||
* This bit field is 12 bits and is at the top of the IO virtual
|
* The highest address in the kernel virtual space are:
|
||||||
* addresses PCI_IO_INDIRECT_TOKEN_MASK.
|
|
||||||
*
|
*
|
||||||
* The kernel virtual space is thus:
|
* d0003fffffffffff # with Hash MMU
|
||||||
|
* c00fffffffffffff # with Radix MMU
|
||||||
*
|
*
|
||||||
* 0xD000000000000000 : vmalloc
|
* The top 4 bits are reserved as the region ID on hash, leaving us 8 bits
|
||||||
* 0xD000080000000000 : PCI PHB IO space
|
* that can be used for the field.
|
||||||
* 0xD000080080000000 : ioremap
|
|
||||||
* 0xD0000fffffffffff : end of ioremap region
|
|
||||||
*
|
|
||||||
* Since the top 4 bits are reserved as the region ID, we use thus
|
|
||||||
* the next 12 bits and keep 4 bits available for the future if the
|
|
||||||
* virtual address space is ever to be extended.
|
|
||||||
*
|
*
|
||||||
* The direct IO mapping operations will then mask off those bits
|
* The direct IO mapping operations will then mask off those bits
|
||||||
* before doing the actual access, though that only happen when
|
* before doing the actual access, though that only happen when
|
||||||
@ -292,8 +286,8 @@ extern void _memcpy_toio(volatile void __iomem *dest, const void *src,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_INDIRECT_MMIO
|
#ifdef CONFIG_PPC_INDIRECT_MMIO
|
||||||
#define PCI_IO_IND_TOKEN_MASK 0x0fff000000000000ul
|
#define PCI_IO_IND_TOKEN_SHIFT 52
|
||||||
#define PCI_IO_IND_TOKEN_SHIFT 48
|
#define PCI_IO_IND_TOKEN_MASK (0xfful << PCI_IO_IND_TOKEN_SHIFT)
|
||||||
#define PCI_FIX_ADDR(addr) \
|
#define PCI_FIX_ADDR(addr) \
|
||||||
((PCI_IO_ADDR)(((unsigned long)(addr)) & ~PCI_IO_IND_TOKEN_MASK))
|
((PCI_IO_ADDR)(((unsigned long)(addr)) & ~PCI_IO_IND_TOKEN_MASK))
|
||||||
#define PCI_GET_ADDR_TOKEN(addr) \
|
#define PCI_GET_ADDR_TOKEN(addr) \
|
||||||
|
@ -493,6 +493,8 @@
|
|||||||
__PPC_RS(t) | __PPC_RA0(a) | __PPC_RB(b))
|
__PPC_RS(t) | __PPC_RA0(a) | __PPC_RB(b))
|
||||||
#define PPC_SLBFEE_DOT(t, b) stringify_in_c(.long PPC_INST_SLBFEE | \
|
#define PPC_SLBFEE_DOT(t, b) stringify_in_c(.long PPC_INST_SLBFEE | \
|
||||||
__PPC_RT(t) | __PPC_RB(b))
|
__PPC_RT(t) | __PPC_RB(b))
|
||||||
|
#define __PPC_SLBFEE_DOT(t, b) stringify_in_c(.long PPC_INST_SLBFEE | \
|
||||||
|
___PPC_RT(t) | ___PPC_RB(b))
|
||||||
#define PPC_ICBT(c,a,b) stringify_in_c(.long PPC_INST_ICBT | \
|
#define PPC_ICBT(c,a,b) stringify_in_c(.long PPC_INST_ICBT | \
|
||||||
__PPC_CT(c) | __PPC_RA0(a) | __PPC_RB(b))
|
__PPC_CT(c) | __PPC_RA0(a) | __PPC_RB(b))
|
||||||
/* PASemi instructions */
|
/* PASemi instructions */
|
||||||
|
@ -54,6 +54,7 @@ struct pt_regs
|
|||||||
|
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
unsigned long ppr;
|
unsigned long ppr;
|
||||||
|
unsigned long __pad; /* Maintain 16 byte interrupt stack alignment */
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -636,6 +636,8 @@ static void *__init alloc_stack(unsigned long limit, int cpu)
|
|||||||
{
|
{
|
||||||
unsigned long pa;
|
unsigned long pa;
|
||||||
|
|
||||||
|
BUILD_BUG_ON(STACK_INT_FRAME_SIZE % 16);
|
||||||
|
|
||||||
pa = memblock_alloc_base_nid(THREAD_SIZE, THREAD_SIZE, limit,
|
pa = memblock_alloc_base_nid(THREAD_SIZE, THREAD_SIZE, limit,
|
||||||
early_cpu_to_node(cpu), MEMBLOCK_NONE);
|
early_cpu_to_node(cpu), MEMBLOCK_NONE);
|
||||||
if (!pa) {
|
if (!pa) {
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
#undef TRACE_SYSTEM
|
#undef TRACE_SYSTEM
|
||||||
#define TRACE_SYSTEM kvm
|
#define TRACE_SYSTEM kvm
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
#define TRACE_INCLUDE_FILE trace
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tracepoint for guest mode entry.
|
* Tracepoint for guest mode entry.
|
||||||
@ -120,4 +118,10 @@ TRACE_EVENT(kvm_check_requests,
|
|||||||
#endif /* _TRACE_KVM_H */
|
#endif /* _TRACE_KVM_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
#undef TRACE_INCLUDE_FILE
|
||||||
|
|
||||||
|
#define TRACE_INCLUDE_PATH .
|
||||||
|
#define TRACE_INCLUDE_FILE trace
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
#undef TRACE_SYSTEM
|
#undef TRACE_SYSTEM
|
||||||
#define TRACE_SYSTEM kvm_booke
|
#define TRACE_SYSTEM kvm_booke
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
#define TRACE_INCLUDE_FILE trace_booke
|
|
||||||
|
|
||||||
#define kvm_trace_symbol_exit \
|
#define kvm_trace_symbol_exit \
|
||||||
{0, "CRITICAL"}, \
|
{0, "CRITICAL"}, \
|
||||||
@ -218,4 +216,11 @@ TRACE_EVENT(kvm_booke_queue_irqprio,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
||||||
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
#undef TRACE_INCLUDE_FILE
|
||||||
|
|
||||||
|
#define TRACE_INCLUDE_PATH .
|
||||||
|
#define TRACE_INCLUDE_FILE trace_booke
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
@ -9,8 +9,6 @@
|
|||||||
|
|
||||||
#undef TRACE_SYSTEM
|
#undef TRACE_SYSTEM
|
||||||
#define TRACE_SYSTEM kvm_hv
|
#define TRACE_SYSTEM kvm_hv
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
#define TRACE_INCLUDE_FILE trace_hv
|
|
||||||
|
|
||||||
#define kvm_trace_symbol_hcall \
|
#define kvm_trace_symbol_hcall \
|
||||||
{H_REMOVE, "H_REMOVE"}, \
|
{H_REMOVE, "H_REMOVE"}, \
|
||||||
@ -497,4 +495,11 @@ TRACE_EVENT(kvmppc_run_vcpu_exit,
|
|||||||
#endif /* _TRACE_KVM_HV_H */
|
#endif /* _TRACE_KVM_HV_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
||||||
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
#undef TRACE_INCLUDE_FILE
|
||||||
|
|
||||||
|
#define TRACE_INCLUDE_PATH .
|
||||||
|
#define TRACE_INCLUDE_FILE trace_hv
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
#undef TRACE_SYSTEM
|
#undef TRACE_SYSTEM
|
||||||
#define TRACE_SYSTEM kvm_pr
|
#define TRACE_SYSTEM kvm_pr
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
#define TRACE_INCLUDE_FILE trace_pr
|
|
||||||
|
|
||||||
TRACE_EVENT(kvm_book3s_reenter,
|
TRACE_EVENT(kvm_book3s_reenter,
|
||||||
TP_PROTO(int r, struct kvm_vcpu *vcpu),
|
TP_PROTO(int r, struct kvm_vcpu *vcpu),
|
||||||
@ -257,4 +255,11 @@ TRACE_EVENT(kvm_exit,
|
|||||||
#endif /* _TRACE_KVM_H */
|
#endif /* _TRACE_KVM_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|
||||||
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
#undef TRACE_INCLUDE_FILE
|
||||||
|
|
||||||
|
#define TRACE_INCLUDE_PATH .
|
||||||
|
#define TRACE_INCLUDE_FILE trace_pr
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
@ -1178,7 +1178,7 @@ static long vphn_get_associativity(unsigned long cpu,
|
|||||||
|
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case H_FUNCTION:
|
case H_FUNCTION:
|
||||||
printk(KERN_INFO
|
printk_once(KERN_INFO
|
||||||
"VPHN is not supported. Disabling polling...\n");
|
"VPHN is not supported. Disabling polling...\n");
|
||||||
stop_topology_update();
|
stop_topology_update();
|
||||||
break;
|
break;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/paca.h>
|
#include <asm/paca.h>
|
||||||
|
#include <asm/ppc-opcode.h>
|
||||||
#include <asm/cputable.h>
|
#include <asm/cputable.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
@ -58,27 +59,19 @@ static inline unsigned long mk_vsid_data(unsigned long ea, int ssize,
|
|||||||
return __mk_vsid_data(get_kernel_vsid(ea, ssize), ssize, flags);
|
return __mk_vsid_data(get_kernel_vsid(ea, ssize), ssize, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void assert_slb_exists(unsigned long ea)
|
static void assert_slb_presence(bool present, unsigned long ea)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DEBUG_VM
|
#ifdef CONFIG_DEBUG_VM
|
||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
|
|
||||||
WARN_ON_ONCE(mfmsr() & MSR_EE);
|
WARN_ON_ONCE(mfmsr() & MSR_EE);
|
||||||
|
|
||||||
asm volatile("slbfee. %0, %1" : "=r"(tmp) : "r"(ea) : "cr0");
|
if (!cpu_has_feature(CPU_FTR_ARCH_206))
|
||||||
WARN_ON(tmp == 0);
|
return;
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void assert_slb_notexists(unsigned long ea)
|
asm volatile(__PPC_SLBFEE_DOT(%0, %1) : "=r"(tmp) : "r"(ea) : "cr0");
|
||||||
{
|
|
||||||
#ifdef CONFIG_DEBUG_VM
|
|
||||||
unsigned long tmp;
|
|
||||||
|
|
||||||
WARN_ON_ONCE(mfmsr() & MSR_EE);
|
WARN_ON(present == (tmp == 0));
|
||||||
|
|
||||||
asm volatile("slbfee. %0, %1" : "=r"(tmp) : "r"(ea) : "cr0");
|
|
||||||
WARN_ON(tmp != 0);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +107,7 @@ static inline void create_shadowed_slbe(unsigned long ea, int ssize,
|
|||||||
*/
|
*/
|
||||||
slb_shadow_update(ea, ssize, flags, index);
|
slb_shadow_update(ea, ssize, flags, index);
|
||||||
|
|
||||||
assert_slb_notexists(ea);
|
assert_slb_presence(false, ea);
|
||||||
asm volatile("slbmte %0,%1" :
|
asm volatile("slbmte %0,%1" :
|
||||||
: "r" (mk_vsid_data(ea, ssize, flags)),
|
: "r" (mk_vsid_data(ea, ssize, flags)),
|
||||||
"r" (mk_esid_data(ea, ssize, index))
|
"r" (mk_esid_data(ea, ssize, index))
|
||||||
@ -137,7 +130,7 @@ void __slb_restore_bolted_realmode(void)
|
|||||||
"r" (be64_to_cpu(p->save_area[index].esid)));
|
"r" (be64_to_cpu(p->save_area[index].esid)));
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_slb_exists(local_paca->kstack);
|
assert_slb_presence(true, local_paca->kstack);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -185,7 +178,7 @@ void slb_flush_and_restore_bolted(void)
|
|||||||
:: "r" (be64_to_cpu(p->save_area[KSTACK_INDEX].vsid)),
|
:: "r" (be64_to_cpu(p->save_area[KSTACK_INDEX].vsid)),
|
||||||
"r" (be64_to_cpu(p->save_area[KSTACK_INDEX].esid))
|
"r" (be64_to_cpu(p->save_area[KSTACK_INDEX].esid))
|
||||||
: "memory");
|
: "memory");
|
||||||
assert_slb_exists(get_paca()->kstack);
|
assert_slb_presence(true, get_paca()->kstack);
|
||||||
|
|
||||||
get_paca()->slb_cache_ptr = 0;
|
get_paca()->slb_cache_ptr = 0;
|
||||||
|
|
||||||
@ -443,9 +436,9 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm)
|
|||||||
ea = (unsigned long)
|
ea = (unsigned long)
|
||||||
get_paca()->slb_cache[i] << SID_SHIFT;
|
get_paca()->slb_cache[i] << SID_SHIFT;
|
||||||
/*
|
/*
|
||||||
* Could assert_slb_exists here, but hypervisor
|
* Could assert_slb_presence(true) here, but
|
||||||
* or machine check could have come in and
|
* hypervisor or machine check could have come
|
||||||
* removed the entry at this point.
|
* in and removed the entry at this point.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
slbie_data = ea;
|
slbie_data = ea;
|
||||||
@ -676,7 +669,7 @@ static long slb_insert_entry(unsigned long ea, unsigned long context,
|
|||||||
* User preloads should add isync afterwards in case the kernel
|
* User preloads should add isync afterwards in case the kernel
|
||||||
* accesses user memory before it returns to userspace with rfid.
|
* accesses user memory before it returns to userspace with rfid.
|
||||||
*/
|
*/
|
||||||
assert_slb_notexists(ea);
|
assert_slb_presence(false, ea);
|
||||||
asm volatile("slbmte %0, %1" : : "r" (vsid_data), "r" (esid_data));
|
asm volatile("slbmte %0, %1" : : "r" (vsid_data), "r" (esid_data));
|
||||||
|
|
||||||
barrier();
|
barrier();
|
||||||
@ -715,7 +708,7 @@ static long slb_allocate_kernel(unsigned long ea, unsigned long id)
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (ea < H_VMALLOC_END)
|
if (ea < H_VMALLOC_END)
|
||||||
flags = get_paca()->vmalloc_sllp;
|
flags = local_paca->vmalloc_sllp;
|
||||||
else
|
else
|
||||||
flags = SLB_VSID_KERNEL | mmu_psize_defs[mmu_io_psize].sllp;
|
flags = SLB_VSID_KERNEL | mmu_psize_defs[mmu_io_psize].sllp;
|
||||||
} else {
|
} else {
|
||||||
|
@ -102,63 +102,6 @@ struct pci_dev *pnv_pci_get_npu_dev(struct pci_dev *gpdev, int index)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pnv_pci_get_npu_dev);
|
EXPORT_SYMBOL(pnv_pci_get_npu_dev);
|
||||||
|
|
||||||
#define NPU_DMA_OP_UNSUPPORTED() \
|
|
||||||
dev_err_once(dev, "%s operation unsupported for NVLink devices\n", \
|
|
||||||
__func__)
|
|
||||||
|
|
||||||
static void *dma_npu_alloc(struct device *dev, size_t size,
|
|
||||||
dma_addr_t *dma_handle, gfp_t flag,
|
|
||||||
unsigned long attrs)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dma_npu_free(struct device *dev, size_t size,
|
|
||||||
void *vaddr, dma_addr_t dma_handle,
|
|
||||||
unsigned long attrs)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
}
|
|
||||||
|
|
||||||
static dma_addr_t dma_npu_map_page(struct device *dev, struct page *page,
|
|
||||||
unsigned long offset, size_t size,
|
|
||||||
enum dma_data_direction direction,
|
|
||||||
unsigned long attrs)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dma_npu_map_sg(struct device *dev, struct scatterlist *sglist,
|
|
||||||
int nelems, enum dma_data_direction direction,
|
|
||||||
unsigned long attrs)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dma_npu_dma_supported(struct device *dev, u64 mask)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 dma_npu_get_required_mask(struct device *dev)
|
|
||||||
{
|
|
||||||
NPU_DMA_OP_UNSUPPORTED();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct dma_map_ops dma_npu_ops = {
|
|
||||||
.map_page = dma_npu_map_page,
|
|
||||||
.map_sg = dma_npu_map_sg,
|
|
||||||
.alloc = dma_npu_alloc,
|
|
||||||
.free = dma_npu_free,
|
|
||||||
.dma_supported = dma_npu_dma_supported,
|
|
||||||
.get_required_mask = dma_npu_get_required_mask,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the PE assoicated with the PCI device of the given
|
* Returns the PE assoicated with the PCI device of the given
|
||||||
* NPU. Returns the linked pci device if pci_dev != NULL.
|
* NPU. Returns the linked pci device if pci_dev != NULL.
|
||||||
@ -270,10 +213,11 @@ static void pnv_npu_dma_set_32(struct pnv_ioda_pe *npe)
|
|||||||
rc = pnv_npu_set_window(npe, 0, gpe->table_group.tables[0]);
|
rc = pnv_npu_set_window(npe, 0, gpe->table_group.tables[0]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't initialise npu_pe->tce32_table as we always use
|
* NVLink devices use the same TCE table configuration as
|
||||||
* dma_npu_ops which are nops.
|
* their parent device so drivers shouldn't be doing DMA
|
||||||
|
* operations directly on these devices.
|
||||||
*/
|
*/
|
||||||
set_dma_ops(&npe->pdev->dev, &dma_npu_ops);
|
set_dma_ops(&npe->pdev->dev, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -71,10 +71,27 @@ KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
|
|||||||
# arch specific predefines for sparse
|
# arch specific predefines for sparse
|
||||||
CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
|
CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
|
||||||
|
|
||||||
|
# Default target when executing plain make
|
||||||
|
boot := arch/riscv/boot
|
||||||
|
KBUILD_IMAGE := $(boot)/Image.gz
|
||||||
|
|
||||||
head-y := arch/riscv/kernel/head.o
|
head-y := arch/riscv/kernel/head.o
|
||||||
|
|
||||||
core-y += arch/riscv/kernel/ arch/riscv/mm/
|
core-y += arch/riscv/kernel/ arch/riscv/mm/
|
||||||
|
|
||||||
libs-y += arch/riscv/lib/
|
libs-y += arch/riscv/lib/
|
||||||
|
|
||||||
all: vmlinux
|
PHONY += vdso_install
|
||||||
|
vdso_install:
|
||||||
|
$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
|
||||||
|
|
||||||
|
all: Image.gz
|
||||||
|
|
||||||
|
Image: vmlinux
|
||||||
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
Image.%: Image
|
||||||
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
zinstall install:
|
||||||
|
$(Q)$(MAKE) $(build)=$(boot) $@
|
||||||
|
2
arch/riscv/boot/.gitignore
vendored
Normal file
2
arch/riscv/boot/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Image
|
||||||
|
Image.gz
|
33
arch/riscv/boot/Makefile
Normal file
33
arch/riscv/boot/Makefile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#
|
||||||
|
# arch/riscv/boot/Makefile
|
||||||
|
#
|
||||||
|
# This file is included by the global makefile so that you can add your own
|
||||||
|
# architecture-specific flags and dependencies.
|
||||||
|
#
|
||||||
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
# for more details.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018, Anup Patel.
|
||||||
|
# Author: Anup Patel <anup@brainfault.org>
|
||||||
|
#
|
||||||
|
# Based on the ia64 and arm64 boot/Makefile.
|
||||||
|
#
|
||||||
|
|
||||||
|
OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
|
||||||
|
|
||||||
|
targets := Image
|
||||||
|
|
||||||
|
$(obj)/Image: vmlinux FORCE
|
||||||
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
|
$(obj)/Image.gz: $(obj)/Image FORCE
|
||||||
|
$(call if_changed,gzip)
|
||||||
|
|
||||||
|
install:
|
||||||
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
||||||
|
$(obj)/Image System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
|
zinstall:
|
||||||
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
||||||
|
$(obj)/Image.gz System.map "$(INSTALL_PATH)"
|
60
arch/riscv/boot/install.sh
Normal file
60
arch/riscv/boot/install.sh
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# arch/riscv/boot/install.sh
|
||||||
|
#
|
||||||
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
# for more details.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1995 by Linus Torvalds
|
||||||
|
#
|
||||||
|
# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
|
||||||
|
# Adapted from code in arch/i386/boot/install.sh by Russell King
|
||||||
|
#
|
||||||
|
# "make install" script for the RISC-V Linux port
|
||||||
|
#
|
||||||
|
# Arguments:
|
||||||
|
# $1 - kernel version
|
||||||
|
# $2 - kernel image file
|
||||||
|
# $3 - kernel map file
|
||||||
|
# $4 - default install path (blank if root directory)
|
||||||
|
#
|
||||||
|
|
||||||
|
verify () {
|
||||||
|
if [ ! -f "$1" ]; then
|
||||||
|
echo "" 1>&2
|
||||||
|
echo " *** Missing file: $1" 1>&2
|
||||||
|
echo ' *** You need to run "make" before "make install".' 1>&2
|
||||||
|
echo "" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure the files actually exist
|
||||||
|
verify "$2"
|
||||||
|
verify "$3"
|
||||||
|
|
||||||
|
# User may have a custom install script
|
||||||
|
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
||||||
|
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
||||||
|
|
||||||
|
if [ "$(basename $2)" = "Image.gz" ]; then
|
||||||
|
# Compressed install
|
||||||
|
echo "Installing compressed kernel"
|
||||||
|
base=vmlinuz
|
||||||
|
else
|
||||||
|
# Normal install
|
||||||
|
echo "Installing normal kernel"
|
||||||
|
base=vmlinux
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $4/$base-$1 ]; then
|
||||||
|
mv $4/$base-$1 $4/$base-$1.old
|
||||||
|
fi
|
||||||
|
cat $2 > $4/$base-$1
|
||||||
|
|
||||||
|
# Install system map file
|
||||||
|
if [ -f $4/System.map-$1 ]; then
|
||||||
|
mv $4/System.map-$1 $4/System.map-$1.old
|
||||||
|
fi
|
||||||
|
cp $3 $4/System.map-$1
|
@ -76,4 +76,5 @@ CONFIG_NFS_V4_1=y
|
|||||||
CONFIG_NFS_V4_2=y
|
CONFIG_NFS_V4_2=y
|
||||||
CONFIG_ROOT_NFS=y
|
CONFIG_ROOT_NFS=y
|
||||||
CONFIG_CRYPTO_USER_API_HASH=y
|
CONFIG_CRYPTO_USER_API_HASH=y
|
||||||
|
CONFIG_PRINTK_TIME=y
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#define MODULE_ARCH_VERMAGIC "riscv"
|
#define MODULE_ARCH_VERMAGIC "riscv"
|
||||||
|
|
||||||
|
struct module;
|
||||||
u64 module_emit_got_entry(struct module *mod, u64 val);
|
u64 module_emit_got_entry(struct module *mod, u64 val);
|
||||||
u64 module_emit_plt_entry(struct module *mod, u64 val);
|
u64 module_emit_plt_entry(struct module *mod, u64 val);
|
||||||
|
|
||||||
|
@ -400,13 +400,13 @@ extern unsigned long __must_check __asm_copy_from_user(void *to,
|
|||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
raw_copy_from_user(void *to, const void __user *from, unsigned long n)
|
raw_copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
return __asm_copy_to_user(to, from, n);
|
return __asm_copy_from_user(to, from, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||||
{
|
{
|
||||||
return __asm_copy_from_user(to, from, n);
|
return __asm_copy_to_user(to, from, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern long strncpy_from_user(char *dest, const char __user *src, long count);
|
extern long strncpy_from_user(char *dest, const char __user *src, long count);
|
||||||
|
@ -13,10 +13,9 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* There is explicitly no include guard here because this file is expected to
|
* There is explicitly no include guard here because this file is expected to
|
||||||
* be included multiple times. See uapi/asm/syscalls.h for more info.
|
* be included multiple times.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define __ARCH_WANT_NEW_STAT
|
|
||||||
#define __ARCH_WANT_SYS_CLONE
|
#define __ARCH_WANT_SYS_CLONE
|
||||||
|
|
||||||
#include <uapi/asm/unistd.h>
|
#include <uapi/asm/unistd.h>
|
||||||
#include <uapi/asm/syscalls.h>
|
|
||||||
|
@ -1,13 +1,25 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2017-2018 SiFive
|
* Copyright (C) 2018 David Abdurachmanov <david.abdurachmanov@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
#ifdef __LP64__
|
||||||
* There is explicitly no include guard here because this file is expected to
|
#define __ARCH_WANT_NEW_STAT
|
||||||
* be included multiple times in order to define the syscall macros via
|
#endif /* __LP64__ */
|
||||||
* __SYSCALL.
|
|
||||||
*/
|
#include <asm-generic/unistd.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allows the instruction cache to be flushed from userspace. Despite RISC-V
|
* Allows the instruction cache to be flushed from userspace. Despite RISC-V
|
@ -64,7 +64,7 @@ int riscv_of_processor_hartid(struct device_node *node)
|
|||||||
|
|
||||||
static void print_isa(struct seq_file *f, const char *orig_isa)
|
static void print_isa(struct seq_file *f, const char *orig_isa)
|
||||||
{
|
{
|
||||||
static const char *ext = "mafdc";
|
static const char *ext = "mafdcsu";
|
||||||
const char *isa = orig_isa;
|
const char *isa = orig_isa;
|
||||||
const char *e;
|
const char *e;
|
||||||
|
|
||||||
@ -88,11 +88,14 @@ static void print_isa(struct seq_file *f, const char *orig_isa)
|
|||||||
/*
|
/*
|
||||||
* Check the rest of the ISA string for valid extensions, printing those
|
* Check the rest of the ISA string for valid extensions, printing those
|
||||||
* we find. RISC-V ISA strings define an order, so we only print the
|
* we find. RISC-V ISA strings define an order, so we only print the
|
||||||
* extension bits when they're in order.
|
* extension bits when they're in order. Hide the supervisor (S)
|
||||||
|
* extension from userspace as it's not accessible from there.
|
||||||
*/
|
*/
|
||||||
for (e = ext; *e != '\0'; ++e) {
|
for (e = ext; *e != '\0'; ++e) {
|
||||||
if (isa[0] == e[0]) {
|
if (isa[0] == e[0]) {
|
||||||
|
if (isa[0] != 's')
|
||||||
seq_write(f, isa, 1);
|
seq_write(f, isa, 1);
|
||||||
|
|
||||||
isa++;
|
isa++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,16 @@ ENTRY(_start)
|
|||||||
amoadd.w a3, a2, (a3)
|
amoadd.w a3, a2, (a3)
|
||||||
bnez a3, .Lsecondary_start
|
bnez a3, .Lsecondary_start
|
||||||
|
|
||||||
|
/* Clear BSS for flat non-ELF images */
|
||||||
|
la a3, __bss_start
|
||||||
|
la a4, __bss_stop
|
||||||
|
ble a4, a3, clear_bss_done
|
||||||
|
clear_bss:
|
||||||
|
REG_S zero, (a3)
|
||||||
|
add a3, a3, RISCV_SZPTR
|
||||||
|
blt a3, a4, clear_bss
|
||||||
|
clear_bss_done:
|
||||||
|
|
||||||
/* Save hart ID and DTB physical address */
|
/* Save hart ID and DTB physical address */
|
||||||
mv s0, a0
|
mv s0, a0
|
||||||
mv s1, a1
|
mv s1, a1
|
||||||
|
@ -21,7 +21,7 @@ static int apply_r_riscv_32_rela(struct module *me, u32 *location, Elf_Addr v)
|
|||||||
{
|
{
|
||||||
if (v != (u32)v) {
|
if (v != (u32)v) {
|
||||||
pr_err("%s: value %016llx out of range for 32-bit field\n",
|
pr_err("%s: value %016llx out of range for 32-bit field\n",
|
||||||
me->name, v);
|
me->name, (long long)v);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
*location = v;
|
*location = v;
|
||||||
@ -102,7 +102,7 @@ static int apply_r_riscv_pcrel_hi20_rela(struct module *me, u32 *location,
|
|||||||
if (offset != (s32)offset) {
|
if (offset != (s32)offset) {
|
||||||
pr_err(
|
pr_err(
|
||||||
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
||||||
me->name, v, location);
|
me->name, (long long)v, location);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ static int apply_r_riscv_hi20_rela(struct module *me, u32 *location,
|
|||||||
if (IS_ENABLED(CMODEL_MEDLOW)) {
|
if (IS_ENABLED(CMODEL_MEDLOW)) {
|
||||||
pr_err(
|
pr_err(
|
||||||
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
||||||
me->name, v, location);
|
me->name, (long long)v, location);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ static int apply_r_riscv_got_hi20_rela(struct module *me, u32 *location,
|
|||||||
} else {
|
} else {
|
||||||
pr_err(
|
pr_err(
|
||||||
"%s: can not generate the GOT entry for symbol = %016llx from PC = %p\n",
|
"%s: can not generate the GOT entry for symbol = %016llx from PC = %p\n",
|
||||||
me->name, v, location);
|
me->name, (long long)v, location);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ static int apply_r_riscv_call_plt_rela(struct module *me, u32 *location,
|
|||||||
} else {
|
} else {
|
||||||
pr_err(
|
pr_err(
|
||||||
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
||||||
me->name, v, location);
|
me->name, (long long)v, location);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -234,7 +234,7 @@ static int apply_r_riscv_call_rela(struct module *me, u32 *location,
|
|||||||
if (offset != fill_v) {
|
if (offset != fill_v) {
|
||||||
pr_err(
|
pr_err(
|
||||||
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
"%s: target %016llx can not be addressed by the 32-bit offset from PC = %p\n",
|
||||||
me->name, v, location);
|
me->name, (long long)v, location);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ SECTIONS
|
|||||||
*(.sbss*)
|
*(.sbss*)
|
||||||
}
|
}
|
||||||
|
|
||||||
BSS_SECTION(0, 0, 0)
|
BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
|
||||||
|
|
||||||
EXCEPTION_TABLE(0x10)
|
EXCEPTION_TABLE(0x10)
|
||||||
NOTES
|
NOTES
|
||||||
|
@ -3,6 +3,6 @@ lib-y += memcpy.o
|
|||||||
lib-y += memset.o
|
lib-y += memset.o
|
||||||
lib-y += uaccess.o
|
lib-y += uaccess.o
|
||||||
|
|
||||||
lib-(CONFIG_64BIT) += tishift.o
|
lib-$(CONFIG_64BIT) += tishift.o
|
||||||
|
|
||||||
lib-$(CONFIG_32BIT) += udivdi3.o
|
lib-$(CONFIG_32BIT) += udivdi3.o
|
||||||
|
@ -27,7 +27,7 @@ KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-option,-ffreestanding)
|
|||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
||||||
UTS_MACHINE := s390x
|
UTS_MACHINE := s390x
|
||||||
STACK_SIZE := $(if $(CONFIG_KASAN),32768,16384)
|
STACK_SIZE := $(if $(CONFIG_KASAN),65536,16384)
|
||||||
CHECKFLAGS += -D__s390__ -D__s390x__
|
CHECKFLAGS += -D__s390__ -D__s390x__
|
||||||
|
|
||||||
export LD_BFD
|
export LD_BFD
|
||||||
|
@ -22,10 +22,10 @@ OBJCOPYFLAGS :=
|
|||||||
OBJECTS := $(addprefix $(obj)/,$(obj-y))
|
OBJECTS := $(addprefix $(obj)/,$(obj-y))
|
||||||
|
|
||||||
LDFLAGS_vmlinux := --oformat $(LD_BFD) -e startup -T
|
LDFLAGS_vmlinux := --oformat $(LD_BFD) -e startup -T
|
||||||
$(obj)/vmlinux: $(obj)/vmlinux.lds $(objtree)/arch/s390/boot/startup.a $(OBJECTS)
|
$(obj)/vmlinux: $(obj)/vmlinux.lds $(objtree)/arch/s390/boot/startup.a $(OBJECTS) FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|
||||||
OBJCOPYFLAGS_info.bin := -O binary --only-section=.vmlinux.info
|
OBJCOPYFLAGS_info.bin := -O binary --only-section=.vmlinux.info --set-section-flags .vmlinux.info=load
|
||||||
$(obj)/info.bin: vmlinux FORCE
|
$(obj)/info.bin: vmlinux FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
@ -46,17 +46,17 @@ suffix-$(CONFIG_KERNEL_LZMA) := .lzma
|
|||||||
suffix-$(CONFIG_KERNEL_LZO) := .lzo
|
suffix-$(CONFIG_KERNEL_LZO) := .lzo
|
||||||
suffix-$(CONFIG_KERNEL_XZ) := .xz
|
suffix-$(CONFIG_KERNEL_XZ) := .xz
|
||||||
|
|
||||||
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,gzip)
|
$(call if_changed,gzip)
|
||||||
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,bzip2)
|
$(call if_changed,bzip2)
|
||||||
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,lz4)
|
$(call if_changed,lz4)
|
||||||
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,lzma)
|
$(call if_changed,lzma)
|
||||||
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,lzo)
|
$(call if_changed,lzo)
|
||||||
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y)
|
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,xzkern)
|
$(call if_changed,xzkern)
|
||||||
|
|
||||||
OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
|
OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
|
||||||
|
@ -64,6 +64,8 @@ CONFIG_NUMA=y
|
|||||||
CONFIG_PREEMPT=y
|
CONFIG_PREEMPT=y
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
CONFIG_KEXEC_FILE=y
|
CONFIG_KEXEC_FILE=y
|
||||||
|
CONFIG_EXPOLINE=y
|
||||||
|
CONFIG_EXPOLINE_AUTO=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
@ -84,9 +86,11 @@ CONFIG_PCI_DEBUG=y
|
|||||||
CONFIG_HOTPLUG_PCI=y
|
CONFIG_HOTPLUG_PCI=y
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
CONFIG_CHSC_SCH=y
|
CONFIG_CHSC_SCH=y
|
||||||
|
CONFIG_VFIO_AP=m
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
CONFIG_BINFMT_MISC=m
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_HIBERNATION=y
|
CONFIG_HIBERNATION=y
|
||||||
|
CONFIG_PM_DEBUG=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_DIAG=m
|
CONFIG_PACKET_DIAG=m
|
||||||
@ -161,8 +165,6 @@ CONFIG_NF_CONNTRACK_TFTP=m
|
|||||||
CONFIG_NF_CT_NETLINK=m
|
CONFIG_NF_CT_NETLINK=m
|
||||||
CONFIG_NF_CT_NETLINK_TIMEOUT=m
|
CONFIG_NF_CT_NETLINK_TIMEOUT=m
|
||||||
CONFIG_NF_TABLES=m
|
CONFIG_NF_TABLES=m
|
||||||
CONFIG_NFT_EXTHDR=m
|
|
||||||
CONFIG_NFT_META=m
|
|
||||||
CONFIG_NFT_CT=m
|
CONFIG_NFT_CT=m
|
||||||
CONFIG_NFT_COUNTER=m
|
CONFIG_NFT_COUNTER=m
|
||||||
CONFIG_NFT_LOG=m
|
CONFIG_NFT_LOG=m
|
||||||
@ -365,6 +367,8 @@ CONFIG_NET_ACT_SKBEDIT=m
|
|||||||
CONFIG_NET_ACT_CSUM=m
|
CONFIG_NET_ACT_CSUM=m
|
||||||
CONFIG_DNS_RESOLVER=y
|
CONFIG_DNS_RESOLVER=y
|
||||||
CONFIG_OPENVSWITCH=m
|
CONFIG_OPENVSWITCH=m
|
||||||
|
CONFIG_VSOCKETS=m
|
||||||
|
CONFIG_VIRTIO_VSOCKETS=m
|
||||||
CONFIG_NETLINK_DIAG=m
|
CONFIG_NETLINK_DIAG=m
|
||||||
CONFIG_CGROUP_NET_PRIO=y
|
CONFIG_CGROUP_NET_PRIO=y
|
||||||
CONFIG_BPF_JIT=y
|
CONFIG_BPF_JIT=y
|
||||||
@ -461,6 +465,7 @@ CONFIG_PPTP=m
|
|||||||
CONFIG_PPPOL2TP=m
|
CONFIG_PPPOL2TP=m
|
||||||
CONFIG_PPP_ASYNC=m
|
CONFIG_PPP_ASYNC=m
|
||||||
CONFIG_PPP_SYNC_TTY=m
|
CONFIG_PPP_SYNC_TTY=m
|
||||||
|
CONFIG_ISM=m
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
@ -486,9 +491,12 @@ CONFIG_MLX4_INFINIBAND=m
|
|||||||
CONFIG_MLX5_INFINIBAND=m
|
CONFIG_MLX5_INFINIBAND=m
|
||||||
CONFIG_VFIO=m
|
CONFIG_VFIO=m
|
||||||
CONFIG_VFIO_PCI=m
|
CONFIG_VFIO_PCI=m
|
||||||
|
CONFIG_VFIO_MDEV=m
|
||||||
|
CONFIG_VFIO_MDEV_DEVICE=m
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VIRTIO_INPUT=y
|
CONFIG_VIRTIO_INPUT=y
|
||||||
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
@ -615,7 +623,6 @@ CONFIG_DEBUG_CREDENTIALS=y
|
|||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
||||||
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
||||||
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
|
|
||||||
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
|
CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
|
||||||
CONFIG_FAULT_INJECTION=y
|
CONFIG_FAULT_INJECTION=y
|
||||||
CONFIG_FAILSLAB=y
|
CONFIG_FAILSLAB=y
|
||||||
@ -727,3 +734,4 @@ CONFIG_APPLDATA_BASE=y
|
|||||||
CONFIG_KVM=m
|
CONFIG_KVM=m
|
||||||
CONFIG_KVM_S390_UCONTROL=y
|
CONFIG_KVM_S390_UCONTROL=y
|
||||||
CONFIG_VHOST_NET=m
|
CONFIG_VHOST_NET=m
|
||||||
|
CONFIG_VHOST_VSOCK=m
|
||||||
|
@ -65,6 +65,8 @@ CONFIG_NR_CPUS=512
|
|||||||
CONFIG_NUMA=y
|
CONFIG_NUMA=y
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
CONFIG_KEXEC_FILE=y
|
CONFIG_KEXEC_FILE=y
|
||||||
|
CONFIG_EXPOLINE=y
|
||||||
|
CONFIG_EXPOLINE_AUTO=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
@ -82,9 +84,11 @@ CONFIG_PCI=y
|
|||||||
CONFIG_HOTPLUG_PCI=y
|
CONFIG_HOTPLUG_PCI=y
|
||||||
CONFIG_HOTPLUG_PCI_S390=y
|
CONFIG_HOTPLUG_PCI_S390=y
|
||||||
CONFIG_CHSC_SCH=y
|
CONFIG_CHSC_SCH=y
|
||||||
|
CONFIG_VFIO_AP=m
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
CONFIG_BINFMT_MISC=m
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_HIBERNATION=y
|
CONFIG_HIBERNATION=y
|
||||||
|
CONFIG_PM_DEBUG=y
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_DIAG=m
|
CONFIG_PACKET_DIAG=m
|
||||||
@ -159,8 +163,6 @@ CONFIG_NF_CONNTRACK_TFTP=m
|
|||||||
CONFIG_NF_CT_NETLINK=m
|
CONFIG_NF_CT_NETLINK=m
|
||||||
CONFIG_NF_CT_NETLINK_TIMEOUT=m
|
CONFIG_NF_CT_NETLINK_TIMEOUT=m
|
||||||
CONFIG_NF_TABLES=m
|
CONFIG_NF_TABLES=m
|
||||||
CONFIG_NFT_EXTHDR=m
|
|
||||||
CONFIG_NFT_META=m
|
|
||||||
CONFIG_NFT_CT=m
|
CONFIG_NFT_CT=m
|
||||||
CONFIG_NFT_COUNTER=m
|
CONFIG_NFT_COUNTER=m
|
||||||
CONFIG_NFT_LOG=m
|
CONFIG_NFT_LOG=m
|
||||||
@ -362,6 +364,8 @@ CONFIG_NET_ACT_SKBEDIT=m
|
|||||||
CONFIG_NET_ACT_CSUM=m
|
CONFIG_NET_ACT_CSUM=m
|
||||||
CONFIG_DNS_RESOLVER=y
|
CONFIG_DNS_RESOLVER=y
|
||||||
CONFIG_OPENVSWITCH=m
|
CONFIG_OPENVSWITCH=m
|
||||||
|
CONFIG_VSOCKETS=m
|
||||||
|
CONFIG_VIRTIO_VSOCKETS=m
|
||||||
CONFIG_NETLINK_DIAG=m
|
CONFIG_NETLINK_DIAG=m
|
||||||
CONFIG_CGROUP_NET_PRIO=y
|
CONFIG_CGROUP_NET_PRIO=y
|
||||||
CONFIG_BPF_JIT=y
|
CONFIG_BPF_JIT=y
|
||||||
@ -458,6 +462,7 @@ CONFIG_PPTP=m
|
|||||||
CONFIG_PPPOL2TP=m
|
CONFIG_PPPOL2TP=m
|
||||||
CONFIG_PPP_ASYNC=m
|
CONFIG_PPP_ASYNC=m
|
||||||
CONFIG_PPP_SYNC_TTY=m
|
CONFIG_PPP_SYNC_TTY=m
|
||||||
|
CONFIG_ISM=m
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
# CONFIG_INPUT_KEYBOARD is not set
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
@ -483,9 +488,12 @@ CONFIG_MLX4_INFINIBAND=m
|
|||||||
CONFIG_MLX5_INFINIBAND=m
|
CONFIG_MLX5_INFINIBAND=m
|
||||||
CONFIG_VFIO=m
|
CONFIG_VFIO=m
|
||||||
CONFIG_VFIO_PCI=m
|
CONFIG_VFIO_PCI=m
|
||||||
|
CONFIG_VFIO_MDEV=m
|
||||||
|
CONFIG_VFIO_MDEV_DEVICE=m
|
||||||
CONFIG_VIRTIO_PCI=m
|
CONFIG_VIRTIO_PCI=m
|
||||||
CONFIG_VIRTIO_BALLOON=m
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_VIRTIO_INPUT=y
|
CONFIG_VIRTIO_INPUT=y
|
||||||
|
CONFIG_S390_AP_IOMMU=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
@ -666,3 +674,4 @@ CONFIG_APPLDATA_BASE=y
|
|||||||
CONFIG_KVM=m
|
CONFIG_KVM=m
|
||||||
CONFIG_KVM_S390_UCONTROL=y
|
CONFIG_KVM_S390_UCONTROL=y
|
||||||
CONFIG_VHOST_NET=m
|
CONFIG_VHOST_NET=m
|
||||||
|
CONFIG_VHOST_VSOCK=m
|
||||||
|
@ -26,14 +26,23 @@ CONFIG_CGROUP_CPUACCT=y
|
|||||||
CONFIG_CGROUP_PERF=y
|
CONFIG_CGROUP_PERF=y
|
||||||
CONFIG_NAMESPACES=y
|
CONFIG_NAMESPACES=y
|
||||||
CONFIG_USER_NS=y
|
CONFIG_USER_NS=y
|
||||||
|
CONFIG_CHECKPOINT_RESTORE=y
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_EXPERT=y
|
CONFIG_EXPERT=y
|
||||||
# CONFIG_SYSFS_SYSCALL is not set
|
# CONFIG_SYSFS_SYSCALL is not set
|
||||||
CONFIG_CHECKPOINT_RESTORE=y
|
|
||||||
CONFIG_BPF_SYSCALL=y
|
CONFIG_BPF_SYSCALL=y
|
||||||
CONFIG_USERFAULTFD=y
|
CONFIG_USERFAULTFD=y
|
||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
CONFIG_PROFILING=y
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_LIVEPATCH=y
|
||||||
|
CONFIG_NR_CPUS=256
|
||||||
|
CONFIG_NUMA=y
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
CONFIG_KEXEC_FILE=y
|
||||||
|
CONFIG_CRASH_DUMP=y
|
||||||
|
CONFIG_HIBERNATION=y
|
||||||
|
CONFIG_PM_DEBUG=y
|
||||||
|
CONFIG_CMM=m
|
||||||
CONFIG_OPROFILE=y
|
CONFIG_OPROFILE=y
|
||||||
CONFIG_KPROBES=y
|
CONFIG_KPROBES=y
|
||||||
CONFIG_JUMP_LABEL=y
|
CONFIG_JUMP_LABEL=y
|
||||||
@ -44,11 +53,7 @@ CONFIG_BLK_DEV_INTEGRITY=y
|
|||||||
CONFIG_PARTITION_ADVANCED=y
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_IBM_PARTITION=y
|
CONFIG_IBM_PARTITION=y
|
||||||
CONFIG_DEFAULT_DEADLINE=y
|
CONFIG_DEFAULT_DEADLINE=y
|
||||||
CONFIG_LIVEPATCH=y
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_NR_CPUS=256
|
|
||||||
CONFIG_NUMA=y
|
|
||||||
CONFIG_HZ_100=y
|
|
||||||
CONFIG_KEXEC_FILE=y
|
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
@ -60,9 +65,6 @@ CONFIG_ZBUD=m
|
|||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
CONFIG_IDLE_PAGE_TRACKING=y
|
CONFIG_IDLE_PAGE_TRACKING=y
|
||||||
CONFIG_CRASH_DUMP=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
|
||||||
CONFIG_HIBERNATION=y
|
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
@ -98,6 +100,7 @@ CONFIG_BLK_DEV_NBD=m
|
|||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_VIRTIO_BLK=y
|
CONFIG_VIRTIO_BLK=y
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
|
# CONFIG_SCSI_MQ_DEFAULT is not set
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
CONFIG_CHR_DEV_ST=y
|
CONFIG_CHR_DEV_ST=y
|
||||||
CONFIG_BLK_DEV_SR=y
|
CONFIG_BLK_DEV_SR=y
|
||||||
@ -131,6 +134,7 @@ CONFIG_EQUALIZER=m
|
|||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VIRTIO_NET=y
|
CONFIG_VIRTIO_NET=y
|
||||||
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
||||||
|
# CONFIG_NET_VENDOR_AURORA is not set
|
||||||
# CONFIG_NET_VENDOR_CORTINA is not set
|
# CONFIG_NET_VENDOR_CORTINA is not set
|
||||||
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
||||||
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
||||||
@ -157,33 +161,6 @@ CONFIG_TMPFS=y
|
|||||||
CONFIG_TMPFS_POSIX_ACL=y
|
CONFIG_TMPFS_POSIX_ACL=y
|
||||||
CONFIG_HUGETLBFS=y
|
CONFIG_HUGETLBFS=y
|
||||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||||
CONFIG_DEBUG_INFO=y
|
|
||||||
CONFIG_DEBUG_INFO_DWARF4=y
|
|
||||||
CONFIG_GDB_SCRIPTS=y
|
|
||||||
CONFIG_UNUSED_SYMBOLS=y
|
|
||||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
|
||||||
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
|
||||||
CONFIG_DEBUG_PAGEALLOC=y
|
|
||||||
CONFIG_DETECT_HUNG_TASK=y
|
|
||||||
CONFIG_PANIC_ON_OOPS=y
|
|
||||||
CONFIG_PROVE_LOCKING=y
|
|
||||||
CONFIG_LOCK_STAT=y
|
|
||||||
CONFIG_DEBUG_LOCKDEP=y
|
|
||||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
|
||||||
CONFIG_DEBUG_LIST=y
|
|
||||||
CONFIG_DEBUG_SG=y
|
|
||||||
CONFIG_DEBUG_NOTIFIERS=y
|
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
|
||||||
CONFIG_LATENCYTOP=y
|
|
||||||
CONFIG_SCHED_TRACER=y
|
|
||||||
CONFIG_FTRACE_SYSCALLS=y
|
|
||||||
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
|
|
||||||
CONFIG_STACK_TRACER=y
|
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
|
||||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
|
||||||
CONFIG_S390_PTDUMP=y
|
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
CONFIG_CRYPTO_AUTHENC=m
|
CONFIG_CRYPTO_AUTHENC=m
|
||||||
CONFIG_CRYPTO_TEST=m
|
CONFIG_CRYPTO_TEST=m
|
||||||
@ -193,6 +170,7 @@ CONFIG_CRYPTO_CBC=y
|
|||||||
CONFIG_CRYPTO_CFB=m
|
CONFIG_CRYPTO_CFB=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CTS=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
|
CONFIG_CRYPTO_OFB=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_XTS=m
|
||||||
CONFIG_CRYPTO_CMAC=m
|
CONFIG_CRYPTO_CMAC=m
|
||||||
@ -231,7 +209,6 @@ CONFIG_CRYPTO_USER_API_HASH=m
|
|||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_ZCRYPT_MULTIDEVNODES=y
|
|
||||||
CONFIG_PKEY=m
|
CONFIG_PKEY=m
|
||||||
CONFIG_CRYPTO_PAES_S390=m
|
CONFIG_CRYPTO_PAES_S390=m
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
@ -247,4 +224,30 @@ CONFIG_CRC7=m
|
|||||||
# CONFIG_XZ_DEC_ARM is not set
|
# CONFIG_XZ_DEC_ARM is not set
|
||||||
# CONFIG_XZ_DEC_ARMTHUMB is not set
|
# CONFIG_XZ_DEC_ARMTHUMB is not set
|
||||||
# CONFIG_XZ_DEC_SPARC is not set
|
# CONFIG_XZ_DEC_SPARC is not set
|
||||||
CONFIG_CMM=m
|
CONFIG_DEBUG_INFO=y
|
||||||
|
CONFIG_DEBUG_INFO_DWARF4=y
|
||||||
|
CONFIG_GDB_SCRIPTS=y
|
||||||
|
CONFIG_UNUSED_SYMBOLS=y
|
||||||
|
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||||
|
CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_PAGEALLOC=y
|
||||||
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
|
CONFIG_PROVE_LOCKING=y
|
||||||
|
CONFIG_LOCK_STAT=y
|
||||||
|
CONFIG_DEBUG_LOCKDEP=y
|
||||||
|
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||||
|
CONFIG_DEBUG_LIST=y
|
||||||
|
CONFIG_DEBUG_SG=y
|
||||||
|
CONFIG_DEBUG_NOTIFIERS=y
|
||||||
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
|
CONFIG_LATENCYTOP=y
|
||||||
|
CONFIG_SCHED_TRACER=y
|
||||||
|
CONFIG_FTRACE_SYSCALLS=y
|
||||||
|
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
|
||||||
|
CONFIG_STACK_TRACER=y
|
||||||
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
|
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||||
|
CONFIG_S390_PTDUMP=y
|
||||||
|
@ -46,8 +46,6 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
mm->context.asce_limit = STACK_TOP_MAX;
|
mm->context.asce_limit = STACK_TOP_MAX;
|
||||||
mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
|
mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
|
||||||
_ASCE_USER_BITS | _ASCE_TYPE_REGION3;
|
_ASCE_USER_BITS | _ASCE_TYPE_REGION3;
|
||||||
/* pgd_alloc() did not account this pud */
|
|
||||||
mm_inc_nr_puds(mm);
|
|
||||||
break;
|
break;
|
||||||
case -PAGE_SIZE:
|
case -PAGE_SIZE:
|
||||||
/* forked 5-level task, set new asce with new_mm->pgd */
|
/* forked 5-level task, set new asce with new_mm->pgd */
|
||||||
@ -63,9 +61,6 @@ static inline int init_new_context(struct task_struct *tsk,
|
|||||||
/* forked 2-level compat task, set new asce with new mm->pgd */
|
/* forked 2-level compat task, set new asce with new mm->pgd */
|
||||||
mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
|
mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
|
||||||
_ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
|
_ASCE_USER_BITS | _ASCE_TYPE_SEGMENT;
|
||||||
/* pgd_alloc() did not account this pmd */
|
|
||||||
mm_inc_nr_pmds(mm);
|
|
||||||
mm_inc_nr_puds(mm);
|
|
||||||
}
|
}
|
||||||
crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));
|
crst_table_init((unsigned long *) mm->pgd, pgd_entry_type(mm));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -36,11 +36,11 @@ static inline void crst_table_init(unsigned long *crst, unsigned long entry)
|
|||||||
|
|
||||||
static inline unsigned long pgd_entry_type(struct mm_struct *mm)
|
static inline unsigned long pgd_entry_type(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
if (mm->context.asce_limit <= _REGION3_SIZE)
|
if (mm_pmd_folded(mm))
|
||||||
return _SEGMENT_ENTRY_EMPTY;
|
return _SEGMENT_ENTRY_EMPTY;
|
||||||
if (mm->context.asce_limit <= _REGION2_SIZE)
|
if (mm_pud_folded(mm))
|
||||||
return _REGION3_ENTRY_EMPTY;
|
return _REGION3_ENTRY_EMPTY;
|
||||||
if (mm->context.asce_limit <= _REGION1_SIZE)
|
if (mm_p4d_folded(mm))
|
||||||
return _REGION2_ENTRY_EMPTY;
|
return _REGION2_ENTRY_EMPTY;
|
||||||
return _REGION1_ENTRY_EMPTY;
|
return _REGION1_ENTRY_EMPTY;
|
||||||
}
|
}
|
||||||
|
@ -493,6 +493,24 @@ static inline int is_module_addr(void *addr)
|
|||||||
_REGION_ENTRY_PROTECT | \
|
_REGION_ENTRY_PROTECT | \
|
||||||
_REGION_ENTRY_NOEXEC)
|
_REGION_ENTRY_NOEXEC)
|
||||||
|
|
||||||
|
static inline bool mm_p4d_folded(struct mm_struct *mm)
|
||||||
|
{
|
||||||
|
return mm->context.asce_limit <= _REGION1_SIZE;
|
||||||
|
}
|
||||||
|
#define mm_p4d_folded(mm) mm_p4d_folded(mm)
|
||||||
|
|
||||||
|
static inline bool mm_pud_folded(struct mm_struct *mm)
|
||||||
|
{
|
||||||
|
return mm->context.asce_limit <= _REGION2_SIZE;
|
||||||
|
}
|
||||||
|
#define mm_pud_folded(mm) mm_pud_folded(mm)
|
||||||
|
|
||||||
|
static inline bool mm_pmd_folded(struct mm_struct *mm)
|
||||||
|
{
|
||||||
|
return mm->context.asce_limit <= _REGION3_SIZE;
|
||||||
|
}
|
||||||
|
#define mm_pmd_folded(mm) mm_pmd_folded(mm)
|
||||||
|
|
||||||
static inline int mm_has_pgste(struct mm_struct *mm)
|
static inline int mm_has_pgste(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PGSTE
|
#ifdef CONFIG_PGSTE
|
||||||
|
@ -236,7 +236,7 @@ static inline unsigned long current_stack_pointer(void)
|
|||||||
return sp;
|
return sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __no_sanitize_address_or_inline unsigned short stap(void)
|
static __no_kasan_or_inline unsigned short stap(void)
|
||||||
{
|
{
|
||||||
unsigned short cpu_address;
|
unsigned short cpu_address;
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ static inline void __load_psw(psw_t psw)
|
|||||||
* Set PSW mask to specified value, while leaving the
|
* Set PSW mask to specified value, while leaving the
|
||||||
* PSW addr pointing to the next instruction.
|
* PSW addr pointing to the next instruction.
|
||||||
*/
|
*/
|
||||||
static __no_sanitize_address_or_inline void __load_psw_mask(unsigned long mask)
|
static __no_kasan_or_inline void __load_psw_mask(unsigned long mask)
|
||||||
{
|
{
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
psw_t psw;
|
psw_t psw;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* General size of kernel stacks
|
* General size of kernel stacks
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_KASAN
|
#ifdef CONFIG_KASAN
|
||||||
#define THREAD_SIZE_ORDER 3
|
#define THREAD_SIZE_ORDER 4
|
||||||
#else
|
#else
|
||||||
#define THREAD_SIZE_ORDER 2
|
#define THREAD_SIZE_ORDER 2
|
||||||
#endif
|
#endif
|
||||||
|
@ -136,7 +136,7 @@ static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
|
|||||||
static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
|
static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
if (tlb->mm->context.asce_limit <= _REGION3_SIZE)
|
if (mm_pmd_folded(tlb->mm))
|
||||||
return;
|
return;
|
||||||
pgtable_pmd_page_dtor(virt_to_page(pmd));
|
pgtable_pmd_page_dtor(virt_to_page(pmd));
|
||||||
tlb_remove_table(tlb, pmd);
|
tlb_remove_table(tlb, pmd);
|
||||||
@ -152,7 +152,7 @@ static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd,
|
|||||||
static inline void p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
|
static inline void p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
if (tlb->mm->context.asce_limit <= _REGION1_SIZE)
|
if (mm_p4d_folded(tlb->mm))
|
||||||
return;
|
return;
|
||||||
tlb_remove_table(tlb, p4d);
|
tlb_remove_table(tlb, p4d);
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ static inline void p4d_free_tlb(struct mmu_gather *tlb, p4d_t *p4d,
|
|||||||
static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
|
static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
if (tlb->mm->context.asce_limit <= _REGION2_SIZE)
|
if (mm_pud_folded(tlb->mm))
|
||||||
return;
|
return;
|
||||||
tlb_remove_table(tlb, pud);
|
tlb_remove_table(tlb, pud);
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user