mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Merge remote-tracking branch 'drm/drm-next' into drm-misc-next
Requested by Boris Brezillon for some vc4 fixes that are needed for future vc4 work. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
This commit is contained in:
		
						commit
						65ffc51aba
					
				
					 1048 changed files with 23276 additions and 15198 deletions
				
			
		
							
								
								
									
										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>;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@ Required properties:
 | 
				
			||||||
  - "renesas,r8a7793-lvds" for R8A7793 (R-Car M2-N) compatible LVDS encoders
 | 
					  - "renesas,r8a7793-lvds" for R8A7793 (R-Car M2-N) compatible LVDS encoders
 | 
				
			||||||
  - "renesas,r8a7795-lvds" for R8A7795 (R-Car H3) compatible LVDS encoders
 | 
					  - "renesas,r8a7795-lvds" for R8A7795 (R-Car H3) compatible LVDS encoders
 | 
				
			||||||
  - "renesas,r8a7796-lvds" for R8A7796 (R-Car M3-W) compatible LVDS encoders
 | 
					  - "renesas,r8a7796-lvds" for R8A7796 (R-Car M3-W) compatible LVDS encoders
 | 
				
			||||||
 | 
					  - "renesas,r8a77965-lvds" for R8A77965 (R-Car M3-N) compatible LVDS encoders
 | 
				
			||||||
  - "renesas,r8a77970-lvds" for R8A77970 (R-Car V3M) compatible LVDS encoders
 | 
					  - "renesas,r8a77970-lvds" for R8A77970 (R-Car V3M) compatible LVDS encoders
 | 
				
			||||||
  - "renesas,r8a77980-lvds" for R8A77980 (R-Car V3H) compatible LVDS encoders
 | 
					  - "renesas,r8a77980-lvds" for R8A77980 (R-Car V3H) compatible LVDS encoders
 | 
				
			||||||
  - "renesas,r8a77990-lvds" for R8A77990 (R-Car E3) compatible LVDS encoders
 | 
					  - "renesas,r8a77990-lvds" for R8A77990 (R-Car E3) compatible LVDS encoders
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,9 @@ Required Properties:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - compatible: must be one of the following.
 | 
					  - compatible: must be one of the following.
 | 
				
			||||||
    - "renesas,du-r8a7743" for R8A7743 (RZ/G1M) compatible DU
 | 
					    - "renesas,du-r8a7743" for R8A7743 (RZ/G1M) compatible DU
 | 
				
			||||||
 | 
					    - "renesas,du-r8a7744" for R8A7744 (RZ/G1N) compatible DU
 | 
				
			||||||
    - "renesas,du-r8a7745" for R8A7745 (RZ/G1E) compatible DU
 | 
					    - "renesas,du-r8a7745" for R8A7745 (RZ/G1E) compatible DU
 | 
				
			||||||
 | 
					    - "renesas,du-r8a77470" for R8A77470 (RZ/G1C) compatible DU
 | 
				
			||||||
    - "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
 | 
					    - "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
 | 
				
			||||||
    - "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
 | 
					    - "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
 | 
				
			||||||
    - "renesas,du-r8a7791" for R8A7791 (R-Car M2-W) compatible DU
 | 
					    - "renesas,du-r8a7791" for R8A7791 (R-Car M2-W) compatible DU
 | 
				
			||||||
| 
						 | 
					@ -52,7 +54,9 @@ corresponding to each DU output.
 | 
				
			||||||
                        Port0          Port1          Port2          Port3
 | 
					                        Port0          Port1          Port2          Port3
 | 
				
			||||||
-----------------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------------
 | 
				
			||||||
 R8A7743 (RZ/G1M)       DPAD 0         LVDS 0         -              -
 | 
					 R8A7743 (RZ/G1M)       DPAD 0         LVDS 0         -              -
 | 
				
			||||||
 | 
					 R8A7744 (RZ/G1N)       DPAD 0         LVDS 0         -              -
 | 
				
			||||||
 R8A7745 (RZ/G1E)       DPAD 0         DPAD 1         -              -
 | 
					 R8A7745 (RZ/G1E)       DPAD 0         DPAD 1         -              -
 | 
				
			||||||
 | 
					 R8A77470 (RZ/G1C)      DPAD 0         DPAD 1         LVDS 0         -
 | 
				
			||||||
 R8A7779 (R-Car H1)     DPAD 0         DPAD 1         -              -
 | 
					 R8A7779 (R-Car H1)     DPAD 0         DPAD 1         -              -
 | 
				
			||||||
 R8A7790 (R-Car H2)     DPAD 0         LVDS 0         LVDS 1         -
 | 
					 R8A7790 (R-Car H2)     DPAD 0         LVDS 0         LVDS 1         -
 | 
				
			||||||
 R8A7791 (R-Car M2-W)   DPAD 0         LVDS 0         -              -
 | 
					 R8A7791 (R-Car M2-W)   DPAD 0         LVDS 0         -              -
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										68
									
								
								Documentation/gpu/amdgpu-dc.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Documentation/gpu/amdgpu-dc.rst
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,68 @@
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					drm/amd/display - Display Core (DC)
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*placeholder - general description of supported platforms, what dc is, etc.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Because it is partially shared with other operating systems, the Display Core
 | 
				
			||||||
 | 
					Driver is divided in two pieces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. **Display Core (DC)** contains the OS-agnostic components. Things like
 | 
				
			||||||
 | 
					   hardware programming and resource management are handled here.
 | 
				
			||||||
 | 
					2. **Display Manager (DM)** contains the OS-dependent components. Hooks to the
 | 
				
			||||||
 | 
					   amdgpu base driver and DRM are implemented here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It doesn't help that the entire package is frequently referred to as DC. But
 | 
				
			||||||
 | 
					with the context in mind, it should be clear.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When CONFIG_DRM_AMD_DC is enabled, DC will be initialized by default for
 | 
				
			||||||
 | 
					supported ASICs. To force disable, set `amdgpu.dc=0` on kernel command line.
 | 
				
			||||||
 | 
					Likewise, to force enable on unsupported ASICs, set `amdgpu.dc=1`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To determine if DC is loaded, search dmesg for the following entry:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``Display Core initialized with <version number here>``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AMDgpu Display Manager
 | 
				
			||||||
 | 
					======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :doc: overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
 | 
				
			||||||
 | 
					   :internal:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Lifecycle
 | 
				
			||||||
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :doc: DM Lifecycle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :functions: dm_hw_init dm_hw_fini
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Interrupts
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
 | 
				
			||||||
 | 
					   :doc: overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_irq.c
 | 
				
			||||||
 | 
					   :internal:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :functions: register_hpd_handlers dm_crtc_high_irq dm_pflip_high_irq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Atomic Implementation
 | 
				
			||||||
 | 
					---------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :doc: atomic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. kernel-doc:: drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
 | 
				
			||||||
 | 
					   :functions: amdgpu_dm_atomic_check amdgpu_dm_atomic_commit_tail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Display Core
 | 
				
			||||||
 | 
					============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**WIP**
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ GPU Driver Documentation
 | 
				
			||||||
.. toctree::
 | 
					.. toctree::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   amdgpu
 | 
					   amdgpu
 | 
				
			||||||
 | 
					   amdgpu-dc
 | 
				
			||||||
   i915
 | 
					   i915
 | 
				
			||||||
   meson
 | 
					   meson
 | 
				
			||||||
   pl111
 | 
					   pl111
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,8 +72,8 @@ object TTM to provide a pool for buffer object allocation by clients and
 | 
				
			||||||
the kernel itself. The type of this object should be
 | 
					the kernel itself. The type of this object should be
 | 
				
			||||||
TTM_GLOBAL_TTM_BO, and its size should be sizeof(struct
 | 
					TTM_GLOBAL_TTM_BO, and its size should be sizeof(struct
 | 
				
			||||||
ttm_bo_global). Again, driver-specific init and release functions may
 | 
					ttm_bo_global). Again, driver-specific init and release functions may
 | 
				
			||||||
be provided, likely eventually calling ttm_bo_global_init() and
 | 
					be provided, likely eventually calling ttm_bo_global_ref_init() and
 | 
				
			||||||
ttm_bo_global_release(), respectively. Also, like the previous
 | 
					ttm_bo_global_ref_release(), respectively. Also, like the previous
 | 
				
			||||||
object, ttm_global_item_ref() is used to create an initial reference
 | 
					object, ttm_global_item_ref() is used to create an initial reference
 | 
				
			||||||
count for the TTM, which will call your initialization function.
 | 
					count for the TTM, which will call your initialization function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -143,7 +143,7 @@ using a number of wrapper functions:
 | 
				
			||||||
	Query the address space, and return true if it is completely
 | 
						Query the address space, and return true if it is completely
 | 
				
			||||||
	unevictable.
 | 
						unevictable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are currently used in two places in the kernel:
 | 
					These are currently used in three places in the kernel:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 (1) By ramfs to mark the address spaces of its inodes when they are created,
 | 
					 (1) By ramfs to mark the address spaces of its inodes when they are created,
 | 
				
			||||||
     and this mark remains for the life of the inode.
 | 
					     and this mark remains for the life of the inode.
 | 
				
			||||||
| 
						 | 
					@ -154,6 +154,10 @@ These are currently used in two places in the kernel:
 | 
				
			||||||
     swapped out; the application must touch the pages manually if it wants to
 | 
					     swapped out; the application must touch the pages manually if it wants to
 | 
				
			||||||
     ensure they're in memory.
 | 
					     ensure they're in memory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 (3) By the i915 driver to mark pinned address space until it's unpinned. The
 | 
				
			||||||
 | 
					     amount of unevictable memory marked by i915 driver is roughly the bounded
 | 
				
			||||||
 | 
					     object size in debugfs/dri/0/i915_gem_objects.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Detecting Unevictable Pages
 | 
					Detecting Unevictable Pages
 | 
				
			||||||
---------------------------
 | 
					---------------------------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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>
 | 
				
			||||||
| 
						 | 
					@ -5541,6 +5548,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
 | 
				
			||||||
| 
						 | 
					@ -6312,6 +6320,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
 | 
				
			||||||
| 
						 | 
					@ -6620,9 +6629,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*
 | 
				
			||||||
| 
						 | 
					@ -6874,6 +6883,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
 | 
				
			||||||
| 
						 | 
					@ -7442,6 +7458,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>
 | 
				
			||||||
| 
						 | 
					@ -7452,12 +7482,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
 | 
				
			||||||
| 
						 | 
					@ -7545,12 +7569,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>
 | 
				
			||||||
| 
						 | 
					@ -7583,6 +7601,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
 | 
				
			||||||
| 
						 | 
					@ -8380,7 +8405,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
 | 
				
			||||||
| 
						 | 
					@ -8397,7 +8422,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
 | 
				
			||||||
| 
						 | 
					@ -8416,7 +8441,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.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10797,6 +10822,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
 | 
				
			||||||
| 
						 | 
					@ -10806,9 +10839,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
 | 
				
			||||||
| 
						 | 
					@ -11743,6 +11776,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/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13975,11 +14009,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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14076,6 +14109,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
 | 
				
			||||||
| 
						 | 
					@ -15449,9 +15483,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 @@ aliases {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	chosen {
 | 
						chosen {
 | 
				
			||||||
		stdout-path = "&uart1:115200n8";
 | 
							stdout-path = "serial0:115200n8";
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memory@70000000 {
 | 
						memory@70000000 {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -740,7 +740,7 @@ usdhc3: mmc@2198000 {
 | 
				
			||||||
			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 @@ reg_enet_3v3: regulator-enet-3v3 {
 | 
				
			||||||
		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 @@ &fec1 {
 | 
				
			||||||
	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_RD2__ENET1_RX_DATA_2	0x3081
 | 
				
			||||||
				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 @@ gmac0: ethernet@ff800000 {
 | 
				
			||||||
			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 @@ gmac1: ethernet@ff802000 {
 | 
				
			||||||
			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 @@ gmac2: ethernet@ff804000 {
 | 
				
			||||||
			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 @@ hscif2: serial@e6560000 {
 | 
				
			||||||
			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 @@ x1_clk: x1-clock {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
&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 @@ &extalr_clk {
 | 
				
			||||||
	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 @@ &pcie_phy {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
&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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue