Merge 4.19.262 into android-4.19-stable
Changes in 4.19.262 Makefile.extrawarn: Move -Wcast-function-type-strict to W=1 docs: update mediator information in CoC docs ARM: fix function graph tracer and unwinder dependencies fs: fix UAF/GPF bug in nilfs_mdt_destroy firmware: arm_scmi: Add SCMI PM driver remove routine dmaengine: xilinx_dma: cleanup for fetching xlnx,num-fstores property dmaengine: xilinx_dma: Report error in case of dma_set_mask_and_coherent API failure ARM: dts: fix Moxa SDIO 'compatible', remove 'sdhci' misnomer scsi: qedf: Fix a UAF bug in __qedf_probe() net/ieee802154: fix uninit value bug in dgram_sendmsg um: Cleanup syscall_handler_t cast in syscalls_32.h um: Cleanup compiler warning in arch/x86/um/tls_32.c usb: mon: make mmapped memory read only USB: serial: ftdi_sio: fix 300 bps rate for SIO mmc: core: Replace with already defined values for readability mmc: core: Terminate infinite loop in SD-UHS voltage switch rpmsg: qcom: glink: replace strncpy() with strscpy_pad() nilfs2: fix NULL pointer dereference at nilfs_bmap_lookup_at_level() nilfs2: fix leak of nilfs_root in case of writer thread creation failure nilfs2: replace WARN_ONs by nilfs_error for checkpoint acquisition failure ceph: don't truncate file in atomic_open random: clamp credited irq bits to maximum mixed ALSA: hda: Fix position reporting on Poulsbo scsi: stex: Properly zero out the passthrough command structure USB: serial: qcserial: add new usb-id for Dell branded EM7455 random: restore O_NONBLOCK support random: avoid reading two cache lines on irq randomness random: use expired timer rather than wq for mixing fast pool wifi: mac80211_hwsim: avoid mac80211 warning on bad rate Input: xpad - add supported devices as contributed on github Input: xpad - fix wireless 360 controller breaking after suspend ALSA: oss: Fix potential deadlock at unregistration ALSA: rawmidi: Drop register_mutex in snd_rawmidi_free() ALSA: usb-audio: Fix potential memory leaks ALSA: usb-audio: Fix NULL dererence at error path ALSA: hda/realtek: remove ALC289_FIXUP_DUAL_SPK for Dell 5530 mtd: rawnand: atmel: Unmap streaming DMA mappings iio: dac: ad5593r: Fix i2c read protocol requirements usb: add quirks for Lenovo OneLink+ Dock can: kvaser_usb: Fix use of uninitialized completion can: kvaser_usb_leaf: Fix overread with an invalid command can: kvaser_usb_leaf: Fix TX queue out of sync after restart can: kvaser_usb_leaf: Fix CAN state after restart fs: dlm: fix race between test_bit() and queue_work() fs: dlm: handle -EBUSY first in lock arg validation HID: multitouch: Add memory barriers quota: Check next/prev free block number after reading from quota file regulator: qcom_rpm: Fix circular deferral regression Revert "fs: check FMODE_LSEEK to control internal pipe splicing" parisc: fbdev/stifb: Align graphics memory size to 4MB riscv: Allow PROT_WRITE-only mmap() UM: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK PCI: Sanitise firmware BAR assignments behind a PCI-PCI bridge fbdev: smscufx: Fix use-after-free in ufx_ops_open() btrfs: fix race between quota enable and quota rescan ioctl riscv: fix build with binutils 2.38 nilfs2: fix use-after-free bug of struct nilfs_root ext4: avoid crash when inline data creation follows DIO write ext4: fix null-ptr-deref in ext4_write_info ext4: make ext4_lazyinit_thread freezable ext4: place buffer head allocation before handle start livepatch: fix race between fork and KLP transition ftrace: Properly unset FTRACE_HASH_FL_MOD ring-buffer: Allow splice to read previous partially read pages ring-buffer: Check pending waiters when doing wake ups as well ring-buffer: Fix race between reset page and reading page KVM: x86/emulator: Fix handing of POP SS to correctly set interruptibility KVM: nVMX: Unconditionally purge queued/injected events on nested "exit" selinux: use "grep -E" instead of "egrep" sh: machvec: Use char[] for section boundaries wifi: ath10k: add peer map clean up for peer delete in ath10k_sta_state() wifi: mac80211: allow bw change during channel switch in mesh bpftool: Fix a wrong type cast in btf_dumper_int spi: mt7621: Fix an error message in mt7621_spi_probe() wifi: rtl8xxxu: tighten bounds checking in rtl8xxxu_read_efuse() spi: qup: add missing clk_disable_unprepare on error in spi_qup_resume() spi: qup: add missing clk_disable_unprepare on error in spi_qup_pm_resume_runtime() wifi: rtl8xxxu: Fix skb misuse in TX queue selection bpf: btf: fix truncated last_member_type_id in btf_struct_resolve wifi: rtl8xxxu: gen2: Fix mistake in path B IQ calibration net: fs_enet: Fix wrong check in do_pd_setup bpf: Ensure correct locking around vulnerable function find_vpid() spi/omap100k:Fix PM disable depth imbalance in omap1_spi100k_probe netfilter: nft_fib: Fix for rpath check with VRF devices spi: s3c64xx: Fix large transfers with DMA vhost/vsock: Use kvmalloc/kvfree for larger packets. mISDN: fix use-after-free bugs in l1oip timer handlers sctp: handle the error returned from sctp_auth_asoc_init_active_key tcp: fix tcp_cwnd_validate() to not forget is_cwnd_limited net: rds: don't hold sock lock when cancelling work from rds_tcp_reset_callbacks() bnx2x: fix potential memory leak in bnx2x_tpa_stop() once: add DO_ONCE_SLOW() for sleepable contexts net: mvpp2: fix mvpp2 debugfs leak drm: bridge: adv7511: fix CEC power down control register offset drm/mipi-dsi: Detach devices when removing the host platform/chrome: fix double-free in chromeos_laptop_prepare() platform/x86: msi-laptop: Fix old-ec check for backlight registering platform/x86: msi-laptop: Fix resource cleanup drm/bridge: megachips: Fix a null pointer dereference bug mmc: au1xmmc: Fix an error handling path in au1xmmc_probe() ASoC: eureka-tlv320: Hold reference returned from of_find_xxx API drm/msm/dpu: index dpu_kms->hw_vbif using vbif_idx ALSA: dmaengine: increment buffer pointer atomically mmc: wmt-sdmmc: Fix an error handling path in wmt_mci_probe() ASoC: wm8997: Fix PM disable depth imbalance in wm8997_probe ASoC: wm5110: Fix PM disable depth imbalance in wm5110_probe ASoC: wm5102: Fix PM disable depth imbalance in wm5102_probe memory: of: Fix refcount leak bug in of_get_ddr_timings() soc: qcom: smsm: Fix refcount leak bugs in qcom_smsm_probe() soc: qcom: smem_state: Add refcounting for the 'state->of_node' ARM: dts: turris-omnia: Fix mpp26 pin name and comment ARM: dts: kirkwood: lsxl: fix serial line ARM: dts: kirkwood: lsxl: remove first ethernet port ARM: dts: exynos: correct s5k6a3 reset polarity on Midas family ARM: Drop CMDLINE_* dependency on ATAGS ARM: dts: exynos: fix polarity of VBUS GPIO of Origen iio: adc: at91-sama5d2_adc: fix AT91_SAMA5D2_MR_TRACKTIM_MAX iio: adc: at91-sama5d2_adc: check return status for pressure and touch iio: inkern: only release the device node when done with it iio: ABI: Fix wrong format of differential capacitance channel ABI. clk: oxnas: Hold reference returned by of_get_parent() clk: berlin: Add of_node_put() for of_get_parent() clk: tegra: Fix refcount leak in tegra210_clock_init clk: tegra: Fix refcount leak in tegra114_clock_init clk: tegra20: Fix refcount leak in tegra20_clock_init HSI: omap_ssi: Fix refcount leak in ssi_probe HSI: omap_ssi_port: Fix dma_map_sg error check media: exynos4-is: fimc-is: Add of_node_put() when breaking out of loop tty: xilinx_uartps: Fix the ignore_status media: xilinx: vipp: Fix refcount leak in xvip_graph_dma_init RDMA/rxe: Fix "kernel NULL pointer dereference" error RDMA/rxe: Fix the error caused by qp->sk dyndbg: fix module.dyndbg handling dyndbg: let query-modname override actual module name mtd: devices: docg3: check the return value of devm_ioremap() in the probe ata: fix ata_id_sense_reporting_enabled() and ata_id_has_sense_reporting() ata: fix ata_id_has_devslp() ata: fix ata_id_has_ncq_autosense() ata: fix ata_id_has_dipm() md/raid5: Ensure stripe_fill happens on non-read IO with journal xhci: Don't show warning for reinit on known broken suspend usb: gadget: function: fix dangling pnp_string in f_printer.c drivers: serial: jsm: fix some leaks in probe phy: qualcomm: call clk_disable_unprepare in the error handling staging: vt6655: fix some erroneous memory clean-up loops firmware: google: Test spinlock on panic path to avoid lockups serial: 8250: Fix restoring termios speed after suspend fsi: core: Check error number after calling ida_simple_get mfd: intel_soc_pmic: Fix an error handling path in intel_soc_pmic_i2c_probe() mfd: fsl-imx25: Fix an error handling path in mx25_tsadc_setup_irq() mfd: lp8788: Fix an error handling path in lp8788_probe() mfd: lp8788: Fix an error handling path in lp8788_irq_init() and lp8788_irq_init() mfd: sm501: Add check for platform_driver_register() dmaengine: ioat: stop mod_timer from resurrecting deleted timer in __cleanup() spmi: pmic-arb: correct duplicate APID to PPID mapping logic clk: bcm2835: fix bcm2835_clock_rate_from_divisor declaration clk: ti: dra7-atl: Fix reference leak in of_dra7_atl_clk_probe mailbox: bcm-ferxrm-mailbox: Fix error check for dma_map_sg powerpc/math_emu/efp: Include module.h powerpc/sysdev/fsl_msi: Add missing of_node_put() powerpc/pci_dn: Add missing of_node_put() powerpc/powernv: add missing of_node_put() in opal_export_attrs() x86/hyperv: Fix 'struct hv_enlightened_vmcs' definition powerpc/64s: Fix GENERIC_CPU build flags for PPC970 / G5 powerpc: Fix SPE Power ISA properties for e500v1 platforms iommu/omap: Fix buffer overflow in debugfs iommu/iova: Fix module config properly crypto: cavium - prevent integer overflow loading firmware f2fs: fix race condition on setting FI_NO_EXTENT flag ACPI: video: Add Toshiba Satellite/Portege Z830 quirk MIPS: BCM47XX: Cast memcmp() of function to (void *) powercap: intel_rapl: fix UBSAN shift-out-of-bounds issue thermal: intel_powerclamp: Use get_cpu() instead of smp_processor_id() to avoid crash NFSD: Return nfserr_serverfault if splice_ok but buf->pages have data wifi: brcmfmac: fix invalid address access when enabling SCAN log level openvswitch: Fix double reporting of drops in dropwatch openvswitch: Fix overreporting of drops in dropwatch tcp: annotate data-race around tcp_md5sig_pool_populated wifi: ath9k: avoid uninit memory read in ath9k_htc_rx_msg() xfrm: Update ipcomp_scratches with NULL when freed wifi: brcmfmac: fix use-after-free bug in brcmf_netdev_start_xmit() Bluetooth: L2CAP: initialize delayed works at l2cap_chan_create() Bluetooth: hci_sysfs: Fix attempting to call device_add multiple times can: bcm: check the result of can_send() in bcm_can_tx() wifi: rt2x00: don't run Rt5592 IQ calibration on MT7620 wifi: rt2x00: set correct TX_SW_CFG1 MAC register for MT7620 wifi: rt2x00: set SoC wmac clock register wifi: rt2x00: correctly set BBP register 86 for MT7620 net: If sock is dead don't access sock's sk_wq in sk_stream_wait_memory Bluetooth: L2CAP: Fix user-after-free r8152: Rate limit overflow messages drm: Use size_t type for len variable in drm_copy_field() drm: Prevent drm_copy_field() to attempt copying a NULL pointer drm/amd/display: fix overflow on MIN_I64 definition drm/vc4: vec: Fix timings for VEC modes drm: panel-orientation-quirks: Add quirk for Anbernic Win600 platform/x86: msi-laptop: Change DMI match / alias strings to fix module autoloading drm/amdgpu: fix initial connector audio value ARM: dts: imx7d-sdb: config the max pressure for tsc2046 ARM: dts: imx6q: add missing properties for sram ARM: dts: imx6dl: add missing properties for sram ARM: dts: imx6qp: add missing properties for sram ARM: dts: imx6sl: add missing properties for sram ARM: dts: imx6sll: add missing properties for sram ARM: dts: imx6sx: add missing properties for sram media: cx88: Fix a null-ptr-deref bug in buffer_prepare() scsi: 3w-9xxx: Avoid disabling device if failing to enable it nbd: Fix hung when signal interrupts nbd_start_device_ioctl() power: supply: adp5061: fix out-of-bounds read in adp5061_get_chg_type() staging: vt6655: fix potential memory leak ata: libahci_platform: Sanity check the DT child nodes number HID: roccat: Fix use-after-free in roccat_read() md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d usb: host: xhci: Fix potential memory leak in xhci_alloc_stream_info() usb: musb: Fix musb_gadget.c rxstate overflow bug Revert "usb: storage: Add quirk for Samsung Fit flash" nvme: copy firmware_rev on each init usb: idmouse: fix an uninit-value in idmouse_open clk: bcm2835: Make peripheral PLLC critical perf intel-pt: Fix segfault in intel_pt_print_info() with uClibc net: ieee802154: return -EINVAL for unknown addr type net/ieee802154: don't warn zero-sized raw_sendmsg() ext4: continue to expand file system when the target size doesn't reach md: Replace snprintf with scnprintf efi: libstub: drop pointless get_memory_map() call inet: fully convert sk->sk_rx_dst to RCU rules thermal: intel_powerclamp: Use first online CPU as control_cpu gcov: support GCC 12.1 and newer compilers Linux 4.19.262 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: If70223b939e3710c4fbc4f7cc522f07d4b4ffd45
This commit is contained in:
@@ -135,7 +135,7 @@ Description:
|
|||||||
Raw capacitance measurement from channel Y. Units after
|
Raw capacitance measurement from channel Y. Units after
|
||||||
application of scale and offset are nanofarads.
|
application of scale and offset are nanofarads.
|
||||||
|
|
||||||
What: /sys/.../iio:deviceX/in_capacitanceY-in_capacitanceZ_raw
|
What: /sys/.../iio:deviceX/in_capacitanceY-capacitanceZ_raw
|
||||||
KernelVersion: 3.2
|
KernelVersion: 3.2
|
||||||
Contact: linux-iio@vger.kernel.org
|
Contact: linux-iio@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ Example:
|
|||||||
Use specific request line passing from dma
|
Use specific request line passing from dma
|
||||||
For example, MMC request line is 5
|
For example, MMC request line is 5
|
||||||
|
|
||||||
sdhci: sdhci@98e00000 {
|
mmc: mmc@98e00000 {
|
||||||
compatible = "moxa,moxart-sdhci";
|
compatible = "moxa,moxart-mmc";
|
||||||
reg = <0x98e00000 0x5C>;
|
reg = <0x98e00000 0x5C>;
|
||||||
interrupts = <5 0>;
|
interrupts = <5 0>;
|
||||||
clocks = <&clk_apb>;
|
clocks = <&clk_apb>;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or other maintainers if you're
|
|||||||
uncertain how to handle situations that come up. It will not be
|
uncertain how to handle situations that come up. It will not be
|
||||||
considered a violation report unless you want it to be. If you are
|
considered a violation report unless you want it to be. If you are
|
||||||
uncertain about approaching the TAB or any other maintainers, please
|
uncertain about approaching the TAB or any other maintainers, please
|
||||||
reach out to our conflict mediator, Mishi Choudhary <mishi@linux.com>.
|
reach out to our conflict mediator, Joanna Lee <joanna.lee@gesmer.com>.
|
||||||
|
|
||||||
In the end, "be kind to each other" is really what the end goal is for
|
In the end, "be kind to each other" is really what the end goal is for
|
||||||
everybody. We know everyone is human and we all fail at times, but the
|
everybody. We know everyone is human and we all fail at times, but the
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 19
|
PATCHLEVEL = 19
|
||||||
SUBLEVEL = 261
|
SUBLEVEL = 262
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = "People's Front"
|
NAME = "People's Front"
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ config ARM
|
|||||||
select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU
|
select HAVE_EFFICIENT_UNALIGNED_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && MMU
|
||||||
select HAVE_EXIT_THREAD
|
select HAVE_EXIT_THREAD
|
||||||
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
select HAVE_FTRACE_MCOUNT_RECORD if (!XIP_KERNEL)
|
||||||
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL)
|
select HAVE_FUNCTION_GRAPH_TRACER if (!THUMB2_KERNEL && !CC_IS_CLANG)
|
||||||
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) && (CC_IS_GCC || CLANG_VERSION >= 100000)
|
select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) && (CC_IS_GCC || CLANG_VERSION >= 100000)
|
||||||
select HAVE_FUTEX_CMPXCHG if FUTEX
|
select HAVE_FUTEX_CMPXCHG if FUTEX
|
||||||
select HAVE_GCC_PLUGINS
|
select HAVE_GCC_PLUGINS
|
||||||
@@ -1943,7 +1943,6 @@ config CMDLINE
|
|||||||
choice
|
choice
|
||||||
prompt "Kernel command line type" if CMDLINE != ""
|
prompt "Kernel command line type" if CMDLINE != ""
|
||||||
default CMDLINE_FROM_BOOTLOADER
|
default CMDLINE_FROM_BOOTLOADER
|
||||||
depends on ATAGS
|
|
||||||
|
|
||||||
config CMDLINE_FROM_BOOTLOADER
|
config CMDLINE_FROM_BOOTLOADER
|
||||||
bool "Use bootloader kernel arguments if available"
|
bool "Use bootloader kernel arguments if available"
|
||||||
|
|||||||
@@ -307,7 +307,7 @@
|
|||||||
marvell,function = "spi0";
|
marvell,function = "spi0";
|
||||||
};
|
};
|
||||||
|
|
||||||
spi0cs1_pins: spi0cs1-pins {
|
spi0cs2_pins: spi0cs2-pins {
|
||||||
marvell,pins = "mpp26";
|
marvell,pins = "mpp26";
|
||||||
marvell,function = "spi0";
|
marvell,function = "spi0";
|
||||||
};
|
};
|
||||||
@@ -342,7 +342,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* MISO, MOSI, SCLK and CS1 are routed to pin header CN11 */
|
/* MISO, MOSI, SCLK and CS2 are routed to pin header CN11 */
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart0 {
|
&uart0 {
|
||||||
|
|||||||
@@ -525,7 +525,7 @@
|
|||||||
clocks = <&camera 1>;
|
clocks = <&camera 1>;
|
||||||
clock-names = "extclk";
|
clock-names = "extclk";
|
||||||
samsung,camclk-out = <1>;
|
samsung,camclk-out = <1>;
|
||||||
gpios = <&gpm1 6 GPIO_ACTIVE_HIGH>;
|
gpios = <&gpm1 6 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
is_s5k6a3_ep: endpoint {
|
is_s5k6a3_ep: endpoint {
|
||||||
|
|||||||
@@ -87,7 +87,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&ehci {
|
&ehci {
|
||||||
samsung,vbus-gpio = <&gpx3 5 1>;
|
samsung,vbus-gpio = <&gpx3 5 GPIO_ACTIVE_HIGH>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
port@1 {
|
port@1 {
|
||||||
|
|||||||
@@ -81,6 +81,9 @@
|
|||||||
ocram: sram@900000 {
|
ocram: sram@900000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00900000 0x20000>;
|
reg = <0x00900000 0x20000>;
|
||||||
|
ranges = <0 0x00900000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -158,6 +158,9 @@
|
|||||||
ocram: sram@900000 {
|
ocram: sram@900000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00900000 0x40000>;
|
reg = <0x00900000 0x40000>;
|
||||||
|
ranges = <0 0x00900000 0x40000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,18 @@
|
|||||||
ocram2: sram@940000 {
|
ocram2: sram@940000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00940000 0x20000>;
|
reg = <0x00940000 0x20000>;
|
||||||
|
ranges = <0 0x00940000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ocram3: sram@960000 {
|
ocram3: sram@960000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00960000 0x20000>;
|
reg = <0x00960000 0x20000>;
|
||||||
|
ranges = <0 0x00960000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
clocks = <&clks IMX6QDL_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -118,6 +118,9 @@
|
|||||||
ocram: sram@900000 {
|
ocram: sram@900000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00900000 0x20000>;
|
reg = <0x00900000 0x20000>;
|
||||||
|
ranges = <0 0x00900000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6SL_CLK_OCRAM>;
|
clocks = <&clks IMX6SL_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -131,6 +131,9 @@
|
|||||||
ocram: sram@900000 {
|
ocram: sram@900000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00900000 0x20000>;
|
reg = <0x00900000 0x20000>;
|
||||||
|
ranges = <0 0x00900000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@a02000 {
|
L2: l2-cache@a02000 {
|
||||||
|
|||||||
@@ -167,12 +167,18 @@
|
|||||||
ocram_s: sram@8f8000 {
|
ocram_s: sram@8f8000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x008f8000 0x4000>;
|
reg = <0x008f8000 0x4000>;
|
||||||
|
ranges = <0 0x008f8000 0x4000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6SX_CLK_OCRAM_S>;
|
clocks = <&clks IMX6SX_CLK_OCRAM_S>;
|
||||||
};
|
};
|
||||||
|
|
||||||
ocram: sram@900000 {
|
ocram: sram@900000 {
|
||||||
compatible = "mmio-sram";
|
compatible = "mmio-sram";
|
||||||
reg = <0x00900000 0x20000>;
|
reg = <0x00900000 0x20000>;
|
||||||
|
ranges = <0 0x00900000 0x20000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
clocks = <&clks IMX6SX_CLK_OCRAM>;
|
clocks = <&clks IMX6SX_CLK_OCRAM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -163,12 +163,7 @@
|
|||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <29 0>;
|
interrupts = <29 0>;
|
||||||
pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>;
|
||||||
ti,x-min = /bits/ 16 <0>;
|
touchscreen-max-pressure = <255>;
|
||||||
ti,x-max = /bits/ 16 <0>;
|
|
||||||
ti,y-min = /bits/ 16 <0>;
|
|
||||||
ti,y-max = /bits/ 16 <0>;
|
|
||||||
ti,pressure-max = /bits/ 16 <0>;
|
|
||||||
ti,x-plate-ohms = /bits/ 16 <400>;
|
|
||||||
wakeup-source;
|
wakeup-source;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
|
|
||||||
ocp@f1000000 {
|
ocp@f1000000 {
|
||||||
pinctrl: pin-controller@10000 {
|
pinctrl: pin-controller@10000 {
|
||||||
|
/* Non-default UART pins */
|
||||||
|
pmx_uart0: pmx-uart0 {
|
||||||
|
marvell,pins = "mpp4", "mpp5";
|
||||||
|
};
|
||||||
|
|
||||||
pmx_power_hdd: pmx-power-hdd {
|
pmx_power_hdd: pmx-power-hdd {
|
||||||
marvell,pins = "mpp10";
|
marvell,pins = "mpp10";
|
||||||
marvell,function = "gpo";
|
marvell,function = "gpo";
|
||||||
@@ -213,22 +218,11 @@
|
|||||||
&mdio {
|
&mdio {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
ethphy0: ethernet-phy@0 {
|
|
||||||
reg = <0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
ethphy1: ethernet-phy@8 {
|
ethphy1: ethernet-phy@8 {
|
||||||
reg = <8>;
|
reg = <8>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ð0 {
|
|
||||||
status = "okay";
|
|
||||||
ethernet0-port@0 {
|
|
||||||
phy-handle = <ðphy0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ð1 {
|
ð1 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
ethernet1-port@0 {
|
ethernet1-port@0 {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
clocks = <&ref12>;
|
clocks = <&ref12>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&sdhci {
|
&mmc {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -93,8 +93,8 @@
|
|||||||
clock-names = "PCLK";
|
clock-names = "PCLK";
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhci: sdhci@98e00000 {
|
mmc: mmc@98e00000 {
|
||||||
compatible = "moxa,moxart-sdhci";
|
compatible = "moxa,moxart-mmc";
|
||||||
reg = <0x98e00000 0x5C>;
|
reg = <0x98e00000 0x5C>;
|
||||||
interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk_apb>;
|
clocks = <&clk_apb>;
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ static __init void prom_init_mem(void)
|
|||||||
pr_debug("Assume 128MB RAM\n");
|
pr_debug("Assume 128MB RAM\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!memcmp(prom_init, prom_init + mem, 32))
|
if (!memcmp((void *)prom_init, (void *)prom_init + mem, 32))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lowmem = mem;
|
lowmem = mem;
|
||||||
@@ -162,7 +162,7 @@ void __init bcm47xx_prom_highmem_init(void)
|
|||||||
|
|
||||||
off = EXTVBASE + __pa(off);
|
off = EXTVBASE + __pa(off);
|
||||||
for (extmem = 128 << 20; extmem < 512 << 20; extmem <<= 1) {
|
for (extmem = 128 << 20; extmem < 512 << 20; extmem <<= 1) {
|
||||||
if (!memcmp(prom_init, (void *)(off + extmem), 16))
|
if (!memcmp((void *)prom_init, (void *)(off + extmem), 16))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
extmem -= lowmem;
|
extmem -= lowmem;
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power8
|
|||||||
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power9,-mtune=power8)
|
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power9,-mtune=power8)
|
||||||
else
|
else
|
||||||
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power7,$(call cc-option,-mtune=power5))
|
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power7,$(call cc-option,-mtune=power5))
|
||||||
CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mcpu=power5,-mcpu=power4)
|
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=power4
|
||||||
endif
|
endif
|
||||||
else ifdef CONFIG_PPC_BOOK3E_64
|
else ifdef CONFIG_PPC_BOOK3E_64
|
||||||
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
|
CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
|
||||||
|
|||||||
51
arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi
Normal file
51
arch/powerpc/boot/dts/fsl/e500v1_power_isa.dtsi
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* e500v1 Power ISA Device Tree Source (include)
|
||||||
|
*
|
||||||
|
* Copyright 2012 Freescale Semiconductor Inc.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of Freescale Semiconductor nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||||
|
* GNU General Public License ("GPL") as published by the Free Software
|
||||||
|
* Foundation, either version 2 of that License or (at your option) any
|
||||||
|
* later version.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
cpus {
|
||||||
|
power-isa-version = "2.03";
|
||||||
|
power-isa-b; // Base
|
||||||
|
power-isa-e; // Embedded
|
||||||
|
power-isa-atb; // Alternate Time Base
|
||||||
|
power-isa-cs; // Cache Specification
|
||||||
|
power-isa-e.le; // Embedded.Little-Endian
|
||||||
|
power-isa-e.pm; // Embedded.Performance Monitor
|
||||||
|
power-isa-ecl; // Embedded Cache Locking
|
||||||
|
power-isa-mmc; // Memory Coherence
|
||||||
|
power-isa-sp; // Signal Processing Engine
|
||||||
|
power-isa-sp.fs; // SPE.Embedded Float Scalar Single
|
||||||
|
power-isa-sp.fv; // SPE.Embedded Float Vector
|
||||||
|
mmu-type = "power-embedded";
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/include/ "e500v2_power_isa.dtsi"
|
/include/ "e500v1_power_isa.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "MPC8540ADS";
|
model = "MPC8540ADS";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/include/ "e500v2_power_isa.dtsi"
|
/include/ "e500v1_power_isa.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "MPC8541CDS";
|
model = "MPC8541CDS";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/include/ "e500v2_power_isa.dtsi"
|
/include/ "e500v1_power_isa.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "MPC8555CDS";
|
model = "MPC8555CDS";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
/include/ "e500v2_power_isa.dtsi"
|
/include/ "e500v1_power_isa.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "MPC8560ADS";
|
model = "MPC8560ADS";
|
||||||
|
|||||||
@@ -338,6 +338,7 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
|
|||||||
INIT_LIST_HEAD(&pdn->list);
|
INIT_LIST_HEAD(&pdn->list);
|
||||||
parent = of_get_parent(dn);
|
parent = of_get_parent(dn);
|
||||||
pdn->parent = parent ? PCI_DN(parent) : NULL;
|
pdn->parent = parent ? PCI_DN(parent) : NULL;
|
||||||
|
of_node_put(parent);
|
||||||
if (pdn->parent)
|
if (pdn->parent)
|
||||||
list_add_tail(&pdn->list, &pdn->parent->child_list);
|
list_add_tail(&pdn->list, &pdn->parent->child_list);
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/prctl.h>
|
#include <linux/prctl.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/reg.h>
|
#include <asm/reg.h>
|
||||||
|
|||||||
@@ -740,6 +740,7 @@ static void opal_export_attrs(void)
|
|||||||
kobj = kobject_create_and_add("exports", opal_kobj);
|
kobj = kobject_create_and_add("exports", opal_kobj);
|
||||||
if (!kobj) {
|
if (!kobj) {
|
||||||
pr_warn("kobject_create_and_add() of exports failed\n");
|
pr_warn("kobject_create_and_add() of exports failed\n");
|
||||||
|
of_node_put(np);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -216,8 +216,10 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
|
|||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"node %pOF has an invalid fsl,msi phandle %u\n",
|
"node %pOF has an invalid fsl,msi phandle %u\n",
|
||||||
hose->dn, np->phandle);
|
hose->dn, np->phandle);
|
||||||
|
of_node_put(np);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
for_each_pci_msi_entry(entry, pdev) {
|
for_each_pci_msi_entry(entry, pdev) {
|
||||||
|
|||||||
@@ -49,9 +49,16 @@ ifeq ($(CONFIG_RISCV_ISA_C),y)
|
|||||||
KBUILD_ARCH_C = c
|
KBUILD_ARCH_C = c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
KBUILD_AFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)fd$(KBUILD_ARCH_C)
|
# Newer binutils versions default to ISA spec version 20191213 which moves some
|
||||||
|
# instructions from the I extension to the Zicsr and Zifencei extensions.
|
||||||
|
toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zicsr_zifencei)
|
||||||
|
ifeq ($(toolchain-need-zicsr-zifencei),y)
|
||||||
|
KBUILD_ARCH_ZISCR_ZIFENCEI = _zicsr_zifencei
|
||||||
|
endif
|
||||||
|
|
||||||
KBUILD_CFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)$(KBUILD_ARCH_C)
|
KBUILD_AFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)fd$(KBUILD_ARCH_C)$(KBUILD_ARCH_ZISCR_ZIFENCEI)
|
||||||
|
|
||||||
|
KBUILD_CFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)$(KBUILD_ARCH_C)$(KBUILD_ARCH_ZISCR_ZIFENCEI)
|
||||||
KBUILD_CFLAGS += -mno-save-restore
|
KBUILD_CFLAGS += -mno-save-restore
|
||||||
KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
|
KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,
|
|||||||
if (unlikely(offset & (~PAGE_MASK >> page_shift_offset)))
|
if (unlikely(offset & (~PAGE_MASK >> page_shift_offset)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (unlikely((prot & PROT_WRITE) && !(prot & PROT_READ)))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
return ksys_mmap_pgoff(addr, len, prot, flags, fd,
|
return ksys_mmap_pgoff(addr, len, prot, flags, fd,
|
||||||
offset >> (PAGE_SHIFT - page_shift_offset));
|
offset >> (PAGE_SHIFT - page_shift_offset));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include <asm-generic/sections.h>
|
#include <asm-generic/sections.h>
|
||||||
|
|
||||||
extern long __machvec_start, __machvec_end;
|
extern char __machvec_start[], __machvec_end[];
|
||||||
extern char __uncached_start, __uncached_end;
|
extern char __uncached_start, __uncached_end;
|
||||||
extern char __start_eh_frame[], __stop_eh_frame[];
|
extern char __start_eh_frame[], __stop_eh_frame[];
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
#define MV_NAME_SIZE 32
|
#define MV_NAME_SIZE 32
|
||||||
|
|
||||||
#define for_each_mv(mv) \
|
#define for_each_mv(mv) \
|
||||||
for ((mv) = (struct sh_machine_vector *)&__machvec_start; \
|
for ((mv) = (struct sh_machine_vector *)__machvec_start; \
|
||||||
(mv) && (unsigned long)(mv) < (unsigned long)&__machvec_end; \
|
(mv) && (unsigned long)(mv) < (unsigned long)__machvec_end; \
|
||||||
(mv)++)
|
(mv)++)
|
||||||
|
|
||||||
static struct sh_machine_vector * __init get_mv_byname(const char *name)
|
static struct sh_machine_vector * __init get_mv_byname(const char *name)
|
||||||
@@ -89,8 +89,8 @@ void __init sh_mv_setup(void)
|
|||||||
if (!machvec_selected) {
|
if (!machvec_selected) {
|
||||||
unsigned long machvec_size;
|
unsigned long machvec_size;
|
||||||
|
|
||||||
machvec_size = ((unsigned long)&__machvec_end -
|
machvec_size = ((unsigned long)__machvec_end -
|
||||||
(unsigned long)&__machvec_start);
|
(unsigned long)__machvec_start);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check for machvec section alignment. Ensure
|
* Sanity check for machvec section alignment. Ensure
|
||||||
@@ -104,7 +104,7 @@ void __init sh_mv_setup(void)
|
|||||||
* vector (usually the only one) from .machvec.init.
|
* vector (usually the only one) from .machvec.init.
|
||||||
*/
|
*/
|
||||||
if (machvec_size >= sizeof(struct sh_machine_vector))
|
if (machvec_size >= sizeof(struct sh_machine_vector))
|
||||||
sh_mv = *(struct sh_machine_vector *)&__machvec_start;
|
sh_mv = *(struct sh_machine_vector *)__machvec_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_NOTICE "Booting machvec: %s\n", get_system_type());
|
printk(KERN_NOTICE "Booting machvec: %s\n", get_system_type());
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
|||||||
|
|
||||||
static void *c_start(struct seq_file *m, loff_t *pos)
|
static void *c_start(struct seq_file *m, loff_t *pos)
|
||||||
{
|
{
|
||||||
return *pos < NR_CPUS ? cpu_data + *pos : NULL;
|
return *pos < nr_cpu_ids ? cpu_data + *pos : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *c_next(struct seq_file *m, void *v, loff_t *pos)
|
static void *c_next(struct seq_file *m, void *v, loff_t *pos)
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ struct hv_enlightened_vmcs {
|
|||||||
u64 guest_rip;
|
u64 guest_rip;
|
||||||
|
|
||||||
u32 hv_clean_fields;
|
u32 hv_clean_fields;
|
||||||
u32 hv_padding_32;
|
u32 padding32_1;
|
||||||
u32 hv_synthetic_controls;
|
u32 hv_synthetic_controls;
|
||||||
struct {
|
struct {
|
||||||
u32 nested_flush_hypercall:1;
|
u32 nested_flush_hypercall:1;
|
||||||
@@ -690,7 +690,7 @@ struct hv_enlightened_vmcs {
|
|||||||
u32 reserved:30;
|
u32 reserved:30;
|
||||||
} hv_enlightenments_control;
|
} hv_enlightenments_control;
|
||||||
u32 hv_vp_id;
|
u32 hv_vp_id;
|
||||||
|
u32 padding32_2;
|
||||||
u64 hv_vm_id;
|
u64 hv_vm_id;
|
||||||
u64 partition_assist_page;
|
u64 partition_assist_page;
|
||||||
u64 padding64_4[4];
|
u64 padding64_4[4];
|
||||||
|
|||||||
@@ -1975,7 +1975,7 @@ static int em_pop_sreg(struct x86_emulate_ctxt *ctxt)
|
|||||||
if (rc != X86EMUL_CONTINUE)
|
if (rc != X86EMUL_CONTINUE)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
if (ctxt->modrm_reg == VCPU_SREG_SS)
|
if (seg == VCPU_SREG_SS)
|
||||||
ctxt->interruptibility = KVM_X86_SHADOW_INT_MOV_SS;
|
ctxt->interruptibility = KVM_X86_SHADOW_INT_MOV_SS;
|
||||||
if (ctxt->op_bytes > 2)
|
if (ctxt->op_bytes > 2)
|
||||||
rsp_increment(ctxt, ctxt->op_bytes - 2);
|
rsp_increment(ctxt, ctxt->op_bytes - 2);
|
||||||
|
|||||||
@@ -13276,14 +13276,6 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
|
|||||||
*/
|
*/
|
||||||
vmcs12_save_pending_event(vcpu, vmcs12);
|
vmcs12_save_pending_event(vcpu, vmcs12);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Drop what we picked up for L2 via vmx_complete_interrupts. It is
|
|
||||||
* preserved above and would only end up incorrectly in L1.
|
|
||||||
*/
|
|
||||||
vcpu->arch.nmi_injected = false;
|
|
||||||
kvm_clear_exception_queue(vcpu);
|
|
||||||
kvm_clear_interrupt_queue(vcpu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -13617,6 +13609,17 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
|
|||||||
nested_vmx_abort(vcpu, VMX_ABORT_SAVE_GUEST_MSR_FAIL);
|
nested_vmx_abort(vcpu, VMX_ABORT_SAVE_GUEST_MSR_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Drop events/exceptions that were queued for re-injection to L2
|
||||||
|
* (picked up via vmx_complete_interrupts()), as well as exceptions
|
||||||
|
* that were pending for L2. Note, this must NOT be hoisted above
|
||||||
|
* prepare_vmcs12(), events/exceptions queued for re-injection need to
|
||||||
|
* be captured in vmcs12 (see vmcs12_save_pending_event()).
|
||||||
|
*/
|
||||||
|
vcpu->arch.nmi_injected = false;
|
||||||
|
kvm_clear_exception_queue(vcpu);
|
||||||
|
kvm_clear_interrupt_queue(vcpu);
|
||||||
|
|
||||||
vmx_switch_vmcs(vcpu, &vmx->vmcs01);
|
vmx_switch_vmcs(vcpu, &vmx->vmcs01);
|
||||||
vm_entry_controls_reset_shadow(vmx);
|
vm_entry_controls_reset_shadow(vmx);
|
||||||
vm_exit_controls_reset_shadow(vmx);
|
vm_exit_controls_reset_shadow(vmx);
|
||||||
|
|||||||
@@ -6,10 +6,9 @@
|
|||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <sysdep/ptrace.h>
|
#include <sysdep/ptrace.h>
|
||||||
|
|
||||||
typedef long syscall_handler_t(struct pt_regs);
|
typedef long syscall_handler_t(struct syscall_args);
|
||||||
|
|
||||||
extern syscall_handler_t *sys_call_table[];
|
extern syscall_handler_t *sys_call_table[];
|
||||||
|
|
||||||
#define EXECUTE_SYSCALL(syscall, regs) \
|
#define EXECUTE_SYSCALL(syscall, regs) \
|
||||||
((long (*)(struct syscall_args)) \
|
((*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs))
|
||||||
(*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs))
|
|
||||||
|
|||||||
@@ -65,9 +65,6 @@ static int get_free_idx(struct task_struct* task)
|
|||||||
struct thread_struct *t = &task->thread;
|
struct thread_struct *t = &task->thread;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
if (!t->arch.tls_array)
|
|
||||||
return GDT_ENTRY_TLS_MIN;
|
|
||||||
|
|
||||||
for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++)
|
for (idx = 0; idx < GDT_ENTRY_TLS_ENTRIES; idx++)
|
||||||
if (!t->arch.tls_array[idx].present)
|
if (!t->arch.tls_array[idx].present)
|
||||||
return idx + GDT_ENTRY_TLS_MIN;
|
return idx + GDT_ENTRY_TLS_MIN;
|
||||||
@@ -242,9 +239,6 @@ static int get_tls_entry(struct task_struct *task, struct user_desc *info,
|
|||||||
{
|
{
|
||||||
struct thread_struct *t = &task->thread;
|
struct thread_struct *t = &task->thread;
|
||||||
|
|
||||||
if (!t->arch.tls_array)
|
|
||||||
goto clear;
|
|
||||||
|
|
||||||
if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
|
if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
|||||||
@@ -511,6 +511,22 @@ static const struct dmi_system_id video_dmi_table[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE R830"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE R830"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = video_disable_backlight_sysfs_if,
|
||||||
|
.ident = "Toshiba Satellite Z830",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE Z830"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = video_disable_backlight_sysfs_if,
|
||||||
|
.ident = "Toshiba Portege Z830",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE Z830"),
|
||||||
|
},
|
||||||
|
},
|
||||||
/*
|
/*
|
||||||
* Some machine's _DOD IDs don't have bit 31(Device ID Scheme) set
|
* Some machine's _DOD IDs don't have bit 31(Device ID Scheme) set
|
||||||
* but the IDs actually follow the Device ID Scheme.
|
* but the IDs actually follow the Device ID Scheme.
|
||||||
|
|||||||
@@ -421,14 +421,24 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hpriv->nports = child_nodes = of_get_child_count(dev->of_node);
|
/*
|
||||||
|
* Too many sub-nodes most likely means having something wrong with
|
||||||
|
* the firmware.
|
||||||
|
*/
|
||||||
|
child_nodes = of_get_child_count(dev->of_node);
|
||||||
|
if (child_nodes > AHCI_MAX_PORTS) {
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If no sub-node was found, we still need to set nports to
|
* If no sub-node was found, we still need to set nports to
|
||||||
* one in order to be able to use the
|
* one in order to be able to use the
|
||||||
* ahci_platform_[en|dis]able_[phys|regulators] functions.
|
* ahci_platform_[en|dis]able_[phys|regulators] functions.
|
||||||
*/
|
*/
|
||||||
if (!child_nodes)
|
if (child_nodes)
|
||||||
|
hpriv->nports = child_nodes;
|
||||||
|
else
|
||||||
hpriv->nports = 1;
|
hpriv->nports = 1;
|
||||||
|
|
||||||
hpriv->phys = devm_kcalloc(dev, hpriv->nports, sizeof(*hpriv->phys), GFP_KERNEL);
|
hpriv->phys = devm_kcalloc(dev, hpriv->nports, sizeof(*hpriv->phys), GFP_KERNEL);
|
||||||
|
|||||||
@@ -1271,10 +1271,12 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *b
|
|||||||
mutex_unlock(&nbd->config_lock);
|
mutex_unlock(&nbd->config_lock);
|
||||||
ret = wait_event_interruptible(config->recv_wq,
|
ret = wait_event_interruptible(config->recv_wq,
|
||||||
atomic_read(&config->recv_threads) == 0);
|
atomic_read(&config->recv_threads) == 0);
|
||||||
if (ret)
|
if (ret) {
|
||||||
sock_shutdown(nbd);
|
sock_shutdown(nbd);
|
||||||
flush_workqueue(nbd->recv_workq);
|
nbd_clear_que(nbd);
|
||||||
|
}
|
||||||
|
|
||||||
|
flush_workqueue(nbd->recv_workq);
|
||||||
mutex_lock(&nbd->config_lock);
|
mutex_lock(&nbd->config_lock);
|
||||||
nbd_bdev_reset(bdev);
|
nbd_bdev_reset(bdev);
|
||||||
/* user requested, ignore socket errors */
|
/* user requested, ignore socket errors */
|
||||||
|
|||||||
@@ -893,8 +893,8 @@ static const struct memdev {
|
|||||||
#endif
|
#endif
|
||||||
[5] = { "zero", 0666, &zero_fops, 0 },
|
[5] = { "zero", 0666, &zero_fops, 0 },
|
||||||
[7] = { "full", 0666, &full_fops, 0 },
|
[7] = { "full", 0666, &full_fops, 0 },
|
||||||
[8] = { "random", 0666, &random_fops, 0 },
|
[8] = { "random", 0666, &random_fops, FMODE_NOWAIT },
|
||||||
[9] = { "urandom", 0666, &urandom_fops, 0 },
|
[9] = { "urandom", 0666, &urandom_fops, FMODE_NOWAIT },
|
||||||
#ifdef CONFIG_PRINTK
|
#ifdef CONFIG_PRINTK
|
||||||
[11] = { "kmsg", 0644, &kmsg_fops, 0 },
|
[11] = { "kmsg", 0644, &kmsg_fops, 0 },
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -891,20 +891,23 @@ void __init add_bootloader_randomness(const void *buf, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct fast_pool {
|
struct fast_pool {
|
||||||
struct work_struct mix;
|
|
||||||
unsigned long pool[4];
|
unsigned long pool[4];
|
||||||
unsigned long last;
|
unsigned long last;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
struct timer_list mix;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void mix_interrupt_randomness(struct timer_list *work);
|
||||||
|
|
||||||
static DEFINE_PER_CPU(struct fast_pool, irq_randomness) = {
|
static DEFINE_PER_CPU(struct fast_pool, irq_randomness) = {
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
#define FASTMIX_PERM SIPHASH_PERMUTATION
|
#define FASTMIX_PERM SIPHASH_PERMUTATION
|
||||||
.pool = { SIPHASH_CONST_0, SIPHASH_CONST_1, SIPHASH_CONST_2, SIPHASH_CONST_3 }
|
.pool = { SIPHASH_CONST_0, SIPHASH_CONST_1, SIPHASH_CONST_2, SIPHASH_CONST_3 },
|
||||||
#else
|
#else
|
||||||
#define FASTMIX_PERM HSIPHASH_PERMUTATION
|
#define FASTMIX_PERM HSIPHASH_PERMUTATION
|
||||||
.pool = { HSIPHASH_CONST_0, HSIPHASH_CONST_1, HSIPHASH_CONST_2, HSIPHASH_CONST_3 }
|
.pool = { HSIPHASH_CONST_0, HSIPHASH_CONST_1, HSIPHASH_CONST_2, HSIPHASH_CONST_3 },
|
||||||
#endif
|
#endif
|
||||||
|
.mix = __TIMER_INITIALIZER(mix_interrupt_randomness, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -946,7 +949,7 @@ int __cold random_online_cpu(unsigned int cpu)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void mix_interrupt_randomness(struct work_struct *work)
|
static void mix_interrupt_randomness(struct timer_list *work)
|
||||||
{
|
{
|
||||||
struct fast_pool *fast_pool = container_of(work, struct fast_pool, mix);
|
struct fast_pool *fast_pool = container_of(work, struct fast_pool, mix);
|
||||||
/*
|
/*
|
||||||
@@ -977,7 +980,7 @@ static void mix_interrupt_randomness(struct work_struct *work)
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
mix_pool_bytes(pool, sizeof(pool));
|
mix_pool_bytes(pool, sizeof(pool));
|
||||||
credit_init_bits(max(1u, (count & U16_MAX) / 64));
|
credit_init_bits(clamp_t(unsigned int, (count & U16_MAX) / 64, 1, sizeof(pool) * 8));
|
||||||
|
|
||||||
memzero_explicit(pool, sizeof(pool));
|
memzero_explicit(pool, sizeof(pool));
|
||||||
}
|
}
|
||||||
@@ -1000,10 +1003,11 @@ void add_interrupt_randomness(int irq)
|
|||||||
if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
|
if (new_count < 1024 && !time_is_before_jiffies(fast_pool->last + HZ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (unlikely(!fast_pool->mix.func))
|
|
||||||
INIT_WORK(&fast_pool->mix, mix_interrupt_randomness);
|
|
||||||
fast_pool->count |= MIX_INFLIGHT;
|
fast_pool->count |= MIX_INFLIGHT;
|
||||||
queue_work_on(raw_smp_processor_id(), system_highpri_wq, &fast_pool->mix);
|
if (!timer_pending(&fast_pool->mix)) {
|
||||||
|
fast_pool->mix.expires = jiffies;
|
||||||
|
add_timer_on(&fast_pool->mix, raw_smp_processor_id());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(add_interrupt_randomness);
|
EXPORT_SYMBOL_GPL(add_interrupt_randomness);
|
||||||
|
|
||||||
@@ -1295,6 +1299,11 @@ static ssize_t random_read_iter(struct kiocb *kiocb, struct iov_iter *iter)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!crng_ready() &&
|
||||||
|
((kiocb->ki_flags & IOCB_NOWAIT) ||
|
||||||
|
(kiocb->ki_filp->f_flags & O_NONBLOCK)))
|
||||||
|
return -EAGAIN;
|
||||||
|
|
||||||
ret = wait_for_random_bytes();
|
ret = wait_for_random_bytes();
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -950,9 +950,9 @@ static u32 bcm2835_clock_choose_div(struct clk_hw *hw,
|
|||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long bcm2835_clock_rate_from_divisor(struct bcm2835_clock *clock,
|
static unsigned long bcm2835_clock_rate_from_divisor(struct bcm2835_clock *clock,
|
||||||
unsigned long parent_rate,
|
unsigned long parent_rate,
|
||||||
u32 div)
|
u32 div)
|
||||||
{
|
{
|
||||||
const struct bcm2835_clock_data *data = clock->data;
|
const struct bcm2835_clock_data *data = clock->data;
|
||||||
u64 temp;
|
u64 temp;
|
||||||
@@ -1737,7 +1737,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
|||||||
.load_mask = CM_PLLC_LOADPER,
|
.load_mask = CM_PLLC_LOADPER,
|
||||||
.hold_mask = CM_PLLC_HOLDPER,
|
.hold_mask = CM_PLLC_HOLDPER,
|
||||||
.fixed_divider = 1,
|
.fixed_divider = 1,
|
||||||
.flags = CLK_SET_RATE_PARENT),
|
.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PLLD is the display PLL, used to drive DSI display panels.
|
* PLLD is the display PLL, used to drive DSI display panels.
|
||||||
|
|||||||
@@ -499,12 +499,15 @@ static void __init berlin2_clock_setup(struct device_node *np)
|
|||||||
int n, ret;
|
int n, ret;
|
||||||
|
|
||||||
clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
|
clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
|
||||||
if (!clk_data)
|
if (!clk_data) {
|
||||||
|
of_node_put(parent_np);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
clk_data->num = MAX_CLKS;
|
clk_data->num = MAX_CLKS;
|
||||||
hws = clk_data->hws;
|
hws = clk_data->hws;
|
||||||
|
|
||||||
gbase = of_iomap(parent_np, 0);
|
gbase = of_iomap(parent_np, 0);
|
||||||
|
of_node_put(parent_np);
|
||||||
if (!gbase)
|
if (!gbase)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -285,19 +285,23 @@ static void __init berlin2q_clock_setup(struct device_node *np)
|
|||||||
int n, ret;
|
int n, ret;
|
||||||
|
|
||||||
clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
|
clk_data = kzalloc(struct_size(clk_data, hws, MAX_CLKS), GFP_KERNEL);
|
||||||
if (!clk_data)
|
if (!clk_data) {
|
||||||
|
of_node_put(parent_np);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
clk_data->num = MAX_CLKS;
|
clk_data->num = MAX_CLKS;
|
||||||
hws = clk_data->hws;
|
hws = clk_data->hws;
|
||||||
|
|
||||||
gbase = of_iomap(parent_np, 0);
|
gbase = of_iomap(parent_np, 0);
|
||||||
if (!gbase) {
|
if (!gbase) {
|
||||||
|
of_node_put(parent_np);
|
||||||
pr_err("%pOF: Unable to map global base\n", np);
|
pr_err("%pOF: Unable to map global base\n", np);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BG2Q CPU PLL is not part of global registers */
|
/* BG2Q CPU PLL is not part of global registers */
|
||||||
cpupll_base = of_iomap(parent_np, 1);
|
cpupll_base = of_iomap(parent_np, 1);
|
||||||
|
of_node_put(parent_np);
|
||||||
if (!cpupll_base) {
|
if (!cpupll_base) {
|
||||||
pr_err("%pOF: Unable to map cpupll base\n", np);
|
pr_err("%pOF: Unable to map cpupll base\n", np);
|
||||||
iounmap(gbase);
|
iounmap(gbase);
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ static const struct of_device_id oxnas_stdclk_dt_ids[] = {
|
|||||||
|
|
||||||
static int oxnas_stdclk_probe(struct platform_device *pdev)
|
static int oxnas_stdclk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device_node *np = pdev->dev.of_node;
|
struct device_node *np = pdev->dev.of_node, *parent_np;
|
||||||
const struct oxnas_stdclk_data *data;
|
const struct oxnas_stdclk_data *data;
|
||||||
const struct of_device_id *id;
|
const struct of_device_id *id;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
@@ -230,7 +230,9 @@ static int oxnas_stdclk_probe(struct platform_device *pdev)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
data = id->data;
|
data = id->data;
|
||||||
|
|
||||||
regmap = syscon_node_to_regmap(of_get_parent(np));
|
parent_np = of_get_parent(np);
|
||||||
|
regmap = syscon_node_to_regmap(parent_np);
|
||||||
|
of_node_put(parent_np);
|
||||||
if (IS_ERR(regmap)) {
|
if (IS_ERR(regmap)) {
|
||||||
dev_err(&pdev->dev, "failed to have parent regmap\n");
|
dev_err(&pdev->dev, "failed to have parent regmap\n");
|
||||||
return PTR_ERR(regmap);
|
return PTR_ERR(regmap);
|
||||||
|
|||||||
@@ -1348,6 +1348,7 @@ static void __init tegra114_clock_init(struct device_node *np)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pmc_base = of_iomap(node, 0);
|
pmc_base = of_iomap(node, 0);
|
||||||
|
of_node_put(node);
|
||||||
if (!pmc_base) {
|
if (!pmc_base) {
|
||||||
pr_err("Can't map pmc registers\n");
|
pr_err("Can't map pmc registers\n");
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
|
|||||||
@@ -1152,6 +1152,7 @@ static void __init tegra20_clock_init(struct device_node *np)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pmc_base = of_iomap(node, 0);
|
pmc_base = of_iomap(node, 0);
|
||||||
|
of_node_put(node);
|
||||||
if (!pmc_base) {
|
if (!pmc_base) {
|
||||||
pr_err("Can't map pmc registers\n");
|
pr_err("Can't map pmc registers\n");
|
||||||
BUG();
|
BUG();
|
||||||
|
|||||||
@@ -3529,6 +3529,7 @@ static void __init tegra210_clock_init(struct device_node *np)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pmc_base = of_iomap(node, 0);
|
pmc_base = of_iomap(node, 0);
|
||||||
|
of_node_put(node);
|
||||||
if (!pmc_base) {
|
if (!pmc_base) {
|
||||||
pr_err("Can't map pmc registers\n");
|
pr_err("Can't map pmc registers\n");
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
|
|||||||
@@ -252,14 +252,16 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
pr_err("%s: failed to lookup atl clock %d\n", __func__,
|
pr_err("%s: failed to lookup atl clock %d\n", __func__,
|
||||||
i);
|
i);
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto pm_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
clk = of_clk_get_from_provider(&clkspec);
|
clk = of_clk_get_from_provider(&clkspec);
|
||||||
if (IS_ERR(clk)) {
|
if (IS_ERR(clk)) {
|
||||||
pr_err("%s: failed to get atl clock %d from provider\n",
|
pr_err("%s: failed to get atl clock %d from provider\n",
|
||||||
__func__, i);
|
__func__, i);
|
||||||
return PTR_ERR(clk);
|
ret = PTR_ERR(clk);
|
||||||
|
goto pm_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
cdesc = to_atl_desc(__clk_get_hw(clk));
|
cdesc = to_atl_desc(__clk_get_hw(clk));
|
||||||
@@ -292,8 +294,9 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)
|
|||||||
if (cdesc->enabled)
|
if (cdesc->enabled)
|
||||||
atl_clk_enable(__clk_get_hw(clk));
|
atl_clk_enable(__clk_get_hw(clk));
|
||||||
}
|
}
|
||||||
pm_runtime_put_sync(cinfo->dev);
|
|
||||||
|
|
||||||
|
pm_put:
|
||||||
|
pm_runtime_put_sync(cinfo->dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -257,6 +257,7 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)
|
|||||||
const struct firmware *fw_entry;
|
const struct firmware *fw_entry;
|
||||||
struct device *dev = &cpt->pdev->dev;
|
struct device *dev = &cpt->pdev->dev;
|
||||||
struct ucode_header *ucode;
|
struct ucode_header *ucode;
|
||||||
|
unsigned int code_length;
|
||||||
struct microcode *mcode;
|
struct microcode *mcode;
|
||||||
int j, ret = 0;
|
int j, ret = 0;
|
||||||
|
|
||||||
@@ -267,11 +268,12 @@ static int cpt_ucode_load_fw(struct cpt_device *cpt, const u8 *fw, bool is_ae)
|
|||||||
ucode = (struct ucode_header *)fw_entry->data;
|
ucode = (struct ucode_header *)fw_entry->data;
|
||||||
mcode = &cpt->mcode[cpt->next_mc_idx];
|
mcode = &cpt->mcode[cpt->next_mc_idx];
|
||||||
memcpy(mcode->version, (u8 *)fw_entry->data, CPT_UCODE_VERSION_SZ);
|
memcpy(mcode->version, (u8 *)fw_entry->data, CPT_UCODE_VERSION_SZ);
|
||||||
mcode->code_size = ntohl(ucode->code_length) * 2;
|
code_length = ntohl(ucode->code_length);
|
||||||
if (!mcode->code_size) {
|
if (code_length == 0 || code_length >= INT_MAX / 2) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fw_release;
|
goto fw_release;
|
||||||
}
|
}
|
||||||
|
mcode->code_size = code_length * 2;
|
||||||
|
|
||||||
mcode->is_ae = is_ae;
|
mcode->is_ae = is_ae;
|
||||||
mcode->core_mask = 0ULL;
|
mcode->core_mask = 0ULL;
|
||||||
|
|||||||
@@ -653,7 +653,7 @@ static void __cleanup(struct ioatdma_chan *ioat_chan, dma_addr_t phys_complete)
|
|||||||
if (active - i == 0) {
|
if (active - i == 0) {
|
||||||
dev_dbg(to_dev(ioat_chan), "%s: cancel completion timeout\n",
|
dev_dbg(to_dev(ioat_chan), "%s: cancel completion timeout\n",
|
||||||
__func__);
|
__func__);
|
||||||
mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
mod_timer_pending(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* microsecond delay by sysfs variable per pending descriptor */
|
/* microsecond delay by sysfs variable per pending descriptor */
|
||||||
@@ -679,7 +679,7 @@ static void ioat_cleanup(struct ioatdma_chan *ioat_chan)
|
|||||||
|
|
||||||
if (chanerr &
|
if (chanerr &
|
||||||
(IOAT_CHANERR_HANDLE_MASK | IOAT_CHANERR_RECOVER_MASK)) {
|
(IOAT_CHANERR_HANDLE_MASK | IOAT_CHANERR_RECOVER_MASK)) {
|
||||||
mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
mod_timer_pending(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
||||||
ioat_eh(ioat_chan);
|
ioat_eh(ioat_chan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -876,7 +876,7 @@ static void check_active(struct ioatdma_chan *ioat_chan)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (test_and_clear_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
|
if (test_and_clear_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
|
||||||
mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
mod_timer_pending(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ioat_timer_event(struct timer_list *t)
|
void ioat_timer_event(struct timer_list *t)
|
||||||
|
|||||||
@@ -2654,7 +2654,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)
|
|||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
dev_err(xdev->dev,
|
dev_err(xdev->dev,
|
||||||
"missing xlnx,num-fstores property\n");
|
"missing xlnx,num-fstores property\n");
|
||||||
return err;
|
goto disable_clks;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = of_property_read_u32(node, "xlnx,flush-fsync",
|
err = of_property_read_u32(node, "xlnx,flush-fsync",
|
||||||
@@ -2674,7 +2674,11 @@ static int xilinx_dma_probe(struct platform_device *pdev)
|
|||||||
xdev->ext_addr = false;
|
xdev->ext_addr = false;
|
||||||
|
|
||||||
/* Set the dma mask bits */
|
/* Set the dma mask bits */
|
||||||
dma_set_mask_and_coherent(xdev->dev, DMA_BIT_MASK(addr_width));
|
err = dma_set_mask_and_coherent(xdev->dev, DMA_BIT_MASK(addr_width));
|
||||||
|
if (err < 0) {
|
||||||
|
dev_err(xdev->dev, "DMA mask error %d\n", err);
|
||||||
|
goto disable_clks;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the DMA engine */
|
/* Initialize the DMA engine */
|
||||||
xdev->common.dev = &pdev->dev;
|
xdev->common.dev = &pdev->dev;
|
||||||
|
|||||||
@@ -106,9 +106,28 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev)
|
|||||||
scmi_pd_data->domains = domains;
|
scmi_pd_data->domains = domains;
|
||||||
scmi_pd_data->num_domains = num_domains;
|
scmi_pd_data->num_domains = num_domains;
|
||||||
|
|
||||||
|
dev_set_drvdata(dev, scmi_pd_data);
|
||||||
|
|
||||||
return of_genpd_add_provider_onecell(np, scmi_pd_data);
|
return of_genpd_add_provider_onecell(np, scmi_pd_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void scmi_pm_domain_remove(struct scmi_device *sdev)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct genpd_onecell_data *scmi_pd_data;
|
||||||
|
struct device *dev = &sdev->dev;
|
||||||
|
struct device_node *np = dev->of_node;
|
||||||
|
|
||||||
|
of_genpd_del_provider(np);
|
||||||
|
|
||||||
|
scmi_pd_data = dev_get_drvdata(dev);
|
||||||
|
for (i = 0; i < scmi_pd_data->num_domains; i++) {
|
||||||
|
if (!scmi_pd_data->domains[i])
|
||||||
|
continue;
|
||||||
|
pm_genpd_remove(scmi_pd_data->domains[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const struct scmi_device_id scmi_id_table[] = {
|
static const struct scmi_device_id scmi_id_table[] = {
|
||||||
{ SCMI_PROTOCOL_POWER },
|
{ SCMI_PROTOCOL_POWER },
|
||||||
{ },
|
{ },
|
||||||
@@ -118,6 +137,7 @@ MODULE_DEVICE_TABLE(scmi, scmi_id_table);
|
|||||||
static struct scmi_driver scmi_power_domain_driver = {
|
static struct scmi_driver scmi_power_domain_driver = {
|
||||||
.name = "scmi-power-domain",
|
.name = "scmi-power-domain",
|
||||||
.probe = scmi_pm_domain_probe,
|
.probe = scmi_pm_domain_probe,
|
||||||
|
.remove = scmi_pm_domain_remove,
|
||||||
.id_table = scmi_id_table,
|
.id_table = scmi_id_table,
|
||||||
};
|
};
|
||||||
module_scmi_driver(scmi_power_domain_driver);
|
module_scmi_driver(scmi_power_domain_driver);
|
||||||
|
|||||||
@@ -301,14 +301,6 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Now that we have done our final memory allocation (and free)
|
|
||||||
* we can get the memory map key needed for exit_boot_services().
|
|
||||||
*/
|
|
||||||
status = efi_get_memory_map(sys_table, &map);
|
|
||||||
if (status != EFI_SUCCESS)
|
|
||||||
goto fail_free_new_fdt;
|
|
||||||
|
|
||||||
status = update_fdt(sys_table, (void *)fdt_addr, fdt_size,
|
status = update_fdt(sys_table, (void *)fdt_addr, fdt_size,
|
||||||
(void *)*new_fdt_addr, MAX_FDT_SIZE, cmdline_ptr,
|
(void *)*new_fdt_addr, MAX_FDT_SIZE, cmdline_ptr,
|
||||||
initrd_addr, initrd_size);
|
initrd_addr, initrd_size);
|
||||||
|
|||||||
@@ -661,6 +661,15 @@ static struct notifier_block gsmi_die_notifier = {
|
|||||||
static int gsmi_panic_callback(struct notifier_block *nb,
|
static int gsmi_panic_callback(struct notifier_block *nb,
|
||||||
unsigned long reason, void *arg)
|
unsigned long reason, void *arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Panic callbacks are executed with all other CPUs stopped,
|
||||||
|
* so we must not attempt to spin waiting for gsmi_dev.lock
|
||||||
|
* to be released.
|
||||||
|
*/
|
||||||
|
if (spin_is_locked(&gsmi_dev.lock))
|
||||||
|
return NOTIFY_DONE;
|
||||||
|
|
||||||
gsmi_shutdown_reason(GSMI_SHUTDOWN_PANIC);
|
gsmi_shutdown_reason(GSMI_SHUTDOWN_PANIC);
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1279,6 +1279,9 @@ int fsi_master_register(struct fsi_master *master)
|
|||||||
|
|
||||||
mutex_init(&master->scan_lock);
|
mutex_init(&master->scan_lock);
|
||||||
master->idx = ida_simple_get(&master_ida, 0, INT_MAX, GFP_KERNEL);
|
master->idx = ida_simple_get(&master_ida, 0, INT_MAX, GFP_KERNEL);
|
||||||
|
if (master->idx < 0)
|
||||||
|
return master->idx;
|
||||||
|
|
||||||
dev_set_name(&master->dev, "fsi%d", master->idx);
|
dev_set_name(&master->dev, "fsi%d", master->idx);
|
||||||
|
|
||||||
rc = device_register(&master->dev);
|
rc = device_register(&master->dev);
|
||||||
|
|||||||
@@ -1638,10 +1638,12 @@ amdgpu_connector_add(struct amdgpu_device *adev,
|
|||||||
adev->mode_info.dither_property,
|
adev->mode_info.dither_property,
|
||||||
AMDGPU_FMT_DITHER_DISABLE);
|
AMDGPU_FMT_DITHER_DISABLE);
|
||||||
|
|
||||||
if (amdgpu_audio != 0)
|
if (amdgpu_audio != 0) {
|
||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.audio_property,
|
adev->mode_info.audio_property,
|
||||||
AMDGPU_AUDIO_AUTO);
|
AMDGPU_AUDIO_AUTO);
|
||||||
|
amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
subpixel_order = SubPixelHorizontalRGB;
|
subpixel_order = SubPixelHorizontalRGB;
|
||||||
connector->interlace_allowed = true;
|
connector->interlace_allowed = true;
|
||||||
@@ -1746,6 +1748,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
|
|||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.audio_property,
|
adev->mode_info.audio_property,
|
||||||
AMDGPU_AUDIO_AUTO);
|
AMDGPU_AUDIO_AUTO);
|
||||||
|
amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
|
||||||
}
|
}
|
||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.dither_property,
|
adev->mode_info.dither_property,
|
||||||
@@ -1794,6 +1797,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
|
|||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.audio_property,
|
adev->mode_info.audio_property,
|
||||||
AMDGPU_AUDIO_AUTO);
|
AMDGPU_AUDIO_AUTO);
|
||||||
|
amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
|
||||||
}
|
}
|
||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.dither_property,
|
adev->mode_info.dither_property,
|
||||||
@@ -1839,6 +1843,7 @@ amdgpu_connector_add(struct amdgpu_device *adev,
|
|||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.audio_property,
|
adev->mode_info.audio_property,
|
||||||
AMDGPU_AUDIO_AUTO);
|
AMDGPU_AUDIO_AUTO);
|
||||||
|
amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
|
||||||
}
|
}
|
||||||
drm_object_attach_property(&amdgpu_connector->base.base,
|
drm_object_attach_property(&amdgpu_connector->base.base,
|
||||||
adev->mode_info.dither_property,
|
adev->mode_info.dither_property,
|
||||||
|
|||||||
@@ -26,12 +26,12 @@
|
|||||||
#include "bw_fixed.h"
|
#include "bw_fixed.h"
|
||||||
|
|
||||||
|
|
||||||
#define MIN_I64 \
|
|
||||||
(int64_t)(-(1LL << 63))
|
|
||||||
|
|
||||||
#define MAX_I64 \
|
#define MAX_I64 \
|
||||||
(int64_t)((1ULL << 63) - 1)
|
(int64_t)((1ULL << 63) - 1)
|
||||||
|
|
||||||
|
#define MIN_I64 \
|
||||||
|
(-MAX_I64 - 1)
|
||||||
|
|
||||||
#define FRACTIONAL_PART_MASK \
|
#define FRACTIONAL_PART_MASK \
|
||||||
((1ULL << BW_FIXED_BITS_PER_FRACTIONAL_PART) - 1)
|
((1ULL << BW_FIXED_BITS_PER_FRACTIONAL_PART) - 1)
|
||||||
|
|
||||||
|
|||||||
@@ -383,10 +383,7 @@ void adv7511_cec_irq_process(struct adv7511 *adv7511, unsigned int irq1);
|
|||||||
#else
|
#else
|
||||||
static inline int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511)
|
static inline int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511)
|
||||||
{
|
{
|
||||||
unsigned int offset = adv7511->type == ADV7533 ?
|
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL,
|
||||||
ADV7533_REG_CEC_OFFSET : 0;
|
|
||||||
|
|
||||||
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset,
|
|
||||||
ADV7511_CEC_CTRL_POWER_DOWN);
|
ADV7511_CEC_CTRL_POWER_DOWN);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511)
|
|||||||
goto err_cec_alloc;
|
goto err_cec_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset, 0);
|
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL, 0);
|
||||||
/* cec soft reset */
|
/* cec soft reset */
|
||||||
regmap_write(adv7511->regmap_cec,
|
regmap_write(adv7511->regmap_cec,
|
||||||
ADV7511_REG_CEC_SOFT_RESET + offset, 0x01);
|
ADV7511_REG_CEC_SOFT_RESET + offset, 0x01);
|
||||||
@@ -343,7 +343,7 @@ int adv7511_cec_init(struct device *dev, struct adv7511 *adv7511)
|
|||||||
dev_info(dev, "Initializing CEC failed with error %d, disabling CEC\n",
|
dev_info(dev, "Initializing CEC failed with error %d, disabling CEC\n",
|
||||||
ret);
|
ret);
|
||||||
err_cec_parse_dt:
|
err_cec_parse_dt:
|
||||||
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL + offset,
|
regmap_write(adv7511->regmap, ADV7511_REG_CEC_CTRL,
|
||||||
ADV7511_CEC_CTRL_POWER_DOWN);
|
ADV7511_CEC_CTRL_POWER_DOWN);
|
||||||
return ret == -EPROBE_DEFER ? ret : 0;
|
return ret == -EPROBE_DEFER ? ret : 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -290,7 +290,9 @@ static void ge_b850v3_lvds_remove(void)
|
|||||||
* This check is to avoid both the drivers
|
* This check is to avoid both the drivers
|
||||||
* removing the bridge in their remove() function
|
* removing the bridge in their remove() function
|
||||||
*/
|
*/
|
||||||
if (!ge_b850v3_lvds_ptr)
|
if (!ge_b850v3_lvds_ptr ||
|
||||||
|
!ge_b850v3_lvds_ptr->stdp2690_i2c ||
|
||||||
|
!ge_b850v3_lvds_ptr->stdp4028_i2c)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
drm_bridge_remove(&ge_b850v3_lvds_ptr->bridge);
|
drm_bridge_remove(&ge_b850v3_lvds_ptr->bridge);
|
||||||
|
|||||||
@@ -458,7 +458,13 @@ EXPORT_SYMBOL(drm_invalid_op);
|
|||||||
*/
|
*/
|
||||||
static int drm_copy_field(char __user *buf, size_t *buf_len, const char *value)
|
static int drm_copy_field(char __user *buf, size_t *buf_len, const char *value)
|
||||||
{
|
{
|
||||||
int len;
|
size_t len;
|
||||||
|
|
||||||
|
/* don't attempt to copy a NULL pointer */
|
||||||
|
if (WARN_ONCE(!value, "BUG: the value to copy was not set!")) {
|
||||||
|
*buf_len = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* don't overflow userbuf */
|
/* don't overflow userbuf */
|
||||||
len = strlen(value);
|
len = strlen(value);
|
||||||
|
|||||||
@@ -305,6 +305,7 @@ static int mipi_dsi_remove_device_fn(struct device *dev, void *priv)
|
|||||||
{
|
{
|
||||||
struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
|
struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
|
||||||
|
|
||||||
|
mipi_dsi_detach(dsi);
|
||||||
mipi_dsi_device_unregister(dsi);
|
mipi_dsi_device_unregister(dsi);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -95,6 +95,12 @@ static const struct dmi_system_id orientation_data[] = {
|
|||||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"),
|
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"),
|
||||||
},
|
},
|
||||||
.driver_data = (void *)&lcd800x1280_rightside_up,
|
.driver_data = (void *)&lcd800x1280_rightside_up,
|
||||||
|
}, { /* Anbernic Win600 */
|
||||||
|
.matches = {
|
||||||
|
DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Anbernic"),
|
||||||
|
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Win600"),
|
||||||
|
},
|
||||||
|
.driver_data = (void *)&lcd720x1280_rightside_up,
|
||||||
}, { /* Asus T100HA */
|
}, { /* Asus T100HA */
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||||
|
|||||||
@@ -654,12 +654,10 @@ static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
|
|||||||
_dpu_kms_mmu_destroy(dpu_kms);
|
_dpu_kms_mmu_destroy(dpu_kms);
|
||||||
|
|
||||||
if (dpu_kms->catalog) {
|
if (dpu_kms->catalog) {
|
||||||
for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
|
for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
|
||||||
u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
|
if (dpu_kms->hw_vbif[i]) {
|
||||||
|
dpu_hw_vbif_destroy(dpu_kms->hw_vbif[i]);
|
||||||
if ((vbif_idx < VBIF_MAX) && dpu_kms->hw_vbif[vbif_idx]) {
|
dpu_kms->hw_vbif[i] = NULL;
|
||||||
dpu_hw_vbif_destroy(dpu_kms->hw_vbif[vbif_idx]);
|
|
||||||
dpu_kms->hw_vbif[vbif_idx] = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1094,7 +1092,7 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
|
|||||||
for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
|
for (i = 0; i < dpu_kms->catalog->vbif_count; i++) {
|
||||||
u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
|
u32 vbif_idx = dpu_kms->catalog->vbif[i].id;
|
||||||
|
|
||||||
dpu_kms->hw_vbif[i] = dpu_hw_vbif_init(vbif_idx,
|
dpu_kms->hw_vbif[vbif_idx] = dpu_hw_vbif_init(vbif_idx,
|
||||||
dpu_kms->vbif[vbif_idx], dpu_kms->catalog);
|
dpu_kms->vbif[vbif_idx], dpu_kms->catalog);
|
||||||
if (IS_ERR_OR_NULL(dpu_kms->hw_vbif[vbif_idx])) {
|
if (IS_ERR_OR_NULL(dpu_kms->hw_vbif[vbif_idx])) {
|
||||||
rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
|
rc = PTR_ERR(dpu_kms->hw_vbif[vbif_idx]);
|
||||||
|
|||||||
@@ -18,6 +18,14 @@
|
|||||||
#include "dpu_hw_vbif.h"
|
#include "dpu_hw_vbif.h"
|
||||||
#include "dpu_trace.h"
|
#include "dpu_trace.h"
|
||||||
|
|
||||||
|
static struct dpu_hw_vbif *dpu_get_vbif(struct dpu_kms *dpu_kms, enum dpu_vbif vbif_idx)
|
||||||
|
{
|
||||||
|
if (vbif_idx < ARRAY_SIZE(dpu_kms->hw_vbif))
|
||||||
|
return dpu_kms->hw_vbif[vbif_idx];
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
|
* _dpu_vbif_wait_for_xin_halt - wait for the xin to halt
|
||||||
* @vbif: Pointer to hardware vbif driver
|
* @vbif: Pointer to hardware vbif driver
|
||||||
@@ -155,11 +163,11 @@ static u32 _dpu_vbif_get_ot_limit(struct dpu_hw_vbif *vbif,
|
|||||||
void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
|
void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
|
||||||
struct dpu_vbif_set_ot_params *params)
|
struct dpu_vbif_set_ot_params *params)
|
||||||
{
|
{
|
||||||
struct dpu_hw_vbif *vbif = NULL;
|
struct dpu_hw_vbif *vbif;
|
||||||
struct dpu_hw_mdp *mdp;
|
struct dpu_hw_mdp *mdp;
|
||||||
bool forced_on = false;
|
bool forced_on = false;
|
||||||
u32 ot_lim;
|
u32 ot_lim;
|
||||||
int ret, i;
|
int ret;
|
||||||
|
|
||||||
if (!dpu_kms) {
|
if (!dpu_kms) {
|
||||||
DPU_ERROR("invalid arguments\n");
|
DPU_ERROR("invalid arguments\n");
|
||||||
@@ -167,12 +175,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
|
|||||||
}
|
}
|
||||||
mdp = dpu_kms->hw_mdp;
|
mdp = dpu_kms->hw_mdp;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
|
vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);
|
||||||
if (dpu_kms->hw_vbif[i] &&
|
|
||||||
dpu_kms->hw_vbif[i]->idx == params->vbif_idx)
|
|
||||||
vbif = dpu_kms->hw_vbif[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vbif || !mdp) {
|
if (!vbif || !mdp) {
|
||||||
DPU_DEBUG("invalid arguments vbif %d mdp %d\n",
|
DPU_DEBUG("invalid arguments vbif %d mdp %d\n",
|
||||||
vbif != 0, mdp != 0);
|
vbif != 0, mdp != 0);
|
||||||
@@ -217,7 +220,7 @@ void dpu_vbif_set_ot_limit(struct dpu_kms *dpu_kms,
|
|||||||
void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
|
void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
|
||||||
struct dpu_vbif_set_qos_params *params)
|
struct dpu_vbif_set_qos_params *params)
|
||||||
{
|
{
|
||||||
struct dpu_hw_vbif *vbif = NULL;
|
struct dpu_hw_vbif *vbif;
|
||||||
struct dpu_hw_mdp *mdp;
|
struct dpu_hw_mdp *mdp;
|
||||||
bool forced_on = false;
|
bool forced_on = false;
|
||||||
const struct dpu_vbif_qos_tbl *qos_tbl;
|
const struct dpu_vbif_qos_tbl *qos_tbl;
|
||||||
@@ -229,13 +232,7 @@ void dpu_vbif_set_qos_remap(struct dpu_kms *dpu_kms,
|
|||||||
}
|
}
|
||||||
mdp = dpu_kms->hw_mdp;
|
mdp = dpu_kms->hw_mdp;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(dpu_kms->hw_vbif); i++) {
|
vbif = dpu_get_vbif(dpu_kms, params->vbif_idx);
|
||||||
if (dpu_kms->hw_vbif[i] &&
|
|
||||||
dpu_kms->hw_vbif[i]->idx == params->vbif_idx) {
|
|
||||||
vbif = dpu_kms->hw_vbif[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vbif || !vbif->cap) {
|
if (!vbif || !vbif->cap) {
|
||||||
DPU_ERROR("invalid vbif %d\n", params->vbif_idx);
|
DPU_ERROR("invalid vbif %d\n", params->vbif_idx);
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ static void vc4_vec_ntsc_j_mode_set(struct vc4_vec *vec)
|
|||||||
static const struct drm_display_mode ntsc_mode = {
|
static const struct drm_display_mode ntsc_mode = {
|
||||||
DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 13500,
|
DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 13500,
|
||||||
720, 720 + 14, 720 + 14 + 64, 720 + 14 + 64 + 60, 0,
|
720, 720 + 14, 720 + 14 + 64, 720 + 14 + 64 + 60, 0,
|
||||||
480, 480 + 3, 480 + 3 + 3, 480 + 3 + 3 + 16, 0,
|
480, 480 + 7, 480 + 7 + 6, 525, 0,
|
||||||
DRM_MODE_FLAG_INTERLACE)
|
DRM_MODE_FLAG_INTERLACE)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ static void vc4_vec_pal_m_mode_set(struct vc4_vec *vec)
|
|||||||
static const struct drm_display_mode pal_mode = {
|
static const struct drm_display_mode pal_mode = {
|
||||||
DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 13500,
|
DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 13500,
|
||||||
720, 720 + 20, 720 + 20 + 64, 720 + 20 + 64 + 60, 0,
|
720, 720 + 20, 720 + 20 + 64, 720 + 20 + 64 + 60, 0,
|
||||||
576, 576 + 2, 576 + 2 + 3, 576 + 2 + 3 + 20, 0,
|
576, 576 + 4, 576 + 4 + 6, 625, 0,
|
||||||
DRM_MODE_FLAG_INTERLACE)
|
DRM_MODE_FLAG_INTERLACE)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1154,7 +1154,7 @@ static void mt_touch_report(struct hid_device *hid,
|
|||||||
int contact_count = -1;
|
int contact_count = -1;
|
||||||
|
|
||||||
/* sticky fingers release in progress, abort */
|
/* sticky fingers release in progress, abort */
|
||||||
if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
|
if (test_and_set_bit_lock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
scantime = *app->scantime;
|
scantime = *app->scantime;
|
||||||
@@ -1235,7 +1235,7 @@ static void mt_touch_report(struct hid_device *hid,
|
|||||||
del_timer(&td->release_timer);
|
del_timer(&td->release_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
|
clear_bit_unlock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mt_touch_input_configured(struct hid_device *hdev,
|
static int mt_touch_input_configured(struct hid_device *hdev,
|
||||||
@@ -1672,11 +1672,11 @@ static void mt_expired_timeout(struct timer_list *t)
|
|||||||
* An input report came in just before we release the sticky fingers,
|
* An input report came in just before we release the sticky fingers,
|
||||||
* it will take care of the sticky fingers.
|
* it will take care of the sticky fingers.
|
||||||
*/
|
*/
|
||||||
if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
|
if (test_and_set_bit_lock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
|
||||||
return;
|
return;
|
||||||
if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
|
if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
|
||||||
mt_release_contacts(hdev);
|
mt_release_contacts(hdev);
|
||||||
clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
|
clear_bit_unlock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||||
|
|||||||
@@ -260,6 +260,8 @@ int roccat_report_event(int minor, u8 const *data)
|
|||||||
if (!new_value)
|
if (!new_value)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
mutex_lock(&device->cbuf_lock);
|
||||||
|
|
||||||
report = &device->cbuf[device->cbuf_end];
|
report = &device->cbuf[device->cbuf_end];
|
||||||
|
|
||||||
/* passing NULL is safe */
|
/* passing NULL is safe */
|
||||||
@@ -279,6 +281,8 @@ int roccat_report_event(int minor, u8 const *data)
|
|||||||
reader->cbuf_start = (reader->cbuf_start + 1) % ROCCAT_CBUF_SIZE;
|
reader->cbuf_start = (reader->cbuf_start + 1) % ROCCAT_CBUF_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&device->cbuf_lock);
|
||||||
|
|
||||||
wake_up_interruptible(&device->wait);
|
wake_up_interruptible(&device->wait);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -560,6 +560,7 @@ static int ssi_probe(struct platform_device *pd)
|
|||||||
if (!childpdev) {
|
if (!childpdev) {
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
dev_err(&pd->dev, "failed to create ssi controller port\n");
|
dev_err(&pd->dev, "failed to create ssi controller port\n");
|
||||||
|
of_node_put(child);
|
||||||
goto out3;
|
goto out3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,10 +253,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
|
|||||||
if (msg->ttype == HSI_MSG_READ) {
|
if (msg->ttype == HSI_MSG_READ) {
|
||||||
err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
|
err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
|
||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
if (err < 0) {
|
if (!err) {
|
||||||
dev_dbg(&ssi->device, "DMA map SG failed !\n");
|
dev_dbg(&ssi->device, "DMA map SG failed !\n");
|
||||||
pm_runtime_put_autosuspend(omap_port->pdev);
|
pm_runtime_put_autosuspend(omap_port->pdev);
|
||||||
return err;
|
return -EIO;
|
||||||
}
|
}
|
||||||
csdp = SSI_DST_BURST_4x32_BIT | SSI_DST_MEMORY_PORT |
|
csdp = SSI_DST_BURST_4x32_BIT | SSI_DST_MEMORY_PORT |
|
||||||
SSI_SRC_SINGLE_ACCESS0 | SSI_SRC_PERIPHERAL_PORT |
|
SSI_SRC_SINGLE_ACCESS0 | SSI_SRC_PERIPHERAL_PORT |
|
||||||
@@ -270,10 +270,10 @@ static int ssi_start_dma(struct hsi_msg *msg, int lch)
|
|||||||
} else {
|
} else {
|
||||||
err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
|
err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
if (err < 0) {
|
if (!err) {
|
||||||
dev_dbg(&ssi->device, "DMA map SG failed !\n");
|
dev_dbg(&ssi->device, "DMA map SG failed !\n");
|
||||||
pm_runtime_put_autosuspend(omap_port->pdev);
|
pm_runtime_put_autosuspend(omap_port->pdev);
|
||||||
return err;
|
return -EIO;
|
||||||
}
|
}
|
||||||
csdp = SSI_SRC_BURST_4x32_BIT | SSI_SRC_MEMORY_PORT |
|
csdp = SSI_SRC_BURST_4x32_BIT | SSI_SRC_MEMORY_PORT |
|
||||||
SSI_DST_SINGLE_ACCESS0 | SSI_DST_PERIPHERAL_PORT |
|
SSI_DST_SINGLE_ACCESS0 | SSI_DST_PERIPHERAL_PORT |
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
#define AT91_SAMA5D2_MR_ANACH BIT(23)
|
#define AT91_SAMA5D2_MR_ANACH BIT(23)
|
||||||
/* Tracking Time */
|
/* Tracking Time */
|
||||||
#define AT91_SAMA5D2_MR_TRACKTIM(v) ((v) << 24)
|
#define AT91_SAMA5D2_MR_TRACKTIM(v) ((v) << 24)
|
||||||
#define AT91_SAMA5D2_MR_TRACKTIM_MAX 0xff
|
#define AT91_SAMA5D2_MR_TRACKTIM_MAX 0xf
|
||||||
/* Transfer Time */
|
/* Transfer Time */
|
||||||
#define AT91_SAMA5D2_MR_TRANSFER(v) ((v) << 28)
|
#define AT91_SAMA5D2_MR_TRANSFER(v) ((v) << 28)
|
||||||
#define AT91_SAMA5D2_MR_TRANSFER_MAX 0x3
|
#define AT91_SAMA5D2_MR_TRANSFER_MAX 0x3
|
||||||
@@ -1329,8 +1329,10 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
|
|||||||
*val = tmp_val;
|
*val = tmp_val;
|
||||||
mutex_unlock(&st->lock);
|
mutex_unlock(&st->lock);
|
||||||
iio_device_release_direct_mode(indio_dev);
|
iio_device_release_direct_mode(indio_dev);
|
||||||
|
if (ret > 0)
|
||||||
|
ret = at91_adc_adjust_val_osr(st, val);
|
||||||
|
|
||||||
return at91_adc_adjust_val_osr(st, val);
|
return ret;
|
||||||
}
|
}
|
||||||
if (chan->type == IIO_PRESSURE) {
|
if (chan->type == IIO_PRESSURE) {
|
||||||
ret = iio_device_claim_direct_mode(indio_dev);
|
ret = iio_device_claim_direct_mode(indio_dev);
|
||||||
@@ -1343,8 +1345,10 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev,
|
|||||||
*val = tmp_val;
|
*val = tmp_val;
|
||||||
mutex_unlock(&st->lock);
|
mutex_unlock(&st->lock);
|
||||||
iio_device_release_direct_mode(indio_dev);
|
iio_device_release_direct_mode(indio_dev);
|
||||||
|
if (ret > 0)
|
||||||
|
ret = at91_adc_adjust_val_osr(st, val);
|
||||||
|
|
||||||
return at91_adc_adjust_val_osr(st, val);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* in this case we have a voltage channel */
|
/* in this case we have a voltage channel */
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
|
|
||||||
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#define AD5593R_MODE_CONF (0 << 4)
|
#define AD5593R_MODE_CONF (0 << 4)
|
||||||
#define AD5593R_MODE_DAC_WRITE (1 << 4)
|
#define AD5593R_MODE_DAC_WRITE (1 << 4)
|
||||||
#define AD5593R_MODE_ADC_READBACK (4 << 4)
|
#define AD5593R_MODE_ADC_READBACK (4 << 4)
|
||||||
@@ -22,6 +24,24 @@
|
|||||||
#define AD5593R_MODE_GPIO_READBACK (6 << 4)
|
#define AD5593R_MODE_GPIO_READBACK (6 << 4)
|
||||||
#define AD5593R_MODE_REG_READBACK (7 << 4)
|
#define AD5593R_MODE_REG_READBACK (7 << 4)
|
||||||
|
|
||||||
|
static int ad5593r_read_word(struct i2c_client *i2c, u8 reg, u16 *value)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
u8 buf[2];
|
||||||
|
|
||||||
|
ret = i2c_smbus_write_byte(i2c, reg);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = i2c_master_recv(i2c, buf, sizeof(buf));
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
*value = get_unaligned_be16(buf);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ad5593r_write_dac(struct ad5592r_state *st, unsigned chan, u16 value)
|
static int ad5593r_write_dac(struct ad5592r_state *st, unsigned chan, u16 value)
|
||||||
{
|
{
|
||||||
struct i2c_client *i2c = to_i2c_client(st->dev);
|
struct i2c_client *i2c = to_i2c_client(st->dev);
|
||||||
@@ -40,13 +60,7 @@ static int ad5593r_read_adc(struct ad5592r_state *st, unsigned chan, u16 *value)
|
|||||||
if (val < 0)
|
if (val < 0)
|
||||||
return (int) val;
|
return (int) val;
|
||||||
|
|
||||||
val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_ADC_READBACK);
|
return ad5593r_read_word(i2c, AD5593R_MODE_ADC_READBACK, value);
|
||||||
if (val < 0)
|
|
||||||
return (int) val;
|
|
||||||
|
|
||||||
*value = (u16) val;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ad5593r_reg_write(struct ad5592r_state *st, u8 reg, u16 value)
|
static int ad5593r_reg_write(struct ad5592r_state *st, u8 reg, u16 value)
|
||||||
@@ -60,25 +74,19 @@ static int ad5593r_reg_write(struct ad5592r_state *st, u8 reg, u16 value)
|
|||||||
static int ad5593r_reg_read(struct ad5592r_state *st, u8 reg, u16 *value)
|
static int ad5593r_reg_read(struct ad5592r_state *st, u8 reg, u16 *value)
|
||||||
{
|
{
|
||||||
struct i2c_client *i2c = to_i2c_client(st->dev);
|
struct i2c_client *i2c = to_i2c_client(st->dev);
|
||||||
s32 val;
|
|
||||||
|
|
||||||
val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_REG_READBACK | reg);
|
return ad5593r_read_word(i2c, AD5593R_MODE_REG_READBACK | reg, value);
|
||||||
if (val < 0)
|
|
||||||
return (int) val;
|
|
||||||
|
|
||||||
*value = (u16) val;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ad5593r_gpio_read(struct ad5592r_state *st, u8 *value)
|
static int ad5593r_gpio_read(struct ad5592r_state *st, u8 *value)
|
||||||
{
|
{
|
||||||
struct i2c_client *i2c = to_i2c_client(st->dev);
|
struct i2c_client *i2c = to_i2c_client(st->dev);
|
||||||
s32 val;
|
u16 val;
|
||||||
|
int ret;
|
||||||
|
|
||||||
val = i2c_smbus_read_word_swapped(i2c, AD5593R_MODE_GPIO_READBACK);
|
ret = ad5593r_read_word(i2c, AD5593R_MODE_GPIO_READBACK, &val);
|
||||||
if (val < 0)
|
if (ret)
|
||||||
return (int) val;
|
return ret;
|
||||||
|
|
||||||
*value = (u8) val;
|
*value = (u8) val;
|
||||||
|
|
||||||
|
|||||||
@@ -139,9 +139,10 @@ static int __of_iio_channel_get(struct iio_channel *channel,
|
|||||||
|
|
||||||
idev = bus_find_device(&iio_bus_type, NULL, iiospec.np,
|
idev = bus_find_device(&iio_bus_type, NULL, iiospec.np,
|
||||||
iio_dev_node_match);
|
iio_dev_node_match);
|
||||||
of_node_put(iiospec.np);
|
if (idev == NULL) {
|
||||||
if (idev == NULL)
|
of_node_put(iiospec.np);
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
|
}
|
||||||
|
|
||||||
indio_dev = dev_to_iio_dev(idev);
|
indio_dev = dev_to_iio_dev(idev);
|
||||||
channel->indio_dev = indio_dev;
|
channel->indio_dev = indio_dev;
|
||||||
@@ -149,6 +150,7 @@ static int __of_iio_channel_get(struct iio_channel *channel,
|
|||||||
index = indio_dev->info->of_xlate(indio_dev, &iiospec);
|
index = indio_dev->info->of_xlate(indio_dev, &iiospec);
|
||||||
else
|
else
|
||||||
index = __of_iio_simple_xlate(indio_dev, &iiospec);
|
index = __of_iio_simple_xlate(indio_dev, &iiospec);
|
||||||
|
of_node_put(iiospec.np);
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
goto err_put;
|
goto err_put;
|
||||||
channel->channel = &indio_dev->channels[index];
|
channel->channel = &indio_dev->channels[index];
|
||||||
|
|||||||
@@ -799,7 +799,9 @@ void rxe_qp_destroy(struct rxe_qp *qp)
|
|||||||
rxe_cleanup_task(&qp->comp.task);
|
rxe_cleanup_task(&qp->comp.task);
|
||||||
|
|
||||||
/* flush out any receive wr's or pending requests */
|
/* flush out any receive wr's or pending requests */
|
||||||
__rxe_do_task(&qp->req.task);
|
if (qp->req.task.func)
|
||||||
|
__rxe_do_task(&qp->req.task);
|
||||||
|
|
||||||
if (qp->sq.queue) {
|
if (qp->sq.queue) {
|
||||||
__rxe_do_task(&qp->comp.task);
|
__rxe_do_task(&qp->comp.task);
|
||||||
__rxe_do_task(&qp->req.task);
|
__rxe_do_task(&qp->req.task);
|
||||||
@@ -839,8 +841,10 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
|
|||||||
|
|
||||||
free_rd_atomic_resources(qp);
|
free_rd_atomic_resources(qp);
|
||||||
|
|
||||||
kernel_sock_shutdown(qp->sk, SHUT_RDWR);
|
if (qp->sk) {
|
||||||
sock_release(qp->sk);
|
kernel_sock_shutdown(qp->sk, SHUT_RDWR);
|
||||||
|
sock_release(qp->sk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called when the last reference to the qp is dropped */
|
/* called when the last reference to the qp is dropped */
|
||||||
|
|||||||
@@ -126,6 +126,8 @@ static const struct xpad_device {
|
|||||||
u8 xtype;
|
u8 xtype;
|
||||||
} xpad_device[] = {
|
} xpad_device[] = {
|
||||||
{ 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
|
{ 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x03eb, 0xff01, "Wooting One (Legacy)", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x03eb, 0xff02, "Wooting Two (Legacy)", 0, XTYPE_XBOX360 },
|
||||||
{ 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
{ 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
||||||
{ 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
{ 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX },
|
||||||
{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
|
{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
|
||||||
@@ -256,6 +258,7 @@ static const struct xpad_device {
|
|||||||
{ 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
{ 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||||
{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
|
{ 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE },
|
||||||
{ 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
{ 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||||
|
{ 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||||
{ 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
|
{ 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX },
|
||||||
{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
|
{ 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
|
||||||
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
|
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
|
||||||
@@ -272,6 +275,7 @@ static const struct xpad_device {
|
|||||||
{ 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
|
{ 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
|
||||||
{ 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 },
|
{ 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 },
|
||||||
{ 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 },
|
{ 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||||
{ 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 },
|
{ 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 },
|
||||||
{ 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
{ 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||||
{ 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
|
{ 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
|
||||||
@@ -336,6 +340,7 @@ static const struct xpad_device {
|
|||||||
{ 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
{ 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
{ 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 },
|
{ 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 },
|
{ 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
{ 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
|
{ 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
|
||||||
@@ -345,6 +350,14 @@ static const struct xpad_device {
|
|||||||
{ 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
|
{ 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
|
{ 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 },
|
||||||
{ 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
|
{ 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE },
|
||||||
|
{ 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 },
|
||||||
|
{ 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 },
|
||||||
{ 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
|
{ 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 },
|
||||||
{ 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
|
{ 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX },
|
||||||
{ 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
|
{ 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
|
||||||
@@ -430,6 +443,7 @@ static const signed short xpad_abs_triggers[] = {
|
|||||||
static const struct usb_device_id xpad_table[] = {
|
static const struct usb_device_id xpad_table[] = {
|
||||||
{ USB_INTERFACE_INFO('X', 'B', 0) }, /* X-Box USB-IF not approved class */
|
{ USB_INTERFACE_INFO('X', 'B', 0) }, /* X-Box USB-IF not approved class */
|
||||||
XPAD_XBOX360_VENDOR(0x0079), /* GPD Win 2 Controller */
|
XPAD_XBOX360_VENDOR(0x0079), /* GPD Win 2 Controller */
|
||||||
|
XPAD_XBOX360_VENDOR(0x03eb), /* Wooting Keyboards (Legacy) */
|
||||||
XPAD_XBOX360_VENDOR(0x044f), /* Thrustmaster X-Box 360 controllers */
|
XPAD_XBOX360_VENDOR(0x044f), /* Thrustmaster X-Box 360 controllers */
|
||||||
XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */
|
XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */
|
||||||
XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft X-Box One controllers */
|
XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft X-Box One controllers */
|
||||||
@@ -440,6 +454,7 @@ static const struct usb_device_id xpad_table[] = {
|
|||||||
{ USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */
|
{ USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */
|
||||||
XPAD_XBOXONE_VENDOR(0x0738), /* Mad Catz FightStick TE 2 */
|
XPAD_XBOXONE_VENDOR(0x0738), /* Mad Catz FightStick TE 2 */
|
||||||
XPAD_XBOX360_VENDOR(0x07ff), /* Mad Catz GamePad */
|
XPAD_XBOX360_VENDOR(0x07ff), /* Mad Catz GamePad */
|
||||||
|
XPAD_XBOX360_VENDOR(0x0c12), /* Zeroplus X-Box 360 controllers */
|
||||||
XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */
|
XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */
|
||||||
XPAD_XBOXONE_VENDOR(0x0e6f), /* 0x0e6f X-Box One controllers */
|
XPAD_XBOXONE_VENDOR(0x0e6f), /* 0x0e6f X-Box One controllers */
|
||||||
XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
|
XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
|
||||||
@@ -460,8 +475,12 @@ static const struct usb_device_id xpad_table[] = {
|
|||||||
XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA Controllers */
|
XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA Controllers */
|
||||||
XPAD_XBOX360_VENDOR(0x24c6), /* PowerA Controllers */
|
XPAD_XBOX360_VENDOR(0x24c6), /* PowerA Controllers */
|
||||||
XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */
|
XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */
|
||||||
|
XPAD_XBOX360_VENDOR(0x2563), /* OneXPlayer Gamepad */
|
||||||
|
XPAD_XBOX360_VENDOR(0x260d), /* Dareu H101 */
|
||||||
|
XPAD_XBOXONE_VENDOR(0x2dc8), /* 8BitDo Pro 2 Wired Controller for Xbox */
|
||||||
XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */
|
XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */
|
||||||
XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */
|
XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */
|
||||||
|
XPAD_XBOX360_VENDOR(0x31e3), /* Wooting Keyboards */
|
||||||
XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */
|
XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
@@ -1978,7 +1997,6 @@ static struct usb_driver xpad_driver = {
|
|||||||
.disconnect = xpad_disconnect,
|
.disconnect = xpad_disconnect,
|
||||||
.suspend = xpad_suspend,
|
.suspend = xpad_suspend,
|
||||||
.resume = xpad_resume,
|
.resume = xpad_resume,
|
||||||
.reset_resume = xpad_resume,
|
|
||||||
.id_table = xpad_table,
|
.id_table = xpad_table,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ static inline bool is_omap_iommu_detached(struct omap_iommu *obj)
|
|||||||
ssize_t bytes; \
|
ssize_t bytes; \
|
||||||
const char *str = "%20s: %08x\n"; \
|
const char *str = "%20s: %08x\n"; \
|
||||||
const int maxcol = 32; \
|
const int maxcol = 32; \
|
||||||
bytes = snprintf(p, maxcol, str, __stringify(name), \
|
if (len < maxcol) \
|
||||||
|
goto out; \
|
||||||
|
bytes = scnprintf(p, maxcol, str, __stringify(name), \
|
||||||
iommu_read_reg(obj, MMU_##name)); \
|
iommu_read_reg(obj, MMU_##name)); \
|
||||||
p += bytes; \
|
p += bytes; \
|
||||||
len -= bytes; \
|
len -= bytes; \
|
||||||
if (len < maxcol) \
|
|
||||||
goto out; \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ struct l1oip {
|
|||||||
int bundle; /* bundle channels in one frm */
|
int bundle; /* bundle channels in one frm */
|
||||||
int codec; /* codec to use for transmis. */
|
int codec; /* codec to use for transmis. */
|
||||||
int limit; /* limit number of bchannels */
|
int limit; /* limit number of bchannels */
|
||||||
|
bool shutdown; /* if card is released */
|
||||||
|
|
||||||
/* timer */
|
/* timer */
|
||||||
struct timer_list keep_tl;
|
struct timer_list keep_tl;
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ l1oip_socket_send(struct l1oip *hc, u8 localcodec, u8 channel, u32 chanmask,
|
|||||||
p = frame;
|
p = frame;
|
||||||
|
|
||||||
/* restart timer */
|
/* restart timer */
|
||||||
if (time_before(hc->keep_tl.expires, jiffies + 5 * HZ))
|
if (time_before(hc->keep_tl.expires, jiffies + 5 * HZ) && !hc->shutdown)
|
||||||
mod_timer(&hc->keep_tl, jiffies + L1OIP_KEEPALIVE * HZ);
|
mod_timer(&hc->keep_tl, jiffies + L1OIP_KEEPALIVE * HZ);
|
||||||
else
|
else
|
||||||
hc->keep_tl.expires = jiffies + L1OIP_KEEPALIVE * HZ;
|
hc->keep_tl.expires = jiffies + L1OIP_KEEPALIVE * HZ;
|
||||||
@@ -615,7 +615,9 @@ l1oip_socket_parse(struct l1oip *hc, struct sockaddr_in *sin, u8 *buf, int len)
|
|||||||
goto multiframe;
|
goto multiframe;
|
||||||
|
|
||||||
/* restart timer */
|
/* restart timer */
|
||||||
if (time_before(hc->timeout_tl.expires, jiffies + 5 * HZ) || !hc->timeout_on) {
|
if ((time_before(hc->timeout_tl.expires, jiffies + 5 * HZ) ||
|
||||||
|
!hc->timeout_on) &&
|
||||||
|
!hc->shutdown) {
|
||||||
hc->timeout_on = 1;
|
hc->timeout_on = 1;
|
||||||
mod_timer(&hc->timeout_tl, jiffies + L1OIP_TIMEOUT * HZ);
|
mod_timer(&hc->timeout_tl, jiffies + L1OIP_TIMEOUT * HZ);
|
||||||
} else /* only adjust timer */
|
} else /* only adjust timer */
|
||||||
@@ -1247,11 +1249,10 @@ release_card(struct l1oip *hc)
|
|||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
if (timer_pending(&hc->keep_tl))
|
hc->shutdown = true;
|
||||||
del_timer(&hc->keep_tl);
|
|
||||||
|
|
||||||
if (timer_pending(&hc->timeout_tl))
|
del_timer_sync(&hc->keep_tl);
|
||||||
del_timer(&hc->timeout_tl);
|
del_timer_sync(&hc->timeout_tl);
|
||||||
|
|
||||||
cancel_work_sync(&hc->workq);
|
cancel_work_sync(&hc->workq);
|
||||||
|
|
||||||
|
|||||||
@@ -634,15 +634,15 @@ static int flexrm_spu_dma_map(struct device *dev, struct brcm_message *msg)
|
|||||||
|
|
||||||
rc = dma_map_sg(dev, msg->spu.src, sg_nents(msg->spu.src),
|
rc = dma_map_sg(dev, msg->spu.src, sg_nents(msg->spu.src),
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
if (rc < 0)
|
if (!rc)
|
||||||
return rc;
|
return -EIO;
|
||||||
|
|
||||||
rc = dma_map_sg(dev, msg->spu.dst, sg_nents(msg->spu.dst),
|
rc = dma_map_sg(dev, msg->spu.dst, sg_nents(msg->spu.dst),
|
||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
if (rc < 0) {
|
if (!rc) {
|
||||||
dma_unmap_sg(dev, msg->spu.src, sg_nents(msg->spu.src),
|
dma_unmap_sg(dev, msg->spu.src, sg_nents(msg->spu.src),
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
return rc;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -70,8 +70,8 @@ static void dump_zones(struct mddev *mddev)
|
|||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
|
for (k = 0; k < conf->strip_zone[j].nb_dev; k++)
|
||||||
len += snprintf(line+len, 200-len, "%s%s", k?"/":"",
|
len += scnprintf(line+len, 200-len, "%s%s", k?"/":"",
|
||||||
bdevname(conf->devlist[j*raid_disks
|
bdevname(conf->devlist[j*raid_disks
|
||||||
+ k]->bdev, b));
|
+ k]->bdev, b));
|
||||||
pr_debug("md: zone%d=[%s]\n", j, line);
|
pr_debug("md: zone%d=[%s]\n", j, line);
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
#include <linux/raid/pq.h>
|
#include <linux/raid/pq.h>
|
||||||
#include <linux/async_tx.h>
|
#include <linux/async_tx.h>
|
||||||
@@ -3723,7 +3724,7 @@ static void handle_stripe_fill(struct stripe_head *sh,
|
|||||||
* back cache (prexor with orig_page, and then xor with
|
* back cache (prexor with orig_page, and then xor with
|
||||||
* page) in the read path
|
* page) in the read path
|
||||||
*/
|
*/
|
||||||
if (s->injournal && s->failed) {
|
if (s->to_read && s->injournal && s->failed) {
|
||||||
if (test_bit(STRIPE_R5C_CACHING, &sh->state))
|
if (test_bit(STRIPE_R5C_CACHING, &sh->state))
|
||||||
r5c_make_stripe_write_out(sh);
|
r5c_make_stripe_write_out(sh);
|
||||||
goto out;
|
goto out;
|
||||||
@@ -6329,7 +6330,18 @@ static void raid5d(struct md_thread *thread)
|
|||||||
spin_unlock_irq(&conf->device_lock);
|
spin_unlock_irq(&conf->device_lock);
|
||||||
md_check_recovery(mddev);
|
md_check_recovery(mddev);
|
||||||
spin_lock_irq(&conf->device_lock);
|
spin_lock_irq(&conf->device_lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Waiting on MD_SB_CHANGE_PENDING below may deadlock
|
||||||
|
* seeing md_check_recovery() is needed to clear
|
||||||
|
* the flag when using mdmon.
|
||||||
|
*/
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wait_event_lock_irq(mddev->sb_wait,
|
||||||
|
!test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags),
|
||||||
|
conf->device_lock);
|
||||||
}
|
}
|
||||||
pr_debug("%d stripes handled\n", handled);
|
pr_debug("%d stripes handled\n", handled);
|
||||||
|
|
||||||
|
|||||||
@@ -144,11 +144,10 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
vb2_set_plane_payload(vb, 0, size);
|
vb2_set_plane_payload(vb, 0, size);
|
||||||
|
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc, sgt->sgl,
|
return cx88_risc_buffer(dev->pci, &buf->risc, sgt->sgl,
|
||||||
0, VBI_LINE_LENGTH * lines,
|
0, VBI_LINE_LENGTH * lines,
|
||||||
VBI_LINE_LENGTH, 0,
|
VBI_LINE_LENGTH, 0,
|
||||||
lines);
|
lines);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void buffer_finish(struct vb2_buffer *vb)
|
static void buffer_finish(struct vb2_buffer *vb)
|
||||||
|
|||||||
@@ -452,6 +452,7 @@ static int queue_setup(struct vb2_queue *q,
|
|||||||
|
|
||||||
static int buffer_prepare(struct vb2_buffer *vb)
|
static int buffer_prepare(struct vb2_buffer *vb)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||||
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
struct cx8800_dev *dev = vb->vb2_queue->drv_priv;
|
||||||
struct cx88_core *core = dev->core;
|
struct cx88_core *core = dev->core;
|
||||||
@@ -466,35 +467,35 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
|||||||
|
|
||||||
switch (core->field) {
|
switch (core->field) {
|
||||||
case V4L2_FIELD_TOP:
|
case V4L2_FIELD_TOP:
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc,
|
ret = cx88_risc_buffer(dev->pci, &buf->risc,
|
||||||
sgt->sgl, 0, UNSET,
|
sgt->sgl, 0, UNSET,
|
||||||
buf->bpl, 0, core->height);
|
buf->bpl, 0, core->height);
|
||||||
break;
|
break;
|
||||||
case V4L2_FIELD_BOTTOM:
|
case V4L2_FIELD_BOTTOM:
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc,
|
ret = cx88_risc_buffer(dev->pci, &buf->risc,
|
||||||
sgt->sgl, UNSET, 0,
|
sgt->sgl, UNSET, 0,
|
||||||
buf->bpl, 0, core->height);
|
buf->bpl, 0, core->height);
|
||||||
break;
|
break;
|
||||||
case V4L2_FIELD_SEQ_TB:
|
case V4L2_FIELD_SEQ_TB:
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc,
|
ret = cx88_risc_buffer(dev->pci, &buf->risc,
|
||||||
sgt->sgl,
|
sgt->sgl,
|
||||||
0, buf->bpl * (core->height >> 1),
|
0, buf->bpl * (core->height >> 1),
|
||||||
buf->bpl, 0,
|
buf->bpl, 0,
|
||||||
core->height >> 1);
|
core->height >> 1);
|
||||||
break;
|
break;
|
||||||
case V4L2_FIELD_SEQ_BT:
|
case V4L2_FIELD_SEQ_BT:
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc,
|
ret = cx88_risc_buffer(dev->pci, &buf->risc,
|
||||||
sgt->sgl,
|
sgt->sgl,
|
||||||
buf->bpl * (core->height >> 1), 0,
|
buf->bpl * (core->height >> 1), 0,
|
||||||
buf->bpl, 0,
|
buf->bpl, 0,
|
||||||
core->height >> 1);
|
core->height >> 1);
|
||||||
break;
|
break;
|
||||||
case V4L2_FIELD_INTERLACED:
|
case V4L2_FIELD_INTERLACED:
|
||||||
default:
|
default:
|
||||||
cx88_risc_buffer(dev->pci, &buf->risc,
|
ret = cx88_risc_buffer(dev->pci, &buf->risc,
|
||||||
sgt->sgl, 0, buf->bpl,
|
sgt->sgl, 0, buf->bpl,
|
||||||
buf->bpl, buf->bpl,
|
buf->bpl, buf->bpl,
|
||||||
core->height >> 1);
|
core->height >> 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dprintk(2,
|
dprintk(2,
|
||||||
@@ -502,7 +503,7 @@ static int buffer_prepare(struct vb2_buffer *vb)
|
|||||||
buf, buf->vb.vb2_buf.index,
|
buf, buf->vb.vb2_buf.index,
|
||||||
core->width, core->height, dev->fmt->depth, dev->fmt->name,
|
core->width, core->height, dev->fmt->depth, dev->fmt->name,
|
||||||
(unsigned long)buf->risc.dma);
|
(unsigned long)buf->risc.dma);
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void buffer_finish(struct vb2_buffer *vb)
|
static void buffer_finish(struct vb2_buffer *vb)
|
||||||
|
|||||||
@@ -217,6 +217,7 @@ static int fimc_is_register_subdevs(struct fimc_is *is)
|
|||||||
|
|
||||||
if (ret < 0 || index >= FIMC_IS_SENSORS_NUM) {
|
if (ret < 0 || index >= FIMC_IS_SENSORS_NUM) {
|
||||||
of_node_put(child);
|
of_node_put(child);
|
||||||
|
of_node_put(i2c_bus);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
index++;
|
index++;
|
||||||
|
|||||||
@@ -464,7 +464,7 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev)
|
|||||||
{
|
{
|
||||||
struct device_node *ports;
|
struct device_node *ports;
|
||||||
struct device_node *port;
|
struct device_node *port;
|
||||||
int ret;
|
int ret = 0;
|
||||||
|
|
||||||
ports = of_get_child_by_name(xdev->dev->of_node, "ports");
|
ports = of_get_child_by_name(xdev->dev->of_node, "ports");
|
||||||
if (ports == NULL) {
|
if (ports == NULL) {
|
||||||
@@ -474,13 +474,14 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev)
|
|||||||
|
|
||||||
for_each_child_of_node(ports, port) {
|
for_each_child_of_node(ports, port) {
|
||||||
ret = xvip_graph_dma_init_one(xdev, port);
|
ret = xvip_graph_dma_init_one(xdev, port);
|
||||||
if (ret < 0) {
|
if (ret) {
|
||||||
of_node_put(port);
|
of_node_put(port);
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
of_node_put(ports);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xvip_graph_cleanup(struct xvip_composite_device *xdev)
|
static void xvip_graph_cleanup(struct xvip_composite_device *xdev)
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ const struct lpddr2_timings *of_get_ddr_timings(struct device_node *np_ddr,
|
|||||||
for_each_child_of_node(np_ddr, np_tim) {
|
for_each_child_of_node(np_ddr, np_tim) {
|
||||||
if (of_device_is_compatible(np_tim, tim_compat)) {
|
if (of_device_is_compatible(np_tim, tim_compat)) {
|
||||||
if (of_do_get_timings(np_tim, &timings[i])) {
|
if (of_do_get_timings(np_tim, &timings[i])) {
|
||||||
|
of_node_put(np_tim);
|
||||||
devm_kfree(dev, timings);
|
devm_kfree(dev, timings);
|
||||||
goto default_timings;
|
goto default_timings;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,6 +89,19 @@ static int mx25_tsadc_setup_irq(struct platform_device *pdev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mx25_tsadc_unset_irq(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
struct mx25_tsadc *tsadc = platform_get_drvdata(pdev);
|
||||||
|
int irq = platform_get_irq(pdev, 0);
|
||||||
|
|
||||||
|
if (irq) {
|
||||||
|
irq_set_chained_handler_and_data(irq, NULL, NULL);
|
||||||
|
irq_domain_remove(tsadc->domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void mx25_tsadc_setup_clk(struct platform_device *pdev,
|
static void mx25_tsadc_setup_clk(struct platform_device *pdev,
|
||||||
struct mx25_tsadc *tsadc)
|
struct mx25_tsadc *tsadc)
|
||||||
{
|
{
|
||||||
@@ -176,18 +189,21 @@ static int mx25_tsadc_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
platform_set_drvdata(pdev, tsadc);
|
platform_set_drvdata(pdev, tsadc);
|
||||||
|
|
||||||
return devm_of_platform_populate(dev);
|
ret = devm_of_platform_populate(dev);
|
||||||
|
if (ret)
|
||||||
|
goto err_irq;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_irq:
|
||||||
|
mx25_tsadc_unset_irq(pdev);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mx25_tsadc_remove(struct platform_device *pdev)
|
static int mx25_tsadc_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct mx25_tsadc *tsadc = platform_get_drvdata(pdev);
|
mx25_tsadc_unset_irq(pdev);
|
||||||
int irq = platform_get_irq(pdev, 0);
|
|
||||||
|
|
||||||
if (irq) {
|
|
||||||
irq_set_chained_handler_and_data(irq, NULL, NULL);
|
|
||||||
irq_domain_remove(tsadc->domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_del_irq_chip:
|
err_del_irq_chip:
|
||||||
|
pwm_remove_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
|
||||||
regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data);
|
regmap_del_irq_chip(pmic->irq, pmic->irq_chip_data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ int lp8788_irq_init(struct lp8788 *lp, int irq)
|
|||||||
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||||
"lp8788-irq", irqd);
|
"lp8788-irq", irqd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
irq_domain_remove(lp->irqdm);
|
||||||
dev_err(lp->dev, "failed to create a thread for IRQ_N\n");
|
dev_err(lp->dev, "failed to create a thread for IRQ_N\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -192,4 +193,6 @@ void lp8788_irq_exit(struct lp8788 *lp)
|
|||||||
{
|
{
|
||||||
if (lp->irq)
|
if (lp->irq)
|
||||||
free_irq(lp->irq, lp->irqdm);
|
free_irq(lp->irq, lp->irqdm);
|
||||||
|
if (lp->irqdm)
|
||||||
|
irq_domain_remove(lp->irqdm);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -199,8 +199,16 @@ static int lp8788_probe(struct i2c_client *cl, const struct i2c_device_id *id)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return mfd_add_devices(lp->dev, -1, lp8788_devs,
|
ret = mfd_add_devices(lp->dev, -1, lp8788_devs,
|
||||||
ARRAY_SIZE(lp8788_devs), NULL, 0, NULL);
|
ARRAY_SIZE(lp8788_devs), NULL, 0, NULL);
|
||||||
|
if (ret)
|
||||||
|
goto err_exit_irq;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_exit_irq:
|
||||||
|
lp8788_irq_exit(lp);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lp8788_remove(struct i2c_client *cl)
|
static int lp8788_remove(struct i2c_client *cl)
|
||||||
|
|||||||
@@ -1738,7 +1738,12 @@ static struct platform_driver sm501_plat_driver = {
|
|||||||
|
|
||||||
static int __init sm501_base_init(void)
|
static int __init sm501_base_init(void)
|
||||||
{
|
{
|
||||||
platform_driver_register(&sm501_plat_driver);
|
int ret;
|
||||||
|
|
||||||
|
ret = platform_driver_register(&sm501_plat_driver);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return pci_register_driver(&sm501_pci_driver);
|
return pci_register_driver(&sm501_pci_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -787,7 +787,8 @@ int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
|
|||||||
* the CCS bit is set as well. We deliberately deviate from the spec in
|
* the CCS bit is set as well. We deliberately deviate from the spec in
|
||||||
* regards to this, which allows UHS-I to be supported for SDSC cards.
|
* regards to this, which allows UHS-I to be supported for SDSC cards.
|
||||||
*/
|
*/
|
||||||
if (!mmc_host_is_spi(host) && rocr && (*rocr & 0x01000000)) {
|
if (!mmc_host_is_spi(host) && (ocr & SD_OCR_S18R) &&
|
||||||
|
rocr && (*rocr & SD_ROCR_S18A)) {
|
||||||
err = mmc_set_uhs_voltage(host, pocr);
|
err = mmc_set_uhs_voltage(host, pocr);
|
||||||
if (err == -EAGAIN) {
|
if (err == -EAGAIN) {
|
||||||
retries--;
|
retries--;
|
||||||
|
|||||||
@@ -1118,8 +1118,9 @@ static int au1xmmc_probe(struct platform_device *pdev)
|
|||||||
if (host->platdata && host->platdata->cd_setup &&
|
if (host->platdata && host->platdata->cd_setup &&
|
||||||
!(mmc->caps & MMC_CAP_NEEDS_POLL))
|
!(mmc->caps & MMC_CAP_NEEDS_POLL))
|
||||||
host->platdata->cd_setup(mmc, 0);
|
host->platdata->cd_setup(mmc, 0);
|
||||||
out_clk:
|
|
||||||
clk_disable_unprepare(host->clk);
|
clk_disable_unprepare(host->clk);
|
||||||
|
out_clk:
|
||||||
clk_put(host->clk);
|
clk_put(host->clk);
|
||||||
out_irq:
|
out_irq:
|
||||||
free_irq(host->irq, host);
|
free_irq(host->irq, host);
|
||||||
|
|||||||
@@ -853,7 +853,7 @@ static int wmt_mci_probe(struct platform_device *pdev)
|
|||||||
if (IS_ERR(priv->clk_sdmmc)) {
|
if (IS_ERR(priv->clk_sdmmc)) {
|
||||||
dev_err(&pdev->dev, "Error getting clock\n");
|
dev_err(&pdev->dev, "Error getting clock\n");
|
||||||
ret = PTR_ERR(priv->clk_sdmmc);
|
ret = PTR_ERR(priv->clk_sdmmc);
|
||||||
goto fail5;
|
goto fail5_and_a_half;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_prepare_enable(priv->clk_sdmmc);
|
ret = clk_prepare_enable(priv->clk_sdmmc);
|
||||||
@@ -870,6 +870,9 @@ static int wmt_mci_probe(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
fail6:
|
fail6:
|
||||||
clk_put(priv->clk_sdmmc);
|
clk_put(priv->clk_sdmmc);
|
||||||
|
fail5_and_a_half:
|
||||||
|
dma_free_coherent(&pdev->dev, mmc->max_blk_count * 16,
|
||||||
|
priv->dma_desc_buffer, priv->dma_desc_device_addr);
|
||||||
fail5:
|
fail5:
|
||||||
free_irq(dma_irq, priv);
|
free_irq(dma_irq, priv);
|
||||||
fail4:
|
fail4:
|
||||||
|
|||||||
@@ -1990,9 +1990,14 @@ static int __init docg3_probe(struct platform_device *pdev)
|
|||||||
dev_err(dev, "No I/O memory resource defined\n");
|
dev_err(dev, "No I/O memory resource defined\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
base = devm_ioremap(dev, ress->start, DOC_IOSPACE_SIZE);
|
|
||||||
|
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
base = devm_ioremap(dev, ress->start, DOC_IOSPACE_SIZE);
|
||||||
|
if (!base) {
|
||||||
|
dev_err(dev, "devm_ioremap dev failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
cascade = devm_kcalloc(dev, DOC_MAX_NBFLOORS, sizeof(*cascade),
|
cascade = devm_kcalloc(dev, DOC_MAX_NBFLOORS, sizeof(*cascade),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!cascade)
|
if (!cascade)
|
||||||
|
|||||||
@@ -398,6 +398,7 @@ static int atmel_nand_dma_transfer(struct atmel_nand_controller *nc,
|
|||||||
|
|
||||||
dma_async_issue_pending(nc->dmac);
|
dma_async_issue_pending(nc->dmac);
|
||||||
wait_for_completion(&finished);
|
wait_for_completion(&finished);
|
||||||
|
dma_unmap_single(nc->dev, buf_dma, len, dir);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user