mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.223 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmA/xiMACgkQONu9yGCS aT6xPRAAubIMjvou8+ByMLEOK5HfhXN3VSi7iUQvBMsWPtW609hYMucIi6BdgUS5 vIXy/kwMRhQ0YW8H+rsf94Doliw6kgu4ebHLZqe7aP4EMeIoJ/HXtVfxpcrc4TzK SdUxEEilHKlxSzhmi3Qi53KBLsJusoBg/jzNJ3PQQrX3V8Zc5XCzt1ZZIpxrnQK0 Bv/CVqAFauMX27pqJq/Y4cSJZtZ6EbUjRekIC5tjqBDMi4Pf7wHGYj/tUSdm76Es 9eTDmfO9Rvk0XeKKxm0dv5ffkhyi9xBmBK82GqBnHBSDpG03JOKcK5RAWRLT84Zv joby0dsEPYTLG3nZ7cmRW0R5952BfvkabuRj07W2zu9DanMVnQtiquFZw2YdS/7a Ed5lUWxdPysObd53keXtlv3hhjB+5lPIU5d3SLbsp6W08MIk9+YA1JBHeIJX9ulX xy7kR0kUmiqCOspCKYZKmiU8DTqzko5yQfJWHYxuNosqnUYH+K9vTz1JBStdzrGM ZAIDhhxPxNuC/gRlbavmbuyaHoPrBO2+l+dF/8be1YFyqMm3iIabROBWOqjnri4+ ZAGyGpr8ktJNv8rAlFvvDbg2fYO8j8FdA1Olf+UgCWZvzKPKESGrSwHg458c37XN x0oWmytn5eXaY0LJgCo0D3Pf5uqrXKsazNSc/QZ9gwqf7hZJU8Y= =nNVc -----END PGP SIGNATURE----- Merge 4.14.223 into android-4.14-stable Changes in 4.14.223 HID: make arrays usage and value to be the same usb: quirks: add quirk to start video capture on ELMO L-12F document camera reliable ntfs: check for valid standard information attribute arm64: tegra: Add power-domain for Tegra210 HDA NET: usb: qmi_wwan: Adding support for Cinterion MV31 cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath. scripts/recordmcount.pl: support big endian for ARCH sh vmlinux.lds.h: add DWARF v5 sections kdb: Make memory allocations more robust MIPS: vmlinux.lds.S: add missing PAGE_ALIGNED_DATA() section random: fix the RNDRESEEDCRNG ioctl Bluetooth: btqcomsmd: Fix a resource leak in error handling paths in the probe function Bluetooth: Fix initializing response id after clearing struct ARM: dts: exynos: correct PMIC interrupt trigger level on Monk ARM: dts: exynos: correct PMIC interrupt trigger level on Rinato ARM: dts: exynos: correct PMIC interrupt trigger level on Spring ARM: dts: exynos: correct PMIC interrupt trigger level on Arndale Octa arm64: dts: exynos: correct PMIC interrupt trigger level on TM2 arm64: dts: exynos: correct PMIC interrupt trigger level on Espresso cpufreq: brcmstb-avs-cpufreq: Fix resource leaks in ->remove() usb: gadget: u_audio: Free requests only after callback Bluetooth: drop HCI device reference before return Bluetooth: Put HCI device if inquiry procedure interrupts ARM: dts: Configure missing thermal interrupt for 4430 usb: dwc2: Do not update data length if it is 0 on inbound transfers usb: dwc2: Abort transaction after errors with unknown reason usb: dwc2: Make "trimming xfer length" a debug message staging: rtl8723bs: wifi_regd.c: Fix incorrect number of regulatory rules arm64: dts: msm8916: Fix reserved and rfsa nodes unit address ARM: s3c: fix fiq for clang IAS bpf_lru_list: Read double-checked variable once without lock ath9k: fix data bus crash when setting nf_override via debugfs bnxt_en: reverse order of TX disable and carrier off xen/netback: fix spurious event detection for common event case mac80211: fix potential overflow when multiplying to u32 integers b43: N-PHY: Fix the update of coef for the PHY revision >= 3case ibmvnic: skip send_request_unmap for timeout reset net: amd-xgbe: Reset the PHY rx data path when mailbox command timeout net: amd-xgbe: Reset link when the link never comes back net: mvneta: Remove per-cpu queue mapping for Armada 3700 fbdev: aty: SPARC64 requires FB_ATY_CT drm/gma500: Fix error return code in psb_driver_load() gma500: clean up error handling in init crypto: sun4i-ss - fix kmap usage MIPS: c-r4k: Fix section mismatch for loongson2_sc_init MIPS: lantiq: Explicitly compare LTQ_EBU_PCC_ISTAT against 0 media: i2c: ov5670: Fix PIXEL_RATE minimum value media: vsp1: Fix an error handling path in the probe function media: media/pci: Fix memleak in empress_init media: tm6000: Fix memleak in tm6000_start_stream ASoC: cs42l56: fix up error handling in probe crypto: bcm - Rename struct device_private to bcm_device_private media: lmedm04: Fix misuse of comma media: qm1d1c0042: fix error return code in qm1d1c0042_init() media: cx25821: Fix a bug when reallocating some dma memory media: pxa_camera: declare variable when DEBUG is defined media: uvcvideo: Accept invalid bFormatIndex and bFrameIndex values ata: ahci_brcm: Add back regulators management Drivers: hv: vmbus: Avoid use-after-free in vmbus_onoffer_rescind() btrfs: clarify error returns values in __load_free_space_cache hwrng: timeriomem - Fix cooldown period calculation crypto: ecdh_helper - Ensure 'len >= secret.len' in decode_key() ima: Free IMA measurement buffer on error ima: Free IMA measurement buffer after kexec syscall fs/jfs: fix potential integer overflow on shift of a int jffs2: fix use after free in jffs2_sum_write_data() capabilities: Don't allow writing ambiguous v3 file capabilities clk: meson: clk-pll: fix initializing the old rate (fallback) for a PLL quota: Fix memory leak when handling corrupted quota file spi: cadence-quadspi: Abort read if dummy cycles required are too many HID: core: detect and skip invalid inputs to snto32() dmaengine: fsldma: Fix a resource leak in the remove function dmaengine: fsldma: Fix a resource leak in an error handling path of the probe function dmaengine: hsu: disable spurious interrupt mfd: bd9571mwv: Use devm_mfd_add_devices() fdt: Properly handle "no-map" field in the memory region of/fdt: Make sure no-map does not remove already reserved regions power: reset: at91-sama5d2_shdwc: fix wkupdbc mask rtc: s5m: select REGMAP_I2C clocksource/drivers/mxs_timer: Add missing semicolon when DEBUG is defined regulator: axp20x: Fix reference cout leak certs: Fix blacklist flag type confusion spi: atmel: Put allocated master before return isofs: release buffer head before return auxdisplay: ht16k33: Fix refresh rate handling IB/umad: Return EIO in case of when device disassociated powerpc/47x: Disable 256k page size mmc: usdhi6rol0: Fix a resource leak in the error handling path of the probe ARM: 9046/1: decompressor: Do not clear SCTLR.nTLSMD for ARMv7+ cores amba: Fix resource leak for drivers without .remove tracepoint: Do not fail unregistering a probe due to memory failure perf tools: Fix DSO filtering when not finding a map for a sampled address RDMA/rxe: Fix coding error in rxe_recv.c spi: stm32: properly handle 0 byte transfer mfd: wm831x-auxadc: Prevent use after free in wm831x_auxadc_read_irq() powerpc/pseries/dlpar: handle ibm, configure-connector delay status powerpc/8xx: Fix software emulation interrupt spi: pxa2xx: Fix the controller numbering for Wildcat Point perf intel-pt: Fix missing CYC processing in PSB perf test: Fix unaligned access in sample parsing test Input: elo - fix an error code in elo_connect() sparc64: only select COMPAT_BINFMT_ELF if BINFMT_ELF is set misc: eeprom_93xx46: Fix module alias to enable module autoprobe misc: eeprom_93xx46: Add module alias to avoid breaking support for non device tree users pwm: rockchip: rockchip_pwm_probe(): Remove superfluous clk_unprepare() VMCI: Use set_page_dirty_lock() when unregistering guest memory PCI: Align checking of syscall user config accessors drm/msm/dsi: Correct io_start for MSM8994 (20nm PHY) ext4: fix potential htree index checksum corruption i40e: Fix flow for IPv6 next header (extension header) i40e: Fix overwriting flow control settings during driver loading net/mlx4_core: Add missed mlx4_free_cmd_mailbox() ocfs2: fix a use after free on error mm/memory.c: fix potential pte_unmap_unlock pte error mm/hugetlb: fix potential double free in hugetlb_register_node() error path arm64: Add missing ISB after invalidating TLB in __primary_switch i2c: brcmstb: Fix brcmstd_send_i2c_cmd condition mm/rmap: fix potential pte_unmap on an not mapped pte scsi: bnx2fc: Fix Kconfig warning & CNIC build errors blk-settings: align max_sectors on "logical_block_size" boundary ACPI: property: Fix fwnode string properties matching ACPI: configfs: add missing check after configfs_register_default_group() HID: wacom: Ignore attempts to overwrite the touch_max value from HID Input: raydium_ts_i2c - do not send zero length Input: xpad - add support for PowerA Enhanced Wired Controller for Xbox Series X|S Input: joydev - prevent potential read overflow in ioctl Input: i8042 - add ASUS Zenbook Flip to noselftest list USB: serial: option: update interface mapping for ZTE P685M usb: musb: Fix runtime PM race in musb_queue_resume_work USB: serial: mos7840: fix error code in mos7840_write() USB: serial: mos7720: fix error code in mos7720_write() usb: dwc3: gadget: Fix setting of DEPCFG.bInterval_m1 usb: dwc3: gadget: Fix dep->interval for fullspeed interrupt ALSA: hda/realtek: modify EAPD in the ALC886 tpm_tis: Fix check_locality for correct locality acquisition KEYS: trusted: Fix migratable=1 failing btrfs: abort the transaction if we fail to inc ref in btrfs_copy_root btrfs: fix reloc root leak with 0 ref reloc roots on recovery btrfs: fix extent buffer leak on failure to copy root crypto: sun4i-ss - checking sg length is not sufficient crypto: sun4i-ss - handle BigEndian for cipher seccomp: Add missing return in non-void function drivers/misc/vmw_vmci: restrict too big queue size in qp_host_alloc_queue staging: rtl8188eu: Add Edimax EW-7811UN V2 to device table x86/reboot: Force all cpus to exit VMX root if VMX is supported floppy: reintroduce O_NDELAY fix arm64: uprobe: Return EOPNOTSUPP for AARCH32 instruction probing watchdog: mei_wdt: request stop on unregister mtd: spi-nor: hisi-sfc: Put child node np on error path fs/affs: release old buffer head on error path hugetlb: fix copy_huge_page_from_user contig page struct assumption mm: hugetlb: fix a race between freeing and dissolving the page usb: renesas_usbhs: Clear pipe running flag in usbhs_pkt_pop() libnvdimm/dimm: Avoid race between probe and available_slots_show() module: Ignore _GLOBAL_OFFSET_TABLE_ when warning for undefined symbols mmc: sdhci-esdhc-imx: fix kernel panic when remove module gpio: pcf857x: Fix missing first interrupt printk: fix deadlock when kernel panic f2fs: fix out-of-repair __setattr_copy() sparc32: fix a user-triggerable oops in clear_user() gfs2: Don't skip dlm unlock if glock has an lvb dm era: Recover committed writeset after crash dm era: Verify the data block size hasn't changed dm era: Fix bitset memory leaks dm era: Use correct value size in equality function of writeset tree dm era: Reinitialize bitset cache before digesting a new writeset dm era: only resize metadata in preresume icmp: introduce helper for nat'd source address in network device context icmp: allow icmpv6_ndo_send to work with CONFIG_IPV6=n gtp: use icmp_ndo_send helper sunvnet: use icmp_ndo_send helper ipv6: icmp6: avoid indirect call for icmpv6_send() ipv6: silence compilation warning for non-IPV6 builds net: icmp: pass zeroed opts from icmp{,v6}_ndo_send before sending dm era: Update in-core bitset after committing the metadata Linux 4.14.223 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ib3da7b72393e257416645cd59c380fce3c801177
This commit is contained in:
commit
a2e73af4e5
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 222
|
||||
SUBLEVEL = 223
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -1090,9 +1090,9 @@ __armv4_mmu_cache_off:
|
||||
__armv7_mmu_cache_off:
|
||||
mrc p15, 0, r0, c1, c0
|
||||
#ifdef CONFIG_MMU
|
||||
bic r0, r0, #0x000d
|
||||
bic r0, r0, #0x0005
|
||||
#else
|
||||
bic r0, r0, #0x000c
|
||||
bic r0, r0, #0x0004
|
||||
#endif
|
||||
mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
|
||||
mov r12, lr
|
||||
|
@ -191,7 +191,7 @@
|
||||
s2mps14_pmic@66 {
|
||||
compatible = "samsung,s2mps14-pmic";
|
||||
interrupt-parent = <&gpx0>;
|
||||
interrupts = <7 IRQ_TYPE_NONE>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
reg = <0x66>;
|
||||
wakeup-source;
|
||||
|
||||
|
@ -274,7 +274,7 @@
|
||||
s2mps14_pmic@66 {
|
||||
compatible = "samsung,s2mps14-pmic";
|
||||
interrupt-parent = <&gpx0>;
|
||||
interrupts = <7 IRQ_TYPE_NONE>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
reg = <0x66>;
|
||||
wakeup-source;
|
||||
|
||||
|
@ -111,7 +111,7 @@
|
||||
compatible = "samsung,s5m8767-pmic";
|
||||
reg = <0x66>;
|
||||
interrupt-parent = <&gpx3>;
|
||||
interrupts = <2 IRQ_TYPE_NONE>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
|
||||
wakeup-source;
|
||||
|
@ -87,7 +87,7 @@
|
||||
reg = <0x66>;
|
||||
|
||||
interrupt-parent = <&gpx3>;
|
||||
interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&s2mps11_irq>;
|
||||
|
||||
|
@ -35,10 +35,12 @@
|
||||
};
|
||||
|
||||
ocp {
|
||||
/* 4430 has only gpio_86 tshut and no talert interrupt */
|
||||
bandgap: bandgap@4a002260 {
|
||||
reg = <0x4a002260 0x4
|
||||
0x4a00232C 0x4>;
|
||||
compatible = "ti,omap4430-bandgap";
|
||||
gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
@ -343,7 +343,7 @@
|
||||
s2mps13-pmic@66 {
|
||||
compatible = "samsung,s2mps13-pmic";
|
||||
interrupt-parent = <&gpa0>;
|
||||
interrupts = <7 IRQ_TYPE_NONE>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
reg = <0x66>;
|
||||
samsung,s2mps11-wrstbi-ground;
|
||||
|
||||
|
@ -88,7 +88,7 @@
|
||||
s2mps15_pmic@66 {
|
||||
compatible = "samsung,s2mps15-pmic";
|
||||
reg = <0x66>;
|
||||
interrupts = <2 IRQ_TYPE_NONE>;
|
||||
interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&gpa0>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pmic_irq>;
|
||||
|
@ -810,6 +810,7 @@
|
||||
<&tegra_car 128>, /* hda2hdmi */
|
||||
<&tegra_car 111>; /* hda2codec_2x */
|
||||
reset-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
power-domains = <&pd_sor>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -63,7 +63,7 @@
|
||||
no-map;
|
||||
};
|
||||
|
||||
reserved@8668000 {
|
||||
reserved@86680000 {
|
||||
reg = <0x0 0x86680000 0x0 0x80000>;
|
||||
no-map;
|
||||
};
|
||||
@ -73,7 +73,7 @@
|
||||
no-map;
|
||||
};
|
||||
|
||||
rfsa@867e00000 {
|
||||
rfsa@867e0000 {
|
||||
reg = <0x0 0x867e0000 0x0 0x20000>;
|
||||
no-map;
|
||||
};
|
||||
|
@ -849,6 +849,7 @@ __primary_switch:
|
||||
|
||||
tlbi vmalle1 // Remove any stale TLB entries
|
||||
dsb nsh
|
||||
isb
|
||||
|
||||
msr sctlr_el1, x19 // re-enable the MMU
|
||||
isb
|
||||
|
@ -41,7 +41,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,
|
||||
|
||||
/* TODO: Currently we do not support AARCH32 instruction probing */
|
||||
if (mm->context.flags & MMCF_AARCH32)
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE))
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -93,6 +93,7 @@ SECTIONS
|
||||
|
||||
INIT_TASK_DATA(THREAD_SIZE)
|
||||
NOSAVE_DATA
|
||||
PAGE_ALIGNED_DATA(PAGE_SIZE)
|
||||
CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||
READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||
DATA_DATA
|
||||
|
@ -244,7 +244,7 @@ static void ltq_hw_irq_handler(struct irq_desc *desc)
|
||||
generic_handle_irq(irq_linear_revmap(ltq_domain, hwirq));
|
||||
|
||||
/* if this is a EBU irq, we need to ack it or get a deadlock */
|
||||
if ((irq == LTQ_ICU_EBU_IRQ) && (module == 0) && LTQ_EBU_PCC_ISTAT)
|
||||
if (irq == LTQ_ICU_EBU_IRQ && !module && LTQ_EBU_PCC_ISTAT != 0)
|
||||
ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_ISTAT) | 0x10,
|
||||
LTQ_EBU_PCC_ISTAT);
|
||||
}
|
||||
|
@ -1665,7 +1665,7 @@ static int probe_scache(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void __init loongson2_sc_init(void)
|
||||
static void loongson2_sc_init(void)
|
||||
{
|
||||
struct cpuinfo_mips *c = ¤t_cpu_data;
|
||||
|
||||
|
@ -735,7 +735,7 @@ config PPC_64K_PAGES
|
||||
|
||||
config PPC_256K_PAGES
|
||||
bool "256k page size"
|
||||
depends on 44x && !STDBINUTILS
|
||||
depends on 44x && !STDBINUTILS && !PPC_47x
|
||||
help
|
||||
Make the page size 256k.
|
||||
|
||||
|
@ -301,7 +301,7 @@ SystemCall:
|
||||
/* On the MPC8xx, this is a software emulation interrupt. It occurs
|
||||
* for all unimplemented and illegal instructions.
|
||||
*/
|
||||
EXCEPTION(0x1000, SoftEmu, program_check_exception, EXC_XFER_STD)
|
||||
EXCEPTION(0x1000, SoftEmu, emulation_assist_interrupt, EXC_XFER_STD)
|
||||
|
||||
. = 0x1100
|
||||
/*
|
||||
|
@ -139,7 +139,6 @@ void dlpar_free_cc_nodes(struct device_node *dn)
|
||||
#define NEXT_PROPERTY 3
|
||||
#define PREV_PARENT 4
|
||||
#define MORE_MEMORY 5
|
||||
#define CALL_AGAIN -2
|
||||
#define ERR_CFG_USE -9003
|
||||
|
||||
struct device_node *dlpar_configure_connector(__be32 drc_index,
|
||||
@ -181,6 +180,9 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
|
||||
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
|
||||
if (rtas_busy_delay(rc))
|
||||
continue;
|
||||
|
||||
switch (rc) {
|
||||
case COMPLETE:
|
||||
break;
|
||||
@ -233,9 +235,6 @@ struct device_node *dlpar_configure_connector(__be32 drc_index,
|
||||
parent_path = last_dn->parent->full_name;
|
||||
break;
|
||||
|
||||
case CALL_AGAIN:
|
||||
break;
|
||||
|
||||
case MORE_MEMORY:
|
||||
case ERR_CFG_USE:
|
||||
default:
|
||||
|
@ -574,7 +574,7 @@ config COMPAT
|
||||
bool
|
||||
depends on SPARC64
|
||||
default y
|
||||
select COMPAT_BINFMT_ELF
|
||||
select COMPAT_BINFMT_ELF if BINFMT_ELF
|
||||
select HAVE_UID16
|
||||
select ARCH_WANT_OLD_COMPAT_IPC
|
||||
select COMPAT_OLD_SIGACTION
|
||||
|
@ -142,6 +142,7 @@ __bzero:
|
||||
ZERO_LAST_BLOCKS(%o0, 0x48, %g2)
|
||||
ZERO_LAST_BLOCKS(%o0, 0x08, %g2)
|
||||
13:
|
||||
EXT(12b, 13b, 21f)
|
||||
be 8f
|
||||
andcc %o1, 4, %g0
|
||||
|
||||
|
@ -538,29 +538,20 @@ static void emergency_vmx_disable_all(void)
|
||||
local_irq_disable();
|
||||
|
||||
/*
|
||||
* We need to disable VMX on all CPUs before rebooting, otherwise
|
||||
* we risk hanging up the machine, because the CPU ignore INIT
|
||||
* signals when VMX is enabled.
|
||||
* Disable VMX on all CPUs before rebooting, otherwise we risk hanging
|
||||
* the machine, because the CPU blocks INIT when it's in VMX root.
|
||||
*
|
||||
* We can't take any locks and we may be on an inconsistent
|
||||
* state, so we use NMIs as IPIs to tell the other CPUs to disable
|
||||
* VMX and halt.
|
||||
* We can't take any locks and we may be on an inconsistent state, so
|
||||
* use NMIs as IPIs to tell the other CPUs to exit VMX root and halt.
|
||||
*
|
||||
* For safety, we will avoid running the nmi_shootdown_cpus()
|
||||
* stuff unnecessarily, but we don't have a way to check
|
||||
* if other CPUs have VMX enabled. So we will call it only if the
|
||||
* CPU we are running on has VMX enabled.
|
||||
*
|
||||
* We will miss cases where VMX is not enabled on all CPUs. This
|
||||
* shouldn't do much harm because KVM always enable VMX on all
|
||||
* CPUs anyway. But we can miss it on the small window where KVM
|
||||
* is still enabling VMX.
|
||||
* Do the NMI shootdown even if VMX if off on _this_ CPU, as that
|
||||
* doesn't prevent a different CPU from being in VMX root operation.
|
||||
*/
|
||||
if (cpu_has_vmx() && cpu_vmx_enabled()) {
|
||||
/* Disable VMX on this CPU. */
|
||||
cpu_vmxoff();
|
||||
if (cpu_has_vmx()) {
|
||||
/* Safely force _this_ CPU out of VMX root operation. */
|
||||
__cpu_emergency_vmxoff();
|
||||
|
||||
/* Halt and disable VMX on the other CPUs */
|
||||
/* Halt and exit VMX root operation on the other CPUs. */
|
||||
nmi_shootdown_cpus(vmxoff_nmi);
|
||||
|
||||
}
|
||||
|
@ -513,6 +513,14 @@ void blk_queue_io_opt(struct request_queue *q, unsigned int opt)
|
||||
}
|
||||
EXPORT_SYMBOL(blk_queue_io_opt);
|
||||
|
||||
static unsigned int blk_round_down_sectors(unsigned int sectors, unsigned int lbs)
|
||||
{
|
||||
sectors = round_down(sectors, lbs >> SECTOR_SHIFT);
|
||||
if (sectors < PAGE_SIZE >> SECTOR_SHIFT)
|
||||
sectors = PAGE_SIZE >> SECTOR_SHIFT;
|
||||
return sectors;
|
||||
}
|
||||
|
||||
/**
|
||||
* blk_queue_stack_limits - inherit underlying queue limits for stacked drivers
|
||||
* @t: the stacking driver (top)
|
||||
@ -639,6 +647,10 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
t->max_sectors = blk_round_down_sectors(t->max_sectors, t->logical_block_size);
|
||||
t->max_hw_sectors = blk_round_down_sectors(t->max_hw_sectors, t->logical_block_size);
|
||||
t->max_dev_sectors = blk_round_down_sectors(t->max_dev_sectors, t->logical_block_size);
|
||||
|
||||
/* Discard alignment and granularity */
|
||||
if (b->discard_granularity) {
|
||||
alignment = queue_limit_discard_alignment(b, start);
|
||||
|
@ -157,7 +157,7 @@ static int __init blacklist_init(void)
|
||||
KEY_USR_VIEW | KEY_USR_READ |
|
||||
KEY_USR_SEARCH,
|
||||
KEY_ALLOC_NOT_IN_QUOTA |
|
||||
KEY_FLAG_KEEP,
|
||||
KEY_ALLOC_SET_KEEP,
|
||||
NULL, NULL);
|
||||
if (IS_ERR(blacklist_keyring))
|
||||
panic("Can't allocate system blacklist keyring\n");
|
||||
|
@ -71,6 +71,9 @@ int crypto_ecdh_decode_key(const char *buf, unsigned int len,
|
||||
if (secret.type != CRYPTO_KPP_SECRET_TYPE_ECDH)
|
||||
return -EINVAL;
|
||||
|
||||
if (unlikely(len < secret.len))
|
||||
return -EINVAL;
|
||||
|
||||
ptr = ecdh_unpack_data(¶ms->curve_id, ptr, sizeof(params->curve_id));
|
||||
ptr = ecdh_unpack_data(¶ms->key_size, ptr, sizeof(params->key_size));
|
||||
if (secret.len != crypto_ecdh_key_len(params))
|
||||
|
@ -269,7 +269,12 @@ static int __init acpi_configfs_init(void)
|
||||
|
||||
acpi_table_group = configfs_register_default_group(root, "table",
|
||||
&acpi_tables_type);
|
||||
return PTR_ERR_OR_ZERO(acpi_table_group);
|
||||
if (IS_ERR(acpi_table_group)) {
|
||||
configfs_unregister_subsystem(&acpi_configfs);
|
||||
return PTR_ERR(acpi_table_group);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(acpi_configfs_init);
|
||||
|
||||
|
@ -688,9 +688,6 @@ static int acpi_data_prop_read_single(const struct acpi_device_data *data,
|
||||
const union acpi_object *obj;
|
||||
int ret;
|
||||
|
||||
if (!val)
|
||||
return -EINVAL;
|
||||
|
||||
if (proptype >= DEV_PROP_U8 && proptype <= DEV_PROP_U64) {
|
||||
ret = acpi_data_get_property(data, propname, ACPI_TYPE_INTEGER, &obj);
|
||||
if (ret)
|
||||
@ -700,28 +697,43 @@ static int acpi_data_prop_read_single(const struct acpi_device_data *data,
|
||||
case DEV_PROP_U8:
|
||||
if (obj->integer.value > U8_MAX)
|
||||
return -EOVERFLOW;
|
||||
*(u8 *)val = obj->integer.value;
|
||||
|
||||
if (val)
|
||||
*(u8 *)val = obj->integer.value;
|
||||
|
||||
break;
|
||||
case DEV_PROP_U16:
|
||||
if (obj->integer.value > U16_MAX)
|
||||
return -EOVERFLOW;
|
||||
*(u16 *)val = obj->integer.value;
|
||||
|
||||
if (val)
|
||||
*(u16 *)val = obj->integer.value;
|
||||
|
||||
break;
|
||||
case DEV_PROP_U32:
|
||||
if (obj->integer.value > U32_MAX)
|
||||
return -EOVERFLOW;
|
||||
*(u32 *)val = obj->integer.value;
|
||||
|
||||
if (val)
|
||||
*(u32 *)val = obj->integer.value;
|
||||
|
||||
break;
|
||||
default:
|
||||
*(u64 *)val = obj->integer.value;
|
||||
if (val)
|
||||
*(u64 *)val = obj->integer.value;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (!val)
|
||||
return 1;
|
||||
} else if (proptype == DEV_PROP_STRING) {
|
||||
ret = acpi_data_get_property(data, propname, ACPI_TYPE_STRING, &obj);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
*(char **)val = obj->string.pointer;
|
||||
if (val)
|
||||
*(char **)val = obj->string.pointer;
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
@ -735,7 +747,7 @@ int acpi_dev_prop_read_single(struct acpi_device *adev, const char *propname,
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!adev)
|
||||
if (!adev || !val)
|
||||
return -EINVAL;
|
||||
|
||||
ret = acpi_data_prop_read_single(&adev->data, propname, proptype, val);
|
||||
@ -829,10 +841,20 @@ static int acpi_data_prop_read(const struct acpi_device_data *data,
|
||||
const union acpi_object *items;
|
||||
int ret;
|
||||
|
||||
if (val && nval == 1) {
|
||||
if (nval == 1 || !val) {
|
||||
ret = acpi_data_prop_read_single(data, propname, proptype, val);
|
||||
if (ret >= 0)
|
||||
/*
|
||||
* The overflow error means that the property is there and it is
|
||||
* single-value, but its type does not match, so return.
|
||||
*/
|
||||
if (ret >= 0 || ret == -EOVERFLOW)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Reading this property as a single-value one failed, but its
|
||||
* value may still be represented as one-element array, so
|
||||
* continue.
|
||||
*/
|
||||
}
|
||||
|
||||
ret = acpi_data_get_property_array(data, propname, ACPI_TYPE_ANY, &obj);
|
||||
|
@ -279,10 +279,11 @@ static int amba_remove(struct device *dev)
|
||||
{
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
struct amba_driver *drv = to_amba_driver(dev->driver);
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
pm_runtime_get_sync(dev);
|
||||
ret = drv->remove(pcdev);
|
||||
if (drv->remove)
|
||||
ret = drv->remove(pcdev);
|
||||
pm_runtime_put_noidle(dev);
|
||||
|
||||
/* Undo the runtime PM settings in amba_probe() */
|
||||
@ -299,7 +300,9 @@ static int amba_remove(struct device *dev)
|
||||
static void amba_shutdown(struct device *dev)
|
||||
{
|
||||
struct amba_driver *drv = to_amba_driver(dev->driver);
|
||||
drv->shutdown(to_amba_device(dev));
|
||||
|
||||
if (drv->shutdown)
|
||||
drv->shutdown(to_amba_device(dev));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -312,12 +315,13 @@ static void amba_shutdown(struct device *dev)
|
||||
*/
|
||||
int amba_driver_register(struct amba_driver *drv)
|
||||
{
|
||||
drv->drv.bus = &amba_bustype;
|
||||
if (!drv->probe)
|
||||
return -EINVAL;
|
||||
|
||||
#define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn
|
||||
SETFN(probe);
|
||||
SETFN(remove);
|
||||
SETFN(shutdown);
|
||||
drv->drv.bus = &amba_bustype;
|
||||
drv->drv.probe = amba_probe;
|
||||
drv->drv.remove = amba_remove;
|
||||
drv->drv.shutdown = amba_shutdown;
|
||||
|
||||
return driver_register(&drv->drv);
|
||||
}
|
||||
|
@ -280,6 +280,10 @@ static int brcm_ahci_resume(struct device *dev)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = ahci_platform_enable_regulators(hpriv);
|
||||
if (ret)
|
||||
goto out_disable_clks;
|
||||
|
||||
brcm_sata_init(priv);
|
||||
brcm_sata_phys_enable(priv);
|
||||
brcm_sata_alpm_init(hpriv);
|
||||
@ -309,6 +313,8 @@ out_disable_platform_phys:
|
||||
ahci_platform_disable_phys(hpriv);
|
||||
out_disable_phys:
|
||||
brcm_sata_phys_disable(priv);
|
||||
ahci_platform_disable_regulators(hpriv);
|
||||
out_disable_clks:
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
return ret;
|
||||
}
|
||||
@ -372,6 +378,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
goto out_reset;
|
||||
|
||||
ret = ahci_platform_enable_regulators(hpriv);
|
||||
if (ret)
|
||||
goto out_disable_clks;
|
||||
|
||||
/* Must be first so as to configure endianness including that
|
||||
* of the standard AHCI register space.
|
||||
*/
|
||||
@ -381,7 +391,7 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
||||
priv->port_mask = brcm_ahci_get_portmask(hpriv, priv);
|
||||
if (!priv->port_mask) {
|
||||
ret = -ENODEV;
|
||||
goto out_disable_clks;
|
||||
goto out_disable_regulators;
|
||||
}
|
||||
|
||||
/* Must be done before ahci_platform_enable_phys() */
|
||||
@ -413,6 +423,8 @@ out_disable_platform_phys:
|
||||
ahci_platform_disable_phys(hpriv);
|
||||
out_disable_phys:
|
||||
brcm_sata_phys_disable(priv);
|
||||
out_disable_regulators:
|
||||
ahci_platform_disable_regulators(hpriv);
|
||||
out_disable_clks:
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
out_reset:
|
||||
|
@ -125,8 +125,7 @@ static void ht16k33_fb_queue(struct ht16k33_priv *priv)
|
||||
{
|
||||
struct ht16k33_fbdev *fbdev = &priv->fbdev;
|
||||
|
||||
schedule_delayed_work(&fbdev->work,
|
||||
msecs_to_jiffies(HZ / fbdev->refresh_rate));
|
||||
schedule_delayed_work(&fbdev->work, HZ / fbdev->refresh_rate);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -4069,21 +4069,22 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
|
||||
if (UFDCS->rawcmd == 1)
|
||||
UFDCS->rawcmd = 2;
|
||||
|
||||
if (!(mode & FMODE_NDELAY)) {
|
||||
if (mode & (FMODE_READ|FMODE_WRITE)) {
|
||||
UDRS->last_checked = 0;
|
||||
clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
|
||||
check_disk_change(bdev);
|
||||
if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
|
||||
goto out;
|
||||
if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
|
||||
goto out;
|
||||
}
|
||||
res = -EROFS;
|
||||
if ((mode & FMODE_WRITE) &&
|
||||
!test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags))
|
||||
if (mode & (FMODE_READ|FMODE_WRITE)) {
|
||||
UDRS->last_checked = 0;
|
||||
clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
|
||||
check_disk_change(bdev);
|
||||
if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
|
||||
goto out;
|
||||
if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
|
||||
goto out;
|
||||
}
|
||||
|
||||
res = -EROFS;
|
||||
|
||||
if ((mode & FMODE_WRITE) &&
|
||||
!test_bit(FD_DISK_WRITABLE_BIT, &UDRS->flags))
|
||||
goto out;
|
||||
|
||||
mutex_unlock(&open_lock);
|
||||
mutex_unlock(&floppy_mutex);
|
||||
return 0;
|
||||
|
@ -154,12 +154,16 @@ static int btqcomsmd_probe(struct platform_device *pdev)
|
||||
|
||||
btq->cmd_channel = qcom_wcnss_open_channel(wcnss, "APPS_RIVA_BT_CMD",
|
||||
btqcomsmd_cmd_callback, btq);
|
||||
if (IS_ERR(btq->cmd_channel))
|
||||
return PTR_ERR(btq->cmd_channel);
|
||||
if (IS_ERR(btq->cmd_channel)) {
|
||||
ret = PTR_ERR(btq->cmd_channel);
|
||||
goto destroy_acl_channel;
|
||||
}
|
||||
|
||||
hdev = hci_alloc_dev();
|
||||
if (!hdev)
|
||||
return -ENOMEM;
|
||||
if (!hdev) {
|
||||
ret = -ENOMEM;
|
||||
goto destroy_cmd_channel;
|
||||
}
|
||||
|
||||
hci_set_drvdata(hdev, btq);
|
||||
btq->hdev = hdev;
|
||||
@ -173,14 +177,21 @@ static int btqcomsmd_probe(struct platform_device *pdev)
|
||||
hdev->set_bdaddr = qca_set_bdaddr_rome;
|
||||
|
||||
ret = hci_register_dev(hdev);
|
||||
if (ret < 0) {
|
||||
hci_free_dev(hdev);
|
||||
return ret;
|
||||
}
|
||||
if (ret < 0)
|
||||
goto hci_free_dev;
|
||||
|
||||
platform_set_drvdata(pdev, btq);
|
||||
|
||||
return 0;
|
||||
|
||||
hci_free_dev:
|
||||
hci_free_dev(hdev);
|
||||
destroy_cmd_channel:
|
||||
rpmsg_destroy_ept(btq->cmd_channel);
|
||||
destroy_acl_channel:
|
||||
rpmsg_destroy_ept(btq->acl_channel);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int btqcomsmd_remove(struct platform_device *pdev)
|
||||
|
@ -79,7 +79,7 @@ static int timeriomem_rng_read(struct hwrng *hwrng, void *data,
|
||||
*/
|
||||
if (retval > 0)
|
||||
usleep_range(period_us,
|
||||
period_us + min(1, period_us / 100));
|
||||
period_us + max(1, period_us / 100));
|
||||
|
||||
*(u32 *)data = readl(priv->io_base);
|
||||
retval += sizeof(u32);
|
||||
|
@ -1983,7 +1983,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
|
||||
return -EPERM;
|
||||
if (crng_init < 2)
|
||||
return -ENODATA;
|
||||
crng_reseed(&primary_crng, NULL);
|
||||
crng_reseed(&primary_crng, &input_pool);
|
||||
crng_global_init_time = jiffies - 1;
|
||||
return 0;
|
||||
default:
|
||||
|
@ -68,7 +68,8 @@ static bool check_locality(struct tpm_chip *chip, int l)
|
||||
if (rc < 0)
|
||||
return false;
|
||||
|
||||
if ((access & (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) ==
|
||||
if ((access & (TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID
|
||||
| TPM_ACCESS_REQUEST_USE)) ==
|
||||
(TPM_ACCESS_ACTIVE_LOCALITY | TPM_ACCESS_VALID)) {
|
||||
priv->locality = l;
|
||||
return true;
|
||||
|
@ -178,7 +178,7 @@ static int meson_clk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
if (parent_rate == 0 || rate == 0)
|
||||
return -EINVAL;
|
||||
|
||||
old_rate = rate;
|
||||
old_rate = clk_hw_get_rate(hw);
|
||||
|
||||
rate_set = meson_clk_get_pll_settings(pll, rate);
|
||||
if (!rate_set)
|
||||
|
@ -152,10 +152,7 @@ static void mxs_irq_clear(char *state)
|
||||
|
||||
/* Clear pending interrupt */
|
||||
timrot_irq_acknowledge();
|
||||
|
||||
#ifdef DEBUG
|
||||
pr_info("%s: changing mode to %s\n", __func__, state)
|
||||
#endif /* DEBUG */
|
||||
pr_debug("%s: changing mode to %s\n", __func__, state);
|
||||
}
|
||||
|
||||
static int mxs_shutdown(struct clock_event_device *evt)
|
||||
|
@ -1033,8 +1033,7 @@ static int brcm_avs_cpufreq_remove(struct platform_device *pdev)
|
||||
int ret;
|
||||
|
||||
ret = cpufreq_unregister_driver(&brcm_avs_driver);
|
||||
if (ret)
|
||||
return ret;
|
||||
WARN_ON(ret);
|
||||
|
||||
brcm_avs_cpufreq_debug_exit(pdev);
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
/* ================= Device Structure ================== */
|
||||
|
||||
struct device_private iproc_priv;
|
||||
struct bcm_device_private iproc_priv;
|
||||
|
||||
/* ==================== Parameters ===================== */
|
||||
|
||||
|
@ -432,7 +432,7 @@ struct spu_hw {
|
||||
u32 num_chan;
|
||||
};
|
||||
|
||||
struct device_private {
|
||||
struct bcm_device_private {
|
||||
struct platform_device *pdev;
|
||||
|
||||
struct spu_hw spu;
|
||||
@ -479,6 +479,6 @@ struct device_private {
|
||||
struct mbox_chan **mbox;
|
||||
};
|
||||
|
||||
extern struct device_private iproc_priv;
|
||||
extern struct bcm_device_private iproc_priv;
|
||||
|
||||
#endif
|
||||
|
@ -401,7 +401,7 @@ char *spu_alg_name(enum spu_cipher_alg alg, enum spu_cipher_mode mode)
|
||||
static ssize_t spu_debugfs_read(struct file *filp, char __user *ubuf,
|
||||
size_t count, loff_t *offp)
|
||||
{
|
||||
struct device_private *ipriv;
|
||||
struct bcm_device_private *ipriv;
|
||||
char *buf;
|
||||
ssize_t ret, out_offset, out_count;
|
||||
int i;
|
||||
|
@ -34,6 +34,8 @@ static int sun4i_ss_opti_poll(struct skcipher_request *areq)
|
||||
unsigned int ileft = areq->cryptlen;
|
||||
unsigned int oleft = areq->cryptlen;
|
||||
unsigned int todo;
|
||||
unsigned long pi = 0, po = 0; /* progress for in and out */
|
||||
bool miter_err;
|
||||
struct sg_mapping_iter mi, mo;
|
||||
unsigned int oi, oo; /* offset for in and out */
|
||||
unsigned long flags;
|
||||
@ -53,50 +55,62 @@ static int sun4i_ss_opti_poll(struct skcipher_request *areq)
|
||||
|
||||
spin_lock_irqsave(&ss->slock, flags);
|
||||
|
||||
for (i = 0; i < op->keylen; i += 4)
|
||||
writel(*(op->key + i / 4), ss->base + SS_KEY0 + i);
|
||||
for (i = 0; i < op->keylen / 4; i++)
|
||||
writesl(ss->base + SS_KEY0 + i * 4, &op->key[i], 1);
|
||||
|
||||
if (areq->iv) {
|
||||
for (i = 0; i < 4 && i < ivsize / 4; i++) {
|
||||
v = *(u32 *)(areq->iv + i * 4);
|
||||
writel(v, ss->base + SS_IV0 + i * 4);
|
||||
writesl(ss->base + SS_IV0 + i * 4, &v, 1);
|
||||
}
|
||||
}
|
||||
writel(mode, ss->base + SS_CTL);
|
||||
|
||||
sg_miter_start(&mi, areq->src, sg_nents(areq->src),
|
||||
SG_MITER_FROM_SG | SG_MITER_ATOMIC);
|
||||
sg_miter_start(&mo, areq->dst, sg_nents(areq->dst),
|
||||
SG_MITER_TO_SG | SG_MITER_ATOMIC);
|
||||
sg_miter_next(&mi);
|
||||
sg_miter_next(&mo);
|
||||
if (!mi.addr || !mo.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
|
||||
ileft = areq->cryptlen / 4;
|
||||
oleft = areq->cryptlen / 4;
|
||||
oi = 0;
|
||||
oo = 0;
|
||||
do {
|
||||
todo = min(rx_cnt, ileft);
|
||||
todo = min_t(size_t, todo, (mi.length - oi) / 4);
|
||||
if (todo) {
|
||||
ileft -= todo;
|
||||
writesl(ss->base + SS_RXFIFO, mi.addr + oi, todo);
|
||||
oi += todo * 4;
|
||||
}
|
||||
if (oi == mi.length) {
|
||||
sg_miter_next(&mi);
|
||||
oi = 0;
|
||||
if (ileft) {
|
||||
sg_miter_start(&mi, areq->src, sg_nents(areq->src),
|
||||
SG_MITER_FROM_SG | SG_MITER_ATOMIC);
|
||||
if (pi)
|
||||
sg_miter_skip(&mi, pi);
|
||||
miter_err = sg_miter_next(&mi);
|
||||
if (!miter_err || !mi.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
todo = min(rx_cnt, ileft);
|
||||
todo = min_t(size_t, todo, (mi.length - oi) / 4);
|
||||
if (todo) {
|
||||
ileft -= todo;
|
||||
writesl(ss->base + SS_RXFIFO, mi.addr + oi, todo);
|
||||
oi += todo * 4;
|
||||
}
|
||||
if (oi == mi.length) {
|
||||
pi += mi.length;
|
||||
oi = 0;
|
||||
}
|
||||
sg_miter_stop(&mi);
|
||||
}
|
||||
|
||||
spaces = readl(ss->base + SS_FCSR);
|
||||
rx_cnt = SS_RXFIFO_SPACES(spaces);
|
||||
tx_cnt = SS_TXFIFO_SPACES(spaces);
|
||||
|
||||
sg_miter_start(&mo, areq->dst, sg_nents(areq->dst),
|
||||
SG_MITER_TO_SG | SG_MITER_ATOMIC);
|
||||
if (po)
|
||||
sg_miter_skip(&mo, po);
|
||||
miter_err = sg_miter_next(&mo);
|
||||
if (!miter_err || !mo.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
todo = min(tx_cnt, oleft);
|
||||
todo = min_t(size_t, todo, (mo.length - oo) / 4);
|
||||
if (todo) {
|
||||
@ -105,9 +119,10 @@ static int sun4i_ss_opti_poll(struct skcipher_request *areq)
|
||||
oo += todo * 4;
|
||||
}
|
||||
if (oo == mo.length) {
|
||||
sg_miter_next(&mo);
|
||||
oo = 0;
|
||||
po += mo.length;
|
||||
}
|
||||
sg_miter_stop(&mo);
|
||||
} while (oleft);
|
||||
|
||||
if (areq->iv) {
|
||||
@ -118,8 +133,6 @@ static int sun4i_ss_opti_poll(struct skcipher_request *areq)
|
||||
}
|
||||
|
||||
release_ss:
|
||||
sg_miter_stop(&mi);
|
||||
sg_miter_stop(&mo);
|
||||
writel(0, ss->base + SS_CTL);
|
||||
spin_unlock_irqrestore(&ss->slock, flags);
|
||||
return err;
|
||||
@ -148,6 +161,8 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
unsigned int oleft = areq->cryptlen;
|
||||
unsigned int todo;
|
||||
struct sg_mapping_iter mi, mo;
|
||||
unsigned long pi = 0, po = 0; /* progress for in and out */
|
||||
bool miter_err;
|
||||
unsigned int oi, oo; /* offset for in and out */
|
||||
char buf[4 * SS_RX_MAX];/* buffer for linearize SG src */
|
||||
char bufo[4 * SS_TX_MAX]; /* buffer for linearize SG dst */
|
||||
@ -174,12 +189,12 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
* we can use the SS optimized function
|
||||
*/
|
||||
while (in_sg && no_chunk == 1) {
|
||||
if (in_sg->length % 4)
|
||||
if ((in_sg->length | in_sg->offset) & 3u)
|
||||
no_chunk = 0;
|
||||
in_sg = sg_next(in_sg);
|
||||
}
|
||||
while (out_sg && no_chunk == 1) {
|
||||
if (out_sg->length % 4)
|
||||
if ((out_sg->length | out_sg->offset) & 3u)
|
||||
no_chunk = 0;
|
||||
out_sg = sg_next(out_sg);
|
||||
}
|
||||
@ -189,28 +204,17 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
|
||||
spin_lock_irqsave(&ss->slock, flags);
|
||||
|
||||
for (i = 0; i < op->keylen; i += 4)
|
||||
writel(*(op->key + i / 4), ss->base + SS_KEY0 + i);
|
||||
for (i = 0; i < op->keylen / 4; i++)
|
||||
writesl(ss->base + SS_KEY0 + i * 4, &op->key[i], 1);
|
||||
|
||||
if (areq->iv) {
|
||||
for (i = 0; i < 4 && i < ivsize / 4; i++) {
|
||||
v = *(u32 *)(areq->iv + i * 4);
|
||||
writel(v, ss->base + SS_IV0 + i * 4);
|
||||
writesl(ss->base + SS_IV0 + i * 4, &v, 1);
|
||||
}
|
||||
}
|
||||
writel(mode, ss->base + SS_CTL);
|
||||
|
||||
sg_miter_start(&mi, areq->src, sg_nents(areq->src),
|
||||
SG_MITER_FROM_SG | SG_MITER_ATOMIC);
|
||||
sg_miter_start(&mo, areq->dst, sg_nents(areq->dst),
|
||||
SG_MITER_TO_SG | SG_MITER_ATOMIC);
|
||||
sg_miter_next(&mi);
|
||||
sg_miter_next(&mo);
|
||||
if (!mi.addr || !mo.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
ileft = areq->cryptlen;
|
||||
oleft = areq->cryptlen;
|
||||
oi = 0;
|
||||
@ -218,6 +222,16 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
|
||||
while (oleft) {
|
||||
if (ileft) {
|
||||
sg_miter_start(&mi, areq->src, sg_nents(areq->src),
|
||||
SG_MITER_FROM_SG | SG_MITER_ATOMIC);
|
||||
if (pi)
|
||||
sg_miter_skip(&mi, pi);
|
||||
miter_err = sg_miter_next(&mi);
|
||||
if (!miter_err || !mi.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
/*
|
||||
* todo is the number of consecutive 4byte word that we
|
||||
* can read from current SG
|
||||
@ -250,31 +264,38 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
}
|
||||
}
|
||||
if (oi == mi.length) {
|
||||
sg_miter_next(&mi);
|
||||
pi += mi.length;
|
||||
oi = 0;
|
||||
}
|
||||
sg_miter_stop(&mi);
|
||||
}
|
||||
|
||||
spaces = readl(ss->base + SS_FCSR);
|
||||
rx_cnt = SS_RXFIFO_SPACES(spaces);
|
||||
tx_cnt = SS_TXFIFO_SPACES(spaces);
|
||||
dev_dbg(ss->dev,
|
||||
"%x %u/%zu %u/%u cnt=%u %u/%zu %u/%u cnt=%u %u\n",
|
||||
mode,
|
||||
oi, mi.length, ileft, areq->cryptlen, rx_cnt,
|
||||
oo, mo.length, oleft, areq->cryptlen, tx_cnt, ob);
|
||||
|
||||
if (!tx_cnt)
|
||||
continue;
|
||||
sg_miter_start(&mo, areq->dst, sg_nents(areq->dst),
|
||||
SG_MITER_TO_SG | SG_MITER_ATOMIC);
|
||||
if (po)
|
||||
sg_miter_skip(&mo, po);
|
||||
miter_err = sg_miter_next(&mo);
|
||||
if (!miter_err || !mo.addr) {
|
||||
dev_err_ratelimited(ss->dev, "ERROR: sg_miter return null\n");
|
||||
err = -EINVAL;
|
||||
goto release_ss;
|
||||
}
|
||||
/* todo in 4bytes word */
|
||||
todo = min(tx_cnt, oleft / 4);
|
||||
todo = min_t(size_t, todo, (mo.length - oo) / 4);
|
||||
|
||||
if (todo) {
|
||||
readsl(ss->base + SS_TXFIFO, mo.addr + oo, todo);
|
||||
oleft -= todo * 4;
|
||||
oo += todo * 4;
|
||||
if (oo == mo.length) {
|
||||
sg_miter_next(&mo);
|
||||
po += mo.length;
|
||||
oo = 0;
|
||||
}
|
||||
} else {
|
||||
@ -299,12 +320,14 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
obo += todo;
|
||||
oo += todo;
|
||||
if (oo == mo.length) {
|
||||
po += mo.length;
|
||||
sg_miter_next(&mo);
|
||||
oo = 0;
|
||||
}
|
||||
} while (obo < obl);
|
||||
/* bufo must be fully used here */
|
||||
}
|
||||
sg_miter_stop(&mo);
|
||||
}
|
||||
if (areq->iv) {
|
||||
for (i = 0; i < 4 && i < ivsize / 4; i++) {
|
||||
@ -314,8 +337,6 @@ static int sun4i_ss_cipher_poll(struct skcipher_request *areq)
|
||||
}
|
||||
|
||||
release_ss:
|
||||
sg_miter_stop(&mi);
|
||||
sg_miter_stop(&mo);
|
||||
writel(0, ss->base + SS_CTL);
|
||||
spin_unlock_irqrestore(&ss->slock, flags);
|
||||
|
||||
|
@ -1218,6 +1218,7 @@ static int fsldma_of_probe(struct platform_device *op)
|
||||
{
|
||||
struct fsldma_device *fdev;
|
||||
struct device_node *child;
|
||||
unsigned int i;
|
||||
int err;
|
||||
|
||||
fdev = kzalloc(sizeof(*fdev), GFP_KERNEL);
|
||||
@ -1296,6 +1297,10 @@ static int fsldma_of_probe(struct platform_device *op)
|
||||
return 0;
|
||||
|
||||
out_free_fdev:
|
||||
for (i = 0; i < FSL_DMA_MAX_CHANS_PER_DEVICE; i++) {
|
||||
if (fdev->chan[i])
|
||||
fsl_dma_chan_remove(fdev->chan[i]);
|
||||
}
|
||||
irq_dispose_mapping(fdev->irq);
|
||||
iounmap(fdev->regs);
|
||||
out_free:
|
||||
@ -1318,6 +1323,7 @@ static int fsldma_of_remove(struct platform_device *op)
|
||||
if (fdev->chan[i])
|
||||
fsl_dma_chan_remove(fdev->chan[i]);
|
||||
}
|
||||
irq_dispose_mapping(fdev->irq);
|
||||
|
||||
iounmap(fdev->regs);
|
||||
kfree(fdev);
|
||||
|
@ -29,22 +29,12 @@
|
||||
static irqreturn_t hsu_pci_irq(int irq, void *dev)
|
||||
{
|
||||
struct hsu_dma_chip *chip = dev;
|
||||
struct pci_dev *pdev = to_pci_dev(chip->dev);
|
||||
u32 dmaisr;
|
||||
u32 status;
|
||||
unsigned short i;
|
||||
int ret = 0;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* On Intel Tangier B0 and Anniedale the interrupt line, disregarding
|
||||
* to have different numbers, is shared between HSU DMA and UART IPs.
|
||||
* Thus on such SoCs we are expecting that IRQ handler is called in
|
||||
* UART driver only.
|
||||
*/
|
||||
if (pdev->device == PCI_DEVICE_ID_INTEL_MRFLD_HSU_DMA)
|
||||
return IRQ_HANDLED;
|
||||
|
||||
dmaisr = readl(chip->regs + HSU_PCI_DMAISR);
|
||||
for (i = 0; i < chip->hsu->nr_channels; i++) {
|
||||
if (dmaisr & 0x1) {
|
||||
@ -108,6 +98,17 @@ static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
if (ret)
|
||||
goto err_register_irq;
|
||||
|
||||
/*
|
||||
* On Intel Tangier B0 and Anniedale the interrupt line, disregarding
|
||||
* to have different numbers, is shared between HSU DMA and UART IPs.
|
||||
* Thus on such SoCs we are expecting that IRQ handler is called in
|
||||
* UART driver only. Instead of handling the spurious interrupt
|
||||
* from HSU DMA here and waste CPU time and delay HSU UART interrupt
|
||||
* handling, disable the interrupt entirely.
|
||||
*/
|
||||
if (pdev->device == PCI_DEVICE_ID_INTEL_MRFLD_HSU_DMA)
|
||||
disable_irq_nosync(chip->irq);
|
||||
|
||||
pci_set_drvdata(pdev, chip);
|
||||
|
||||
return 0;
|
||||
|
@ -357,7 +357,7 @@ static int pcf857x_probe(struct i2c_client *client,
|
||||
* reset state. Otherwise it flags pins to be driven low.
|
||||
*/
|
||||
gpio->out = ~n_latch;
|
||||
gpio->status = gpio->out;
|
||||
gpio->status = gpio->read(gpio->client);
|
||||
|
||||
status = devm_gpiochip_add_data(&client->dev, &gpio->chip, gpio);
|
||||
if (status < 0)
|
||||
|
@ -279,11 +279,8 @@ int oaktrail_hdmi_i2c_init(struct pci_dev *dev)
|
||||
hdmi_dev = pci_get_drvdata(dev);
|
||||
|
||||
i2c_dev = kzalloc(sizeof(struct hdmi_i2c_dev), GFP_KERNEL);
|
||||
if (i2c_dev == NULL) {
|
||||
DRM_ERROR("Can't allocate interface\n");
|
||||
ret = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
if (!i2c_dev)
|
||||
return -ENOMEM;
|
||||
|
||||
i2c_dev->adap = &oaktrail_hdmi_i2c_adapter;
|
||||
i2c_dev->status = I2C_STAT_INIT;
|
||||
@ -300,16 +297,23 @@ int oaktrail_hdmi_i2c_init(struct pci_dev *dev)
|
||||
oaktrail_hdmi_i2c_adapter.name, hdmi_dev);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to request IRQ for I2C controller\n");
|
||||
goto err;
|
||||
goto free_dev;
|
||||
}
|
||||
|
||||
/* Adapter registration */
|
||||
ret = i2c_add_numbered_adapter(&oaktrail_hdmi_i2c_adapter);
|
||||
return ret;
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to add I2C adapter\n");
|
||||
goto free_irq;
|
||||
}
|
||||
|
||||
err:
|
||||
return 0;
|
||||
|
||||
free_irq:
|
||||
free_irq(dev->irq, hdmi_dev);
|
||||
free_dev:
|
||||
kfree(i2c_dev);
|
||||
exit:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -323,6 +323,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
ret = -ENOMEM;
|
||||
|
||||
dev_priv->mmu = psb_mmu_driver_init(dev, 1, 0, 0);
|
||||
if (!dev_priv->mmu)
|
||||
goto out_err;
|
||||
|
@ -147,7 +147,7 @@ const struct msm_dsi_phy_cfg dsi_phy_20nm_cfgs = {
|
||||
.disable = dsi_20nm_phy_disable,
|
||||
.init = msm_dsi_phy_init_common,
|
||||
},
|
||||
.io_start = { 0xfd998300, 0xfd9a0300 },
|
||||
.io_start = { 0xfd998500, 0xfd9a0500 },
|
||||
.num_dsi_phy = 2,
|
||||
};
|
||||
|
||||
|
@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report);
|
||||
* Register a new field for this report.
|
||||
*/
|
||||
|
||||
static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
|
||||
static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages)
|
||||
{
|
||||
struct hid_field *field;
|
||||
|
||||
@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned
|
||||
|
||||
field = kzalloc((sizeof(struct hid_field) +
|
||||
usages * sizeof(struct hid_usage) +
|
||||
values * sizeof(unsigned)), GFP_KERNEL);
|
||||
usages * sizeof(unsigned)), GFP_KERNEL);
|
||||
if (!field)
|
||||
return NULL;
|
||||
|
||||
@ -280,7 +280,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
||||
usages = max_t(unsigned, parser->local.usage_index,
|
||||
parser->global.report_count);
|
||||
|
||||
field = hid_register_field(report, usages, parser->global.report_count);
|
||||
field = hid_register_field(report, usages);
|
||||
if (!field)
|
||||
return 0;
|
||||
|
||||
@ -1129,6 +1129,9 @@ EXPORT_SYMBOL_GPL(hid_open_report);
|
||||
|
||||
static s32 snto32(__u32 value, unsigned n)
|
||||
{
|
||||
if (!value || !n)
|
||||
return 0;
|
||||
|
||||
switch (n) {
|
||||
case 8: return ((__s8)value);
|
||||
case 16: return ((__s16)value);
|
||||
|
@ -2452,7 +2452,12 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
|
||||
wacom_wac->hid_data.tipswitch = value;
|
||||
break;
|
||||
case HID_DG_CONTACTMAX:
|
||||
features->touch_max = value;
|
||||
if (!features->touch_max) {
|
||||
features->touch_max = value;
|
||||
} else {
|
||||
hid_warn(hdev, "%s: ignoring attempt to overwrite non-zero touch_max "
|
||||
"%d -> %d\n", __func__, features->touch_max, value);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -989,8 +989,7 @@ static void vmbus_onoffer_rescind(struct vmbus_channel_message_header *hdr)
|
||||
vmbus_device_unregister(channel->device_obj);
|
||||
put_device(dev);
|
||||
}
|
||||
}
|
||||
if (channel->primary_channel != NULL) {
|
||||
} else if (channel->primary_channel != NULL) {
|
||||
/*
|
||||
* Sub-channel is being rescinded. Following is the channel
|
||||
* close sequence when initiated from the driveri (refer to
|
||||
|
@ -318,7 +318,7 @@ static int brcmstb_send_i2c_cmd(struct brcmstb_i2c_dev *dev,
|
||||
goto cmd_out;
|
||||
}
|
||||
|
||||
if ((CMD_RD || CMD_WR) &&
|
||||
if ((cmd == CMD_RD || cmd == CMD_WR) &&
|
||||
bsc_readl(dev, iic_enable) & BSC_IIC_EN_NOACK_MASK) {
|
||||
rc = -EREMOTEIO;
|
||||
dev_dbg(dev->device, "controller received NOACK intr for %s\n",
|
||||
|
@ -354,6 +354,11 @@ static ssize_t ib_umad_read(struct file *filp, char __user *buf,
|
||||
|
||||
mutex_lock(&file->mutex);
|
||||
|
||||
if (file->agents_dead) {
|
||||
mutex_unlock(&file->mutex);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
while (list_empty(&file->recv_list)) {
|
||||
mutex_unlock(&file->mutex);
|
||||
|
||||
@ -496,7 +501,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
|
||||
|
||||
agent = __get_agent(file, packet->mad.hdr.id);
|
||||
if (!agent) {
|
||||
ret = -EINVAL;
|
||||
ret = -EIO;
|
||||
goto err_up;
|
||||
}
|
||||
|
||||
|
@ -36,21 +36,26 @@
|
||||
#include "rxe.h"
|
||||
#include "rxe_loc.h"
|
||||
|
||||
/* check that QP matches packet opcode type and is in a valid state */
|
||||
static int check_type_state(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
|
||||
struct rxe_qp *qp)
|
||||
{
|
||||
unsigned int pkt_type;
|
||||
|
||||
if (unlikely(!qp->valid))
|
||||
goto err1;
|
||||
|
||||
pkt_type = pkt->opcode & 0xe0;
|
||||
|
||||
switch (qp_type(qp)) {
|
||||
case IB_QPT_RC:
|
||||
if (unlikely((pkt->opcode & IB_OPCODE_RC) != 0)) {
|
||||
if (unlikely(pkt_type != IB_OPCODE_RC)) {
|
||||
pr_warn_ratelimited("bad qp type\n");
|
||||
goto err1;
|
||||
}
|
||||
break;
|
||||
case IB_QPT_UC:
|
||||
if (unlikely(!(pkt->opcode & IB_OPCODE_UC))) {
|
||||
if (unlikely(pkt_type != IB_OPCODE_UC)) {
|
||||
pr_warn_ratelimited("bad qp type\n");
|
||||
goto err1;
|
||||
}
|
||||
@ -58,7 +63,7 @@ static int check_type_state(struct rxe_dev *rxe, struct rxe_pkt_info *pkt,
|
||||
case IB_QPT_UD:
|
||||
case IB_QPT_SMI:
|
||||
case IB_QPT_GSI:
|
||||
if (unlikely(!(pkt->opcode & IB_OPCODE_UD))) {
|
||||
if (unlikely(pkt_type != IB_OPCODE_UD)) {
|
||||
pr_warn_ratelimited("bad qp type\n");
|
||||
goto err1;
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev,
|
||||
if (IS_ERR(abspam))
|
||||
return PTR_ERR(abspam);
|
||||
|
||||
for (i = 0; i < joydev->nabs; i++) {
|
||||
for (i = 0; i < len && i < joydev->nabs; i++) {
|
||||
if (abspam[i] > ABS_MAX) {
|
||||
retval = -EINVAL;
|
||||
goto out;
|
||||
@ -484,6 +484,9 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
|
||||
int i;
|
||||
int retval = 0;
|
||||
|
||||
if (len % sizeof(*keypam))
|
||||
return -EINVAL;
|
||||
|
||||
len = min(len, sizeof(joydev->keypam));
|
||||
|
||||
/* Validate the map. */
|
||||
@ -491,7 +494,7 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
|
||||
if (IS_ERR(keypam))
|
||||
return PTR_ERR(keypam);
|
||||
|
||||
for (i = 0; i < joydev->nkey; i++) {
|
||||
for (i = 0; i < (len / 2) && i < joydev->nkey; i++) {
|
||||
if (keypam[i] > KEY_MAX || keypam[i] < BTN_MISC) {
|
||||
retval = -EINVAL;
|
||||
goto out;
|
||||
|
@ -322,6 +322,7 @@ static const struct xpad_device {
|
||||
{ 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 },
|
||||
{ 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 },
|
||||
{ 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE },
|
||||
{ 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE },
|
||||
{ 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 },
|
||||
{ 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE },
|
||||
{ 0x24c6, 0x5000, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
|
@ -592,6 +592,10 @@ static const struct dmi_system_id i8042_dmi_noselftest_table[] = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
|
||||
},
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
@ -345,8 +345,10 @@ static int elo_connect(struct serio *serio, struct serio_driver *drv)
|
||||
switch (elo->id) {
|
||||
|
||||
case 0: /* 10-byte protocol */
|
||||
if (elo_setup_10(elo))
|
||||
if (elo_setup_10(elo)) {
|
||||
err = -EIO;
|
||||
goto fail3;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
@ -419,6 +419,7 @@ static int raydium_i2c_write_object(struct i2c_client *client,
|
||||
enum raydium_bl_ack state)
|
||||
{
|
||||
int error;
|
||||
static const u8 cmd[] = { 0xFF, 0x39 };
|
||||
|
||||
error = raydium_i2c_send(client, RM_CMD_BOOT_WRT, data, len);
|
||||
if (error) {
|
||||
@ -427,7 +428,7 @@ static int raydium_i2c_write_object(struct i2c_client *client,
|
||||
return error;
|
||||
}
|
||||
|
||||
error = raydium_i2c_send(client, RM_CMD_BOOT_ACK, NULL, 0);
|
||||
error = raydium_i2c_send(client, RM_CMD_BOOT_ACK, cmd, sizeof(cmd));
|
||||
if (error) {
|
||||
dev_err(&client->dev, "Ack obj command failed: %d\n", error);
|
||||
return error;
|
||||
|
@ -46,6 +46,7 @@ struct writeset {
|
||||
static void writeset_free(struct writeset *ws)
|
||||
{
|
||||
vfree(ws->bits);
|
||||
ws->bits = NULL;
|
||||
}
|
||||
|
||||
static int setup_on_disk_bitset(struct dm_disk_bitset *info,
|
||||
@ -70,8 +71,6 @@ static size_t bitset_size(unsigned nr_bits)
|
||||
*/
|
||||
static int writeset_alloc(struct writeset *ws, dm_block_t nr_blocks)
|
||||
{
|
||||
ws->md.nr_bits = nr_blocks;
|
||||
ws->md.root = INVALID_WRITESET_ROOT;
|
||||
ws->bits = vzalloc(bitset_size(nr_blocks));
|
||||
if (!ws->bits) {
|
||||
DMERR("%s: couldn't allocate in memory bitset", __func__);
|
||||
@ -84,12 +83,14 @@ static int writeset_alloc(struct writeset *ws, dm_block_t nr_blocks)
|
||||
/*
|
||||
* Wipes the in-core bitset, and creates a new on disk bitset.
|
||||
*/
|
||||
static int writeset_init(struct dm_disk_bitset *info, struct writeset *ws)
|
||||
static int writeset_init(struct dm_disk_bitset *info, struct writeset *ws,
|
||||
dm_block_t nr_blocks)
|
||||
{
|
||||
int r;
|
||||
|
||||
memset(ws->bits, 0, bitset_size(ws->md.nr_bits));
|
||||
memset(ws->bits, 0, bitset_size(nr_blocks));
|
||||
|
||||
ws->md.nr_bits = nr_blocks;
|
||||
r = setup_on_disk_bitset(info, ws->md.nr_bits, &ws->md.root);
|
||||
if (r) {
|
||||
DMERR("%s: setup_on_disk_bitset failed", __func__);
|
||||
@ -133,7 +134,7 @@ static int writeset_test_and_set(struct dm_disk_bitset *info,
|
||||
{
|
||||
int r;
|
||||
|
||||
if (!test_and_set_bit(block, ws->bits)) {
|
||||
if (!test_bit(block, ws->bits)) {
|
||||
r = dm_bitset_set_bit(info, ws->md.root, block, &ws->md.root);
|
||||
if (r) {
|
||||
/* FIXME: fail mode */
|
||||
@ -387,7 +388,7 @@ static void ws_dec(void *context, const void *value)
|
||||
|
||||
static int ws_eq(void *context, const void *value1, const void *value2)
|
||||
{
|
||||
return !memcmp(value1, value2, sizeof(struct writeset_metadata));
|
||||
return !memcmp(value1, value2, sizeof(struct writeset_disk));
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------*/
|
||||
@ -563,6 +564,15 @@ static int open_metadata(struct era_metadata *md)
|
||||
}
|
||||
|
||||
disk = dm_block_data(sblock);
|
||||
|
||||
/* Verify the data block size hasn't changed */
|
||||
if (le32_to_cpu(disk->data_block_size) != md->block_size) {
|
||||
DMERR("changing the data block size (from %u to %llu) is not supported",
|
||||
le32_to_cpu(disk->data_block_size), md->block_size);
|
||||
r = -EINVAL;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
r = dm_tm_open_with_sm(md->bm, SUPERBLOCK_LOCATION,
|
||||
disk->metadata_space_map_root,
|
||||
sizeof(disk->metadata_space_map_root),
|
||||
@ -574,10 +584,10 @@ static int open_metadata(struct era_metadata *md)
|
||||
|
||||
setup_infos(md);
|
||||
|
||||
md->block_size = le32_to_cpu(disk->data_block_size);
|
||||
md->nr_blocks = le32_to_cpu(disk->nr_blocks);
|
||||
md->current_era = le32_to_cpu(disk->current_era);
|
||||
|
||||
ws_unpack(&disk->current_writeset, &md->current_writeset->md);
|
||||
md->writeset_tree_root = le64_to_cpu(disk->writeset_tree_root);
|
||||
md->era_array_root = le64_to_cpu(disk->era_array_root);
|
||||
md->metadata_snap = le64_to_cpu(disk->metadata_snap);
|
||||
@ -745,6 +755,12 @@ static int metadata_digest_lookup_writeset(struct era_metadata *md,
|
||||
ws_unpack(&disk, &d->writeset);
|
||||
d->value = cpu_to_le32(key);
|
||||
|
||||
/*
|
||||
* We initialise another bitset info to avoid any caching side effects
|
||||
* with the previous one.
|
||||
*/
|
||||
dm_disk_bitset_init(md->tm, &d->info);
|
||||
|
||||
d->nr_bits = min(d->writeset.nr_bits, md->nr_blocks);
|
||||
d->current_bit = 0;
|
||||
d->step = metadata_digest_transcribe_writeset;
|
||||
@ -758,12 +774,6 @@ static int metadata_digest_start(struct era_metadata *md, struct digest *d)
|
||||
return 0;
|
||||
|
||||
memset(d, 0, sizeof(*d));
|
||||
|
||||
/*
|
||||
* We initialise another bitset info to avoid any caching side
|
||||
* effects with the previous one.
|
||||
*/
|
||||
dm_disk_bitset_init(md->tm, &d->info);
|
||||
d->step = metadata_digest_lookup_writeset;
|
||||
|
||||
return 0;
|
||||
@ -801,6 +811,8 @@ static struct era_metadata *metadata_open(struct block_device *bdev,
|
||||
|
||||
static void metadata_close(struct era_metadata *md)
|
||||
{
|
||||
writeset_free(&md->writesets[0]);
|
||||
writeset_free(&md->writesets[1]);
|
||||
destroy_persistent_data_objects(md);
|
||||
kfree(md);
|
||||
}
|
||||
@ -838,6 +850,7 @@ static int metadata_resize(struct era_metadata *md, void *arg)
|
||||
r = writeset_alloc(&md->writesets[1], *new_size);
|
||||
if (r) {
|
||||
DMERR("%s: writeset_alloc failed for writeset 1", __func__);
|
||||
writeset_free(&md->writesets[0]);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -848,6 +861,8 @@ static int metadata_resize(struct era_metadata *md, void *arg)
|
||||
&value, &md->era_array_root);
|
||||
if (r) {
|
||||
DMERR("%s: dm_array_resize failed", __func__);
|
||||
writeset_free(&md->writesets[0]);
|
||||
writeset_free(&md->writesets[1]);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -869,7 +884,6 @@ static int metadata_era_archive(struct era_metadata *md)
|
||||
}
|
||||
|
||||
ws_pack(&md->current_writeset->md, &value);
|
||||
md->current_writeset->md.root = INVALID_WRITESET_ROOT;
|
||||
|
||||
keys[0] = md->current_era;
|
||||
__dm_bless_for_disk(&value);
|
||||
@ -881,6 +895,7 @@ static int metadata_era_archive(struct era_metadata *md)
|
||||
return r;
|
||||
}
|
||||
|
||||
md->current_writeset->md.root = INVALID_WRITESET_ROOT;
|
||||
md->archived_writesets = true;
|
||||
|
||||
return 0;
|
||||
@ -897,7 +912,7 @@ static int metadata_new_era(struct era_metadata *md)
|
||||
int r;
|
||||
struct writeset *new_writeset = next_writeset(md);
|
||||
|
||||
r = writeset_init(&md->bitset_info, new_writeset);
|
||||
r = writeset_init(&md->bitset_info, new_writeset, md->nr_blocks);
|
||||
if (r) {
|
||||
DMERR("%s: writeset_init failed", __func__);
|
||||
return r;
|
||||
@ -950,7 +965,7 @@ static int metadata_commit(struct era_metadata *md)
|
||||
int r;
|
||||
struct dm_block *sblock;
|
||||
|
||||
if (md->current_writeset->md.root != SUPERBLOCK_LOCATION) {
|
||||
if (md->current_writeset->md.root != INVALID_WRITESET_ROOT) {
|
||||
r = dm_bitset_flush(&md->bitset_info, md->current_writeset->md.root,
|
||||
&md->current_writeset->md.root);
|
||||
if (r) {
|
||||
@ -1225,8 +1240,10 @@ static void process_deferred_bios(struct era *era)
|
||||
int r;
|
||||
struct bio_list deferred_bios, marked_bios;
|
||||
struct bio *bio;
|
||||
struct blk_plug plug;
|
||||
bool commit_needed = false;
|
||||
bool failed = false;
|
||||
struct writeset *ws = era->md->current_writeset;
|
||||
|
||||
bio_list_init(&deferred_bios);
|
||||
bio_list_init(&marked_bios);
|
||||
@ -1236,9 +1253,11 @@ static void process_deferred_bios(struct era *era)
|
||||
bio_list_init(&era->deferred_bios);
|
||||
spin_unlock(&era->deferred_lock);
|
||||
|
||||
if (bio_list_empty(&deferred_bios))
|
||||
return;
|
||||
|
||||
while ((bio = bio_list_pop(&deferred_bios))) {
|
||||
r = writeset_test_and_set(&era->md->bitset_info,
|
||||
era->md->current_writeset,
|
||||
r = writeset_test_and_set(&era->md->bitset_info, ws,
|
||||
get_block(era, bio));
|
||||
if (r < 0) {
|
||||
/*
|
||||
@ -1246,7 +1265,6 @@ static void process_deferred_bios(struct era *era)
|
||||
* FIXME: finish.
|
||||
*/
|
||||
failed = true;
|
||||
|
||||
} else if (r == 0)
|
||||
commit_needed = true;
|
||||
|
||||
@ -1262,9 +1280,19 @@ static void process_deferred_bios(struct era *era)
|
||||
if (failed)
|
||||
while ((bio = bio_list_pop(&marked_bios)))
|
||||
bio_io_error(bio);
|
||||
else
|
||||
while ((bio = bio_list_pop(&marked_bios)))
|
||||
else {
|
||||
blk_start_plug(&plug);
|
||||
while ((bio = bio_list_pop(&marked_bios))) {
|
||||
/*
|
||||
* Only update the in-core writeset if the on-disk one
|
||||
* was updated too.
|
||||
*/
|
||||
if (commit_needed)
|
||||
set_bit(get_block(era, bio), ws->bits);
|
||||
generic_make_request(bio);
|
||||
}
|
||||
blk_finish_plug(&plug);
|
||||
}
|
||||
}
|
||||
|
||||
static void process_rpc_calls(struct era *era)
|
||||
@ -1485,15 +1513,6 @@ static int era_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
||||
}
|
||||
era->md = md;
|
||||
|
||||
era->nr_blocks = calc_nr_blocks(era);
|
||||
|
||||
r = metadata_resize(era->md, &era->nr_blocks);
|
||||
if (r) {
|
||||
ti->error = "couldn't resize metadata";
|
||||
era_destroy(era);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
era->wq = alloc_ordered_workqueue("dm-" DM_MSG_PREFIX, WQ_MEM_RECLAIM);
|
||||
if (!era->wq) {
|
||||
ti->error = "could not create workqueue for metadata object";
|
||||
@ -1571,16 +1590,24 @@ static int era_preresume(struct dm_target *ti)
|
||||
dm_block_t new_size = calc_nr_blocks(era);
|
||||
|
||||
if (era->nr_blocks != new_size) {
|
||||
r = in_worker1(era, metadata_resize, &new_size);
|
||||
if (r)
|
||||
r = metadata_resize(era->md, &new_size);
|
||||
if (r) {
|
||||
DMERR("%s: metadata_resize failed", __func__);
|
||||
return r;
|
||||
}
|
||||
|
||||
r = metadata_commit(era->md);
|
||||
if (r) {
|
||||
DMERR("%s: metadata_commit failed", __func__);
|
||||
return r;
|
||||
}
|
||||
|
||||
era->nr_blocks = new_size;
|
||||
}
|
||||
|
||||
start_worker(era);
|
||||
|
||||
r = in_worker0(era, metadata_new_era);
|
||||
r = in_worker0(era, metadata_era_rollover);
|
||||
if (r) {
|
||||
DMERR("%s: metadata_era_rollover failed", __func__);
|
||||
return r;
|
||||
|
@ -2073,7 +2073,8 @@ static int ov5670_init_controls(struct ov5670 *ov5670)
|
||||
|
||||
/* By default, V4L2_CID_PIXEL_RATE is read only */
|
||||
ov5670->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov5670_ctrl_ops,
|
||||
V4L2_CID_PIXEL_RATE, 0,
|
||||
V4L2_CID_PIXEL_RATE,
|
||||
link_freq_configs[0].pixel_rate,
|
||||
link_freq_configs[0].pixel_rate,
|
||||
1,
|
||||
link_freq_configs[0].pixel_rate);
|
||||
|
@ -986,8 +986,10 @@ int cx25821_riscmem_alloc(struct pci_dev *pci,
|
||||
__le32 *cpu;
|
||||
dma_addr_t dma = 0;
|
||||
|
||||
if (NULL != risc->cpu && risc->size < size)
|
||||
if (risc->cpu && risc->size < size) {
|
||||
pci_free_consistent(pci, risc->size, risc->cpu, risc->dma);
|
||||
risc->cpu = NULL;
|
||||
}
|
||||
if (NULL == risc->cpu) {
|
||||
cpu = pci_zalloc_consistent(pci, size, &dma);
|
||||
if (NULL == cpu)
|
||||
|
@ -293,8 +293,11 @@ static int empress_init(struct saa7134_dev *dev)
|
||||
q->lock = &dev->lock;
|
||||
q->dev = &dev->pci->dev;
|
||||
err = vb2_queue_init(q);
|
||||
if (err)
|
||||
if (err) {
|
||||
video_device_release(dev->empress_dev);
|
||||
dev->empress_dev = NULL;
|
||||
return err;
|
||||
}
|
||||
dev->empress_dev->queue = q;
|
||||
|
||||
video_set_drvdata(dev->empress_dev, dev);
|
||||
|
@ -1450,6 +1450,9 @@ static int pxac_vb2_prepare(struct vb2_buffer *vb)
|
||||
struct pxa_camera_dev *pcdev = vb2_get_drv_priv(vb->vb2_queue);
|
||||
struct pxa_buffer *buf = vb2_to_pxa_buffer(vb);
|
||||
int ret = 0;
|
||||
#ifdef DEBUG
|
||||
int i;
|
||||
#endif
|
||||
|
||||
switch (pcdev->channels) {
|
||||
case 1:
|
||||
|
@ -866,8 +866,10 @@ static int vsp1_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
done:
|
||||
if (ret)
|
||||
if (ret) {
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
rcar_fcp_put(vsp1->fcp);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -352,8 +352,10 @@ static int qm1d1c0042_init(struct dvb_frontend *fe)
|
||||
if (val == reg_initval[reg_index][0x00])
|
||||
break;
|
||||
}
|
||||
if (reg_index >= QM1D1C0042_NUM_REG_ROWS)
|
||||
if (reg_index >= QM1D1C0042_NUM_REG_ROWS) {
|
||||
ret = -EINVAL;
|
||||
goto failed;
|
||||
}
|
||||
memcpy(state->regs, reg_initval[reg_index], QM1D1C0042_NUM_REGS);
|
||||
usleep_range(2000, 3000);
|
||||
|
||||
|
@ -436,7 +436,7 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap)
|
||||
ep = usb_pipe_endpoint(d->udev, lme_int->lme_urb->pipe);
|
||||
|
||||
if (usb_endpoint_type(&ep->desc) == USB_ENDPOINT_XFER_BULK)
|
||||
lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa),
|
||||
lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa);
|
||||
|
||||
lme_int->lme_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
|
||||
|
@ -150,6 +150,10 @@ static int tm6000_start_stream(struct tm6000_core *dev)
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "tm6000: error %i in %s during pipe reset\n",
|
||||
ret, __func__);
|
||||
|
||||
kfree(dvb->bulk_urb->transfer_buffer);
|
||||
usb_free_urb(dvb->bulk_urb);
|
||||
dvb->bulk_urb = NULL;
|
||||
return ret;
|
||||
} else
|
||||
printk(KERN_ERR "tm6000: pipe resetted\n");
|
||||
|
@ -253,7 +253,9 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
|
||||
goto done;
|
||||
|
||||
/* After the probe, update fmt with the values returned from
|
||||
* negotiation with the device.
|
||||
* negotiation with the device. Some devices return invalid bFormatIndex
|
||||
* and bFrameIndex values, in which case we can only assume they have
|
||||
* accepted the requested format as-is.
|
||||
*/
|
||||
for (i = 0; i < stream->nformats; ++i) {
|
||||
if (probe->bFormatIndex == stream->format[i].index) {
|
||||
@ -262,11 +264,10 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
|
||||
}
|
||||
}
|
||||
|
||||
if (i == stream->nformats) {
|
||||
uvc_trace(UVC_TRACE_FORMAT, "Unknown bFormatIndex %u\n",
|
||||
if (i == stream->nformats)
|
||||
uvc_trace(UVC_TRACE_FORMAT,
|
||||
"Unknown bFormatIndex %u, using default\n",
|
||||
probe->bFormatIndex);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for (i = 0; i < format->nframes; ++i) {
|
||||
if (probe->bFrameIndex == format->frame[i].bFrameIndex) {
|
||||
@ -275,11 +276,10 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
|
||||
}
|
||||
}
|
||||
|
||||
if (i == format->nframes) {
|
||||
uvc_trace(UVC_TRACE_FORMAT, "Unknown bFrameIndex %u\n",
|
||||
if (i == format->nframes)
|
||||
uvc_trace(UVC_TRACE_FORMAT,
|
||||
"Unknown bFrameIndex %u, using default\n",
|
||||
probe->bFrameIndex);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
fmt->fmt.pix.width = frame->wWidth;
|
||||
fmt->fmt.pix.height = frame->wHeight;
|
||||
|
@ -183,9 +183,9 @@ static int bd9571mwv_probe(struct i2c_client *client,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mfd_add_devices(bd->dev, PLATFORM_DEVID_AUTO, bd9571mwv_cells,
|
||||
ARRAY_SIZE(bd9571mwv_cells), NULL, 0,
|
||||
regmap_irq_get_domain(bd->irq_data));
|
||||
ret = devm_mfd_add_devices(bd->dev, PLATFORM_DEVID_AUTO,
|
||||
bd9571mwv_cells, ARRAY_SIZE(bd9571mwv_cells),
|
||||
NULL, 0, regmap_irq_get_domain(bd->irq_data));
|
||||
if (ret) {
|
||||
regmap_del_irq_chip(bd->irq, bd->irq_data);
|
||||
return ret;
|
||||
|
@ -98,11 +98,10 @@ static int wm831x_auxadc_read_irq(struct wm831x *wm831x,
|
||||
wait_for_completion_timeout(&req->done, msecs_to_jiffies(500));
|
||||
|
||||
mutex_lock(&wm831x->auxadc_lock);
|
||||
|
||||
list_del(&req->list);
|
||||
ret = req->val;
|
||||
|
||||
out:
|
||||
list_del(&req->list);
|
||||
mutex_unlock(&wm831x->auxadc_lock);
|
||||
|
||||
kfree(req);
|
||||
|
@ -523,3 +523,4 @@ MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("Driver for 93xx46 EEPROMs");
|
||||
MODULE_AUTHOR("Anatolij Gustschin <agust@denx.de>");
|
||||
MODULE_ALIAS("spi:93xx46");
|
||||
MODULE_ALIAS("spi:eeprom-93xx46");
|
||||
|
@ -639,6 +639,9 @@ static struct vmci_queue *qp_host_alloc_queue(u64 size)
|
||||
|
||||
queue_page_size = num_pages * sizeof(*queue->kernel_if->u.h.page);
|
||||
|
||||
if (queue_size + queue_page_size > KMALLOC_MAX_SIZE)
|
||||
return NULL;
|
||||
|
||||
queue = kzalloc(queue_size + queue_page_size, GFP_KERNEL);
|
||||
if (queue) {
|
||||
queue->q_header = NULL;
|
||||
@ -732,7 +735,7 @@ static void qp_release_pages(struct page **pages,
|
||||
|
||||
for (i = 0; i < num_pages; i++) {
|
||||
if (dirty)
|
||||
set_page_dirty(pages[i]);
|
||||
set_page_dirty_lock(pages[i]);
|
||||
|
||||
put_page(pages[i]);
|
||||
pages[i] = NULL;
|
||||
|
@ -1354,9 +1354,10 @@ static int sdhci_esdhc_imx_remove(struct platform_device *pdev)
|
||||
struct sdhci_host *host = platform_get_drvdata(pdev);
|
||||
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
|
||||
struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host);
|
||||
int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
|
||||
int dead;
|
||||
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
|
||||
|
@ -1866,10 +1866,12 @@ static int usdhi6_probe(struct platform_device *pdev)
|
||||
|
||||
ret = mmc_add_host(mmc);
|
||||
if (ret < 0)
|
||||
goto e_clk_off;
|
||||
goto e_release_dma;
|
||||
|
||||
return 0;
|
||||
|
||||
e_release_dma:
|
||||
usdhi6_dma_release(host);
|
||||
e_clk_off:
|
||||
clk_disable_unprepare(host->clk);
|
||||
e_free_mmc:
|
||||
|
@ -465,7 +465,7 @@ static int cqspi_indirect_read_setup(struct spi_nor *nor,
|
||||
/* Setup dummy clock cycles */
|
||||
dummy_clk = nor->read_dummy;
|
||||
if (dummy_clk > CQSPI_DUMMY_CLKS_MAX)
|
||||
dummy_clk = CQSPI_DUMMY_CLKS_MAX;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (dummy_clk / 8) {
|
||||
reg |= (1 << CQSPI_REG_RD_INSTR_MODE_EN_LSB);
|
||||
|
@ -408,8 +408,10 @@ static int hisi_spi_nor_register_all(struct hifmc_host *host)
|
||||
|
||||
for_each_available_child_of_node(dev->of_node, np) {
|
||||
ret = hisi_spi_nor_register(np, host);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(np);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (host->num_chip == HIFMC_MAX_CHIP_NUM) {
|
||||
dev_warn(dev, "Flash device number exceeds the maximum chipselect number\n");
|
||||
|
@ -1279,10 +1279,18 @@
|
||||
#define MDIO_PMA_10GBR_FECCTRL 0x00ab
|
||||
#endif
|
||||
|
||||
#ifndef MDIO_PMA_RX_CTRL1
|
||||
#define MDIO_PMA_RX_CTRL1 0x8051
|
||||
#endif
|
||||
|
||||
#ifndef MDIO_PCS_DIG_CTRL
|
||||
#define MDIO_PCS_DIG_CTRL 0x8000
|
||||
#endif
|
||||
|
||||
#ifndef MDIO_PCS_DIGITAL_STAT
|
||||
#define MDIO_PCS_DIGITAL_STAT 0x8010
|
||||
#endif
|
||||
|
||||
#ifndef MDIO_AN_XNP
|
||||
#define MDIO_AN_XNP 0x0016
|
||||
#endif
|
||||
@ -1358,6 +1366,8 @@
|
||||
#define XGBE_KR_TRAINING_ENABLE BIT(1)
|
||||
|
||||
#define XGBE_PCS_CL37_BP BIT(12)
|
||||
#define XGBE_PCS_PSEQ_STATE_MASK 0x1c
|
||||
#define XGBE_PCS_PSEQ_STATE_POWER_GOOD 0x10
|
||||
|
||||
#define XGBE_AN_CL37_INT_CMPLT BIT(0)
|
||||
#define XGBE_AN_CL37_INT_MASK 0x01
|
||||
@ -1375,6 +1385,10 @@
|
||||
#define XGBE_PMA_CDR_TRACK_EN_OFF 0x00
|
||||
#define XGBE_PMA_CDR_TRACK_EN_ON 0x01
|
||||
|
||||
#define XGBE_PMA_RX_RST_0_MASK BIT(4)
|
||||
#define XGBE_PMA_RX_RST_0_RESET_ON 0x10
|
||||
#define XGBE_PMA_RX_RST_0_RESET_OFF 0x00
|
||||
|
||||
/* Bit setting and getting macros
|
||||
* The get macro will extract the current bit field value from within
|
||||
* the variable
|
||||
|
@ -1355,7 +1355,7 @@ static void xgbe_phy_status(struct xgbe_prv_data *pdata)
|
||||
&an_restart);
|
||||
if (an_restart) {
|
||||
xgbe_phy_config_aneg(pdata);
|
||||
return;
|
||||
goto adjust_link;
|
||||
}
|
||||
|
||||
if (pdata->phy.link) {
|
||||
|
@ -1782,6 +1782,27 @@ static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata)
|
||||
xgbe_phy_put_comm_ownership(pdata);
|
||||
}
|
||||
|
||||
static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
int reg;
|
||||
|
||||
reg = XMDIO_READ_BITS(pdata, MDIO_MMD_PCS, MDIO_PCS_DIGITAL_STAT,
|
||||
XGBE_PCS_PSEQ_STATE_MASK);
|
||||
if (reg == XGBE_PCS_PSEQ_STATE_POWER_GOOD) {
|
||||
/* Mailbox command timed out, reset of RX block is required.
|
||||
* This can be done by asseting the reset bit and wait for
|
||||
* its compeletion.
|
||||
*/
|
||||
XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1,
|
||||
XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_ON);
|
||||
ndelay(20);
|
||||
XMDIO_WRITE_BITS(pdata, MDIO_MMD_PMAPMD, MDIO_PMA_RX_CTRL1,
|
||||
XGBE_PMA_RX_RST_0_MASK, XGBE_PMA_RX_RST_0_RESET_OFF);
|
||||
usleep_range(40, 50);
|
||||
netif_err(pdata, link, pdata->netdev, "firmware mailbox reset performed\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
|
||||
unsigned int cmd, unsigned int sub_cmd)
|
||||
{
|
||||
@ -1789,9 +1810,11 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
|
||||
unsigned int wait;
|
||||
|
||||
/* Log if a previous command did not complete */
|
||||
if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS))
|
||||
if (XP_IOREAD_BITS(pdata, XP_DRIVER_INT_RO, STATUS)) {
|
||||
netif_dbg(pdata, link, pdata->netdev,
|
||||
"firmware mailbox not ready for command\n");
|
||||
xgbe_phy_rx_reset(pdata);
|
||||
}
|
||||
|
||||
/* Construct the command */
|
||||
XP_SET_BITS(s0, XP_DRIVER_SCRATCH_0, COMMAND, cmd);
|
||||
@ -1813,6 +1836,9 @@ static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
|
||||
|
||||
netif_dbg(pdata, link, pdata->netdev,
|
||||
"firmware mailbox command did not complete\n");
|
||||
|
||||
/* Reset on error */
|
||||
xgbe_phy_rx_reset(pdata);
|
||||
}
|
||||
|
||||
static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
|
||||
@ -2409,6 +2435,14 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
|
||||
if (reg & MDIO_STAT1_LSTATUS)
|
||||
return 1;
|
||||
|
||||
if (pdata->phy.autoneg == AUTONEG_ENABLE &&
|
||||
phy_data->port_mode == XGBE_PORT_MODE_BACKPLANE) {
|
||||
if (!test_bit(XGBE_LINK_INIT, &pdata->dev_state)) {
|
||||
netif_carrier_off(pdata->netdev);
|
||||
*an_restart = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* No link, attempt a receiver reset cycle */
|
||||
if (phy_data->rrc_count++ > XGBE_RRC_FREQUENCY) {
|
||||
phy_data->rrc_count = 0;
|
||||
|
@ -5752,9 +5752,10 @@ void bnxt_tx_disable(struct bnxt *bp)
|
||||
txr->dev_state = BNXT_DEV_STATE_CLOSING;
|
||||
}
|
||||
}
|
||||
/* Drop carrier first to prevent TX timeout */
|
||||
netif_carrier_off(bp->dev);
|
||||
/* Stop all TX queues */
|
||||
netif_tx_disable(bp->dev);
|
||||
netif_carrier_off(bp->dev);
|
||||
}
|
||||
|
||||
void bnxt_tx_enable(struct bnxt *bp)
|
||||
|
@ -201,8 +201,13 @@ static void free_long_term_buff(struct ibmvnic_adapter *adapter,
|
||||
if (!ltb->buff)
|
||||
return;
|
||||
|
||||
/* VIOS automatically unmaps the long term buffer at remote
|
||||
* end for the following resets:
|
||||
* FAILOVER, MOBILITY, TIMEOUT.
|
||||
*/
|
||||
if (adapter->reset_reason != VNIC_RESET_FAILOVER &&
|
||||
adapter->reset_reason != VNIC_RESET_MOBILITY)
|
||||
adapter->reset_reason != VNIC_RESET_MOBILITY &&
|
||||
adapter->reset_reason != VNIC_RESET_TIMEOUT)
|
||||
send_request_unmap(adapter, ltb->map_id);
|
||||
dma_free_coherent(dev, ltb->size, ltb->buff, ltb->addr);
|
||||
}
|
||||
|
@ -7185,7 +7185,6 @@ static int i40e_reset(struct i40e_pf *pf)
|
||||
static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
u8 set_fc_aq_fail = 0;
|
||||
i40e_status ret;
|
||||
u32 val;
|
||||
int v;
|
||||
@ -7263,13 +7262,6 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)
|
||||
i40e_stat_str(&pf->hw, ret),
|
||||
i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status));
|
||||
|
||||
/* make sure our flow control settings are restored */
|
||||
ret = i40e_set_fc(&pf->hw, &set_fc_aq_fail, true);
|
||||
if (ret)
|
||||
dev_dbg(&pf->pdev->dev, "setting flow control: ret = %s last_status = %s\n",
|
||||
i40e_stat_str(&pf->hw, ret),
|
||||
i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status));
|
||||
|
||||
/* Rebuild the VSIs and VEBs that existed before reset.
|
||||
* They are still in our local switch element arrays, so only
|
||||
* need to rebuild the switch model in the HW.
|
||||
@ -11286,7 +11278,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
int err;
|
||||
u32 val;
|
||||
u32 i;
|
||||
u8 set_fc_aq_fail;
|
||||
|
||||
err = pci_enable_device_mem(pdev);
|
||||
if (err)
|
||||
@ -11555,24 +11546,6 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
goto err_vsis;
|
||||
}
|
||||
|
||||
/* Make sure flow control is set according to current settings */
|
||||
err = i40e_set_fc(hw, &set_fc_aq_fail, true);
|
||||
if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_GET)
|
||||
dev_dbg(&pf->pdev->dev,
|
||||
"Set fc with err %s aq_err %s on get_phy_cap\n",
|
||||
i40e_stat_str(hw, err),
|
||||
i40e_aq_str(hw, hw->aq.asq_last_status));
|
||||
if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_SET)
|
||||
dev_dbg(&pf->pdev->dev,
|
||||
"Set fc with err %s aq_err %s on set_phy_config\n",
|
||||
i40e_stat_str(hw, err),
|
||||
i40e_aq_str(hw, hw->aq.asq_last_status));
|
||||
if (set_fc_aq_fail & I40E_SET_FC_AQ_FAIL_UPDATE)
|
||||
dev_dbg(&pf->pdev->dev,
|
||||
"Set fc with err %s aq_err %s on get_link_info\n",
|
||||
i40e_stat_str(hw, err),
|
||||
i40e_aq_str(hw, hw->aq.asq_last_status));
|
||||
|
||||
/* if FDIR VSI was set up, start it now */
|
||||
for (i = 0; i < pf->num_alloc_vsi; i++) {
|
||||
if (pf->vsi[i] && pf->vsi[i]->type == I40E_VSI_FDIR) {
|
||||
|
@ -2829,13 +2829,16 @@ static int i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,
|
||||
|
||||
l4_proto = ip.v4->protocol;
|
||||
} else if (*tx_flags & I40E_TX_FLAGS_IPV6) {
|
||||
int ret;
|
||||
|
||||
tunnel |= I40E_TX_CTX_EXT_IP_IPV6;
|
||||
|
||||
exthdr = ip.hdr + sizeof(*ip.v6);
|
||||
l4_proto = ip.v6->nexthdr;
|
||||
if (l4.hdr != exthdr)
|
||||
ipv6_skip_exthdr(skb, exthdr - skb->data,
|
||||
&l4_proto, &frag_off);
|
||||
ret = ipv6_skip_exthdr(skb, exthdr - skb->data,
|
||||
&l4_proto, &frag_off);
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* define outer transport */
|
||||
|
@ -2958,7 +2958,9 @@ static int mvneta_txq_init(struct mvneta_port *pp,
|
||||
mvneta_tx_done_pkts_coal_set(pp, txq, txq->done_pkts_coal);
|
||||
|
||||
/* Setup XPS mapping */
|
||||
if (txq_number > 1)
|
||||
if (pp->neta_armada3700)
|
||||
cpu = 0;
|
||||
else if (txq_number > 1)
|
||||
cpu = txq->id % num_present_cpus();
|
||||
else
|
||||
cpu = pp->rxq_def % num_present_cpus();
|
||||
@ -3409,6 +3411,11 @@ static int mvneta_cpu_online(unsigned int cpu, struct hlist_node *node)
|
||||
node_online);
|
||||
struct mvneta_pcpu_port *port = per_cpu_ptr(pp->ports, cpu);
|
||||
|
||||
/* Armada 3700's per-cpu interrupt for mvneta is broken, all interrupts
|
||||
* are routed to CPU 0, so we don't need all the cpu-hotplug support
|
||||
*/
|
||||
if (pp->neta_armada3700)
|
||||
return 0;
|
||||
|
||||
spin_lock(&pp->lock);
|
||||
/*
|
||||
|
@ -4988,6 +4988,7 @@ static int mlx4_do_mirror_rule(struct mlx4_dev *dev, struct res_fs_rule *fs_rule
|
||||
|
||||
if (!fs_rule->mirr_mbox) {
|
||||
mlx4_err(dev, "rule mirroring mailbox is null\n");
|
||||
mlx4_free_cmd_mailbox(dev, mailbox);
|
||||
return -EINVAL;
|
||||
}
|
||||
memcpy(mailbox->buf, fs_rule->mirr_mbox, fs_rule->mirr_mbox_size);
|
||||
|
@ -1352,27 +1352,12 @@ sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
|
||||
if (vio_version_after_eq(&port->vio, 1, 3))
|
||||
localmtu -= VLAN_HLEN;
|
||||
|
||||
if (skb->protocol == htons(ETH_P_IP)) {
|
||||
struct flowi4 fl4;
|
||||
struct rtable *rt = NULL;
|
||||
|
||||
memset(&fl4, 0, sizeof(fl4));
|
||||
fl4.flowi4_oif = dev->ifindex;
|
||||
fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
|
||||
fl4.daddr = ip_hdr(skb)->daddr;
|
||||
fl4.saddr = ip_hdr(skb)->saddr;
|
||||
|
||||
rt = ip_route_output_key(dev_net(dev), &fl4);
|
||||
if (!IS_ERR(rt)) {
|
||||
skb_dst_set(skb, &rt->dst);
|
||||
icmp_send(skb, ICMP_DEST_UNREACH,
|
||||
ICMP_FRAG_NEEDED,
|
||||
htonl(localmtu));
|
||||
}
|
||||
}
|
||||
if (skb->protocol == htons(ETH_P_IP))
|
||||
icmp_ndo_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
|
||||
htonl(localmtu));
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
else if (skb->protocol == htons(ETH_P_IPV6))
|
||||
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, localmtu);
|
||||
icmpv6_ndo_send(skb, ICMPV6_PKT_TOOBIG, 0, localmtu);
|
||||
#endif
|
||||
goto out_dropped;
|
||||
}
|
||||
|
@ -549,9 +549,8 @@ static int gtp_build_skb_ip4(struct sk_buff *skb, struct net_device *dev,
|
||||
if (!skb_is_gso(skb) && (iph->frag_off & htons(IP_DF)) &&
|
||||
mtu < ntohs(iph->tot_len)) {
|
||||
netdev_dbg(dev, "packet too big, fragmentation needed\n");
|
||||
memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
|
||||
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
|
||||
htonl(mtu));
|
||||
icmp_ndo_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
|
||||
htonl(mtu));
|
||||
goto err_rt;
|
||||
}
|
||||
|
||||
|
@ -1280,6 +1280,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */
|
||||
{QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/
|
||||
{QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */
|
||||
{QMI_FIXED_INTF(0x1e2d, 0x00b7, 0)}, /* Cinterion MV31 RmNet */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
|
@ -1236,8 +1236,11 @@ static ssize_t write_file_nf_override(struct file *file,
|
||||
|
||||
ah->nf_override = val;
|
||||
|
||||
if (ah->curchan)
|
||||
if (ah->curchan) {
|
||||
ath9k_ps_wakeup(sc);
|
||||
ath9k_hw_loadnf(ah, ah->curchan);
|
||||
ath9k_ps_restore(sc);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
@ -5320,7 +5320,7 @@ static void b43_nphy_restore_cal(struct b43_wldev *dev)
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (dev->phy.rev >= 3)
|
||||
table[i] = coef[i];
|
||||
coef[i] = table[i];
|
||||
else
|
||||
coef[i] = 0;
|
||||
}
|
||||
|
@ -162,13 +162,15 @@ irqreturn_t xenvif_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct xenvif_queue *queue = dev_id;
|
||||
int old;
|
||||
bool has_rx, has_tx;
|
||||
|
||||
old = atomic_fetch_or(NETBK_COMMON_EOI, &queue->eoi_pending);
|
||||
WARN(old, "Interrupt while EOI pending\n");
|
||||
|
||||
/* Use bitwise or as we need to call both functions. */
|
||||
if ((!xenvif_handle_tx_interrupt(queue) |
|
||||
!xenvif_handle_rx_interrupt(queue))) {
|
||||
has_tx = xenvif_handle_tx_interrupt(queue);
|
||||
has_rx = xenvif_handle_rx_interrupt(queue);
|
||||
|
||||
if (!has_rx && !has_tx) {
|
||||
atomic_andnot(NETBK_COMMON_EOI, &queue->eoi_pending);
|
||||
xen_irq_lateeoi(irq, XEN_EOI_FLAG_SPURIOUS);
|
||||
}
|
||||
|
@ -347,16 +347,16 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
static DEVICE_ATTR_RO(state);
|
||||
|
||||
static ssize_t available_slots_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
static ssize_t __available_slots_show(struct nvdimm_drvdata *ndd, char *buf)
|
||||
{
|
||||
struct nvdimm_drvdata *ndd = dev_get_drvdata(dev);
|
||||
struct device *dev;
|
||||
ssize_t rc;
|
||||
u32 nfree;
|
||||
|
||||
if (!ndd)
|
||||
return -ENXIO;
|
||||
|
||||
dev = ndd->dev;
|
||||
nvdimm_bus_lock(dev);
|
||||
nfree = nd_label_nfree(ndd);
|
||||
if (nfree - 1 > nfree) {
|
||||
@ -368,6 +368,18 @@ static ssize_t available_slots_show(struct device *dev,
|
||||
nvdimm_bus_unlock(dev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static ssize_t available_slots_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
ssize_t rc;
|
||||
|
||||
device_lock(dev);
|
||||
rc = __available_slots_show(dev_get_drvdata(dev), buf);
|
||||
device_unlock(dev);
|
||||
|
||||
return rc;
|
||||
}
|
||||
static DEVICE_ATTR_RO(available_slots);
|
||||
|
||||
static struct attribute *nvdimm_attributes[] = {
|
||||
|
@ -1236,8 +1236,16 @@ int __init __weak early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size)
|
||||
int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
|
||||
phys_addr_t size, bool nomap)
|
||||
{
|
||||
if (nomap)
|
||||
return memblock_remove(base, size);
|
||||
if (nomap) {
|
||||
/*
|
||||
* If the memory is already reserved (by another region), we
|
||||
* should not allow it to be marked nomap.
|
||||
*/
|
||||
if (memblock_is_region_reserved(base, size))
|
||||
return -EBUSY;
|
||||
|
||||
return memblock_mark_nomap(base, size);
|
||||
}
|
||||
return memblock_reserve(base, size);
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
|
||||
u16 word;
|
||||
u32 dword;
|
||||
long err;
|
||||
long cfg_ret;
|
||||
int cfg_ret;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
@ -48,7 +48,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
|
||||
}
|
||||
|
||||
err = -EIO;
|
||||
if (cfg_ret != PCIBIOS_SUCCESSFUL)
|
||||
if (cfg_ret)
|
||||
goto error;
|
||||
|
||||
switch (len) {
|
||||
@ -106,7 +106,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
|
||||
if (err)
|
||||
break;
|
||||
err = pci_user_write_config_byte(dev, off, byte);
|
||||
if (err != PCIBIOS_SUCCESSFUL)
|
||||
if (err)
|
||||
err = -EIO;
|
||||
break;
|
||||
|
||||
@ -115,7 +115,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
|
||||
if (err)
|
||||
break;
|
||||
err = pci_user_write_config_word(dev, off, word);
|
||||
if (err != PCIBIOS_SUCCESSFUL)
|
||||
if (err)
|
||||
err = -EIO;
|
||||
break;
|
||||
|
||||
@ -124,7 +124,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
|
||||
if (err)
|
||||
break;
|
||||
err = pci_user_write_config_dword(dev, off, dword);
|
||||
if (err != PCIBIOS_SUCCESSFUL)
|
||||
if (err)
|
||||
err = -EIO;
|
||||
break;
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
|
||||
#define AT91_SHDW_MR 0x04 /* Shut Down Mode Register */
|
||||
#define AT91_SHDW_WKUPDBC_SHIFT 24
|
||||
#define AT91_SHDW_WKUPDBC_MASK GENMASK(31, 16)
|
||||
#define AT91_SHDW_WKUPDBC_MASK GENMASK(26, 24)
|
||||
#define AT91_SHDW_WKUPDBC(x) (((x) << AT91_SHDW_WKUPDBC_SHIFT) \
|
||||
& AT91_SHDW_WKUPDBC_MASK)
|
||||
|
||||
|
@ -370,7 +370,6 @@ static int rockchip_pwm_probe(struct platform_device *pdev)
|
||||
|
||||
ret = pwmchip_add(&pc->chip);
|
||||
if (ret < 0) {
|
||||
clk_unprepare(pc->clk);
|
||||
dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret);
|
||||
goto err_pclk;
|
||||
}
|
||||
|
@ -493,7 +493,7 @@ static int axp20x_set_dcdc_freq(struct platform_device *pdev, u32 dcdcfreq)
|
||||
static int axp20x_regulator_parse_dt(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np, *regulators;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
u32 dcdcfreq = 0;
|
||||
|
||||
np = of_node_get(pdev->dev.parent->of_node);
|
||||
@ -508,13 +508,12 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
|
||||
ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
of_node_put(regulators);
|
||||
}
|
||||
|
||||
return 0;
|
||||
of_node_put(np);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 workmode)
|
||||
|
@ -625,6 +625,7 @@ config RTC_DRV_S5M
|
||||
tristate "Samsung S2M/S5M series"
|
||||
depends on MFD_SEC_CORE || COMPILE_TEST
|
||||
select REGMAP_IRQ
|
||||
select REGMAP_I2C
|
||||
help
|
||||
If you say yes here you will get support for the
|
||||
RTC of Samsung S2MPS14 and S5M PMIC series.
|
||||
|
@ -4,6 +4,7 @@ config SCSI_BNX2X_FCOE
|
||||
depends on (IPV6 || IPV6=n)
|
||||
depends on LIBFC
|
||||
depends on LIBFCOE
|
||||
depends on MMU
|
||||
select NETDEVICES
|
||||
select ETHERNET
|
||||
select NET_VENDOR_BROADCOM
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user