Merge tag 'kvm-for-3.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into kvm-next

This commit is contained in:
Paolo Bonzini 2014-03-04 15:58:00 +01:00
commit 1c2af4968e
751 changed files with 9758 additions and 4205 deletions

3
.gitignore vendored
View File

@ -92,3 +92,6 @@ extra_certificates
signing_key.priv signing_key.priv
signing_key.x509 signing_key.x509
x509.genkey x509.genkey
# Kconfig presets
all.config

View File

@ -29,6 +29,8 @@ DMA-ISA-LPC.txt
- How to do DMA with ISA (and LPC) devices. - How to do DMA with ISA (and LPC) devices.
DMA-attributes.txt DMA-attributes.txt
- listing of the various possible attributes a DMA region can have - listing of the various possible attributes a DMA region can have
dmatest.txt
- how to compile, configure and use the dmatest system.
DocBook/ DocBook/
- directory with DocBook templates etc. for kernel documentation. - directory with DocBook templates etc. for kernel documentation.
EDID/ EDID/
@ -77,6 +79,8 @@ arm/
- directory with info about Linux on the ARM architecture. - directory with info about Linux on the ARM architecture.
arm64/ arm64/
- directory with info about Linux on the 64 bit ARM architecture. - directory with info about Linux on the 64 bit ARM architecture.
assoc_array.txt
- generic associative array intro.
atomic_ops.txt atomic_ops.txt
- semantics and behavior of atomic and bitmask operations. - semantics and behavior of atomic and bitmask operations.
auxdisplay/ auxdisplay/
@ -87,6 +91,8 @@ bad_memory.txt
- how to use kernel parameters to exclude bad RAM regions. - how to use kernel parameters to exclude bad RAM regions.
basic_profiling.txt basic_profiling.txt
- basic instructions for those who wants to profile Linux kernel. - basic instructions for those who wants to profile Linux kernel.
bcache.txt
- Block-layer cache on fast SSDs to improve slow (raid) I/O performance.
binfmt_misc.txt binfmt_misc.txt
- info on the kernel support for extra binary formats. - info on the kernel support for extra binary formats.
blackfin/ blackfin/
@ -171,6 +177,8 @@ early-userspace/
- info about initramfs, klibc, and userspace early during boot. - info about initramfs, klibc, and userspace early during boot.
edac.txt edac.txt
- information on EDAC - Error Detection And Correction - information on EDAC - Error Detection And Correction
efi-stub.txt
- How to use the EFI boot stub to bypass GRUB or elilo on EFI systems.
eisa.txt eisa.txt
- info on EISA bus support. - info on EISA bus support.
email-clients.txt email-clients.txt
@ -195,8 +203,8 @@ futex-requeue-pi.txt
- info on requeueing of tasks from a non-PI futex to a PI futex - info on requeueing of tasks from a non-PI futex to a PI futex
gcov.txt gcov.txt
- use of GCC's coverage testing tool "gcov" with the Linux kernel - use of GCC's coverage testing tool "gcov" with the Linux kernel
gpio.txt gpio/
- overview of GPIO (General Purpose Input/Output) access conventions. - gpio related documentation
hid/ hid/
- directory with information on human interface devices - directory with information on human interface devices
highuid.txt highuid.txt
@ -255,6 +263,8 @@ kernel-docs.txt
- listing of various WWW + books that document kernel internals. - listing of various WWW + books that document kernel internals.
kernel-parameters.txt kernel-parameters.txt
- summary listing of command line / boot prompt args for the kernel. - summary listing of command line / boot prompt args for the kernel.
kernel-per-CPU-kthreads.txt
- List of all per-CPU kthreads and how they introduce jitter.
kmemcheck.txt kmemcheck.txt
- info on dynamic checker that detects uses of uninitialized memory. - info on dynamic checker that detects uses of uninitialized memory.
kmemleak.txt kmemleak.txt
@ -299,8 +309,6 @@ memory-devices/
- directory with info on parts like the Texas Instruments EMIF driver - directory with info on parts like the Texas Instruments EMIF driver
memory-hotplug.txt memory-hotplug.txt
- Hotpluggable memory support, how to use and current status. - Hotpluggable memory support, how to use and current status.
memory.txt
- info on typical Linux memory problems.
metag/ metag/
- directory with info about Linux on Meta architecture. - directory with info about Linux on Meta architecture.
mips/ mips/
@ -311,6 +319,8 @@ mmc/
- directory with info about the MMC subsystem - directory with info about the MMC subsystem
mn10300/ mn10300/
- directory with info about the mn10300 architecture port - directory with info about the mn10300 architecture port
module-signing.txt
- Kernel module signing for increased security when loading modules.
mtd/ mtd/
- directory with info about memory technology devices (flash) - directory with info about memory technology devices (flash)
mono.txt mono.txt
@ -343,6 +353,8 @@ pcmcia/
- info on the Linux PCMCIA driver. - info on the Linux PCMCIA driver.
percpu-rw-semaphore.txt percpu-rw-semaphore.txt
- RCU based read-write semaphore optimized for locking for reading - RCU based read-write semaphore optimized for locking for reading
phy.txt
- Description of the generic PHY framework.
pi-futex.txt pi-futex.txt
- documentation on lightweight priority inheritance futexes. - documentation on lightweight priority inheritance futexes.
pinctrl.txt pinctrl.txt
@ -431,6 +443,8 @@ sysrq.txt
- info on the magic SysRq key. - info on the magic SysRq key.
target/ target/
- directory with info on generating TCM v4 fabric .ko modules - directory with info on generating TCM v4 fabric .ko modules
this_cpu_ops.txt
- List rationale behind and the way to use this_cpu operations.
thermal/ thermal/
- directory with information on managing thermal issues (CPU/temp) - directory with information on managing thermal issues (CPU/temp)
trace/ trace/
@ -469,6 +483,8 @@ wimax/
- directory with info about Intel Wireless Wimax Connections - directory with info about Intel Wireless Wimax Connections
workqueue.txt workqueue.txt
- information on the Concurrency Managed Workqueue implementation - information on the Concurrency Managed Workqueue implementation
ww-mutex-design.txt
- Intro to Mutex wait/would deadlock handling.s
x86/x86_64/ x86/x86_64/
- directory with info on Linux support for AMD x86-64 (Hammer) machines. - directory with info on Linux support for AMD x86-64 (Hammer) machines.
xtensa/ xtensa/

View File

@ -3,7 +3,8 @@ Date: Nov 2010
Contact: Kay Sievers <kay.sievers@vrfy.org> Contact: Kay Sievers <kay.sievers@vrfy.org>
Description: Description:
Shows the list of currently configured Shows the list of currently configured
console devices, like 'tty1 ttyS0'. tty devices used for the console,
like 'tty1 ttyS0'.
The last entry in the file is the active The last entry in the file is the active
device connected to /dev/console. device connected to /dev/console.
The file supports poll() to detect virtual The file supports poll() to detect virtual

View File

@ -8,6 +8,8 @@ listRCU.txt
- Using RCU to Protect Read-Mostly Linked Lists - Using RCU to Protect Read-Mostly Linked Lists
lockdep.txt lockdep.txt
- RCU and lockdep checking - RCU and lockdep checking
lockdep-splat.txt
- RCU Lockdep splats explained.
NMI-RCU.txt NMI-RCU.txt
- Using RCU to Protect Dynamic NMI Handlers - Using RCU to Protect Dynamic NMI Handlers
rcubarrier.txt rcubarrier.txt

View File

@ -4,6 +4,8 @@ Booting
- requirements for booting - requirements for booting
Interrupts Interrupts
- ARM Interrupt subsystem documentation - ARM Interrupt subsystem documentation
IXP4xx
- Intel IXP4xx Network processor.
msm msm
- MSM specific documentation - MSM specific documentation
Netwinder Netwinder
@ -24,8 +26,16 @@ SPEAr
- ST SPEAr platform Linux Overview - ST SPEAr platform Linux Overview
VFP/ VFP/
- Release notes for Linux Kernel Vector Floating Point support code - Release notes for Linux Kernel Vector Floating Point support code
cluster-pm-race-avoidance.txt
- Algorithm for CPU and Cluster setup/teardown
empeg/ empeg/
- Ltd's Empeg MP3 Car Audio Player - Ltd's Empeg MP3 Car Audio Player
firmware.txt
- Secure firmware registration and calling.
kernel_mode_neon.txt
- How to use NEON instructions in kernel mode
kernel_user_helpers.txt
- Helper functions in kernel space made available for userspace.
mem_alignment mem_alignment
- alignment abort handler documentation - alignment abort handler documentation
memory.txt memory.txt
@ -34,3 +44,7 @@ nwfpe/
- NWFPE floating point emulator documentation - NWFPE floating point emulator documentation
swp_emulation swp_emulation
- SWP/SWPB emulation handler/logging description - SWP/SWPB emulation handler/logging description
tcm.txt
- ARM Tightly Coupled Memory
vlocks.txt
- Voting locks, low-level mechanism relying on memory system atomic writes.

View File

@ -1,8 +1,10 @@
00-INDEX 00-INDEX
- This file - This file
Makefile
- Makefile for gptimers example file.
bfin-gpio-notes.txt bfin-gpio-notes.txt
- Notes in developing/using bfin-gpio driver. - Notes in developing/using bfin-gpio driver.
bfin-spi-notes.txt bfin-spi-notes.txt
- Notes for using bfin spi bus driver. - Notes for using bfin spi bus driver.
gptimers-example.c
- gptimers example

View File

@ -14,6 +14,8 @@ deadline-iosched.txt
- Deadline IO scheduler tunables - Deadline IO scheduler tunables
ioprio.txt ioprio.txt
- Block io priorities (in CFQ scheduler) - Block io priorities (in CFQ scheduler)
null_blk.txt
- Null block for block-layer benchmarking.
queue-sysfs.txt queue-sysfs.txt
- Queue's sysfs entries - Queue's sysfs entries
request.txt request.txt

View File

@ -8,3 +8,5 @@ https://lists.ozlabs.org/listinfo/devicetree-discuss
- this file - this file
booting-without-of.txt booting-without-of.txt
- Booting Linux without Open Firmware, describes history and format of device trees. - Booting Linux without Open Firmware, describes history and format of device trees.
usage-model.txt
- How Linux uses DT and what DT aims to solve.

View File

@ -0,0 +1,18 @@
TI-NSPIRE interrupt controller
Required properties:
- compatible: Compatible property value should be "lsi,zevio-intc".
- reg: Physical base address of the controller and length of memory mapped
region.
- interrupt-controller : Identifies the node as an interrupt controller
Example:
interrupt-controller {
compatible = "lsi,zevio-intc";
interrupt-controller;
reg = <0xDC000000 0x1000>;
#interrupt-cells = <1>;
};

View File

@ -13,6 +13,9 @@ Required properties:
- #address-cells: should be one. The cell is the slot id. - #address-cells: should be one. The cell is the slot id.
- #size-cells: should be zero. - #size-cells: should be zero.
- at least one slot node - at least one slot node
- clock-names: tuple listing input clock names.
Required elements: "mci_clk"
- clocks: phandles to input clocks.
The node contains child nodes for each slot that the platform uses The node contains child nodes for each slot that the platform uses
@ -24,6 +27,8 @@ mmc0: mmc@f0008000 {
interrupts = <12 4>; interrupts = <12 4>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
clock-names = "mci_clk";
clocks = <&mci0_clk>;
[ child node definitions...] [ child node definitions...]
}; };

View File

@ -1,7 +1,8 @@
* Allwinner EMAC ethernet controller * Allwinner EMAC ethernet controller
Required properties: Required properties:
- compatible: should be "allwinner,sun4i-emac". - compatible: should be "allwinner,sun4i-a10-emac" (Deprecated:
"allwinner,sun4i-emac")
- reg: address and length of the register set for the device. - reg: address and length of the register set for the device.
- interrupts: interrupt for the device - interrupts: interrupt for the device
- phy: A phandle to a phy node defining the PHY address (as the reg - phy: A phandle to a phy node defining the PHY address (as the reg
@ -14,7 +15,7 @@ Optional properties:
Example: Example:
emac: ethernet@01c0b000 { emac: ethernet@01c0b000 {
compatible = "allwinner,sun4i-emac"; compatible = "allwinner,sun4i-a10-emac";
reg = <0x01c0b000 0x1000>; reg = <0x01c0b000 0x1000>;
interrupts = <55>; interrupts = <55>;
clocks = <&ahb_gates 17>; clocks = <&ahb_gates 17>;

View File

@ -1,7 +1,8 @@
* Allwinner A10 MDIO Ethernet Controller interface * Allwinner A10 MDIO Ethernet Controller interface
Required properties: Required properties:
- compatible: should be "allwinner,sun4i-mdio". - compatible: should be "allwinner,sun4i-a10-mdio"
(Deprecated: "allwinner,sun4i-mdio").
- reg: address and length of the register set for the device. - reg: address and length of the register set for the device.
Optional properties: Optional properties:
@ -9,7 +10,7 @@ Optional properties:
Example at the SoC level: Example at the SoC level:
mdio@01c0b080 { mdio@01c0b080 {
compatible = "allwinner,sun4i-mdio"; compatible = "allwinner,sun4i-a10-mdio";
reg = <0x01c0b080 0x14>; reg = <0x01c0b080 0x14>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;

View File

@ -0,0 +1,47 @@
Binding for TI bq2415x Li-Ion Charger
Required properties:
- compatible: Should contain one of the following:
* "ti,bq24150"
* "ti,bq24150"
* "ti,bq24150a"
* "ti,bq24151"
* "ti,bq24151a"
* "ti,bq24152"
* "ti,bq24153"
* "ti,bq24153a"
* "ti,bq24155"
* "ti,bq24156"
* "ti,bq24156a"
* "ti,bq24158"
- reg: integer, i2c address of the device.
- ti,current-limit: integer, initial maximum current charger can pull
from power supply in mA.
- ti,weak-battery-voltage: integer, weak battery voltage threshold in mV.
The chip will use slow precharge if battery voltage
is below this value.
- ti,battery-regulation-voltage: integer, maximum charging voltage in mV.
- ti,charge-current: integer, maximum charging current in mA.
- ti,termination-current: integer, charge will be terminated when current in
constant-voltage phase drops below this value (in mA).
- ti,resistor-sense: integer, value of sensing resistor in milliohm.
Optional properties:
- ti,usb-charger-detection: phandle to usb charger detection device.
(required for auto mode)
Example from Nokia N900:
bq24150a {
compatible = "ti,bq24150a";
reg = <0x6b>;
ti,current-limit = <100>;
ti,weak-battery-voltage = <3400>;
ti,battery-regulation-voltage = <4200>;
ti,charge-current = <650>;
ti,termination-current = <100>;
ti,resistor-sense = <68>;
ti,usb-charger-detection = <&isp1704>;
};

View File

@ -5,6 +5,9 @@ Required properties:
- reg: Address and length of the register set for the device - reg: Address and length of the register set for the device
- interrupts: Should contain spi interrupt - interrupts: Should contain spi interrupt
- cs-gpios: chipselects - cs-gpios: chipselects
- clock-names: tuple listing input clock names.
Required elements: "spi_clk"
- clocks: phandles to input clocks.
Example: Example:
@ -14,6 +17,8 @@ spi1: spi@fffcc000 {
interrupts = <13 4 5>; interrupts = <13 4 5>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
clocks = <&spi1_clk>;
clock-names = "spi_clk";
cs-gpios = <&pioB 3 0>; cs-gpios = <&pioB 3 0>;
status = "okay"; status = "okay";

View File

@ -8,6 +8,7 @@ ad Avionic Design GmbH
adi Analog Devices, Inc. adi Analog Devices, Inc.
aeroflexgaisler Aeroflex Gaisler AB aeroflexgaisler Aeroflex Gaisler AB
ak Asahi Kasei Corp. ak Asahi Kasei Corp.
allwinner Allwinner Technology Co., Ltd.
altr Altera Corp. altr Altera Corp.
amcc Applied Micro Circuits Corporation (APM, formally AMCC) amcc Applied Micro Circuits Corporation (APM, formally AMCC)
amstaos AMS-Taos Inc. amstaos AMS-Taos Inc.
@ -40,6 +41,7 @@ gmt Global Mixed-mode Technology, Inc.
gumstix Gumstix, Inc. gumstix Gumstix, Inc.
haoyu Haoyu Microelectronic Co. Ltd. haoyu Haoyu Microelectronic Co. Ltd.
hisilicon Hisilicon Limited. hisilicon Hisilicon Limited.
honeywell Honeywell
hp Hewlett Packard hp Hewlett Packard
ibm International Business Machines (IBM) ibm International Business Machines (IBM)
idt Integrated Device Technologies, Inc. idt Integrated Device Technologies, Inc.
@ -55,6 +57,7 @@ maxim Maxim Integrated Products
microchip Microchip Technology Inc. microchip Microchip Technology Inc.
mosaixtech Mosaix Technologies, Inc. mosaixtech Mosaix Technologies, Inc.
national National Semiconductor national National Semiconductor
neonode Neonode Inc.
nintendo Nintendo nintendo Nintendo
nvidia NVIDIA nvidia NVIDIA
nxp NXP Semiconductors nxp NXP Semiconductors
@ -64,7 +67,7 @@ phytec PHYTEC Messtechnik GmbH
picochip Picochip Ltd picochip Picochip Ltd
powervr PowerVR (deprecated, use img) powervr PowerVR (deprecated, use img)
qca Qualcomm Atheros, Inc. qca Qualcomm Atheros, Inc.
qcom Qualcomm, Inc. qcom Qualcomm Technologies, Inc
ralink Mediatek/Ralink Technology Corp. ralink Mediatek/Ralink Technology Corp.
ramtron Ramtron International ramtron Ramtron International
realtek Realtek Semiconductor Corp. realtek Realtek Semiconductor Corp.
@ -78,6 +81,7 @@ silabs Silicon Laboratories
simtek simtek
sirf SiRF Technology, Inc. sirf SiRF Technology, Inc.
snps Synopsys, Inc. snps Synopsys, Inc.
spansion Spansion Inc.
st STMicroelectronics st STMicroelectronics
ste ST-Ericsson ste ST-Ericsson
stericsson ST-Ericsson stericsson ST-Ericsson

View File

@ -78,7 +78,7 @@ Peter Beutner <p.beutner@gmx.net>
Wilson Michaels <wilsonmichaels@earthlink.net> Wilson Michaels <wilsonmichaels@earthlink.net>
for the lgdt330x frontend driver, and various bugfixes for the lgdt330x frontend driver, and various bugfixes
Michael Krufky <mkrufky@m1k.net> Michael Krufky <mkrufky@linuxtv.org>
for maintaining v4l/dvb inter-tree dependencies for maintaining v4l/dvb inter-tree dependencies
Taylor Jacob <rtjacob@earthlink.net> Taylor Jacob <rtjacob@earthlink.net>

View File

@ -5,6 +5,8 @@ please mail me.
00-INDEX 00-INDEX
- this file. - this file.
api.txt
- The frame buffer API between applications and buffer devices.
arkfb.txt arkfb.txt
- info on the fbdev driver for ARK Logic chips. - info on the fbdev driver for ARK Logic chips.
aty128fb.txt aty128fb.txt
@ -51,12 +53,16 @@ sh7760fb.txt
- info on the SH7760/SH7763 integrated LCDC Framebuffer driver. - info on the SH7760/SH7763 integrated LCDC Framebuffer driver.
sisfb.txt sisfb.txt
- info on the framebuffer device driver for various SiS chips. - info on the framebuffer device driver for various SiS chips.
sm501.txt
- info on the framebuffer device driver for sm501 videoframebuffer.
sstfb.txt sstfb.txt
- info on the frame buffer driver for 3dfx' Voodoo Graphics boards. - info on the frame buffer driver for 3dfx' Voodoo Graphics boards.
tgafb.txt tgafb.txt
- info on the TGA (DECChip 21030) frame buffer driver. - info on the TGA (DECChip 21030) frame buffer driver.
tridentfb.txt tridentfb.txt
info on the framebuffer driver for some Trident chip based cards. info on the framebuffer driver for some Trident chip based cards.
udlfb.txt
- Driver for DisplayLink USB 2.0 chips.
uvesafb.txt uvesafb.txt
- info on the userspace VESA (VBE2+ compliant) frame buffer device. - info on the userspace VESA (VBE2+ compliant) frame buffer device.
vesafb.txt vesafb.txt

View File

@ -2,6 +2,8 @@
- this file (info on some of the filesystems supported by linux). - this file (info on some of the filesystems supported by linux).
Locking Locking
- info on locking rules as they pertain to Linux VFS. - info on locking rules as they pertain to Linux VFS.
Makefile
- Makefile for building the filsystems-part of DocBook.
9p.txt 9p.txt
- 9p (v9fs) is an implementation of the Plan 9 remote fs protocol. - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol.
adfs.txt adfs.txt

View File

@ -12,6 +12,8 @@ nfs41-server.txt
- info on the Linux server implementation of NFSv4 minor version 1. - info on the Linux server implementation of NFSv4 minor version 1.
nfs-rdma.txt nfs-rdma.txt
- how to install and setup the Linux NFS/RDMA client and server software - how to install and setup the Linux NFS/RDMA client and server software
nfsd-admin-interfaces.txt
- Administrative interfaces for nfsd.
nfsroot.txt nfsroot.txt
- short guide on setting up a diskless box with NFS root filesystem. - short guide on setting up a diskless box with NFS root filesystem.
pnfs.txt pnfs.txt
@ -20,5 +22,5 @@ rpc-cache.txt
- introduction to the caching mechanisms in the sunrpc layer. - introduction to the caching mechanisms in the sunrpc layer.
idmapper.txt idmapper.txt
- information for configuring request-keys to be used by idmapper - information for configuring request-keys to be used by idmapper
knfsd-rpcgss.txt rpc-server-gss.txt
- Information on GSS authentication support in the NFS Server - Information on GSS authentication support in the NFS Server

View File

@ -8,8 +8,8 @@ reason, the kernel code must instantiate I2C devices explicitly. There are
several ways to achieve this, depending on the context and requirements. several ways to achieve this, depending on the context and requirements.
Method 1: Declare the I2C devices by bus number Method 1a: Declare the I2C devices by bus number
----------------------------------------------- ------------------------------------------------
This method is appropriate when the I2C bus is a system bus as is the case This method is appropriate when the I2C bus is a system bus as is the case
for many embedded systems. On such systems, each I2C bus has a number for many embedded systems. On such systems, each I2C bus has a number
@ -51,6 +51,43 @@ The devices will be automatically unbound and destroyed when the I2C bus
they sit on goes away (if ever.) they sit on goes away (if ever.)
Method 1b: Declare the I2C devices via devicetree
-------------------------------------------------
This method has the same implications as method 1a. The declaration of I2C
devices is here done via devicetree as subnodes of the master controller.
Example:
i2c1: i2c@400a0000 {
/* ... master properties skipped ... */
clock-frequency = <100000>;
flash@50 {
compatible = "atmel,24c256";
reg = <0x50>;
};
pca9532: gpio@60 {
compatible = "nxp,pca9532";
gpio-controller;
#gpio-cells = <2>;
reg = <0x60>;
};
};
Here, two devices are attached to the bus using a speed of 100kHz. For
additional properties which might be needed to set up the device, please refer
to its devicetree documentation in Documentation/devicetree/bindings/.
Method 1c: Declare the I2C devices via ACPI
-------------------------------------------
ACPI can also describe I2C devices. There is special documentation for this
which is currently located at Documentation/acpi/enumeration.txt.
Method 2: Instantiate the devices explicitly Method 2: Instantiate the devices explicitly
-------------------------------------------- --------------------------------------------

View File

@ -10,3 +10,5 @@ ide-tape.txt
- info on the IDE ATAPI streaming tape driver - info on the IDE ATAPI streaming tape driver
ide.txt ide.txt
- important info for users of ATA devices (IDE/EIDE disks and CD-ROMS). - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS).
warm-plug-howto.txt
- using sysfs to remove and add IDE devices.

View File

@ -1726,16 +1726,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
option description. option description.
memmap=nn[KMG]@ss[KMG] memmap=nn[KMG]@ss[KMG]
[KNL] Force usage of a specific region of memory [KNL] Force usage of a specific region of memory.
Region of memory to be used, from ss to ss+nn. Region of memory to be used is from ss to ss+nn.
memmap=nn[KMG]#ss[KMG] memmap=nn[KMG]#ss[KMG]
[KNL,ACPI] Mark specific memory as ACPI data. [KNL,ACPI] Mark specific memory as ACPI data.
Region of memory to be used, from ss to ss+nn. Region of memory to be marked is from ss to ss+nn.
memmap=nn[KMG]$ss[KMG] memmap=nn[KMG]$ss[KMG]
[KNL,ACPI] Mark specific memory as reserved. [KNL,ACPI] Mark specific memory as reserved.
Region of memory to be used, from ss to ss+nn. Region of memory to be reserved is from ss to ss+nn.
Example: Exclude memory from 0x18690000-0x1869ffff Example: Exclude memory from 0x18690000-0x1869ffff
memmap=64K$0x18690000 memmap=64K$0x18690000
or or

View File

@ -1,13 +1,15 @@
00-INDEX 00-INDEX
- This file - This file
acer-wmi.txt Makefile
- information on the Acer Laptop WMI Extras driver. - Makefile for building dslm example program.
asus-laptop.txt asus-laptop.txt
- information on the Asus Laptop Extras driver. - information on the Asus Laptop Extras driver.
disk-shock-protection.txt disk-shock-protection.txt
- information on hard disk shock protection. - information on hard disk shock protection.
dslm.c dslm.c
- Simple Disk Sleep Monitor program - Simple Disk Sleep Monitor program
hpfall.c
- (HP) laptop accelerometer program for disk protection.
laptop-mode.txt laptop-mode.txt
- how to conserve battery power using laptop-mode. - how to conserve battery power using laptop-mode.
sony-laptop.txt sony-laptop.txt

View File

@ -1,3 +1,7 @@
00-INDEX
- This file
leds-blinkm.txt
- Driver for BlinkM LED-devices.
leds-class.txt leds-class.txt
- documents LED handling under Linux. - documents LED handling under Linux.
leds-lp3944.txt leds-lp3944.txt
@ -12,3 +16,7 @@ leds-lp55xx.txt
- description about lp55xx common driver. - description about lp55xx common driver.
leds-lm3556.txt leds-lm3556.txt
- notes on how to use the leds-lm3556 driver. - notes on how to use the leds-lm3556 driver.
ledtrig-oneshot.txt
- One-shot LED trigger for both sporadic and dense events.
ledtrig-transient.txt
- LED Transient Trigger, one shot timer activation.

View File

@ -1,5 +1,7 @@
00-INDEX 00-INDEX
- this file - this file
README.buddha
- Amiga Buddha and Catweasel IDE Driver
kernel-options.txt kernel-options.txt
- command line options for Linux/m68k - command line options for Linux/m68k

View File

@ -6,8 +6,14 @@
- information on the 3Com Etherlink III Series Ethernet cards. - information on the 3Com Etherlink III Series Ethernet cards.
6pack.txt 6pack.txt
- info on the 6pack protocol, an alternative to KISS for AX.25 - info on the 6pack protocol, an alternative to KISS for AX.25
DLINK.txt LICENSE.qla3xxx
- info on the D-Link DE-600/DE-620 parallel port pocket adapters - GPLv2 for QLogic Linux Networking HBA Driver
LICENSE.qlge
- GPLv2 for QLogic Linux qlge NIC Driver
LICENSE.qlcnic
- GPLv2 for QLogic Linux qlcnic NIC Driver
Makefile
- Makefile for docsrc.
PLIP.txt PLIP.txt
- PLIP: The Parallel Line Internet Protocol device driver - PLIP: The Parallel Line Internet Protocol device driver
README.ipw2100 README.ipw2100
@ -17,7 +23,7 @@ README.ipw2200
README.sb1000 README.sb1000
- info on General Instrument/NextLevel SURFboard1000 cable modem. - info on General Instrument/NextLevel SURFboard1000 cable modem.
alias.txt alias.txt
- info on using alias network devices - info on using alias network devices.
arcnet-hardware.txt arcnet-hardware.txt
- tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc. - tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc.
arcnet.txt arcnet.txt
@ -80,7 +86,7 @@ framerelay.txt
- info on using Frame Relay/Data Link Connection Identifier (DLCI). - info on using Frame Relay/Data Link Connection Identifier (DLCI).
gen_stats.txt gen_stats.txt
- Generic networking statistics for netlink users. - Generic networking statistics for netlink users.
generic_hdlc.txt generic-hdlc.txt
- The generic High Level Data Link Control (HDLC) layer. - The generic High Level Data Link Control (HDLC) layer.
generic_netlink.txt generic_netlink.txt
- info on Generic Netlink - info on Generic Netlink
@ -88,6 +94,8 @@ gianfar.txt
- Gianfar Ethernet Driver. - Gianfar Ethernet Driver.
i40e.txt i40e.txt
- README for the Intel Ethernet Controller XL710 Driver (i40e). - README for the Intel Ethernet Controller XL710 Driver (i40e).
i40evf.txt
- Short note on the Driver for the Intel(R) XL710 X710 Virtual Function
ieee802154.txt ieee802154.txt
- Linux IEEE 802.15.4 implementation, API and drivers - Linux IEEE 802.15.4 implementation, API and drivers
igb.txt igb.txt
@ -102,6 +110,8 @@ ipddp.txt
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
iphase.txt iphase.txt
- Interphase PCI ATM (i)Chip IA Linux driver info. - Interphase PCI ATM (i)Chip IA Linux driver info.
ipsec.txt
- Note on not compressing IPSec payload and resulting failed policy check.
ipv6.txt ipv6.txt
- Options to the ipv6 kernel module. - Options to the ipv6 kernel module.
ipvs-sysctl.txt ipvs-sysctl.txt
@ -120,6 +130,8 @@ lapb-module.txt
- programming information of the LAPB module. - programming information of the LAPB module.
ltpc.txt ltpc.txt
- the Apple or Farallon LocalTalk PC card driver - the Apple or Farallon LocalTalk PC card driver
mac80211-auth-assoc-deauth.txt
- authentication and association / deauth-disassoc with max80211
mac80211-injection.txt mac80211-injection.txt
- HOWTO use packet injection with mac80211 - HOWTO use packet injection with mac80211
multiqueue.txt multiqueue.txt
@ -134,6 +146,10 @@ netdevices.txt
- info on network device driver functions exported to the kernel. - info on network device driver functions exported to the kernel.
netif-msg.txt netif-msg.txt
- Design of the network interface message level setting (NETIF_MSG_*). - Design of the network interface message level setting (NETIF_MSG_*).
netlink_mmap.txt
- memory mapped I/O with netlink
nf_conntrack-sysctl.txt
- list of netfilter-sysctl knobs.
nfc.txt nfc.txt
- The Linux Near Field Communication (NFS) subsystem. - The Linux Near Field Communication (NFS) subsystem.
openvswitch.txt openvswitch.txt
@ -176,7 +192,7 @@ skfp.txt
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
smc9.txt smc9.txt
- the driver for SMC's 9000 series of Ethernet cards - the driver for SMC's 9000 series of Ethernet cards
spider-net.txt spider_net.txt
- README for the Spidernet Driver (as found in PS3 / Cell BE). - README for the Spidernet Driver (as found in PS3 / Cell BE).
stmmac.txt stmmac.txt
- README for the STMicro Synopsys Ethernet driver. - README for the STMicro Synopsys Ethernet driver.
@ -188,6 +204,8 @@ tcp.txt
- short blurb on how TCP output takes place. - short blurb on how TCP output takes place.
tcp-thin.txt tcp-thin.txt
- kernel tuning options for low rate 'thin' TCP streams. - kernel tuning options for low rate 'thin' TCP streams.
team.txt
- pointer to information for ethernet teaming devices.
tlan.txt tlan.txt
- ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info. - ThunderLAN (Compaq Netelligent 10/100, Olicom OC-2xxx) driver info.
tproxy.txt tproxy.txt
@ -200,6 +218,8 @@ vortex.txt
- info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards. - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards.
vxge.txt vxge.txt
- README for the Neterion X3100 PCIe Server Adapter. - README for the Neterion X3100 PCIe Server Adapter.
vxlan.txt
- Virtual extensible LAN overview
x25.txt x25.txt
- general info on X.25 development. - general info on X.25 development.
x25-iface.txt x25-iface.txt

View File

@ -75,14 +75,26 @@ Before the controller can make use of the PHY, it has to get a reference to
it. This framework provides the following APIs to get a reference to the PHY. it. This framework provides the following APIs to get a reference to the PHY.
struct phy *phy_get(struct device *dev, const char *string); struct phy *phy_get(struct device *dev, const char *string);
struct phy *phy_optional_get(struct device *dev, const char *string);
struct phy *devm_phy_get(struct device *dev, const char *string); struct phy *devm_phy_get(struct device *dev, const char *string);
struct phy *devm_phy_optional_get(struct device *dev, const char *string);
phy_get and devm_phy_get can be used to get the PHY. In the case of dt boot, phy_get, phy_optional_get, devm_phy_get and devm_phy_optional_get can
the string arguments should contain the phy name as given in the dt data and be used to get the PHY. In the case of dt boot, the string arguments
in the case of non-dt boot, it should contain the label of the PHY. should contain the phy name as given in the dt data and in the case of
The only difference between the two APIs is that devm_phy_get associates the non-dt boot, it should contain the label of the PHY. The two
device with the PHY using devres on successful PHY get. On driver detach, devm_phy_get associates the device with the PHY using devres on
release function is invoked on the the devres data and devres data is freed. successful PHY get. On driver detach, release function is invoked on
the the devres data and devres data is freed. phy_optional_get and
devm_phy_optional_get should be used when the phy is optional. These
two functions will never return -ENODEV, but instead returns NULL when
the phy cannot be found.
It should be noted that NULL is a valid phy reference. All phy
consumer calls on the NULL phy become NOPs. That is the release calls,
the phy_init() and phy_exit() calls, and phy_power_on() and
phy_power_off() calls are all NOP when applied to a NULL phy. The NULL
phy is useful in devices for handling optional phy devices.
5. Releasing a reference to the PHY 5. Releasing a reference to the PHY

View File

@ -4,6 +4,8 @@ apm-acpi.txt
- basic info about the APM and ACPI support. - basic info about the APM and ACPI support.
basic-pm-debugging.txt basic-pm-debugging.txt
- Debugging suspend and resume - Debugging suspend and resume
charger-manager.txt
- Battery charger management.
devices.txt devices.txt
- How drivers interact with system-wide power management - How drivers interact with system-wide power management
drivers-testing.txt drivers-testing.txt
@ -22,6 +24,8 @@ pm_qos_interface.txt
- info on Linux PM Quality of Service interface - info on Linux PM Quality of Service interface
power_supply_class.txt power_supply_class.txt
- Tells userspace about battery, UPS, AC or DC power supply properties - Tells userspace about battery, UPS, AC or DC power supply properties
runtime_pm.txt
- Power management framework for I/O devices.
s2ram.txt s2ram.txt
- How to get suspend to ram working (and debug it when it isn't) - How to get suspend to ram working (and debug it when it isn't)
states.txt states.txt
@ -38,7 +42,5 @@ tricks.txt
- How to trick software suspend (to disk) into working when it isn't - How to trick software suspend (to disk) into working when it isn't
userland-swsusp.txt userland-swsusp.txt
- Experimental implementation of software suspend in userspace - Experimental implementation of software suspend in userspace
video_extension.txt
- ACPI video extensions
video.txt video.txt
- Video issues during resume from suspend - Video issues during resume from suspend

View File

@ -117,6 +117,7 @@ static void usage(char *progname)
" -f val adjust the ptp clock frequency by 'val' ppb\n" " -f val adjust the ptp clock frequency by 'val' ppb\n"
" -g get the ptp clock time\n" " -g get the ptp clock time\n"
" -h prints this message\n" " -h prints this message\n"
" -i val index for event/trigger\n"
" -k val measure the time offset between system and phc clock\n" " -k val measure the time offset between system and phc clock\n"
" for 'val' times (Maximum 25)\n" " for 'val' times (Maximum 25)\n"
" -p val enable output with a period of 'val' nanoseconds\n" " -p val enable output with a period of 'val' nanoseconds\n"
@ -154,6 +155,7 @@ int main(int argc, char *argv[])
int capabilities = 0; int capabilities = 0;
int extts = 0; int extts = 0;
int gettime = 0; int gettime = 0;
int index = 0;
int oneshot = 0; int oneshot = 0;
int pct_offset = 0; int pct_offset = 0;
int n_samples = 0; int n_samples = 0;
@ -167,7 +169,7 @@ int main(int argc, char *argv[])
progname = strrchr(argv[0], '/'); progname = strrchr(argv[0], '/');
progname = progname ? 1+progname : argv[0]; progname = progname ? 1+progname : argv[0];
while (EOF != (c = getopt(argc, argv, "a:A:cd:e:f:ghk:p:P:sSt:v"))) { while (EOF != (c = getopt(argc, argv, "a:A:cd:e:f:ghi:k:p:P:sSt:v"))) {
switch (c) { switch (c) {
case 'a': case 'a':
oneshot = atoi(optarg); oneshot = atoi(optarg);
@ -190,6 +192,9 @@ int main(int argc, char *argv[])
case 'g': case 'g':
gettime = 1; gettime = 1;
break; break;
case 'i':
index = atoi(optarg);
break;
case 'k': case 'k':
pct_offset = 1; pct_offset = 1;
n_samples = atoi(optarg); n_samples = atoi(optarg);
@ -301,7 +306,7 @@ int main(int argc, char *argv[])
if (extts) { if (extts) {
memset(&extts_request, 0, sizeof(extts_request)); memset(&extts_request, 0, sizeof(extts_request));
extts_request.index = 0; extts_request.index = index;
extts_request.flags = PTP_ENABLE_FEATURE; extts_request.flags = PTP_ENABLE_FEATURE;
if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) { if (ioctl(fd, PTP_EXTTS_REQUEST, &extts_request)) {
perror("PTP_EXTTS_REQUEST"); perror("PTP_EXTTS_REQUEST");
@ -375,7 +380,7 @@ int main(int argc, char *argv[])
return -1; return -1;
} }
memset(&perout_request, 0, sizeof(perout_request)); memset(&perout_request, 0, sizeof(perout_request));
perout_request.index = 0; perout_request.index = index;
perout_request.start.sec = ts.tv_sec + 2; perout_request.start.sec = ts.tv_sec + 2;
perout_request.start.nsec = 0; perout_request.start.nsec = 0;
perout_request.period.sec = 0; perout_request.period.sec = 0;

View File

@ -16,11 +16,13 @@ Debugging390.txt
- hints for debugging on s390 systems. - hints for debugging on s390 systems.
driver-model.txt driver-model.txt
- information on s390 devices and the driver model. - information on s390 devices and the driver model.
kvm.txt
- ioctl calls to /dev/kvm on s390.
monreader.txt monreader.txt
- information on accessing the z/VM monitor stream from Linux. - information on accessing the z/VM monitor stream from Linux.
qeth.txt
- HiperSockets Bridge Port Support.
s390dbf.txt s390dbf.txt
- information on using the s390 debug feature. - information on using the s390 debug feature.
TAPE zfcpdump.txt
- information on the driver for channel-attached tapes.
zfcpdump
- information on the s390 SCSI dump tool. - information on the s390 SCSI dump tool.

View File

@ -2,6 +2,8 @@
- this file. - this file.
sched-arch.txt sched-arch.txt
- CPU Scheduler implementation hints for architecture specific code. - CPU Scheduler implementation hints for architecture specific code.
sched-bwc.txt
- CFS bandwidth control overview.
sched-design-CFS.txt sched-design-CFS.txt
- goals, design and implementation of the Completely Fair Scheduler. - goals, design and implementation of the Completely Fair Scheduler.
sched-domains.txt sched-domains.txt

View File

@ -36,6 +36,8 @@ NinjaSCSI.txt
- info on WorkBiT NinjaSCSI-32/32Bi driver - info on WorkBiT NinjaSCSI-32/32Bi driver
aacraid.txt aacraid.txt
- Driver supporting Adaptec RAID controllers - Driver supporting Adaptec RAID controllers
advansys.txt
- List of Advansys Host Adapters
aha152x.txt aha152x.txt
- info on driver for Adaptec AHA152x based adapters - info on driver for Adaptec AHA152x based adapters
aic79xx.txt aic79xx.txt
@ -44,6 +46,12 @@ aic7xxx.txt
- info on driver for Adaptec controllers - info on driver for Adaptec controllers
arcmsr_spec.txt arcmsr_spec.txt
- ARECA FIRMWARE SPEC (for IOP331 adapter) - ARECA FIRMWARE SPEC (for IOP331 adapter)
bfa.txt
- Brocade FC/FCOE adapter driver.
bnx2fc.txt
- FCoE hardware offload for Broadcom network interfaces.
cxgb3i.txt
- Chelsio iSCSI Linux Driver
dc395x.txt dc395x.txt
- README file for the dc395x SCSI driver - README file for the dc395x SCSI driver
dpti.txt dpti.txt
@ -52,18 +60,24 @@ dtc3x80.txt
- info on driver for DTC 2x80 based adapters - info on driver for DTC 2x80 based adapters
g_NCR5380.txt g_NCR5380.txt
- info on driver for NCR5380 and NCR53c400 based adapters - info on driver for NCR5380 and NCR53c400 based adapters
hpsa.txt
- HP Smart Array Controller SCSI driver.
hptiop.txt hptiop.txt
- HIGHPOINT ROCKETRAID 3xxx RAID DRIVER - HIGHPOINT ROCKETRAID 3xxx RAID DRIVER
in2000.txt in2000.txt
- info on in2000 driver - info on in2000 driver
libsas.txt libsas.txt
- Serial Attached SCSI management layer. - Serial Attached SCSI management layer.
link_power_management_policy.txt
- Link power management options.
lpfc.txt lpfc.txt
- LPFC driver release notes - LPFC driver release notes
megaraid.txt megaraid.txt
- Common Management Module, shared code handling ioctls for LSI drivers - Common Management Module, shared code handling ioctls for LSI drivers
ncr53c8xx.txt ncr53c8xx.txt
- info on driver for NCR53c8xx based adapters - info on driver for NCR53c8xx based adapters
osd.txt
Object-Based Storage Device, command set introduction.
osst.txt osst.txt
- info on driver for OnStream SC-x0 SCSI tape - info on driver for OnStream SC-x0 SCSI tape
ppa.txt ppa.txt
@ -74,6 +88,8 @@ scsi-changer.txt
- README for the SCSI media changer driver - README for the SCSI media changer driver
scsi-generic.txt scsi-generic.txt
- info on the sg driver for generic (non-disk/CD/tape) SCSI devices. - info on the sg driver for generic (non-disk/CD/tape) SCSI devices.
scsi-parameters.txt
- List of SCSI-parameters to pass to the kernel at module load-time.
scsi.txt scsi.txt
- short blurb on using SCSI support as a module. - short blurb on using SCSI support as a module.
scsi_mid_low_api.txt scsi_mid_low_api.txt

View File

@ -4,10 +4,12 @@ README.cycladesZ
- info on Cyclades-Z firmware loading. - info on Cyclades-Z firmware loading.
digiepca.txt digiepca.txt
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
hayes-esp.txt driver
- info on using the Hayes ESP serial driver. - intro to the low level serial driver.
moxa-smartio moxa-smartio
- file with info on installing/using Moxa multiport serial driver. - file with info on installing/using Moxa multiport serial driver.
n_gsm.txt
- GSM 0710 tty multiplexer howto.
riscom8.txt riscom8.txt
- notes on using the RISCom/8 multi-port serial driver. - notes on using the RISCom/8 multi-port serial driver.
rocket.txt rocket.txt

View File

@ -0,0 +1,22 @@
00-INDEX
- this file.
Makefile
- Makefile for the example sourcefiles.
butterfly
- AVR Butterfly SPI driver overview and pin configuration.
ep93xx_spi
- Basic EP93xx SPI driver configuration.
pxa2xx
- PXA2xx SPI master controller build by spi_message fifo wq
spidev
- Intro to the userspace API for spi devices
spidev_fdx.c
- spidev example file
spi-lm70llp
- Connecting an LM70-LLP sensor to the kernel via the SPI subsys.
spi-sc18is602
- NXP SC18IS602/603 I2C-bus to SPI bridge
spi-summary
- (Linux) SPI overview. If unsure about SPI or SPI in Linux, start here.
spidev_test.c
- SPI testing utility.

View File

@ -543,7 +543,22 @@ SPI MASTER METHODS
queuing transfers that arrive in the meantime. When the driver is queuing transfers that arrive in the meantime. When the driver is
finished with this message, it must call finished with this message, it must call
spi_finalize_current_message() so the subsystem can issue the next spi_finalize_current_message() so the subsystem can issue the next
transfer. This may sleep. message. This may sleep.
master->transfer_one(struct spi_master *master, struct spi_device *spi,
struct spi_transfer *transfer)
The subsystem calls the driver to transfer a single transfer while
queuing transfers that arrive in the meantime. When the driver is
finished with this transfer, it must call
spi_finalize_current_transfer() so the subsystem can issue the next
transfer. This may sleep. Note: transfer_one and transfer_one_message
are mutually exclusive; when both are set, the generic subsystem does
not call your transfer_one callback.
Return values:
negative errno: error
0: transfer is finished
1: transfer is still in progress
DEPRECATED METHODS DEPRECATED METHODS

View File

@ -8,6 +8,8 @@ hpet_example.c
- sample hpet timer test program - sample hpet timer test program
hrtimers.txt hrtimers.txt
- subsystem for high-resolution kernel timers - subsystem for high-resolution kernel timers
Makefile
- Build and link hpet_example
NO_HZ.txt NO_HZ.txt
- Summary of the different methods for the scheduler clock-interrupts management. - Summary of the different methods for the scheduler clock-interrupts management.
timers-howto.txt timers-howto.txt

View File

@ -20,5 +20,7 @@ ppc-pv.txt
- the paravirtualization interface on PowerPC. - the paravirtualization interface on PowerPC.
review-checklist.txt review-checklist.txt
- review checklist for KVM patches. - review checklist for KVM patches.
s390-diag.txt
- Diagnose hypercall description (for IBM S/390)
timekeeping.txt timekeeping.txt
- timekeeping virtualization for x86-based architectures. - timekeeping virtualization for x86-based architectures.

View File

@ -16,8 +16,6 @@ hwpoison.txt
- explains what hwpoison is - explains what hwpoison is
ksm.txt ksm.txt
- how to use the Kernel Samepage Merging feature. - how to use the Kernel Samepage Merging feature.
locking
- info on how locking and synchronization is done in the Linux vm code.
numa numa
- information about NUMA specific code in the Linux vm. - information about NUMA specific code in the Linux vm.
numa_memory_policy.txt numa_memory_policy.txt
@ -32,6 +30,8 @@ slub.txt
- a short users guide for SLUB. - a short users guide for SLUB.
soft-dirty.txt soft-dirty.txt
- short explanation for soft-dirty PTEs - short explanation for soft-dirty PTEs
split_page_table_lock
- Separate per-table lock to improve scalability of the old page_table_lock.
transhuge.txt transhuge.txt
- Transparent Hugepage Support, alternative way of using hugepages. - Transparent Hugepage Support, alternative way of using hugepages.
unevictable-lru.txt unevictable-lru.txt

View File

@ -4,7 +4,9 @@ ds2482
- The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses.
ds2490 ds2490
- The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges. - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges.
mxc_w1 mxc-w1
- W1 master controller driver found on Freescale MX2/MX3 SoCs - W1 master controller driver found on Freescale MX2/MX3 SoCs
omap-hdq
- HDQ/1-wire module of TI OMAP 2430/3430.
w1-gpio w1-gpio
- GPIO 1-wire bus master driver. - GPIO 1-wire bus master driver.

View File

@ -4,3 +4,5 @@ w1_therm
- The Maxim/Dallas Semiconductor ds18*20 temperature sensor. - The Maxim/Dallas Semiconductor ds18*20 temperature sensor.
w1_ds2423 w1_ds2423
- The Maxim/Dallas Semiconductor ds2423 counter device. - The Maxim/Dallas Semiconductor ds2423 counter device.
w1_ds28e04
- The Maxim/Dallas Semiconductor ds28e04 eeprom.

View File

@ -1,6 +1,20 @@
00-INDEX 00-INDEX
- this file - this file
mtrr.txt boot.txt
- how to use x86 Memory Type Range Registers to increase performance - List of boot protocol versions
early-microcode.txt
- How to load microcode from an initrd-CPIO archive early to fix CPU issues.
earlyprintk.txt
- Using earlyprintk with a USB2 debug port key.
entry_64.txt
- Describe (some of the) kernel entry points for x86.
exception-tables.txt exception-tables.txt
- why and how Linux kernel uses exception tables on x86 - why and how Linux kernel uses exception tables on x86
mtrr.txt
- how to use x86 Memory Type Range Registers to increase performance
pat.txt
- Page Attribute Table intro and API
usb-legacy-support.txt
- how to fix/avoid quirks when using emulated PS/2 mouse/keyboard.
zero-page.txt
- layout of the first page of memory.

View File

@ -7,7 +7,7 @@ help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation. or if there is a problem with the translation.
Maintainer: Will Deacon <will.deacon@arm.com> Maintainer: Will Deacon <will.deacon@arm.com>
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com> Chinese maintainer: Fu Wei <wefu@redhat.com>
--------------------------------------------------------------------- ---------------------------------------------------------------------
Documentation/arm64/booting.txt 的中文翻译 Documentation/arm64/booting.txt 的中文翻译
@ -16,9 +16,9 @@ Documentation/arm64/booting.txt 的中文翻译
译存在问题,请联系中文版维护者。 译存在问题,请联系中文版维护者。
英文版维护者: Will Deacon <will.deacon@arm.com> 英文版维护者: Will Deacon <will.deacon@arm.com>
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
以下为正文 以下为正文
--------------------------------------------------------------------- ---------------------------------------------------------------------
@ -64,8 +64,8 @@ RAM或可能使用对这个设备已知的 RAM 信息,还可能使用任何
必要性: 强制 必要性: 强制
设备树数据块dtb大小必须不大于 2 MB且位于从内核映像起始算起第一个 设备树数据块dtb必须 8 字节对齐,并位于从内核映像起始算起第一个 512MB
512MB 内的 2MB 边界上。这使得内核可以通过初始页表中的单个节描述符来 内,且不得跨越 2MB 对齐边界。这使得内核可以通过初始页表中的单个节描述符来
映射此数据块。 映射此数据块。
@ -84,13 +84,23 @@ AArch64 内核当前没有提供自解压代码,因此如果使用了压缩内
必要性: 强制 必要性: 强制
已解压的内核映像包含一个 32 字节的头,内容如下: 已解压的内核映像包含一个 64 字节的头,内容如下:
u32 magic = 0x14000008; /* 跳转到 stext, 小端 */ u32 code0; /* 可执行代码 */
u32 res0 = 0; /* 保留 */ u32 code1; /* 可执行代码 */
u64 text_offset; /* 映像装载偏移 */ u64 text_offset; /* 映像装载偏移 */
u64 res0 = 0; /* 保留 */
u64 res1 = 0; /* 保留 */ u64 res1 = 0; /* 保留 */
u64 res2 = 0; /* 保留 */ u64 res2 = 0; /* 保留 */
u64 res3 = 0; /* 保留 */
u64 res4 = 0; /* 保留 */
u32 magic = 0x644d5241; /* 魔数, 小端, "ARM\x64" */
u32 res5 = 0; /* 保留 */
映像头注释:
- code0/code1 负责跳转到 stext.
映像必须位于系统 RAM 起始处的特定偏移(当前是 0x80000。系统 RAM 映像必须位于系统 RAM 起始处的特定偏移(当前是 0x80000。系统 RAM
的起始地址必须是以 2MB 对齐的。 的起始地址必须是以 2MB 对齐的。
@ -118,9 +128,9 @@ AArch64 内核当前没有提供自解压代码,因此如果使用了压缩内
外部高速缓存(如果存在)必须配置并禁用。 外部高速缓存(如果存在)必须配置并禁用。
- 架构计时器 - 架构计时器
CNTFRQ 必须设定为计时器的频率 CNTFRQ 必须设定为计时器的频率,且 CNTVOFF 必须设定为对所有 CPU
如果在 EL1 模式下进入内核,则 CNTHCTL_EL2 中的 EL1PCTEN (bit 0) 都一致的值。如果在 EL1 模式下进入内核,则 CNTHCTL_EL2 中的
必须置位。 EL1PCTEN (bit 0) 必须置位。
- 一致性 - 一致性
通过内核启动的所有 CPU 在内核入口地址上必须处于相同的一致性域中。 通过内核启动的所有 CPU 在内核入口地址上必须处于相同的一致性域中。
@ -131,23 +141,40 @@ AArch64 内核当前没有提供自解压代码,因此如果使用了压缩内
在进入内核映像的异常级中,所有构架中可写的系统寄存器必须通过软件 在进入内核映像的异常级中,所有构架中可写的系统寄存器必须通过软件
在一个更高的异常级别下初始化,以防止在 未知 状态下运行。 在一个更高的异常级别下初始化,以防止在 未知 状态下运行。
以上对于 CPU 模式、高速缓存、MMU、架构计时器、一致性、系统寄存器的
必要条件描述适用于所有 CPU。所有 CPU 必须在同一异常级别跳入内核。
引导装载程序必须在每个 CPU 处于以下状态时跳入内核入口: 引导装载程序必须在每个 CPU 处于以下状态时跳入内核入口:
- 主 CPU 必须直接跳入内核映像的第一条指令。通过此 CPU 传递的设备树 - 主 CPU 必须直接跳入内核映像的第一条指令。通过此 CPU 传递的设备树
数据块必须在每个 CPU 节点中包含以下内容: 数据块必须在每个 CPU 节点中包含一个 enable-method 属性,所
支持的 enable-method 请见下文。
1、enable-method属性。目前此字段支持的值仅为字符串“spin-table”。
2、cpu-release-addr标识一个 64-bit、初始化为零的内存位置。
引导装载程序必须生成这些设备树属性,并在跳入内核入口之前将其插入 引导装载程序必须生成这些设备树属性,并在跳入内核入口之前将其插入
数据块。 数据块。
- 任何辅助 CPU 必须在内存保留区(通过设备树中的 /memreserve/ 域传递 - enable-method 为 “spin-table” 的 CPU 必须在它们的 CPU
节点中包含一个 cpu-release-addr 属性。这个属性标识了一个
64 位自然对齐且初始化为零的内存位置。
这些 CPU 必须在内存保留区(通过设备树中的 /memreserve/ 域传递
给内核)中自旋于内核之外,轮询它们的 cpu-release-addr 位置(必须 给内核)中自旋于内核之外,轮询它们的 cpu-release-addr 位置(必须
包含在保留区中)。可通过插入 wfe 指令来降低忙循环开销,而主 CPU 将 包含在保留区中)。可通过插入 wfe 指令来降低忙循环开销,而主 CPU 将
发出 sev 指令。当对 cpu-release-addr 所指位置的读取操作返回非零值 发出 sev 指令。当对 cpu-release-addr 所指位置的读取操作返回非零值
CPU 必须直接跳入此值所指向的地址。 CPU 必须跳入此值所指向的地址。此值为一个单独的 64 位小端值,
因此 CPU 须在跳转前将所读取的值转换为其本身的端模式。
- enable-method 为 “psci” 的 CPU 保持在内核外(比如,在
memory 节点中描述为内核空间的内存区外,或在通过设备树 /memreserve/
域中描述为内核保留区的空间中)。内核将会发起在 ARM 文档(编号
ARM DEN 0022A用于 ARM 上的电源状态协调接口系统软件)中描述的
CPU_ON 调用来将 CPU 带入内核。
*译者注:到文档翻译时,此文档已更新为 ARM DEN 0022B。
设备树必须包含一个 psci 节点,请参考以下文档:
Documentation/devicetree/bindings/arm/psci.txt
- 辅助 CPU 通用寄存器设置 - 辅助 CPU 通用寄存器设置
x0 = 0 (保留,将来可能使用) x0 = 0 (保留,将来可能使用)

View File

@ -7,7 +7,7 @@ help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation. or if there is a problem with the translation.
Maintainer: Catalin Marinas <catalin.marinas@arm.com> Maintainer: Catalin Marinas <catalin.marinas@arm.com>
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com> Chinese maintainer: Fu Wei <wefu@redhat.com>
--------------------------------------------------------------------- ---------------------------------------------------------------------
Documentation/arm64/memory.txt 的中文翻译 Documentation/arm64/memory.txt 的中文翻译
@ -16,9 +16,9 @@ Documentation/arm64/memory.txt 的中文翻译
译存在问题,请联系中文版维护者。 译存在问题,请联系中文版维护者。
英文版维护者: Catalin Marinas <catalin.marinas@arm.com> 英文版维护者: Catalin Marinas <catalin.marinas@arm.com>
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
以下为正文 以下为正文
--------------------------------------------------------------------- ---------------------------------------------------------------------
@ -41,7 +41,7 @@ AArch64 Linux 使用页大小为 4KB 的 3 级转换表配置,对于用户和
TTBR1 中,且从不写入 TTBR0。 TTBR1 中,且从不写入 TTBR0。
AArch64 Linux 内存布局: AArch64 Linux 在页大小为 4KB 时的内存布局:
起始地址 结束地址 大小 用途 起始地址 结束地址 大小 用途
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -55,15 +55,42 @@ ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未来用于 vmmemap] ffffffbe00000000 ffffffbffbbfffff ~8GB [防护页,未来用于 vmmemap]
ffffffbffbc00000 ffffffbffbdfffff 2MB earlyprintk 设备
ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间 ffffffbffbe00000 ffffffbffbe0ffff 64KB PCI I/O 空间
ffffffbbffff0000 ffffffbcffffffff ~2MB [防护页] ffffffbffbe10000 ffffffbcffffffff ~2MB [防护页]
ffffffbffc000000 ffffffbfffffffff 64MB 模块 ffffffbffc000000 ffffffbfffffffff 64MB 模块
ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射 ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射
AArch64 Linux 在页大小为 64KB 时的内存布局:
起始地址 结束地址 大小 用途
-----------------------------------------------------------------------
0000000000000000 000003ffffffffff 4TB 用户空间
fffffc0000000000 fffffdfbfffeffff ~2TB vmalloc
fffffdfbffff0000 fffffdfbffffffff 64KB [防护页]
fffffdfc00000000 fffffdfdffffffff 8GB vmemmap
fffffdfe00000000 fffffdfffbbfffff ~8GB [防护页,未来用于 vmmemap]
fffffdfffbc00000 fffffdfffbdfffff 2MB earlyprintk 设备
fffffdfffbe00000 fffffdfffbe0ffff 64KB PCI I/O 空间
fffffdfffbe10000 fffffdfffbffffff ~2MB [防护页]
fffffdfffc000000 fffffdffffffffff 64MB 模块
fffffe0000000000 ffffffffffffffff 2TB 内核逻辑内存映射
4KB 页大小的转换表查找: 4KB 页大小的转换表查找:
+--------+--------+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+--------+--------+
@ -91,3 +118,10 @@ ffffffc000000000 ffffffffffffffff 256GB 内核逻辑内存映射
| | +--------------------------> [41:29] L2 索引 (仅使用 38:29 ) | | +--------------------------> [41:29] L2 索引 (仅使用 38:29 )
| +-------------------------------> [47:42] L1 索引 (未使用) | +-------------------------------> [47:42] L1 索引 (未使用)
+-------------------------------------------------> [63] TTBR0/1 +-------------------------------------------------> [63] TTBR0/1
当使用 KVM 时, 管理程序hypervisor在 EL2 中通过相对内核虚拟地址的
一个固定偏移来映射内核页(内核虚拟地址的高 24 位设为零):
起始地址 结束地址 大小 用途
-----------------------------------------------------------------------
0000004000000000 0000007fffffffff 256GB 在 HYP 中映射的内核对象

View File

@ -0,0 +1,52 @@
Chinese translated version of Documentation/arm64/tagged-pointers.txt
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Maintainer: Will Deacon <will.deacon@arm.com>
Chinese maintainer: Fu Wei <wefu@redhat.com>
---------------------------------------------------------------------
Documentation/arm64/tagged-pointers.txt 的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
英文版维护者: Will Deacon <will.deacon@arm.com>
中文版维护者: 傅炜 Fu Wei <wefu@redhat.com>
中文版翻译者: 傅炜 Fu Wei <wefu@redhat.com>
中文版校译者: 傅炜 Fu Wei <wefu@redhat.com>
以下为正文
---------------------------------------------------------------------
Linux 在 AArch64 中带标记的虚拟地址
=================================
作者: Will Deacon <will.deacon@arm.com>
日期: 2013 年 06 月 12 日
本文档简述了在 AArch64 地址转换系统中提供的带标记的虚拟地址及其在
AArch64 Linux 中的潜在用途。
内核提供的地址转换表配置使通过 TTBR0 完成的虚拟地址转换(即用户空间
映射),其虚拟地址的最高 8 位63:56会被转换硬件所忽略。这种机制
让这些位可供应用程序自由使用,其注意事项如下:
(1) 内核要求所有传递到 EL1 的用户空间地址带有 0x00 标记。
这意味着任何携带用户空间虚拟地址的系统调用syscall
参数 *必须* 在陷入内核前使它们的最高字节被清零。
(2) 非零标记在传递信号时不被保存。这意味着在应用程序中利用了
标记的信号处理函数无法依赖 siginfo_t 的用户空间虚拟
地址所携带的包含其内部域信息的标记。此规则的一个例外是
当信号是在调试观察点的异常处理程序中产生的,此时标记的
信息将被保存。
(3) 当使用带标记的指针时需特别留心,因为仅对两个虚拟地址
的高字节C 编译器很可能无法判断它们是不同的。
此构架会阻止对带标记的 PC 指针的利用,因此在异常返回时,其高字节
将被设置成一个为 “55” 的扩展符。

View File

@ -2367,7 +2367,7 @@ F: include/linux/cpufreq.h
CPU FREQUENCY DRIVERS - ARM BIG LITTLE CPU FREQUENCY DRIVERS - ARM BIG LITTLE
M: Viresh Kumar <viresh.kumar@linaro.org> M: Viresh Kumar <viresh.kumar@linaro.org>
M: Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com> M: Sudeep Holla <sudeep.holla@arm.com>
L: cpufreq@vger.kernel.org L: cpufreq@vger.kernel.org
L: linux-pm@vger.kernel.org L: linux-pm@vger.kernel.org
W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php W: http://www.arm.com/products/processors/technologies/biglittleprocessing.php
@ -2857,7 +2857,7 @@ M: Jani Nikula <jani.nikula@linux.intel.com>
L: intel-gfx@lists.freedesktop.org L: intel-gfx@lists.freedesktop.org
L: dri-devel@lists.freedesktop.org L: dri-devel@lists.freedesktop.org
Q: http://patchwork.freedesktop.org/project/intel-gfx/ Q: http://patchwork.freedesktop.org/project/intel-gfx/
T: git git://people.freedesktop.org/~danvet/drm-intel T: git git://anongit.freedesktop.org/drm-intel
S: Supported S: Supported
F: drivers/gpu/drm/i915/ F: drivers/gpu/drm/i915/
F: include/drm/i915* F: include/drm/i915*
@ -7196,7 +7196,7 @@ S: Maintained
F: drivers/net/ethernet/rdc/r6040.c F: drivers/net/ethernet/rdc/r6040.c
RDS - RELIABLE DATAGRAM SOCKETS RDS - RELIABLE DATAGRAM SOCKETS
M: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com> M: Chien Yen <chien.yen@oracle.com>
L: rds-devel@oss.oracle.com (moderated for non-subscribers) L: rds-devel@oss.oracle.com (moderated for non-subscribers)
S: Supported S: Supported
F: net/rds/ F: net/rds/

View File

@ -1,7 +1,7 @@
VERSION = 3 VERSION = 3
PATCHLEVEL = 14 PATCHLEVEL = 14
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc1 EXTRAVERSION = -rc3
NAME = Shuffling Zombie Juror NAME = Shuffling Zombie Juror
# *DOCUMENTATION* # *DOCUMENTATION*

View File

@ -38,6 +38,7 @@ dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb
dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
# sama5d3 # sama5d3
dtb-$(CONFIG_ARCH_AT91) += at91-sama5d3_xplained.dtb
dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d31ek.dtb
dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb

View File

@ -0,0 +1,229 @@
/*
* at91-sama5d3_xplained.dts - Device Tree file for the SAMA5D3 Xplained board
*
* Copyright (C) 2014 Atmel,
* 2014 Nicolas Ferre <nicolas.ferre@atmel.com>
*
* Licensed under GPLv2 or later.
*/
/dts-v1/;
#include "sama5d36.dtsi"
/ {
model = "SAMA5D3 Xplained";
compatible = "atmel,sama5d3-xplained", "atmel,sama5d3", "atmel,sama5";
chosen {
bootargs = "console=ttyS0,115200";
};
memory {
reg = <0x20000000 0x10000000>;
};
ahb {
apb {
mmc0: mmc@f0000000 {
pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7 &pinctrl_mmc0_cd>;
status = "okay";
slot@0 {
reg = <0>;
bus-width = <8>;
cd-gpios = <&pioE 0 GPIO_ACTIVE_LOW>;
};
};
spi0: spi@f0004000 {
cs-gpios = <&pioD 13 0>;
status = "okay";
};
can0: can@f000c000 {
status = "okay";
};
i2c0: i2c@f0014000 {
status = "okay";
};
i2c1: i2c@f0018000 {
status = "okay";
};
macb0: ethernet@f0028000 {
phy-mode = "rgmii";
status = "okay";
};
usart0: serial@f001c000 {
status = "okay";
};
usart1: serial@f0020000 {
pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
status = "okay";
};
uart0: serial@f0024000 {
status = "okay";
};
mmc1: mmc@f8000000 {
pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
status = "okay";
slot@0 {
reg = <0>;
bus-width = <4>;
cd-gpios = <&pioE 1 GPIO_ACTIVE_HIGH>;
};
};
spi1: spi@f8008000 {
cs-gpios = <&pioC 25 0>, <0>, <0>, <&pioD 16 0>;
status = "okay";
};
adc0: adc@f8018000 {
pinctrl-0 = <
&pinctrl_adc0_adtrg
&pinctrl_adc0_ad0
&pinctrl_adc0_ad1
&pinctrl_adc0_ad2
&pinctrl_adc0_ad3
&pinctrl_adc0_ad4
&pinctrl_adc0_ad5
&pinctrl_adc0_ad6
&pinctrl_adc0_ad7
&pinctrl_adc0_ad8
&pinctrl_adc0_ad9
>;
status = "okay";
};
i2c2: i2c@f801c000 {
dmas = <0>, <0>; /* Do not use DMA for i2c2 */
status = "okay";
};
macb1: ethernet@f802c000 {
phy-mode = "rmii";
status = "okay";
};
dbgu: serial@ffffee00 {
status = "okay";
};
pinctrl@fffff200 {
board {
pinctrl_mmc0_cd: mmc0_cd {
atmel,pins =
<AT91_PIOE 0 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
};
pinctrl_mmc1_cd: mmc1_cd {
atmel,pins =
<AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
};
pinctrl_usba_vbus: usba_vbus {
atmel,pins =
<AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */
};
};
};
pmc: pmc@fffffc00 {
main: mainck {
clock-frequency = <12000000>;
};
};
};
nand0: nand@60000000 {
nand-bus-width = <8>;
nand-ecc-mode = "hw";
atmel,has-pmecc;
atmel,pmecc-cap = <4>;
atmel,pmecc-sector-size = <512>;
nand-on-flash-bbt;
status = "okay";
at91bootstrap@0 {
label = "at91bootstrap";
reg = <0x0 0x40000>;
};
bootloader@40000 {
label = "bootloader";
reg = <0x40000 0x80000>;
};
bootloaderenv@c0000 {
label = "bootloader env";
reg = <0xc0000 0xc0000>;
};
dtb@180000 {
label = "device tree";
reg = <0x180000 0x80000>;
};
kernel@200000 {
label = "kernel";
reg = <0x200000 0x600000>;
};
rootfs@800000 {
label = "rootfs";
reg = <0x800000 0x0f800000>;
};
};
usb0: gadget@00500000 {
atmel,vbus-gpio = <&pioE 9 GPIO_ACTIVE_HIGH>; /* PE9, conflicts with A9 */
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usba_vbus>;
status = "okay";
};
usb1: ohci@00600000 {
num-ports = <3>;
atmel,vbus-gpio = <0
&pioE 3 GPIO_ACTIVE_LOW
&pioE 4 GPIO_ACTIVE_LOW
>;
status = "okay";
};
usb2: ehci@00700000 {
status = "okay";
};
};
gpio_keys {
compatible = "gpio-keys";
bp3 {
label = "PB_USER";
gpios = <&pioE 29 GPIO_ACTIVE_LOW>;
linux,code = <0x104>;
gpio-key,wakeup;
};
};
leds {
compatible = "gpio-leds";
d2 {
label = "d2";
gpios = <&pioE 23 GPIO_ACTIVE_LOW>; /* PE23, conflicts with A23, CTS2 */
linux,default-trigger = "heartbeat";
};
d3 {
label = "d3";
gpios = <&pioE 24 GPIO_ACTIVE_HIGH>;
};
};
};

View File

@ -523,7 +523,7 @@
}; };
i2c0: i2c@fff88000 { i2c0: i2c@fff88000 {
compatible = "atmel,at91sam9263-i2c"; compatible = "atmel,at91sam9260-i2c";
reg = <0xfff88000 0x100>; reg = <0xfff88000 0x100>;
interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>; interrupts = <13 IRQ_TYPE_LEVEL_HIGH 6>;
#address-cells = <1>; #address-cells = <1>;

View File

@ -124,6 +124,10 @@
nand-on-flash-bbt; nand-on-flash-bbt;
status = "okay"; status = "okay";
}; };
usb0: ohci@00500000 {
status = "okay";
};
}; };
leds { leds {

View File

@ -1228,7 +1228,7 @@
compatible = "atmel,at91rm9200-ohci", "usb-ohci"; compatible = "atmel,at91rm9200-ohci", "usb-ohci";
reg = <0x00600000 0x100000>; reg = <0x00600000 0x100000>;
interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>; interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>;
clocks = <&usb>, <&uhphs_clk>, <&udphs_clk>, clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>,
<&uhpck>; <&uhpck>;
clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck"; clock-names = "usb_clk", "ohci_clk", "hclk", "uhpck";
status = "disabled"; status = "disabled";

View File

@ -188,7 +188,6 @@
msp2: msp@80117000 { msp2: msp@80117000 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&msp2_default_mode>; pinctrl-0 = <&msp2_default_mode>;
status = "okay";
}; };
msp3: msp@80125000 { msp3: msp@80125000 {

View File

@ -315,7 +315,7 @@
ranges; ranges;
emac: ethernet@01c0b000 { emac: ethernet@01c0b000 {
compatible = "allwinner,sun4i-emac"; compatible = "allwinner,sun4i-a10-emac";
reg = <0x01c0b000 0x1000>; reg = <0x01c0b000 0x1000>;
interrupts = <55>; interrupts = <55>;
clocks = <&ahb_gates 17>; clocks = <&ahb_gates 17>;
@ -323,7 +323,7 @@
}; };
mdio@01c0b080 { mdio@01c0b080 {
compatible = "allwinner,sun4i-mdio"; compatible = "allwinner,sun4i-a10-mdio";
reg = <0x01c0b080 0x14>; reg = <0x01c0b080 0x14>;
status = "disabled"; status = "disabled";
#address-cells = <1>; #address-cells = <1>;

View File

@ -278,7 +278,7 @@
ranges; ranges;
emac: ethernet@01c0b000 { emac: ethernet@01c0b000 {
compatible = "allwinner,sun4i-emac"; compatible = "allwinner,sun4i-a10-emac";
reg = <0x01c0b000 0x1000>; reg = <0x01c0b000 0x1000>;
interrupts = <55>; interrupts = <55>;
clocks = <&ahb_gates 17>; clocks = <&ahb_gates 17>;
@ -286,7 +286,7 @@
}; };
mdio@01c0b080 { mdio@01c0b080 {
compatible = "allwinner,sun4i-mdio"; compatible = "allwinner,sun4i-a10-mdio";
reg = <0x01c0b080 0x14>; reg = <0x01c0b080 0x14>;
status = "disabled"; status = "disabled";
#address-cells = <1>; #address-cells = <1>;

View File

@ -340,7 +340,7 @@
ranges; ranges;
emac: ethernet@01c0b000 { emac: ethernet@01c0b000 {
compatible = "allwinner,sun4i-emac"; compatible = "allwinner,sun4i-a10-emac";
reg = <0x01c0b000 0x1000>; reg = <0x01c0b000 0x1000>;
interrupts = <0 55 4>; interrupts = <0 55 4>;
clocks = <&ahb_gates 17>; clocks = <&ahb_gates 17>;
@ -348,7 +348,7 @@
}; };
mdio@01c0b080 { mdio@01c0b080 {
compatible = "allwinner,sun4i-mdio"; compatible = "allwinner,sun4i-a10-mdio";
reg = <0x01c0b080 0x14>; reg = <0x01c0b080 0x14>;
status = "disabled"; status = "disabled";
#address-cells = <1>; #address-cells = <1>;

View File

@ -29,6 +29,7 @@ CONFIG_ARCH_OMAP3=y
CONFIG_ARCH_OMAP4=y CONFIG_ARCH_OMAP4=y
CONFIG_SOC_OMAP5=y CONFIG_SOC_OMAP5=y
CONFIG_SOC_AM33XX=y CONFIG_SOC_AM33XX=y
CONFIG_SOC_DRA7XX=y
CONFIG_SOC_AM43XX=y CONFIG_SOC_AM43XX=y
CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ROCKCHIP=y
CONFIG_ARCH_SOCFPGA=y CONFIG_ARCH_SOCFPGA=y

View File

@ -55,6 +55,7 @@
* The bits we set in HCR: * The bits we set in HCR:
* TAC: Trap ACTLR * TAC: Trap ACTLR
* TSC: Trap SMC * TSC: Trap SMC
* TVM: Trap VM ops (until MMU and caches are on)
* TSW: Trap cache operations by set/way * TSW: Trap cache operations by set/way
* TWI: Trap WFI * TWI: Trap WFI
* TWE: Trap WFE * TWE: Trap WFE
@ -68,8 +69,7 @@
*/ */
#define HCR_GUEST_MASK (HCR_TSC | HCR_TSW | HCR_TWI | HCR_VM | HCR_BSU_IS | \ #define HCR_GUEST_MASK (HCR_TSC | HCR_TSW | HCR_TWI | HCR_VM | HCR_BSU_IS | \
HCR_FB | HCR_TAC | HCR_AMO | HCR_IMO | HCR_FMO | \ HCR_FB | HCR_TAC | HCR_AMO | HCR_IMO | HCR_FMO | \
HCR_TWE | HCR_SWIO | HCR_TIDCP) HCR_TVM | HCR_TWE | HCR_SWIO | HCR_TIDCP)
#define HCR_VIRT_EXCP_MASK (HCR_VA | HCR_VI | HCR_VF)
/* System Control Register (SCTLR) bits */ /* System Control Register (SCTLR) bits */
#define SCTLR_TE (1 << 30) #define SCTLR_TE (1 << 30)

View File

@ -48,7 +48,9 @@
#define c13_TID_URO 26 /* Thread ID, User R/O */ #define c13_TID_URO 26 /* Thread ID, User R/O */
#define c13_TID_PRIV 27 /* Thread ID, Privileged */ #define c13_TID_PRIV 27 /* Thread ID, Privileged */
#define c14_CNTKCTL 28 /* Timer Control Register (PL1) */ #define c14_CNTKCTL 28 /* Timer Control Register (PL1) */
#define NR_CP15_REGS 29 /* Number of regs (incl. invalid) */ #define c10_AMAIR0 29 /* Auxilary Memory Attribute Indirection Reg0 */
#define c10_AMAIR1 30 /* Auxilary Memory Attribute Indirection Reg1 */
#define NR_CP15_REGS 31 /* Number of regs (incl. invalid) */
#define ARM_EXCEPTION_RESET 0 #define ARM_EXCEPTION_RESET 0
#define ARM_EXCEPTION_UNDEFINED 1 #define ARM_EXCEPTION_UNDEFINED 1

View File

@ -101,6 +101,12 @@ struct kvm_vcpu_arch {
/* The CPU type we expose to the VM */ /* The CPU type we expose to the VM */
u32 midr; u32 midr;
/* HYP trapping configuration */
u32 hcr;
/* Interrupt related fields */
u32 irq_lines; /* IRQ and FIQ levels */
/* Exception Information */ /* Exception Information */
struct kvm_vcpu_fault_info fault; struct kvm_vcpu_fault_info fault;
@ -128,9 +134,6 @@ struct kvm_vcpu_arch {
/* IO related fields */ /* IO related fields */
struct kvm_decode mmio_decode; struct kvm_decode mmio_decode;
/* Interrupt related fields */
u32 irq_lines; /* IRQ and FIQ levels */
/* Cache some mmu pages needed inside spinlock regions */ /* Cache some mmu pages needed inside spinlock regions */
struct kvm_mmu_memory_cache mmu_page_cache; struct kvm_mmu_memory_cache mmu_page_cache;

View File

@ -114,11 +114,34 @@ static inline void kvm_set_s2pmd_writable(pmd_t *pmd)
pmd_val(*pmd) |= L_PMD_S2_RDWR; pmd_val(*pmd) |= L_PMD_S2_RDWR;
} }
/* Open coded p*d_addr_end that can deal with 64bit addresses */
#define kvm_pgd_addr_end(addr, end) \
({ u64 __boundary = ((addr) + PGDIR_SIZE) & PGDIR_MASK; \
(__boundary - 1 < (end) - 1)? __boundary: (end); \
})
#define kvm_pud_addr_end(addr,end) (end)
#define kvm_pmd_addr_end(addr, end) \
({ u64 __boundary = ((addr) + PMD_SIZE) & PMD_MASK; \
(__boundary - 1 < (end) - 1)? __boundary: (end); \
})
struct kvm; struct kvm;
static inline void coherent_icache_guest_page(struct kvm *kvm, hva_t hva, #define kvm_flush_dcache_to_poc(a,l) __cpuc_flush_dcache_area((a), (l))
unsigned long size)
static inline bool vcpu_has_cache_enabled(struct kvm_vcpu *vcpu)
{ {
return (vcpu->arch.cp15[c1_SCTLR] & 0b101) == 0b101;
}
static inline void coherent_cache_guest_page(struct kvm_vcpu *vcpu, hva_t hva,
unsigned long size)
{
if (!vcpu_has_cache_enabled(vcpu))
kvm_flush_dcache_to_poc((void *)hva, size);
/* /*
* If we are going to insert an instruction page and the icache is * If we are going to insert an instruction page and the icache is
* either VIPT or PIPT, there is a potential problem where the host * either VIPT or PIPT, there is a potential problem where the host
@ -139,9 +162,10 @@ static inline void coherent_icache_guest_page(struct kvm *kvm, hva_t hva,
} }
} }
#define kvm_flush_dcache_to_poc(a,l) __cpuc_flush_dcache_area((a), (l))
#define kvm_virt_to_phys(x) virt_to_idmap((unsigned long)(x)) #define kvm_virt_to_phys(x) virt_to_idmap((unsigned long)(x))
void stage2_flush_vm(struct kvm *kvm);
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#endif /* __ARM_KVM_MMU_H__ */ #endif /* __ARM_KVM_MMU_H__ */

View File

@ -174,6 +174,7 @@ int main(void)
DEFINE(VCPU_FIQ_REGS, offsetof(struct kvm_vcpu, arch.regs.fiq_regs)); DEFINE(VCPU_FIQ_REGS, offsetof(struct kvm_vcpu, arch.regs.fiq_regs));
DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_pc)); DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_pc));
DEFINE(VCPU_CPSR, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_cpsr)); DEFINE(VCPU_CPSR, offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_cpsr));
DEFINE(VCPU_HCR, offsetof(struct kvm_vcpu, arch.hcr));
DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines)); DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines));
DEFINE(VCPU_HSR, offsetof(struct kvm_vcpu, arch.fault.hsr)); DEFINE(VCPU_HSR, offsetof(struct kvm_vcpu, arch.fault.hsr));
DEFINE(VCPU_HxFAR, offsetof(struct kvm_vcpu, arch.fault.hxfar)); DEFINE(VCPU_HxFAR, offsetof(struct kvm_vcpu, arch.fault.hxfar));

View File

@ -878,7 +878,8 @@ static int hyp_init_cpu_pm_notifier(struct notifier_block *self,
unsigned long cmd, unsigned long cmd,
void *v) void *v)
{ {
if (cmd == CPU_PM_EXIT) { if (cmd == CPU_PM_EXIT &&
__hyp_get_vectors() == hyp_default_vectors) {
cpu_init_hyp_mode(NULL); cpu_init_hyp_mode(NULL);
return NOTIFY_OK; return NOTIFY_OK;
} }

View File

@ -23,6 +23,7 @@
#include <asm/kvm_host.h> #include <asm/kvm_host.h>
#include <asm/kvm_emulate.h> #include <asm/kvm_emulate.h>
#include <asm/kvm_coproc.h> #include <asm/kvm_coproc.h>
#include <asm/kvm_mmu.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/cputype.h> #include <asm/cputype.h>
#include <trace/events/kvm.h> #include <trace/events/kvm.h>
@ -204,6 +205,44 @@ done:
return true; return true;
} }
/*
* Generic accessor for VM registers. Only called as long as HCR_TVM
* is set.
*/
static bool access_vm_reg(struct kvm_vcpu *vcpu,
const struct coproc_params *p,
const struct coproc_reg *r)
{
BUG_ON(!p->is_write);
vcpu->arch.cp15[r->reg] = *vcpu_reg(vcpu, p->Rt1);
if (p->is_64bit)
vcpu->arch.cp15[r->reg + 1] = *vcpu_reg(vcpu, p->Rt2);
return true;
}
/*
* SCTLR accessor. Only called as long as HCR_TVM is set. If the
* guest enables the MMU, we stop trapping the VM sys_regs and leave
* it in complete control of the caches.
*
* Used by the cpu-specific code.
*/
bool access_sctlr(struct kvm_vcpu *vcpu,
const struct coproc_params *p,
const struct coproc_reg *r)
{
access_vm_reg(vcpu, p, r);
if (vcpu_has_cache_enabled(vcpu)) { /* MMU+Caches enabled? */
vcpu->arch.hcr &= ~HCR_TVM;
stage2_flush_vm(vcpu->kvm);
}
return true;
}
/* /*
* We could trap ID_DFR0 and tell the guest we don't support performance * We could trap ID_DFR0 and tell the guest we don't support performance
* monitoring. Unfortunately the patch to make the kernel check ID_DFR0 was * monitoring. Unfortunately the patch to make the kernel check ID_DFR0 was
@ -261,33 +300,36 @@ static const struct coproc_reg cp15_regs[] = {
{ CRn( 1), CRm( 0), Op1( 0), Op2( 2), is32, { CRn( 1), CRm( 0), Op1( 0), Op2( 2), is32,
NULL, reset_val, c1_CPACR, 0x00000000 }, NULL, reset_val, c1_CPACR, 0x00000000 },
/* TTBR0/TTBR1: swapped by interrupt.S. */ /* TTBR0/TTBR1/TTBCR: swapped by interrupt.S. */
{ CRm64( 2), Op1( 0), is64, NULL, reset_unknown64, c2_TTBR0 }, { CRm64( 2), Op1( 0), is64, access_vm_reg, reset_unknown64, c2_TTBR0 },
{ CRm64( 2), Op1( 1), is64, NULL, reset_unknown64, c2_TTBR1 }, { CRn(2), CRm( 0), Op1( 0), Op2( 0), is32,
access_vm_reg, reset_unknown, c2_TTBR0 },
/* TTBCR: swapped by interrupt.S. */ { CRn(2), CRm( 0), Op1( 0), Op2( 1), is32,
access_vm_reg, reset_unknown, c2_TTBR1 },
{ CRn( 2), CRm( 0), Op1( 0), Op2( 2), is32, { CRn( 2), CRm( 0), Op1( 0), Op2( 2), is32,
NULL, reset_val, c2_TTBCR, 0x00000000 }, access_vm_reg, reset_val, c2_TTBCR, 0x00000000 },
{ CRm64( 2), Op1( 1), is64, access_vm_reg, reset_unknown64, c2_TTBR1 },
/* DACR: swapped by interrupt.S. */ /* DACR: swapped by interrupt.S. */
{ CRn( 3), CRm( 0), Op1( 0), Op2( 0), is32, { CRn( 3), CRm( 0), Op1( 0), Op2( 0), is32,
NULL, reset_unknown, c3_DACR }, access_vm_reg, reset_unknown, c3_DACR },
/* DFSR/IFSR/ADFSR/AIFSR: swapped by interrupt.S. */ /* DFSR/IFSR/ADFSR/AIFSR: swapped by interrupt.S. */
{ CRn( 5), CRm( 0), Op1( 0), Op2( 0), is32, { CRn( 5), CRm( 0), Op1( 0), Op2( 0), is32,
NULL, reset_unknown, c5_DFSR }, access_vm_reg, reset_unknown, c5_DFSR },
{ CRn( 5), CRm( 0), Op1( 0), Op2( 1), is32, { CRn( 5), CRm( 0), Op1( 0), Op2( 1), is32,
NULL, reset_unknown, c5_IFSR }, access_vm_reg, reset_unknown, c5_IFSR },
{ CRn( 5), CRm( 1), Op1( 0), Op2( 0), is32, { CRn( 5), CRm( 1), Op1( 0), Op2( 0), is32,
NULL, reset_unknown, c5_ADFSR }, access_vm_reg, reset_unknown, c5_ADFSR },
{ CRn( 5), CRm( 1), Op1( 0), Op2( 1), is32, { CRn( 5), CRm( 1), Op1( 0), Op2( 1), is32,
NULL, reset_unknown, c5_AIFSR }, access_vm_reg, reset_unknown, c5_AIFSR },
/* DFAR/IFAR: swapped by interrupt.S. */ /* DFAR/IFAR: swapped by interrupt.S. */
{ CRn( 6), CRm( 0), Op1( 0), Op2( 0), is32, { CRn( 6), CRm( 0), Op1( 0), Op2( 0), is32,
NULL, reset_unknown, c6_DFAR }, access_vm_reg, reset_unknown, c6_DFAR },
{ CRn( 6), CRm( 0), Op1( 0), Op2( 2), is32, { CRn( 6), CRm( 0), Op1( 0), Op2( 2), is32,
NULL, reset_unknown, c6_IFAR }, access_vm_reg, reset_unknown, c6_IFAR },
/* PAR swapped by interrupt.S */ /* PAR swapped by interrupt.S */
{ CRm64( 7), Op1( 0), is64, NULL, reset_unknown64, c7_PAR }, { CRm64( 7), Op1( 0), is64, NULL, reset_unknown64, c7_PAR },
@ -324,9 +366,15 @@ static const struct coproc_reg cp15_regs[] = {
/* PRRR/NMRR (aka MAIR0/MAIR1): swapped by interrupt.S. */ /* PRRR/NMRR (aka MAIR0/MAIR1): swapped by interrupt.S. */
{ CRn(10), CRm( 2), Op1( 0), Op2( 0), is32, { CRn(10), CRm( 2), Op1( 0), Op2( 0), is32,
NULL, reset_unknown, c10_PRRR}, access_vm_reg, reset_unknown, c10_PRRR},
{ CRn(10), CRm( 2), Op1( 0), Op2( 1), is32, { CRn(10), CRm( 2), Op1( 0), Op2( 1), is32,
NULL, reset_unknown, c10_NMRR}, access_vm_reg, reset_unknown, c10_NMRR},
/* AMAIR0/AMAIR1: swapped by interrupt.S. */
{ CRn(10), CRm( 3), Op1( 0), Op2( 0), is32,
access_vm_reg, reset_unknown, c10_AMAIR0},
{ CRn(10), CRm( 3), Op1( 0), Op2( 1), is32,
access_vm_reg, reset_unknown, c10_AMAIR1},
/* VBAR: swapped by interrupt.S. */ /* VBAR: swapped by interrupt.S. */
{ CRn(12), CRm( 0), Op1( 0), Op2( 0), is32, { CRn(12), CRm( 0), Op1( 0), Op2( 0), is32,
@ -334,7 +382,7 @@ static const struct coproc_reg cp15_regs[] = {
/* CONTEXTIDR/TPIDRURW/TPIDRURO/TPIDRPRW: swapped by interrupt.S. */ /* CONTEXTIDR/TPIDRURW/TPIDRURO/TPIDRPRW: swapped by interrupt.S. */
{ CRn(13), CRm( 0), Op1( 0), Op2( 1), is32, { CRn(13), CRm( 0), Op1( 0), Op2( 1), is32,
NULL, reset_val, c13_CID, 0x00000000 }, access_vm_reg, reset_val, c13_CID, 0x00000000 },
{ CRn(13), CRm( 0), Op1( 0), Op2( 2), is32, { CRn(13), CRm( 0), Op1( 0), Op2( 2), is32,
NULL, reset_unknown, c13_TID_URW }, NULL, reset_unknown, c13_TID_URW },
{ CRn(13), CRm( 0), Op1( 0), Op2( 3), is32, { CRn(13), CRm( 0), Op1( 0), Op2( 3), is32,
@ -443,7 +491,7 @@ int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run)
{ {
struct coproc_params params; struct coproc_params params;
params.CRm = (kvm_vcpu_get_hsr(vcpu) >> 1) & 0xf; params.CRn = (kvm_vcpu_get_hsr(vcpu) >> 1) & 0xf;
params.Rt1 = (kvm_vcpu_get_hsr(vcpu) >> 5) & 0xf; params.Rt1 = (kvm_vcpu_get_hsr(vcpu) >> 5) & 0xf;
params.is_write = ((kvm_vcpu_get_hsr(vcpu) & 1) == 0); params.is_write = ((kvm_vcpu_get_hsr(vcpu) & 1) == 0);
params.is_64bit = true; params.is_64bit = true;
@ -451,7 +499,7 @@ int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run)
params.Op1 = (kvm_vcpu_get_hsr(vcpu) >> 16) & 0xf; params.Op1 = (kvm_vcpu_get_hsr(vcpu) >> 16) & 0xf;
params.Op2 = 0; params.Op2 = 0;
params.Rt2 = (kvm_vcpu_get_hsr(vcpu) >> 10) & 0xf; params.Rt2 = (kvm_vcpu_get_hsr(vcpu) >> 10) & 0xf;
params.CRn = 0; params.CRm = 0;
return emulate_cp15(vcpu, &params); return emulate_cp15(vcpu, &params);
} }

View File

@ -58,8 +58,8 @@ static inline void print_cp_instr(const struct coproc_params *p)
{ {
/* Look, we even formatted it for you to paste into the table! */ /* Look, we even formatted it for you to paste into the table! */
if (p->is_64bit) { if (p->is_64bit) {
kvm_pr_unimpl(" { CRm(%2lu), Op1(%2lu), is64, func_%s },\n", kvm_pr_unimpl(" { CRm64(%2lu), Op1(%2lu), is64, func_%s },\n",
p->CRm, p->Op1, p->is_write ? "write" : "read"); p->CRn, p->Op1, p->is_write ? "write" : "read");
} else { } else {
kvm_pr_unimpl(" { CRn(%2lu), CRm(%2lu), Op1(%2lu), Op2(%2lu), is32," kvm_pr_unimpl(" { CRn(%2lu), CRm(%2lu), Op1(%2lu), Op2(%2lu), is32,"
" func_%s },\n", " func_%s },\n",
@ -135,13 +135,13 @@ static inline int cmp_reg(const struct coproc_reg *i1,
return -1; return -1;
if (i1->CRn != i2->CRn) if (i1->CRn != i2->CRn)
return i1->CRn - i2->CRn; return i1->CRn - i2->CRn;
if (i1->is_64 != i2->is_64)
return i2->is_64 - i1->is_64;
if (i1->CRm != i2->CRm) if (i1->CRm != i2->CRm)
return i1->CRm - i2->CRm; return i1->CRm - i2->CRm;
if (i1->Op1 != i2->Op1) if (i1->Op1 != i2->Op1)
return i1->Op1 - i2->Op1; return i1->Op1 - i2->Op1;
return i1->Op2 - i2->Op2; if (i1->Op2 != i2->Op2)
return i1->Op2 - i2->Op2;
return i2->is_64 - i1->is_64;
} }
@ -153,4 +153,8 @@ static inline int cmp_reg(const struct coproc_reg *i1,
#define is64 .is_64 = true #define is64 .is_64 = true
#define is32 .is_64 = false #define is32 .is_64 = false
bool access_sctlr(struct kvm_vcpu *vcpu,
const struct coproc_params *p,
const struct coproc_reg *r);
#endif /* __ARM_KVM_COPROC_LOCAL_H__ */ #endif /* __ARM_KVM_COPROC_LOCAL_H__ */

View File

@ -34,7 +34,7 @@
static const struct coproc_reg a15_regs[] = { static const struct coproc_reg a15_regs[] = {
/* SCTLR: swapped by interrupt.S. */ /* SCTLR: swapped by interrupt.S. */
{ CRn( 1), CRm( 0), Op1( 0), Op2( 0), is32, { CRn( 1), CRm( 0), Op1( 0), Op2( 0), is32,
NULL, reset_val, c1_SCTLR, 0x00C50078 }, access_sctlr, reset_val, c1_SCTLR, 0x00C50078 },
}; };
static struct kvm_coproc_target_table a15_target_table = { static struct kvm_coproc_target_table a15_target_table = {

View File

@ -37,7 +37,7 @@
static const struct coproc_reg a7_regs[] = { static const struct coproc_reg a7_regs[] = {
/* SCTLR: swapped by interrupt.S. */ /* SCTLR: swapped by interrupt.S. */
{ CRn( 1), CRm( 0), Op1( 0), Op2( 0), is32, { CRn( 1), CRm( 0), Op1( 0), Op2( 0), is32,
NULL, reset_val, c1_SCTLR, 0x00C50878 }, access_sctlr, reset_val, c1_SCTLR, 0x00C50878 },
}; };
static struct kvm_coproc_target_table a7_target_table = { static struct kvm_coproc_target_table a7_target_table = {

View File

@ -38,6 +38,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
{ {
vcpu->arch.hcr = HCR_GUEST_MASK;
return 0; return 0;
} }

View File

@ -220,6 +220,10 @@ after_vfp_restore:
* in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c). Return values are * in Hyp mode (see init_hyp_mode in arch/arm/kvm/arm.c). Return values are
* passed in r0 and r1. * passed in r0 and r1.
* *
* A function pointer with a value of 0xffffffff has a special meaning,
* and is used to implement __hyp_get_vectors in the same way as in
* arch/arm/kernel/hyp_stub.S.
*
* The calling convention follows the standard AAPCS: * The calling convention follows the standard AAPCS:
* r0 - r3: caller save * r0 - r3: caller save
* r12: caller save * r12: caller save
@ -363,6 +367,11 @@ hyp_hvc:
host_switch_to_hyp: host_switch_to_hyp:
pop {r0, r1, r2} pop {r0, r1, r2}
/* Check for __hyp_get_vectors */
cmp r0, #-1
mrceq p15, 4, r0, c12, c0, 0 @ get HVBAR
beq 1f
push {lr} push {lr}
mrs lr, SPSR mrs lr, SPSR
push {lr} push {lr}
@ -378,7 +387,7 @@ THUMB( orr lr, #1)
pop {lr} pop {lr}
msr SPSR_csxf, lr msr SPSR_csxf, lr
pop {lr} pop {lr}
eret 1: eret
guest_trap: guest_trap:
load_vcpu @ Load VCPU pointer to r0 load_vcpu @ Load VCPU pointer to r0

View File

@ -303,13 +303,17 @@ vcpu .req r0 @ vcpu pointer always in r0
mrc p15, 0, r2, c14, c1, 0 @ CNTKCTL mrc p15, 0, r2, c14, c1, 0 @ CNTKCTL
mrrc p15, 0, r4, r5, c7 @ PAR mrrc p15, 0, r4, r5, c7 @ PAR
mrc p15, 0, r6, c10, c3, 0 @ AMAIR0
mrc p15, 0, r7, c10, c3, 1 @ AMAIR1
.if \store_to_vcpu == 0 .if \store_to_vcpu == 0
push {r2,r4-r5} push {r2,r4-r7}
.else .else
str r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)] str r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)]
add r12, vcpu, #CP15_OFFSET(c7_PAR) add r12, vcpu, #CP15_OFFSET(c7_PAR)
strd r4, r5, [r12] strd r4, r5, [r12]
str r6, [vcpu, #CP15_OFFSET(c10_AMAIR0)]
str r7, [vcpu, #CP15_OFFSET(c10_AMAIR1)]
.endif .endif
.endm .endm
@ -322,15 +326,19 @@ vcpu .req r0 @ vcpu pointer always in r0
*/ */
.macro write_cp15_state read_from_vcpu .macro write_cp15_state read_from_vcpu
.if \read_from_vcpu == 0 .if \read_from_vcpu == 0
pop {r2,r4-r5} pop {r2,r4-r7}
.else .else
ldr r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)] ldr r2, [vcpu, #CP15_OFFSET(c14_CNTKCTL)]
add r12, vcpu, #CP15_OFFSET(c7_PAR) add r12, vcpu, #CP15_OFFSET(c7_PAR)
ldrd r4, r5, [r12] ldrd r4, r5, [r12]
ldr r6, [vcpu, #CP15_OFFSET(c10_AMAIR0)]
ldr r7, [vcpu, #CP15_OFFSET(c10_AMAIR1)]
.endif .endif
mcr p15, 0, r2, c14, c1, 0 @ CNTKCTL mcr p15, 0, r2, c14, c1, 0 @ CNTKCTL
mcrr p15, 0, r4, r5, c7 @ PAR mcrr p15, 0, r4, r5, c7 @ PAR
mcr p15, 0, r6, c10, c3, 0 @ AMAIR0
mcr p15, 0, r7, c10, c3, 1 @ AMAIR1
.if \read_from_vcpu == 0 .if \read_from_vcpu == 0
pop {r2-r12} pop {r2-r12}
@ -597,17 +605,14 @@ vcpu .req r0 @ vcpu pointer always in r0
/* Enable/Disable: stage-2 trans., trap interrupts, trap wfi, trap smc */ /* Enable/Disable: stage-2 trans., trap interrupts, trap wfi, trap smc */
.macro configure_hyp_role operation .macro configure_hyp_role operation
mrc p15, 4, r2, c1, c1, 0 @ HCR
bic r2, r2, #HCR_VIRT_EXCP_MASK
ldr r3, =HCR_GUEST_MASK
.if \operation == vmentry .if \operation == vmentry
orr r2, r2, r3 ldr r2, [vcpu, #VCPU_HCR]
ldr r3, [vcpu, #VCPU_IRQ_LINES] ldr r3, [vcpu, #VCPU_IRQ_LINES]
orr r2, r2, r3 orr r2, r2, r3
.else .else
bic r2, r2, r3 mov r2, #0
.endif .endif
mcr p15, 4, r2, c1, c1, 0 mcr p15, 4, r2, c1, c1, 0 @ HCR
.endm .endm
.macro load_vcpu .macro load_vcpu

View File

@ -144,8 +144,9 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp,
while (addr < end) { while (addr < end) {
pgd = pgdp + pgd_index(addr); pgd = pgdp + pgd_index(addr);
pud = pud_offset(pgd, addr); pud = pud_offset(pgd, addr);
pte = NULL;
if (pud_none(*pud)) { if (pud_none(*pud)) {
addr = pud_addr_end(addr, end); addr = kvm_pud_addr_end(addr, end);
continue; continue;
} }
@ -155,13 +156,13 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp,
* move on. * move on.
*/ */
clear_pud_entry(kvm, pud, addr); clear_pud_entry(kvm, pud, addr);
addr = pud_addr_end(addr, end); addr = kvm_pud_addr_end(addr, end);
continue; continue;
} }
pmd = pmd_offset(pud, addr); pmd = pmd_offset(pud, addr);
if (pmd_none(*pmd)) { if (pmd_none(*pmd)) {
addr = pmd_addr_end(addr, end); addr = kvm_pmd_addr_end(addr, end);
continue; continue;
} }
@ -174,12 +175,12 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp,
/* /*
* If the pmd entry is to be cleared, walk back up the ladder * If the pmd entry is to be cleared, walk back up the ladder
*/ */
if (kvm_pmd_huge(*pmd) || page_empty(pte)) { if (kvm_pmd_huge(*pmd) || (pte && page_empty(pte))) {
clear_pmd_entry(kvm, pmd, addr); clear_pmd_entry(kvm, pmd, addr);
next = pmd_addr_end(addr, end); next = kvm_pmd_addr_end(addr, end);
if (page_empty(pmd) && !page_empty(pud)) { if (page_empty(pmd) && !page_empty(pud)) {
clear_pud_entry(kvm, pud, addr); clear_pud_entry(kvm, pud, addr);
next = pud_addr_end(addr, end); next = kvm_pud_addr_end(addr, end);
} }
} }
@ -187,6 +188,99 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp,
} }
} }
static void stage2_flush_ptes(struct kvm *kvm, pmd_t *pmd,
phys_addr_t addr, phys_addr_t end)
{
pte_t *pte;
pte = pte_offset_kernel(pmd, addr);
do {
if (!pte_none(*pte)) {
hva_t hva = gfn_to_hva(kvm, addr >> PAGE_SHIFT);
kvm_flush_dcache_to_poc((void*)hva, PAGE_SIZE);
}
} while (pte++, addr += PAGE_SIZE, addr != end);
}
static void stage2_flush_pmds(struct kvm *kvm, pud_t *pud,
phys_addr_t addr, phys_addr_t end)
{
pmd_t *pmd;
phys_addr_t next;
pmd = pmd_offset(pud, addr);
do {
next = kvm_pmd_addr_end(addr, end);
if (!pmd_none(*pmd)) {
if (kvm_pmd_huge(*pmd)) {
hva_t hva = gfn_to_hva(kvm, addr >> PAGE_SHIFT);
kvm_flush_dcache_to_poc((void*)hva, PMD_SIZE);
} else {
stage2_flush_ptes(kvm, pmd, addr, next);
}
}
} while (pmd++, addr = next, addr != end);
}
static void stage2_flush_puds(struct kvm *kvm, pgd_t *pgd,
phys_addr_t addr, phys_addr_t end)
{
pud_t *pud;
phys_addr_t next;
pud = pud_offset(pgd, addr);
do {
next = kvm_pud_addr_end(addr, end);
if (!pud_none(*pud)) {
if (pud_huge(*pud)) {
hva_t hva = gfn_to_hva(kvm, addr >> PAGE_SHIFT);
kvm_flush_dcache_to_poc((void*)hva, PUD_SIZE);
} else {
stage2_flush_pmds(kvm, pud, addr, next);
}
}
} while (pud++, addr = next, addr != end);
}
static void stage2_flush_memslot(struct kvm *kvm,
struct kvm_memory_slot *memslot)
{
phys_addr_t addr = memslot->base_gfn << PAGE_SHIFT;
phys_addr_t end = addr + PAGE_SIZE * memslot->npages;
phys_addr_t next;
pgd_t *pgd;
pgd = kvm->arch.pgd + pgd_index(addr);
do {
next = kvm_pgd_addr_end(addr, end);
stage2_flush_puds(kvm, pgd, addr, next);
} while (pgd++, addr = next, addr != end);
}
/**
* stage2_flush_vm - Invalidate cache for pages mapped in stage 2
* @kvm: The struct kvm pointer
*
* Go through the stage 2 page tables and invalidate any cache lines
* backing memory already mapped to the VM.
*/
void stage2_flush_vm(struct kvm *kvm)
{
struct kvm_memslots *slots;
struct kvm_memory_slot *memslot;
int idx;
idx = srcu_read_lock(&kvm->srcu);
spin_lock(&kvm->mmu_lock);
slots = kvm_memslots(kvm);
kvm_for_each_memslot(memslot, slots)
stage2_flush_memslot(kvm, memslot);
spin_unlock(&kvm->mmu_lock);
srcu_read_unlock(&kvm->srcu, idx);
}
/** /**
* free_boot_hyp_pgd - free HYP boot page tables * free_boot_hyp_pgd - free HYP boot page tables
* *
@ -715,7 +809,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
kvm_set_s2pmd_writable(&new_pmd); kvm_set_s2pmd_writable(&new_pmd);
kvm_set_pfn_dirty(pfn); kvm_set_pfn_dirty(pfn);
} }
coherent_icache_guest_page(kvm, hva & PMD_MASK, PMD_SIZE); coherent_cache_guest_page(vcpu, hva & PMD_MASK, PMD_SIZE);
ret = stage2_set_pmd_huge(kvm, memcache, fault_ipa, &new_pmd); ret = stage2_set_pmd_huge(kvm, memcache, fault_ipa, &new_pmd);
} else { } else {
pte_t new_pte = pfn_pte(pfn, PAGE_S2); pte_t new_pte = pfn_pte(pfn, PAGE_S2);
@ -723,7 +817,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
kvm_set_s2pte_writable(&new_pte); kvm_set_s2pte_writable(&new_pte);
kvm_set_pfn_dirty(pfn); kvm_set_pfn_dirty(pfn);
} }
coherent_icache_guest_page(kvm, hva, PAGE_SIZE); coherent_cache_guest_page(vcpu, hva, PAGE_SIZE);
ret = stage2_set_pte(kvm, memcache, fault_ipa, &new_pte, false); ret = stage2_set_pte(kvm, memcache, fault_ipa, &new_pte, false);
} }

View File

@ -8,7 +8,7 @@ config ARCH_HI3xxx
select CLKSRC_OF select CLKSRC_OF
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_ARM_SCU select HAVE_ARM_SCU
select HAVE_ARM_TWD select HAVE_ARM_TWD if SMP
select HAVE_SMP select HAVE_SMP
select PINCTRL select PINCTRL
select PINCTRL_SINGLE select PINCTRL_SINGLE

View File

@ -482,6 +482,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
if (IS_ENABLED(CONFIG_PCI_IMX6)) if (IS_ENABLED(CONFIG_PCI_IMX6))
clk_set_parent(clk[lvds1_sel], clk[sata_ref]); clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
/* Set initial power mode */
imx6q_set_lpm(WAIT_CLOCKED);
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
base = of_iomap(np, 0); base = of_iomap(np, 0);
WARN_ON(!base); WARN_ON(!base);

View File

@ -266,6 +266,9 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
/* Audio-related clocks configuration */ /* Audio-related clocks configuration */
clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]); clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]);
/* Set initial power mode */
imx6q_set_lpm(WAIT_CLOCKED);
np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt"); np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-gpt");
base = of_iomap(np, 0); base = of_iomap(np, 0);
WARN_ON(!base); WARN_ON(!base);

View File

@ -236,8 +236,6 @@ void __init imx6q_pm_init(void)
regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT, regmap_update_bits(gpr, IOMUXC_GPR1, IMX6Q_GPR1_GINT,
IMX6Q_GPR1_GINT); IMX6Q_GPR1_GINT);
/* Set initial power mode */
imx6q_set_lpm(WAIT_CLOCKED);
suspend_set_ops(&imx6q_pm_ops); suspend_set_ops(&imx6q_pm_ops);
} }

View File

@ -2,7 +2,6 @@ config ARCH_MOXART
bool "MOXA ART SoC" if ARCH_MULTI_V4T bool "MOXA ART SoC" if ARCH_MULTI_V4T
select CPU_FA526 select CPU_FA526
select ARM_DMA_MEM_BUFFERABLE select ARM_DMA_MEM_BUFFERABLE
select DMA_OF
select USE_OF select USE_OF
select CLKSRC_OF select CLKSRC_OF
select CLKSRC_MMIO select CLKSRC_MMIO

View File

@ -54,7 +54,7 @@ config SOC_OMAP5
select ARM_GIC select ARM_GIC
select CPU_V7 select CPU_V7
select HAVE_ARM_SCU if SMP select HAVE_ARM_SCU if SMP
select HAVE_ARM_TWD if LOCAL_TIMERS select HAVE_ARM_TWD if SMP
select HAVE_SMP select HAVE_SMP
select HAVE_ARM_ARCH_TIMER select HAVE_ARM_ARCH_TIMER
select ARM_ERRATA_798181 if SMP select ARM_ERRATA_798181 if SMP

View File

@ -30,6 +30,7 @@
#include <mach/gumstix.h> #include <mach/gumstix.h>
#include <mach/mfp-pxa25x.h> #include <mach/mfp-pxa25x.h>
#include <mach/irqs.h>
#include <linux/platform_data/video-pxafb.h> #include <linux/platform_data/video-pxafb.h>
#include "generic.h" #include "generic.h"

View File

@ -14,6 +14,8 @@
#ifndef ASM_ARCH_BALLOON3_H #ifndef ASM_ARCH_BALLOON3_H
#define ASM_ARCH_BALLOON3_H #define ASM_ARCH_BALLOON3_H
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
enum balloon3_features { enum balloon3_features {
BALLOON3_FEATURE_OHCI, BALLOON3_FEATURE_OHCI,
BALLOON3_FEATURE_MMC, BALLOON3_FEATURE_MMC,

View File

@ -13,6 +13,7 @@
#ifndef __ASM_ARCH_CORGI_H #ifndef __ASM_ARCH_CORGI_H
#define __ASM_ARCH_CORGI_H 1 #define __ASM_ARCH_CORGI_H 1
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
/* /*
* Corgi (Non Standard) GPIO Definitions * Corgi (Non Standard) GPIO Definitions

View File

@ -11,6 +11,8 @@
#ifndef CSB726_H #ifndef CSB726_H
#define CSB726_H #define CSB726_H
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
#define CSB726_GPIO_IRQ_LAN 52 #define CSB726_GPIO_IRQ_LAN 52
#define CSB726_GPIO_IRQ_SM501 53 #define CSB726_GPIO_IRQ_SM501 53
#define CSB726_GPIO_MMC_DETECT 100 #define CSB726_GPIO_MMC_DETECT 100

View File

@ -6,6 +6,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/* BTRESET - Reset line to Bluetooth module, active low signal. */ /* BTRESET - Reset line to Bluetooth module, active low signal. */
#define GPIO_GUMSTIX_BTRESET 7 #define GPIO_GUMSTIX_BTRESET 7

View File

@ -23,6 +23,7 @@
* IDP hardware. * IDP hardware.
*/ */
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
#define IDP_FLASH_PHYS (PXA_CS0_PHYS) #define IDP_FLASH_PHYS (PXA_CS0_PHYS)
#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS) #define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS)

View File

@ -13,6 +13,8 @@
#ifndef _INCLUDE_PALMLD_H_ #ifndef _INCLUDE_PALMLD_H_
#define _INCLUDE_PALMLD_H_ #define _INCLUDE_PALMLD_H_
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/** HERE ARE GPIOs **/ /** HERE ARE GPIOs **/
/* GPIOs */ /* GPIOs */

View File

@ -15,6 +15,8 @@
#ifndef _INCLUDE_PALMT5_H_ #ifndef _INCLUDE_PALMT5_H_
#define _INCLUDE_PALMT5_H_ #define _INCLUDE_PALMT5_H_
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/** HERE ARE GPIOs **/ /** HERE ARE GPIOs **/
/* GPIOs */ /* GPIOs */

View File

@ -16,6 +16,8 @@
#ifndef _INCLUDE_PALMTC_H_ #ifndef _INCLUDE_PALMTC_H_
#define _INCLUDE_PALMTC_H_ #define _INCLUDE_PALMTC_H_
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/** HERE ARE GPIOs **/ /** HERE ARE GPIOs **/
/* GPIOs */ /* GPIOs */

View File

@ -16,6 +16,8 @@
#ifndef _INCLUDE_PALMTX_H_ #ifndef _INCLUDE_PALMTX_H_
#define _INCLUDE_PALMTX_H_ #define _INCLUDE_PALMTX_H_
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/** HERE ARE GPIOs **/ /** HERE ARE GPIOs **/
/* GPIOs */ /* GPIOs */

View File

@ -23,6 +23,8 @@
* Definitions of CPU card resources only * Definitions of CPU card resources only
*/ */
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/* phyCORE-PXA270 (PCM027) Interrupts */ /* phyCORE-PXA270 (PCM027) Interrupts */
#define PCM027_IRQ(x) (IRQ_BOARD_START + (x)) #define PCM027_IRQ(x) (IRQ_BOARD_START + (x))
#define PCM027_BTDET_IRQ PCM027_IRQ(0) #define PCM027_BTDET_IRQ PCM027_IRQ(0)

View File

@ -20,6 +20,7 @@
*/ */
#include <mach/pcm027.h> #include <mach/pcm027.h>
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/* /*
* definitions relevant only when the PCM-990 * definitions relevant only when the PCM-990

View File

@ -15,6 +15,8 @@
#ifndef __ASM_ARCH_POODLE_H #ifndef __ASM_ARCH_POODLE_H
#define __ASM_ARCH_POODLE_H 1 #define __ASM_ARCH_POODLE_H 1
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/* /*
* GPIOs * GPIOs
*/ */

View File

@ -15,8 +15,8 @@
#define __ASM_ARCH_SPITZ_H 1 #define __ASM_ARCH_SPITZ_H 1
#endif #endif
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO, PXA_GPIO_TO_IRQ */
#include <linux/fb.h> #include <linux/fb.h>
#include <linux/gpio.h>
/* Spitz/Akita GPIOs */ /* Spitz/Akita GPIOs */

View File

@ -13,6 +13,8 @@
#ifndef _ASM_ARCH_TOSA_H_ #ifndef _ASM_ARCH_TOSA_H_
#define _ASM_ARCH_TOSA_H_ 1 #define _ASM_ARCH_TOSA_H_ 1
#include "irqs.h" /* PXA_NR_BUILTIN_GPIO */
/* TOSA Chip selects */ /* TOSA Chip selects */
#define TOSA_LCDC_PHYS PXA_CS4_PHYS #define TOSA_LCDC_PHYS PXA_CS4_PHYS
/* Internel Scoop */ /* Internel Scoop */

View File

@ -10,6 +10,8 @@
#ifndef _TRIPEPS4_H_ #ifndef _TRIPEPS4_H_
#define _TRIPEPS4_H_ #define _TRIPEPS4_H_
#include "irqs.h" /* PXA_GPIO_TO_IRQ */
/* physical memory regions */ /* physical memory regions */
#define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */ #define TRIZEPS4_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
#define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */ #define TRIZEPS4_DISK_PHYS (PXA_CS1_PHYS) /* Disk On Chip region */

View File

@ -8,7 +8,7 @@ config ARCH_SHMOBILE_MULTI
select CPU_V7 select CPU_V7
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_ARM_SCU if SMP select HAVE_ARM_SCU if SMP
select HAVE_ARM_TWD if LOCAL_TIMERS select HAVE_ARM_TWD if SMP
select HAVE_SMP select HAVE_SMP
select ARM_GIC select ARM_GIC
select MIGHT_HAVE_CACHE_L2X0 select MIGHT_HAVE_CACHE_L2X0

View File

@ -25,6 +25,7 @@
#include <linux/of_irq.h> #include <linux/of_irq.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/memblock.h>
#include <linux/irqchip.h> #include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h> #include <linux/irqchip/arm-gic.h>
@ -41,6 +42,18 @@
void __iomem *zynq_scu_base; void __iomem *zynq_scu_base;
/**
* zynq_memory_init - Initialize special memory
*
* We need to stop things allocating the low memory as DMA can't work in
* the 1st 512K of memory.
*/
static void __init zynq_memory_init(void)
{
if (!__pa(PAGE_OFFSET))
memblock_reserve(__pa(PAGE_OFFSET), __pa(swapper_pg_dir));
}
static struct platform_device zynq_cpuidle_device = { static struct platform_device zynq_cpuidle_device = {
.name = "cpuidle-zynq", .name = "cpuidle-zynq",
}; };
@ -117,5 +130,6 @@ DT_MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
.init_machine = zynq_init_machine, .init_machine = zynq_init_machine,
.init_time = zynq_timer_init, .init_time = zynq_timer_init,
.dt_compat = zynq_dt_match, .dt_compat = zynq_dt_match,
.reserve = zynq_memory_init,
.restart = zynq_system_reset, .restart = zynq_system_reset,
MACHINE_END MACHINE_END

View File

@ -36,6 +36,7 @@ config ARM64
select HAVE_GENERIC_DMA_COHERENT select HAVE_GENERIC_DMA_COHERENT
select HAVE_HW_BREAKPOINT if PERF_EVENTS select HAVE_HW_BREAKPOINT if PERF_EVENTS
select HAVE_MEMBLOCK select HAVE_MEMBLOCK
select HAVE_PATA_PLATFORM
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select IRQ_DOMAIN select IRQ_DOMAIN
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA

View File

@ -1,4 +1,3 @@
CONFIG_EXPERIMENTAL=y
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
@ -19,6 +18,7 @@ CONFIG_BLK_DEV_INITRD=y
CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ALL=y
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
CONFIG_PROFILING=y CONFIG_PROFILING=y
CONFIG_JUMP_LABEL=y
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSG is not set
@ -27,6 +27,7 @@ CONFIG_ARCH_VEXPRESS=y
CONFIG_ARCH_XGENE=y CONFIG_ARCH_XGENE=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
CONFIG_CMA=y
CONFIG_CMDLINE="console=ttyAMA0" CONFIG_CMDLINE="console=ttyAMA0"
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_COMPAT=y CONFIG_COMPAT=y
@ -42,14 +43,17 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_WIRELESS is not set # CONFIG_WIRELESS is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS=y
CONFIG_BLK_DEV=y CONFIG_DMA_CMA=y
CONFIG_SCSI=y CONFIG_SCSI=y
# CONFIG_SCSI_PROC_FS is not set # CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
# CONFIG_SCSI_LOWLEVEL is not set # CONFIG_SCSI_LOWLEVEL is not set
CONFIG_ATA=y
CONFIG_PATA_PLATFORM=y
CONFIG_PATA_OF_PLATFORM=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_SMC91X=y CONFIG_SMC91X=y
CONFIG_SMSC911X=y
# CONFIG_WLAN is not set # CONFIG_WLAN is not set
CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVDEV=y
# CONFIG_SERIO_I8042 is not set # CONFIG_SERIO_I8042 is not set
@ -62,13 +66,19 @@ CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set # CONFIG_HWMON is not set
CONFIG_REGULATOR=y
CONFIG_REGULATOR_FIXED_VOLTAGE=y
CONFIG_FB=y CONFIG_FB=y
# CONFIG_VGA_CONSOLE is not set # CONFIG_VGA_CONSOLE is not set
CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_LOGO=y CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_USB_SUPPORT is not set CONFIG_USB=y
CONFIG_USB_ISP1760_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_MMC=y
CONFIG_MMC_ARMMMCI=y
# CONFIG_IOMMU_SUPPORT is not set # CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y

View File

@ -54,8 +54,7 @@ static inline void atomic_add(int i, atomic_t *v)
" stxr %w1, %w0, %2\n" " stxr %w1, %w0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i));
: "cc");
} }
static inline int atomic_add_return(int i, atomic_t *v) static inline int atomic_add_return(int i, atomic_t *v)
@ -64,14 +63,15 @@ static inline int atomic_add_return(int i, atomic_t *v)
int result; int result;
asm volatile("// atomic_add_return\n" asm volatile("// atomic_add_return\n"
"1: ldaxr %w0, %2\n" "1: ldxr %w0, %2\n"
" add %w0, %w0, %w3\n" " add %w0, %w0, %w3\n"
" stlxr %w1, %w0, %2\n" " stlxr %w1, %w0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i)
: "cc", "memory"); : "memory");
smp_mb();
return result; return result;
} }
@ -86,8 +86,7 @@ static inline void atomic_sub(int i, atomic_t *v)
" stxr %w1, %w0, %2\n" " stxr %w1, %w0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i));
: "cc");
} }
static inline int atomic_sub_return(int i, atomic_t *v) static inline int atomic_sub_return(int i, atomic_t *v)
@ -96,14 +95,15 @@ static inline int atomic_sub_return(int i, atomic_t *v)
int result; int result;
asm volatile("// atomic_sub_return\n" asm volatile("// atomic_sub_return\n"
"1: ldaxr %w0, %2\n" "1: ldxr %w0, %2\n"
" sub %w0, %w0, %w3\n" " sub %w0, %w0, %w3\n"
" stlxr %w1, %w0, %2\n" " stlxr %w1, %w0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i)
: "cc", "memory"); : "memory");
smp_mb();
return result; return result;
} }
@ -112,17 +112,20 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
unsigned long tmp; unsigned long tmp;
int oldval; int oldval;
smp_mb();
asm volatile("// atomic_cmpxchg\n" asm volatile("// atomic_cmpxchg\n"
"1: ldaxr %w1, %2\n" "1: ldxr %w1, %2\n"
" cmp %w1, %w3\n" " cmp %w1, %w3\n"
" b.ne 2f\n" " b.ne 2f\n"
" stlxr %w0, %w4, %2\n" " stxr %w0, %w4, %2\n"
" cbnz %w0, 1b\n" " cbnz %w0, 1b\n"
"2:" "2:"
: "=&r" (tmp), "=&r" (oldval), "+Q" (ptr->counter) : "=&r" (tmp), "=&r" (oldval), "+Q" (ptr->counter)
: "Ir" (old), "r" (new) : "Ir" (old), "r" (new)
: "cc", "memory"); : "cc");
smp_mb();
return oldval; return oldval;
} }
@ -173,8 +176,7 @@ static inline void atomic64_add(u64 i, atomic64_t *v)
" stxr %w1, %0, %2\n" " stxr %w1, %0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i));
: "cc");
} }
static inline long atomic64_add_return(long i, atomic64_t *v) static inline long atomic64_add_return(long i, atomic64_t *v)
@ -183,14 +185,15 @@ static inline long atomic64_add_return(long i, atomic64_t *v)
unsigned long tmp; unsigned long tmp;
asm volatile("// atomic64_add_return\n" asm volatile("// atomic64_add_return\n"
"1: ldaxr %0, %2\n" "1: ldxr %0, %2\n"
" add %0, %0, %3\n" " add %0, %0, %3\n"
" stlxr %w1, %0, %2\n" " stlxr %w1, %0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i)
: "cc", "memory"); : "memory");
smp_mb();
return result; return result;
} }
@ -205,8 +208,7 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
" stxr %w1, %0, %2\n" " stxr %w1, %0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i));
: "cc");
} }
static inline long atomic64_sub_return(long i, atomic64_t *v) static inline long atomic64_sub_return(long i, atomic64_t *v)
@ -215,14 +217,15 @@ static inline long atomic64_sub_return(long i, atomic64_t *v)
unsigned long tmp; unsigned long tmp;
asm volatile("// atomic64_sub_return\n" asm volatile("// atomic64_sub_return\n"
"1: ldaxr %0, %2\n" "1: ldxr %0, %2\n"
" sub %0, %0, %3\n" " sub %0, %0, %3\n"
" stlxr %w1, %0, %2\n" " stlxr %w1, %0, %2\n"
" cbnz %w1, 1b" " cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i) : "Ir" (i)
: "cc", "memory"); : "memory");
smp_mb();
return result; return result;
} }
@ -231,17 +234,20 @@ static inline long atomic64_cmpxchg(atomic64_t *ptr, long old, long new)
long oldval; long oldval;
unsigned long res; unsigned long res;
smp_mb();
asm volatile("// atomic64_cmpxchg\n" asm volatile("// atomic64_cmpxchg\n"
"1: ldaxr %1, %2\n" "1: ldxr %1, %2\n"
" cmp %1, %3\n" " cmp %1, %3\n"
" b.ne 2f\n" " b.ne 2f\n"
" stlxr %w0, %4, %2\n" " stxr %w0, %4, %2\n"
" cbnz %w0, 1b\n" " cbnz %w0, 1b\n"
"2:" "2:"
: "=&r" (res), "=&r" (oldval), "+Q" (ptr->counter) : "=&r" (res), "=&r" (oldval), "+Q" (ptr->counter)
: "Ir" (old), "r" (new) : "Ir" (old), "r" (new)
: "cc", "memory"); : "cc");
smp_mb();
return oldval; return oldval;
} }
@ -253,11 +259,12 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
unsigned long tmp; unsigned long tmp;
asm volatile("// atomic64_dec_if_positive\n" asm volatile("// atomic64_dec_if_positive\n"
"1: ldaxr %0, %2\n" "1: ldxr %0, %2\n"
" subs %0, %0, #1\n" " subs %0, %0, #1\n"
" b.mi 2f\n" " b.mi 2f\n"
" stlxr %w1, %0, %2\n" " stlxr %w1, %0, %2\n"
" cbnz %w1, 1b\n" " cbnz %w1, 1b\n"
" dmb ish\n"
"2:" "2:"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter) : "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: :

View File

@ -25,7 +25,7 @@
#define wfi() asm volatile("wfi" : : : "memory") #define wfi() asm volatile("wfi" : : : "memory")
#define isb() asm volatile("isb" : : : "memory") #define isb() asm volatile("isb" : : : "memory")
#define dsb() asm volatile("dsb sy" : : : "memory") #define dsb(opt) asm volatile("dsb sy" : : : "memory")
#define mb() dsb() #define mb() dsb()
#define rmb() asm volatile("dsb ld" : : : "memory") #define rmb() asm volatile("dsb ld" : : : "memory")

View File

@ -116,6 +116,7 @@ extern void flush_dcache_page(struct page *);
static inline void __flush_icache_all(void) static inline void __flush_icache_all(void)
{ {
asm("ic ialluis"); asm("ic ialluis");
dsb();
} }
#define flush_dcache_mmap_lock(mapping) \ #define flush_dcache_mmap_lock(mapping) \

View File

@ -29,44 +29,45 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
switch (size) { switch (size) {
case 1: case 1:
asm volatile("// __xchg1\n" asm volatile("// __xchg1\n"
"1: ldaxrb %w0, %2\n" "1: ldxrb %w0, %2\n"
" stlxrb %w1, %w3, %2\n" " stlxrb %w1, %w3, %2\n"
" cbnz %w1, 1b\n" " cbnz %w1, 1b\n"
: "=&r" (ret), "=&r" (tmp), "+Q" (*(u8 *)ptr) : "=&r" (ret), "=&r" (tmp), "+Q" (*(u8 *)ptr)
: "r" (x) : "r" (x)
: "cc", "memory"); : "memory");
break; break;
case 2: case 2:
asm volatile("// __xchg2\n" asm volatile("// __xchg2\n"
"1: ldaxrh %w0, %2\n" "1: ldxrh %w0, %2\n"
" stlxrh %w1, %w3, %2\n" " stlxrh %w1, %w3, %2\n"
" cbnz %w1, 1b\n" " cbnz %w1, 1b\n"
: "=&r" (ret), "=&r" (tmp), "+Q" (*(u16 *)ptr) : "=&r" (ret), "=&r" (tmp), "+Q" (*(u16 *)ptr)
: "r" (x) : "r" (x)
: "cc", "memory"); : "memory");
break; break;
case 4: case 4:
asm volatile("// __xchg4\n" asm volatile("// __xchg4\n"
"1: ldaxr %w0, %2\n" "1: ldxr %w0, %2\n"
" stlxr %w1, %w3, %2\n" " stlxr %w1, %w3, %2\n"
" cbnz %w1, 1b\n" " cbnz %w1, 1b\n"
: "=&r" (ret), "=&r" (tmp), "+Q" (*(u32 *)ptr) : "=&r" (ret), "=&r" (tmp), "+Q" (*(u32 *)ptr)
: "r" (x) : "r" (x)
: "cc", "memory"); : "memory");
break; break;
case 8: case 8:
asm volatile("// __xchg8\n" asm volatile("// __xchg8\n"
"1: ldaxr %0, %2\n" "1: ldxr %0, %2\n"
" stlxr %w1, %3, %2\n" " stlxr %w1, %3, %2\n"
" cbnz %w1, 1b\n" " cbnz %w1, 1b\n"
: "=&r" (ret), "=&r" (tmp), "+Q" (*(u64 *)ptr) : "=&r" (ret), "=&r" (tmp), "+Q" (*(u64 *)ptr)
: "r" (x) : "r" (x)
: "cc", "memory"); : "memory");
break; break;
default: default:
BUILD_BUG(); BUILD_BUG();
} }
smp_mb();
return ret; return ret;
} }

Some files were not shown because too many files have changed in this diff Show More