mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
Merge "Merge android-5.4.7 (861433ef) into msm-5.4"
This commit is contained in:
commit
3ffb183dd9
572 changed files with 69794 additions and 61780 deletions
2
Makefile
2
Makefile
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 5
|
||||
SUBLEVEL = 7
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
|
|
|||
35423
abi_gki_aarch64.xml
35423
abi_gki_aarch64.xml
File diff suppressed because it is too large
Load diff
86891
abi_gki_aarch64_0c3bbf2246b4.xml → abi_gki_aarch64_c66e32e8.xml
Normal file → Executable file
86891
abi_gki_aarch64_0c3bbf2246b4.xml → abi_gki_aarch64_c66e32e8.xml
Normal file → Executable file
File diff suppressed because it is too large
Load diff
|
|
@ -160,12 +160,12 @@
|
|||
regulator-enable-ramp-delay = <1000>;
|
||||
};
|
||||
|
||||
/* Used by DSS */
|
||||
/* Used by DSS and is the "zerov_regulator" trigger for SoC off mode */
|
||||
vcsi: VCSI {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <1000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
vdac: VDAC {
|
||||
|
|
|
|||
|
|
@ -165,6 +165,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
&clocks {
|
||||
clocks = <&fin_pll>;
|
||||
};
|
||||
|
||||
&sdhci0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
&clocks {
|
||||
clocks = <&fin_pll>;
|
||||
};
|
||||
|
||||
&sdhci0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
extern void cpu_init(void);
|
||||
|
||||
void soft_restart(unsigned long);
|
||||
extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
|
||||
extern void (*arm_pm_idle)(void);
|
||||
|
||||
#ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ typedef void (*phys_reset_t)(unsigned long, bool);
|
|||
/*
|
||||
* Function pointers to optional machine specific functions
|
||||
*/
|
||||
void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
|
|
@ -138,10 +137,7 @@ void machine_restart(char *cmd)
|
|||
local_irq_disable();
|
||||
smp_send_stop();
|
||||
|
||||
if (arm_pm_restart)
|
||||
arm_pm_restart(reboot_mode, cmd);
|
||||
else
|
||||
do_kernel_restart(cmd);
|
||||
do_kernel_restart(cmd);
|
||||
|
||||
/* Give a grace period for failure to restart of 1s */
|
||||
mdelay(1000);
|
||||
|
|
|
|||
|
|
@ -1073,6 +1073,20 @@ void __init hyp_mode_check(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void (*__arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
|
||||
|
||||
static int arm_restart(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
{
|
||||
__arm_pm_restart(action, data);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block arm_restart_nb = {
|
||||
.notifier_call = arm_restart,
|
||||
.priority = 128,
|
||||
};
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
const struct machine_desc *mdesc;
|
||||
|
|
@ -1132,8 +1146,10 @@ void __init setup_arch(char **cmdline_p)
|
|||
paging_init(mdesc);
|
||||
request_standard_resources(mdesc);
|
||||
|
||||
if (mdesc->restart)
|
||||
arm_pm_restart = mdesc->restart;
|
||||
if (mdesc->restart) {
|
||||
__arm_pm_restart = mdesc->restart;
|
||||
register_restart_handler(&arm_restart_nb);
|
||||
}
|
||||
|
||||
unflatten_device_tree();
|
||||
|
||||
|
|
|
|||
|
|
@ -64,11 +64,18 @@ static struct reset_controller_dev sirfsoc_reset_controller = {
|
|||
|
||||
#define SIRFSOC_SYS_RST_BIT BIT(31)
|
||||
|
||||
static void sirfsoc_restart(enum reboot_mode mode, const char *cmd)
|
||||
static int sirfsoc_restart(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
{
|
||||
writel(SIRFSOC_SYS_RST_BIT, sirfsoc_rstc_base);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block sirfsoc_restart_nb = {
|
||||
.notifier_call = sirfsoc_restart,
|
||||
.priority = 192,
|
||||
};
|
||||
|
||||
static int sirfsoc_rstc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
|
|
@ -79,7 +86,7 @@ static int sirfsoc_rstc_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
sirfsoc_reset_controller.of_node = np;
|
||||
arm_pm_restart = sirfsoc_restart;
|
||||
register_restart_handler(&sirfsoc_restart_nb);
|
||||
|
||||
if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
|
||||
reset_controller_register(&sirfsoc_reset_controller);
|
||||
|
|
|
|||
|
|
@ -44,16 +44,16 @@ ENTRY(tegra_resume)
|
|||
cmp r6, #TEGRA20
|
||||
beq 1f @ Yes
|
||||
/* Clear the flow controller flags for this CPU. */
|
||||
cpu_to_csr_reg r1, r0
|
||||
cpu_to_csr_reg r3, r0
|
||||
mov32 r2, TEGRA_FLOW_CTRL_BASE
|
||||
ldr r1, [r2, r1]
|
||||
ldr r1, [r2, r3]
|
||||
/* Clear event & intr flag */
|
||||
orr r1, r1, \
|
||||
#FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG
|
||||
movw r0, #0x3FFD @ enable, cluster_switch, immed, bitmaps
|
||||
@ & ext flags for CPU power mgnt
|
||||
bic r1, r1, r0
|
||||
str r1, [r2]
|
||||
str r1, [r2, r3]
|
||||
1:
|
||||
|
||||
mov32 r9, 0xc09
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/cpu.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/pvclock_gtod.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/time64.h>
|
||||
#include <linux/timekeeping.h>
|
||||
#include <linux/timekeeper_internal.h>
|
||||
|
|
@ -180,11 +181,18 @@ void xen_reboot(int reason)
|
|||
BUG_ON(rc);
|
||||
}
|
||||
|
||||
static void xen_restart(enum reboot_mode reboot_mode, const char *cmd)
|
||||
static int xen_restart(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
{
|
||||
xen_reboot(SHUTDOWN_reboot);
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block xen_restart_nb = {
|
||||
.notifier_call = xen_restart,
|
||||
.priority = 192,
|
||||
};
|
||||
|
||||
static void xen_power_off(void)
|
||||
{
|
||||
|
|
@ -405,7 +413,7 @@ static int __init xen_pm_init(void)
|
|||
return -ENODEV;
|
||||
|
||||
pm_power_off = xen_power_off;
|
||||
arm_pm_restart = xen_restart;
|
||||
register_restart_handler(&xen_restart_nb);
|
||||
if (!xen_initial_domain()) {
|
||||
struct timespec64 ts;
|
||||
xen_read_wallclock(&ts);
|
||||
|
|
|
|||
114
arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
Normal file
114
arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
/{
|
||||
dpe: dpe@E8600000 {
|
||||
compatible = "hisilicon,hi3660-dpe";
|
||||
status = "ok"
|
||||
|
||||
reg = <0x0 0xE8600000 0x0 0x80000>,
|
||||
<0x0 0xFFF35000 0 0x1000>,
|
||||
<0x0 0xFFF0A000 0 0x1000>,
|
||||
<0x0 0xFFF31000 0 0x1000>,
|
||||
<0x0 0xE86C0000 0 0x10000>;
|
||||
interrupts = <0 245 4>;
|
||||
|
||||
clocks = <&crg_ctrl HI3660_ACLK_GATE_DSS>,
|
||||
<&crg_ctrl HI3660_PCLK_GATE_DSS>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_EDC0>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_LDI0>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_LDI1>,
|
||||
<&sctrl HI3660_CLK_GATE_DSS_AXI_MM>,
|
||||
<&sctrl HI3660_PCLK_GATE_MMBUF>;
|
||||
clock-names = "aclk_dss",
|
||||
"pclk_dss",
|
||||
"clk_edc0",
|
||||
"clk_ldi0",
|
||||
"clk_ldi1",
|
||||
"clk_dss_axi_mm",
|
||||
"pclk_mmbuf";
|
||||
|
||||
dma-coherent;
|
||||
|
||||
port {
|
||||
dpe_out: endpoint {
|
||||
remote-endpoint = <&dsi_in>;
|
||||
};
|
||||
};
|
||||
|
||||
iommu_info {
|
||||
start-addr = <0x8000>;
|
||||
size = <0xbfff8000>;
|
||||
};
|
||||
};
|
||||
|
||||
dsi: dsi@E8601000 {
|
||||
compatible = "hisilicon,hi3660-dsi";
|
||||
status = "ok"
|
||||
|
||||
reg = <0 0xE8601000 0 0x7F000>,
|
||||
<0 0xFFF35000 0 0x1000>;
|
||||
|
||||
clocks = <&crg_ctrl HI3660_CLK_GATE_TXDPHY0_REF>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_REF>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_TXDPHY0_CFG>,
|
||||
<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_CFG>,
|
||||
<&crg_ctrl HI3660_PCLK_GATE_DSI0>,
|
||||
<&crg_ctrl HI3660_PCLK_GATE_DSI1>;
|
||||
clock-names = "clk_txdphy0_ref",
|
||||
"clk_txdphy1_ref",
|
||||
"clk_txdphy0_cfg",
|
||||
"clk_txdphy1_cfg",
|
||||
"pclk_dsi0",
|
||||
"pclk_dsi1";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
mux-gpio = <&gpio2 4 0>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
dsi_in: endpoint {
|
||||
remote-endpoint = <&dpe_out>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <1>;
|
||||
|
||||
dsi_out0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&adv7533_in>;
|
||||
};
|
||||
|
||||
dsi_out1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&panel0_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel@1 {
|
||||
compatible = "hisilicon,mipi-hikey";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
status = "ok"
|
||||
reg = <1>;
|
||||
panel-width-mm = <94>;
|
||||
panel-height-mm = <151>;
|
||||
vdd-supply = <&ldo3>;
|
||||
pwr-en-gpio = <&gpio27 0 0>;
|
||||
bl-en-gpio = <&gpio27 2 0>;
|
||||
pwm-gpio = <&gpio22 6 0>;
|
||||
|
||||
port {
|
||||
panel0_in: endpoint {
|
||||
remote-endpoint = <&dsi_out1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
19
arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
Normal file
19
arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/{
|
||||
gpu: mali@E82C0000 {
|
||||
compatible = "arm,malit6xx", "arm,mali-midgard";
|
||||
#cooling-cells = <3>; /* min followed by max */
|
||||
gpu_outstanding = <0x0>;
|
||||
reg = <0x0 0xE82C0000 0x0 0x4000>;
|
||||
interrupts = <0 258 4 0 259 4 0 260 4>;
|
||||
interrupt-names = "JOB", "MMU", "GPU";
|
||||
operating-points = <
|
||||
/* <frequency> <voltage>*/
|
||||
178000 650000
|
||||
400000 700000
|
||||
533000 800000
|
||||
807000 900000
|
||||
960000 1000000
|
||||
1037000 1100000
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
|
@ -10,9 +10,13 @@
|
|||
|
||||
#include "hi3660.dtsi"
|
||||
#include "hikey960-pinctrl.dtsi"
|
||||
#include "hi3660-drm.dtsi"
|
||||
#include "hi3660-gpu.dtsi"
|
||||
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/usb/pd.h>
|
||||
|
||||
/ {
|
||||
model = "HiKey960";
|
||||
|
|
@ -45,6 +49,23 @@
|
|||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
fastboot_cma: fastboot-cma-mem {
|
||||
reg = <0x0 0x16c00000 0x0 0x4000000>;
|
||||
compatible = "shared-dma-pool";
|
||||
hisi,cma-sec;
|
||||
reusable;
|
||||
};
|
||||
|
||||
uefi-reboot-mode {
|
||||
reg = <0x0 0x32100000 0x0 0x00001000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
bl31 {
|
||||
reg = <0x0 0x20200000 0x0 0x200000>;
|
||||
no-map;
|
||||
};
|
||||
|
||||
ramoops@32000000 {
|
||||
compatible = "ramoops";
|
||||
reg = <0x0 0x32000000 0x0 0x00100000>;
|
||||
|
|
@ -52,6 +73,14 @@
|
|||
console-size = <0x00020000>;
|
||||
ftrace-size = <0x00020000>;
|
||||
};
|
||||
|
||||
/* global autoconfigured region for contiguous allocations */
|
||||
linux,cma {
|
||||
compatible = "shared-dma-pool";
|
||||
reg = <0x0 0x20C00000 0x0 0x4000000>;
|
||||
reusable;
|
||||
linux,cma-default;
|
||||
};
|
||||
};
|
||||
|
||||
reboot-mode-syscon@32100000 {
|
||||
|
|
@ -196,6 +225,59 @@
|
|||
method = "smc";
|
||||
};
|
||||
};
|
||||
|
||||
hisi_hikey_usb: hisi_hikey_usb {
|
||||
compatible = "hisilicon,gpio_hubv1";
|
||||
typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
|
||||
otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
|
||||
hub-vdd33-en-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usbhub5734_pmx_func>;
|
||||
usb-role-switch;
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
hikey_usb_ep0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&dwc3_role_switch>;
|
||||
};
|
||||
hikey_usb_ep1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&rt1711h_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2s2: hi3660_i2s {
|
||||
compatible = "hisilicon,hi3660-i2s-1.0";
|
||||
reg = <0x0 0xe804f800 0x0 0x400>,
|
||||
<0x0 0xe804e000 0x0 0x400>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2s2_pmx_func &i2s2_cfg_func>;
|
||||
dmas = <&asp_dmac 18 &asp_dmac 19>;
|
||||
dma-names = "rx", "tx";
|
||||
#sound-dai-cells = <0>;
|
||||
};
|
||||
|
||||
sound {
|
||||
compatible = "simple-audio-card";
|
||||
simple-audio-card,name = "hikey-hdmi";
|
||||
simple-audio-card,format = "i2s";
|
||||
|
||||
simple-audio-card,bitclock-master = <&sound_master>;
|
||||
simple-audio-card,frame-master = <&sound_master>;
|
||||
|
||||
sound_master: simple-audio-card,cpu {
|
||||
sound-dai = <&i2s2>;
|
||||
};
|
||||
|
||||
simple-audio-card,codec {
|
||||
sound-dai = <&adv7533>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -526,11 +608,54 @@
|
|||
&i2c1 {
|
||||
status = "okay";
|
||||
|
||||
rt1711h: rt1711h@4e {
|
||||
compatible = "richtek,rt1711h";
|
||||
reg = <0x4e>;
|
||||
status = "ok"
|
||||
interrupt-parent = <&gpio27>;
|
||||
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&usb_cfg_func>;
|
||||
|
||||
usb_con: connector {
|
||||
compatible = "usb-c-connector";
|
||||
label = "USB-C";
|
||||
data-role = "dual";
|
||||
power-role = "dual";
|
||||
try-power-role = "sink";
|
||||
source-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)>;
|
||||
sink-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)
|
||||
PDO_VAR(5000, 5000, 1000)>;
|
||||
op-sink-microwatt = <10000000>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
usb_con_ss: endpoint {
|
||||
remote-endpoint = <&dwc3_ss>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
rt1711h_ep: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&hikey_usb_ep1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
adv7533: adv7533@39 {
|
||||
status = "ok"
|
||||
compatible = "adi,adv7533";
|
||||
reg = <0x39>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&i2c7 {
|
||||
|
|
|
|||
|
|
@ -355,6 +355,12 @@
|
|||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
pmctrl: pmctrl@fff31000 {
|
||||
compatible = "hisilicon,hi3660-pmctrl", "syscon";
|
||||
reg = <0x0 0xfff31000 0x0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
pmuctrl: crg_ctrl@fff34000 {
|
||||
compatible = "hisilicon,hi3660-pmuctrl", "syscon";
|
||||
reg = <0x0 0xfff34000 0x0 0x1000>;
|
||||
|
|
@ -367,6 +373,13 @@
|
|||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
reboot {
|
||||
compatible = "hisilicon,hi3660-reboot";
|
||||
pmu-regmap = <&pmuctrl>;
|
||||
sctrl-regmap = <&sctrl>;
|
||||
reboot-offset = <0x4>;
|
||||
};
|
||||
|
||||
iomcu: iomcu@ffd7e000 {
|
||||
compatible = "hisilicon,hi3660-iomcu", "syscon";
|
||||
reg = <0x0 0xffd7e000 0x0 0x1000>;
|
||||
|
|
@ -431,7 +444,28 @@
|
|||
resets = <&iomcu_rst 0x20 4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pmx_func &i2c1_cfg_func>;
|
||||
status = "disabled";
|
||||
status = "ok"
|
||||
|
||||
adv7533: adv7533@39 {
|
||||
status = "ok"
|
||||
compatible = "adi,adv7533";
|
||||
reg = <0x39>;
|
||||
v1p2-supply = <&ldo3>;
|
||||
vdd-supply = <&ldo3>;
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <1 2>;
|
||||
pd-gpio = <&gpio5 1 0>;
|
||||
sel-gpio = <&gpio2 4 0>;
|
||||
adi,dsi-lanes = <4>;
|
||||
adi,disable-timing-generator;
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
port {
|
||||
adv7533_in: endpoint {
|
||||
remote-endpoint = <&dsi_out0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
i2c3: i2c@fdf0c000 {
|
||||
|
|
@ -1152,6 +1186,70 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
usb3_otg_bc: usb3_otg_bc@ff200000 {
|
||||
compatible = "syscon", "simple-mfd";
|
||||
reg = <0x0 0xff200000 0x0 0x1000>;
|
||||
|
||||
usb_phy: usb-phy {
|
||||
compatible = "hisilicon,hi3660-usb-phy";
|
||||
#phy-cells = <0>;
|
||||
hisilicon,pericrg-syscon = <&crg_ctrl>;
|
||||
hisilicon,pctrl-syscon = <&pctrl>;
|
||||
hisilicon,eye-diagram-param = <0x22466e4>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
dwc3: dwc3@ff100000 {
|
||||
compatible = "snps,dwc3";
|
||||
reg = <0x0 0xff100000 0x0 0x100000>;
|
||||
|
||||
clocks = <&crg_ctrl HI3660_CLK_ABB_USB>,
|
||||
<&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
|
||||
clock-names = "ref", "bus_early";
|
||||
|
||||
assigned-clocks = <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
|
||||
assigned-clock-rates = <229000000>;
|
||||
|
||||
resets = <&crg_rst 0x90 8>,
|
||||
<&crg_rst 0x90 7>,
|
||||
<&crg_rst 0x90 6>,
|
||||
<&crg_rst 0x90 5>;
|
||||
|
||||
interrupts = <0 159 4>, <0 161 4>;
|
||||
phys = <&usb_phy>;
|
||||
phy-names = "usb3-phy";
|
||||
|
||||
dr_mode = "otg";
|
||||
maximum-speed = "super-speed";
|
||||
phy_type = "utmi";
|
||||
snps,dis-del-phy-power-chg-quirk;
|
||||
snps,lfps_filter_quirk;
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,dis_u3_susphy_quirk;
|
||||
snps,tx_de_emphasis_quirk;
|
||||
snps,tx_de_emphasis = <1>;
|
||||
snps,dis_enblslpm_quirk;
|
||||
snps,gctl-reset-quirk;
|
||||
usb-role-switch;
|
||||
role-switch-default-mode = "host";
|
||||
|
||||
port {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
dwc3_role_switch: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&hikey_usb_ep0>;
|
||||
};
|
||||
|
||||
dwc3_ss: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&usb_con_ss>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ CONFIG_SCHED_MC=y
|
|||
CONFIG_NR_CPUS=32
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_PARAVIRT=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_ARMV8_DEPRECATED=y
|
||||
CONFIG_SWP_EMULATION=y
|
||||
|
|
@ -81,8 +82,8 @@ CONFIG_MODVERSIONS=y
|
|||
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||
CONFIG_GKI_HACKS_TO_FIX=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_AREAS=16
|
||||
CONFIG_ZSMALLOC=y
|
||||
|
|
@ -204,7 +205,10 @@ CONFIG_MAC80211=y
|
|||
# CONFIG_MAC80211_RC_MINSTREL is not set
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEAER is not set
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCIE_QCOM=y
|
||||
CONFIG_PCIE_KIRIN=y
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
||||
|
|
@ -212,6 +216,7 @@ CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
|||
# CONFIG_ALLOW_DEV_COREDUMP is not set
|
||||
CONFIG_DEBUG_DEVRES=y
|
||||
CONFIG_GNSS=y
|
||||
CONFIG_GNSS_CMDLINE_SERIAL=m
|
||||
CONFIG_ZRAM=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ void hook_debug_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
|
|||
struct mm_struct;
|
||||
extern void __show_regs(struct pt_regs *);
|
||||
|
||||
extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __ASM_SYSTEM_MISC_H */
|
||||
|
|
|
|||
|
|
@ -67,8 +67,6 @@ EXPORT_SYMBOL(__stack_chk_guard);
|
|||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL_GPL(pm_power_off);
|
||||
|
||||
void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
|
||||
|
||||
static void __cpu_do_idle(void)
|
||||
{
|
||||
dsb(sy);
|
||||
|
|
@ -208,10 +206,7 @@ void machine_restart(char *cmd)
|
|||
efi_reboot(reboot_mode, NULL);
|
||||
|
||||
/* Now call the architecture specific reboot code. */
|
||||
if (arm_pm_restart)
|
||||
arm_pm_restart(reboot_mode, cmd);
|
||||
else
|
||||
do_kernel_restart(cmd);
|
||||
do_kernel_restart(cmd);
|
||||
|
||||
/*
|
||||
* Whoops - the architecture was unable to reboot.
|
||||
|
|
|
|||
|
|
@ -82,7 +82,8 @@ static void cpu_psci_cpu_die(unsigned int cpu)
|
|||
|
||||
static int cpu_psci_cpu_kill(unsigned int cpu)
|
||||
{
|
||||
int err, i;
|
||||
int err;
|
||||
unsigned long start, end;
|
||||
|
||||
if (!psci_ops.affinity_info)
|
||||
return 0;
|
||||
|
|
@ -92,16 +93,18 @@ static int cpu_psci_cpu_kill(unsigned int cpu)
|
|||
* while it is dying. So, try again a few times.
|
||||
*/
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
start = jiffies;
|
||||
end = start + msecs_to_jiffies(100);
|
||||
do {
|
||||
err = psci_ops.affinity_info(cpu_logical_map(cpu), 0);
|
||||
if (err == PSCI_0_2_AFFINITY_LEVEL_OFF) {
|
||||
pr_info("CPU%d killed.\n", cpu);
|
||||
pr_info("CPU%d killed (polled %d ms)\n", cpu,
|
||||
jiffies_to_msecs(jiffies - start));
|
||||
return 0;
|
||||
}
|
||||
|
||||
msleep(10);
|
||||
pr_info("Retrying again to check for CPU kill\n");
|
||||
}
|
||||
usleep_range(100, 1000);
|
||||
} while (time_before(jiffies, end));
|
||||
|
||||
pr_warn("CPU%d may not have shut down cleanly (AFFINITY_INFO reports %d)\n",
|
||||
cpu, err);
|
||||
|
|
|
|||
|
|
@ -2360,8 +2360,11 @@ static const struct sys_reg_desc *index_to_sys_reg_desc(struct kvm_vcpu *vcpu,
|
|||
if ((id & KVM_REG_ARM_COPROC_MASK) != KVM_REG_ARM64_SYSREG)
|
||||
return NULL;
|
||||
|
||||
if (!index_to_params(id, ¶ms))
|
||||
return NULL;
|
||||
|
||||
table = get_target_table(vcpu->arch.target, true, &num);
|
||||
r = find_reg_by_id(id, ¶ms, table, num);
|
||||
r = find_reg(¶ms, table, num);
|
||||
if (!r)
|
||||
r = find_reg(¶ms, sys_reg_descs, ARRAY_SIZE(sys_reg_descs));
|
||||
|
||||
|
|
|
|||
|
|
@ -218,13 +218,14 @@
|
|||
* ordering will be done by smp_llsc_mb() and friends.
|
||||
*/
|
||||
#if defined(CONFIG_WEAK_REORDERING_BEYOND_LLSC) && defined(CONFIG_SMP)
|
||||
#define __WEAK_LLSC_MB " sync \n"
|
||||
#define smp_llsc_mb() __asm__ __volatile__(__WEAK_LLSC_MB : : :"memory")
|
||||
#define __LLSC_CLOBBER
|
||||
# define __WEAK_LLSC_MB sync
|
||||
# define smp_llsc_mb() \
|
||||
__asm__ __volatile__(__stringify(__WEAK_LLSC_MB) : : :"memory")
|
||||
# define __LLSC_CLOBBER
|
||||
#else
|
||||
#define __WEAK_LLSC_MB " \n"
|
||||
#define smp_llsc_mb() do { } while (0)
|
||||
#define __LLSC_CLOBBER "memory"
|
||||
# define __WEAK_LLSC_MB
|
||||
# define smp_llsc_mb() do { } while (0)
|
||||
# define __LLSC_CLOBBER "memory"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include <asm/barrier.h>
|
||||
#include <asm/compiler.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/sync.h>
|
||||
#include <asm/war.h>
|
||||
|
||||
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
|
||||
|
|
@ -32,7 +33,7 @@
|
|||
" .set arch=r4000 \n" \
|
||||
"2: sc $1, %2 \n" \
|
||||
" beqzl $1, 1b \n" \
|
||||
__WEAK_LLSC_MB \
|
||||
__stringify(__WEAK_LLSC_MB) " \n" \
|
||||
"3: \n" \
|
||||
" .insn \n" \
|
||||
" .set pop \n" \
|
||||
|
|
@ -50,19 +51,19 @@
|
|||
"i" (-EFAULT) \
|
||||
: "memory"); \
|
||||
} else if (cpu_has_llsc) { \
|
||||
loongson_llsc_mb(); \
|
||||
__asm__ __volatile__( \
|
||||
" .set push \n" \
|
||||
" .set noat \n" \
|
||||
" .set push \n" \
|
||||
" .set "MIPS_ISA_ARCH_LEVEL" \n" \
|
||||
" " __SYNC(full, loongson3_war) " \n" \
|
||||
"1: "user_ll("%1", "%4")" # __futex_atomic_op\n" \
|
||||
" .set pop \n" \
|
||||
" " insn " \n" \
|
||||
" .set "MIPS_ISA_ARCH_LEVEL" \n" \
|
||||
"2: "user_sc("$1", "%2")" \n" \
|
||||
" beqz $1, 1b \n" \
|
||||
__WEAK_LLSC_MB \
|
||||
__stringify(__WEAK_LLSC_MB) " \n" \
|
||||
"3: \n" \
|
||||
" .insn \n" \
|
||||
" .set pop \n" \
|
||||
|
|
@ -147,7 +148,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|||
" .set arch=r4000 \n"
|
||||
"2: sc $1, %2 \n"
|
||||
" beqzl $1, 1b \n"
|
||||
__WEAK_LLSC_MB
|
||||
__stringify(__WEAK_LLSC_MB) " \n"
|
||||
"3: \n"
|
||||
" .insn \n"
|
||||
" .set pop \n"
|
||||
|
|
@ -164,13 +165,13 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|||
"i" (-EFAULT)
|
||||
: "memory");
|
||||
} else if (cpu_has_llsc) {
|
||||
loongson_llsc_mb();
|
||||
__asm__ __volatile__(
|
||||
"# futex_atomic_cmpxchg_inatomic \n"
|
||||
" .set push \n"
|
||||
" .set noat \n"
|
||||
" .set push \n"
|
||||
" .set "MIPS_ISA_ARCH_LEVEL" \n"
|
||||
" " __SYNC(full, loongson3_war) " \n"
|
||||
"1: "user_ll("%1", "%3")" \n"
|
||||
" bne %1, %z4, 3f \n"
|
||||
" .set pop \n"
|
||||
|
|
@ -178,8 +179,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|||
" .set "MIPS_ISA_ARCH_LEVEL" \n"
|
||||
"2: "user_sc("$1", "%2")" \n"
|
||||
" beqz $1, 1b \n"
|
||||
__WEAK_LLSC_MB
|
||||
"3: \n"
|
||||
"3: " __SYNC_ELSE(full, loongson3_war, __WEAK_LLSC_MB) "\n"
|
||||
" .insn \n"
|
||||
" .set pop \n"
|
||||
" .section .fixup,\"ax\" \n"
|
||||
|
|
@ -194,7 +194,6 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
|
|||
: GCC_OFF_SMALL_ASM() (*uaddr), "Jr" (oldval), "Jr" (newval),
|
||||
"i" (-EFAULT)
|
||||
: "memory");
|
||||
loongson_llsc_mb();
|
||||
} else
|
||||
return -ENOSYS;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,10 +18,12 @@
|
|||
#include <asm/fixmap.h>
|
||||
|
||||
#define __ARCH_USE_5LEVEL_HACK
|
||||
#if defined(CONFIG_PAGE_SIZE_64KB) && !defined(CONFIG_MIPS_VA_BITS_48)
|
||||
#if CONFIG_PGTABLE_LEVELS == 2
|
||||
#include <asm-generic/pgtable-nopmd.h>
|
||||
#elif !(defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_MIPS_VA_BITS_48))
|
||||
#elif CONFIG_PGTABLE_LEVELS == 3
|
||||
#include <asm-generic/pgtable-nopud.h>
|
||||
#else
|
||||
#include <asm-generic/5level-fixup.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -216,6 +218,9 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)
|
|||
return pgd_val(pgd);
|
||||
}
|
||||
|
||||
#define pgd_phys(pgd) virt_to_phys((void *)pgd_val(pgd))
|
||||
#define pgd_page(pgd) (pfn_to_page(pgd_phys(pgd) >> PAGE_SHIFT))
|
||||
|
||||
static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
|
||||
{
|
||||
return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(address);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ choice
|
|||
select MIPS_GIC
|
||||
select COMMON_CLK
|
||||
select CLKSRC_MIPS_GIC
|
||||
select HAVE_PCI if PCI_MT7621
|
||||
endchoice
|
||||
|
||||
choice
|
||||
|
|
|
|||
|
|
@ -36,10 +36,12 @@
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
DECLARE_STATIC_KEY_FALSE(shared_processor);
|
||||
|
||||
#define vcpu_is_preempted vcpu_is_preempted
|
||||
static inline bool vcpu_is_preempted(int cpu)
|
||||
{
|
||||
if (!firmware_has_feature(FW_FEATURE_SPLPAR))
|
||||
if (!static_branch_unlikely(&shared_processor))
|
||||
return false;
|
||||
return !!(be32_to_cpu(lppaca_of(cpu).yield_count) & 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -619,8 +619,6 @@ void __do_irq(struct pt_regs *regs)
|
|||
|
||||
trace_irq_entry(regs);
|
||||
|
||||
check_stack_overflow();
|
||||
|
||||
/*
|
||||
* Query the platform PIC for the interrupt & ack it.
|
||||
*
|
||||
|
|
@ -652,6 +650,8 @@ void do_IRQ(struct pt_regs *regs)
|
|||
irqsp = hardirq_ctx[raw_smp_processor_id()];
|
||||
sirqsp = softirq_ctx[raw_smp_processor_id()];
|
||||
|
||||
check_stack_overflow();
|
||||
|
||||
/* Already there ? */
|
||||
if (unlikely(cursp == irqsp || cursp == sirqsp)) {
|
||||
__do_irq(regs);
|
||||
|
|
|
|||
|
|
@ -1117,7 +1117,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
|
|||
ld r7, VCPU_GPR(R7)(r4)
|
||||
bne ret_to_ultra
|
||||
|
||||
lwz r0, VCPU_CR(r4)
|
||||
ld r0, VCPU_CR(r4)
|
||||
mtcr r0
|
||||
|
||||
ld r0, VCPU_GPR(R0)(r4)
|
||||
|
|
@ -1137,7 +1137,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
|
|||
* R3 = UV_RETURN
|
||||
*/
|
||||
ret_to_ultra:
|
||||
lwz r0, VCPU_CR(r4)
|
||||
ld r0, VCPU_CR(r4)
|
||||
mtcr r0
|
||||
|
||||
ld r0, VCPU_GPR(R3)(r4)
|
||||
|
|
|
|||
|
|
@ -74,6 +74,9 @@
|
|||
#include "pseries.h"
|
||||
#include "../../../../drivers/pci/pci.h"
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(shared_processor);
|
||||
EXPORT_SYMBOL_GPL(shared_processor);
|
||||
|
||||
int CMO_PrPSP = -1;
|
||||
int CMO_SecPSP = -1;
|
||||
unsigned long CMO_PageSize = (ASM_CONST(1) << IOMMU_PAGE_SHIFT_4K);
|
||||
|
|
@ -758,6 +761,10 @@ static void __init pSeries_setup_arch(void)
|
|||
|
||||
if (firmware_has_feature(FW_FEATURE_LPAR)) {
|
||||
vpa_init(boot_cpuid);
|
||||
|
||||
if (lppaca_shared_proc(get_lppaca()))
|
||||
static_branch_enable(&shared_processor);
|
||||
|
||||
ppc_md.power_save = pseries_lpar_idle;
|
||||
ppc_md.enable_pmcs = pseries_lpar_enable_pmcs;
|
||||
#ifdef CONFIG_PCI_IOV
|
||||
|
|
|
|||
|
|
@ -74,14 +74,17 @@ int s390_sha_final(struct shash_desc *desc, u8 *out)
|
|||
struct s390_sha_ctx *ctx = shash_desc_ctx(desc);
|
||||
unsigned int bsize = crypto_shash_blocksize(desc->tfm);
|
||||
u64 bits;
|
||||
unsigned int n, mbl_offset;
|
||||
unsigned int n;
|
||||
int mbl_offset;
|
||||
|
||||
n = ctx->count % bsize;
|
||||
bits = ctx->count * 8;
|
||||
mbl_offset = s390_crypto_shash_parmsize(ctx->func) / sizeof(u32);
|
||||
mbl_offset = s390_crypto_shash_parmsize(ctx->func);
|
||||
if (mbl_offset < 0)
|
||||
return -EINVAL;
|
||||
|
||||
mbl_offset = mbl_offset / sizeof(u32);
|
||||
|
||||
/* set total msg bit length (mbl) in CPACF parmblock */
|
||||
switch (ctx->func) {
|
||||
case CPACF_KLMD_SHA_1:
|
||||
|
|
|
|||
|
|
@ -56,7 +56,12 @@ static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long address)
|
|||
crst_table_init(table, _REGION2_ENTRY_EMPTY);
|
||||
return (p4d_t *) table;
|
||||
}
|
||||
#define p4d_free(mm, p4d) crst_table_free(mm, (unsigned long *) p4d)
|
||||
|
||||
static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d)
|
||||
{
|
||||
if (!mm_p4d_folded(mm))
|
||||
crst_table_free(mm, (unsigned long *) p4d);
|
||||
}
|
||||
|
||||
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||
{
|
||||
|
|
@ -65,7 +70,12 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
|
|||
crst_table_init(table, _REGION3_ENTRY_EMPTY);
|
||||
return (pud_t *) table;
|
||||
}
|
||||
#define pud_free(mm, pud) crst_table_free(mm, (unsigned long *) pud)
|
||||
|
||||
static inline void pud_free(struct mm_struct *mm, pud_t *pud)
|
||||
{
|
||||
if (!mm_pud_folded(mm))
|
||||
crst_table_free(mm, (unsigned long *) pud);
|
||||
}
|
||||
|
||||
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
||||
{
|
||||
|
|
@ -83,6 +93,8 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long vmaddr)
|
|||
|
||||
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
|
||||
{
|
||||
if (mm_pmd_folded(mm))
|
||||
return;
|
||||
pgtable_pmd_page_dtor(virt_to_page(pmd));
|
||||
crst_table_free(mm, (unsigned long *) pmd);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@
|
|||
#ifndef _ASM_S390_TIMEX_H
|
||||
#define _ASM_S390_TIMEX_H
|
||||
|
||||
#include <asm/lowcore.h>
|
||||
#include <linux/preempt.h>
|
||||
#include <linux/time64.h>
|
||||
#include <asm/lowcore.h>
|
||||
|
||||
/* The value of the TOD clock for 1.1.1970. */
|
||||
#define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
|
||||
|
|
@ -186,15 +187,18 @@ extern unsigned char tod_clock_base[16] __aligned(8);
|
|||
/**
|
||||
* get_clock_monotonic - returns current time in clock rate units
|
||||
*
|
||||
* The caller must ensure that preemption is disabled.
|
||||
* The clock and tod_clock_base get changed via stop_machine.
|
||||
* Therefore preemption must be disabled when calling this
|
||||
* function, otherwise the returned value is not guaranteed to
|
||||
* be monotonic.
|
||||
* Therefore preemption must be disabled, otherwise the returned
|
||||
* value is not guaranteed to be monotonic.
|
||||
*/
|
||||
static inline unsigned long long get_tod_clock_monotonic(void)
|
||||
{
|
||||
return get_tod_clock() - *(unsigned long long *) &tod_clock_base[1];
|
||||
unsigned long long tod;
|
||||
|
||||
preempt_disable_notrace();
|
||||
tod = get_tod_clock() - *(unsigned long long *) &tod_clock_base[1];
|
||||
preempt_enable_notrace();
|
||||
return tod;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -461,10 +461,11 @@ static int print_insn(char *buffer, unsigned char *code, unsigned long addr)
|
|||
ptr += sprintf(ptr, "%%c%i", value);
|
||||
else if (operand->flags & OPERAND_VR)
|
||||
ptr += sprintf(ptr, "%%v%i", value);
|
||||
else if (operand->flags & OPERAND_PCREL)
|
||||
ptr += sprintf(ptr, "%lx", (signed int) value
|
||||
+ addr);
|
||||
else if (operand->flags & OPERAND_SIGNED)
|
||||
else if (operand->flags & OPERAND_PCREL) {
|
||||
void *pcrel = (void *)((int)value + addr);
|
||||
|
||||
ptr += sprintf(ptr, "%px", pcrel);
|
||||
} else if (operand->flags & OPERAND_SIGNED)
|
||||
ptr += sprintf(ptr, "%i", value);
|
||||
else
|
||||
ptr += sprintf(ptr, "%u", value);
|
||||
|
|
@ -536,7 +537,7 @@ void show_code(struct pt_regs *regs)
|
|||
else
|
||||
*ptr++ = ' ';
|
||||
addr = regs->psw.addr + start - 32;
|
||||
ptr += sprintf(ptr, "%016lx: ", addr);
|
||||
ptr += sprintf(ptr, "%px: ", (void *)addr);
|
||||
if (start + opsize >= end)
|
||||
break;
|
||||
for (i = 0; i < opsize; i++)
|
||||
|
|
@ -564,7 +565,7 @@ void print_fn_code(unsigned char *code, unsigned long len)
|
|||
opsize = insn_length(*code);
|
||||
if (opsize > len)
|
||||
break;
|
||||
ptr += sprintf(ptr, "%p: ", code);
|
||||
ptr += sprintf(ptr, "%px: ", code);
|
||||
for (i = 0; i < opsize; i++)
|
||||
ptr += sprintf(ptr, "%02x", code[i]);
|
||||
*ptr++ = '\t';
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ static const int cpumf_generic_events_user[] = {
|
|||
[PERF_COUNT_HW_BUS_CYCLES] = -1,
|
||||
};
|
||||
|
||||
static int __hw_perf_event_init(struct perf_event *event)
|
||||
static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
|
||||
{
|
||||
struct perf_event_attr *attr = &event->attr;
|
||||
struct hw_perf_event *hwc = &event->hw;
|
||||
|
|
@ -207,7 +207,7 @@ static int __hw_perf_event_init(struct perf_event *event)
|
|||
int err = 0;
|
||||
u64 ev;
|
||||
|
||||
switch (attr->type) {
|
||||
switch (type) {
|
||||
case PERF_TYPE_RAW:
|
||||
/* Raw events are used to access counters directly,
|
||||
* hence do not permit excludes */
|
||||
|
|
@ -294,17 +294,16 @@ static int __hw_perf_event_init(struct perf_event *event)
|
|||
|
||||
static int cpumf_pmu_event_init(struct perf_event *event)
|
||||
{
|
||||
unsigned int type = event->attr.type;
|
||||
int err;
|
||||
|
||||
switch (event->attr.type) {
|
||||
case PERF_TYPE_HARDWARE:
|
||||
case PERF_TYPE_HW_CACHE:
|
||||
case PERF_TYPE_RAW:
|
||||
err = __hw_perf_event_init(event);
|
||||
break;
|
||||
default:
|
||||
if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_RAW)
|
||||
err = __hw_perf_event_init(event, type);
|
||||
else if (event->pmu->type == type)
|
||||
/* Registered as unknown PMU */
|
||||
err = __hw_perf_event_init(event, PERF_TYPE_RAW);
|
||||
else
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
if (unlikely(err) && event->destroy)
|
||||
event->destroy(event);
|
||||
|
|
@ -553,7 +552,7 @@ static int __init cpumf_pmu_init(void)
|
|||
return -ENODEV;
|
||||
|
||||
cpumf_pmu.attr_groups = cpumf_cf_event_group();
|
||||
rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", PERF_TYPE_RAW);
|
||||
rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", -1);
|
||||
if (rc)
|
||||
pr_err("Registering the cpum_cf PMU failed with rc=%i\n", rc);
|
||||
return rc;
|
||||
|
|
|
|||
|
|
@ -243,13 +243,13 @@ static int cf_diag_event_init(struct perf_event *event)
|
|||
int err = -ENOENT;
|
||||
|
||||
debug_sprintf_event(cf_diag_dbg, 5,
|
||||
"%s event %p cpu %d config %#llx "
|
||||
"%s event %p cpu %d config %#llx type:%u "
|
||||
"sample_type %#llx cf_diag_events %d\n", __func__,
|
||||
event, event->cpu, attr->config, attr->sample_type,
|
||||
atomic_read(&cf_diag_events));
|
||||
event, event->cpu, attr->config, event->pmu->type,
|
||||
attr->sample_type, atomic_read(&cf_diag_events));
|
||||
|
||||
if (event->attr.config != PERF_EVENT_CPUM_CF_DIAG ||
|
||||
event->attr.type != PERF_TYPE_RAW)
|
||||
event->attr.type != event->pmu->type)
|
||||
goto out;
|
||||
|
||||
/* Raw events are used to access counters directly,
|
||||
|
|
@ -693,7 +693,7 @@ static int __init cf_diag_init(void)
|
|||
}
|
||||
debug_register_view(cf_diag_dbg, &debug_sprintf_view);
|
||||
|
||||
rc = perf_pmu_register(&cf_diag, "cpum_cf_diag", PERF_TYPE_RAW);
|
||||
rc = perf_pmu_register(&cf_diag, "cpum_cf_diag", -1);
|
||||
if (rc) {
|
||||
debug_unregister_view(cf_diag_dbg, &debug_sprintf_view);
|
||||
debug_unregister(cf_diag_dbg);
|
||||
|
|
|
|||
|
|
@ -224,9 +224,13 @@ void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry,
|
|||
struct pt_regs *regs)
|
||||
{
|
||||
struct unwind_state state;
|
||||
unsigned long addr;
|
||||
|
||||
unwind_for_each_frame(&state, current, regs, 0)
|
||||
perf_callchain_store(entry, state.ip);
|
||||
unwind_for_each_frame(&state, current, regs, 0) {
|
||||
addr = unwind_get_return_address(&state);
|
||||
if (!addr || perf_callchain_store(entry, addr))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Perf definitions for PMU event attributes in sysfs */
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ void notrace s390_kernel_write(void *dst, const void *src, size_t size)
|
|||
spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
|
||||
}
|
||||
|
||||
static int __memcpy_real(void *dest, void *src, size_t count)
|
||||
static int __no_sanitize_address __memcpy_real(void *dest, void *src, size_t count)
|
||||
{
|
||||
register unsigned long _dest asm("2") = (unsigned long) dest;
|
||||
register unsigned long _len1 asm("3") = (unsigned long) count;
|
||||
|
|
@ -91,19 +91,23 @@ static int __memcpy_real(void *dest, void *src, size_t count)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static unsigned long _memcpy_real(unsigned long dest, unsigned long src,
|
||||
unsigned long count)
|
||||
static unsigned long __no_sanitize_address _memcpy_real(unsigned long dest,
|
||||
unsigned long src,
|
||||
unsigned long count)
|
||||
{
|
||||
int irqs_disabled, rc;
|
||||
unsigned long flags;
|
||||
|
||||
if (!count)
|
||||
return 0;
|
||||
flags = __arch_local_irq_stnsm(0xf8UL);
|
||||
flags = arch_local_irq_save();
|
||||
irqs_disabled = arch_irqs_disabled_flags(flags);
|
||||
if (!irqs_disabled)
|
||||
trace_hardirqs_off();
|
||||
__arch_local_irq_stnsm(0xf8); // disable DAT
|
||||
rc = __memcpy_real((void *) dest, (void *) src, (size_t) count);
|
||||
if (flags & PSW_MASK_DAT)
|
||||
__arch_local_irq_stosm(0x04); // enable DAT
|
||||
if (!irqs_disabled)
|
||||
trace_hardirqs_on();
|
||||
__arch_local_irq_ssm(flags);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/filter.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/dis.h>
|
||||
#include <asm/facility.h>
|
||||
|
|
@ -1369,7 +1370,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
|
|||
}
|
||||
|
||||
memset(&jit, 0, sizeof(jit));
|
||||
jit.addrs = kcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
|
||||
jit.addrs = kvcalloc(fp->len + 1, sizeof(*jit.addrs), GFP_KERNEL);
|
||||
if (jit.addrs == NULL) {
|
||||
fp = orig_fp;
|
||||
goto out;
|
||||
|
|
@ -1422,7 +1423,7 @@ skip_init_ctx:
|
|||
if (!fp->is_func || extra_pass) {
|
||||
bpf_prog_fill_jited_linfo(fp, jit.addrs + 1);
|
||||
free_addrs:
|
||||
kfree(jit.addrs);
|
||||
kvfree(jit.addrs);
|
||||
kfree(jit_data);
|
||||
fp->aux->jit_data = NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ enum {
|
|||
GPIO_FN_EX_WAIT1, GPIO_FN_SD1_DAT0_A, GPIO_FN_DREQ2, GPIO_FN_CAN1_TX_C,
|
||||
GPIO_FN_ET0_LINK_C, GPIO_FN_ET0_ETXD5_A,
|
||||
GPIO_FN_EX_WAIT0, GPIO_FN_TCLK1_B,
|
||||
GPIO_FN_RD_WR, GPIO_FN_TCLK0,
|
||||
GPIO_FN_RD_WR, GPIO_FN_TCLK0, GPIO_FN_CAN_CLK_B, GPIO_FN_ET0_ETXD4,
|
||||
GPIO_FN_EX_CS5, GPIO_FN_SD1_CMD_A, GPIO_FN_ATADIR, GPIO_FN_QSSL_B,
|
||||
GPIO_FN_ET0_ETXD3_A,
|
||||
GPIO_FN_EX_CS4, GPIO_FN_SD1_WP_A, GPIO_FN_ATAWR, GPIO_FN_QMI_QIO1_B,
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ CONFIG_MODVERSIONS=y
|
|||
CONFIG_BLK_INLINE_ENCRYPTION=y
|
||||
CONFIG_GKI_HACKS_TO_FIX=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMA_AREAS=16
|
||||
CONFIG_ZSMALLOC=y
|
||||
|
|
@ -178,12 +178,15 @@ CONFIG_MAC80211=y
|
|||
# CONFIG_MAC80211_RC_MINSTREL is not set
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEAER is not set
|
||||
CONFIG_FW_LOADER_USER_HELPER=y
|
||||
CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_ALLOW_DEV_COREDUMP is not set
|
||||
CONFIG_DEBUG_DEVRES=y
|
||||
CONFIG_GNSS=y
|
||||
CONFIG_GNSS_CMDLINE_SERIAL=m
|
||||
CONFIG_OF=y
|
||||
CONFIG_ZRAM=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
|
|
@ -322,6 +325,7 @@ CONFIG_ION_SYSTEM_HEAP=y
|
|||
CONFIG_ION_SYSTEM_CONTIG_HEAP=y
|
||||
CONFIG_PM_DEVFREQ=y
|
||||
CONFIG_IIO=y
|
||||
CONFIG_RAS=y
|
||||
CONFIG_ANDROID=y
|
||||
CONFIG_ANDROID_BINDER_IPC=y
|
||||
CONFIG_EXT4_FS=y
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#ifndef _ASM_X86_CRASH_H
|
||||
#define _ASM_X86_CRASH_H
|
||||
|
||||
struct kimage;
|
||||
|
||||
int crash_load_segments(struct kimage *image);
|
||||
int crash_copy_backup_region(struct kimage *image);
|
||||
int crash_setup_memmap_entries(struct kimage *image,
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ extern pte_t *kmap_pte;
|
|||
extern pte_t *pkmap_page_table;
|
||||
|
||||
void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
|
||||
void native_set_fixmap(enum fixed_addresses idx,
|
||||
void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
|
||||
phys_addr_t phys, pgprot_t flags);
|
||||
|
||||
#ifndef CONFIG_PARAVIRT_XXL
|
||||
|
|
|
|||
|
|
@ -48,12 +48,13 @@
|
|||
* To keep the naming coherent, re-define SYSCALL_DEFINE0 to create an alias
|
||||
* named __ia32_sys_*()
|
||||
*/
|
||||
#define SYSCALL_DEFINE0(sname) \
|
||||
SYSCALL_METADATA(_##sname, 0); \
|
||||
asmlinkage long __x64_sys_##sname(void); \
|
||||
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
||||
SYSCALL_ALIAS(__ia32_sys_##sname, __x64_sys_##sname); \
|
||||
asmlinkage long __x64_sys_##sname(void)
|
||||
|
||||
#define SYSCALL_DEFINE0(sname) \
|
||||
SYSCALL_METADATA(_##sname, 0); \
|
||||
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
|
||||
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
||||
SYSCALL_ALIAS(__ia32_sys_##sname, __x64_sys_##sname); \
|
||||
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
|
||||
|
||||
#define COND_SYSCALL(name) \
|
||||
cond_syscall(__x64_sys_##name); \
|
||||
|
|
@ -181,11 +182,11 @@
|
|||
* macros to work correctly.
|
||||
*/
|
||||
#ifndef SYSCALL_DEFINE0
|
||||
#define SYSCALL_DEFINE0(sname) \
|
||||
SYSCALL_METADATA(_##sname, 0); \
|
||||
asmlinkage long __x64_sys_##sname(void); \
|
||||
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
||||
asmlinkage long __x64_sys_##sname(void)
|
||||
#define SYSCALL_DEFINE0(sname) \
|
||||
SYSCALL_METADATA(_##sname, 0); \
|
||||
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused);\
|
||||
ALLOW_ERROR_INJECTION(__x64_sys_##sname, ERRNO); \
|
||||
asmlinkage long __x64_sys_##sname(const struct pt_regs *__unused)
|
||||
#endif
|
||||
|
||||
#ifndef COND_SYSCALL
|
||||
|
|
|
|||
|
|
@ -1727,9 +1727,10 @@ static bool io_apic_level_ack_pending(struct mp_chip_data *data)
|
|||
|
||||
static inline bool ioapic_irqd_mask(struct irq_data *data)
|
||||
{
|
||||
/* If we are moving the irq we need to mask it */
|
||||
/* If we are moving the IRQ we need to mask it */
|
||||
if (unlikely(irqd_is_setaffinity_pending(data))) {
|
||||
mask_ioapic_irq(data);
|
||||
if (!irqd_irq_masked(data))
|
||||
mask_ioapic_irq(data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -1766,7 +1767,9 @@ static inline void ioapic_irqd_unmask(struct irq_data *data, bool masked)
|
|||
*/
|
||||
if (!io_apic_level_ack_pending(data->chip_data))
|
||||
irq_move_masked_irq(data);
|
||||
unmask_ioapic_irq(data);
|
||||
/* If the IRQ is masked in the core, leave it: */
|
||||
if (!irqd_irq_masked(data))
|
||||
unmask_ioapic_irq(data);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -266,10 +266,10 @@ static void smca_configure(unsigned int bank, unsigned int cpu)
|
|||
smca_set_misc_banks_map(bank, cpu);
|
||||
|
||||
/* Return early if this bank was already initialized. */
|
||||
if (smca_banks[bank].hwid)
|
||||
if (smca_banks[bank].hwid && smca_banks[bank].hwid->hwid_mcatype != 0)
|
||||
return;
|
||||
|
||||
if (rdmsr_safe_on_cpu(cpu, MSR_AMD64_SMCA_MCx_IPID(bank), &low, &high)) {
|
||||
if (rdmsr_safe(MSR_AMD64_SMCA_MCx_IPID(bank), &low, &high)) {
|
||||
pr_warn("Failed to read MCA_IPID for bank %d\n", bank);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -814,8 +814,8 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
|
|||
if (quirk_no_way_out)
|
||||
quirk_no_way_out(i, m, regs);
|
||||
|
||||
m->bank = i;
|
||||
if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
|
||||
m->bank = i;
|
||||
mce_read_aux(m, i);
|
||||
*msg = tmp;
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ static void therm_throt_process(bool new_event, int event, int level)
|
|||
/* if we just entered the thermal event */
|
||||
if (new_event) {
|
||||
if (event == THERMAL_THROTTLING_EVENT)
|
||||
pr_crit("CPU%d: %s temperature above threshold, cpu clock throttled (total events = %lu)\n",
|
||||
pr_warn("CPU%d: %s temperature above threshold, cpu clock throttled (total events = %lu)\n",
|
||||
this_cpu,
|
||||
level == CORE_LEVEL ? "Core" : "Package",
|
||||
state->count);
|
||||
|
|
|
|||
|
|
@ -710,6 +710,8 @@ static struct chipset early_qrk[] __initdata = {
|
|||
*/
|
||||
{ PCI_VENDOR_ID_INTEL, 0x0f00,
|
||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3e20,
|
||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
|
||||
{ PCI_VENDOR_ID_INTEL, 0x3ec4,
|
||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, force_disable_hpet},
|
||||
{ PCI_VENDOR_ID_BROADCOM, 0x4331,
|
||||
|
|
|
|||
|
|
@ -402,7 +402,8 @@ static inline void do_cpuid_7_mask(struct kvm_cpuid_entry2 *entry, int index)
|
|||
entry->edx |= F(SPEC_CTRL);
|
||||
if (boot_cpu_has(X86_FEATURE_STIBP))
|
||||
entry->edx |= F(INTEL_STIBP);
|
||||
if (boot_cpu_has(X86_FEATURE_SSBD))
|
||||
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
|
||||
boot_cpu_has(X86_FEATURE_AMD_SSBD))
|
||||
entry->edx |= F(SPEC_CTRL_SSBD);
|
||||
/*
|
||||
* We emulate ARCH_CAPABILITIES in software even
|
||||
|
|
@ -759,7 +760,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_entry2 *entry, u32 function,
|
|||
entry->ebx |= F(AMD_IBRS);
|
||||
if (boot_cpu_has(X86_FEATURE_STIBP))
|
||||
entry->ebx |= F(AMD_STIBP);
|
||||
if (boot_cpu_has(X86_FEATURE_SSBD))
|
||||
if (boot_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
|
||||
boot_cpu_has(X86_FEATURE_AMD_SSBD))
|
||||
entry->ebx |= F(AMD_SSBD);
|
||||
if (!boot_cpu_has_bug(X86_BUG_SPEC_STORE_BYPASS))
|
||||
entry->ebx |= F(AMD_SSB_NO);
|
||||
|
|
|
|||
|
|
@ -333,7 +333,7 @@ AVXcode: 1
|
|||
06: CLTS
|
||||
07: SYSRET (o64)
|
||||
08: INVD
|
||||
09: WBINVD
|
||||
09: WBINVD | WBNOINVD (F3)
|
||||
0a:
|
||||
0b: UD2 (1B)
|
||||
0c:
|
||||
|
|
@ -364,7 +364,7 @@ AVXcode: 1
|
|||
# a ModR/M byte.
|
||||
1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev
|
||||
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
|
||||
1c:
|
||||
1c: Grp20 (1A),(1C)
|
||||
1d:
|
||||
1e:
|
||||
1f: NOP Ev
|
||||
|
|
@ -792,6 +792,8 @@ f3: Grp17 (1A)
|
|||
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v)
|
||||
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v)
|
||||
f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v)
|
||||
f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3)
|
||||
f9: MOVDIRI My,Gy
|
||||
EndTable
|
||||
|
||||
Table: 3-byte opcode 2 (0x0f 0x3a)
|
||||
|
|
@ -943,9 +945,9 @@ GrpTable: Grp6
|
|||
EndTable
|
||||
|
||||
GrpTable: Grp7
|
||||
0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B)
|
||||
1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B)
|
||||
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B)
|
||||
0: SGDT Ms | VMCALL (001),(11B) | VMLAUNCH (010),(11B) | VMRESUME (011),(11B) | VMXOFF (100),(11B) | PCONFIG (101),(11B) | ENCLV (000),(11B)
|
||||
1: SIDT Ms | MONITOR (000),(11B) | MWAIT (001),(11B) | CLAC (010),(11B) | STAC (011),(11B) | ENCLS (111),(11B)
|
||||
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B)
|
||||
3: LIDT Ms
|
||||
4: SMSW Mw/Rv
|
||||
5: rdpkru (110),(11B) | wrpkru (111),(11B)
|
||||
|
|
@ -1020,7 +1022,7 @@ GrpTable: Grp15
|
|||
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
|
||||
4: XSAVE | ptwrite Ey (F3),(11B)
|
||||
5: XRSTOR | lfence (11B)
|
||||
6: XSAVEOPT | clwb (66) | mfence (11B)
|
||||
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B)
|
||||
7: clflush | clflushopt (66) | sfence (11B)
|
||||
EndTable
|
||||
|
||||
|
|
@ -1051,6 +1053,10 @@ GrpTable: Grp19
|
|||
6: vscatterpf1qps/d Wx (66),(ev)
|
||||
EndTable
|
||||
|
||||
GrpTable: Grp20
|
||||
0: cldemote Mb
|
||||
EndTable
|
||||
|
||||
# AMD's Prefetch Group
|
||||
GrpTable: GrpP
|
||||
0: PREFETCH
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ static inline bool seg_writable(struct desc_struct *d)
|
|||
#define FPU_access_ok(y,z) if ( !access_ok(y,z) ) \
|
||||
math_abort(FPU_info,SIGSEGV)
|
||||
#define FPU_abort math_abort(FPU_info, SIGSEGV)
|
||||
#define FPU_copy_from_user(to, from, n) \
|
||||
do { if (copy_from_user(to, from, n)) FPU_abort; } while (0)
|
||||
|
||||
#undef FPU_IGNORE_CODE_SEGV
|
||||
#ifdef FPU_IGNORE_CODE_SEGV
|
||||
|
|
@ -122,7 +124,7 @@ static inline bool seg_writable(struct desc_struct *d)
|
|||
#define FPU_code_access_ok(z) FPU_access_ok((void __user *)FPU_EIP,z)
|
||||
#endif
|
||||
|
||||
#define FPU_get_user(x,y) get_user((x),(y))
|
||||
#define FPU_put_user(x,y) put_user((x),(y))
|
||||
#define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
|
||||
#define FPU_put_user(x,y) do { if (put_user((x),(y))) FPU_abort; } while (0)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ int FPU_load_extended(long double __user *s, int stnr)
|
|||
|
||||
RE_ENTRANT_CHECK_OFF;
|
||||
FPU_access_ok(s, 10);
|
||||
__copy_from_user(sti_ptr, s, 10);
|
||||
FPU_copy_from_user(sti_ptr, s, 10);
|
||||
RE_ENTRANT_CHECK_ON;
|
||||
|
||||
return FPU_tagof(sti_ptr);
|
||||
|
|
@ -1126,9 +1126,9 @@ void frstor(fpu_addr_modes addr_modes, u_char __user *data_address)
|
|||
/* Copy all registers in stack order. */
|
||||
RE_ENTRANT_CHECK_OFF;
|
||||
FPU_access_ok(s, 80);
|
||||
__copy_from_user(register_base + offset, s, other);
|
||||
FPU_copy_from_user(register_base + offset, s, other);
|
||||
if (offset)
|
||||
__copy_from_user(register_base, s + other, offset);
|
||||
FPU_copy_from_user(register_base, s + other, offset);
|
||||
RE_ENTRANT_CHECK_ON;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
|
|
|
|||
|
|
@ -643,8 +643,8 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
|
|||
fixmaps_set++;
|
||||
}
|
||||
|
||||
void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys,
|
||||
pgprot_t flags)
|
||||
void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
|
||||
phys_addr_t phys, pgprot_t flags)
|
||||
{
|
||||
/* Sanitize 'prot' against any unsupported bits: */
|
||||
pgprot_val(flags) &= __default_kernel_pte_mask;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ static inline void syscall_set_return_value(struct task_struct *task,
|
|||
struct pt_regs *regs,
|
||||
int error, long val)
|
||||
{
|
||||
regs->areg[0] = (long) error ? error : val;
|
||||
regs->areg[2] = (long) error ? error : val;
|
||||
}
|
||||
|
||||
#define SYSCALL_MAX_ARGS 6
|
||||
|
|
|
|||
|
|
@ -56,7 +56,9 @@ static void __init populate(void *start, void *end)
|
|||
|
||||
for (k = 0; k < PTRS_PER_PTE; ++k, ++j) {
|
||||
phys_addr_t phys =
|
||||
memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
|
||||
memblock_phys_alloc_range(PAGE_SIZE, PAGE_SIZE,
|
||||
0,
|
||||
MEMBLOCK_ALLOC_ANYWHERE);
|
||||
|
||||
if (!phys)
|
||||
panic("Failed to allocate page table page\n");
|
||||
|
|
|
|||
|
|
@ -216,6 +216,8 @@ static int check_tlb_entry(unsigned w, unsigned e, bool dtlb)
|
|||
unsigned tlbidx = w | (e << PAGE_SHIFT);
|
||||
unsigned r0 = dtlb ?
|
||||
read_dtlb_virtual(tlbidx) : read_itlb_virtual(tlbidx);
|
||||
unsigned r1 = dtlb ?
|
||||
read_dtlb_translation(tlbidx) : read_itlb_translation(tlbidx);
|
||||
unsigned vpn = (r0 & PAGE_MASK) | (e << PAGE_SHIFT);
|
||||
unsigned pte = get_pte_for_vaddr(vpn);
|
||||
unsigned mm_asid = (get_rasid_register() >> 8) & ASID_MASK;
|
||||
|
|
@ -231,8 +233,6 @@ static int check_tlb_entry(unsigned w, unsigned e, bool dtlb)
|
|||
}
|
||||
|
||||
if (tlb_asid == mm_asid) {
|
||||
unsigned r1 = dtlb ? read_dtlb_translation(tlbidx) :
|
||||
read_itlb_translation(tlbidx);
|
||||
if ((pte ^ r1) & PAGE_MASK) {
|
||||
pr_err("%cTLB: way: %u, entry: %u, mapping: %08x->%08x, PTE: %08x\n",
|
||||
dtlb ? 'D' : 'I', w, e, r0, r1, pte);
|
||||
|
|
|
|||
|
|
@ -753,10 +753,12 @@ bool __bio_try_merge_page(struct bio *bio, struct page *page,
|
|||
if (WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED)))
|
||||
return false;
|
||||
|
||||
if (bio->bi_vcnt > 0 && !bio_full(bio, len)) {
|
||||
if (bio->bi_vcnt > 0) {
|
||||
struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt - 1];
|
||||
|
||||
if (page_is_mergeable(bv, page, len, off, same_page)) {
|
||||
if (bio->bi_iter.bi_size > UINT_MAX - len)
|
||||
return false;
|
||||
bv->bv_len += len;
|
||||
bio->bi_iter.bi_size += len;
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1212,7 +1212,7 @@ static enum hrtimer_restart iocg_waitq_timer_fn(struct hrtimer *timer)
|
|||
return HRTIMER_NORESTART;
|
||||
}
|
||||
|
||||
static void iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now, u64 cost)
|
||||
static bool iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now, u64 cost)
|
||||
{
|
||||
struct ioc *ioc = iocg->ioc;
|
||||
struct blkcg_gq *blkg = iocg_to_blkg(iocg);
|
||||
|
|
@ -1229,11 +1229,11 @@ static void iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now, u64 cost)
|
|||
/* clear or maintain depending on the overage */
|
||||
if (time_before_eq64(vtime, now->vnow)) {
|
||||
blkcg_clear_delay(blkg);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (!atomic_read(&blkg->use_delay) &&
|
||||
time_before_eq64(vtime, now->vnow + vmargin))
|
||||
return;
|
||||
return false;
|
||||
|
||||
/* use delay */
|
||||
if (cost) {
|
||||
|
|
@ -1250,10 +1250,11 @@ static void iocg_kick_delay(struct ioc_gq *iocg, struct ioc_now *now, u64 cost)
|
|||
oexpires = ktime_to_ns(hrtimer_get_softexpires(&iocg->delay_timer));
|
||||
if (hrtimer_is_queued(&iocg->delay_timer) &&
|
||||
abs(oexpires - expires) <= margin_ns / 4)
|
||||
return;
|
||||
return true;
|
||||
|
||||
hrtimer_start_range_ns(&iocg->delay_timer, ns_to_ktime(expires),
|
||||
margin_ns / 4, HRTIMER_MODE_ABS);
|
||||
return true;
|
||||
}
|
||||
|
||||
static enum hrtimer_restart iocg_delay_timer_fn(struct hrtimer *timer)
|
||||
|
|
@ -1739,7 +1740,9 @@ static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio)
|
|||
*/
|
||||
if (bio_issue_as_root_blkg(bio) || fatal_signal_pending(current)) {
|
||||
atomic64_add(abs_cost, &iocg->abs_vdebt);
|
||||
iocg_kick_delay(iocg, &now, cost);
|
||||
if (iocg_kick_delay(iocg, &now, cost))
|
||||
blkcg_schedule_throttle(rqos->q,
|
||||
(bio->bi_opf & REQ_SWAP) == REQ_SWAP);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -309,6 +309,7 @@ config CRYPTO_AEGIS128
|
|||
config CRYPTO_AEGIS128_SIMD
|
||||
bool "Support SIMD acceleration for AEGIS-128"
|
||||
depends on CRYPTO_AEGIS128 && ((ARM || ARM64) && KERNEL_MODE_NEON)
|
||||
depends on !ARM || CC_IS_CLANG || GCC_VERSION >= 40800
|
||||
default y
|
||||
|
||||
config CRYPTO_AEGIS128_AESNI_SSE2
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ obj-$(CONFIG_CRYPTO_AEGIS128) += aegis128.o
|
|||
aegis128-y := aegis128-core.o
|
||||
|
||||
ifeq ($(ARCH),arm)
|
||||
CFLAGS_aegis128-neon-inner.o += -ffreestanding -march=armv7-a -mfloat-abi=softfp
|
||||
CFLAGS_aegis128-neon-inner.o += -ffreestanding -march=armv8-a -mfloat-abi=softfp
|
||||
CFLAGS_aegis128-neon-inner.o += -mfpu=crypto-neon-fp-armv8
|
||||
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -486,6 +486,7 @@ static int tpm_key_encrypt(struct tpm_key *tk,
|
|||
if (ret < 0)
|
||||
goto error_free_tfm;
|
||||
|
||||
ret = -ENOMEM;
|
||||
req = akcipher_request_alloc(tfm, GFP_KERNEL);
|
||||
if (!req)
|
||||
goto error_free_tfm;
|
||||
|
|
|
|||
|
|
@ -184,6 +184,7 @@ static int software_key_eds_op(struct kernel_pkey_params *params,
|
|||
if (IS_ERR(tfm))
|
||||
return PTR_ERR(tfm);
|
||||
|
||||
ret = -ENOMEM;
|
||||
req = akcipher_request_alloc(tfm, GFP_KERNEL);
|
||||
if (!req)
|
||||
goto error_free_tfm;
|
||||
|
|
|
|||
|
|
@ -78,6 +78,17 @@ static const struct dmi_system_id lid_blacklst[] = {
|
|||
DMI_MATCH(DMI_BIOS_VERSION, "BYT70A.YNCHENG.WIN.007"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Medion Akoya E2215T, notification of the LID device only
|
||||
* happens on close, not on open and _LID always returns closed.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "E2215T MD60198"),
|
||||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -6708,6 +6708,9 @@ void ata_host_detach(struct ata_host *host)
|
|||
{
|
||||
int i;
|
||||
|
||||
/* Ensure ata_port probe has completed */
|
||||
async_synchronize_full();
|
||||
|
||||
for (i = 0; i < host->n_ports; i++)
|
||||
ata_port_detach(host->ports[i]);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ fwdir := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
|
|||
obj-y := $(addsuffix .gen.o, $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE)))
|
||||
|
||||
FWNAME = $(patsubst $(obj)/%.gen.S,%,$@)
|
||||
FWSTR = $(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME))))
|
||||
comma := ,
|
||||
FWSTR = $(subst $(comma),_,$(subst /,_,$(subst .,_,$(subst -,_,$(FWNAME)))))
|
||||
ASM_WORD = $(if $(CONFIG_64BIT),.quad,.long)
|
||||
ASM_ALIGN = $(if $(CONFIG_64BIT),3,2)
|
||||
PROGBITS = $(if $(CONFIG_ARM),%,@)progbits
|
||||
|
|
|
|||
|
|
@ -417,18 +417,20 @@ out_free_page:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int lo_discard(struct loop_device *lo, struct request *rq, loff_t pos)
|
||||
static int lo_fallocate(struct loop_device *lo, struct request *rq, loff_t pos,
|
||||
int mode)
|
||||
{
|
||||
/*
|
||||
* We use punch hole to reclaim the free space used by the
|
||||
* image a.k.a. discard. However we do not support discard if
|
||||
* encryption is enabled, because it may give an attacker
|
||||
* useful information.
|
||||
* We use fallocate to manipulate the space mappings used by the image
|
||||
* a.k.a. discard/zerorange. However we do not support this if
|
||||
* encryption is enabled, because it may give an attacker useful
|
||||
* information.
|
||||
*/
|
||||
struct file *file = lo->lo_backing_file;
|
||||
int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
|
||||
int ret;
|
||||
|
||||
mode |= FALLOC_FL_KEEP_SIZE;
|
||||
|
||||
if ((!file->f_op->fallocate) || lo->lo_encrypt_key_size) {
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
|
|
@ -596,9 +598,17 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
|
|||
switch (req_op(rq)) {
|
||||
case REQ_OP_FLUSH:
|
||||
return lo_req_flush(lo, rq);
|
||||
case REQ_OP_DISCARD:
|
||||
case REQ_OP_WRITE_ZEROES:
|
||||
return lo_discard(lo, rq, pos);
|
||||
/*
|
||||
* If the caller doesn't want deallocation, call zeroout to
|
||||
* write zeroes the range. Otherwise, punch them out.
|
||||
*/
|
||||
return lo_fallocate(lo, rq, pos,
|
||||
(rq->cmd_flags & REQ_NOUNMAP) ?
|
||||
FALLOC_FL_ZERO_RANGE :
|
||||
FALLOC_FL_PUNCH_HOLE);
|
||||
case REQ_OP_DISCARD:
|
||||
return lo_fallocate(lo, rq, pos, FALLOC_FL_PUNCH_HOLE);
|
||||
case REQ_OP_WRITE:
|
||||
if (lo->transfer)
|
||||
return lo_write_transfer(lo, rq, pos);
|
||||
|
|
|
|||
|
|
@ -1296,10 +1296,10 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *b
|
|||
mutex_unlock(&nbd->config_lock);
|
||||
ret = wait_event_interruptible(config->recv_wq,
|
||||
atomic_read(&config->recv_threads) == 0);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
sock_shutdown(nbd);
|
||||
flush_workqueue(nbd->recv_workq);
|
||||
}
|
||||
flush_workqueue(nbd->recv_workq);
|
||||
|
||||
mutex_lock(&nbd->config_lock);
|
||||
nbd_bdev_reset(bdev);
|
||||
/* user requested, ignore socket errors */
|
||||
|
|
|
|||
|
|
@ -3807,8 +3807,8 @@ static int btusb_probe(struct usb_interface *intf,
|
|||
btusb_check_needs_reset_resume(intf);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_BT_HCIBTUSB_RTL
|
||||
if (id->driver_info & BTUSB_REALTEK) {
|
||||
if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
|
||||
(id->driver_info & BTUSB_REALTEK)) {
|
||||
hdev->setup = btrtl_setup_realtek;
|
||||
hdev->shutdown = btrtl_shutdown_realtek;
|
||||
hdev->cmd_timeout = btusb_rtl_cmd_timeout;
|
||||
|
|
@ -3819,7 +3819,6 @@ static int btusb_probe(struct usb_interface *intf,
|
|||
*/
|
||||
set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (id->driver_info & BTUSB_AMP) {
|
||||
/* AMP controllers do not support SCO packets */
|
||||
|
|
|
|||
|
|
@ -121,7 +121,8 @@ static int omap3_rom_rng_remove(struct platform_device *pdev)
|
|||
{
|
||||
cancel_delayed_work_sync(&idle_work);
|
||||
hwrng_unregister(&omap3_rom_rng_ops);
|
||||
clk_disable_unprepare(rng_clk);
|
||||
if (!rng_idle)
|
||||
clk_disable_unprepare(rng_clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -448,6 +448,8 @@ enum ipmi_stat_indexes {
|
|||
|
||||
#define IPMI_IPMB_NUM_SEQ 64
|
||||
struct ipmi_smi {
|
||||
struct module *owner;
|
||||
|
||||
/* What interface number are we? */
|
||||
int intf_num;
|
||||
|
||||
|
|
@ -1220,6 +1222,11 @@ int ipmi_create_user(unsigned int if_num,
|
|||
if (rv)
|
||||
goto out_kfree;
|
||||
|
||||
if (!try_module_get(intf->owner)) {
|
||||
rv = -ENODEV;
|
||||
goto out_kfree;
|
||||
}
|
||||
|
||||
/* Note that each existing user holds a refcount to the interface. */
|
||||
kref_get(&intf->refcount);
|
||||
|
||||
|
|
@ -1349,6 +1356,7 @@ static void _ipmi_destroy_user(struct ipmi_user *user)
|
|||
}
|
||||
|
||||
kref_put(&intf->refcount, intf_free);
|
||||
module_put(intf->owner);
|
||||
}
|
||||
|
||||
int ipmi_destroy_user(struct ipmi_user *user)
|
||||
|
|
@ -2459,7 +2467,7 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc)
|
|||
* been recently fetched, this will just use the cached data. Otherwise
|
||||
* it will run a new fetch.
|
||||
*
|
||||
* Except for the first time this is called (in ipmi_register_smi()),
|
||||
* Except for the first time this is called (in ipmi_add_smi()),
|
||||
* this will always return good data;
|
||||
*/
|
||||
static int __bmc_get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc,
|
||||
|
|
@ -3377,10 +3385,11 @@ static void redo_bmc_reg(struct work_struct *work)
|
|||
kref_put(&intf->refcount, intf_free);
|
||||
}
|
||||
|
||||
int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
|
||||
void *send_info,
|
||||
struct device *si_dev,
|
||||
unsigned char slave_addr)
|
||||
int ipmi_add_smi(struct module *owner,
|
||||
const struct ipmi_smi_handlers *handlers,
|
||||
void *send_info,
|
||||
struct device *si_dev,
|
||||
unsigned char slave_addr)
|
||||
{
|
||||
int i, j;
|
||||
int rv;
|
||||
|
|
@ -3406,7 +3415,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
|
|||
return rv;
|
||||
}
|
||||
|
||||
|
||||
intf->owner = owner;
|
||||
intf->bmc = &intf->tmp_bmc;
|
||||
INIT_LIST_HEAD(&intf->bmc->intfs);
|
||||
mutex_init(&intf->bmc->dyn_mutex);
|
||||
|
|
@ -3514,7 +3523,7 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
|
|||
|
||||
return rv;
|
||||
}
|
||||
EXPORT_SYMBOL(ipmi_register_smi);
|
||||
EXPORT_SYMBOL(ipmi_add_smi);
|
||||
|
||||
static void deliver_smi_err_response(struct ipmi_smi *intf,
|
||||
struct ipmi_smi_msg *msg,
|
||||
|
|
|
|||
|
|
@ -61,6 +61,12 @@ static void tpm_dev_async_work(struct work_struct *work)
|
|||
|
||||
mutex_lock(&priv->buffer_mutex);
|
||||
priv->command_enqueued = false;
|
||||
ret = tpm_try_get_ops(priv->chip);
|
||||
if (ret) {
|
||||
priv->response_length = ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = tpm_dev_transmit(priv->chip, priv->space, priv->data_buffer,
|
||||
sizeof(priv->data_buffer));
|
||||
tpm_put_ops(priv->chip);
|
||||
|
|
@ -68,6 +74,7 @@ static void tpm_dev_async_work(struct work_struct *work)
|
|||
priv->response_length = ret;
|
||||
mod_timer(&priv->user_read_timer, jiffies + (120 * HZ));
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&priv->buffer_mutex);
|
||||
wake_up_interruptible(&priv->async_wait);
|
||||
}
|
||||
|
|
@ -204,6 +211,7 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
|
|||
if (file->f_flags & O_NONBLOCK) {
|
||||
priv->command_enqueued = true;
|
||||
queue_work(tpm_dev_wq, &priv->async_work);
|
||||
tpm_put_ops(priv->chip);
|
||||
mutex_unlock(&priv->buffer_mutex);
|
||||
return size;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -899,13 +899,13 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
|
||||
if (wait_startup(chip, 0) != 0) {
|
||||
rc = -ENODEV;
|
||||
goto out_err;
|
||||
goto err_start;
|
||||
}
|
||||
|
||||
/* Take control of the TPM's interrupt hardware and shut it off */
|
||||
rc = tpm_tis_read32(priv, TPM_INT_ENABLE(priv->locality), &intmask);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
goto err_start;
|
||||
|
||||
intmask |= TPM_INTF_CMD_READY_INT | TPM_INTF_LOCALITY_CHANGE_INT |
|
||||
TPM_INTF_DATA_AVAIL_INT | TPM_INTF_STS_VALID_INT;
|
||||
|
|
@ -914,21 +914,21 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
|
||||
rc = tpm_chip_start(chip);
|
||||
if (rc)
|
||||
goto out_err;
|
||||
goto err_start;
|
||||
|
||||
rc = tpm2_probe(chip);
|
||||
tpm_chip_stop(chip);
|
||||
if (rc)
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
|
||||
rc = tpm_tis_read32(priv, TPM_DID_VID(0), &vendor);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
|
||||
priv->manufacturer_id = vendor;
|
||||
|
||||
rc = tpm_tis_read8(priv, TPM_RID(0), &rid);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
|
||||
dev_info(dev, "%s TPM (device-id 0x%X, rev-id %d)\n",
|
||||
(chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2",
|
||||
|
|
@ -937,13 +937,13 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
probe = probe_itpm(chip);
|
||||
if (probe < 0) {
|
||||
rc = -ENODEV;
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
}
|
||||
|
||||
/* Figure out the capabilities */
|
||||
rc = tpm_tis_read32(priv, TPM_INTF_CAPS(priv->locality), &intfcaps);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
|
||||
dev_dbg(dev, "TPM interface capabilities (0x%x):\n",
|
||||
intfcaps);
|
||||
|
|
@ -977,10 +977,9 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
if (tpm_get_timeouts(chip)) {
|
||||
dev_err(dev, "Could not get TPM timeouts and durations\n");
|
||||
rc = -ENODEV;
|
||||
goto out_err;
|
||||
goto err_probe;
|
||||
}
|
||||
|
||||
tpm_chip_start(chip);
|
||||
chip->flags |= TPM_CHIP_FLAG_IRQ;
|
||||
if (irq) {
|
||||
tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
|
||||
|
|
@ -991,18 +990,20 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
} else {
|
||||
tpm_tis_probe_irq(chip, intmask);
|
||||
}
|
||||
tpm_chip_stop(chip);
|
||||
}
|
||||
|
||||
tpm_chip_stop(chip);
|
||||
|
||||
rc = tpm_chip_register(chip);
|
||||
if (rc)
|
||||
goto out_err;
|
||||
|
||||
if (chip->ops->clk_enable != NULL)
|
||||
chip->ops->clk_enable(chip, false);
|
||||
goto err_start;
|
||||
|
||||
return 0;
|
||||
out_err:
|
||||
|
||||
err_probe:
|
||||
tpm_chip_stop(chip);
|
||||
|
||||
err_start:
|
||||
if ((chip->ops != NULL) && (chip->ops->clk_enable != NULL))
|
||||
chip->ops->clk_enable(chip, false);
|
||||
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ struct clk *imx8m_clk_composite_flags(const char *name,
|
|||
mux->reg = reg;
|
||||
mux->shift = PCG_PCS_SHIFT;
|
||||
mux->mask = PCG_PCS_MASK;
|
||||
mux->lock = &imx_ccm_lock;
|
||||
|
||||
div = kzalloc(sizeof(*div), GFP_KERNEL);
|
||||
if (!div)
|
||||
|
|
@ -161,6 +162,7 @@ struct clk *imx8m_clk_composite_flags(const char *name,
|
|||
gate_hw = &gate->hw;
|
||||
gate->reg = reg;
|
||||
gate->bit_idx = PCG_CGC_SHIFT;
|
||||
gate->lock = &imx_ccm_lock;
|
||||
|
||||
hw = clk_hw_register_composite(NULL, name, parent_names, num_parents,
|
||||
mux_hw, &clk_mux_ops, div_hw,
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ static const struct clk_div_table ulp_div_table[] = {
|
|||
{ .val = 5, .div = 16, },
|
||||
{ .val = 6, .div = 32, },
|
||||
{ .val = 7, .div = 64, },
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
static const int pcc2_uart_clk_ids[] __initconst = {
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ static int clk_pll14xx_wait_lock(struct clk_pll14xx *pll)
|
|||
{
|
||||
u32 val;
|
||||
|
||||
return readl_poll_timeout(pll->base, val, val & LOCK_TIMEOUT_US, 0,
|
||||
return readl_poll_timeout(pll->base, val, val & LOCK_STATUS, 0,
|
||||
LOCK_TIMEOUT_US);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -180,4 +180,4 @@ create_pdev:
|
|||
-1, data,
|
||||
sizeof(struct cpufreq_dt_platform_data)));
|
||||
}
|
||||
device_initcall(cpufreq_dt_platdev_init);
|
||||
core_initcall(cpufreq_dt_platdev_init);
|
||||
|
|
|
|||
|
|
@ -2673,6 +2673,13 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
|
|||
if (cpufreq_disabled())
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* The cpufreq core depends heavily on the availability of device
|
||||
* structure, make sure they are available before proceeding further.
|
||||
*/
|
||||
if (!get_cpu_device(0))
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
if (!driver_data || !driver_data->verify || !driver_data->init ||
|
||||
!(driver_data->setpolicy || driver_data->target_index ||
|
||||
driver_data->target) ||
|
||||
|
|
|
|||
|
|
@ -346,7 +346,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||
return CPU_FREQ_GOV_CONSERVATIVE;
|
||||
}
|
||||
|
||||
fs_initcall(cpufreq_gov_dbs_init);
|
||||
core_initcall(cpufreq_gov_dbs_init);
|
||||
#else
|
||||
module_init(cpufreq_gov_dbs_init);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -483,7 +483,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||
return CPU_FREQ_GOV_ONDEMAND;
|
||||
}
|
||||
|
||||
fs_initcall(cpufreq_gov_dbs_init);
|
||||
core_initcall(cpufreq_gov_dbs_init);
|
||||
#else
|
||||
module_init(cpufreq_gov_dbs_init);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -50,5 +50,5 @@ MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>");
|
|||
MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
fs_initcall(cpufreq_gov_performance_init);
|
||||
core_initcall(cpufreq_gov_performance_init);
|
||||
module_exit(cpufreq_gov_performance_exit);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||
return &cpufreq_gov_powersave;
|
||||
}
|
||||
|
||||
fs_initcall(cpufreq_gov_powersave_init);
|
||||
core_initcall(cpufreq_gov_powersave_init);
|
||||
#else
|
||||
module_init(cpufreq_gov_powersave_init);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||
return &cpufreq_gov_userspace;
|
||||
}
|
||||
|
||||
fs_initcall(cpufreq_gov_userspace_init);
|
||||
core_initcall(cpufreq_gov_userspace_init);
|
||||
#else
|
||||
module_init(cpufreq_gov_userspace_init);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
static struct platform_device *cpufreq_dt_pdev, *sun50i_cpufreq_pdev;
|
||||
|
||||
/**
|
||||
* sun50i_cpufreq_get_efuse() - Parse and return efuse value present on SoC
|
||||
* sun50i_cpufreq_get_efuse() - Determine speed grade from efuse value
|
||||
* @versions: Set to the value parsed from efuse
|
||||
*
|
||||
* Returns 0 if success.
|
||||
|
|
@ -69,21 +69,16 @@ static int sun50i_cpufreq_get_efuse(u32 *versions)
|
|||
return PTR_ERR(speedbin);
|
||||
|
||||
efuse_value = (*speedbin >> NVMEM_SHIFT) & NVMEM_MASK;
|
||||
switch (efuse_value) {
|
||||
case 0b0001:
|
||||
*versions = 1;
|
||||
break;
|
||||
case 0b0011:
|
||||
*versions = 2;
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* For other situations, we treat it as bin0.
|
||||
* This vf table can be run for any good cpu.
|
||||
*/
|
||||
|
||||
/*
|
||||
* We treat unexpected efuse values as if the SoC was from
|
||||
* the slowest bin. Expected efuse values are 1-3, slowest
|
||||
* to fastest.
|
||||
*/
|
||||
if (efuse_value >= 1 && efuse_value <= 3)
|
||||
*versions = efuse_value - 1;
|
||||
else
|
||||
*versions = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
kfree(speedbin);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ struct atmel_aes_xts_ctx {
|
|||
u32 key2[AES_KEYSIZE_256 / sizeof(u32)];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
struct atmel_aes_authenc_ctx {
|
||||
struct atmel_aes_base_ctx base;
|
||||
struct atmel_sha_authenc_ctx *auth;
|
||||
|
|
@ -157,7 +157,7 @@ struct atmel_aes_reqctx {
|
|||
u32 lastc[AES_BLOCK_SIZE / sizeof(u32)];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
struct atmel_aes_authenc_reqctx {
|
||||
struct atmel_aes_reqctx base;
|
||||
|
||||
|
|
@ -486,7 +486,7 @@ static inline bool atmel_aes_is_encrypt(const struct atmel_aes_dev *dd)
|
|||
return (dd->flags & AES_FLAGS_ENCRYPT);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
static void atmel_aes_authenc_complete(struct atmel_aes_dev *dd, int err);
|
||||
#endif
|
||||
|
||||
|
|
@ -515,7 +515,7 @@ static void atmel_aes_set_iv_as_last_ciphertext_block(struct atmel_aes_dev *dd)
|
|||
|
||||
static inline int atmel_aes_complete(struct atmel_aes_dev *dd, int err)
|
||||
{
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
if (dd->ctx->is_aead)
|
||||
atmel_aes_authenc_complete(dd, err);
|
||||
#endif
|
||||
|
|
@ -1980,7 +1980,7 @@ static struct crypto_alg aes_xts_alg = {
|
|||
}
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
/* authenc aead functions */
|
||||
|
||||
static int atmel_aes_authenc_start(struct atmel_aes_dev *dd);
|
||||
|
|
@ -2467,7 +2467,7 @@ static void atmel_aes_unregister_algs(struct atmel_aes_dev *dd)
|
|||
{
|
||||
int i;
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
if (dd->caps.has_authenc)
|
||||
for (i = 0; i < ARRAY_SIZE(aes_authenc_algs); i++)
|
||||
crypto_unregister_aead(&aes_authenc_algs[i]);
|
||||
|
|
@ -2514,7 +2514,7 @@ static int atmel_aes_register_algs(struct atmel_aes_dev *dd)
|
|||
goto err_aes_xts_alg;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
if (dd->caps.has_authenc) {
|
||||
for (i = 0; i < ARRAY_SIZE(aes_authenc_algs); i++) {
|
||||
err = crypto_register_aead(&aes_authenc_algs[i]);
|
||||
|
|
@ -2526,7 +2526,7 @@ static int atmel_aes_register_algs(struct atmel_aes_dev *dd)
|
|||
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
/* i = ARRAY_SIZE(aes_authenc_algs); */
|
||||
err_aes_authenc_alg:
|
||||
for (j = 0; j < i; j++)
|
||||
|
|
@ -2716,7 +2716,7 @@ static int atmel_aes_probe(struct platform_device *pdev)
|
|||
|
||||
atmel_aes_get_cap(aes_dd);
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
if (aes_dd->caps.has_authenc && !atmel_sha_authenc_is_ready()) {
|
||||
err = -EPROBE_DEFER;
|
||||
goto iclk_unprepare;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
#ifndef __ATMEL_AUTHENC_H__
|
||||
#define __ATMEL_AUTHENC_H__
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
|
||||
#include <crypto/authenc.h>
|
||||
#include <crypto/hash.h>
|
||||
|
|
|
|||
|
|
@ -2212,7 +2212,7 @@ static struct ahash_alg sha_hmac_algs[] = {
|
|||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
|
||||
#if IS_ENABLED(CONFIG_CRYPTO_DEV_ATMEL_AUTHENC)
|
||||
/* authenc functions */
|
||||
|
||||
static int atmel_sha_authenc_init2(struct atmel_sha_dev *dd);
|
||||
|
|
|
|||
|
|
@ -1120,6 +1120,8 @@ static int safexcel_request_ring_irq(void *pdev, int irqid,
|
|||
irq_name, irq);
|
||||
return irq;
|
||||
}
|
||||
} else {
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
ret = devm_request_threaded_irq(dev, irq, handler,
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ static int noinline_for_stack sun4i_ss_opti_poll(struct skcipher_request *areq)
|
|||
oi = 0;
|
||||
oo = 0;
|
||||
do {
|
||||
todo = min3(rx_cnt, ileft, (mi.length - oi) / 4);
|
||||
todo = min(rx_cnt, ileft);
|
||||
todo = min_t(size_t, todo, (mi.length - oi) / 4);
|
||||
if (todo) {
|
||||
ileft -= todo;
|
||||
writesl(ss->base + SS_RXFIFO, mi.addr + oi, todo);
|
||||
|
|
@ -87,7 +88,8 @@ static int noinline_for_stack sun4i_ss_opti_poll(struct skcipher_request *areq)
|
|||
rx_cnt = SS_RXFIFO_SPACES(spaces);
|
||||
tx_cnt = SS_TXFIFO_SPACES(spaces);
|
||||
|
||||
todo = min3(tx_cnt, oleft, (mo.length - oo) / 4);
|
||||
todo = min(tx_cnt, oleft);
|
||||
todo = min_t(size_t, todo, (mo.length - oo) / 4);
|
||||
if (todo) {
|
||||
oleft -= todo;
|
||||
readsl(ss->base + SS_TXFIFO, mo.addr + oo, todo);
|
||||
|
|
@ -239,7 +241,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
|||
* todo is the number of consecutive 4byte word that we
|
||||
* can read from current SG
|
||||
*/
|
||||
todo = min3(rx_cnt, ileft / 4, (mi.length - oi) / 4);
|
||||
todo = min(rx_cnt, ileft / 4);
|
||||
todo = min_t(size_t, todo, (mi.length - oi) / 4);
|
||||
if (todo && !ob) {
|
||||
writesl(ss->base + SS_RXFIFO, mi.addr + oi,
|
||||
todo);
|
||||
|
|
@ -253,8 +256,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
|||
* we need to be able to write all buf in one
|
||||
* pass, so it is why we min() with rx_cnt
|
||||
*/
|
||||
todo = min3(rx_cnt * 4 - ob, ileft,
|
||||
mi.length - oi);
|
||||
todo = min(rx_cnt * 4 - ob, ileft);
|
||||
todo = min_t(size_t, todo, mi.length - oi);
|
||||
memcpy(buf + ob, mi.addr + oi, todo);
|
||||
ileft -= todo;
|
||||
oi += todo;
|
||||
|
|
@ -274,7 +277,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
|||
spaces = readl(ss->base + SS_FCSR);
|
||||
rx_cnt = SS_RXFIFO_SPACES(spaces);
|
||||
tx_cnt = SS_TXFIFO_SPACES(spaces);
|
||||
dev_dbg(ss->dev, "%x %u/%u %u/%u cnt=%u %u/%u %u/%u cnt=%u %u\n",
|
||||
dev_dbg(ss->dev,
|
||||
"%x %u/%zu %u/%u cnt=%u %u/%zu %u/%u cnt=%u %u\n",
|
||||
mode,
|
||||
oi, mi.length, ileft, areq->cryptlen, rx_cnt,
|
||||
oo, mo.length, oleft, areq->cryptlen, tx_cnt, ob);
|
||||
|
|
@ -282,7 +286,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
|||
if (!tx_cnt)
|
||||
continue;
|
||||
/* todo in 4bytes word */
|
||||
todo = min3(tx_cnt, oleft / 4, (mo.length - oo) / 4);
|
||||
todo = min(tx_cnt, oleft / 4);
|
||||
todo = min_t(size_t, todo, (mo.length - oo) / 4);
|
||||
if (todo) {
|
||||
readsl(ss->base + SS_TXFIFO, mo.addr + oo, todo);
|
||||
oleft -= todo * 4;
|
||||
|
|
@ -308,7 +313,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
|||
* no more than remaining buffer
|
||||
* no need to test against oleft
|
||||
*/
|
||||
todo = min(mo.length - oo, obl - obo);
|
||||
todo = min_t(size_t,
|
||||
mo.length - oo, obl - obo);
|
||||
memcpy(mo.addr + oo, bufo + obo, todo);
|
||||
oleft -= todo;
|
||||
obo += todo;
|
||||
|
|
|
|||
|
|
@ -272,8 +272,8 @@ static int sun4i_hash(struct ahash_request *areq)
|
|||
*/
|
||||
while (op->len < 64 && i < end) {
|
||||
/* how many bytes we can read from current SG */
|
||||
in_r = min3(mi.length - in_i, end - i,
|
||||
64 - op->len);
|
||||
in_r = min(end - i, 64 - op->len);
|
||||
in_r = min_t(size_t, mi.length - in_i, in_r);
|
||||
memcpy(op->buf + op->len, mi.addr + in_i, in_r);
|
||||
op->len += in_r;
|
||||
i += in_r;
|
||||
|
|
@ -293,8 +293,8 @@ static int sun4i_hash(struct ahash_request *areq)
|
|||
}
|
||||
if (mi.length - in_i > 3 && i < end) {
|
||||
/* how many bytes we can read from current SG */
|
||||
in_r = min3(mi.length - in_i, areq->nbytes - i,
|
||||
((mi.length - in_i) / 4) * 4);
|
||||
in_r = min_t(size_t, mi.length - in_i, areq->nbytes - i);
|
||||
in_r = min_t(size_t, ((mi.length - in_i) / 4) * 4, in_r);
|
||||
/* how many bytes we can write in the device*/
|
||||
todo = min3((u32)(end - i) / 4, rx_cnt, (u32)in_r / 4);
|
||||
writesl(ss->base + SS_RXFIFO, mi.addr + in_i, todo);
|
||||
|
|
@ -320,8 +320,8 @@ static int sun4i_hash(struct ahash_request *areq)
|
|||
if ((areq->nbytes - i) < 64) {
|
||||
while (i < areq->nbytes && in_i < mi.length && op->len < 64) {
|
||||
/* how many bytes we can read from current SG */
|
||||
in_r = min3(mi.length - in_i, areq->nbytes - i,
|
||||
64 - op->len);
|
||||
in_r = min(areq->nbytes - i, 64 - op->len);
|
||||
in_r = min_t(size_t, mi.length - in_i, in_r);
|
||||
memcpy(op->buf + op->len, mi.addr + in_i, in_r);
|
||||
op->len += in_r;
|
||||
i += in_r;
|
||||
|
|
|
|||
|
|
@ -105,8 +105,6 @@ virtio_crypto_alg_validate_key(int key_len, uint32_t *alg)
|
|||
*alg = VIRTIO_CRYPTO_CIPHER_AES_CBC;
|
||||
break;
|
||||
default:
|
||||
pr_err("virtio_crypto: Unsupported key length: %d\n",
|
||||
key_len);
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -484,6 +482,11 @@ static int virtio_crypto_ablkcipher_encrypt(struct ablkcipher_request *req)
|
|||
/* Use the first data virtqueue as default */
|
||||
struct data_queue *data_vq = &vcrypto->data_vq[0];
|
||||
|
||||
if (!req->nbytes)
|
||||
return 0;
|
||||
if (req->nbytes % AES_BLOCK_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
vc_req->dataq = data_vq;
|
||||
vc_req->alg_cb = virtio_crypto_dataq_sym_callback;
|
||||
vc_sym_req->ablkcipher_ctx = ctx;
|
||||
|
|
@ -504,6 +507,11 @@ static int virtio_crypto_ablkcipher_decrypt(struct ablkcipher_request *req)
|
|||
/* Use the first data virtqueue as default */
|
||||
struct data_queue *data_vq = &vcrypto->data_vq[0];
|
||||
|
||||
if (!req->nbytes)
|
||||
return 0;
|
||||
if (req->nbytes % AES_BLOCK_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
vc_req->dataq = data_vq;
|
||||
vc_req->alg_cb = virtio_crypto_dataq_sym_callback;
|
||||
vc_sym_req->ablkcipher_ctx = ctx;
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@ obj-$(CONFIG_CRYPTO_DEV_VMX_ENCRYPT) += vmx-crypto.o
|
|||
vmx-crypto-objs := vmx.o aesp8-ppc.o ghashp8-ppc.o aes.o aes_cbc.o aes_ctr.o aes_xts.o ghash.o
|
||||
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
TARGET := linux-ppc64le
|
||||
override flavour := linux-ppc64le
|
||||
else
|
||||
TARGET := linux-ppc64
|
||||
override flavour := linux-ppc64
|
||||
endif
|
||||
|
||||
quiet_cmd_perl = PERL $@
|
||||
cmd_perl = $(PERL) $(<) $(TARGET) > $(@)
|
||||
cmd_perl = $(PERL) $(<) $(flavour) > $(@)
|
||||
|
||||
targets += aesp8-ppc.S ghashp8-ppc.S
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ static struct sync_file *sync_file_merge(const char *name, struct sync_file *a,
|
|||
a_fences = get_fences(a, &a_num_fences);
|
||||
b_fences = get_fences(b, &b_num_fences);
|
||||
if (a_num_fences > INT_MAX - b_num_fences)
|
||||
return NULL;
|
||||
goto err;
|
||||
|
||||
num_fences = a_num_fences + b_num_fences;
|
||||
|
||||
|
|
|
|||
|
|
@ -2936,6 +2936,7 @@ static int init_csrows_df(struct mem_ctl_info *mci)
|
|||
dimm->mtype = pvt->dram_type;
|
||||
dimm->edac_mode = edac_mode;
|
||||
dimm->dtype = dev_type;
|
||||
dimm->grain = 64;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3012,6 +3013,7 @@ static int init_csrows(struct mem_ctl_info *mci)
|
|||
dimm = csrow->channels[j]->dimm;
|
||||
dimm->mtype = pvt->dram_type;
|
||||
dimm->edac_mode = edac_mode;
|
||||
dimm->grain = 64;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
|
|||
/* Cleans the error report buffer */
|
||||
memset(e, 0, sizeof (*e));
|
||||
e->error_count = 1;
|
||||
e->grain = 1;
|
||||
strcpy(e->label, "unknown label");
|
||||
e->msg = pvt->msg;
|
||||
e->other_detail = pvt->other_detail;
|
||||
|
|
@ -326,7 +327,7 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
|
|||
|
||||
/* Error grain */
|
||||
if (mem_err->validation_bits & CPER_MEM_VALID_PA_MASK)
|
||||
e->grain = ~(mem_err->physical_addr_mask & ~PAGE_MASK);
|
||||
e->grain = ~mem_err->physical_addr_mask + 1;
|
||||
|
||||
/* Memory error location, mapped on e->location */
|
||||
p = e->location;
|
||||
|
|
@ -442,8 +443,13 @@ void ghes_edac_report_mem_error(int sev, struct cper_sec_mem_err *mem_err)
|
|||
if (p > pvt->other_detail)
|
||||
*(p - 1) = '\0';
|
||||
|
||||
/* Sanity-check driver-supplied grain value. */
|
||||
if (WARN_ON_ONCE(!e->grain))
|
||||
e->grain = 1;
|
||||
|
||||
grain_bits = fls_long(e->grain - 1);
|
||||
|
||||
/* Generate the trace event */
|
||||
grain_bits = fls_long(e->grain);
|
||||
snprintf(pvt->detail_location, sizeof(pvt->detail_location),
|
||||
"APEI location: %s %s", e->location, e->other_detail);
|
||||
trace_mc_event(type, e->msg, e->label, e->error_count,
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ struct sm5502_muic_info {
|
|||
/* Default value of SM5502 register to bring up MUIC device. */
|
||||
static struct reg_data sm5502_reg_data[] = {
|
||||
{
|
||||
.reg = SM5502_REG_RESET,
|
||||
.val = SM5502_REG_RESET_MASK,
|
||||
.invert = true,
|
||||
}, {
|
||||
.reg = SM5502_REG_CONTROL,
|
||||
.val = SM5502_REG_CONTROL_MASK_INT_MASK,
|
||||
.invert = false,
|
||||
|
|
|
|||
|
|
@ -237,6 +237,8 @@ enum sm5502_reg {
|
|||
#define DM_DP_SWITCH_UART ((DM_DP_CON_SWITCH_UART <<SM5502_REG_MANUAL_SW1_DP_SHIFT) \
|
||||
| (DM_DP_CON_SWITCH_UART <<SM5502_REG_MANUAL_SW1_DM_SHIFT))
|
||||
|
||||
#define SM5502_REG_RESET_MASK (0x1)
|
||||
|
||||
/* SM5502 Interrupts */
|
||||
enum sm5502_irq {
|
||||
/* INT1 */
|
||||
|
|
|
|||
|
|
@ -970,6 +970,24 @@ static int __init efi_memreserve_map_root(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
|
||||
{
|
||||
struct resource *res, *parent;
|
||||
|
||||
res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
|
||||
if (!res)
|
||||
return -ENOMEM;
|
||||
|
||||
res->name = "reserved";
|
||||
res->flags = IORESOURCE_MEM;
|
||||
res->start = addr;
|
||||
res->end = addr + size - 1;
|
||||
|
||||
/* we expect a conflict with a 'System RAM' region */
|
||||
parent = request_resource_conflict(&iomem_resource, res);
|
||||
return parent ? request_resource(parent, res) : 0;
|
||||
}
|
||||
|
||||
int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
|
||||
{
|
||||
struct linux_efi_memreserve *rsv;
|
||||
|
|
@ -994,7 +1012,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
|
|||
rsv->entry[index].size = size;
|
||||
|
||||
memunmap(rsv);
|
||||
return 0;
|
||||
return efi_mem_reserve_iomem(addr, size);
|
||||
}
|
||||
memunmap(rsv);
|
||||
}
|
||||
|
|
@ -1004,6 +1022,12 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
|
|||
if (!rsv)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = efi_mem_reserve_iomem(__pa(rsv), SZ_4K);
|
||||
if (rc) {
|
||||
free_page((unsigned long)rsv);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* The memremap() call above assumes that a linux_efi_memreserve entry
|
||||
* never crosses a page boundary, so let's ensure that this remains true
|
||||
|
|
@ -1020,7 +1044,7 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
|
|||
efi_memreserve_root->next = __pa(rsv);
|
||||
spin_unlock(&efi_mem_reserve_persistent_lock);
|
||||
|
||||
return 0;
|
||||
return efi_mem_reserve_iomem(addr, size);
|
||||
}
|
||||
|
||||
static int __init efi_memreserve_root_init(void)
|
||||
|
|
|
|||
|
|
@ -544,6 +544,31 @@ static int fsi_slave_scan(struct fsi_slave *slave)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long aligned_access_size(size_t offset, size_t count)
|
||||
{
|
||||
unsigned long offset_unit, count_unit;
|
||||
|
||||
/* Criteria:
|
||||
*
|
||||
* 1. Access size must be less than or equal to the maximum access
|
||||
* width or the highest power-of-two factor of offset
|
||||
* 2. Access size must be less than or equal to the amount specified by
|
||||
* count
|
||||
*
|
||||
* The access width is optimal if we can calculate 1 to be strictly
|
||||
* equal while still satisfying 2.
|
||||
*/
|
||||
|
||||
/* Find 1 by the bottom bit of offset (with a 4 byte access cap) */
|
||||
offset_unit = BIT(__builtin_ctzl(offset | 4));
|
||||
|
||||
/* Find 2 by the top bit of count */
|
||||
count_unit = BIT(8 * sizeof(unsigned long) - 1 - __builtin_clzl(count));
|
||||
|
||||
/* Constrain the maximum access width to the minimum of both criteria */
|
||||
return BIT(__builtin_ctzl(offset_unit | count_unit));
|
||||
}
|
||||
|
||||
static ssize_t fsi_slave_sysfs_raw_read(struct file *file,
|
||||
struct kobject *kobj, struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
|
|
@ -559,8 +584,7 @@ static ssize_t fsi_slave_sysfs_raw_read(struct file *file,
|
|||
return -EINVAL;
|
||||
|
||||
for (total_len = 0; total_len < count; total_len += read_len) {
|
||||
read_len = min_t(size_t, count, 4);
|
||||
read_len -= off & 0x3;
|
||||
read_len = aligned_access_size(off, count - total_len);
|
||||
|
||||
rc = fsi_slave_read(slave, off, buf + total_len, read_len);
|
||||
if (rc)
|
||||
|
|
@ -587,8 +611,7 @@ static ssize_t fsi_slave_sysfs_raw_write(struct file *file,
|
|||
return -EINVAL;
|
||||
|
||||
for (total_len = 0; total_len < count; total_len += write_len) {
|
||||
write_len = min_t(size_t, count, 4);
|
||||
write_len -= off & 0x3;
|
||||
write_len = aligned_access_size(off, count - total_len);
|
||||
|
||||
rc = fsi_slave_write(slave, off, buf + total_len, write_len);
|
||||
if (rc)
|
||||
|
|
|
|||
|
|
@ -54,4 +54,19 @@ config GNSS_UBX_SERIAL
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config GNSS_CMDLINE_SERIAL
|
||||
tristate "Command line test driver for GNSS"
|
||||
depends on SERIAL_DEV_BUS
|
||||
select GNSS_SERIAL
|
||||
---help---
|
||||
Say Y here if you want to test the GNSS subsystem but do not have a
|
||||
way to communicate a binding through firmware such as DT or ACPI.
|
||||
The correct serdev device and protocol type must be specified on
|
||||
the module command line.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called gnss-cmdline.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
endif # GNSS
|
||||
|
|
|
|||
|
|
@ -17,3 +17,6 @@ gnss-sirf-y := sirf.o
|
|||
|
||||
obj-$(CONFIG_GNSS_UBX_SERIAL) += gnss-ubx.o
|
||||
gnss-ubx-y := ubx.o
|
||||
|
||||
obj-$(CONFIG_GNSS_CMDLINE_SERIAL) += gnss-cmdline.o
|
||||
gnss-cmdline-y := cmdline.o
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue