diff --git a/[refs] b/[refs]
index 3421ae0bc5b8..4ea06bfd8fca 100644
--- a/[refs]
+++ b/[refs]
@@ -1,2 +1,2 @@
---
-refs/heads/master: ff69497ad754b0fa9d5935df644890f208f31558
+refs/heads/master: 4ed27ecfcac538b4c578eb7fe87b8bf775a5ff68
diff --git a/trunk/Documentation/ABI/testing/sysfs-bus-fcoe b/trunk/Documentation/ABI/testing/sysfs-bus-fcoe
index 50e2a80ea28f..469d09c02f6b 100644
--- a/trunk/Documentation/ABI/testing/sysfs-bus-fcoe
+++ b/trunk/Documentation/ABI/testing/sysfs-bus-fcoe
@@ -9,19 +9,19 @@ Attributes:
this value will change the dev_loss_tmo for all
FCFs discovered by this controller.
- lesb/link_fail: Link Error Status Block (LESB) link failure count.
+ lesb_link_fail: Link Error Status Block (LESB) link failure count.
- lesb/vlink_fail: Link Error Status Block (LESB) virtual link
+ lesb_vlink_fail: Link Error Status Block (LESB) virtual link
failure count.
- lesb/miss_fka: Link Error Status Block (LESB) missed FCoE
+ lesb_miss_fka: Link Error Status Block (LESB) missed FCoE
Initialization Protocol (FIP) Keep-Alives (FKA).
- lesb/symb_err: Link Error Status Block (LESB) symbolic error count.
+ lesb_symb_err: Link Error Status Block (LESB) symbolic error count.
- lesb/err_block: Link Error Status Block (LESB) block error count.
+ lesb_err_block: Link Error Status Block (LESB) block error count.
- lesb/fcs_error: Link Error Status Block (LESB) Fibre Channel
+ lesb_fcs_error: Link Error Status Block (LESB) Fibre Channel
Serivces error count.
Notes: ctlr_X (global increment starting at 0)
diff --git a/trunk/Documentation/DocBook/media/v4l/compat.xml b/trunk/Documentation/DocBook/media/v4l/compat.xml
index 4fdf6b562d1c..c6ae4c9d0e0c 100644
--- a/trunk/Documentation/DocBook/media/v4l/compat.xml
+++ b/trunk/Documentation/DocBook/media/v4l/compat.xml
@@ -2582,10 +2582,6 @@ ioctls.
Support for frequency band enumeration: &VIDIOC-ENUM-FREQ-BANDS; ioctl.
-
- Vendor and device specific media bus pixel formats.
- .
-
diff --git a/trunk/Documentation/DocBook/media/v4l/controls.xml b/trunk/Documentation/DocBook/media/v4l/controls.xml
index 7fe5be1d3bbb..272a5f718509 100644
--- a/trunk/Documentation/DocBook/media/v4l/controls.xml
+++ b/trunk/Documentation/DocBook/media/v4l/controls.xml
@@ -1586,6 +1586,7 @@ frame counter of the frame that is currently displayed (decoded). This value is
the decoder is started.
+
V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE
@@ -2268,14 +2269,6 @@ encoder or editing process may produce.".
Applicable to the MPEG1, MPEG2, MPEG4 encoders.
-
-
- V4L2_CID_MPEG_VIDEO_VBV_DELAY
- integer
- Sets the initial delay in milliseconds for
-VBV buffer control.
-
-
V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE
@@ -2341,265 +2334,6 @@ Applicable to the MPEG4 decoder.
vop_time_increment value for MPEG4. Applicable to the MPEG4 encoder.
-
-
- V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING
- boolean
-
- Enable generation of frame packing supplemental enhancement information in the encoded bitstream.
-The frame packing SEI message contains the arrangement of L and R planes for 3D viewing. Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0
- boolean
-
- Sets current frame as frame0 in frame packing SEI.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE
- enum v4l2_mpeg_video_h264_sei_fp_arrangement_type
-
- Frame packing arrangement type for H264 SEI.
-Applicable to the H264 encoder.
-Possible values are:
-
-
-
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_CHEKERBOARD
- Pixels are alternatively from L and R.
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_COLUMN
- L and R are interlaced by column.
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_ROW
- L and R are interlaced by row.
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_SIDE_BY_SIDE
- L is on the left, R on the right.
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TOP_BOTTOM
- L is on top, R on bottom.
-
-
- V4L2_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE_TEMPORAL
- One view per frame.
-
-
-
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO
- boolean
-
- Enables flexible macroblock ordering in the encoded bitstream. It is a technique
-used for restructuring the ordering of macroblocks in pictures. Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE
- enum v4l2_mpeg_video_h264_fmo_map_type
-
- When using FMO, the map type divides the image in different scan patterns of macroblocks.
-Applicable to the H264 encoder.
-Possible values are:
-
-
-
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_INTERLEAVED_SLICES
- Slices are interleaved one after other with macroblocks in run length order.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_SCATTERED_SLICES
- Scatters the macroblocks based on a mathematical function known to both encoder and decoder.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_FOREGROUND_WITH_LEFT_OVER
- Macroblocks arranged in rectangular areas or regions of interest.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_BOX_OUT
- Slice groups grow in a cyclic way from centre to outwards.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_RASTER_SCAN
- Slice groups grow in raster scan pattern from left to right.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_WIPE_SCAN
- Slice groups grow in wipe scan pattern from top to bottom.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_MAP_TYPE_EXPLICIT
- User defined map type.
-
-
-
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP
- integer
-
- Number of slice groups in FMO.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION
- enum v4l2_mpeg_video_h264_fmo_change_dir
-
- Specifies a direction of the slice group change for raster and wipe maps.
-Applicable to the H264 encoder.
-Possible values are:
-
-
-
-
-
- V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_RIGHT
- Raster scan or wipe right.
-
-
- V4L2_MPEG_VIDEO_H264_FMO_CHANGE_DIR_LEFT
- Reverse raster scan or wipe left.
-
-
-
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE
- integer
-
- Specifies the size of the first slice group for raster and wipe map.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH
- integer
-
- Specifies the number of consecutive macroblocks for the interleaved map.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_ASO
- boolean
-
- Enables arbitrary slice ordering in encoded bitstream.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER
- integer
- Specifies the slice order in ASO. Applicable to the H264 encoder.
-The supplied 32-bit integer is interpreted as follows (bit
-0 = least significant bit):
-
-
-
-
-
- Bit 0:15
- Slice ID
-
-
- Bit 16:32
- Slice position or order
-
-
-
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING
- boolean
-
- Enables H264 hierarchical coding.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE
- enum v4l2_mpeg_video_h264_hierarchical_coding_type
-
- Specifies the hierarchical coding type.
-Applicable to the H264 encoder.
-Possible values are:
-
-
-
-
-
- V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B
- Hierarchical B coding.
-
-
- V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P
- Hierarchical P coding.
-
-
-
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER
- integer
-
- Specifies the number of hierarchical coding layers.
-Applicable to the H264 encoder.
-
-
-
-
- V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP
- integer
- Specifies a user defined QP for each layer. Applicable to the H264 encoder.
-The supplied 32-bit integer is interpreted as follows (bit
-0 = least significant bit):
-
-
-
-
-
- Bit 0:15
- QP value
-
-
- Bit 16:32
- Layer number
-
-
-
-
-
@@ -4533,16 +4267,6 @@ interface and may change in the future.
pixels / second.
-
- V4L2_CID_TEST_PATTERN
- menu
-
-
- Some capture/display/sensor devices have
- the capability to generate test pattern images. These hardware
- specific test patterns can be used to test if a device is working
- properly.
-
diff --git a/trunk/Documentation/DocBook/media/v4l/io.xml b/trunk/Documentation/DocBook/media/v4l/io.xml
index b5d1cbdc558b..97f785add841 100644
--- a/trunk/Documentation/DocBook/media/v4l/io.xml
+++ b/trunk/Documentation/DocBook/media/v4l/io.xml
@@ -677,10 +677,8 @@ memory, set by the application. See for details.
lengthSize of the buffer (not the payload) in bytes for the
- single-planar API. For the multi-planar API the application sets
- this to the number of elements in the planes
- array. The driver will fill in the actual number of valid elements in
- that array.
+ single-planar API. For the multi-planar API should contain the
+ number of elements in the planes array.
diff --git a/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml
index a990b34d911a..5274c24d11e0 100644
--- a/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml
+++ b/trunk/Documentation/DocBook/media/v4l/pixfmt-nv12m.xml
@@ -1,13 +1,11 @@
-
+
- V4L2_PIX_FMT_NV12M ('NM12'), V4L2_PIX_FMT_NV21M ('NM21'), V4L2_PIX_FMT_NV12MT_16X16
+ V4L2_PIX_FMT_NV12M ('NM12')
&manvol;
- V4L2_PIX_FMT_NV12M
- V4L2_PIX_FMT_NV21M
- V4L2_PIX_FMT_NV12MT_16X16
- Variation of V4L2_PIX_FMT_NV12 and V4L2_PIX_FMT_NV21 with planes
+ V4L2_PIX_FMT_NV12M
+ Variation of V4L2_PIX_FMT_NV12 with planes
non contiguous in memory.
@@ -24,12 +22,7 @@ The CbCr plane is the same width, in bytes, as the Y plane (and of the image),
but is half as tall in pixels. Each CbCr pair belongs to four pixels. For example,
Cb0/Cr0 belongs to
Y'00, Y'01,
-Y'10, Y'11.
-V4L2_PIX_FMT_NV12MT_16X16 is the tiled version of
-V4L2_PIX_FMT_NV12M with 16x16 macroblock tiles. Here pixels
-are arranged in 16x16 2D tiles and tiles are arranged in linear order in memory.
-V4L2_PIX_FMT_NV21M is the same as V4L2_PIX_FMT_NV12M
-except the Cb and Cr bytes are swapped, the CrCb plane starts with a Cr byte.
+Y'10, Y'11.
V4L2_PIX_FMT_NV12M is intended to be
used only in drivers and applications that support the multi-planar API,
diff --git a/trunk/Documentation/DocBook/media/v4l/pixfmt.xml b/trunk/Documentation/DocBook/media/v4l/pixfmt.xml
index bf94f417592c..1ddbfabe3195 100644
--- a/trunk/Documentation/DocBook/media/v4l/pixfmt.xml
+++ b/trunk/Documentation/DocBook/media/v4l/pixfmt.xml
@@ -758,11 +758,6 @@ extended control V4L2_CID_MPEG_STREAM_TYPE, see
'AVC1'H264 video elementary stream without start codes.
-
- V4L2_PIX_FMT_H264_MVC
- 'MVC'
- H264 MVC video elementary stream.
- V4L2_PIX_FMT_H263'H263'
@@ -798,11 +793,6 @@ extended control V4L2_CID_MPEG_STREAM_TYPE, see
'VC1L'VC1, SMPTE 421M Annex L compliant stream.
-
- V4L2_PIX_FMT_VP8
- 'VP8'
- VP8 video elementary stream.
-
@@ -1006,34 +996,6 @@ the other bits are set to 0.
Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used,
the other bits are set to 0.
-
- V4L2_PIX_FMT_S5C_UYVY_JPG
- 'S5CI'
- Two-planar format used by Samsung S5C73MX cameras. The
-first plane contains interleaved JPEG and UYVY image data, followed by meta data
-in form of an array of offsets to the UYVY data blocks. The actual pointer array
-follows immediately the interleaved JPEG/UYVY data, the number of entries in
-this array equals the height of the UYVY image. Each entry is a 4-byte unsigned
-integer in big endian order and it's an offset to a single pixel line of the
-UYVY image. The first plane can start either with JPEG or UYVY data chunk. The
-size of a single UYVY block equals the UYVY image's width multiplied by 2. The
-size of a JPEG chunk depends on the image and can vary with each line.
-The second plane, at an offset of 4084 bytes, contains a 4-byte offset to
-the pointer array in the first plane. This offset is followed by a 4-byte value
-indicating size of the pointer array. All numbers in the second plane are also
-in big endian order. Remaining data in the second plane is undefined. The
-information in the second plane allows to easily find location of the pointer
-array, which can be different for each frame. The size of the pointer array is
-constant for given UYVY image height.
-In order to extract UYVY and JPEG frames an application can initially set
-a data pointer to the start of first plane and then add an offset from the first
-entry of the pointers table. Such a pointer indicates start of an UYVY image
-pixel line. Whole UYVY line can be copied to a separate buffer. These steps
-should be repeated for each line, i.e. the number of entries in the pointer
-array. Anything what's in between the UYVY lines is JPEG data and should be
-concatenated to form the JPEG stream.
-
-
diff --git a/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml b/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml
index a0a936455fae..49c532ebbbbe 100644
--- a/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml
+++ b/trunk/Documentation/DocBook/media/v4l/subdev-formats.xml
@@ -2565,49 +2565,5 @@
-
-
- Vendor and Device Specific Formats
-
-
- Experimental
- This is an experimental
-interface and may change in the future.
-
-
- This section lists complex data formats that are either vendor or
- device specific.
-
-
- The following table lists the existing vendor and device specific
- formats.
-
-
- Vendor and device specific formats
-
-
-
-
-
-
- Identifier
- Code
- Comments
-
-
-
-
- V4L2_MBUS_FMT_S5C_UYVY_JPEG_1X8
- 0x5001
-
- Interleaved raw UYVY and JPEG image format with embedded
- meta-data used by Samsung S3C73MX camera sensors.
-
-
-
-
-
-
-
diff --git a/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml
index 2d37abefce13..6a821a65a5ae 100644
--- a/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml
+++ b/trunk/Documentation/DocBook/media/v4l/vidioc-qbuf.xml
@@ -121,7 +121,8 @@ remaining fields or returns an error code. The driver may also set
field. It indicates a non-critical (recoverable) streaming error. In such case
the application may continue as normal, but should be aware that data in the
dequeued buffer might be corrupted. When using the multi-planar API, the
-planes array must be passed in as well.
+planes array does not have to be passed; the m.planes
+member must be set to NULL in that case.
By default VIDIOC_DQBUF blocks when no
buffer is in the outgoing queue. When the
diff --git a/trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml b/trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml
index a597155c052d..6e414d7b6df7 100644
--- a/trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml
+++ b/trunk/Documentation/DocBook/media/v4l/vidioc-querybuf.xml
@@ -48,8 +48,8 @@
Description
- This ioctl is part of the streaming
- I/O method. It can be used to query the status of a
+ This ioctl is part of the memory
+mapping I/O method. It can be used to query the status of a
buffer at any time after buffers have been allocated with the
&VIDIOC-REQBUFS; ioctl.
@@ -71,7 +71,6 @@ the structure.In the flags field the
V4L2_BUF_FLAG_MAPPED,
-V4L2_BUF_FLAG_PREPARED,
V4L2_BUF_FLAG_QUEUED and
V4L2_BUF_FLAG_DONE flags will be valid. The
memory field will be set to the current
@@ -80,10 +79,8 @@ contains the offset of the buffer from the start of the device memory,
the length field its size. For the multi-planar API,
fields m.mem_offset and
length in the m.planes
-array elements will be used instead and the length
-field of &v4l2-buffer; is set to the number of filled-in array elements.
-The driver may or may not set the remaining fields and flags, they are
-meaningless in this context.
+array elements will be used instead. The driver may or may not set the remaining
+fields and flags, they are meaningless in this context.The v4l2_buffer structure is
specified in .
diff --git a/trunk/Documentation/arm/Booting b/trunk/Documentation/arm/Booting
index 0c1f475fdf36..a341d87d276e 100644
--- a/trunk/Documentation/arm/Booting
+++ b/trunk/Documentation/arm/Booting
@@ -154,33 +154,13 @@ In either case, the following conditions must be met:
- CPU mode
All forms of interrupts must be disabled (IRQs and FIQs)
-
- For CPUs which do not include the ARM virtualization extensions, the
- CPU must be in SVC mode. (A special exception exists for Angel)
-
- CPUs which include support for the virtualization extensions can be
- entered in HYP mode in order to enable the kernel to make full use of
- these extensions. This is the recommended boot method for such CPUs,
- unless the virtualisations are already in use by a pre-installed
- hypervisor.
-
- If the kernel is not entered in HYP mode for any reason, it must be
- entered in SVC mode.
+ The CPU must be in SVC mode. (A special exception exists for Angel)
- Caches, MMUs
The MMU must be off.
Instruction cache may be on or off.
Data cache must be off.
- If the kernel is entered in HYP mode, the above requirements apply to
- the HYP mode configuration in addition to the ordinary PL1 (privileged
- kernel modes) configuration. In addition, all traps into the
- hypervisor must be disabled, and PL1 access must be granted for all
- peripherals and CPU resources for which this is architecturally
- possible. Except for entering in HYP mode, the system configuration
- should be such that a kernel which does not include support for the
- virtualization extensions can boot correctly without extra help.
-
- The boot loader is expected to call the kernel image by jumping
directly to the first instruction of the kernel image.
diff --git a/trunk/Documentation/filesystems/nfs/nfsd-admin-interfaces.txt b/trunk/Documentation/filesystems/nfs/nfsd-admin-interfaces.txt
deleted file mode 100644
index 56a96fb08a73..000000000000
--- a/trunk/Documentation/filesystems/nfs/nfsd-admin-interfaces.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-Administrative interfaces for nfsd
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Note that normally these interfaces are used only by the utilities in
-nfs-utils.
-
-nfsd is controlled mainly by pseudofiles under the "nfsd" filesystem,
-which is normally mounted at /proc/fs/nfsd/.
-
-The server is always started by the first write of a nonzero value to
-nfsd/threads.
-
-Before doing that, NFSD can be told which sockets to listen on by
-writing to nfsd/portlist; that write may be:
-
- - an ascii-encoded file descriptor, which should refer to a
- bound (and listening, for tcp) socket, or
- - "transportname port", where transportname is currently either
- "udp", "tcp", or "rdma".
-
-If nfsd is started without doing any of these, then it will create one
-udp and one tcp listener at port 2049 (see nfsd_init_socks).
-
-On startup, nfsd and lockd grace periods start.
-
-nfsd is shut down by a write of 0 to nfsd/threads. All locks and state
-are thrown away at that point.
-
-Between startup and shutdown, the number of threads may be adjusted up
-or down by additional writes to nfsd/threads or by writes to
-nfsd/pool_threads.
-
-For more detail about files under nfsd/ and what they control, see
-fs/nfsd/nfsctl.c; most of them have detailed comments.
-
-Implementation notes
-^^^^^^^^^^^^^^^^^^^^
-
-Note that the rpc server requires the caller to serialize addition and
-removal of listening sockets, and startup and shutdown of the server.
-For nfsd this is done using nfsd_mutex.
diff --git a/trunk/Documentation/scsi/ChangeLog.megaraid_sas b/trunk/Documentation/scsi/ChangeLog.megaraid_sas
index da03146c182a..3a3079411a3d 100644
--- a/trunk/Documentation/scsi/ChangeLog.megaraid_sas
+++ b/trunk/Documentation/scsi/ChangeLog.megaraid_sas
@@ -1,16 +1,3 @@
-Release Date : Mon. Oct 1, 2012 17:00:00 PST 2012 -
- (emaild-id:megaraidlinux@lsi.com)
- Adam Radford
-Current Version : 06.504.01.00-rc1
-Old Version : 00.00.06.18-rc1
- 1. Removed un-needed completion_lock spinlock calls.
- 2. Add module param for configurable MSI-X vector count.
- 3. Load io_request DataLength in bytes.
- 4. Add array boundary check for SystemPD.
- 5. Add SystemPD FastPath support.
- 6. Remove duplicate code.
- 7. Version, Changelog, Copyright update.
--------------------------------------------------------------------------------
Release Date : Tue. Jun 17, 2012 17:00:00 PST 2012 -
(emaild-id:megaraidlinux@lsi.com)
Adam Radford/Kashyap Desai
diff --git a/trunk/Documentation/video4linux/v4l2-controls.txt b/trunk/Documentation/video4linux/v4l2-controls.txt
index cfe52c798d74..54270df99d5c 100644
--- a/trunk/Documentation/video4linux/v4l2-controls.txt
+++ b/trunk/Documentation/video4linux/v4l2-controls.txt
@@ -136,25 +136,11 @@ Or alternatively for integer menu controls, by calling v4l2_ctrl_new_int_menu:
const struct v4l2_ctrl_ops *ops,
u32 id, s32 max, s32 def, const s64 *qmenu_int);
-Standard menu controls with a driver specific menu are added by calling
-v4l2_ctrl_new_std_menu_items:
-
- struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(
- struct v4l2_ctrl_handler *hdl,
- const struct v4l2_ctrl_ops *ops, u32 id, s32 max,
- s32 skip_mask, s32 def, const char * const *qmenu);
-
These functions are typically called right after the v4l2_ctrl_handler_init:
static const s64 exp_bias_qmenu[] = {
-2, -1, 0, 1, 2
};
- static const char * const test_pattern[] = {
- "Disabled",
- "Vertical Bars",
- "Solid Black",
- "Solid White",
- };
v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
@@ -170,9 +156,6 @@ These functions are typically called right after the v4l2_ctrl_handler_init:
ARRAY_SIZE(exp_bias_qmenu) - 1,
ARRAY_SIZE(exp_bias_qmenu) / 2 - 1,
exp_bias_qmenu);
- v4l2_ctrl_new_std_menu_items(&foo->ctrl_handler, &foo_ctrl_ops,
- V4L2_CID_TEST_PATTERN, ARRAY_SIZE(test_pattern) - 1, 0,
- 0, test_pattern);
...
if (foo->ctrl_handler.error) {
int err = foo->ctrl_handler.error;
@@ -202,13 +185,6 @@ v4l2_ctrl_new_std_menu in that it doesn't have the mask argument and takes
as the last argument an array of signed 64-bit integers that form an exact
menu item list.
-The v4l2_ctrl_new_std_menu_items function is very similar to
-v4l2_ctrl_new_std_menu but takes an extra parameter qmenu, which is the driver
-specific menu for an otherwise standard menu control. A good example for this
-control is the test pattern control for capture/display/sensors devices that
-have the capability to generate test patterns. These test patterns are hardware
-specific, so the contents of the menu will vary from device to device.
-
Note that if something fails, the function will return NULL or an error and
set ctrl_handler->error to the error code. If ctrl_handler->error was already
set, then it will just return and do nothing. This is also true for
diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS
index e73060fe0788..0f6ff811da07 100644
--- a/trunk/MAINTAINERS
+++ b/trunk/MAINTAINERS
@@ -1958,10 +1958,10 @@ S: Supported
F: drivers/platform/x86/classmate-laptop.c
COCCINELLE/Semantic Patches (SmPL)
-M: Julia Lawall
+M: Julia Lawall
M: Gilles Muller
-M: Nicolas Palix
-L: cocci@systeme.lip6.fr (moderated for non-subscribers)
+M: Nicolas Palix
+L: cocci@diku.dk (moderated for non-subscribers)
W: http://coccinelle.lip6.fr/
S: Supported
F: scripts/coccinelle/
@@ -2423,6 +2423,11 @@ S: Maintained
F: Documentation/hwmon/dme1737
F: drivers/hwmon/dme1737.c
+DOCBOOK FOR DOCUMENTATION
+M: Randy Dunlap
+S: Maintained
+F: scripts/kernel-doc
+
DOCKING STATION DRIVER
M: Shaohua Li
L: linux-acpi@vger.kernel.org
diff --git a/trunk/Makefile b/trunk/Makefile
index 5d8e7f258388..86eb6acb3978 100644
--- a/trunk/Makefile
+++ b/trunk/Makefile
@@ -664,9 +664,22 @@ ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
endif
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
-KBUILD_CPPFLAGS += $(KCPPFLAGS)
-KBUILD_AFLAGS += $(KAFLAGS)
-KBUILD_CFLAGS += $(KCFLAGS)
+# But warn user when we do so
+warn-assign = \
+$(warning "WARNING: Appending $$K$(1) ($(K$(1))) from $(origin K$(1)) to kernel $$$(1)")
+
+ifneq ($(KCPPFLAGS),)
+ $(call warn-assign,CPPFLAGS)
+ KBUILD_CPPFLAGS += $(KCPPFLAGS)
+endif
+ifneq ($(KAFLAGS),)
+ $(call warn-assign,AFLAGS)
+ KBUILD_AFLAGS += $(KAFLAGS)
+endif
+ifneq ($(KCFLAGS),)
+ $(call warn-assign,CFLAGS)
+ KBUILD_CFLAGS += $(KCFLAGS)
+endif
# Use --build-id when available.
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
diff --git a/trunk/arch/Kconfig b/trunk/arch/Kconfig
index a79a1ad8bb96..26a28419cafc 100644
--- a/trunk/arch/Kconfig
+++ b/trunk/arch/Kconfig
@@ -274,9 +274,6 @@ config ARCH_WANT_OLD_COMPAT_IPC
config GENERIC_KERNEL_THREAD
bool
-config GENERIC_KERNEL_EXECVE
- bool
-
config HAVE_ARCH_SECCOMP_FILTER
bool
help
diff --git a/trunk/arch/alpha/Kconfig b/trunk/arch/alpha/Kconfig
index 7a08cfb80ee8..7da91246e279 100644
--- a/trunk/arch/alpha/Kconfig
+++ b/trunk/arch/alpha/Kconfig
@@ -21,7 +21,6 @@ config ALPHA
select GENERIC_STRNCPY_FROM_USER
select GENERIC_STRNLEN_USER
select GENERIC_KERNEL_THREAD
- select GENERIC_KERNEL_EXECVE
help
The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory,
diff --git a/trunk/arch/alpha/include/asm/thread_info.h b/trunk/arch/alpha/include/asm/thread_info.h
index 4554ecbff7c6..28335bd40e40 100644
--- a/trunk/arch/alpha/include/asm/thread_info.h
+++ b/trunk/arch/alpha/include/asm/thread_info.h
@@ -84,6 +84,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
#define _TIF_SIGPENDING (1< non-restartable */
+ cmovne $26, 0, $19 /* $19 = 0 => non-restartable */
ldq $0, SP_OFF($sp)
and $0, 8, $0
beq $0, ret_to_kernel
@@ -320,8 +320,8 @@ ret_to_user:
sampling and the rti. */
lda $16, 7
call_pal PAL_swpipl
- ldl $17, TI_FLAGS($8)
- and $17, _TIF_WORK_MASK, $2
+ ldl $5, TI_FLAGS($8)
+ and $5, _TIF_WORK_MASK, $2
bne $2, work_pending
restore_all:
RESTORE_ALL
@@ -341,10 +341,10 @@ $syscall_error:
* frame to indicate that a negative return value wasn't an
* error number..
*/
- ldq $18, 0($sp) /* old syscall nr (zero if success) */
- beq $18, $ret_success
+ ldq $19, 0($sp) /* old syscall nr (zero if success) */
+ beq $19, $ret_success
- ldq $19, 72($sp) /* .. and this a3 */
+ ldq $20, 72($sp) /* .. and this a3 */
subq $31, $0, $0 /* with error in v0 */
addq $31, 1, $1 /* set a3 for errno return */
stq $0, 0($sp)
@@ -362,35 +362,51 @@ $ret_success:
* Do all cleanup when returning from all interrupts and system calls.
*
* Arguments:
+ * $5: TI_FLAGS.
* $8: current.
- * $17: TI_FLAGS.
- * $18: The old syscall number, or zero if this is not a return
+ * $19: The old syscall number, or zero if this is not a return
* from a syscall that errored and is possibly restartable.
- * $19: The old a3 value
+ * $20: The old a3 value
*/
.align 4
.ent work_pending
work_pending:
- and $17, _TIF_NOTIFY_RESUME | _TIF_SIGPENDING, $2
- bne $2, $work_notifysig
+ and $5, _TIF_NEED_RESCHED, $2
+ beq $2, $work_notifysig
$work_resched:
- /*
- * We can get here only if we returned from syscall without SIGPENDING
- * or got through work_notifysig already. Either case means no syscall
- * restarts for us, so let $18 and $19 burn.
- */
+ subq $sp, 16, $sp
+ stq $19, 0($sp) /* save syscall nr */
+ stq $20, 8($sp) /* and error indication (a3) */
jsr $26, schedule
- mov 0, $18
- br ret_to_user
+ ldq $19, 0($sp)
+ ldq $20, 8($sp)
+ addq $sp, 16, $sp
+ /* Make sure need_resched and sigpending don't change between
+ sampling and the rti. */
+ lda $16, 7
+ call_pal PAL_swpipl
+ ldl $5, TI_FLAGS($8)
+ and $5, _TIF_WORK_MASK, $2
+ beq $2, restore_all
+ and $5, _TIF_NEED_RESCHED, $2
+ bne $2, $work_resched
$work_notifysig:
mov $sp, $16
bsr $1, do_switch_stack
- jsr $26, do_work_pending
+ mov $sp, $17
+ mov $5, $18
+ mov $19, $9 /* save old syscall number */
+ mov $20, $10 /* save old a3 */
+ and $5, _TIF_SIGPENDING, $2
+ cmovne $2, 0, $9 /* we don't want double syscall restarts */
+ jsr $26, do_notify_resume
+ mov $9, $19
+ mov $10, $20
bsr $1, undo_switch_stack
- br restore_all
+ br ret_to_user
.end work_pending
/*
@@ -402,10 +418,11 @@ $work_notifysig:
strace:
/* set up signal stack, call syscall_trace */
bsr $1, do_switch_stack
- jsr $26, syscall_trace_enter /* returns the syscall number */
+ jsr $26, syscall_trace
bsr $1, undo_switch_stack
- /* get the arguments back.. */
+ /* get the system call number and the arguments back.. */
+ ldq $0, 0($sp)
ldq $16, SP_OFF+24($sp)
ldq $17, SP_OFF+32($sp)
ldq $18, SP_OFF+40($sp)
@@ -432,15 +449,15 @@ $strace_success:
stq $0, 0($sp) /* save return value */
bsr $1, do_switch_stack
- jsr $26, syscall_trace_leave
+ jsr $26, syscall_trace
bsr $1, undo_switch_stack
br $31, ret_from_sys_call
.align 3
$strace_error:
- ldq $18, 0($sp) /* old syscall nr (zero if success) */
- beq $18, $strace_success
- ldq $19, 72($sp) /* .. and this a3 */
+ ldq $19, 0($sp) /* old syscall nr (zero if success) */
+ beq $19, $strace_success
+ ldq $20, 72($sp) /* .. and this a3 */
subq $31, $0, $0 /* with error in v0 */
addq $31, 1, $1 /* set a3 for errno return */
@@ -448,11 +465,11 @@ $strace_error:
stq $1, 72($sp) /* a3 for return */
bsr $1, do_switch_stack
- mov $18, $9 /* save old syscall number */
- mov $19, $10 /* save old a3 */
- jsr $26, syscall_trace_leave
- mov $9, $18
- mov $10, $19
+ mov $19, $9 /* save old syscall number */
+ mov $20, $10 /* save old a3 */
+ jsr $26, syscall_trace
+ mov $9, $19
+ mov $10, $20
bsr $1, undo_switch_stack
mov $31, $26 /* tell "ret_from_sys_call" we can restart */
@@ -603,9 +620,24 @@ ret_from_kernel_thread:
mov $9, $27
mov $10, $16
jsr $26, ($9)
+ ldgp $gp, 0($26)
+ mov $0, $16
+ mov $31, $26
+ jmp $31, sys_exit
+.end ret_from_kernel_thread
+
+ .globl ret_from_kernel_execve
+ .align 4
+ .ent ret_from_kernel_execve
+ret_from_kernel_execve:
+ mov $16, $sp
+ /* Avoid the HAE being gratuitously wrong, to avoid restoring it. */
+ ldq $2, alpha_mv+HAE_CACHE
+ stq $2, 152($sp) /* HAE */
mov $31, $19 /* to disable syscall restarts */
br $31, ret_to_user
-.end ret_from_kernel_thread
+
+.end ret_from_kernel_execve
/*
@@ -666,7 +698,7 @@ sys_sigreturn:
lda $sp, -SWITCH_STACK_SIZE($sp)
jsr $26, do_sigreturn
bne $9, 1f
- jsr $26, syscall_trace_leave
+ jsr $26, syscall_trace
1: br $1, undo_switch_stack
br ret_from_sys_call
.end sys_sigreturn
@@ -683,7 +715,7 @@ sys_rt_sigreturn:
lda $sp, -SWITCH_STACK_SIZE($sp)
jsr $26, do_rt_sigreturn
bne $9, 1f
- jsr $26, syscall_trace_leave
+ jsr $26, syscall_trace
1: br $1, undo_switch_stack
br ret_from_sys_call
.end sys_rt_sigreturn
diff --git a/trunk/arch/alpha/kernel/osf_sys.c b/trunk/arch/alpha/kernel/osf_sys.c
index 9eb090582cf1..63e77e3944ce 100644
--- a/trunk/arch/alpha/kernel/osf_sys.c
+++ b/trunk/arch/alpha/kernel/osf_sys.c
@@ -449,7 +449,7 @@ osf_ufs_mount(char *dirname, struct ufs_args __user *args, int flags)
{
int retval;
struct cdfs_args tmp;
- struct filename *devname;
+ char *devname;
retval = -EFAULT;
if (copy_from_user(&tmp, args, sizeof(tmp)))
@@ -458,7 +458,7 @@ osf_ufs_mount(char *dirname, struct ufs_args __user *args, int flags)
retval = PTR_ERR(devname);
if (IS_ERR(devname))
goto out;
- retval = do_mount(devname->name, dirname, "ext2", flags, NULL);
+ retval = do_mount(devname, dirname, "ext2", flags, NULL);
putname(devname);
out:
return retval;
@@ -469,7 +469,7 @@ osf_cdfs_mount(char *dirname, struct cdfs_args __user *args, int flags)
{
int retval;
struct cdfs_args tmp;
- struct filename *devname;
+ char *devname;
retval = -EFAULT;
if (copy_from_user(&tmp, args, sizeof(tmp)))
@@ -478,7 +478,7 @@ osf_cdfs_mount(char *dirname, struct cdfs_args __user *args, int flags)
retval = PTR_ERR(devname);
if (IS_ERR(devname))
goto out;
- retval = do_mount(devname->name, dirname, "iso9660", flags, NULL);
+ retval = do_mount(devname, dirname, "iso9660", flags, NULL);
putname(devname);
out:
return retval;
@@ -499,7 +499,7 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path,
int, flag, void __user *, data)
{
int retval;
- struct filename *name;
+ char *name;
name = getname(path);
retval = PTR_ERR(name);
@@ -507,13 +507,13 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path,
goto out;
switch (typenr) {
case 1:
- retval = osf_ufs_mount(name->name, data, flag);
+ retval = osf_ufs_mount(name, data, flag);
break;
case 6:
- retval = osf_cdfs_mount(name->name, data, flag);
+ retval = osf_cdfs_mount(name, data, flag);
break;
case 9:
- retval = osf_procfs_mount(name->name, data, flag);
+ retval = osf_procfs_mount(name, data, flag);
break;
default:
retval = -EINVAL;
diff --git a/trunk/arch/alpha/kernel/ptrace.c b/trunk/arch/alpha/kernel/ptrace.c
index 2a4a80ff4a20..54616f496aed 100644
--- a/trunk/arch/alpha/kernel/ptrace.c
+++ b/trunk/arch/alpha/kernel/ptrace.c
@@ -13,7 +13,6 @@
#include
#include
#include
-#include
#include
#include
@@ -313,18 +312,25 @@ long arch_ptrace(struct task_struct *child, long request,
return ret;
}
-asmlinkage unsigned long syscall_trace_enter(void)
-{
- unsigned long ret = 0;
- if (test_thread_flag(TIF_SYSCALL_TRACE) &&
- tracehook_report_syscall_entry(current_pt_regs()))
- ret = -1UL;
- return ret ?: current_pt_regs()->r0;
-}
-
asmlinkage void
-syscall_trace_leave(void)
+syscall_trace(void)
{
- if (test_thread_flag(TIF_SYSCALL_TRACE))
- tracehook_report_syscall_exit(current_pt_regs(), 0);
+ if (!test_thread_flag(TIF_SYSCALL_TRACE))
+ return;
+ if (!(current->ptrace & PT_PTRACED))
+ return;
+ /* The 0x80 provides a way for the tracing parent to distinguish
+ between a syscall stop and SIGTRAP delivery */
+ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+ ? 0x80 : 0));
+
+ /*
+ * This isn't the same as continuing with a signal, but it will do
+ * for normal use. strace only continues with a signal if the
+ * stopping signal is not SIGTRAP. -brl
+ */
+ if (current->exit_code) {
+ send_sig(current->exit_code, current, 1);
+ current->exit_code = 0;
+ }
}
diff --git a/trunk/arch/alpha/kernel/signal.c b/trunk/arch/alpha/kernel/signal.c
index 32575f85507d..a8c97d42ec8e 100644
--- a/trunk/arch/alpha/kernel/signal.c
+++ b/trunk/arch/alpha/kernel/signal.c
@@ -298,9 +298,8 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)
static long
setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
- unsigned long mask, unsigned long sp)
+ struct switch_stack *sw, unsigned long mask, unsigned long sp)
{
- struct switch_stack *sw = (struct switch_stack *)regs - 1;
long i, err = 0;
err |= __put_user(on_sig_stack((unsigned long)sc), &sc->sc_onstack);
@@ -355,7 +354,7 @@ setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
static int
setup_frame(int sig, struct k_sigaction *ka, sigset_t *set,
- struct pt_regs *regs)
+ struct pt_regs *regs, struct switch_stack * sw)
{
unsigned long oldsp, r26, err = 0;
struct sigframe __user *frame;
@@ -365,7 +364,7 @@ setup_frame(int sig, struct k_sigaction *ka, sigset_t *set,
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
return -EFAULT;
- err |= setup_sigcontext(&frame->sc, regs, set->sig[0], oldsp);
+ err |= setup_sigcontext(&frame->sc, regs, sw, set->sig[0], oldsp);
if (err)
return -EFAULT;
@@ -402,7 +401,7 @@ setup_frame(int sig, struct k_sigaction *ka, sigset_t *set,
static int
setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
- sigset_t *set, struct pt_regs *regs)
+ sigset_t *set, struct pt_regs *regs, struct switch_stack * sw)
{
unsigned long oldsp, r26, err = 0;
struct rt_sigframe __user *frame;
@@ -421,7 +420,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
err |= __put_user(sas_ss_flags(oldsp), &frame->uc.uc_stack.ss_flags);
err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
- err |= setup_sigcontext(&frame->uc.uc_mcontext, regs,
+ err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, sw,
set->sig[0], oldsp);
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
if (err)
@@ -465,15 +464,15 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
*/
static inline void
handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
- struct pt_regs * regs)
+ struct pt_regs * regs, struct switch_stack *sw)
{
sigset_t *oldset = sigmask_to_save();
int ret;
if (ka->sa.sa_flags & SA_SIGINFO)
- ret = setup_rt_frame(sig, ka, info, oldset, regs);
+ ret = setup_rt_frame(sig, ka, info, oldset, regs, sw);
else
- ret = setup_frame(sig, ka, oldset, regs);
+ ret = setup_frame(sig, ka, oldset, regs, sw);
if (ret) {
force_sigsegv(sig, current);
@@ -520,7 +519,8 @@ syscall_restart(unsigned long r0, unsigned long r19,
* all (if we get here from anything but a syscall return, it will be 0)
*/
static void
-do_signal(struct pt_regs *regs, unsigned long r0, unsigned long r19)
+do_signal(struct pt_regs * regs, struct switch_stack * sw,
+ unsigned long r0, unsigned long r19)
{
siginfo_t info;
int signr;
@@ -537,7 +537,7 @@ do_signal(struct pt_regs *regs, unsigned long r0, unsigned long r19)
/* Whee! Actually deliver the signal. */
if (r0)
syscall_restart(r0, r19, regs, &ka);
- handle_signal(signr, &ka, &info, regs);
+ handle_signal(signr, &ka, &info, regs, sw);
if (single_stepping)
ptrace_set_bpt(current); /* re-set bpt */
return;
@@ -568,23 +568,15 @@ do_signal(struct pt_regs *regs, unsigned long r0, unsigned long r19)
}
void
-do_work_pending(struct pt_regs *regs, unsigned long thread_flags,
+do_notify_resume(struct pt_regs *regs, struct switch_stack *sw,
+ unsigned long thread_info_flags,
unsigned long r0, unsigned long r19)
{
- do {
- if (thread_flags & _TIF_NEED_RESCHED) {
- schedule();
- } else {
- local_irq_enable();
- if (thread_flags & _TIF_SIGPENDING) {
- do_signal(regs, r0, r19);
- r0 = 0;
- } else {
- clear_thread_flag(TIF_NOTIFY_RESUME);
- tracehook_notify_resume(regs);
- }
- }
- local_irq_disable();
- thread_flags = current_thread_info()->flags;
- } while (thread_flags & _TIF_WORK_MASK);
+ if (thread_info_flags & _TIF_SIGPENDING)
+ do_signal(regs, sw, r0, r19);
+
+ if (thread_info_flags & _TIF_NOTIFY_RESUME) {
+ clear_thread_flag(TIF_NOTIFY_RESUME);
+ tracehook_notify_resume(regs);
+ }
}
diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig
index 431c3753145a..767aae8277fa 100644
--- a/trunk/arch/arm/Kconfig
+++ b/trunk/arch/arm/Kconfig
@@ -53,7 +53,6 @@ config ARM
select GENERIC_STRNLEN_USER
select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN
select GENERIC_KERNEL_THREAD
- select GENERIC_KERNEL_EXECVE
help
The ARM series is a line of low-power-consumption RISC chip designs
licensed by ARM Ltd and targeted at embedded applications and
diff --git a/trunk/arch/arm/boot/compressed/.gitignore b/trunk/arch/arm/boot/compressed/.gitignore
index f79a08efe000..d0d441c429ae 100644
--- a/trunk/arch/arm/boot/compressed/.gitignore
+++ b/trunk/arch/arm/boot/compressed/.gitignore
@@ -1,7 +1,6 @@
ashldi3.S
font.c
lib1funcs.S
-hyp-stub.S
piggy.gzip
piggy.lzo
piggy.lzma
diff --git a/trunk/arch/arm/boot/compressed/Makefile b/trunk/arch/arm/boot/compressed/Makefile
index a517153a13ea..bb267562e7ed 100644
--- a/trunk/arch/arm/boot/compressed/Makefile
+++ b/trunk/arch/arm/boot/compressed/Makefile
@@ -30,10 +30,6 @@ FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
OBJS += string.o
CFLAGS_string.o := -Os
-ifeq ($(CONFIG_ARM_VIRT_EXT),y)
-OBJS += hyp-stub.o
-endif
-
#
# Architecture dependencies
#
@@ -130,7 +126,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
endif
ccflags-y := -fpic -fno-builtin -I$(obj)
-asflags-y := -Wa,-march=all -DZIMAGE
+asflags-y := -Wa,-march=all
# Supply kernel BSS size to the decompressor via a linker symbol.
KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \
@@ -202,6 +198,3 @@ $(obj)/font.c: $(FONTC)
$(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile $(KCONFIG_CONFIG)
@sed "$(SEDFLAGS)" < $< > $@
-
-$(obj)/hyp-stub.S: $(srctree)/arch/$(SRCARCH)/kernel/hyp-stub.S
- $(call cmd,shipped)
diff --git a/trunk/arch/arm/boot/compressed/head.S b/trunk/arch/arm/boot/compressed/head.S
index 90275f036cd1..bc67cbff3944 100644
--- a/trunk/arch/arm/boot/compressed/head.S
+++ b/trunk/arch/arm/boot/compressed/head.S
@@ -9,7 +9,6 @@
* published by the Free Software Foundation.
*/
#include
-#include
/*
* Debugging stuff
@@ -133,12 +132,7 @@ start:
.word start @ absolute load/run zImage address
.word _edata @ zImage end address
THUMB( .thumb )
-1:
- mrs r9, cpsr
-#ifdef CONFIG_ARM_VIRT_EXT
- bl __hyp_stub_install @ get into SVC mode, reversibly
-#endif
- mov r7, r1 @ save architecture ID
+1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer
#ifndef __ARM_ARCH_2__
@@ -154,9 +148,9 @@ start:
ARM( swi 0x123456 ) @ angel_SWI_ARM
THUMB( svc 0xab ) @ angel_SWI_THUMB
not_angel:
- safe_svcmode_maskall r0
- msr spsr_cxsf, r9 @ Save the CPU boot mode in
- @ SPSR
+ mrs r2, cpsr @ turn off interrupts to
+ orr r2, r2, #0xc0 @ prevent angel from running
+ msr cpsr_c, r2
#else
teqp pc, #0x0c000003 @ turn off interrupts
#endif
@@ -356,20 +350,6 @@ dtb_check_done:
adr r5, restart
bic r5, r5, #31
-/* Relocate the hyp vector base if necessary */
-#ifdef CONFIG_ARM_VIRT_EXT
- mrs r0, spsr
- and r0, r0, #MODE_MASK
- cmp r0, #HYP_MODE
- bne 1f
-
- bl __hyp_get_vectors
- sub r0, r0, r5
- add r0, r0, r10
- bl __hyp_set_vectors
-1:
-#endif
-
sub r9, r6, r5 @ size to copy
add r9, r9, #31 @ rounded up to a multiple
bic r9, r9, #31 @ ... of 32 bytes
@@ -478,29 +458,11 @@ not_relocated: mov r0, #0
bl decompress_kernel
bl cache_clean_flush
bl cache_off
+ mov r0, #0 @ must be zero
mov r1, r7 @ restore architecture number
mov r2, r8 @ restore atags pointer
-
-#ifdef CONFIG_ARM_VIRT_EXT
- mrs r0, spsr @ Get saved CPU boot mode
- and r0, r0, #MODE_MASK
- cmp r0, #HYP_MODE @ if not booted in HYP mode...
- bne __enter_kernel @ boot kernel directly
-
- adr r12, .L__hyp_reentry_vectors_offset
- ldr r0, [r12]
- add r0, r0, r12
-
- bl __hyp_set_vectors
- __HVC(0) @ otherwise bounce to hyp mode
-
- b . @ should never be reached
-
- .align 2
-.L__hyp_reentry_vectors_offset: .long __hyp_reentry_vectors - .
-#else
- b __enter_kernel
-#endif
+ ARM( mov pc, r4 ) @ call kernel
+ THUMB( bx r4 ) @ entry point is always ARM
.align 2
.type LC0, #object
@@ -1234,25 +1196,6 @@ memdump: mov r12, r0
#endif
.ltorg
-
-#ifdef CONFIG_ARM_VIRT_EXT
-.align 5
-__hyp_reentry_vectors:
- W(b) . @ reset
- W(b) . @ undef
- W(b) . @ svc
- W(b) . @ pabort
- W(b) . @ dabort
- W(b) __enter_kernel @ hyp
- W(b) . @ irq
- W(b) . @ fiq
-#endif /* CONFIG_ARM_VIRT_EXT */
-
-__enter_kernel:
- mov r0, #0 @ must be 0
- ARM( mov pc, r4 ) @ call kernel
- THUMB( bx r4 ) @ entry point is always ARM
-
reloc_code_end:
.align
diff --git a/trunk/arch/arm/include/asm/assembler.h b/trunk/arch/arm/include/asm/assembler.h
index 2ef95813fce0..5c8b3bf4d825 100644
--- a/trunk/arch/arm/include/asm/assembler.h
+++ b/trunk/arch/arm/include/asm/assembler.h
@@ -22,7 +22,6 @@
#include
#include
-#include
#define IOMEM(x) (x)
@@ -240,34 +239,6 @@
.endm
#endif
-/*
- * Helper macro to enter SVC mode cleanly and mask interrupts. reg is
- * a scratch register for the macro to overwrite.
- *
- * This macro is intended for forcing the CPU into SVC mode at boot time.
- * you cannot return to the original mode.
- *
- * Beware, it also clobers LR.
- */
-.macro safe_svcmode_maskall reg:req
- mrs \reg , cpsr
- mov lr , \reg
- and lr , lr , #MODE_MASK
- cmp lr , #HYP_MODE
- orr \reg , \reg , #PSR_I_BIT | PSR_F_BIT
- bic \reg , \reg , #MODE_MASK
- orr \reg , \reg , #SVC_MODE
-THUMB( orr \reg , \reg , #PSR_T_BIT )
- bne 1f
- orr \reg, \reg, #PSR_A_BIT
- adr lr, BSYM(2f)
- msr spsr_cxsf, \reg
- __MSR_ELR_HYP(14)
- __ERET
-1: msr cpsr_c, \reg
-2:
-.endm
-
/*
* STRT/LDRT access macros with ARM and Thumb-2 variants
*/
diff --git a/trunk/arch/arm/include/asm/cacheflush.h b/trunk/arch/arm/include/asm/cacheflush.h
index e1489c54cd12..e4448e16046d 100644
--- a/trunk/arch/arm/include/asm/cacheflush.h
+++ b/trunk/arch/arm/include/asm/cacheflush.h
@@ -49,13 +49,6 @@
*
* Unconditionally clean and invalidate the entire cache.
*
- * flush_kern_louis()
- *
- * Flush data cache levels up to the level of unification
- * inner shareable and invalidate the I-cache.
- * Only needed from v7 onwards, falls back to flush_cache_all()
- * for all other processor versions.
- *
* flush_user_all()
*
* Clean and invalidate all user space cache entries
@@ -104,7 +97,6 @@
struct cpu_cache_fns {
void (*flush_icache_all)(void);
void (*flush_kern_all)(void);
- void (*flush_kern_louis)(void);
void (*flush_user_all)(void);
void (*flush_user_range)(unsigned long, unsigned long, unsigned int);
@@ -127,7 +119,6 @@ extern struct cpu_cache_fns cpu_cache;
#define __cpuc_flush_icache_all cpu_cache.flush_icache_all
#define __cpuc_flush_kern_all cpu_cache.flush_kern_all
-#define __cpuc_flush_kern_louis cpu_cache.flush_kern_louis
#define __cpuc_flush_user_all cpu_cache.flush_user_all
#define __cpuc_flush_user_range cpu_cache.flush_user_range
#define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range
@@ -148,7 +139,6 @@ extern struct cpu_cache_fns cpu_cache;
extern void __cpuc_flush_icache_all(void);
extern void __cpuc_flush_kern_all(void);
-extern void __cpuc_flush_kern_louis(void);
extern void __cpuc_flush_user_all(void);
extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int);
extern void __cpuc_coherent_kern_range(unsigned long, unsigned long);
@@ -214,11 +204,6 @@ static inline void __flush_icache_all(void)
__flush_icache_preferred();
}
-/*
- * Flush caches up to Level of Unification Inner Shareable
- */
-#define flush_cache_louis() __cpuc_flush_kern_louis()
-
#define flush_cache_all() __cpuc_flush_kern_all()
static inline void vivt_flush_cache_mm(struct mm_struct *mm)
diff --git a/trunk/arch/arm/include/asm/glue-cache.h b/trunk/arch/arm/include/asm/glue-cache.h
index cca9f15704ed..4f8d2c0dc441 100644
--- a/trunk/arch/arm/include/asm/glue-cache.h
+++ b/trunk/arch/arm/include/asm/glue-cache.h
@@ -132,7 +132,6 @@
#ifndef MULTI_CACHE
#define __cpuc_flush_icache_all __glue(_CACHE,_flush_icache_all)
#define __cpuc_flush_kern_all __glue(_CACHE,_flush_kern_cache_all)
-#define __cpuc_flush_kern_louis __glue(_CACHE,_flush_kern_cache_louis)
#define __cpuc_flush_user_all __glue(_CACHE,_flush_user_cache_all)
#define __cpuc_flush_user_range __glue(_CACHE,_flush_user_cache_range)
#define __cpuc_coherent_kern_range __glue(_CACHE,_coherent_kern_range)
diff --git a/trunk/arch/arm/include/asm/opcodes-virt.h b/trunk/arch/arm/include/asm/opcodes-virt.h
index efcfdf92d9d5..b85665a96f8e 100644
--- a/trunk/arch/arm/include/asm/opcodes-virt.h
+++ b/trunk/arch/arm/include/asm/opcodes-virt.h
@@ -26,14 +26,4 @@
0xF7E08000 | (((imm16) & 0xF000) << 4) | ((imm16) & 0x0FFF) \
)
-#define __ERET __inst_arm_thumb32( \
- 0xE160006E, \
- 0xF3DE8F00 \
-)
-
-#define __MSR_ELR_HYP(regnum) __inst_arm_thumb32( \
- 0xE12EF300 | regnum, \
- 0xF3808E30 | (regnum << 16) \
-)
-
#endif /* ! __ASM_ARM_OPCODES_VIRT_H */
diff --git a/trunk/arch/arm/include/asm/ptrace.h b/trunk/arch/arm/include/asm/ptrace.h
index 142d6ae41231..44fe998269d9 100644
--- a/trunk/arch/arm/include/asm/ptrace.h
+++ b/trunk/arch/arm/include/asm/ptrace.h
@@ -44,7 +44,6 @@
#define IRQ_MODE 0x00000012
#define SVC_MODE 0x00000013
#define ABT_MODE 0x00000017
-#define HYP_MODE 0x0000001a
#define UND_MODE 0x0000001b
#define SYSTEM_MODE 0x0000001f
#define MODE32_BIT 0x00000010
diff --git a/trunk/arch/arm/include/asm/thread_info.h b/trunk/arch/arm/include/asm/thread_info.h
index 8477b4c1d39f..f71cdab18b87 100644
--- a/trunk/arch/arm/include/asm/thread_info.h
+++ b/trunk/arch/arm/include/asm/thread_info.h
@@ -151,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
#define TIF_SYSCALL_TRACE 8
#define TIF_SYSCALL_AUDIT 9
#define TIF_SYSCALL_TRACEPOINT 10
+#define TIF_POLLING_NRFLAG 16
#define TIF_USING_IWMMXT 17
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK 20
@@ -163,6 +164,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
+#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
diff --git a/trunk/arch/arm/include/asm/unistd.h b/trunk/arch/arm/include/asm/unistd.h
index 91819ad54424..f259921edfe9 100644
--- a/trunk/arch/arm/include/asm/unistd.h
+++ b/trunk/arch/arm/include/asm/unistd.h
@@ -479,6 +479,7 @@
#define __ARCH_WANT_SYS_SOCKETCALL
#endif
#define __ARCH_WANT_SYS_EXECVE
+#define __ARCH_WANT_KERNEL_EXECVE
/*
* "Conditional" syscalls
diff --git a/trunk/arch/arm/include/asm/vfpmacros.h b/trunk/arch/arm/include/asm/vfpmacros.h
index 6a6f1e485f41..a7aadbd9a6dd 100644
--- a/trunk/arch/arm/include/asm/vfpmacros.h
+++ b/trunk/arch/arm/include/asm/vfpmacros.h
@@ -28,7 +28,7 @@
ldr \tmp, =elf_hwcap @ may not have MVFR regs
ldr \tmp, [\tmp, #0]
tst \tmp, #HWCAP_VFPv3D16
- ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
+ ldceq p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31}
addne \base, \base, #32*4 @ step over unused register space
#else
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
@@ -52,7 +52,7 @@
ldr \tmp, =elf_hwcap @ may not have MVFR regs
ldr \tmp, [\tmp, #0]
tst \tmp, #HWCAP_VFPv3D16
- stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
+ stceq p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31}
addne \base, \base, #32*4 @ step over unused register space
#else
VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0
diff --git a/trunk/arch/arm/include/asm/virt.h b/trunk/arch/arm/include/asm/virt.h
deleted file mode 100644
index 86164df86cb4..000000000000
--- a/trunk/arch/arm/include/asm/virt.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2012 Linaro Limited.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef VIRT_H
-#define VIRT_H
-
-#include
-
-/*
- * Flag indicating that the kernel was not entered in the same mode on every
- * CPU. The zImage loader stashes this value in an SPSR, so we need an
- * architecturally defined flag bit here (the N flag, as it happens)
- */
-#define BOOT_CPU_MODE_MISMATCH (1<<31)
-
-#ifndef __ASSEMBLY__
-
-#ifdef CONFIG_ARM_VIRT_EXT
-/*
- * __boot_cpu_mode records what mode the primary CPU was booted in.
- * A correctly-implemented bootloader must start all CPUs in the same mode:
- * if it fails to do this, the flag BOOT_CPU_MODE_MISMATCH is set to indicate
- * that some CPU(s) were booted in a different mode.
- *
- * This allows the kernel to flag an error when the secondaries have come up.
- */
-extern int __boot_cpu_mode;
-
-void __hyp_set_vectors(unsigned long phys_vector_base);
-unsigned long __hyp_get_vectors(void);
-#else
-#define __boot_cpu_mode (SVC_MODE)
-#endif
-
-#ifndef ZIMAGE
-void hyp_mode_check(void);
-
-/* Reports the availability of HYP mode */
-static inline bool is_hyp_mode_available(void)
-{
- return ((__boot_cpu_mode & MODE_MASK) == HYP_MODE &&
- !(__boot_cpu_mode & BOOT_CPU_MODE_MISMATCH));
-}
-
-/* Check if the bootloader has booted CPUs in different modes */
-static inline bool is_hyp_mode_mismatched(void)
-{
- return !!(__boot_cpu_mode & BOOT_CPU_MODE_MISMATCH);
-}
-#endif
-
-#endif /* __ASSEMBLY__ */
-
-#endif /* ! VIRT_H */
diff --git a/trunk/arch/arm/kernel/Makefile b/trunk/arch/arm/kernel/Makefile
index 5bbec7b8183e..5dfef9d97ed9 100644
--- a/trunk/arch/arm/kernel/Makefile
+++ b/trunk/arch/arm/kernel/Makefile
@@ -81,6 +81,4 @@ head-y := head$(MMUEXT).o
obj-$(CONFIG_DEBUG_LL) += debug.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-obj-$(CONFIG_ARM_VIRT_EXT) += hyp-stub.o
-
extra-y := $(head-y) vmlinux.lds
diff --git a/trunk/arch/arm/kernel/entry-common.S b/trunk/arch/arm/kernel/entry-common.S
index 417bac1846bd..e340fa1db203 100644
--- a/trunk/arch/arm/kernel/entry-common.S
+++ b/trunk/arch/arm/kernel/entry-common.S
@@ -86,14 +86,35 @@ ENDPROC(ret_to_user)
*/
ENTRY(ret_from_fork)
bl schedule_tail
- cmp r5, #0
- movne r0, r4
- movne lr, pc
- movne pc, r5
get_thread_info tsk
+ mov why, #1
b ret_slow_syscall
ENDPROC(ret_from_fork)
+ENTRY(ret_from_kernel_thread)
+ UNWIND(.fnstart)
+ UNWIND(.cantunwind)
+ bl schedule_tail
+ mov r0, r4
+ adr lr, BSYM(1f) @ kernel threads should not exit
+ mov pc, r5
+1: bl do_exit
+ nop
+ UNWIND(.fnend)
+ENDPROC(ret_from_kernel_thread)
+
+/*
+ * turn a kernel thread into userland process
+ * use: ret_from_kernel_execve(struct pt_regs *normal)
+ */
+ENTRY(ret_from_kernel_execve)
+ mov why, #0 @ not a syscall
+ str why, [r0, #S_R0] @ ... and we want 0 in ->ARM_r0 as well
+ get_thread_info tsk @ thread structure
+ mov sp, r0 @ stack pointer just under pt_regs
+ b ret_slow_syscall
+ENDPROC(ret_from_kernel_execve)
+
.equ NR_syscalls,0
#define CALL(x) .equ NR_syscalls,NR_syscalls+1
#include "calls.S"
diff --git a/trunk/arch/arm/kernel/head.S b/trunk/arch/arm/kernel/head.S
index 4eee351f4668..9874d0741191 100644
--- a/trunk/arch/arm/kernel/head.S
+++ b/trunk/arch/arm/kernel/head.S
@@ -83,12 +83,8 @@ ENTRY(stext)
THUMB( .thumb ) @ switch to Thumb now.
THUMB(1: )
-#ifdef CONFIG_ARM_VIRT_EXT
- bl __hyp_stub_install
-#endif
- @ ensure svc mode and all interrupts masked
- safe_svcmode_maskall r9
-
+ setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
+ @ and irqs disabled
mrc p15, 0, r9, c0, c0 @ get processor id
bl __lookup_processor_type @ r5=procinfo r9=cpuid
movs r10, r5 @ invalid processor (r5=0)?
@@ -330,11 +326,7 @@ ENTRY(secondary_startup)
* the processor type - there is no need to check the machine type
* as it has already been validated by the primary processor.
*/
-#ifdef CONFIG_ARM_VIRT_EXT
- bl __hyp_stub_install
-#endif
- safe_svcmode_maskall r9
-
+ setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9
mrc p15, 0, r9, c0, c0 @ get processor id
bl __lookup_processor_type
movs r10, r5 @ invalid processor?
diff --git a/trunk/arch/arm/kernel/hyp-stub.S b/trunk/arch/arm/kernel/hyp-stub.S
deleted file mode 100644
index 65b2417aebce..000000000000
--- a/trunk/arch/arm/kernel/hyp-stub.S
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2012 Linaro Limited.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include
-#include
-#include
-#include
-
-#ifndef ZIMAGE
-/*
- * For the kernel proper, we need to find out the CPU boot mode long after
- * boot, so we need to store it in a writable variable.
- *
- * This is not in .bss, because we set it sufficiently early that the boot-time
- * zeroing of .bss would clobber it.
- */
-.data
-ENTRY(__boot_cpu_mode)
- .long 0
-.text
-
- /*
- * Save the primary CPU boot mode. Requires 3 scratch registers.
- */
- .macro store_primary_cpu_mode reg1, reg2, reg3
- mrs \reg1, cpsr
- and \reg1, \reg1, #MODE_MASK
- adr \reg2, .L__boot_cpu_mode_offset
- ldr \reg3, [\reg2]
- str \reg1, [\reg2, \reg3]
- .endm
-
- /*
- * Compare the current mode with the one saved on the primary CPU.
- * If they don't match, record that fact. The Z bit indicates
- * if there's a match or not.
- * Requires 3 additionnal scratch registers.
- */
- .macro compare_cpu_mode_with_primary mode, reg1, reg2, reg3
- adr \reg2, .L__boot_cpu_mode_offset
- ldr \reg3, [\reg2]
- ldr \reg1, [\reg2, \reg3]
- cmp \mode, \reg1 @ matches primary CPU boot mode?
- orrne r7, r7, #BOOT_CPU_MODE_MISMATCH
- strne r7, [r5, r6] @ record what happened and give up
- .endm
-
-#else /* ZIMAGE */
-
- .macro store_primary_cpu_mode reg1:req, reg2:req, reg3:req
- .endm
-
-/*
- * The zImage loader only runs on one CPU, so we don't bother with mult-CPU
- * consistency checking:
- */
- .macro compare_cpu_mode_with_primary mode, reg1, reg2, reg3
- cmp \mode, \mode
- .endm
-
-#endif /* ZIMAGE */
-
-/*
- * Hypervisor stub installation functions.
- *
- * These must be called with the MMU and D-cache off.
- * They are not ABI compliant and are only intended to be called from the kernel
- * entry points in head.S.
- */
-@ Call this from the primary CPU
-ENTRY(__hyp_stub_install)
- store_primary_cpu_mode r4, r5, r6
-ENDPROC(__hyp_stub_install)
-
- @ fall through...
-
-@ Secondary CPUs should call here
-ENTRY(__hyp_stub_install_secondary)
- mrs r4, cpsr
- and r4, r4, #MODE_MASK
-
- /*
- * If the secondary has booted with a different mode, give up
- * immediately.
- */
- compare_cpu_mode_with_primary r4, r5, r6, r7
- bxne lr
-
- /*
- * Once we have given up on one CPU, we do not try to install the
- * stub hypervisor on the remaining ones: because the saved boot mode
- * is modified, it can't compare equal to the CPSR mode field any
- * more.
- *
- * Otherwise...
- */
-
- cmp r4, #HYP_MODE
- bxne lr @ give up if the CPU is not in HYP mode
-
-/*
- * Configure HSCTLR to set correct exception endianness/instruction set
- * state etc.
- * Turn off all traps
- * Eventually, CPU-specific code might be needed -- assume not for now
- *
- * This code relies on the "eret" instruction to synchronize the
- * various coprocessor accesses.
- */
- @ Now install the hypervisor stub:
- adr r7, __hyp_stub_vectors
- mcr p15, 4, r7, c12, c0, 0 @ set hypervisor vector base (HVBAR)
-
- @ Disable all traps, so we don't get any nasty surprise
- mov r7, #0
- mcr p15, 4, r7, c1, c1, 0 @ HCR
- mcr p15, 4, r7, c1, c1, 2 @ HCPTR
- mcr p15, 4, r7, c1, c1, 3 @ HSTR
-
-THUMB( orr r7, #(1 << 30) ) @ HSCTLR.TE
-#ifdef CONFIG_CPU_BIG_ENDIAN
- orr r7, #(1 << 9) @ HSCTLR.EE
-#endif
- mcr p15, 4, r7, c1, c0, 0 @ HSCTLR
-
- mrc p15, 4, r7, c1, c1, 1 @ HDCR
- and r7, #0x1f @ Preserve HPMN
- mcr p15, 4, r7, c1, c1, 1 @ HDCR
-
-#if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER)
- @ make CNTP_* and CNTPCT accessible from PL1
- mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1
- lsr r7, #16
- and r7, #0xf
- cmp r7, #1
- bne 1f
- mrc p15, 4, r7, c14, c1, 0 @ CNTHCTL
- orr r7, r7, #3 @ PL1PCEN | PL1PCTEN
- mcr p15, 4, r7, c14, c1, 0 @ CNTHCTL
-1:
-#endif
-
- bic r7, r4, #MODE_MASK
- orr r7, r7, #SVC_MODE
-THUMB( orr r7, r7, #PSR_T_BIT )
- msr spsr_cxsf, r7 @ This is SPSR_hyp.
-
- __MSR_ELR_HYP(14) @ msr elr_hyp, lr
- __ERET @ return, switching to SVC mode
- @ The boot CPU mode is left in r4.
-ENDPROC(__hyp_stub_install_secondary)
-
-__hyp_stub_do_trap:
- cmp r0, #-1
- mrceq p15, 4, r0, c12, c0, 0 @ get HVBAR
- mcrne p15, 4, r0, c12, c0, 0 @ set HVBAR
- __ERET
-ENDPROC(__hyp_stub_do_trap)
-
-/*
- * __hyp_set_vectors: Call this after boot to set the initial hypervisor
- * vectors as part of hypervisor installation. On an SMP system, this should
- * be called on each CPU.
- *
- * r0 must be the physical address of the new vector table (which must lie in
- * the bottom 4GB of physical address space.
- *
- * r0 must be 32-byte aligned.
- *
- * Before calling this, you must check that the stub hypervisor is installed
- * everywhere, by waiting for any secondary CPUs to be brought up and then
- * checking that BOOT_CPU_MODE_HAVE_HYP(__boot_cpu_mode) is true.
- *
- * If not, there is a pre-existing hypervisor, some CPUs failed to boot, or
- * something else went wrong... in such cases, trying to install a new
- * hypervisor is unlikely to work as desired.
- *
- * When you call into your shiny new hypervisor, sp_hyp will contain junk,
- * so you will need to set that to something sensible at the new hypervisor's
- * initialisation entry point.
- */
-ENTRY(__hyp_get_vectors)
- mov r0, #-1
-ENDPROC(__hyp_get_vectors)
- @ fall through
-ENTRY(__hyp_set_vectors)
- __HVC(0)
- bx lr
-ENDPROC(__hyp_set_vectors)
-
-#ifndef ZIMAGE
-.align 2
-.L__boot_cpu_mode_offset:
- .long __boot_cpu_mode - .
-#endif
-
-.align 5
-__hyp_stub_vectors:
-__hyp_stub_reset: W(b) .
-__hyp_stub_und: W(b) .
-__hyp_stub_svc: W(b) .
-__hyp_stub_pabort: W(b) .
-__hyp_stub_dabort: W(b) .
-__hyp_stub_trap: W(b) __hyp_stub_do_trap
-__hyp_stub_irq: W(b) .
-__hyp_stub_fiq: W(b) .
-ENDPROC(__hyp_stub_vectors)
-
diff --git a/trunk/arch/arm/kernel/process.c b/trunk/arch/arm/kernel/process.c
index 90084a6de35a..f98c17ff1957 100644
--- a/trunk/arch/arm/kernel/process.c
+++ b/trunk/arch/arm/kernel/process.c
@@ -373,6 +373,7 @@ void release_thread(struct task_struct *dead_task)
}
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
+asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
int
copy_thread(unsigned long clone_flags, unsigned long stack_start,
@@ -387,13 +388,13 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start,
*childregs = *regs;
childregs->ARM_r0 = 0;
childregs->ARM_sp = stack_start;
+ thread->cpu_context.pc = (unsigned long)ret_from_fork;
} else {
- memset(childregs, 0, sizeof(struct pt_regs));
thread->cpu_context.r4 = stk_sz;
thread->cpu_context.r5 = stack_start;
+ thread->cpu_context.pc = (unsigned long)ret_from_kernel_thread;
childregs->ARM_cpsr = SVC_MODE;
}
- thread->cpu_context.pc = (unsigned long)ret_from_fork;
thread->cpu_context.sp = (unsigned long)childregs;
clear_ptrace_hw_breakpoint(p);
diff --git a/trunk/arch/arm/kernel/setup.c b/trunk/arch/arm/kernel/setup.c
index da1d1aa20ad9..febafa0f552d 100644
--- a/trunk/arch/arm/kernel/setup.c
+++ b/trunk/arch/arm/kernel/setup.c
@@ -53,7 +53,6 @@
#include
#include
#include
-#include
#include "atags.h"
#include "tcm.h"
@@ -704,21 +703,6 @@ static int __init meminfo_cmp(const void *_a, const void *_b)
return cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
}
-void __init hyp_mode_check(void)
-{
-#ifdef CONFIG_ARM_VIRT_EXT
- if (is_hyp_mode_available()) {
- pr_info("CPU: All CPU(s) started in HYP mode.\n");
- pr_info("CPU: Virtualization extensions available.\n");
- } else if (is_hyp_mode_mismatched()) {
- pr_warn("CPU: WARNING: CPU(s) started in wrong/inconsistent modes (primary CPU mode 0x%x)\n",
- __boot_cpu_mode & MODE_MASK);
- pr_warn("CPU: This may indicate a broken bootloader or firmware.\n");
- } else
- pr_info("CPU: All CPU(s) started in SVC mode.\n");
-#endif
-}
-
void __init setup_arch(char **cmdline_p)
{
struct machine_desc *mdesc;
@@ -764,10 +748,6 @@ void __init setup_arch(char **cmdline_p)
smp_init_cpus();
}
#endif
-
- if (!is_smp())
- hyp_mode_check();
-
reserve_crashkernel();
tcm_init();
diff --git a/trunk/arch/arm/kernel/signal.c b/trunk/arch/arm/kernel/signal.c
index 56f72d257ebd..f27789e4e38a 100644
--- a/trunk/arch/arm/kernel/signal.c
+++ b/trunk/arch/arm/kernel/signal.c
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
#include
diff --git a/trunk/arch/arm/kernel/smp.c b/trunk/arch/arm/kernel/smp.c
index 8e20754dd31d..d100eacdb798 100644
--- a/trunk/arch/arm/kernel/smp.c
+++ b/trunk/arch/arm/kernel/smp.c
@@ -43,7 +43,6 @@
#include
#include
#include
-#include
#include
/*
@@ -203,11 +202,8 @@ int __cpuinit __cpu_disable(void)
/*
* Flush user cache and TLB mappings, and then remove this CPU
* from the vm mask set of all processes.
- *
- * Caches are flushed to the Level of Unification Inner Shareable
- * to write-back dirty lines to unified caches shared by all CPUs.
*/
- flush_cache_louis();
+ flush_cache_all();
local_flush_tlb_all();
clear_tasks_mm_cpumask(cpu);
@@ -359,8 +355,6 @@ void __init smp_cpus_done(unsigned int max_cpus)
num_online_cpus(),
bogosum / (500000/HZ),
(bogosum / (5000/HZ)) % 100);
-
- hyp_mode_check();
}
void __init smp_prepare_boot_cpu(void)
diff --git a/trunk/arch/arm/kernel/suspend.c b/trunk/arch/arm/kernel/suspend.c
index 358bca3a995e..1794cc3b0f18 100644
--- a/trunk/arch/arm/kernel/suspend.c
+++ b/trunk/arch/arm/kernel/suspend.c
@@ -17,8 +17,6 @@ extern void cpu_resume_mmu(void);
*/
void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
{
- u32 *ctx = ptr;
-
*save_ptr = virt_to_phys(ptr);
/* This must correspond to the LDM in cpu_resume() assembly */
@@ -28,20 +26,7 @@ void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
cpu_do_suspend(ptr);
- flush_cache_louis();
-
- /*
- * flush_cache_louis does not guarantee that
- * save_ptr and ptr are cleaned to main memory,
- * just up to the Level of Unification Inner Shareable.
- * Since the context pointer and context itself
- * are to be retrieved with the MMU off that
- * data must be cleaned from all cache levels
- * to main memory using "area" cache primitives.
- */
- __cpuc_flush_dcache_area(ctx, ptrsz);
- __cpuc_flush_dcache_area(save_ptr, sizeof(*save_ptr));
-
+ flush_cache_all();
outer_clean_range(*save_ptr, *save_ptr + ptrsz);
outer_clean_range(virt_to_phys(save_ptr),
virt_to_phys(save_ptr) + sizeof(*save_ptr));
diff --git a/trunk/arch/arm/mach-davinci/Kconfig b/trunk/arch/arm/mach-davinci/Kconfig
index 026b4b277ae5..ab99c3c3b752 100644
--- a/trunk/arch/arm/mach-davinci/Kconfig
+++ b/trunk/arch/arm/mach-davinci/Kconfig
@@ -186,13 +186,6 @@ config DA850_UI_RMII
NOTE: Please take care while choosing this option, MII PHY will
not be functional if RMII mode is selected.
-config DA850_UI_SD_VIDEO_PORT
- bool "Video Port Interface"
- help
- Say Y if you want to use Video Port Interface (VPIF) on the
- DA850/OMAP-L138 EVM. The Video decoders/encoders are found on the
- UI daughter card that is supplied with the EVM.
-
endchoice
config DA850_WL12XX
diff --git a/trunk/arch/arm/mach-davinci/board-da850-evm.c b/trunk/arch/arm/mach-davinci/board-da850-evm.c
index 32ee3f895967..1295e616ceee 100644
--- a/trunk/arch/arm/mach-davinci/board-da850-evm.c
+++ b/trunk/arch/arm/mach-davinci/board-da850-evm.c
@@ -45,9 +45,6 @@
#include
#include
-#include
-#include
-
#define DA850_EVM_PHY_ID "davinci_mdio-0:00"
#define DA850_LCD_PWR_PIN GPIO_TO_PIN(2, 8)
#define DA850_LCD_BL_PIN GPIO_TO_PIN(2, 15)
@@ -455,15 +452,6 @@ static void da850_evm_ui_keys_init(unsigned gpio)
}
}
-#ifdef CONFIG_DA850_UI_SD_VIDEO_PORT
-static inline void da850_evm_setup_video_port(int video_sel)
-{
- gpio_set_value_cansleep(video_sel, 0);
-}
-#else
-static inline void da850_evm_setup_video_port(int video_sel) { }
-#endif
-
static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
unsigned ngpio, void *c)
{
@@ -509,8 +497,6 @@ static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
da850_evm_setup_emac_rmii(sel_a);
- da850_evm_setup_video_port(sel_c);
-
return 0;
exp_setup_keys_fail:
@@ -1163,169 +1149,6 @@ static __init int da850_evm_init_cpufreq(void)
static __init int da850_evm_init_cpufreq(void) { return 0; }
#endif
-#if defined(CONFIG_DA850_UI_SD_VIDEO_PORT)
-
-#define TVP5147_CH0 "tvp514x-0"
-#define TVP5147_CH1 "tvp514x-1"
-
-/* VPIF capture configuration */
-static struct tvp514x_platform_data tvp5146_pdata = {
- .clk_polarity = 0,
- .hs_polarity = 1,
- .vs_polarity = 1,
-};
-
-#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
-
-static const struct vpif_input da850_ch0_inputs[] = {
- {
- .input = {
- .index = 0,
- .name = "Composite",
- .type = V4L2_INPUT_TYPE_CAMERA,
- .capabilities = V4L2_IN_CAP_STD,
- .std = TVP514X_STD_ALL,
- },
- .input_route = INPUT_CVBS_VI2B,
- .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
- .subdev_name = TVP5147_CH0,
- },
-};
-
-static const struct vpif_input da850_ch1_inputs[] = {
- {
- .input = {
- .index = 0,
- .name = "S-Video",
- .type = V4L2_INPUT_TYPE_CAMERA,
- .capabilities = V4L2_IN_CAP_STD,
- .std = TVP514X_STD_ALL,
- },
- .input_route = INPUT_SVIDEO_VI2C_VI1C,
- .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
- .subdev_name = TVP5147_CH1,
- },
-};
-
-static struct vpif_subdev_info da850_vpif_capture_sdev_info[] = {
- {
- .name = TVP5147_CH0,
- .board_info = {
- I2C_BOARD_INFO("tvp5146", 0x5d),
- .platform_data = &tvp5146_pdata,
- },
- },
- {
- .name = TVP5147_CH1,
- .board_info = {
- I2C_BOARD_INFO("tvp5146", 0x5c),
- .platform_data = &tvp5146_pdata,
- },
- },
-};
-
-static struct vpif_capture_config da850_vpif_capture_config = {
- .subdev_info = da850_vpif_capture_sdev_info,
- .subdev_count = ARRAY_SIZE(da850_vpif_capture_sdev_info),
- .chan_config[0] = {
- .inputs = da850_ch0_inputs,
- .input_count = ARRAY_SIZE(da850_ch0_inputs),
- .vpif_if = {
- .if_type = VPIF_IF_BT656,
- .hd_pol = 1,
- .vd_pol = 1,
- .fid_pol = 0,
- },
- },
- .chan_config[1] = {
- .inputs = da850_ch1_inputs,
- .input_count = ARRAY_SIZE(da850_ch1_inputs),
- .vpif_if = {
- .if_type = VPIF_IF_BT656,
- .hd_pol = 1,
- .vd_pol = 1,
- .fid_pol = 0,
- },
- },
- .card_name = "DA850/OMAP-L138 Video Capture",
-};
-
-/* VPIF display configuration */
-static struct vpif_subdev_info da850_vpif_subdev[] = {
- {
- .name = "adv7343",
- .board_info = {
- I2C_BOARD_INFO("adv7343", 0x2a),
- },
- },
-};
-
-static const struct vpif_output da850_ch0_outputs[] = {
- {
- .output = {
- .index = 0,
- .name = "Composite",
- .type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_STD,
- .std = V4L2_STD_ALL,
- },
- .subdev_name = "adv7343",
- .output_route = ADV7343_COMPOSITE_ID,
- },
- {
- .output = {
- .index = 1,
- .name = "S-Video",
- .type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_STD,
- .std = V4L2_STD_ALL,
- },
- .subdev_name = "adv7343",
- .output_route = ADV7343_SVIDEO_ID,
- },
-};
-
-static struct vpif_display_config da850_vpif_display_config = {
- .subdevinfo = da850_vpif_subdev,
- .subdev_count = ARRAY_SIZE(da850_vpif_subdev),
- .chan_config[0] = {
- .outputs = da850_ch0_outputs,
- .output_count = ARRAY_SIZE(da850_ch0_outputs),
- },
- .card_name = "DA850/OMAP-L138 Video Display",
-};
-
-static __init void da850_vpif_init(void)
-{
- int ret;
-
- ret = da850_register_vpif();
- if (ret)
- pr_warn("da850_evm_init: VPIF setup failed: %d\n", ret);
-
- ret = davinci_cfg_reg_list(da850_vpif_capture_pins);
- if (ret)
- pr_warn("da850_evm_init: VPIF capture mux setup failed: %d\n",
- ret);
-
- ret = da850_register_vpif_capture(&da850_vpif_capture_config);
- if (ret)
- pr_warn("da850_evm_init: VPIF capture setup failed: %d\n", ret);
-
- ret = davinci_cfg_reg_list(da850_vpif_display_pins);
- if (ret)
- pr_warn("da850_evm_init: VPIF display mux setup failed: %d\n",
- ret);
-
- ret = da850_register_vpif_display(&da850_vpif_display_config);
- if (ret)
- pr_warn("da850_evm_init: VPIF display setup failed: %d\n", ret);
-}
-
-#else
-static __init void da850_vpif_init(void) {}
-#endif
-
#ifdef CONFIG_DA850_WL12XX
static void wl12xx_set_power(int index, bool power_on)
@@ -1552,8 +1375,6 @@ static __init void da850_evm_init(void)
pr_warning("da850_evm_init: suspend registration failed: %d\n",
ret);
- da850_vpif_init();
-
ret = da8xx_register_spi(1, da850evm_spi_info,
ARRAY_SIZE(da850evm_spi_info));
if (ret)
diff --git a/trunk/arch/arm/mach-davinci/board-dm644x-evm.c b/trunk/arch/arm/mach-davinci/board-dm644x-evm.c
index f22572cee49d..ca72fc4b8cca 100644
--- a/trunk/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/trunk/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -23,7 +23,6 @@
#include
#include
#include
-#include
#include
#include
@@ -621,7 +620,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
{
.name = "ntsc",
.timings_type = VPBE_ENC_STD,
- .std_id = V4L2_STD_525_60,
+ .timings = {V4L2_STD_525_60},
.interlaced = 1,
.xres = 720,
.yres = 480,
@@ -633,7 +632,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
{
.name = "pal",
.timings_type = VPBE_ENC_STD,
- .std_id = V4L2_STD_625_50,
+ .timings = {V4L2_STD_625_50},
.interlaced = 1,
.xres = 720,
.yres = 576,
@@ -648,8 +647,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
{
.name = "480p59_94",
- .timings_type = VPBE_ENC_CUSTOM_TIMINGS,
- .dv_timings = V4L2_DV_BT_CEA_720X480P59_94,
+ .timings_type = VPBE_ENC_DV_PRESET,
+ .timings = {V4L2_DV_480P59_94},
.interlaced = 0,
.xres = 720,
.yres = 480,
@@ -660,8 +659,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
},
{
.name = "576p50",
- .timings_type = VPBE_ENC_CUSTOM_TIMINGS,
- .dv_timings = V4L2_DV_BT_CEA_720X576P50,
+ .timings_type = VPBE_ENC_DV_PRESET,
+ .timings = {V4L2_DV_576P50},
.interlaced = 0,
.xres = 720,
.yres = 576,
@@ -699,7 +698,7 @@ static struct vpbe_output dm644xevm_vpbe_outputs[] = {
.index = 1,
.name = "Component",
.type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_DV_TIMINGS,
+ .capabilities = V4L2_OUT_CAP_PRESETS,
},
.subdev_name = VPBE_VENC_SUBDEV_NAME,
.default_mode = "480p59_94",
diff --git a/trunk/arch/arm/mach-davinci/board-dm646x-evm.c b/trunk/arch/arm/mach-davinci/board-dm646x-evm.c
index 1dbf85beed1b..9944367b4931 100644
--- a/trunk/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/trunk/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -26,7 +26,6 @@
#include
#include
-#include
#include
#include
@@ -497,49 +496,18 @@ static struct vpif_subdev_info dm646x_vpif_subdev[] = {
},
};
-static const struct vpif_output dm6467_ch0_outputs[] = {
- {
- .output = {
- .index = 0,
- .name = "Composite",
- .type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_STD,
- .std = V4L2_STD_ALL,
- },
- .subdev_name = "adv7343",
- .output_route = ADV7343_COMPOSITE_ID,
- },
- {
- .output = {
- .index = 1,
- .name = "Component",
- .type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_CUSTOM_TIMINGS,
- },
- .subdev_name = "adv7343",
- .output_route = ADV7343_COMPONENT_ID,
- },
- {
- .output = {
- .index = 2,
- .name = "S-Video",
- .type = V4L2_OUTPUT_TYPE_ANALOG,
- .capabilities = V4L2_OUT_CAP_STD,
- .std = V4L2_STD_ALL,
- },
- .subdev_name = "adv7343",
- .output_route = ADV7343_SVIDEO_ID,
- },
+static const char *output[] = {
+ "Composite",
+ "Component",
+ "S-Video",
};
static struct vpif_display_config dm646x_vpif_display_config = {
.set_clock = set_vpif_clock,
.subdevinfo = dm646x_vpif_subdev,
.subdev_count = ARRAY_SIZE(dm646x_vpif_subdev),
- .chan_config[0] = {
- .outputs = dm6467_ch0_outputs,
- .output_count = ARRAY_SIZE(dm6467_ch0_outputs),
- },
+ .output = output,
+ .output_count = ARRAY_SIZE(output),
.card_name = "DM646x EVM",
};
@@ -633,6 +601,15 @@ static struct vpif_subdev_info vpif_capture_sdev_info[] = {
I2C_BOARD_INFO("tvp5146", 0x5d),
.platform_data = &tvp5146_pdata,
},
+ .input = INPUT_CVBS_VI2B,
+ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+ .can_route = 1,
+ .vpif_if = {
+ .if_type = VPIF_IF_BT656,
+ .hd_pol = 1,
+ .vd_pol = 1,
+ .fid_pol = 0,
+ },
},
{
.name = TVP5147_CH1,
@@ -640,6 +617,15 @@ static struct vpif_subdev_info vpif_capture_sdev_info[] = {
I2C_BOARD_INFO("tvp5146", 0x5c),
.platform_data = &tvp5146_pdata,
},
+ .input = INPUT_SVIDEO_VI2C_VI1C,
+ .output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
+ .can_route = 1,
+ .vpif_if = {
+ .if_type = VPIF_IF_BT656,
+ .hd_pol = 1,
+ .vd_pol = 1,
+ .fid_pol = 0,
+ },
},
};
@@ -649,12 +635,9 @@ static const struct vpif_input dm6467_ch0_inputs[] = {
.index = 0,
.name = "Composite",
.type = V4L2_INPUT_TYPE_CAMERA,
- .capabilities = V4L2_IN_CAP_STD,
.std = TVP514X_STD_ALL,
},
.subdev_name = TVP5147_CH0,
- .input_route = INPUT_CVBS_VI2B,
- .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
},
};
@@ -664,12 +647,9 @@ static const struct vpif_input dm6467_ch1_inputs[] = {
.index = 0,
.name = "S-Video",
.type = V4L2_INPUT_TYPE_CAMERA,
- .capabilities = V4L2_IN_CAP_STD,
.std = TVP514X_STD_ALL,
},
.subdev_name = TVP5147_CH1,
- .input_route = INPUT_SVIDEO_VI2C_VI1C,
- .output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC,
},
};
@@ -681,22 +661,10 @@ static struct vpif_capture_config dm646x_vpif_capture_cfg = {
.chan_config[0] = {
.inputs = dm6467_ch0_inputs,
.input_count = ARRAY_SIZE(dm6467_ch0_inputs),
- .vpif_if = {
- .if_type = VPIF_IF_BT656,
- .hd_pol = 1,
- .vd_pol = 1,
- .fid_pol = 0,
- },
},
.chan_config[1] = {
.inputs = dm6467_ch1_inputs,
.input_count = ARRAY_SIZE(dm6467_ch1_inputs),
- .vpif_if = {
- .if_type = VPIF_IF_BT656,
- .hd_pol = 1,
- .vd_pol = 1,
- .fid_pol = 0,
- },
},
};
diff --git a/trunk/arch/arm/mach-davinci/da850.c b/trunk/arch/arm/mach-davinci/da850.c
index b90c172d5541..e517e1036b09 100644
--- a/trunk/arch/arm/mach-davinci/da850.c
+++ b/trunk/arch/arm/mach-davinci/da850.c
@@ -347,13 +347,6 @@ static struct clk spi1_clk = {
.flags = DA850_CLK_ASYNC3,
};
-static struct clk vpif_clk = {
- .name = "vpif",
- .parent = &pll0_sysclk2,
- .lpsc = DA850_LPSC1_VPIF,
- .gpsc = 1,
-};
-
static struct clk sata_clk = {
.name = "sata",
.parent = &pll0_sysclk2,
@@ -404,7 +397,6 @@ static struct clk_lookup da850_clks[] = {
CLK(NULL, "usb20", &usb20_clk),
CLK("spi_davinci.0", NULL, &spi0_clk),
CLK("spi_davinci.1", NULL, &spi1_clk),
- CLK("vpif", NULL, &vpif_clk),
CLK("ahci", NULL, &sata_clk),
CLK(NULL, NULL, NULL),
};
@@ -581,46 +573,6 @@ static const struct mux_config da850_pins[] = {
MUX_CFG(DA850, GPIO6_10, 13, 20, 15, 8, false)
MUX_CFG(DA850, GPIO6_13, 13, 8, 15, 8, false)
MUX_CFG(DA850, RTC_ALARM, 0, 28, 15, 2, false)
- /* VPIF Capture */
- MUX_CFG(DA850, VPIF_DIN0, 15, 4, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN1, 15, 0, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN2, 14, 28, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN3, 14, 24, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN4, 14, 20, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN5, 14, 16, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN6, 14, 12, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN7, 14, 8, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN8, 16, 4, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN9, 16, 0, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN10, 15, 28, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN11, 15, 24, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN12, 15, 20, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN13, 15, 16, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN14, 15, 12, 15, 1, false)
- MUX_CFG(DA850, VPIF_DIN15, 15, 8, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKIN0, 14, 0, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKIN1, 14, 4, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKIN2, 19, 8, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKIN3, 19, 16, 15, 1, false)
- /* VPIF Display */
- MUX_CFG(DA850, VPIF_DOUT0, 17, 4, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT1, 17, 0, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT2, 16, 28, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT3, 16, 24, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT4, 16, 20, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT5, 16, 16, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT6, 16, 12, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT7, 16, 8, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT8, 18, 4, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT9, 18, 0, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT10, 17, 28, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT11, 17, 24, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT12, 17, 20, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT13, 17, 16, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT14, 17, 12, 15, 1, false)
- MUX_CFG(DA850, VPIF_DOUT15, 17, 8, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKO2, 19, 12, 15, 1, false)
- MUX_CFG(DA850, VPIF_CLKO3, 19, 20, 15, 1, false)
#endif
};
@@ -643,26 +595,6 @@ const short da850_lcdcntl_pins[] __initconst = {
-1
};
-const short da850_vpif_capture_pins[] __initdata = {
- DA850_VPIF_DIN0, DA850_VPIF_DIN1, DA850_VPIF_DIN2, DA850_VPIF_DIN3,
- DA850_VPIF_DIN4, DA850_VPIF_DIN5, DA850_VPIF_DIN6, DA850_VPIF_DIN7,
- DA850_VPIF_DIN8, DA850_VPIF_DIN9, DA850_VPIF_DIN10, DA850_VPIF_DIN11,
- DA850_VPIF_DIN12, DA850_VPIF_DIN13, DA850_VPIF_DIN14, DA850_VPIF_DIN15,
- DA850_VPIF_CLKIN0, DA850_VPIF_CLKIN1, DA850_VPIF_CLKIN2,
- DA850_VPIF_CLKIN3,
- -1
-};
-
-const short da850_vpif_display_pins[] __initdata = {
- DA850_VPIF_DOUT0, DA850_VPIF_DOUT1, DA850_VPIF_DOUT2, DA850_VPIF_DOUT3,
- DA850_VPIF_DOUT4, DA850_VPIF_DOUT5, DA850_VPIF_DOUT6, DA850_VPIF_DOUT7,
- DA850_VPIF_DOUT8, DA850_VPIF_DOUT9, DA850_VPIF_DOUT10,
- DA850_VPIF_DOUT11, DA850_VPIF_DOUT12, DA850_VPIF_DOUT13,
- DA850_VPIF_DOUT14, DA850_VPIF_DOUT15, DA850_VPIF_CLKO2,
- DA850_VPIF_CLKO3,
- -1
-};
-
/* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */
static u8 da850_default_priorities[DA850_N_CP_INTC_IRQ] = {
[IRQ_DA8XX_COMMTX] = 7,
@@ -1132,90 +1064,6 @@ int __init da850_register_pm(struct platform_device *pdev)
return ret;
}
-/* VPIF resource, platform data */
-static u64 da850_vpif_dma_mask = DMA_BIT_MASK(32);
-
-static struct resource da850_vpif_resource[] = {
- {
- .start = DA8XX_VPIF_BASE,
- .end = DA8XX_VPIF_BASE + 0xfff,
- .flags = IORESOURCE_MEM,
- }
-};
-
-static struct platform_device da850_vpif_dev = {
- .name = "vpif",
- .id = -1,
- .dev = {
- .dma_mask = &da850_vpif_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = da850_vpif_resource,
- .num_resources = ARRAY_SIZE(da850_vpif_resource),
-};
-
-static struct resource da850_vpif_display_resource[] = {
- {
- .start = IRQ_DA850_VPIFINT,
- .end = IRQ_DA850_VPIFINT,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device da850_vpif_display_dev = {
- .name = "vpif_display",
- .id = -1,
- .dev = {
- .dma_mask = &da850_vpif_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = da850_vpif_display_resource,
- .num_resources = ARRAY_SIZE(da850_vpif_display_resource),
-};
-
-static struct resource da850_vpif_capture_resource[] = {
- {
- .start = IRQ_DA850_VPIFINT,
- .end = IRQ_DA850_VPIFINT,
- .flags = IORESOURCE_IRQ,
- },
- {
- .start = IRQ_DA850_VPIFINT,
- .end = IRQ_DA850_VPIFINT,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device da850_vpif_capture_dev = {
- .name = "vpif_capture",
- .id = -1,
- .dev = {
- .dma_mask = &da850_vpif_dma_mask,
- .coherent_dma_mask = DMA_BIT_MASK(32),
- },
- .resource = da850_vpif_capture_resource,
- .num_resources = ARRAY_SIZE(da850_vpif_capture_resource),
-};
-
-int __init da850_register_vpif(void)
-{
- return platform_device_register(&da850_vpif_dev);
-}
-
-int __init da850_register_vpif_display(struct vpif_display_config
- *display_config)
-{
- da850_vpif_display_dev.dev.platform_data = display_config;
- return platform_device_register(&da850_vpif_display_dev);
-}
-
-int __init da850_register_vpif_capture(struct vpif_capture_config
- *capture_config)
-{
- da850_vpif_capture_dev.dev.platform_data = capture_config;
- return platform_device_register(&da850_vpif_capture_dev);
-}
-
static struct davinci_soc_info davinci_soc_info_da850 = {
.io_desc = da850_io_desc,
.io_desc_num = ARRAY_SIZE(da850_io_desc),
diff --git a/trunk/arch/arm/mach-davinci/dm644x.c b/trunk/arch/arm/mach-davinci/dm644x.c
index cd0c8b1e1ecf..0755d466221a 100644
--- a/trunk/arch/arm/mach-davinci/dm644x.c
+++ b/trunk/arch/arm/mach-davinci/dm644x.c
@@ -701,7 +701,7 @@ static struct resource dm644x_venc_resources[] = {
#define DM644X_VPSS_DACCLKEN BIT(4)
static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
- unsigned int pclock)
+ unsigned int mode)
{
int ret = 0;
u32 v = DM644X_VPSS_VENCLKEN;
@@ -711,18 +711,27 @@ static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
v |= DM644X_VPSS_DACCLKEN;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
break;
- case VPBE_ENC_CUSTOM_TIMINGS:
- if (pclock <= 27000000) {
+ case VPBE_ENC_DV_PRESET:
+ switch (mode) {
+ case V4L2_DV_480P59_94:
+ case V4L2_DV_576P50:
v |= DM644X_VPSS_MUXSEL_PLL2_MODE |
DM644X_VPSS_DACCLKEN;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
- } else {
+ break;
+ case V4L2_DV_720P60:
+ case V4L2_DV_1080I60:
+ case V4L2_DV_1080P30:
/*
* For HD, use external clock source since
* HD requires higher clock rate
*/
v |= DM644X_VPSS_MUXSEL_VPBECLK_MODE;
writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
+ break;
+ default:
+ ret = -EINVAL;
+ break;
}
break;
default:
diff --git a/trunk/arch/arm/mach-davinci/include/mach/da8xx.h b/trunk/arch/arm/mach-davinci/include/mach/da8xx.h
index aaccdc4528fc..c9ee723c56f3 100644
--- a/trunk/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/trunk/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -17,7 +17,6 @@
#include
#include
#include
-#include
#include
#include
@@ -27,8 +26,6 @@
#include
#include
-#include
-
extern void __iomem *da8xx_syscfg0_base;
extern void __iomem *da8xx_syscfg1_base;
@@ -66,7 +63,6 @@ extern unsigned int da850_max_speed;
#define DA8XX_PLL0_BASE 0x01c11000
#define DA8XX_TIMER64P0_BASE 0x01c20000
#define DA8XX_TIMER64P1_BASE 0x01c21000
-#define DA8XX_VPIF_BASE 0x01e17000
#define DA8XX_GPIO_BASE 0x01e26000
#define DA8XX_PSC1_BASE 0x01e27000
#define DA8XX_AEMIF_CS2_BASE 0x60000000
@@ -96,11 +92,6 @@ int da8xx_register_cpuidle(void);
void __iomem * __init da8xx_get_mem_ctlr(void);
int da850_register_pm(struct platform_device *pdev);
int __init da850_register_sata(unsigned long refclkpn);
-int __init da850_register_vpif(void);
-int __init da850_register_vpif_display
- (struct vpif_display_config *display_config);
-int __init da850_register_vpif_capture
- (struct vpif_capture_config *capture_config);
void da8xx_restart(char mode, const char *cmd);
extern struct platform_device da8xx_serial_device;
@@ -135,8 +126,6 @@ extern const short da830_ecap1_pins[];
extern const short da830_ecap2_pins[];
extern const short da830_eqep0_pins[];
extern const short da830_eqep1_pins[];
-extern const short da850_vpif_capture_pins[];
-extern const short da850_vpif_display_pins[];
extern const short da850_i2c0_pins[];
extern const short da850_i2c1_pins[];
diff --git a/trunk/arch/arm/mach-davinci/include/mach/mux.h b/trunk/arch/arm/mach-davinci/include/mach/mux.h
index 9e95b8a1edb6..a7e92fca32e6 100644
--- a/trunk/arch/arm/mach-davinci/include/mach/mux.h
+++ b/trunk/arch/arm/mach-davinci/include/mach/mux.h
@@ -928,48 +928,6 @@ enum davinci_da850_index {
DA850_GPIO6_10,
DA850_GPIO6_13,
DA850_RTC_ALARM,
-
- /* VPIF Capture */
- DA850_VPIF_DIN0,
- DA850_VPIF_DIN1,
- DA850_VPIF_DIN2,
- DA850_VPIF_DIN3,
- DA850_VPIF_DIN4,
- DA850_VPIF_DIN5,
- DA850_VPIF_DIN6,
- DA850_VPIF_DIN7,
- DA850_VPIF_DIN8,
- DA850_VPIF_DIN9,
- DA850_VPIF_DIN10,
- DA850_VPIF_DIN11,
- DA850_VPIF_DIN12,
- DA850_VPIF_DIN13,
- DA850_VPIF_DIN14,
- DA850_VPIF_DIN15,
- DA850_VPIF_CLKIN0,
- DA850_VPIF_CLKIN1,
- DA850_VPIF_CLKIN2,
- DA850_VPIF_CLKIN3,
-
- /* VPIF Display */
- DA850_VPIF_DOUT0,
- DA850_VPIF_DOUT1,
- DA850_VPIF_DOUT2,
- DA850_VPIF_DOUT3,
- DA850_VPIF_DOUT4,
- DA850_VPIF_DOUT5,
- DA850_VPIF_DOUT6,
- DA850_VPIF_DOUT7,
- DA850_VPIF_DOUT8,
- DA850_VPIF_DOUT9,
- DA850_VPIF_DOUT10,
- DA850_VPIF_DOUT11,
- DA850_VPIF_DOUT12,
- DA850_VPIF_DOUT13,
- DA850_VPIF_DOUT14,
- DA850_VPIF_DOUT15,
- DA850_VPIF_CLKO2,
- DA850_VPIF_CLKO3,
};
enum davinci_tnetv107x_index {
diff --git a/trunk/arch/arm/mach-davinci/include/mach/psc.h b/trunk/arch/arm/mach-davinci/include/mach/psc.h
index 40a0027838e8..405318e35bf6 100644
--- a/trunk/arch/arm/mach-davinci/include/mach/psc.h
+++ b/trunk/arch/arm/mach-davinci/include/mach/psc.h
@@ -166,7 +166,6 @@
#define DA830_LPSC1_McASP1 8
#define DA850_LPSC1_SATA 8
#define DA830_LPSC1_McASP2 9
-#define DA850_LPSC1_VPIF 9
#define DA8XX_LPSC1_SPI1 10
#define DA8XX_LPSC1_I2C 11
#define DA8XX_LPSC1_UART1 12
diff --git a/trunk/arch/arm/mach-exynos/mach-nuri.c b/trunk/arch/arm/mach-exynos/mach-nuri.c
index c05d7aa84031..480cd78f1920 100644
--- a/trunk/arch/arm/mach-exynos/mach-nuri.c
+++ b/trunk/arch/arm/mach-exynos/mach-nuri.c
@@ -29,7 +29,6 @@
#include
#include