mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 05:15:23 +02:00
This is the 4.19.306 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmWy4ccACgkQONu9yGCS aT7XAhAA09gfOmHXHb5ihjjWyBHEEzKLP+tQ3pDsWeZ3i35GzxVqi51LPSeI8dZ8 znzS42iJbRyUOARItxd9NYcZqLusQNsPcPC7DKPgQ5GzKoG7cPpeG217ZsCKsMlY DvlJO5l3GYBoddB+3Mkw1CJ76N7FU63kOBqTFv4tEelnnROdqho5noIPVxMMX8O9 HDyRiNFpOEGur/p6u3SKP9XHW3V3MUUkXQZEE/BQDoge6HO/719RNaFESmm6aueB rzB9leumm0WvYQWZTOuvsn5Hp4DA1swxB52Dd2RI25m8xpkJ1pRErOBK5UH8Wixk PC3ynZtdGFFT02rOqYESJcPkL95SVnaFfuzg75fbT0JQ1MviaQO6ih0qfVICzdVm 3AIcieVepK1Ki5owZ+9BrBjYzykrDzvk+yXSipeocxn7BS7GTaxsj0XVJds6aQRg aDzzU9/r9yBTOQp7cfit9f24mD44vVemCj9vMO1nHjS6QNDlF3/s6BXvIGmEA6+T WYn1LRt8B0C9bDKTBhUiWcWfV9/tRMkqh+k60PclEAIDj0rgBxzdN+UneehOU8/u l99fAogk05QVXKfpj3pYRakHV7oQUyvRqXvwqiaX57Gq0C+EVepcPfu5EXoxVeiB bsP0s5rg559Mp+x+HOJKXIQ39l2Gez1NaGB84f7p6jnI4Wyr9X8= =ErsS -----END PGP SIGNATURE----- Merge tag 'v4.19.306' into v4.19/standard/base This is the 4.19.306 stable release # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmWy4ccACgkQONu9yGCS # aT7XAhAA09gfOmHXHb5ihjjWyBHEEzKLP+tQ3pDsWeZ3i35GzxVqi51LPSeI8dZ8 # znzS42iJbRyUOARItxd9NYcZqLusQNsPcPC7DKPgQ5GzKoG7cPpeG217ZsCKsMlY # DvlJO5l3GYBoddB+3Mkw1CJ76N7FU63kOBqTFv4tEelnnROdqho5noIPVxMMX8O9 # HDyRiNFpOEGur/p6u3SKP9XHW3V3MUUkXQZEE/BQDoge6HO/719RNaFESmm6aueB # rzB9leumm0WvYQWZTOuvsn5Hp4DA1swxB52Dd2RI25m8xpkJ1pRErOBK5UH8Wixk # PC3ynZtdGFFT02rOqYESJcPkL95SVnaFfuzg75fbT0JQ1MviaQO6ih0qfVICzdVm # 3AIcieVepK1Ki5owZ+9BrBjYzykrDzvk+yXSipeocxn7BS7GTaxsj0XVJds6aQRg # aDzzU9/r9yBTOQp7cfit9f24mD44vVemCj9vMO1nHjS6QNDlF3/s6BXvIGmEA6+T # WYn1LRt8B0C9bDKTBhUiWcWfV9/tRMkqh+k60PclEAIDj0rgBxzdN+UneehOU8/u # l99fAogk05QVXKfpj3pYRakHV7oQUyvRqXvwqiaX57Gq0C+EVepcPfu5EXoxVeiB # bsP0s5rg559Mp+x+HOJKXIQ39l2Gez1NaGB84f7p6jnI4Wyr9X8= # =ErsS # -----END PGP SIGNATURE----- # gpg: Signature made Thu 25 Jan 2024 05:33:43 PM EST # gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E # gpg: Can't check signature: No public key
This commit is contained in:
commit
a69ad4e8e3
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 305
|
||||
SUBLEVEL = 306
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ struct rt_sigframe {
|
|||
unsigned int sigret_magic;
|
||||
};
|
||||
|
||||
static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
||||
static int save_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||
{
|
||||
int err = 0;
|
||||
#ifndef CONFIG_ISA_ARCOMPACT
|
||||
|
@ -77,12 +77,12 @@ static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
|||
#else
|
||||
v2abi.r58 = v2abi.r59 = 0;
|
||||
#endif
|
||||
err = __copy_to_user(&mctx->v2abi, &v2abi, sizeof(v2abi));
|
||||
err = __copy_to_user(&mctx->v2abi, (void const *)&v2abi, sizeof(v2abi));
|
||||
#endif
|
||||
return err;
|
||||
}
|
||||
|
||||
static int restore_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
||||
static int restore_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||
{
|
||||
int err = 0;
|
||||
#ifndef CONFIG_ISA_ARCOMPACT
|
||||
|
|
|
@ -794,7 +794,7 @@
|
|||
|
||||
xoadc: xoadc@197 {
|
||||
compatible = "qcom,pm8921-adc";
|
||||
reg = <197>;
|
||||
reg = <0x197>;
|
||||
interrupts-extended = <&pmicintc 78 IRQ_TYPE_EDGE_RISING>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -801,12 +801,12 @@ static int __init sunxi_mc_smp_init(void)
|
|||
for (i = 0; i < ARRAY_SIZE(sunxi_mc_smp_data); i++) {
|
||||
ret = of_property_match_string(node, "enable-method",
|
||||
sunxi_mc_smp_data[i].enable_method);
|
||||
if (!ret)
|
||||
if (ret >= 0)
|
||||
break;
|
||||
}
|
||||
|
||||
of_node_put(node);
|
||||
if (ret)
|
||||
if (ret < 0)
|
||||
return -ENODEV;
|
||||
|
||||
is_a83t = sunxi_mc_smp_data[i].is_a83t;
|
||||
|
|
|
@ -864,7 +864,7 @@ int __init db1200_dev_setup(void)
|
|||
i2c_register_board_info(0, db1200_i2c_devs,
|
||||
ARRAY_SIZE(db1200_i2c_devs));
|
||||
spi_register_board_info(db1200_spi_devs,
|
||||
ARRAY_SIZE(db1200_i2c_devs));
|
||||
ARRAY_SIZE(db1200_spi_devs));
|
||||
|
||||
/* SWITCHES: S6.8 I2C/SPI selector (OFF=I2C ON=SPI)
|
||||
* S6.7 AC97/I2S selector (OFF=AC97 ON=I2S)
|
||||
|
|
|
@ -581,7 +581,7 @@ int __init db1550_dev_setup(void)
|
|||
i2c_register_board_info(0, db1550_i2c_devs,
|
||||
ARRAY_SIZE(db1550_i2c_devs));
|
||||
spi_register_board_info(db1550_spi_devs,
|
||||
ARRAY_SIZE(db1550_i2c_devs));
|
||||
ARRAY_SIZE(db1550_spi_devs));
|
||||
|
||||
c = clk_get(NULL, "psc0_intclk");
|
||||
if (!IS_ERR(c)) {
|
||||
|
|
|
@ -288,12 +288,10 @@ config ARCH_MAY_HAVE_PC_FDC
|
|||
|
||||
config PPC_UDBG_16550
|
||||
bool
|
||||
default n
|
||||
|
||||
config GENERIC_TBSYNC
|
||||
bool
|
||||
default y if PPC32 && SMP
|
||||
default n
|
||||
|
||||
config AUDIT_ARCH
|
||||
bool
|
||||
|
@ -312,13 +310,11 @@ config EPAPR_BOOT
|
|||
bool
|
||||
help
|
||||
Used to allow a board to specify it wants an ePAPR compliant wrapper.
|
||||
default n
|
||||
|
||||
config DEFAULT_UIMAGE
|
||||
bool
|
||||
help
|
||||
Used to allow a board to specify it wants a uImage built by default
|
||||
default n
|
||||
|
||||
config ARCH_HIBERNATION_POSSIBLE
|
||||
bool
|
||||
|
@ -332,11 +328,9 @@ config ARCH_SUSPEND_POSSIBLE
|
|||
|
||||
config PPC_DCR_NATIVE
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_DCR_MMIO
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_DCR
|
||||
bool
|
||||
|
@ -347,7 +341,6 @@ config PPC_OF_PLATFORM_PCI
|
|||
bool
|
||||
depends on PCI
|
||||
depends on PPC64 # not supported on 32 bits yet
|
||||
default n
|
||||
|
||||
config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||
depends on PPC32 || PPC_BOOK3S_64
|
||||
|
@ -450,14 +443,12 @@ config PPC_TRANSACTIONAL_MEM
|
|||
depends on SMP
|
||||
select ALTIVEC
|
||||
select VSX
|
||||
default n
|
||||
---help---
|
||||
Support user-mode Transactional Memory on POWERPC.
|
||||
|
||||
config LD_HEAD_STUB_CATCH
|
||||
bool "Reserve 256 bytes to cope with linker stubs in HEAD text" if EXPERT
|
||||
depends on PPC64
|
||||
default n
|
||||
help
|
||||
Very large kernels can cause linker branch stubs to be generated by
|
||||
code in head_64.S, which moves the head text sections out of their
|
||||
|
@ -560,7 +551,6 @@ config RELOCATABLE
|
|||
config RELOCATABLE_TEST
|
||||
bool "Test relocatable kernel"
|
||||
depends on (PPC64 && RELOCATABLE)
|
||||
default n
|
||||
help
|
||||
This runs the relocatable kernel at the address it was initially
|
||||
loaded at, which tends to be non-zero and therefore test the
|
||||
|
@ -772,7 +762,6 @@ config PPC_SUBPAGE_PROT
|
|||
|
||||
config PPC_COPRO_BASE
|
||||
bool
|
||||
default n
|
||||
|
||||
config SCHED_SMT
|
||||
bool "SMT (Hyperthreading) scheduler support"
|
||||
|
@ -895,7 +884,6 @@ config PPC_INDIRECT_PCI
|
|||
bool
|
||||
depends on PCI
|
||||
default y if 40x || 44x
|
||||
default n
|
||||
|
||||
config EISA
|
||||
bool
|
||||
|
@ -992,7 +980,6 @@ source "drivers/pcmcia/Kconfig"
|
|||
|
||||
config HAS_RAPIDIO
|
||||
bool
|
||||
default n
|
||||
|
||||
config RAPIDIO
|
||||
tristate "RapidIO support"
|
||||
|
@ -1028,7 +1015,6 @@ endmenu
|
|||
|
||||
config NONSTATIC_KERNEL
|
||||
bool
|
||||
default n
|
||||
|
||||
menu "Advanced setup"
|
||||
depends on PPC32
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
config PPC_DISABLE_WERROR
|
||||
bool "Don't build arch/powerpc code with -Werror"
|
||||
default n
|
||||
help
|
||||
This option tells the compiler NOT to build the code under
|
||||
arch/powerpc with the -Werror flag (which means warnings
|
||||
|
@ -56,7 +55,6 @@ config PPC_EMULATED_STATS
|
|||
config CODE_PATCHING_SELFTEST
|
||||
bool "Run self-tests of the code-patching code"
|
||||
depends on DEBUG_KERNEL
|
||||
default n
|
||||
|
||||
config JUMP_LABEL_FEATURE_CHECKS
|
||||
bool "Enable use of jump label for cpu/mmu_has_feature()"
|
||||
|
@ -70,7 +68,6 @@ config JUMP_LABEL_FEATURE_CHECKS
|
|||
config JUMP_LABEL_FEATURE_CHECK_DEBUG
|
||||
bool "Do extra check on feature fixup calls"
|
||||
depends on DEBUG_KERNEL && JUMP_LABEL_FEATURE_CHECKS
|
||||
default n
|
||||
help
|
||||
This tries to catch incorrect usage of cpu_has_feature() and
|
||||
mmu_has_feature() in the code.
|
||||
|
@ -80,16 +77,13 @@ config JUMP_LABEL_FEATURE_CHECK_DEBUG
|
|||
config FTR_FIXUP_SELFTEST
|
||||
bool "Run self-tests of the feature-fixup code"
|
||||
depends on DEBUG_KERNEL
|
||||
default n
|
||||
|
||||
config MSI_BITMAP_SELFTEST
|
||||
bool "Run self-tests of the MSI bitmap code"
|
||||
depends on DEBUG_KERNEL
|
||||
default n
|
||||
|
||||
config PPC_IRQ_SOFT_MASK_DEBUG
|
||||
bool "Include extra checks for powerpc irq soft masking"
|
||||
default n
|
||||
|
||||
config XMON
|
||||
bool "Include xmon kernel debugger"
|
||||
|
|
|
@ -22,7 +22,7 @@ obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o
|
|||
# so it is only needed for modules, and only for older linkers which
|
||||
# do not support --save-restore-funcs
|
||||
ifeq ($(call ld-ifversion, -lt, 225000000, y),y)
|
||||
extra-$(CONFIG_PPC64) += crtsavres.o
|
||||
always-$(CONFIG_PPC64) += crtsavres.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
|
||||
|
|
|
@ -261,6 +261,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||
attr_group->attrs = attrs;
|
||||
do {
|
||||
ev_val_str = kasprintf(GFP_KERNEL, "event=0x%x", pmu->events[i].value);
|
||||
if (!ev_val_str)
|
||||
continue;
|
||||
dev_str = device_str_attr_create(pmu->events[i].name, ev_val_str);
|
||||
if (!dev_str)
|
||||
continue;
|
||||
|
@ -268,6 +270,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||
attrs[j++] = dev_str;
|
||||
if (pmu->events[i].scale) {
|
||||
ev_scale_str = kasprintf(GFP_KERNEL, "%s.scale", pmu->events[i].name);
|
||||
if (!ev_scale_str)
|
||||
continue;
|
||||
dev_str = device_str_attr_create(ev_scale_str, pmu->events[i].scale);
|
||||
if (!dev_str)
|
||||
continue;
|
||||
|
@ -277,6 +281,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||
|
||||
if (pmu->events[i].unit) {
|
||||
ev_unit_str = kasprintf(GFP_KERNEL, "%s.unit", pmu->events[i].name);
|
||||
if (!ev_unit_str)
|
||||
continue;
|
||||
dev_str = device_str_attr_create(ev_unit_str, pmu->events[i].unit);
|
||||
if (!dev_str)
|
||||
continue;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
config ACADIA
|
||||
bool "Acadia"
|
||||
depends on 40x
|
||||
default n
|
||||
select PPC40x_SIMPLE
|
||||
select 405EZ
|
||||
help
|
||||
|
@ -11,7 +10,6 @@ config ACADIA
|
|||
config EP405
|
||||
bool "EP405/EP405PC"
|
||||
depends on 40x
|
||||
default n
|
||||
select 405GP
|
||||
select PCI
|
||||
help
|
||||
|
@ -20,7 +18,6 @@ config EP405
|
|||
config HOTFOOT
|
||||
bool "Hotfoot"
|
||||
depends on 40x
|
||||
default n
|
||||
select PPC40x_SIMPLE
|
||||
select PCI
|
||||
help
|
||||
|
@ -29,7 +26,6 @@ config HOTFOOT
|
|||
config KILAUEA
|
||||
bool "Kilauea"
|
||||
depends on 40x
|
||||
default n
|
||||
select 405EX
|
||||
select PPC40x_SIMPLE
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
|
@ -41,7 +37,6 @@ config KILAUEA
|
|||
config MAKALU
|
||||
bool "Makalu"
|
||||
depends on 40x
|
||||
default n
|
||||
select 405EX
|
||||
select PCI
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
|
@ -62,7 +57,6 @@ config WALNUT
|
|||
config XILINX_VIRTEX_GENERIC_BOARD
|
||||
bool "Generic Xilinx Virtex board"
|
||||
depends on 40x
|
||||
default n
|
||||
select XILINX_VIRTEX_II_PRO
|
||||
select XILINX_VIRTEX_4_FX
|
||||
select XILINX_INTC
|
||||
|
@ -80,7 +74,6 @@ config XILINX_VIRTEX_GENERIC_BOARD
|
|||
config OBS600
|
||||
bool "OpenBlockS 600"
|
||||
depends on 40x
|
||||
default n
|
||||
select 405EX
|
||||
select PPC40x_SIMPLE
|
||||
help
|
||||
|
@ -90,7 +83,6 @@ config OBS600
|
|||
config PPC40x_SIMPLE
|
||||
bool "Simple PowerPC 40x board support"
|
||||
depends on 40x
|
||||
default n
|
||||
help
|
||||
This option enables the simple PowerPC 40x platform support.
|
||||
|
||||
|
@ -156,7 +148,6 @@ config IBM405_ERR51
|
|||
config APM8018X
|
||||
bool "APM8018X"
|
||||
depends on 40x
|
||||
default n
|
||||
select PPC40x_SIMPLE
|
||||
help
|
||||
This option enables support for the AppliedMicro APM8018X evaluation
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
config PPC_47x
|
||||
bool "Support for 47x variant"
|
||||
depends on 44x
|
||||
default n
|
||||
select MPIC
|
||||
help
|
||||
This option enables support for the 47x family of processors and is
|
||||
|
@ -11,7 +10,6 @@ config PPC_47x
|
|||
config BAMBOO
|
||||
bool "Bamboo"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440EP
|
||||
select PCI
|
||||
|
@ -21,7 +19,6 @@ config BAMBOO
|
|||
config BLUESTONE
|
||||
bool "Bluestone"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select APM821xx
|
||||
select PCI_MSI
|
||||
|
@ -44,7 +41,6 @@ config EBONY
|
|||
config SAM440EP
|
||||
bool "Sam440ep"
|
||||
depends on 44x
|
||||
default n
|
||||
select 440EP
|
||||
select PCI
|
||||
help
|
||||
|
@ -53,7 +49,6 @@ config SAM440EP
|
|||
config SEQUOIA
|
||||
bool "Sequoia"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440EPX
|
||||
help
|
||||
|
@ -62,7 +57,6 @@ config SEQUOIA
|
|||
config TAISHAN
|
||||
bool "Taishan"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440GX
|
||||
select PCI
|
||||
|
@ -73,7 +67,6 @@ config TAISHAN
|
|||
config KATMAI
|
||||
bool "Katmai"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440SPe
|
||||
select PCI
|
||||
|
@ -86,7 +79,6 @@ config KATMAI
|
|||
config RAINIER
|
||||
bool "Rainier"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440GRX
|
||||
select PCI
|
||||
|
@ -96,7 +88,6 @@ config RAINIER
|
|||
config WARP
|
||||
bool "PIKA Warp"
|
||||
depends on 44x
|
||||
default n
|
||||
select 440EP
|
||||
help
|
||||
This option enables support for the PIKA Warp(tm) Appliance. The Warp
|
||||
|
@ -109,7 +100,6 @@ config WARP
|
|||
config ARCHES
|
||||
bool "Arches"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 460EX # Odd since it uses 460GT but the effects are the same
|
||||
select PCI
|
||||
|
@ -120,7 +110,6 @@ config ARCHES
|
|||
config CANYONLANDS
|
||||
bool "Canyonlands"
|
||||
depends on 44x
|
||||
default n
|
||||
select 460EX
|
||||
select PCI
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
|
@ -134,7 +123,6 @@ config CANYONLANDS
|
|||
config GLACIER
|
||||
bool "Glacier"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 460EX # Odd since it uses 460GT but the effects are the same
|
||||
select PCI
|
||||
|
@ -147,7 +135,6 @@ config GLACIER
|
|||
config REDWOOD
|
||||
bool "Redwood"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 460SX
|
||||
select PCI
|
||||
|
@ -160,7 +147,6 @@ config REDWOOD
|
|||
config EIGER
|
||||
bool "Eiger"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 460SX
|
||||
select PCI
|
||||
|
@ -172,7 +158,6 @@ config EIGER
|
|||
config YOSEMITE
|
||||
bool "Yosemite"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440EP
|
||||
select PCI
|
||||
|
@ -182,7 +167,6 @@ config YOSEMITE
|
|||
config ISS4xx
|
||||
bool "ISS 4xx Simulator"
|
||||
depends on (44x || 40x)
|
||||
default n
|
||||
select 405GP if 40x
|
||||
select 440GP if 44x && !PPC_47x
|
||||
select PPC_FPU
|
||||
|
@ -193,7 +177,7 @@ config ISS4xx
|
|||
config CURRITUCK
|
||||
bool "IBM Currituck (476fpe) Support"
|
||||
depends on PPC_47x
|
||||
default n
|
||||
select I2C
|
||||
select SWIOTLB
|
||||
select 476FPE
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
|
@ -203,7 +187,6 @@ config CURRITUCK
|
|||
config FSP2
|
||||
bool "IBM FSP2 (476fpe) Support"
|
||||
depends on PPC_47x
|
||||
default n
|
||||
select 476FPE
|
||||
select IBM_EMAC_EMAC4 if IBM_EMAC
|
||||
select IBM_EMAC_RGMII if IBM_EMAC
|
||||
|
@ -215,7 +198,6 @@ config FSP2
|
|||
config AKEBONO
|
||||
bool "IBM Akebono (476gtr) Support"
|
||||
depends on PPC_47x
|
||||
default n
|
||||
select SWIOTLB
|
||||
select 476FPE
|
||||
select PPC4xx_PCI_EXPRESS
|
||||
|
@ -241,7 +223,6 @@ config AKEBONO
|
|||
config ICON
|
||||
bool "Icon"
|
||||
depends on 44x
|
||||
default n
|
||||
select PPC44x_SIMPLE
|
||||
select 440SPe
|
||||
select PCI
|
||||
|
@ -252,7 +233,6 @@ config ICON
|
|||
config XILINX_VIRTEX440_GENERIC_BOARD
|
||||
bool "Generic Xilinx Virtex 5 FXT board support"
|
||||
depends on 44x
|
||||
default n
|
||||
select XILINX_VIRTEX_5_FXT
|
||||
select XILINX_INTC
|
||||
help
|
||||
|
@ -280,7 +260,6 @@ config XILINX_ML510
|
|||
config PPC44x_SIMPLE
|
||||
bool "Simple PowerPC 44x board support"
|
||||
depends on 44x
|
||||
default n
|
||||
help
|
||||
This option enables the simple PowerPC 44x platform support.
|
||||
|
||||
|
|
|
@ -51,7 +51,6 @@ endif
|
|||
|
||||
config PQ2ADS
|
||||
bool
|
||||
default n
|
||||
|
||||
config 8260
|
||||
bool
|
||||
|
|
|
@ -23,7 +23,6 @@ source "arch/powerpc/platforms/amigaone/Kconfig"
|
|||
|
||||
config KVM_GUEST
|
||||
bool "KVM Guest support"
|
||||
default n
|
||||
select EPAPR_PARAVIRT
|
||||
---help---
|
||||
This option enables various optimizations for running under the KVM
|
||||
|
@ -34,7 +33,6 @@ config KVM_GUEST
|
|||
|
||||
config EPAPR_PARAVIRT
|
||||
bool "ePAPR para-virtualization support"
|
||||
default n
|
||||
help
|
||||
Enables ePAPR para-virtualization support for guests.
|
||||
|
||||
|
@ -74,7 +72,6 @@ config PPC_DT_CPU_FTRS
|
|||
config UDBG_RTAS_CONSOLE
|
||||
bool "RTAS based debug console"
|
||||
depends on PPC_RTAS
|
||||
default n
|
||||
|
||||
config PPC_SMP_MUXED_IPI
|
||||
bool
|
||||
|
@ -86,16 +83,13 @@ config PPC_SMP_MUXED_IPI
|
|||
|
||||
config IPIC
|
||||
bool
|
||||
default n
|
||||
|
||||
config MPIC
|
||||
bool
|
||||
default n
|
||||
|
||||
config MPIC_TIMER
|
||||
bool "MPIC Global Timer"
|
||||
depends on MPIC && FSL_SOC
|
||||
default n
|
||||
help
|
||||
The MPIC global timer is a hardware timer inside the
|
||||
Freescale PIC complying with OpenPIC standard. When the
|
||||
|
@ -107,7 +101,6 @@ config MPIC_TIMER
|
|||
config FSL_MPIC_TIMER_WAKEUP
|
||||
tristate "Freescale MPIC global timer wakeup driver"
|
||||
depends on FSL_SOC && MPIC_TIMER && PM
|
||||
default n
|
||||
help
|
||||
The driver provides a way to wake up the system by MPIC
|
||||
timer.
|
||||
|
@ -115,43 +108,35 @@ config FSL_MPIC_TIMER_WAKEUP
|
|||
|
||||
config PPC_EPAPR_HV_PIC
|
||||
bool
|
||||
default n
|
||||
select EPAPR_PARAVIRT
|
||||
|
||||
config MPIC_WEIRD
|
||||
bool
|
||||
default n
|
||||
|
||||
config MPIC_MSGR
|
||||
bool "MPIC message register support"
|
||||
depends on MPIC
|
||||
default n
|
||||
help
|
||||
Enables support for the MPIC message registers. These
|
||||
registers are used for inter-processor communication.
|
||||
|
||||
config PPC_I8259
|
||||
bool
|
||||
default n
|
||||
|
||||
config U3_DART
|
||||
bool
|
||||
depends on PPC64
|
||||
default n
|
||||
|
||||
config PPC_RTAS
|
||||
bool
|
||||
default n
|
||||
|
||||
config RTAS_ERROR_LOGGING
|
||||
bool
|
||||
depends on PPC_RTAS
|
||||
default n
|
||||
|
||||
config PPC_RTAS_DAEMON
|
||||
bool
|
||||
depends on PPC_RTAS
|
||||
default n
|
||||
|
||||
config RTAS_PROC
|
||||
bool "Proc interface to RTAS"
|
||||
|
@ -164,11 +149,9 @@ config RTAS_FLASH
|
|||
|
||||
config MMIO_NVRAM
|
||||
bool
|
||||
default n
|
||||
|
||||
config MPIC_U3_HT_IRQS
|
||||
bool
|
||||
default n
|
||||
|
||||
config MPIC_BROKEN_REGREAD
|
||||
bool
|
||||
|
@ -187,15 +170,12 @@ config EEH
|
|||
|
||||
config PPC_MPC106
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_970_NAP
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_P7_NAP
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_INDIRECT_PIO
|
||||
bool
|
||||
|
@ -289,7 +269,6 @@ config CPM2
|
|||
|
||||
config FSL_ULI1575
|
||||
bool
|
||||
default n
|
||||
select GENERIC_ISA_DMA
|
||||
help
|
||||
Supports for the ULI1575 PCIe south bridge that exists on some
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
config PPC64
|
||||
bool "64-bit kernel"
|
||||
default n
|
||||
select ZLIB_DEFLATE
|
||||
help
|
||||
This option selects whether a 32-bit or a 64-bit kernel
|
||||
|
@ -368,7 +367,6 @@ config PPC_MM_SLICES
|
|||
bool
|
||||
default y if PPC_BOOK3S_64
|
||||
default y if PPC_8xx && HUGETLB_PAGE
|
||||
default n
|
||||
|
||||
config PPC_HAVE_PMU_SUPPORT
|
||||
bool
|
||||
|
@ -382,7 +380,6 @@ config PPC_PERF_CTRS
|
|||
config FORCE_SMP
|
||||
# Allow platforms to force SMP=y by selecting this
|
||||
bool
|
||||
default n
|
||||
select SMP
|
||||
|
||||
config SMP
|
||||
|
@ -423,7 +420,6 @@ config CHECK_CACHE_COHERENCY
|
|||
|
||||
config PPC_DOORBELL
|
||||
bool
|
||||
default n
|
||||
|
||||
endmenu
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
config PPC_CELL
|
||||
bool
|
||||
default n
|
||||
|
||||
config PPC_CELL_COMMON
|
||||
bool
|
||||
|
@ -22,7 +21,6 @@ config PPC_CELL_NATIVE
|
|||
select IBM_EMAC_RGMII if IBM_EMAC
|
||||
select IBM_EMAC_ZMII if IBM_EMAC #test only
|
||||
select IBM_EMAC_TAH if IBM_EMAC #test only
|
||||
default n
|
||||
|
||||
config PPC_IBM_CELL_BLADE
|
||||
bool "IBM Cell Blade"
|
||||
|
@ -55,7 +53,6 @@ config SPU_FS
|
|||
|
||||
config SPU_BASE
|
||||
bool
|
||||
default n
|
||||
select PPC_COPRO_BASE
|
||||
|
||||
config CBE_RAS
|
||||
|
|
|
@ -13,7 +13,6 @@ config PPC_MAPLE
|
|||
select PPC_RTAS
|
||||
select MMIO_NVRAM
|
||||
select ATA_NONSTANDARD if ATA
|
||||
default n
|
||||
help
|
||||
This option enables support for the Maple 970FX Evaluation Board.
|
||||
For more information, refer to <http://www.970eval.com>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
config PPC_PASEMI
|
||||
depends on PPC64 && PPC_BOOK3S && CPU_BIG_ENDIAN
|
||||
bool "PA Semi SoC-based platforms"
|
||||
default n
|
||||
select MPIC
|
||||
select PCI
|
||||
select PPC_UDBG_16550
|
||||
|
|
|
@ -35,7 +35,6 @@ config OPAL_PRD
|
|||
config PPC_MEMTRACE
|
||||
bool "Enable removal of RAM from kernel mappings for tracing"
|
||||
depends on PPC_POWERNV && MEMORY_HOTREMOVE
|
||||
default n
|
||||
help
|
||||
Enabling this option allows for the removal of memory (RAM)
|
||||
from the kernel mappings to be used for hardware tracing.
|
||||
|
|
|
@ -282,6 +282,8 @@ int __init opal_event_init(void)
|
|||
else
|
||||
name = kasprintf(GFP_KERNEL, "opal");
|
||||
|
||||
if (!name)
|
||||
continue;
|
||||
/* Install interrupt handler */
|
||||
rc = request_irq(r->start, opal_interrupt, r->flags & IRQD_TRIGGER_MASK,
|
||||
name, NULL);
|
||||
|
|
|
@ -49,7 +49,6 @@ config PS3_HTAB_SIZE
|
|||
config PS3_DYNAMIC_DMA
|
||||
depends on PPC_PS3
|
||||
bool "PS3 Platform dynamic DMA page table management"
|
||||
default n
|
||||
help
|
||||
This option will enable kernel support to take advantage of the
|
||||
per device dynamic DMA page table management provided by the Cell
|
||||
|
@ -89,7 +88,6 @@ config PS3_SYS_MANAGER
|
|||
config PS3_REPOSITORY_WRITE
|
||||
bool "PS3 Repository write support" if PS3_ADVANCED
|
||||
depends on PPC_PS3
|
||||
default n
|
||||
help
|
||||
Enables support for writing to the PS3 System Repository.
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ config PPC_PSERIES
|
|||
config PPC_SPLPAR
|
||||
depends on PPC_PSERIES
|
||||
bool "Support for shared-processor logical partitions"
|
||||
default n
|
||||
help
|
||||
Enabling this option will make the kernel run more efficiently
|
||||
on logically-partitioned pSeries systems which use shared
|
||||
|
@ -99,7 +98,6 @@ config PPC_SMLPAR
|
|||
bool "Support for shared-memory logical partitions"
|
||||
depends on PPC_PSERIES
|
||||
select LPARCFG
|
||||
default n
|
||||
help
|
||||
Select this option to enable shared memory partition support.
|
||||
With this option a system running in an LPAR can be given more
|
||||
|
|
|
@ -487,7 +487,7 @@ static int dlpar_memory_remove_by_index(u32 drc_index)
|
|||
int lmb_found;
|
||||
int rc;
|
||||
|
||||
pr_info("Attempting to hot-remove LMB, drc index %x\n", drc_index);
|
||||
pr_debug("Attempting to hot-remove LMB, drc index %x\n", drc_index);
|
||||
|
||||
lmb_found = 0;
|
||||
for_each_drmem_lmb(lmb) {
|
||||
|
@ -501,14 +501,15 @@ static int dlpar_memory_remove_by_index(u32 drc_index)
|
|||
}
|
||||
}
|
||||
|
||||
if (!lmb_found)
|
||||
if (!lmb_found) {
|
||||
pr_debug("Failed to look up LMB for drc index %x\n", drc_index);
|
||||
rc = -EINVAL;
|
||||
|
||||
if (rc)
|
||||
pr_info("Failed to hot-remove memory at %llx\n",
|
||||
lmb->base_addr);
|
||||
else
|
||||
pr_info("Memory at %llx was hot-removed\n", lmb->base_addr);
|
||||
} else if (rc) {
|
||||
pr_debug("Failed to hot-remove memory at %llx\n",
|
||||
lmb->base_addr);
|
||||
} else {
|
||||
pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -761,8 +762,8 @@ static int dlpar_memory_add_by_count(u32 lmbs_to_add)
|
|||
if (!drmem_lmb_reserved(lmb))
|
||||
continue;
|
||||
|
||||
pr_info("Memory at %llx (drc index %x) was hot-added\n",
|
||||
lmb->base_addr, lmb->drc_index);
|
||||
pr_debug("Memory at %llx (drc index %x) was hot-added\n",
|
||||
lmb->base_addr, lmb->drc_index);
|
||||
drmem_remove_lmb_reservation(lmb);
|
||||
}
|
||||
rc = 0;
|
||||
|
|
|
@ -6,19 +6,16 @@
|
|||
config PPC4xx_PCI_EXPRESS
|
||||
bool
|
||||
depends on PCI && 4xx
|
||||
default n
|
||||
|
||||
config PPC4xx_HSTA_MSI
|
||||
bool
|
||||
depends on PCI_MSI
|
||||
depends on PCI && 4xx
|
||||
default n
|
||||
|
||||
config PPC4xx_MSI
|
||||
bool
|
||||
depends on PCI_MSI
|
||||
depends on PCI && 4xx
|
||||
default n
|
||||
|
||||
config PPC_MSI_BITMAP
|
||||
bool
|
||||
|
@ -37,11 +34,9 @@ config PPC_SCOM
|
|||
config SCOM_DEBUGFS
|
||||
bool "Expose SCOM controllers via debugfs"
|
||||
depends on PPC_SCOM && DEBUG_FS
|
||||
default n
|
||||
|
||||
config GE_FPGA
|
||||
bool
|
||||
default n
|
||||
|
||||
config FSL_CORENET_RCPM
|
||||
bool
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
config PPC_XIVE
|
||||
bool
|
||||
default n
|
||||
select PPC_SMP_MUXED_IPI
|
||||
select HARDIRQS_SW_RESEND
|
||||
|
||||
config PPC_XIVE_NATIVE
|
||||
bool
|
||||
default n
|
||||
select PPC_XIVE
|
||||
depends on PPC_POWERNV
|
||||
|
||||
config PPC_XIVE_SPAPR
|
||||
bool
|
||||
default n
|
||||
select PPC_XIVE
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
int num_digits(int val)
|
||||
{
|
||||
int m = 10;
|
||||
long long m = 10;
|
||||
int d = 1;
|
||||
|
||||
if (val < 0) {
|
||||
|
|
|
@ -1032,9 +1032,13 @@ EXPORT_SYMBOL_GPL(af_alg_sendpage);
|
|||
void af_alg_free_resources(struct af_alg_async_req *areq)
|
||||
{
|
||||
struct sock *sk = areq->sk;
|
||||
struct af_alg_ctx *ctx;
|
||||
|
||||
af_alg_free_areq_sgls(areq);
|
||||
sock_kfree_s(sk, areq, areq->areqlen);
|
||||
|
||||
ctx = alg_sk(sk)->private;
|
||||
ctx->inflight = false;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(af_alg_free_resources);
|
||||
|
||||
|
@ -1098,11 +1102,19 @@ EXPORT_SYMBOL_GPL(af_alg_poll);
|
|||
struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk,
|
||||
unsigned int areqlen)
|
||||
{
|
||||
struct af_alg_async_req *areq = sock_kmalloc(sk, areqlen, GFP_KERNEL);
|
||||
struct af_alg_ctx *ctx = alg_sk(sk)->private;
|
||||
struct af_alg_async_req *areq;
|
||||
|
||||
/* Only one AIO request can be in flight. */
|
||||
if (ctx->inflight)
|
||||
return ERR_PTR(-EBUSY);
|
||||
|
||||
areq = sock_kmalloc(sk, areqlen, GFP_KERNEL);
|
||||
if (unlikely(!areq))
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ctx->inflight = true;
|
||||
|
||||
areq->areqlen = areqlen;
|
||||
areq->sk = sk;
|
||||
areq->last_rsgl = NULL;
|
||||
|
|
|
@ -29,9 +29,17 @@
|
|||
#include <crypto/internal/scompress.h>
|
||||
#include "internal.h"
|
||||
|
||||
struct scomp_scratch {
|
||||
spinlock_t lock;
|
||||
void *src;
|
||||
void *dst;
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU(struct scomp_scratch, scomp_scratch) = {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(scomp_scratch.lock),
|
||||
};
|
||||
|
||||
static const struct crypto_type crypto_scomp_type;
|
||||
static void * __percpu *scomp_src_scratches;
|
||||
static void * __percpu *scomp_dst_scratches;
|
||||
static int scomp_scratch_users;
|
||||
static DEFINE_MUTEX(scomp_lock);
|
||||
|
||||
|
@ -65,76 +73,53 @@ static void crypto_scomp_show(struct seq_file *m, struct crypto_alg *alg)
|
|||
seq_puts(m, "type : scomp\n");
|
||||
}
|
||||
|
||||
static void crypto_scomp_free_scratches(void * __percpu *scratches)
|
||||
static void crypto_scomp_free_scratches(void)
|
||||
{
|
||||
struct scomp_scratch *scratch;
|
||||
int i;
|
||||
|
||||
if (!scratches)
|
||||
return;
|
||||
|
||||
for_each_possible_cpu(i)
|
||||
vfree(*per_cpu_ptr(scratches, i));
|
||||
|
||||
free_percpu(scratches);
|
||||
}
|
||||
|
||||
static void * __percpu *crypto_scomp_alloc_scratches(void)
|
||||
{
|
||||
void * __percpu *scratches;
|
||||
int i;
|
||||
|
||||
scratches = alloc_percpu(void *);
|
||||
if (!scratches)
|
||||
return NULL;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
void *scratch;
|
||||
scratch = per_cpu_ptr(&scomp_scratch, i);
|
||||
|
||||
scratch = vmalloc_node(SCOMP_SCRATCH_SIZE, cpu_to_node(i));
|
||||
if (!scratch)
|
||||
vfree(scratch->src);
|
||||
vfree(scratch->dst);
|
||||
scratch->src = NULL;
|
||||
scratch->dst = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int crypto_scomp_alloc_scratches(void)
|
||||
{
|
||||
struct scomp_scratch *scratch;
|
||||
int i;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
void *mem;
|
||||
|
||||
scratch = per_cpu_ptr(&scomp_scratch, i);
|
||||
|
||||
mem = vmalloc_node(SCOMP_SCRATCH_SIZE, cpu_to_node(i));
|
||||
if (!mem)
|
||||
goto error;
|
||||
*per_cpu_ptr(scratches, i) = scratch;
|
||||
}
|
||||
|
||||
return scratches;
|
||||
|
||||
error:
|
||||
crypto_scomp_free_scratches(scratches);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void crypto_scomp_free_all_scratches(void)
|
||||
{
|
||||
if (!--scomp_scratch_users) {
|
||||
crypto_scomp_free_scratches(scomp_src_scratches);
|
||||
crypto_scomp_free_scratches(scomp_dst_scratches);
|
||||
scomp_src_scratches = NULL;
|
||||
scomp_dst_scratches = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int crypto_scomp_alloc_all_scratches(void)
|
||||
{
|
||||
if (!scomp_scratch_users++) {
|
||||
scomp_src_scratches = crypto_scomp_alloc_scratches();
|
||||
if (!scomp_src_scratches)
|
||||
return -ENOMEM;
|
||||
scomp_dst_scratches = crypto_scomp_alloc_scratches();
|
||||
if (!scomp_dst_scratches) {
|
||||
crypto_scomp_free_scratches(scomp_src_scratches);
|
||||
scomp_src_scratches = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
scratch->src = mem;
|
||||
mem = vmalloc_node(SCOMP_SCRATCH_SIZE, cpu_to_node(i));
|
||||
if (!mem)
|
||||
goto error;
|
||||
scratch->dst = mem;
|
||||
}
|
||||
return 0;
|
||||
error:
|
||||
crypto_scomp_free_scratches();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static int crypto_scomp_init_tfm(struct crypto_tfm *tfm)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&scomp_lock);
|
||||
ret = crypto_scomp_alloc_all_scratches();
|
||||
if (!scomp_scratch_users++)
|
||||
ret = crypto_scomp_alloc_scratches();
|
||||
mutex_unlock(&scomp_lock);
|
||||
|
||||
return ret;
|
||||
|
@ -146,42 +131,47 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir)
|
|||
void **tfm_ctx = acomp_tfm_ctx(tfm);
|
||||
struct crypto_scomp *scomp = *tfm_ctx;
|
||||
void **ctx = acomp_request_ctx(req);
|
||||
const int cpu = get_cpu();
|
||||
u8 *scratch_src = *per_cpu_ptr(scomp_src_scratches, cpu);
|
||||
u8 *scratch_dst = *per_cpu_ptr(scomp_dst_scratches, cpu);
|
||||
struct scomp_scratch *scratch;
|
||||
unsigned int dlen;
|
||||
int ret;
|
||||
|
||||
if (!req->src || !req->slen || req->slen > SCOMP_SCRATCH_SIZE) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (!req->src || !req->slen || req->slen > SCOMP_SCRATCH_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
if (req->dst && !req->dlen) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (req->dst && !req->dlen)
|
||||
return -EINVAL;
|
||||
|
||||
if (!req->dlen || req->dlen > SCOMP_SCRATCH_SIZE)
|
||||
req->dlen = SCOMP_SCRATCH_SIZE;
|
||||
|
||||
scatterwalk_map_and_copy(scratch_src, req->src, 0, req->slen, 0);
|
||||
dlen = req->dlen;
|
||||
|
||||
scratch = raw_cpu_ptr(&scomp_scratch);
|
||||
spin_lock(&scratch->lock);
|
||||
|
||||
scatterwalk_map_and_copy(scratch->src, req->src, 0, req->slen, 0);
|
||||
if (dir)
|
||||
ret = crypto_scomp_compress(scomp, scratch_src, req->slen,
|
||||
scratch_dst, &req->dlen, *ctx);
|
||||
ret = crypto_scomp_compress(scomp, scratch->src, req->slen,
|
||||
scratch->dst, &req->dlen, *ctx);
|
||||
else
|
||||
ret = crypto_scomp_decompress(scomp, scratch_src, req->slen,
|
||||
scratch_dst, &req->dlen, *ctx);
|
||||
ret = crypto_scomp_decompress(scomp, scratch->src, req->slen,
|
||||
scratch->dst, &req->dlen, *ctx);
|
||||
if (!ret) {
|
||||
if (!req->dst) {
|
||||
req->dst = sgl_alloc(req->dlen, GFP_ATOMIC, NULL);
|
||||
if (!req->dst)
|
||||
if (!req->dst) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
} else if (req->dlen > dlen) {
|
||||
ret = -ENOSPC;
|
||||
goto out;
|
||||
}
|
||||
scatterwalk_map_and_copy(scratch_dst, req->dst, 0, req->dlen,
|
||||
scatterwalk_map_and_copy(scratch->dst, req->dst, 0, req->dlen,
|
||||
1);
|
||||
}
|
||||
out:
|
||||
put_cpu();
|
||||
spin_unlock(&scratch->lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -202,7 +192,8 @@ static void crypto_exit_scomp_ops_async(struct crypto_tfm *tfm)
|
|||
crypto_free_scomp(*ctx);
|
||||
|
||||
mutex_lock(&scomp_lock);
|
||||
crypto_scomp_free_all_scratches();
|
||||
if (!--scomp_scratch_users)
|
||||
crypto_scomp_free_scratches();
|
||||
mutex_unlock(&scomp_lock);
|
||||
}
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ static void lpit_update_residency(struct lpit_residency_info *info,
|
|||
struct acpi_lpit_native *lpit_native)
|
||||
{
|
||||
info->frequency = lpit_native->counter_frequency ?
|
||||
lpit_native->counter_frequency : tsc_khz * 1000;
|
||||
lpit_native->counter_frequency : mul_u32_u32(tsc_khz, 1000U);
|
||||
if (!info->frequency)
|
||||
info->frequency = 1;
|
||||
|
||||
|
|
|
@ -1797,12 +1797,12 @@ static void acpi_video_dev_register_backlight(struct acpi_video_device *device)
|
|||
return;
|
||||
count++;
|
||||
|
||||
acpi_get_parent(device->dev->handle, &acpi_parent);
|
||||
|
||||
pdev = acpi_get_pci_dev(acpi_parent);
|
||||
if (pdev) {
|
||||
parent = &pdev->dev;
|
||||
pci_dev_put(pdev);
|
||||
if (ACPI_SUCCESS(acpi_get_parent(device->dev->handle, &acpi_parent))) {
|
||||
pdev = acpi_get_pci_dev(acpi_parent);
|
||||
if (pdev) {
|
||||
parent = &pdev->dev;
|
||||
pci_dev_put(pdev);
|
||||
}
|
||||
}
|
||||
|
||||
memset(&props, 0, sizeof(struct backlight_properties));
|
||||
|
|
|
@ -566,6 +566,7 @@ acpi_fwnode_get_named_child_node(const struct fwnode_handle *fwnode,
|
|||
* @index: Index of the reference to return
|
||||
* @num_args: Maximum number of arguments after each reference
|
||||
* @args: Location to store the returned reference with optional arguments
|
||||
* (may be NULL)
|
||||
*
|
||||
* Find property with @name, verifify that it is a package containing at least
|
||||
* one object reference and if so, store the ACPI device object pointer to the
|
||||
|
@ -624,6 +625,9 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
|||
if (ret)
|
||||
return ret == -ENODEV ? -EINVAL : ret;
|
||||
|
||||
if (!args)
|
||||
return 0;
|
||||
|
||||
args->fwnode = acpi_fwnode_handle(device);
|
||||
args->nargs = 0;
|
||||
return 0;
|
||||
|
|
|
@ -4462,7 +4462,7 @@ static __poll_t binder_poll(struct file *filp,
|
|||
|
||||
thread = binder_get_thread(proc);
|
||||
if (!thread)
|
||||
return POLLERR;
|
||||
return EPOLLERR;
|
||||
|
||||
binder_inner_proc_lock(thread->proc);
|
||||
thread->looper |= BINDER_LOOPER_STATE_POLL;
|
||||
|
|
|
@ -290,7 +290,7 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
|
|||
}
|
||||
if (mm) {
|
||||
up_read(&mm->mmap_sem);
|
||||
mmput(mm);
|
||||
mmput_async(mm);
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
@ -325,7 +325,7 @@ err_page_ptr_cleared:
|
|||
err_no_vma:
|
||||
if (mm) {
|
||||
up_read(&mm->mmap_sem);
|
||||
mmput(mm);
|
||||
mmput_async(mm);
|
||||
}
|
||||
return vma ? -ENOMEM : -ESRCH;
|
||||
}
|
||||
|
@ -398,17 +398,17 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
|
|||
alloc->pid, extra_buffers_size);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
if (is_async &&
|
||||
alloc->free_async_space < size + sizeof(struct binder_buffer)) {
|
||||
|
||||
/* Pad 0-size buffers so they get assigned unique addresses */
|
||||
size = max(size, sizeof(void *));
|
||||
|
||||
if (is_async && alloc->free_async_space < size) {
|
||||
binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
|
||||
"%d: binder_alloc_buf size %zd failed, no async space left\n",
|
||||
alloc->pid, size);
|
||||
return ERR_PTR(-ENOSPC);
|
||||
}
|
||||
|
||||
/* Pad 0-size buffers so they get assigned unique addresses */
|
||||
size = max(size, sizeof(void *));
|
||||
|
||||
while (n) {
|
||||
buffer = rb_entry(n, struct binder_buffer, rb_node);
|
||||
BUG_ON(!buffer->free);
|
||||
|
@ -508,7 +508,7 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
|
|||
buffer->async_transaction = is_async;
|
||||
buffer->extra_buffers_size = extra_buffers_size;
|
||||
if (is_async) {
|
||||
alloc->free_async_space -= size + sizeof(struct binder_buffer);
|
||||
alloc->free_async_space -= size;
|
||||
binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC_ASYNC,
|
||||
"%d: binder_alloc_buf size %zd async free %zd\n",
|
||||
alloc->pid, size, alloc->free_async_space);
|
||||
|
@ -535,7 +535,7 @@ err_alloc_buf_struct_failed:
|
|||
* is the sum of the three given sizes (each rounded up to
|
||||
* pointer-sized boundary)
|
||||
*
|
||||
* Return: The allocated buffer or %NULL if error
|
||||
* Return: The allocated buffer or %ERR_PTR(-errno) if error
|
||||
*/
|
||||
struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
|
||||
size_t data_size,
|
||||
|
@ -630,8 +630,7 @@ static void binder_free_buf_locked(struct binder_alloc *alloc,
|
|||
BUG_ON(buffer->data > alloc->buffer + alloc->buffer_size);
|
||||
|
||||
if (buffer->async_transaction) {
|
||||
alloc->free_async_space += buffer_size + sizeof(struct binder_buffer);
|
||||
|
||||
alloc->free_async_space += buffer_size;
|
||||
binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC_ASYNC,
|
||||
"%d: binder_free_buf size %zd async free %zd\n",
|
||||
alloc->pid, size, alloc->free_async_space);
|
||||
|
|
|
@ -317,7 +317,7 @@ mtk_stp_split(struct btmtkuart_dev *bdev, const unsigned char *data, int count,
|
|||
return data;
|
||||
}
|
||||
|
||||
static int btmtkuart_recv(struct hci_dev *hdev, const u8 *data, size_t count)
|
||||
static void btmtkuart_recv(struct hci_dev *hdev, const u8 *data, size_t count)
|
||||
{
|
||||
struct btmtkuart_dev *bdev = hci_get_drvdata(hdev);
|
||||
const unsigned char *p_left = data, *p_h4;
|
||||
|
@ -356,25 +356,20 @@ static int btmtkuart_recv(struct hci_dev *hdev, const u8 *data, size_t count)
|
|||
bt_dev_err(bdev->hdev,
|
||||
"Frame reassembly failed (%d)", err);
|
||||
bdev->rx_skb = NULL;
|
||||
return err;
|
||||
return;
|
||||
}
|
||||
|
||||
sz_left -= sz_h4;
|
||||
p_left += sz_h4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int btmtkuart_receive_buf(struct serdev_device *serdev, const u8 *data,
|
||||
size_t count)
|
||||
{
|
||||
struct btmtkuart_dev *bdev = serdev_device_get_drvdata(serdev);
|
||||
int err;
|
||||
|
||||
err = btmtkuart_recv(bdev->hdev, data, count);
|
||||
if (err < 0)
|
||||
return err;
|
||||
btmtkuart_recv(bdev->hdev, data, count);
|
||||
|
||||
bdev->hdev->stat.byte_rx += count;
|
||||
|
||||
|
|
|
@ -497,7 +497,7 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
|
|||
GATE(HCLK_I2S_2CH, "hclk_i2s_2ch", "hclk_peri", 0, RK2928_CLKGATE_CON(7), 2, GFLAGS),
|
||||
GATE(0, "hclk_usb_peri", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 13, GFLAGS),
|
||||
GATE(HCLK_HOST2, "hclk_host2", "hclk_peri", 0, RK2928_CLKGATE_CON(7), 3, GFLAGS),
|
||||
GATE(HCLK_OTG, "hclk_otg", "hclk_peri", 0, RK2928_CLKGATE_CON(3), 13, GFLAGS),
|
||||
GATE(HCLK_OTG, "hclk_otg", "hclk_peri", 0, RK2928_CLKGATE_CON(5), 13, GFLAGS),
|
||||
GATE(0, "hclk_peri_ahb", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 14, GFLAGS),
|
||||
GATE(HCLK_SPDIF, "hclk_spdif", "hclk_peri", 0, RK2928_CLKGATE_CON(10), 9, GFLAGS),
|
||||
GATE(HCLK_TSP, "hclk_tsp", "hclk_peri", 0, RK2928_CLKGATE_CON(10), 12, GFLAGS),
|
||||
|
|
|
@ -183,8 +183,11 @@ static int ccp_init_dm_workarea(struct ccp_dm_workarea *wa,
|
|||
|
||||
wa->dma.address = dma_map_single(wa->dev, wa->address, len,
|
||||
dir);
|
||||
if (dma_mapping_error(wa->dev, wa->dma.address))
|
||||
if (dma_mapping_error(wa->dev, wa->dma.address)) {
|
||||
kfree(wa->address);
|
||||
wa->address = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
wa->dma.length = len;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,6 @@
|
|||
#define FLAGS_MODE_MASK 0x000f
|
||||
#define FLAGS_ENCRYPT BIT(0)
|
||||
#define FLAGS_CBC BIT(1)
|
||||
#define FLAGS_NEW_KEY BIT(3)
|
||||
|
||||
#define SAHARA_HDR_BASE 0x00800000
|
||||
#define SAHARA_HDR_SKHA_ALG_AES 0
|
||||
|
@ -144,8 +143,6 @@ struct sahara_hw_link {
|
|||
};
|
||||
|
||||
struct sahara_ctx {
|
||||
unsigned long flags;
|
||||
|
||||
/* AES-specific context */
|
||||
int keylen;
|
||||
u8 key[AES_KEYSIZE_128];
|
||||
|
@ -448,27 +445,24 @@ static int sahara_hw_descriptor_create(struct sahara_dev *dev)
|
|||
int ret;
|
||||
int i, j;
|
||||
int idx = 0;
|
||||
u32 len;
|
||||
|
||||
/* Copy new key if necessary */
|
||||
if (ctx->flags & FLAGS_NEW_KEY) {
|
||||
memcpy(dev->key_base, ctx->key, ctx->keylen);
|
||||
ctx->flags &= ~FLAGS_NEW_KEY;
|
||||
memcpy(dev->key_base, ctx->key, ctx->keylen);
|
||||
|
||||
if (dev->flags & FLAGS_CBC) {
|
||||
dev->hw_desc[idx]->len1 = AES_BLOCK_SIZE;
|
||||
dev->hw_desc[idx]->p1 = dev->iv_phys_base;
|
||||
} else {
|
||||
dev->hw_desc[idx]->len1 = 0;
|
||||
dev->hw_desc[idx]->p1 = 0;
|
||||
}
|
||||
dev->hw_desc[idx]->len2 = ctx->keylen;
|
||||
dev->hw_desc[idx]->p2 = dev->key_phys_base;
|
||||
dev->hw_desc[idx]->next = dev->hw_phys_desc[1];
|
||||
|
||||
dev->hw_desc[idx]->hdr = sahara_aes_key_hdr(dev);
|
||||
|
||||
idx++;
|
||||
if (dev->flags & FLAGS_CBC) {
|
||||
dev->hw_desc[idx]->len1 = AES_BLOCK_SIZE;
|
||||
dev->hw_desc[idx]->p1 = dev->iv_phys_base;
|
||||
} else {
|
||||
dev->hw_desc[idx]->len1 = 0;
|
||||
dev->hw_desc[idx]->p1 = 0;
|
||||
}
|
||||
dev->hw_desc[idx]->len2 = ctx->keylen;
|
||||
dev->hw_desc[idx]->p2 = dev->key_phys_base;
|
||||
dev->hw_desc[idx]->next = dev->hw_phys_desc[1];
|
||||
dev->hw_desc[idx]->hdr = sahara_aes_key_hdr(dev);
|
||||
|
||||
idx++;
|
||||
|
||||
|
||||
dev->nb_in_sg = sg_nents_for_len(dev->in_sg, dev->total);
|
||||
if (dev->nb_in_sg < 0) {
|
||||
|
@ -490,24 +484,27 @@ static int sahara_hw_descriptor_create(struct sahara_dev *dev)
|
|||
DMA_TO_DEVICE);
|
||||
if (ret != dev->nb_in_sg) {
|
||||
dev_err(dev->device, "couldn't map in sg\n");
|
||||
goto unmap_in;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = dma_map_sg(dev->device, dev->out_sg, dev->nb_out_sg,
|
||||
DMA_FROM_DEVICE);
|
||||
if (ret != dev->nb_out_sg) {
|
||||
dev_err(dev->device, "couldn't map out sg\n");
|
||||
goto unmap_out;
|
||||
goto unmap_in;
|
||||
}
|
||||
|
||||
/* Create input links */
|
||||
dev->hw_desc[idx]->p1 = dev->hw_phys_link[0];
|
||||
sg = dev->in_sg;
|
||||
len = dev->total;
|
||||
for (i = 0; i < dev->nb_in_sg; i++) {
|
||||
dev->hw_link[i]->len = sg->length;
|
||||
dev->hw_link[i]->len = min(len, sg->length);
|
||||
dev->hw_link[i]->p = sg->dma_address;
|
||||
if (i == (dev->nb_in_sg - 1)) {
|
||||
dev->hw_link[i]->next = 0;
|
||||
} else {
|
||||
len -= min(len, sg->length);
|
||||
dev->hw_link[i]->next = dev->hw_phys_link[i + 1];
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
@ -516,12 +513,14 @@ static int sahara_hw_descriptor_create(struct sahara_dev *dev)
|
|||
/* Create output links */
|
||||
dev->hw_desc[idx]->p2 = dev->hw_phys_link[i];
|
||||
sg = dev->out_sg;
|
||||
len = dev->total;
|
||||
for (j = i; j < dev->nb_out_sg + i; j++) {
|
||||
dev->hw_link[j]->len = sg->length;
|
||||
dev->hw_link[j]->len = min(len, sg->length);
|
||||
dev->hw_link[j]->p = sg->dma_address;
|
||||
if (j == (dev->nb_out_sg + i - 1)) {
|
||||
dev->hw_link[j]->next = 0;
|
||||
} else {
|
||||
len -= min(len, sg->length);
|
||||
dev->hw_link[j]->next = dev->hw_phys_link[j + 1];
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
@ -540,9 +539,6 @@ static int sahara_hw_descriptor_create(struct sahara_dev *dev)
|
|||
|
||||
return 0;
|
||||
|
||||
unmap_out:
|
||||
dma_unmap_sg(dev->device, dev->out_sg, dev->nb_out_sg,
|
||||
DMA_FROM_DEVICE);
|
||||
unmap_in:
|
||||
dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg,
|
||||
DMA_TO_DEVICE);
|
||||
|
@ -587,16 +583,17 @@ static int sahara_aes_process(struct ablkcipher_request *req)
|
|||
|
||||
timeout = wait_for_completion_timeout(&dev->dma_completion,
|
||||
msecs_to_jiffies(SAHARA_TIMEOUT_MS));
|
||||
if (!timeout) {
|
||||
dev_err(dev->device, "AES timeout\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
dma_unmap_sg(dev->device, dev->out_sg, dev->nb_out_sg,
|
||||
DMA_FROM_DEVICE);
|
||||
dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (!timeout) {
|
||||
dev_err(dev->device, "AES timeout\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -611,7 +608,6 @@ static int sahara_aes_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
|
|||
/* SAHARA only supports 128bit keys */
|
||||
if (keylen == AES_KEYSIZE_128) {
|
||||
memcpy(ctx->key, key, keylen);
|
||||
ctx->flags |= FLAGS_NEW_KEY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -800,6 +796,7 @@ static int sahara_sha_hw_links_create(struct sahara_dev *dev,
|
|||
int start)
|
||||
{
|
||||
struct scatterlist *sg;
|
||||
unsigned int len;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
|
@ -821,12 +818,14 @@ static int sahara_sha_hw_links_create(struct sahara_dev *dev,
|
|||
if (!ret)
|
||||
return -EFAULT;
|
||||
|
||||
len = rctx->total;
|
||||
for (i = start; i < dev->nb_in_sg + start; i++) {
|
||||
dev->hw_link[i]->len = sg->length;
|
||||
dev->hw_link[i]->len = min(len, sg->length);
|
||||
dev->hw_link[i]->p = sg->dma_address;
|
||||
if (i == (dev->nb_in_sg + start - 1)) {
|
||||
dev->hw_link[i]->next = 0;
|
||||
} else {
|
||||
len -= min(len, sg->length);
|
||||
dev->hw_link[i]->next = dev->hw_phys_link[i + 1];
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
@ -907,24 +906,6 @@ static int sahara_sha_hw_context_descriptor_create(struct sahara_dev *dev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int sahara_walk_and_recalc(struct scatterlist *sg, unsigned int nbytes)
|
||||
{
|
||||
if (!sg || !sg->length)
|
||||
return nbytes;
|
||||
|
||||
while (nbytes && sg) {
|
||||
if (nbytes <= sg->length) {
|
||||
sg->length = nbytes;
|
||||
sg_mark_end(sg);
|
||||
break;
|
||||
}
|
||||
nbytes -= sg->length;
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
||||
return nbytes;
|
||||
}
|
||||
|
||||
static int sahara_sha_prepare_request(struct ahash_request *req)
|
||||
{
|
||||
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
|
||||
|
@ -961,36 +942,20 @@ static int sahara_sha_prepare_request(struct ahash_request *req)
|
|||
hash_later, 0);
|
||||
}
|
||||
|
||||
/* nbytes should now be multiple of blocksize */
|
||||
req->nbytes = req->nbytes - hash_later;
|
||||
|
||||
sahara_walk_and_recalc(req->src, req->nbytes);
|
||||
|
||||
rctx->total = len - hash_later;
|
||||
/* have data from previous operation and current */
|
||||
if (rctx->buf_cnt && req->nbytes) {
|
||||
sg_init_table(rctx->in_sg_chain, 2);
|
||||
sg_set_buf(rctx->in_sg_chain, rctx->rembuf, rctx->buf_cnt);
|
||||
|
||||
sg_chain(rctx->in_sg_chain, 2, req->src);
|
||||
|
||||
rctx->total = req->nbytes + rctx->buf_cnt;
|
||||
rctx->in_sg = rctx->in_sg_chain;
|
||||
|
||||
req->src = rctx->in_sg_chain;
|
||||
/* only data from previous operation */
|
||||
} else if (rctx->buf_cnt) {
|
||||
if (req->src)
|
||||
rctx->in_sg = req->src;
|
||||
else
|
||||
rctx->in_sg = rctx->in_sg_chain;
|
||||
/* buf was copied into rembuf above */
|
||||
rctx->in_sg = rctx->in_sg_chain;
|
||||
sg_init_one(rctx->in_sg, rctx->rembuf, rctx->buf_cnt);
|
||||
rctx->total = rctx->buf_cnt;
|
||||
/* no data from previous operation */
|
||||
} else {
|
||||
rctx->in_sg = req->src;
|
||||
rctx->total = req->nbytes;
|
||||
req->src = rctx->in_sg;
|
||||
}
|
||||
|
||||
/* on next call, we only have the remaining data in the buffer */
|
||||
|
@ -1011,7 +976,10 @@ static int sahara_sha_process(struct ahash_request *req)
|
|||
return ret;
|
||||
|
||||
if (rctx->first) {
|
||||
sahara_sha_hw_data_descriptor_create(dev, rctx, req, 0);
|
||||
ret = sahara_sha_hw_data_descriptor_create(dev, rctx, req, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev->hw_desc[0]->next = 0;
|
||||
rctx->first = 0;
|
||||
} else {
|
||||
|
@ -1019,7 +987,10 @@ static int sahara_sha_process(struct ahash_request *req)
|
|||
|
||||
sahara_sha_hw_context_descriptor_create(dev, rctx, req, 0);
|
||||
dev->hw_desc[0]->next = dev->hw_phys_desc[1];
|
||||
sahara_sha_hw_data_descriptor_create(dev, rctx, req, 1);
|
||||
ret = sahara_sha_hw_data_descriptor_create(dev, rctx, req, 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dev->hw_desc[1]->next = 0;
|
||||
}
|
||||
|
||||
|
@ -1032,18 +1003,19 @@ static int sahara_sha_process(struct ahash_request *req)
|
|||
|
||||
timeout = wait_for_completion_timeout(&dev->dma_completion,
|
||||
msecs_to_jiffies(SAHARA_TIMEOUT_MS));
|
||||
if (!timeout) {
|
||||
dev_err(dev->device, "SHA timeout\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
if (rctx->sg_in_idx)
|
||||
dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
if (!timeout) {
|
||||
dev_err(dev->device, "SHA timeout\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
memcpy(rctx->context, dev->context_base, rctx->context_size);
|
||||
|
||||
if (req->result)
|
||||
if (req->result && rctx->last)
|
||||
memcpy(req->result, rctx->context, rctx->digest_size);
|
||||
|
||||
return 0;
|
||||
|
@ -1187,8 +1159,7 @@ static int sahara_sha_import(struct ahash_request *req, const void *in)
|
|||
static int sahara_sha_cra_init(struct crypto_tfm *tfm)
|
||||
{
|
||||
crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
|
||||
sizeof(struct sahara_sha_reqctx) +
|
||||
SHA_BUFFER_LEN + SHA256_BLOCK_SIZE);
|
||||
sizeof(struct sahara_sha_reqctx));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/virtio.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <crypto/aead.h>
|
||||
#include <crypto/aes.h>
|
||||
#include <crypto/engine.h>
|
||||
|
@ -39,6 +40,7 @@ struct data_queue {
|
|||
char name[32];
|
||||
|
||||
struct crypto_engine *engine;
|
||||
struct tasklet_struct done_task;
|
||||
};
|
||||
|
||||
struct virtio_crypto {
|
||||
|
|
|
@ -34,27 +34,28 @@ virtcrypto_clear_request(struct virtio_crypto_request *vc_req)
|
|||
}
|
||||
}
|
||||
|
||||
static void virtcrypto_dataq_callback(struct virtqueue *vq)
|
||||
static void virtcrypto_done_task(unsigned long data)
|
||||
{
|
||||
struct virtio_crypto *vcrypto = vq->vdev->priv;
|
||||
struct data_queue *data_vq = (struct data_queue *)data;
|
||||
struct virtqueue *vq = data_vq->vq;
|
||||
struct virtio_crypto_request *vc_req;
|
||||
unsigned long flags;
|
||||
unsigned int len;
|
||||
unsigned int qid = vq->index;
|
||||
|
||||
spin_lock_irqsave(&vcrypto->data_vq[qid].lock, flags);
|
||||
do {
|
||||
virtqueue_disable_cb(vq);
|
||||
while ((vc_req = virtqueue_get_buf(vq, &len)) != NULL) {
|
||||
spin_unlock_irqrestore(
|
||||
&vcrypto->data_vq[qid].lock, flags);
|
||||
if (vc_req->alg_cb)
|
||||
vc_req->alg_cb(vc_req, len);
|
||||
spin_lock_irqsave(
|
||||
&vcrypto->data_vq[qid].lock, flags);
|
||||
}
|
||||
} while (!virtqueue_enable_cb(vq));
|
||||
spin_unlock_irqrestore(&vcrypto->data_vq[qid].lock, flags);
|
||||
}
|
||||
|
||||
static void virtcrypto_dataq_callback(struct virtqueue *vq)
|
||||
{
|
||||
struct virtio_crypto *vcrypto = vq->vdev->priv;
|
||||
struct data_queue *dq = &vcrypto->data_vq[vq->index];
|
||||
|
||||
tasklet_schedule(&dq->done_task);
|
||||
}
|
||||
|
||||
static int virtcrypto_find_vqs(struct virtio_crypto *vi)
|
||||
|
@ -111,6 +112,8 @@ static int virtcrypto_find_vqs(struct virtio_crypto *vi)
|
|||
ret = -ENOMEM;
|
||||
goto err_engine;
|
||||
}
|
||||
tasklet_init(&vi->data_vq[i].done_task, virtcrypto_done_task,
|
||||
(unsigned long)&vi->data_vq[i]);
|
||||
}
|
||||
|
||||
kfree(names);
|
||||
|
@ -443,11 +446,14 @@ static void virtcrypto_free_unused_reqs(struct virtio_crypto *vcrypto)
|
|||
static void virtcrypto_remove(struct virtio_device *vdev)
|
||||
{
|
||||
struct virtio_crypto *vcrypto = vdev->priv;
|
||||
int i;
|
||||
|
||||
dev_info(&vdev->dev, "Start virtcrypto_remove.\n");
|
||||
|
||||
if (virtcrypto_dev_started(vcrypto))
|
||||
virtcrypto_dev_stop(vcrypto);
|
||||
for (i = 0; i < vcrypto->max_data_queues; i++)
|
||||
tasklet_kill(&vcrypto->data_vq[i].done_task);
|
||||
vdev->config->reset(vdev);
|
||||
virtcrypto_free_unused_reqs(vcrypto);
|
||||
virtcrypto_clear_crypto_engines(vcrypto);
|
||||
|
|
|
@ -1133,7 +1133,7 @@ static irqreturn_t thunderx_ocx_com_threaded_isr(int irq, void *irq_id)
|
|||
decode_register(other, OCX_OTHER_SIZE,
|
||||
ocx_com_errors, ctx->reg_com_int);
|
||||
|
||||
strncat(msg, other, OCX_MESSAGE_SIZE);
|
||||
strlcat(msg, other, OCX_MESSAGE_SIZE);
|
||||
|
||||
for (lane = 0; lane < OCX_RX_LANES; lane++)
|
||||
if (ctx->reg_com_int & BIT(lane)) {
|
||||
|
@ -1142,12 +1142,12 @@ static irqreturn_t thunderx_ocx_com_threaded_isr(int irq, void *irq_id)
|
|||
lane, ctx->reg_lane_int[lane],
|
||||
lane, ctx->reg_lane_stat11[lane]);
|
||||
|
||||
strncat(msg, other, OCX_MESSAGE_SIZE);
|
||||
strlcat(msg, other, OCX_MESSAGE_SIZE);
|
||||
|
||||
decode_register(other, OCX_OTHER_SIZE,
|
||||
ocx_lane_errors,
|
||||
ctx->reg_lane_int[lane]);
|
||||
strncat(msg, other, OCX_MESSAGE_SIZE);
|
||||
strlcat(msg, other, OCX_MESSAGE_SIZE);
|
||||
}
|
||||
|
||||
if (ctx->reg_com_int & OCX_COM_INT_CE)
|
||||
|
@ -1217,7 +1217,7 @@ static irqreturn_t thunderx_ocx_lnk_threaded_isr(int irq, void *irq_id)
|
|||
decode_register(other, OCX_OTHER_SIZE,
|
||||
ocx_com_link_errors, ctx->reg_com_link_int);
|
||||
|
||||
strncat(msg, other, OCX_MESSAGE_SIZE);
|
||||
strlcat(msg, other, OCX_MESSAGE_SIZE);
|
||||
|
||||
if (ctx->reg_com_link_int & OCX_COM_LINK_INT_UE)
|
||||
edac_device_handle_ue(ocx->edac_dev, 0, 0, msg);
|
||||
|
@ -1896,7 +1896,7 @@ static irqreturn_t thunderx_l2c_threaded_isr(int irq, void *irq_id)
|
|||
|
||||
decode_register(other, L2C_OTHER_SIZE, l2_errors, ctx->reg_int);
|
||||
|
||||
strncat(msg, other, L2C_MESSAGE_SIZE);
|
||||
strlcat(msg, other, L2C_MESSAGE_SIZE);
|
||||
|
||||
if (ctx->reg_int & mask_ue)
|
||||
edac_device_handle_ue(l2c->edac_dev, 0, 0, msg);
|
||||
|
|
|
@ -176,7 +176,7 @@ static int ti_sci_debugfs_create(struct platform_device *pdev,
|
|||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct resource *res;
|
||||
char debug_name[50] = "ti_sci_debug@";
|
||||
char debug_name[50];
|
||||
|
||||
/* Debug region is optional */
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
|
||||
|
@ -193,10 +193,10 @@ static int ti_sci_debugfs_create(struct platform_device *pdev,
|
|||
/* Setup NULL termination */
|
||||
info->debug_buffer[info->debug_region_size] = 0;
|
||||
|
||||
info->d = debugfs_create_file(strncat(debug_name, dev_name(dev),
|
||||
sizeof(debug_name) -
|
||||
sizeof("ti_sci_debug@")),
|
||||
0444, NULL, info, &ti_sci_debug_fops);
|
||||
snprintf(debug_name, sizeof(debug_name), "ti_sci_debug@%s",
|
||||
dev_name(dev));
|
||||
info->d = debugfs_create_file(debug_name, 0444, NULL, info,
|
||||
&ti_sci_debug_fops);
|
||||
if (IS_ERR(info->d))
|
||||
return PTR_ERR(info->d);
|
||||
|
||||
|
|
|
@ -392,7 +392,7 @@ static ssize_t amdgpu_debugfs_regs_smc_read(struct file *f, char __user *buf,
|
|||
int r;
|
||||
|
||||
if (!adev->smc_rreg)
|
||||
return -EPERM;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (size & 0x3 || *pos & 0x3)
|
||||
return -EINVAL;
|
||||
|
@ -434,7 +434,7 @@ static ssize_t amdgpu_debugfs_regs_smc_write(struct file *f, const char __user *
|
|||
int r;
|
||||
|
||||
if (!adev->smc_wreg)
|
||||
return -EPERM;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (size & 0x3 || *pos & 0x3)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -2734,10 +2734,8 @@ static int kv_parse_power_table(struct amdgpu_device *adev)
|
|||
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
|
||||
&non_clock_info_array->nonClockInfo[non_clock_array_index];
|
||||
ps = kzalloc(sizeof(struct kv_ps), GFP_KERNEL);
|
||||
if (ps == NULL) {
|
||||
kfree(adev->pm.dpm.ps);
|
||||
if (ps == NULL)
|
||||
return -ENOMEM;
|
||||
}
|
||||
adev->pm.dpm.ps[i].ps_priv = ps;
|
||||
k = 0;
|
||||
idx = (u8 *)&power_state->v2.clockInfoIndex[0];
|
||||
|
|
|
@ -7346,10 +7346,9 @@ static int si_dpm_init(struct amdgpu_device *adev)
|
|||
kcalloc(4,
|
||||
sizeof(struct amdgpu_clock_voltage_dependency_entry),
|
||||
GFP_KERNEL);
|
||||
if (!adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) {
|
||||
amdgpu_free_extended_power_table(adev);
|
||||
if (!adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.count = 4;
|
||||
adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].clk = 0;
|
||||
adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].v = 0;
|
||||
|
|
|
@ -573,8 +573,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
|||
struct drm_mode_set set;
|
||||
uint32_t __user *set_connectors_ptr;
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
int ret;
|
||||
int i;
|
||||
int ret, i, num_connectors = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
|
@ -739,6 +738,7 @@ retry:
|
|||
connector->name);
|
||||
|
||||
connector_set[i] = connector;
|
||||
num_connectors++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -747,7 +747,7 @@ retry:
|
|||
set.y = crtc_req->y;
|
||||
set.mode = mode;
|
||||
set.connectors = connector_set;
|
||||
set.num_connectors = crtc_req->count_connectors;
|
||||
set.num_connectors = num_connectors;
|
||||
set.fb = fb;
|
||||
|
||||
if (drm_drv_uses_atomic_modeset(dev))
|
||||
|
@ -760,7 +760,7 @@ out:
|
|||
drm_framebuffer_put(fb);
|
||||
|
||||
if (connector_set) {
|
||||
for (i = 0; i < crtc_req->count_connectors; i++) {
|
||||
for (i = 0; i < num_connectors; i++) {
|
||||
if (connector_set[i])
|
||||
drm_connector_put(connector_set[i]);
|
||||
}
|
||||
|
|
|
@ -818,8 +818,11 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
|
|||
goto err_minors;
|
||||
}
|
||||
|
||||
if (drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
drm_modeset_register_all(dev);
|
||||
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
|
||||
ret = drm_modeset_register_all(dev);
|
||||
if (ret)
|
||||
goto err_unload;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
|
@ -831,6 +834,9 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
|
|||
|
||||
goto out_unlock;
|
||||
|
||||
err_unload:
|
||||
if (dev->driver->unload)
|
||||
dev->driver->unload(dev);
|
||||
err_minors:
|
||||
remove_compat_control_link(dev);
|
||||
drm_minor_unregister(dev, DRM_MINOR_PRIMARY);
|
||||
|
|
|
@ -1840,6 +1840,8 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data)
|
|||
return ret;
|
||||
|
||||
crtc = exynos_drm_crtc_get_by_type(drm_dev, EXYNOS_DISPLAY_TYPE_HDMI);
|
||||
if (IS_ERR(crtc))
|
||||
return PTR_ERR(crtc);
|
||||
crtc->pipe_clk = &hdata->phy_clk;
|
||||
|
||||
ret = hdmi_create_connector(encoder);
|
||||
|
|
|
@ -284,6 +284,7 @@ static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||
{
|
||||
struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
|
||||
struct mdp4_kms *mdp4_kms = get_kms(crtc);
|
||||
unsigned long flags;
|
||||
|
||||
DBG("%s", mdp4_crtc->name);
|
||||
|
||||
|
@ -296,6 +297,14 @@ static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||
mdp_irq_unregister(&mdp4_kms->base, &mdp4_crtc->err);
|
||||
mdp4_disable(mdp4_kms);
|
||||
|
||||
if (crtc->state->event && !crtc->state->active) {
|
||||
WARN_ON(mdp4_crtc->event);
|
||||
spin_lock_irqsave(&mdp4_kms->dev->event_lock, flags);
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
crtc->state->event = NULL;
|
||||
spin_unlock_irqrestore(&mdp4_kms->dev->event_lock, flags);
|
||||
}
|
||||
|
||||
mdp4_crtc->enabled = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -2307,7 +2307,7 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track)
|
|||
switch (prim_walk) {
|
||||
case 1:
|
||||
for (i = 0; i < track->num_arrays; i++) {
|
||||
size = track->arrays[i].esize * track->max_indx * 4;
|
||||
size = track->arrays[i].esize * track->max_indx * 4UL;
|
||||
if (track->arrays[i].robj == NULL) {
|
||||
DRM_ERROR("(PW %u) Vertex array %u no buffer "
|
||||
"bound\n", prim_walk, i);
|
||||
|
@ -2326,7 +2326,7 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track)
|
|||
break;
|
||||
case 2:
|
||||
for (i = 0; i < track->num_arrays; i++) {
|
||||
size = track->arrays[i].esize * (nverts - 1) * 4;
|
||||
size = track->arrays[i].esize * (nverts - 1) * 4UL;
|
||||
if (track->arrays[i].robj == NULL) {
|
||||
DRM_ERROR("(PW %u) Vertex array %u no buffer "
|
||||
"bound\n", prim_walk, i);
|
||||
|
|
|
@ -1278,7 +1278,7 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
|
|||
return -EINVAL;
|
||||
}
|
||||
tmp = (reg - CB_COLOR0_BASE) / 4;
|
||||
track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8;
|
||||
track->cb_color_bo_offset[tmp] = (u64)radeon_get_ib_value(p, idx) << 8;
|
||||
ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff);
|
||||
track->cb_color_base_last[tmp] = ib[idx];
|
||||
track->cb_color_bo[tmp] = reloc->robj;
|
||||
|
@ -1305,7 +1305,7 @@ static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx)
|
|||
"0x%04X\n", reg);
|
||||
return -EINVAL;
|
||||
}
|
||||
track->htile_offset = radeon_get_ib_value(p, idx) << 8;
|
||||
track->htile_offset = (u64)radeon_get_ib_value(p, idx) << 8;
|
||||
ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff);
|
||||
track->htile_bo = reloc->robj;
|
||||
track->db_dirty = true;
|
||||
|
|
|
@ -676,11 +676,16 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
|
|||
if (radeon_crtc == NULL)
|
||||
return;
|
||||
|
||||
radeon_crtc->flip_queue = alloc_workqueue("radeon-crtc", WQ_HIGHPRI, 0);
|
||||
if (!radeon_crtc->flip_queue) {
|
||||
kfree(radeon_crtc);
|
||||
return;
|
||||
}
|
||||
|
||||
drm_crtc_init(dev, &radeon_crtc->base, &radeon_crtc_funcs);
|
||||
|
||||
drm_mode_crtc_set_gamma_size(&radeon_crtc->base, 256);
|
||||
radeon_crtc->crtc_id = index;
|
||||
radeon_crtc->flip_queue = alloc_workqueue("radeon-crtc", WQ_HIGHPRI, 0);
|
||||
rdev->mode_info.crtcs[index] = radeon_crtc;
|
||||
|
||||
if (rdev->family >= CHIP_BONAIRE) {
|
||||
|
|
|
@ -1206,13 +1206,17 @@ int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)
|
|||
r = radeon_bo_create(rdev, pd_size, align, true,
|
||||
RADEON_GEM_DOMAIN_VRAM, 0, NULL,
|
||||
NULL, &vm->page_directory);
|
||||
if (r)
|
||||
if (r) {
|
||||
kfree(vm->page_tables);
|
||||
vm->page_tables = NULL;
|
||||
return r;
|
||||
|
||||
}
|
||||
r = radeon_vm_clear_bo(rdev, vm->page_directory);
|
||||
if (r) {
|
||||
radeon_bo_unref(&vm->page_directory);
|
||||
vm->page_directory = NULL;
|
||||
kfree(vm->page_tables);
|
||||
vm->page_tables = NULL;
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -3612,6 +3612,10 @@ static int si_cp_start(struct radeon_device *rdev)
|
|||
for (i = RADEON_RING_TYPE_GFX_INDEX; i <= CAYMAN_RING_TYPE_CP2_INDEX; ++i) {
|
||||
ring = &rdev->ring[i];
|
||||
r = radeon_ring_lock(rdev, ring, 2);
|
||||
if (r) {
|
||||
DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
|
||||
return r;
|
||||
}
|
||||
|
||||
/* clear the compute context state */
|
||||
radeon_ring_write(ring, PACKET3_COMPUTE(PACKET3_CLEAR_STATE, 0));
|
||||
|
|
|
@ -1494,8 +1494,10 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
|
|||
non_clock_array_index = power_state->v2.nonClockInfoIndex;
|
||||
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
|
||||
&non_clock_info_array->nonClockInfo[non_clock_array_index];
|
||||
if (!rdev->pm.power_state[i].clock_info)
|
||||
if (!rdev->pm.power_state[i].clock_info) {
|
||||
kfree(rdev->pm.dpm.ps);
|
||||
return -EINVAL;
|
||||
}
|
||||
ps = kzalloc(sizeof(struct sumo_ps), GFP_KERNEL);
|
||||
if (ps == NULL) {
|
||||
kfree(rdev->pm.dpm.ps);
|
||||
|
|
|
@ -1769,8 +1769,10 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
|
|||
non_clock_array_index = power_state->v2.nonClockInfoIndex;
|
||||
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
|
||||
&non_clock_info_array->nonClockInfo[non_clock_array_index];
|
||||
if (!rdev->pm.power_state[i].clock_info)
|
||||
if (!rdev->pm.power_state[i].clock_info) {
|
||||
kfree(rdev->pm.dpm.ps);
|
||||
return -EINVAL;
|
||||
}
|
||||
ps = kzalloc(sizeof(struct sumo_ps), GFP_KERNEL);
|
||||
if (ps == NULL) {
|
||||
kfree(rdev->pm.dpm.ps);
|
||||
|
|
|
@ -2533,8 +2533,8 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
|
|||
{
|
||||
struct hid_data *hid_data = &wacom_wac->hid_data;
|
||||
bool mt = wacom_wac->features.touch_max > 1;
|
||||
bool prox = hid_data->tipswitch &&
|
||||
report_touch_events(wacom_wac);
|
||||
bool touch_down = hid_data->tipswitch && hid_data->confidence;
|
||||
bool prox = touch_down && report_touch_events(wacom_wac);
|
||||
|
||||
if (wacom_wac->shared->has_mute_touch_switch &&
|
||||
!wacom_wac->shared->is_touch_on) {
|
||||
|
@ -2573,24 +2573,6 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
|
|||
}
|
||||
}
|
||||
|
||||
static bool wacom_wac_slot_is_active(struct input_dev *dev, int key)
|
||||
{
|
||||
struct input_mt *mt = dev->mt;
|
||||
struct input_mt_slot *s;
|
||||
|
||||
if (!mt)
|
||||
return false;
|
||||
|
||||
for (s = mt->slots; s != mt->slots + mt->num_slots; s++) {
|
||||
if (s->key == key &&
|
||||
input_mt_get_value(s, ABS_MT_TRACKING_ID) >= 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void wacom_wac_finger_event(struct hid_device *hdev,
|
||||
struct hid_field *field, struct hid_usage *usage, __s32 value)
|
||||
{
|
||||
|
@ -2633,14 +2615,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
|
|||
|
||||
|
||||
if (usage->usage_index + 1 == field->report_count) {
|
||||
if (equivalent_usage == wacom_wac->hid_data.last_slot_field) {
|
||||
bool touch_removed = wacom_wac_slot_is_active(wacom_wac->touch_input,
|
||||
wacom_wac->hid_data.id) && !wacom_wac->hid_data.tipswitch;
|
||||
|
||||
if (wacom_wac->hid_data.confidence || touch_removed) {
|
||||
wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
|
||||
}
|
||||
}
|
||||
if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
|
||||
wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -363,7 +363,7 @@ struct etmv4_drvdata {
|
|||
u8 ctxid_size;
|
||||
u8 vmid_size;
|
||||
u8 ccsize;
|
||||
u8 ccitmin;
|
||||
u16 ccitmin;
|
||||
u8 s_ex_level;
|
||||
u8 ns_ex_level;
|
||||
u8 q_support;
|
||||
|
|
|
@ -233,8 +233,17 @@ static bool is_ack(struct s3c24xx_i2c *i2c)
|
|||
int tries;
|
||||
|
||||
for (tries = 50; tries; --tries) {
|
||||
if (readl(i2c->regs + S3C2410_IICCON)
|
||||
& S3C2410_IICCON_IRQPEND) {
|
||||
unsigned long tmp = readl(i2c->regs + S3C2410_IICCON);
|
||||
|
||||
if (!(tmp & S3C2410_IICCON_ACKEN)) {
|
||||
/*
|
||||
* Wait a bit for the bus to stabilize,
|
||||
* delay estimated experimentally.
|
||||
*/
|
||||
usleep_range(100, 200);
|
||||
return true;
|
||||
}
|
||||
if (tmp & S3C2410_IICCON_IRQPEND) {
|
||||
if (!(readl(i2c->regs + S3C2410_IICSTAT)
|
||||
& S3C2410_IICSTAT_LASTBIT))
|
||||
return true;
|
||||
|
@ -287,16 +296,6 @@ static void s3c24xx_i2c_message_start(struct s3c24xx_i2c *i2c,
|
|||
|
||||
stat |= S3C2410_IICSTAT_START;
|
||||
writel(stat, i2c->regs + S3C2410_IICSTAT);
|
||||
|
||||
if (i2c->quirks & QUIRK_POLL) {
|
||||
while ((i2c->msg_num != 0) && is_ack(i2c)) {
|
||||
i2c_s3c_irq_nextbyte(i2c, stat);
|
||||
stat = readl(i2c->regs + S3C2410_IICSTAT);
|
||||
|
||||
if (stat & S3C2410_IICSTAT_ARBITR)
|
||||
dev_err(i2c->dev, "deal with arbitration loss\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void s3c24xx_i2c_stop(struct s3c24xx_i2c *i2c, int ret)
|
||||
|
@ -703,7 +702,7 @@ static void s3c24xx_i2c_wait_idle(struct s3c24xx_i2c *i2c)
|
|||
static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c,
|
||||
struct i2c_msg *msgs, int num)
|
||||
{
|
||||
unsigned long timeout;
|
||||
unsigned long timeout = 0;
|
||||
int ret;
|
||||
|
||||
if (i2c->suspended)
|
||||
|
@ -726,16 +725,19 @@ static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c,
|
|||
s3c24xx_i2c_message_start(i2c, msgs);
|
||||
|
||||
if (i2c->quirks & QUIRK_POLL) {
|
||||
ret = i2c->msg_idx;
|
||||
while ((i2c->msg_num != 0) && is_ack(i2c)) {
|
||||
unsigned long stat = readl(i2c->regs + S3C2410_IICSTAT);
|
||||
|
||||
if (ret != num)
|
||||
dev_dbg(i2c->dev, "incomplete xfer (%d)\n", ret);
|
||||
i2c_s3c_irq_nextbyte(i2c, stat);
|
||||
|
||||
goto out;
|
||||
stat = readl(i2c->regs + S3C2410_IICSTAT);
|
||||
if (stat & S3C2410_IICSTAT_ARBITR)
|
||||
dev_err(i2c->dev, "deal with arbitration loss\n");
|
||||
}
|
||||
} else {
|
||||
timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
|
||||
}
|
||||
|
||||
timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
|
||||
|
||||
ret = i2c->msg_idx;
|
||||
|
||||
/*
|
||||
|
|
|
@ -641,7 +641,7 @@ void mthca_free_mailbox(struct mthca_dev *dev, struct mthca_mailbox *mailbox)
|
|||
|
||||
int mthca_SYS_EN(struct mthca_dev *dev)
|
||||
{
|
||||
u64 out;
|
||||
u64 out = 0;
|
||||
int ret;
|
||||
|
||||
ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, CMD_TIME_CLASS_D);
|
||||
|
@ -1961,7 +1961,7 @@ int mthca_WRITE_MGM(struct mthca_dev *dev, int index,
|
|||
int mthca_MGID_HASH(struct mthca_dev *dev, struct mthca_mailbox *mailbox,
|
||||
u16 *hash)
|
||||
{
|
||||
u64 imm;
|
||||
u64 imm = 0;
|
||||
int err;
|
||||
|
||||
err = mthca_cmd_imm(dev, mailbox->dma, &imm, 0, 0, CMD_MGID_HASH,
|
||||
|
|
|
@ -382,7 +382,7 @@ static int mthca_init_icm(struct mthca_dev *mdev,
|
|||
struct mthca_init_hca_param *init_hca,
|
||||
u64 icm_size)
|
||||
{
|
||||
u64 aux_pages;
|
||||
u64 aux_pages = 0;
|
||||
int err;
|
||||
|
||||
err = mthca_SET_ICM_SIZE(mdev, icm_size, &aux_pages);
|
||||
|
|
|
@ -280,6 +280,7 @@ static const struct xpad_device {
|
|||
{ 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE },
|
||||
{ 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
|
||||
{ 0x1532, 0x0a29, "Razer Wolverine V2", 0, XTYPE_XBOXONE },
|
||||
{ 0x15e4, 0x3f00, "Power A Mini Pro Elite", 0, XTYPE_XBOX360 },
|
||||
{ 0x15e4, 0x3f0a, "Xbox Airflo wired controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x15e4, 0x3f10, "Batarang Xbox 360 controller", 0, XTYPE_XBOX360 },
|
||||
|
|
|
@ -717,6 +717,44 @@ static void atkbd_deactivate(struct atkbd *atkbd)
|
|||
ps2dev->serio->phys);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
static bool atkbd_is_portable_device(void)
|
||||
{
|
||||
static const char * const chassis_types[] = {
|
||||
"8", /* Portable */
|
||||
"9", /* Laptop */
|
||||
"10", /* Notebook */
|
||||
"14", /* Sub-Notebook */
|
||||
"31", /* Convertible */
|
||||
"32", /* Detachable */
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(chassis_types); i++)
|
||||
if (dmi_match(DMI_CHASSIS_TYPE, chassis_types[i]))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* On many modern laptops ATKBD_CMD_GETID may cause problems, on these laptops
|
||||
* the controller is always in translated mode. In this mode mice/touchpads will
|
||||
* not work. So in this case simply assume a keyboard is connected to avoid
|
||||
* confusing some laptop keyboards.
|
||||
*
|
||||
* Skipping ATKBD_CMD_GETID ends up using a fake keyboard id. Using the standard
|
||||
* 0xab83 id is ok in translated mode, only atkbd_select_set() checks atkbd->id
|
||||
* and in translated mode that is a no-op.
|
||||
*/
|
||||
static bool atkbd_skip_getid(struct atkbd *atkbd)
|
||||
{
|
||||
return atkbd->translated && atkbd_is_portable_device();
|
||||
}
|
||||
#else
|
||||
static inline bool atkbd_skip_getid(struct atkbd *atkbd) { return false; }
|
||||
#endif
|
||||
|
||||
/*
|
||||
* atkbd_probe() probes for an AT keyboard on a serio port.
|
||||
*/
|
||||
|
@ -725,6 +763,7 @@ static int atkbd_probe(struct atkbd *atkbd)
|
|||
{
|
||||
struct ps2dev *ps2dev = &atkbd->ps2dev;
|
||||
unsigned char param[2];
|
||||
bool skip_getid;
|
||||
|
||||
/*
|
||||
* Some systems, where the bit-twiddling when testing the io-lines of the
|
||||
|
@ -746,17 +785,18 @@ static int atkbd_probe(struct atkbd *atkbd)
|
|||
*/
|
||||
|
||||
param[0] = param[1] = 0xa5; /* initialize with invalid values */
|
||||
if (ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
|
||||
skip_getid = atkbd_skip_getid(atkbd);
|
||||
if (skip_getid || ps2_command(ps2dev, param, ATKBD_CMD_GETID)) {
|
||||
|
||||
/*
|
||||
* If the get ID command failed, we check if we can at least set the LEDs on
|
||||
* the keyboard. This should work on every keyboard out there. It also turns
|
||||
* the LEDs off, which we want anyway.
|
||||
* If the get ID command was skipped or failed, we check if we can at least set
|
||||
* the LEDs on the keyboard. This should work on every keyboard out there.
|
||||
* It also turns the LEDs off, which we want anyway.
|
||||
*/
|
||||
param[0] = 0;
|
||||
if (ps2_command(ps2dev, param, ATKBD_CMD_SETLEDS))
|
||||
return -1;
|
||||
atkbd->id = 0xabba;
|
||||
atkbd->id = skip_getid ? 0xab83 : 0xabba;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -355,6 +355,14 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
|
|||
},
|
||||
.driver_data = (void *)(SERIO_QUIRK_DRITEK)
|
||||
},
|
||||
{
|
||||
/* Acer TravelMate P459-G2-M */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate P459-G2-M"),
|
||||
},
|
||||
.driver_data = (void *)(SERIO_QUIRK_NOMUX)
|
||||
},
|
||||
{
|
||||
/* Amoi M636/A737 */
|
||||
.matches = {
|
||||
|
|
|
@ -113,6 +113,8 @@ static int dvb_device_open(struct inode *inode, struct file *file)
|
|||
err = file->f_op->open(inode, file);
|
||||
up_read(&minor_rwsem);
|
||||
mutex_unlock(&dvbdev_mutex);
|
||||
if (err)
|
||||
dvb_device_put(dvbdev);
|
||||
return err;
|
||||
}
|
||||
fail:
|
||||
|
|
|
@ -1040,6 +1040,7 @@ int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
|
|||
if (!dev->video_mode.isoc_ctl.urb) {
|
||||
dev_err(dev->dev,
|
||||
"cannot alloc memory for usb buffers\n");
|
||||
kfree(dma_q->p_left_data);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -1049,6 +1050,7 @@ int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
|
|||
dev_err(dev->dev,
|
||||
"cannot allocate memory for usbtransfer\n");
|
||||
kfree(dev->video_mode.isoc_ctl.urb);
|
||||
kfree(dma_q->p_left_data);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -277,7 +277,8 @@ void pvr2_context_disconnect(struct pvr2_context *mp)
|
|||
{
|
||||
pvr2_hdw_disconnect(mp->hdw);
|
||||
mp->disconnect_flag = !0;
|
||||
pvr2_context_notify(mp);
|
||||
if (!pvr2_context_shutok())
|
||||
pvr2_context_notify(mp);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -935,13 +935,14 @@ config MMC_SDHCI_XENON
|
|||
|
||||
config MMC_SDHCI_OMAP
|
||||
tristate "TI SDHCI Controller Support"
|
||||
depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || COMPILE_TEST
|
||||
depends on MMC_SDHCI_PLTFM && OF
|
||||
select THERMAL
|
||||
imply TI_SOC_THERMAL
|
||||
help
|
||||
This selects the Secure Digital Host Controller Interface (SDHCI)
|
||||
support present in TI's DRA7 SOCs. The controller supports
|
||||
SD/MMC/SDIO devices.
|
||||
support present in TI's Keystone/OMAP2+/DRA7 SOCs. The controller
|
||||
supports SD/MMC/SDIO devices.
|
||||
|
||||
If you have a controller with this interface, say Y or M here.
|
||||
|
||||
|
|
|
@ -521,7 +521,7 @@ static void blktrans_notify_add(struct mtd_info *mtd)
|
|||
{
|
||||
struct mtd_blktrans_ops *tr;
|
||||
|
||||
if (mtd->type == MTD_ABSENT)
|
||||
if (mtd->type == MTD_ABSENT || mtd->type == MTD_UBIVOLUME)
|
||||
return;
|
||||
|
||||
list_for_each_entry(tr, &blktrans_majors, list)
|
||||
|
@ -564,7 +564,7 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
|
|||
list_add(&tr->list, &blktrans_majors);
|
||||
|
||||
mtd_for_each_device(mtd)
|
||||
if (mtd->type != MTD_ABSENT)
|
||||
if (mtd->type != MTD_ABSENT && mtd->type != MTD_UBIVOLUME)
|
||||
tr->add_mtd(tr, mtd);
|
||||
|
||||
mutex_unlock(&mtd_table_mutex);
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#define ERR_BYTE 0xFF /* Value returned for read
|
||||
bytes when read failed */
|
||||
#define IFC_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait
|
||||
#define IFC_TIMEOUT_MSECS 1000 /* Maximum timeout to wait
|
||||
for IFC NAND Machine */
|
||||
|
||||
struct fsl_ifc_ctrl;
|
||||
|
|
|
@ -1227,6 +1227,8 @@ static int vsc73xx_gpio_probe(struct vsc73xx *vsc)
|
|||
|
||||
vsc->gc.label = devm_kasprintf(vsc->dev, GFP_KERNEL, "VSC%04x",
|
||||
vsc->chipid);
|
||||
if (!vsc->gc.label)
|
||||
return -ENOMEM;
|
||||
vsc->gc.ngpio = 4;
|
||||
vsc->gc.owner = THIS_MODULE;
|
||||
vsc->gc.parent = vsc->dev;
|
||||
|
|
|
@ -6449,6 +6449,14 @@ static void tg3_dump_state(struct tg3 *tp)
|
|||
int i;
|
||||
u32 *regs;
|
||||
|
||||
/* If it is a PCI error, all registers will be 0xffff,
|
||||
* we don't dump them out, just report the error and return
|
||||
*/
|
||||
if (tp->pdev->error_state != pci_channel_io_normal) {
|
||||
netdev_err(tp->dev, "PCI channel ERROR!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
|
||||
if (!regs)
|
||||
return;
|
||||
|
@ -11199,7 +11207,8 @@ static void tg3_reset_task(struct work_struct *work)
|
|||
rtnl_lock();
|
||||
tg3_full_lock(tp, 0);
|
||||
|
||||
if (tp->pcierr_recovery || !netif_running(tp->dev)) {
|
||||
if (tp->pcierr_recovery || !netif_running(tp->dev) ||
|
||||
tp->pdev->error_state != pci_channel_io_normal) {
|
||||
tg3_flag_clear(tp, RESET_TASK_PENDING);
|
||||
tg3_full_unlock(tp);
|
||||
rtnl_unlock();
|
||||
|
|
|
@ -384,7 +384,7 @@ nla_put_failure:
|
|||
|
||||
struct rtnl_link_ops rmnet_link_ops __read_mostly = {
|
||||
.kind = "rmnet",
|
||||
.maxtype = __IFLA_RMNET_MAX,
|
||||
.maxtype = IFLA_RMNET_MAX,
|
||||
.priv_size = sizeof(struct rmnet_priv),
|
||||
.setup = rmnet_vnd_setup,
|
||||
.validate = rmnet_rtnl_validate,
|
||||
|
|
|
@ -1508,7 +1508,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
|||
struct ravb_tstamp_skb *ts_skb;
|
||||
struct ravb_tx_desc *desc;
|
||||
unsigned long flags;
|
||||
u32 dma_addr;
|
||||
dma_addr_t dma_addr;
|
||||
void *buffer;
|
||||
u32 entry;
|
||||
u32 len;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
config LIBERTAS
|
||||
tristate "Marvell 8xxx Libertas WLAN driver support"
|
||||
depends on CFG80211
|
||||
select WIRELESS_EXT
|
||||
select WEXT_SPY
|
||||
select LIB80211
|
||||
select FW_LOADER
|
||||
---help---
|
||||
|
|
|
@ -1957,6 +1957,8 @@ static int mwifiex_cfg80211_start_ap(struct wiphy *wiphy,
|
|||
|
||||
mwifiex_set_sys_config_invalid_data(bss_cfg);
|
||||
|
||||
memcpy(bss_cfg->mac_addr, priv->curr_addr, ETH_ALEN);
|
||||
|
||||
if (params->beacon_interval)
|
||||
bss_cfg->beacon_period = params->beacon_interval;
|
||||
if (params->dtim_period)
|
||||
|
|
|
@ -177,6 +177,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
|
|||
#define TLV_TYPE_STA_MAC_ADDR (PROPRIETARY_TLV_BASE_ID + 32)
|
||||
#define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 35)
|
||||
#define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 42)
|
||||
#define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 43)
|
||||
#define TLV_TYPE_UAP_BEACON_PERIOD (PROPRIETARY_TLV_BASE_ID + 44)
|
||||
#define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 45)
|
||||
#define TLV_TYPE_UAP_BCAST_SSID (PROPRIETARY_TLV_BASE_ID + 48)
|
||||
|
|
|
@ -119,6 +119,7 @@ struct mwifiex_uap_bss_param {
|
|||
u8 qos_info;
|
||||
u8 power_constraint;
|
||||
struct mwifiex_types_wmm_info wmm_info;
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
|
@ -479,6 +479,7 @@ void mwifiex_config_uap_11d(struct mwifiex_private *priv,
|
|||
static int
|
||||
mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
|
||||
{
|
||||
struct host_cmd_tlv_mac_addr *mac_tlv;
|
||||
struct host_cmd_tlv_dtim_period *dtim_period;
|
||||
struct host_cmd_tlv_beacon_period *beacon_period;
|
||||
struct host_cmd_tlv_ssid *ssid;
|
||||
|
@ -498,6 +499,13 @@ mwifiex_uap_bss_param_prepare(u8 *tlv, void *cmd_buf, u16 *param_size)
|
|||
int i;
|
||||
u16 cmd_size = *param_size;
|
||||
|
||||
mac_tlv = (struct host_cmd_tlv_mac_addr *)tlv;
|
||||
mac_tlv->header.type = cpu_to_le16(TLV_TYPE_UAP_MAC_ADDRESS);
|
||||
mac_tlv->header.len = cpu_to_le16(ETH_ALEN);
|
||||
memcpy(mac_tlv->mac_addr, bss_cfg->mac_addr, ETH_ALEN);
|
||||
cmd_size += sizeof(struct host_cmd_tlv_mac_addr);
|
||||
tlv += sizeof(struct host_cmd_tlv_mac_addr);
|
||||
|
||||
if (bss_cfg->ssid.ssid_len) {
|
||||
ssid = (struct host_cmd_tlv_ssid *)tlv;
|
||||
ssid->header.type = cpu_to_le16(TLV_TYPE_UAP_SSID);
|
||||
|
|
|
@ -186,21 +186,29 @@ static bool _rtl_pci_platform_switch_device_pci_aspm(
|
|||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
|
||||
if (rtlhal->hw_type != HARDWARE_TYPE_RTL8192SE)
|
||||
value |= 0x40;
|
||||
value &= PCI_EXP_LNKCTL_ASPMC;
|
||||
|
||||
pci_write_config_byte(rtlpci->pdev, 0x80, value);
|
||||
if (rtlhal->hw_type != HARDWARE_TYPE_RTL8192SE)
|
||||
value |= PCI_EXP_LNKCTL_CCC;
|
||||
|
||||
pcie_capability_clear_and_set_word(rtlpci->pdev, PCI_EXP_LNKCTL,
|
||||
PCI_EXP_LNKCTL_ASPMC | value,
|
||||
value);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*When we set 0x01 to enable clk request. Set 0x0 to disable clk req.*/
|
||||
static void _rtl_pci_switch_clk_req(struct ieee80211_hw *hw, u8 value)
|
||||
/* @value is PCI_EXP_LNKCTL_CLKREQ_EN or 0 to enable/disable clk request. */
|
||||
static void _rtl_pci_switch_clk_req(struct ieee80211_hw *hw, u16 value)
|
||||
{
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
|
||||
pci_write_config_byte(rtlpci->pdev, 0x81, value);
|
||||
value &= PCI_EXP_LNKCTL_CLKREQ_EN;
|
||||
|
||||
pcie_capability_clear_and_set_word(rtlpci->pdev, PCI_EXP_LNKCTL,
|
||||
PCI_EXP_LNKCTL_CLKREQ_EN,
|
||||
value);
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192SE)
|
||||
udelay(100);
|
||||
|
@ -214,11 +222,8 @@ static void rtl_pci_disable_aspm(struct ieee80211_hw *hw)
|
|||
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor;
|
||||
u8 num4bytes = pcipriv->ndis_adapter.num4bytes;
|
||||
/*Retrieve original configuration settings. */
|
||||
u8 linkctrl_reg = pcipriv->ndis_adapter.linkctrl_reg;
|
||||
u16 pcibridge_linkctrlreg = pcipriv->ndis_adapter.
|
||||
pcibridge_linkctrlreg;
|
||||
u16 aspmlevel = 0;
|
||||
u8 tmp_u1b = 0;
|
||||
|
||||
|
@ -243,16 +248,8 @@ static void rtl_pci_disable_aspm(struct ieee80211_hw *hw)
|
|||
/*Set corresponding value. */
|
||||
aspmlevel |= BIT(0) | BIT(1);
|
||||
linkctrl_reg &= ~aspmlevel;
|
||||
pcibridge_linkctrlreg &= ~(BIT(0) | BIT(1));
|
||||
|
||||
_rtl_pci_platform_switch_device_pci_aspm(hw, linkctrl_reg);
|
||||
udelay(50);
|
||||
|
||||
/*4 Disable Pci Bridge ASPM */
|
||||
pci_write_config_byte(rtlpci->pdev, (num4bytes << 2),
|
||||
pcibridge_linkctrlreg);
|
||||
|
||||
udelay(50);
|
||||
}
|
||||
|
||||
/*Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for
|
||||
|
@ -267,9 +264,7 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
|
|||
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
u8 pcibridge_vendor = pcipriv->ndis_adapter.pcibridge_vendor;
|
||||
u8 num4bytes = pcipriv->ndis_adapter.num4bytes;
|
||||
u16 aspmlevel;
|
||||
u8 u_pcibridge_aspmsetting;
|
||||
u8 u_device_aspmsetting;
|
||||
|
||||
if (!ppsc->support_aspm)
|
||||
|
@ -281,25 +276,6 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
|
|||
return;
|
||||
}
|
||||
|
||||
/*4 Enable Pci Bridge ASPM */
|
||||
|
||||
u_pcibridge_aspmsetting =
|
||||
pcipriv->ndis_adapter.pcibridge_linkctrlreg |
|
||||
rtlpci->const_hostpci_aspm_setting;
|
||||
|
||||
if (pcibridge_vendor == PCI_BRIDGE_VENDOR_INTEL)
|
||||
u_pcibridge_aspmsetting &= ~BIT(0);
|
||||
|
||||
pci_write_config_byte(rtlpci->pdev, (num4bytes << 2),
|
||||
u_pcibridge_aspmsetting);
|
||||
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
"PlatformEnableASPM(): Write reg[%x] = %x\n",
|
||||
(pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10),
|
||||
u_pcibridge_aspmsetting);
|
||||
|
||||
udelay(50);
|
||||
|
||||
/*Get ASPM level (with/without Clock Req) */
|
||||
aspmlevel = rtlpci->const_devicepci_aspm_setting;
|
||||
u_device_aspmsetting = pcipriv->ndis_adapter.linkctrl_reg;
|
||||
|
@ -313,7 +289,8 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw)
|
|||
|
||||
if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_CLK_REQ) {
|
||||
_rtl_pci_switch_clk_req(hw, (ppsc->reg_rfps_level &
|
||||
RT_RF_OFF_LEVL_CLK_REQ) ? 1 : 0);
|
||||
RT_RF_OFF_LEVL_CLK_REQ) ?
|
||||
PCI_EXP_LNKCTL_CLKREQ_EN : 0);
|
||||
RT_SET_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_CLK_REQ);
|
||||
}
|
||||
udelay(100);
|
||||
|
@ -381,22 +358,6 @@ static bool rtl_pci_check_buddy_priv(struct ieee80211_hw *hw,
|
|||
return find_buddy_priv;
|
||||
}
|
||||
|
||||
static void rtl_pci_get_linkcontrol_field(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(pcipriv);
|
||||
u8 capabilityoffset = pcipriv->ndis_adapter.pcibridge_pciehdr_offset;
|
||||
u8 linkctrl_reg;
|
||||
u8 num4bbytes;
|
||||
|
||||
num4bbytes = (capabilityoffset + 0x10) / 4;
|
||||
|
||||
/*Read Link Control Register */
|
||||
pci_read_config_byte(rtlpci->pdev, (num4bbytes << 2), &linkctrl_reg);
|
||||
|
||||
pcipriv->ndis_adapter.pcibridge_linkctrlreg = linkctrl_reg;
|
||||
}
|
||||
|
||||
static void rtl_pci_parse_configuration(struct pci_dev *pdev,
|
||||
struct ieee80211_hw *hw)
|
||||
{
|
||||
|
@ -2063,12 +2024,6 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
|
|||
PCI_SLOT(bridge_pdev->devfn);
|
||||
pcipriv->ndis_adapter.pcibridge_funcnum =
|
||||
PCI_FUNC(bridge_pdev->devfn);
|
||||
pcipriv->ndis_adapter.pcibridge_pciehdr_offset =
|
||||
pci_pcie_cap(bridge_pdev);
|
||||
pcipriv->ndis_adapter.num4bytes =
|
||||
(pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10) / 4;
|
||||
|
||||
rtl_pci_get_linkcontrol_field(hw);
|
||||
|
||||
if (pcipriv->ndis_adapter.pcibridge_vendor ==
|
||||
PCI_BRIDGE_VENDOR_AMD) {
|
||||
|
@ -2085,13 +2040,11 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
|
|||
pdev->vendor, pcipriv->ndis_adapter.linkctrl_reg);
|
||||
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"pci_bridge busnumber:devnumber:funcnumber:vendor:pcie_cap:link_ctl_reg:amd %d:%d:%d:%x:%x:%x:%x\n",
|
||||
"pci_bridge busnumber:devnumber:funcnumber:vendor:amd %d:%d:%d:%x:%x\n",
|
||||
pcipriv->ndis_adapter.pcibridge_busnum,
|
||||
pcipriv->ndis_adapter.pcibridge_devnum,
|
||||
pcipriv->ndis_adapter.pcibridge_funcnum,
|
||||
pcibridge_vendors[pcipriv->ndis_adapter.pcibridge_vendor],
|
||||
pcipriv->ndis_adapter.pcibridge_pciehdr_offset,
|
||||
pcipriv->ndis_adapter.pcibridge_linkctrlreg,
|
||||
pcipriv->ndis_adapter.amd_l1_patch);
|
||||
|
||||
rtl_pci_parse_configuration(pdev, hw);
|
||||
|
|
|
@ -258,11 +258,6 @@ struct mp_adapter {
|
|||
u16 pcibridge_vendorid;
|
||||
u16 pcibridge_deviceid;
|
||||
|
||||
u8 num4bytes;
|
||||
|
||||
u8 pcibridge_pciehdr_offset;
|
||||
u8 pcibridge_linkctrlreg;
|
||||
|
||||
bool amd_l1_patch;
|
||||
};
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ static u32 _rtl88e_phy_rf_serial_read(struct ieee80211_hw *hw,
|
|||
static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw,
|
||||
enum radio_path rfpath, u32 offset,
|
||||
u32 data);
|
||||
static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask);
|
||||
static bool _rtl88e_phy_bb8188e_config_parafile(struct ieee80211_hw *hw);
|
||||
static bool _rtl88e_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);
|
||||
static bool phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
|
||||
|
@ -68,7 +67,7 @@ u32 rtl88e_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
|||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), bitmask(%#x)\n", regaddr, bitmask);
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
returnvalue = (originalvalue & bitmask) >> bitshift;
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
|
@ -91,7 +90,7 @@ void rtl88e_phy_set_bb_reg(struct ieee80211_hw *hw,
|
|||
|
||||
if (bitmask != MASKDWORD) {
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((originalvalue & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
|
||||
|
@ -117,7 +116,7 @@ u32 rtl88e_phy_query_rf_reg(struct ieee80211_hw *hw,
|
|||
|
||||
|
||||
original_value = _rtl88e_phy_rf_serial_read(hw, rfpath, regaddr);
|
||||
bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
|
||||
|
@ -146,7 +145,7 @@ void rtl88e_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl88e_phy_rf_serial_read(hw,
|
||||
rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl88e_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data =
|
||||
((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
|
@ -232,17 +231,6 @@ static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw,
|
|||
rfpath, pphyreg->rf3wire_offset, data_and_addr);
|
||||
}
|
||||
|
||||
static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
bool rtl88e_phy_mac_config(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
|
|
@ -39,7 +39,7 @@ u32 rtl92c_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
|||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "regaddr(%#x), bitmask(%#x)\n",
|
||||
regaddr, bitmask);
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
returnvalue = (originalvalue & bitmask) >> bitshift;
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
|
@ -62,7 +62,7 @@ void rtl92c_phy_set_bb_reg(struct ieee80211_hw *hw,
|
|||
|
||||
if (bitmask != MASKDWORD) {
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((originalvalue & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
|
||||
|
@ -165,18 +165,6 @@ void _rtl92c_phy_rf_serial_write(struct ieee80211_hw *hw,
|
|||
}
|
||||
EXPORT_SYMBOL(_rtl92c_phy_rf_serial_write);
|
||||
|
||||
u32 _rtl92c_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
EXPORT_SYMBOL(_rtl92c_phy_calculate_bit_shift);
|
||||
|
||||
static void _rtl92c_phy_bb_config_1t(struct ieee80211_hw *hw)
|
||||
{
|
||||
rtl_set_bbreg(hw, RFPGA0_TXINFO, 0x3, 0x2);
|
||||
|
|
|
@ -218,7 +218,6 @@ bool rtl92c_phy_set_rf_power_state(struct ieee80211_hw *hw,
|
|||
void rtl92ce_phy_set_rf_on(struct ieee80211_hw *hw);
|
||||
void rtl92c_phy_set_io(struct ieee80211_hw *hw);
|
||||
void rtl92c_bb_block_on(struct ieee80211_hw *hw);
|
||||
u32 _rtl92c_phy_calculate_bit_shift(u32 bitmask);
|
||||
long _rtl92c_phy_txpwr_idx_to_dbm(struct ieee80211_hw *hw,
|
||||
enum wireless_mode wirelessmode,
|
||||
u8 txpwridx);
|
||||
|
|
|
@ -61,7 +61,7 @@ u32 rtl92c_phy_query_rf_reg(struct ieee80211_hw *hw,
|
|||
rfpath, regaddr);
|
||||
}
|
||||
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
|
||||
spin_unlock(&rtlpriv->locks.rf_lock);
|
||||
|
@ -132,7 +132,7 @@ void rtl92ce_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl92c_phy_rf_serial_read(hw,
|
||||
rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data =
|
||||
((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
|
@ -144,7 +144,7 @@ void rtl92ce_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl92c_phy_fw_rf_serial_read(hw,
|
||||
rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data =
|
||||
((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
|
|
|
@ -116,7 +116,6 @@ u32 _rtl92c_phy_rf_serial_read(struct ieee80211_hw *hw, enum radio_path rfpath,
|
|||
u32 offset);
|
||||
u32 _rtl92c_phy_fw_rf_serial_read(struct ieee80211_hw *hw,
|
||||
enum radio_path rfpath, u32 offset);
|
||||
u32 _rtl92c_phy_calculate_bit_shift(u32 bitmask);
|
||||
void _rtl92c_phy_rf_serial_write(struct ieee80211_hw *hw,
|
||||
enum radio_path rfpath, u32 offset, u32 data);
|
||||
void _rtl92c_phy_fw_rf_serial_write(struct ieee80211_hw *hw,
|
||||
|
|
|
@ -54,7 +54,7 @@ u32 rtl92cu_phy_query_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl92c_phy_fw_rf_serial_read(hw,
|
||||
rfpath, regaddr);
|
||||
}
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
|
||||
|
@ -78,7 +78,7 @@ void rtl92cu_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl92c_phy_rf_serial_read(hw,
|
||||
rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data =
|
||||
((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
|
@ -89,7 +89,7 @@ void rtl92cu_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
original_value = _rtl92c_phy_fw_rf_serial_read(hw,
|
||||
rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl92c_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data =
|
||||
((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
|
|
|
@ -182,17 +182,14 @@ static u32 targetchnl_2g[TARGET_CHNL_NUM_2G] = {
|
|||
25711, 25658, 25606, 25554, 25502, 25451, 25328
|
||||
};
|
||||
|
||||
static u32 _rtl92d_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
static const u8 channel_all[59] = {
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||
36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
|
||||
60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
|
||||
114, 116, 118, 120, 122, 124, 126, 128, 130,
|
||||
132, 134, 136, 138, 140, 149, 151, 153, 155,
|
||||
157, 159, 161, 163, 165
|
||||
};
|
||||
|
||||
u32 rtl92d_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
||||
{
|
||||
|
@ -216,7 +213,7 @@ u32 rtl92d_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
|||
} else {
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
}
|
||||
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
returnvalue = (originalvalue & bitmask) >> bitshift;
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"BBR MASK=0x%x Addr[0x%x]=0x%x\n",
|
||||
|
@ -248,7 +245,7 @@ void rtl92d_phy_set_bb_reg(struct ieee80211_hw *hw,
|
|||
dbi_direct);
|
||||
else
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((originalvalue & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
if (rtlhal->during_mac1init_radioa || rtlhal->during_mac0init_radiob)
|
||||
|
@ -336,7 +333,7 @@ u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw,
|
|||
regaddr, rfpath, bitmask);
|
||||
spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
|
||||
original_value = _rtl92d_phy_rf_serial_read(hw, rfpath, regaddr);
|
||||
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
|
@ -363,7 +360,7 @@ void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
|||
if (bitmask != RFREG_OFFSET_MASK) {
|
||||
original_value = _rtl92d_phy_rf_serial_read(hw,
|
||||
rfpath, regaddr);
|
||||
bitshift = _rtl92d_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((original_value & (~bitmask)) |
|
||||
(data << bitshift));
|
||||
}
|
||||
|
@ -1383,14 +1380,6 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
|
|||
|
||||
u8 rtl92d_get_rightchnlplace_for_iqk(u8 chnl)
|
||||
{
|
||||
u8 channel_all[59] = {
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||
36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
|
||||
60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
|
||||
114, 116, 118, 120, 122, 124, 126, 128, 130,
|
||||
132, 134, 136, 138, 140, 149, 151, 153, 155,
|
||||
157, 159, 161, 163, 165
|
||||
};
|
||||
u8 place = chnl;
|
||||
|
||||
if (chnl > 14) {
|
||||
|
@ -3245,37 +3234,28 @@ void rtl92d_phy_config_macphymode_info(struct ieee80211_hw *hw)
|
|||
u8 rtl92d_get_chnlgroup_fromarray(u8 chnl)
|
||||
{
|
||||
u8 group;
|
||||
u8 channel_info[59] = {
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||
36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56,
|
||||
58, 60, 62, 64, 100, 102, 104, 106, 108,
|
||||
110, 112, 114, 116, 118, 120, 122, 124,
|
||||
126, 128, 130, 132, 134, 136, 138, 140,
|
||||
149, 151, 153, 155, 157, 159, 161, 163,
|
||||
165
|
||||
};
|
||||
|
||||
if (channel_info[chnl] <= 3)
|
||||
if (channel_all[chnl] <= 3)
|
||||
group = 0;
|
||||
else if (channel_info[chnl] <= 9)
|
||||
else if (channel_all[chnl] <= 9)
|
||||
group = 1;
|
||||
else if (channel_info[chnl] <= 14)
|
||||
else if (channel_all[chnl] <= 14)
|
||||
group = 2;
|
||||
else if (channel_info[chnl] <= 44)
|
||||
else if (channel_all[chnl] <= 44)
|
||||
group = 3;
|
||||
else if (channel_info[chnl] <= 54)
|
||||
else if (channel_all[chnl] <= 54)
|
||||
group = 4;
|
||||
else if (channel_info[chnl] <= 64)
|
||||
else if (channel_all[chnl] <= 64)
|
||||
group = 5;
|
||||
else if (channel_info[chnl] <= 112)
|
||||
else if (channel_all[chnl] <= 112)
|
||||
group = 6;
|
||||
else if (channel_info[chnl] <= 126)
|
||||
else if (channel_all[chnl] <= 126)
|
||||
group = 7;
|
||||
else if (channel_info[chnl] <= 140)
|
||||
else if (channel_all[chnl] <= 140)
|
||||
group = 8;
|
||||
else if (channel_info[chnl] <= 153)
|
||||
else if (channel_all[chnl] <= 153)
|
||||
group = 9;
|
||||
else if (channel_info[chnl] <= 159)
|
||||
else if (channel_all[chnl] <= 159)
|
||||
group = 10;
|
||||
else
|
||||
group = 11;
|
||||
|
|
|
@ -38,7 +38,6 @@ static u32 _rtl92ee_phy_rf_serial_read(struct ieee80211_hw *hw,
|
|||
static void _rtl92ee_phy_rf_serial_write(struct ieee80211_hw *hw,
|
||||
enum radio_path rfpath, u32 offset,
|
||||
u32 data);
|
||||
static u32 _rtl92ee_phy_calculate_bit_shift(u32 bitmask);
|
||||
static bool _rtl92ee_phy_bb8192ee_config_parafile(struct ieee80211_hw *hw);
|
||||
static bool _rtl92ee_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);
|
||||
static bool phy_config_bb_with_hdr_file(struct ieee80211_hw *hw,
|
||||
|
@ -68,7 +67,7 @@ u32 rtl92ee_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
|||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), bitmask(%#x)\n", regaddr, bitmask);
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92ee_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
returnvalue = (originalvalue & bitmask) >> bitshift;
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
|
@ -90,7 +89,7 @@ void rtl92ee_phy_set_bb_reg(struct ieee80211_hw *hw, u32 regaddr,
|
|||
|
||||
if (bitmask != MASKDWORD) {
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92ee_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((originalvalue & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
|
||||
|
@ -115,7 +114,7 @@ u32 rtl92ee_phy_query_rf_reg(struct ieee80211_hw *hw,
|
|||
spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
|
||||
|
||||
original_value = _rtl92ee_phy_rf_serial_read(hw , rfpath, regaddr);
|
||||
bitshift = _rtl92ee_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
|
||||
|
@ -143,7 +142,7 @@ void rtl92ee_phy_set_rf_reg(struct ieee80211_hw *hw,
|
|||
|
||||
if (bitmask != RFREG_OFFSET_MASK) {
|
||||
original_value = _rtl92ee_phy_rf_serial_read(hw, rfpath, addr);
|
||||
bitshift = _rtl92ee_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = (original_value & (~bitmask)) | (data << bitshift);
|
||||
}
|
||||
|
||||
|
@ -226,17 +225,6 @@ static void _rtl92ee_phy_rf_serial_write(struct ieee80211_hw *hw,
|
|||
pphyreg->rf3wire_offset, data_and_addr);
|
||||
}
|
||||
|
||||
static u32 _rtl92ee_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
bool rtl92ee_phy_mac_config(struct ieee80211_hw *hw)
|
||||
{
|
||||
return _rtl92ee_phy_config_mac_with_headerfile(hw);
|
||||
|
|
|
@ -36,18 +36,6 @@
|
|||
#include "hw.h"
|
||||
#include "table.h"
|
||||
|
||||
static u32 _rtl92s_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
u32 rtl92s_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
@ -57,7 +45,7 @@ u32 rtl92s_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
|
|||
regaddr, bitmask);
|
||||
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92s_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
returnvalue = (originalvalue & bitmask) >> bitshift;
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, "BBR MASK=0x%x Addr[0x%x]=0x%x\n",
|
||||
|
@ -79,7 +67,7 @@ void rtl92s_phy_set_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask,
|
|||
|
||||
if (bitmask != MASKDWORD) {
|
||||
originalvalue = rtl_read_dword(rtlpriv, regaddr);
|
||||
bitshift = _rtl92s_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((originalvalue & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
|
||||
|
@ -187,7 +175,7 @@ u32 rtl92s_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
|||
|
||||
original_value = _rtl92s_phy_rf_serial_read(hw, rfpath, regaddr);
|
||||
|
||||
bitshift = _rtl92s_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
|
||||
spin_unlock(&rtlpriv->locks.rf_lock);
|
||||
|
@ -218,7 +206,7 @@ void rtl92s_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
|||
if (bitmask != RFREG_OFFSET_MASK) {
|
||||
original_value = _rtl92s_phy_rf_serial_read(hw, rfpath,
|
||||
regaddr);
|
||||
bitshift = _rtl92s_phy_calculate_bit_shift(bitmask);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
data = ((original_value & (~bitmask)) | (data << bitshift));
|
||||
}
|
||||
|
||||
|
|
|
@ -75,13 +75,9 @@ EXPORT_SYMBOL_GPL(rtl8723_phy_set_bb_reg);
|
|||
|
||||
u32 rtl8723_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
u32 i = ffs(bitmask);
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
return i ? i - 1 : 32;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl8723_phy_calculate_bit_shift);
|
||||
|
||||
|
|
|
@ -49,7 +49,13 @@ static u32 _rtl8821ae_phy_rf_serial_read(struct ieee80211_hw *hw,
|
|||
static void _rtl8821ae_phy_rf_serial_write(struct ieee80211_hw *hw,
|
||||
enum radio_path rfpath, u32 offset,
|
||||
u32 data);
|
||||
static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask);
|
||||
static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
if (WARN_ON_ONCE(!bitmask))
|
||||
return 0;
|
||||
|
||||
return __ffs(bitmask);
|
||||
}
|
||||
static bool _rtl8821ae_phy_bb8821a_config_parafile(struct ieee80211_hw *hw);
|
||||
/*static bool _rtl8812ae_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);*/
|
||||
static bool _rtl8821ae_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);
|
||||
|
@ -296,17 +302,6 @@ static void _rtl8821ae_phy_rf_serial_write(struct ieee80211_hw *hw,
|
|||
rfpath, pphyreg->rf3wire_offset, data_and_addr);
|
||||
}
|
||||
|
||||
static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i <= 31; i++) {
|
||||
if (((bitmask >> i) & 0x1) == 1)
|
||||
break;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
bool rtl8821ae_phy_mac_config(struct ieee80211_hw *hw)
|
||||
{
|
||||
bool rtstatus = 0;
|
||||
|
|
|
@ -3251,4 +3251,11 @@ static inline struct ieee80211_sta *rtl_find_sta(struct ieee80211_hw *hw,
|
|||
return ieee80211_find_sta(mac->vif, mac_addr);
|
||||
}
|
||||
|
||||
static inline u32 calculate_bit_shift(u32 bitmask)
|
||||
{
|
||||
if (WARN_ON_ONCE(!bitmask))
|
||||
return 0;
|
||||
|
||||
return __ffs(bitmask);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -456,12 +456,25 @@ static void xenvif_get_requests(struct xenvif_queue *queue,
|
|||
}
|
||||
|
||||
for (shinfo->nr_frags = 0; nr_slots > 0 && shinfo->nr_frags < MAX_SKB_FRAGS;
|
||||
shinfo->nr_frags++, gop++, nr_slots--) {
|
||||
nr_slots--) {
|
||||
if (unlikely(!txp->size)) {
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&queue->response_lock, flags);
|
||||
make_tx_response(queue, txp, 0, XEN_NETIF_RSP_OKAY);
|
||||
push_tx_responses(queue);
|
||||
spin_unlock_irqrestore(&queue->response_lock, flags);
|
||||
++txp;
|
||||
continue;
|
||||
}
|
||||
|
||||
index = pending_index(queue->pending_cons++);
|
||||
pending_idx = queue->pending_ring[index];
|
||||
xenvif_tx_create_map_op(queue, pending_idx, txp,
|
||||
txp == first ? extra_count : 0, gop);
|
||||
frag_set_pending_idx(&frags[shinfo->nr_frags], pending_idx);
|
||||
++shinfo->nr_frags;
|
||||
++gop;
|
||||
|
||||
if (txp == first)
|
||||
txp = txfrags;
|
||||
|
@ -474,20 +487,39 @@ static void xenvif_get_requests(struct xenvif_queue *queue,
|
|||
shinfo = skb_shinfo(nskb);
|
||||
frags = shinfo->frags;
|
||||
|
||||
for (shinfo->nr_frags = 0; shinfo->nr_frags < nr_slots;
|
||||
shinfo->nr_frags++, txp++, gop++) {
|
||||
for (shinfo->nr_frags = 0; shinfo->nr_frags < nr_slots; ++txp) {
|
||||
if (unlikely(!txp->size)) {
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&queue->response_lock, flags);
|
||||
make_tx_response(queue, txp, 0,
|
||||
XEN_NETIF_RSP_OKAY);
|
||||
push_tx_responses(queue);
|
||||
spin_unlock_irqrestore(&queue->response_lock,
|
||||
flags);
|
||||
continue;
|
||||
}
|
||||
|
||||
index = pending_index(queue->pending_cons++);
|
||||
pending_idx = queue->pending_ring[index];
|
||||
xenvif_tx_create_map_op(queue, pending_idx, txp, 0,
|
||||
gop);
|
||||
frag_set_pending_idx(&frags[shinfo->nr_frags],
|
||||
pending_idx);
|
||||
++shinfo->nr_frags;
|
||||
++gop;
|
||||
}
|
||||
|
||||
skb_shinfo(skb)->frag_list = nskb;
|
||||
} else if (nskb) {
|
||||
if (shinfo->nr_frags) {
|
||||
skb_shinfo(skb)->frag_list = nskb;
|
||||
nskb = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (nskb) {
|
||||
/* A frag_list skb was allocated but it is no longer needed
|
||||
* because enough slots were converted to copy ops above.
|
||||
* because enough slots were converted to copy ops above or some
|
||||
* were empty.
|
||||
*/
|
||||
kfree_skb(nskb);
|
||||
}
|
||||
|
|
|
@ -1634,6 +1634,7 @@ int of_parse_phandle_with_args_map(const struct device_node *np,
|
|||
out_args->np = new;
|
||||
of_node_put(cur);
|
||||
cur = new;
|
||||
new = NULL;
|
||||
}
|
||||
put:
|
||||
of_node_put(cur);
|
||||
|
|
|
@ -38,6 +38,13 @@
|
|||
phandle-map-pass-thru = <0x0 0xf0>;
|
||||
};
|
||||
|
||||
provider5: provider5 {
|
||||
#phandle-cells = <2>;
|
||||
phandle-map = <2 7 &provider4 2 3>;
|
||||
phandle-map-mask = <0xff 0xf>;
|
||||
phandle-map-pass-thru = <0x0 0xf0>;
|
||||
};
|
||||
|
||||
consumer-a {
|
||||
phandle-list = <&provider1 1>,
|
||||
<&provider2 2 0>,
|
||||
|
@ -64,7 +71,8 @@
|
|||
<&provider4 4 0x100>,
|
||||
<&provider4 0 0x61>,
|
||||
<&provider0>,
|
||||
<&provider4 19 0x20>;
|
||||
<&provider4 19 0x20>,
|
||||
<&provider5 2 7>;
|
||||
phandle-list-bad-phandle = <12345678 0 0>;
|
||||
phandle-list-bad-args = <&provider2 1 0>,
|
||||
<&provider4 0>;
|
||||
|
|
|
@ -426,6 +426,9 @@ static void __init of_unittest_parse_phandle_with_args(void)
|
|||
|
||||
unittest(passed, "index %i - data error on node %pOF rc=%i\n",
|
||||
i, args.np, rc);
|
||||
|
||||
if (rc == 0)
|
||||
of_node_put(args.np);
|
||||
}
|
||||
|
||||
/* Check for missing list property */
|
||||
|
@ -467,8 +470,9 @@ static void __init of_unittest_parse_phandle_with_args(void)
|
|||
|
||||
static void __init of_unittest_parse_phandle_with_args_map(void)
|
||||
{
|
||||
struct device_node *np, *p0, *p1, *p2, *p3;
|
||||
struct device_node *np, *p[6] = {};
|
||||
struct of_phandle_args args;
|
||||
unsigned int prefs[6];
|
||||
int i, rc;
|
||||
|
||||
np = of_find_node_by_path("/testcase-data/phandle-tests/consumer-b");
|
||||
|
@ -477,34 +481,24 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
|
|||
return;
|
||||
}
|
||||
|
||||
p0 = of_find_node_by_path("/testcase-data/phandle-tests/provider0");
|
||||
if (!p0) {
|
||||
pr_err("missing testcase data\n");
|
||||
return;
|
||||
}
|
||||
|
||||
p1 = of_find_node_by_path("/testcase-data/phandle-tests/provider1");
|
||||
if (!p1) {
|
||||
pr_err("missing testcase data\n");
|
||||
return;
|
||||
}
|
||||
|
||||
p2 = of_find_node_by_path("/testcase-data/phandle-tests/provider2");
|
||||
if (!p2) {
|
||||
pr_err("missing testcase data\n");
|
||||
return;
|
||||
}
|
||||
|
||||
p3 = of_find_node_by_path("/testcase-data/phandle-tests/provider3");
|
||||
if (!p3) {
|
||||
pr_err("missing testcase data\n");
|
||||
return;
|
||||
p[0] = of_find_node_by_path("/testcase-data/phandle-tests/provider0");
|
||||
p[1] = of_find_node_by_path("/testcase-data/phandle-tests/provider1");
|
||||
p[2] = of_find_node_by_path("/testcase-data/phandle-tests/provider2");
|
||||
p[3] = of_find_node_by_path("/testcase-data/phandle-tests/provider3");
|
||||
p[4] = of_find_node_by_path("/testcase-data/phandle-tests/provider4");
|
||||
p[5] = of_find_node_by_path("/testcase-data/phandle-tests/provider5");
|
||||
for (i = 0; i < ARRAY_SIZE(p); ++i) {
|
||||
if (!p[i]) {
|
||||
pr_err("missing testcase data\n");
|
||||
return;
|
||||
}
|
||||
prefs[i] = kref_read(&p[i]->kobj.kref);
|
||||
}
|
||||
|
||||
rc = of_count_phandle_with_args(np, "phandle-list", "#phandle-cells");
|
||||
unittest(rc == 7, "of_count_phandle_with_args() returned %i, expected 7\n", rc);
|
||||
unittest(rc == 8, "of_count_phandle_with_args() returned %i, expected 8\n", rc);
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < 9; i++) {
|
||||
bool passed = true;
|
||||
|
||||
memset(&args, 0, sizeof(args));
|
||||
|
@ -515,13 +509,13 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
|
|||
switch (i) {
|
||||
case 0:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p1);
|
||||
passed &= (args.np == p[1]);
|
||||
passed &= (args.args_count == 1);
|
||||
passed &= (args.args[0] == 1);
|
||||
break;
|
||||
case 1:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p3);
|
||||
passed &= (args.np == p[3]);
|
||||
passed &= (args.args_count == 3);
|
||||
passed &= (args.args[0] == 2);
|
||||
passed &= (args.args[1] == 5);
|
||||
|
@ -532,28 +526,36 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
|
|||
break;
|
||||
case 3:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p0);
|
||||
passed &= (args.np == p[0]);
|
||||
passed &= (args.args_count == 0);
|
||||
break;
|
||||
case 4:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p1);
|
||||
passed &= (args.np == p[1]);
|
||||
passed &= (args.args_count == 1);
|
||||
passed &= (args.args[0] == 3);
|
||||
break;
|
||||
case 5:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p0);
|
||||
passed &= (args.np == p[0]);
|
||||
passed &= (args.args_count == 0);
|
||||
break;
|
||||
case 6:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p2);
|
||||
passed &= (args.np == p[2]);
|
||||
passed &= (args.args_count == 2);
|
||||
passed &= (args.args[0] == 15);
|
||||
passed &= (args.args[1] == 0x20);
|
||||
break;
|
||||
case 7:
|
||||
passed &= !rc;
|
||||
passed &= (args.np == p[3]);
|
||||
passed &= (args.args_count == 3);
|
||||
passed &= (args.args[0] == 2);
|
||||
passed &= (args.args[1] == 5);
|
||||
passed &= (args.args[2] == 3);
|
||||
break;
|
||||
case 8:
|
||||
passed &= (rc == -ENOENT);
|
||||
break;
|
||||
default:
|
||||
|
@ -562,6 +564,9 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
|
|||
|
||||
unittest(passed, "index %i - data error on node %s rc=%i\n",
|
||||
i, args.np->full_name, rc);
|
||||
|
||||
if (rc == 0)
|
||||
of_node_put(args.np);
|
||||
}
|
||||
|
||||
/* Check for missing list property */
|
||||
|
@ -587,6 +592,13 @@ static void __init of_unittest_parse_phandle_with_args_map(void)
|
|||
rc = of_parse_phandle_with_args_map(np, "phandle-list-bad-args",
|
||||
"phandle", 1, &args);
|
||||
unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(p); ++i) {
|
||||
unittest(prefs[i] == kref_read(&p[i]->kobj.kref),
|
||||
"provider%d: expected:%d got:%d\n",
|
||||
i, prefs[i], kref_read(&p[i]->kobj.kref));
|
||||
of_node_put(p[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init of_unittest_property_string(void)
|
||||
|
|
|
@ -107,7 +107,7 @@ static int hi6220_reset_probe(struct platform_device *pdev)
|
|||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
type = (enum hi6220_reset_ctrl_type)of_device_get_match_data(dev);
|
||||
type = (uintptr_t)of_device_get_match_data(dev);
|
||||
|
||||
regmap = syscon_node_to_regmap(np);
|
||||
if (IS_ERR(regmap)) {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <linux/genhd.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/eadm.h>
|
||||
#include "scm_blk.h"
|
||||
|
||||
|
@ -131,7 +132,7 @@ static void scm_request_done(struct scm_request *scmrq)
|
|||
|
||||
for (i = 0; i < nr_requests_per_io && scmrq->request[i]; i++) {
|
||||
msb = &scmrq->aob->msb[i];
|
||||
aidaw = msb->data_addr;
|
||||
aidaw = (u64)phys_to_virt(msb->data_addr);
|
||||
|
||||
if ((msb->flags & MSB_FLAG_IDA) && aidaw &&
|
||||
IS_ALIGNED(aidaw, PAGE_SIZE))
|
||||
|
@ -196,12 +197,12 @@ static int scm_request_prepare(struct scm_request *scmrq)
|
|||
msb->scm_addr = scmdev->address + ((u64) blk_rq_pos(req) << 9);
|
||||
msb->oc = (rq_data_dir(req) == READ) ? MSB_OC_READ : MSB_OC_WRITE;
|
||||
msb->flags |= MSB_FLAG_IDA;
|
||||
msb->data_addr = (u64) aidaw;
|
||||
msb->data_addr = (u64)virt_to_phys(aidaw);
|
||||
|
||||
rq_for_each_segment(bv, req, iter) {
|
||||
WARN_ON(bv.bv_offset);
|
||||
msb->blk_count += bv.bv_len >> 12;
|
||||
aidaw->data_addr = (u64) page_address(bv.bv_page);
|
||||
aidaw->data_addr = virt_to_phys(page_address(bv.bv_page));
|
||||
aidaw++;
|
||||
}
|
||||
|
||||
|
|
|
@ -1381,10 +1381,10 @@ static int hisi_sas_controller_reset(struct hisi_hba *hisi_hba)
|
|||
int rc;
|
||||
|
||||
if (!hisi_hba->hw->soft_reset)
|
||||
return -1;
|
||||
return -ENOENT;
|
||||
|
||||
if (test_and_set_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
|
||||
return -1;
|
||||
return -EPERM;
|
||||
|
||||
dev_info(dev, "controller resetting...\n");
|
||||
hisi_sas_controller_reset_prepare(hisi_hba);
|
||||
|
|
|
@ -2546,7 +2546,7 @@ static int hisi_sas_v3_suspend(struct pci_dev *pdev, pm_message_t state)
|
|||
}
|
||||
|
||||
if (test_and_set_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
|
||||
return -1;
|
||||
return -EPERM;
|
||||
|
||||
scsi_block_requests(shost);
|
||||
set_bit(HISI_SAS_REJECT_CMD_BIT, &hisi_hba->flags);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user