mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
Merge 61556703b6 ("Merge tag 'for-linus-5.11-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml") into android-mainline
Fix up a UML revert we had to apply, and more steps on the way to 5.11-rc7 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I723321f5f8994d51add7a0aff22f972bfb4f43cf
This commit is contained in:
commit
a5b753aafb
12
MAINTAINERS
12
MAINTAINERS
|
|
@ -2616,8 +2616,8 @@ S: Maintained
|
|||
F: drivers/power/reset/keystone-reset.c
|
||||
|
||||
ARM/TEXAS INSTRUMENTS K3 ARCHITECTURE
|
||||
M: Tero Kristo <t-kristo@ti.com>
|
||||
M: Nishanth Menon <nm@ti.com>
|
||||
M: Tero Kristo <kristo@kernel.org>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/arm/ti/k3.yaml
|
||||
|
|
@ -6474,9 +6474,9 @@ S: Maintained
|
|||
F: drivers/edac/skx_*.[ch]
|
||||
|
||||
EDAC-TI
|
||||
M: Tero Kristo <t-kristo@ti.com>
|
||||
M: Tero Kristo <kristo@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Odd Fixes
|
||||
F: drivers/edac/ti_edac.c
|
||||
|
||||
EDIROL UA-101/UA-1000 DRIVER
|
||||
|
|
@ -17585,7 +17585,7 @@ F: include/linux/dma/k3-psil.h
|
|||
|
||||
TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE (TISCI) PROTOCOL DRIVER
|
||||
M: Nishanth Menon <nm@ti.com>
|
||||
M: Tero Kristo <t-kristo@ti.com>
|
||||
M: Tero Kristo <kristo@kernel.org>
|
||||
M: Santosh Shilimkar <ssantosh@kernel.org>
|
||||
L: linux-arm-kernel@lists.infradead.org
|
||||
S: Maintained
|
||||
|
|
@ -17729,9 +17729,9 @@ S: Maintained
|
|||
F: drivers/clk/clk-cdce706.c
|
||||
|
||||
TI CLOCK DRIVER
|
||||
M: Tero Kristo <t-kristo@ti.com>
|
||||
M: Tero Kristo <kristo@kernel.org>
|
||||
L: linux-omap@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Odd Fixes
|
||||
F: drivers/clk/ti/
|
||||
F: include/linux/clk/ti.h
|
||||
|
||||
|
|
|
|||
|
|
@ -326,9 +326,6 @@ clk: clock-controller@0 {
|
|||
|
||||
clocks = <&xtal_32k>, <&xtal>;
|
||||
clock-names = "xtal_32k", "xtal";
|
||||
|
||||
assigned-clocks = <&clk LPC32XX_CLK_HCLK_PLL>;
|
||||
assigned-clock-rates = <208000000>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ spi_lcd: spi_lcd {
|
|||
gpio-sck = <&gpio1 12 GPIO_ACTIVE_HIGH>;
|
||||
gpio-miso = <&gpio1 18 GPIO_ACTIVE_HIGH>;
|
||||
gpio-mosi = <&gpio1 20 GPIO_ACTIVE_HIGH>;
|
||||
cs-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
|
||||
cs-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
|
||||
num-chipselects = <1>;
|
||||
|
||||
/* lcd panel */
|
||||
|
|
@ -124,7 +124,6 @@ lcd: td028ttec1@0 {
|
|||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
spi-cs-high;
|
||||
|
||||
backlight= <&backlight>;
|
||||
label = "lcd";
|
||||
|
|
|
|||
|
|
@ -16,8 +16,13 @@ volume_down {
|
|||
debounce-interval = <10>;
|
||||
};
|
||||
|
||||
/*
|
||||
* We use pad 0x4a100116 abe_dmic_din3.gpio_122 as the irq instead
|
||||
* of the gpio interrupt to avoid lost events in deeper idle states.
|
||||
*/
|
||||
slider {
|
||||
label = "Keypad Slide";
|
||||
interrupts-extended = <&omap4_pmx_core 0xd6>;
|
||||
gpios = <&gpio4 26 GPIO_ACTIVE_HIGH>; /* gpio122 */
|
||||
linux,input-type = <EV_SW>;
|
||||
linux,code = <SW_KEYPAD_SLIDE>;
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ &gpiob {
|
|||
* during TX anyway and that it only controls drive enable DE
|
||||
* line. Hence, the RX is always enabled here.
|
||||
*/
|
||||
rs485-rx-en {
|
||||
rs485-rx-en-hog {
|
||||
gpio-hog;
|
||||
gpios = <8 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <8 0>;
|
||||
output-low;
|
||||
line-name = "rs485-rx-en";
|
||||
};
|
||||
|
|
@ -61,9 +61,9 @@ &gpioi {
|
|||
* order to reset the Hub when USB bus is powered down, but
|
||||
* so far there is no such functionality.
|
||||
*/
|
||||
usb-hub {
|
||||
usb-hub-hog {
|
||||
gpio-hog;
|
||||
gpios = <2 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <2 0>;
|
||||
output-high;
|
||||
line-name = "usb-hub-reset";
|
||||
};
|
||||
|
|
@ -87,6 +87,12 @@ eeprom@50 {
|
|||
};
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
touchscreen@49 {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
&i2c5 { /* TP7/TP8 */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c5_pins_a>;
|
||||
|
|
@ -104,7 +110,7 @@ &sdmmc3 {
|
|||
* are used for on-board microSD slot instead.
|
||||
*/
|
||||
/delete-property/broken-cd;
|
||||
cd-gpios = <&gpioi 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
cd-gpios = <&gpioi 10 GPIO_ACTIVE_HIGH>;
|
||||
disable-wp;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -43,9 +43,9 @@ &gpioa {
|
|||
* in order to turn on port power when USB bus is powered up, but so
|
||||
* far there is no such functionality.
|
||||
*/
|
||||
usb-port-power {
|
||||
usb-port-power-hog {
|
||||
gpio-hog;
|
||||
gpios = <13 GPIO_ACTIVE_LOW>;
|
||||
gpios = <13 0>;
|
||||
output-low;
|
||||
line-name = "usb-port-power";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -390,7 +390,8 @@ &sdmmc1 {
|
|||
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_dir_pins_a>;
|
||||
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a &sdmmc1_dir_sleep_pins_a>;
|
||||
broken-cd;
|
||||
cd-gpios = <&gpiog 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||
disable-wp;
|
||||
st,sig-dir;
|
||||
st,neg-edge;
|
||||
st,use-ckin;
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ &gmac {
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&gmac_rgmii_pins>;
|
||||
phy-handle = <&phy1>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
phy-supply = <®_gmac_3v3>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -203,6 +203,8 @@ static int osk_tps_setup(struct i2c_client *client, void *context)
|
|||
*/
|
||||
gpio_request(OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en");
|
||||
gpio_direction_output(OSK_TPS_GPIO_USB_PWR_EN, 1);
|
||||
/* Free the GPIO again as the driver will request it */
|
||||
gpio_free(OSK_TPS_GPIO_USB_PWR_EN);
|
||||
|
||||
/* Set GPIO 2 high so LED D3 is off by default */
|
||||
tps65010_set_gpio_out_value(GPIO2, HIGH);
|
||||
|
|
|
|||
|
|
@ -17,11 +17,10 @@ config ARCH_OMAP3
|
|||
bool "TI OMAP3"
|
||||
depends on ARCH_MULTI_V7
|
||||
select ARCH_OMAP2PLUS
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
select OMAP_HWMOD
|
||||
select OMAP_INTERCONNECT
|
||||
select PM_OPP if PM
|
||||
select PM if CPU_IDLE
|
||||
select PM_OPP
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
select ARM_ERRATA_430973
|
||||
|
||||
|
|
@ -30,7 +29,7 @@ config ARCH_OMAP4
|
|||
depends on ARCH_MULTI_V7
|
||||
select ARCH_OMAP2PLUS
|
||||
select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
select ARM_ERRATA_720789
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_SCU if SMP
|
||||
|
|
@ -40,7 +39,7 @@ config ARCH_OMAP4
|
|||
select OMAP_INTERCONNECT_BARRIER
|
||||
select PL310_ERRATA_588369 if CACHE_L2X0
|
||||
select PL310_ERRATA_727915 if CACHE_L2X0
|
||||
select PM_OPP if PM
|
||||
select PM_OPP
|
||||
select PM if CPU_IDLE
|
||||
select ARM_ERRATA_754322
|
||||
select ARM_ERRATA_775420
|
||||
|
|
@ -50,7 +49,7 @@ config SOC_OMAP5
|
|||
bool "TI OMAP5"
|
||||
depends on ARCH_MULTI_V7
|
||||
select ARCH_OMAP2PLUS
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
|
|
@ -58,14 +57,14 @@ config SOC_OMAP5
|
|||
select OMAP_HWMOD
|
||||
select OMAP_INTERCONNECT
|
||||
select OMAP_INTERCONNECT_BARRIER
|
||||
select PM_OPP if PM
|
||||
select PM_OPP
|
||||
select ZONE_DMA if ARM_LPAE
|
||||
|
||||
config SOC_AM33XX
|
||||
bool "TI AM33XX"
|
||||
depends on ARCH_MULTI_V7
|
||||
select ARCH_OMAP2PLUS
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
|
||||
config SOC_AM43XX
|
||||
bool "TI AM43x"
|
||||
|
|
@ -79,13 +78,13 @@ config SOC_AM43XX
|
|||
select ARM_ERRATA_754322
|
||||
select ARM_ERRATA_775420
|
||||
select OMAP_INTERCONNECT
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
|
||||
config SOC_DRA7XX
|
||||
bool "TI DRA7XX"
|
||||
depends on ARCH_MULTI_V7
|
||||
select ARCH_OMAP2PLUS
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_CPU_SUSPEND
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
|
|
@ -94,7 +93,7 @@ config SOC_DRA7XX
|
|||
select OMAP_HWMOD
|
||||
select OMAP_INTERCONNECT
|
||||
select OMAP_INTERCONNECT_BARRIER
|
||||
select PM_OPP if PM
|
||||
select PM_OPP
|
||||
select ZONE_DMA if ARM_LPAE
|
||||
select PINCTRL_TI_IODELAY if OF && PINCTRL
|
||||
|
||||
|
|
@ -112,9 +111,11 @@ config ARCH_OMAP2PLUS
|
|||
select OMAP_DM_TIMER
|
||||
select OMAP_GPMC
|
||||
select PINCTRL
|
||||
select PM_GENERIC_DOMAINS if PM
|
||||
select PM_GENERIC_DOMAINS_OF if PM
|
||||
select PM
|
||||
select PM_GENERIC_DOMAINS
|
||||
select PM_GENERIC_DOMAINS_OF
|
||||
select RESET_CONTROLLER
|
||||
select SIMPLE_PM_BUS
|
||||
select SOC_BUS
|
||||
select TI_SYSC
|
||||
select OMAP_IRQCHIP
|
||||
|
|
@ -140,7 +141,6 @@ config ARCH_OMAP2PLUS_TYPICAL
|
|||
select I2C_OMAP
|
||||
select MENELAUS if ARCH_OMAP2
|
||||
select NEON if CPU_V7
|
||||
select PM
|
||||
select REGULATOR
|
||||
select REGULATOR_FIXED_VOLTAGE
|
||||
select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4
|
||||
|
|
|
|||
|
|
@ -151,10 +151,10 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||
(cx->mpu_logic_state == PWRDM_POWER_OFF);
|
||||
|
||||
/* Enter broadcast mode for periodic timers */
|
||||
tick_broadcast_enable();
|
||||
RCU_NONIDLE(tick_broadcast_enable());
|
||||
|
||||
/* Enter broadcast mode for one-shot timers */
|
||||
tick_broadcast_enter();
|
||||
RCU_NONIDLE(tick_broadcast_enter());
|
||||
|
||||
/*
|
||||
* Call idle CPU PM enter notifier chain so that
|
||||
|
|
@ -166,7 +166,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||
|
||||
if (dev->cpu == 0) {
|
||||
pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state);
|
||||
omap_set_pwrdm_state(mpu_pd, cx->mpu_state);
|
||||
RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state));
|
||||
|
||||
/*
|
||||
* Call idle CPU cluster PM enter notifier chain
|
||||
|
|
@ -178,7 +178,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||
index = 0;
|
||||
cx = state_ptr + index;
|
||||
pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state);
|
||||
omap_set_pwrdm_state(mpu_pd, cx->mpu_state);
|
||||
RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state));
|
||||
mpuss_can_lose_context = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -194,9 +194,9 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||
mpuss_can_lose_context)
|
||||
gic_dist_disable();
|
||||
|
||||
clkdm_deny_idle(cpu_clkdm[1]);
|
||||
omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON);
|
||||
clkdm_allow_idle(cpu_clkdm[1]);
|
||||
RCU_NONIDLE(clkdm_deny_idle(cpu_clkdm[1]));
|
||||
RCU_NONIDLE(omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON));
|
||||
RCU_NONIDLE(clkdm_allow_idle(cpu_clkdm[1]));
|
||||
|
||||
if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) &&
|
||||
mpuss_can_lose_context) {
|
||||
|
|
@ -222,7 +222,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
|
|||
cpu_pm_exit();
|
||||
|
||||
cpu_pm_out:
|
||||
tick_broadcast_exit();
|
||||
RCU_NONIDLE(tick_broadcast_exit());
|
||||
|
||||
fail:
|
||||
cpuidle_coupled_parallel_barrier(dev, &abort_barrier);
|
||||
|
|
|
|||
|
|
@ -522,6 +522,7 @@ static struct of_dev_auxdata omap_auxdata_lookup[] = {
|
|||
&dra7_ipu1_dsp_iommu_pdata),
|
||||
#endif
|
||||
/* Common auxdata */
|
||||
OF_DEV_AUXDATA("simple-pm-bus", 0, NULL, omap_auxdata_lookup),
|
||||
OF_DEV_AUXDATA("ti,sysc", 0, NULL, &ti_sysc_pdata),
|
||||
OF_DEV_AUXDATA("pinctrl-single", 0, NULL, &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap-prm-inst", 0, NULL, &ti_prm_pdata),
|
||||
|
|
|
|||
|
|
@ -280,8 +280,6 @@ ethmac: ethernet@ff3f0000 {
|
|||
"timing-adjustment";
|
||||
rx-fifo-depth = <4096>;
|
||||
tx-fifo-depth = <2048>;
|
||||
resets = <&reset RESET_ETHERNET>;
|
||||
reset-names = "stmmaceth";
|
||||
power-domains = <&pwrc PWRC_AXG_ETHERNET_MEM_ID>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -224,8 +224,6 @@ ethmac: ethernet@ff3f0000 {
|
|||
"timing-adjustment";
|
||||
rx-fifo-depth = <4096>;
|
||||
tx-fifo-depth = <2048>;
|
||||
resets = <&reset RESET_ETHERNET>;
|
||||
reset-names = "stmmaceth";
|
||||
status = "disabled";
|
||||
|
||||
mdio0: mdio {
|
||||
|
|
@ -2390,7 +2388,7 @@ dwc3: usb@ff500000 {
|
|||
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
|
||||
dr_mode = "host";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
snps,quirk-frame-length-adjustment;
|
||||
snps,quirk-frame-length-adjustment = <0x20>;
|
||||
snps,parkmode-disable-ss-quirk;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/power/meson-gxbb-power.h>
|
||||
#include <dt-bindings/reset/amlogic,meson-gxbb-reset.h>
|
||||
#include <dt-bindings/thermal/thermal.h>
|
||||
|
||||
/ {
|
||||
|
|
@ -576,8 +575,6 @@ ethmac: ethernet@c9410000 {
|
|||
interrupt-names = "macirq";
|
||||
rx-fifo-depth = <4096>;
|
||||
tx-fifo-depth = <2048>;
|
||||
resets = <&reset RESET_ETHERNET>;
|
||||
reset-names = "stmmaceth";
|
||||
power-domains = <&pwrc PWRC_GXBB_ETHERNET_MEM_ID>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ tflash_vdd: regulator-tflash_vdd {
|
|||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
|
||||
gpio = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
|
||||
gpio = <&gpio_ao GPIOAO_3 GPIO_OPEN_DRAIN>;
|
||||
enable-active-high;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -385,7 +385,7 @@ bportals: bman-portals@508000000 {
|
|||
|
||||
dcfg: dcfg@1ee0000 {
|
||||
compatible = "fsl,ls1046a-dcfg", "syscon";
|
||||
reg = <0x0 0x1ee0000 0x0 0x10000>;
|
||||
reg = <0x0 0x1ee0000 0x0 0x1000>;
|
||||
big-endian;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -415,7 +415,9 @@ &dsi0_phy {
|
|||
&gcc {
|
||||
protected-clocks = <GCC_QSPI_CORE_CLK>,
|
||||
<GCC_QSPI_CORE_CLK_SRC>,
|
||||
<GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
|
||||
<GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
|
||||
<GCC_LPASS_Q6_AXI_CLK>,
|
||||
<GCC_LPASS_SWAY_CLK>;
|
||||
};
|
||||
|
||||
&gpu {
|
||||
|
|
|
|||
|
|
@ -302,7 +302,9 @@ &dsi0_phy {
|
|||
&gcc {
|
||||
protected-clocks = <GCC_QSPI_CORE_CLK>,
|
||||
<GCC_QSPI_CORE_CLK_SRC>,
|
||||
<GCC_QSPI_CNOC_PERIPH_AHB_CLK>;
|
||||
<GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
|
||||
<GCC_LPASS_Q6_AXI_CLK>,
|
||||
<GCC_LPASS_SWAY_CLK>;
|
||||
};
|
||||
|
||||
&gpu {
|
||||
|
|
@ -320,6 +322,8 @@ &i2c1 {
|
|||
&i2c3 {
|
||||
status = "okay";
|
||||
clock-frequency = <400000>;
|
||||
/* Overwrite pinctrl-0 from sdm845.dtsi */
|
||||
pinctrl-0 = <&qup_i2c3_default &i2c3_hid_active>;
|
||||
|
||||
tsel: hid@15 {
|
||||
compatible = "hid-over-i2c";
|
||||
|
|
@ -327,9 +331,6 @@ tsel: hid@15 {
|
|||
hid-descr-addr = <0x1>;
|
||||
|
||||
interrupts-extended = <&tlmm 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c3_hid_active>;
|
||||
};
|
||||
|
||||
tsc2: hid@2c {
|
||||
|
|
@ -338,11 +339,6 @@ tsc2: hid@2c {
|
|||
hid-descr-addr = <0x20>;
|
||||
|
||||
interrupts-extended = <&tlmm 37 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c3_hid_active>;
|
||||
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1097,7 +1097,7 @@ vopl_out_lvds: endpoint@1 {
|
|||
vopl_mmu: iommu@ff470f00 {
|
||||
compatible = "rockchip,iommu";
|
||||
reg = <0x0 0xff470f00 0x0 0x100>;
|
||||
interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "vopl_mmu";
|
||||
clocks = <&cru ACLK_VOPL>, <&cru HCLK_VOPL>;
|
||||
clock-names = "aclk", "iface";
|
||||
|
|
|
|||
|
|
@ -114,6 +114,10 @@ &cpu3 {
|
|||
cpu-supply = <&vdd_arm>;
|
||||
};
|
||||
|
||||
&display_subsystem {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gmac2io {
|
||||
assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
|
||||
assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
|
||||
|
|
|
|||
|
|
@ -790,7 +790,6 @@ &pcie_phy {
|
|||
&pcie0 {
|
||||
bus-scan-delay-ms = <1000>;
|
||||
ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||
max-link-speed = <2>;
|
||||
num-lanes = <4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie_clkreqn_cpm>;
|
||||
|
|
|
|||
|
|
@ -234,6 +234,7 @@ pcie0: pcie@f8000000 {
|
|||
reg = <0x0 0xf8000000 0x0 0x2000000>,
|
||||
<0x0 0xfd000000 0x0 0x1000000>;
|
||||
reg-names = "axi-base", "apb-base";
|
||||
device_type = "pci";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
|
|
@ -252,7 +253,6 @@ pcie0: pcie@f8000000 {
|
|||
<0 0 0 2 &pcie0_intc 1>,
|
||||
<0 0 0 3 &pcie0_intc 2>,
|
||||
<0 0 0 4 &pcie0_intc 3>;
|
||||
linux,pci-domain = <0>;
|
||||
max-link-speed = <1>;
|
||||
msi-map = <0x0 &its 0x0 0x1000>;
|
||||
phys = <&pcie_phy 0>, <&pcie_phy 1>,
|
||||
|
|
@ -1278,7 +1278,6 @@ vdec: video-codec@ff660000 {
|
|||
compatible = "rockchip,rk3399-vdec";
|
||||
reg = <0x0 0xff660000 0x0 0x400>;
|
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
interrupt-names = "vdpu";
|
||||
clocks = <&cru ACLK_VDU>, <&cru HCLK_VDU>,
|
||||
<&cru SCLK_VDU_CA>, <&cru SCLK_VDU_CORE>;
|
||||
clock-names = "axi", "ahb", "cabac", "core";
|
||||
|
|
|
|||
|
|
@ -1076,7 +1076,7 @@ CONFIG_INTERCONNECT=y
|
|||
CONFIG_INTERCONNECT_QCOM=y
|
||||
CONFIG_INTERCONNECT_QCOM_MSM8916=m
|
||||
CONFIG_INTERCONNECT_QCOM_OSM_L3=m
|
||||
CONFIG_INTERCONNECT_QCOM_SDM845=m
|
||||
CONFIG_INTERCONNECT_QCOM_SDM845=y
|
||||
CONFIG_INTERCONNECT_QCOM_SM8150=m
|
||||
CONFIG_INTERCONNECT_QCOM_SM8250=m
|
||||
CONFIG_EXT2_FS=y
|
||||
|
|
|
|||
|
|
@ -251,9 +251,9 @@ static inline const void *__tag_set(const void *addr, u8 tag)
|
|||
* lives in the [PAGE_OFFSET, PAGE_END) interval at the bottom of the
|
||||
* kernel's TTBR1 address range.
|
||||
*/
|
||||
#define __is_lm_address(addr) (((u64)(addr) ^ PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET))
|
||||
#define __is_lm_address(addr) (((u64)(addr) - PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET))
|
||||
|
||||
#define __lm_to_phys(addr) (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
|
||||
#define __lm_to_phys(addr) (((addr) - PAGE_OFFSET) + PHYS_OFFSET)
|
||||
#define __kimg_to_phys(addr) ((addr) - kimage_voffset)
|
||||
|
||||
#define __virt_to_phys_nodebug(x) ({ \
|
||||
|
|
@ -332,7 +332,7 @@ static inline void *phys_to_virt(phys_addr_t x)
|
|||
#endif /* !CONFIG_SPARSEMEM_VMEMMAP || CONFIG_DEBUG_VIRTUAL */
|
||||
|
||||
#define virt_addr_valid(addr) ({ \
|
||||
__typeof__(addr) __addr = addr; \
|
||||
__typeof__(addr) __addr = __tag_reset(addr); \
|
||||
__is_lm_address(__addr) && pfn_valid(virt_to_pfn(__addr)); \
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
phys_addr_t __virt_to_phys(unsigned long x)
|
||||
{
|
||||
WARN(!__is_lm_address(x),
|
||||
WARN(!__is_lm_address(__tag_reset(x)),
|
||||
"virt_to_phys used for non-linear address: %pK (%pS)\n",
|
||||
(void *)x,
|
||||
(void *)x);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ config UML
|
|||
select HAVE_DEBUG_KMEMLEAK
|
||||
select HAVE_DEBUG_BUGVERBOSE
|
||||
select NO_DMA
|
||||
select ARCH_HAS_SET_MEMORY
|
||||
select GENERIC_IRQ_SHOW
|
||||
select GENERIC_CPU_DEVICES
|
||||
select HAVE_GCC_PLUGINS
|
||||
|
|
|
|||
|
|
@ -375,11 +375,11 @@ static int ubd_setup_common(char *str, int *index_out, char **error_out)
|
|||
file = NULL;
|
||||
|
||||
backing_file = strsep(&str, ",:");
|
||||
if (*backing_file == '\0')
|
||||
if (backing_file && *backing_file == '\0')
|
||||
backing_file = NULL;
|
||||
|
||||
serial = strsep(&str, ",:");
|
||||
if (*serial == '\0')
|
||||
if (serial && *serial == '\0')
|
||||
serial = NULL;
|
||||
|
||||
if (backing_file && ubd_dev->no_cow) {
|
||||
|
|
@ -1241,7 +1241,7 @@ static int __init ubd_driver_init(void){
|
|||
/* Letting ubd=sync be like using ubd#s= instead of ubd#= is
|
||||
* enough. So use anyway the io thread. */
|
||||
}
|
||||
stack = alloc_stack(0);
|
||||
stack = alloc_stack(0, 0);
|
||||
io_pid = start_io_thread(stack + PAGE_SIZE - sizeof(void *),
|
||||
&thread_fd);
|
||||
if(io_pid < 0){
|
||||
|
|
|
|||
|
|
@ -1084,6 +1084,7 @@ static void virtio_uml_release_dev(struct device *d)
|
|||
}
|
||||
|
||||
os_close_file(vu_dev->sock);
|
||||
kfree(vu_dev);
|
||||
}
|
||||
|
||||
/* Platform device */
|
||||
|
|
@ -1097,7 +1098,7 @@ static int virtio_uml_probe(struct platform_device *pdev)
|
|||
if (!pdata)
|
||||
return -EINVAL;
|
||||
|
||||
vu_dev = devm_kzalloc(&pdev->dev, sizeof(*vu_dev), GFP_KERNEL);
|
||||
vu_dev = kzalloc(sizeof(*vu_dev), GFP_KERNEL);
|
||||
if (!vu_dev)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#define ioremap ioremap
|
||||
static inline void __iomem *ioremap(phys_addr_t offset, size_t size)
|
||||
{
|
||||
return (void __iomem *)(unsigned long)offset;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define iounmap iounmap
|
||||
|
|
|
|||
|
|
@ -55,15 +55,12 @@ extern unsigned long end_iomem;
|
|||
#define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||
#define __PAGE_KERNEL_EXEC \
|
||||
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
|
||||
#define __PAGE_KERNEL_RO \
|
||||
(_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)
|
||||
#define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
|
||||
#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
|
||||
#define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
||||
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
|
||||
#define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
|
||||
#define PAGE_KERNEL_EXEC __pgprot(__PAGE_KERNEL_EXEC)
|
||||
#define PAGE_KERNEL_RO __pgprot(__PAGE_KERNEL_RO)
|
||||
|
||||
/*
|
||||
* The i386 can't do page protection for execute, and considers that the same
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
#include <asm-generic/set_memory.h>
|
||||
|
|
@ -19,7 +19,7 @@ extern int kmalloc_ok;
|
|||
#define UML_ROUND_UP(addr) \
|
||||
((((unsigned long) addr) + PAGE_SIZE - 1) & PAGE_MASK)
|
||||
|
||||
extern unsigned long alloc_stack(int atomic);
|
||||
extern unsigned long alloc_stack(int order, int atomic);
|
||||
extern void free_stack(unsigned long stack, int order);
|
||||
|
||||
struct pt_regs;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/kmsg_dump.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/string.h>
|
||||
#include <shared/init.h>
|
||||
#include <shared/kern.h>
|
||||
#include <os.h>
|
||||
|
|
@ -16,8 +17,12 @@ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper,
|
|||
if (!console_trylock())
|
||||
return;
|
||||
|
||||
for_each_console(con)
|
||||
break;
|
||||
for_each_console(con) {
|
||||
if(strcmp(con->name, "tty") == 0 &&
|
||||
(con->flags & (CON_ENABLED | CON_CONSDEV)) != 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
console_unlock();
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@
|
|||
#include <os.h>
|
||||
#include <skas.h>
|
||||
#include <linux/time-internal.h>
|
||||
#include <asm/set_memory.h>
|
||||
|
||||
/*
|
||||
* This is a per-cpu array. A processor only modifies its entry and it only
|
||||
|
|
@ -63,18 +62,16 @@ void free_stack(unsigned long stack, int order)
|
|||
free_pages(stack, order);
|
||||
}
|
||||
|
||||
unsigned long alloc_stack(int atomic)
|
||||
unsigned long alloc_stack(int order, int atomic)
|
||||
{
|
||||
unsigned long addr;
|
||||
unsigned long page;
|
||||
gfp_t flags = GFP_KERNEL;
|
||||
|
||||
if (atomic)
|
||||
flags = GFP_ATOMIC;
|
||||
addr = __get_free_pages(flags, 1);
|
||||
page = __get_free_pages(flags, order);
|
||||
|
||||
set_memory_ro(addr, 1);
|
||||
|
||||
return addr + PAGE_SIZE;
|
||||
return page;
|
||||
}
|
||||
|
||||
static inline void set_current(struct task_struct *task)
|
||||
|
|
|
|||
|
|
@ -535,6 +535,31 @@ static int time_travel_connect_external(const char *socket)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void time_travel_set_start(void)
|
||||
{
|
||||
if (time_travel_start_set)
|
||||
return;
|
||||
|
||||
switch (time_travel_mode) {
|
||||
case TT_MODE_EXTERNAL:
|
||||
time_travel_start = time_travel_ext_req(UM_TIMETRAVEL_GET_TOD, -1);
|
||||
/* controller gave us the *current* time, so adjust by that */
|
||||
time_travel_ext_get_time();
|
||||
time_travel_start -= time_travel_time;
|
||||
break;
|
||||
case TT_MODE_INFCPU:
|
||||
case TT_MODE_BASIC:
|
||||
if (!time_travel_start_set)
|
||||
time_travel_start = os_persistent_clock_emulation();
|
||||
break;
|
||||
case TT_MODE_OFF:
|
||||
/* we just read the host clock with os_persistent_clock_emulation() */
|
||||
break;
|
||||
}
|
||||
|
||||
time_travel_start_set = true;
|
||||
}
|
||||
#else /* CONFIG_UML_TIME_TRAVEL_SUPPORT */
|
||||
#define time_travel_start_set 0
|
||||
#define time_travel_start 0
|
||||
|
|
@ -553,6 +578,10 @@ static void time_travel_set_interval(unsigned long long interval)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void time_travel_set_start(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* fail link if this actually gets used */
|
||||
extern u64 time_travel_ext_req(u32 op, u64 time);
|
||||
|
||||
|
|
@ -731,6 +760,8 @@ void read_persistent_clock64(struct timespec64 *ts)
|
|||
{
|
||||
long long nsecs;
|
||||
|
||||
time_travel_set_start();
|
||||
|
||||
if (time_travel_mode != TT_MODE_OFF)
|
||||
nsecs = time_travel_start + time_travel_time;
|
||||
else
|
||||
|
|
@ -742,25 +773,6 @@ void read_persistent_clock64(struct timespec64 *ts)
|
|||
|
||||
void __init time_init(void)
|
||||
{
|
||||
#ifdef CONFIG_UML_TIME_TRAVEL_SUPPORT
|
||||
switch (time_travel_mode) {
|
||||
case TT_MODE_EXTERNAL:
|
||||
time_travel_start = time_travel_ext_req(UM_TIMETRAVEL_GET_TOD, -1);
|
||||
/* controller gave us the *current* time, so adjust by that */
|
||||
time_travel_ext_get_time();
|
||||
time_travel_start -= time_travel_time;
|
||||
break;
|
||||
case TT_MODE_INFCPU:
|
||||
case TT_MODE_BASIC:
|
||||
if (!time_travel_start_set)
|
||||
time_travel_start = os_persistent_clock_emulation();
|
||||
break;
|
||||
case TT_MODE_OFF:
|
||||
/* we just read the host clock with os_persistent_clock_emulation() */
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
timer_set_signal_handler();
|
||||
late_time_init = um_timer_setup;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -608,57 +608,3 @@ void force_flush_all(void)
|
|||
vma = vma->vm_next;
|
||||
}
|
||||
}
|
||||
|
||||
struct page_change_data {
|
||||
unsigned int set_mask, clear_mask;
|
||||
};
|
||||
|
||||
static int change_page_range(pte_t *ptep, unsigned long addr, void *data)
|
||||
{
|
||||
struct page_change_data *cdata = data;
|
||||
pte_t pte = READ_ONCE(*ptep);
|
||||
|
||||
pte_clear_bits(pte, cdata->clear_mask);
|
||||
pte_set_bits(pte, cdata->set_mask);
|
||||
|
||||
set_pte(ptep, pte);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int change_memory(unsigned long start, unsigned long pages,
|
||||
unsigned int set_mask, unsigned int clear_mask)
|
||||
{
|
||||
unsigned long size = pages * PAGE_SIZE;
|
||||
struct page_change_data data;
|
||||
int ret;
|
||||
|
||||
data.set_mask = set_mask;
|
||||
data.clear_mask = clear_mask;
|
||||
|
||||
ret = apply_to_page_range(&init_mm, start, size, change_page_range,
|
||||
&data);
|
||||
|
||||
flush_tlb_kernel_range(start, start + size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int set_memory_ro(unsigned long addr, int numpages)
|
||||
{
|
||||
return change_memory(addr, numpages, 0, _PAGE_RW);
|
||||
}
|
||||
|
||||
int set_memory_rw(unsigned long addr, int numpages)
|
||||
{
|
||||
return change_memory(addr, numpages, _PAGE_RW, 0);
|
||||
}
|
||||
|
||||
int set_memory_nx(unsigned long addr, int numpages)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
int set_memory_x(unsigned long addr, int numpages)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@
|
|||
#include <mem_user.h>
|
||||
#include <os.h>
|
||||
|
||||
#define DEFAULT_COMMAND_LINE "root=98:0"
|
||||
#define DEFAULT_COMMAND_LINE_ROOT "root=98:0"
|
||||
#define DEFAULT_COMMAND_LINE_CONSOLE "console=tty"
|
||||
|
||||
/* Changed in add_arg and setup_arch, which run before SMP is started */
|
||||
static char __initdata command_line[COMMAND_LINE_SIZE] = { 0 };
|
||||
|
|
@ -109,7 +110,8 @@ unsigned long end_vm;
|
|||
int ncpus = 1;
|
||||
|
||||
/* Set in early boot */
|
||||
static int have_root __initdata = 0;
|
||||
static int have_root __initdata;
|
||||
static int have_console __initdata;
|
||||
|
||||
/* Set in uml_mem_setup and modified in linux_main */
|
||||
long long physmem_size = 32 * 1024 * 1024;
|
||||
|
|
@ -161,6 +163,17 @@ __uml_setup("debug", no_skas_debug_setup,
|
|||
" this flag is not needed to run gdb on UML in skas mode\n\n"
|
||||
);
|
||||
|
||||
static int __init uml_console_setup(char *line, int *add)
|
||||
{
|
||||
have_console = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
__uml_setup("console=", uml_console_setup,
|
||||
"console=<preferred console>\n"
|
||||
" Specify the preferred console output driver\n\n"
|
||||
);
|
||||
|
||||
static int __init Usage(char *line, int *add)
|
||||
{
|
||||
const char **p;
|
||||
|
|
@ -264,7 +277,10 @@ int __init linux_main(int argc, char **argv)
|
|||
add_arg(argv[i]);
|
||||
}
|
||||
if (have_root == 0)
|
||||
add_arg(DEFAULT_COMMAND_LINE);
|
||||
add_arg(DEFAULT_COMMAND_LINE_ROOT);
|
||||
|
||||
if (have_console == 0)
|
||||
add_arg(DEFAULT_COMMAND_LINE_CONSOLE);
|
||||
|
||||
host_task_size = os_get_top_address();
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv)
|
|||
unsigned long stack, sp;
|
||||
int pid, fds[2], ret, n;
|
||||
|
||||
stack = alloc_stack(__cant_sleep());
|
||||
stack = alloc_stack(0, __cant_sleep());
|
||||
if (stack == 0)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -116,7 +116,7 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags,
|
|||
unsigned long stack, sp;
|
||||
int pid, status, err;
|
||||
|
||||
stack = alloc_stack(__cant_sleep());
|
||||
stack = alloc_stack(0, __cant_sleep());
|
||||
if (stack == 0)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -104,5 +104,18 @@ long long os_nsecs(void)
|
|||
*/
|
||||
void os_idle_sleep(void)
|
||||
{
|
||||
pause();
|
||||
struct itimerspec its;
|
||||
sigset_t set, old;
|
||||
|
||||
/* block SIGALRM while we analyze the timer state */
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, SIGALRM);
|
||||
sigprocmask(SIG_BLOCK, &set, &old);
|
||||
|
||||
/* check the timer, and if it'll fire then wait for it */
|
||||
timer_gettime(event_high_res_timer, &its);
|
||||
if (its.it_value.tv_sec || its.it_value.tv_nsec)
|
||||
sigsuspend(&old);
|
||||
/* either way, restore the signal mask */
|
||||
sigprocmask(SIG_UNBLOCK, &set, NULL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
static int simple_pm_bus_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct of_dev_auxdata *lookup = dev_get_platdata(&pdev->dev);
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
|
||||
dev_dbg(&pdev->dev, "%s\n", __func__);
|
||||
|
|
@ -23,7 +24,7 @@ static int simple_pm_bus_probe(struct platform_device *pdev)
|
|||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
if (np)
|
||||
of_platform_populate(np, NULL, NULL, &pdev->dev);
|
||||
of_platform_populate(np, NULL, lookup, &pdev->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -776,6 +776,8 @@ static void edge_detector_stop(struct line *line)
|
|||
cancel_delayed_work_sync(&line->work);
|
||||
WRITE_ONCE(line->sw_debounced, 0);
|
||||
WRITE_ONCE(line->eflags, 0);
|
||||
if (line->desc)
|
||||
WRITE_ONCE(line->desc->debounce_period_us, 0);
|
||||
/* do not change line->level - see comment in debounced_value() */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -603,7 +603,11 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
|
|||
ret = gdev->id;
|
||||
goto err_free_gdev;
|
||||
}
|
||||
dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
|
||||
|
||||
ret = dev_set_name(&gdev->dev, GPIOCHIP_NAME "%d", gdev->id);
|
||||
if (ret)
|
||||
goto err_free_ida;
|
||||
|
||||
device_initialize(&gdev->dev);
|
||||
dev_set_drvdata(&gdev->dev, gdev);
|
||||
if (gc->parent && gc->parent->driver)
|
||||
|
|
@ -617,7 +621,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
|
|||
gdev->descs = kcalloc(gc->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL);
|
||||
if (!gdev->descs) {
|
||||
ret = -ENOMEM;
|
||||
goto err_free_ida;
|
||||
goto err_free_dev_name;
|
||||
}
|
||||
|
||||
if (gc->ngpio == 0) {
|
||||
|
|
@ -768,6 +772,8 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
|
|||
kfree_const(gdev->label);
|
||||
err_free_descs:
|
||||
kfree(gdev->descs);
|
||||
err_free_dev_name:
|
||||
kfree(dev_name(&gdev->dev));
|
||||
err_free_ida:
|
||||
ida_free(&gpio_ida, gdev->id);
|
||||
err_free_gdev:
|
||||
|
|
@ -2551,7 +2557,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
|
|||
struct gpio_chip *gc = desc_array[i]->gdev->chip;
|
||||
unsigned long fastpath[2 * BITS_TO_LONGS(FASTPATH_NGPIO)];
|
||||
unsigned long *mask, *bits;
|
||||
int first, j, ret;
|
||||
int first, j;
|
||||
|
||||
if (likely(gc->ngpio <= FASTPATH_NGPIO)) {
|
||||
mask = fastpath;
|
||||
|
|
|
|||
|
|
@ -419,13 +419,17 @@ static int init_bios_attributes(int attr_type, const char *guid)
|
|||
return retval;
|
||||
/* need to use specific instance_id and guid combination to get right data */
|
||||
obj = get_wmiobj_pointer(instance_id, guid);
|
||||
if (!obj)
|
||||
if (!obj || obj->type != ACPI_TYPE_PACKAGE)
|
||||
return -ENODEV;
|
||||
elements = obj->package.elements;
|
||||
|
||||
mutex_lock(&wmi_priv.mutex);
|
||||
while (elements) {
|
||||
/* sanity checking */
|
||||
if (elements[ATTR_NAME].type != ACPI_TYPE_STRING) {
|
||||
pr_debug("incorrect element type\n");
|
||||
goto nextobj;
|
||||
}
|
||||
if (strlen(elements[ATTR_NAME].string.pointer) == 0) {
|
||||
pr_debug("empty attribute found\n");
|
||||
goto nextobj;
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_ALIAS("wmi:95F24279-4D7B-4334-9387-ACCDC67EF61C");
|
||||
MODULE_ALIAS("wmi:5FB7F034-2C63-45e9-BE91-3D44E2C707E4");
|
||||
|
||||
static int enable_tablet_mode_sw = -1;
|
||||
module_param(enable_tablet_mode_sw, int, 0444);
|
||||
MODULE_PARM_DESC(enable_tablet_mode_sw, "Enable SW_TABLET_MODE reporting (-1=auto, 0=no, 1=yes)");
|
||||
|
||||
#define HPWMI_EVENT_GUID "95F24279-4D7B-4334-9387-ACCDC67EF61C"
|
||||
#define HPWMI_BIOS_GUID "5FB7F034-2C63-45e9-BE91-3D44E2C707E4"
|
||||
|
||||
|
|
@ -654,10 +658,12 @@ static int __init hp_wmi_input_setup(void)
|
|||
}
|
||||
|
||||
/* Tablet mode */
|
||||
val = hp_wmi_hw_state(HPWMI_TABLET_MASK);
|
||||
if (!(val < 0)) {
|
||||
__set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
|
||||
input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val);
|
||||
if (enable_tablet_mode_sw > 0) {
|
||||
val = hp_wmi_hw_state(HPWMI_TABLET_MASK);
|
||||
if (val >= 0) {
|
||||
__set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
|
||||
input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val);
|
||||
}
|
||||
}
|
||||
|
||||
err = sparse_keymap_setup(hp_wmi_input_dev, hp_wmi_keymap, NULL);
|
||||
|
|
|
|||
|
|
@ -23,12 +23,7 @@ static const char * const sunxi_mbus_devices[] = {
|
|||
"allwinner,sun7i-a20-display-engine",
|
||||
"allwinner,sun8i-a23-display-engine",
|
||||
"allwinner,sun8i-a33-display-engine",
|
||||
"allwinner,sun8i-a83t-display-engine",
|
||||
"allwinner,sun8i-h3-display-engine",
|
||||
"allwinner,sun8i-r40-display-engine",
|
||||
"allwinner,sun8i-v3s-display-engine",
|
||||
"allwinner,sun9i-a80-display-engine",
|
||||
"allwinner,sun50i-a64-display-engine",
|
||||
|
||||
/*
|
||||
* And now we have the regular devices connected to the MBUS
|
||||
|
|
|
|||
|
|
@ -860,6 +860,7 @@ static int omap_prm_reset_init(struct platform_device *pdev,
|
|||
const struct omap_rst_map *map;
|
||||
struct ti_prm_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
||||
char buf[32];
|
||||
u32 v;
|
||||
|
||||
/*
|
||||
* Check if we have controllable resets. If either rstctrl is non-zero
|
||||
|
|
@ -907,6 +908,16 @@ static int omap_prm_reset_init(struct platform_device *pdev,
|
|||
map++;
|
||||
}
|
||||
|
||||
/* Quirk handling to assert rst_map_012 bits on reset and avoid errors */
|
||||
if (prm->data->rstmap == rst_map_012) {
|
||||
v = readl_relaxed(reset->prm->base + reset->prm->data->rstctrl);
|
||||
if ((v & reset->mask) != reset->mask) {
|
||||
dev_dbg(&pdev->dev, "Asserting all resets: %08x\n", v);
|
||||
writel_relaxed(reset->mask, reset->prm->base +
|
||||
reset->prm->data->rstctrl);
|
||||
}
|
||||
}
|
||||
|
||||
return devm_reset_controller_register(&pdev->dev, &reset->rcdev);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -266,7 +266,7 @@ extern void kprobes_inc_nmissed_count(struct kprobe *p);
|
|||
extern bool arch_within_kprobe_blacklist(unsigned long addr);
|
||||
extern int arch_populate_kprobe_blacklist(void);
|
||||
extern bool arch_kprobe_on_func_entry(unsigned long offset);
|
||||
extern bool kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset);
|
||||
extern int kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset);
|
||||
|
||||
extern bool within_kprobe_blacklist(unsigned long addr);
|
||||
extern int kprobe_add_ksym_blacklist(unsigned long entry);
|
||||
|
|
|
|||
|
|
@ -307,11 +307,13 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p)
|
|||
\
|
||||
it_func_ptr = \
|
||||
rcu_dereference_raw((&__tracepoint_##_name)->funcs); \
|
||||
do { \
|
||||
it_func = (it_func_ptr)->func; \
|
||||
__data = (it_func_ptr)->data; \
|
||||
((void(*)(void *, proto))(it_func))(__data, args); \
|
||||
} while ((++it_func_ptr)->func); \
|
||||
if (it_func_ptr) { \
|
||||
do { \
|
||||
it_func = (it_func_ptr)->func; \
|
||||
__data = (it_func_ptr)->data; \
|
||||
((void(*)(void *, proto))(it_func))(__data, args); \
|
||||
} while ((++it_func_ptr)->func); \
|
||||
} \
|
||||
return 0; \
|
||||
} \
|
||||
DEFINE_STATIC_CALL(tp_func_##_name, __traceiter_##_name);
|
||||
|
|
|
|||
|
|
@ -198,7 +198,8 @@ struct task_struct init_task
|
|||
.lockdep_recursion = 0,
|
||||
#endif
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
.ret_stack = NULL,
|
||||
.ret_stack = NULL,
|
||||
.tracing_graph_pause = ATOMIC_INIT(0),
|
||||
#endif
|
||||
#if defined(CONFIG_TRACING) && defined(CONFIG_PREEMPTION)
|
||||
.trace_recursion = 0,
|
||||
|
|
|
|||
|
|
@ -1954,28 +1954,48 @@ bool __weak arch_kprobe_on_func_entry(unsigned long offset)
|
|||
return !offset;
|
||||
}
|
||||
|
||||
bool kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset)
|
||||
/**
|
||||
* kprobe_on_func_entry() -- check whether given address is function entry
|
||||
* @addr: Target address
|
||||
* @sym: Target symbol name
|
||||
* @offset: The offset from the symbol or the address
|
||||
*
|
||||
* This checks whether the given @addr+@offset or @sym+@offset is on the
|
||||
* function entry address or not.
|
||||
* This returns 0 if it is the function entry, or -EINVAL if it is not.
|
||||
* And also it returns -ENOENT if it fails the symbol or address lookup.
|
||||
* Caller must pass @addr or @sym (either one must be NULL), or this
|
||||
* returns -EINVAL.
|
||||
*/
|
||||
int kprobe_on_func_entry(kprobe_opcode_t *addr, const char *sym, unsigned long offset)
|
||||
{
|
||||
kprobe_opcode_t *kp_addr = _kprobe_addr(addr, sym, offset);
|
||||
|
||||
if (IS_ERR(kp_addr))
|
||||
return false;
|
||||
return PTR_ERR(kp_addr);
|
||||
|
||||
if (!kallsyms_lookup_size_offset((unsigned long)kp_addr, NULL, &offset) ||
|
||||
!arch_kprobe_on_func_entry(offset))
|
||||
return false;
|
||||
if (!kallsyms_lookup_size_offset((unsigned long)kp_addr, NULL, &offset))
|
||||
return -ENOENT;
|
||||
|
||||
return true;
|
||||
if (!arch_kprobe_on_func_entry(offset))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int register_kretprobe(struct kretprobe *rp)
|
||||
{
|
||||
int ret = 0;
|
||||
int ret;
|
||||
struct kretprobe_instance *inst;
|
||||
int i;
|
||||
void *addr;
|
||||
|
||||
if (!kprobe_on_func_entry(rp->kp.addr, rp->kp.symbol_name, rp->kp.offset))
|
||||
ret = kprobe_on_func_entry(rp->kp.addr, rp->kp.symbol_name, rp->kp.offset);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* If only rp->kp.addr is specified, check reregistering kprobes */
|
||||
if (rp->kp.addr && check_kprobe_rereg(&rp->kp))
|
||||
return -EINVAL;
|
||||
|
||||
if (kretprobe_blacklist_size) {
|
||||
|
|
|
|||
|
|
@ -394,7 +394,6 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
|
|||
}
|
||||
|
||||
if (t->ret_stack == NULL) {
|
||||
atomic_set(&t->tracing_graph_pause, 0);
|
||||
atomic_set(&t->trace_overrun, 0);
|
||||
t->curr_ret_stack = -1;
|
||||
t->curr_ret_depth = -1;
|
||||
|
|
@ -489,7 +488,6 @@ static DEFINE_PER_CPU(struct ftrace_ret_stack *, idle_ret_stack);
|
|||
static void
|
||||
graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
|
||||
{
|
||||
atomic_set(&t->tracing_graph_pause, 0);
|
||||
atomic_set(&t->trace_overrun, 0);
|
||||
t->ftrace_timestamp = 0;
|
||||
/* make curr_ret_stack visible before we add the ret_stack */
|
||||
|
|
|
|||
|
|
@ -562,6 +562,8 @@ static int __irqsoff_tracer_init(struct trace_array *tr)
|
|||
/* non overwrite screws up the latency tracers */
|
||||
set_tracer_flag(tr, TRACE_ITER_OVERWRITE, 1);
|
||||
set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, 1);
|
||||
/* without pause, we will produce garbage if another latency occurs */
|
||||
set_tracer_flag(tr, TRACE_ITER_PAUSE_ON_TRACE, 1);
|
||||
|
||||
tr->max_latency = 0;
|
||||
irqsoff_trace = tr;
|
||||
|
|
@ -583,11 +585,13 @@ static void __irqsoff_tracer_reset(struct trace_array *tr)
|
|||
{
|
||||
int lat_flag = save_flags & TRACE_ITER_LATENCY_FMT;
|
||||
int overwrite_flag = save_flags & TRACE_ITER_OVERWRITE;
|
||||
int pause_flag = save_flags & TRACE_ITER_PAUSE_ON_TRACE;
|
||||
|
||||
stop_irqsoff_tracer(tr, is_graph(tr));
|
||||
|
||||
set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag);
|
||||
set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag);
|
||||
set_tracer_flag(tr, TRACE_ITER_PAUSE_ON_TRACE, pause_flag);
|
||||
ftrace_reset_array_ops(tr);
|
||||
|
||||
irqsoff_busy = false;
|
||||
|
|
|
|||
|
|
@ -221,9 +221,9 @@ bool trace_kprobe_on_func_entry(struct trace_event_call *call)
|
|||
{
|
||||
struct trace_kprobe *tk = trace_kprobe_primary_from_call(call);
|
||||
|
||||
return tk ? kprobe_on_func_entry(tk->rp.kp.addr,
|
||||
return tk ? (kprobe_on_func_entry(tk->rp.kp.addr,
|
||||
tk->rp.kp.addr ? NULL : tk->rp.kp.symbol_name,
|
||||
tk->rp.kp.addr ? 0 : tk->rp.kp.offset) : false;
|
||||
tk->rp.kp.addr ? 0 : tk->rp.kp.offset) == 0) : false;
|
||||
}
|
||||
|
||||
bool trace_kprobe_error_injectable(struct trace_event_call *call)
|
||||
|
|
@ -828,9 +828,11 @@ static int trace_kprobe_create(int argc, const char *argv[])
|
|||
}
|
||||
if (is_return)
|
||||
flags |= TPARG_FL_RETURN;
|
||||
if (kprobe_on_func_entry(NULL, symbol, offset))
|
||||
ret = kprobe_on_func_entry(NULL, symbol, offset);
|
||||
if (ret == 0)
|
||||
flags |= TPARG_FL_FENTRY;
|
||||
if (offset && is_return && !(flags & TPARG_FL_FENTRY)) {
|
||||
/* Defer the ENOENT case until register kprobe */
|
||||
if (ret == -EINVAL && is_return) {
|
||||
trace_probe_log_err(0, BAD_RETPROBE);
|
||||
goto parse_error;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user