diff --git a/[refs] b/[refs] index bb9191a94569..04796d6a938c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 79c63eeb805d086f52e5efda9c8d321beeed0b2b +refs/heads/master: 4c5bb2e42e6f12c02e6c8db9883ffa7602c68c19 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. length Size 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