This is the 4.19.89 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl3zQ1wACgkQONu9yGCS
 aT6ZDA/+JQyM+mgrU2t5mkq9lXCwL87Jiooy0kKT9b/2EWmW5Gdxp/On9PXfqtfs
 uZ+v0A1g1H+582uwuqG1wB2jr3I2AhNnRNbvSypGtk1Kitx9HqVJD/wWRRVCULww
 cr3uA/ZOX+deRjOVYP3dhFp7ycn6u5+GxgmFQTLmKAYN8uUqq4/dpWy01iB0nr2A
 GcoLm9P96o8P/wIWaykqOvshDrocbFcBL4VuxLeZCbFsAMTiX+jJnyIL8W7gfBJl
 M2626S/hESk5DvGcMN3zwOw/nTJlvySUtfqXSvPk0sT90UMx/YZ9QdpS9GkvRb9t
 OA1G+iHguEU+Fq/DawUyxwk/kt3nA6cg0q7RSxHo7QP6SGo7OaHHS1myzGDhL8oc
 LDKXO2iSSzvXJDlqrU45N+1YhpeiIHCxmDctbUIM9dP4u6wWmQIyYXLrcpupTsm9
 StiDBguXFHWSBFhG0+MlTUU5cypVNoN+56wBAUTR6+qoDASTzGvjNbrBsQihODV0
 RMFJF17Zvn+UoEohe860EMswUBsJ+F+VSZO5yGuZgsaC/2Ih6M1dxsiNU7RF02gX
 fRis6huj1+642ZsEbd2tueYGUaDN1HpMsVkN3AAkD3pJF5lX7AJRwhvRyC8N1jhc
 G90KMSk2pR/ItjmUpkKaAhAKhN+oKSzuCPpHj2iGotfWdd4slXQ=
 =Ekyt
 -----END PGP SIGNATURE-----

Merge 4.19.89 into android-4.19-q

Changes in 4.19.89
	rsi: release skb if rsi_prepare_beacon fails
	arm64: tegra: Fix 'active-low' warning for Jetson TX1 regulator
	sparc64: implement ioremap_uc
	lp: fix sparc64 LPSETTIMEOUT ioctl
	usb: gadget: u_serial: add missing port entry locking
	tty: serial: fsl_lpuart: use the sg count from dma_map_sg
	tty: serial: msm_serial: Fix flow control
	serial: pl011: Fix DMA ->flush_buffer()
	serial: serial_core: Perform NULL checks for break_ctl ops
	serial: ifx6x60: add missed pm_runtime_disable
	autofs: fix a leak in autofs_expire_indirect()
	RDMA/hns: Correct the value of HNS_ROCE_HEM_CHUNK_LEN
	iwlwifi: pcie: don't consider IV len in A-MSDU
	exportfs_decode_fh(): negative pinned may become positive without the parent locked
	audit_get_nd(): don't unlock parent too early
	NFC: nxp-nci: Fix NULL pointer dereference after I2C communication error
	xfrm: release device reference for invalid state
	Input: cyttsp4_core - fix use after free bug
	sched/core: Avoid spurious lock dependencies
	perf/core: Consistently fail fork on allocation failures
	ALSA: pcm: Fix stream lock usage in snd_pcm_period_elapsed()
	drm/sun4i: tcon: Set min division of TCON0_DCLK to 1.
	selftests: kvm: fix build with glibc >= 2.30
	rsxx: add missed destroy_workqueue calls in remove
	net: ep93xx_eth: fix mismatch of request_mem_region in remove
	i2c: core: fix use after free in of_i2c_notify
	serial: core: Allow processing sysrq at port unlock time
	cxgb4vf: fix memleak in mac_hlist initialization
	iwlwifi: mvm: synchronize TID queue removal
	iwlwifi: trans: Clear persistence bit when starting the FW
	iwlwifi: mvm: Send non offchannel traffic via AP sta
	ARM: 8813/1: Make aligned 2-byte getuser()/putuser() atomic on ARMv6+
	audit: Embed key into chunk
	netfilter: nf_tables: don't use position attribute on rule replacement
	ARC: IOC: panic if kernel was started with previously enabled IOC
	net/mlx5: Release resource on error flow
	clk: sunxi-ng: a64: Fix gate bit of DSI DPHY
	ice: Fix NVM mask defines
	dlm: fix possible call to kfree() for non-initialized pointer
	ARM: dts: exynos: Fix LDO13 min values on Odroid XU3/XU4/HC1
	extcon: max8997: Fix lack of path setting in USB device mode
	net: ethernet: ti: cpts: correct debug for expired txq skb
	rtc: s3c-rtc: Avoid using broken ALMYEAR register
	rtc: max77686: Fix the returned value in case of error in 'max77686_rtc_read_time()'
	i40e: don't restart nway if autoneg not supported
	virtchnl: Fix off by one error
	clk: rockchip: fix rk3188 sclk_smc gate data
	clk: rockchip: fix rk3188 sclk_mac_lbtest parameter ordering
	ARM: dts: rockchip: Fix rk3288-rock2 vcc_flash name
	dlm: fix missing idr_destroy for recover_idr
	MIPS: SiByte: Enable ZONE_DMA32 for LittleSur
	net: dsa: mv88e6xxx: Work around mv886e6161 SERDES missing MII_PHYSID2
	scsi: zfcp: update kernel message for invalid FCP_CMND length, it's not the CDB
	scsi: zfcp: drop default switch case which might paper over missing case
	drivers: soc: Allow building the amlogic drivers without ARCH_MESON
	bus: ti-sysc: Fix getting optional clocks in clock_roles
	ARM: dts: imx6: RDU2: fix eGalax touchscreen node
	crypto: ecc - check for invalid values in the key verification test
	crypto: bcm - fix normal/non key hash algorithm failure
	arm64: dts: zynqmp: Fix node names which contain "_"
	pinctrl: qcom: ssbi-gpio: fix gpio-hog related boot issues
	Staging: iio: adt7316: Fix i2c data reading, set the data field
	firmware: raspberrypi: Fix firmware calls with large buffers
	mm/vmstat.c: fix NUMA statistics updates
	clk: rockchip: fix I2S1 clock gate register for rk3328
	clk: rockchip: fix ID of 8ch clock of I2S1 for rk3328
	sctp: count sk_wmem_alloc by skb truesize in sctp_packet_transmit
	regulator: Fix return value of _set_load() stub
	USB: serial: f81534: fix reading old/new IC config
	xfs: extent shifting doesn't fully invalidate page cache
	net-next/hinic:fix a bug in set mac address
	net-next/hinic: fix a bug in rx data flow
	ice: Fix return value from NAPI poll
	ice: Fix possible NULL pointer de-reference
	iomap: FUA is wrong for DIO O_DSYNC writes into unwritten extents
	iomap: sub-block dio needs to zeroout beyond EOF
	iomap: dio data corruption and spurious errors when pipes fill
	iomap: readpages doesn't zero page tail beyond EOF
	iw_cxgb4: only reconnect with MPAv1 if the peer aborts
	MIPS: OCTEON: octeon-platform: fix typing
	net/smc: use after free fix in smc_wr_tx_put_slot()
	math-emu/soft-fp.h: (_FP_ROUND_ZERO) cast 0 to void to fix warning
	nds32: Fix the items of hwcap_str ordering issue.
	rtc: max8997: Fix the returned value in case of error in 'max8997_rtc_read_alarm()'
	rtc: dt-binding: abx80x: fix resistance scale
	ARM: dts: exynos: Use Samsung SoC specific compatible for DWC2 module
	media: coda: fix memory corruption in case more than 32 instances are opened
	media: pulse8-cec: return 0 when invalidating the logical address
	media: cec: report Vendor ID after initialization
	iwlwifi: fix cfg structs for 22000 with different RF modules
	ravb: Clean up duplex handling
	net/ipv6: re-do dad when interface has IFF_NOARP flag change
	dmaengine: coh901318: Fix a double-lock bug
	dmaengine: coh901318: Remove unused variable
	dmaengine: dw-dmac: implement dma protection control setting
	net: qualcomm: rmnet: move null check on dev before dereferecing it
	selftests/powerpc: Allocate base registers
	selftests/powerpc: Skip test instead of failing
	usb: dwc3: debugfs: Properly print/set link state for HS
	usb: dwc3: don't log probe deferrals; but do log other error codes
	ACPI: fix acpi_find_child_device() invocation in acpi_preset_companion()
	f2fs: fix to account preflush command for noflush_merge mode
	f2fs: fix count of seg_freed to make sec_freed correct
	f2fs: change segment to section in f2fs_ioc_gc_range
	ARM: dts: rockchip: Fix the PMU interrupt number for rv1108
	ARM: dts: rockchip: Assign the proper GPIO clocks for rv1108
	f2fs: fix to allow node segment for GC by ioctl path
	sparc: Fix JIT fused branch convergance.
	sparc: Correct ctx->saw_frame_pointer logic.
	nvme: Free ctrl device name on init failure
	dma-mapping: fix return type of dma_set_max_seg_size()
	slimbus: ngd: Fix build error on x86
	altera-stapl: check for a null key before strcasecmp'ing it
	serial: imx: fix error handling in console_setup
	i2c: imx: don't print error message on probe defer
	clk: meson: Fix GXL HDMI PLL fractional bits width
	gpu: host1x: Fix syncpoint ID field size on Tegra186
	lockd: fix decoding of TEST results
	sctp: increase sk_wmem_alloc when head->truesize is increased
	iommu/amd: Fix line-break in error log reporting
	ASoC: rsnd: tidyup registering method for rsnd_kctrl_new()
	ARM: dts: sun4i: Fix gpio-keys warning
	ARM: dts: sun4i: Fix HDMI output DTC warning
	ARM: dts: sun5i: a10s: Fix HDMI output DTC warning
	ARM: dts: r8a779[01]: Disable unconnected LVDS encoders
	ARM: dts: sun7i: Fix HDMI output DTC warning
	ARM: dts: sun8i: a23/a33: Fix OPP DTC warnings
	ARM: dts: sun8i: v3s: Change pinctrl nodes to avoid warning
	dlm: NULL check before kmem_cache_destroy is not needed
	ARM: debug: enable UART1 for socfpga Cyclone5
	can: xilinx: fix return type of ndo_start_xmit function
	nfsd: fix a warning in __cld_pipe_upcall()
	bpf: btf: implement btf_name_valid_identifier()
	bpf: btf: check name validity for various types
	tools: bpftool: fix a bitfield pretty print issue
	ASoC: au8540: use 64-bit arithmetic instead of 32-bit
	ARM: OMAP1/2: fix SoC name printing
	arm64: dts: meson-gxl-libretech-cc: fix GPIO lines names
	arm64: dts: meson-gxbb-nanopi-k2: fix GPIO lines names
	arm64: dts: meson-gxbb-odroidc2: fix GPIO lines names
	arm64: dts: meson-gxl-khadas-vim: fix GPIO lines names
	net/x25: fix called/calling length calculation in x25_parse_address_block
	net/x25: fix null_x25_address handling
	tools/bpf: make libbpf _GNU_SOURCE friendly
	clk: mediatek: Drop __init from mtk_clk_register_cpumuxes()
	clk: mediatek: Drop more __init markings for driver probe
	soc: renesas: r8a77970-sysc: Correct names of A2DP/A2CN power domains
	soc: renesas: r8a77980-sysc: Correct names of A2DP[01] power domains
	soc: renesas: r8a77980-sysc: Correct A3VIP[012] power domain hierarchy
	kbuild: disable dtc simple_bus_reg warnings by default
	tcp: make tcp_space() aware of socket backlog
	ARM: dts: mmp2: fix the gpio interrupt cell number
	ARM: dts: realview-pbx: Fix duplicate regulator nodes
	tcp: fix off-by-one bug on aborting window-probing socket
	tcp: fix SNMP under-estimation on failed retransmission
	tcp: fix SNMP TCP timeout under-estimation
	modpost: skip ELF local symbols during section mismatch check
	kbuild: fix single target build for external module
	mtd: fix mtd_oobavail() incoherent returned value
	ARM: dts: pxa: clean up USB controller nodes
	clk: meson: meson8b: fix the offset of vid_pll_dco's N value
	clk: sunxi-ng: h3/h5: Fix CSI_MCLK parent
	clk: qcom: Fix MSM8998 resets
	media: cxd2880-spi: fix probe when dvb_attach fails
	ARM: dts: realview: Fix some more duplicate regulator nodes
	dlm: fix invalid cluster name warning
	net/mlx4_core: Fix return codes of unsupported operations
	pstore/ram: Avoid NULL deref in ftrace merging failure path
	powerpc/math-emu: Update macros from GCC
	clk: renesas: r8a77990: Correct parent clock of DU
	clk: renesas: r8a77995: Correct parent clock of DU
	MIPS: OCTEON: cvmx_pko_mem_debug8: use oldest forward compatible definition
	nfsd: Return EPERM, not EACCES, in some SETATTR cases
	media: uvcvideo: Abstract streaming object lifetime
	tty: serial: qcom_geni_serial: Fix softlock
	ARM: dts: sun8i: h3: Fix the system-control register range
	tty: Don't block on IO when ldisc change is pending
	media: stkwebcam: Bugfix for wrong return values
	firmware: qcom: scm: fix compilation error when disabled
	clk: qcom: gcc-msm8998: Disable halt check of UFS clocks
	sctp: frag_point sanity check
	soc: renesas: r8a77990-sysc: Fix initialization order of 3DG-{A,B}
	mlxsw: spectrum_router: Relax GRE decap matching check
	IB/hfi1: Ignore LNI errors before DC8051 transitions to Polling state
	IB/hfi1: Close VNIC sdma_progress sleep window
	mlx4: Use snprintf instead of complicated strcpy
	usb: mtu3: fix dbginfo in qmu_tx_zlp_error_handler
	clk: renesas: rcar-gen3: Set state when registering SD clocks
	ASoC: max9867: Fix power management
	ARM: dts: sunxi: Fix PMU compatible strings
	ARM: dts: am335x-pdu001: Fix polarity of card detection input
	media: vimc: fix start stream when link is disabled
	net: aquantia: fix RSS table and key sizes
	sched/fair: Scale bandwidth quota and period without losing quota/period ratio precision
	fuse: verify nlink
	fuse: verify attributes
	ALSA: hda/realtek - Enable internal speaker of ASUS UX431FLC
	ALSA: hda/realtek - Enable the headset-mic on a Xiaomi's laptop
	ALSA: hda/realtek - Dell headphone has noise on unmute for ALC236
	ALSA: pcm: oss: Avoid potential buffer overflows
	ALSA: hda - Add mute led support for HP ProBook 645 G4
	Input: synaptics - switch another X1 Carbon 6 to RMI/SMbus
	Input: synaptics-rmi4 - re-enable IRQs in f34v7_do_reflash
	Input: synaptics-rmi4 - don't increment rmiaddr for SMBus transfers
	Input: goodix - add upside-down quirk for Teclast X89 tablet
	coresight: etm4x: Fix input validation for sysfs.
	Input: Fix memory leak in psxpad_spi_probe
	x86/mm/32: Sync only to VMALLOC_END in vmalloc_sync_all()
	x86/PCI: Avoid AMD FCH XHCI USB PME# from D0 defect
	xfrm interface: fix memory leak on creation
	xfrm interface: avoid corruption on changelink
	xfrm interface: fix list corruption for x-netns
	xfrm interface: fix management of phydev
	CIFS: Fix NULL-pointer dereference in smb2_push_mandatory_locks
	CIFS: Fix SMB2 oplock break processing
	tty: vt: keyboard: reject invalid keycodes
	can: slcan: Fix use-after-free Read in slcan_open
	kernfs: fix ino wrap-around detection
	jbd2: Fix possible overflow in jbd2_log_space_left()
	drm/msm: fix memleak on release
	drm/i810: Prevent underflow in ioctl
	arm64: dts: exynos: Revert "Remove unneeded address space mapping for soc node"
	KVM: arm/arm64: vgic: Don't rely on the wrong pending table
	KVM: x86: do not modify masked bits of shared MSRs
	KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES
	KVM: x86: Grab KVM's srcu lock when setting nested state
	crypto: crypto4xx - fix double-free in crypto4xx_destroy_sdr
	crypto: atmel-aes - Fix IV handling when req->nbytes < ivsize
	crypto: af_alg - cast ki_complete ternary op to int
	crypto: ccp - fix uninitialized list head
	crypto: ecdh - fix big endian bug in ECC library
	crypto: user - fix memory leak in crypto_report
	spi: atmel: Fix CS high support
	mwifiex: update set_mac_address logic
	can: ucan: fix non-atomic allocation in completion handler
	RDMA/qib: Validate ->show()/store() callbacks before calling them
	iomap: Fix pipe page leakage during splicing
	thermal: Fix deadlock in thermal thermal_zone_device_check
	vcs: prevent write access to vcsu devices
	binder: Fix race between mmap() and binder_alloc_print_pages()
	binder: Handle start==NULL in binder_update_page_range()
	ALSA: hda - Fix pending unsol events at shutdown
	md/raid0: Fix an error message in raid0_make_request()
	watchdog: aspeed: Fix clock behaviour for ast2600
	perf script: Fix invalid LBR/binary mismatch error
	splice: don't read more than available pipe space
	iomap: partially revert 4721a601099 (simulated directio short read on EFAULT)
	xfs: add missing error check in xfs_prepare_shift()
	ASoC: rsnd: fixup MIX kctrl registration
	KVM: x86: fix out-of-bounds write in KVM_GET_EMULATED_CPUID (CVE-2019-19332)
	net: qrtr: fix memort leak in qrtr_tun_write_iter
	appletalk: Fix potential NULL pointer dereference in unregister_snap_client
	appletalk: Set error code if register_snap_client failed
	Linux 4.19.89

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ib03743db658afb561f36bf513e38754eed704fef
This commit is contained in:
Greg Kroah-Hartman 2019-12-13 09:07:59 +01:00
commit c79e0f865d
274 changed files with 1562 additions and 1034 deletions

View file

@ -27,4 +27,4 @@ and valid to enable charging:
- "abracon,tc-diode": should be "standard" (0.6V) or "schottky" (0.3V) - "abracon,tc-diode": should be "standard" (0.6V) or "schottky" (0.3V)
- "abracon,tc-resistor": should be <0>, <3>, <6> or <11>. 0 disables the output - "abracon,tc-resistor": should be <0>, <3>, <6> or <11>. 0 disables the output
resistor, the other values are in ohm. resistor, the other values are in kOhm.

View file

@ -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 = 88 SUBLEVEL = 89
EXTRAVERSION = EXTRAVERSION =
NAME = "People's Front" NAME = "People's Front"
@ -1569,9 +1569,6 @@ else # KBUILD_EXTMOD
# We are always building modules # We are always building modules
KBUILD_MODULES := 1 KBUILD_MODULES := 1
PHONY += crmodverdir
crmodverdir:
$(cmd_crmodverdir)
PHONY += $(objtree)/Module.symvers PHONY += $(objtree)/Module.symvers
$(objtree)/Module.symvers: $(objtree)/Module.symvers:
@ -1583,7 +1580,7 @@ $(objtree)/Module.symvers:
module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
PHONY += $(module-dirs) modules PHONY += $(module-dirs) modules
$(module-dirs): crmodverdir $(objtree)/Module.symvers $(module-dirs): prepare $(objtree)/Module.symvers
$(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
modules: $(module-dirs) modules: $(module-dirs)
@ -1624,7 +1621,8 @@ help:
# Dummies... # Dummies...
PHONY += prepare scripts PHONY += prepare scripts
prepare: ; prepare:
$(cmd_crmodverdir)
scripts: ; scripts: ;
endif # KBUILD_EXTMOD endif # KBUILD_EXTMOD
@ -1752,17 +1750,14 @@ endif
# Modules # Modules
/: prepare scripts FORCE /: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir) $(build)=$(build-dir)
# Make sure the latest headers are built for Documentation # Make sure the latest headers are built for Documentation
Documentation/ samples/: headers_install Documentation/ samples/: headers_install
%/: prepare scripts FORCE %/: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir) $(build)=$(build-dir)
%.ko: prepare scripts FORCE %.ko: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir) $(@:.ko=.o) $(build)=$(build-dir) $(@:.ko=.o)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost

View file

@ -124,7 +124,9 @@ extern unsigned long perip_base, perip_end;
/* IO coherency related Auxiliary registers */ /* IO coherency related Auxiliary registers */
#define ARC_REG_IO_COH_ENABLE 0x500 #define ARC_REG_IO_COH_ENABLE 0x500
#define ARC_IO_COH_ENABLE_BIT BIT(0)
#define ARC_REG_IO_COH_PARTIAL 0x501 #define ARC_REG_IO_COH_PARTIAL 0x501
#define ARC_IO_COH_PARTIAL_BIT BIT(0)
#define ARC_REG_IO_COH_AP0_BASE 0x508 #define ARC_REG_IO_COH_AP0_BASE 0x508
#define ARC_REG_IO_COH_AP0_SIZE 0x509 #define ARC_REG_IO_COH_AP0_SIZE 0x509

View file

@ -1144,6 +1144,20 @@ noinline void __init arc_ioc_setup(void)
{ {
unsigned int ioc_base, mem_sz; unsigned int ioc_base, mem_sz;
/*
* If IOC was already enabled (due to bootloader) it technically needs to
* be reconfigured with aperture base,size corresponding to Linux memory map
* which will certainly be different than uboot's. But disabling and
* reenabling IOC when DMA might be potentially active is tricky business.
* To avoid random memory issues later, just panic here and ask user to
* upgrade bootloader to one which doesn't enable IOC
*/
if (read_aux_reg(ARC_REG_IO_COH_ENABLE) & ARC_IO_COH_ENABLE_BIT)
panic("IOC already enabled, please upgrade bootloader!\n");
if (!ioc_enable)
return;
/* /*
* As for today we don't support both IOC and ZONE_HIGHMEM enabled * As for today we don't support both IOC and ZONE_HIGHMEM enabled
* simultaneously. This happens because as of today IOC aperture covers * simultaneously. This happens because as of today IOC aperture covers
@ -1187,8 +1201,8 @@ noinline void __init arc_ioc_setup(void)
panic("IOC Aperture start must be aligned to the size of the aperture"); panic("IOC Aperture start must be aligned to the size of the aperture");
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, ioc_base >> 12); write_aux_reg(ARC_REG_IO_COH_AP0_BASE, ioc_base >> 12);
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1); write_aux_reg(ARC_REG_IO_COH_PARTIAL, ARC_IO_COH_PARTIAL_BIT);
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1); write_aux_reg(ARC_REG_IO_COH_ENABLE, ARC_IO_COH_ENABLE_BIT);
/* Re-enable L1 dcache */ /* Re-enable L1 dcache */
__dc_enable(); __dc_enable();
@ -1265,7 +1279,7 @@ void __init arc_cache_init_master(void)
if (is_isa_arcv2() && l2_line_sz && !slc_enable) if (is_isa_arcv2() && l2_line_sz && !slc_enable)
arc_slc_disable(); arc_slc_disable();
if (is_isa_arcv2() && ioc_enable) if (is_isa_arcv2() && ioc_exists)
arc_ioc_setup(); arc_ioc_setup();
if (is_isa_arcv2() && l2_line_sz && slc_enable) { if (is_isa_arcv2() && l2_line_sz && slc_enable) {

View file

@ -1079,14 +1079,21 @@ choice
Say Y here if you want kernel low-level debugging support Say Y here if you want kernel low-level debugging support
on SOCFPGA(Cyclone 5 and Arria 5) based platforms. on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
config DEBUG_SOCFPGA_UART1 config DEBUG_SOCFPGA_ARRIA10_UART1
depends on ARCH_SOCFPGA depends on ARCH_SOCFPGA
bool "Use SOCFPGA UART1 for low-level debug" bool "Use SOCFPGA Arria10 UART1 for low-level debug"
select DEBUG_UART_8250 select DEBUG_UART_8250
help help
Say Y here if you want kernel low-level debugging support Say Y here if you want kernel low-level debugging support
on SOCFPGA(Arria 10) based platforms. on SOCFPGA(Arria 10) based platforms.
config DEBUG_SOCFPGA_CYCLONE5_UART1
depends on ARCH_SOCFPGA
bool "Use SOCFPGA Cyclone 5 UART1 for low-level debug"
select DEBUG_UART_8250
help
Say Y here if you want kernel low-level debugging support
on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
config DEBUG_SUN9I_UART0 config DEBUG_SUN9I_UART0
bool "Kernel low-level debugging messages via sun9i UART0" bool "Kernel low-level debugging messages via sun9i UART0"
@ -1647,7 +1654,8 @@ config DEBUG_UART_PHYS
default 0xfe800000 if ARCH_IOP32X default 0xfe800000 if ARCH_IOP32X
default 0xff690000 if DEBUG_RK32_UART2 default 0xff690000 if DEBUG_RK32_UART2
default 0xffc02000 if DEBUG_SOCFPGA_UART0 default 0xffc02000 if DEBUG_SOCFPGA_UART0
default 0xffc02100 if DEBUG_SOCFPGA_UART1 default 0xffc02100 if DEBUG_SOCFPGA_ARRIA10_UART1
default 0xffc03000 if DEBUG_SOCFPGA_CYCLONE5_UART1
default 0xffd82340 if ARCH_IOP13XX default 0xffd82340 if ARCH_IOP13XX
default 0xffe40000 if DEBUG_RCAR_GEN1_SCIF0 default 0xffe40000 if DEBUG_RCAR_GEN1_SCIF0
default 0xffe42000 if DEBUG_RCAR_GEN1_SCIF2 default 0xffe42000 if DEBUG_RCAR_GEN1_SCIF2
@ -1754,7 +1762,8 @@ config DEBUG_UART_VIRT
default 0xfeb30c00 if DEBUG_KEYSTONE_UART0 default 0xfeb30c00 if DEBUG_KEYSTONE_UART0
default 0xfeb31000 if DEBUG_KEYSTONE_UART1 default 0xfeb31000 if DEBUG_KEYSTONE_UART1
default 0xfec02000 if DEBUG_SOCFPGA_UART0 default 0xfec02000 if DEBUG_SOCFPGA_UART0
default 0xfec02100 if DEBUG_SOCFPGA_UART1 default 0xfec02100 if DEBUG_SOCFPGA_ARRIA10_UART1
default 0xfec03000 if DEBUG_SOCFPGA_CYCLONE5_UART1
default 0xfec12000 if (DEBUG_MVEBU_UART0 || DEBUG_MVEBU_UART0_ALTERNATE) && ARCH_MVEBU default 0xfec12000 if (DEBUG_MVEBU_UART0 || DEBUG_MVEBU_UART0_ALTERNATE) && ARCH_MVEBU
default 0xfec12100 if DEBUG_MVEBU_UART1_ALTERNATE default 0xfec12100 if DEBUG_MVEBU_UART1_ALTERNATE
default 0xfec10000 if DEBUG_SIRFATLAS7_UART0 default 0xfec10000 if DEBUG_SIRFATLAS7_UART0
@ -1803,9 +1812,9 @@ config DEBUG_UART_8250_WORD
depends on DEBUG_LL_UART_8250 || DEBUG_UART_8250 depends on DEBUG_LL_UART_8250 || DEBUG_UART_8250
depends on DEBUG_UART_8250_SHIFT >= 2 depends on DEBUG_UART_8250_SHIFT >= 2
default y if DEBUG_PICOXCELL_UART || \ default y if DEBUG_PICOXCELL_UART || \
DEBUG_SOCFPGA_UART0 || DEBUG_SOCFPGA_UART1 || \ DEBUG_SOCFPGA_UART0 || DEBUG_SOCFPGA_ARRIA10_UART1 || \
DEBUG_KEYSTONE_UART0 || DEBUG_KEYSTONE_UART1 || \ DEBUG_SOCFPGA_CYCLONE5_UART1 || DEBUG_KEYSTONE_UART0 || \
DEBUG_ALPINE_UART0 || \ DEBUG_KEYSTONE_UART1 || DEBUG_ALPINE_UART0 || \
DEBUG_DAVINCI_DMx_UART0 || DEBUG_DAVINCI_DA8XX_UART1 || \ DEBUG_DAVINCI_DMx_UART0 || DEBUG_DAVINCI_DA8XX_UART1 || \
DEBUG_DAVINCI_DA8XX_UART2 || DEBUG_BCM_IPROC_UART3 || \ DEBUG_DAVINCI_DA8XX_UART2 || DEBUG_BCM_IPROC_UART3 || \
DEBUG_BCM_KONA_UART || DEBUG_RK32_UART2 DEBUG_BCM_KONA_UART || DEBUG_RK32_UART2

View file

@ -577,7 +577,7 @@
bus-width = <4>; bus-width = <4>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&mmc2_pins>; pinctrl-0 = <&mmc2_pins>;
cd-gpios = <&gpio2 2 GPIO_ACTIVE_LOW>; cd-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
}; };
&sham { &sham {

View file

@ -45,7 +45,7 @@
}; };
/* The voltage to the MMC card is hardwired at 3.3V */ /* The voltage to the MMC card is hardwired at 3.3V */
vmmc: fixedregulator@0 { vmmc: regulator-vmmc {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vmmc"; regulator-name = "vmmc";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
@ -53,7 +53,7 @@
regulator-boot-on; regulator-boot-on;
}; };
veth: fixedregulator@0 { veth: regulator-veth {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "veth"; regulator-name = "veth";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;

View file

@ -145,7 +145,7 @@
}; };
/* The voltage to the MMC card is hardwired at 3.3V */ /* The voltage to the MMC card is hardwired at 3.3V */
vmmc: fixedregulator@0 { vmmc: regulator-vmmc {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vmmc"; regulator-name = "vmmc";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
@ -153,7 +153,7 @@
regulator-boot-on; regulator-boot-on;
}; };
veth: fixedregulator@0 { veth: regulator-veth {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "veth"; regulator-name = "veth";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;

View file

@ -44,7 +44,7 @@
}; };
/* The voltage to the MMC card is hardwired at 3.3V */ /* The voltage to the MMC card is hardwired at 3.3V */
vmmc: fixedregulator@0 { vmmc: regulator-vmmc {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vmmc"; regulator-name = "vmmc";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
@ -52,7 +52,7 @@
regulator-boot-on; regulator-boot-on;
}; };
veth: fixedregulator@0 { veth: regulator-veth {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "veth"; regulator-name = "veth";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
@ -567,4 +567,3 @@
}; };
}; };
}; };

View file

@ -360,7 +360,7 @@
}; };
hsotg: hsotg@12480000 { hsotg: hsotg@12480000 {
compatible = "snps,dwc2"; compatible = "samsung,s3c6400-hsotg", "snps,dwc2";
reg = <0x12480000 0x20000>; reg = <0x12480000 0x20000>;
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_USBOTG>; clocks = <&cmu CLK_USBOTG>;

View file

@ -224,7 +224,7 @@
ldo13_reg: LDO13 { ldo13_reg: LDO13 {
regulator-name = "vddq_mmc2"; regulator-name = "vddq_mmc2";
regulator-min-microvolt = <2800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <2800000>; regulator-max-microvolt = <2800000>;
}; };

View file

@ -609,13 +609,14 @@
}; };
touchscreen@2a { touchscreen@2a {
compatible = "eeti,egalax_ts"; compatible = "eeti,exc3000";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ts>; pinctrl-0 = <&pinctrl_ts>;
reg = <0x2a>; reg = <0x2a>;
interrupt-parent = <&gpio1>; interrupt-parent = <&gpio1>;
interrupts = <8 IRQ_TYPE_LEVEL_LOW>; interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
wakeup-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; touchscreen-inverted-x;
touchscreen-swapped-x-y;
status = "disabled"; status = "disabled";
}; };

View file

@ -180,7 +180,7 @@
clocks = <&soc_clocks MMP2_CLK_GPIO>; clocks = <&soc_clocks MMP2_CLK_GPIO>;
resets = <&soc_clocks MMP2_CLK_GPIO>; resets = <&soc_clocks MMP2_CLK_GPIO>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <1>; #interrupt-cells = <2>;
ranges; ranges;
gcb0: gpio@d4019000 { gcb0: gpio@d4019000 {

View file

@ -35,7 +35,7 @@
clocks = <&clks CLK_NONE>; clocks = <&clks CLK_NONE>;
}; };
pxa27x_ohci: usb@4c000000 { usb0: usb@4c000000 {
compatible = "marvell,pxa-ohci"; compatible = "marvell,pxa-ohci";
reg = <0x4c000000 0x10000>; reg = <0x4c000000 0x10000>;
interrupts = <3>; interrupts = <3>;

View file

@ -117,13 +117,6 @@
status = "disabled"; status = "disabled";
}; };
usb0: ohci@4c000000 {
compatible = "marvell,pxa-ohci";
reg = <0x4c000000 0x10000>;
interrupts = <3>;
status = "disabled";
};
mmc0: mmc@41100000 { mmc0: mmc@41100000 {
compatible = "marvell,pxa-mmc"; compatible = "marvell,pxa-mmc";
reg = <0x41100000 0x1000>; reg = <0x41100000 0x1000>;

View file

@ -204,7 +204,7 @@
status = "disabled"; status = "disabled";
}; };
pxa3xx_ohci: usb@4c000000 { usb0: usb@4c000000 {
compatible = "marvell,pxa-ohci"; compatible = "marvell,pxa-ohci";
reg = <0x4c000000 0x10000>; reg = <0x4c000000 0x10000>;
interrupts = <3>; interrupts = <3>;

View file

@ -489,8 +489,6 @@
}; };
&lvds1 { &lvds1 {
status = "okay";
ports { ports {
port@1 { port@1 {
lvds_connector: endpoint { lvds_connector: endpoint {

View file

@ -479,8 +479,6 @@
}; };
&lvds0 { &lvds0 {
status = "okay";
ports { ports {
port@1 { port@1 {
lvds_connector: endpoint { lvds_connector: endpoint {

View file

@ -482,8 +482,6 @@
}; };
&lvds0 { &lvds0 {
status = "okay";
ports { ports {
port@1 { port@1 {
lvds_connector: endpoint { lvds_connector: endpoint {

View file

@ -25,7 +25,7 @@
vcc_flash: flash-regulator { vcc_flash: flash-regulator {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vcc_sys"; regulator-name = "vcc_flash";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
startup-delay-us = <150>; startup-delay-us = <150>;

View file

@ -66,7 +66,7 @@
arm-pmu { arm-pmu {
compatible = "arm,cortex-a7-pmu"; compatible = "arm,cortex-a7-pmu";
interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
}; };
timer { timer {
@ -541,7 +541,7 @@
compatible = "rockchip,gpio-bank"; compatible = "rockchip,gpio-bank";
reg = <0x20030000 0x100>; reg = <0x20030000 0x100>;
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&xin24m>; clocks = <&cru PCLK_GPIO0_PMU>;
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;
@ -554,7 +554,7 @@
compatible = "rockchip,gpio-bank"; compatible = "rockchip,gpio-bank";
reg = <0x10310000 0x100>; reg = <0x10310000 0x100>;
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&xin24m>; clocks = <&cru PCLK_GPIO1>;
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;
@ -567,7 +567,7 @@
compatible = "rockchip,gpio-bank"; compatible = "rockchip,gpio-bank";
reg = <0x10320000 0x100>; reg = <0x10320000 0x100>;
interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&xin24m>; clocks = <&cru PCLK_GPIO2>;
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;
@ -580,7 +580,7 @@
compatible = "rockchip,gpio-bank"; compatible = "rockchip,gpio-bank";
reg = <0x10330000 0x100>; reg = <0x10330000 0x100>;
interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&xin24m>; clocks = <&cru PCLK_GPIO3>;
gpio-controller; gpio-controller;
#gpio-cells = <2>; #gpio-cells = <2>;

View file

@ -63,8 +63,6 @@
compatible = "gpio-keys-polled"; compatible = "gpio-keys-polled";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&key_pins_inet9f>; pinctrl-0 = <&key_pins_inet9f>;
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <20>; poll-interval = <20>;
left-joystick-left { left-joystick-left {

View file

@ -76,8 +76,6 @@
gpio-keys { gpio-keys {
compatible = "gpio-keys"; compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
back { back {
label = "Key Back"; label = "Key Back";

View file

@ -530,8 +530,6 @@
}; };
hdmi_out: port@1 { hdmi_out: port@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>; reg = <1>;
}; };
}; };

View file

@ -104,8 +104,6 @@
}; };
hdmi_out: port@1 { hdmi_out: port@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>; reg = <1>;
}; };
}; };

View file

@ -201,7 +201,7 @@
}; };
pmu { pmu {
compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu"; compatible = "arm,cortex-a7-pmu";
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,

View file

@ -183,7 +183,7 @@
}; };
pmu { pmu {
compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu"; compatible = "arm,cortex-a7-pmu";
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>, interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
}; };
@ -639,8 +639,6 @@
}; };
hdmi_out: port@1 { hdmi_out: port@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>; reg = <1>;
}; };
}; };

View file

@ -47,19 +47,19 @@
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp@648000000 { opp-648000000 {
opp-hz = /bits/ 64 <648000000>; opp-hz = /bits/ 64 <648000000>;
opp-microvolt = <1040000 1040000 1300000>; opp-microvolt = <1040000 1040000 1300000>;
clock-latency-ns = <244144>; /* 8 32k periods */ clock-latency-ns = <244144>; /* 8 32k periods */
}; };
opp@816000000 { opp-816000000 {
opp-hz = /bits/ 64 <816000000>; opp-hz = /bits/ 64 <816000000>;
opp-microvolt = <1100000 1100000 1300000>; opp-microvolt = <1100000 1100000 1300000>;
clock-latency-ns = <244144>; /* 8 32k periods */ clock-latency-ns = <244144>; /* 8 32k periods */
}; };
opp@1008000000 { opp-1008000000 {
opp-hz = /bits/ 64 <1008000000>; opp-hz = /bits/ 64 <1008000000>;
opp-microvolt = <1200000 1200000 1300000>; opp-microvolt = <1200000 1200000 1300000>;
clock-latency-ns = <244144>; /* 8 32k periods */ clock-latency-ns = <244144>; /* 8 32k periods */
@ -122,7 +122,7 @@
soc { soc {
system-control@1c00000 { system-control@1c00000 {
compatible = "allwinner,sun8i-h3-system-control"; compatible = "allwinner,sun8i-h3-system-control";
reg = <0x01c00000 0x30>; reg = <0x01c00000 0x1000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
ranges; ranges;

View file

@ -103,13 +103,13 @@
}; };
&cpu0_opp_table { &cpu0_opp_table {
opp@1104000000 { opp-1104000000 {
opp-hz = /bits/ 64 <1104000000>; opp-hz = /bits/ 64 <1104000000>;
opp-microvolt = <1320000>; opp-microvolt = <1320000>;
clock-latency-ns = <244144>; /* 8 32k periods */ clock-latency-ns = <244144>; /* 8 32k periods */
}; };
opp@1200000000 { opp-1200000000 {
opp-hz = /bits/ 64 <1200000000>; opp-hz = /bits/ 64 <1200000000>;
opp-microvolt = <1320000>; opp-microvolt = <1320000>;
clock-latency-ns = <244144>; /* 8 32k periods */ clock-latency-ns = <244144>; /* 8 32k periods */

View file

@ -78,7 +78,7 @@
}; };
&mmc0 { &mmc0 {
pinctrl-0 = <&mmc0_pins_a>; pinctrl-0 = <&mmc0_pins>;
pinctrl-names = "default"; pinctrl-names = "default";
broken-cd; broken-cd;
bus-width = <4>; bus-width = <4>;
@ -87,7 +87,7 @@
}; };
&uart0 { &uart0 {
pinctrl-0 = <&uart0_pins_a>; pinctrl-0 = <&uart0_pb_pins>;
pinctrl-names = "default"; pinctrl-names = "default";
status = "okay"; status = "okay";
}; };

View file

@ -292,17 +292,17 @@
interrupt-controller; interrupt-controller;
#interrupt-cells = <3>; #interrupt-cells = <3>;
i2c0_pins: i2c0 { i2c0_pins: i2c0-pins {
pins = "PB6", "PB7"; pins = "PB6", "PB7";
function = "i2c0"; function = "i2c0";
}; };
uart0_pins_a: uart0@0 { uart0_pb_pins: uart0-pb-pins {
pins = "PB8", "PB9"; pins = "PB8", "PB9";
function = "uart0"; function = "uart0";
}; };
mmc0_pins_a: mmc0@0 { mmc0_pins: mmc0-pins {
pins = "PF0", "PF1", "PF2", "PF3", pins = "PF0", "PF1", "PF2", "PF3",
"PF4", "PF5"; "PF4", "PF5";
function = "mmc0"; function = "mmc0";
@ -310,7 +310,7 @@
bias-pull-up; bias-pull-up;
}; };
mmc1_pins: mmc1 { mmc1_pins: mmc1-pins {
pins = "PG0", "PG1", "PG2", "PG3", pins = "PG0", "PG1", "PG2", "PG3",
"PG4", "PG5"; "PG4", "PG5";
function = "mmc1"; function = "mmc1";
@ -318,7 +318,7 @@
bias-pull-up; bias-pull-up;
}; };
spi0_pins: spi0 { spi0_pins: spi0-pins {
pins = "PC0", "PC1", "PC2", "PC3"; pins = "PC0", "PC1", "PC2", "PC3";
function = "spi0"; function = "spi0";
}; };

View file

@ -349,6 +349,13 @@ do { \
#define __get_user_asm_byte(x, addr, err) \ #define __get_user_asm_byte(x, addr, err) \
__get_user_asm(x, addr, err, ldrb) __get_user_asm(x, addr, err, ldrb)
#if __LINUX_ARM_ARCH__ >= 6
#define __get_user_asm_half(x, addr, err) \
__get_user_asm(x, addr, err, ldrh)
#else
#ifndef __ARMEB__ #ifndef __ARMEB__
#define __get_user_asm_half(x, __gu_addr, err) \ #define __get_user_asm_half(x, __gu_addr, err) \
({ \ ({ \
@ -367,6 +374,8 @@ do { \
}) })
#endif #endif
#endif /* __LINUX_ARM_ARCH__ >= 6 */
#define __get_user_asm_word(x, addr, err) \ #define __get_user_asm_word(x, addr, err) \
__get_user_asm(x, addr, err, ldr) __get_user_asm(x, addr, err, ldr)
#endif #endif
@ -442,6 +451,13 @@ do { \
#define __put_user_asm_byte(x, __pu_addr, err) \ #define __put_user_asm_byte(x, __pu_addr, err) \
__put_user_asm(x, __pu_addr, err, strb) __put_user_asm(x, __pu_addr, err, strb)
#if __LINUX_ARM_ARCH__ >= 6
#define __put_user_asm_half(x, __pu_addr, err) \
__put_user_asm(x, __pu_addr, err, strh)
#else
#ifndef __ARMEB__ #ifndef __ARMEB__
#define __put_user_asm_half(x, __pu_addr, err) \ #define __put_user_asm_half(x, __pu_addr, err) \
({ \ ({ \
@ -458,6 +474,8 @@ do { \
}) })
#endif #endif
#endif /* __LINUX_ARM_ARCH__ >= 6 */
#define __put_user_asm_word(x, __pu_addr, err) \ #define __put_user_asm_word(x, __pu_addr, err) \
__put_user_asm(x, __pu_addr, err, str) __put_user_asm(x, __pu_addr, err, str)

View file

@ -42,6 +42,12 @@ _ASM_NOKPROBE(__get_user_1)
ENTRY(__get_user_2) ENTRY(__get_user_2)
check_uaccess r0, 2, r1, r2, __get_user_bad check_uaccess r0, 2, r1, r2, __get_user_bad
#if __LINUX_ARM_ARCH__ >= 6
2: TUSER(ldrh) r2, [r0]
#else
#ifdef CONFIG_CPU_USE_DOMAINS #ifdef CONFIG_CPU_USE_DOMAINS
rb .req ip rb .req ip
2: ldrbt r2, [r0], #1 2: ldrbt r2, [r0], #1
@ -56,6 +62,9 @@ rb .req r0
#else #else
orr r2, rb, r2, lsl #8 orr r2, rb, r2, lsl #8
#endif #endif
#endif /* __LINUX_ARM_ARCH__ >= 6 */
mov r0, #0 mov r0, #0
ret lr ret lr
ENDPROC(__get_user_2) ENDPROC(__get_user_2)
@ -145,7 +154,9 @@ _ASM_NOKPROBE(__get_user_bad8)
.pushsection __ex_table, "a" .pushsection __ex_table, "a"
.long 1b, __get_user_bad .long 1b, __get_user_bad
.long 2b, __get_user_bad .long 2b, __get_user_bad
#if __LINUX_ARM_ARCH__ < 6
.long 3b, __get_user_bad .long 3b, __get_user_bad
#endif
.long 4b, __get_user_bad .long 4b, __get_user_bad
.long 5b, __get_user_bad8 .long 5b, __get_user_bad8
.long 6b, __get_user_bad8 .long 6b, __get_user_bad8

View file

@ -41,16 +41,13 @@ ENDPROC(__put_user_1)
ENTRY(__put_user_2) ENTRY(__put_user_2)
check_uaccess r0, 2, r1, ip, __put_user_bad check_uaccess r0, 2, r1, ip, __put_user_bad
mov ip, r2, lsr #8 #if __LINUX_ARM_ARCH__ >= 6
#ifdef CONFIG_THUMB2_KERNEL
#ifndef __ARMEB__ 2: TUSER(strh) r2, [r0]
2: TUSER(strb) r2, [r0]
3: TUSER(strb) ip, [r0, #1]
#else #else
2: TUSER(strb) ip, [r0]
3: TUSER(strb) r2, [r0, #1] mov ip, r2, lsr #8
#endif
#else /* !CONFIG_THUMB2_KERNEL */
#ifndef __ARMEB__ #ifndef __ARMEB__
2: TUSER(strb) r2, [r0], #1 2: TUSER(strb) r2, [r0], #1
3: TUSER(strb) ip, [r0] 3: TUSER(strb) ip, [r0]
@ -58,7 +55,8 @@ ENTRY(__put_user_2)
2: TUSER(strb) ip, [r0], #1 2: TUSER(strb) ip, [r0], #1
3: TUSER(strb) r2, [r0] 3: TUSER(strb) r2, [r0]
#endif #endif
#endif /* CONFIG_THUMB2_KERNEL */
#endif /* __LINUX_ARM_ARCH__ >= 6 */
mov r0, #0 mov r0, #0
ret lr ret lr
ENDPROC(__put_user_2) ENDPROC(__put_user_2)
@ -91,7 +89,9 @@ ENDPROC(__put_user_bad)
.pushsection __ex_table, "a" .pushsection __ex_table, "a"
.long 1b, __put_user_bad .long 1b, __put_user_bad
.long 2b, __put_user_bad .long 2b, __put_user_bad
#if __LINUX_ARM_ARCH__ < 6
.long 3b, __put_user_bad .long 3b, __put_user_bad
#endif
.long 4b, __put_user_bad .long 4b, __put_user_bad
.long 5b, __put_user_bad .long 5b, __put_user_bad
.long 6b, __put_user_bad .long 6b, __put_user_bad

View file

@ -200,10 +200,10 @@ void __init omap_check_revision(void)
printk(KERN_INFO "Unknown OMAP cpu type: 0x%02x\n", cpu_type); printk(KERN_INFO "Unknown OMAP cpu type: 0x%02x\n", cpu_type);
} }
printk(KERN_INFO "OMAP%04x", omap_revision >> 16); pr_info("OMAP%04x", omap_revision >> 16);
if ((omap_revision >> 8) & 0xff) if ((omap_revision >> 8) & 0xff)
printk(KERN_INFO "%x", (omap_revision >> 8) & 0xff); pr_cont("%x", (omap_revision >> 8) & 0xff);
printk(KERN_INFO " revision %i handled as %02xxx id: %08x%08x\n", pr_cont(" revision %i handled as %02xxx id: %08x%08x\n",
die_rev, omap_revision & 0xff, system_serial_low, die_rev, omap_revision & 0xff, system_serial_low,
system_serial_high); system_serial_high);
} }

View file

@ -199,8 +199,8 @@ void __init omap2xxx_check_revision(void)
pr_info("%s", soc_name); pr_info("%s", soc_name);
if ((omap_rev() >> 8) & 0x0f) if ((omap_rev() >> 8) & 0x0f)
pr_info("%s", soc_rev); pr_cont("%s", soc_rev);
pr_info("\n"); pr_cont("\n");
} }
#define OMAP3_SHOW_FEATURE(feat) \ #define OMAP3_SHOW_FEATURE(feat) \

View file

@ -191,7 +191,7 @@
pinctrl-names = "default"; pinctrl-names = "default";
}; };
&pinctrl_aobus { &gpio_ao {
gpio-line-names = "UART TX", "UART RX", "Power Control", "Power Key In", gpio-line-names = "UART TX", "UART RX", "Power Control", "Power Key In",
"VCCK En", "CON1 Header Pin31", "VCCK En", "CON1 Header Pin31",
"I2S Header Pin6", "IR In", "I2S Header Pin7", "I2S Header Pin6", "IR In", "I2S Header Pin7",
@ -201,7 +201,7 @@
""; "";
}; };
&pinctrl_periphs { &gpio {
gpio-line-names = /* Bank GPIOZ */ gpio-line-names = /* Bank GPIOZ */
"Eth MDIO", "Eth MDC", "Eth RGMII RX Clk", "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
"Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2", "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",

View file

@ -187,7 +187,7 @@
pinctrl-names = "default"; pinctrl-names = "default";
}; };
&pinctrl_aobus { &gpio_ao {
gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En", gpio-line-names = "UART TX", "UART RX", "VCCK En", "TF 3V3/1V8 En",
"USB HUB nRESET", "USB OTG Power En", "USB HUB nRESET", "USB OTG Power En",
"J7 Header Pin2", "IR In", "J7 Header Pin4", "J7 Header Pin2", "IR In", "J7 Header Pin4",
@ -197,7 +197,7 @@
""; "";
}; };
&pinctrl_periphs { &gpio {
gpio-line-names = /* Bank GPIOZ */ gpio-line-names = /* Bank GPIOZ */
"Eth MDIO", "Eth MDC", "Eth RGMII RX Clk", "Eth MDIO", "Eth MDC", "Eth RGMII RX Clk",
"Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2", "Eth RX DV", "Eth RX D0", "Eth RX D1", "Eth RX D2",

View file

@ -112,7 +112,7 @@
linux,rc-map-name = "rc-geekbox"; linux,rc-map-name = "rc-geekbox";
}; };
&pinctrl_aobus { &gpio_ao {
gpio-line-names = "UART TX", gpio-line-names = "UART TX",
"UART RX", "UART RX",
"Power Key In", "Power Key In",
@ -127,7 +127,7 @@
""; "";
}; };
&pinctrl_periphs { &gpio {
gpio-line-names = /* Bank GPIOZ */ gpio-line-names = /* Bank GPIOZ */
"", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "",

View file

@ -163,7 +163,7 @@
}; };
}; };
&pinctrl_aobus { &gpio_ao {
gpio-line-names = "UART TX", gpio-line-names = "UART TX",
"UART RX", "UART RX",
"Blue LED", "Blue LED",
@ -178,7 +178,7 @@
"7J1 Header Pin15"; "7J1 Header Pin15";
}; };
&pinctrl_periphs { &gpio {
gpio-line-names = /* Bank GPIOZ */ gpio-line-names = /* Bank GPIOZ */
"", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "",

View file

@ -18,8 +18,8 @@
/ { / {
compatible = "samsung,exynos5433"; compatible = "samsung,exynos5433";
#address-cells = <1>; #address-cells = <2>;
#size-cells = <1>; #size-cells = <2>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
@ -235,7 +235,7 @@
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
ranges; ranges = <0x0 0x0 0x0 0x18000000>;
arm_a53_pmu { arm_a53_pmu {
compatible = "arm,cortex-a53-pmu", "arm,armv8-pmuv3"; compatible = "arm,cortex-a53-pmu", "arm,armv8-pmuv3";

View file

@ -12,8 +12,8 @@
/ { / {
compatible = "samsung,exynos7"; compatible = "samsung,exynos7";
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
#address-cells = <1>; #address-cells = <2>;
#size-cells = <1>; #size-cells = <2>;
aliases { aliases {
pinctrl0 = &pinctrl_alive; pinctrl0 = &pinctrl_alive;
@ -70,7 +70,7 @@
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
ranges; ranges = <0 0 0 0x18000000>;
chipid@10000000 { chipid@10000000 {
compatible = "samsung,exynos4210-chipid"; compatible = "samsung,exynos4210-chipid";

View file

@ -1589,7 +1589,7 @@
regulator-name = "VDD_HDMI_5V0"; regulator-name = "VDD_HDMI_5V0";
regulator-min-microvolt = <5000000>; regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>; regulator-max-microvolt = <5000000>;
gpio = <&exp1 12 GPIO_ACTIVE_LOW>; gpio = <&exp1 12 GPIO_ACTIVE_HIGH>;
enable-active-high; enable-active-high;
vin-supply = <&vdd_5v0_sys>; vin-supply = <&vdd_5v0_sys>;
}; };

View file

@ -58,13 +58,13 @@
clock-accuracy = <100>; clock-accuracy = <100>;
}; };
dpdma_clk: dpdma_clk { dpdma_clk: dpdma-clk {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0x0>; #clock-cells = <0x0>;
clock-frequency = <533000000>; clock-frequency = <533000000>;
}; };
drm_clock: drm_clock { drm_clock: drm-clock {
compatible = "fixed-clock"; compatible = "fixed-clock";
#clock-cells = <0x0>; #clock-cells = <0x0>;
clock-frequency = <262750000>; clock-frequency = <262750000>;

View file

@ -82,7 +82,7 @@
linux,default-trigger = "bluetooth-power"; linux,default-trigger = "bluetooth-power";
}; };
vbus_det { /* U5 USB5744 VBUS detection via MIO25 */ vbus-det { /* U5 USB5744 VBUS detection via MIO25 */
label = "vbus_det"; label = "vbus_det";
gpios = <&gpio 25 GPIO_ACTIVE_HIGH>; gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
default-state = "on"; default-state = "on";
@ -98,7 +98,7 @@
regulator-boot-on; regulator-boot-on;
}; };
sdio_pwrseq: sdio_pwrseq { sdio_pwrseq: sdio-pwrseq {
compatible = "mmc-pwrseq-simple"; compatible = "mmc-pwrseq-simple";
reset-gpios = <&gpio 7 GPIO_ACTIVE_LOW>; /* WIFI_EN */ reset-gpios = <&gpio 7 GPIO_ACTIVE_LOW>; /* WIFI_EN */
post-power-on-delay-ms = <10>; post-power-on-delay-ms = <10>;

View file

@ -53,7 +53,7 @@
leds { leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
heartbeat_led { heartbeat-led {
label = "heartbeat"; label = "heartbeat";
gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat"; linux,default-trigger = "heartbeat";
@ -139,25 +139,25 @@
* 7, 10 - 17 - not connected * 7, 10 - 17 - not connected
*/ */
gtr_sel0 { gtr-sel0 {
gpio-hog; gpio-hog;
gpios = <0 0>; gpios = <0 0>;
output-low; /* PCIE = 0, DP = 1 */ output-low; /* PCIE = 0, DP = 1 */
line-name = "sel0"; line-name = "sel0";
}; };
gtr_sel1 { gtr-sel1 {
gpio-hog; gpio-hog;
gpios = <1 0>; gpios = <1 0>;
output-high; /* PCIE = 0, DP = 1 */ output-high; /* PCIE = 0, DP = 1 */
line-name = "sel1"; line-name = "sel1";
}; };
gtr_sel2 { gtr-sel2 {
gpio-hog; gpio-hog;
gpios = <2 0>; gpios = <2 0>;
output-high; /* PCIE = 0, USB0 = 1 */ output-high; /* PCIE = 0, USB0 = 1 */
line-name = "sel2"; line-name = "sel2";
}; };
gtr_sel3 { gtr-sel3 {
gpio-hog; gpio-hog;
gpios = <3 0>; gpios = <3 0>;
output-high; /* PCIE = 0, SATA = 1 */ output-high; /* PCIE = 0, SATA = 1 */

View file

@ -53,7 +53,7 @@
leds { leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
heartbeat_led { heartbeat-led {
label = "heartbeat"; label = "heartbeat";
gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat"; linux,default-trigger = "heartbeat";

View file

@ -53,7 +53,7 @@
leds { leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
heartbeat_led { heartbeat-led {
label = "heartbeat"; label = "heartbeat";
gpios = <&gpio 23 GPIO_ACTIVE_HIGH>; gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat"; linux,default-trigger = "heartbeat";

View file

@ -71,7 +71,7 @@
}; };
}; };
cpu_opp_table: cpu_opp_table { cpu_opp_table: cpu-opp-table {
compatible = "operating-points-v2"; compatible = "operating-points-v2";
opp-shared; opp-shared;
opp00 { opp00 {
@ -124,7 +124,7 @@
<1 10 0xf08>; <1 10 0xf08>;
}; };
amba_apu: amba_apu@0 { amba_apu: amba-apu@0 {
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <2>; #address-cells = <2>;
#size-cells = <1>; #size-cells = <1>;

View file

@ -806,6 +806,7 @@ config SIBYTE_LITTLESUR
select SYS_SUPPORTS_BIG_ENDIAN select SYS_SUPPORTS_BIG_ENDIAN
select SYS_SUPPORTS_HIGHMEM select SYS_SUPPORTS_HIGHMEM
select SYS_SUPPORTS_LITTLE_ENDIAN select SYS_SUPPORTS_LITTLE_ENDIAN
select ZONE_DMA32 if 64BIT
config SIBYTE_SENTOSA config SIBYTE_SENTOSA
bool "Sibyte BCM91250E-Sentosa" bool "Sibyte BCM91250E-Sentosa"

View file

@ -266,7 +266,7 @@ int cvmx_cmd_queue_length(cvmx_cmd_queue_id_t queue_id)
} else { } else {
union cvmx_pko_mem_debug8 debug8; union cvmx_pko_mem_debug8 debug8;
debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8); debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8);
return debug8.cn58xx.doorbell; return debug8.cn50xx.doorbell;
} }
case CVMX_CMD_QUEUE_ZIP: case CVMX_CMD_QUEUE_ZIP:
case CVMX_CMD_QUEUE_DFA: case CVMX_CMD_QUEUE_DFA:

View file

@ -501,7 +501,7 @@ static void __init octeon_fdt_set_phy(int eth, int phy_addr)
if (phy_addr >= 256 && alt_phy > 0) { if (phy_addr >= 256 && alt_phy > 0) {
const struct fdt_property *phy_prop; const struct fdt_property *phy_prop;
struct fdt_property *alt_prop; struct fdt_property *alt_prop;
u32 phy_handle_name; fdt32_t phy_handle_name;
/* Use the alt phy node instead.*/ /* Use the alt phy node instead.*/
phy_prop = fdt_get_property(initial_boot_params, eth, "phy-handle", NULL); phy_prop = fdt_get_property(initial_boot_params, eth, "phy-handle", NULL);

View file

@ -611,7 +611,7 @@ static inline void cvmx_pko_get_port_status(uint64_t port_num, uint64_t clear,
pko_reg_read_idx.s.index = cvmx_pko_get_base_queue(port_num); pko_reg_read_idx.s.index = cvmx_pko_get_base_queue(port_num);
cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64); cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64);
debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8); debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8);
status->doorbell = debug8.cn58xx.doorbell; status->doorbell = debug8.cn50xx.doorbell;
} }
} }

View file

@ -71,8 +71,9 @@ static const char *hwcap_str[] = {
"div", "div",
"mac", "mac",
"l2c", "l2c",
"dx_regs", "fpu_dp",
"v2", "v2",
"dx_regs",
NULL, NULL,
}; };

View file

@ -213,30 +213,18 @@
* respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow * respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
* (i.e. carry out) is not stored anywhere, and is lost. * (i.e. carry out) is not stored anywhere, and is lost.
*/ */
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
do { \ do { \
if (__builtin_constant_p (bh) && (bh) == 0) \ if (__builtin_constant_p (bh) && (bh) == 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
: "=r" ((USItype)(sh)), \ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
"=&r" ((USItype)(sl)) \ else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
: "%r" ((USItype)(ah)), \ __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
"%r" ((USItype)(al)), \ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
"rI" ((USItype)(bl))); \
else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
__asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
: "=r" ((USItype)(sh)), \
"=&r" ((USItype)(sl)) \
: "%r" ((USItype)(ah)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
else \ else \
__asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
: "=r" ((USItype)(sh)), \ : "=r" (sh), "=&r" (sl) \
"=&r" ((USItype)(sl)) \ : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
: "%r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"%r" ((USItype)(al)), \
"rI" ((USItype)(bl))); \
} while (0) } while (0)
/* sub_ddmmss is used in op-2.h and udivmodti4.c and should be equivalent to /* sub_ddmmss is used in op-2.h and udivmodti4.c and should be equivalent to
@ -248,44 +236,24 @@
* and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, * and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
* and is lost. * and is lost.
*/ */
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
do { \ do { \
if (__builtin_constant_p (ah) && (ah) == 0) \ if (__builtin_constant_p (ah) && (ah) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
: "=r" ((USItype)(sh)), \ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
"=&r" ((USItype)(sl)) \ else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \
: "r" ((USItype)(bh)), \ __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
"rI" ((USItype)(al)), \ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
"r" ((USItype)(bl))); \
else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
: "=r" ((USItype)(sh)), \
"=&r" ((USItype)(sl)) \
: "r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else if (__builtin_constant_p (bh) && (bh) == 0) \ else if (__builtin_constant_p (bh) && (bh) == 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
: "=r" ((USItype)(sh)), \ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
"=&r" ((USItype)(sl)) \ else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
: "r" ((USItype)(ah)), \ __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
"rI" ((USItype)(al)), \ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
"r" ((USItype)(bl))); \
else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
__asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
: "=r" ((USItype)(sh)), \
"=&r" ((USItype)(sl)) \
: "r" ((USItype)(ah)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
else \ else \
__asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
: "=r" ((USItype)(sh)), \ : "=r" (sh), "=&r" (sl) \
"=&r" ((USItype)(sl)) \ : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
: "r" ((USItype)(ah)), \
"r" ((USItype)(bh)), \
"rI" ((USItype)(al)), \
"r" ((USItype)(bl))); \
} while (0) } while (0)
/* asm fragments for mul and div */ /* asm fragments for mul and div */
@ -294,13 +262,10 @@
* UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype * UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
* word product in HIGH_PROD and LOW_PROD. * word product in HIGH_PROD and LOW_PROD.
*/ */
#define umul_ppmm(ph, pl, m0, m1) \ #define umul_ppmm(ph, pl, m0, m1) \
do { \ do { \
USItype __m0 = (m0), __m1 = (m1); \ USItype __m0 = (m0), __m1 = (m1); \
__asm__ ("mulhwu %0,%1,%2" \ __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
: "=r" ((USItype)(ph)) \
: "%r" (__m0), \
"r" (__m1)); \
(pl) = __m0 * __m1; \ (pl) = __m0 * __m1; \
} while (0) } while (0)
@ -312,9 +277,10 @@
* significant bit of DENOMINATOR must be 1, then the pre-processor symbol * significant bit of DENOMINATOR must be 1, then the pre-processor symbol
* UDIV_NEEDS_NORMALIZATION is defined to 1. * UDIV_NEEDS_NORMALIZATION is defined to 1.
*/ */
#define udiv_qrnnd(q, r, n1, n0, d) \ #define udiv_qrnnd(q, r, n1, n0, d) \
do { \ do { \
UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ UWtype __d1, __d0, __q1, __q0; \
UWtype __r1, __r0, __m; \
__d1 = __ll_highpart (d); \ __d1 = __ll_highpart (d); \
__d0 = __ll_lowpart (d); \ __d0 = __ll_lowpart (d); \
\ \
@ -325,7 +291,7 @@
if (__r1 < __m) \ if (__r1 < __m) \
{ \ { \
__q1--, __r1 += (d); \ __q1--, __r1 += (d); \
if (__r1 >= (d)) /* we didn't get carry when adding to __r1 */ \ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
if (__r1 < __m) \ if (__r1 < __m) \
__q1--, __r1 += (d); \ __q1--, __r1 += (d); \
} \ } \

View file

@ -409,6 +409,7 @@ static inline void __iomem *ioremap(unsigned long offset, unsigned long size)
} }
#define ioremap_nocache(X,Y) ioremap((X),(Y)) #define ioremap_nocache(X,Y) ioremap((X),(Y))
#define ioremap_uc(X,Y) ioremap((X),(Y))
#define ioremap_wc(X,Y) ioremap((X),(Y)) #define ioremap_wc(X,Y) ioremap((X),(Y))
#define ioremap_wt(X,Y) ioremap((X),(Y)) #define ioremap_wt(X,Y) ioremap((X),(Y))

View file

@ -1270,6 +1270,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
const u8 tmp2 = bpf2sparc[TMP_REG_2]; const u8 tmp2 = bpf2sparc[TMP_REG_2];
u32 opcode = 0, rs2; u32 opcode = 0, rs2;
if (insn->dst_reg == BPF_REG_FP)
ctx->saw_frame_pointer = true;
ctx->tmp_2_used = true; ctx->tmp_2_used = true;
emit_loadimm(imm, tmp2, ctx); emit_loadimm(imm, tmp2, ctx);
@ -1308,6 +1311,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
const u8 tmp = bpf2sparc[TMP_REG_1]; const u8 tmp = bpf2sparc[TMP_REG_1];
u32 opcode = 0, rs2; u32 opcode = 0, rs2;
if (insn->dst_reg == BPF_REG_FP)
ctx->saw_frame_pointer = true;
switch (BPF_SIZE(code)) { switch (BPF_SIZE(code)) {
case BPF_W: case BPF_W:
opcode = ST32; opcode = ST32;
@ -1340,6 +1346,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
const u8 tmp2 = bpf2sparc[TMP_REG_2]; const u8 tmp2 = bpf2sparc[TMP_REG_2];
const u8 tmp3 = bpf2sparc[TMP_REG_3]; const u8 tmp3 = bpf2sparc[TMP_REG_3];
if (insn->dst_reg == BPF_REG_FP)
ctx->saw_frame_pointer = true;
ctx->tmp_1_used = true; ctx->tmp_1_used = true;
ctx->tmp_2_used = true; ctx->tmp_2_used = true;
ctx->tmp_3_used = true; ctx->tmp_3_used = true;
@ -1360,6 +1369,9 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
const u8 tmp2 = bpf2sparc[TMP_REG_2]; const u8 tmp2 = bpf2sparc[TMP_REG_2];
const u8 tmp3 = bpf2sparc[TMP_REG_3]; const u8 tmp3 = bpf2sparc[TMP_REG_3];
if (insn->dst_reg == BPF_REG_FP)
ctx->saw_frame_pointer = true;
ctx->tmp_1_used = true; ctx->tmp_1_used = true;
ctx->tmp_2_used = true; ctx->tmp_2_used = true;
ctx->tmp_3_used = true; ctx->tmp_3_used = true;
@ -1425,12 +1437,12 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
struct bpf_prog *tmp, *orig_prog = prog; struct bpf_prog *tmp, *orig_prog = prog;
struct sparc64_jit_data *jit_data; struct sparc64_jit_data *jit_data;
struct bpf_binary_header *header; struct bpf_binary_header *header;
u32 prev_image_size, image_size;
bool tmp_blinded = false; bool tmp_blinded = false;
bool extra_pass = false; bool extra_pass = false;
struct jit_ctx ctx; struct jit_ctx ctx;
u32 image_size;
u8 *image_ptr; u8 *image_ptr;
int pass; int pass, i;
if (!prog->jit_requested) if (!prog->jit_requested)
return orig_prog; return orig_prog;
@ -1461,27 +1473,52 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
header = jit_data->header; header = jit_data->header;
extra_pass = true; extra_pass = true;
image_size = sizeof(u32) * ctx.idx; image_size = sizeof(u32) * ctx.idx;
prev_image_size = image_size;
pass = 1;
goto skip_init_ctx; goto skip_init_ctx;
} }
memset(&ctx, 0, sizeof(ctx)); memset(&ctx, 0, sizeof(ctx));
ctx.prog = prog; ctx.prog = prog;
ctx.offset = kcalloc(prog->len, sizeof(unsigned int), GFP_KERNEL); ctx.offset = kmalloc_array(prog->len, sizeof(unsigned int), GFP_KERNEL);
if (ctx.offset == NULL) { if (ctx.offset == NULL) {
prog = orig_prog; prog = orig_prog;
goto out_off; goto out_off;
} }
/* Fake pass to detect features used, and get an accurate assessment /* Longest sequence emitted is for bswap32, 12 instructions. Pre-cook
* of what the final image size will be. * the offset array so that we converge faster.
*/ */
if (build_body(&ctx)) { for (i = 0; i < prog->len; i++)
prog = orig_prog; ctx.offset[i] = i * (12 * 4);
goto out_off;
prev_image_size = ~0U;
for (pass = 1; pass < 40; pass++) {
ctx.idx = 0;
build_prologue(&ctx);
if (build_body(&ctx)) {
prog = orig_prog;
goto out_off;
}
build_epilogue(&ctx);
if (bpf_jit_enable > 1)
pr_info("Pass %d: size = %u, seen = [%c%c%c%c%c%c]\n", pass,
ctx.idx * 4,
ctx.tmp_1_used ? '1' : ' ',
ctx.tmp_2_used ? '2' : ' ',
ctx.tmp_3_used ? '3' : ' ',
ctx.saw_frame_pointer ? 'F' : ' ',
ctx.saw_call ? 'C' : ' ',
ctx.saw_tail_call ? 'T' : ' ');
if (ctx.idx * 4 == prev_image_size)
break;
prev_image_size = ctx.idx * 4;
cond_resched();
} }
build_prologue(&ctx);
build_epilogue(&ctx);
/* Now we know the actual image size. */ /* Now we know the actual image size. */
image_size = sizeof(u32) * ctx.idx; image_size = sizeof(u32) * ctx.idx;
@ -1494,28 +1531,24 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
ctx.image = (u32 *)image_ptr; ctx.image = (u32 *)image_ptr;
skip_init_ctx: skip_init_ctx:
for (pass = 1; pass < 3; pass++) { ctx.idx = 0;
ctx.idx = 0;
build_prologue(&ctx); build_prologue(&ctx);
if (build_body(&ctx)) { if (build_body(&ctx)) {
bpf_jit_binary_free(header); bpf_jit_binary_free(header);
prog = orig_prog; prog = orig_prog;
goto out_off; goto out_off;
} }
build_epilogue(&ctx); build_epilogue(&ctx);
if (bpf_jit_enable > 1) if (ctx.idx * 4 != prev_image_size) {
pr_info("Pass %d: shrink = %d, seen = [%c%c%c%c%c%c]\n", pass, pr_err("bpf_jit: Failed to converge, prev_size=%u size=%d\n",
image_size - (ctx.idx * 4), prev_image_size, ctx.idx * 4);
ctx.tmp_1_used ? '1' : ' ', bpf_jit_binary_free(header);
ctx.tmp_2_used ? '2' : ' ', prog = orig_prog;
ctx.tmp_3_used ? '3' : ' ', goto out_off;
ctx.saw_frame_pointer ? 'F' : ' ',
ctx.saw_call ? 'C' : ' ',
ctx.saw_tail_call ? 'T' : ' ');
} }
if (bpf_jit_enable > 1) if (bpf_jit_enable > 1)

View file

@ -420,7 +420,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
r = -E2BIG; r = -E2BIG;
if (*nent >= maxnent) if (WARN_ON(*nent >= maxnent))
goto out; goto out;
do_cpuid_1_ent(entry, function, index); do_cpuid_1_ent(entry, function, index);
@ -729,6 +729,9 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
static int do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 func, static int do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 func,
u32 idx, int *nent, int maxnent, unsigned int type) u32 idx, int *nent, int maxnent, unsigned int type)
{ {
if (*nent >= maxnent)
return -E2BIG;
if (type == KVM_GET_EMULATED_CPUID) if (type == KVM_GET_EMULATED_CPUID)
return __do_cpuid_ent_emulated(entry, func, idx, nent, maxnent); return __do_cpuid_ent_emulated(entry, func, idx, nent, maxnent);

View file

@ -290,13 +290,14 @@ int kvm_set_shared_msr(unsigned slot, u64 value, u64 mask)
struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu); struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
int err; int err;
if (((value ^ smsr->values[slot].curr) & mask) == 0) value = (value & mask) | (smsr->values[slot].host & ~mask);
if (value == smsr->values[slot].curr)
return 0; return 0;
smsr->values[slot].curr = value;
err = wrmsrl_safe(shared_msrs_global.msrs[slot], value); err = wrmsrl_safe(shared_msrs_global.msrs[slot], value);
if (err) if (err)
return 1; return 1;
smsr->values[slot].curr = value;
if (!smsr->registered) { if (!smsr->registered) {
smsr->urn.on_user_return = kvm_on_user_return; smsr->urn.on_user_return = kvm_on_user_return;
user_return_notifier_register(&smsr->urn); user_return_notifier_register(&smsr->urn);
@ -1173,10 +1174,15 @@ u64 kvm_get_arch_capabilities(void)
* If TSX is disabled on the system, guests are also mitigated against * If TSX is disabled on the system, guests are also mitigated against
* TAA and clear CPU buffer mitigation is not required for guests. * TAA and clear CPU buffer mitigation is not required for guests.
*/ */
if (boot_cpu_has_bug(X86_BUG_TAA) && boot_cpu_has(X86_FEATURE_RTM) && if (!boot_cpu_has(X86_FEATURE_RTM))
(data & ARCH_CAP_TSX_CTRL_MSR)) data &= ~ARCH_CAP_TAA_NO;
else if (!boot_cpu_has_bug(X86_BUG_TAA))
data |= ARCH_CAP_TAA_NO;
else if (data & ARCH_CAP_TSX_CTRL_MSR)
data &= ~ARCH_CAP_MDS_NO; data &= ~ARCH_CAP_MDS_NO;
/* KVM does not emulate MSR_IA32_TSX_CTRL. */
data &= ~ARCH_CAP_TSX_CTRL_MSR;
return data; return data;
} }
@ -4111,6 +4117,7 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
case KVM_SET_NESTED_STATE: { case KVM_SET_NESTED_STATE: {
struct kvm_nested_state __user *user_kvm_nested_state = argp; struct kvm_nested_state __user *user_kvm_nested_state = argp;
struct kvm_nested_state kvm_state; struct kvm_nested_state kvm_state;
int idx;
r = -EINVAL; r = -EINVAL;
if (!kvm_x86_ops->set_nested_state) if (!kvm_x86_ops->set_nested_state)
@ -4132,7 +4139,9 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
if (kvm_state.flags == KVM_STATE_NESTED_RUN_PENDING) if (kvm_state.flags == KVM_STATE_NESTED_RUN_PENDING)
break; break;
idx = srcu_read_lock(&vcpu->kvm->srcu);
r = kvm_x86_ops->set_nested_state(vcpu, user_kvm_nested_state, &kvm_state); r = kvm_x86_ops->set_nested_state(vcpu, user_kvm_nested_state, &kvm_state);
srcu_read_unlock(&vcpu->kvm->srcu, idx);
break; break;
} }
default: default:

View file

@ -281,7 +281,7 @@ void vmalloc_sync_all(void)
return; return;
for (address = VMALLOC_START & PMD_MASK; for (address = VMALLOC_START & PMD_MASK;
address >= TASK_SIZE_MAX && address < FIXADDR_TOP; address >= TASK_SIZE_MAX && address < VMALLOC_END;
address += PMD_SIZE) { address += PMD_SIZE) {
struct page *page; struct page *page;

View file

@ -588,6 +588,17 @@ static void pci_fixup_amd_ehci_pme(struct pci_dev *dev)
} }
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x7808, pci_fixup_amd_ehci_pme); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x7808, pci_fixup_amd_ehci_pme);
/*
* Device [1022:7914]
* When in D0, PME# doesn't get asserted when plugging USB 2.0 device.
*/
static void pci_fixup_amd_fch_xhci_pme(struct pci_dev *dev)
{
dev_info(&dev->dev, "PME# does not work under D0, disabling it\n");
dev->pme_support &= ~(PCI_PM_CAP_PME_D0 >> PCI_PM_CAP_PME_SHIFT);
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x7914, pci_fixup_amd_fch_xhci_pme);
/* /*
* Apple MacBook Pro: Avoid [mem 0x7fa00000-0x7fbfffff] * Apple MacBook Pro: Avoid [mem 0x7fa00000-0x7fbfffff]
* *

View file

@ -1058,7 +1058,7 @@ void af_alg_async_cb(struct crypto_async_request *_req, int err)
af_alg_free_resources(areq); af_alg_free_resources(areq);
sock_put(sk); sock_put(sk);
iocb->ki_complete(iocb, err ? err : resultlen, 0); iocb->ki_complete(iocb, err ? err : (int)resultlen, 0);
} }
EXPORT_SYMBOL_GPL(af_alg_async_cb); EXPORT_SYMBOL_GPL(af_alg_async_cb);

View file

@ -288,8 +288,10 @@ static int crypto_report(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
drop_alg: drop_alg:
crypto_mod_put(alg); crypto_mod_put(alg);
if (err) if (err) {
kfree_skb(skb);
return err; return err;
}
return nlmsg_unicast(crypto_nlsk, skb, NETLINK_CB(in_skb).portid); return nlmsg_unicast(crypto_nlsk, skb, NETLINK_CB(in_skb).portid);
} }

View file

@ -906,10 +906,34 @@ static void ecc_point_mult(struct ecc_point *result,
static inline void ecc_swap_digits(const u64 *in, u64 *out, static inline void ecc_swap_digits(const u64 *in, u64 *out,
unsigned int ndigits) unsigned int ndigits)
{ {
const __be64 *src = (__force __be64 *)in;
int i; int i;
for (i = 0; i < ndigits; i++) for (i = 0; i < ndigits; i++)
out[i] = __swab64(in[ndigits - 1 - i]); out[i] = be64_to_cpu(src[ndigits - 1 - i]);
}
static int __ecc_is_key_valid(const struct ecc_curve *curve,
const u64 *private_key, unsigned int ndigits)
{
u64 one[ECC_MAX_DIGITS] = { 1, };
u64 res[ECC_MAX_DIGITS];
if (!private_key)
return -EINVAL;
if (curve->g.ndigits != ndigits)
return -EINVAL;
/* Make sure the private key is in the range [2, n-3]. */
if (vli_cmp(one, private_key, ndigits) != -1)
return -EINVAL;
vli_sub(res, curve->n, one, ndigits);
vli_sub(res, res, one, ndigits);
if (vli_cmp(res, private_key, ndigits) != 1)
return -EINVAL;
return 0;
} }
int ecc_is_key_valid(unsigned int curve_id, unsigned int ndigits, int ecc_is_key_valid(unsigned int curve_id, unsigned int ndigits,
@ -918,22 +942,12 @@ int ecc_is_key_valid(unsigned int curve_id, unsigned int ndigits,
int nbytes; int nbytes;
const struct ecc_curve *curve = ecc_get_curve(curve_id); const struct ecc_curve *curve = ecc_get_curve(curve_id);
if (!private_key)
return -EINVAL;
nbytes = ndigits << ECC_DIGITS_TO_BYTES_SHIFT; nbytes = ndigits << ECC_DIGITS_TO_BYTES_SHIFT;
if (private_key_len != nbytes) if (private_key_len != nbytes)
return -EINVAL; return -EINVAL;
if (vli_is_zero(private_key, ndigits)) return __ecc_is_key_valid(curve, private_key, ndigits);
return -EINVAL;
/* Make sure the private key is in the range [1, n-1]. */
if (vli_cmp(curve->n, private_key, ndigits) != 1)
return -EINVAL;
return 0;
} }
/* /*
@ -979,11 +993,8 @@ int ecc_gen_privkey(unsigned int curve_id, unsigned int ndigits, u64 *privkey)
if (err) if (err)
return err; return err;
if (vli_is_zero(priv, ndigits)) /* Make sure the private key is in the valid range. */
return -EINVAL; if (__ecc_is_key_valid(curve, priv, ndigits))
/* Make sure the private key is in the range [1, n-1]. */
if (vli_cmp(curve->n, priv, ndigits) != 1)
return -EINVAL; return -EINVAL;
ecc_swap_digits(priv, privkey, ndigits); ecc_swap_digits(priv, privkey, ndigits);

View file

@ -285,8 +285,7 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
return 0; return 0;
free_range: free_range:
for (page_addr = end - PAGE_SIZE; page_addr >= start; for (page_addr = end - PAGE_SIZE; 1; page_addr -= PAGE_SIZE) {
page_addr -= PAGE_SIZE) {
bool ret; bool ret;
size_t index; size_t index;
@ -299,6 +298,8 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
WARN_ON(!ret); WARN_ON(!ret);
trace_binder_free_lru_end(alloc, index); trace_binder_free_lru_end(alloc, index);
if (page_addr == start)
break;
continue; continue;
err_vm_insert_page_failed: err_vm_insert_page_failed:
@ -306,7 +307,8 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
page->page_ptr = NULL; page->page_ptr = NULL;
err_alloc_page_failed: err_alloc_page_failed:
err_page_ptr_cleared: err_page_ptr_cleared:
; if (page_addr == start)
break;
} }
err_no_vma: err_no_vma:
if (mm) { if (mm) {
@ -848,14 +850,20 @@ void binder_alloc_print_pages(struct seq_file *m,
int free = 0; int free = 0;
mutex_lock(&alloc->mutex); mutex_lock(&alloc->mutex);
for (i = 0; i < alloc->buffer_size / PAGE_SIZE; i++) { /*
page = &alloc->pages[i]; * Make sure the binder_alloc is fully initialized, otherwise we might
if (!page->page_ptr) * read inconsistent state.
free++; */
else if (list_empty(&page->lru)) if (binder_alloc_get_vma(alloc) != NULL) {
active++; for (i = 0; i < alloc->buffer_size / PAGE_SIZE; i++) {
else page = &alloc->pages[i];
lru++; if (!page->page_ptr)
free++;
else if (list_empty(&page->lru))
active++;
else
lru++;
}
} }
mutex_unlock(&alloc->mutex); mutex_unlock(&alloc->mutex);
seq_printf(m, " pages: %d:%d:%d\n", active, lru, free); seq_printf(m, " pages: %d:%d:%d\n", active, lru, free);

View file

@ -1014,8 +1014,10 @@ static void rsxx_pci_remove(struct pci_dev *dev)
cancel_work_sync(&card->event_work); cancel_work_sync(&card->event_work);
destroy_workqueue(card->event_wq);
rsxx_destroy_dev(card); rsxx_destroy_dev(card);
rsxx_dma_destroy(card); rsxx_dma_destroy(card);
destroy_workqueue(card->creg_ctrl.creg_wq);
spin_lock_irqsave(&card->irq_lock, flags); spin_lock_irqsave(&card->irq_lock, flags);
rsxx_disable_ier_and_isr(card, CR_INTR_ALL); rsxx_disable_ier_and_isr(card, CR_INTR_ALL);

View file

@ -217,8 +217,13 @@ static int sysc_get_clocks(struct sysc *ddata)
if (!ddata->clocks) if (!ddata->clocks)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < ddata->nr_clocks; i++) { for (i = 0; i < SYSC_MAX_CLOCKS; i++) {
error = sysc_get_one_clock(ddata, ddata->clock_roles[i]); const char *name = ddata->clock_roles[i];
if (!name)
continue;
error = sysc_get_one_clock(ddata, name);
if (error && error != -ENOENT) if (error && error != -ENOENT)
return error; return error;
} }

View file

@ -708,6 +708,10 @@ static int lp_set_timeout64(unsigned int minor, void __user *arg)
if (copy_from_user(karg, arg, sizeof(karg))) if (copy_from_user(karg, arg, sizeof(karg)))
return -EFAULT; return -EFAULT;
/* sparc64 suseconds_t is 32-bit only */
if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
karg[1] >>= 32;
return lp_set_timeout(minor, karg[0], karg[1]); return lp_set_timeout(minor, karg[0], karg[1]);
} }

View file

@ -53,7 +53,7 @@ static const struct clk_ops clk_cpumux_ops = {
.set_parent = clk_cpumux_set_parent, .set_parent = clk_cpumux_set_parent,
}; };
static struct clk __init * static struct clk *
mtk_clk_register_cpumux(const struct mtk_composite *mux, mtk_clk_register_cpumux(const struct mtk_composite *mux,
struct regmap *regmap) struct regmap *regmap)
{ {
@ -84,9 +84,9 @@ mtk_clk_register_cpumux(const struct mtk_composite *mux,
return clk; return clk;
} }
int __init mtk_clk_register_cpumuxes(struct device_node *node, int mtk_clk_register_cpumuxes(struct device_node *node,
const struct mtk_composite *clks, int num, const struct mtk_composite *clks, int num,
struct clk_onecell_data *clk_data) struct clk_onecell_data *clk_data)
{ {
int i; int i;
struct clk *clk; struct clk *clk;

View file

@ -513,7 +513,7 @@ static const struct mtk_gate peri_clks[] = {
GATE_PERI1(CLK_PERI_IRTX_PD, "peri_irtx_pd", "irtx_sel", 2), GATE_PERI1(CLK_PERI_IRTX_PD, "peri_irtx_pd", "irtx_sel", 2),
}; };
static struct mtk_composite infra_muxes[] __initdata = { static struct mtk_composite infra_muxes[] = {
MUX(CLK_INFRA_MUX1_SEL, "infra_mux1_sel", infra_mux1_parents, MUX(CLK_INFRA_MUX1_SEL, "infra_mux1_sel", infra_mux1_parents,
0x000, 2, 2), 0x000, 2, 2),
}; };
@ -652,7 +652,7 @@ static int mtk_topckgen_init(struct platform_device *pdev)
return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
} }
static int __init mtk_infrasys_init(struct platform_device *pdev) static int mtk_infrasys_init(struct platform_device *pdev)
{ {
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
struct clk_onecell_data *clk_data; struct clk_onecell_data *clk_data;

View file

@ -295,6 +295,12 @@ static struct clk_regmap gxl_hdmi_pll = {
.shift = 9, .shift = 9,
.width = 5, .width = 5,
}, },
/*
* On gxl, there is a register shift due to
* HHI_HDMI_PLL_CNTL1 which does not exist on gxbb,
* so we use the HHI_HDMI_PLL_CNTL2 define from GXBB
* instead which is defined at the same offset.
*/
.frac = { .frac = {
/* /*
* On gxl, there is a register shift due to * On gxl, there is a register shift due to
@ -304,7 +310,7 @@ static struct clk_regmap gxl_hdmi_pll = {
*/ */
.reg_off = HHI_HDMI_PLL_CNTL + 4, .reg_off = HHI_HDMI_PLL_CNTL + 4,
.shift = 0, .shift = 0,
.width = 12, .width = 10,
}, },
.od = { .od = {
.reg_off = HHI_HDMI_PLL_CNTL + 8, .reg_off = HHI_HDMI_PLL_CNTL + 8,

View file

@ -144,7 +144,7 @@ static struct clk_regmap meson8b_vid_pll = {
}, },
.n = { .n = {
.reg_off = HHI_VID_PLL_CNTL, .reg_off = HHI_VID_PLL_CNTL,
.shift = 9, .shift = 10,
.width = 5, .width = 5,
}, },
.od = { .od = {

View file

@ -2402,7 +2402,7 @@ static struct clk_branch gcc_ufs_phy_aux_clk = {
static struct clk_branch gcc_ufs_rx_symbol_0_clk = { static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
.halt_reg = 0x75014, .halt_reg = 0x75014,
.halt_check = BRANCH_HALT, .halt_check = BRANCH_HALT_SKIP,
.clkr = { .clkr = {
.enable_reg = 0x75014, .enable_reg = 0x75014,
.enable_mask = BIT(0), .enable_mask = BIT(0),
@ -2415,7 +2415,7 @@ static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
static struct clk_branch gcc_ufs_rx_symbol_1_clk = { static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
.halt_reg = 0x7605c, .halt_reg = 0x7605c,
.halt_check = BRANCH_HALT, .halt_check = BRANCH_HALT_SKIP,
.clkr = { .clkr = {
.enable_reg = 0x7605c, .enable_reg = 0x7605c,
.enable_mask = BIT(0), .enable_mask = BIT(0),
@ -2428,7 +2428,7 @@ static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
static struct clk_branch gcc_ufs_tx_symbol_0_clk = { static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
.halt_reg = 0x75010, .halt_reg = 0x75010,
.halt_check = BRANCH_HALT, .halt_check = BRANCH_HALT_SKIP,
.clkr = { .clkr = {
.enable_reg = 0x75010, .enable_reg = 0x75010,
.enable_mask = BIT(0), .enable_mask = BIT(0),
@ -2743,25 +2743,25 @@ static struct gdsc *gcc_msm8998_gdscs[] = {
}; };
static const struct qcom_reset_map gcc_msm8998_resets[] = { static const struct qcom_reset_map gcc_msm8998_resets[] = {
[GCC_BLSP1_QUP1_BCR] = { 0x102400 }, [GCC_BLSP1_QUP1_BCR] = { 0x19000 },
[GCC_BLSP1_QUP2_BCR] = { 0x110592 }, [GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
[GCC_BLSP1_QUP3_BCR] = { 0x118784 }, [GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
[GCC_BLSP1_QUP4_BCR] = { 0x126976 }, [GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
[GCC_BLSP1_QUP5_BCR] = { 0x135168 }, [GCC_BLSP1_QUP5_BCR] = { 0x21000 },
[GCC_BLSP1_QUP6_BCR] = { 0x143360 }, [GCC_BLSP1_QUP6_BCR] = { 0x23000 },
[GCC_BLSP2_QUP1_BCR] = { 0x155648 }, [GCC_BLSP2_QUP1_BCR] = { 0x26000 },
[GCC_BLSP2_QUP2_BCR] = { 0x163840 }, [GCC_BLSP2_QUP2_BCR] = { 0x28000 },
[GCC_BLSP2_QUP3_BCR] = { 0x172032 }, [GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
[GCC_BLSP2_QUP4_BCR] = { 0x180224 }, [GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
[GCC_BLSP2_QUP5_BCR] = { 0x188416 }, [GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
[GCC_BLSP2_QUP6_BCR] = { 0x196608 }, [GCC_BLSP2_QUP6_BCR] = { 0x30000 },
[GCC_PCIE_0_BCR] = { 0x438272 }, [GCC_PCIE_0_BCR] = { 0x6b000 },
[GCC_PDM_BCR] = { 0x208896 }, [GCC_PDM_BCR] = { 0x33000 },
[GCC_SDCC2_BCR] = { 0x81920 }, [GCC_SDCC2_BCR] = { 0x14000 },
[GCC_SDCC4_BCR] = { 0x90112 }, [GCC_SDCC4_BCR] = { 0x16000 },
[GCC_TSIF_BCR] = { 0x221184 }, [GCC_TSIF_BCR] = { 0x36000 },
[GCC_UFS_BCR] = { 0x479232 }, [GCC_UFS_BCR] = { 0x75000 },
[GCC_USB_30_BCR] = { 0x61440 }, [GCC_USB_30_BCR] = { 0xf000 },
}; };
static const struct regmap_config gcc_msm8998_regmap_config = { static const struct regmap_config gcc_msm8998_regmap_config = {

View file

@ -175,8 +175,8 @@ static const struct mssr_mod_clk r8a77990_mod_clks[] __initconst = {
DEF_MOD("ehci0", 703, R8A77990_CLK_S3D4), DEF_MOD("ehci0", 703, R8A77990_CLK_S3D4),
DEF_MOD("hsusb", 704, R8A77990_CLK_S3D4), DEF_MOD("hsusb", 704, R8A77990_CLK_S3D4),
DEF_MOD("csi40", 716, R8A77990_CLK_CSI0), DEF_MOD("csi40", 716, R8A77990_CLK_CSI0),
DEF_MOD("du1", 723, R8A77990_CLK_S2D1), DEF_MOD("du1", 723, R8A77990_CLK_S1D1),
DEF_MOD("du0", 724, R8A77990_CLK_S2D1), DEF_MOD("du0", 724, R8A77990_CLK_S1D1),
DEF_MOD("lvds", 727, R8A77990_CLK_S2D1), DEF_MOD("lvds", 727, R8A77990_CLK_S2D1),
DEF_MOD("vin5", 806, R8A77990_CLK_S1D2), DEF_MOD("vin5", 806, R8A77990_CLK_S1D2),

View file

@ -141,8 +141,8 @@ static const struct mssr_mod_clk r8a77995_mod_clks[] __initconst = {
DEF_MOD("vspbs", 627, R8A77995_CLK_S0D1), DEF_MOD("vspbs", 627, R8A77995_CLK_S0D1),
DEF_MOD("ehci0", 703, R8A77995_CLK_S3D2), DEF_MOD("ehci0", 703, R8A77995_CLK_S3D2),
DEF_MOD("hsusb", 704, R8A77995_CLK_S3D2), DEF_MOD("hsusb", 704, R8A77995_CLK_S3D2),
DEF_MOD("du1", 723, R8A77995_CLK_S2D1), DEF_MOD("du1", 723, R8A77995_CLK_S1D1),
DEF_MOD("du0", 724, R8A77995_CLK_S2D1), DEF_MOD("du0", 724, R8A77995_CLK_S1D1),
DEF_MOD("lvds", 727, R8A77995_CLK_S2D1), DEF_MOD("lvds", 727, R8A77995_CLK_S2D1),
DEF_MOD("vin7", 804, R8A77995_CLK_S1D2), DEF_MOD("vin7", 804, R8A77995_CLK_S1D2),
DEF_MOD("vin6", 805, R8A77995_CLK_S1D2), DEF_MOD("vin6", 805, R8A77995_CLK_S1D2),

View file

@ -361,7 +361,7 @@ static struct clk * __init cpg_sd_clk_register(const struct cpg_core_clk *core,
struct sd_clock *clock; struct sd_clock *clock;
struct clk *clk; struct clk *clk;
unsigned int i; unsigned int i;
u32 sd_fc; u32 val;
clock = kzalloc(sizeof(*clock), GFP_KERNEL); clock = kzalloc(sizeof(*clock), GFP_KERNEL);
if (!clock) if (!clock)
@ -378,17 +378,9 @@ static struct clk * __init cpg_sd_clk_register(const struct cpg_core_clk *core,
clock->div_table = cpg_sd_div_table; clock->div_table = cpg_sd_div_table;
clock->div_num = ARRAY_SIZE(cpg_sd_div_table); clock->div_num = ARRAY_SIZE(cpg_sd_div_table);
sd_fc = readl(clock->csn.reg) & CPG_SD_FC_MASK; val = readl(clock->csn.reg) & ~CPG_SD_FC_MASK;
for (i = 0; i < clock->div_num; i++) val |= CPG_SD_STP_MASK | (clock->div_table[0].val & CPG_SD_FC_MASK);
if (sd_fc == (clock->div_table[i].val & CPG_SD_FC_MASK)) writel(val, clock->csn.reg);
break;
if (WARN_ON(i >= clock->div_num)) {
kfree(clock);
return ERR_PTR(-EINVAL);
}
clock->cur_div_idx = i;
clock->div_max = clock->div_table[0].div; clock->div_max = clock->div_table[0].div;
clock->div_min = clock->div_max; clock->div_min = clock->div_max;

View file

@ -362,8 +362,8 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
RK2928_CLKGATE_CON(2), 5, GFLAGS), RK2928_CLKGATE_CON(2), 5, GFLAGS),
MUX(SCLK_MAC, "sclk_macref", mux_sclk_macref_p, CLK_SET_RATE_PARENT, MUX(SCLK_MAC, "sclk_macref", mux_sclk_macref_p, CLK_SET_RATE_PARENT,
RK2928_CLKSEL_CON(21), 4, 1, MFLAGS), RK2928_CLKSEL_CON(21), 4, 1, MFLAGS),
GATE(0, "sclk_mac_lbtest", "sclk_macref", GATE(0, "sclk_mac_lbtest", "sclk_macref", 0,
RK2928_CLKGATE_CON(2), 12, 0, GFLAGS), RK2928_CLKGATE_CON(2), 12, GFLAGS),
COMPOSITE(0, "hsadc_src", mux_pll_src_gpll_cpll_p, 0, COMPOSITE(0, "hsadc_src", mux_pll_src_gpll_cpll_p, 0,
RK2928_CLKSEL_CON(22), 0, 1, MFLAGS, 8, 8, DFLAGS, RK2928_CLKSEL_CON(22), 0, 1, MFLAGS, 8, 8, DFLAGS,
@ -391,8 +391,8 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
* Clock-Architecture Diagram 4 * Clock-Architecture Diagram 4
*/ */
GATE(SCLK_SMC, "sclk_smc", "hclk_peri", GATE(SCLK_SMC, "sclk_smc", "hclk_peri", 0,
RK2928_CLKGATE_CON(2), 4, 0, GFLAGS), RK2928_CLKGATE_CON(2), 4, GFLAGS),
COMPOSITE_NOMUX(SCLK_SPI0, "sclk_spi0", "pclk_peri", 0, COMPOSITE_NOMUX(SCLK_SPI0, "sclk_spi0", "pclk_peri", 0,
RK2928_CLKSEL_CON(25), 0, 7, DFLAGS, RK2928_CLKSEL_CON(25), 0, 7, DFLAGS,

View file

@ -392,7 +392,7 @@ static struct rockchip_clk_branch rk3328_clk_branches[] __initdata = {
RK3328_CLKGATE_CON(1), 5, GFLAGS, RK3328_CLKGATE_CON(1), 5, GFLAGS,
&rk3328_i2s1_fracmux), &rk3328_i2s1_fracmux),
GATE(SCLK_I2S1, "clk_i2s1", "i2s1_pre", CLK_SET_RATE_PARENT, GATE(SCLK_I2S1, "clk_i2s1", "i2s1_pre", CLK_SET_RATE_PARENT,
RK3328_CLKGATE_CON(0), 6, GFLAGS), RK3328_CLKGATE_CON(1), 6, GFLAGS),
COMPOSITE_NODIV(SCLK_I2S1_OUT, "i2s1_out", mux_i2s1out_p, 0, COMPOSITE_NODIV(SCLK_I2S1_OUT, "i2s1_out", mux_i2s1out_p, 0,
RK3328_CLKSEL_CON(8), 12, 1, MFLAGS, RK3328_CLKSEL_CON(8), 12, 1, MFLAGS,
RK3328_CLKGATE_CON(1), 7, GFLAGS), RK3328_CLKGATE_CON(1), 7, GFLAGS),

View file

@ -582,7 +582,7 @@ static const char * const dsi_dphy_parents[] = { "pll-video0", "pll-periph0" };
static const u8 dsi_dphy_table[] = { 0, 2, }; static const u8 dsi_dphy_table[] = { 0, 2, };
static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(dsi_dphy_clk, "dsi-dphy", static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(dsi_dphy_clk, "dsi-dphy",
dsi_dphy_parents, dsi_dphy_table, dsi_dphy_parents, dsi_dphy_table,
0x168, 0, 4, 8, 2, BIT(31), CLK_SET_RATE_PARENT); 0x168, 0, 4, 8, 2, BIT(15), CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_GATE(gpu_clk, "gpu", "pll-gpu", static SUNXI_CCU_M_WITH_GATE(gpu_clk, "gpu", "pll-gpu",
0x1a0, 0, 3, BIT(31), CLK_SET_RATE_PARENT); 0x1a0, 0, 3, BIT(31), CLK_SET_RATE_PARENT);

View file

@ -475,7 +475,7 @@ static const char * const csi_sclk_parents[] = { "pll-periph0", "pll-periph1" };
static SUNXI_CCU_M_WITH_MUX_GATE(csi_sclk_clk, "csi-sclk", csi_sclk_parents, static SUNXI_CCU_M_WITH_MUX_GATE(csi_sclk_clk, "csi-sclk", csi_sclk_parents,
0x134, 16, 4, 24, 3, BIT(31), 0); 0x134, 16, 4, 24, 3, BIT(31), 0);
static const char * const csi_mclk_parents[] = { "osc24M", "pll-video", "pll-periph0" }; static const char * const csi_mclk_parents[] = { "osc24M", "pll-video", "pll-periph1" };
static SUNXI_CCU_M_WITH_MUX_GATE(csi_mclk_clk, "csi-mclk", csi_mclk_parents, static SUNXI_CCU_M_WITH_MUX_GATE(csi_mclk_clk, "csi-mclk", csi_mclk_parents,
0x134, 0, 5, 8, 3, BIT(15), 0); 0x134, 0, 5, 8, 3, BIT(15), 0);

View file

@ -373,12 +373,8 @@ static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev)
dma_alloc_coherent(dev->core_dev->device, dma_alloc_coherent(dev->core_dev->device,
PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD,
&dev->scatter_buffer_pa, GFP_ATOMIC); &dev->scatter_buffer_pa, GFP_ATOMIC);
if (!dev->scatter_buffer_va) { if (!dev->scatter_buffer_va)
dma_free_coherent(dev->core_dev->device,
sizeof(struct ce_sd) * PPC4XX_NUM_SD,
dev->sdr, dev->sdr_pa);
return -ENOMEM; return -ENOMEM;
}
for (i = 0; i < PPC4XX_NUM_SD; i++) { for (i = 0; i < PPC4XX_NUM_SD; i++) {
dev->sdr[i].ptr = dev->scatter_buffer_pa + dev->sdr[i].ptr = dev->scatter_buffer_pa +

View file

@ -493,6 +493,29 @@ static inline bool atmel_aes_is_encrypt(const struct atmel_aes_dev *dd)
static void atmel_aes_authenc_complete(struct atmel_aes_dev *dd, int err); static void atmel_aes_authenc_complete(struct atmel_aes_dev *dd, int err);
#endif #endif
static void atmel_aes_set_iv_as_last_ciphertext_block(struct atmel_aes_dev *dd)
{
struct ablkcipher_request *req = ablkcipher_request_cast(dd->areq);
struct atmel_aes_reqctx *rctx = ablkcipher_request_ctx(req);
struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
unsigned int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
if (req->nbytes < ivsize)
return;
if (rctx->mode & AES_FLAGS_ENCRYPT) {
scatterwalk_map_and_copy(req->info, req->dst,
req->nbytes - ivsize, ivsize, 0);
} else {
if (req->src == req->dst)
memcpy(req->info, rctx->lastc, ivsize);
else
scatterwalk_map_and_copy(req->info, req->src,
req->nbytes - ivsize,
ivsize, 0);
}
}
static inline int atmel_aes_complete(struct atmel_aes_dev *dd, int err) static inline int atmel_aes_complete(struct atmel_aes_dev *dd, int err)
{ {
#ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC #ifdef CONFIG_CRYPTO_DEV_ATMEL_AUTHENC
@ -503,26 +526,8 @@ static inline int atmel_aes_complete(struct atmel_aes_dev *dd, int err)
clk_disable(dd->iclk); clk_disable(dd->iclk);
dd->flags &= ~AES_FLAGS_BUSY; dd->flags &= ~AES_FLAGS_BUSY;
if (!dd->ctx->is_aead) { if (!dd->ctx->is_aead)
struct ablkcipher_request *req = atmel_aes_set_iv_as_last_ciphertext_block(dd);
ablkcipher_request_cast(dd->areq);
struct atmel_aes_reqctx *rctx = ablkcipher_request_ctx(req);
struct crypto_ablkcipher *ablkcipher =
crypto_ablkcipher_reqtfm(req);
int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
if (rctx->mode & AES_FLAGS_ENCRYPT) {
scatterwalk_map_and_copy(req->info, req->dst,
req->nbytes - ivsize, ivsize, 0);
} else {
if (req->src == req->dst) {
memcpy(req->info, rctx->lastc, ivsize);
} else {
scatterwalk_map_and_copy(req->info, req->src,
req->nbytes - ivsize, ivsize, 0);
}
}
}
if (dd->is_async) if (dd->is_async)
dd->areq->complete(dd->areq, err); dd->areq->complete(dd->areq, err);
@ -1128,10 +1133,12 @@ static int atmel_aes_crypt(struct ablkcipher_request *req, unsigned long mode)
rctx->mode = mode; rctx->mode = mode;
if (!(mode & AES_FLAGS_ENCRYPT) && (req->src == req->dst)) { if (!(mode & AES_FLAGS_ENCRYPT) && (req->src == req->dst)) {
int ivsize = crypto_ablkcipher_ivsize(ablkcipher); unsigned int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
scatterwalk_map_and_copy(rctx->lastc, req->src, if (req->nbytes >= ivsize)
(req->nbytes - ivsize), ivsize, 0); scatterwalk_map_and_copy(rctx->lastc, req->src,
req->nbytes - ivsize,
ivsize, 0);
} }
return atmel_aes_handle_queue(dd, &req->base); return atmel_aes_handle_queue(dd, &req->base);

View file

@ -4634,12 +4634,16 @@ static int spu_register_ahash(struct iproc_alg_s *driver_alg)
hash->halg.statesize = sizeof(struct spu_hash_export_s); hash->halg.statesize = sizeof(struct spu_hash_export_s);
if (driver_alg->auth_info.mode != HASH_MODE_HMAC) { if (driver_alg->auth_info.mode != HASH_MODE_HMAC) {
hash->setkey = ahash_setkey;
hash->init = ahash_init; hash->init = ahash_init;
hash->update = ahash_update; hash->update = ahash_update;
hash->final = ahash_final; hash->final = ahash_final;
hash->finup = ahash_finup; hash->finup = ahash_finup;
hash->digest = ahash_digest; hash->digest = ahash_digest;
if ((driver_alg->auth_info.alg == HASH_ALG_AES) &&
((driver_alg->auth_info.mode == HASH_MODE_XCBC) ||
(driver_alg->auth_info.mode == HASH_MODE_CMAC))) {
hash->setkey = ahash_setkey;
}
} else { } else {
hash->setkey = ahash_hmac_setkey; hash->setkey = ahash_hmac_setkey;
hash->init = ahash_hmac_init; hash->init = ahash_hmac_init;

View file

@ -340,6 +340,7 @@ static struct ccp_dma_desc *ccp_alloc_dma_desc(struct ccp_dma_chan *chan,
desc->tx_desc.flags = flags; desc->tx_desc.flags = flags;
desc->tx_desc.tx_submit = ccp_tx_submit; desc->tx_desc.tx_submit = ccp_tx_submit;
desc->ccp = chan->ccp; desc->ccp = chan->ccp;
INIT_LIST_HEAD(&desc->entry);
INIT_LIST_HEAD(&desc->pending); INIT_LIST_HEAD(&desc->pending);
INIT_LIST_HEAD(&desc->active); INIT_LIST_HEAD(&desc->active);
desc->status = DMA_IN_PROGRESS; desc->status = DMA_IN_PROGRESS;

View file

@ -1797,13 +1797,10 @@ static struct dma_chan *coh901318_xlate(struct of_phandle_args *dma_spec,
static int coh901318_config(struct coh901318_chan *cohc, static int coh901318_config(struct coh901318_chan *cohc,
struct coh901318_params *param) struct coh901318_params *param)
{ {
unsigned long flags;
const struct coh901318_params *p; const struct coh901318_params *p;
int channel = cohc->id; int channel = cohc->id;
void __iomem *virtbase = cohc->base->virtbase; void __iomem *virtbase = cohc->base->virtbase;
spin_lock_irqsave(&cohc->lock, flags);
if (param) if (param)
p = param; p = param;
else else
@ -1823,8 +1820,6 @@ static int coh901318_config(struct coh901318_chan *cohc,
coh901318_set_conf(cohc, p->config); coh901318_set_conf(cohc, p->config);
coh901318_set_ctrl(cohc, p->ctrl_lli_last); coh901318_set_ctrl(cohc, p->ctrl_lli_last);
spin_unlock_irqrestore(&cohc->lock, flags);
return 0; return 0;
} }

View file

@ -160,12 +160,14 @@ static void dwc_initialize_chan_idma32(struct dw_dma_chan *dwc)
static void dwc_initialize_chan_dw(struct dw_dma_chan *dwc) static void dwc_initialize_chan_dw(struct dw_dma_chan *dwc)
{ {
struct dw_dma *dw = to_dw_dma(dwc->chan.device);
u32 cfghi = DWC_CFGH_FIFO_MODE; u32 cfghi = DWC_CFGH_FIFO_MODE;
u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority); u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority);
bool hs_polarity = dwc->dws.hs_polarity; bool hs_polarity = dwc->dws.hs_polarity;
cfghi |= DWC_CFGH_DST_PER(dwc->dws.dst_id); cfghi |= DWC_CFGH_DST_PER(dwc->dws.dst_id);
cfghi |= DWC_CFGH_SRC_PER(dwc->dws.src_id); cfghi |= DWC_CFGH_SRC_PER(dwc->dws.src_id);
cfghi |= DWC_CFGH_PROTCTL(dw->pdata->protctl);
/* Set polarity of handshake interface */ /* Set polarity of handshake interface */
cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0; cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0;

View file

@ -162,6 +162,12 @@ dw_dma_parse_dt(struct platform_device *pdev)
pdata->multi_block[tmp] = 1; pdata->multi_block[tmp] = 1;
} }
if (!of_property_read_u32(np, "snps,dma-protection-control", &tmp)) {
if (tmp > CHAN_PROTCTL_MASK)
return NULL;
pdata->protctl = tmp;
}
return pdata; return pdata;
} }
#else #else

View file

@ -200,6 +200,10 @@ enum dw_dma_msize {
#define DWC_CFGH_FCMODE (1 << 0) #define DWC_CFGH_FCMODE (1 << 0)
#define DWC_CFGH_FIFO_MODE (1 << 1) #define DWC_CFGH_FIFO_MODE (1 << 1)
#define DWC_CFGH_PROTCTL(x) ((x) << 2) #define DWC_CFGH_PROTCTL(x) ((x) << 2)
#define DWC_CFGH_PROTCTL_DATA (0 << 2) /* data access - always set */
#define DWC_CFGH_PROTCTL_PRIV (1 << 2) /* privileged -> AHB HPROT[1] */
#define DWC_CFGH_PROTCTL_BUFFER (2 << 2) /* bufferable -> AHB HPROT[2] */
#define DWC_CFGH_PROTCTL_CACHE (4 << 2) /* cacheable -> AHB HPROT[3] */
#define DWC_CFGH_DS_UPD_EN (1 << 5) #define DWC_CFGH_DS_UPD_EN (1 << 5)
#define DWC_CFGH_SS_UPD_EN (1 << 6) #define DWC_CFGH_SS_UPD_EN (1 << 6)
#define DWC_CFGH_SRC_PER(x) ((x) << 7) #define DWC_CFGH_SRC_PER(x) ((x) << 7)

View file

@ -321,12 +321,10 @@ static int max8997_muic_handle_usb(struct max8997_muic_info *info,
{ {
int ret = 0; int ret = 0;
if (usb_type == MAX8997_USB_HOST) { ret = max8997_muic_set_path(info, info->path_usb, attached);
ret = max8997_muic_set_path(info, info->path_usb, attached); if (ret < 0) {
if (ret < 0) { dev_err(info->dev, "failed to update muic register\n");
dev_err(info->dev, "failed to update muic register\n"); return ret;
return ret;
}
} }
switch (usb_type) { switch (usb_type) {

View file

@ -14,6 +14,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h>
#include <soc/bcm2835/raspberrypi-firmware.h> #include <soc/bcm2835/raspberrypi-firmware.h>
#define MBOX_MSG(chan, data28) (((data28) & ~0xf) | ((chan) & 0xf)) #define MBOX_MSG(chan, data28) (((data28) & ~0xf) | ((chan) & 0xf))
@ -21,8 +22,6 @@
#define MBOX_DATA28(msg) ((msg) & ~0xf) #define MBOX_DATA28(msg) ((msg) & ~0xf)
#define MBOX_CHAN_PROPERTY 8 #define MBOX_CHAN_PROPERTY 8
#define MAX_RPI_FW_PROP_BUF_SIZE 32
static struct platform_device *rpi_hwmon; static struct platform_device *rpi_hwmon;
struct rpi_firmware { struct rpi_firmware {
@ -144,28 +143,30 @@ EXPORT_SYMBOL_GPL(rpi_firmware_property_list);
int rpi_firmware_property(struct rpi_firmware *fw, int rpi_firmware_property(struct rpi_firmware *fw,
u32 tag, void *tag_data, size_t buf_size) u32 tag, void *tag_data, size_t buf_size)
{ {
/* Single tags are very small (generally 8 bytes), so the struct rpi_firmware_property_tag_header *header;
* stack should be safe.
*/
u8 data[sizeof(struct rpi_firmware_property_tag_header) +
MAX_RPI_FW_PROP_BUF_SIZE];
struct rpi_firmware_property_tag_header *header =
(struct rpi_firmware_property_tag_header *)data;
int ret; int ret;
if (WARN_ON(buf_size > sizeof(data) - sizeof(*header))) /* Some mailboxes can use over 1k bytes. Rather than checking
return -EINVAL; * size and using stack or kmalloc depending on requirements,
* just use kmalloc. Mailboxes don't get called enough to worry
* too much about the time taken in the allocation.
*/
void *data = kmalloc(sizeof(*header) + buf_size, GFP_KERNEL);
if (!data)
return -ENOMEM;
header = data;
header->tag = tag; header->tag = tag;
header->buf_size = buf_size; header->buf_size = buf_size;
header->req_resp_size = 0; header->req_resp_size = 0;
memcpy(data + sizeof(struct rpi_firmware_property_tag_header), memcpy(data + sizeof(*header), tag_data, buf_size);
tag_data, buf_size);
ret = rpi_firmware_property_list(fw, &data, buf_size + sizeof(*header)); ret = rpi_firmware_property_list(fw, data, buf_size + sizeof(*header));
memcpy(tag_data,
data + sizeof(struct rpi_firmware_property_tag_header), memcpy(tag_data, data + sizeof(*header), buf_size);
buf_size);
kfree(data);
return ret; return ret;
} }

View file

@ -721,7 +721,7 @@ static void i810_dma_dispatch_vertex(struct drm_device *dev,
if (nbox > I810_NR_SAREA_CLIPRECTS) if (nbox > I810_NR_SAREA_CLIPRECTS)
nbox = I810_NR_SAREA_CLIPRECTS; nbox = I810_NR_SAREA_CLIPRECTS;
if (used > 4 * 1024) if (used < 0 || used > 4 * 1024)
used = 0; used = 0;
if (sarea_priv->dirty) if (sarea_priv->dirty)
@ -1041,7 +1041,7 @@ static void i810_dma_dispatch_mc(struct drm_device *dev, struct drm_buf *buf, in
if (u != I810_BUF_CLIENT) if (u != I810_BUF_CLIENT)
DRM_DEBUG("MC found buffer that isn't mine!\n"); DRM_DEBUG("MC found buffer that isn't mine!\n");
if (used > 4 * 1024) if (used < 0 || used > 4 * 1024)
used = 0; used = 0;
sarea_priv->dirty = 0x7f; sarea_priv->dirty = 0x7f;

View file

@ -53,12 +53,8 @@ static int msm_gpu_release(struct inode *inode, struct file *file)
struct msm_gpu_show_priv *show_priv = m->private; struct msm_gpu_show_priv *show_priv = m->private;
struct msm_drm_private *priv = show_priv->dev->dev_private; struct msm_drm_private *priv = show_priv->dev->dev_private;
struct msm_gpu *gpu = priv->gpu; struct msm_gpu *gpu = priv->gpu;
int ret;
ret = mutex_lock_interruptible(&show_priv->dev->struct_mutex);
if (ret)
return ret;
mutex_lock(&show_priv->dev->struct_mutex);
gpu->funcs->gpu_state_put(show_priv->state); gpu->funcs->gpu_state_put(show_priv->state);
mutex_unlock(&show_priv->dev->struct_mutex); mutex_unlock(&show_priv->dev->struct_mutex);

View file

@ -423,7 +423,7 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tcon *tcon,
WARN_ON(!tcon->quirks->has_channel_0); WARN_ON(!tcon->quirks->has_channel_0);
tcon->dclk_min_div = 6; tcon->dclk_min_div = 1;
tcon->dclk_max_div = 127; tcon->dclk_max_div = 127;
sun4i_tcon0_mode_set_common(tcon, mode); sun4i_tcon0_mode_set_common(tcon, mode);

View file

@ -59,7 +59,7 @@ static inline u32 host1x_uclass_incr_syncpt_r(void)
host1x_uclass_incr_syncpt_r() host1x_uclass_incr_syncpt_r()
static inline u32 host1x_uclass_incr_syncpt_cond_f(u32 v) static inline u32 host1x_uclass_incr_syncpt_cond_f(u32 v)
{ {
return (v & 0xff) << 8; return (v & 0xff) << 10;
} }
#define HOST1X_UCLASS_INCR_SYNCPT_COND_F(v) \ #define HOST1X_UCLASS_INCR_SYNCPT_COND_F(v) \
host1x_uclass_incr_syncpt_cond_f(v) host1x_uclass_incr_syncpt_cond_f(v)

View file

@ -655,10 +655,13 @@ static ssize_t cyc_threshold_store(struct device *dev,
if (kstrtoul(buf, 16, &val)) if (kstrtoul(buf, 16, &val))
return -EINVAL; return -EINVAL;
/* mask off max threshold before checking min value */
val &= ETM_CYC_THRESHOLD_MASK;
if (val < drvdata->ccitmin) if (val < drvdata->ccitmin)
return -EINVAL; return -EINVAL;
config->ccctlr = val & ETM_CYC_THRESHOLD_MASK; config->ccctlr = val;
return size; return size;
} }
static DEVICE_ATTR_RW(cyc_threshold); static DEVICE_ATTR_RW(cyc_threshold);
@ -689,14 +692,16 @@ static ssize_t bb_ctrl_store(struct device *dev,
return -EINVAL; return -EINVAL;
if (!drvdata->nr_addr_cmp) if (!drvdata->nr_addr_cmp)
return -EINVAL; return -EINVAL;
/* /*
* Bit[7:0] selects which address range comparator is used for * Bit[8] controls include(1) / exclude(0), bits[0-7] select
* branch broadcast control. * individual range comparators. If include then at least 1
* range must be selected.
*/ */
if (BMVAL(val, 0, 7) > drvdata->nr_addr_cmp) if ((val & BIT(8)) && (BMVAL(val, 0, 7) == 0))
return -EINVAL; return -EINVAL;
config->bb_ctrl = val; config->bb_ctrl = val & GENMASK(8, 0);
return size; return size;
} }
static DEVICE_ATTR_RW(bb_ctrl); static DEVICE_ATTR_RW(bb_ctrl);
@ -1329,8 +1334,8 @@ static ssize_t seq_event_store(struct device *dev,
spin_lock(&drvdata->spinlock); spin_lock(&drvdata->spinlock);
idx = config->seq_idx; idx = config->seq_idx;
/* RST, bits[7:0] */ /* Seq control has two masks B[15:8] F[7:0] */
config->seq_ctrl[idx] = val & 0xFF; config->seq_ctrl[idx] = val & 0xFFFF;
spin_unlock(&drvdata->spinlock); spin_unlock(&drvdata->spinlock);
return size; return size;
} }
@ -1585,7 +1590,7 @@ static ssize_t res_ctrl_store(struct device *dev,
if (idx % 2 != 0) if (idx % 2 != 0)
/* PAIRINV, bit[21] */ /* PAIRINV, bit[21] */
val &= ~BIT(21); val &= ~BIT(21);
config->res_ctrl[idx] = val; config->res_ctrl[idx] = val & GENMASK(21, 0);
spin_unlock(&drvdata->spinlock); spin_unlock(&drvdata->spinlock);
return size; return size;
} }

View file

@ -1090,7 +1090,8 @@ static int i2c_imx_probe(struct platform_device *pdev)
/* Get I2C clock */ /* Get I2C clock */
i2c_imx->clk = devm_clk_get(&pdev->dev, NULL); i2c_imx->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(i2c_imx->clk)) { if (IS_ERR(i2c_imx->clk)) {
dev_err(&pdev->dev, "can't get I2C clock\n"); if (PTR_ERR(i2c_imx->clk) != -EPROBE_DEFER)
dev_err(&pdev->dev, "can't get I2C clock\n");
return PTR_ERR(i2c_imx->clk); return PTR_ERR(i2c_imx->clk);
} }

View file

@ -253,14 +253,14 @@ static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
} }
client = of_i2c_register_device(adap, rd->dn); client = of_i2c_register_device(adap, rd->dn);
put_device(&adap->dev);
if (IS_ERR(client)) { if (IS_ERR(client)) {
dev_err(&adap->dev, "failed to create client for '%pOF'\n", dev_err(&adap->dev, "failed to create client for '%pOF'\n",
rd->dn); rd->dn);
put_device(&adap->dev);
of_node_clear_flag(rd->dn, OF_POPULATED); of_node_clear_flag(rd->dn, OF_POPULATED);
return notifier_from_errno(PTR_ERR(client)); return notifier_from_errno(PTR_ERR(client));
} }
put_device(&adap->dev);
break; break;
case OF_RECONFIG_CHANGE_REMOVE: case OF_RECONFIG_CHANGE_REMOVE:
/* already depopulated? */ /* already depopulated? */

View file

@ -2798,7 +2798,8 @@ static int peer_abort(struct c4iw_dev *dev, struct sk_buff *skb)
break; break;
case MPA_REQ_SENT: case MPA_REQ_SENT:
(void)stop_ep_timer(ep); (void)stop_ep_timer(ep);
if (mpa_rev == 1 || (mpa_rev == 2 && ep->tried_with_mpa_v1)) if (status != CPL_ERR_CONN_RESET || mpa_rev == 1 ||
(mpa_rev == 2 && ep->tried_with_mpa_v1))
connect_reply_upcall(ep, -ECONNRESET); connect_reply_upcall(ep, -ECONNRESET);
else { else {
/* /*

View file

@ -1074,6 +1074,8 @@ static void log_state_transition(struct hfi1_pportdata *ppd, u32 state);
static void log_physical_state(struct hfi1_pportdata *ppd, u32 state); static void log_physical_state(struct hfi1_pportdata *ppd, u32 state);
static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state, static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state,
int msecs); int msecs);
static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd,
int msecs);
static void read_planned_down_reason_code(struct hfi1_devdata *dd, u8 *pdrrc); static void read_planned_down_reason_code(struct hfi1_devdata *dd, u8 *pdrrc);
static void read_link_down_reason(struct hfi1_devdata *dd, u8 *ldr); static void read_link_down_reason(struct hfi1_devdata *dd, u8 *ldr);
static void handle_temp_err(struct hfi1_devdata *dd); static void handle_temp_err(struct hfi1_devdata *dd);
@ -10769,13 +10771,15 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
break; break;
ppd->port_error_action = 0; ppd->port_error_action = 0;
ppd->host_link_state = HLS_DN_POLL;
if (quick_linkup) { if (quick_linkup) {
/* quick linkup does not go into polling */ /* quick linkup does not go into polling */
ret = do_quick_linkup(dd); ret = do_quick_linkup(dd);
} else { } else {
ret1 = set_physical_link_state(dd, PLS_POLLING); ret1 = set_physical_link_state(dd, PLS_POLLING);
if (!ret1)
ret1 = wait_phys_link_out_of_offline(ppd,
3000);
if (ret1 != HCMD_SUCCESS) { if (ret1 != HCMD_SUCCESS) {
dd_dev_err(dd, dd_dev_err(dd,
"Failed to transition to Polling link state, return 0x%x\n", "Failed to transition to Polling link state, return 0x%x\n",
@ -10783,6 +10787,14 @@ int set_link_state(struct hfi1_pportdata *ppd, u32 state)
ret = -EINVAL; ret = -EINVAL;
} }
} }
/*
* Change the host link state after requesting DC8051 to
* change its physical state so that we can ignore any
* interrupt with stale LNI(XX) error, which will not be
* cleared until DC8051 transitions to Polling state.
*/
ppd->host_link_state = HLS_DN_POLL;
ppd->offline_disabled_reason = ppd->offline_disabled_reason =
HFI1_ODR_MASK(OPA_LINKDOWN_REASON_NONE); HFI1_ODR_MASK(OPA_LINKDOWN_REASON_NONE);
/* /*
@ -12914,6 +12926,39 @@ static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd,
return read_state; return read_state;
} }
/*
* wait_phys_link_out_of_offline - wait for any out of offline state
* @ppd: port device
* @msecs: the number of milliseconds to wait
*
* Wait up to msecs milliseconds for any out of offline physical link
* state change to occur.
* Returns 0 if at least one state is reached, otherwise -ETIMEDOUT.
*/
static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd,
int msecs)
{
u32 read_state;
unsigned long timeout;
timeout = jiffies + msecs_to_jiffies(msecs);
while (1) {
read_state = read_physical_state(ppd->dd);
if ((read_state & 0xF0) != PLS_OFFLINE)
break;
if (time_after(jiffies, timeout)) {
dd_dev_err(ppd->dd,
"timeout waiting for phy link out of offline. Read state 0x%x, %dms\n",
read_state, msecs);
return -ETIMEDOUT;
}
usleep_range(1950, 2050); /* sleep 2ms-ish */
}
log_state_transition(ppd, read_state);
return read_state;
}
#define CLEAR_STATIC_RATE_CONTROL_SMASK(r) \ #define CLEAR_STATIC_RATE_CONTROL_SMASK(r) \
(r &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK) (r &= ~SEND_CTXT_CHECK_ENABLE_DISALLOW_PBC_STATIC_RATE_CONTROL_SMASK)

View file

@ -57,7 +57,6 @@
#define HFI1_VNIC_TXREQ_NAME_LEN 32 #define HFI1_VNIC_TXREQ_NAME_LEN 32
#define HFI1_VNIC_SDMA_DESC_WTRMRK 64 #define HFI1_VNIC_SDMA_DESC_WTRMRK 64
#define HFI1_VNIC_SDMA_RETRY_COUNT 1
/* /*
* struct vnic_txreq - VNIC transmit descriptor * struct vnic_txreq - VNIC transmit descriptor
@ -67,7 +66,6 @@
* @pad: pad buffer * @pad: pad buffer
* @plen: pad length * @plen: pad length
* @pbc_val: pbc value * @pbc_val: pbc value
* @retry_count: tx retry count
*/ */
struct vnic_txreq { struct vnic_txreq {
struct sdma_txreq txreq; struct sdma_txreq txreq;
@ -77,8 +75,6 @@ struct vnic_txreq {
unsigned char pad[HFI1_VNIC_MAX_PAD]; unsigned char pad[HFI1_VNIC_MAX_PAD];
u16 plen; u16 plen;
__le64 pbc_val; __le64 pbc_val;
u32 retry_count;
}; };
static void vnic_sdma_complete(struct sdma_txreq *txreq, static void vnic_sdma_complete(struct sdma_txreq *txreq,
@ -196,7 +192,6 @@ int hfi1_vnic_send_dma(struct hfi1_devdata *dd, u8 q_idx,
ret = build_vnic_tx_desc(sde, tx, pbc); ret = build_vnic_tx_desc(sde, tx, pbc);
if (unlikely(ret)) if (unlikely(ret))
goto free_desc; goto free_desc;
tx->retry_count = 0;
ret = sdma_send_txreq(sde, &vnic_sdma->wait, &tx->txreq, ret = sdma_send_txreq(sde, &vnic_sdma->wait, &tx->txreq,
vnic_sdma->pkts_sent); vnic_sdma->pkts_sent);
@ -238,14 +233,14 @@ static int hfi1_vnic_sdma_sleep(struct sdma_engine *sde,
struct hfi1_vnic_sdma *vnic_sdma = struct hfi1_vnic_sdma *vnic_sdma =
container_of(wait, struct hfi1_vnic_sdma, wait); container_of(wait, struct hfi1_vnic_sdma, wait);
struct hfi1_ibdev *dev = &vnic_sdma->dd->verbs_dev; struct hfi1_ibdev *dev = &vnic_sdma->dd->verbs_dev;
struct vnic_txreq *tx = container_of(txreq, struct vnic_txreq, txreq);
if (sdma_progress(sde, seq, txreq)) write_seqlock(&dev->iowait_lock);
if (tx->retry_count++ < HFI1_VNIC_SDMA_RETRY_COUNT) if (sdma_progress(sde, seq, txreq)) {
return -EAGAIN; write_sequnlock(&dev->iowait_lock);
return -EAGAIN;
}
vnic_sdma->state = HFI1_VNIC_SDMA_Q_DEFERRED; vnic_sdma->state = HFI1_VNIC_SDMA_Q_DEFERRED;
write_seqlock(&dev->iowait_lock);
if (list_empty(&vnic_sdma->wait.list)) if (list_empty(&vnic_sdma->wait.list))
iowait_queue(pkts_sent, wait, &sde->dmawait); iowait_queue(pkts_sent, wait, &sde->dmawait);
write_sequnlock(&dev->iowait_lock); write_sequnlock(&dev->iowait_lock);

Some files were not shown because too many files have changed in this diff Show more