Driver core patches for 3.9-rc1
Here is the big driver core merge for 3.9-rc1 There are two major series here, both of which touch lots of drivers all over the kernel, and will cause you some merge conflicts: - add a new function called devm_ioremap_resource() to properly be able to check return values. - remove CONFIG_EXPERIMENTAL If you need me to provide a merged tree to handle these resolutions, please let me know. Other than those patches, there's not much here, some minor fixes and updates. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iEYEABECAAYFAlEmV0cACgkQMUfUDdst+yncCQCfbmnQZju7kzWXk6PjdFuKspT9 weAAoMCzcAtEzzc4LXuUxxG/sXBVBCjW =yWAQ -----END PGP SIGNATURE----- Merge tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core patches from Greg Kroah-Hartman: "Here is the big driver core merge for 3.9-rc1 There are two major series here, both of which touch lots of drivers all over the kernel, and will cause you some merge conflicts: - add a new function called devm_ioremap_resource() to properly be able to check return values. - remove CONFIG_EXPERIMENTAL Other than those patches, there's not much here, some minor fixes and updates" Fix up trivial conflicts * tag 'driver-core-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (221 commits) base: memory: fix soft/hard_offline_page permissions drivercore: Fix ordering between deferred_probe and exiting initcalls backlight: fix class_find_device() arguments TTY: mark tty_get_device call with the proper const values driver-core: constify data for class_find_device() firmware: Ignore abort check when no user-helper is used firmware: Reduce ifdef CONFIG_FW_LOADER_USER_HELPER firmware: Make user-mode helper optional firmware: Refactoring for splitting user-mode helper code Driver core: treat unregistered bus_types as having no devices watchdog: Convert to devm_ioremap_resource() thermal: Convert to devm_ioremap_resource() spi: Convert to devm_ioremap_resource() power: Convert to devm_ioremap_resource() mtd: Convert to devm_ioremap_resource() mmc: Convert to devm_ioremap_resource() mfd: Convert to devm_ioremap_resource() media: Convert to devm_ioremap_resource() iommu: Convert to devm_ioremap_resource() drm: Convert to devm_ioremap_resource() ...
This commit is contained in:
Коммит
06991c28f3
|
@ -546,15 +546,7 @@ config AUDIT
|
|||
logging of avc messages output). Does not do system-call
|
||||
auditing without CONFIG_AUDITSYSCALL.
|
||||
|
||||
Features that might still be considered unstable should be defined as
|
||||
dependent on "EXPERIMENTAL":
|
||||
|
||||
config SLUB
|
||||
depends on EXPERIMENTAL && !ARCH_USES_SLAB_PAGE_STRUCT
|
||||
bool "SLUB (Unqueued Allocator)"
|
||||
...
|
||||
|
||||
while seriously dangerous features (such as write support for certain
|
||||
Seriously dangerous features (such as write support for certain
|
||||
filesystems) should advertise this prominently in their prompt string:
|
||||
|
||||
config ADFS_FS_RW
|
||||
|
|
|
@ -1184,13 +1184,6 @@ static struct block_device_operations opt_fops = {
|
|||
<filename>Documentation/kbuild/kconfig-language.txt</filename>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may well want to make your CONFIG option only visible if
|
||||
<symbol>CONFIG_EXPERIMENTAL</symbol> is enabled: this serves as a
|
||||
warning to users. There many other fancy things you can do: see
|
||||
the various <filename>Kconfig</filename> files for ideas.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In your description of the option, make sure you address both the
|
||||
expert user and the user who knows nothing about your feature. Mention
|
||||
|
|
|
@ -94,10 +94,8 @@
|
|||
<sect1 id="CompileKGDB">
|
||||
<title>Kernel config options for kgdb</title>
|
||||
<para>
|
||||
To enable <symbol>CONFIG_KGDB</symbol> you should first turn on
|
||||
"Prompt for development and/or incomplete code/drivers"
|
||||
(CONFIG_EXPERIMENTAL) in "General setup", then under the
|
||||
"Kernel debugging" select "KGDB: kernel debugger".
|
||||
To enable <symbol>CONFIG_KGDB</symbol> you should look under
|
||||
"Kernel debugging" and select "KGDB: kernel debugger".
|
||||
</para>
|
||||
<para>
|
||||
While it is not a hard requirement that you have symbols in your
|
||||
|
|
|
@ -266,7 +266,8 @@ IOMAP
|
|||
devm_ioremap()
|
||||
devm_ioremap_nocache()
|
||||
devm_iounmap()
|
||||
devm_request_and_ioremap() : checks resource, requests region, ioremaps
|
||||
devm_ioremap_resource() : checks resource, requests memory region, ioremaps
|
||||
devm_request_and_ioremap() : obsoleted by devm_ioremap_resource()
|
||||
pcim_iomap()
|
||||
pcim_iounmap()
|
||||
pcim_iomap_table() : array of mapped addresses indexed by BAR
|
||||
|
@ -288,3 +289,7 @@ PINCTRL
|
|||
PWM
|
||||
devm_pwm_get()
|
||||
devm_pwm_put()
|
||||
|
||||
PHY
|
||||
devm_usb_get_phy()
|
||||
devm_usb_put_phy()
|
||||
|
|
|
@ -6,8 +6,16 @@ This document describes how to use the dynamic debug (dyndbg) feature.
|
|||
|
||||
Dynamic debug is designed to allow you to dynamically enable/disable
|
||||
kernel code to obtain additional kernel information. Currently, if
|
||||
CONFIG_DYNAMIC_DEBUG is set, then all pr_debug()/dev_dbg() calls can
|
||||
be dynamically enabled per-callsite.
|
||||
CONFIG_DYNAMIC_DEBUG is set, then all pr_debug()/dev_dbg() and
|
||||
print_hex_dump_debug()/print_hex_dump_bytes() calls can be dynamically
|
||||
enabled per-callsite.
|
||||
|
||||
If CONFIG_DYNAMIC_DEBUG is not set, print_hex_dump_debug() is just
|
||||
shortcut for print_hex_dump(KERN_DEBUG).
|
||||
|
||||
For print_hex_dump_debug()/print_hex_dump_bytes(), format string is
|
||||
its 'prefix_str' argument, if it is constant string; or "hexdump"
|
||||
in case 'prefix_str' is build dynamically.
|
||||
|
||||
Dynamic debug has even more useful features:
|
||||
|
||||
|
@ -202,6 +210,9 @@ The flags are:
|
|||
t Include thread ID in messages not generated from interrupt context
|
||||
_ No flags are set. (Or'd with others on input)
|
||||
|
||||
For print_hex_dump_debug() and print_hex_dump_bytes(), only 'p' flag
|
||||
have meaning, other flags ignored.
|
||||
|
||||
For display, the flags are preceded by '='
|
||||
(mnemonic: what the flags are currently equal to).
|
||||
|
||||
|
|
|
@ -192,7 +192,7 @@ grub.conf needs to be modified as follows:
|
|||
|
||||
The kernel option for enabling Intel TXT support is found under the
|
||||
Security top-level menu and is called "Enable Intel(R) Trusted
|
||||
Execution Technology (TXT)". It is marked as EXPERIMENTAL and
|
||||
Execution Technology (TXT)". It is considered EXPERIMENTAL and
|
||||
depends on the generic x86 support (to allow maximum flexibility in
|
||||
kernel build options), since the tboot code will detect whether the
|
||||
platform actually supports Intel TXT and thus whether any of the
|
||||
|
|
|
@ -1398,7 +1398,7 @@ Sysfs notes:
|
|||
EXPERIMENTAL: UWB
|
||||
-----------------
|
||||
|
||||
This feature is marked EXPERIMENTAL because it has not been extensively
|
||||
This feature is considered EXPERIMENTAL because it has not been extensively
|
||||
tested and validated in various ThinkPad models yet. The feature may not
|
||||
work as expected. USE WITH CAUTION! To use this feature, you need to supply
|
||||
the experimental=1 parameter when loading the module.
|
||||
|
|
|
@ -462,13 +462,6 @@ config AUDIT
|
|||
logging of avc messages output). Does not do system-call
|
||||
auditing without CONFIG_AUDITSYSCALL.
|
||||
|
||||
仍然被认为不够稳定的功能应该被定义为依赖于“EXPERIMENTAL”:
|
||||
|
||||
config SLUB
|
||||
depends on EXPERIMENTAL && !ARCH_USES_SLAB_PAGE_STRUCT
|
||||
bool "SLUB (Unqueued Allocator)"
|
||||
...
|
||||
|
||||
而那些危险的功能(比如某些文件系统的写支持)应该在它们的提示字符串里显著的声明这
|
||||
一点:
|
||||
|
||||
|
|
|
@ -555,8 +555,7 @@ config NR_CPUS
|
|||
with working support have a maximum of 4 CPUs.
|
||||
|
||||
config ARCH_DISCONTIGMEM_ENABLE
|
||||
bool "Discontiguous Memory Support (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "Discontiguous Memory Support"
|
||||
help
|
||||
Say Y to support efficient handling of discontiguous physical memory,
|
||||
for architectures which are either NUMA (Non-Uniform Memory Access)
|
||||
|
|
|
@ -1530,7 +1530,6 @@ config SMP
|
|||
|
||||
config SMP_ON_UP
|
||||
bool "Allow booting SMP kernel on uniprocessor systems (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
depends on SMP && !XIP_KERNEL
|
||||
default y
|
||||
help
|
||||
|
@ -1731,7 +1730,7 @@ config AEABI
|
|||
|
||||
config OABI_COMPAT
|
||||
bool "Allow old ABI binaries to run with this kernel (EXPERIMENTAL)"
|
||||
depends on AEABI && EXPERIMENTAL && !THUMB2_KERNEL
|
||||
depends on AEABI && !THUMB2_KERNEL
|
||||
default y
|
||||
help
|
||||
This option preserves the old syscall interface along with the
|
||||
|
@ -1855,7 +1854,6 @@ config SECCOMP
|
|||
|
||||
config CC_STACKPROTECTOR
|
||||
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
This option turns on the -fstack-protector GCC feature. This
|
||||
feature puts, at the beginning of functions, a canary value on
|
||||
|
@ -1872,7 +1870,7 @@ config XEN_DOM0
|
|||
|
||||
config XEN
|
||||
bool "Xen guest support on ARM (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && ARM && OF
|
||||
depends on ARM && OF
|
||||
depends on CPU_V7 && !CPU_V6
|
||||
help
|
||||
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.
|
||||
|
@ -1941,7 +1939,7 @@ config ZBOOT_ROM
|
|||
|
||||
choice
|
||||
prompt "Include SD/MMC loader in zImage (EXPERIMENTAL)"
|
||||
depends on ZBOOT_ROM && ARCH_SH7372 && EXPERIMENTAL
|
||||
depends on ZBOOT_ROM && ARCH_SH7372
|
||||
default ZBOOT_ROM_NONE
|
||||
help
|
||||
Include experimental SD/MMC loading code in the ROM-able zImage.
|
||||
|
@ -1970,7 +1968,7 @@ endchoice
|
|||
|
||||
config ARM_APPENDED_DTB
|
||||
bool "Use appended device tree blob to zImage (EXPERIMENTAL)"
|
||||
depends on OF && !ZBOOT_ROM && EXPERIMENTAL
|
||||
depends on OF && !ZBOOT_ROM
|
||||
help
|
||||
With this option, the boot code will look for a device tree binary
|
||||
(DTB) appended to zImage
|
||||
|
@ -2088,7 +2086,7 @@ config XIP_PHYS_ADDR
|
|||
|
||||
config KEXEC
|
||||
bool "Kexec system call (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && (!SMP || HOTPLUG_CPU)
|
||||
depends on (!SMP || HOTPLUG_CPU)
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
|
@ -2110,7 +2108,6 @@ config ATAGS_PROC
|
|||
|
||||
config CRASH_DUMP
|
||||
bool "Build kdump crash kernel (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
Generate crash dump after being started by kexec. This should
|
||||
be normally only set in special crash dump kernels which are
|
||||
|
@ -2177,7 +2174,7 @@ config CPU_FREQ_S3C
|
|||
|
||||
config CPU_FREQ_S3C24XX
|
||||
bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
|
||||
depends on ARCH_S3C24XX && CPU_FREQ && EXPERIMENTAL
|
||||
depends on ARCH_S3C24XX && CPU_FREQ
|
||||
select CPU_FREQ_S3C
|
||||
help
|
||||
This enables the CPUfreq driver for the Samsung S3C24XX family
|
||||
|
@ -2189,7 +2186,7 @@ config CPU_FREQ_S3C24XX
|
|||
|
||||
config CPU_FREQ_S3C24XX_PLL
|
||||
bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)"
|
||||
depends on CPU_FREQ_S3C24XX && EXPERIMENTAL
|
||||
depends on CPU_FREQ_S3C24XX
|
||||
help
|
||||
Compile in support for changing the PLL frequency from the
|
||||
S3C24XX series CPUfreq driver. The PLL takes time to settle
|
||||
|
@ -2252,7 +2249,7 @@ config FPE_NWFPE_XP
|
|||
|
||||
config FPE_FASTFPE
|
||||
bool "FastFPE math emulation (EXPERIMENTAL)"
|
||||
depends on (!AEABI || OABI_COMPAT) && !CPU_32v3 && EXPERIMENTAL
|
||||
depends on (!AEABI || OABI_COMPAT) && !CPU_32v3
|
||||
---help---
|
||||
Say Y here to include the FAST floating point emulator in the kernel.
|
||||
This is an experimental much faster emulator which now also has full
|
||||
|
|
|
@ -32,7 +32,7 @@ config FRAME_POINTER
|
|||
|
||||
config ARM_UNWIND
|
||||
bool "Enable stack unwinding support (EXPERIMENTAL)"
|
||||
depends on AEABI && EXPERIMENTAL
|
||||
depends on AEABI
|
||||
default y
|
||||
help
|
||||
This option enables stack unwinding support in the kernel
|
||||
|
|
|
@ -1134,11 +1134,9 @@ static int gpmc_probe(struct platform_device *pdev)
|
|||
phys_base = res->start;
|
||||
mem_size = resource_size(res);
|
||||
|
||||
gpmc_base = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!gpmc_base) {
|
||||
dev_err(&pdev->dev, "error: request memory / ioremap\n");
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
gpmc_base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(gpmc_base))
|
||||
return PTR_ERR(gpmc_base);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (res == NULL)
|
||||
|
|
|
@ -291,8 +291,8 @@ config MACH_JIVE
|
|||
Say Y here if you are using the Logitech Jive.
|
||||
|
||||
config MACH_JIVE_SHOW_BOOTLOADER
|
||||
bool "Allow access to bootloader partitions in MTD (EXPERIMENTAL)"
|
||||
depends on MACH_JIVE && EXPERIMENTAL
|
||||
bool "Allow access to bootloader partitions in MTD"
|
||||
depends on MACH_JIVE
|
||||
|
||||
config MACH_S3C2413
|
||||
bool
|
||||
|
|
|
@ -312,11 +312,9 @@ static int tegra_emc_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
emc_regbase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!emc_regbase) {
|
||||
dev_err(&pdev->dev, "failed to remap registers\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
emc_regbase = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(emc_regbase))
|
||||
return PTR_ERR(emc_regbase);
|
||||
|
||||
pdata = pdev->dev.platform_data;
|
||||
|
||||
|
|
|
@ -808,11 +808,9 @@ static int omap_dm_timer_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
timer->io_base = devm_request_and_ioremap(dev, mem);
|
||||
if (!timer->io_base) {
|
||||
dev_err(dev, "%s: region already claimed.\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
timer->io_base = devm_ioremap_resource(dev, mem);
|
||||
if (IS_ERR(timer->io_base))
|
||||
return PTR_ERR(timer->io_base);
|
||||
|
||||
if (dev->of_node) {
|
||||
if (of_find_property(dev->of_node, "ti,timer-alwon", NULL))
|
||||
|
|
|
@ -386,11 +386,9 @@ static int s3c_adc_probe(struct platform_device *pdev)
|
|||
return -ENXIO;
|
||||
}
|
||||
|
||||
adc->regs = devm_request_and_ioremap(dev, regs);
|
||||
if (!adc->regs) {
|
||||
dev_err(dev, "failed to map registers\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
adc->regs = devm_ioremap_resource(dev, regs);
|
||||
if (IS_ERR(adc->regs))
|
||||
return PTR_ERR(adc->regs);
|
||||
|
||||
ret = regulator_enable(adc->vdd);
|
||||
if (ret)
|
||||
|
|
|
@ -560,8 +560,7 @@ choice
|
|||
accurate - This option is therefore marked experimental.
|
||||
|
||||
config BFIN_KERNEL_CLOCK_MEMINIT_CALC
|
||||
bool "Calculate Timings (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "Calculate Timings"
|
||||
|
||||
config BFIN_KERNEL_CLOCK_MEMINIT_SPEC
|
||||
bool "Provide accurate Timings based on target SCLK"
|
||||
|
@ -1118,7 +1117,7 @@ endchoice
|
|||
|
||||
comment "Memory Protection Unit"
|
||||
config MPU
|
||||
bool "Enable the memory protection unit (EXPERIMENTAL)"
|
||||
bool "Enable the memory protection unit"
|
||||
default n
|
||||
help
|
||||
Use the processor's MPU to protect applications from accessing
|
||||
|
@ -1440,7 +1439,6 @@ config BFIN_CPU_FREQ
|
|||
|
||||
config CPU_VOLTAGE
|
||||
bool "CPU Voltage scaling"
|
||||
depends on EXPERIMENTAL
|
||||
depends on CPU_FREQ
|
||||
default n
|
||||
help
|
||||
|
|
|
@ -680,7 +680,7 @@ config ETRAX_SPI_MMC_BOARD
|
|||
|
||||
config SPI_ETRAX_SSER
|
||||
tristate
|
||||
depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL
|
||||
depends on SPI_MASTER && ETRAX_ARCH_V32
|
||||
select SPI_BITBANG
|
||||
help
|
||||
This enables using an synchronous serial (sser) port as a
|
||||
|
@ -689,7 +689,7 @@ config SPI_ETRAX_SSER
|
|||
|
||||
config SPI_ETRAX_GPIO
|
||||
tristate
|
||||
depends on SPI_MASTER && ETRAX_ARCH_V32 && EXPERIMENTAL
|
||||
depends on SPI_MASTER && ETRAX_ARCH_V32
|
||||
select SPI_BITBANG
|
||||
help
|
||||
This enables using GPIO pins port as a SPI master controller
|
||||
|
|
|
@ -374,8 +374,8 @@ config NR_CPUS
|
|||
performance hit.
|
||||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
||||
depends on SMP && EXPERIMENTAL
|
||||
bool "Support for hot-pluggable CPUs"
|
||||
depends on SMP
|
||||
select HOTPLUG
|
||||
default n
|
||||
---help---
|
||||
|
@ -554,8 +554,8 @@ config IA64_HP_AML_NFW
|
|||
source "drivers/sn/Kconfig"
|
||||
|
||||
config KEXEC
|
||||
bool "kexec system call (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
|
||||
bool "kexec system call"
|
||||
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
|
|
|
@ -20,7 +20,7 @@ if VIRTUALIZATION
|
|||
config KVM
|
||||
tristate "Kernel-based Virtual Machine (KVM) support"
|
||||
depends on BROKEN
|
||||
depends on HAVE_KVM && MODULES && EXPERIMENTAL
|
||||
depends on HAVE_KVM && MODULES
|
||||
# for device assignment:
|
||||
depends on PCI
|
||||
depends on BROKEN
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
config XEN
|
||||
bool "Xen hypervisor support"
|
||||
default y
|
||||
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB && EXPERIMENTAL
|
||||
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB
|
||||
select XEN_XENCOMM
|
||||
select NO_IDLE_HZ
|
||||
# followings are required to save/restore.
|
||||
|
|
|
@ -20,7 +20,7 @@ endchoice
|
|||
|
||||
config SELFMOD
|
||||
bool "Use self modified code for intc/timer"
|
||||
depends on EXPERIMENTAL && NO_MMU
|
||||
depends on NO_MMU
|
||||
default n
|
||||
help
|
||||
This choice enables self-modified code for interrupt controller
|
||||
|
|
|
@ -169,7 +169,7 @@ config MACH_DECSTATION
|
|||
select SYS_HAS_CPU_R3000
|
||||
select SYS_HAS_CPU_R4X00
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
select SYS_SUPPORTS_128HZ
|
||||
select SYS_SUPPORTS_256HZ
|
||||
|
@ -205,7 +205,7 @@ config MACH_JAZZ
|
|||
select ISA
|
||||
select SYS_HAS_CPU_R4X00
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_100HZ
|
||||
help
|
||||
This a family of machines based on the MIPS R4030 chipset which was
|
||||
|
@ -395,7 +395,6 @@ config PNX8550_STB810
|
|||
|
||||
config PMC_MSP
|
||||
bool "PMC-Sierra MSP chipsets"
|
||||
depends on EXPERIMENTAL
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select DMA_NONCOHERENT
|
||||
|
@ -494,8 +493,7 @@ config SGI_IP27
|
|||
here.
|
||||
|
||||
config SGI_IP28
|
||||
bool "SGI IP28 (Indigo2 R10k) (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "SGI IP28 (Indigo2 R10k)"
|
||||
select FW_ARC
|
||||
select FW_ARC64
|
||||
select BOOT_ELF64
|
||||
|
@ -553,7 +551,6 @@ config SGI_IP32
|
|||
|
||||
config SIBYTE_CRHINE
|
||||
bool "Sibyte BCM91120C-CRhine"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select SIBYTE_BCM1120
|
||||
|
@ -564,7 +561,6 @@ config SIBYTE_CRHINE
|
|||
|
||||
config SIBYTE_CARMEL
|
||||
bool "Sibyte BCM91120x-Carmel"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select SIBYTE_BCM1120
|
||||
|
@ -575,7 +571,6 @@ config SIBYTE_CARMEL
|
|||
|
||||
config SIBYTE_CRHONE
|
||||
bool "Sibyte BCM91125C-CRhone"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select SIBYTE_BCM1125
|
||||
|
@ -587,7 +582,6 @@ config SIBYTE_CRHONE
|
|||
|
||||
config SIBYTE_RHONE
|
||||
bool "Sibyte BCM91125E-Rhone"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select SIBYTE_BCM1125H
|
||||
|
@ -612,7 +606,6 @@ config SIBYTE_SWARM
|
|||
|
||||
config SIBYTE_LITTLESUR
|
||||
bool "Sibyte BCM91250C2-LittleSur"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select HAVE_PATA_PLATFORM
|
||||
|
@ -626,7 +619,6 @@ config SIBYTE_LITTLESUR
|
|||
|
||||
config SIBYTE_SENTOSA
|
||||
bool "Sibyte BCM91250E-Sentosa"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select DMA_COHERENT
|
||||
select NR_CPUS_DEFAULT_2
|
||||
|
@ -675,7 +667,7 @@ config SNI_RM
|
|||
select R5000_CPU_SCACHE
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||
select SYS_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_HIGHMEM
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
|
@ -779,7 +771,6 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
|
|||
|
||||
config NLM_XLR_BOARD
|
||||
bool "Netlogic XLR/XLS based systems"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select NLM_COMMON
|
||||
select SYS_HAS_CPU_XLR
|
||||
|
@ -808,7 +799,6 @@ config NLM_XLR_BOARD
|
|||
|
||||
config NLM_XLP_BOARD
|
||||
bool "Netlogic XLP based systems"
|
||||
depends on EXPERIMENTAL
|
||||
select BOOT_ELF32
|
||||
select NLM_COMMON
|
||||
select SYS_HAS_CPU_XLP
|
||||
|
@ -1374,7 +1364,6 @@ config CPU_R5500
|
|||
|
||||
config CPU_R6000
|
||||
bool "R6000"
|
||||
depends on EXPERIMENTAL
|
||||
depends on SYS_HAS_CPU_R6000
|
||||
select CPU_SUPPORTS_32BIT_KERNEL
|
||||
help
|
||||
|
@ -1392,7 +1381,6 @@ config CPU_NEVADA
|
|||
|
||||
config CPU_R8000
|
||||
bool "R8000"
|
||||
depends on EXPERIMENTAL
|
||||
depends on SYS_HAS_CPU_R8000
|
||||
select CPU_HAS_PREFETCH
|
||||
select CPU_SUPPORTS_64BIT_KERNEL
|
||||
|
@ -1767,7 +1755,7 @@ config PAGE_SIZE_4KB
|
|||
|
||||
config PAGE_SIZE_8KB
|
||||
bool "8kB"
|
||||
depends on (EXPERIMENTAL && CPU_R8000) || CPU_CAVIUM_OCTEON
|
||||
depends on CPU_R8000 || CPU_CAVIUM_OCTEON
|
||||
help
|
||||
Using 8kB page size will result in higher performance kernel at
|
||||
the price of higher memory consumption. This option is available
|
||||
|
@ -1794,7 +1782,7 @@ config PAGE_SIZE_32KB
|
|||
|
||||
config PAGE_SIZE_64KB
|
||||
bool "64kB"
|
||||
depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX
|
||||
depends on !CPU_R3000 && !CPU_TX39XX
|
||||
help
|
||||
Using 64kB page size will result in higher performance kernel at
|
||||
the price of higher memory consumption. This option is available on
|
||||
|
@ -2310,8 +2298,7 @@ config HZ
|
|||
source "kernel/Kconfig.preempt"
|
||||
|
||||
config KEXEC
|
||||
bool "Kexec system call (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "Kexec system call"
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config ACER_PICA_61
|
||||
bool "Support for Acer PICA 1 chipset (EXPERIMENTAL)"
|
||||
depends on MACH_JAZZ && EXPERIMENTAL
|
||||
bool "Support for Acer PICA 1 chipset"
|
||||
depends on MACH_JAZZ
|
||||
select DMA_NONCOHERENT
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
help
|
||||
|
@ -13,7 +13,7 @@ config MIPS_MAGNUM_4000
|
|||
bool "Support for MIPS Magnum 4000"
|
||||
depends on MACH_JAZZ
|
||||
select DMA_NONCOHERENT
|
||||
select SYS_SUPPORTS_BIG_ENDIAN if EXPERIMENTAL
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||
help
|
||||
This is a machine with a R4000 100 MHz CPU. To compile a Linux
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/dma-mapping.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <lantiq_soc.h>
|
||||
#include <xway_dma.h>
|
||||
|
@ -223,8 +224,8 @@ ltq_dma_init(struct platform_device *pdev)
|
|||
panic("Failed to get dma resource");
|
||||
|
||||
/* remap dma register range */
|
||||
ltq_dma_membase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!ltq_dma_membase)
|
||||
ltq_dma_membase = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(ltq_dma_membase))
|
||||
panic("Failed to remap dma resource");
|
||||
|
||||
/* power up and reset the dma engine */
|
||||
|
|
|
@ -150,11 +150,9 @@ static int gptu_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
/* remap gptu register range */
|
||||
gptu_membase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!gptu_membase) {
|
||||
dev_err(&pdev->dev, "Failed to remap resource\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
gptu_membase = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(gptu_membase))
|
||||
return PTR_ERR(gptu_membase);
|
||||
|
||||
/* enable our clock */
|
||||
clk = clk_get(&pdev->dev, NULL);
|
||||
|
|
|
@ -214,13 +214,13 @@ static int ltq_pci_probe(struct platform_device *pdev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ltq_pci_membase = devm_request_and_ioremap(&pdev->dev, res_bridge);
|
||||
ltq_pci_mapped_cfg = devm_request_and_ioremap(&pdev->dev, res_cfg);
|
||||
ltq_pci_membase = devm_ioremap_resource(&pdev->dev, res_bridge);
|
||||
if (IS_ERR(ltq_pci_membase))
|
||||
return PTR_ERR(ltq_pci_membase);
|
||||
|
||||
if (!ltq_pci_membase || !ltq_pci_mapped_cfg) {
|
||||
dev_err(&pdev->dev, "failed to remap resources\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
ltq_pci_mapped_cfg = devm_ioremap_resource(&pdev->dev, res_cfg);
|
||||
if (IS_ERR(ltq_pci_mapped_cfg))
|
||||
return PTR_ERR(ltq_pci_mapped_cfg);
|
||||
|
||||
ltq_pci_startup(pdev);
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ config SGI_SN_M_MODE
|
|||
|
||||
config SGI_SN_N_MODE
|
||||
bool "IP27 N-Mode"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
The nodes of Origin, Onyx, Fuel and Tezro systems can be configured
|
||||
in either N-Modes which allows for more nodes or M-Mode which allows
|
||||
|
|
|
@ -192,12 +192,12 @@ config PARISC_PAGE_SIZE_4KB
|
|||
If you don't know what to do, choose 4KB.
|
||||
|
||||
config PARISC_PAGE_SIZE_16KB
|
||||
bool "16KB (EXPERIMENTAL)"
|
||||
depends on PA8X00 && EXPERIMENTAL
|
||||
bool "16KB"
|
||||
depends on PA8X00
|
||||
|
||||
config PARISC_PAGE_SIZE_64KB
|
||||
bool "64KB (EXPERIMENTAL)"
|
||||
depends on PA8X00 && EXPERIMENTAL
|
||||
bool "64KB"
|
||||
depends on PA8X00
|
||||
|
||||
endchoice
|
||||
|
||||
|
|
|
@ -332,7 +332,7 @@ config SWIOTLB
|
|||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for enabling/disabling CPUs"
|
||||
depends on SMP && HOTPLUG && EXPERIMENTAL && (PPC_PSERIES || \
|
||||
depends on SMP && HOTPLUG && (PPC_PSERIES || \
|
||||
PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC))
|
||||
---help---
|
||||
Say Y here to be able to disable and re-enable individual
|
||||
|
@ -354,8 +354,8 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
|
|||
def_bool y
|
||||
|
||||
config KEXEC
|
||||
bool "kexec system call (EXPERIMENTAL)"
|
||||
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) && EXPERIMENTAL
|
||||
bool "kexec system call"
|
||||
depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
|
@ -850,8 +850,8 @@ config LOWMEM_CAM_NUM
|
|||
default 3
|
||||
|
||||
config DYNAMIC_MEMSTART
|
||||
bool "Enable page aligned dynamic load address for kernel (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
|
||||
bool "Enable page aligned dynamic load address for kernel"
|
||||
depends on ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
|
||||
select NONSTATIC_KERNEL
|
||||
help
|
||||
This option enables the kernel to be loaded at any page aligned
|
||||
|
@ -868,8 +868,8 @@ config DYNAMIC_MEMSTART
|
|||
This option is overridden by CONFIG_RELOCATABLE
|
||||
|
||||
config RELOCATABLE
|
||||
bool "Build a relocatable kernel (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && ADVANCED_OPTIONS && FLATMEM && 44x
|
||||
bool "Build a relocatable kernel"
|
||||
depends on ADVANCED_OPTIONS && FLATMEM && 44x
|
||||
select NONSTATIC_KERNEL
|
||||
help
|
||||
This builds a kernel image that is capable of running at the
|
||||
|
|
|
@ -41,7 +41,7 @@ config KVM_BOOK3S_PR
|
|||
|
||||
config KVM_BOOK3S_32
|
||||
tristate "KVM support for PowerPC book3s_32 processors"
|
||||
depends on EXPERIMENTAL && PPC_BOOK3S_32 && !SMP && !PTE_64BIT
|
||||
depends on PPC_BOOK3S_32 && !SMP && !PTE_64BIT
|
||||
select KVM
|
||||
select KVM_BOOK3S_32_HANDLER
|
||||
select KVM_BOOK3S_PR
|
||||
|
@ -56,7 +56,7 @@ config KVM_BOOK3S_32
|
|||
|
||||
config KVM_BOOK3S_64
|
||||
tristate "KVM support for PowerPC book3s_64 processors"
|
||||
depends on EXPERIMENTAL && PPC_BOOK3S_64
|
||||
depends on PPC_BOOK3S_64
|
||||
select KVM_BOOK3S_64_HANDLER
|
||||
select KVM
|
||||
---help---
|
||||
|
@ -97,7 +97,7 @@ config KVM_BOOKE_HV
|
|||
|
||||
config KVM_440
|
||||
bool "KVM support for PowerPC 440 processors"
|
||||
depends on EXPERIMENTAL && 44x
|
||||
depends on 44x
|
||||
select KVM
|
||||
select KVM_MMIO
|
||||
---help---
|
||||
|
@ -122,7 +122,7 @@ config KVM_EXIT_TIMING
|
|||
|
||||
config KVM_E500V2
|
||||
bool "KVM support for PowerPC E500v2 processors"
|
||||
depends on EXPERIMENTAL && E500 && !PPC_E500MC
|
||||
depends on E500 && !PPC_E500MC
|
||||
select KVM
|
||||
select KVM_MMIO
|
||||
select MMU_NOTIFIER
|
||||
|
@ -137,7 +137,7 @@ config KVM_E500V2
|
|||
|
||||
config KVM_E500MC
|
||||
bool "KVM support for PowerPC E500MC/E5500 processors"
|
||||
depends on EXPERIMENTAL && PPC_E500MC
|
||||
depends on PPC_E500MC
|
||||
select KVM
|
||||
select KVM_MMIO
|
||||
select KVM_BOOKE_HV
|
||||
|
|
|
@ -277,7 +277,6 @@ config P5040_DS
|
|||
|
||||
config PPC_QEMU_E500
|
||||
bool "QEMU generic e500 platform"
|
||||
depends on EXPERIMENTAL
|
||||
select DEFAULT_UIMAGE
|
||||
help
|
||||
This option enables support for running as a QEMU guest using
|
||||
|
|
|
@ -124,7 +124,7 @@ config CBE_CPUFREQ
|
|||
|
||||
config CBE_CPUFREQ_PMI_ENABLE
|
||||
bool "CBE frequency scaling using PMI interface"
|
||||
depends on CBE_CPUFREQ && EXPERIMENTAL
|
||||
depends on CBE_CPUFREQ
|
||||
default n
|
||||
help
|
||||
Select this, if you want to use the PMI interface
|
||||
|
|
|
@ -48,7 +48,7 @@ config PS3_HTAB_SIZE
|
|||
system will have optimal runtime performance.
|
||||
|
||||
config PS3_DYNAMIC_DMA
|
||||
depends on PPC_PS3 && EXPERIMENTAL
|
||||
depends on PPC_PS3
|
||||
bool "PS3 Platform dynamic DMA page table management"
|
||||
default n
|
||||
help
|
||||
|
|
|
@ -717,8 +717,8 @@ source "arch/s390/kvm/Kconfig"
|
|||
|
||||
config S390_GUEST
|
||||
def_bool y
|
||||
prompt "s390 support for virtio devices (EXPERIMENTAL)"
|
||||
depends on 64BIT && EXPERIMENTAL
|
||||
prompt "s390 support for virtio devices"
|
||||
depends on 64BIT
|
||||
select VIRTUALIZATION
|
||||
select VIRTIO
|
||||
select VIRTIO_CONSOLE
|
||||
|
|
|
@ -18,7 +18,7 @@ if VIRTUALIZATION
|
|||
config KVM
|
||||
def_tristate y
|
||||
prompt "Kernel-based Virtual Machine (KVM) support"
|
||||
depends on HAVE_KVM && EXPERIMENTAL
|
||||
depends on HAVE_KVM
|
||||
select PREEMPT_NOTIFIERS
|
||||
select ANON_INODES
|
||||
select HAVE_KVM_CPU_RELAX_INTERCEPT
|
||||
|
|
|
@ -644,7 +644,7 @@ source kernel/Kconfig.hz
|
|||
|
||||
config KEXEC
|
||||
bool "kexec system call (EXPERIMENTAL)"
|
||||
depends on SUPERH32 && EXPERIMENTAL && MMU
|
||||
depends on SUPERH32 && MMU
|
||||
help
|
||||
kexec is a system call that implements the ability to shutdown your
|
||||
current kernel, and to start another kernel. It is like a reboot
|
||||
|
@ -661,7 +661,7 @@ config KEXEC
|
|||
|
||||
config CRASH_DUMP
|
||||
bool "kernel crash dumps (EXPERIMENTAL)"
|
||||
depends on SUPERH32 && EXPERIMENTAL && BROKEN_ON_SMP
|
||||
depends on SUPERH32 && BROKEN_ON_SMP
|
||||
help
|
||||
Generate crash dump after being started by kexec.
|
||||
This should be normally only set in special crash dump kernels
|
||||
|
@ -675,7 +675,7 @@ config CRASH_DUMP
|
|||
|
||||
config KEXEC_JUMP
|
||||
bool "kexec jump (EXPERIMENTAL)"
|
||||
depends on SUPERH32 && KEXEC && HIBERNATION && EXPERIMENTAL
|
||||
depends on SUPERH32 && KEXEC && HIBERNATION
|
||||
help
|
||||
Jump between original kernel and kexeced kernel and invoke
|
||||
code via KEXEC
|
||||
|
@ -709,7 +709,7 @@ config SECCOMP
|
|||
|
||||
config CC_STACKPROTECTOR
|
||||
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
|
||||
depends on SUPERH32 && EXPERIMENTAL
|
||||
depends on SUPERH32
|
||||
help
|
||||
This option turns on the -fstack-protector GCC feature. This
|
||||
feature puts, at the beginning of functions, a canary value on
|
||||
|
@ -760,7 +760,7 @@ config NR_CPUS
|
|||
|
||||
config HOTPLUG_CPU
|
||||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
||||
depends on SMP && HOTPLUG && EXPERIMENTAL
|
||||
depends on SMP && HOTPLUG
|
||||
help
|
||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||
can be controlled through /sys/devices/system/cpu.
|
||||
|
@ -839,7 +839,7 @@ config ENTRY_OFFSET
|
|||
|
||||
config ROMIMAGE_MMCIF
|
||||
bool "Include MMCIF loader in romImage (EXPERIMENTAL)"
|
||||
depends on CPU_SUBTYPE_SH7724 && EXPERIMENTAL
|
||||
depends on CPU_SUBTYPE_SH7724
|
||||
help
|
||||
Say Y here to include experimental MMCIF loading code in
|
||||
romImage. With this enabled it is possible to write the romImage
|
||||
|
@ -925,7 +925,6 @@ source "fs/Kconfig.binfmt"
|
|||
endmenu
|
||||
|
||||
menu "Power management options (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
|
||||
source "kernel/power/Kconfig"
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ config SH64_FPU_DENORM_FLUSH
|
|||
config SH_FPU_EMU
|
||||
def_bool n
|
||||
prompt "FPU emulation support"
|
||||
depends on !SH_FPU && EXPERIMENTAL
|
||||
depends on !SH_FPU
|
||||
help
|
||||
Selecting this option will enable support for software FPU emulation.
|
||||
Most SH-3 users will want to say Y here, whereas most SH-4 users will
|
||||
|
@ -68,7 +68,6 @@ config SH_STORE_QUEUES
|
|||
|
||||
config SPECULATIVE_EXECUTION
|
||||
bool "Speculative subroutine return"
|
||||
depends on EXPERIMENTAL
|
||||
depends on CPU_SUBTYPE_SH7780 || CPU_SUBTYPE_SH7785 || CPU_SUBTYPE_SH7786
|
||||
help
|
||||
This enables support for a speculative instruction fetch for
|
||||
|
|
|
@ -83,7 +83,7 @@ config 32BIT
|
|||
|
||||
config PMB
|
||||
bool "Support 32-bit physical addressing through PMB"
|
||||
depends on MMU && EXPERIMENTAL && CPU_SH4A && !CPU_SH4AL_DSP
|
||||
depends on MMU && CPU_SH4A && !CPU_SH4AL_DSP
|
||||
select 32BIT
|
||||
select UNCACHED_MAPPING
|
||||
help
|
||||
|
@ -110,7 +110,7 @@ config VSYSCALL
|
|||
|
||||
config NUMA
|
||||
bool "Non Uniform Memory Access (NUMA) Support"
|
||||
depends on MMU && SYS_SUPPORTS_NUMA && EXPERIMENTAL
|
||||
depends on MMU && SYS_SUPPORTS_NUMA
|
||||
select ARCH_WANT_NUMA_VARIABLE_LOCALITY
|
||||
default n
|
||||
help
|
||||
|
|
|
@ -18,7 +18,7 @@ if VIRTUALIZATION
|
|||
|
||||
config KVM
|
||||
tristate "Kernel-based Virtual Machine (KVM) support"
|
||||
depends on HAVE_KVM && MODULES && EXPERIMENTAL
|
||||
depends on HAVE_KVM && MODULES
|
||||
select PREEMPT_NOTIFIERS
|
||||
select ANON_INODES
|
||||
---help---
|
||||
|
|
|
@ -157,7 +157,7 @@ config UML_NET_MCAST
|
|||
|
||||
config UML_NET_PCAP
|
||||
bool "pcap transport"
|
||||
depends on UML_NET && EXPERIMENTAL
|
||||
depends on UML_NET
|
||||
help
|
||||
The pcap transport makes a pcap packet stream on the host look
|
||||
like an ethernet device inside UML. This is useful for making
|
||||
|
|
|
@ -45,8 +45,8 @@ config HOSTFS
|
|||
say Y or M here; otherwise say N.
|
||||
|
||||
config HPPFS
|
||||
tristate "HoneyPot ProcFS (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && PROC_FS
|
||||
tristate "HoneyPot ProcFS"
|
||||
depends on PROC_FS
|
||||
help
|
||||
hppfs (HoneyPot ProcFS) is a filesystem which allows UML /proc
|
||||
entries to be overridden, removed, or fabricated from the host.
|
||||
|
@ -96,7 +96,7 @@ config MAGIC_SYSRQ
|
|||
unless you really know what this hack does.
|
||||
|
||||
config SMP
|
||||
bool "Symmetric multi-processing support (EXPERIMENTAL)"
|
||||
bool "Symmetric multi-processing support"
|
||||
default n
|
||||
depends on BROKEN
|
||||
help
|
||||
|
@ -126,7 +126,7 @@ config NR_CPUS
|
|||
default "32"
|
||||
|
||||
config HIGHMEM
|
||||
bool "Highmem support (EXPERIMENTAL)"
|
||||
bool "Highmem support"
|
||||
depends on !64BIT && BROKEN
|
||||
default n
|
||||
help
|
||||
|
|
|
@ -225,7 +225,7 @@ config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
|||
|
||||
config HAVE_INTEL_TXT
|
||||
def_bool y
|
||||
depends on EXPERIMENTAL && INTEL_IOMMU && ACPI
|
||||
depends on INTEL_IOMMU && ACPI
|
||||
|
||||
config X86_32_SMP
|
||||
def_bool y
|
||||
|
@ -642,7 +642,7 @@ config PARAVIRT
|
|||
|
||||
config PARAVIRT_SPINLOCKS
|
||||
bool "Paravirtualization layer for spinlocks"
|
||||
depends on PARAVIRT && SMP && EXPERIMENTAL
|
||||
depends on PARAVIRT && SMP
|
||||
---help---
|
||||
Paravirtualized spinlocks allow a pvops backend to replace the
|
||||
spinlock implementation with something virtualization-friendly
|
||||
|
@ -754,7 +754,7 @@ config GART_IOMMU
|
|||
config CALGARY_IOMMU
|
||||
bool "IBM Calgary IOMMU support"
|
||||
select SWIOTLB
|
||||
depends on X86_64 && PCI && EXPERIMENTAL
|
||||
depends on X86_64 && PCI
|
||||
---help---
|
||||
Support for hardware IOMMUs in IBM's xSeries x366 and x460
|
||||
systems. Needed to run systems with more than 3GB of memory
|
||||
|
@ -796,7 +796,7 @@ config IOMMU_HELPER
|
|||
|
||||
config MAXSMP
|
||||
bool "Enable Maximum number of SMP Processors and NUMA Nodes"
|
||||
depends on X86_64 && SMP && DEBUG_KERNEL && EXPERIMENTAL
|
||||
depends on X86_64 && SMP && DEBUG_KERNEL
|
||||
select CPUMASK_OFFSTACK
|
||||
---help---
|
||||
Enable maximum number of CPUS and NUMA Nodes for this architecture.
|
||||
|
@ -1132,7 +1132,6 @@ config HIGHMEM64G
|
|||
endchoice
|
||||
|
||||
choice
|
||||
depends on EXPERIMENTAL
|
||||
prompt "Memory split" if EXPERT
|
||||
default VMSPLIT_3G
|
||||
depends on X86_32
|
||||
|
@ -1209,7 +1208,7 @@ config DIRECT_GBPAGES
|
|||
config NUMA
|
||||
bool "Numa Memory Allocation and Scheduler Support"
|
||||
depends on SMP
|
||||
depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI) && EXPERIMENTAL)
|
||||
depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI))
|
||||
default y if (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP)
|
||||
---help---
|
||||
Enable NUMA (Non Uniform Memory Access) support.
|
||||
|
@ -1304,7 +1303,7 @@ config ARCH_DISCONTIGMEM_DEFAULT
|
|||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
def_bool y
|
||||
depends on X86_64 || NUMA || (EXPERIMENTAL && X86_32) || X86_32_NON_STANDARD
|
||||
depends on X86_64 || NUMA || X86_32 || X86_32_NON_STANDARD
|
||||
select SPARSEMEM_STATIC if X86_32
|
||||
select SPARSEMEM_VMEMMAP_ENABLE if X86_64
|
||||
|
||||
|
@ -1618,8 +1617,7 @@ config CRASH_DUMP
|
|||
For more details see Documentation/kdump/kdump.txt
|
||||
|
||||
config KEXEC_JUMP
|
||||
bool "kexec jump (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "kexec jump"
|
||||
depends on KEXEC && HIBERNATION
|
||||
---help---
|
||||
Jump between original kernel and kexeced kernel and invoke
|
||||
|
@ -2063,7 +2061,7 @@ config PCI_MMCONFIG
|
|||
|
||||
config PCI_CNB20LE_QUIRK
|
||||
bool "Read CNB20LE Host Bridge Windows" if EXPERT
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
Read the PCI windows out of the CNB20LE host bridge. This allows
|
||||
PCI hotplug to work on systems with the CNB20LE chipset which do
|
||||
|
@ -2267,8 +2265,8 @@ config IA32_AOUT
|
|||
Support old a.out binaries in the 32bit emulation.
|
||||
|
||||
config X86_X32
|
||||
bool "x32 ABI for 64-bit mode (EXPERIMENTAL)"
|
||||
depends on X86_64 && IA32_EMULATION && EXPERIMENTAL
|
||||
bool "x32 ABI for 64-bit mode"
|
||||
depends on X86_64 && IA32_EMULATION
|
||||
---help---
|
||||
Include code to run binaries for the x32 native 32-bit ABI
|
||||
for 64-bit processors. An x32 process gets access to the
|
||||
|
|
|
@ -37,9 +37,8 @@ config RWSEM_GENERIC_SPINLOCK
|
|||
def_bool !RWSEM_XCHGADD_ALGORITHM
|
||||
|
||||
config 3_LEVEL_PGTABLES
|
||||
bool "Three-level pagetables (EXPERIMENTAL)" if !64BIT
|
||||
bool "Three-level pagetables" if !64BIT
|
||||
default 64BIT
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
Three-level pagetables will let UML have more than 4G of physical
|
||||
memory. All the memory that can't be mapped directly will be treated
|
||||
|
|
|
@ -134,8 +134,8 @@ config CRYPTO_NULL
|
|||
These are 'Null' algorithms, used by IPsec, which do nothing.
|
||||
|
||||
config CRYPTO_PCRYPT
|
||||
tristate "Parallel crypto engine (EXPERIMENTAL)"
|
||||
depends on SMP && EXPERIMENTAL
|
||||
tristate "Parallel crypto engine"
|
||||
depends on SMP
|
||||
select PADATA
|
||||
select CRYPTO_MANAGER
|
||||
select CRYPTO_AEAD
|
||||
|
@ -292,7 +292,6 @@ config CRYPTO_HMAC
|
|||
|
||||
config CRYPTO_XCBC
|
||||
tristate "XCBC support"
|
||||
depends on EXPERIMENTAL
|
||||
select CRYPTO_HASH
|
||||
select CRYPTO_MANAGER
|
||||
help
|
||||
|
@ -303,7 +302,6 @@ config CRYPTO_XCBC
|
|||
|
||||
config CRYPTO_VMAC
|
||||
tristate "VMAC support"
|
||||
depends on EXPERIMENTAL
|
||||
select CRYPTO_HASH
|
||||
select CRYPTO_MANAGER
|
||||
help
|
||||
|
@ -932,8 +930,7 @@ config CRYPTO_KHAZAD
|
|||
<http://www.larc.usp.br/~pbarreto/KhazadPage.html>
|
||||
|
||||
config CRYPTO_SALSA20
|
||||
tristate "Salsa20 stream cipher algorithm (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
tristate "Salsa20 stream cipher algorithm"
|
||||
select CRYPTO_BLKCIPHER
|
||||
help
|
||||
Salsa20 stream cipher algorithm.
|
||||
|
@ -945,9 +942,8 @@ config CRYPTO_SALSA20
|
|||
Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html>
|
||||
|
||||
config CRYPTO_SALSA20_586
|
||||
tristate "Salsa20 stream cipher algorithm (i586) (EXPERIMENTAL)"
|
||||
tristate "Salsa20 stream cipher algorithm (i586)"
|
||||
depends on (X86 || UML_X86) && !64BIT
|
||||
depends on EXPERIMENTAL
|
||||
select CRYPTO_BLKCIPHER
|
||||
help
|
||||
Salsa20 stream cipher algorithm.
|
||||
|
@ -959,9 +955,8 @@ config CRYPTO_SALSA20_586
|
|||
Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html>
|
||||
|
||||
config CRYPTO_SALSA20_X86_64
|
||||
tristate "Salsa20 stream cipher algorithm (x86_64) (EXPERIMENTAL)"
|
||||
tristate "Salsa20 stream cipher algorithm (x86_64)"
|
||||
depends on (X86 || UML_X86) && 64BIT
|
||||
depends on EXPERIMENTAL
|
||||
select CRYPTO_BLKCIPHER
|
||||
help
|
||||
Salsa20 stream cipher algorithm.
|
||||
|
|
|
@ -176,7 +176,6 @@ config ACPI_FAN
|
|||
|
||||
config ACPI_DOCK
|
||||
bool "Dock"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
This driver supports ACPI-controlled docking stations and removable
|
||||
drive bays such as the IBM Ultrabay and the Dell Module Bay.
|
||||
|
@ -202,7 +201,7 @@ config ACPI_PROCESSOR
|
|||
the module will be called processor.
|
||||
config ACPI_IPMI
|
||||
tristate "IPMI"
|
||||
depends on EXPERIMENTAL && IPMI_SI && IPMI_HANDLER
|
||||
depends on IPMI_SI && IPMI_HANDLER
|
||||
default n
|
||||
help
|
||||
This driver enables the ACPI to access the BMC controller. And it
|
||||
|
@ -214,14 +213,13 @@ config ACPI_IPMI
|
|||
|
||||
config ACPI_HOTPLUG_CPU
|
||||
bool
|
||||
depends on EXPERIMENTAL && ACPI_PROCESSOR && HOTPLUG_CPU
|
||||
depends on ACPI_PROCESSOR && HOTPLUG_CPU
|
||||
select ACPI_CONTAINER
|
||||
default y
|
||||
|
||||
config ACPI_PROCESSOR_AGGREGATOR
|
||||
tristate "Processor Aggregator"
|
||||
depends on ACPI_PROCESSOR
|
||||
depends on EXPERIMENTAL
|
||||
depends on X86
|
||||
help
|
||||
ACPI 4.0 defines processor Aggregator, which enables OS to perform
|
||||
|
@ -337,8 +335,7 @@ config X86_PM_TIMER
|
|||
systems require this timer.
|
||||
|
||||
config ACPI_CONTAINER
|
||||
bool "Container and Module Devices (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
bool "Container and Module Devices"
|
||||
default (ACPI_HOTPLUG_MEMORY || ACPI_HOTPLUG_CPU || ACPI_HOTPLUG_IO)
|
||||
help
|
||||
This driver supports ACPI Container and Module devices (IDs
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
@ -257,9 +258,9 @@ static int tegra_ahb_probe(struct platform_device *pdev)
|
|||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
return -ENODEV;
|
||||
ahb->regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!ahb->regs)
|
||||
return -EBUSY;
|
||||
ahb->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(ahb->regs))
|
||||
return PTR_ERR(ahb->regs);
|
||||
|
||||
ahb->dev = &pdev->dev;
|
||||
platform_set_drvdata(pdev, ahb);
|
||||
|
|
|
@ -163,7 +163,7 @@ config SATA_QSTOR
|
|||
|
||||
config SATA_SX4
|
||||
tristate "Promise SATA SX4 support (Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables support for Promise Serial ATA SX4.
|
||||
|
||||
|
@ -390,7 +390,7 @@ config PATA_CS5530
|
|||
|
||||
config PATA_CS5535
|
||||
tristate "CS5535 PATA support (Experimental)"
|
||||
depends on PCI && X86 && !X86_64 && EXPERIMENTAL
|
||||
depends on PCI && X86 && !X86_64
|
||||
help
|
||||
This option enables support for the NatSemi/AMD CS5535
|
||||
companion chip used with the Geode processor family.
|
||||
|
@ -408,7 +408,7 @@ config PATA_CS5536
|
|||
|
||||
config PATA_CYPRESS
|
||||
tristate "Cypress CY82C693 PATA support (Very Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables support for the Cypress/Contaq CY82C693
|
||||
chipset found in some Alpha systems
|
||||
|
@ -496,7 +496,7 @@ config PATA_IMX
|
|||
|
||||
config PATA_IT8213
|
||||
tristate "IT8213 PATA support (Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables support for the ITE 821 PATA
|
||||
controllers via the new ATA layer.
|
||||
|
@ -589,7 +589,7 @@ config PATA_OLDPIIX
|
|||
|
||||
config PATA_OPTIDMA
|
||||
tristate "OPTI FireStar PATA support (Very Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables DMA/PIO support for the later OPTi
|
||||
controllers found on some old motherboards and in some
|
||||
|
@ -616,7 +616,7 @@ config PATA_PDC_OLD
|
|||
|
||||
config PATA_RADISYS
|
||||
tristate "RADISYS 82600 PATA support (Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables support for the RADISYS 82600
|
||||
PATA controllers via the new ATA layer
|
||||
|
@ -687,7 +687,7 @@ config PATA_SIS
|
|||
|
||||
config PATA_TOSHIBA
|
||||
tristate "Toshiba Piccolo support (Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
Support for the Toshiba Piccolo controllers. Currently only the
|
||||
primary channel is supported by this driver.
|
||||
|
@ -738,7 +738,7 @@ comment "PIO-only SFF controllers"
|
|||
|
||||
config PATA_AT32
|
||||
tristate "Atmel AVR32 PATA support (Experimental)"
|
||||
depends on AVR32 && PLATFORM_AT32AP && EXPERIMENTAL
|
||||
depends on AVR32 && PLATFORM_AT32AP
|
||||
help
|
||||
This option enables support for the IDE devices on the
|
||||
Atmel AT32AP platform.
|
||||
|
@ -755,7 +755,7 @@ config PATA_AT91
|
|||
|
||||
config PATA_CMD640_PCI
|
||||
tristate "CMD640 PCI PATA support (Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables support for the CMD640 PCI IDE
|
||||
interface chip. Only the primary channel is currently
|
||||
|
@ -801,7 +801,7 @@ config PATA_NS87410
|
|||
|
||||
config PATA_OPTI
|
||||
tristate "OPTI621/6215 PATA support (Very Experimental)"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
This option enables full PIO support for the early Opti ATA
|
||||
controllers found on some old motherboards.
|
||||
|
@ -881,7 +881,7 @@ config PATA_SAMSUNG_CF
|
|||
|
||||
config PATA_WINBOND_VLB
|
||||
tristate "Winbond W83759A VLB PATA support (Experimental)"
|
||||
depends on ISA && EXPERIMENTAL
|
||||
depends on ISA
|
||||
select PATA_LEGACY
|
||||
help
|
||||
Support for the Winbond W83759A controller on Vesa Local Bus
|
||||
|
@ -909,7 +909,7 @@ config ATA_GENERIC
|
|||
|
||||
config PATA_LEGACY
|
||||
tristate "Legacy ISA PATA support (Experimental)"
|
||||
depends on (ISA || PCI) && EXPERIMENTAL
|
||||
depends on (ISA || PCI)
|
||||
help
|
||||
This option enables support for ISA/VLB/PCI bus legacy PATA
|
||||
ports and allows them to be accessed via the new ATA layer.
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
* Copyright (C) 2006 Tower Technologies
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -937,9 +938,9 @@ static int ep93xx_pata_probe(struct platform_device *pdev)
|
|||
goto err_rel_gpio;
|
||||
}
|
||||
|
||||
ide_base = devm_request_and_ioremap(&pdev->dev, mem_res);
|
||||
if (!ide_base) {
|
||||
err = -ENXIO;
|
||||
ide_base = devm_ioremap_resource(&pdev->dev, mem_res);
|
||||
if (IS_ERR(ide_base)) {
|
||||
err = PTR_ERR(ide_base);
|
||||
goto err_rel_gpio;
|
||||
}
|
||||
|
||||
|
|
|
@ -145,6 +145,17 @@ config EXTRA_FIRMWARE_DIR
|
|||
this option you can point it elsewhere, such as /lib/firmware/ or
|
||||
some other directory containing the firmware files.
|
||||
|
||||
config FW_LOADER_USER_HELPER
|
||||
bool "Fallback user-helper invocation for firmware loading"
|
||||
depends on FW_LOADER
|
||||
default y
|
||||
help
|
||||
This option enables / disables the invocation of user-helper
|
||||
(e.g. udev) for loading firmware files as a fallback after the
|
||||
direct file loading in kernel fails. The user-mode helper is
|
||||
no longer required unless you have a special firmware file that
|
||||
resides in a non-standard path.
|
||||
|
||||
config DEBUG_DRIVER
|
||||
bool "Driver Core verbose debug messages"
|
||||
depends on DEBUG_KERNEL
|
||||
|
|
|
@ -290,7 +290,7 @@ int bus_for_each_dev(struct bus_type *bus, struct device *start,
|
|||
struct device *dev;
|
||||
int error = 0;
|
||||
|
||||
if (!bus)
|
||||
if (!bus || !bus->p)
|
||||
return -EINVAL;
|
||||
|
||||
klist_iter_init_node(&bus->p->klist_devices, &i,
|
||||
|
@ -324,7 +324,7 @@ struct device *bus_find_device(struct bus_type *bus,
|
|||
struct klist_iter i;
|
||||
struct device *dev;
|
||||
|
||||
if (!bus)
|
||||
if (!bus || !bus->p)
|
||||
return NULL;
|
||||
|
||||
klist_iter_init_node(&bus->p->klist_devices, &i,
|
||||
|
@ -700,12 +700,12 @@ int bus_add_driver(struct device_driver *drv)
|
|||
if (error)
|
||||
goto out_unregister;
|
||||
|
||||
klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
|
||||
if (drv->bus->p->drivers_autoprobe) {
|
||||
error = driver_attach(drv);
|
||||
if (error)
|
||||
goto out_unregister;
|
||||
}
|
||||
klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
|
||||
module_add_driver(drv->owner, drv);
|
||||
|
||||
error = driver_create_file(drv, &driver_attr_uevent);
|
||||
|
|
|
@ -420,8 +420,8 @@ EXPORT_SYMBOL_GPL(class_for_each_device);
|
|||
* code. There's no locking restriction.
|
||||
*/
|
||||
struct device *class_find_device(struct class *class, struct device *start,
|
||||
void *data,
|
||||
int (*match)(struct device *, void *))
|
||||
const void *data,
|
||||
int (*match)(struct device *, const void *))
|
||||
{
|
||||
struct class_dev_iter iter;
|
||||
struct device *dev;
|
||||
|
|
|
@ -1617,9 +1617,9 @@ struct device *device_create(struct class *class, struct device *parent,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(device_create);
|
||||
|
||||
static int __match_devt(struct device *dev, void *data)
|
||||
static int __match_devt(struct device *dev, const void *data)
|
||||
{
|
||||
dev_t *devt = data;
|
||||
const dev_t *devt = data;
|
||||
|
||||
return dev->devt == *devt;
|
||||
}
|
||||
|
@ -1685,8 +1685,6 @@ EXPORT_SYMBOL_GPL(device_destroy);
|
|||
*/
|
||||
int device_rename(struct device *dev, const char *new_name)
|
||||
{
|
||||
char *old_class_name = NULL;
|
||||
char *new_class_name = NULL;
|
||||
char *old_device_name = NULL;
|
||||
int error;
|
||||
|
||||
|
@ -1717,8 +1715,6 @@ int device_rename(struct device *dev, const char *new_name)
|
|||
out:
|
||||
put_device(dev);
|
||||
|
||||
kfree(new_class_name);
|
||||
kfree(old_class_name);
|
||||
kfree(old_device_name);
|
||||
|
||||
return error;
|
||||
|
|
|
@ -173,6 +173,8 @@ static int deferred_probe_initcall(void)
|
|||
|
||||
driver_deferred_probe_enable = true;
|
||||
driver_deferred_probe_trigger();
|
||||
/* Sort as many dependencies as possible before exiting initcalls */
|
||||
flush_workqueue(deferred_wq);
|
||||
return 0;
|
||||
}
|
||||
late_initcall(deferred_probe_initcall);
|
||||
|
|
|
@ -134,15 +134,14 @@ EXPORT_SYMBOL_GPL(dma_buf_export);
|
|||
*/
|
||||
int dma_buf_fd(struct dma_buf *dmabuf, int flags)
|
||||
{
|
||||
int error, fd;
|
||||
int fd;
|
||||
|
||||
if (!dmabuf || !dmabuf->file)
|
||||
return -EINVAL;
|
||||
|
||||
error = get_unused_fd_flags(flags);
|
||||
if (error < 0)
|
||||
return error;
|
||||
fd = error;
|
||||
fd = get_unused_fd_flags(flags);
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
fd_install(fd, dmabuf->file);
|
||||
|
||||
|
|
|
@ -88,11 +88,6 @@ enum {
|
|||
FW_STATUS_ABORT,
|
||||
};
|
||||
|
||||
enum fw_buf_fmt {
|
||||
VMALLOC_BUF, /* used in direct loading */
|
||||
PAGE_BUF, /* used in loading via userspace */
|
||||
};
|
||||
|
||||
static int loading_timeout = 60; /* In seconds */
|
||||
|
||||
static inline long firmware_loading_timeout(void)
|
||||
|
@ -128,12 +123,14 @@ struct firmware_buf {
|
|||
struct completion completion;
|
||||
struct firmware_cache *fwc;
|
||||
unsigned long status;
|
||||
enum fw_buf_fmt fmt;
|
||||
void *data;
|
||||
size_t size;
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
bool is_paged_buf;
|
||||
struct page **pages;
|
||||
int nr_pages;
|
||||
int page_array_size;
|
||||
#endif
|
||||
char fw_id[];
|
||||
};
|
||||
|
||||
|
@ -142,14 +139,6 @@ struct fw_cache_entry {
|
|||
char name[];
|
||||
};
|
||||
|
||||
struct firmware_priv {
|
||||
struct delayed_work timeout_work;
|
||||
bool nowait;
|
||||
struct device dev;
|
||||
struct firmware_buf *buf;
|
||||
struct firmware *fw;
|
||||
};
|
||||
|
||||
struct fw_name_devm {
|
||||
unsigned long magic;
|
||||
char name[];
|
||||
|
@ -182,7 +171,6 @@ static struct firmware_buf *__allocate_fw_buf(const char *fw_name,
|
|||
strcpy(buf->fw_id, fw_name);
|
||||
buf->fwc = fwc;
|
||||
init_completion(&buf->completion);
|
||||
buf->fmt = VMALLOC_BUF;
|
||||
|
||||
pr_debug("%s: fw-%s buf=%p\n", __func__, fw_name, buf);
|
||||
|
||||
|
@ -240,7 +228,6 @@ static void __fw_free_buf(struct kref *ref)
|
|||
{
|
||||
struct firmware_buf *buf = to_fwbuf(ref);
|
||||
struct firmware_cache *fwc = buf->fwc;
|
||||
int i;
|
||||
|
||||
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
|
||||
__func__, buf->fw_id, buf, buf->data,
|
||||
|
@ -249,13 +236,15 @@ static void __fw_free_buf(struct kref *ref)
|
|||
list_del(&buf->list);
|
||||
spin_unlock(&fwc->lock);
|
||||
|
||||
|
||||
if (buf->fmt == PAGE_BUF) {
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
if (buf->is_paged_buf) {
|
||||
int i;
|
||||
vunmap(buf->data);
|
||||
for (i = 0; i < buf->nr_pages; i++)
|
||||
__free_page(buf->pages[i]);
|
||||
kfree(buf->pages);
|
||||
} else
|
||||
#endif
|
||||
vfree(buf->data);
|
||||
kfree(buf);
|
||||
}
|
||||
|
@ -319,7 +308,8 @@ static bool fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool fw_get_filesystem_firmware(struct firmware_buf *buf)
|
||||
static bool fw_get_filesystem_firmware(struct device *device,
|
||||
struct firmware_buf *buf)
|
||||
{
|
||||
int i;
|
||||
bool success = false;
|
||||
|
@ -343,9 +333,114 @@ static bool fw_get_filesystem_firmware(struct firmware_buf *buf)
|
|||
break;
|
||||
}
|
||||
__putname(path);
|
||||
|
||||
if (success) {
|
||||
dev_dbg(device, "firmware: direct-loading firmware %s\n",
|
||||
buf->fw_id);
|
||||
mutex_lock(&fw_lock);
|
||||
set_bit(FW_STATUS_DONE, &buf->status);
|
||||
complete_all(&buf->completion);
|
||||
mutex_unlock(&fw_lock);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
/* firmware holds the ownership of pages */
|
||||
static void firmware_free_data(const struct firmware *fw)
|
||||
{
|
||||
/* Loaded directly? */
|
||||
if (!fw->priv) {
|
||||
vfree(fw->data);
|
||||
return;
|
||||
}
|
||||
fw_free_buf(fw->priv);
|
||||
}
|
||||
|
||||
/* store the pages buffer info firmware from buf */
|
||||
static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
|
||||
{
|
||||
fw->priv = buf;
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
fw->pages = buf->pages;
|
||||
#endif
|
||||
fw->size = buf->size;
|
||||
fw->data = buf->data;
|
||||
|
||||
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
|
||||
__func__, buf->fw_id, buf, buf->data,
|
||||
(unsigned int)buf->size);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static void fw_name_devm_release(struct device *dev, void *res)
|
||||
{
|
||||
struct fw_name_devm *fwn = res;
|
||||
|
||||
if (fwn->magic == (unsigned long)&fw_cache)
|
||||
pr_debug("%s: fw_name-%s devm-%p released\n",
|
||||
__func__, fwn->name, res);
|
||||
}
|
||||
|
||||
static int fw_devm_match(struct device *dev, void *res,
|
||||
void *match_data)
|
||||
{
|
||||
struct fw_name_devm *fwn = res;
|
||||
|
||||
return (fwn->magic == (unsigned long)&fw_cache) &&
|
||||
!strcmp(fwn->name, match_data);
|
||||
}
|
||||
|
||||
static struct fw_name_devm *fw_find_devm_name(struct device *dev,
|
||||
const char *name)
|
||||
{
|
||||
struct fw_name_devm *fwn;
|
||||
|
||||
fwn = devres_find(dev, fw_name_devm_release,
|
||||
fw_devm_match, (void *)name);
|
||||
return fwn;
|
||||
}
|
||||
|
||||
/* add firmware name into devres list */
|
||||
static int fw_add_devm_name(struct device *dev, const char *name)
|
||||
{
|
||||
struct fw_name_devm *fwn;
|
||||
|
||||
fwn = fw_find_devm_name(dev, name);
|
||||
if (fwn)
|
||||
return 1;
|
||||
|
||||
fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm) +
|
||||
strlen(name) + 1, GFP_KERNEL);
|
||||
if (!fwn)
|
||||
return -ENOMEM;
|
||||
|
||||
fwn->magic = (unsigned long)&fw_cache;
|
||||
strcpy(fwn->name, name);
|
||||
devres_add(dev, fwn);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int fw_add_devm_name(struct device *dev, const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* user-mode helper code
|
||||
*/
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
struct firmware_priv {
|
||||
struct delayed_work timeout_work;
|
||||
bool nowait;
|
||||
struct device dev;
|
||||
struct firmware_buf *buf;
|
||||
struct firmware *fw;
|
||||
};
|
||||
|
||||
static struct firmware_priv *to_firmware_priv(struct device *dev)
|
||||
{
|
||||
return container_of(dev, struct firmware_priv, dev);
|
||||
|
@ -359,6 +454,9 @@ static void fw_load_abort(struct firmware_priv *fw_priv)
|
|||
complete_all(&buf->completion);
|
||||
}
|
||||
|
||||
#define is_fw_load_aborted(buf) \
|
||||
test_bit(FW_STATUS_ABORT, &(buf)->status)
|
||||
|
||||
static ssize_t firmware_timeout_show(struct class *class,
|
||||
struct class_attribute *attr,
|
||||
char *buf)
|
||||
|
@ -435,17 +533,6 @@ static ssize_t firmware_loading_show(struct device *dev,
|
|||
return sprintf(buf, "%d\n", loading);
|
||||
}
|
||||
|
||||
/* firmware holds the ownership of pages */
|
||||
static void firmware_free_data(const struct firmware *fw)
|
||||
{
|
||||
/* Loaded directly? */
|
||||
if (!fw->priv) {
|
||||
vfree(fw->data);
|
||||
return;
|
||||
}
|
||||
fw_free_buf(fw->priv);
|
||||
}
|
||||
|
||||
/* Some architectures don't have PAGE_KERNEL_RO */
|
||||
#ifndef PAGE_KERNEL_RO
|
||||
#define PAGE_KERNEL_RO PAGE_KERNEL
|
||||
|
@ -454,7 +541,7 @@ static void firmware_free_data(const struct firmware *fw)
|
|||
/* one pages buffer should be mapped/unmapped only once */
|
||||
static int fw_map_pages_buf(struct firmware_buf *buf)
|
||||
{
|
||||
if (buf->fmt != PAGE_BUF)
|
||||
if (!buf->is_paged_buf)
|
||||
return 0;
|
||||
|
||||
if (buf->data)
|
||||
|
@ -727,171 +814,16 @@ exit:
|
|||
return fw_priv;
|
||||
}
|
||||
|
||||
/* store the pages buffer info firmware from buf */
|
||||
static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
|
||||
{
|
||||
fw->priv = buf;
|
||||
fw->pages = buf->pages;
|
||||
fw->size = buf->size;
|
||||
fw->data = buf->data;
|
||||
|
||||
pr_debug("%s: fw-%s buf=%p data=%p size=%u\n",
|
||||
__func__, buf->fw_id, buf, buf->data,
|
||||
(unsigned int)buf->size);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static void fw_name_devm_release(struct device *dev, void *res)
|
||||
{
|
||||
struct fw_name_devm *fwn = res;
|
||||
|
||||
if (fwn->magic == (unsigned long)&fw_cache)
|
||||
pr_debug("%s: fw_name-%s devm-%p released\n",
|
||||
__func__, fwn->name, res);
|
||||
}
|
||||
|
||||
static int fw_devm_match(struct device *dev, void *res,
|
||||
void *match_data)
|
||||
{
|
||||
struct fw_name_devm *fwn = res;
|
||||
|
||||
return (fwn->magic == (unsigned long)&fw_cache) &&
|
||||
!strcmp(fwn->name, match_data);
|
||||
}
|
||||
|
||||
static struct fw_name_devm *fw_find_devm_name(struct device *dev,
|
||||
const char *name)
|
||||
{
|
||||
struct fw_name_devm *fwn;
|
||||
|
||||
fwn = devres_find(dev, fw_name_devm_release,
|
||||
fw_devm_match, (void *)name);
|
||||
return fwn;
|
||||
}
|
||||
|
||||
/* add firmware name into devres list */
|
||||
static int fw_add_devm_name(struct device *dev, const char *name)
|
||||
{
|
||||
struct fw_name_devm *fwn;
|
||||
|
||||
fwn = fw_find_devm_name(dev, name);
|
||||
if (fwn)
|
||||
return 1;
|
||||
|
||||
fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm) +
|
||||
strlen(name) + 1, GFP_KERNEL);
|
||||
if (!fwn)
|
||||
return -ENOMEM;
|
||||
|
||||
fwn->magic = (unsigned long)&fw_cache;
|
||||
strcpy(fwn->name, name);
|
||||
devres_add(dev, fwn);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int fw_add_devm_name(struct device *dev, const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void _request_firmware_cleanup(const struct firmware **firmware_p)
|
||||
{
|
||||
release_firmware(*firmware_p);
|
||||
*firmware_p = NULL;
|
||||
}
|
||||
|
||||
static struct firmware_priv *
|
||||
_request_firmware_prepare(const struct firmware **firmware_p, const char *name,
|
||||
struct device *device, bool uevent, bool nowait)
|
||||
{
|
||||
struct firmware *firmware;
|
||||
struct firmware_priv *fw_priv = NULL;
|
||||
struct firmware_buf *buf;
|
||||
int ret;
|
||||
|
||||
if (!firmware_p)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
|
||||
if (!firmware) {
|
||||
dev_err(device, "%s: kmalloc(struct firmware) failed\n",
|
||||
__func__);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
if (fw_get_builtin_firmware(firmware, name)) {
|
||||
dev_dbg(device, "firmware: using built-in firmware %s\n", name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf);
|
||||
if (!ret)
|
||||
fw_priv = fw_create_instance(firmware, name, device,
|
||||
uevent, nowait);
|
||||
|
||||
if (IS_ERR(fw_priv) || ret < 0) {
|
||||
kfree(firmware);
|
||||
*firmware_p = NULL;
|
||||
return ERR_PTR(-ENOMEM);
|
||||
} else if (fw_priv) {
|
||||
fw_priv->buf = buf;
|
||||
|
||||
/*
|
||||
* bind with 'buf' now to avoid warning in failure path
|
||||
* of requesting firmware.
|
||||
*/
|
||||
firmware->priv = buf;
|
||||
return fw_priv;
|
||||
}
|
||||
|
||||
/* share the cached buf, which is inprogessing or completed */
|
||||
check_status:
|
||||
mutex_lock(&fw_lock);
|
||||
if (test_bit(FW_STATUS_ABORT, &buf->status)) {
|
||||
fw_priv = ERR_PTR(-ENOENT);
|
||||
firmware->priv = buf;
|
||||
_request_firmware_cleanup(firmware_p);
|
||||
goto exit;
|
||||
} else if (test_bit(FW_STATUS_DONE, &buf->status)) {
|
||||
fw_priv = NULL;
|
||||
fw_set_page_data(buf, firmware);
|
||||
goto exit;
|
||||
}
|
||||
mutex_unlock(&fw_lock);
|
||||
wait_for_completion(&buf->completion);
|
||||
goto check_status;
|
||||
|
||||
exit:
|
||||
mutex_unlock(&fw_lock);
|
||||
return fw_priv;
|
||||
}
|
||||
|
||||
/* load a firmware via user helper */
|
||||
static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
|
||||
long timeout)
|
||||
{
|
||||
int retval = 0;
|
||||
struct device *f_dev = &fw_priv->dev;
|
||||
struct firmware_buf *buf = fw_priv->buf;
|
||||
struct firmware_cache *fwc = &fw_cache;
|
||||
int direct_load = 0;
|
||||
|
||||
/* try direct loading from fs first */
|
||||
if (fw_get_filesystem_firmware(buf)) {
|
||||
dev_dbg(f_dev->parent, "firmware: direct-loading"
|
||||
" firmware %s\n", buf->fw_id);
|
||||
|
||||
mutex_lock(&fw_lock);
|
||||
set_bit(FW_STATUS_DONE, &buf->status);
|
||||
mutex_unlock(&fw_lock);
|
||||
complete_all(&buf->completion);
|
||||
direct_load = 1;
|
||||
goto handle_fw;
|
||||
}
|
||||
|
||||
/* fall back on userspace loading */
|
||||
buf->fmt = PAGE_BUF;
|
||||
buf->is_paged_buf = true;
|
||||
|
||||
dev_set_uevent_suppress(f_dev, true);
|
||||
|
||||
|
@ -929,38 +861,7 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
|
|||
|
||||
cancel_delayed_work_sync(&fw_priv->timeout_work);
|
||||
|
||||
handle_fw:
|
||||
mutex_lock(&fw_lock);
|
||||
if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
|
||||
retval = -ENOENT;
|
||||
|
||||
/*
|
||||
* add firmware name into devres list so that we can auto cache
|
||||
* and uncache firmware for device.
|
||||
*
|
||||
* f_dev->parent may has been deleted already, but the problem
|
||||
* should be fixed in devres or driver core.
|
||||
*/
|
||||
if (!retval && f_dev->parent)
|
||||
fw_add_devm_name(f_dev->parent, buf->fw_id);
|
||||
|
||||
/*
|
||||
* After caching firmware image is started, let it piggyback
|
||||
* on request firmware.
|
||||
*/
|
||||
if (!retval && fwc->state == FW_LOADER_START_CACHE) {
|
||||
if (fw_cache_piggyback_on_request(buf->fw_id))
|
||||
kref_get(&buf->ref);
|
||||
}
|
||||
|
||||
/* pass the pages buffer to driver at the last minute */
|
||||
fw_set_page_data(buf, fw_priv->fw);
|
||||
|
||||
fw_priv->buf = NULL;
|
||||
mutex_unlock(&fw_lock);
|
||||
|
||||
if (direct_load)
|
||||
goto err_put_dev;
|
||||
|
||||
device_remove_file(f_dev, &dev_attr_loading);
|
||||
err_del_bin_attr:
|
||||
|
@ -972,6 +873,186 @@ err_put_dev:
|
|||
return retval;
|
||||
}
|
||||
|
||||
static int fw_load_from_user_helper(struct firmware *firmware,
|
||||
const char *name, struct device *device,
|
||||
bool uevent, bool nowait, long timeout)
|
||||
{
|
||||
struct firmware_priv *fw_priv;
|
||||
|
||||
fw_priv = fw_create_instance(firmware, name, device, uevent, nowait);
|
||||
if (IS_ERR(fw_priv))
|
||||
return PTR_ERR(fw_priv);
|
||||
|
||||
fw_priv->buf = firmware->priv;
|
||||
return _request_firmware_load(fw_priv, uevent, timeout);
|
||||
}
|
||||
#else /* CONFIG_FW_LOADER_USER_HELPER */
|
||||
static inline int
|
||||
fw_load_from_user_helper(struct firmware *firmware, const char *name,
|
||||
struct device *device, bool uevent, bool nowait,
|
||||
long timeout)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/* No abort during direct loading */
|
||||
#define is_fw_load_aborted(buf) false
|
||||
|
||||
#endif /* CONFIG_FW_LOADER_USER_HELPER */
|
||||
|
||||
|
||||
/* wait until the shared firmware_buf becomes ready (or error) */
|
||||
static int sync_cached_firmware_buf(struct firmware_buf *buf)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&fw_lock);
|
||||
while (!test_bit(FW_STATUS_DONE, &buf->status)) {
|
||||
if (is_fw_load_aborted(buf)) {
|
||||
ret = -ENOENT;
|
||||
break;
|
||||
}
|
||||
mutex_unlock(&fw_lock);
|
||||
wait_for_completion(&buf->completion);
|
||||
mutex_lock(&fw_lock);
|
||||
}
|
||||
mutex_unlock(&fw_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* prepare firmware and firmware_buf structs;
|
||||
* return 0 if a firmware is already assigned, 1 if need to load one,
|
||||
* or a negative error code
|
||||
*/
|
||||
static int
|
||||
_request_firmware_prepare(struct firmware **firmware_p, const char *name,
|
||||
struct device *device)
|
||||
{
|
||||
struct firmware *firmware;
|
||||
struct firmware_buf *buf;
|
||||
int ret;
|
||||
|
||||
*firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
|
||||
if (!firmware) {
|
||||
dev_err(device, "%s: kmalloc(struct firmware) failed\n",
|
||||
__func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (fw_get_builtin_firmware(firmware, name)) {
|
||||
dev_dbg(device, "firmware: using built-in firmware %s\n", name);
|
||||
return 0; /* assigned */
|
||||
}
|
||||
|
||||
ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf);
|
||||
|
||||
/*
|
||||
* bind with 'buf' now to avoid warning in failure path
|
||||
* of requesting firmware.
|
||||
*/
|
||||
firmware->priv = buf;
|
||||
|
||||
if (ret > 0) {
|
||||
ret = sync_cached_firmware_buf(buf);
|
||||
if (!ret) {
|
||||
fw_set_page_data(buf, firmware);
|
||||
return 0; /* assigned */
|
||||
}
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
return 1; /* need to load */
|
||||
}
|
||||
|
||||
static int assign_firmware_buf(struct firmware *fw, struct device *device)
|
||||
{
|
||||
struct firmware_buf *buf = fw->priv;
|
||||
|
||||
mutex_lock(&fw_lock);
|
||||
if (!buf->size || is_fw_load_aborted(buf)) {
|
||||
mutex_unlock(&fw_lock);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/*
|
||||
* add firmware name into devres list so that we can auto cache
|
||||
* and uncache firmware for device.
|
||||
*
|
||||
* device may has been deleted already, but the problem
|
||||
* should be fixed in devres or driver core.
|
||||
*/
|
||||
if (device)
|
||||
fw_add_devm_name(device, buf->fw_id);
|
||||
|
||||
/*
|
||||
* After caching firmware image is started, let it piggyback
|
||||
* on request firmware.
|
||||
*/
|
||||
if (buf->fwc->state == FW_LOADER_START_CACHE) {
|
||||
if (fw_cache_piggyback_on_request(buf->fw_id))
|
||||
kref_get(&buf->ref);
|
||||
}
|
||||
|
||||
/* pass the pages buffer to driver at the last minute */
|
||||
fw_set_page_data(buf, fw);
|
||||
mutex_unlock(&fw_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* called from request_firmware() and request_firmware_work_func() */
|
||||
static int
|
||||
_request_firmware(const struct firmware **firmware_p, const char *name,
|
||||
struct device *device, bool uevent, bool nowait)
|
||||
{
|
||||
struct firmware *fw;
|
||||
long timeout;
|
||||
int ret;
|
||||
|
||||
if (!firmware_p)
|
||||
return -EINVAL;
|
||||
|
||||
ret = _request_firmware_prepare(&fw, name, device);
|
||||
if (ret <= 0) /* error or already assigned */
|
||||
goto out;
|
||||
|
||||
ret = 0;
|
||||
timeout = firmware_loading_timeout();
|
||||
if (nowait) {
|
||||
timeout = usermodehelper_read_lock_wait(timeout);
|
||||
if (!timeout) {
|
||||
dev_dbg(device, "firmware: %s loading timed out\n",
|
||||
name);
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
ret = usermodehelper_read_trylock();
|
||||
if (WARN_ON(ret)) {
|
||||
dev_err(device, "firmware: %s will not be loaded\n",
|
||||
name);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fw_get_filesystem_firmware(device, fw->priv))
|
||||
ret = fw_load_from_user_helper(fw, name, device,
|
||||
uevent, nowait, timeout);
|
||||
if (!ret)
|
||||
ret = assign_firmware_buf(fw, device);
|
||||
|
||||
usermodehelper_read_unlock();
|
||||
|
||||
out:
|
||||
if (ret < 0) {
|
||||
release_firmware(fw);
|
||||
fw = NULL;
|
||||
}
|
||||
|
||||
*firmware_p = fw;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* request_firmware: - send firmware request and wait for it
|
||||
* @firmware_p: pointer to firmware image
|
||||
|
@ -996,26 +1077,7 @@ int
|
|||
request_firmware(const struct firmware **firmware_p, const char *name,
|
||||
struct device *device)
|
||||
{
|
||||
struct firmware_priv *fw_priv;
|
||||
int ret;
|
||||
|
||||
fw_priv = _request_firmware_prepare(firmware_p, name, device, true,
|
||||
false);
|
||||
if (IS_ERR_OR_NULL(fw_priv))
|
||||
return PTR_RET(fw_priv);
|
||||
|
||||
ret = usermodehelper_read_trylock();
|
||||
if (WARN_ON(ret)) {
|
||||
dev_err(device, "firmware: %s will not be loaded\n", name);
|
||||
} else {
|
||||
ret = _request_firmware_load(fw_priv, true,
|
||||
firmware_loading_timeout());
|
||||
usermodehelper_read_unlock();
|
||||
}
|
||||
if (ret)
|
||||
_request_firmware_cleanup(firmware_p);
|
||||
|
||||
return ret;
|
||||
return _request_firmware(firmware_p, name, device, true, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1046,33 +1108,13 @@ static void request_firmware_work_func(struct work_struct *work)
|
|||
{
|
||||
struct firmware_work *fw_work;
|
||||
const struct firmware *fw;
|
||||
struct firmware_priv *fw_priv;
|
||||
long timeout;
|
||||
int ret;
|
||||
|
||||
fw_work = container_of(work, struct firmware_work, work);
|
||||
fw_priv = _request_firmware_prepare(&fw, fw_work->name, fw_work->device,
|
||||
fw_work->uevent, true);
|
||||
if (IS_ERR_OR_NULL(fw_priv)) {
|
||||
ret = PTR_RET(fw_priv);
|
||||
goto out;
|
||||
}
|
||||
|
||||
timeout = usermodehelper_read_lock_wait(firmware_loading_timeout());
|
||||
if (timeout) {
|
||||
ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
|
||||
usermodehelper_read_unlock();
|
||||
} else {
|
||||
dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
|
||||
fw_work->name);
|
||||
ret = -EAGAIN;
|
||||
}
|
||||
if (ret)
|
||||
_request_firmware_cleanup(&fw);
|
||||
|
||||
out:
|
||||
_request_firmware(&fw, fw_work->name, fw_work->device,
|
||||
fw_work->uevent, true);
|
||||
fw_work->cont(fw, fw_work->context);
|
||||
put_device(fw_work->device);
|
||||
put_device(fw_work->device); /* taken in request_firmware_nowait() */
|
||||
|
||||
module_put(fw_work->module);
|
||||
kfree(fw_work);
|
||||
|
@ -1474,7 +1516,11 @@ static void __init fw_cache_init(void)
|
|||
static int __init firmware_class_init(void)
|
||||
{
|
||||
fw_cache_init();
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
return class_register(&firmware_class);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __exit firmware_class_exit(void)
|
||||
|
@ -1483,7 +1529,9 @@ static void __exit firmware_class_exit(void)
|
|||
unregister_syscore_ops(&fw_syscore_ops);
|
||||
unregister_pm_notifier(&fw_cache.pm_notify);
|
||||
#endif
|
||||
#ifdef CONFIG_FW_LOADER_USER_HELPER
|
||||
class_unregister(&firmware_class);
|
||||
#endif
|
||||
}
|
||||
|
||||
fs_initcall(firmware_class_init);
|
||||
|
|
|
@ -494,8 +494,8 @@ store_hard_offline_page(struct device *dev,
|
|||
return ret ? ret : count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(soft_offline_page, 0644, NULL, store_soft_offline_page);
|
||||
static DEVICE_ATTR(hard_offline_page, 0644, NULL, store_hard_offline_page);
|
||||
static DEVICE_ATTR(soft_offline_page, S_IWUSR, NULL, store_soft_offline_page);
|
||||
static DEVICE_ATTR(hard_offline_page, S_IWUSR, NULL, store_hard_offline_page);
|
||||
|
||||
static __init int memory_fail_init(void)
|
||||
{
|
||||
|
|
|
@ -205,8 +205,8 @@ config PARIDE_EPAT
|
|||
support.
|
||||
|
||||
config PARIDE_EPATC8
|
||||
bool "Support c7/c8 chips (EXPERIMENTAL)"
|
||||
depends on PARIDE_EPAT && EXPERIMENTAL
|
||||
bool "Support c7/c8 chips"
|
||||
depends on PARIDE_EPAT
|
||||
help
|
||||
This option enables support for the newer Shuttle EP1284 (aka c7 and
|
||||
c8) chip. You need this if you are using any recent Imation SuperDisk
|
||||
|
|
|
@ -104,6 +104,7 @@ static int exynos_read(struct hwrng *rng, void *buf,
|
|||
static int exynos_rng_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct exynos_rng *exynos_rng;
|
||||
struct resource *res;
|
||||
|
||||
exynos_rng = devm_kzalloc(&pdev->dev, sizeof(struct exynos_rng),
|
||||
GFP_KERNEL);
|
||||
|
@ -120,10 +121,10 @@ static int exynos_rng_probe(struct platform_device *pdev)
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
exynos_rng->mem = devm_request_and_ioremap(&pdev->dev,
|
||||
platform_get_resource(pdev, IORESOURCE_MEM, 0));
|
||||
if (!exynos_rng->mem)
|
||||
return -EBUSY;
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
exynos_rng->mem = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(exynos_rng->mem))
|
||||
return PTR_ERR(exynos_rng->mem);
|
||||
|
||||
platform_set_drvdata(pdev, exynos_rng);
|
||||
|
||||
|
|
|
@ -124,9 +124,9 @@ static int omap_rng_probe(struct platform_device *pdev)
|
|||
goto err_ioremap;
|
||||
}
|
||||
|
||||
priv->base = devm_request_and_ioremap(&pdev->dev, priv->mem_res);
|
||||
if (!priv->base) {
|
||||
ret = -ENOMEM;
|
||||
priv->base = devm_ioremap_resource(&pdev->dev, priv->mem_res);
|
||||
if (IS_ERR(priv->base)) {
|
||||
ret = PTR_ERR(priv->base);
|
||||
goto err_ioremap;
|
||||
}
|
||||
dev_set_drvdata(&pdev->dev, priv);
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -115,9 +116,9 @@ static int __init tx4939_rng_probe(struct platform_device *dev)
|
|||
rngdev = devm_kzalloc(&dev->dev, sizeof(*rngdev), GFP_KERNEL);
|
||||
if (!rngdev)
|
||||
return -ENOMEM;
|
||||
rngdev->base = devm_request_and_ioremap(&dev->dev, r);
|
||||
if (!rngdev->base)
|
||||
return -EBUSY;
|
||||
rngdev->base = devm_ioremap_resource(&dev->dev, r);
|
||||
if (IS_ERR(rngdev->base))
|
||||
return PTR_ERR(rngdev->base);
|
||||
|
||||
rngdev->rng.name = dev_name(&dev->dev);
|
||||
rngdev->rng.data_present = tx4939_rng_data_present;
|
||||
|
|
|
@ -21,8 +21,8 @@ config ARM_S3C2416_CPUFREQ
|
|||
If in doubt, say N.
|
||||
|
||||
config ARM_S3C2416_CPUFREQ_VCORESCALE
|
||||
bool "Allow voltage scaling for S3C2416 arm core (EXPERIMENTAL)"
|
||||
depends on ARM_S3C2416_CPUFREQ && REGULATOR && EXPERIMENTAL
|
||||
bool "Allow voltage scaling for S3C2416 arm core"
|
||||
depends on ARM_S3C2416_CPUFREQ && REGULATOR
|
||||
help
|
||||
Enable CPU voltage scaling when entering the dvs mode.
|
||||
It uses information gathered through existing hardware and
|
||||
|
|
|
@ -187,7 +187,7 @@ config X86_SPEEDSTEP_ICH
|
|||
config X86_SPEEDSTEP_SMI
|
||||
tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)"
|
||||
select CPU_FREQ_TABLE
|
||||
depends on X86_32 && EXPERIMENTAL
|
||||
depends on X86_32
|
||||
help
|
||||
This adds the CPUFreq driver for certain mobile Intel Pentium III
|
||||
(Coppermine), all mobile Intel Pentium III-M (Tualatin)
|
||||
|
@ -219,7 +219,7 @@ config X86_P4_CLOCKMOD
|
|||
|
||||
config X86_CPUFREQ_NFORCE2
|
||||
tristate "nVidia nForce2 FSB changing"
|
||||
depends on X86_32 && EXPERIMENTAL
|
||||
depends on X86_32
|
||||
help
|
||||
This adds the CPUFreq driver for FSB changing on nVidia nForce2
|
||||
platforms.
|
||||
|
@ -255,7 +255,7 @@ config X86_LONGHAUL
|
|||
config X86_E_POWERSAVER
|
||||
tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)"
|
||||
select CPU_FREQ_TABLE
|
||||
depends on X86_32 && EXPERIMENTAL
|
||||
depends on X86_32
|
||||
help
|
||||
This adds the CPUFreq driver for VIA C7 processors. However, this driver
|
||||
does not have any safeguards to prevent operating the CPU out of spec
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -1489,9 +1490,9 @@ static int dw_probe(struct platform_device *pdev)
|
|||
if (irq < 0)
|
||||
return irq;
|
||||
|
||||
regs = devm_request_and_ioremap(&pdev->dev, io);
|
||||
if (!regs)
|
||||
return -EBUSY;
|
||||
regs = devm_ioremap_resource(&pdev->dev, io);
|
||||
if (IS_ERR(regs))
|
||||
return PTR_ERR(regs);
|
||||
|
||||
dw_params = dma_read_byaddr(regs, DW_PARAMS);
|
||||
autocfg = dw_params >> DW_PARAMS_EN & 0x1;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
* http://www.opensource.org/licenses/gpl-license.html
|
||||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mm.h>
|
||||
|
@ -1010,9 +1011,9 @@ static int __init imxdma_probe(struct platform_device *pdev)
|
|||
imxdma->devtype = pdev->id_entry->driver_data;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
imxdma->base = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!imxdma->base)
|
||||
return -EADDRNOTAVAIL;
|
||||
imxdma->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(imxdma->base))
|
||||
return PTR_ERR(imxdma->base);
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0)
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
|
@ -782,9 +783,9 @@ static int mmp_pdma_probe(struct platform_device *op)
|
|||
if (!iores)
|
||||
return -EINVAL;
|
||||
|
||||
pdev->base = devm_request_and_ioremap(pdev->dev, iores);
|
||||
if (!pdev->base)
|
||||
return -EADDRNOTAVAIL;
|
||||
pdev->base = devm_ioremap_resource(pdev->dev, iores);
|
||||
if (IS_ERR(pdev->base))
|
||||
return PTR_ERR(pdev->base);
|
||||
|
||||
of_id = of_match_device(mmp_pdma_dt_ids, pdev->dev);
|
||||
if (of_id)
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/types.h>
|
||||
|
@ -547,9 +548,9 @@ static int mmp_tdma_probe(struct platform_device *pdev)
|
|||
if (!iores)
|
||||
return -EINVAL;
|
||||
|
||||
tdev->base = devm_request_and_ioremap(&pdev->dev, iores);
|
||||
if (!tdev->base)
|
||||
return -EADDRNOTAVAIL;
|
||||
tdev->base = devm_ioremap_resource(&pdev->dev, iores);
|
||||
if (IS_ERR(tdev->base))
|
||||
return PTR_ERR(tdev->base);
|
||||
|
||||
INIT_LIST_HEAD(&tdev->device.channels);
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -1240,12 +1241,9 @@ static int tegra_dma_probe(struct platform_device *pdev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
tdma->base_addr = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!tdma->base_addr) {
|
||||
dev_err(&pdev->dev,
|
||||
"Cannot request memregion/iomap dma address\n");
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
tdma->base_addr = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(tdma->base_addr))
|
||||
return PTR_ERR(tdma->base_addr);
|
||||
|
||||
tdma->dma_clk = devm_clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(tdma->dma_clk)) {
|
||||
|
|
|
@ -158,7 +158,7 @@ config EDAC_I3000
|
|||
|
||||
config EDAC_I3200
|
||||
tristate "Intel 3200"
|
||||
depends on EDAC_MM_EDAC && PCI && X86 && EXPERIMENTAL
|
||||
depends on EDAC_MM_EDAC && PCI && X86
|
||||
help
|
||||
Support for error detection and correction on the Intel
|
||||
3200 and 3210 server chipsets.
|
||||
|
@ -224,7 +224,7 @@ config EDAC_I7300
|
|||
config EDAC_SBRIDGE
|
||||
tristate "Intel Sandy-Bridge Integrated MC"
|
||||
depends on EDAC_MM_EDAC && PCI && X86_64 && X86_MCE_INTEL
|
||||
depends on PCI_MMCONFIG && EXPERIMENTAL
|
||||
depends on PCI_MMCONFIG
|
||||
help
|
||||
Support for error detection and correction the Intel
|
||||
Sandy Bridge Integrated Memory Controller.
|
||||
|
|
|
@ -66,7 +66,7 @@ config DEBUG_GPIO
|
|||
|
||||
config GPIO_SYSFS
|
||||
bool "/sys/class/gpio/... (sysfs interface)"
|
||||
depends on SYSFS && EXPERIMENTAL
|
||||
depends on SYSFS
|
||||
help
|
||||
Say Y here to add a sysfs interface for GPIOs.
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
* interrupts.
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/irq.h>
|
||||
|
@ -544,11 +545,9 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
|||
mvchip->chip.of_node = np;
|
||||
|
||||
spin_lock_init(&mvchip->lock);
|
||||
mvchip->membase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (! mvchip->membase) {
|
||||
dev_err(&pdev->dev, "Cannot ioremap\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
mvchip->membase = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(mvchip->membase))
|
||||
return PTR_ERR(mvchip->membase);
|
||||
|
||||
/* The Armada XP has a second range of registers for the
|
||||
* per-CPU registers */
|
||||
|
@ -559,11 +558,10 @@ static int mvebu_gpio_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
mvchip->percpu_membase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (! mvchip->percpu_membase) {
|
||||
dev_err(&pdev->dev, "Cannot ioremap\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
mvchip->percpu_membase = devm_ioremap_resource(&pdev->dev,
|
||||
res);
|
||||
if (IS_ERR(mvchip->percpu_membase))
|
||||
return PTR_ERR(mvchip->percpu_membase);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -253,12 +254,14 @@ static int mxs_gpio_probe(struct platform_device *pdev)
|
|||
parent = of_get_parent(np);
|
||||
base = of_iomap(parent, 0);
|
||||
of_node_put(parent);
|
||||
if (!base)
|
||||
return -EADDRNOTAVAIL;
|
||||
} else {
|
||||
iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
base = devm_request_and_ioremap(&pdev->dev, iores);
|
||||
base = devm_ioremap_resource(&pdev->dev, iores);
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
}
|
||||
if (!base)
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
port->base = base;
|
||||
|
||||
|
|
|
@ -140,11 +140,9 @@ static int spics_gpio_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
spics->base = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!spics->base) {
|
||||
dev_err(&pdev->dev, "request and ioremap fail\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
spics->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(spics->base))
|
||||
return PTR_ERR(spics->base);
|
||||
|
||||
if (of_property_read_u32(np, "st-spics,peripcfg-reg",
|
||||
&spics->perip_cfg))
|
||||
|
|
|
@ -214,11 +214,10 @@ static int xway_stp_probe(struct platform_device *pdev)
|
|||
if (!chip)
|
||||
return -ENOMEM;
|
||||
|
||||
chip->virt = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!chip->virt) {
|
||||
dev_err(&pdev->dev, "failed to remap STP memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
chip->virt = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(chip->virt))
|
||||
return PTR_ERR(chip->virt);
|
||||
|
||||
chip->gc.dev = &pdev->dev;
|
||||
chip->gc.label = "stp-xway";
|
||||
chip->gc.direction_output = xway_stp_dir_out;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
@ -450,11 +451,9 @@ static int tegra_gpio_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "Couldn't ioremap regs\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(regs))
|
||||
return PTR_ERR(regs);
|
||||
|
||||
for (i = 0; i < tegra_gpio_bank_count; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
|
|
|
@ -806,7 +806,7 @@ fail_unlock:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(gpio_export);
|
||||
|
||||
static int match_export(struct device *dev, void *data)
|
||||
static int match_export(struct device *dev, const void *data)
|
||||
{
|
||||
return dev_get_drvdata(dev) == data;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DRM_AST
|
||||
tristate "AST server chips"
|
||||
depends on DRM && PCI && EXPERIMENTAL
|
||||
depends on DRM && PCI
|
||||
select DRM_TTM
|
||||
select FB_SYS_COPYAREA
|
||||
select FB_SYS_FILLRECT
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DRM_CIRRUS_QEMU
|
||||
tristate "Cirrus driver for QEMU emulated device"
|
||||
depends on DRM && PCI && EXPERIMENTAL
|
||||
depends on DRM && PCI
|
||||
select FB_SYS_FILLRECT
|
||||
select FB_SYS_COPYAREA
|
||||
select FB_SYS_IMAGEBLIT
|
||||
|
|
|
@ -1785,11 +1785,9 @@ static int fimc_probe(struct platform_device *pdev)
|
|||
|
||||
/* resource memory */
|
||||
ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);
|
||||
if (!ctx->regs) {
|
||||
dev_err(dev, "failed to map registers.\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
ctx->regs = devm_ioremap_resource(dev, ctx->regs_res);
|
||||
if (IS_ERR(ctx->regs))
|
||||
return PTR_ERR(ctx->regs);
|
||||
|
||||
/* resource irq */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
|
|
|
@ -913,11 +913,9 @@ static int fimd_probe(struct platform_device *pdev)
|
|||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
ctx->regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!ctx->regs) {
|
||||
dev_err(dev, "failed to map registers\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
ctx->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(ctx->regs))
|
||||
return PTR_ERR(ctx->regs);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (!res) {
|
||||
|
|
|
@ -1136,10 +1136,9 @@ static int g2d_probe(struct platform_device *pdev)
|
|||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
g2d->regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!g2d->regs) {
|
||||
dev_err(dev, "failed to remap I/O memory\n");
|
||||
ret = -ENXIO;
|
||||
g2d->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(g2d->regs)) {
|
||||
ret = PTR_ERR(g2d->regs);
|
||||
goto err_put_clk;
|
||||
}
|
||||
|
||||
|
|
|
@ -1692,11 +1692,9 @@ static int gsc_probe(struct platform_device *pdev)
|
|||
|
||||
/* resource memory */
|
||||
ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);
|
||||
if (!ctx->regs) {
|
||||
dev_err(dev, "failed to map registers.\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
ctx->regs = devm_ioremap_resource(dev, ctx->regs_res);
|
||||
if (IS_ERR(ctx->regs))
|
||||
return PTR_ERR(ctx->regs);
|
||||
|
||||
/* resource irq */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
|
|
|
@ -656,11 +656,9 @@ static int rotator_probe(struct platform_device *pdev)
|
|||
platform_get_device_id(pdev)->driver_data;
|
||||
|
||||
rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
rot->regs = devm_request_and_ioremap(dev, rot->regs_res);
|
||||
if (!rot->regs) {
|
||||
dev_err(dev, "failed to map register\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
rot->regs = devm_ioremap_resource(dev, rot->regs_res);
|
||||
if (IS_ERR(rot->regs))
|
||||
return PTR_ERR(rot->regs);
|
||||
|
||||
rot->irq = platform_get_irq(pdev, 0);
|
||||
if (rot->irq < 0) {
|
||||
|
|
|
@ -2501,11 +2501,9 @@ static int hdmi_probe(struct platform_device *pdev)
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
hdata->regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!hdata->regs) {
|
||||
DRM_ERROR("failed to map registers\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
hdata->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(hdata->regs))
|
||||
return PTR_ERR(hdata->regs);
|
||||
|
||||
ret = devm_gpio_request(&pdev->dev, hdata->hpd_gpio, "HPD");
|
||||
if (ret) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DRM_GMA500
|
||||
tristate "Intel GMA5/600 KMS Framebuffer"
|
||||
depends on DRM && PCI && X86 && EXPERIMENTAL
|
||||
depends on DRM && PCI && X86
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_IMAGEBLIT
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DRM_MGAG200
|
||||
tristate "Kernel modesetting driver for MGA G200 server engines"
|
||||
depends on DRM && PCI && EXPERIMENTAL
|
||||
depends on DRM && PCI
|
||||
select FB_SYS_FILLRECT
|
||||
select FB_SYS_COPYAREA
|
||||
select FB_SYS_IMAGEBLIT
|
||||
|
|
|
@ -764,11 +764,9 @@ static int tegra_dc_probe(struct platform_device *pdev)
|
|||
return -ENXIO;
|
||||
}
|
||||
|
||||
dc->regs = devm_request_and_ioremap(&pdev->dev, regs);
|
||||
if (!dc->regs) {
|
||||
dev_err(&pdev->dev, "failed to remap registers\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
dc->regs = devm_ioremap_resource(&pdev->dev, regs);
|
||||
if (IS_ERR(dc->regs))
|
||||
return PTR_ERR(dc->regs);
|
||||
|
||||
dc->irq = platform_get_irq(pdev, 0);
|
||||
if (dc->irq < 0) {
|
||||
|
|
|
@ -1259,9 +1259,9 @@ static int tegra_hdmi_probe(struct platform_device *pdev)
|
|||
if (!regs)
|
||||
return -ENXIO;
|
||||
|
||||
hdmi->regs = devm_request_and_ioremap(&pdev->dev, regs);
|
||||
if (!hdmi->regs)
|
||||
return -EADDRNOTAVAIL;
|
||||
hdmi->regs = devm_ioremap_resource(&pdev->dev, regs);
|
||||
if (IS_ERR(hdmi->regs))
|
||||
return PTR_ERR(hdmi->regs);
|
||||
|
||||
err = platform_get_irq(pdev, 0);
|
||||
if (err < 0)
|
||||
|
|
|
@ -139,9 +139,9 @@ static int tegra_host1x_probe(struct platform_device *pdev)
|
|||
|
||||
host1x->irq = err;
|
||||
|
||||
host1x->regs = devm_request_and_ioremap(&pdev->dev, regs);
|
||||
if (!host1x->regs) {
|
||||
err = -EADDRNOTAVAIL;
|
||||
host1x->regs = devm_ioremap_resource(&pdev->dev, regs);
|
||||
if (IS_ERR(host1x->regs)) {
|
||||
err = PTR_ERR(host1x->regs);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DRM_UDL
|
||||
tristate "DisplayLink"
|
||||
depends on DRM && EXPERIMENTAL
|
||||
depends on DRM
|
||||
depends on USB_ARCH_HAS_HCD
|
||||
select DRM_USB
|
||||
select FB_SYS_FILLRECT
|
||||
|
|
|
@ -89,7 +89,7 @@ source drivers/i2c/busses/Kconfig
|
|||
|
||||
config I2C_STUB
|
||||
tristate "I2C/SMBus Test Stub"
|
||||
depends on EXPERIMENTAL && m
|
||||
depends on m
|
||||
default 'n'
|
||||
help
|
||||
This module may be useful to developers of SMBus client drivers,
|
||||
|
|
|
@ -22,7 +22,7 @@ config I2C_ALI1535
|
|||
|
||||
config I2C_ALI1563
|
||||
tristate "ALI 1563"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
help
|
||||
If you say yes to this option, support will be included for the SMB
|
||||
Host controller on Acer Labs Inc. (ALI) M1563 South Bridges. The SMB
|
||||
|
@ -56,7 +56,7 @@ config I2C_AMD756
|
|||
|
||||
config I2C_AMD756_S4882
|
||||
tristate "SMBus multiplexing on the Tyan S4882"
|
||||
depends on I2C_AMD756 && X86 && EXPERIMENTAL
|
||||
depends on I2C_AMD756 && X86
|
||||
help
|
||||
Enabling this option will add specific SMBus support for the Tyan
|
||||
S4882 motherboard. On this 4-CPU board, the SMBus is multiplexed
|
||||
|
@ -164,7 +164,7 @@ config I2C_NFORCE2
|
|||
|
||||
config I2C_NFORCE2_S4985
|
||||
tristate "SMBus multiplexing on the Tyan S4985"
|
||||
depends on I2C_NFORCE2 && X86 && EXPERIMENTAL
|
||||
depends on I2C_NFORCE2 && X86
|
||||
help
|
||||
Enabling this option will add specific SMBus support for the Tyan
|
||||
S4985 motherboard. On this 4-CPU board, the SMBus is multiplexed
|
||||
|
@ -215,7 +215,7 @@ config I2C_SIS96X
|
|||
|
||||
config I2C_VIA
|
||||
tristate "VIA VT82C586B"
|
||||
depends on PCI && EXPERIMENTAL
|
||||
depends on PCI
|
||||
select I2C_ALGOBIT
|
||||
help
|
||||
If you say yes to this option, support will be included for the VIA
|
||||
|
@ -267,7 +267,7 @@ comment "Mac SMBus host controller drivers"
|
|||
|
||||
config I2C_HYDRA
|
||||
tristate "CHRP Apple Hydra Mac I/O I2C interface"
|
||||
depends on PCI && PPC_CHRP && EXPERIMENTAL
|
||||
depends on PCI && PPC_CHRP
|
||||
select I2C_ALGOBIT
|
||||
help
|
||||
This supports the use of the I2C interface in the Apple Hydra Mac
|
||||
|
@ -293,7 +293,7 @@ comment "I2C system bus drivers (mostly embedded / system-on-chip)"
|
|||
|
||||
config I2C_AT91
|
||||
tristate "Atmel AT91 I2C Two-Wire interface (TWI)"
|
||||
depends on ARCH_AT91 && EXPERIMENTAL
|
||||
depends on ARCH_AT91
|
||||
help
|
||||
This supports the use of the I2C interface on Atmel AT91
|
||||
processors.
|
||||
|
@ -519,7 +519,6 @@ config I2C_NUC900
|
|||
|
||||
config I2C_OCORES
|
||||
tristate "OpenCores I2C Controller"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
If you say yes to this option, support will be included for the
|
||||
OpenCores I2C controller. For details see
|
||||
|
@ -712,7 +711,7 @@ config I2C_OCTEON
|
|||
|
||||
config I2C_XILINX
|
||||
tristate "Xilinx I2C Controller"
|
||||
depends on EXPERIMENTAL && HAS_IOMEM
|
||||
depends on HAS_IOMEM
|
||||
help
|
||||
If you say yes to this option, support will be included for the
|
||||
Xilinx I2C controller.
|
||||
|
@ -803,7 +802,6 @@ config I2C_PARPORT_LIGHT
|
|||
|
||||
config I2C_TAOS_EVM
|
||||
tristate "TAOS evaluation module"
|
||||
depends on EXPERIMENTAL
|
||||
select SERIO
|
||||
select SERIO_SERPORT
|
||||
default n
|
||||
|
|
|
@ -723,9 +723,9 @@ static int at91_twi_probe(struct platform_device *pdev)
|
|||
if (!dev->pdata)
|
||||
return -ENODEV;
|
||||
|
||||
dev->base = devm_request_and_ioremap(&pdev->dev, mem);
|
||||
if (!dev->base)
|
||||
return -EBUSY;
|
||||
dev->base = devm_ioremap_resource(&pdev->dev, mem);
|
||||
if (IS_ERR(dev->base))
|
||||
return PTR_ERR(dev->base);
|
||||
|
||||
dev->irq = platform_get_irq(pdev, 0);
|
||||
if (dev->irq < 0)
|
||||
|
|
|
@ -511,9 +511,9 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
base = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!base)
|
||||
return -EBUSY;
|
||||
base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
i2c_imx = devm_kzalloc(&pdev->dev, sizeof(struct imx_i2c_struct),
|
||||
GFP_KERNEL);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
* kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -364,9 +365,9 @@ static int ocores_i2c_probe(struct platform_device *pdev)
|
|||
if (!i2c)
|
||||
return -ENOMEM;
|
||||
|
||||
i2c->base = devm_request_and_ioremap(&pdev->dev, res);
|
||||
if (!i2c->base)
|
||||
return -EADDRNOTAVAIL;
|
||||
i2c->base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(i2c->base))
|
||||
return PTR_ERR(i2c->base);
|
||||
|
||||
pdata = pdev->dev.platform_data;
|
||||
if (pdata) {
|
||||
|
|
|
@ -1103,11 +1103,9 @@ omap_i2c_probe(struct platform_device *pdev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dev->base = devm_request_and_ioremap(&pdev->dev, mem);
|
||||
if (!dev->base) {
|
||||
dev_err(&pdev->dev, "I2C region already claimed\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
dev->base = devm_ioremap_resource(&pdev->dev, mem);
|
||||
if (IS_ERR(dev->base))
|
||||
return PTR_ERR(dev->base);
|
||||
|
||||
match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev);
|
||||
if (match) {
|
||||
|
|
|
@ -642,11 +642,9 @@ static int rcar_i2c_probe(struct platform_device *pdev)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
priv->io = devm_request_and_ioremap(dev, res);
|
||||
if (!priv->io) {
|
||||
dev_err(dev, "cannot ioremap\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
priv->io = devm_ioremap_resource(dev, res);
|
||||
if (IS_ERR(priv->io))
|
||||
return PTR_ERR(priv->io);
|
||||
|
||||
priv->irq = platform_get_irq(pdev, 0);
|
||||
init_waitqueue_head(&priv->wait);
|
||||
|
|
|
@ -1042,11 +1042,10 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
|
|||
goto err_clk;
|
||||
}
|
||||
|
||||
i2c->regs = devm_request_and_ioremap(&pdev->dev, res);
|
||||
i2c->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
|
||||
if (i2c->regs == NULL) {
|
||||
dev_err(&pdev->dev, "cannot map IO\n");
|
||||
ret = -ENXIO;
|
||||
if (IS_ERR(i2c->regs)) {
|
||||
ret = PTR_ERR(i2c->regs);
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
|
|
|
@ -309,10 +309,9 @@ static int i2c_sirfsoc_probe(struct platform_device *pdev)
|
|||
goto out;
|
||||
}
|
||||
|
||||
siic->base = devm_request_and_ioremap(&pdev->dev, mem_res);
|
||||
if (siic->base == NULL) {
|
||||
dev_err(&pdev->dev, "IO remap failed!\n");
|
||||
err = -ENOMEM;
|
||||
siic->base = devm_ioremap_resource(&pdev->dev, mem_res);
|
||||
if (IS_ERR(siic->base)) {
|
||||
err = PTR_ERR(siic->base);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -888,11 +888,11 @@ stu300_probe(struct platform_device *pdev)
|
|||
if (!res)
|
||||
return -ENOENT;
|
||||
|
||||
dev->virtbase = devm_request_and_ioremap(&pdev->dev, res);
|
||||
dev->virtbase = devm_ioremap_resource(&pdev->dev, res);
|
||||
dev_dbg(&pdev->dev, "initialize bus device I2C%d on virtual "
|
||||
"base %p\n", bus_nr, dev->virtbase);
|
||||
if (!dev->virtbase)
|
||||
return -ENOMEM;
|
||||
if (IS_ERR(dev->virtbase))
|
||||
return PTR_ERR(dev->virtbase);
|
||||
|
||||
dev->irq = platform_get_irq(pdev, 0);
|
||||
ret = devm_request_irq(&pdev->dev, dev->irq, stu300_irh, 0, NAME, dev);
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче