Merge 4.9-rc7 into usb-next
We want the USB fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Коммит
0edbf9e552
|
@ -6,7 +6,7 @@ perform in-band IPMI communication with their host.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- compatible : should be "aspeed,ast2400-bt-bmc"
|
- compatible : should be "aspeed,ast2400-ibt-bmc"
|
||||||
- reg: physical address and size of the registers
|
- reg: physical address and size of the registers
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
@ -17,7 +17,7 @@ Optional properties:
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
ibt@1e789140 {
|
ibt@1e789140 {
|
||||||
compatible = "aspeed,ast2400-bt-bmc";
|
compatible = "aspeed,ast2400-ibt-bmc";
|
||||||
reg = <0x1e789140 0x18>;
|
reg = <0x1e789140 0x18>;
|
||||||
interrupts = <8>;
|
interrupts = <8>;
|
||||||
};
|
};
|
|
@ -12,7 +12,7 @@ Required properties:
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- ti,dmic: phandle for the OMAP dmic node if the machine have it connected
|
- ti,dmic: phandle for the OMAP dmic node if the machine have it connected
|
||||||
- ti,jack_detection: Need to be present if the board capable to detect jack
|
- ti,jack-detection: Need to be present if the board capable to detect jack
|
||||||
insertion, removal.
|
insertion, removal.
|
||||||
|
|
||||||
Available audio endpoints for the audio-routing table:
|
Available audio endpoints for the audio-routing table:
|
||||||
|
|
|
@ -326,7 +326,7 @@ Two parent-locked sibling muxes
|
||||||
|
|
||||||
This is a good topology.
|
This is a good topology.
|
||||||
|
|
||||||
.--------.
|
.--------.
|
||||||
.----------. .--| dev D1 |
|
.----------. .--| dev D1 |
|
||||||
| parent- |--' '--------'
|
| parent- |--' '--------'
|
||||||
.--| locked | .--------.
|
.--| locked | .--------.
|
||||||
|
@ -350,7 +350,7 @@ Mux-locked and parent-locked sibling muxes
|
||||||
|
|
||||||
This is a good topology.
|
This is a good topology.
|
||||||
|
|
||||||
.--------.
|
.--------.
|
||||||
.----------. .--| dev D1 |
|
.----------. .--| dev D1 |
|
||||||
| mux- |--' '--------'
|
| mux- |--' '--------'
|
||||||
.--| locked | .--------.
|
.--| locked | .--------.
|
||||||
|
|
|
@ -67,13 +67,14 @@ Note that DSA does not currently create network interfaces for the "cpu" and
|
||||||
Switch tagging protocols
|
Switch tagging protocols
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
DSA currently supports 4 different tagging protocols, and a tag-less mode as
|
DSA currently supports 5 different tagging protocols, and a tag-less mode as
|
||||||
well. The different protocols are implemented in:
|
well. The different protocols are implemented in:
|
||||||
|
|
||||||
net/dsa/tag_trailer.c: Marvell's 4 trailer tag mode (legacy)
|
net/dsa/tag_trailer.c: Marvell's 4 trailer tag mode (legacy)
|
||||||
net/dsa/tag_dsa.c: Marvell's original DSA tag
|
net/dsa/tag_dsa.c: Marvell's original DSA tag
|
||||||
net/dsa/tag_edsa.c: Marvell's enhanced DSA tag
|
net/dsa/tag_edsa.c: Marvell's enhanced DSA tag
|
||||||
net/dsa/tag_brcm.c: Broadcom's 4 bytes tag
|
net/dsa/tag_brcm.c: Broadcom's 4 bytes tag
|
||||||
|
net/dsa/tag_qca.c: Qualcomm's 2 bytes tag
|
||||||
|
|
||||||
The exact format of the tag protocol is vendor specific, but in general, they
|
The exact format of the tag protocol is vendor specific, but in general, they
|
||||||
all contain something which:
|
all contain something which:
|
||||||
|
|
|
@ -777,6 +777,17 @@ Gets the current timestamp of kvmclock as seen by the current guest. In
|
||||||
conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
|
conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
|
||||||
such as migration.
|
such as migration.
|
||||||
|
|
||||||
|
When KVM_CAP_ADJUST_CLOCK is passed to KVM_CHECK_EXTENSION, it returns the
|
||||||
|
set of bits that KVM can return in struct kvm_clock_data's flag member.
|
||||||
|
|
||||||
|
The only flag defined now is KVM_CLOCK_TSC_STABLE. If set, the returned
|
||||||
|
value is the exact kvmclock value seen by all VCPUs at the instant
|
||||||
|
when KVM_GET_CLOCK was called. If clear, the returned value is simply
|
||||||
|
CLOCK_MONOTONIC plus a constant offset; the offset can be modified
|
||||||
|
with KVM_SET_CLOCK. KVM will try to make all VCPUs follow this clock,
|
||||||
|
but the exact value read by each VCPU could differ, because the host
|
||||||
|
TSC is not stable.
|
||||||
|
|
||||||
struct kvm_clock_data {
|
struct kvm_clock_data {
|
||||||
__u64 clock; /* kvmclock current value */
|
__u64 clock; /* kvmclock current value */
|
||||||
__u32 flags;
|
__u32 flags;
|
||||||
|
|
12
MAINTAINERS
12
MAINTAINERS
|
@ -77,6 +77,7 @@ Descriptions of section entries:
|
||||||
Q: Patchwork web based patch tracking system site
|
Q: Patchwork web based patch tracking system site
|
||||||
T: SCM tree type and location.
|
T: SCM tree type and location.
|
||||||
Type is one of: git, hg, quilt, stgit, topgit
|
Type is one of: git, hg, quilt, stgit, topgit
|
||||||
|
B: Bug tracking system location.
|
||||||
S: Status, one of the following:
|
S: Status, one of the following:
|
||||||
Supported: Someone is actually paid to look after this.
|
Supported: Someone is actually paid to look after this.
|
||||||
Maintained: Someone actually looks after it.
|
Maintained: Someone actually looks after it.
|
||||||
|
@ -281,6 +282,7 @@ L: linux-acpi@vger.kernel.org
|
||||||
W: https://01.org/linux-acpi
|
W: https://01.org/linux-acpi
|
||||||
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/
|
F: drivers/acpi/
|
||||||
F: drivers/pnp/pnpacpi/
|
F: drivers/pnp/pnpacpi/
|
||||||
|
@ -304,6 +306,8 @@ W: https://acpica.org/
|
||||||
W: https://github.com/acpica/acpica/
|
W: https://github.com/acpica/acpica/
|
||||||
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
|
B: https://bugs.acpica.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/acpica/
|
F: drivers/acpi/acpica/
|
||||||
F: include/acpi/
|
F: include/acpi/
|
||||||
|
@ -313,6 +317,7 @@ ACPI FAN DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: https://01.org/linux-acpi
|
W: https://01.org/linux-acpi
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/fan.c
|
F: drivers/acpi/fan.c
|
||||||
|
|
||||||
|
@ -328,6 +333,7 @@ ACPI THERMAL DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: https://01.org/linux-acpi
|
W: https://01.org/linux-acpi
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/*thermal*
|
F: drivers/acpi/*thermal*
|
||||||
|
|
||||||
|
@ -335,6 +341,7 @@ ACPI VIDEO DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: https://01.org/linux-acpi
|
W: https://01.org/linux-acpi
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/acpi_video.c
|
F: drivers/acpi/acpi_video.c
|
||||||
|
|
||||||
|
@ -5663,6 +5670,7 @@ HIBERNATION (aka Software Suspend, aka swsusp)
|
||||||
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
M: Pavel Machek <pavel@ucw.cz>
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/x86/power/
|
F: arch/x86/power/
|
||||||
F: drivers/base/power/
|
F: drivers/base/power/
|
||||||
|
@ -7084,6 +7092,7 @@ F: drivers/scsi/53c700*
|
||||||
LED SUBSYSTEM
|
LED SUBSYSTEM
|
||||||
M: Richard Purdie <rpurdie@rpsys.net>
|
M: Richard Purdie <rpurdie@rpsys.net>
|
||||||
M: Jacek Anaszewski <j.anaszewski@samsung.com>
|
M: Jacek Anaszewski <j.anaszewski@samsung.com>
|
||||||
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
L: linux-leds@vger.kernel.org
|
L: linux-leds@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -8057,6 +8066,7 @@ F: drivers/infiniband/hw/mlx4/
|
||||||
F: include/linux/mlx4/
|
F: include/linux/mlx4/
|
||||||
|
|
||||||
MELLANOX MLX5 core VPI driver
|
MELLANOX MLX5 core VPI driver
|
||||||
|
M: Saeed Mahameed <saeedm@mellanox.com>
|
||||||
M: Matan Barak <matanb@mellanox.com>
|
M: Matan Barak <matanb@mellanox.com>
|
||||||
M: Leon Romanovsky <leonro@mellanox.com>
|
M: Leon Romanovsky <leonro@mellanox.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -9622,6 +9632,7 @@ POWER MANAGEMENT CORE
|
||||||
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/base/power/
|
F: drivers/base/power/
|
||||||
F: include/linux/pm.h
|
F: include/linux/pm.h
|
||||||
|
@ -11611,6 +11622,7 @@ M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
M: Len Brown <len.brown@intel.com>
|
M: Len Brown <len.brown@intel.com>
|
||||||
M: Pavel Machek <pavel@ucw.cz>
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
|
B: https://bugzilla.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/power/
|
F: Documentation/power/
|
||||||
F: arch/x86/kernel/acpi/
|
F: arch/x86/kernel/acpi/
|
||||||
|
|
7
Makefile
7
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 9
|
PATCHLEVEL = 9
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc5
|
EXTRAVERSION = -rc7
|
||||||
NAME = Psychotic Stoned Sheep
|
NAME = Psychotic Stoned Sheep
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -399,11 +399,12 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
-fno-strict-aliasing -fno-common \
|
-fno-strict-aliasing -fno-common \
|
||||||
-Werror-implicit-function-declaration \
|
-Werror-implicit-function-declaration \
|
||||||
-Wno-format-security \
|
-Wno-format-security \
|
||||||
-std=gnu89
|
-std=gnu89 $(call cc-option,-fno-PIE)
|
||||||
|
|
||||||
|
|
||||||
KBUILD_AFLAGS_KERNEL :=
|
KBUILD_AFLAGS_KERNEL :=
|
||||||
KBUILD_CFLAGS_KERNEL :=
|
KBUILD_CFLAGS_KERNEL :=
|
||||||
KBUILD_AFLAGS := -D__ASSEMBLY__
|
KBUILD_AFLAGS := -D__ASSEMBLY__ $(call cc-option,-fno-PIE)
|
||||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
KBUILD_AFLAGS_MODULE := -DMODULE
|
||||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
KBUILD_CFLAGS_MODULE := -DMODULE
|
||||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||||
|
|
|
@ -64,8 +64,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ldo3_reg: ldo3 {
|
ldo3_reg: ldo3 {
|
||||||
regulator-min-microvolt = <600000>;
|
regulator-min-microvolt = <1725000>;
|
||||||
regulator-max-microvolt = <1800000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ldo5_reg: ldo5 {
|
ldo5_reg: ldo5 {
|
||||||
regulator-min-microvolt = <1725000>;
|
regulator-min-microvolt = <1200000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3600000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,14 +100,14 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
ldo9_reg: ldo9 {
|
ldo9_reg: ldo9 {
|
||||||
regulator-min-microvolt = <1200000>;
|
regulator-min-microvolt = <1250000>;
|
||||||
regulator-max-microvolt = <3600000>;
|
regulator-max-microvolt = <3600000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
ldo10_reg: ldo10 {
|
ldo10_reg: ldo10 {
|
||||||
regulator-min-microvolt = <1250000>;
|
regulator-min-microvolt = <1200000>;
|
||||||
regulator-max-microvolt = <3650000>;
|
regulator-max-microvolt = <3600000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
memory@80000000 {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x80000000 0>;
|
||||||
|
};
|
||||||
|
|
||||||
wl12xx_vmmc: wl12xx_vmmc {
|
wl12xx_vmmc: wl12xx_vmmc {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vwl1271";
|
regulator-name = "vwl1271";
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@0 {
|
memory@80000000 {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0 0>;
|
reg = <0x80000000 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
leds {
|
leds {
|
||||||
|
|
|
@ -124,6 +124,7 @@
|
||||||
compatible = "ti,abe-twl6040";
|
compatible = "ti,abe-twl6040";
|
||||||
ti,model = "omap5-uevm";
|
ti,model = "omap5-uevm";
|
||||||
|
|
||||||
|
ti,jack-detection;
|
||||||
ti,mclk-freq = <19200000>;
|
ti,mclk-freq = <19200000>;
|
||||||
|
|
||||||
ti,mcpdm = <&mcpdm>;
|
ti,mcpdm = <&mcpdm>;
|
||||||
|
@ -415,7 +416,7 @@
|
||||||
ti,backup-battery-charge-high-current;
|
ti,backup-battery-charge-high-current;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpadc {
|
gpadc: gpadc {
|
||||||
compatible = "ti,palmas-gpadc";
|
compatible = "ti,palmas-gpadc";
|
||||||
interrupts = <18 0
|
interrupts = <18 0
|
||||||
16 0
|
16 0
|
||||||
|
@ -475,8 +476,8 @@
|
||||||
smps6_reg: smps6 {
|
smps6_reg: smps6 {
|
||||||
/* VDD_DDR3 - over VDD_SMPS6 */
|
/* VDD_DDR3 - over VDD_SMPS6 */
|
||||||
regulator-name = "smps6";
|
regulator-name = "smps6";
|
||||||
regulator-min-microvolt = <1200000>;
|
regulator-min-microvolt = <1350000>;
|
||||||
regulator-max-microvolt = <1200000>;
|
regulator-max-microvolt = <1350000>;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
/* Low speed expansion connector */
|
/* Low speed expansion connector */
|
||||||
spi0: spi@9844000 {
|
spi0: spi@9844000 {
|
||||||
label = "LS-SPI0";
|
label = "LS-SPI0";
|
||||||
cs-gpio = <&pio30 3 0>;
|
cs-gpios = <&pio30 3 0>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -282,11 +282,15 @@
|
||||||
uart1_pins_a: uart1@0 {
|
uart1_pins_a: uart1@0 {
|
||||||
allwinner,pins = "PG6", "PG7";
|
allwinner,pins = "PG6", "PG7";
|
||||||
allwinner,function = "uart1";
|
allwinner,function = "uart1";
|
||||||
|
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||||
|
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart1_pins_cts_rts_a: uart1-cts-rts@0 {
|
uart1_pins_cts_rts_a: uart1-cts-rts@0 {
|
||||||
allwinner,pins = "PG8", "PG9";
|
allwinner,pins = "PG8", "PG9";
|
||||||
allwinner,function = "uart1";
|
allwinner,function = "uart1";
|
||||||
|
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||||
|
allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mmc0_pins_a: mmc0@0 {
|
mmc0_pins_a: mmc0@0 {
|
||||||
|
|
|
@ -8,7 +8,6 @@ generic-y += early_ioremap.h
|
||||||
generic-y += emergency-restart.h
|
generic-y += emergency-restart.h
|
||||||
generic-y += errno.h
|
generic-y += errno.h
|
||||||
generic-y += exec.h
|
generic-y += exec.h
|
||||||
generic-y += export.h
|
|
||||||
generic-y += ioctl.h
|
generic-y += ioctl.h
|
||||||
generic-y += ipcbuf.h
|
generic-y += ipcbuf.h
|
||||||
generic-y += irq_regs.h
|
generic-y += irq_regs.h
|
||||||
|
|
|
@ -33,7 +33,7 @@ endif
|
||||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||||
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
||||||
obj-$(CONFIG_FIQ) += fiq.o fiqasm.o
|
obj-$(CONFIG_FIQ) += fiq.o fiqasm.o
|
||||||
obj-$(CONFIG_MODULES) += module.o
|
obj-$(CONFIG_MODULES) += armksyms.o module.o
|
||||||
obj-$(CONFIG_ARM_MODULE_PLTS) += module-plts.o
|
obj-$(CONFIG_ARM_MODULE_PLTS) += module-plts.o
|
||||||
obj-$(CONFIG_ISA_DMA) += dma-isa.o
|
obj-$(CONFIG_ISA_DMA) += dma-isa.o
|
||||||
obj-$(CONFIG_PCI) += bios32.o isa.o
|
obj-$(CONFIG_PCI) += bios32.o isa.o
|
||||||
|
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* linux/arch/arm/kernel/armksyms.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Russell King
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
#include <linux/export.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/cryptohash.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/in6.h>
|
||||||
|
#include <linux/syscalls.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/arm-smccc.h>
|
||||||
|
|
||||||
|
#include <asm/checksum.h>
|
||||||
|
#include <asm/ftrace.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libgcc functions - functions that are used internally by the
|
||||||
|
* compiler... (prototypes are not correct though, but that
|
||||||
|
* doesn't really matter since they're not versioned).
|
||||||
|
*/
|
||||||
|
extern void __ashldi3(void);
|
||||||
|
extern void __ashrdi3(void);
|
||||||
|
extern void __divsi3(void);
|
||||||
|
extern void __lshrdi3(void);
|
||||||
|
extern void __modsi3(void);
|
||||||
|
extern void __muldi3(void);
|
||||||
|
extern void __ucmpdi2(void);
|
||||||
|
extern void __udivsi3(void);
|
||||||
|
extern void __umodsi3(void);
|
||||||
|
extern void __do_div64(void);
|
||||||
|
extern void __bswapsi2(void);
|
||||||
|
extern void __bswapdi2(void);
|
||||||
|
|
||||||
|
extern void __aeabi_idiv(void);
|
||||||
|
extern void __aeabi_idivmod(void);
|
||||||
|
extern void __aeabi_lasr(void);
|
||||||
|
extern void __aeabi_llsl(void);
|
||||||
|
extern void __aeabi_llsr(void);
|
||||||
|
extern void __aeabi_lmul(void);
|
||||||
|
extern void __aeabi_uidiv(void);
|
||||||
|
extern void __aeabi_uidivmod(void);
|
||||||
|
extern void __aeabi_ulcmp(void);
|
||||||
|
|
||||||
|
extern void fpundefinstr(void);
|
||||||
|
|
||||||
|
void mmioset(void *, unsigned int, size_t);
|
||||||
|
void mmiocpy(void *, const void *, size_t);
|
||||||
|
|
||||||
|
/* platform dependent support */
|
||||||
|
EXPORT_SYMBOL(arm_delay_ops);
|
||||||
|
|
||||||
|
/* networking */
|
||||||
|
EXPORT_SYMBOL(csum_partial);
|
||||||
|
EXPORT_SYMBOL(csum_partial_copy_from_user);
|
||||||
|
EXPORT_SYMBOL(csum_partial_copy_nocheck);
|
||||||
|
EXPORT_SYMBOL(__csum_ipv6_magic);
|
||||||
|
|
||||||
|
/* io */
|
||||||
|
#ifndef __raw_readsb
|
||||||
|
EXPORT_SYMBOL(__raw_readsb);
|
||||||
|
#endif
|
||||||
|
#ifndef __raw_readsw
|
||||||
|
EXPORT_SYMBOL(__raw_readsw);
|
||||||
|
#endif
|
||||||
|
#ifndef __raw_readsl
|
||||||
|
EXPORT_SYMBOL(__raw_readsl);
|
||||||
|
#endif
|
||||||
|
#ifndef __raw_writesb
|
||||||
|
EXPORT_SYMBOL(__raw_writesb);
|
||||||
|
#endif
|
||||||
|
#ifndef __raw_writesw
|
||||||
|
EXPORT_SYMBOL(__raw_writesw);
|
||||||
|
#endif
|
||||||
|
#ifndef __raw_writesl
|
||||||
|
EXPORT_SYMBOL(__raw_writesl);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* string / mem functions */
|
||||||
|
EXPORT_SYMBOL(strchr);
|
||||||
|
EXPORT_SYMBOL(strrchr);
|
||||||
|
EXPORT_SYMBOL(memset);
|
||||||
|
EXPORT_SYMBOL(memcpy);
|
||||||
|
EXPORT_SYMBOL(memmove);
|
||||||
|
EXPORT_SYMBOL(memchr);
|
||||||
|
EXPORT_SYMBOL(__memzero);
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(mmioset);
|
||||||
|
EXPORT_SYMBOL(mmiocpy);
|
||||||
|
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
|
EXPORT_SYMBOL(copy_page);
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(arm_copy_from_user);
|
||||||
|
EXPORT_SYMBOL(arm_copy_to_user);
|
||||||
|
EXPORT_SYMBOL(arm_clear_user);
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__get_user_1);
|
||||||
|
EXPORT_SYMBOL(__get_user_2);
|
||||||
|
EXPORT_SYMBOL(__get_user_4);
|
||||||
|
EXPORT_SYMBOL(__get_user_8);
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
EXPORT_SYMBOL(__get_user_64t_1);
|
||||||
|
EXPORT_SYMBOL(__get_user_64t_2);
|
||||||
|
EXPORT_SYMBOL(__get_user_64t_4);
|
||||||
|
EXPORT_SYMBOL(__get_user_32t_8);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__put_user_1);
|
||||||
|
EXPORT_SYMBOL(__put_user_2);
|
||||||
|
EXPORT_SYMBOL(__put_user_4);
|
||||||
|
EXPORT_SYMBOL(__put_user_8);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* gcc lib functions */
|
||||||
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
|
EXPORT_SYMBOL(__divsi3);
|
||||||
|
EXPORT_SYMBOL(__lshrdi3);
|
||||||
|
EXPORT_SYMBOL(__modsi3);
|
||||||
|
EXPORT_SYMBOL(__muldi3);
|
||||||
|
EXPORT_SYMBOL(__ucmpdi2);
|
||||||
|
EXPORT_SYMBOL(__udivsi3);
|
||||||
|
EXPORT_SYMBOL(__umodsi3);
|
||||||
|
EXPORT_SYMBOL(__do_div64);
|
||||||
|
EXPORT_SYMBOL(__bswapsi2);
|
||||||
|
EXPORT_SYMBOL(__bswapdi2);
|
||||||
|
|
||||||
|
#ifdef CONFIG_AEABI
|
||||||
|
EXPORT_SYMBOL(__aeabi_idiv);
|
||||||
|
EXPORT_SYMBOL(__aeabi_idivmod);
|
||||||
|
EXPORT_SYMBOL(__aeabi_lasr);
|
||||||
|
EXPORT_SYMBOL(__aeabi_llsl);
|
||||||
|
EXPORT_SYMBOL(__aeabi_llsr);
|
||||||
|
EXPORT_SYMBOL(__aeabi_lmul);
|
||||||
|
EXPORT_SYMBOL(__aeabi_uidiv);
|
||||||
|
EXPORT_SYMBOL(__aeabi_uidivmod);
|
||||||
|
EXPORT_SYMBOL(__aeabi_ulcmp);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* bitops */
|
||||||
|
EXPORT_SYMBOL(_set_bit);
|
||||||
|
EXPORT_SYMBOL(_test_and_set_bit);
|
||||||
|
EXPORT_SYMBOL(_clear_bit);
|
||||||
|
EXPORT_SYMBOL(_test_and_clear_bit);
|
||||||
|
EXPORT_SYMBOL(_change_bit);
|
||||||
|
EXPORT_SYMBOL(_test_and_change_bit);
|
||||||
|
EXPORT_SYMBOL(_find_first_zero_bit_le);
|
||||||
|
EXPORT_SYMBOL(_find_next_zero_bit_le);
|
||||||
|
EXPORT_SYMBOL(_find_first_bit_le);
|
||||||
|
EXPORT_SYMBOL(_find_next_bit_le);
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
EXPORT_SYMBOL(_find_first_zero_bit_be);
|
||||||
|
EXPORT_SYMBOL(_find_next_zero_bit_be);
|
||||||
|
EXPORT_SYMBOL(_find_first_bit_be);
|
||||||
|
EXPORT_SYMBOL(_find_next_bit_be);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_FUNCTION_TRACER
|
||||||
|
#ifdef CONFIG_OLD_MCOUNT
|
||||||
|
EXPORT_SYMBOL(mcount);
|
||||||
|
#endif
|
||||||
|
EXPORT_SYMBOL(__gnu_mcount_nc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
|
||||||
|
EXPORT_SYMBOL(__pv_phys_pfn_offset);
|
||||||
|
EXPORT_SYMBOL(__pv_offset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_HAVE_ARM_SMCCC
|
||||||
|
EXPORT_SYMBOL(arm_smccc_smc);
|
||||||
|
EXPORT_SYMBOL(arm_smccc_hvc);
|
||||||
|
#endif
|
|
@ -7,7 +7,6 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/ftrace.h>
|
#include <asm/ftrace.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#include "entry-header.S"
|
#include "entry-header.S"
|
||||||
|
|
||||||
|
@ -154,7 +153,6 @@ ENTRY(mcount)
|
||||||
__mcount _old
|
__mcount _old
|
||||||
#endif
|
#endif
|
||||||
ENDPROC(mcount)
|
ENDPROC(mcount)
|
||||||
EXPORT_SYMBOL(mcount)
|
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||||
ENTRY(ftrace_caller_old)
|
ENTRY(ftrace_caller_old)
|
||||||
|
@ -207,7 +205,6 @@ UNWIND(.fnstart)
|
||||||
#endif
|
#endif
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__gnu_mcount_nc)
|
ENDPROC(__gnu_mcount_nc)
|
||||||
EXPORT_SYMBOL(__gnu_mcount_nc)
|
|
||||||
|
|
||||||
#ifdef CONFIG_DYNAMIC_FTRACE
|
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||||
ENTRY(ftrace_caller)
|
ENTRY(ftrace_caller)
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
|
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
|
||||||
#include CONFIG_DEBUG_LL_INCLUDE
|
#include CONFIG_DEBUG_LL_INCLUDE
|
||||||
|
@ -728,8 +727,6 @@ __pv_phys_pfn_offset:
|
||||||
__pv_offset:
|
__pv_offset:
|
||||||
.quad 0
|
.quad 0
|
||||||
.size __pv_offset, . -__pv_offset
|
.size __pv_offset, . -__pv_offset
|
||||||
EXPORT_SYMBOL(__pv_phys_pfn_offset)
|
|
||||||
EXPORT_SYMBOL(__pv_offset)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "head-common.S"
|
#include "head-common.S"
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include <asm/opcodes-sec.h>
|
#include <asm/opcodes-sec.h>
|
||||||
#include <asm/opcodes-virt.h>
|
#include <asm/opcodes-virt.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wrap c macros in asm macros to delay expansion until after the
|
* Wrap c macros in asm macros to delay expansion until after the
|
||||||
|
@ -52,7 +51,6 @@ UNWIND( .fnend)
|
||||||
ENTRY(arm_smccc_smc)
|
ENTRY(arm_smccc_smc)
|
||||||
SMCCC SMCCC_SMC
|
SMCCC SMCCC_SMC
|
||||||
ENDPROC(arm_smccc_smc)
|
ENDPROC(arm_smccc_smc)
|
||||||
EXPORT_SYMBOL(arm_smccc_smc)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
|
* void smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
|
||||||
|
@ -62,4 +60,3 @@ EXPORT_SYMBOL(arm_smccc_smc)
|
||||||
ENTRY(arm_smccc_hvc)
|
ENTRY(arm_smccc_hvc)
|
||||||
SMCCC SMCCC_HVC
|
SMCCC SMCCC_HVC
|
||||||
ENDPROC(arm_smccc_hvc)
|
ENDPROC(arm_smccc_hvc)
|
||||||
EXPORT_SYMBOL(arm_smccc_hvc)
|
|
||||||
|
|
|
@ -74,6 +74,26 @@ void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long
|
||||||
dump_mem("", "Exception stack", frame + 4, frame + 4 + sizeof(struct pt_regs));
|
dump_mem("", "Exception stack", frame + 4, frame + 4 + sizeof(struct pt_regs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dump_backtrace_stm(u32 *stack, u32 instruction)
|
||||||
|
{
|
||||||
|
char str[80], *p;
|
||||||
|
unsigned int x;
|
||||||
|
int reg;
|
||||||
|
|
||||||
|
for (reg = 10, x = 0, p = str; reg >= 0; reg--) {
|
||||||
|
if (instruction & BIT(reg)) {
|
||||||
|
p += sprintf(p, " r%d:%08x", reg, *stack--);
|
||||||
|
if (++x == 6) {
|
||||||
|
x = 0;
|
||||||
|
p = str;
|
||||||
|
printk("%s\n", str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (p != str)
|
||||||
|
printk("%s\n", str);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_ARM_UNWIND
|
#ifndef CONFIG_ARM_UNWIND
|
||||||
/*
|
/*
|
||||||
* Stack pointers should always be within the kernels view of
|
* Stack pointers should always be within the kernels view of
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* No __ro_after_init data in the .rodata section - which will always be ro */
|
||||||
|
#define RO_AFTER_INIT_DATA
|
||||||
|
|
||||||
#include <asm-generic/vmlinux.lds.h>
|
#include <asm-generic/vmlinux.lds.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
|
@ -223,6 +226,8 @@ SECTIONS
|
||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
__init_end = .;
|
__init_end = .;
|
||||||
|
|
||||||
|
*(.data..ro_after_init)
|
||||||
|
|
||||||
NOSAVE_DATA
|
NOSAVE_DATA
|
||||||
CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
|
CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
|
||||||
READ_MOSTLY_DATA(L1_CACHE_BYTES)
|
READ_MOSTLY_DATA(L1_CACHE_BYTES)
|
||||||
|
|
|
@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define al r1
|
#define al r1
|
||||||
|
@ -53,5 +52,3 @@ ENTRY(__aeabi_llsl)
|
||||||
|
|
||||||
ENDPROC(__ashldi3)
|
ENDPROC(__ashldi3)
|
||||||
ENDPROC(__aeabi_llsl)
|
ENDPROC(__aeabi_llsl)
|
||||||
EXPORT_SYMBOL(__ashldi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_llsl)
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define al r1
|
#define al r1
|
||||||
|
@ -53,5 +52,3 @@ ENTRY(__aeabi_lasr)
|
||||||
|
|
||||||
ENDPROC(__ashrdi3)
|
ENDPROC(__ashrdi3)
|
||||||
ENDPROC(__aeabi_lasr)
|
ENDPROC(__aeabi_lasr)
|
||||||
EXPORT_SYMBOL(__ashrdi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_lasr)
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
* 27/03/03 Ian Molton Clean up CONFIG_CPU
|
* 27/03/03 Ian Molton Clean up CONFIG_CPU
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <linux/kern_levels.h>
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
.text
|
.text
|
||||||
|
@ -83,13 +84,13 @@ for_each_frame: tst frame, mask @ Check for address exceptions
|
||||||
teq r3, r1, lsr #11
|
teq r3, r1, lsr #11
|
||||||
ldreq r0, [frame, #-8] @ get sp
|
ldreq r0, [frame, #-8] @ get sp
|
||||||
subeq r0, r0, #4 @ point at the last arg
|
subeq r0, r0, #4 @ point at the last arg
|
||||||
bleq .Ldumpstm @ dump saved registers
|
bleq dump_backtrace_stm @ dump saved registers
|
||||||
|
|
||||||
1004: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, ip, lr, pc}
|
1004: ldr r1, [sv_pc, #0] @ if stmfd sp!, {..., fp, ip, lr, pc}
|
||||||
ldr r3, .Ldsi @ instruction exists,
|
ldr r3, .Ldsi @ instruction exists,
|
||||||
teq r3, r1, lsr #11
|
teq r3, r1, lsr #11
|
||||||
subeq r0, frame, #16
|
subeq r0, frame, #16
|
||||||
bleq .Ldumpstm @ dump saved registers
|
bleq dump_backtrace_stm @ dump saved registers
|
||||||
|
|
||||||
teq sv_fp, #0 @ zero saved fp means
|
teq sv_fp, #0 @ zero saved fp means
|
||||||
beq no_frame @ no further frames
|
beq no_frame @ no further frames
|
||||||
|
@ -112,38 +113,6 @@ ENDPROC(c_backtrace)
|
||||||
.long 1004b, 1006b
|
.long 1004b, 1006b
|
||||||
.popsection
|
.popsection
|
||||||
|
|
||||||
#define instr r4
|
|
||||||
#define reg r5
|
|
||||||
#define stack r6
|
|
||||||
|
|
||||||
.Ldumpstm: stmfd sp!, {instr, reg, stack, r7, lr}
|
|
||||||
mov stack, r0
|
|
||||||
mov instr, r1
|
|
||||||
mov reg, #10
|
|
||||||
mov r7, #0
|
|
||||||
1: mov r3, #1
|
|
||||||
ARM( tst instr, r3, lsl reg )
|
|
||||||
THUMB( lsl r3, reg )
|
|
||||||
THUMB( tst instr, r3 )
|
|
||||||
beq 2f
|
|
||||||
add r7, r7, #1
|
|
||||||
teq r7, #6
|
|
||||||
moveq r7, #0
|
|
||||||
adr r3, .Lcr
|
|
||||||
addne r3, r3, #1 @ skip newline
|
|
||||||
ldr r2, [stack], #-4
|
|
||||||
mov r1, reg
|
|
||||||
adr r0, .Lfp
|
|
||||||
bl printk
|
|
||||||
2: subs reg, reg, #1
|
|
||||||
bpl 1b
|
|
||||||
teq r7, #0
|
|
||||||
adrne r0, .Lcr
|
|
||||||
blne printk
|
|
||||||
ldmfd sp!, {instr, reg, stack, r7, pc}
|
|
||||||
|
|
||||||
.Lfp: .asciz " r%d:%08x%s"
|
|
||||||
.Lcr: .asciz "\n"
|
|
||||||
.Lbad: .asciz "Backtrace aborted due to bad frame pointer <%p>\n"
|
.Lbad: .asciz "Backtrace aborted due to bad frame pointer <%p>\n"
|
||||||
.align
|
.align
|
||||||
.Ldsi: .word 0xe92dd800 >> 11 @ stmfd sp!, {... fp, ip, lr, pc}
|
.Ldsi: .word 0xe92dd800 >> 11 @ stmfd sp!, {... fp, ip, lr, pc}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ >= 6
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
.macro bitop, name, instr
|
.macro bitop, name, instr
|
||||||
|
@ -26,7 +25,6 @@ UNWIND( .fnstart )
|
||||||
bx lr
|
bx lr
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
EXPORT_SYMBOL(\name )
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro testop, name, instr, store
|
.macro testop, name, instr, store
|
||||||
|
@ -57,7 +55,6 @@ UNWIND( .fnstart )
|
||||||
2: bx lr
|
2: bx lr
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
EXPORT_SYMBOL(\name )
|
|
||||||
.endm
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro bitop, name, instr
|
.macro bitop, name, instr
|
||||||
|
@ -77,7 +74,6 @@ UNWIND( .fnstart )
|
||||||
ret lr
|
ret lr
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
EXPORT_SYMBOL(\name )
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -106,6 +102,5 @@ UNWIND( .fnstart )
|
||||||
ret lr
|
ret lr
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
EXPORT_SYMBOL(\name )
|
|
||||||
.endm
|
.endm
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ >= 6
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
ENTRY(__bswapsi2)
|
ENTRY(__bswapsi2)
|
||||||
|
@ -36,5 +35,3 @@ ENTRY(__bswapdi2)
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__bswapdi2)
|
ENDPROC(__bswapdi2)
|
||||||
#endif
|
#endif
|
||||||
EXPORT_SYMBOL(__bswapsi2)
|
|
||||||
EXPORT_SYMBOL(__bswapdi2)
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -51,9 +50,6 @@ USER( strnebt r2, [r0])
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(arm_clear_user)
|
ENDPROC(arm_clear_user)
|
||||||
ENDPROC(__clear_user_std)
|
ENDPROC(__clear_user_std)
|
||||||
#ifndef CONFIG_UACCESS_WITH_MEMCPY
|
|
||||||
EXPORT_SYMBOL(arm_clear_user)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.pushsection .text.fixup,"ax"
|
.pushsection .text.fixup,"ax"
|
||||||
.align 0
|
.align 0
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prototype:
|
* Prototype:
|
||||||
|
@ -95,7 +94,6 @@ ENTRY(arm_copy_from_user)
|
||||||
#include "copy_template.S"
|
#include "copy_template.S"
|
||||||
|
|
||||||
ENDPROC(arm_copy_from_user)
|
ENDPROC(arm_copy_from_user)
|
||||||
EXPORT_SYMBOL(arm_copy_from_user)
|
|
||||||
|
|
||||||
.pushsection .fixup,"ax"
|
.pushsection .fixup,"ax"
|
||||||
.align 0
|
.align 0
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
|
#define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
|
||||||
|
|
||||||
|
@ -46,4 +45,3 @@ ENTRY(copy_page)
|
||||||
PLD( beq 2b )
|
PLD( beq 2b )
|
||||||
ldmfd sp!, {r4, pc} @ 3
|
ldmfd sp!, {r4, pc} @ 3
|
||||||
ENDPROC(copy_page)
|
ENDPROC(copy_page)
|
||||||
EXPORT_SYMBOL(copy_page)
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prototype:
|
* Prototype:
|
||||||
|
@ -100,9 +99,6 @@ WEAK(arm_copy_to_user)
|
||||||
|
|
||||||
ENDPROC(arm_copy_to_user)
|
ENDPROC(arm_copy_to_user)
|
||||||
ENDPROC(__copy_to_user_std)
|
ENDPROC(__copy_to_user_std)
|
||||||
#ifndef CONFIG_UACCESS_WITH_MEMCPY
|
|
||||||
EXPORT_SYMBOL(arm_copy_to_user)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.pushsection .text.fixup,"ax"
|
.pushsection .text.fixup,"ax"
|
||||||
.align 0
|
.align 0
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -31,4 +30,4 @@ ENTRY(__csum_ipv6_magic)
|
||||||
adcs r0, r0, #0
|
adcs r0, r0, #0
|
||||||
ldmfd sp!, {pc}
|
ldmfd sp!, {pc}
|
||||||
ENDPROC(__csum_ipv6_magic)
|
ENDPROC(__csum_ipv6_magic)
|
||||||
EXPORT_SYMBOL(__csum_ipv6_magic)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -141,4 +140,3 @@ ENTRY(csum_partial)
|
||||||
bne 4b
|
bne 4b
|
||||||
b .Lless4
|
b .Lless4
|
||||||
ENDPROC(csum_partial)
|
ENDPROC(csum_partial)
|
||||||
EXPORT_SYMBOL(csum_partial)
|
|
||||||
|
|
|
@ -49,6 +49,5 @@
|
||||||
|
|
||||||
#define FN_ENTRY ENTRY(csum_partial_copy_nocheck)
|
#define FN_ENTRY ENTRY(csum_partial_copy_nocheck)
|
||||||
#define FN_EXIT ENDPROC(csum_partial_copy_nocheck)
|
#define FN_EXIT ENDPROC(csum_partial_copy_nocheck)
|
||||||
#define FN_EXPORT EXPORT_SYMBOL(csum_partial_copy_nocheck)
|
|
||||||
|
|
||||||
#include "csumpartialcopygeneric.S"
|
#include "csumpartialcopygeneric.S"
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* unsigned int
|
* unsigned int
|
||||||
|
@ -332,4 +331,3 @@ FN_ENTRY
|
||||||
mov r5, r4, get_byte_1
|
mov r5, r4, get_byte_1
|
||||||
b .Lexit
|
b .Lexit
|
||||||
FN_EXIT
|
FN_EXIT
|
||||||
FN_EXPORT
|
|
||||||
|
|
|
@ -73,7 +73,6 @@
|
||||||
|
|
||||||
#define FN_ENTRY ENTRY(csum_partial_copy_from_user)
|
#define FN_ENTRY ENTRY(csum_partial_copy_from_user)
|
||||||
#define FN_EXIT ENDPROC(csum_partial_copy_from_user)
|
#define FN_EXIT ENDPROC(csum_partial_copy_from_user)
|
||||||
#define FN_EXPORT EXPORT_SYMBOL(csum_partial_copy_from_user)
|
|
||||||
|
|
||||||
#include "csumpartialcopygeneric.S"
|
#include "csumpartialcopygeneric.S"
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/export.h>
|
|
||||||
#include <linux/timex.h>
|
#include <linux/timex.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -35,7 +34,6 @@ struct arm_delay_ops arm_delay_ops __ro_after_init = {
|
||||||
.const_udelay = __loop_const_udelay,
|
.const_udelay = __loop_const_udelay,
|
||||||
.udelay = __loop_udelay,
|
.udelay = __loop_udelay,
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(arm_delay_ops);
|
|
||||||
|
|
||||||
static const struct delay_timer *delay_timer;
|
static const struct delay_timer *delay_timer;
|
||||||
static bool delay_calibrated;
|
static bool delay_calibrated;
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define xh r0
|
#define xh r0
|
||||||
|
@ -211,4 +210,3 @@ Ldiv0_64:
|
||||||
|
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__do_div64)
|
ENDPROC(__do_div64)
|
||||||
EXPORT_SYMBOL(__do_div64)
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -38,7 +37,6 @@ ENTRY(_find_first_zero_bit_le)
|
||||||
3: mov r0, r1 @ no free bits
|
3: mov r0, r1 @ no free bits
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(_find_first_zero_bit_le)
|
ENDPROC(_find_first_zero_bit_le)
|
||||||
EXPORT_SYMBOL(_find_first_zero_bit_le)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Purpose : Find next 'zero' bit
|
* Purpose : Find next 'zero' bit
|
||||||
|
@ -59,7 +57,6 @@ ENTRY(_find_next_zero_bit_le)
|
||||||
add r2, r2, #1 @ align bit pointer
|
add r2, r2, #1 @ align bit pointer
|
||||||
b 2b @ loop for next bit
|
b 2b @ loop for next bit
|
||||||
ENDPROC(_find_next_zero_bit_le)
|
ENDPROC(_find_next_zero_bit_le)
|
||||||
EXPORT_SYMBOL(_find_next_zero_bit_le)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Purpose : Find a 'one' bit
|
* Purpose : Find a 'one' bit
|
||||||
|
@ -81,7 +78,6 @@ ENTRY(_find_first_bit_le)
|
||||||
3: mov r0, r1 @ no free bits
|
3: mov r0, r1 @ no free bits
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(_find_first_bit_le)
|
ENDPROC(_find_first_bit_le)
|
||||||
EXPORT_SYMBOL(_find_first_bit_le)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Purpose : Find next 'one' bit
|
* Purpose : Find next 'one' bit
|
||||||
|
@ -101,7 +97,6 @@ ENTRY(_find_next_bit_le)
|
||||||
add r2, r2, #1 @ align bit pointer
|
add r2, r2, #1 @ align bit pointer
|
||||||
b 2b @ loop for next bit
|
b 2b @ loop for next bit
|
||||||
ENDPROC(_find_next_bit_le)
|
ENDPROC(_find_next_bit_le)
|
||||||
EXPORT_SYMBOL(_find_next_bit_le)
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
|
|
||||||
|
@ -121,7 +116,6 @@ ENTRY(_find_first_zero_bit_be)
|
||||||
3: mov r0, r1 @ no free bits
|
3: mov r0, r1 @ no free bits
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(_find_first_zero_bit_be)
|
ENDPROC(_find_first_zero_bit_be)
|
||||||
EXPORT_SYMBOL(_find_first_zero_bit_be)
|
|
||||||
|
|
||||||
ENTRY(_find_next_zero_bit_be)
|
ENTRY(_find_next_zero_bit_be)
|
||||||
teq r1, #0
|
teq r1, #0
|
||||||
|
@ -139,7 +133,6 @@ ENTRY(_find_next_zero_bit_be)
|
||||||
add r2, r2, #1 @ align bit pointer
|
add r2, r2, #1 @ align bit pointer
|
||||||
b 2b @ loop for next bit
|
b 2b @ loop for next bit
|
||||||
ENDPROC(_find_next_zero_bit_be)
|
ENDPROC(_find_next_zero_bit_be)
|
||||||
EXPORT_SYMBOL(_find_next_zero_bit_be)
|
|
||||||
|
|
||||||
ENTRY(_find_first_bit_be)
|
ENTRY(_find_first_bit_be)
|
||||||
teq r1, #0
|
teq r1, #0
|
||||||
|
@ -157,7 +150,6 @@ ENTRY(_find_first_bit_be)
|
||||||
3: mov r0, r1 @ no free bits
|
3: mov r0, r1 @ no free bits
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(_find_first_bit_be)
|
ENDPROC(_find_first_bit_be)
|
||||||
EXPORT_SYMBOL(_find_first_bit_be)
|
|
||||||
|
|
||||||
ENTRY(_find_next_bit_be)
|
ENTRY(_find_next_bit_be)
|
||||||
teq r1, #0
|
teq r1, #0
|
||||||
|
@ -174,7 +166,6 @@ ENTRY(_find_next_bit_be)
|
||||||
add r2, r2, #1 @ align bit pointer
|
add r2, r2, #1 @ align bit pointer
|
||||||
b 2b @ loop for next bit
|
b 2b @ loop for next bit
|
||||||
ENDPROC(_find_next_bit_be)
|
ENDPROC(_find_next_bit_be)
|
||||||
EXPORT_SYMBOL(_find_next_bit_be)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/domain.h>
|
#include <asm/domain.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
ENTRY(__get_user_1)
|
ENTRY(__get_user_1)
|
||||||
check_uaccess r0, 1, r1, r2, __get_user_bad
|
check_uaccess r0, 1, r1, r2, __get_user_bad
|
||||||
|
@ -39,7 +38,6 @@ ENTRY(__get_user_1)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_1)
|
ENDPROC(__get_user_1)
|
||||||
EXPORT_SYMBOL(__get_user_1)
|
|
||||||
|
|
||||||
ENTRY(__get_user_2)
|
ENTRY(__get_user_2)
|
||||||
check_uaccess r0, 2, r1, r2, __get_user_bad
|
check_uaccess r0, 2, r1, r2, __get_user_bad
|
||||||
|
@ -60,7 +58,6 @@ rb .req r0
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_2)
|
ENDPROC(__get_user_2)
|
||||||
EXPORT_SYMBOL(__get_user_2)
|
|
||||||
|
|
||||||
ENTRY(__get_user_4)
|
ENTRY(__get_user_4)
|
||||||
check_uaccess r0, 4, r1, r2, __get_user_bad
|
check_uaccess r0, 4, r1, r2, __get_user_bad
|
||||||
|
@ -68,7 +65,6 @@ ENTRY(__get_user_4)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_4)
|
ENDPROC(__get_user_4)
|
||||||
EXPORT_SYMBOL(__get_user_4)
|
|
||||||
|
|
||||||
ENTRY(__get_user_8)
|
ENTRY(__get_user_8)
|
||||||
check_uaccess r0, 8, r1, r2, __get_user_bad
|
check_uaccess r0, 8, r1, r2, __get_user_bad
|
||||||
|
@ -82,7 +78,6 @@ ENTRY(__get_user_8)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_8)
|
ENDPROC(__get_user_8)
|
||||||
EXPORT_SYMBOL(__get_user_8)
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
ENTRY(__get_user_32t_8)
|
ENTRY(__get_user_32t_8)
|
||||||
|
@ -96,7 +91,6 @@ ENTRY(__get_user_32t_8)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_32t_8)
|
ENDPROC(__get_user_32t_8)
|
||||||
EXPORT_SYMBOL(__get_user_32t_8)
|
|
||||||
|
|
||||||
ENTRY(__get_user_64t_1)
|
ENTRY(__get_user_64t_1)
|
||||||
check_uaccess r0, 1, r1, r2, __get_user_bad8
|
check_uaccess r0, 1, r1, r2, __get_user_bad8
|
||||||
|
@ -104,7 +98,6 @@ ENTRY(__get_user_64t_1)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_64t_1)
|
ENDPROC(__get_user_64t_1)
|
||||||
EXPORT_SYMBOL(__get_user_64t_1)
|
|
||||||
|
|
||||||
ENTRY(__get_user_64t_2)
|
ENTRY(__get_user_64t_2)
|
||||||
check_uaccess r0, 2, r1, r2, __get_user_bad8
|
check_uaccess r0, 2, r1, r2, __get_user_bad8
|
||||||
|
@ -121,7 +114,6 @@ rb .req r0
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_64t_2)
|
ENDPROC(__get_user_64t_2)
|
||||||
EXPORT_SYMBOL(__get_user_64t_2)
|
|
||||||
|
|
||||||
ENTRY(__get_user_64t_4)
|
ENTRY(__get_user_64t_4)
|
||||||
check_uaccess r0, 4, r1, r2, __get_user_bad8
|
check_uaccess r0, 4, r1, r2, __get_user_bad8
|
||||||
|
@ -129,7 +121,6 @@ ENTRY(__get_user_64t_4)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__get_user_64t_4)
|
ENDPROC(__get_user_64t_4)
|
||||||
EXPORT_SYMBOL(__get_user_64t_4)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__get_user_bad8:
|
__get_user_bad8:
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.Linsb_align: rsb ip, ip, #4
|
.Linsb_align: rsb ip, ip, #4
|
||||||
cmp ip, r2
|
cmp ip, r2
|
||||||
|
@ -122,4 +121,3 @@ ENTRY(__raw_readsb)
|
||||||
|
|
||||||
ldmfd sp!, {r4 - r6, pc}
|
ldmfd sp!, {r4 - r6, pc}
|
||||||
ENDPROC(__raw_readsb)
|
ENDPROC(__raw_readsb)
|
||||||
EXPORT_SYMBOL(__raw_readsb)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
ENTRY(__raw_readsl)
|
ENTRY(__raw_readsl)
|
||||||
teq r2, #0 @ do we have to check for the zero len?
|
teq r2, #0 @ do we have to check for the zero len?
|
||||||
|
@ -78,4 +77,3 @@ ENTRY(__raw_readsl)
|
||||||
strb r3, [r1, #0]
|
strb r3, [r1, #0]
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__raw_readsl)
|
ENDPROC(__raw_readsl)
|
||||||
EXPORT_SYMBOL(__raw_readsl)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.Linsw_bad_alignment:
|
.Linsw_bad_alignment:
|
||||||
adr r0, .Linsw_bad_align_msg
|
adr r0, .Linsw_bad_align_msg
|
||||||
|
@ -104,4 +103,4 @@ ENTRY(__raw_readsw)
|
||||||
|
|
||||||
ldmfd sp!, {r4, r5, r6, pc}
|
ldmfd sp!, {r4, r5, r6, pc}
|
||||||
|
|
||||||
EXPORT_SYMBOL(__raw_readsw)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.macro pack, rd, hw1, hw2
|
.macro pack, rd, hw1, hw2
|
||||||
#ifndef __ARMEB__
|
#ifndef __ARMEB__
|
||||||
|
@ -130,4 +129,3 @@ ENTRY(__raw_readsw)
|
||||||
strneb ip, [r1]
|
strneb ip, [r1]
|
||||||
ldmfd sp!, {r4, pc}
|
ldmfd sp!, {r4, pc}
|
||||||
ENDPROC(__raw_readsw)
|
ENDPROC(__raw_readsw)
|
||||||
EXPORT_SYMBOL(__raw_readsw)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.macro outword, rd
|
.macro outword, rd
|
||||||
#ifndef __ARMEB__
|
#ifndef __ARMEB__
|
||||||
|
@ -93,4 +92,3 @@ ENTRY(__raw_writesb)
|
||||||
|
|
||||||
ldmfd sp!, {r4, r5, pc}
|
ldmfd sp!, {r4, r5, pc}
|
||||||
ENDPROC(__raw_writesb)
|
ENDPROC(__raw_writesb)
|
||||||
EXPORT_SYMBOL(__raw_writesb)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
ENTRY(__raw_writesl)
|
ENTRY(__raw_writesl)
|
||||||
teq r2, #0 @ do we have to check for the zero len?
|
teq r2, #0 @ do we have to check for the zero len?
|
||||||
|
@ -66,4 +65,3 @@ ENTRY(__raw_writesl)
|
||||||
bne 6b
|
bne 6b
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__raw_writesl)
|
ENDPROC(__raw_writesl)
|
||||||
EXPORT_SYMBOL(__raw_writesl)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.Loutsw_bad_alignment:
|
.Loutsw_bad_alignment:
|
||||||
adr r0, .Loutsw_bad_align_msg
|
adr r0, .Loutsw_bad_align_msg
|
||||||
|
@ -125,4 +124,3 @@ ENTRY(__raw_writesw)
|
||||||
strne ip, [r0]
|
strne ip, [r0]
|
||||||
|
|
||||||
ldmfd sp!, {r4, r5, r6, pc}
|
ldmfd sp!, {r4, r5, r6, pc}
|
||||||
EXPORT_SYMBOL(__raw_writesw)
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.macro outword, rd
|
.macro outword, rd
|
||||||
#ifndef __ARMEB__
|
#ifndef __ARMEB__
|
||||||
|
@ -99,4 +98,3 @@ ENTRY(__raw_writesw)
|
||||||
strneh ip, [r0]
|
strneh ip, [r0]
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__raw_writesw)
|
ENDPROC(__raw_writesw)
|
||||||
EXPORT_SYMBOL(__raw_writesw)
|
|
||||||
|
|
|
@ -36,7 +36,6 @@ Boston, MA 02111-1307, USA. */
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.macro ARM_DIV_BODY dividend, divisor, result, curbit
|
.macro ARM_DIV_BODY dividend, divisor, result, curbit
|
||||||
|
|
||||||
|
@ -239,8 +238,6 @@ UNWIND(.fnstart)
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__udivsi3)
|
ENDPROC(__udivsi3)
|
||||||
ENDPROC(__aeabi_uidiv)
|
ENDPROC(__aeabi_uidiv)
|
||||||
EXPORT_SYMBOL(__udivsi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_uidiv)
|
|
||||||
|
|
||||||
ENTRY(__umodsi3)
|
ENTRY(__umodsi3)
|
||||||
UNWIND(.fnstart)
|
UNWIND(.fnstart)
|
||||||
|
@ -259,7 +256,6 @@ UNWIND(.fnstart)
|
||||||
|
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__umodsi3)
|
ENDPROC(__umodsi3)
|
||||||
EXPORT_SYMBOL(__umodsi3)
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_PATCH_IDIV
|
#ifdef CONFIG_ARM_PATCH_IDIV
|
||||||
.align 3
|
.align 3
|
||||||
|
@ -307,8 +303,6 @@ UNWIND(.fnstart)
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__divsi3)
|
ENDPROC(__divsi3)
|
||||||
ENDPROC(__aeabi_idiv)
|
ENDPROC(__aeabi_idiv)
|
||||||
EXPORT_SYMBOL(__divsi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_idiv)
|
|
||||||
|
|
||||||
ENTRY(__modsi3)
|
ENTRY(__modsi3)
|
||||||
UNWIND(.fnstart)
|
UNWIND(.fnstart)
|
||||||
|
@ -333,7 +327,6 @@ UNWIND(.fnstart)
|
||||||
|
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__modsi3)
|
ENDPROC(__modsi3)
|
||||||
EXPORT_SYMBOL(__modsi3)
|
|
||||||
|
|
||||||
#ifdef CONFIG_AEABI
|
#ifdef CONFIG_AEABI
|
||||||
|
|
||||||
|
@ -350,7 +343,6 @@ UNWIND(.save {r0, r1, ip, lr} )
|
||||||
|
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__aeabi_uidivmod)
|
ENDPROC(__aeabi_uidivmod)
|
||||||
EXPORT_SYMBOL(__aeabi_uidivmod)
|
|
||||||
|
|
||||||
ENTRY(__aeabi_idivmod)
|
ENTRY(__aeabi_idivmod)
|
||||||
UNWIND(.fnstart)
|
UNWIND(.fnstart)
|
||||||
|
@ -364,7 +356,6 @@ UNWIND(.save {r0, r1, ip, lr} )
|
||||||
|
|
||||||
UNWIND(.fnend)
|
UNWIND(.fnend)
|
||||||
ENDPROC(__aeabi_idivmod)
|
ENDPROC(__aeabi_idivmod)
|
||||||
EXPORT_SYMBOL(__aeabi_idivmod)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define al r1
|
#define al r1
|
||||||
|
@ -53,5 +52,3 @@ ENTRY(__aeabi_llsr)
|
||||||
|
|
||||||
ENDPROC(__lshrdi3)
|
ENDPROC(__lshrdi3)
|
||||||
ENDPROC(__aeabi_llsr)
|
ENDPROC(__aeabi_llsr)
|
||||||
EXPORT_SYMBOL(__lshrdi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_llsr)
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
@ -25,4 +24,3 @@ ENTRY(memchr)
|
||||||
2: movne r0, #0
|
2: movne r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(memchr)
|
ENDPROC(memchr)
|
||||||
EXPORT_SYMBOL(memchr)
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#define LDR1W_SHIFT 0
|
#define LDR1W_SHIFT 0
|
||||||
#define STR1W_SHIFT 0
|
#define STR1W_SHIFT 0
|
||||||
|
@ -69,5 +68,3 @@ ENTRY(memcpy)
|
||||||
|
|
||||||
ENDPROC(memcpy)
|
ENDPROC(memcpy)
|
||||||
ENDPROC(mmiocpy)
|
ENDPROC(mmiocpy)
|
||||||
EXPORT_SYMBOL(memcpy)
|
|
||||||
EXPORT_SYMBOL(mmiocpy)
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
@ -226,4 +225,3 @@ ENTRY(memmove)
|
||||||
18: backward_copy_shift push=24 pull=8
|
18: backward_copy_shift push=24 pull=8
|
||||||
|
|
||||||
ENDPROC(memmove)
|
ENDPROC(memmove)
|
||||||
EXPORT_SYMBOL(memmove)
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
@ -136,5 +135,3 @@ UNWIND( .fnstart )
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(memset)
|
ENDPROC(memset)
|
||||||
ENDPROC(mmioset)
|
ENDPROC(mmioset)
|
||||||
EXPORT_SYMBOL(memset)
|
|
||||||
EXPORT_SYMBOL(mmioset)
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
@ -136,4 +135,3 @@ UNWIND( .fnstart )
|
||||||
ret lr @ 1
|
ret lr @ 1
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(__memzero)
|
ENDPROC(__memzero)
|
||||||
EXPORT_SYMBOL(__memzero)
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define xh r0
|
#define xh r0
|
||||||
|
@ -47,5 +46,3 @@ ENTRY(__aeabi_lmul)
|
||||||
|
|
||||||
ENDPROC(__muldi3)
|
ENDPROC(__muldi3)
|
||||||
ENDPROC(__aeabi_lmul)
|
ENDPROC(__aeabi_lmul)
|
||||||
EXPORT_SYMBOL(__muldi3)
|
|
||||||
EXPORT_SYMBOL(__aeabi_lmul)
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/domain.h>
|
#include <asm/domain.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
ENTRY(__put_user_1)
|
ENTRY(__put_user_1)
|
||||||
check_uaccess r0, 1, r1, ip, __put_user_bad
|
check_uaccess r0, 1, r1, ip, __put_user_bad
|
||||||
|
@ -39,7 +38,6 @@ ENTRY(__put_user_1)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__put_user_1)
|
ENDPROC(__put_user_1)
|
||||||
EXPORT_SYMBOL(__put_user_1)
|
|
||||||
|
|
||||||
ENTRY(__put_user_2)
|
ENTRY(__put_user_2)
|
||||||
check_uaccess r0, 2, r1, ip, __put_user_bad
|
check_uaccess r0, 2, r1, ip, __put_user_bad
|
||||||
|
@ -64,7 +62,6 @@ ENTRY(__put_user_2)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__put_user_2)
|
ENDPROC(__put_user_2)
|
||||||
EXPORT_SYMBOL(__put_user_2)
|
|
||||||
|
|
||||||
ENTRY(__put_user_4)
|
ENTRY(__put_user_4)
|
||||||
check_uaccess r0, 4, r1, ip, __put_user_bad
|
check_uaccess r0, 4, r1, ip, __put_user_bad
|
||||||
|
@ -72,7 +69,6 @@ ENTRY(__put_user_4)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__put_user_4)
|
ENDPROC(__put_user_4)
|
||||||
EXPORT_SYMBOL(__put_user_4)
|
|
||||||
|
|
||||||
ENTRY(__put_user_8)
|
ENTRY(__put_user_8)
|
||||||
check_uaccess r0, 8, r1, ip, __put_user_bad
|
check_uaccess r0, 8, r1, ip, __put_user_bad
|
||||||
|
@ -86,7 +82,6 @@ ENTRY(__put_user_8)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(__put_user_8)
|
ENDPROC(__put_user_8)
|
||||||
EXPORT_SYMBOL(__put_user_8)
|
|
||||||
|
|
||||||
__put_user_bad:
|
__put_user_bad:
|
||||||
mov r0, #-EFAULT
|
mov r0, #-EFAULT
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
@ -26,4 +25,3 @@ ENTRY(strchr)
|
||||||
subeq r0, r0, #1
|
subeq r0, r0, #1
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(strchr)
|
ENDPROC(strchr)
|
||||||
EXPORT_SYMBOL(strchr)
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.align 5
|
.align 5
|
||||||
|
@ -25,4 +24,3 @@ ENTRY(strrchr)
|
||||||
mov r0, r3
|
mov r0, r3
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(strrchr)
|
ENDPROC(strrchr)
|
||||||
EXPORT_SYMBOL(strrchr)
|
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/hugetlb.h>
|
#include <linux/hugetlb.h>
|
||||||
#include <linux/export.h>
|
|
||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
@ -157,7 +156,6 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arm_copy_to_user);
|
|
||||||
|
|
||||||
static unsigned long noinline
|
static unsigned long noinline
|
||||||
__clear_user_memset(void __user *addr, unsigned long n)
|
__clear_user_memset(void __user *addr, unsigned long n)
|
||||||
|
@ -215,7 +213,6 @@ unsigned long arm_clear_user(void __user *addr, unsigned long n)
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arm_clear_user);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
#ifdef __ARMEB__
|
||||||
#define xh r0
|
#define xh r0
|
||||||
|
@ -36,7 +35,6 @@ ENTRY(__ucmpdi2)
|
||||||
ret lr
|
ret lr
|
||||||
|
|
||||||
ENDPROC(__ucmpdi2)
|
ENDPROC(__ucmpdi2)
|
||||||
EXPORT_SYMBOL(__ucmpdi2)
|
|
||||||
|
|
||||||
#ifdef CONFIG_AEABI
|
#ifdef CONFIG_AEABI
|
||||||
|
|
||||||
|
@ -50,7 +48,6 @@ ENTRY(__aeabi_ulcmp)
|
||||||
ret lr
|
ret lr
|
||||||
|
|
||||||
ENDPROC(__aeabi_ulcmp)
|
ENDPROC(__aeabi_ulcmp)
|
||||||
EXPORT_SYMBOL(__aeabi_ulcmp)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ endif
|
||||||
|
|
||||||
ifdef CONFIG_SND_IMX_SOC
|
ifdef CONFIG_SND_IMX_SOC
|
||||||
obj-y += ssi-fiq.o
|
obj-y += ssi-fiq.o
|
||||||
|
obj-y += ssi-fiq-ksym.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# i.MX21 based machines
|
# i.MX21 based machines
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Exported ksyms for the SSI FIQ handler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009, Sascha Hauer <s.hauer@pengutronix.de>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
#include <linux/platform_data/asoc-imx-ssi.h>
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(imx_ssi_fiq_tx_buffer);
|
||||||
|
EXPORT_SYMBOL(imx_ssi_fiq_rx_buffer);
|
||||||
|
EXPORT_SYMBOL(imx_ssi_fiq_start);
|
||||||
|
EXPORT_SYMBOL(imx_ssi_fiq_end);
|
||||||
|
EXPORT_SYMBOL(imx_ssi_fiq_base);
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
#include <asm/export.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* r8 = bit 0-15: tx offset, bit 16-31: tx buffer size
|
* r8 = bit 0-15: tx offset, bit 16-31: tx buffer size
|
||||||
|
@ -145,8 +144,4 @@ imx_ssi_fiq_tx_buffer:
|
||||||
.word 0x0
|
.word 0x0
|
||||||
.L_imx_ssi_fiq_end:
|
.L_imx_ssi_fiq_end:
|
||||||
imx_ssi_fiq_end:
|
imx_ssi_fiq_end:
|
||||||
EXPORT_SYMBOL(imx_ssi_fiq_tx_buffer)
|
|
||||||
EXPORT_SYMBOL(imx_ssi_fiq_rx_buffer)
|
|
||||||
EXPORT_SYMBOL(imx_ssi_fiq_start)
|
|
||||||
EXPORT_SYMBOL(imx_ssi_fiq_end)
|
|
||||||
EXPORT_SYMBOL(imx_ssi_fiq_base)
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ config SOC_AM43XX
|
||||||
select HAVE_ARM_TWD
|
select HAVE_ARM_TWD
|
||||||
select ARM_ERRATA_754322
|
select ARM_ERRATA_754322
|
||||||
select ARM_ERRATA_775420
|
select ARM_ERRATA_775420
|
||||||
|
select OMAP_INTERCONNECT
|
||||||
|
|
||||||
config SOC_DRA7XX
|
config SOC_DRA7XX
|
||||||
bool "TI DRA7XX"
|
bool "TI DRA7XX"
|
||||||
|
|
|
@ -205,11 +205,15 @@ void __init omap2xxx_check_revision(void)
|
||||||
|
|
||||||
#define OMAP3_SHOW_FEATURE(feat) \
|
#define OMAP3_SHOW_FEATURE(feat) \
|
||||||
if (omap3_has_ ##feat()) \
|
if (omap3_has_ ##feat()) \
|
||||||
printk(#feat" ");
|
n += scnprintf(buf + n, sizeof(buf) - n, #feat " ");
|
||||||
|
|
||||||
static void __init omap3_cpuinfo(void)
|
static void __init omap3_cpuinfo(void)
|
||||||
{
|
{
|
||||||
const char *cpu_name;
|
const char *cpu_name;
|
||||||
|
char buf[64];
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
memset(buf, 0, sizeof(buf));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OMAP3430 and OMAP3530 are assumed to be same.
|
* OMAP3430 and OMAP3530 are assumed to be same.
|
||||||
|
@ -241,10 +245,10 @@ static void __init omap3_cpuinfo(void)
|
||||||
cpu_name = "OMAP3503";
|
cpu_name = "OMAP3503";
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(soc_name, "%s", cpu_name);
|
scnprintf(soc_name, sizeof(soc_name), "%s", cpu_name);
|
||||||
|
|
||||||
/* Print verbose information */
|
/* Print verbose information */
|
||||||
pr_info("%s %s (", soc_name, soc_rev);
|
n += scnprintf(buf, sizeof(buf) - n, "%s %s (", soc_name, soc_rev);
|
||||||
|
|
||||||
OMAP3_SHOW_FEATURE(l2cache);
|
OMAP3_SHOW_FEATURE(l2cache);
|
||||||
OMAP3_SHOW_FEATURE(iva);
|
OMAP3_SHOW_FEATURE(iva);
|
||||||
|
@ -252,8 +256,10 @@ static void __init omap3_cpuinfo(void)
|
||||||
OMAP3_SHOW_FEATURE(neon);
|
OMAP3_SHOW_FEATURE(neon);
|
||||||
OMAP3_SHOW_FEATURE(isp);
|
OMAP3_SHOW_FEATURE(isp);
|
||||||
OMAP3_SHOW_FEATURE(192mhz_clk);
|
OMAP3_SHOW_FEATURE(192mhz_clk);
|
||||||
|
if (*(buf + n - 1) == ' ')
|
||||||
printk(")\n");
|
n--;
|
||||||
|
n += scnprintf(buf + n, sizeof(buf) - n, ")\n");
|
||||||
|
pr_info("%s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define OMAP3_CHECK_FEATURE(status,feat) \
|
#define OMAP3_CHECK_FEATURE(status,feat) \
|
||||||
|
|
|
@ -319,6 +319,9 @@ void __init omap3_prm_init_pm(bool has_uart4, bool has_iva)
|
||||||
if (has_uart4) {
|
if (has_uart4) {
|
||||||
en_uart4_mask = OMAP3630_EN_UART4_MASK;
|
en_uart4_mask = OMAP3630_EN_UART4_MASK;
|
||||||
grpsel_uart4_mask = OMAP3630_GRPSEL_UART4_MASK;
|
grpsel_uart4_mask = OMAP3630_GRPSEL_UART4_MASK;
|
||||||
|
} else {
|
||||||
|
en_uart4_mask = 0;
|
||||||
|
grpsel_uart4_mask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable wakeups in PER */
|
/* Enable wakeups in PER */
|
||||||
|
|
|
@ -87,6 +87,12 @@ int voltdm_scale(struct voltagedomain *voltdm,
|
||||||
return -ENODATA;
|
return -ENODATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!voltdm->volt_data) {
|
||||||
|
pr_err("%s: No voltage data defined for vdd_%s\n",
|
||||||
|
__func__, voltdm->name);
|
||||||
|
return -ENODATA;
|
||||||
|
}
|
||||||
|
|
||||||
/* Adjust voltage to the exact voltage from the OPP table */
|
/* Adjust voltage to the exact voltage from the OPP table */
|
||||||
for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
|
for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
|
||||||
if (voltdm->volt_data[i].volt_nominal >= target_volt) {
|
if (voltdm->volt_data[i].volt_nominal >= target_volt) {
|
||||||
|
|
|
@ -1167,7 +1167,7 @@ static int __init dma_debug_do_init(void)
|
||||||
dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
|
dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fs_initcall(dma_debug_do_init);
|
core_initcall(dma_debug_do_init);
|
||||||
|
|
||||||
#ifdef CONFIG_ARM_DMA_USE_IOMMU
|
#ifdef CONFIG_ARM_DMA_USE_IOMMU
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ ENTRY(cpu_cm7_proc_fin)
|
||||||
ret lr
|
ret lr
|
||||||
ENDPROC(cpu_cm7_proc_fin)
|
ENDPROC(cpu_cm7_proc_fin)
|
||||||
|
|
||||||
.section ".text.init", #alloc, #execinstr
|
.section ".init.text", #alloc, #execinstr
|
||||||
|
|
||||||
__v7m_cm7_setup:
|
__v7m_cm7_setup:
|
||||||
mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)
|
mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
nb_perih_clk: nb-periph-clk@13000{
|
nb_periph_clk: nb-periph-clk@13000 {
|
||||||
compatible = "marvell,armada-3700-periph-clock-nb";
|
compatible = "marvell,armada-3700-periph-clock-nb";
|
||||||
reg = <0x13000 0x100>;
|
reg = <0x13000 0x100>;
|
||||||
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
|
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sb_perih_clk: sb-periph-clk@18000{
|
sb_periph_clk: sb-periph-clk@18000 {
|
||||||
compatible = "marvell,armada-3700-periph-clock-sb";
|
compatible = "marvell,armada-3700-periph-clock-sb";
|
||||||
reg = <0x18000 0x100>;
|
reg = <0x18000 0x100>;
|
||||||
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
|
clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
|
||||||
|
|
|
@ -130,8 +130,8 @@
|
||||||
reg = <0x700600 0x50>;
|
reg = <0x700600 0x50>;
|
||||||
#address-cells = <0x1>;
|
#address-cells = <0x1>;
|
||||||
#size-cells = <0x0>;
|
#size-cells = <0x0>;
|
||||||
cell-index = <1>;
|
cell-index = <3>;
|
||||||
clocks = <&cps_syscon0 0 3>;
|
clocks = <&cps_syscon0 1 21>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
reg = <0x700680 0x50>;
|
reg = <0x700680 0x50>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
cell-index = <2>;
|
cell-index = <4>;
|
||||||
clocks = <&cps_syscon0 1 21>;
|
clocks = <&cps_syscon0 1 21>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,7 +46,15 @@
|
||||||
#define ARMV8_PMU_EVTYPE_MASK 0xc800ffff /* Mask for writable bits */
|
#define ARMV8_PMU_EVTYPE_MASK 0xc800ffff /* Mask for writable bits */
|
||||||
#define ARMV8_PMU_EVTYPE_EVENT 0xffff /* Mask for EVENT bits */
|
#define ARMV8_PMU_EVTYPE_EVENT 0xffff /* Mask for EVENT bits */
|
||||||
|
|
||||||
#define ARMV8_PMU_EVTYPE_EVENT_SW_INCR 0 /* Software increment event */
|
/*
|
||||||
|
* PMUv3 event types: required events
|
||||||
|
*/
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_SW_INCR 0x00
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL 0x03
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE 0x04
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED 0x10
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES 0x11
|
||||||
|
#define ARMV8_PMUV3_PERFCTR_BR_PRED 0x12
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Event filters for PMUv3
|
* Event filters for PMUv3
|
||||||
|
|
|
@ -31,17 +31,9 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ARMv8 PMUv3 Performance Events handling code.
|
* ARMv8 PMUv3 Performance Events handling code.
|
||||||
* Common event types.
|
* Common event types (some are defined in asm/perf_event.h).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Required events. */
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_SW_INCR 0x00
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL 0x03
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE 0x04
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED 0x10
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES 0x11
|
|
||||||
#define ARMV8_PMUV3_PERFCTR_BR_PRED 0x12
|
|
||||||
|
|
||||||
/* At least one of the following is required. */
|
/* At least one of the following is required. */
|
||||||
#define ARMV8_PMUV3_PERFCTR_INST_RETIRED 0x08
|
#define ARMV8_PMUV3_PERFCTR_INST_RETIRED 0x08
|
||||||
#define ARMV8_PMUV3_PERFCTR_INST_SPEC 0x1B
|
#define ARMV8_PMUV3_PERFCTR_INST_SPEC 0x1B
|
||||||
|
|
|
@ -597,8 +597,14 @@ static bool access_pmu_evcntr(struct kvm_vcpu *vcpu,
|
||||||
|
|
||||||
idx = ARMV8_PMU_CYCLE_IDX;
|
idx = ARMV8_PMU_CYCLE_IDX;
|
||||||
} else {
|
} else {
|
||||||
BUG();
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (r->CRn == 0 && r->CRm == 9) {
|
||||||
|
/* PMCCNTR */
|
||||||
|
if (pmu_access_event_counter_el0_disabled(vcpu))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
idx = ARMV8_PMU_CYCLE_IDX;
|
||||||
} else if (r->CRn == 14 && (r->CRm & 12) == 8) {
|
} else if (r->CRn == 14 && (r->CRm & 12) == 8) {
|
||||||
/* PMEVCNTRn_EL0 */
|
/* PMEVCNTRn_EL0 */
|
||||||
if (pmu_access_event_counter_el0_disabled(vcpu))
|
if (pmu_access_event_counter_el0_disabled(vcpu))
|
||||||
|
@ -606,7 +612,7 @@ static bool access_pmu_evcntr(struct kvm_vcpu *vcpu,
|
||||||
|
|
||||||
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
|
idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
|
||||||
} else {
|
} else {
|
||||||
BUG();
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pmu_counter_idx_valid(vcpu, idx))
|
if (!pmu_counter_idx_valid(vcpu, idx))
|
||||||
|
|
|
@ -214,6 +214,12 @@
|
||||||
#error Bad page size configuration for hugetlbfs!
|
#error Bad page size configuration for hugetlbfs!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wired register bits
|
||||||
|
*/
|
||||||
|
#define MIPSR6_WIRED_LIMIT (_ULCAST_(0xffff) << 16)
|
||||||
|
#define MIPSR6_WIRED_WIRED (_ULCAST_(0xffff) << 0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Values used for computation of new tlb entries
|
* Values used for computation of new tlb entries
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
#ifndef __ASM_TLB_H
|
#ifndef __ASM_TLB_H
|
||||||
#define __ASM_TLB_H
|
#define __ASM_TLB_H
|
||||||
|
|
||||||
|
#include <asm/cpu-features.h>
|
||||||
|
#include <asm/mipsregs.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MIPS doesn't need any special per-pte or per-vma handling, except
|
* MIPS doesn't need any special per-pte or per-vma handling, except
|
||||||
* we need to flush cache for area to be unmapped.
|
* we need to flush cache for area to be unmapped.
|
||||||
|
@ -22,6 +25,16 @@
|
||||||
((CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) | \
|
((CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) | \
|
||||||
(cpu_has_tlbinv ? MIPS_ENTRYHI_EHINV : 0))
|
(cpu_has_tlbinv ? MIPS_ENTRYHI_EHINV : 0))
|
||||||
|
|
||||||
|
static inline unsigned int num_wired_entries(void)
|
||||||
|
{
|
||||||
|
unsigned int wired = read_c0_wired();
|
||||||
|
|
||||||
|
if (cpu_has_mips_r6)
|
||||||
|
wired &= MIPSR6_WIRED_WIRED;
|
||||||
|
|
||||||
|
return wired;
|
||||||
|
}
|
||||||
|
|
||||||
#include <asm-generic/tlb.h>
|
#include <asm-generic/tlb.h>
|
||||||
|
|
||||||
#endif /* __ASM_TLB_H */
|
#endif /* __ASM_TLB_H */
|
||||||
|
|
|
@ -209,17 +209,18 @@ bad_area_nosemaphore:
|
||||||
if (show_unhandled_signals &&
|
if (show_unhandled_signals &&
|
||||||
unhandled_signal(tsk, SIGSEGV) &&
|
unhandled_signal(tsk, SIGSEGV) &&
|
||||||
__ratelimit(&ratelimit_state)) {
|
__ratelimit(&ratelimit_state)) {
|
||||||
pr_info("\ndo_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx",
|
pr_info("do_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx\n",
|
||||||
tsk->comm,
|
tsk->comm,
|
||||||
write ? "write access to" : "read access from",
|
write ? "write access to" : "read access from",
|
||||||
field, address);
|
field, address);
|
||||||
pr_info("epc = %0*lx in", field,
|
pr_info("epc = %0*lx in", field,
|
||||||
(unsigned long) regs->cp0_epc);
|
(unsigned long) regs->cp0_epc);
|
||||||
print_vma_addr(" ", regs->cp0_epc);
|
print_vma_addr(KERN_CONT " ", regs->cp0_epc);
|
||||||
|
pr_cont("\n");
|
||||||
pr_info("ra = %0*lx in", field,
|
pr_info("ra = %0*lx in", field,
|
||||||
(unsigned long) regs->regs[31]);
|
(unsigned long) regs->regs[31]);
|
||||||
print_vma_addr(" ", regs->regs[31]);
|
print_vma_addr(KERN_CONT " ", regs->regs[31]);
|
||||||
pr_info("\n");
|
pr_cont("\n");
|
||||||
}
|
}
|
||||||
current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
|
current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
|
||||||
info.si_signo = SIGSEGV;
|
info.si_signo = SIGSEGV;
|
||||||
|
|
|
@ -118,7 +118,7 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)
|
||||||
writex_c0_entrylo1(entrylo);
|
writex_c0_entrylo1(entrylo);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tlbidx = read_c0_wired();
|
tlbidx = num_wired_entries();
|
||||||
write_c0_wired(tlbidx + 1);
|
write_c0_wired(tlbidx + 1);
|
||||||
write_c0_index(tlbidx);
|
write_c0_index(tlbidx);
|
||||||
mtc0_tlbw_hazard();
|
mtc0_tlbw_hazard();
|
||||||
|
@ -147,7 +147,7 @@ void kunmap_coherent(void)
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
old_ctx = read_c0_entryhi();
|
old_ctx = read_c0_entryhi();
|
||||||
wired = read_c0_wired() - 1;
|
wired = num_wired_entries() - 1;
|
||||||
write_c0_wired(wired);
|
write_c0_wired(wired);
|
||||||
write_c0_index(wired);
|
write_c0_index(wired);
|
||||||
write_c0_entryhi(UNIQUE_ENTRYHI(wired));
|
write_c0_entryhi(UNIQUE_ENTRYHI(wired));
|
||||||
|
|
|
@ -65,7 +65,7 @@ void local_flush_tlb_all(void)
|
||||||
write_c0_entrylo0(0);
|
write_c0_entrylo0(0);
|
||||||
write_c0_entrylo1(0);
|
write_c0_entrylo1(0);
|
||||||
|
|
||||||
entry = read_c0_wired();
|
entry = num_wired_entries();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Blast 'em all away.
|
* Blast 'em all away.
|
||||||
|
@ -385,7 +385,7 @@ void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
|
||||||
old_ctx = read_c0_entryhi();
|
old_ctx = read_c0_entryhi();
|
||||||
htw_stop();
|
htw_stop();
|
||||||
old_pagemask = read_c0_pagemask();
|
old_pagemask = read_c0_pagemask();
|
||||||
wired = read_c0_wired();
|
wired = num_wired_entries();
|
||||||
write_c0_wired(wired + 1);
|
write_c0_wired(wired + 1);
|
||||||
write_c0_index(wired);
|
write_c0_index(wired);
|
||||||
tlbw_use_hazard(); /* What is the hazard here? */
|
tlbw_use_hazard(); /* What is the hazard here? */
|
||||||
|
@ -449,7 +449,7 @@ __init int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
|
||||||
htw_stop();
|
htw_stop();
|
||||||
old_ctx = read_c0_entryhi();
|
old_ctx = read_c0_entryhi();
|
||||||
old_pagemask = read_c0_pagemask();
|
old_pagemask = read_c0_pagemask();
|
||||||
wired = read_c0_wired();
|
wired = num_wired_entries();
|
||||||
if (--temp_tlb_entry < wired) {
|
if (--temp_tlb_entry < wired) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"No TLB space left for add_temporary_entry\n");
|
"No TLB space left for add_temporary_entry\n");
|
||||||
|
|
|
@ -34,7 +34,9 @@ config PARISC
|
||||||
select HAVE_ARCH_HASH
|
select HAVE_ARCH_HASH
|
||||||
select HAVE_ARCH_SECCOMP_FILTER
|
select HAVE_ARCH_SECCOMP_FILTER
|
||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select HAVE_UNSTABLE_SCHED_CLOCK if (SMP || !64BIT)
|
select GENERIC_SCHED_CLOCK
|
||||||
|
select HAVE_UNSTABLE_SCHED_CLOCK if SMP
|
||||||
|
select GENERIC_CLOCKEVENTS
|
||||||
select ARCH_NO_COHERENT_DMA_MMAP
|
select ARCH_NO_COHERENT_DMA_MMAP
|
||||||
select CPU_NO_EFFICIENT_FFS
|
select CPU_NO_EFFICIENT_FFS
|
||||||
|
|
||||||
|
|
|
@ -369,6 +369,7 @@ void __init parisc_setup_cache_timing(void)
|
||||||
{
|
{
|
||||||
unsigned long rangetime, alltime;
|
unsigned long rangetime, alltime;
|
||||||
unsigned long size, start;
|
unsigned long size, start;
|
||||||
|
unsigned long threshold;
|
||||||
|
|
||||||
alltime = mfctl(16);
|
alltime = mfctl(16);
|
||||||
flush_data_cache();
|
flush_data_cache();
|
||||||
|
@ -382,17 +383,12 @@ void __init parisc_setup_cache_timing(void)
|
||||||
printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
|
printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
|
||||||
alltime, size, rangetime);
|
alltime, size, rangetime);
|
||||||
|
|
||||||
/* Racy, but if we see an intermediate value, it's ok too... */
|
threshold = L1_CACHE_ALIGN(size * alltime / rangetime);
|
||||||
parisc_cache_flush_threshold = size * alltime / rangetime;
|
if (threshold > cache_info.dc_size)
|
||||||
|
threshold = cache_info.dc_size;
|
||||||
parisc_cache_flush_threshold = L1_CACHE_ALIGN(parisc_cache_flush_threshold);
|
if (threshold)
|
||||||
if (!parisc_cache_flush_threshold)
|
parisc_cache_flush_threshold = threshold;
|
||||||
parisc_cache_flush_threshold = FLUSH_THRESHOLD;
|
printk(KERN_INFO "Cache flush threshold set to %lu KiB\n",
|
||||||
|
|
||||||
if (parisc_cache_flush_threshold > cache_info.dc_size)
|
|
||||||
parisc_cache_flush_threshold = cache_info.dc_size;
|
|
||||||
|
|
||||||
printk(KERN_INFO "Setting cache flush threshold to %lu kB\n",
|
|
||||||
parisc_cache_flush_threshold/1024);
|
parisc_cache_flush_threshold/1024);
|
||||||
|
|
||||||
/* calculate TLB flush threshold */
|
/* calculate TLB flush threshold */
|
||||||
|
@ -401,7 +397,7 @@ void __init parisc_setup_cache_timing(void)
|
||||||
flush_tlb_all();
|
flush_tlb_all();
|
||||||
alltime = mfctl(16) - alltime;
|
alltime = mfctl(16) - alltime;
|
||||||
|
|
||||||
size = PAGE_SIZE;
|
size = 0;
|
||||||
start = (unsigned long) _text;
|
start = (unsigned long) _text;
|
||||||
rangetime = mfctl(16);
|
rangetime = mfctl(16);
|
||||||
while (start < (unsigned long) _end) {
|
while (start < (unsigned long) _end) {
|
||||||
|
@ -414,13 +410,10 @@ void __init parisc_setup_cache_timing(void)
|
||||||
printk(KERN_DEBUG "Whole TLB flush %lu cycles, flushing %lu bytes %lu cycles\n",
|
printk(KERN_DEBUG "Whole TLB flush %lu cycles, flushing %lu bytes %lu cycles\n",
|
||||||
alltime, size, rangetime);
|
alltime, size, rangetime);
|
||||||
|
|
||||||
parisc_tlb_flush_threshold = size * alltime / rangetime;
|
threshold = PAGE_ALIGN(num_online_cpus() * size * alltime / rangetime);
|
||||||
parisc_tlb_flush_threshold *= num_online_cpus();
|
if (threshold)
|
||||||
parisc_tlb_flush_threshold = PAGE_ALIGN(parisc_tlb_flush_threshold);
|
parisc_tlb_flush_threshold = threshold;
|
||||||
if (!parisc_tlb_flush_threshold)
|
printk(KERN_INFO "TLB flush threshold set to %lu KiB\n",
|
||||||
parisc_tlb_flush_threshold = FLUSH_TLB_THRESHOLD;
|
|
||||||
|
|
||||||
printk(KERN_INFO "Setting TLB flush threshold to %lu kB\n",
|
|
||||||
parisc_tlb_flush_threshold/1024);
|
parisc_tlb_flush_threshold/1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ void __init setup_pdc(void)
|
||||||
status = pdc_system_map_find_mods(&module_result, &module_path, 0);
|
status = pdc_system_map_find_mods(&module_result, &module_path, 0);
|
||||||
if (status == PDC_OK) {
|
if (status == PDC_OK) {
|
||||||
pdc_type = PDC_TYPE_SYSTEM_MAP;
|
pdc_type = PDC_TYPE_SYSTEM_MAP;
|
||||||
printk("System Map.\n");
|
pr_cont("System Map.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ void __init setup_pdc(void)
|
||||||
status = pdc_pat_cell_get_number(&cell_info);
|
status = pdc_pat_cell_get_number(&cell_info);
|
||||||
if (status == PDC_OK) {
|
if (status == PDC_OK) {
|
||||||
pdc_type = PDC_TYPE_PAT;
|
pdc_type = PDC_TYPE_PAT;
|
||||||
printk("64 bit PAT.\n");
|
pr_cont("64 bit PAT.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -97,12 +97,12 @@ void __init setup_pdc(void)
|
||||||
case 0xC: /* 715/64, at least */
|
case 0xC: /* 715/64, at least */
|
||||||
|
|
||||||
pdc_type = PDC_TYPE_SNAKE;
|
pdc_type = PDC_TYPE_SNAKE;
|
||||||
printk("Snake.\n");
|
pr_cont("Snake.\n");
|
||||||
return;
|
return;
|
||||||
|
|
||||||
default: /* Everything else */
|
default: /* Everything else */
|
||||||
|
|
||||||
printk("Unsupported.\n");
|
pr_cont("Unsupported.\n");
|
||||||
panic("If this is a 64-bit machine, please try a 64-bit kernel.\n");
|
panic("If this is a 64-bit machine, please try a 64-bit kernel.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ fitmanyloop: /* Loop if LOOP >= 2 */
|
||||||
|
|
||||||
fitmanymiddle: /* Loop if LOOP >= 2 */
|
fitmanymiddle: /* Loop if LOOP >= 2 */
|
||||||
addib,COND(>) -1, %r31, fitmanymiddle /* Adjusted inner loop decr */
|
addib,COND(>) -1, %r31, fitmanymiddle /* Adjusted inner loop decr */
|
||||||
pitlbe 0(%sr1, %r28)
|
pitlbe %r0(%sr1, %r28)
|
||||||
pitlbe,m %arg1(%sr1, %r28) /* Last pitlbe and addr adjust */
|
pitlbe,m %arg1(%sr1, %r28) /* Last pitlbe and addr adjust */
|
||||||
addib,COND(>) -1, %r29, fitmanymiddle /* Middle loop decr */
|
addib,COND(>) -1, %r29, fitmanymiddle /* Middle loop decr */
|
||||||
copy %arg3, %r31 /* Re-init inner loop count */
|
copy %arg3, %r31 /* Re-init inner loop count */
|
||||||
|
@ -139,7 +139,7 @@ fdtmanyloop: /* Loop if LOOP >= 2 */
|
||||||
|
|
||||||
fdtmanymiddle: /* Loop if LOOP >= 2 */
|
fdtmanymiddle: /* Loop if LOOP >= 2 */
|
||||||
addib,COND(>) -1, %r31, fdtmanymiddle /* Adjusted inner loop decr */
|
addib,COND(>) -1, %r31, fdtmanymiddle /* Adjusted inner loop decr */
|
||||||
pdtlbe 0(%sr1, %r28)
|
pdtlbe %r0(%sr1, %r28)
|
||||||
pdtlbe,m %arg1(%sr1, %r28) /* Last pdtlbe and addr adjust */
|
pdtlbe,m %arg1(%sr1, %r28) /* Last pdtlbe and addr adjust */
|
||||||
addib,COND(>) -1, %r29, fdtmanymiddle /* Middle loop decr */
|
addib,COND(>) -1, %r29, fdtmanymiddle /* Middle loop decr */
|
||||||
copy %arg3, %r31 /* Re-init inner loop count */
|
copy %arg3, %r31 /* Re-init inner loop count */
|
||||||
|
@ -626,12 +626,12 @@ ENTRY_CFI(copy_user_page_asm)
|
||||||
/* Purge any old translations */
|
/* Purge any old translations */
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
pdtlb,l 0(%r28)
|
pdtlb,l %r0(%r28)
|
||||||
pdtlb,l 0(%r29)
|
pdtlb,l %r0(%r29)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pdtlb 0(%r28)
|
pdtlb %r0(%r28)
|
||||||
pdtlb 0(%r29)
|
pdtlb %r0(%r29)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -774,10 +774,10 @@ ENTRY_CFI(clear_user_page_asm)
|
||||||
/* Purge any old translation */
|
/* Purge any old translation */
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
pdtlb,l 0(%r28)
|
pdtlb,l %r0(%r28)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pdtlb 0(%r28)
|
pdtlb %r0(%r28)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -858,10 +858,10 @@ ENTRY_CFI(flush_dcache_page_asm)
|
||||||
/* Purge any old translation */
|
/* Purge any old translation */
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
pdtlb,l 0(%r28)
|
pdtlb,l %r0(%r28)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pdtlb 0(%r28)
|
pdtlb %r0(%r28)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -898,10 +898,10 @@ ENTRY_CFI(flush_dcache_page_asm)
|
||||||
sync
|
sync
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
pdtlb,l 0(%r25)
|
pdtlb,l %r0(%r25)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pdtlb 0(%r25)
|
pdtlb %r0(%r25)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -931,13 +931,18 @@ ENTRY_CFI(flush_icache_page_asm)
|
||||||
depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */
|
depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Purge any old translation */
|
/* Purge any old translation. Note that the FIC instruction
|
||||||
|
* may use either the instruction or data TLB. Given that we
|
||||||
|
* have a flat address space, it's not clear which TLB will be
|
||||||
|
* used. So, we purge both entries. */
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
|
pdtlb,l %r0(%r28)
|
||||||
pitlb,l %r0(%sr4,%r28)
|
pitlb,l %r0(%sr4,%r28)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pitlb (%sr4,%r28)
|
pdtlb %r0(%r28)
|
||||||
|
pitlb %r0(%sr4,%r28)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -976,10 +981,12 @@ ENTRY_CFI(flush_icache_page_asm)
|
||||||
sync
|
sync
|
||||||
|
|
||||||
#ifdef CONFIG_PA20
|
#ifdef CONFIG_PA20
|
||||||
|
pdtlb,l %r0(%r28)
|
||||||
pitlb,l %r0(%sr4,%r25)
|
pitlb,l %r0(%sr4,%r25)
|
||||||
#else
|
#else
|
||||||
tlb_lock %r20,%r21,%r22
|
tlb_lock %r20,%r21,%r22
|
||||||
pitlb (%sr4,%r25)
|
pdtlb %r0(%r28)
|
||||||
|
pitlb %r0(%sr4,%r25)
|
||||||
tlb_unlock %r20,%r21,%r22
|
tlb_unlock %r20,%r21,%r22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -95,8 +95,8 @@ static inline int map_pte_uncached(pte_t * pte,
|
||||||
|
|
||||||
if (!pte_none(*pte))
|
if (!pte_none(*pte))
|
||||||
printk(KERN_ERR "map_pte_uncached: page already exists\n");
|
printk(KERN_ERR "map_pte_uncached: page already exists\n");
|
||||||
set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC));
|
|
||||||
purge_tlb_start(flags);
|
purge_tlb_start(flags);
|
||||||
|
set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC));
|
||||||
pdtlb_kernel(orig_vaddr);
|
pdtlb_kernel(orig_vaddr);
|
||||||
purge_tlb_end(flags);
|
purge_tlb_end(flags);
|
||||||
vaddr += PAGE_SIZE;
|
vaddr += PAGE_SIZE;
|
||||||
|
|
|
@ -334,6 +334,10 @@ static int __init parisc_init(void)
|
||||||
/* tell PDC we're Linux. Nevermind failure. */
|
/* tell PDC we're Linux. Nevermind failure. */
|
||||||
pdc_stable_write(0x40, &osid, sizeof(osid));
|
pdc_stable_write(0x40, &osid, sizeof(osid));
|
||||||
|
|
||||||
|
/* start with known state */
|
||||||
|
flush_cache_all_local();
|
||||||
|
flush_tlb_all_local(NULL);
|
||||||
|
|
||||||
processor_init();
|
processor_init();
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",
|
pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/rtc.h>
|
#include <linux/rtc.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/sched_clock.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/param.h>
|
#include <linux/param.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
@ -39,18 +40,6 @@
|
||||||
|
|
||||||
static unsigned long clocktick __read_mostly; /* timer cycles per tick */
|
static unsigned long clocktick __read_mostly; /* timer cycles per tick */
|
||||||
|
|
||||||
#ifndef CONFIG_64BIT
|
|
||||||
/*
|
|
||||||
* The processor-internal cycle counter (Control Register 16) is used as time
|
|
||||||
* source for the sched_clock() function. This register is 64bit wide on a
|
|
||||||
* 64-bit kernel and 32bit on a 32-bit kernel. Since sched_clock() always
|
|
||||||
* requires a 64bit counter we emulate on the 32-bit kernel the higher 32bits
|
|
||||||
* with a per-cpu variable which we increase every time the counter
|
|
||||||
* wraps-around (which happens every ~4 secounds).
|
|
||||||
*/
|
|
||||||
static DEFINE_PER_CPU(unsigned long, cr16_high_32_bits);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We keep time on PA-RISC Linux by using the Interval Timer which is
|
* We keep time on PA-RISC Linux by using the Interval Timer which is
|
||||||
* a pair of registers; one is read-only and one is write-only; both
|
* a pair of registers; one is read-only and one is write-only; both
|
||||||
|
@ -121,12 +110,6 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id)
|
||||||
*/
|
*/
|
||||||
mtctl(next_tick, 16);
|
mtctl(next_tick, 16);
|
||||||
|
|
||||||
#if !defined(CONFIG_64BIT)
|
|
||||||
/* check for overflow on a 32bit kernel (every ~4 seconds). */
|
|
||||||
if (unlikely(next_tick < now))
|
|
||||||
this_cpu_inc(cr16_high_32_bits);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Skip one clocktick on purpose if we missed next_tick.
|
/* Skip one clocktick on purpose if we missed next_tick.
|
||||||
* The new CR16 must be "later" than current CR16 otherwise
|
* The new CR16 must be "later" than current CR16 otherwise
|
||||||
* itimer would not fire until CR16 wrapped - e.g 4 seconds
|
* itimer would not fire until CR16 wrapped - e.g 4 seconds
|
||||||
|
@ -208,7 +191,7 @@ EXPORT_SYMBOL(profile_pc);
|
||||||
|
|
||||||
/* clock source code */
|
/* clock source code */
|
||||||
|
|
||||||
static cycle_t read_cr16(struct clocksource *cs)
|
static cycle_t notrace read_cr16(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
return get_cycles();
|
return get_cycles();
|
||||||
}
|
}
|
||||||
|
@ -287,26 +270,9 @@ void read_persistent_clock(struct timespec *ts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
static u64 notrace read_cr16_sched_clock(void)
|
||||||
* sched_clock() framework
|
|
||||||
*/
|
|
||||||
|
|
||||||
static u32 cyc2ns_mul __read_mostly;
|
|
||||||
static u32 cyc2ns_shift __read_mostly;
|
|
||||||
|
|
||||||
u64 sched_clock(void)
|
|
||||||
{
|
{
|
||||||
u64 now;
|
return get_cycles();
|
||||||
|
|
||||||
/* Get current cycle counter (Control Register 16). */
|
|
||||||
#ifdef CONFIG_64BIT
|
|
||||||
now = mfctl(16);
|
|
||||||
#else
|
|
||||||
now = mfctl(16) + (((u64) this_cpu_read(cr16_high_32_bits)) << 32);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* return the value in ns (cycles_2_ns) */
|
|
||||||
return mul_u64_u32_shr(now, cyc2ns_mul, cyc2ns_shift);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -316,17 +282,16 @@ u64 sched_clock(void)
|
||||||
|
|
||||||
void __init time_init(void)
|
void __init time_init(void)
|
||||||
{
|
{
|
||||||
unsigned long current_cr16_khz;
|
unsigned long cr16_hz;
|
||||||
|
|
||||||
current_cr16_khz = PAGE0->mem_10msec/10; /* kHz */
|
|
||||||
clocktick = (100 * PAGE0->mem_10msec) / HZ;
|
clocktick = (100 * PAGE0->mem_10msec) / HZ;
|
||||||
|
|
||||||
/* calculate mult/shift values for cr16 */
|
|
||||||
clocks_calc_mult_shift(&cyc2ns_mul, &cyc2ns_shift, current_cr16_khz,
|
|
||||||
NSEC_PER_MSEC, 0);
|
|
||||||
|
|
||||||
start_cpu_itimer(); /* get CPU 0 started */
|
start_cpu_itimer(); /* get CPU 0 started */
|
||||||
|
|
||||||
|
cr16_hz = 100 * PAGE0->mem_10msec; /* Hz */
|
||||||
|
|
||||||
/* register at clocksource framework */
|
/* register at clocksource framework */
|
||||||
clocksource_register_khz(&clocksource_cr16, current_cr16_khz);
|
clocksource_register_hz(&clocksource_cr16, cr16_hz);
|
||||||
|
|
||||||
|
/* register as sched_clock source */
|
||||||
|
sched_clock_register(read_cr16_sched_clock, BITS_PER_LONG, cr16_hz);
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,8 +232,12 @@ void start(void)
|
||||||
console_ops.close();
|
console_ops.close();
|
||||||
|
|
||||||
kentry = (kernel_entry_t) vmlinux.addr;
|
kentry = (kernel_entry_t) vmlinux.addr;
|
||||||
if (ft_addr)
|
if (ft_addr) {
|
||||||
kentry(ft_addr, 0, NULL);
|
if(platform_ops.kentry)
|
||||||
|
platform_ops.kentry(ft_addr, vmlinux.addr);
|
||||||
|
else
|
||||||
|
kentry(ft_addr, 0, NULL);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
kentry((unsigned long)initrd.addr, initrd.size,
|
kentry((unsigned long)initrd.addr, initrd.size,
|
||||||
loader_info.promptr);
|
loader_info.promptr);
|
||||||
|
|
|
@ -12,6 +12,19 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
.globl opal_kentry
|
||||||
|
opal_kentry:
|
||||||
|
/* r3 is the fdt ptr */
|
||||||
|
mtctr r4
|
||||||
|
li r4, 0
|
||||||
|
li r5, 0
|
||||||
|
li r6, 0
|
||||||
|
li r7, 0
|
||||||
|
ld r11,opal@got(r2)
|
||||||
|
ld r8,0(r11)
|
||||||
|
ld r9,8(r11)
|
||||||
|
bctr
|
||||||
|
|
||||||
#define OPAL_CALL(name, token) \
|
#define OPAL_CALL(name, token) \
|
||||||
.globl name; \
|
.globl name; \
|
||||||
name: \
|
name: \
|
||||||
|
|
|
@ -23,14 +23,25 @@ struct opal {
|
||||||
|
|
||||||
static u32 opal_con_id;
|
static u32 opal_con_id;
|
||||||
|
|
||||||
|
/* see opal-wrappers.S */
|
||||||
int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
|
int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
|
||||||
int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
|
int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
|
||||||
int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
|
int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
|
||||||
int64_t opal_console_flush(uint64_t term_number);
|
int64_t opal_console_flush(uint64_t term_number);
|
||||||
int64_t opal_poll_events(uint64_t *outstanding_event_mask);
|
int64_t opal_poll_events(uint64_t *outstanding_event_mask);
|
||||||
|
|
||||||
|
void opal_kentry(unsigned long fdt_addr, void *vmlinux_addr);
|
||||||
|
|
||||||
static int opal_con_open(void)
|
static int opal_con_open(void)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* When OPAL loads the boot kernel it stashes the OPAL base and entry
|
||||||
|
* address in r8 and r9 so the kernel can use the OPAL console
|
||||||
|
* before unflattening the devicetree. While executing the wrapper will
|
||||||
|
* probably trash r8 and r9 so this kentry hook restores them before
|
||||||
|
* entering the decompressed kernel.
|
||||||
|
*/
|
||||||
|
platform_ops.kentry = opal_kentry;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct platform_ops {
|
||||||
void * (*realloc)(void *ptr, unsigned long size);
|
void * (*realloc)(void *ptr, unsigned long size);
|
||||||
void (*exit)(void);
|
void (*exit)(void);
|
||||||
void * (*vmlinux_alloc)(unsigned long size);
|
void * (*vmlinux_alloc)(unsigned long size);
|
||||||
|
void (*kentry)(unsigned long fdt_addr, void *vmlinux_addr);
|
||||||
};
|
};
|
||||||
extern struct platform_ops platform_ops;
|
extern struct platform_ops platform_ops;
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,10 @@
|
||||||
|
|
||||||
#include <linux/threads.h>
|
#include <linux/threads.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
|
#include <asm/cacheflush.h>
|
||||||
|
#include <asm/checksum.h>
|
||||||
|
#include <asm/uaccess.h>
|
||||||
|
#include <asm/epapr_hcalls.h>
|
||||||
|
|
||||||
#include <uapi/asm/ucontext.h>
|
#include <uapi/asm/ucontext.h>
|
||||||
|
|
||||||
|
@ -109,4 +113,12 @@ void early_setup_secondary(void);
|
||||||
/* time */
|
/* time */
|
||||||
void accumulate_stolen_time(void);
|
void accumulate_stolen_time(void);
|
||||||
|
|
||||||
|
/* misc runtime */
|
||||||
|
extern u64 __bswapdi2(u64);
|
||||||
|
extern s64 __lshrdi3(s64, int);
|
||||||
|
extern s64 __ashldi3(s64, int);
|
||||||
|
extern s64 __ashrdi3(s64, int);
|
||||||
|
extern int __cmpdi2(s64, s64);
|
||||||
|
extern int __ucmpdi2(u64, u64);
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_ASM_PROTOTYPES_H */
|
#endif /* _ASM_POWERPC_ASM_PROTOTYPES_H */
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
*/
|
*/
|
||||||
#define LOAD_HANDLER(reg, label) \
|
#define LOAD_HANDLER(reg, label) \
|
||||||
ld reg,PACAKBASE(r13); /* get high part of &label */ \
|
ld reg,PACAKBASE(r13); /* get high part of &label */ \
|
||||||
ori reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
|
ori reg,reg,FIXED_SYMBOL_ABS_ADDR(label);
|
||||||
|
|
||||||
#define __LOAD_HANDLER(reg, label) \
|
#define __LOAD_HANDLER(reg, label) \
|
||||||
ld reg,PACAKBASE(r13); \
|
ld reg,PACAKBASE(r13); \
|
||||||
|
@ -158,14 +158,17 @@ BEGIN_FTR_SECTION_NESTED(943) \
|
||||||
std ra,offset(r13); \
|
std ra,offset(r13); \
|
||||||
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||||
|
|
||||||
#define EXCEPTION_PROLOG_0(area) \
|
#define EXCEPTION_PROLOG_0_PACA(area) \
|
||||||
GET_PACA(r13); \
|
|
||||||
std r9,area+EX_R9(r13); /* save r9 */ \
|
std r9,area+EX_R9(r13); /* save r9 */ \
|
||||||
OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR); \
|
OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR); \
|
||||||
HMT_MEDIUM; \
|
HMT_MEDIUM; \
|
||||||
std r10,area+EX_R10(r13); /* save r10 - r12 */ \
|
std r10,area+EX_R10(r13); /* save r10 - r12 */ \
|
||||||
OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
|
OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
|
||||||
|
|
||||||
|
#define EXCEPTION_PROLOG_0(area) \
|
||||||
|
GET_PACA(r13); \
|
||||||
|
EXCEPTION_PROLOG_0_PACA(area)
|
||||||
|
|
||||||
#define __EXCEPTION_PROLOG_1(area, extra, vec) \
|
#define __EXCEPTION_PROLOG_1(area, extra, vec) \
|
||||||
OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR); \
|
OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR); \
|
||||||
OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR); \
|
OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR); \
|
||||||
|
@ -196,6 +199,12 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
|
||||||
EXCEPTION_PROLOG_1(area, extra, vec); \
|
EXCEPTION_PROLOG_1(area, extra, vec); \
|
||||||
EXCEPTION_PROLOG_PSERIES_1(label, h);
|
EXCEPTION_PROLOG_PSERIES_1(label, h);
|
||||||
|
|
||||||
|
/* Have the PACA in r13 already */
|
||||||
|
#define EXCEPTION_PROLOG_PSERIES_PACA(area, label, h, extra, vec) \
|
||||||
|
EXCEPTION_PROLOG_0_PACA(area); \
|
||||||
|
EXCEPTION_PROLOG_1(area, extra, vec); \
|
||||||
|
EXCEPTION_PROLOG_PSERIES_1(label, h);
|
||||||
|
|
||||||
#define __KVMTEST(h, n) \
|
#define __KVMTEST(h, n) \
|
||||||
lbz r10,HSTATE_IN_GUEST(r13); \
|
lbz r10,HSTATE_IN_GUEST(r13); \
|
||||||
cmpwi r10,0; \
|
cmpwi r10,0; \
|
||||||
|
|
|
@ -28,6 +28,12 @@
|
||||||
* Individual features below.
|
* Individual features below.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kernel read only support.
|
||||||
|
* We added the ppp value 0b110 in ISA 2.04.
|
||||||
|
*/
|
||||||
|
#define MMU_FTR_KERNEL_RO ASM_CONST(0x00004000)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to clear top 16bits of va (from the remaining 64 bits )in
|
* We need to clear top 16bits of va (from the remaining 64 bits )in
|
||||||
* tlbie* instructions
|
* tlbie* instructions
|
||||||
|
@ -103,10 +109,10 @@
|
||||||
#define MMU_FTRS_POWER4 MMU_FTRS_DEFAULT_HPTE_ARCH_V2
|
#define MMU_FTRS_POWER4 MMU_FTRS_DEFAULT_HPTE_ARCH_V2
|
||||||
#define MMU_FTRS_PPC970 MMU_FTRS_POWER4 | MMU_FTR_TLBIE_CROP_VA
|
#define MMU_FTRS_PPC970 MMU_FTRS_POWER4 | MMU_FTR_TLBIE_CROP_VA
|
||||||
#define MMU_FTRS_POWER5 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
#define MMU_FTRS_POWER5 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
||||||
#define MMU_FTRS_POWER6 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
#define MMU_FTRS_POWER6 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
|
||||||
#define MMU_FTRS_POWER7 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
#define MMU_FTRS_POWER7 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
|
||||||
#define MMU_FTRS_POWER8 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
#define MMU_FTRS_POWER8 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
|
||||||
#define MMU_FTRS_POWER9 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
|
#define MMU_FTRS_POWER9 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
|
||||||
#define MMU_FTRS_CELL MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
|
#define MMU_FTRS_CELL MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
|
||||||
MMU_FTR_CI_LARGE_PAGE
|
MMU_FTR_CI_LARGE_PAGE
|
||||||
#define MMU_FTRS_PA6T MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
|
#define MMU_FTRS_PA6T MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
|
||||||
|
|
|
@ -460,5 +460,6 @@
|
||||||
|
|
||||||
#define PPC_SLBIA(IH) stringify_in_c(.long PPC_INST_SLBIA | \
|
#define PPC_SLBIA(IH) stringify_in_c(.long PPC_INST_SLBIA | \
|
||||||
((IH & 0x7) << 21))
|
((IH & 0x7) << 21))
|
||||||
|
#define PPC_INVALIDATE_ERAT PPC_SLBIA(7)
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_PPC_OPCODE_H */
|
#endif /* _ASM_POWERPC_PPC_OPCODE_H */
|
||||||
|
|
|
@ -355,6 +355,7 @@
|
||||||
#define LPCR_PECE0 ASM_CONST(0x0000000000004000) /* ext. exceptions can cause exit */
|
#define LPCR_PECE0 ASM_CONST(0x0000000000004000) /* ext. exceptions can cause exit */
|
||||||
#define LPCR_PECE1 ASM_CONST(0x0000000000002000) /* decrementer can cause exit */
|
#define LPCR_PECE1 ASM_CONST(0x0000000000002000) /* decrementer can cause exit */
|
||||||
#define LPCR_PECE2 ASM_CONST(0x0000000000001000) /* machine check etc can cause exit */
|
#define LPCR_PECE2 ASM_CONST(0x0000000000001000) /* machine check etc can cause exit */
|
||||||
|
#define LPCR_PECE_HVEE ASM_CONST(0x0000400000000000) /* P9 Wakeup on HV interrupts */
|
||||||
#define LPCR_MER ASM_CONST(0x0000000000000800) /* Mediated External Exception */
|
#define LPCR_MER ASM_CONST(0x0000000000000800) /* Mediated External Exception */
|
||||||
#define LPCR_MER_SH 11
|
#define LPCR_MER_SH 11
|
||||||
#define LPCR_TC ASM_CONST(0x0000000000000200) /* Translation control */
|
#define LPCR_TC ASM_CONST(0x0000000000000200) /* Translation control */
|
||||||
|
|
|
@ -98,8 +98,8 @@ _GLOBAL(__setup_cpu_power9)
|
||||||
li r0,0
|
li r0,0
|
||||||
mtspr SPRN_LPID,r0
|
mtspr SPRN_LPID,r0
|
||||||
mfspr r3,SPRN_LPCR
|
mfspr r3,SPRN_LPCR
|
||||||
ori r3, r3, LPCR_PECEDH
|
LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE)
|
||||||
ori r3, r3, LPCR_HVICE
|
or r3, r3, r4
|
||||||
bl __init_LPCR
|
bl __init_LPCR
|
||||||
bl __init_HFSCR
|
bl __init_HFSCR
|
||||||
bl __init_tlb_power9
|
bl __init_tlb_power9
|
||||||
|
@ -118,8 +118,8 @@ _GLOBAL(__restore_cpu_power9)
|
||||||
li r0,0
|
li r0,0
|
||||||
mtspr SPRN_LPID,r0
|
mtspr SPRN_LPID,r0
|
||||||
mfspr r3,SPRN_LPCR
|
mfspr r3,SPRN_LPCR
|
||||||
ori r3, r3, LPCR_PECEDH
|
LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE)
|
||||||
ori r3, r3, LPCR_HVICE
|
or r3, r3, r4
|
||||||
bl __init_LPCR
|
bl __init_LPCR
|
||||||
bl __init_HFSCR
|
bl __init_HFSCR
|
||||||
bl __init_tlb_power9
|
bl __init_tlb_power9
|
||||||
|
|
|
@ -116,7 +116,9 @@ EXC_VIRT_NONE(0x4000, 0x4100)
|
||||||
|
|
||||||
EXC_REAL_BEGIN(system_reset, 0x100, 0x200)
|
EXC_REAL_BEGIN(system_reset, 0x100, 0x200)
|
||||||
SET_SCRATCH0(r13)
|
SET_SCRATCH0(r13)
|
||||||
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD,
|
GET_PACA(r13)
|
||||||
|
clrrdi r13,r13,1 /* Last bit of HSPRG0 is set if waking from winkle */
|
||||||
|
EXCEPTION_PROLOG_PSERIES_PACA(PACA_EXGEN, system_reset_common, EXC_STD,
|
||||||
IDLETEST, 0x100)
|
IDLETEST, 0x100)
|
||||||
|
|
||||||
EXC_REAL_END(system_reset, 0x100, 0x200)
|
EXC_REAL_END(system_reset, 0x100, 0x200)
|
||||||
|
@ -124,6 +126,9 @@ EXC_VIRT_NONE(0x4100, 0x4200)
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_P7_NAP
|
#ifdef CONFIG_PPC_P7_NAP
|
||||||
EXC_COMMON_BEGIN(system_reset_idle_common)
|
EXC_COMMON_BEGIN(system_reset_idle_common)
|
||||||
|
BEGIN_FTR_SECTION
|
||||||
|
GET_PACA(r13) /* Restore HSPRG0 to get the winkle bit in r13 */
|
||||||
|
END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
|
||||||
bl pnv_restore_hyp_resource
|
bl pnv_restore_hyp_resource
|
||||||
|
|
||||||
li r0,PNV_THREAD_RUNNING
|
li r0,PNV_THREAD_RUNNING
|
||||||
|
@ -169,7 +174,7 @@ EXC_REAL_BEGIN(machine_check, 0x200, 0x300)
|
||||||
SET_SCRATCH0(r13) /* save r13 */
|
SET_SCRATCH0(r13) /* save r13 */
|
||||||
/*
|
/*
|
||||||
* Running native on arch 2.06 or later, we may wakeup from winkle
|
* Running native on arch 2.06 or later, we may wakeup from winkle
|
||||||
* inside machine check. If yes, then last bit of HSPGR0 would be set
|
* inside machine check. If yes, then last bit of HSPRG0 would be set
|
||||||
* to 1. Hence clear it unconditionally.
|
* to 1. Hence clear it unconditionally.
|
||||||
*/
|
*/
|
||||||
GET_PACA(r13)
|
GET_PACA(r13)
|
||||||
|
@ -388,7 +393,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
|
||||||
/*
|
/*
|
||||||
* Go back to winkle. Please note that this thread was woken up in
|
* Go back to winkle. Please note that this thread was woken up in
|
||||||
* machine check from winkle and have not restored the per-subcore
|
* machine check from winkle and have not restored the per-subcore
|
||||||
* state. Hence before going back to winkle, set last bit of HSPGR0
|
* state. Hence before going back to winkle, set last bit of HSPRG0
|
||||||
* to 1. This will make sure that if this thread gets woken up
|
* to 1. This will make sure that if this thread gets woken up
|
||||||
* again at reset vector 0x100 then it will get chance to restore
|
* again at reset vector 0x100 then it will get chance to restore
|
||||||
* the subcore state.
|
* the subcore state.
|
||||||
|
|
|
@ -1215,7 +1215,7 @@ static void show_instructions(struct pt_regs *regs)
|
||||||
int instr;
|
int instr;
|
||||||
|
|
||||||
if (!(i % 8))
|
if (!(i % 8))
|
||||||
printk("\n");
|
pr_cont("\n");
|
||||||
|
|
||||||
#if !defined(CONFIG_BOOKE)
|
#if !defined(CONFIG_BOOKE)
|
||||||
/* If executing with the IMMU off, adjust pc rather
|
/* If executing with the IMMU off, adjust pc rather
|
||||||
|
@ -1227,18 +1227,18 @@ static void show_instructions(struct pt_regs *regs)
|
||||||
|
|
||||||
if (!__kernel_text_address(pc) ||
|
if (!__kernel_text_address(pc) ||
|
||||||
probe_kernel_address((unsigned int __user *)pc, instr)) {
|
probe_kernel_address((unsigned int __user *)pc, instr)) {
|
||||||
printk(KERN_CONT "XXXXXXXX ");
|
pr_cont("XXXXXXXX ");
|
||||||
} else {
|
} else {
|
||||||
if (regs->nip == pc)
|
if (regs->nip == pc)
|
||||||
printk(KERN_CONT "<%08x> ", instr);
|
pr_cont("<%08x> ", instr);
|
||||||
else
|
else
|
||||||
printk(KERN_CONT "%08x ", instr);
|
pr_cont("%08x ", instr);
|
||||||
}
|
}
|
||||||
|
|
||||||
pc += sizeof(int);
|
pc += sizeof(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("\n");
|
pr_cont("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct regbit {
|
struct regbit {
|
||||||
|
@ -1282,7 +1282,7 @@ static void print_bits(unsigned long val, struct regbit *bits, const char *sep)
|
||||||
|
|
||||||
for (; bits->bit; ++bits)
|
for (; bits->bit; ++bits)
|
||||||
if (val & bits->bit) {
|
if (val & bits->bit) {
|
||||||
printk("%s%s", s, bits->name);
|
pr_cont("%s%s", s, bits->name);
|
||||||
s = sep;
|
s = sep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1305,9 +1305,9 @@ static void print_tm_bits(unsigned long val)
|
||||||
* T: Transactional (bit 34)
|
* T: Transactional (bit 34)
|
||||||
*/
|
*/
|
||||||
if (val & (MSR_TM | MSR_TS_S | MSR_TS_T)) {
|
if (val & (MSR_TM | MSR_TS_S | MSR_TS_T)) {
|
||||||
printk(",TM[");
|
pr_cont(",TM[");
|
||||||
print_bits(val, msr_tm_bits, "");
|
print_bits(val, msr_tm_bits, "");
|
||||||
printk("]");
|
pr_cont("]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1316,10 +1316,10 @@ static void print_tm_bits(unsigned long val) {}
|
||||||
|
|
||||||
static void print_msr_bits(unsigned long val)
|
static void print_msr_bits(unsigned long val)
|
||||||
{
|
{
|
||||||
printk("<");
|
pr_cont("<");
|
||||||
print_bits(val, msr_bits, ",");
|
print_bits(val, msr_bits, ",");
|
||||||
print_tm_bits(val);
|
print_tm_bits(val);
|
||||||
printk(">");
|
pr_cont(">");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
|
@ -1347,29 +1347,29 @@ void show_regs(struct pt_regs * regs)
|
||||||
printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer);
|
printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer);
|
||||||
trap = TRAP(regs);
|
trap = TRAP(regs);
|
||||||
if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR))
|
if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR))
|
||||||
printk("CFAR: "REG" ", regs->orig_gpr3);
|
pr_cont("CFAR: "REG" ", regs->orig_gpr3);
|
||||||
if (trap == 0x200 || trap == 0x300 || trap == 0x600)
|
if (trap == 0x200 || trap == 0x300 || trap == 0x600)
|
||||||
#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
|
#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
|
||||||
printk("DEAR: "REG" ESR: "REG" ", regs->dar, regs->dsisr);
|
pr_cont("DEAR: "REG" ESR: "REG" ", regs->dar, regs->dsisr);
|
||||||
#else
|
#else
|
||||||
printk("DAR: "REG" DSISR: %08lx ", regs->dar, regs->dsisr);
|
pr_cont("DAR: "REG" DSISR: %08lx ", regs->dar, regs->dsisr);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
printk("SOFTE: %ld ", regs->softe);
|
pr_cont("SOFTE: %ld ", regs->softe);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||||
if (MSR_TM_ACTIVE(regs->msr))
|
if (MSR_TM_ACTIVE(regs->msr))
|
||||||
printk("\nPACATMSCRATCH: %016llx ", get_paca()->tm_scratch);
|
pr_cont("\nPACATMSCRATCH: %016llx ", get_paca()->tm_scratch);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < 32; i++) {
|
for (i = 0; i < 32; i++) {
|
||||||
if ((i % REGS_PER_LINE) == 0)
|
if ((i % REGS_PER_LINE) == 0)
|
||||||
printk("\nGPR%02d: ", i);
|
pr_cont("\nGPR%02d: ", i);
|
||||||
printk(REG " ", regs->gpr[i]);
|
pr_cont(REG " ", regs->gpr[i]);
|
||||||
if (i == LAST_VOLATILE && !FULL_REGS(regs))
|
if (i == LAST_VOLATILE && !FULL_REGS(regs))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printk("\n");
|
pr_cont("\n");
|
||||||
#ifdef CONFIG_KALLSYMS
|
#ifdef CONFIG_KALLSYMS
|
||||||
/*
|
/*
|
||||||
* Lookup NIP late so we have the best change of getting the
|
* Lookup NIP late so we have the best change of getting the
|
||||||
|
@ -1900,14 +1900,14 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
|
||||||
printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
|
printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
|
||||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||||
if ((ip == rth) && curr_frame >= 0) {
|
if ((ip == rth) && curr_frame >= 0) {
|
||||||
printk(" (%pS)",
|
pr_cont(" (%pS)",
|
||||||
(void *)current->ret_stack[curr_frame].ret);
|
(void *)current->ret_stack[curr_frame].ret);
|
||||||
curr_frame--;
|
curr_frame--;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (firstframe)
|
if (firstframe)
|
||||||
printk(" (unreliable)");
|
pr_cont(" (unreliable)");
|
||||||
printk("\n");
|
pr_cont("\n");
|
||||||
}
|
}
|
||||||
firstframe = 0;
|
firstframe = 0;
|
||||||
|
|
||||||
|
|
|
@ -226,17 +226,25 @@ static void __init configure_exceptions(void)
|
||||||
if (firmware_has_feature(FW_FEATURE_OPAL))
|
if (firmware_has_feature(FW_FEATURE_OPAL))
|
||||||
opal_configure_cores();
|
opal_configure_cores();
|
||||||
|
|
||||||
/* Enable AIL if supported, and we are in hypervisor mode */
|
/* AIL on native is done in cpu_ready_for_interrupts() */
|
||||||
if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
|
|
||||||
early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
|
|
||||||
unsigned long lpcr = mfspr(SPRN_LPCR);
|
|
||||||
mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cpu_ready_for_interrupts(void)
|
static void cpu_ready_for_interrupts(void)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Enable AIL if supported, and we are in hypervisor mode. This
|
||||||
|
* is called once for every processor.
|
||||||
|
*
|
||||||
|
* If we are not in hypervisor mode the job is done once for
|
||||||
|
* the whole partition in configure_exceptions().
|
||||||
|
*/
|
||||||
|
if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
|
||||||
|
early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
|
||||||
|
unsigned long lpcr = mfspr(SPRN_LPCR);
|
||||||
|
mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set IR and DR in PACA MSR */
|
/* Set IR and DR in PACA MSR */
|
||||||
get_paca()->kernel_msr = MSR_KERNEL;
|
get_paca()->kernel_msr = MSR_KERNEL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,8 +193,12 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags)
|
||||||
/*
|
/*
|
||||||
* Kernel read only mapped with ppp bits 0b110
|
* Kernel read only mapped with ppp bits 0b110
|
||||||
*/
|
*/
|
||||||
if (!(pteflags & _PAGE_WRITE))
|
if (!(pteflags & _PAGE_WRITE)) {
|
||||||
rflags |= (HPTE_R_PP0 | 0x2);
|
if (mmu_has_feature(MMU_FTR_KERNEL_RO))
|
||||||
|
rflags |= (HPTE_R_PP0 | 0x2);
|
||||||
|
else
|
||||||
|
rflags |= 0x3;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pteflags & _PAGE_RWX)
|
if (pteflags & _PAGE_RWX)
|
||||||
rflags |= 0x2;
|
rflags |= 0x2;
|
||||||
|
@ -1029,6 +1033,10 @@ void hash__early_init_mmu_secondary(void)
|
||||||
{
|
{
|
||||||
/* Initialize hash table for that CPU */
|
/* Initialize hash table for that CPU */
|
||||||
if (!firmware_has_feature(FW_FEATURE_LPAR)) {
|
if (!firmware_has_feature(FW_FEATURE_LPAR)) {
|
||||||
|
|
||||||
|
if (cpu_has_feature(CPU_FTR_POWER9_DD1))
|
||||||
|
update_hid_for_hash();
|
||||||
|
|
||||||
if (!cpu_has_feature(CPU_FTR_ARCH_300))
|
if (!cpu_has_feature(CPU_FTR_ARCH_300))
|
||||||
mtspr(SPRN_SDR1, _SDR1);
|
mtspr(SPRN_SDR1, _SDR1);
|
||||||
else
|
else
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче