Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
b5a20aa265
|
@ -42,14 +42,8 @@ IRQ.txt
|
||||||
- description of what an IRQ is.
|
- description of what an IRQ is.
|
||||||
ManagementStyle
|
ManagementStyle
|
||||||
- how to (attempt to) manage kernel hackers.
|
- how to (attempt to) manage kernel hackers.
|
||||||
MSI-HOWTO.txt
|
|
||||||
- the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ.
|
|
||||||
RCU/
|
RCU/
|
||||||
- directory with info on RCU (read-copy update).
|
- directory with info on RCU (read-copy update).
|
||||||
README.DAC960
|
|
||||||
- info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux.
|
|
||||||
README.cycladesZ
|
|
||||||
- info on Cyclades-Z firmware loading.
|
|
||||||
SAK.txt
|
SAK.txt
|
||||||
- info on Secure Attention Keys.
|
- info on Secure Attention Keys.
|
||||||
SM501.txt
|
SM501.txt
|
||||||
|
@ -86,20 +80,16 @@ blackfin/
|
||||||
- directory with documentation for the Blackfin arch.
|
- directory with documentation for the Blackfin arch.
|
||||||
block/
|
block/
|
||||||
- info on the Block I/O (BIO) layer.
|
- info on the Block I/O (BIO) layer.
|
||||||
|
blockdev/
|
||||||
|
- info on block devices & drivers
|
||||||
cachetlb.txt
|
cachetlb.txt
|
||||||
- describes the cache/TLB flushing interfaces Linux uses.
|
- describes the cache/TLB flushing interfaces Linux uses.
|
||||||
cciss.txt
|
|
||||||
- info, major/minor #'s for Compaq's SMART Array Controllers.
|
|
||||||
cdrom/
|
cdrom/
|
||||||
- directory with information on the CD-ROM drivers that Linux has.
|
- directory with information on the CD-ROM drivers that Linux has.
|
||||||
computone.txt
|
|
||||||
- info on Computone Intelliport II/Plus Multiport Serial Driver.
|
|
||||||
connector/
|
connector/
|
||||||
- docs on the netlink based userspace<->kernel space communication mod.
|
- docs on the netlink based userspace<->kernel space communication mod.
|
||||||
console/
|
console/
|
||||||
- documentation on Linux console drivers.
|
- documentation on Linux console drivers.
|
||||||
cpqarray.txt
|
|
||||||
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
|
|
||||||
cpu-freq/
|
cpu-freq/
|
||||||
- info on CPU frequency and voltage scaling.
|
- info on CPU frequency and voltage scaling.
|
||||||
cpu-hotplug.txt
|
cpu-hotplug.txt
|
||||||
|
@ -126,8 +116,6 @@ device-mapper/
|
||||||
- directory with info on Device Mapper.
|
- directory with info on Device Mapper.
|
||||||
devices.txt
|
devices.txt
|
||||||
- plain ASCII listing of all the nodes in /dev/ with major minor #'s.
|
- plain ASCII listing of all the nodes in /dev/ with major minor #'s.
|
||||||
digiepca.txt
|
|
||||||
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
|
|
||||||
dontdiff
|
dontdiff
|
||||||
- file containing a list of files that should never be diff'ed.
|
- file containing a list of files that should never be diff'ed.
|
||||||
driver-model/
|
driver-model/
|
||||||
|
@ -152,14 +140,10 @@ filesystems/
|
||||||
- info on the vfs and the various filesystems that Linux supports.
|
- info on the vfs and the various filesystems that Linux supports.
|
||||||
firmware_class/
|
firmware_class/
|
||||||
- request_firmware() hotplug interface info.
|
- request_firmware() hotplug interface info.
|
||||||
floppy.txt
|
|
||||||
- notes and driver options for the floppy disk driver.
|
|
||||||
frv/
|
frv/
|
||||||
- Fujitsu FR-V Linux documentation.
|
- Fujitsu FR-V Linux documentation.
|
||||||
gpio.txt
|
gpio.txt
|
||||||
- overview of GPIO (General Purpose Input/Output) access conventions.
|
- overview of GPIO (General Purpose Input/Output) access conventions.
|
||||||
hayes-esp.txt
|
|
||||||
- info on using the Hayes ESP serial driver.
|
|
||||||
highuid.txt
|
highuid.txt
|
||||||
- notes on the change from 16 bit to 32 bit user/group IDs.
|
- notes on the change from 16 bit to 32 bit user/group IDs.
|
||||||
timers/
|
timers/
|
||||||
|
@ -186,8 +170,6 @@ io_ordering.txt
|
||||||
- info on ordering I/O writes to memory-mapped addresses.
|
- info on ordering I/O writes to memory-mapped addresses.
|
||||||
ioctl/
|
ioctl/
|
||||||
- directory with documents describing various IOCTL calls.
|
- directory with documents describing various IOCTL calls.
|
||||||
ioctl-number.txt
|
|
||||||
- how to implement and register device/driver ioctl calls.
|
|
||||||
iostats.txt
|
iostats.txt
|
||||||
- info on I/O statistics Linux kernel provides.
|
- info on I/O statistics Linux kernel provides.
|
||||||
irqflags-tracing.txt
|
irqflags-tracing.txt
|
||||||
|
@ -250,14 +232,10 @@ mips/
|
||||||
- directory with info about Linux on MIPS architecture.
|
- directory with info about Linux on MIPS architecture.
|
||||||
mono.txt
|
mono.txt
|
||||||
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
|
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
|
||||||
moxa-smartio
|
|
||||||
- file with info on installing/using Moxa multiport serial driver.
|
|
||||||
mutex-design.txt
|
mutex-design.txt
|
||||||
- info on the generic mutex subsystem.
|
- info on the generic mutex subsystem.
|
||||||
namespaces/
|
namespaces/
|
||||||
- directory with various information about namespaces
|
- directory with various information about namespaces
|
||||||
nbd.txt
|
|
||||||
- info on a TCP implementation of a network block device.
|
|
||||||
netlabel/
|
netlabel/
|
||||||
- directory with information on the NetLabel subsystem.
|
- directory with information on the NetLabel subsystem.
|
||||||
networking/
|
networking/
|
||||||
|
@ -270,8 +248,6 @@ numastat.txt
|
||||||
- info on how to read Numa policy hit/miss statistics in sysfs.
|
- info on how to read Numa policy hit/miss statistics in sysfs.
|
||||||
oops-tracing.txt
|
oops-tracing.txt
|
||||||
- how to decode those nasty internal kernel error dump messages.
|
- how to decode those nasty internal kernel error dump messages.
|
||||||
paride.txt
|
|
||||||
- information about the parallel port IDE subsystem.
|
|
||||||
parisc/
|
parisc/
|
||||||
- directory with info on using Linux on PA-RISC architecture.
|
- directory with info on using Linux on PA-RISC architecture.
|
||||||
parport.txt
|
parport.txt
|
||||||
|
@ -290,20 +266,16 @@ powerpc/
|
||||||
- directory with info on using Linux with the PowerPC.
|
- directory with info on using Linux with the PowerPC.
|
||||||
preempt-locking.txt
|
preempt-locking.txt
|
||||||
- info on locking under a preemptive kernel.
|
- info on locking under a preemptive kernel.
|
||||||
|
printk-formats.txt
|
||||||
|
- how to get printk format specifiers right
|
||||||
prio_tree.txt
|
prio_tree.txt
|
||||||
- info on radix-priority-search-tree use for indexing vmas.
|
- info on radix-priority-search-tree use for indexing vmas.
|
||||||
ramdisk.txt
|
|
||||||
- short guide on how to set up and use the RAM disk.
|
|
||||||
rbtree.txt
|
rbtree.txt
|
||||||
- info on what red-black trees are and what they are for.
|
- info on what red-black trees are and what they are for.
|
||||||
riscom8.txt
|
|
||||||
- notes on using the RISCom/8 multi-port serial driver.
|
|
||||||
robust-futex-ABI.txt
|
robust-futex-ABI.txt
|
||||||
- documentation of the robust futex ABI.
|
- documentation of the robust futex ABI.
|
||||||
robust-futexes.txt
|
robust-futexes.txt
|
||||||
- a description of what robust futexes are.
|
- a description of what robust futexes are.
|
||||||
rocket.txt
|
|
||||||
- info on the Comtrol RocketPort multiport serial driver.
|
|
||||||
rt-mutex-design.txt
|
rt-mutex-design.txt
|
||||||
- description of the RealTime mutex implementation design.
|
- description of the RealTime mutex implementation design.
|
||||||
rt-mutex.txt
|
rt-mutex.txt
|
||||||
|
@ -332,8 +304,6 @@ sparc/
|
||||||
- directory with info on using Linux on Sparc architecture.
|
- directory with info on using Linux on Sparc architecture.
|
||||||
sparse.txt
|
sparse.txt
|
||||||
- info on how to obtain and use the sparse tool for typechecking.
|
- info on how to obtain and use the sparse tool for typechecking.
|
||||||
specialix.txt
|
|
||||||
- info on hardware/driver for specialix IO8+ multiport serial card.
|
|
||||||
spi/
|
spi/
|
||||||
- overview of Linux kernel Serial Peripheral Interface (SPI) support.
|
- overview of Linux kernel Serial Peripheral Interface (SPI) support.
|
||||||
spinlocks.txt
|
spinlocks.txt
|
||||||
|
@ -342,14 +312,10 @@ stable_api_nonsense.txt
|
||||||
- info on why the kernel does not have a stable in-kernel api or abi.
|
- info on why the kernel does not have a stable in-kernel api or abi.
|
||||||
stable_kernel_rules.txt
|
stable_kernel_rules.txt
|
||||||
- rules and procedures for the -stable kernel releases.
|
- rules and procedures for the -stable kernel releases.
|
||||||
stallion.txt
|
|
||||||
- info on using the Stallion multiport serial driver.
|
|
||||||
svga.txt
|
svga.txt
|
||||||
- short guide on selecting video modes at boot via VGA BIOS.
|
- short guide on selecting video modes at boot via VGA BIOS.
|
||||||
sysfs-rules.txt
|
sysfs-rules.txt
|
||||||
- How not to use sysfs.
|
- How not to use sysfs.
|
||||||
sx.txt
|
|
||||||
- info on the Specialix SX/SI multiport serial driver.
|
|
||||||
sysctl/
|
sysctl/
|
||||||
- directory with info on the /proc/sys/* files.
|
- directory with info on the /proc/sys/* files.
|
||||||
sysrq.txt
|
sysrq.txt
|
||||||
|
@ -358,8 +324,6 @@ telephony/
|
||||||
- directory with info on telephony (e.g. voice over IP) support.
|
- directory with info on telephony (e.g. voice over IP) support.
|
||||||
time_interpolators.txt
|
time_interpolators.txt
|
||||||
- info on time interpolators.
|
- info on time interpolators.
|
||||||
tty.txt
|
|
||||||
- guide to the locking policies of the tty layer.
|
|
||||||
uml/
|
uml/
|
||||||
- directory with information about User Mode Linux.
|
- directory with information about User Mode Linux.
|
||||||
unicode.txt
|
unicode.txt
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
What: /sys/class/c2port/
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/ directory will contain files and
|
||||||
|
directories that will provide a unified interface to
|
||||||
|
the C2 port interface.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/ directory is related to X-th
|
||||||
|
C2 port into the system. Each directory will contain files to
|
||||||
|
manage and control its C2 port.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/access
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/access file enable the access
|
||||||
|
to the C2 port from the system. No commands can be sent
|
||||||
|
till this entry is set to 0.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/dev_id
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/dev_id file show the device ID
|
||||||
|
of the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_access
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_access file enable the
|
||||||
|
access to the on-board flash of the connected micro.
|
||||||
|
No commands can be sent till this entry is set to 0.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_block_size
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_block_size file show
|
||||||
|
the on-board flash block size of the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_blocks_num
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_blocks_num file show
|
||||||
|
the on-board flash blocks number of the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_data
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_data file export
|
||||||
|
the content of the on-board flash of the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_erase
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_erase file execute
|
||||||
|
the "erase" command on the on-board flash of the connected
|
||||||
|
micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/flash_erase
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/flash_erase file show the
|
||||||
|
on-board flash size of the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/reset
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/reset file execute a "reset"
|
||||||
|
command on the connected micro.
|
||||||
|
|
||||||
|
What: /sys/class/c2port/c2portX/rev_id
|
||||||
|
Date: October 2008
|
||||||
|
Contact: Rodolfo Giometti <giometti@linux.it>
|
||||||
|
Description:
|
||||||
|
The /sys/class/c2port/c2portX/rev_id file show the revision ID
|
||||||
|
of the connected micro.
|
|
@ -89,7 +89,7 @@ Description:
|
||||||
|
|
||||||
error - an interrupt that can't be accounted for above.
|
error - an interrupt that can't be accounted for above.
|
||||||
|
|
||||||
invalid: it's either a wakeup GPE or a GPE/Fixed Event that
|
invalid: it's either a GPE or a Fixed Event that
|
||||||
doesn't have an event handler.
|
doesn't have an event handler.
|
||||||
|
|
||||||
disable: the GPE/Fixed Event is valid but disabled.
|
disable: the GPE/Fixed Event is valid but disabled.
|
||||||
|
@ -117,30 +117,30 @@ Description:
|
||||||
and other user space applications so that the machine won't shutdown
|
and other user space applications so that the machine won't shutdown
|
||||||
when pressing the power button.
|
when pressing the power button.
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
0
|
0 enabled
|
||||||
# press the power button for 3 times;
|
# press the power button for 3 times;
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
3
|
3 enabled
|
||||||
# echo disable > ff_pwr_btn
|
# echo disable > ff_pwr_btn
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
disable
|
3 disabled
|
||||||
# press the power button for 3 times;
|
# press the power button for 3 times;
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
disable
|
3 disabled
|
||||||
# echo enable > ff_pwr_btn
|
# echo enable > ff_pwr_btn
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
4
|
4 enabled
|
||||||
/*
|
/*
|
||||||
* this is because the status bit is set even if the enable bit is cleared,
|
* this is because the status bit is set even if the enable bit is cleared,
|
||||||
* and it triggers an ACPI fixed event when the enable bit is set again
|
* and it triggers an ACPI fixed event when the enable bit is set again
|
||||||
*/
|
*/
|
||||||
# press the power button for 3 times;
|
# press the power button for 3 times;
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
7
|
7 enabled
|
||||||
# echo disable > ff_pwr_btn
|
# echo disable > ff_pwr_btn
|
||||||
# press the power button for 3 times;
|
# press the power button for 3 times;
|
||||||
# echo clear > ff_pwr_btn /* clear the status bit */
|
# echo clear > ff_pwr_btn /* clear the status bit */
|
||||||
# echo disable > ff_pwr_btn
|
# echo disable > ff_pwr_btn
|
||||||
# cat ff_pwr_btn
|
# cat ff_pwr_btn
|
||||||
7
|
7 enabled
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
00-INDEX
|
00-INDEX
|
||||||
- this file
|
- this file
|
||||||
|
MSI-HOWTO.txt
|
||||||
|
- the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ.
|
||||||
PCI-DMA-mapping.txt
|
PCI-DMA-mapping.txt
|
||||||
- info for PCI drivers using DMA portably across all platforms
|
- info for PCI drivers using DMA portably across all platforms
|
||||||
PCIEBUS-HOWTO.txt
|
PCIEBUS-HOWTO.txt
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
ACPI Debug Output
|
||||||
|
|
||||||
|
|
||||||
|
The ACPI CA, the Linux ACPI core, and some ACPI drivers can generate debug
|
||||||
|
output. This document describes how to use this facility.
|
||||||
|
|
||||||
|
Compile-time configuration
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
ACPI debug output is globally enabled by CONFIG_ACPI_DEBUG. If this config
|
||||||
|
option is turned off, the debug messages are not even built into the
|
||||||
|
kernel.
|
||||||
|
|
||||||
|
Boot- and run-time configuration
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
When CONFIG_ACPI_DEBUG=y, you can select the component and level of messages
|
||||||
|
you're interested in. At boot-time, use the acpi.debug_layer and
|
||||||
|
acpi.debug_level kernel command line options. After boot, you can use the
|
||||||
|
debug_layer and debug_level files in /sys/module/acpi/parameters/ to control
|
||||||
|
the debug messages.
|
||||||
|
|
||||||
|
debug_layer (component)
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
The "debug_layer" is a mask that selects components of interest, e.g., a
|
||||||
|
specific driver or part of the ACPI interpreter. To build the debug_layer
|
||||||
|
bitmask, look for the "#define _COMPONENT" in an ACPI source file.
|
||||||
|
|
||||||
|
You can set the debug_layer mask at boot-time using the acpi.debug_layer
|
||||||
|
command line argument, and you can change it after boot by writing values
|
||||||
|
to /sys/module/acpi/parameters/debug_layer.
|
||||||
|
|
||||||
|
The possible components are defined in include/acpi/acoutput.h and
|
||||||
|
include/acpi/acpi_drivers.h. Reading /sys/module/acpi/parameters/debug_layer
|
||||||
|
shows the supported mask values, currently these:
|
||||||
|
|
||||||
|
ACPI_UTILITIES 0x00000001
|
||||||
|
ACPI_HARDWARE 0x00000002
|
||||||
|
ACPI_EVENTS 0x00000004
|
||||||
|
ACPI_TABLES 0x00000008
|
||||||
|
ACPI_NAMESPACE 0x00000010
|
||||||
|
ACPI_PARSER 0x00000020
|
||||||
|
ACPI_DISPATCHER 0x00000040
|
||||||
|
ACPI_EXECUTER 0x00000080
|
||||||
|
ACPI_RESOURCES 0x00000100
|
||||||
|
ACPI_CA_DEBUGGER 0x00000200
|
||||||
|
ACPI_OS_SERVICES 0x00000400
|
||||||
|
ACPI_CA_DISASSEMBLER 0x00000800
|
||||||
|
ACPI_COMPILER 0x00001000
|
||||||
|
ACPI_TOOLS 0x00002000
|
||||||
|
ACPI_BUS_COMPONENT 0x00010000
|
||||||
|
ACPI_AC_COMPONENT 0x00020000
|
||||||
|
ACPI_BATTERY_COMPONENT 0x00040000
|
||||||
|
ACPI_BUTTON_COMPONENT 0x00080000
|
||||||
|
ACPI_SBS_COMPONENT 0x00100000
|
||||||
|
ACPI_FAN_COMPONENT 0x00200000
|
||||||
|
ACPI_PCI_COMPONENT 0x00400000
|
||||||
|
ACPI_POWER_COMPONENT 0x00800000
|
||||||
|
ACPI_CONTAINER_COMPONENT 0x01000000
|
||||||
|
ACPI_SYSTEM_COMPONENT 0x02000000
|
||||||
|
ACPI_THERMAL_COMPONENT 0x04000000
|
||||||
|
ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
||||||
|
ACPI_VIDEO_COMPONENT 0x10000000
|
||||||
|
ACPI_PROCESSOR_COMPONENT 0x20000000
|
||||||
|
|
||||||
|
debug_level
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The "debug_level" is a mask that selects different types of messages, e.g.,
|
||||||
|
those related to initialization, method execution, informational messages, etc.
|
||||||
|
To build debug_level, look at the level specified in an ACPI_DEBUG_PRINT()
|
||||||
|
statement.
|
||||||
|
|
||||||
|
The ACPI interpreter uses several different levels, but the Linux
|
||||||
|
ACPI core and ACPI drivers generally only use ACPI_LV_INFO.
|
||||||
|
|
||||||
|
You can set the debug_level mask at boot-time using the acpi.debug_level
|
||||||
|
command line argument, and you can change it after boot by writing values
|
||||||
|
to /sys/module/acpi/parameters/debug_level.
|
||||||
|
|
||||||
|
The possible levels are defined in include/acpi/acoutput.h. Reading
|
||||||
|
/sys/module/acpi/parameters/debug_level shows the supported mask values,
|
||||||
|
currently these:
|
||||||
|
|
||||||
|
ACPI_LV_INIT 0x00000001
|
||||||
|
ACPI_LV_DEBUG_OBJECT 0x00000002
|
||||||
|
ACPI_LV_INFO 0x00000004
|
||||||
|
ACPI_LV_INIT_NAMES 0x00000020
|
||||||
|
ACPI_LV_PARSE 0x00000040
|
||||||
|
ACPI_LV_LOAD 0x00000080
|
||||||
|
ACPI_LV_DISPATCH 0x00000100
|
||||||
|
ACPI_LV_EXEC 0x00000200
|
||||||
|
ACPI_LV_NAMES 0x00000400
|
||||||
|
ACPI_LV_OPREGION 0x00000800
|
||||||
|
ACPI_LV_BFIELD 0x00001000
|
||||||
|
ACPI_LV_TABLES 0x00002000
|
||||||
|
ACPI_LV_VALUES 0x00004000
|
||||||
|
ACPI_LV_OBJECTS 0x00008000
|
||||||
|
ACPI_LV_RESOURCES 0x00010000
|
||||||
|
ACPI_LV_USER_REQUESTS 0x00020000
|
||||||
|
ACPI_LV_PACKAGE 0x00040000
|
||||||
|
ACPI_LV_ALLOCATIONS 0x00100000
|
||||||
|
ACPI_LV_FUNCTIONS 0x00200000
|
||||||
|
ACPI_LV_OPTIMIZATIONS 0x00400000
|
||||||
|
ACPI_LV_MUTEX 0x01000000
|
||||||
|
ACPI_LV_THREADS 0x02000000
|
||||||
|
ACPI_LV_IO 0x04000000
|
||||||
|
ACPI_LV_INTERRUPTS 0x08000000
|
||||||
|
ACPI_LV_AML_DISASSEMBLE 0x10000000
|
||||||
|
ACPI_LV_VERBOSE_INFO 0x20000000
|
||||||
|
ACPI_LV_FULL_TABLES 0x40000000
|
||||||
|
ACPI_LV_EVENTS 0x80000000
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
For example, drivers/acpi/bus.c contains this:
|
||||||
|
|
||||||
|
#define _COMPONENT ACPI_BUS_COMPONENT
|
||||||
|
...
|
||||||
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device insertion detected\n"));
|
||||||
|
|
||||||
|
To turn on this message, set the ACPI_BUS_COMPONENT bit in acpi.debug_layer
|
||||||
|
and the ACPI_LV_INFO bit in acpi.debug_level. (The ACPI_DEBUG_PRINT
|
||||||
|
statement uses ACPI_DB_INFO, which is macro based on the ACPI_LV_INFO
|
||||||
|
definition.)
|
||||||
|
|
||||||
|
Enable all AML "Debug" output (stores to the Debug object while interpreting
|
||||||
|
AML) during boot:
|
||||||
|
|
||||||
|
acpi.debug_layer=0xffffffff acpi.debug_level=0x2
|
||||||
|
|
||||||
|
Enable PCI and PCI interrupt routing debug messages:
|
||||||
|
|
||||||
|
acpi.debug_layer=0x400000 acpi.debug_level=0x4
|
||||||
|
|
||||||
|
Enable all ACPI hardware-related messages:
|
||||||
|
|
||||||
|
acpi.debug_layer=0x2 acpi.debug_level=0xffffffff
|
||||||
|
|
||||||
|
Enable all ACPI_DB_INFO messages after boot:
|
||||||
|
|
||||||
|
# echo 0x4 > /sys/module/acpi/parameters/debug_level
|
||||||
|
|
||||||
|
Show all valid component values:
|
||||||
|
|
||||||
|
# cat /sys/module/acpi/parameters/debug_layer
|
|
@ -0,0 +1,16 @@
|
||||||
|
00-INDEX
|
||||||
|
- this file
|
||||||
|
README.DAC960
|
||||||
|
- info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux.
|
||||||
|
cciss.txt
|
||||||
|
- info, major/minor #'s for Compaq's SMART Array Controllers.
|
||||||
|
cpqarray.txt
|
||||||
|
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
|
||||||
|
floppy.txt
|
||||||
|
- notes and driver options for the floppy disk driver.
|
||||||
|
nbd.txt
|
||||||
|
- info on a TCP implementation of a network block device.
|
||||||
|
paride.txt
|
||||||
|
- information about the parallel port IDE subsystem.
|
||||||
|
ramdisk.txt
|
||||||
|
- short guide on how to set up and use the RAM disk.
|
|
@ -21,11 +21,14 @@ This driver is known to work with the following cards:
|
||||||
* SA E200
|
* SA E200
|
||||||
* SA E200i
|
* SA E200i
|
||||||
* SA E500
|
* SA E500
|
||||||
|
* SA P700m
|
||||||
* SA P212
|
* SA P212
|
||||||
* SA P410
|
* SA P410
|
||||||
* SA P410i
|
* SA P410i
|
||||||
* SA P411
|
* SA P411
|
||||||
* SA P812
|
* SA P812
|
||||||
|
* SA P712m
|
||||||
|
* SA P711m
|
||||||
|
|
||||||
Detecting drive failures:
|
Detecting drive failures:
|
||||||
-------------------------
|
-------------------------
|
|
@ -0,0 +1,90 @@
|
||||||
|
C2 port support
|
||||||
|
---------------
|
||||||
|
|
||||||
|
(C) Copyright 2007 Rodolfo Giometti <giometti@enneenne.com>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
This driver implements the support for Linux of Silicon Labs (Silabs)
|
||||||
|
C2 Interface used for in-system programming of micro controllers.
|
||||||
|
|
||||||
|
By using this driver you can reprogram the in-system flash without EC2
|
||||||
|
or EC3 debug adapter. This solution is also useful in those systems
|
||||||
|
where the micro controller is connected via special GPIOs pins.
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
|
||||||
|
The C2 Interface main references are at (http://www.silabs.com)
|
||||||
|
Silicon Laboratories site], see:
|
||||||
|
|
||||||
|
- AN127: FLASH Programming via the C2 Interface at
|
||||||
|
http://www.silabs.com/public/documents/tpub_doc/anote/Microcontrollers/Small_Form_Factor/en/an127.pdf, and
|
||||||
|
|
||||||
|
- C2 Specification at
|
||||||
|
http://www.silabs.com/public/documents/tpub_doc/spec/Microcontrollers/en/C2spec.pdf,
|
||||||
|
|
||||||
|
however it implements a two wire serial communication protocol (bit
|
||||||
|
banging) designed to enable in-system programming, debugging, and
|
||||||
|
boundary-scan testing on low pin-count Silicon Labs devices. Currently
|
||||||
|
this code supports only flash programming but extensions are easy to
|
||||||
|
add.
|
||||||
|
|
||||||
|
Using the driver
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Once the driver is loaded you can use sysfs support to get C2port's
|
||||||
|
info or read/write in-system flash.
|
||||||
|
|
||||||
|
# ls /sys/class/c2port/c2port0/
|
||||||
|
access flash_block_size flash_erase rev_id
|
||||||
|
dev_id flash_blocks_num flash_size subsystem/
|
||||||
|
flash_access flash_data reset uevent
|
||||||
|
|
||||||
|
Initially the C2port access is disabled since you hardware may have
|
||||||
|
such lines multiplexed with other devices so, to get access to the
|
||||||
|
C2port, you need the command:
|
||||||
|
|
||||||
|
# echo 1 > /sys/class/c2port/c2port0/access
|
||||||
|
|
||||||
|
after that you should read the device ID and revision ID of the
|
||||||
|
connected micro controller:
|
||||||
|
|
||||||
|
# cat /sys/class/c2port/c2port0/dev_id
|
||||||
|
8
|
||||||
|
# cat /sys/class/c2port/c2port0/rev_id
|
||||||
|
1
|
||||||
|
|
||||||
|
However, for security reasons, the in-system flash access in not
|
||||||
|
enabled yet, to do so you need the command:
|
||||||
|
|
||||||
|
# echo 1 > /sys/class/c2port/c2port0/flash_access
|
||||||
|
|
||||||
|
After that you can read the whole flash:
|
||||||
|
|
||||||
|
# cat /sys/class/c2port/c2port0/flash_data > image
|
||||||
|
|
||||||
|
erase it:
|
||||||
|
|
||||||
|
# echo 1 > /sys/class/c2port/c2port0/flash_erase
|
||||||
|
|
||||||
|
and write it:
|
||||||
|
|
||||||
|
# cat image > /sys/class/c2port/c2port0/flash_data
|
||||||
|
|
||||||
|
after writing you have to reset the device to execute the new code:
|
||||||
|
|
||||||
|
# echo 1 > /sys/class/c2port/c2port0/reset
|
|
@ -1,4 +1,4 @@
|
||||||
The cgroup freezer is useful to batch job management system which start
|
The cgroup freezer is useful to batch job management system which start
|
||||||
and stop sets of tasks in order to schedule the resources of a machine
|
and stop sets of tasks in order to schedule the resources of a machine
|
||||||
according to the desires of a system administrator. This sort of program
|
according to the desires of a system administrator. This sort of program
|
||||||
is often used on HPC clusters to schedule access to the cluster as a
|
is often used on HPC clusters to schedule access to the cluster as a
|
||||||
|
@ -6,7 +6,7 @@ whole. The cgroup freezer uses cgroups to describe the set of tasks to
|
||||||
be started/stopped by the batch job management system. It also provides
|
be started/stopped by the batch job management system. It also provides
|
||||||
a means to start and stop the tasks composing the job.
|
a means to start and stop the tasks composing the job.
|
||||||
|
|
||||||
The cgroup freezer will also be useful for checkpointing running groups
|
The cgroup freezer will also be useful for checkpointing running groups
|
||||||
of tasks. The freezer allows the checkpoint code to obtain a consistent
|
of tasks. The freezer allows the checkpoint code to obtain a consistent
|
||||||
image of the tasks by attempting to force the tasks in a cgroup into a
|
image of the tasks by attempting to force the tasks in a cgroup into a
|
||||||
quiescent state. Once the tasks are quiescent another task can
|
quiescent state. Once the tasks are quiescent another task can
|
||||||
|
@ -16,7 +16,7 @@ recoverable error occur. This also allows the checkpointed tasks to be
|
||||||
migrated between nodes in a cluster by copying the gathered information
|
migrated between nodes in a cluster by copying the gathered information
|
||||||
to another node and restarting the tasks there.
|
to another node and restarting the tasks there.
|
||||||
|
|
||||||
Sequences of SIGSTOP and SIGCONT are not always sufficient for stopping
|
Sequences of SIGSTOP and SIGCONT are not always sufficient for stopping
|
||||||
and resuming tasks in userspace. Both of these signals are observable
|
and resuming tasks in userspace. Both of these signals are observable
|
||||||
from within the tasks we wish to freeze. While SIGSTOP cannot be caught,
|
from within the tasks we wish to freeze. While SIGSTOP cannot be caught,
|
||||||
blocked, or ignored it can be seen by waiting or ptracing parent tasks.
|
blocked, or ignored it can be seen by waiting or ptracing parent tasks.
|
||||||
|
@ -37,26 +37,29 @@ demonstrate this problem using nested bash shells:
|
||||||
|
|
||||||
<at this point 16990 exits and causes 16644 to exit too>
|
<at this point 16990 exits and causes 16644 to exit too>
|
||||||
|
|
||||||
This happens because bash can observe both signals and choose how it
|
This happens because bash can observe both signals and choose how it
|
||||||
responds to them.
|
responds to them.
|
||||||
|
|
||||||
Another example of a program which catches and responds to these
|
Another example of a program which catches and responds to these
|
||||||
signals is gdb. In fact any program designed to use ptrace is likely to
|
signals is gdb. In fact any program designed to use ptrace is likely to
|
||||||
have a problem with this method of stopping and resuming tasks.
|
have a problem with this method of stopping and resuming tasks.
|
||||||
|
|
||||||
In contrast, the cgroup freezer uses the kernel freezer code to
|
In contrast, the cgroup freezer uses the kernel freezer code to
|
||||||
prevent the freeze/unfreeze cycle from becoming visible to the tasks
|
prevent the freeze/unfreeze cycle from becoming visible to the tasks
|
||||||
being frozen. This allows the bash example above and gdb to run as
|
being frozen. This allows the bash example above and gdb to run as
|
||||||
expected.
|
expected.
|
||||||
|
|
||||||
The freezer subsystem in the container filesystem defines a file named
|
The freezer subsystem in the container filesystem defines a file named
|
||||||
freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the
|
freezer.state. Writing "FROZEN" to the state file will freeze all tasks in the
|
||||||
cgroup. Subsequently writing "THAWED" will unfreeze the tasks in the cgroup.
|
cgroup. Subsequently writing "THAWED" will unfreeze the tasks in the cgroup.
|
||||||
Reading will return the current state.
|
Reading will return the current state.
|
||||||
|
|
||||||
|
Note freezer.state doesn't exist in root cgroup, which means root cgroup
|
||||||
|
is non-freezable.
|
||||||
|
|
||||||
* Examples of usage :
|
* Examples of usage :
|
||||||
|
|
||||||
# mkdir /containers/freezer
|
# mkdir /containers
|
||||||
# mount -t cgroup -ofreezer freezer /containers
|
# mount -t cgroup -ofreezer freezer /containers
|
||||||
# mkdir /containers/0
|
# mkdir /containers/0
|
||||||
# echo $some_pid > /containers/0/tasks
|
# echo $some_pid > /containers/0/tasks
|
||||||
|
@ -94,6 +97,6 @@ things happens:
|
||||||
the freezer.state file
|
the freezer.state file
|
||||||
2) Userspace retries the freezing operation by writing "FROZEN" to
|
2) Userspace retries the freezing operation by writing "FROZEN" to
|
||||||
the freezer.state file (writing "FREEZING" is not legal
|
the freezer.state file (writing "FREEZING" is not legal
|
||||||
and returns EIO)
|
and returns EINVAL)
|
||||||
3) The tasks that blocked the cgroup from entering the "FROZEN"
|
3) The tasks that blocked the cgroup from entering the "FROZEN"
|
||||||
state disappear from the cgroup's set of tasks.
|
state disappear from the cgroup's set of tasks.
|
||||||
|
|
|
@ -213,4 +213,29 @@ TkRat (GUI)
|
||||||
|
|
||||||
Works. Use "Insert file..." or external editor.
|
Works. Use "Insert file..." or external editor.
|
||||||
|
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
Gmail (Web GUI)
|
||||||
|
|
||||||
|
If you just have to use Gmail to send patches, it CAN be made to work. It
|
||||||
|
requires a bit of external help, though.
|
||||||
|
|
||||||
|
The first problem is that Gmail converts tabs to spaces. This will
|
||||||
|
totally break your patches. To prevent this, you have to use a different
|
||||||
|
editor. There is a firefox extension called "ViewSourceWith"
|
||||||
|
(https://addons.mozilla.org/en-US/firefox/addon/394) which allows you to
|
||||||
|
edit any text box in the editor of your choice. Configure it to launch
|
||||||
|
your favorite editor. When you want to send a patch, use this technique.
|
||||||
|
Once you have crafted your messsage + patch, save and exit the editor,
|
||||||
|
which should reload the Gmail edit box. GMAIL WILL PRESERVE THE TABS.
|
||||||
|
Hoorah. Apparently you can cut-n-paste literal tabs, but Gmail will
|
||||||
|
convert those to spaces upon sending!
|
||||||
|
|
||||||
|
The second problem is that Gmail converts tabs to spaces on replies. If
|
||||||
|
you reply to a patch, don't expect to be able to apply it as a patch.
|
||||||
|
|
||||||
|
The last problem is that Gmail will base64-encode any message that has a
|
||||||
|
non-ASCII character. That includes things like European names. Be aware.
|
||||||
|
|
||||||
|
Gmail is not convenient for lkml patches, but CAN be made to work.
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
|
@ -56,30 +56,6 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: old tuner-3036 i2c driver
|
|
||||||
When: 2.6.28
|
|
||||||
Why: This driver is for VERY old i2c-over-parallel port teletext receiver
|
|
||||||
boxes. Rather then spending effort on converting this driver to V4L2,
|
|
||||||
and since it is extremely unlikely that anyone still uses one of these
|
|
||||||
devices, it was decided to drop it.
|
|
||||||
Who: Hans Verkuil <hverkuil@xs4all.nl>
|
|
||||||
Mauro Carvalho Chehab <mchehab@infradead.org>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: V4L2 dpc7146 driver
|
|
||||||
When: 2.6.28
|
|
||||||
Why: Old driver for the dpc7146 demonstration board that is no longer
|
|
||||||
relevant. The last time this was tested on actual hardware was
|
|
||||||
probably around 2002. Since this is a driver for a demonstration
|
|
||||||
board the decision was made to remove it rather than spending a
|
|
||||||
lot of effort continually updating this driver to stay in sync
|
|
||||||
with the latest internal V4L2 or I2C API.
|
|
||||||
Who: Hans Verkuil <hverkuil@xs4all.nl>
|
|
||||||
Mauro Carvalho Chehab <mchehab@infradead.org>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||||
When: November 2005
|
When: November 2005
|
||||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||||
|
|
|
@ -8,6 +8,12 @@ if you want to format from within Linux.
|
||||||
|
|
||||||
VFAT MOUNT OPTIONS
|
VFAT MOUNT OPTIONS
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
uid=### -- Set the owner of all files on this filesystem.
|
||||||
|
The default is the uid of current process.
|
||||||
|
|
||||||
|
gid=### -- Set the group of all files on this filesystem.
|
||||||
|
The default is the gid of current process.
|
||||||
|
|
||||||
umask=### -- The permission mask (for files and directories, see umask(1)).
|
umask=### -- The permission mask (for files and directories, see umask(1)).
|
||||||
The default is the umask of current process.
|
The default is the umask of current process.
|
||||||
|
|
||||||
|
@ -36,7 +42,7 @@ codepage=### -- Sets the codepage number for converting to shortname
|
||||||
characters on FAT filesystem.
|
characters on FAT filesystem.
|
||||||
By default, FAT_DEFAULT_CODEPAGE setting is used.
|
By default, FAT_DEFAULT_CODEPAGE setting is used.
|
||||||
|
|
||||||
iocharset=name -- Character set to use for converting between the
|
iocharset=<name> -- Character set to use for converting between the
|
||||||
encoding is used for user visible filename and 16 bit
|
encoding is used for user visible filename and 16 bit
|
||||||
Unicode characters. Long filenames are stored on disk
|
Unicode characters. Long filenames are stored on disk
|
||||||
in Unicode format, but Unix for the most part doesn't
|
in Unicode format, but Unix for the most part doesn't
|
||||||
|
@ -86,6 +92,8 @@ check=s|r|n -- Case sensitivity checking setting.
|
||||||
r: relaxed, case insensitive
|
r: relaxed, case insensitive
|
||||||
n: normal, default setting, currently case insensitive
|
n: normal, default setting, currently case insensitive
|
||||||
|
|
||||||
|
nocase -- This was deprecated for vfat. Use shortname=win95 instead.
|
||||||
|
|
||||||
shortname=lower|win95|winnt|mixed
|
shortname=lower|win95|winnt|mixed
|
||||||
-- Shortname display/create setting.
|
-- Shortname display/create setting.
|
||||||
lower: convert to lowercase for display,
|
lower: convert to lowercase for display,
|
||||||
|
@ -99,11 +107,31 @@ shortname=lower|win95|winnt|mixed
|
||||||
tz=UTC -- Interpret timestamps as UTC rather than local time.
|
tz=UTC -- Interpret timestamps as UTC rather than local time.
|
||||||
This option disables the conversion of timestamps
|
This option disables the conversion of timestamps
|
||||||
between local time (as used by Windows on FAT) and UTC
|
between local time (as used by Windows on FAT) and UTC
|
||||||
(which Linux uses internally). This is particuluarly
|
(which Linux uses internally). This is particularly
|
||||||
useful when mounting devices (like digital cameras)
|
useful when mounting devices (like digital cameras)
|
||||||
that are set to UTC in order to avoid the pitfalls of
|
that are set to UTC in order to avoid the pitfalls of
|
||||||
local time.
|
local time.
|
||||||
|
|
||||||
|
showexec -- If set, the execute permission bits of the file will be
|
||||||
|
allowed only if the extension part of the name is .EXE,
|
||||||
|
.COM, or .BAT. Not set by default.
|
||||||
|
|
||||||
|
debug -- Can be set, but unused by the current implementation.
|
||||||
|
|
||||||
|
sys_immutable -- If set, ATTR_SYS attribute on FAT is handled as
|
||||||
|
IMMUTABLE flag on Linux. Not set by default.
|
||||||
|
|
||||||
|
flush -- If set, the filesystem will try to flush to disk more
|
||||||
|
early than normal. Not set by default.
|
||||||
|
|
||||||
|
rodir -- FAT has the ATTR_RO (read-only) attribute. But on Windows,
|
||||||
|
the ATTR_RO of the directory will be just ignored actually,
|
||||||
|
and is used by only applications as flag. E.g. it's setted
|
||||||
|
for the customized folder.
|
||||||
|
|
||||||
|
If you want to use ATTR_RO as read-only flag even for
|
||||||
|
the directory, set this option.
|
||||||
|
|
||||||
<bool>: 0,1,yes,no,true,false
|
<bool>: 0,1,yes,no,true,false
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
|
@ -39,10 +39,11 @@ The block device operation is optional, these block devices support it as of
|
||||||
today:
|
today:
|
||||||
- dcssblk: s390 dcss block device driver
|
- dcssblk: s390 dcss block device driver
|
||||||
|
|
||||||
An address space operation named get_xip_page is used to retrieve reference
|
An address space operation named get_xip_mem is used to retrieve references
|
||||||
to a struct page. To address the target page, a reference to an address_space,
|
to a page frame number and a kernel address. To obtain these values a reference
|
||||||
and a sector number is provided. A 3rd argument indicates whether the
|
to an address_space is provided. This function assigns values to the kmem and
|
||||||
function should allocate blocks if needed.
|
pfn parameters. The third argument indicates whether the function should allocate
|
||||||
|
blocks if needed.
|
||||||
|
|
||||||
This address space operation is mutually exclusive with readpage&writepage that
|
This address space operation is mutually exclusive with readpage&writepage that
|
||||||
do page cache read/write operations.
|
do page cache read/write operations.
|
||||||
|
|
|
@ -8,7 +8,7 @@ Copyright 2008 Red Hat Inc.
|
||||||
Reviewers: Elias Oltmanns, Randy Dunlap, Andrew Morton,
|
Reviewers: Elias Oltmanns, Randy Dunlap, Andrew Morton,
|
||||||
John Kacur, and David Teigland.
|
John Kacur, and David Teigland.
|
||||||
|
|
||||||
Written for: 2.6.27-rc1
|
Written for: 2.6.28-rc2
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
@ -50,26 +50,26 @@ of ftrace. Here is a list of some of the key files:
|
||||||
|
|
||||||
Note: all time values are in microseconds.
|
Note: all time values are in microseconds.
|
||||||
|
|
||||||
current_tracer : This is used to set or display the current tracer
|
current_tracer: This is used to set or display the current tracer
|
||||||
that is configured.
|
that is configured.
|
||||||
|
|
||||||
available_tracers : This holds the different types of tracers that
|
available_tracers: This holds the different types of tracers that
|
||||||
have been compiled into the kernel. The tracers
|
have been compiled into the kernel. The tracers
|
||||||
listed here can be configured by echoing their name
|
listed here can be configured by echoing their name
|
||||||
into current_tracer.
|
into current_tracer.
|
||||||
|
|
||||||
tracing_enabled : This sets or displays whether the current_tracer
|
tracing_enabled: This sets or displays whether the current_tracer
|
||||||
is activated and tracing or not. Echo 0 into this
|
is activated and tracing or not. Echo 0 into this
|
||||||
file to disable the tracer or 1 to enable it.
|
file to disable the tracer or 1 to enable it.
|
||||||
|
|
||||||
trace : This file holds the output of the trace in a human readable
|
trace: This file holds the output of the trace in a human readable
|
||||||
format (described below).
|
format (described below).
|
||||||
|
|
||||||
latency_trace : This file shows the same trace but the information
|
latency_trace: This file shows the same trace but the information
|
||||||
is organized more to display possible latencies
|
is organized more to display possible latencies
|
||||||
in the system (described below).
|
in the system (described below).
|
||||||
|
|
||||||
trace_pipe : The output is the same as the "trace" file but this
|
trace_pipe: The output is the same as the "trace" file but this
|
||||||
file is meant to be streamed with live tracing.
|
file is meant to be streamed with live tracing.
|
||||||
Reads from this file will block until new data
|
Reads from this file will block until new data
|
||||||
is retrieved. Unlike the "trace" and "latency_trace"
|
is retrieved. Unlike the "trace" and "latency_trace"
|
||||||
|
@ -82,11 +82,11 @@ of ftrace. Here is a list of some of the key files:
|
||||||
tracer is not adding more data, they will display
|
tracer is not adding more data, they will display
|
||||||
the same information every time they are read.
|
the same information every time they are read.
|
||||||
|
|
||||||
iter_ctrl : This file lets the user control the amount of data
|
iter_ctrl: This file lets the user control the amount of data
|
||||||
that is displayed in one of the above output
|
that is displayed in one of the above output
|
||||||
files.
|
files.
|
||||||
|
|
||||||
trace_max_latency : Some of the tracers record the max latency.
|
trace_max_latency: Some of the tracers record the max latency.
|
||||||
For example, the time interrupts are disabled.
|
For example, the time interrupts are disabled.
|
||||||
This time is saved in this file. The max trace
|
This time is saved in this file. The max trace
|
||||||
will also be stored, and displayed by either
|
will also be stored, and displayed by either
|
||||||
|
@ -94,29 +94,26 @@ of ftrace. Here is a list of some of the key files:
|
||||||
only be recorded if the latency is greater than
|
only be recorded if the latency is greater than
|
||||||
the value in this file. (in microseconds)
|
the value in this file. (in microseconds)
|
||||||
|
|
||||||
trace_entries : This sets or displays the number of trace
|
trace_entries: This sets or displays the number of bytes each CPU
|
||||||
entries each CPU buffer can hold. The tracer buffers
|
buffer can hold. The tracer buffers are the same size
|
||||||
are the same size for each CPU. The displayed number
|
for each CPU. The displayed number is the size of the
|
||||||
is the size of the CPU buffer and not total size. The
|
CPU buffer and not total size of all buffers. The
|
||||||
trace buffers are allocated in pages (blocks of memory
|
trace buffers are allocated in pages (blocks of memory
|
||||||
that the kernel uses for allocation, usually 4 KB in size).
|
that the kernel uses for allocation, usually 4 KB in size).
|
||||||
Since each entry is smaller than a page, if the last
|
If the last page allocated has room for more bytes
|
||||||
allocated page has room for more entries than were
|
than requested, the rest of the page will be used,
|
||||||
requested, the rest of the page is used to allocate
|
making the actual allocation bigger than requested.
|
||||||
entries.
|
(Note, the size may not be a multiple of the page size due
|
||||||
|
to buffer managment overhead.)
|
||||||
|
|
||||||
This can only be updated when the current_tracer
|
This can only be updated when the current_tracer
|
||||||
is set to "none".
|
is set to "nop".
|
||||||
|
|
||||||
NOTE: It is planned on changing the allocated buffers
|
tracing_cpumask: This is a mask that lets the user only trace
|
||||||
from being the number of possible CPUS to
|
|
||||||
the number of online CPUS.
|
|
||||||
|
|
||||||
tracing_cpumask : This is a mask that lets the user only trace
|
|
||||||
on specified CPUS. The format is a hex string
|
on specified CPUS. The format is a hex string
|
||||||
representing the CPUS.
|
representing the CPUS.
|
||||||
|
|
||||||
set_ftrace_filter : When dynamic ftrace is configured in (see the
|
set_ftrace_filter: When dynamic ftrace is configured in (see the
|
||||||
section below "dynamic ftrace"), the code is dynamically
|
section below "dynamic ftrace"), the code is dynamically
|
||||||
modified (code text rewrite) to disable calling of the
|
modified (code text rewrite) to disable calling of the
|
||||||
function profiler (mcount). This lets tracing be configured
|
function profiler (mcount). This lets tracing be configured
|
||||||
|
@ -130,14 +127,11 @@ of ftrace. Here is a list of some of the key files:
|
||||||
be traced. If a function exists in both set_ftrace_filter
|
be traced. If a function exists in both set_ftrace_filter
|
||||||
and set_ftrace_notrace, the function will _not_ be traced.
|
and set_ftrace_notrace, the function will _not_ be traced.
|
||||||
|
|
||||||
available_filter_functions : When a function is encountered the first
|
available_filter_functions: This lists the functions that ftrace
|
||||||
time by the dynamic tracer, it is recorded and
|
has processed and can trace. These are the function
|
||||||
later the call is converted into a nop. This file
|
names that you can pass to "set_ftrace_filter" or
|
||||||
lists the functions that have been recorded
|
"set_ftrace_notrace". (See the section "dynamic ftrace"
|
||||||
by the dynamic tracer and these functions can
|
below for more details.)
|
||||||
be used to set the ftrace filter by the above
|
|
||||||
"set_ftrace_filter" file. (See the section "dynamic ftrace"
|
|
||||||
below for more details).
|
|
||||||
|
|
||||||
|
|
||||||
The Tracers
|
The Tracers
|
||||||
|
@ -145,7 +139,7 @@ The Tracers
|
||||||
|
|
||||||
Here is the list of current tracers that may be configured.
|
Here is the list of current tracers that may be configured.
|
||||||
|
|
||||||
ftrace - function tracer that uses mcount to trace all functions.
|
function - function tracer that uses mcount to trace all functions.
|
||||||
|
|
||||||
sched_switch - traces the context switches between tasks.
|
sched_switch - traces the context switches between tasks.
|
||||||
|
|
||||||
|
@ -166,8 +160,8 @@ Here is the list of current tracers that may be configured.
|
||||||
the highest priority task to get scheduled after
|
the highest priority task to get scheduled after
|
||||||
it has been woken up.
|
it has been woken up.
|
||||||
|
|
||||||
none - This is not a tracer. To remove all tracers from tracing
|
nop - This is not a tracer. To remove all tracers from tracing
|
||||||
simply echo "none" into current_tracer.
|
simply echo "nop" into current_tracer.
|
||||||
|
|
||||||
|
|
||||||
Examples of using the tracer
|
Examples of using the tracer
|
||||||
|
@ -182,7 +176,7 @@ Output format:
|
||||||
Here is an example of the output format of the file "trace"
|
Here is an example of the output format of the file "trace"
|
||||||
|
|
||||||
--------
|
--------
|
||||||
# tracer: ftrace
|
# tracer: function
|
||||||
#
|
#
|
||||||
# TASK-PID CPU# TIMESTAMP FUNCTION
|
# TASK-PID CPU# TIMESTAMP FUNCTION
|
||||||
# | | | | |
|
# | | | | |
|
||||||
|
@ -192,7 +186,7 @@ Here is an example of the output format of the file "trace"
|
||||||
--------
|
--------
|
||||||
|
|
||||||
A header is printed with the tracer name that is represented by the trace.
|
A header is printed with the tracer name that is represented by the trace.
|
||||||
In this case the tracer is "ftrace". Then a header showing the format. Task
|
In this case the tracer is "function". Then a header showing the format. Task
|
||||||
name "bash", the task PID "4251", the CPU that it was running on
|
name "bash", the task PID "4251", the CPU that it was running on
|
||||||
"01", the timestamp in <secs>.<usecs> format, the function name that was
|
"01", the timestamp in <secs>.<usecs> format, the function name that was
|
||||||
traced "path_put" and the parent function that called this function
|
traced "path_put" and the parent function that called this function
|
||||||
|
@ -1003,22 +997,20 @@ is the stack for the hard interrupt. This hides the fact that NEED_RESCHED
|
||||||
has been set. We do not see the 'N' until we switch back to the task's
|
has been set. We do not see the 'N' until we switch back to the task's
|
||||||
assigned stack.
|
assigned stack.
|
||||||
|
|
||||||
ftrace
|
function
|
||||||
------
|
--------
|
||||||
|
|
||||||
ftrace is not only the name of the tracing infrastructure, but it
|
This tracer is the function tracer. Enabling the function tracer
|
||||||
is also a name of one of the tracers. The tracer is the function
|
can be done from the debug file system. Make sure the ftrace_enabled is
|
||||||
tracer. Enabling the function tracer can be done from the
|
set; otherwise this tracer is a nop.
|
||||||
debug file system. Make sure the ftrace_enabled is set otherwise
|
|
||||||
this tracer is a nop.
|
|
||||||
|
|
||||||
# sysctl kernel.ftrace_enabled=1
|
# sysctl kernel.ftrace_enabled=1
|
||||||
# echo ftrace > /debug/tracing/current_tracer
|
# echo function > /debug/tracing/current_tracer
|
||||||
# echo 1 > /debug/tracing/tracing_enabled
|
# echo 1 > /debug/tracing/tracing_enabled
|
||||||
# usleep 1
|
# usleep 1
|
||||||
# echo 0 > /debug/tracing/tracing_enabled
|
# echo 0 > /debug/tracing/tracing_enabled
|
||||||
# cat /debug/tracing/trace
|
# cat /debug/tracing/trace
|
||||||
# tracer: ftrace
|
# tracer: function
|
||||||
#
|
#
|
||||||
# TASK-PID CPU# TIMESTAMP FUNCTION
|
# TASK-PID CPU# TIMESTAMP FUNCTION
|
||||||
# | | | | |
|
# | | | | |
|
||||||
|
@ -1040,10 +1032,10 @@ this tracer is a nop.
|
||||||
[...]
|
[...]
|
||||||
|
|
||||||
|
|
||||||
Note: ftrace uses ring buffers to store the above entries. The newest data
|
Note: function tracer uses ring buffers to store the above entries.
|
||||||
may overwrite the oldest data. Sometimes using echo to stop the trace
|
The newest data may overwrite the oldest data. Sometimes using echo to
|
||||||
is not sufficient because the tracing could have overwritten the data
|
stop the trace is not sufficient because the tracing could have overwritten
|
||||||
that you wanted to record. For this reason, it is sometimes better to
|
the data that you wanted to record. For this reason, it is sometimes better to
|
||||||
disable tracing directly from a program. This allows you to stop the
|
disable tracing directly from a program. This allows you to stop the
|
||||||
tracing at the point that you hit the part that you are interested in.
|
tracing at the point that you hit the part that you are interested in.
|
||||||
To disable the tracing directly from a C program, something like following
|
To disable the tracing directly from a C program, something like following
|
||||||
|
@ -1077,18 +1069,31 @@ every kernel function, produced by the -pg switch in gcc), starts
|
||||||
of pointing to a simple return. (Enabling FTRACE will include the
|
of pointing to a simple return. (Enabling FTRACE will include the
|
||||||
-pg switch in the compiling of the kernel.)
|
-pg switch in the compiling of the kernel.)
|
||||||
|
|
||||||
When dynamic ftrace is initialized, it calls kstop_machine to make
|
At compile time every C file object is run through the
|
||||||
the machine act like a uniprocessor so that it can freely modify code
|
recordmcount.pl script (located in the scripts directory). This
|
||||||
without worrying about other processors executing that same code. At
|
script will process the C object using objdump to find all the
|
||||||
initialization, the mcount calls are changed to call a "record_ip"
|
locations in the .text section that call mcount. (Note, only
|
||||||
function. After this, the first time a kernel function is called,
|
the .text section is processed, since processing other sections
|
||||||
it has the calling address saved in a hash table.
|
like .init.text may cause races due to those sections being freed).
|
||||||
|
|
||||||
Later on the ftraced kernel thread is awoken and will again call
|
A new section called "__mcount_loc" is created that holds references
|
||||||
kstop_machine if new functions have been recorded. The ftraced thread
|
to all the mcount call sites in the .text section. This section is
|
||||||
will change all calls to mcount to "nop". Just calling mcount
|
compiled back into the original object. The final linker will add
|
||||||
and having mcount return has shown a 10% overhead. By converting
|
all these references into a single table.
|
||||||
it to a nop, there is no measurable overhead to the system.
|
|
||||||
|
On boot up, before SMP is initialized, the dynamic ftrace code
|
||||||
|
scans this table and updates all the locations into nops. It also
|
||||||
|
records the locations, which are added to the available_filter_functions
|
||||||
|
list. Modules are processed as they are loaded and before they are
|
||||||
|
executed. When a module is unloaded, it also removes its functions from
|
||||||
|
the ftrace function list. This is automatic in the module unload
|
||||||
|
code, and the module author does not need to worry about it.
|
||||||
|
|
||||||
|
When tracing is enabled, kstop_machine is called to prevent races
|
||||||
|
with the CPUS executing code being modified (which can cause the
|
||||||
|
CPU to do undesireable things), and the nops are patched back
|
||||||
|
to calls. But this time, they do not call mcount (which is just
|
||||||
|
a function stub). They now call into the ftrace infrastructure.
|
||||||
|
|
||||||
One special side-effect to the recording of the functions being
|
One special side-effect to the recording of the functions being
|
||||||
traced is that we can now selectively choose which functions we
|
traced is that we can now selectively choose which functions we
|
||||||
|
@ -1251,36 +1256,6 @@ Produces:
|
||||||
|
|
||||||
We can see that there's no more lock or preempt tracing.
|
We can see that there's no more lock or preempt tracing.
|
||||||
|
|
||||||
ftraced
|
|
||||||
-------
|
|
||||||
|
|
||||||
As mentioned above, when dynamic ftrace is configured in, a kernel
|
|
||||||
thread wakes up once a second and checks to see if there are mcount
|
|
||||||
calls that need to be converted into nops. If there are not any, then
|
|
||||||
it simply goes back to sleep. But if there are some, it will call
|
|
||||||
kstop_machine to convert the calls to nops.
|
|
||||||
|
|
||||||
There may be a case in which you do not want this added latency.
|
|
||||||
Perhaps you are doing some audio recording and this activity might
|
|
||||||
cause skips in the playback. There is an interface to disable
|
|
||||||
and enable the "ftraced" kernel thread.
|
|
||||||
|
|
||||||
# echo 0 > /debug/tracing/ftraced_enabled
|
|
||||||
|
|
||||||
This will disable the calling of kstop_machine to update the
|
|
||||||
mcount calls to nops. Remember that there is a large overhead
|
|
||||||
to calling mcount. Without this kernel thread, that overhead will
|
|
||||||
exist.
|
|
||||||
|
|
||||||
If there are recorded calls to mcount, any write to the ftraced_enabled
|
|
||||||
file will cause the kstop_machine to run. This means that a
|
|
||||||
user can manually perform the updates when they want to by simply
|
|
||||||
echoing a '0' into the ftraced_enabled file.
|
|
||||||
|
|
||||||
The updates are also done at the beginning of enabling a tracer
|
|
||||||
that uses ftrace function recording.
|
|
||||||
|
|
||||||
|
|
||||||
trace_pipe
|
trace_pipe
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@ -1289,14 +1264,14 @@ on the tracing is different. Every read from trace_pipe is consumed.
|
||||||
This means that subsequent reads will be different. The trace
|
This means that subsequent reads will be different. The trace
|
||||||
is live.
|
is live.
|
||||||
|
|
||||||
# echo ftrace > /debug/tracing/current_tracer
|
# echo function > /debug/tracing/current_tracer
|
||||||
# cat /debug/tracing/trace_pipe > /tmp/trace.out &
|
# cat /debug/tracing/trace_pipe > /tmp/trace.out &
|
||||||
[1] 4153
|
[1] 4153
|
||||||
# echo 1 > /debug/tracing/tracing_enabled
|
# echo 1 > /debug/tracing/tracing_enabled
|
||||||
# usleep 1
|
# usleep 1
|
||||||
# echo 0 > /debug/tracing/tracing_enabled
|
# echo 0 > /debug/tracing/tracing_enabled
|
||||||
# cat /debug/tracing/trace
|
# cat /debug/tracing/trace
|
||||||
# tracer: ftrace
|
# tracer: function
|
||||||
#
|
#
|
||||||
# TASK-PID CPU# TIMESTAMP FUNCTION
|
# TASK-PID CPU# TIMESTAMP FUNCTION
|
||||||
# | | | | |
|
# | | | | |
|
||||||
|
@ -1317,7 +1292,7 @@ is live.
|
||||||
|
|
||||||
Note, reading the trace_pipe file will block until more input is added.
|
Note, reading the trace_pipe file will block until more input is added.
|
||||||
By changing the tracer, trace_pipe will issue an EOF. We needed
|
By changing the tracer, trace_pipe will issue an EOF. We needed
|
||||||
to set the ftrace tracer _before_ cating the trace_pipe file.
|
to set the function tracer _before_ we "cat" the trace_pipe file.
|
||||||
|
|
||||||
|
|
||||||
trace entries
|
trace entries
|
||||||
|
@ -1334,10 +1309,10 @@ number of entries.
|
||||||
65620
|
65620
|
||||||
|
|
||||||
Note, to modify this, you must have tracing completely disabled. To do that,
|
Note, to modify this, you must have tracing completely disabled. To do that,
|
||||||
echo "none" into the current_tracer. If the current_tracer is not set
|
echo "nop" into the current_tracer. If the current_tracer is not set
|
||||||
to "none", an EINVAL error will be returned.
|
to "nop", an EINVAL error will be returned.
|
||||||
|
|
||||||
# echo none > /debug/tracing/current_tracer
|
# echo nop > /debug/tracing/current_tracer
|
||||||
# echo 100000 > /debug/tracing/trace_entries
|
# echo 100000 > /debug/tracing/trace_entries
|
||||||
# cat /debug/tracing/trace_entries
|
# cat /debug/tracing/trace_entries
|
||||||
100045
|
100045
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
Kernel driver adt7462
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Analog Devices ADT7462
|
||||||
|
Prefix: 'adt7462'
|
||||||
|
Addresses scanned: I2C 0x58, 0x5C
|
||||||
|
Datasheet: Publicly available at the Analog Devices website
|
||||||
|
|
||||||
|
Author: Darrick J. Wong
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver implements support for the Analog Devices ADT7462 chip family.
|
||||||
|
|
||||||
|
This chip is a bit of a beast. It has 8 counters for measuring fan speed. It
|
||||||
|
can also measure 13 voltages or 4 temperatures, or various combinations of the
|
||||||
|
two. See the chip documentation for more details about the exact set of
|
||||||
|
configurations. This driver does not allow one to configure the chip; that is
|
||||||
|
left to the system designer.
|
||||||
|
|
||||||
|
A sophisticated control system for the PWM outputs is designed into the ADT7462
|
||||||
|
that allows fan speed to be adjusted automatically based on any of the three
|
||||||
|
temperature sensors. Each PWM output is individually adjustable and
|
||||||
|
programmable. Once configured, the ADT7462 will adjust the PWM outputs in
|
||||||
|
response to the measured temperatures without further host intervention. This
|
||||||
|
feature can also be disabled for manual control of the PWM's.
|
||||||
|
|
||||||
|
Each of the measured inputs (voltage, temperature, fan speed) has
|
||||||
|
corresponding high/low limit values. The ADT7462 will signal an ALARM if
|
||||||
|
any measured value exceeds either limit.
|
||||||
|
|
||||||
|
The ADT7462 samples all inputs continuously. The driver will not read
|
||||||
|
the registers more often than once every other second. Further,
|
||||||
|
configuration data is only read once per minute.
|
||||||
|
|
||||||
|
Special Features
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The ADT7462 have a 10-bit ADC and can therefore measure temperatures
|
||||||
|
with 0.25 degC resolution.
|
||||||
|
|
||||||
|
The Analog Devices datasheet is very detailed and describes a procedure for
|
||||||
|
determining an optimal configuration for the automatic PWM control.
|
||||||
|
|
||||||
|
The driver will report sensor labels when it is able to determine that
|
||||||
|
information from the configuration registers.
|
||||||
|
|
||||||
|
Configuration Notes
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Besides standard interfaces driver adds the following:
|
||||||
|
|
||||||
|
* PWM Control
|
||||||
|
|
||||||
|
* pwm#_auto_point1_pwm and temp#_auto_point1_temp and
|
||||||
|
* pwm#_auto_point2_pwm and temp#_auto_point2_temp -
|
||||||
|
|
||||||
|
point1: Set the pwm speed at a lower temperature bound.
|
||||||
|
point2: Set the pwm speed at a higher temperature bound.
|
||||||
|
|
||||||
|
The ADT7462 will scale the pwm between the lower and higher pwm speed when
|
||||||
|
the temperature is between the two temperature boundaries. PWM values range
|
||||||
|
from 0 (off) to 255 (full speed). Fan speed will be set to maximum when the
|
||||||
|
temperature sensor associated with the PWM control exceeds temp#_max.
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
Kernel driver lis3lv02d
|
||||||
|
==================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
|
||||||
|
* STMicroelectronics LIS3LV02DL and LIS3LV02DQ
|
||||||
|
|
||||||
|
Author:
|
||||||
|
Yan Burman <burman.yan@gmail.com>
|
||||||
|
Eric Piel <eric.piel@tremplin-utc.net>
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver provides support for the accelerometer found in various HP laptops
|
||||||
|
sporting the feature officially called "HP Mobile Data Protection System 3D" or
|
||||||
|
"HP 3D DriveGuard". It detect automatically laptops with this sensor. Known models
|
||||||
|
(for now the HP 2133, nc6420, nc2510, nc8510, nc84x0, nw9440 and nx9420) will
|
||||||
|
have their axis automatically oriented on standard way (eg: you can directly
|
||||||
|
play neverball). The accelerometer data is readable via
|
||||||
|
/sys/devices/platform/lis3lv02d.
|
||||||
|
|
||||||
|
Sysfs attributes under /sys/devices/platform/lis3lv02d/:
|
||||||
|
position - 3D position that the accelerometer reports. Format: "(x,y,z)"
|
||||||
|
calibrate - read: values (x, y, z) that are used as the base for input class device operation.
|
||||||
|
write: forces the base to be recalibrated with the current position.
|
||||||
|
rate - reports the sampling rate of the accelerometer device in HZ
|
||||||
|
|
||||||
|
This driver also provides an absolute input class device, allowing
|
||||||
|
the laptop to act as a pinball machine-esque joystick.
|
||||||
|
|
||||||
|
Axes orientation
|
||||||
|
----------------
|
||||||
|
|
||||||
|
For better compatibility between the various laptops. The values reported by
|
||||||
|
the accelerometer are converted into a "standard" organisation of the axes
|
||||||
|
(aka "can play neverball out of the box"):
|
||||||
|
* When the laptop is horizontal the position reported is about 0 for X and Y
|
||||||
|
and a positive value for Z
|
||||||
|
* If the left side is elevated, X increases (becomes positive)
|
||||||
|
* If the front side (where the touchpad is) is elevated, Y decreases (becomes negative)
|
||||||
|
* If the laptop is put upside-down, Z becomes negative
|
||||||
|
|
||||||
|
If your laptop model is not recognized (cf "dmesg"), you can send an email to the
|
||||||
|
authors to add it to the database. When reporting a new laptop, please include
|
||||||
|
the output of "dmidecode" plus the value of /sys/devices/platform/lis3lv02d/position
|
||||||
|
in these four cases.
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
Kernel driver ics932s401
|
||||||
|
======================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* IDT ICS932S401
|
||||||
|
Prefix: 'ics932s401'
|
||||||
|
Addresses scanned: I2C 0x69
|
||||||
|
Datasheet: Publically available at the IDT website
|
||||||
|
|
||||||
|
Author: Darrick J. Wong
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This driver implements support for the IDT ICS932S401 chip family.
|
||||||
|
|
||||||
|
This chip has 4 clock outputs--a base clock for the CPU (which is likely
|
||||||
|
multiplied to get the real CPU clock), a system clock, a PCI clock, a USB
|
||||||
|
clock, and a reference clock. The driver reports selected and actual
|
||||||
|
frequency. If spread spectrum mode is enabled, the driver also reports by what
|
||||||
|
percent the clock signal is being spread, which should be between 0 and -0.5%.
|
||||||
|
All frequencies are reported in KHz.
|
||||||
|
|
||||||
|
The ICS932S401 monitors all inputs continuously. The driver will not read
|
||||||
|
the registers more often than once every other second.
|
||||||
|
|
||||||
|
Special Features
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The clocks could be reprogrammed to increase system speed. I will not help you
|
||||||
|
do this, as you risk damaging your system!
|
|
@ -0,0 +1,10 @@
|
||||||
|
00-INDEX
|
||||||
|
- this file
|
||||||
|
cdrom.txt
|
||||||
|
- summary of CDROM ioctl calls
|
||||||
|
hdio.txt
|
||||||
|
- summary of HDIO_ ioctl calls
|
||||||
|
ioctl-decoding.txt
|
||||||
|
- how to decode the bits of an IOCTL code
|
||||||
|
ioctl-number.txt
|
||||||
|
- how to implement and register device/driver ioctl calls
|
|
@ -198,59 +198,42 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
that require a timer override, but don't have
|
that require a timer override, but don't have
|
||||||
HPET
|
HPET
|
||||||
|
|
||||||
acpi.debug_layer= [HW,ACPI]
|
acpi_backlight= [HW,ACPI]
|
||||||
|
acpi_backlight=vendor
|
||||||
|
acpi_backlight=video
|
||||||
|
If set to vendor, prefer vendor specific driver
|
||||||
|
(e.g. thinkpad_acpi, sony_acpi, etc.) instead
|
||||||
|
of the ACPI video.ko driver.
|
||||||
|
|
||||||
|
acpi_display_output= [HW,ACPI]
|
||||||
|
acpi_display_output=vendor
|
||||||
|
acpi_display_output=video
|
||||||
|
See above.
|
||||||
|
|
||||||
|
acpi.debug_layer= [HW,ACPI,ACPI_DEBUG]
|
||||||
|
acpi.debug_level= [HW,ACPI,ACPI_DEBUG]
|
||||||
Format: <int>
|
Format: <int>
|
||||||
Each bit of the <int> indicates an ACPI debug layer,
|
CONFIG_ACPI_DEBUG must be enabled to produce any ACPI
|
||||||
1: enable, 0: disable. It is useful for boot time
|
debug output. Bits in debug_layer correspond to a
|
||||||
debugging. After system has booted up, it can be set
|
_COMPONENT in an ACPI source file, e.g.,
|
||||||
via /sys/module/acpi/parameters/debug_layer.
|
#define _COMPONENT ACPI_PCI_COMPONENT
|
||||||
CONFIG_ACPI_DEBUG must be enabled for this to produce any output.
|
Bits in debug_level correspond to a level in
|
||||||
Available bits (add the numbers together) to enable debug output
|
ACPI_DEBUG_PRINT statements, e.g.,
|
||||||
for specific parts of the ACPI subsystem:
|
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ...
|
||||||
0x01 utilities 0x02 hardware 0x04 events 0x08 tables
|
See Documentation/acpi/debug.txt for more information
|
||||||
0x10 namespace 0x20 parser 0x40 dispatcher
|
about debug layers and levels.
|
||||||
0x80 executer 0x100 resources 0x200 acpica debugger
|
|
||||||
0x400 os services 0x800 acpica disassembler.
|
|
||||||
The number can be in decimal or prefixed with 0x in hex.
|
|
||||||
Warning: Many of these options can produce a lot of
|
|
||||||
output and make your system unusable. Be very careful.
|
|
||||||
|
|
||||||
acpi.debug_level= [HW,ACPI]
|
Enable AML "Debug" output, i.e., stores to the Debug
|
||||||
Format: <int>
|
object while interpreting AML:
|
||||||
Each bit of the <int> indicates an ACPI debug level,
|
acpi.debug_layer=0xffffffff acpi.debug_level=0x2
|
||||||
which corresponds to the level in an ACPI_DEBUG_PRINT
|
Enable PCI/PCI interrupt routing info messages:
|
||||||
statement. After system has booted up, this mask
|
acpi.debug_layer=0x400000 acpi.debug_level=0x4
|
||||||
can be set via /sys/module/acpi/parameters/debug_level.
|
Enable all messages related to ACPI hardware:
|
||||||
|
acpi.debug_layer=0x2 acpi.debug_level=0xffffffff
|
||||||
|
|
||||||
CONFIG_ACPI_DEBUG must be enabled for this to produce
|
Some values produce so much output that the system is
|
||||||
any output. The number can be in decimal or prefixed
|
unusable. The "log_buf_len" parameter may be useful
|
||||||
with 0x in hex. Some of these options produce so much
|
if you need to capture more output.
|
||||||
output that the system is unusable.
|
|
||||||
|
|
||||||
The following global components are defined by the
|
|
||||||
ACPI CA:
|
|
||||||
0x01 error
|
|
||||||
0x02 warn
|
|
||||||
0x04 init
|
|
||||||
0x08 debug object
|
|
||||||
0x10 info
|
|
||||||
0x20 init names
|
|
||||||
0x40 parse
|
|
||||||
0x80 load
|
|
||||||
0x100 dispatch
|
|
||||||
0x200 execute
|
|
||||||
0x400 names
|
|
||||||
0x800 operation region
|
|
||||||
0x1000 bfield
|
|
||||||
0x2000 tables
|
|
||||||
0x4000 values
|
|
||||||
0x8000 objects
|
|
||||||
0x10000 resources
|
|
||||||
0x20000 user requests
|
|
||||||
0x40000 package
|
|
||||||
The number can be in decimal or prefixed with 0x in hex.
|
|
||||||
Warning: Many of these options can produce a lot of
|
|
||||||
output and make your system unusable. Be very careful.
|
|
||||||
|
|
||||||
acpi.power_nocheck= [HW,ACPI]
|
acpi.power_nocheck= [HW,ACPI]
|
||||||
Format: 1/0 enable/disable the check of power state.
|
Format: 1/0 enable/disable the check of power state.
|
||||||
|
@ -311,7 +294,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Possible values are:
|
Possible values are:
|
||||||
isolate - enable device isolation (each device, as far
|
isolate - enable device isolation (each device, as far
|
||||||
as possible, will get its own protection
|
as possible, will get its own protection
|
||||||
domain)
|
domain) [default]
|
||||||
|
share - put every device behind one IOMMU into the
|
||||||
|
same protection domain
|
||||||
fullflush - enable flushing of IO/TLB entries when
|
fullflush - enable flushing of IO/TLB entries when
|
||||||
they are unmapped. Otherwise they are
|
they are unmapped. Otherwise they are
|
||||||
flushed before they will be reused, which
|
flushed before they will be reused, which
|
||||||
|
@ -646,7 +631,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
digiepca= [HW,SERIAL]
|
digiepca= [HW,SERIAL]
|
||||||
See drivers/char/README.epca and
|
See drivers/char/README.epca and
|
||||||
Documentation/digiepca.txt.
|
Documentation/serial/digiepca.txt.
|
||||||
|
|
||||||
disable_mtrr_cleanup [X86]
|
disable_mtrr_cleanup [X86]
|
||||||
enable_mtrr_cleanup [X86]
|
enable_mtrr_cleanup [X86]
|
||||||
|
@ -757,7 +742,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See header of drivers/scsi/fdomain.c.
|
See header of drivers/scsi/fdomain.c.
|
||||||
|
|
||||||
floppy= [HW]
|
floppy= [HW]
|
||||||
See Documentation/floppy.txt.
|
See Documentation/blockdev/floppy.txt.
|
||||||
|
|
||||||
force_pal_cache_flush
|
force_pal_cache_flush
|
||||||
[IA-64] Avoid check_sal_cache_flush which may hang on
|
[IA-64] Avoid check_sal_cache_flush which may hang on
|
||||||
|
@ -995,13 +980,15 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Format:
|
Format:
|
||||||
<cpu number>,...,<cpu number>
|
<cpu number>,...,<cpu number>
|
||||||
or
|
or
|
||||||
<cpu number>-<cpu number> (must be a positive range in ascending order)
|
<cpu number>-<cpu number>
|
||||||
|
(must be a positive range in ascending order)
|
||||||
or a mixture
|
or a mixture
|
||||||
<cpu number>,...,<cpu number>-<cpu number>
|
<cpu number>,...,<cpu number>-<cpu number>
|
||||||
|
|
||||||
This option can be used to specify one or more CPUs
|
This option can be used to specify one or more CPUs
|
||||||
to isolate from the general SMP balancing and scheduling
|
to isolate from the general SMP balancing and scheduling
|
||||||
algorithms. The only way to move a process onto or off
|
algorithms. You can move a process onto or off an
|
||||||
an "isolated" CPU is via the CPU affinity syscalls.
|
"isolated" CPU via the CPU affinity syscalls or cpuset.
|
||||||
<cpu number> begins at 0 and the maximum value is
|
<cpu number> begins at 0 and the maximum value is
|
||||||
"number of CPUs in system - 1".
|
"number of CPUs in system - 1".
|
||||||
|
|
||||||
|
@ -1116,7 +1103,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
the same attribute, the last one is used.
|
the same attribute, the last one is used.
|
||||||
|
|
||||||
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
load_ramdisk= [RAM] List of ramdisks to load from floppy
|
||||||
See Documentation/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
lockd.nlm_grace_period=P [NFS] Assign grace period.
|
lockd.nlm_grace_period=P [NFS] Assign grace period.
|
||||||
Format: <integer>
|
Format: <integer>
|
||||||
|
@ -1208,8 +1195,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
it is equivalent to "nosmp", which also disables
|
it is equivalent to "nosmp", which also disables
|
||||||
the IO APIC.
|
the IO APIC.
|
||||||
|
|
||||||
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
|
max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater than
|
||||||
equal to this physical address is ignored.
|
or equal to this physical address is ignored.
|
||||||
|
|
||||||
max_luns= [SCSI] Maximum number of LUNs to probe.
|
max_luns= [SCSI] Maximum number of LUNs to probe.
|
||||||
Should be between 1 and 2^32-1.
|
Should be between 1 and 2^32-1.
|
||||||
|
@ -1309,6 +1296,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
mga= [HW,DRM]
|
mga= [HW,DRM]
|
||||||
|
|
||||||
|
min_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory below this
|
||||||
|
physical address is ignored.
|
||||||
|
|
||||||
mminit_loglevel=
|
mminit_loglevel=
|
||||||
[KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
|
[KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
|
||||||
parameter allows control of the logging verbosity for
|
parameter allows control of the logging verbosity for
|
||||||
|
@ -1470,8 +1460,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Valid arguments: on, off
|
Valid arguments: on, off
|
||||||
Default: on
|
Default: on
|
||||||
|
|
||||||
noirqbalance [X86-32,SMP,KNL] Disable kernel irq balancing
|
|
||||||
|
|
||||||
noirqdebug [X86-32] Disables the code which attempts to detect and
|
noirqdebug [X86-32] Disables the code which attempts to detect and
|
||||||
disable unhandled interrupt sources.
|
disable unhandled interrupt sources.
|
||||||
|
|
||||||
|
@ -1613,7 +1601,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
pcd. [PARIDE]
|
pcd. [PARIDE]
|
||||||
See header of drivers/block/paride/pcd.c.
|
See header of drivers/block/paride/pcd.c.
|
||||||
See also Documentation/paride.txt.
|
See also Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
pci=option[,option...] [PCI] various PCI subsystem options:
|
pci=option[,option...] [PCI] various PCI subsystem options:
|
||||||
off [X86] don't probe for the PCI bus
|
off [X86] don't probe for the PCI bus
|
||||||
|
@ -1714,7 +1702,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||||
|
|
||||||
pd. [PARIDE]
|
pd. [PARIDE]
|
||||||
See Documentation/paride.txt.
|
See Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
pdcchassis= [PARISC,HW] Disable/Enable PDC Chassis Status codes at
|
pdcchassis= [PARISC,HW] Disable/Enable PDC Chassis Status codes at
|
||||||
boot time.
|
boot time.
|
||||||
|
@ -1722,10 +1710,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See arch/parisc/kernel/pdc_chassis.c
|
See arch/parisc/kernel/pdc_chassis.c
|
||||||
|
|
||||||
pf. [PARIDE]
|
pf. [PARIDE]
|
||||||
See Documentation/paride.txt.
|
See Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
pg. [PARIDE]
|
pg. [PARIDE]
|
||||||
See Documentation/paride.txt.
|
See Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
pirq= [SMP,APIC] Manual mp-table setup
|
pirq= [SMP,APIC] Manual mp-table setup
|
||||||
See Documentation/x86/i386/IO-APIC.txt.
|
See Documentation/x86/i386/IO-APIC.txt.
|
||||||
|
@ -1795,7 +1783,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
|
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
|
||||||
before loading.
|
before loading.
|
||||||
See Documentation/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
|
psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
|
||||||
probe for; one of (bare|imps|exps|lifebook|any).
|
probe for; one of (bare|imps|exps|lifebook|any).
|
||||||
|
@ -1815,7 +1803,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
<io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
<io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
||||||
|
|
||||||
pt. [PARIDE]
|
pt. [PARIDE]
|
||||||
See Documentation/paride.txt.
|
See Documentation/blockdev/paride.txt.
|
||||||
|
|
||||||
pty.legacy_count=
|
pty.legacy_count=
|
||||||
[KNL] Number of legacy pty's. Overwrites compiled-in
|
[KNL] Number of legacy pty's. Overwrites compiled-in
|
||||||
|
@ -1829,10 +1817,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See Documentation/md.txt.
|
See Documentation/md.txt.
|
||||||
|
|
||||||
ramdisk_blocksize= [RAM]
|
ramdisk_blocksize= [RAM]
|
||||||
See Documentation/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
|
||||||
See Documentation/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
|
||||||
rcupdate.blimit= [KNL,BOOT]
|
rcupdate.blimit= [KNL,BOOT]
|
||||||
Set maximum number of finished RCU callbacks to process
|
Set maximum number of finished RCU callbacks to process
|
||||||
|
@ -2164,7 +2152,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See Documentation/sonypi.txt
|
See Documentation/sonypi.txt
|
||||||
|
|
||||||
specialix= [HW,SERIAL] Specialix multi-serial port adapter
|
specialix= [HW,SERIAL] Specialix multi-serial port adapter
|
||||||
See Documentation/specialix.txt.
|
See Documentation/serial/specialix.txt.
|
||||||
|
|
||||||
spia_io_base= [HW,MTD]
|
spia_io_base= [HW,MTD]
|
||||||
spia_fio_base=
|
spia_fio_base=
|
||||||
|
|
|
@ -96,7 +96,7 @@ Letting the PHY Abstraction Layer do Everything
|
||||||
static void adjust_link(struct net_device *dev);
|
static void adjust_link(struct net_device *dev);
|
||||||
|
|
||||||
Next, you need to know the device name of the PHY connected to this device.
|
Next, you need to know the device name of the PHY connected to this device.
|
||||||
The name will look something like, "phy0:0", where the first number is the
|
The name will look something like, "0:00", where the first number is the
|
||||||
bus id, and the second is the PHY's address on that bus. Typically,
|
bus id, and the second is the PHY's address on that bus. Typically,
|
||||||
the bus is responsible for making its ID unique.
|
the bus is responsible for making its ID unique.
|
||||||
|
|
||||||
|
|
|
@ -41,25 +41,14 @@ Table of Contents
|
||||||
VI - System-on-a-chip devices and nodes
|
VI - System-on-a-chip devices and nodes
|
||||||
1) Defining child nodes of an SOC
|
1) Defining child nodes of an SOC
|
||||||
2) Representing devices without a current OF specification
|
2) Representing devices without a current OF specification
|
||||||
a) MDIO IO device
|
a) PHY nodes
|
||||||
b) Gianfar-compatible ethernet nodes
|
b) Interrupt controllers
|
||||||
c) PHY nodes
|
c) CFI or JEDEC memory-mapped NOR flash
|
||||||
d) Interrupt controllers
|
d) 4xx/Axon EMAC ethernet nodes
|
||||||
e) I2C
|
e) Xilinx IP cores
|
||||||
f) Freescale SOC USB controllers
|
f) USB EHCI controllers
|
||||||
g) Freescale SOC SEC Security Engines
|
g) MDIO on GPIOs
|
||||||
h) Board Control and Status (BCSR)
|
h) SPI busses
|
||||||
i) Freescale QUICC Engine module (QE)
|
|
||||||
j) CFI or JEDEC memory-mapped NOR flash
|
|
||||||
k) Global Utilities Block
|
|
||||||
l) Freescale Communications Processor Module
|
|
||||||
m) Chipselect/Local Bus
|
|
||||||
n) 4xx/Axon EMAC ethernet nodes
|
|
||||||
o) Xilinx IP cores
|
|
||||||
p) Freescale Synchronous Serial Interface
|
|
||||||
q) USB EHCI controllers
|
|
||||||
r) MDIO on GPIOs
|
|
||||||
s) SPI busses
|
|
||||||
|
|
||||||
VII - Marvell Discovery mv64[345]6x System Controller chips
|
VII - Marvell Discovery mv64[345]6x System Controller chips
|
||||||
1) The /system-controller node
|
1) The /system-controller node
|
||||||
|
@ -1830,41 +1819,7 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
big-endian;
|
big-endian;
|
||||||
};
|
};
|
||||||
|
|
||||||
r) Freescale Display Interface Unit
|
g) MDIO on GPIOs
|
||||||
|
|
||||||
The Freescale DIU is a LCD controller, with proper hardware, it can also
|
|
||||||
drive DVI monitors.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible : should be "fsl-diu".
|
|
||||||
- reg : should contain at least address and length of the DIU register
|
|
||||||
set.
|
|
||||||
- Interrupts : one DIU interrupt should be describe here.
|
|
||||||
|
|
||||||
Example (MPC8610HPCD)
|
|
||||||
display@2c000 {
|
|
||||||
compatible = "fsl,diu";
|
|
||||||
reg = <0x2c000 100>;
|
|
||||||
interrupts = <72 2>;
|
|
||||||
interrupt-parent = <&mpic>;
|
|
||||||
};
|
|
||||||
|
|
||||||
s) Freescale on board FPGA
|
|
||||||
|
|
||||||
This is the memory-mapped registers for on board FPGA.
|
|
||||||
|
|
||||||
Required properities:
|
|
||||||
- compatible : should be "fsl,fpga-pixis".
|
|
||||||
- reg : should contain the address and the lenght of the FPPGA register
|
|
||||||
set.
|
|
||||||
|
|
||||||
Example (MPC8610HPCD)
|
|
||||||
board-control@e8000000 {
|
|
||||||
compatible = "fsl,fpga-pixis";
|
|
||||||
reg = <0xe8000000 32>;
|
|
||||||
};
|
|
||||||
|
|
||||||
r) MDIO on GPIOs
|
|
||||||
|
|
||||||
Currently defined compatibles:
|
Currently defined compatibles:
|
||||||
- virtual,gpio-mdio
|
- virtual,gpio-mdio
|
||||||
|
@ -1884,7 +1839,7 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
&qe_pio_c 6>;
|
&qe_pio_c 6>;
|
||||||
};
|
};
|
||||||
|
|
||||||
s) SPI (Serial Peripheral Interface) busses
|
h) SPI (Serial Peripheral Interface) busses
|
||||||
|
|
||||||
SPI busses can be described with a node for the SPI master device
|
SPI busses can be described with a node for the SPI master device
|
||||||
and a set of child nodes for each SPI slave on the bus. For this
|
and a set of child nodes for each SPI slave on the bus. For this
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
If variable is of Type, use printk format specifier:
|
||||||
|
---------------------------------------------------------
|
||||||
|
int %d or %x
|
||||||
|
unsigned int %u or %x
|
||||||
|
long %ld or %lx
|
||||||
|
unsigned long %lu or %lx
|
||||||
|
long long %lld or %llx
|
||||||
|
unsigned long long %llu or %llx
|
||||||
|
size_t %zu or %zx
|
||||||
|
ssize_t %zd or %zx
|
||||||
|
|
||||||
|
Raw pointer value SHOULD be printed with %p.
|
||||||
|
|
||||||
|
u64 SHOULD be printed with %llu/%llx, (unsigned long long):
|
||||||
|
|
||||||
|
printk("%llu", (unsigned long long)u64_var);
|
||||||
|
|
||||||
|
s64 SHOULD be printed with %lld/%llx, (long long):
|
||||||
|
|
||||||
|
printk("%lld", (long long)s64_var);
|
||||||
|
|
||||||
|
If <type> is dependent on a config option for its size (e.g., sector_t,
|
||||||
|
blkcnt_t, phys_addr_t, resource_size_t) or is architecture-dependent
|
||||||
|
for its size (e.g., tcflag_t), use a format specifier of its largest
|
||||||
|
possible type and explicitly cast to it. Example:
|
||||||
|
|
||||||
|
printk("test: sector number/total blocks: %llu/%llu\n",
|
||||||
|
(unsigned long long)sector, (unsigned long long)blockcount);
|
||||||
|
|
||||||
|
Reminder: sizeof() result is of type size_t.
|
||||||
|
|
||||||
|
Thank you for your cooperation and attention.
|
||||||
|
|
||||||
|
|
||||||
|
By Randy Dunlap <rdunlap@xenotime.net>
|
|
@ -0,0 +1,24 @@
|
||||||
|
00-INDEX
|
||||||
|
- this file.
|
||||||
|
README.cycladesZ
|
||||||
|
- info on Cyclades-Z firmware loading.
|
||||||
|
computone.txt
|
||||||
|
- info on Computone Intelliport II/Plus Multiport Serial Driver.
|
||||||
|
digiepca.txt
|
||||||
|
- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
|
||||||
|
hayes-esp.txt
|
||||||
|
- info on using the Hayes ESP serial driver.
|
||||||
|
moxa-smartio
|
||||||
|
- file with info on installing/using Moxa multiport serial driver.
|
||||||
|
riscom8.txt
|
||||||
|
- notes on using the RISCom/8 multi-port serial driver.
|
||||||
|
rocket.txt
|
||||||
|
- info on the Comtrol RocketPort multiport serial driver.
|
||||||
|
specialix.txt
|
||||||
|
- info on hardware/driver for specialix IO8+ multiport serial card.
|
||||||
|
stallion.txt
|
||||||
|
- info on using the Stallion multiport serial driver.
|
||||||
|
sx.txt
|
||||||
|
- info on the Specialix SX/SI multiport serial driver.
|
||||||
|
tty.txt
|
||||||
|
- guide to the locking policies of the tty layer.
|
|
@ -247,7 +247,7 @@ shar archive to make it easier to extract the script from the documentation.
|
||||||
To create the ip2mkdev shell script change to a convenient directory (/tmp
|
To create the ip2mkdev shell script change to a convenient directory (/tmp
|
||||||
works just fine) and run the following command:
|
works just fine) and run the following command:
|
||||||
|
|
||||||
unshar Documentation/computone.txt
|
unshar Documentation/serial/computone.txt
|
||||||
(This file)
|
(This file)
|
||||||
|
|
||||||
You should now have a file ip2mkdev in your current working directory with
|
You should now have a file ip2mkdev in your current working directory with
|
|
@ -27,8 +27,8 @@ audio
|
||||||
sound card) should be possible, but there is no code yet ...
|
sound card) should be possible, but there is no code yet ...
|
||||||
|
|
||||||
vbi
|
vbi
|
||||||
- some code present. Doesn't crash any more, but also doesn't
|
- Code present. Works for NTSC closed caption. PAL and other
|
||||||
work yet ...
|
TV norms may or may not work.
|
||||||
|
|
||||||
|
|
||||||
how to add support for new cards
|
how to add support for new cards
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
Driver for USB radios for the Silicon Labs Si470x FM Radio Receivers
|
||||||
|
|
||||||
|
Copyright (c) 2008 Tobias Lorenz <tobias.lorenz@gmx.net>
|
||||||
|
|
||||||
|
|
||||||
|
Information from Silicon Labs
|
||||||
|
=============================
|
||||||
|
Silicon Laboratories is the manufacturer of the radio ICs, that nowadays are the
|
||||||
|
most often used radio receivers in cell phones. Usually they are connected with
|
||||||
|
I2C. But SiLabs also provides a reference design, which integrates this IC,
|
||||||
|
together with a small microcontroller C8051F321, to form a USB radio.
|
||||||
|
Part of this reference design is also a radio application in binary and source
|
||||||
|
code. The software also contains an automatic firmware upgrade to the most
|
||||||
|
current version. Information on these can be downloaded here:
|
||||||
|
http://www.silabs.com/usbradio
|
||||||
|
|
||||||
|
|
||||||
|
Supported ICs
|
||||||
|
=============
|
||||||
|
The following ICs have a very similar register set, so that they are or will be
|
||||||
|
supported somewhen by the driver:
|
||||||
|
- Si4700: FM radio receiver
|
||||||
|
- Si4701: FM radio receiver, RDS Support
|
||||||
|
- Si4702: FM radio receiver
|
||||||
|
- Si4703: FM radio receiver, RDS Support
|
||||||
|
- Si4704: FM radio receiver, no external antenna required
|
||||||
|
- Si4705: FM radio receiver, no external antenna required, RDS support, Dig I/O
|
||||||
|
- Si4706: Enhanced FM RDS/TMC radio receiver, no external antenna required, RDS
|
||||||
|
Support
|
||||||
|
- Si4707: Dedicated weather band radio receiver with SAME decoder, RDS Support
|
||||||
|
- Si4708: Smallest FM receivers
|
||||||
|
- Si4709: Smallest FM receivers, RDS Support
|
||||||
|
More information on these can be downloaded here:
|
||||||
|
http://www.silabs.com/products/mcu/Pages/USBFMRadioRD.aspx
|
||||||
|
|
||||||
|
|
||||||
|
Supported USB devices
|
||||||
|
=====================
|
||||||
|
Currently the following USB radios (vendor:product) with the Silicon Labs si470x
|
||||||
|
chips are known to work:
|
||||||
|
- 10c4:818a: Silicon Labs USB FM Radio Reference Design
|
||||||
|
- 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF)
|
||||||
|
- 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700)
|
||||||
|
|
||||||
|
|
||||||
|
Software
|
||||||
|
========
|
||||||
|
Testing is usually done with most application under Debian/testing:
|
||||||
|
- fmtools - Utility for managing FM tuner cards
|
||||||
|
- gnomeradio - FM-radio tuner for the GNOME desktop
|
||||||
|
- gradio - GTK FM radio tuner
|
||||||
|
- kradio - Comfortable Radio Application for KDE
|
||||||
|
- radio - ncurses-based radio application
|
||||||
|
|
||||||
|
There is also a library libv4l, which can be used. It's going to have a function
|
||||||
|
for frequency seeking, either by using hardware functionality as in radio-si470x
|
||||||
|
or by implementing a function as we currently have in every of the mentioned
|
||||||
|
programs. Somewhen the radio programs should make use of libv4l.
|
||||||
|
|
||||||
|
For processing RDS information, there is a project ongoing at:
|
||||||
|
http://rdsd.berlios.de/
|
||||||
|
|
||||||
|
There is currently no project for making TMC sentences human readable.
|
||||||
|
|
||||||
|
|
||||||
|
Audio Listing
|
||||||
|
=============
|
||||||
|
USB Audio is provided by the ALSA snd_usb_audio module. It is recommended to
|
||||||
|
also select SND_USB_AUDIO, as this is required to get sound from the radio. For
|
||||||
|
listing you have to redirect the sound, for example using one of the following
|
||||||
|
commands.
|
||||||
|
|
||||||
|
If you just want to test audio (very poor quality):
|
||||||
|
cat /dev/dsp1 > /dev/dsp
|
||||||
|
|
||||||
|
If you use OSS try:
|
||||||
|
sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp
|
||||||
|
|
||||||
|
If you use arts try:
|
||||||
|
arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B -
|
||||||
|
|
||||||
|
|
||||||
|
Module Parameters
|
||||||
|
=================
|
||||||
|
After loading the module, you still have access to some of them in the sysfs
|
||||||
|
mount under /sys/module/radio_si470x/parameters. The contents of read-only files
|
||||||
|
(0444) are not updated, even if space, band and de are changed using private
|
||||||
|
video controls. The others are runtime changeable.
|
||||||
|
|
||||||
|
|
||||||
|
Errors
|
||||||
|
======
|
||||||
|
Increase tune_timeout, if you often get -EIO errors.
|
||||||
|
|
||||||
|
When timed out or band limit is reached, hw_freq_seek returns -EAGAIN.
|
||||||
|
|
||||||
|
If you get any errors from snd_usb_audio, please report them to the ALSA people.
|
||||||
|
|
||||||
|
|
||||||
|
Open Issues
|
||||||
|
===========
|
||||||
|
V4L minor device allocation and parameter setting is not perfect. A solution is
|
||||||
|
currently under discussion.
|
||||||
|
|
||||||
|
There is an USB interface for downloading/uploading new firmware images. Support
|
||||||
|
for it can be implemented using the request_firmware interface.
|
||||||
|
|
||||||
|
There is a RDS interrupt mode. The driver is already using the same interface
|
||||||
|
for polling RDS information, but is currently not using the interrupt mode.
|
||||||
|
|
||||||
|
There is a LED interface, which can be used to override the LED control
|
||||||
|
programmed in the firmware. This can be made available using the LED support
|
||||||
|
functions in the kernel.
|
||||||
|
|
||||||
|
|
||||||
|
Other useful information and links
|
||||||
|
==================================
|
||||||
|
http://www.silabs.com/usbradio
|
|
@ -0,0 +1,46 @@
|
||||||
|
Kernel driver for omap HDQ/1-wire module.
|
||||||
|
========================================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
================
|
||||||
|
HDQ/1-wire controller on the TI OMAP 2430/3430 platforms.
|
||||||
|
|
||||||
|
A useful link about HDQ basics:
|
||||||
|
===============================
|
||||||
|
http://focus.ti.com/lit/an/slua408/slua408.pdf
|
||||||
|
|
||||||
|
Description:
|
||||||
|
============
|
||||||
|
The HDQ/1-Wire module of TI OMAP2430/3430 platforms implement the hardware
|
||||||
|
protocol of the master functions of the Benchmark HDQ and the Dallas
|
||||||
|
Semiconductor 1-Wire protocols. These protocols use a single wire for
|
||||||
|
communication between the master (HDQ/1-Wire controller) and the slave
|
||||||
|
(HDQ/1-Wire external compliant device).
|
||||||
|
|
||||||
|
A typical application of the HDQ/1-Wire module is the communication with battery
|
||||||
|
monitor (gas gauge) integrated circuits.
|
||||||
|
|
||||||
|
The controller supports operation in both HDQ and 1-wire mode. The essential
|
||||||
|
difference between the HDQ and 1-wire mode is how the slave device responds to
|
||||||
|
initialization pulse.In HDQ mode, the firmware does not require the host to
|
||||||
|
create an initialization pulse to the slave.However, the slave can be reset by
|
||||||
|
using an initialization pulse (also referred to as a break pulse).The slave
|
||||||
|
does not respond with a presence pulse as it does in the 1-Wire protocol.
|
||||||
|
|
||||||
|
Remarks:
|
||||||
|
========
|
||||||
|
The driver (drivers/w1/masters/omap_hdq.c) supports the HDQ mode of the
|
||||||
|
controller. In this mode, as we can not read the ID which obeys the W1
|
||||||
|
spec(family:id:crc), a module parameter can be passed to the driver which will
|
||||||
|
be used to calculate the CRC and pass back an appropriate slave ID to the W1
|
||||||
|
core.
|
||||||
|
|
||||||
|
By default the master driver and the BQ slave i/f
|
||||||
|
driver(drivers/w1/slaves/w1_bq27000.c) sets the ID to 1.
|
||||||
|
Please note to load both the modules with a different ID if required, but note
|
||||||
|
that the ID used should be same for both master and slave driver loading.
|
||||||
|
|
||||||
|
e.g:
|
||||||
|
insmod omap_hdq.ko W1_ID=2
|
||||||
|
inamod w1_bq27000.ko F_ID=2
|
||||||
|
|
53
MAINTAINERS
53
MAINTAINERS
|
@ -721,7 +721,7 @@ W: http://sourceforge.net/projects/acpi4asus
|
||||||
W: http://xf.iksaif.net/acpi4asus
|
W: http://xf.iksaif.net/acpi4asus
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ASYNCHRONOUS TRANSFERS/TRANSFORMS API
|
ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
|
||||||
P: Dan Williams
|
P: Dan Williams
|
||||||
M: dan.j.williams@intel.com
|
M: dan.j.williams@intel.com
|
||||||
P: Maciej Sosnowski
|
P: Maciej Sosnowski
|
||||||
|
@ -1809,7 +1809,7 @@ S: Maintained
|
||||||
|
|
||||||
FTRACE
|
FTRACE
|
||||||
P: Steven Rostedt
|
P: Steven Rostedt
|
||||||
M: srostedt@redhat.com
|
M: rostedt@goodmis.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
FUJITSU FR-V (FRV) PORT
|
FUJITSU FR-V (FRV) PORT
|
||||||
|
@ -1879,6 +1879,37 @@ M: linux-kernel@vger.kernel.org
|
||||||
W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
|
W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
GSPCA FINEPIX SUBDRIVER
|
||||||
|
P: Frank Zago
|
||||||
|
M: frank@zago.net
|
||||||
|
L: video4linux-list@redhat.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
|
GSPCA M5602 SUBDRIVER
|
||||||
|
P: Erik Andren
|
||||||
|
M: erik.andren@gmail.com
|
||||||
|
L: video4linux-list@redhat.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
|
GSPCA PAC207 SONIXB SUBDRIVER
|
||||||
|
P: Hans de Goede
|
||||||
|
M: hdegoede@redhat.com
|
||||||
|
L: video4linux-list@redhat.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
|
GSPCA T613 SUBDRIVER
|
||||||
|
P: Leandro Costantino
|
||||||
|
M: lcostantino@gmail.com
|
||||||
|
L: video4linux-list@redhat.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
|
GSPCA USB WEBCAM DRIVER
|
||||||
|
P: Jean-Francois Moine
|
||||||
|
M: moinejf@free.fr
|
||||||
|
W: http://moinejf.free.fr
|
||||||
|
L: video4linux-list@redhat.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
HARDWARE MONITORING
|
HARDWARE MONITORING
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
W: http://www.lm-sensors.org/
|
W: http://www.lm-sensors.org/
|
||||||
|
@ -2185,6 +2216,13 @@ M: adaplas@gmail.com
|
||||||
L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
INTEL MENLOW THERMAL DRIVER
|
||||||
|
P: Sujith Thomas
|
||||||
|
M: sujith.thomas@intel.com
|
||||||
|
L: linux-acpi@vger.kernel.org
|
||||||
|
W: http://www.lesswatts.org/projects/acpi/
|
||||||
|
S: Supported
|
||||||
|
|
||||||
INTEL IA32 MICROCODE UPDATE SUPPORT
|
INTEL IA32 MICROCODE UPDATE SUPPORT
|
||||||
P: Tigran Aivazian
|
P: Tigran Aivazian
|
||||||
M: tigran@aivazian.fsnet.co.uk
|
M: tigran@aivazian.fsnet.co.uk
|
||||||
|
@ -2665,6 +2703,11 @@ P: Arnaldo Carvalho de Melo
|
||||||
M: acme@ghostprotocols.net
|
M: acme@ghostprotocols.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
LIS3LV02D ACCELEROMETER DRIVER
|
||||||
|
P: Eric Piel
|
||||||
|
M: eric.piel@tremplin-utc.net
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
LM83 HARDWARE MONITOR DRIVER
|
LM83 HARDWARE MONITOR DRIVER
|
||||||
P: Jean Delvare
|
P: Jean Delvare
|
||||||
M: khali@linux-fr.org
|
M: khali@linux-fr.org
|
||||||
|
@ -3346,7 +3389,9 @@ S: Maintained
|
||||||
|
|
||||||
PNP SUPPORT
|
PNP SUPPORT
|
||||||
P: Adam Belay
|
P: Adam Belay
|
||||||
M: ambx1@neo.rr.com
|
M: abelay@mit.edu
|
||||||
|
P: Bjorn Helgaas
|
||||||
|
M: bjorn.helgaas@hp.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
PNXxxxx I2C DRIVER
|
PNXxxxx I2C DRIVER
|
||||||
|
@ -3883,8 +3928,6 @@ M: bootc@bootc.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
SOFTWARE RAID (Multiple Disks) SUPPORT
|
SOFTWARE RAID (Multiple Disks) SUPPORT
|
||||||
P: Ingo Molnar
|
|
||||||
M: mingo@redhat.com
|
|
||||||
P: Neil Brown
|
P: Neil Brown
|
||||||
M: neilb@suse.de
|
M: neilb@suse.de
|
||||||
L: linux-raid@vger.kernel.org
|
L: linux-raid@vger.kernel.org
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 28
|
SUBLEVEL = 28
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc6
|
||||||
NAME = Killer Bat of Doom
|
NAME = Killer Bat of Doom
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -21,7 +21,7 @@ config OPROFILE_IBS
|
||||||
Instruction-Based Sampling (IBS) is a new profiling
|
Instruction-Based Sampling (IBS) is a new profiling
|
||||||
technique that provides rich, precise program performance
|
technique that provides rich, precise program performance
|
||||||
information. IBS is introduced by AMD Family10h processors
|
information. IBS is introduced by AMD Family10h processors
|
||||||
(AMD Opteron Quad-Core processor “Barcelona”) to overcome
|
(AMD Opteron Quad-Core processor "Barcelona") to overcome
|
||||||
the limitations of conventional performance counter
|
the limitations of conventional performance counter
|
||||||
sampling.
|
sampling.
|
||||||
|
|
||||||
|
|
|
@ -256,8 +256,17 @@ int dmabounce_sync_for_cpu(struct device *, dma_addr_t, unsigned long,
|
||||||
int dmabounce_sync_for_device(struct device *, dma_addr_t, unsigned long,
|
int dmabounce_sync_for_device(struct device *, dma_addr_t, unsigned long,
|
||||||
size_t, enum dma_data_direction);
|
size_t, enum dma_data_direction);
|
||||||
#else
|
#else
|
||||||
#define dmabounce_sync_for_cpu(dev,dma,off,sz,dir) (1)
|
static inline int dmabounce_sync_for_cpu(struct device *d, dma_addr_t addr,
|
||||||
#define dmabounce_sync_for_device(dev,dma,off,sz,dir) (1)
|
unsigned long offset, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int dmabounce_sync_for_device(struct device *d, dma_addr_t addr,
|
||||||
|
unsigned long offset, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -730,7 +730,8 @@ static inline void iop_desc_set_next_desc(struct iop_adma_desc_slot *desc,
|
||||||
{
|
{
|
||||||
/* hw_desc->next_desc is the same location for all channels */
|
/* hw_desc->next_desc is the same location for all channels */
|
||||||
union iop3xx_desc hw_desc = { .ptr = desc->hw_desc, };
|
union iop3xx_desc hw_desc = { .ptr = desc->hw_desc, };
|
||||||
BUG_ON(hw_desc.dma->next_desc);
|
|
||||||
|
iop_paranoia(hw_desc.dma->next_desc);
|
||||||
hw_desc.dma->next_desc = next_desc_addr;
|
hw_desc.dma->next_desc = next_desc_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,7 +761,7 @@ static inline int iop_desc_get_zero_result(struct iop_adma_desc_slot *desc)
|
||||||
struct iop3xx_desc_aau *hw_desc = desc->hw_desc;
|
struct iop3xx_desc_aau *hw_desc = desc->hw_desc;
|
||||||
struct iop3xx_aau_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field;
|
struct iop3xx_aau_desc_ctrl desc_ctrl = hw_desc->desc_ctrl_field;
|
||||||
|
|
||||||
BUG_ON(!(desc_ctrl.tx_complete && desc_ctrl.zero_result_en));
|
iop_paranoia(!(desc_ctrl.tx_complete && desc_ctrl.zero_result_en));
|
||||||
return desc_ctrl.zero_result_err;
|
return desc_ctrl.zero_result_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
|
|
||||||
#define IOP_ADMA_SLOT_SIZE 32
|
#define IOP_ADMA_SLOT_SIZE 32
|
||||||
#define IOP_ADMA_THRESHOLD 4
|
#define IOP_ADMA_THRESHOLD 4
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define IOP_PARANOIA 1
|
||||||
|
#else
|
||||||
|
#define IOP_PARANOIA 0
|
||||||
|
#endif
|
||||||
|
#define iop_paranoia(x) BUG_ON(IOP_PARANOIA && (x))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iop_adma_device - internal representation of an ADMA device
|
* struct iop_adma_device - internal representation of an ADMA device
|
||||||
|
|
|
@ -19,12 +19,13 @@ struct map_desc {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* types 0-3 are defined in asm/io.h */
|
/* types 0-3 are defined in asm/io.h */
|
||||||
#define MT_CACHECLEAN 4
|
#define MT_UNCACHED 4
|
||||||
#define MT_MINICLEAN 5
|
#define MT_CACHECLEAN 5
|
||||||
#define MT_LOW_VECTORS 6
|
#define MT_MINICLEAN 6
|
||||||
#define MT_HIGH_VECTORS 7
|
#define MT_LOW_VECTORS 7
|
||||||
#define MT_MEMORY 8
|
#define MT_HIGH_VECTORS 8
|
||||||
#define MT_ROM 9
|
#define MT_MEMORY 9
|
||||||
|
#define MT_ROM 10
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
extern void iotable_init(struct map_desc *, int);
|
extern void iotable_init(struct map_desc *, int);
|
||||||
|
|
|
@ -44,10 +44,10 @@
|
||||||
* The module space lives between the addresses given by TASK_SIZE
|
* The module space lives between the addresses given by TASK_SIZE
|
||||||
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
|
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
|
||||||
*/
|
*/
|
||||||
#define MODULE_END (PAGE_OFFSET)
|
#define MODULES_END (PAGE_OFFSET)
|
||||||
#define MODULE_START (MODULE_END - 16*1048576)
|
#define MODULES_VADDR (MODULES_END - 16*1048576)
|
||||||
|
|
||||||
#if TASK_SIZE > MODULE_START
|
#if TASK_SIZE > MODULES_VADDR
|
||||||
#error Top of user space clashes with start of module space
|
#error Top of user space clashes with start of module space
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
* Since we use sections to map it, this macro replaces the physical address
|
* Since we use sections to map it, this macro replaces the physical address
|
||||||
* with its virtual address while keeping offset from the base section.
|
* with its virtual address while keeping offset from the base section.
|
||||||
*/
|
*/
|
||||||
#define XIP_VIRT_ADDR(physaddr) (MODULE_START + ((physaddr) & 0x000fffff))
|
#define XIP_VIRT_ADDR(physaddr) (MODULES_VADDR + ((physaddr) & 0x000fffff))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allow 16MB-aligned ioremap pages
|
* Allow 16MB-aligned ioremap pages
|
||||||
|
@ -94,8 +94,8 @@
|
||||||
/*
|
/*
|
||||||
* The module can be at any place in ram in nommu mode.
|
* The module can be at any place in ram in nommu mode.
|
||||||
*/
|
*/
|
||||||
#define MODULE_END (END_MEM)
|
#define MODULES_END (END_MEM)
|
||||||
#define MODULE_START (PHYS_OFFSET)
|
#define MODULES_VADDR (PHYS_OFFSET)
|
||||||
|
|
||||||
#endif /* !CONFIG_MMU */
|
#endif /* !CONFIG_MMU */
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,10 @@
|
||||||
#define CR_U (1 << 22) /* Unaligned access operation */
|
#define CR_U (1 << 22) /* Unaligned access operation */
|
||||||
#define CR_XP (1 << 23) /* Extended page tables */
|
#define CR_XP (1 << 23) /* Extended page tables */
|
||||||
#define CR_VE (1 << 24) /* Vectored interrupts */
|
#define CR_VE (1 << 24) /* Vectored interrupts */
|
||||||
|
#define CR_EE (1 << 25) /* Exception (Big) Endian */
|
||||||
|
#define CR_TRE (1 << 28) /* TEX remap enable */
|
||||||
|
#define CR_AFE (1 << 29) /* Access flag enable */
|
||||||
|
#define CR_TE (1 << 30) /* Thumb exception enable */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used to ensure the compiler did actually allocate the register we
|
* This is used to ensure the compiler did actually allocate the register we
|
||||||
|
|
|
@ -21,12 +21,16 @@ int elf_check_arch(const struct elf32_hdr *x)
|
||||||
|
|
||||||
eflags = x->e_flags;
|
eflags = x->e_flags;
|
||||||
if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) {
|
if ((eflags & EF_ARM_EABI_MASK) == EF_ARM_EABI_UNKNOWN) {
|
||||||
|
unsigned int flt_fmt;
|
||||||
|
|
||||||
/* APCS26 is only allowed if the CPU supports it */
|
/* APCS26 is only allowed if the CPU supports it */
|
||||||
if ((eflags & EF_ARM_APCS_26) && !(elf_hwcap & HWCAP_26BIT))
|
if ((eflags & EF_ARM_APCS_26) && !(elf_hwcap & HWCAP_26BIT))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
flt_fmt = eflags & (EF_ARM_VFP_FLOAT | EF_ARM_SOFT_FLOAT);
|
||||||
|
|
||||||
/* VFP requires the supporting code */
|
/* VFP requires the supporting code */
|
||||||
if ((eflags & EF_ARM_VFP_FLOAT) && !(elf_hwcap & HWCAP_VFP))
|
if (flt_fmt == EF_ARM_VFP_FLOAT && !(elf_hwcap & HWCAP_VFP))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -26,12 +26,12 @@
|
||||||
/*
|
/*
|
||||||
* The XIP kernel text is mapped in the module area for modules and
|
* The XIP kernel text is mapped in the module area for modules and
|
||||||
* some other stuff to work without any indirect relocations.
|
* some other stuff to work without any indirect relocations.
|
||||||
* MODULE_START is redefined here and not in asm/memory.h to avoid
|
* MODULES_VADDR is redefined here and not in asm/memory.h to avoid
|
||||||
* recompiling the whole kernel when CONFIG_XIP_KERNEL is turned on/off.
|
* recompiling the whole kernel when CONFIG_XIP_KERNEL is turned on/off.
|
||||||
*/
|
*/
|
||||||
extern void _etext;
|
extern void _etext;
|
||||||
#undef MODULE_START
|
#undef MODULES_VADDR
|
||||||
#define MODULE_START (((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK)
|
#define MODULES_VADDR (((unsigned long)&_etext + ~PGDIR_MASK) & PGDIR_MASK)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
@ -43,7 +43,7 @@ void *module_alloc(unsigned long size)
|
||||||
if (!size)
|
if (!size)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
area = __get_vm_area(size, VM_ALLOC, MODULE_START, MODULE_END);
|
area = __get_vm_area(size, VM_ALLOC, MODULES_VADDR, MODULES_END);
|
||||||
if (!area)
|
if (!area)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -94,20 +94,6 @@
|
||||||
#include <asm/hardware/ep7212.h>
|
#include <asm/hardware/ep7212.h>
|
||||||
#include <asm/hardware/cs89712.h>
|
#include <asm/hardware/cs89712.h>
|
||||||
|
|
||||||
/* dynamic ioremap() areas */
|
|
||||||
#define FLASH_START 0x00000000
|
|
||||||
#define FLASH_SIZE 0x800000
|
|
||||||
#define FLASH_WIDTH 4
|
|
||||||
|
|
||||||
#define SRAM_START 0x60000000
|
|
||||||
#define SRAM_SIZE 0xc000
|
|
||||||
#define SRAM_WIDTH 4
|
|
||||||
|
|
||||||
#define BOOTROM_START 0x70000000
|
|
||||||
#define BOOTROM_SIZE 0x80
|
|
||||||
#define BOOTROM_WIDTH 4
|
|
||||||
|
|
||||||
|
|
||||||
/* static cdb89712_map_io() areas */
|
/* static cdb89712_map_io() areas */
|
||||||
#define REGISTER_START 0x80000000
|
#define REGISTER_START 0x80000000
|
||||||
#define REGISTER_SIZE 0x4000
|
#define REGISTER_SIZE 0x4000
|
||||||
|
@ -198,14 +184,6 @@
|
||||||
#define CEIVA_FLASH_SIZE 0x100000
|
#define CEIVA_FLASH_SIZE 0x100000
|
||||||
#define CEIVA_FLASH_WIDTH 2
|
#define CEIVA_FLASH_WIDTH 2
|
||||||
|
|
||||||
#define SRAM_START 0x60000000
|
|
||||||
#define SRAM_SIZE 0xc000
|
|
||||||
#define SRAM_WIDTH 4
|
|
||||||
|
|
||||||
#define BOOTROM_START 0x70000000
|
|
||||||
#define BOOTROM_SIZE 0x80
|
|
||||||
#define BOOTROM_WIDTH 4
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SED1355 LCD controller
|
* SED1355 LCD controller
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -275,9 +275,9 @@ static struct map_desc cl7500_io_desc[] __initdata = {
|
||||||
.length = ISA_SIZE,
|
.length = ISA_SIZE,
|
||||||
.type = MT_DEVICE
|
.type = MT_DEVICE
|
||||||
}, { /* Flash */
|
}, { /* Flash */
|
||||||
.virtual = FLASH_BASE,
|
.virtual = CLPS7500_FLASH_BASE,
|
||||||
.pfn = __phys_to_pfn(FLASH_START),
|
.pfn = __phys_to_pfn(CLPS7500_FLASH_START),
|
||||||
.length = FLASH_SIZE,
|
.length = CLPS7500_FLASH_SIZE,
|
||||||
.type = MT_DEVICE
|
.type = MT_DEVICE
|
||||||
}, { /* LED */
|
}, { /* LED */
|
||||||
.virtual = LED_BASE,
|
.virtual = LED_BASE,
|
||||||
|
|
|
@ -39,9 +39,9 @@
|
||||||
#define ISA_SIZE 0x00010000
|
#define ISA_SIZE 0x00010000
|
||||||
#define ISA_BASE 0xe1000000
|
#define ISA_BASE 0xe1000000
|
||||||
|
|
||||||
#define FLASH_START 0x01000000 /* XXX */
|
#define CLPS7500_FLASH_START 0x01000000 /* XXX */
|
||||||
#define FLASH_SIZE 0x01000000
|
#define CLPS7500_FLASH_SIZE 0x01000000
|
||||||
#define FLASH_BASE 0xe2000000
|
#define CLPS7500_FLASH_BASE 0xe2000000
|
||||||
|
|
||||||
#define LED_START 0x0302B000
|
#define LED_START 0x0302B000
|
||||||
#define LED_SIZE 0x00001000
|
#define LED_SIZE 0x00001000
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
#ifdef CONFIG_ARCH_H7202
|
#ifdef CONFIG_ARCH_H7202
|
||||||
|
|
||||||
/* FLASH */
|
/* FLASH */
|
||||||
#define FLASH_VIRT 0xd0000000
|
#define H720X_FLASH_VIRT 0xd0000000
|
||||||
#define FLASH_PHYS 0x00000000
|
#define H720X_FLASH_PHYS 0x00000000
|
||||||
#define FLASH_SIZE 0x02000000
|
#define H720X_FLASH_SIZE 0x02000000
|
||||||
|
|
||||||
/* onboard LAN controller */
|
/* onboard LAN controller */
|
||||||
# define ETH0_PHYS 0x08000000
|
# define ETH0_PHYS 0x08000000
|
||||||
|
|
|
@ -407,28 +407,11 @@
|
||||||
*/
|
*/
|
||||||
#define uHAL_MEMORY_SIZE INTEGRATOR_SSRAM_SIZE
|
#define uHAL_MEMORY_SIZE INTEGRATOR_SSRAM_SIZE
|
||||||
|
|
||||||
/*
|
|
||||||
* Application Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define FLASH_BASE INTEGRATOR_FLASH_BASE
|
|
||||||
#define FLASH_SIZE INTEGRATOR_FLASH_SIZE
|
|
||||||
#define FLASH_END (FLASH_BASE + FLASH_SIZE - 1)
|
|
||||||
#define FLASH_BLOCK_SIZE SZ_128K
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Boot Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define EPROM_BASE INTEGRATOR_BOOT_ROM_HI
|
|
||||||
#define EPROM_SIZE INTEGRATOR_BOOT_ROM_SIZE
|
|
||||||
#define EPROM_END (EPROM_BASE + EPROM_SIZE - 1)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean base - dummy
|
* Clean base - dummy
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define CLEAN_BASE EPROM_BASE
|
#define CLEAN_BASE INTEGRATOR_BOOT_ROM_HI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timer definitions
|
* Timer definitions
|
||||||
|
|
|
@ -404,7 +404,8 @@ static inline void iop_desc_set_next_desc(struct iop_adma_desc_slot *desc,
|
||||||
u32 next_desc_addr)
|
u32 next_desc_addr)
|
||||||
{
|
{
|
||||||
struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
|
struct iop13xx_adma_desc_hw *hw_desc = desc->hw_desc;
|
||||||
BUG_ON(hw_desc->next_desc);
|
|
||||||
|
iop_paranoia(hw_desc->next_desc);
|
||||||
hw_desc->next_desc = next_desc_addr;
|
hw_desc->next_desc = next_desc_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -429,18 +429,16 @@ void __init gpmc_init(void)
|
||||||
gpmc_l3_clk = clk_get(NULL, ck);
|
gpmc_l3_clk = clk_get(NULL, ck);
|
||||||
if (IS_ERR(gpmc_l3_clk)) {
|
if (IS_ERR(gpmc_l3_clk)) {
|
||||||
printk(KERN_ERR "Could not get GPMC clock %s\n", ck);
|
printk(KERN_ERR "Could not get GPMC clock %s\n", ck);
|
||||||
return -ENODEV;
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
gpmc_base = ioremap(l, SZ_4K);
|
gpmc_base = ioremap(l, SZ_4K);
|
||||||
if (!gpmc_base) {
|
if (!gpmc_base) {
|
||||||
clk_put(gpmc_l3_clk);
|
clk_put(gpmc_l3_clk);
|
||||||
printk(KERN_ERR "Could not get GPMC register memory\n");
|
printk(KERN_ERR "Could not get GPMC register memory\n");
|
||||||
return -ENOMEM;
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
BUG_ON(IS_ERR(gpmc_l3_clk));
|
|
||||||
|
|
||||||
l = gpmc_read_reg(GPMC_REVISION);
|
l = gpmc_read_reg(GPMC_REVISION);
|
||||||
printk(KERN_INFO "GPMC revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
|
printk(KERN_INFO "GPMC revision %d.%d\n", (l >> 4) & 0x0f, l & 0x0f);
|
||||||
/* Set smart idle mode and automatic L3 clock gating */
|
/* Set smart idle mode and automatic L3 clock gating */
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#define LCD_CONN_TYPE(_x) ((_x) & 0x0f)
|
#define LCD_CONN_TYPE(_x) ((_x) & 0x0f)
|
||||||
#define LCD_CONN_WIDTH(_x) (((_x) >> 4) & 0x1f)
|
#define LCD_CONN_WIDTH(_x) (((_x) >> 4) & 0x1f)
|
||||||
|
|
||||||
|
#define LCD_TYPE_MASK 0xf
|
||||||
#define LCD_TYPE_UNKNOWN 0
|
#define LCD_TYPE_UNKNOWN 0
|
||||||
#define LCD_TYPE_MONO_STN 1
|
#define LCD_TYPE_MONO_STN 1
|
||||||
#define LCD_TYPE_MONO_DSTN 2
|
#define LCD_TYPE_MONO_DSTN 2
|
||||||
|
|
|
@ -90,12 +90,13 @@ void arch_reset(char mode)
|
||||||
/* Jump into ROM at address 0 */
|
/* Jump into ROM at address 0 */
|
||||||
cpu_reset(0);
|
cpu_reset(0);
|
||||||
break;
|
break;
|
||||||
case 'h':
|
|
||||||
do_hw_reset();
|
|
||||||
break;
|
|
||||||
case 'g':
|
case 'g':
|
||||||
do_gpio_reset();
|
do_gpio_reset();
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
default:
|
||||||
|
do_hw_reset();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
static unsigned long spitz_pin_config[] __initdata = {
|
static unsigned long spitz_pin_config[] __initdata = {
|
||||||
/* Chip Selects */
|
/* Chip Selects */
|
||||||
GPIO78_nCS_2, /* SCOOP #2 */
|
GPIO78_nCS_2, /* SCOOP #2 */
|
||||||
|
GPIO79_nCS_3, /* NAND */
|
||||||
GPIO80_nCS_4, /* SCOOP #1 */
|
GPIO80_nCS_4, /* SCOOP #1 */
|
||||||
|
|
||||||
/* LCD - 16bpp Active TFT */
|
/* LCD - 16bpp Active TFT */
|
||||||
|
@ -97,10 +98,10 @@ static unsigned long spitz_pin_config[] __initdata = {
|
||||||
GPIO51_nPIOW,
|
GPIO51_nPIOW,
|
||||||
GPIO85_nPCE_1,
|
GPIO85_nPCE_1,
|
||||||
GPIO54_nPCE_2,
|
GPIO54_nPCE_2,
|
||||||
GPIO79_PSKTSEL,
|
|
||||||
GPIO55_nPREG,
|
GPIO55_nPREG,
|
||||||
GPIO56_nPWAIT,
|
GPIO56_nPWAIT,
|
||||||
GPIO57_nIOIS16,
|
GPIO57_nIOIS16,
|
||||||
|
GPIO104_PSKTSEL,
|
||||||
|
|
||||||
/* MMC */
|
/* MMC */
|
||||||
GPIO32_MMC_CLK,
|
GPIO32_MMC_CLK,
|
||||||
|
@ -686,7 +687,6 @@ static void __init akita_init(void)
|
||||||
spitz_pcmcia_config.num_devs = 1;
|
spitz_pcmcia_config.num_devs = 1;
|
||||||
platform_scoop_config = &spitz_pcmcia_config;
|
platform_scoop_config = &spitz_pcmcia_config;
|
||||||
|
|
||||||
pxa_set_i2c_info(NULL);
|
|
||||||
i2c_register_board_info(0, ARRAY_AND_SIZE(akita_i2c_board_info));
|
i2c_register_board_info(0, ARRAY_AND_SIZE(akita_i2c_board_info));
|
||||||
|
|
||||||
common_init();
|
common_init();
|
||||||
|
|
|
@ -104,7 +104,7 @@ static struct clk uart_clk = {
|
||||||
|
|
||||||
static struct clk mmci_clk = {
|
static struct clk mmci_clk = {
|
||||||
.name = "MCLK",
|
.name = "MCLK",
|
||||||
.rate = 33000000,
|
.rate = 24000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
int clk_register(struct clk *clk)
|
int clk_register(struct clk *clk)
|
||||||
|
|
|
@ -238,28 +238,11 @@
|
||||||
#define REALVIEW_INTREG_OFFSET 0x8 /* Interrupt control */
|
#define REALVIEW_INTREG_OFFSET 0x8 /* Interrupt control */
|
||||||
#define REALVIEW_DECODE_OFFSET 0xC /* Fitted logic modules */
|
#define REALVIEW_DECODE_OFFSET 0xC /* Fitted logic modules */
|
||||||
|
|
||||||
/*
|
|
||||||
* Application Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define FLASH_BASE REALVIEW_FLASH_BASE
|
|
||||||
#define FLASH_SIZE REALVIEW_FLASH_SIZE
|
|
||||||
#define FLASH_END (FLASH_BASE + FLASH_SIZE - 1)
|
|
||||||
#define FLASH_BLOCK_SIZE SZ_128K
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Boot Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define EPROM_BASE REALVIEW_BOOT_ROM_HI
|
|
||||||
#define EPROM_SIZE REALVIEW_BOOT_ROM_SIZE
|
|
||||||
#define EPROM_END (EPROM_BASE + EPROM_SIZE - 1)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean base - dummy
|
* Clean base - dummy
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define CLEAN_BASE EPROM_BASE
|
#define CLEAN_BASE REALVIEW_BOOT_ROM_HI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System controller bit assignment
|
* System controller bit assignment
|
||||||
|
|
|
@ -105,7 +105,7 @@ static struct clk uart_clk = {
|
||||||
|
|
||||||
static struct clk mmci_clk = {
|
static struct clk mmci_clk = {
|
||||||
.name = "MCLK",
|
.name = "MCLK",
|
||||||
.rate = 33000000,
|
.rate = 24000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
int clk_register(struct clk *clk)
|
int clk_register(struct clk *clk)
|
||||||
|
|
|
@ -436,28 +436,12 @@
|
||||||
#define SIC_INTMASK_PCI1 (1 << SIC_INT_PCI1)
|
#define SIC_INTMASK_PCI1 (1 << SIC_INT_PCI1)
|
||||||
#define SIC_INTMASK_PCI2 (1 << SIC_INT_PCI2)
|
#define SIC_INTMASK_PCI2 (1 << SIC_INT_PCI2)
|
||||||
#define SIC_INTMASK_PCI3 (1 << SIC_INT_PCI3)
|
#define SIC_INTMASK_PCI3 (1 << SIC_INT_PCI3)
|
||||||
/*
|
|
||||||
* Application Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define FLASH_BASE VERSATILE_FLASH_BASE
|
|
||||||
#define FLASH_SIZE VERSATILE_FLASH_SIZE
|
|
||||||
#define FLASH_END (FLASH_BASE + FLASH_SIZE - 1)
|
|
||||||
#define FLASH_BLOCK_SIZE SZ_128K
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Boot Flash
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define EPROM_BASE VERSATILE_BOOT_ROM_HI
|
|
||||||
#define EPROM_SIZE VERSATILE_BOOT_ROM_SIZE
|
|
||||||
#define EPROM_END (EPROM_BASE + EPROM_SIZE - 1)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean base - dummy
|
* Clean base - dummy
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define CLEAN_BASE EPROM_BASE
|
#define CLEAN_BASE VERSATILE_BOOT_ROM_HI
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System controller bit assignment
|
* System controller bit assignment
|
||||||
|
|
|
@ -150,7 +150,7 @@ static void feroceon_l2_inv_range(unsigned long start, unsigned long end)
|
||||||
/*
|
/*
|
||||||
* Clean and invalidate partial last cache line.
|
* Clean and invalidate partial last cache line.
|
||||||
*/
|
*/
|
||||||
if (end & (CACHE_LINE_SIZE - 1)) {
|
if (start < end && end & (CACHE_LINE_SIZE - 1)) {
|
||||||
l2_clean_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
|
l2_clean_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
|
||||||
end &= ~(CACHE_LINE_SIZE - 1);
|
end &= ~(CACHE_LINE_SIZE - 1);
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ static void feroceon_l2_inv_range(unsigned long start, unsigned long end)
|
||||||
/*
|
/*
|
||||||
* Invalidate all full cache lines between 'start' and 'end'.
|
* Invalidate all full cache lines between 'start' and 'end'.
|
||||||
*/
|
*/
|
||||||
while (start != end) {
|
while (start < end) {
|
||||||
unsigned long range_end = calc_range_end(start, end);
|
unsigned long range_end = calc_range_end(start, end);
|
||||||
l2_inv_pa_range(start, range_end - CACHE_LINE_SIZE);
|
l2_inv_pa_range(start, range_end - CACHE_LINE_SIZE);
|
||||||
start = range_end;
|
start = range_end;
|
||||||
|
|
|
@ -98,7 +98,7 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
|
||||||
/*
|
/*
|
||||||
* Clean and invalidate partial last cache line.
|
* Clean and invalidate partial last cache line.
|
||||||
*/
|
*/
|
||||||
if (end & (CACHE_LINE_SIZE - 1)) {
|
if (start < end && (end & (CACHE_LINE_SIZE - 1))) {
|
||||||
xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1));
|
xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1));
|
||||||
xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
|
xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1));
|
||||||
end &= ~(CACHE_LINE_SIZE - 1);
|
end &= ~(CACHE_LINE_SIZE - 1);
|
||||||
|
@ -107,7 +107,7 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
|
||||||
/*
|
/*
|
||||||
* Invalidate all full cache lines between 'start' and 'end'.
|
* Invalidate all full cache lines between 'start' and 'end'.
|
||||||
*/
|
*/
|
||||||
while (start != end) {
|
while (start < end) {
|
||||||
xsc3_l2_inv_pa(start);
|
xsc3_l2_inv_pa(start);
|
||||||
start += CACHE_LINE_SIZE;
|
start += CACHE_LINE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,20 +180,20 @@ void adjust_cr(unsigned long mask, unsigned long set)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE
|
#define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_WRITE
|
||||||
#define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_XN|PMD_SECT_AP_WRITE
|
#define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE
|
||||||
|
|
||||||
static struct mem_type mem_types[] = {
|
static struct mem_type mem_types[] = {
|
||||||
[MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */
|
[MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */
|
||||||
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
|
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
|
||||||
L_PTE_SHARED,
|
L_PTE_SHARED,
|
||||||
.prot_l1 = PMD_TYPE_TABLE,
|
.prot_l1 = PMD_TYPE_TABLE,
|
||||||
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_UNCACHED,
|
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_S,
|
||||||
.domain = DOMAIN_IO,
|
.domain = DOMAIN_IO,
|
||||||
},
|
},
|
||||||
[MT_DEVICE_NONSHARED] = { /* ARMv6 non-shared device */
|
[MT_DEVICE_NONSHARED] = { /* ARMv6 non-shared device */
|
||||||
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_NONSHARED,
|
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_NONSHARED,
|
||||||
.prot_l1 = PMD_TYPE_TABLE,
|
.prot_l1 = PMD_TYPE_TABLE,
|
||||||
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_TEX(2),
|
.prot_sect = PROT_SECT_DEVICE,
|
||||||
.domain = DOMAIN_IO,
|
.domain = DOMAIN_IO,
|
||||||
},
|
},
|
||||||
[MT_DEVICE_CACHED] = { /* ioremap_cached */
|
[MT_DEVICE_CACHED] = { /* ioremap_cached */
|
||||||
|
@ -205,7 +205,13 @@ static struct mem_type mem_types[] = {
|
||||||
[MT_DEVICE_WC] = { /* ioremap_wc */
|
[MT_DEVICE_WC] = { /* ioremap_wc */
|
||||||
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_WC,
|
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_WC,
|
||||||
.prot_l1 = PMD_TYPE_TABLE,
|
.prot_l1 = PMD_TYPE_TABLE,
|
||||||
.prot_sect = PROT_SECT_DEVICE | PMD_SECT_BUFFERABLE,
|
.prot_sect = PROT_SECT_DEVICE,
|
||||||
|
.domain = DOMAIN_IO,
|
||||||
|
},
|
||||||
|
[MT_UNCACHED] = {
|
||||||
|
.prot_pte = PROT_PTE_DEVICE,
|
||||||
|
.prot_l1 = PMD_TYPE_TABLE,
|
||||||
|
.prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
|
||||||
.domain = DOMAIN_IO,
|
.domain = DOMAIN_IO,
|
||||||
},
|
},
|
||||||
[MT_CACHECLEAN] = {
|
[MT_CACHECLEAN] = {
|
||||||
|
@ -273,22 +279,23 @@ static void __init build_mem_type_table(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On non-Xscale3 ARMv5-and-older systems, use CB=01
|
* Strip out features not present on earlier architectures.
|
||||||
* (Uncached/Buffered) for ioremap_wc() mappings. On XScale3
|
* Pre-ARMv5 CPUs don't have TEX bits. Pre-ARMv6 CPUs or those
|
||||||
* and ARMv6+, use TEXCB=00100 mappings (Inner/Outer Uncacheable
|
* without extended page tables don't have the 'Shared' bit.
|
||||||
* in xsc3 parlance, Uncached Normal in ARMv6 parlance).
|
|
||||||
*/
|
*/
|
||||||
if (cpu_is_xsc3() || cpu_arch >= CPU_ARCH_ARMv6) {
|
if (cpu_arch < CPU_ARCH_ARMv5)
|
||||||
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
|
for (i = 0; i < ARRAY_SIZE(mem_types); i++)
|
||||||
mem_types[MT_DEVICE_WC].prot_sect &= ~PMD_SECT_BUFFERABLE;
|
mem_types[i].prot_sect &= ~PMD_SECT_TEX(7);
|
||||||
}
|
if ((cpu_arch < CPU_ARCH_ARMv6 || !(cr & CR_XP)) && !cpu_is_xsc3())
|
||||||
|
for (i = 0; i < ARRAY_SIZE(mem_types); i++)
|
||||||
|
mem_types[i].prot_sect &= ~PMD_SECT_S;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ARMv5 and lower, bit 4 must be set for page tables.
|
* ARMv5 and lower, bit 4 must be set for page tables (was: cache
|
||||||
* (was: cache "update-able on write" bit on ARM610)
|
* "update-able on write" bit on ARM610). However, Xscale and
|
||||||
* However, Xscale cores require this bit to be cleared.
|
* Xscale3 require this bit to be cleared.
|
||||||
*/
|
*/
|
||||||
if (cpu_is_xscale()) {
|
if (cpu_is_xscale() || cpu_is_xsc3()) {
|
||||||
for (i = 0; i < ARRAY_SIZE(mem_types); i++) {
|
for (i = 0; i < ARRAY_SIZE(mem_types); i++) {
|
||||||
mem_types[i].prot_sect &= ~PMD_BIT4;
|
mem_types[i].prot_sect &= ~PMD_BIT4;
|
||||||
mem_types[i].prot_l1 &= ~PMD_BIT4;
|
mem_types[i].prot_l1 &= ~PMD_BIT4;
|
||||||
|
@ -302,6 +309,64 @@ static void __init build_mem_type_table(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mark the device areas according to the CPU/architecture.
|
||||||
|
*/
|
||||||
|
if (cpu_is_xsc3() || (cpu_arch >= CPU_ARCH_ARMv6 && (cr & CR_XP))) {
|
||||||
|
if (!cpu_is_xsc3()) {
|
||||||
|
/*
|
||||||
|
* Mark device regions on ARMv6+ as execute-never
|
||||||
|
* to prevent speculative instruction fetches.
|
||||||
|
*/
|
||||||
|
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_XN;
|
||||||
|
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_XN;
|
||||||
|
mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_XN;
|
||||||
|
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_XN;
|
||||||
|
}
|
||||||
|
if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) {
|
||||||
|
/*
|
||||||
|
* For ARMv7 with TEX remapping,
|
||||||
|
* - shared device is SXCB=1100
|
||||||
|
* - nonshared device is SXCB=0100
|
||||||
|
* - write combine device mem is SXCB=0001
|
||||||
|
* (Uncached Normal memory)
|
||||||
|
*/
|
||||||
|
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_TEX(1);
|
||||||
|
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(1);
|
||||||
|
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_BUFFERABLE;
|
||||||
|
} else if (cpu_is_xsc3()) {
|
||||||
|
/*
|
||||||
|
* For Xscale3,
|
||||||
|
* - shared device is TEXCB=00101
|
||||||
|
* - nonshared device is TEXCB=01000
|
||||||
|
* - write combine device mem is TEXCB=00100
|
||||||
|
* (Inner/Outer Uncacheable in xsc3 parlance)
|
||||||
|
*/
|
||||||
|
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_TEX(1) | PMD_SECT_BUFFERED;
|
||||||
|
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(2);
|
||||||
|
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* For ARMv6 and ARMv7 without TEX remapping,
|
||||||
|
* - shared device is TEXCB=00001
|
||||||
|
* - nonshared device is TEXCB=01000
|
||||||
|
* - write combine device mem is TEXCB=00100
|
||||||
|
* (Uncached Normal in ARMv6 parlance).
|
||||||
|
*/
|
||||||
|
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED;
|
||||||
|
mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_TEX(2);
|
||||||
|
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_TEX(1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* On others, write combining is "Uncached/Buffered"
|
||||||
|
*/
|
||||||
|
mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_BUFFERABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now deal with the memory-type mappings
|
||||||
|
*/
|
||||||
cp = &cache_policies[cachepolicy];
|
cp = &cache_policies[cachepolicy];
|
||||||
vecs_pgprot = kern_pgprot = user_pgprot = cp->pte;
|
vecs_pgprot = kern_pgprot = user_pgprot = cp->pte;
|
||||||
|
|
||||||
|
@ -317,12 +382,8 @@ static void __init build_mem_type_table(void)
|
||||||
* Enable CPU-specific coherency if supported.
|
* Enable CPU-specific coherency if supported.
|
||||||
* (Only available on XSC3 at the moment.)
|
* (Only available on XSC3 at the moment.)
|
||||||
*/
|
*/
|
||||||
if (arch_is_coherent()) {
|
if (arch_is_coherent() && cpu_is_xsc3())
|
||||||
if (cpu_is_xsc3()) {
|
|
||||||
mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
|
mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
|
||||||
mem_types[MT_MEMORY].prot_pte |= L_PTE_SHARED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ARMv6 and above have extended page tables.
|
* ARMv6 and above have extended page tables.
|
||||||
|
@ -336,11 +397,6 @@ static void __init build_mem_type_table(void)
|
||||||
mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
|
mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
|
||||||
mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
|
mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
|
||||||
|
|
||||||
/*
|
|
||||||
* Mark the device area as "shared device"
|
|
||||||
*/
|
|
||||||
mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
* Mark memory with the "shared" attribute for SMP systems
|
* Mark memory with the "shared" attribute for SMP systems
|
||||||
|
@ -360,9 +416,6 @@ static void __init build_mem_type_table(void)
|
||||||
mem_types[MT_LOW_VECTORS].prot_pte |= vecs_pgprot;
|
mem_types[MT_LOW_VECTORS].prot_pte |= vecs_pgprot;
|
||||||
mem_types[MT_HIGH_VECTORS].prot_pte |= vecs_pgprot;
|
mem_types[MT_HIGH_VECTORS].prot_pte |= vecs_pgprot;
|
||||||
|
|
||||||
if (cpu_arch < CPU_ARCH_ARMv5)
|
|
||||||
mem_types[MT_MINICLEAN].prot_sect &= ~PMD_SECT_TEX(1);
|
|
||||||
|
|
||||||
pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot);
|
pgprot_user = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | user_pgprot);
|
||||||
pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG |
|
pgprot_kernel = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG |
|
||||||
L_PTE_DIRTY | L_PTE_WRITE |
|
L_PTE_DIRTY | L_PTE_WRITE |
|
||||||
|
@ -654,7 +707,7 @@ static inline void prepare_page_table(struct meminfo *mi)
|
||||||
/*
|
/*
|
||||||
* Clear out all the mappings below the kernel image.
|
* Clear out all the mappings below the kernel image.
|
||||||
*/
|
*/
|
||||||
for (addr = 0; addr < MODULE_START; addr += PGDIR_SIZE)
|
for (addr = 0; addr < MODULES_VADDR; addr += PGDIR_SIZE)
|
||||||
pmd_clear(pmd_off_k(addr));
|
pmd_clear(pmd_off_k(addr));
|
||||||
|
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
|
@ -766,7 +819,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc)
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK);
|
map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK);
|
||||||
map.virtual = MODULE_START;
|
map.virtual = MODULES_VADDR;
|
||||||
map.length = ((unsigned long)&_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;
|
map.length = ((unsigned long)&_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;
|
||||||
map.type = MT_ROM;
|
map.type = MT_ROM;
|
||||||
create_mapping(&map);
|
create_mapping(&map);
|
||||||
|
|
|
@ -115,7 +115,7 @@ ENTRY(cpu_v7_set_pte_ext)
|
||||||
orr r3, r3, r2
|
orr r3, r3, r2
|
||||||
orr r3, r3, #PTE_EXT_AP0 | 2
|
orr r3, r3, #PTE_EXT_AP0 | 2
|
||||||
|
|
||||||
tst r2, #1 << 4
|
tst r1, #1 << 4
|
||||||
orrne r3, r3, #PTE_EXT_TEX(1)
|
orrne r3, r3, #PTE_EXT_TEX(1)
|
||||||
|
|
||||||
tst r1, #L_PTE_WRITE
|
tst r1, #L_PTE_WRITE
|
||||||
|
@ -192,11 +192,11 @@ __v7_setup:
|
||||||
mov pc, lr @ return to head.S:__ret
|
mov pc, lr @ return to head.S:__ret
|
||||||
ENDPROC(__v7_setup)
|
ENDPROC(__v7_setup)
|
||||||
|
|
||||||
/*
|
/* AT
|
||||||
* V X F I D LR
|
* TFR EV X F I D LR
|
||||||
* .... ...E PUI. .T.T 4RVI ZFRS BLDP WCAM
|
* .EEE ..EE PUI. .T.T 4RVI ZFRS BLDP WCAM
|
||||||
* rrrr rrrx xxx0 0101 xxxx xxxx x111 xxxx < forced
|
* rxxx rrxx xxx0 0101 xxxx xxxx x111 xxxx < forced
|
||||||
* 0 110 0011 1.00 .111 1101 < we want
|
* 1 0 110 0011 1.00 .111 1101 < we want
|
||||||
*/
|
*/
|
||||||
.type v7_crval, #object
|
.type v7_crval, #object
|
||||||
v7_crval:
|
v7_crval:
|
||||||
|
|
|
@ -16,14 +16,15 @@
|
||||||
#include <asm/hardware/iop3xx.h>
|
#include <asm/hardware/iop3xx.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Standard IO mapping for all IOP3xx based systems
|
* Standard IO mapping for all IOP3xx based systems. Note that
|
||||||
|
* the IOP3xx OCCDR must be mapped uncached and unbuffered.
|
||||||
*/
|
*/
|
||||||
static struct map_desc iop3xx_std_desc[] __initdata = {
|
static struct map_desc iop3xx_std_desc[] __initdata = {
|
||||||
{ /* mem mapped registers */
|
{ /* mem mapped registers */
|
||||||
.virtual = IOP3XX_PERIPHERAL_VIRT_BASE,
|
.virtual = IOP3XX_PERIPHERAL_VIRT_BASE,
|
||||||
.pfn = __phys_to_pfn(IOP3XX_PERIPHERAL_PHYS_BASE),
|
.pfn = __phys_to_pfn(IOP3XX_PERIPHERAL_PHYS_BASE),
|
||||||
.length = IOP3XX_PERIPHERAL_SIZE,
|
.length = IOP3XX_PERIPHERAL_SIZE,
|
||||||
.type = MT_DEVICE,
|
.type = MT_UNCACHED,
|
||||||
}, { /* PCI IO space */
|
}, { /* PCI IO space */
|
||||||
.virtual = IOP3XX_PCI_LOWER_IO_VA,
|
.virtual = IOP3XX_PCI_LOWER_IO_VA,
|
||||||
.pfn = __phys_to_pfn(IOP3XX_PCI_LOWER_IO_PA),
|
.pfn = __phys_to_pfn(IOP3XX_PCI_LOWER_IO_PA),
|
||||||
|
|
|
@ -428,23 +428,23 @@ static int clk_debugfs_register_one(struct clk *c)
|
||||||
if (c->id != 0)
|
if (c->id != 0)
|
||||||
sprintf(p, ":%d", c->id);
|
sprintf(p, ":%d", c->id);
|
||||||
d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root);
|
d = debugfs_create_dir(s, pa ? pa->dent : clk_debugfs_root);
|
||||||
if (IS_ERR(d))
|
if (!d)
|
||||||
return PTR_ERR(d);
|
return -ENOMEM;
|
||||||
c->dent = d;
|
c->dent = d;
|
||||||
|
|
||||||
d = debugfs_create_u8("usecount", S_IRUGO, c->dent, (u8 *)&c->usecount);
|
d = debugfs_create_u8("usecount", S_IRUGO, c->dent, (u8 *)&c->usecount);
|
||||||
if (IS_ERR(d)) {
|
if (!d) {
|
||||||
err = PTR_ERR(d);
|
err = -ENOMEM;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate);
|
d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate);
|
||||||
if (IS_ERR(d)) {
|
if (!d) {
|
||||||
err = PTR_ERR(d);
|
err = -ENOMEM;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags);
|
d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags);
|
||||||
if (IS_ERR(d)) {
|
if (!d) {
|
||||||
err = PTR_ERR(d);
|
err = -ENOMEM;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -483,8 +483,8 @@ static int __init clk_debugfs_init(void)
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
d = debugfs_create_dir("clock", NULL);
|
d = debugfs_create_dir("clock", NULL);
|
||||||
if (IS_ERR(d))
|
if (!d)
|
||||||
return PTR_ERR(d);
|
return -ENOMEM;
|
||||||
clk_debugfs_root = d;
|
clk_debugfs_root = d;
|
||||||
|
|
||||||
list_for_each_entry(c, &clocks, node) {
|
list_for_each_entry(c, &clocks, node) {
|
||||||
|
|
|
@ -65,7 +65,8 @@
|
||||||
#include <mach/omap34xx.h>
|
#include <mach/omap34xx.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt number */
|
#define INTCPS_SIR_IRQ_OFFSET 0x0040 /* Active interrupt offset */
|
||||||
|
#define ACTIVEIRQ_MASK 0x7f /* Active interrupt bits */
|
||||||
|
|
||||||
.macro disable_fiq
|
.macro disable_fiq
|
||||||
.endm
|
.endm
|
||||||
|
@ -88,6 +89,7 @@
|
||||||
cmp \irqnr, #0x0
|
cmp \irqnr, #0x0
|
||||||
2222:
|
2222:
|
||||||
ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
|
ldrne \irqnr, [\base, #INTCPS_SIR_IRQ_OFFSET]
|
||||||
|
and \irqnr, \irqnr, #ACTIVEIRQ_MASK /* Clear spurious bits */
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
|
@ -372,7 +372,7 @@
|
||||||
|
|
||||||
/* External TWL4030 gpio interrupts are optional */
|
/* External TWL4030 gpio interrupts are optional */
|
||||||
#define TWL4030_GPIO_IRQ_BASE TWL4030_PWR_IRQ_END
|
#define TWL4030_GPIO_IRQ_BASE TWL4030_PWR_IRQ_END
|
||||||
#ifdef CONFIG_TWL4030_GPIO
|
#ifdef CONFIG_GPIO_TWL4030
|
||||||
#define TWL4030_GPIO_NR_IRQS 18
|
#define TWL4030_GPIO_NR_IRQS 18
|
||||||
#else
|
#else
|
||||||
#define TWL4030_GPIO_NR_IRQS 0
|
#define TWL4030_GPIO_NR_IRQS 0
|
||||||
|
|
|
@ -101,7 +101,7 @@ extern u16 _bfin_swrst; /* shadow for Software Reset Register (SWRST) */
|
||||||
extern unsigned long _ramstart, _ramend, _rambase;
|
extern unsigned long _ramstart, _ramend, _rambase;
|
||||||
extern unsigned long memory_start, memory_end, physical_mem_end;
|
extern unsigned long memory_start, memory_end, physical_mem_end;
|
||||||
extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[],
|
extern char _stext_l1[], _etext_l1[], _sdata_l1[], _edata_l1[], _sbss_l1[],
|
||||||
_ebss_l1[], _l1_lma_start[], _sdata_b_l1[], _ebss_b_l1[],
|
_ebss_l1[], _l1_lma_start[], _sdata_b_l1[], _sbss_b_l1[], _ebss_b_l1[],
|
||||||
_stext_l2[], _etext_l2[], _sdata_l2[], _edata_l2[], _sbss_l2[],
|
_stext_l2[], _etext_l2[], _sdata_l2[], _edata_l2[], _sbss_l2[],
|
||||||
_ebss_l2[], _l2_lma_start[];
|
_ebss_l2[], _l2_lma_start[];
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,11 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
|
||||||
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
||||||
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
||||||
|
|
||||||
#define dma_mapping_error
|
static inline
|
||||||
|
int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map a single buffer of the indicated size for DMA in streaming mode.
|
* Map a single buffer of the indicated size for DMA in streaming mode.
|
||||||
|
|
|
@ -218,7 +218,7 @@ inline int check_gpio(unsigned gpio)
|
||||||
if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15
|
if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15
|
||||||
|| gpio == GPIO_PH14 || gpio == GPIO_PH15
|
|| gpio == GPIO_PH14 || gpio == GPIO_PH15
|
||||||
|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15
|
|| gpio == GPIO_PJ14 || gpio == GPIO_PJ15
|
||||||
|| gpio > MAX_BLACKFIN_GPIOS)
|
|| gpio >= MAX_BLACKFIN_GPIOS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,10 +188,11 @@ static struct cplb_desc cplb_data[] = {
|
||||||
|
|
||||||
static u16 __init lock_kernel_check(u32 start, u32 end)
|
static u16 __init lock_kernel_check(u32 start, u32 end)
|
||||||
{
|
{
|
||||||
if ((end <= (u32) _end && end >= (u32)_stext) ||
|
if (start >= (u32)_end || end <= (u32)_stext)
|
||||||
(start <= (u32) _end && start >= (u32)_stext))
|
|
||||||
return IN_KERNEL;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* This cplb block overlapped with kernel area. */
|
||||||
|
return IN_KERNEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned short __init
|
static unsigned short __init
|
||||||
|
|
|
@ -351,9 +351,14 @@ int _access_ok(unsigned long addr, unsigned long size)
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
#if L1_DATA_B_LENGTH != 0
|
#if L1_DATA_B_LENGTH != 0
|
||||||
if (addr >= L1_DATA_B_START
|
if (addr >= L1_DATA_B_START + (_ebss_b_l1 - _sdata_b_l1)
|
||||||
&& addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)
|
&& addr + size <= L1_DATA_B_START + L1_DATA_B_LENGTH)
|
||||||
return 1;
|
return 1;
|
||||||
|
#endif
|
||||||
|
#if L2_LENGTH != 0
|
||||||
|
if (addr >= L2_START + (_ebss_l2 - _stext_l2)
|
||||||
|
&& addr + size <= L2_START + L2_LENGTH)
|
||||||
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,23 +119,23 @@ void __init bfin_relocate_l1_mem(void)
|
||||||
/* Copy _stext_l1 to _etext_l1 to L1 instruction SRAM */
|
/* Copy _stext_l1 to _etext_l1 to L1 instruction SRAM */
|
||||||
dma_memcpy(_stext_l1, _l1_lma_start, l1_code_length);
|
dma_memcpy(_stext_l1, _l1_lma_start, l1_code_length);
|
||||||
|
|
||||||
l1_data_a_length = _ebss_l1 - _sdata_l1;
|
l1_data_a_length = _sbss_l1 - _sdata_l1;
|
||||||
if (l1_data_a_length > L1_DATA_A_LENGTH)
|
if (l1_data_a_length > L1_DATA_A_LENGTH)
|
||||||
panic("L1 Data SRAM Bank A Overflow\n");
|
panic("L1 Data SRAM Bank A Overflow\n");
|
||||||
|
|
||||||
/* Copy _sdata_l1 to _ebss_l1 to L1 data bank A SRAM */
|
/* Copy _sdata_l1 to _sbss_l1 to L1 data bank A SRAM */
|
||||||
dma_memcpy(_sdata_l1, _l1_lma_start + l1_code_length, l1_data_a_length);
|
dma_memcpy(_sdata_l1, _l1_lma_start + l1_code_length, l1_data_a_length);
|
||||||
|
|
||||||
l1_data_b_length = _ebss_b_l1 - _sdata_b_l1;
|
l1_data_b_length = _sbss_b_l1 - _sdata_b_l1;
|
||||||
if (l1_data_b_length > L1_DATA_B_LENGTH)
|
if (l1_data_b_length > L1_DATA_B_LENGTH)
|
||||||
panic("L1 Data SRAM Bank B Overflow\n");
|
panic("L1 Data SRAM Bank B Overflow\n");
|
||||||
|
|
||||||
/* Copy _sdata_b_l1 to _ebss_b_l1 to L1 data bank B SRAM */
|
/* Copy _sdata_b_l1 to _sbss_b_l1 to L1 data bank B SRAM */
|
||||||
dma_memcpy(_sdata_b_l1, _l1_lma_start + l1_code_length +
|
dma_memcpy(_sdata_b_l1, _l1_lma_start + l1_code_length +
|
||||||
l1_data_a_length, l1_data_b_length);
|
l1_data_a_length, l1_data_b_length);
|
||||||
|
|
||||||
if (L2_LENGTH != 0) {
|
if (L2_LENGTH != 0) {
|
||||||
l2_length = _ebss_l2 - _stext_l2;
|
l2_length = _sbss_l2 - _stext_l2;
|
||||||
if (l2_length > L2_LENGTH)
|
if (l2_length > L2_LENGTH)
|
||||||
panic("L2 SRAM Overflow\n");
|
panic("L2 SRAM Overflow\n");
|
||||||
|
|
||||||
|
@ -827,7 +827,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n",
|
printk(KERN_ERR "Warning: Compiled for Rev %d, but running on Rev %d\n",
|
||||||
bfin_compiled_revid(), bfin_revid());
|
bfin_compiled_revid(), bfin_revid());
|
||||||
}
|
}
|
||||||
if (bfin_revid() <= CONFIG_BF_REV_MIN || bfin_revid() > CONFIG_BF_REV_MAX)
|
if (bfin_revid() < CONFIG_BF_REV_MIN || bfin_revid() > CONFIG_BF_REV_MAX)
|
||||||
printk(KERN_ERR "Warning: Unsupported Chip Revision ADSP-%s Rev 0.%d detected\n",
|
printk(KERN_ERR "Warning: Unsupported Chip Revision ADSP-%s Rev 0.%d detected\n",
|
||||||
CPU, bfin_revid());
|
CPU, bfin_revid());
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_VERBOSE_DEBUG
|
#ifdef CONFIG_DEBUG_VERBOSE
|
||||||
#define verbose_printk(fmt, arg...) \
|
#define verbose_printk(fmt, arg...) \
|
||||||
printk(fmt, ##arg)
|
printk(fmt, ##arg)
|
||||||
#else
|
#else
|
||||||
|
@ -147,9 +147,12 @@ static void decode_address(char *buf, unsigned long address)
|
||||||
char *name = p->comm;
|
char *name = p->comm;
|
||||||
struct file *file = vma->vm_file;
|
struct file *file = vma->vm_file;
|
||||||
|
|
||||||
if (file)
|
if (file) {
|
||||||
name = d_path(&file->f_path, _tmpbuf,
|
char *d_name = d_path(&file->f_path, _tmpbuf,
|
||||||
sizeof(_tmpbuf));
|
sizeof(_tmpbuf));
|
||||||
|
if (!IS_ERR(d_name))
|
||||||
|
name = d_name;
|
||||||
|
}
|
||||||
|
|
||||||
/* FLAT does not have its text aligned to the start of
|
/* FLAT does not have its text aligned to the start of
|
||||||
* the map while FDPIC ELF does ...
|
* the map while FDPIC ELF does ...
|
||||||
|
@ -571,7 +574,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
||||||
#endif
|
#endif
|
||||||
panic("Kernel exception");
|
panic("Kernel exception");
|
||||||
} else {
|
} else {
|
||||||
#ifdef CONFIG_VERBOSE_DEBUG
|
#ifdef CONFIG_DEBUG_VERBOSE
|
||||||
unsigned long *stack;
|
unsigned long *stack;
|
||||||
/* Dump the user space stack */
|
/* Dump the user space stack */
|
||||||
stack = (unsigned long *)rdusp();
|
stack = (unsigned long *)rdusp();
|
||||||
|
|
|
@ -25,9 +25,13 @@
|
||||||
*/
|
*/
|
||||||
.macro do_flush flushins:req optflushins optnopins label
|
.macro do_flush flushins:req optflushins optnopins label
|
||||||
|
|
||||||
|
R2 = -L1_CACHE_BYTES;
|
||||||
|
|
||||||
|
/* start = (start & -L1_CACHE_BYTES) */
|
||||||
|
R0 = R0 & R2;
|
||||||
|
|
||||||
/* end = ((end - 1) & -L1_CACHE_BYTES) + L1_CACHE_BYTES; */
|
/* end = ((end - 1) & -L1_CACHE_BYTES) + L1_CACHE_BYTES; */
|
||||||
R1 += -1;
|
R1 += -1;
|
||||||
R2 = -L1_CACHE_BYTES;
|
|
||||||
R1 = R1 & R2;
|
R1 = R1 & R2;
|
||||||
R1 += L1_CACHE_BYTES;
|
R1 += L1_CACHE_BYTES;
|
||||||
|
|
||||||
|
@ -63,7 +67,7 @@ ENDPROC(_blackfin_icache_flush_range)
|
||||||
|
|
||||||
/* Flush all cache lines assocoiated with this area of memory. */
|
/* Flush all cache lines assocoiated with this area of memory. */
|
||||||
ENTRY(_blackfin_icache_dcache_flush_range)
|
ENTRY(_blackfin_icache_dcache_flush_range)
|
||||||
do_flush IFLUSH, FLUSH
|
do_flush FLUSH, IFLUSH
|
||||||
ENDPROC(_blackfin_icache_dcache_flush_range)
|
ENDPROC(_blackfin_icache_dcache_flush_range)
|
||||||
|
|
||||||
/* Throw away all D-cached data in specified region without any obligation to
|
/* Throw away all D-cached data in specified region without any obligation to
|
||||||
|
|
|
@ -72,13 +72,13 @@ unsigned int __bfin_cycles_mod;
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
static unsigned int bfin_getfreq(unsigned int cpu)
|
static unsigned int bfin_getfreq_khz(unsigned int cpu)
|
||||||
{
|
{
|
||||||
/* The driver only support single cpu */
|
/* The driver only support single cpu */
|
||||||
if (cpu != 0)
|
if (cpu != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return get_cclk();
|
return get_cclk() / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ static int bfin_target(struct cpufreq_policy *policy,
|
||||||
|
|
||||||
cclk_hz = bfin_freq_table[index].frequency;
|
cclk_hz = bfin_freq_table[index].frequency;
|
||||||
|
|
||||||
freqs.old = bfin_getfreq(0);
|
freqs.old = bfin_getfreq_khz(0);
|
||||||
freqs.new = cclk_hz;
|
freqs.new = cclk_hz;
|
||||||
freqs.cpu = 0;
|
freqs.cpu = 0;
|
||||||
|
|
||||||
|
@ -137,8 +137,8 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy)
|
||||||
if (policy->cpu != 0)
|
if (policy->cpu != 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
cclk = get_cclk();
|
cclk = get_cclk() / 1000;
|
||||||
sclk = get_sclk();
|
sclk = get_sclk() / 1000;
|
||||||
|
|
||||||
#if ANOMALY_05000273 || (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_DCACHE))
|
#if ANOMALY_05000273 || (!defined(CONFIG_BF54x) && defined(CONFIG_BFIN_DCACHE))
|
||||||
min_cclk = sclk * 2;
|
min_cclk = sclk * 2;
|
||||||
|
@ -152,7 +152,7 @@ static int __init __bfin_cpu_init(struct cpufreq_policy *policy)
|
||||||
dpm_state_table[index].csel = csel << 4; /* Shift now into PLL_DIV bitpos */
|
dpm_state_table[index].csel = csel << 4; /* Shift now into PLL_DIV bitpos */
|
||||||
dpm_state_table[index].tscale = (TIME_SCALE / (1 << csel)) - 1;
|
dpm_state_table[index].tscale = (TIME_SCALE / (1 << csel)) - 1;
|
||||||
|
|
||||||
pr_debug("cpufreq: freq:%d csel:%d tscale:%d\n",
|
pr_debug("cpufreq: freq:%d csel:0x%x tscale:%d\n",
|
||||||
bfin_freq_table[index].frequency,
|
bfin_freq_table[index].frequency,
|
||||||
dpm_state_table[index].csel,
|
dpm_state_table[index].csel,
|
||||||
dpm_state_table[index].tscale);
|
dpm_state_table[index].tscale);
|
||||||
|
@ -173,7 +173,7 @@ static struct freq_attr *bfin_freq_attr[] = {
|
||||||
static struct cpufreq_driver bfin_driver = {
|
static struct cpufreq_driver bfin_driver = {
|
||||||
.verify = bfin_verify_speed,
|
.verify = bfin_verify_speed,
|
||||||
.target = bfin_target,
|
.target = bfin_target,
|
||||||
.get = bfin_getfreq,
|
.get = bfin_getfreq_khz,
|
||||||
.init = __bfin_cpu_init,
|
.init = __bfin_cpu_init,
|
||||||
.name = "bfin cpufreq",
|
.name = "bfin cpufreq",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
|
|
@ -277,7 +277,7 @@ ENTRY(_bfin_return_from_exception)
|
||||||
p5.h = hi(ILAT);
|
p5.h = hi(ILAT);
|
||||||
r6 = [p5];
|
r6 = [p5];
|
||||||
r7 = 0x20; /* Did I just cause anther HW error? */
|
r7 = 0x20; /* Did I just cause anther HW error? */
|
||||||
r7 = r7 & r1;
|
r6 = r7 & r6;
|
||||||
CC = R7 == R6;
|
CC = R7 == R6;
|
||||||
if CC JUMP _double_fault;
|
if CC JUMP _double_fault;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -183,10 +183,10 @@ static void __init l2_sram_init(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_l2_sram_head.next->paddr = (void *)L2_START +
|
free_l2_sram_head.next->paddr =
|
||||||
(_etext_l2 - _stext_l2) + (_edata_l2 - _sdata_l2);
|
(void *)L2_START + (_ebss_l2 - _stext_l2);
|
||||||
free_l2_sram_head.next->size = L2_LENGTH -
|
free_l2_sram_head.next->size =
|
||||||
(_etext_l2 - _stext_l2) + (_edata_l2 - _sdata_l2);
|
L2_LENGTH - (_ebss_l2 - _stext_l2);
|
||||||
free_l2_sram_head.next->pid = 0;
|
free_l2_sram_head.next->pid = 0;
|
||||||
free_l2_sram_head.next->next = NULL;
|
free_l2_sram_head.next->next = NULL;
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ config IA64_GENERIC
|
||||||
select ACPI_NUMA
|
select ACPI_NUMA
|
||||||
select SWIOTLB
|
select SWIOTLB
|
||||||
select PCI_MSI
|
select PCI_MSI
|
||||||
|
select DMAR
|
||||||
help
|
help
|
||||||
This selects the system type of your hardware. A "generic" kernel
|
This selects the system type of your hardware. A "generic" kernel
|
||||||
will run on any supported IA-64 system. However, if you configure
|
will run on any supported IA-64 system. However, if you configure
|
||||||
|
@ -585,7 +586,7 @@ source "fs/Kconfig.binfmt"
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Power management and ACPI"
|
menu "Power management and ACPI options"
|
||||||
|
|
||||||
source "kernel/power/Kconfig"
|
source "kernel/power/Kconfig"
|
||||||
|
|
||||||
|
@ -641,6 +642,8 @@ source "net/Kconfig"
|
||||||
|
|
||||||
source "drivers/Kconfig"
|
source "drivers/Kconfig"
|
||||||
|
|
||||||
|
source "arch/ia64/hp/sim/Kconfig"
|
||||||
|
|
||||||
config MSPEC
|
config MSPEC
|
||||||
tristate "Memory special operations driver"
|
tristate "Memory special operations driver"
|
||||||
depends on IA64
|
depends on IA64
|
||||||
|
@ -652,6 +655,12 @@ config MSPEC
|
||||||
|
|
||||||
source "fs/Kconfig"
|
source "fs/Kconfig"
|
||||||
|
|
||||||
|
source "arch/ia64/Kconfig.debug"
|
||||||
|
|
||||||
|
source "security/Kconfig"
|
||||||
|
|
||||||
|
source "crypto/Kconfig"
|
||||||
|
|
||||||
source "arch/ia64/kvm/Kconfig"
|
source "arch/ia64/kvm/Kconfig"
|
||||||
|
|
||||||
source "lib/Kconfig"
|
source "lib/Kconfig"
|
||||||
|
@ -678,11 +687,3 @@ config IRQ_PER_CPU
|
||||||
|
|
||||||
config IOMMU_HELPER
|
config IOMMU_HELPER
|
||||||
def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB)
|
def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB)
|
||||||
|
|
||||||
source "arch/ia64/hp/sim/Kconfig"
|
|
||||||
|
|
||||||
source "arch/ia64/Kconfig.debug"
|
|
||||||
|
|
||||||
source "security/Kconfig"
|
|
||||||
|
|
||||||
source "crypto/Kconfig"
|
|
||||||
|
|
|
@ -13,19 +13,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/swiotlb.h>
|
||||||
|
|
||||||
#include <asm/machvec.h>
|
#include <asm/machvec.h>
|
||||||
|
|
||||||
/* swiotlb declarations & definitions: */
|
/* swiotlb declarations & definitions: */
|
||||||
extern int swiotlb_late_init_with_default_size (size_t size);
|
extern int swiotlb_late_init_with_default_size (size_t size);
|
||||||
extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent;
|
|
||||||
extern ia64_mv_dma_free_coherent swiotlb_free_coherent;
|
|
||||||
extern ia64_mv_dma_map_single_attrs swiotlb_map_single_attrs;
|
|
||||||
extern ia64_mv_dma_unmap_single_attrs swiotlb_unmap_single_attrs;
|
|
||||||
extern ia64_mv_dma_map_sg_attrs swiotlb_map_sg_attrs;
|
|
||||||
extern ia64_mv_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs;
|
|
||||||
extern ia64_mv_dma_supported swiotlb_dma_supported;
|
|
||||||
extern ia64_mv_dma_mapping_error swiotlb_dma_mapping_error;
|
|
||||||
|
|
||||||
/* hwiommu declarations & definitions: */
|
/* hwiommu declarations & definitions: */
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,7 @@ extern long ia64_cmpxchg_called_with_bad_pointer (void);
|
||||||
/************************************************/
|
/************************************************/
|
||||||
#define ia64_ssm IA64_INTRINSIC_MACRO(ssm)
|
#define ia64_ssm IA64_INTRINSIC_MACRO(ssm)
|
||||||
#define ia64_rsm IA64_INTRINSIC_MACRO(rsm)
|
#define ia64_rsm IA64_INTRINSIC_MACRO(rsm)
|
||||||
#define ia64_getreg IA64_INTRINSIC_API(getreg)
|
#define ia64_getreg IA64_INTRINSIC_MACRO(getreg)
|
||||||
#define ia64_setreg IA64_INTRINSIC_API(setreg)
|
#define ia64_setreg IA64_INTRINSIC_API(setreg)
|
||||||
#define ia64_set_rr IA64_INTRINSIC_API(set_rr)
|
#define ia64_set_rr IA64_INTRINSIC_API(set_rr)
|
||||||
#define ia64_get_rr IA64_INTRINSIC_API(get_rr)
|
#define ia64_get_rr IA64_INTRINSIC_API(get_rr)
|
||||||
|
|
|
@ -434,28 +434,4 @@ extern void memset_io(volatile void __iomem *s, int c, long n);
|
||||||
|
|
||||||
# endif /* __KERNEL__ */
|
# endif /* __KERNEL__ */
|
||||||
|
|
||||||
/*
|
|
||||||
* Enabling BIO_VMERGE_BOUNDARY forces us to turn off I/O MMU bypassing. It is said that
|
|
||||||
* BIO-level virtual merging can give up to 4% performance boost (not verified for ia64).
|
|
||||||
* On the other hand, we know that I/O MMU bypassing gives ~8% performance improvement on
|
|
||||||
* SPECweb-like workloads on zx1-based machines. Thus, for now we favor I/O MMU bypassing
|
|
||||||
* over BIO-level virtual merging.
|
|
||||||
*/
|
|
||||||
extern unsigned long ia64_max_iommu_merge_mask;
|
|
||||||
#if 1
|
|
||||||
#define BIO_VMERGE_BOUNDARY 0
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* It makes no sense at all to have this BIO_VMERGE_BOUNDARY macro here. Should be
|
|
||||||
* replaced by dma_merge_mask() or something of that sort. Note: the only way
|
|
||||||
* BIO_VMERGE_BOUNDARY is used is to mask off bits. Effectively, our definition gets
|
|
||||||
* expanded into:
|
|
||||||
*
|
|
||||||
* addr & ((ia64_max_iommu_merge_mask + 1) - 1) == (addr & ia64_max_iommu_vmerge_mask)
|
|
||||||
*
|
|
||||||
* which is precisely what we want.
|
|
||||||
*/
|
|
||||||
#define BIO_VMERGE_BOUNDARY (ia64_max_iommu_merge_mask + 1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_IO_H */
|
#endif /* _ASM_IA64_IO_H */
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#define _ASM_IA64_MACHVEC_H
|
#define _ASM_IA64_MACHVEC_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/swiotlb.h>
|
||||||
|
|
||||||
/* forward declarations: */
|
/* forward declarations: */
|
||||||
struct device;
|
struct device;
|
||||||
|
@ -297,27 +298,6 @@ extern void machvec_init_from_cmdline(const char *cmdline);
|
||||||
# error Unknown configuration. Update arch/ia64/include/asm/machvec.h.
|
# error Unknown configuration. Update arch/ia64/include/asm/machvec.h.
|
||||||
# endif /* CONFIG_IA64_GENERIC */
|
# endif /* CONFIG_IA64_GENERIC */
|
||||||
|
|
||||||
/*
|
|
||||||
* Declare default routines which aren't declared anywhere else:
|
|
||||||
*/
|
|
||||||
extern ia64_mv_dma_init swiotlb_init;
|
|
||||||
extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent;
|
|
||||||
extern ia64_mv_dma_free_coherent swiotlb_free_coherent;
|
|
||||||
extern ia64_mv_dma_map_single swiotlb_map_single;
|
|
||||||
extern ia64_mv_dma_map_single_attrs swiotlb_map_single_attrs;
|
|
||||||
extern ia64_mv_dma_unmap_single swiotlb_unmap_single;
|
|
||||||
extern ia64_mv_dma_unmap_single_attrs swiotlb_unmap_single_attrs;
|
|
||||||
extern ia64_mv_dma_map_sg swiotlb_map_sg;
|
|
||||||
extern ia64_mv_dma_map_sg_attrs swiotlb_map_sg_attrs;
|
|
||||||
extern ia64_mv_dma_unmap_sg swiotlb_unmap_sg;
|
|
||||||
extern ia64_mv_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs;
|
|
||||||
extern ia64_mv_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu;
|
|
||||||
extern ia64_mv_dma_sync_sg_for_cpu swiotlb_sync_sg_for_cpu;
|
|
||||||
extern ia64_mv_dma_sync_single_for_device swiotlb_sync_single_for_device;
|
|
||||||
extern ia64_mv_dma_sync_sg_for_device swiotlb_sync_sg_for_device;
|
|
||||||
extern ia64_mv_dma_mapping_error swiotlb_dma_mapping_error;
|
|
||||||
extern ia64_mv_dma_supported swiotlb_dma_supported;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define default versions so we can extend machvec for new platforms without having
|
* Define default versions so we can extend machvec for new platforms without having
|
||||||
* to update the machvec files for all existing platforms.
|
* to update the machvec files for all existing platforms.
|
||||||
|
|
|
@ -48,7 +48,6 @@ extern int reserve_elfcorehdr(unsigned long *start, unsigned long *end);
|
||||||
*/
|
*/
|
||||||
#define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1))
|
#define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1))
|
||||||
#define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1))
|
#define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1))
|
||||||
#define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1))
|
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
extern void call_pernode_memory (unsigned long start, unsigned long len, void *func);
|
extern void call_pernode_memory (unsigned long start, unsigned long len, void *func);
|
||||||
|
|
|
@ -78,6 +78,19 @@ extern unsigned long ia64_native_getreg_func(int regnum);
|
||||||
ia64_native_rsm(mask); \
|
ia64_native_rsm(mask); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* returned ip value should be the one in the caller,
|
||||||
|
* not in __paravirt_getreg() */
|
||||||
|
#define paravirt_getreg(reg) \
|
||||||
|
({ \
|
||||||
|
unsigned long res; \
|
||||||
|
BUILD_BUG_ON(!__builtin_constant_p(reg)); \
|
||||||
|
if ((reg) == _IA64_REG_IP) \
|
||||||
|
res = ia64_native_getreg(_IA64_REG_IP); \
|
||||||
|
else \
|
||||||
|
res = pv_cpu_ops.getreg(reg); \
|
||||||
|
res; \
|
||||||
|
})
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* replacement of hand written assembly codes.
|
* replacement of hand written assembly codes.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -337,11 +337,24 @@ typedef struct sal_log_record_header {
|
||||||
#define sal_log_severity_fatal 1
|
#define sal_log_severity_fatal 1
|
||||||
#define sal_log_severity_corrected 2
|
#define sal_log_severity_corrected 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error Recovery Info (ERI) bit decode. From SAL Spec section B.2.2 Table B-3
|
||||||
|
* Error Section Error_Recovery_Info Field Definition.
|
||||||
|
*/
|
||||||
|
#define ERI_NOT_VALID 0x0 /* Error Recovery Field is not valid */
|
||||||
|
#define ERI_NOT_ACCESSIBLE 0x30 /* Resource not accessible */
|
||||||
|
#define ERI_CONTAINMENT_WARN 0x22 /* Corrupt data propagated */
|
||||||
|
#define ERI_UNCORRECTED_ERROR 0x20 /* Uncorrected error */
|
||||||
|
#define ERI_COMPONENT_RESET 0x24 /* Component must be reset */
|
||||||
|
#define ERI_CORR_ERROR_LOG 0x21 /* Corrected error, needs logging */
|
||||||
|
#define ERI_CORR_ERROR_THRESH 0x29 /* Corrected error threshold exceeded */
|
||||||
|
|
||||||
/* Definition of log section header structures */
|
/* Definition of log section header structures */
|
||||||
typedef struct sal_log_sec_header {
|
typedef struct sal_log_sec_header {
|
||||||
efi_guid_t guid; /* Unique Section ID */
|
efi_guid_t guid; /* Unique Section ID */
|
||||||
sal_log_revision_t revision; /* Major and Minor revision of Section */
|
sal_log_revision_t revision; /* Major and Minor revision of Section */
|
||||||
u16 reserved;
|
u8 error_recovery_info; /* Platform error recovery status */
|
||||||
|
u8 reserved;
|
||||||
u32 len; /* Section length */
|
u32 len; /* Section length */
|
||||||
} sal_log_section_hdr_t;
|
} sal_log_section_hdr_t;
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,8 @@
|
||||||
#define SN_SAL_SET_CPU_NUMBER 0x02000068
|
#define SN_SAL_SET_CPU_NUMBER 0x02000068
|
||||||
|
|
||||||
#define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069
|
#define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069
|
||||||
|
#define SN_SAL_WATCHLIST_ALLOC 0x02000070
|
||||||
|
#define SN_SAL_WATCHLIST_FREE 0x02000071
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Service-specific constants
|
* Service-specific constants
|
||||||
|
@ -1185,4 +1187,47 @@ ia64_sn_kernel_launch_event(void)
|
||||||
SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0);
|
SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0);
|
||||||
return rv.status;
|
return rv.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
union sn_watchlist_u {
|
||||||
|
u64 val;
|
||||||
|
struct {
|
||||||
|
u64 blade : 16,
|
||||||
|
size : 32,
|
||||||
|
filler : 16;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
sn_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size,
|
||||||
|
unsigned long *intr_mmr_offset)
|
||||||
|
{
|
||||||
|
struct ia64_sal_retval rv;
|
||||||
|
unsigned long addr;
|
||||||
|
union sn_watchlist_u size_blade;
|
||||||
|
int watchlist;
|
||||||
|
|
||||||
|
addr = (unsigned long)mq;
|
||||||
|
size_blade.size = mq_size;
|
||||||
|
size_blade.blade = blade;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bios returns watchlist number or negative error number.
|
||||||
|
*/
|
||||||
|
ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_ALLOC, addr,
|
||||||
|
size_blade.val, (u64)intr_mmr_offset,
|
||||||
|
(u64)&watchlist, 0, 0, 0);
|
||||||
|
if (rv.status < 0)
|
||||||
|
return rv.status;
|
||||||
|
|
||||||
|
return watchlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
sn_mq_watchlist_free(int blade, int watchlist_num)
|
||||||
|
{
|
||||||
|
struct ia64_sal_retval rv;
|
||||||
|
ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_FREE, blade,
|
||||||
|
watchlist_num, 0, 0, 0, 0, 0);
|
||||||
|
return rv.status;
|
||||||
|
}
|
||||||
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
#endif /* _ASM_IA64_SN_SN_SAL_H */
|
||||||
|
|
|
@ -678,6 +678,30 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __init early_acpi_boot_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* do a partial walk of MADT to determine how many CPUs
|
||||||
|
* we have including offline CPUs
|
||||||
|
*/
|
||||||
|
if (acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt)) {
|
||||||
|
printk(KERN_ERR PREFIX "Can't find MADT\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC,
|
||||||
|
acpi_parse_lsapic, NR_CPUS);
|
||||||
|
if (ret < 1)
|
||||||
|
printk(KERN_ERR PREFIX
|
||||||
|
"Error parsing MADT - no LAPIC entries\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int __init acpi_boot_init(void)
|
int __init acpi_boot_init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -701,11 +725,6 @@ int __init acpi_boot_init(void)
|
||||||
printk(KERN_ERR PREFIX
|
printk(KERN_ERR PREFIX
|
||||||
"Error parsing LAPIC address override entry\n");
|
"Error parsing LAPIC address override entry\n");
|
||||||
|
|
||||||
if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, acpi_parse_lsapic, NR_CPUS)
|
|
||||||
< 1)
|
|
||||||
printk(KERN_ERR PREFIX
|
|
||||||
"Error parsing MADT - no LAPIC entries\n");
|
|
||||||
|
|
||||||
if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0)
|
if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0)
|
||||||
< 0)
|
< 0)
|
||||||
printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
|
printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
|
||||||
|
|
|
@ -499,6 +499,7 @@ GLOBAL_ENTRY(prefetch_stack)
|
||||||
END(prefetch_stack)
|
END(prefetch_stack)
|
||||||
|
|
||||||
GLOBAL_ENTRY(kernel_execve)
|
GLOBAL_ENTRY(kernel_execve)
|
||||||
|
rum psr.ac
|
||||||
mov r15=__NR_execve // put syscall number in place
|
mov r15=__NR_execve // put syscall number in place
|
||||||
break __BREAK_SYSCALL
|
break __BREAK_SYSCALL
|
||||||
br.ret.sptk.many rp
|
br.ret.sptk.many rp
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue