diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-12-17 09:27:08 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-12-17 09:27:08 -0500 |
| commit | bb799d3b980eb803ca2da4a4eefbd9308f8d988a (patch) | |
| tree | 69fbe0cd6d47b23a50f5e1d87bf7489532fae149 /Documentation | |
| parent | 919fc6e34831d1c2b58bfb5ae261dc3facc9b269 (diff) | |
| parent | 319e2e3f63c348a9b66db4667efa73178e18b17d (diff) | |
Merge tag 'v3.13-rc4' into core/locking
Merge Linux 3.13-rc4, to refresh this rather old tree with the latest fixes.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'Documentation')
42 files changed, 1711 insertions, 179 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index b17580885273..07c75d18154e 100644 --- a/Documentation/Changes +++ b/Documentation/Changes | |||
| @@ -196,13 +196,6 @@ chmod 0644 /dev/cpu/microcode | |||
| 196 | as root before you can use this. You'll probably also want to | 196 | as root before you can use this. You'll probably also want to |
| 197 | get the user-space microcode_ctl utility to use with this. | 197 | get the user-space microcode_ctl utility to use with this. |
| 198 | 198 | ||
| 199 | Powertweak | ||
| 200 | ---------- | ||
| 201 | |||
| 202 | If you are running v0.1.17 or earlier, you should upgrade to | ||
| 203 | version v0.99.0 or higher. Running old versions may cause problems | ||
| 204 | with programs using shared memory. | ||
| 205 | |||
| 206 | udev | 199 | udev |
| 207 | ---- | 200 | ---- |
| 208 | udev is a userspace application for populating /dev dynamically with | 201 | udev is a userspace application for populating /dev dynamically with |
| @@ -366,10 +359,6 @@ Intel P6 microcode | |||
| 366 | ------------------ | 359 | ------------------ |
| 367 | o <http://www.urbanmyth.org/microcode/> | 360 | o <http://www.urbanmyth.org/microcode/> |
| 368 | 361 | ||
| 369 | Powertweak | ||
| 370 | ---------- | ||
| 371 | o <http://powertweak.sourceforge.net/> | ||
| 372 | |||
| 373 | udev | 362 | udev |
| 374 | ---- | 363 | ---- |
| 375 | o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html> | 364 | o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html> |
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl index 6c9d9d37c83a..f5170082bdb3 100644 --- a/Documentation/DocBook/device-drivers.tmpl +++ b/Documentation/DocBook/device-drivers.tmpl | |||
| @@ -58,7 +58,7 @@ | |||
| 58 | </sect1> | 58 | </sect1> |
| 59 | <sect1><title>Wait queues and Wake events</title> | 59 | <sect1><title>Wait queues and Wake events</title> |
| 60 | !Iinclude/linux/wait.h | 60 | !Iinclude/linux/wait.h |
| 61 | !Ekernel/wait.c | 61 | !Ekernel/sched/wait.c |
| 62 | </sect1> | 62 | </sect1> |
| 63 | <sect1><title>High-resolution timers</title> | 63 | <sect1><title>High-resolution timers</title> |
| 64 | !Iinclude/linux/ktime.h | 64 | !Iinclude/linux/ktime.h |
diff --git a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml index e287c8fc803b..4165e7bfa4ff 100644 --- a/Documentation/DocBook/media/v4l/vidioc-expbuf.xml +++ b/Documentation/DocBook/media/v4l/vidioc-expbuf.xml | |||
| @@ -73,7 +73,8 @@ range from zero to the maximal number of valid planes for the currently active | |||
| 73 | format. For the single-planar API, applications must set <structfield> plane | 73 | format. For the single-planar API, applications must set <structfield> plane |
| 74 | </structfield> to zero. Additional flags may be posted in the <structfield> | 74 | </structfield> to zero. Additional flags may be posted in the <structfield> |
| 75 | flags </structfield> field. Refer to a manual for open() for details. | 75 | flags </structfield> field. Refer to a manual for open() for details. |
| 76 | Currently only O_CLOEXEC is supported. All other fields must be set to zero. | 76 | Currently only O_CLOEXEC, O_RDONLY, O_WRONLY, and O_RDWR are supported. All |
| 77 | other fields must be set to zero. | ||
| 77 | In the case of multi-planar API, every plane is exported separately using | 78 | In the case of multi-planar API, every plane is exported separately using |
| 78 | multiple <constant> VIDIOC_EXPBUF </constant> calls. </para> | 79 | multiple <constant> VIDIOC_EXPBUF </constant> calls. </para> |
| 79 | 80 | ||
| @@ -170,8 +171,9 @@ multi-planar API. Otherwise this value must be set to zero. </entry> | |||
| 170 | <entry>__u32</entry> | 171 | <entry>__u32</entry> |
| 171 | <entry><structfield>flags</structfield></entry> | 172 | <entry><structfield>flags</structfield></entry> |
| 172 | <entry>Flags for the newly created file, currently only <constant> | 173 | <entry>Flags for the newly created file, currently only <constant> |
| 173 | O_CLOEXEC </constant> is supported, refer to the manual of open() for more | 174 | O_CLOEXEC </constant>, <constant>O_RDONLY</constant>, <constant>O_WRONLY |
| 174 | details.</entry> | 175 | </constant>, and <constant>O_RDWR</constant> are supported, refer to the manual |
| 176 | of open() for more details.</entry> | ||
| 175 | </row> | 177 | </row> |
| 176 | <row> | 178 | <row> |
| 177 | <entry>__s32</entry> | 179 | <entry>__s32</entry> |
diff --git a/Documentation/assoc_array.txt b/Documentation/assoc_array.txt new file mode 100644 index 000000000000..2f2c6cdd73c0 --- /dev/null +++ b/Documentation/assoc_array.txt | |||
| @@ -0,0 +1,574 @@ | |||
| 1 | ======================================== | ||
| 2 | GENERIC ASSOCIATIVE ARRAY IMPLEMENTATION | ||
| 3 | ======================================== | ||
| 4 | |||
| 5 | Contents: | ||
| 6 | |||
| 7 | - Overview. | ||
| 8 | |||
| 9 | - The public API. | ||
| 10 | - Edit script. | ||
| 11 | - Operations table. | ||
| 12 | - Manipulation functions. | ||
| 13 | - Access functions. | ||
| 14 | - Index key form. | ||
| 15 | |||
| 16 | - Internal workings. | ||
| 17 | - Basic internal tree layout. | ||
| 18 | - Shortcuts. | ||
| 19 | - Splitting and collapsing nodes. | ||
| 20 | - Non-recursive iteration. | ||
| 21 | - Simultaneous alteration and iteration. | ||
| 22 | |||
| 23 | |||
| 24 | ======== | ||
| 25 | OVERVIEW | ||
| 26 | ======== | ||
| 27 | |||
| 28 | This associative array implementation is an object container with the following | ||
| 29 | properties: | ||
| 30 | |||
| 31 | (1) Objects are opaque pointers. The implementation does not care where they | ||
| 32 | point (if anywhere) or what they point to (if anything). | ||
| 33 | |||
| 34 | [!] NOTE: Pointers to objects _must_ be zero in the least significant bit. | ||
| 35 | |||
| 36 | (2) Objects do not need to contain linkage blocks for use by the array. This | ||
| 37 | permits an object to be located in multiple arrays simultaneously. | ||
| 38 | Rather, the array is made up of metadata blocks that point to objects. | ||
| 39 | |||
| 40 | (3) Objects require index keys to locate them within the array. | ||
| 41 | |||
| 42 | (4) Index keys must be unique. Inserting an object with the same key as one | ||
| 43 | already in the array will replace the old object. | ||
| 44 | |||
| 45 | (5) Index keys can be of any length and can be of different lengths. | ||
| 46 | |||
| 47 | (6) Index keys should encode the length early on, before any variation due to | ||
| 48 | length is seen. | ||
| 49 | |||
| 50 | (7) Index keys can include a hash to scatter objects throughout the array. | ||
| 51 | |||
| 52 | (8) The array can iterated over. The objects will not necessarily come out in | ||
| 53 | key order. | ||
| 54 | |||
| 55 | (9) The array can be iterated over whilst it is being modified, provided the | ||
| 56 | RCU readlock is being held by the iterator. Note, however, under these | ||
| 57 | circumstances, some objects may be seen more than once. If this is a | ||
| 58 | problem, the iterator should lock against modification. Objects will not | ||
| 59 | be missed, however, unless deleted. | ||
| 60 | |||
| 61 | (10) Objects in the array can be looked up by means of their index key. | ||
| 62 | |||
| 63 | (11) Objects can be looked up whilst the array is being modified, provided the | ||
| 64 | RCU readlock is being held by the thread doing the look up. | ||
| 65 | |||
| 66 | The implementation uses a tree of 16-pointer nodes internally that are indexed | ||
| 67 | on each level by nibbles from the index key in the same manner as in a radix | ||
| 68 | tree. To improve memory efficiency, shortcuts can be emplaced to skip over | ||
| 69 | what would otherwise be a series of single-occupancy nodes. Further, nodes | ||
| 70 | pack leaf object pointers into spare space in the node rather than making an | ||
| 71 | extra branch until as such time an object needs to be added to a full node. | ||
| 72 | |||
| 73 | |||
| 74 | ============== | ||
| 75 | THE PUBLIC API | ||
| 76 | ============== | ||
| 77 | |||
| 78 | The public API can be found in <linux/assoc_array.h>. The associative array is | ||
| 79 | rooted on the following structure: | ||
| 80 | |||
| 81 | struct assoc_array { | ||
| 82 | ... | ||
| 83 | }; | ||
| 84 | |||
| 85 | The code is selected by enabling CONFIG_ASSOCIATIVE_ARRAY. | ||
| 86 | |||
| 87 | |||
| 88 | EDIT SCRIPT | ||
| 89 | ----------- | ||
| 90 | |||
| 91 | The insertion and deletion functions produce an 'edit script' that can later be | ||
| 92 | applied to effect the changes without risking ENOMEM. This retains the | ||
| 93 | preallocated metadata blocks that will be installed in the internal tree and | ||
| 94 | keeps track of the metadata blocks that will be removed from the tree when the | ||
| 95 | script is applied. | ||
| 96 | |||
| 97 | This is also used to keep track of dead blocks and dead objects after the | ||
| 98 | script has been applied so that they can be freed later. The freeing is done | ||
| 99 | after an RCU grace period has passed - thus allowing access functions to | ||
| 100 | proceed under the RCU read lock. | ||
| 101 | |||
| 102 | The script appears as outside of the API as a pointer of the type: | ||
| 103 | |||
| 104 | struct assoc_array_edit; | ||
| 105 | |||
| 106 | There are two functions for dealing with the script: | ||
| 107 | |||
| 108 | (1) Apply an edit script. | ||
| 109 | |||
| 110 | void assoc_array_apply_edit(struct assoc_array_edit *edit); | ||
| 111 | |||
| 112 | This will perform the edit functions, interpolating various write barriers | ||
| 113 | to permit accesses under the RCU read lock to continue. The edit script | ||
| 114 | will then be passed to call_rcu() to free it and any dead stuff it points | ||
| 115 | to. | ||
| 116 | |||
| 117 | (2) Cancel an edit script. | ||
| 118 | |||
| 119 | void assoc_array_cancel_edit(struct assoc_array_edit *edit); | ||
| 120 | |||
| 121 | This frees the edit script and all preallocated memory immediately. If | ||
| 122 | this was for insertion, the new object is _not_ released by this function, | ||
| 123 | but must rather be released by the caller. | ||
| 124 | |||
| 125 | These functions are guaranteed not to fail. | ||
| 126 | |||
| 127 | |||
| 128 | OPERATIONS TABLE | ||
| 129 | ---------------- | ||
| 130 | |||
| 131 | Various functions take a table of operations: | ||
| 132 | |||
| 133 | struct assoc_array_ops { | ||
| 134 | ... | ||
| 135 | }; | ||
| 136 | |||
| 137 | This points to a number of methods, all of which need to be provided: | ||
| 138 | |||
| 139 | (1) Get a chunk of index key from caller data: | ||
| 140 | |||
| 141 | unsigned long (*get_key_chunk)(const void *index_key, int level); | ||
| 142 | |||
| 143 | This should return a chunk of caller-supplied index key starting at the | ||
| 144 | *bit* position given by the level argument. The level argument will be a | ||
| 145 | multiple of ASSOC_ARRAY_KEY_CHUNK_SIZE and the function should return | ||
| 146 | ASSOC_ARRAY_KEY_CHUNK_SIZE bits. No error is possible. | ||
| 147 | |||
| 148 | |||
| 149 | (2) Get a chunk of an object's index key. | ||
| 150 | |||
| 151 | unsigned long (*get_object_key_chunk)(const void *object, int level); | ||
| 152 | |||
| 153 | As the previous function, but gets its data from an object in the array | ||
| 154 | rather than from a caller-supplied index key. | ||
| 155 | |||
| 156 | |||
| 157 | (3) See if this is the object we're looking for. | ||
| 158 | |||
| 159 | bool (*compare_object)(const void *object, const void *index_key); | ||
| 160 | |||
| 161 | Compare the object against an index key and return true if it matches and | ||
| 162 | false if it doesn't. | ||
| 163 | |||
| 164 | |||
| 165 | (4) Diff the index keys of two objects. | ||
| 166 | |||
| 167 | int (*diff_objects)(const void *object, const void *index_key); | ||
| 168 | |||
| 169 | Return the bit position at which the index key of the specified object | ||
| 170 | differs from the given index key or -1 if they are the same. | ||
| 171 | |||
| 172 | |||
| 173 | (5) Free an object. | ||
| 174 | |||
| 175 | void (*free_object)(void *object); | ||
| 176 | |||
| 177 | Free the specified object. Note that this may be called an RCU grace | ||
| 178 | period after assoc_array_apply_edit() was called, so synchronize_rcu() may | ||
| 179 | be necessary on module unloading. | ||
| 180 | |||
| 181 | |||
| 182 | MANIPULATION FUNCTIONS | ||
| 183 | ---------------------- | ||
| 184 | |||
| 185 | There are a number of functions for manipulating an associative array: | ||
| 186 | |||
| 187 | (1) Initialise an associative array. | ||
| 188 | |||
| 189 | void assoc_array_init(struct assoc_array *array); | ||
| 190 | |||
| 191 | This initialises the base structure for an associative array. It can't | ||
| 192 | fail. | ||
| 193 | |||
| 194 | |||
| 195 | (2) Insert/replace an object in an associative array. | ||
| 196 | |||
| 197 | struct assoc_array_edit * | ||
| 198 | assoc_array_insert(struct assoc_array *array, | ||
| 199 | const struct assoc_array_ops *ops, | ||
| 200 | const void *index_key, | ||
| 201 | void *object); | ||
| 202 | |||
| 203 | This inserts the given object into the array. Note that the least | ||
| 204 | significant bit of the pointer must be zero as it's used to type-mark | ||
| 205 | pointers internally. | ||
| 206 | |||
| 207 | If an object already exists for that key then it will be replaced with the | ||
| 208 | new object and the old one will be freed automatically. | ||
| 209 | |||
| 210 | The index_key argument should hold index key information and is | ||
| 211 | passed to the methods in the ops table when they are called. | ||
| 212 | |||
| 213 | This function makes no alteration to the array itself, but rather returns | ||
| 214 | an edit script that must be applied. -ENOMEM is returned in the case of | ||
| 215 | an out-of-memory error. | ||
| 216 | |||
| 217 | The caller should lock exclusively against other modifiers of the array. | ||
| 218 | |||
| 219 | |||
| 220 | (3) Delete an object from an associative array. | ||
| 221 | |||
| 222 | struct assoc_array_edit * | ||
| 223 | assoc_array_delete(struct assoc_array *array, | ||
| 224 | const struct assoc_array_ops *ops, | ||
| 225 | const void *index_key); | ||
| 226 | |||
| 227 | This deletes an object that matches the specified data from the array. | ||
| 228 | |||
| 229 | The index_key argument should hold index key information and is | ||
| 230 | passed to the methods in the ops table when they are called. | ||
| 231 | |||
| 232 | This function makes no alteration to the array itself, but rather returns | ||
| 233 | an edit script that must be applied. -ENOMEM is returned in the case of | ||
| 234 | an out-of-memory error. NULL will be returned if the specified object is | ||
| 235 | not found within the array. | ||
| 236 | |||
| 237 | The caller should lock exclusively against other modifiers of the array. | ||
| 238 | |||
| 239 | |||
| 240 | (4) Delete all objects from an associative array. | ||
| 241 | |||
| 242 | struct assoc_array_edit * | ||
| 243 | assoc_array_clear(struct assoc_array *array, | ||
| 244 | const struct assoc_array_ops *ops); | ||
| 245 | |||
| 246 | This deletes all the objects from an associative array and leaves it | ||
| 247 | completely empty. | ||
| 248 | |||
| 249 | This function makes no alteration to the array itself, but rather returns | ||
| 250 | an edit script that must be applied. -ENOMEM is returned in the case of | ||
| 251 | an out-of-memory error. | ||
| 252 | |||
| 253 | The caller should lock exclusively against other modifiers of the array. | ||
| 254 | |||
| 255 | |||
| 256 | (5) Destroy an associative array, deleting all objects. | ||
| 257 | |||
| 258 | void assoc_array_destroy(struct assoc_array *array, | ||
| 259 | const struct assoc_array_ops *ops); | ||
| 260 | |||
| 261 | This destroys the contents of the associative array and leaves it | ||
| 262 | completely empty. It is not permitted for another thread to be traversing | ||
| 263 | the array under the RCU read lock at the same time as this function is | ||
| 264 | destroying it as no RCU deferral is performed on memory release - | ||
| 265 | something that would require memory to be allocated. | ||
| 266 | |||
| 267 | The caller should lock exclusively against other modifiers and accessors | ||
| 268 | of the array. | ||
| 269 | |||
| 270 | |||
| 271 | (6) Garbage collect an associative array. | ||
| 272 | |||
| 273 | int assoc_array_gc(struct assoc_array *array, | ||
| 274 | const struct assoc_array_ops *ops, | ||
| 275 | bool (*iterator)(void *object, void *iterator_data), | ||
| 276 | void *iterator_data); | ||
| 277 | |||
| 278 | This iterates over the objects in an associative array and passes each one | ||
| 279 | to iterator(). If iterator() returns true, the object is kept. If it | ||
| 280 | returns false, the object will be freed. If the iterator() function | ||
| 281 | returns true, it must perform any appropriate refcount incrementing on the | ||
| 282 | object before returning. | ||
| 283 | |||
| 284 | The internal tree will be packed down if possible as part of the iteration | ||
| 285 | to reduce the number of nodes in it. | ||
| 286 | |||
| 287 | The iterator_data is passed directly to iterator() and is otherwise | ||
| 288 | ignored by the function. | ||
| 289 | |||
| 290 | The function will return 0 if successful and -ENOMEM if there wasn't | ||
| 291 | enough memory. | ||
| 292 | |||
| 293 | It is possible for other threads to iterate over or search the array under | ||
| 294 | the RCU read lock whilst this function is in progress. The caller should | ||
| 295 | lock exclusively against other modifiers of the array. | ||
| 296 | |||
| 297 | |||
| 298 | ACCESS FUNCTIONS | ||
| 299 | ---------------- | ||
| 300 | |||
| 301 | There are two functions for accessing an associative array: | ||
| 302 | |||
| 303 | (1) Iterate over all the objects in an associative array. | ||
| 304 | |||
| 305 | int assoc_array_iterate(const struct assoc_array *array, | ||
| 306 | int (*iterator)(const void *object, | ||
| 307 | void *iterator_data), | ||
| 308 | void *iterator_data); | ||
| 309 | |||
| 310 | This passes each object in the array to the iterator callback function. | ||
| 311 | iterator_data is private data for that function. | ||
| 312 | |||
| 313 | This may be used on an array at the same time as the array is being | ||
| 314 | modified, provided the RCU read lock is held. Under such circumstances, | ||
| 315 | it is possible for the iteration function to see some objects twice. If | ||
| 316 | this is a problem, then modification should be locked against. The | ||
| 317 | iteration algorithm should not, however, miss any objects. | ||
| 318 | |||
| 319 | The function will return 0 if no objects were in the array or else it will | ||
| 320 | return the result of the last iterator function called. Iteration stops | ||
| 321 | immediately if any call to the iteration function results in a non-zero | ||
| 322 | return. | ||
| 323 | |||
| 324 | |||
| 325 | (2) Find an object in an associative array. | ||
| 326 | |||
| 327 | void *assoc_array_find(const struct assoc_array *array, | ||
| 328 | const struct assoc_array_ops *ops, | ||
| 329 | const void *index_key); | ||
| 330 | |||
| 331 | This walks through the array's internal tree directly to the object | ||
| 332 | specified by the index key.. | ||
| 333 | |||
| 334 | This may be used on an array at the same time as the array is being | ||
| 335 | modified, provided the RCU read lock is held. | ||
| 336 | |||
| 337 | The function will return the object if found (and set *_type to the object | ||
| 338 | type) or will return NULL if the object was not found. | ||
| 339 | |||
| 340 | |||
| 341 | INDEX KEY FORM | ||
| 342 | -------------- | ||
| 343 | |||
| 344 | The index key can be of any form, but since the algorithms aren't told how long | ||
| 345 | the key is, it is strongly recommended that the index key includes its length | ||
| 346 | very early on before any variation due to the length would have an effect on | ||
| 347 | comparisons. | ||
| 348 | |||
| 349 | This will cause leaves with different length keys to scatter away from each | ||
| 350 | other - and those with the same length keys to cluster together. | ||
| 351 | |||
| 352 | It is also recommended that the index key begin with a hash of the rest of the | ||
| 353 | key to maximise scattering throughout keyspace. | ||
| 354 | |||
| 355 | The better the scattering, the wider and lower the internal tree will be. | ||
| 356 | |||
| 357 | Poor scattering isn't too much of a problem as there are shortcuts and nodes | ||
| 358 | can contain mixtures of leaves and metadata pointers. | ||
| 359 | |||
| 360 | The index key is read in chunks of machine word. Each chunk is subdivided into | ||
| 361 | one nibble (4 bits) per level, so on a 32-bit CPU this is good for 8 levels and | ||
| 362 | on a 64-bit CPU, 16 levels. Unless the scattering is really poor, it is | ||
| 363 | unlikely that more than one word of any particular index key will have to be | ||
| 364 | used. | ||
| 365 | |||
| 366 | |||
| 367 | ================= | ||
| 368 | INTERNAL WORKINGS | ||
| 369 | ================= | ||
| 370 | |||
| 371 | The associative array data structure has an internal tree. This tree is | ||
| 372 | constructed of two types of metadata blocks: nodes and shortcuts. | ||
| 373 | |||
| 374 | A node is an array of slots. Each slot can contain one of four things: | ||
| 375 | |||
| 376 | (*) A NULL pointer, indicating that the slot is empty. | ||
| 377 | |||
| 378 | (*) A pointer to an object (a leaf). | ||
| 379 | |||
| 380 | (*) A pointer to a node at the next level. | ||
| 381 | |||
| 382 | (*) A pointer to a shortcut. | ||
| 383 | |||
| 384 | |||
| 385 | BASIC INTERNAL TREE LAYOUT | ||
| 386 | -------------------------- | ||
| 387 | |||
| 388 | Ignoring shortcuts for the moment, the nodes form a multilevel tree. The index | ||
| 389 | key space is strictly subdivided by the nodes in the tree and nodes occur on | ||
| 390 | fixed levels. For example: | ||
| 391 | |||
| 392 | Level: 0 1 2 3 | ||
| 393 | =============== =============== =============== =============== | ||
| 394 | NODE D | ||
| 395 | NODE B NODE C +------>+---+ | ||
| 396 | +------>+---+ +------>+---+ | | 0 | | ||
| 397 | NODE A | | 0 | | | 0 | | +---+ | ||
| 398 | +---+ | +---+ | +---+ | : : | ||
| 399 | | 0 | | : : | : : | +---+ | ||
| 400 | +---+ | +---+ | +---+ | | f | | ||
| 401 | | 1 |---+ | 3 |---+ | 7 |---+ +---+ | ||
| 402 | +---+ +---+ +---+ | ||
| 403 | : : : : | 8 |---+ | ||
| 404 | +---+ +---+ +---+ | NODE E | ||
| 405 | | e |---+ | f | : : +------>+---+ | ||
| 406 | +---+ | +---+ +---+ | 0 | | ||
| 407 | | f | | | f | +---+ | ||
| 408 | +---+ | +---+ : : | ||
| 409 | | NODE F +---+ | ||
| 410 | +------>+---+ | f | | ||
| 411 | | 0 | NODE G +---+ | ||
| 412 | +---+ +------>+---+ | ||
| 413 | : : | | 0 | | ||
| 414 | +---+ | +---+ | ||
| 415 | | 6 |---+ : : | ||
| 416 | +---+ +---+ | ||
| 417 | : : | f | | ||
| 418 | +---+ +---+ | ||
| 419 | | f | | ||
| 420 | +---+ | ||
| 421 | |||
| 422 | In the above example, there are 7 nodes (A-G), each with 16 slots (0-f). | ||
| 423 | Assuming no other meta data nodes in the tree, the key space is divided thusly: | ||
| 424 | |||
| 425 | KEY PREFIX NODE | ||
| 426 | ========== ==== | ||
| 427 | 137* D | ||
| 428 | 138* E | ||
| 429 | 13[0-69-f]* C | ||
| 430 | 1[0-24-f]* B | ||
| 431 | e6* G | ||
| 432 | e[0-57-f]* F | ||
| 433 | [02-df]* A | ||
| 434 | |||
| 435 | So, for instance, keys with the following example index keys will be found in | ||
| 436 | the appropriate nodes: | ||
| 437 | |||
| 438 | INDEX KEY PREFIX NODE | ||
| 439 | =============== ======= ==== | ||
| 440 | 13694892892489 13 C | ||
| 441 | 13795289025897 137 D | ||
| 442 | 13889dde88793 138 E | ||
| 443 | 138bbb89003093 138 E | ||
| 444 | 1394879524789 12 C | ||
| 445 | 1458952489 1 B | ||
| 446 | 9431809de993ba - A | ||
| 447 | b4542910809cd - A | ||
| 448 | e5284310def98 e F | ||
| 449 | e68428974237 e6 G | ||
| 450 | e7fffcbd443 e F | ||
| 451 | f3842239082 - A | ||
| 452 | |||
| 453 | To save memory, if a node can hold all the leaves in its portion of keyspace, | ||
| 454 | then the node will have all those leaves in it and will not have any metadata | ||
| 455 | pointers - even if some of those leaves would like to be in the same slot. | ||
| 456 | |||
| 457 | A node can contain a heterogeneous mix of leaves and metadata pointers. | ||
| 458 | Metadata pointers must be in the slots that match their subdivisions of key | ||
| 459 | space. The leaves can be in any slot not occupied by a metadata pointer. It | ||
| 460 | is guaranteed that none of the leaves in a node will match a slot occupied by a | ||
| 461 | metadata pointer. If the metadata pointer is there, any leaf whose key matches | ||
| 462 | the metadata key prefix must be in the subtree that the metadata pointer points | ||
| 463 | to. | ||
| 464 | |||
| 465 | In the above example list of index keys, node A will contain: | ||
| 466 | |||
| 467 | SLOT CONTENT INDEX KEY (PREFIX) | ||
| 468 | ==== =============== ================== | ||
| 469 | 1 PTR TO NODE B 1* | ||
| 470 | any LEAF 9431809de993ba | ||
| 471 | any LEAF b4542910809cd | ||
| 472 | e PTR TO NODE F e* | ||
| 473 | any LEAF f3842239082 | ||
| 474 | |||
| 475 | and node B: | ||
| 476 | |||
| 477 | 3 PTR TO NODE C 13* | ||
| 478 | any LEAF 1458952489 | ||
| 479 | |||
| 480 | |||
| 481 | SHORTCUTS | ||
| 482 | --------- | ||
| 483 | |||
| 484 | Shortcuts are metadata records that jump over a piece of keyspace. A shortcut | ||
| 485 | is a replacement for a series of single-occupancy nodes ascending through the | ||
| 486 | levels. Shortcuts exist to save memory and to speed up traversal. | ||
| 487 | |||
| 488 | It is possible for the root of the tree to be a shortcut - say, for example, | ||
| 489 | the tree contains at least 17 nodes all with key prefix '1111'. The insertion | ||
| 490 | algorithm will insert a shortcut to skip over the '1111' keyspace in a single | ||
| 491 | bound and get to the fourth level where these actually become different. | ||
| 492 | |||
| 493 | |||
| 494 | SPLITTING AND COLLAPSING NODES | ||
| 495 | ------------------------------ | ||
| 496 | |||
| 497 | Each node has a maximum capacity of 16 leaves and metadata pointers. If the | ||
| 498 | insertion algorithm finds that it is trying to insert a 17th object into a | ||
| 499 | node, that node will be split such that at least two leaves that have a common | ||
| 500 | key segment at that level end up in a separate node rooted on that slot for | ||
| 501 | that common key segment. | ||
| 502 | |||
| 503 | If the leaves in a full node and the leaf that is being inserted are | ||
| 504 | sufficiently similar, then a shortcut will be inserted into the tree. | ||
| 505 | |||
| 506 | When the number of objects in the subtree rooted at a node falls to 16 or | ||
| 507 | fewer, then the subtree will be collapsed down to a single node - and this will | ||
| 508 | ripple towards the root if possible. | ||
| 509 | |||
| 510 | |||
| 511 | NON-RECURSIVE ITERATION | ||
| 512 | ----------------------- | ||
| 513 | |||
| 514 | Each node and shortcut contains a back pointer to its parent and the number of | ||
| 515 | slot in that parent that points to it. None-recursive iteration uses these to | ||
| 516 | proceed rootwards through the tree, going to the parent node, slot N + 1 to | ||
| 517 | make sure progress is made without the need for a stack. | ||
| 518 | |||
| 519 | The backpointers, however, make simultaneous alteration and iteration tricky. | ||
| 520 | |||
| 521 | |||
| 522 | SIMULTANEOUS ALTERATION AND ITERATION | ||
| 523 | ------------------------------------- | ||
| 524 | |||
| 525 | There are a number of cases to consider: | ||
| 526 | |||
| 527 | (1) Simple insert/replace. This involves simply replacing a NULL or old | ||
| 528 | matching leaf pointer with the pointer to the new leaf after a barrier. | ||
| 529 | The metadata blocks don't change otherwise. An old leaf won't be freed | ||
| 530 | until after the RCU grace period. | ||
| 531 | |||
| 532 | (2) Simple delete. This involves just clearing an old matching leaf. The | ||
| 533 | metadata blocks don't change otherwise. The old leaf won't be freed until | ||
| 534 | after the RCU grace period. | ||
| 535 | |||
| 536 | (3) Insertion replacing part of a subtree that we haven't yet entered. This | ||
| 537 | may involve replacement of part of that subtree - but that won't affect | ||
| 538 | the iteration as we won't have reached the pointer to it yet and the | ||
| 539 | ancestry blocks are not replaced (the layout of those does not change). | ||
| 540 | |||
| 541 | (4) Insertion replacing nodes that we're actively processing. This isn't a | ||
| 542 | problem as we've passed the anchoring pointer and won't switch onto the | ||
| 543 | new layout until we follow the back pointers - at which point we've | ||
| 544 | already examined the leaves in the replaced node (we iterate over all the | ||
| 545 | leaves in a node before following any of its metadata pointers). | ||
| 546 | |||
| 547 | We might, however, re-see some leaves that have been split out into a new | ||
| 548 | branch that's in a slot further along than we were at. | ||
| 549 | |||
| 550 | (5) Insertion replacing nodes that we're processing a dependent branch of. | ||
| 551 | This won't affect us until we follow the back pointers. Similar to (4). | ||
| 552 | |||
| 553 | (6) Deletion collapsing a branch under us. This doesn't affect us because the | ||
| 554 | back pointers will get us back to the parent of the new node before we | ||
| 555 | could see the new node. The entire collapsed subtree is thrown away | ||
| 556 | unchanged - and will still be rooted on the same slot, so we shouldn't | ||
| 557 | process it a second time as we'll go back to slot + 1. | ||
| 558 | |||
| 559 | Note: | ||
| 560 | |||
| 561 | (*) Under some circumstances, we need to simultaneously change the parent | ||
| 562 | pointer and the parent slot pointer on a node (say, for example, we | ||
| 563 | inserted another node before it and moved it up a level). We cannot do | ||
| 564 | this without locking against a read - so we have to replace that node too. | ||
| 565 | |||
| 566 | However, when we're changing a shortcut into a node this isn't a problem | ||
| 567 | as shortcuts only have one slot and so the parent slot number isn't used | ||
| 568 | when traversing backwards over one. This means that it's okay to change | ||
| 569 | the slot number first - provided suitable barriers are used to make sure | ||
| 570 | the parent slot number is read after the back pointer. | ||
| 571 | |||
| 572 | Obsolete blocks and leaves are freed up after an RCU grace period has passed, | ||
| 573 | so as long as anyone doing walking or iteration holds the RCU read lock, the | ||
| 574 | old superstructure should not go away on them. | ||
diff --git a/Documentation/device-mapper/cache.txt b/Documentation/device-mapper/cache.txt index 274752f8bdf9..719320b5ed3f 100644 --- a/Documentation/device-mapper/cache.txt +++ b/Documentation/device-mapper/cache.txt | |||
| @@ -266,10 +266,12 @@ E.g. | |||
| 266 | Invalidation is removing an entry from the cache without writing it | 266 | Invalidation is removing an entry from the cache without writing it |
| 267 | back. Cache blocks can be invalidated via the invalidate_cblocks | 267 | back. Cache blocks can be invalidated via the invalidate_cblocks |
| 268 | message, which takes an arbitrary number of cblock ranges. Each cblock | 268 | message, which takes an arbitrary number of cblock ranges. Each cblock |
| 269 | must be expressed as a decimal value, in the future a variant message | 269 | range's end value is "one past the end", meaning 5-10 expresses a range |
| 270 | that takes cblock ranges expressed in hexidecimal may be needed to | 270 | of values from 5 to 9. Each cblock must be expressed as a decimal |
| 271 | better support efficient invalidation of larger caches. The cache must | 271 | value, in the future a variant message that takes cblock ranges |
| 272 | be in passthrough mode when invalidate_cblocks is used. | 272 | expressed in hexidecimal may be needed to better support efficient |
| 273 | invalidation of larger caches. The cache must be in passthrough mode | ||
| 274 | when invalidate_cblocks is used. | ||
| 273 | 275 | ||
| 274 | invalidate_cblocks [<cblock>|<cblock begin>-<cblock end>]* | 276 | invalidate_cblocks [<cblock>|<cblock begin>-<cblock end>]* |
| 275 | 277 | ||
diff --git a/Documentation/devicetree/bindings/arm/omap/mpu.txt b/Documentation/devicetree/bindings/arm/omap/mpu.txt index 1a5a42ce21bb..83f405bde138 100644 --- a/Documentation/devicetree/bindings/arm/omap/mpu.txt +++ b/Documentation/devicetree/bindings/arm/omap/mpu.txt | |||
| @@ -7,10 +7,18 @@ The MPU contain CPUs, GIC, L2 cache and a local PRCM. | |||
| 7 | Required properties: | 7 | Required properties: |
| 8 | - compatible : Should be "ti,omap3-mpu" for OMAP3 | 8 | - compatible : Should be "ti,omap3-mpu" for OMAP3 |
| 9 | Should be "ti,omap4-mpu" for OMAP4 | 9 | Should be "ti,omap4-mpu" for OMAP4 |
| 10 | Should be "ti,omap5-mpu" for OMAP5 | ||
| 10 | - ti,hwmods: "mpu" | 11 | - ti,hwmods: "mpu" |
| 11 | 12 | ||
| 12 | Examples: | 13 | Examples: |
| 13 | 14 | ||
| 15 | - For an OMAP5 SMP system: | ||
| 16 | |||
| 17 | mpu { | ||
| 18 | compatible = "ti,omap5-mpu"; | ||
| 19 | ti,hwmods = "mpu" | ||
| 20 | }; | ||
| 21 | |||
| 14 | - For an OMAP4 SMP system: | 22 | - For an OMAP4 SMP system: |
| 15 | 23 | ||
| 16 | mpu { | 24 | mpu { |
diff --git a/Documentation/devicetree/bindings/arm/pmu.txt b/Documentation/devicetree/bindings/arm/pmu.txt index 343781b9f246..3e1e498fea96 100644 --- a/Documentation/devicetree/bindings/arm/pmu.txt +++ b/Documentation/devicetree/bindings/arm/pmu.txt | |||
| @@ -7,6 +7,7 @@ representation in the device tree should be done as under:- | |||
| 7 | Required properties: | 7 | Required properties: |
| 8 | 8 | ||
| 9 | - compatible : should be one of | 9 | - compatible : should be one of |
| 10 | "arm,armv8-pmuv3" | ||
| 10 | "arm,cortex-a15-pmu" | 11 | "arm,cortex-a15-pmu" |
| 11 | "arm,cortex-a9-pmu" | 12 | "arm,cortex-a9-pmu" |
| 12 | "arm,cortex-a8-pmu" | 13 | "arm,cortex-a8-pmu" |
diff --git a/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt index 47ada1dff216..5d49f2b37f68 100644 --- a/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt +++ b/Documentation/devicetree/bindings/arm/samsung/exynos-adc.txt | |||
| @@ -49,7 +49,7 @@ adc@12D10000 { | |||
| 49 | /* NTC thermistor is a hwmon device */ | 49 | /* NTC thermistor is a hwmon device */ |
| 50 | ncp15wb473@0 { | 50 | ncp15wb473@0 { |
| 51 | compatible = "ntc,ncp15wb473"; | 51 | compatible = "ntc,ncp15wb473"; |
| 52 | pullup-uV = <1800000>; | 52 | pullup-uv = <1800000>; |
| 53 | pullup-ohm = <47000>; | 53 | pullup-ohm = <47000>; |
| 54 | pulldown-ohm = <0>; | 54 | pulldown-ohm = <0>; |
| 55 | io-channels = <&adc 4>; | 55 | io-channels = <&adc 4>; |
diff --git a/Documentation/devicetree/bindings/clock/exynos4-clock.txt b/Documentation/devicetree/bindings/clock/exynos4-clock.txt index c6bf8a6c8f52..a2ac2d9ac71a 100644 --- a/Documentation/devicetree/bindings/clock/exynos4-clock.txt +++ b/Documentation/devicetree/bindings/clock/exynos4-clock.txt | |||
| @@ -6,7 +6,7 @@ SoC's in the Exynos4 family. | |||
| 6 | 6 | ||
| 7 | Required Properties: | 7 | Required Properties: |
| 8 | 8 | ||
| 9 | - comptible: should be one of the following. | 9 | - compatible: should be one of the following. |
| 10 | - "samsung,exynos4210-clock" - controller compatible with Exynos4210 SoC. | 10 | - "samsung,exynos4210-clock" - controller compatible with Exynos4210 SoC. |
| 11 | - "samsung,exynos4412-clock" - controller compatible with Exynos4412 SoC. | 11 | - "samsung,exynos4412-clock" - controller compatible with Exynos4412 SoC. |
| 12 | 12 | ||
diff --git a/Documentation/devicetree/bindings/clock/exynos5250-clock.txt b/Documentation/devicetree/bindings/clock/exynos5250-clock.txt index 24765c146e31..46f5c791ea0d 100644 --- a/Documentation/devicetree/bindings/clock/exynos5250-clock.txt +++ b/Documentation/devicetree/bindings/clock/exynos5250-clock.txt | |||
| @@ -5,7 +5,7 @@ controllers within the Exynos5250 SoC. | |||
| 5 | 5 | ||
| 6 | Required Properties: | 6 | Required Properties: |
| 7 | 7 | ||
| 8 | - comptible: should be one of the following. | 8 | - compatible: should be one of the following. |
| 9 | - "samsung,exynos5250-clock" - controller compatible with Exynos5250 SoC. | 9 | - "samsung,exynos5250-clock" - controller compatible with Exynos5250 SoC. |
| 10 | 10 | ||
| 11 | - reg: physical base address of the controller and length of memory mapped | 11 | - reg: physical base address of the controller and length of memory mapped |
diff --git a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt index 32aa34ecad36..458f34789e5d 100644 --- a/Documentation/devicetree/bindings/clock/exynos5420-clock.txt +++ b/Documentation/devicetree/bindings/clock/exynos5420-clock.txt | |||
| @@ -5,7 +5,7 @@ controllers within the Exynos5420 SoC. | |||
| 5 | 5 | ||
| 6 | Required Properties: | 6 | Required Properties: |
| 7 | 7 | ||
| 8 | - comptible: should be one of the following. | 8 | - compatible: should be one of the following. |
| 9 | - "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC. | 9 | - "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC. |
| 10 | 10 | ||
| 11 | - reg: physical base address of the controller and length of memory mapped | 11 | - reg: physical base address of the controller and length of memory mapped |
diff --git a/Documentation/devicetree/bindings/clock/exynos5440-clock.txt b/Documentation/devicetree/bindings/clock/exynos5440-clock.txt index 4499e9966bc9..9955dc9c7d96 100644 --- a/Documentation/devicetree/bindings/clock/exynos5440-clock.txt +++ b/Documentation/devicetree/bindings/clock/exynos5440-clock.txt | |||
| @@ -5,7 +5,7 @@ controllers within the Exynos5440 SoC. | |||
| 5 | 5 | ||
| 6 | Required Properties: | 6 | Required Properties: |
| 7 | 7 | ||
| 8 | - comptible: should be "samsung,exynos5440-clock". | 8 | - compatible: should be "samsung,exynos5440-clock". |
| 9 | 9 | ||
| 10 | - reg: physical base address of the controller and length of memory mapped | 10 | - reg: physical base address of the controller and length of memory mapped |
| 11 | region. | 11 | region. |
diff --git a/Documentation/devicetree/bindings/dma/atmel-dma.txt b/Documentation/devicetree/bindings/dma/atmel-dma.txt index e1f343c7a34b..f69bcf5a6343 100644 --- a/Documentation/devicetree/bindings/dma/atmel-dma.txt +++ b/Documentation/devicetree/bindings/dma/atmel-dma.txt | |||
| @@ -28,7 +28,7 @@ The three cells in order are: | |||
| 28 | dependent: | 28 | dependent: |
| 29 | - bit 7-0: peripheral identifier for the hardware handshaking interface. The | 29 | - bit 7-0: peripheral identifier for the hardware handshaking interface. The |
| 30 | identifier can be different for tx and rx. | 30 | identifier can be different for tx and rx. |
| 31 | - bit 11-8: FIFO configuration. 0 for half FIFO, 1 for ALAP, 1 for ASAP. | 31 | - bit 11-8: FIFO configuration. 0 for half FIFO, 1 for ALAP, 2 for ASAP. |
| 32 | 32 | ||
| 33 | Example: | 33 | Example: |
| 34 | 34 | ||
diff --git a/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt b/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt index b0019eb5330e..798cfc9d3839 100644 --- a/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt +++ b/Documentation/devicetree/bindings/gpio/8xxx_gpio.txt | |||
| @@ -5,16 +5,42 @@ This is for the non-QE/CPM/GUTs GPIO controllers as found on | |||
| 5 | 5 | ||
| 6 | Every GPIO controller node must have #gpio-cells property defined, | 6 | Every GPIO controller node must have #gpio-cells property defined, |
| 7 | this information will be used to translate gpio-specifiers. | 7 | this information will be used to translate gpio-specifiers. |
| 8 | See bindings/gpio/gpio.txt for details of how to specify GPIO | ||
| 9 | information for devices. | ||
| 10 | |||
| 11 | The GPIO module usually is connected to the SoC's internal interrupt | ||
| 12 | controller, see bindings/interrupt-controller/interrupts.txt (the | ||
| 13 | interrupt client nodes section) for details how to specify this GPIO | ||
| 14 | module's interrupt. | ||
| 15 | |||
| 16 | The GPIO module may serve as another interrupt controller (cascaded to | ||
| 17 | the SoC's internal interrupt controller). See the interrupt controller | ||
| 18 | nodes section in bindings/interrupt-controller/interrupts.txt for | ||
| 19 | details. | ||
| 8 | 20 | ||
| 9 | Required properties: | 21 | Required properties: |
| 10 | - compatible : "fsl,<CHIP>-gpio" followed by "fsl,mpc8349-gpio" for | 22 | - compatible: "fsl,<chip>-gpio" followed by "fsl,mpc8349-gpio" |
| 11 | 83xx, "fsl,mpc8572-gpio" for 85xx and "fsl,mpc8610-gpio" for 86xx. | 23 | for 83xx, "fsl,mpc8572-gpio" for 85xx, or |
| 12 | - #gpio-cells : Should be two. The first cell is the pin number and the | 24 | "fsl,mpc8610-gpio" for 86xx. |
| 13 | second cell is used to specify optional parameters (currently unused). | 25 | - #gpio-cells: Should be two. The first cell is the pin number |
| 14 | - interrupts : Interrupt mapping for GPIO IRQ. | 26 | and the second cell is used to specify optional |
| 15 | - interrupt-parent : Phandle for the interrupt controller that | 27 | parameters (currently unused). |
| 16 | services interrupts for this device. | 28 | - interrupt-parent: Phandle for the interrupt controller that |
| 17 | - gpio-controller : Marks the port as GPIO controller. | 29 | services interrupts for this device. |
| 30 | - interrupts: Interrupt mapping for GPIO IRQ. | ||
| 31 | - gpio-controller: Marks the port as GPIO controller. | ||
| 32 | |||
| 33 | Optional properties: | ||
| 34 | - interrupt-controller: Empty boolean property which marks the GPIO | ||
| 35 | module as an IRQ controller. | ||
| 36 | - #interrupt-cells: Should be two. Defines the number of integer | ||
| 37 | cells required to specify an interrupt within | ||
| 38 | this interrupt controller. The first cell | ||
| 39 | defines the pin number, the second cell | ||
| 40 | defines additional flags (trigger type, | ||
| 41 | trigger polarity). Note that the available | ||
| 42 | set of trigger conditions supported by the | ||
| 43 | GPIO module depends on the actual SoC. | ||
| 18 | 44 | ||
| 19 | Example of gpio-controller nodes for a MPC8347 SoC: | 45 | Example of gpio-controller nodes for a MPC8347 SoC: |
| 20 | 46 | ||
| @@ -22,39 +48,27 @@ Example of gpio-controller nodes for a MPC8347 SoC: | |||
| 22 | #gpio-cells = <2>; | 48 | #gpio-cells = <2>; |
| 23 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; | 49 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; |
| 24 | reg = <0xc00 0x100>; | 50 | reg = <0xc00 0x100>; |
| 25 | interrupts = <74 0x8>; | ||
| 26 | interrupt-parent = <&ipic>; | 51 | interrupt-parent = <&ipic>; |
| 52 | interrupts = <74 0x8>; | ||
| 27 | gpio-controller; | 53 | gpio-controller; |
| 54 | interrupt-controller; | ||
| 55 | #interrupt-cells = <2>; | ||
| 28 | }; | 56 | }; |
| 29 | 57 | ||
| 30 | gpio2: gpio-controller@d00 { | 58 | gpio2: gpio-controller@d00 { |
| 31 | #gpio-cells = <2>; | 59 | #gpio-cells = <2>; |
| 32 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; | 60 | compatible = "fsl,mpc8347-gpio", "fsl,mpc8349-gpio"; |
| 33 | reg = <0xd00 0x100>; | 61 | reg = <0xd00 0x100>; |
| 34 | interrupts = <75 0x8>; | ||
| 35 | interrupt-parent = <&ipic>; | 62 | interrupt-parent = <&ipic>; |
| 63 | interrupts = <75 0x8>; | ||
| 36 | gpio-controller; | 64 | gpio-controller; |
| 37 | }; | 65 | }; |
| 38 | 66 | ||
| 39 | See booting-without-of.txt for details of how to specify GPIO | 67 | Example of a peripheral using the GPIO module as an IRQ controller: |
| 40 | information for devices. | ||
| 41 | |||
| 42 | To use GPIO pins as interrupt sources for peripherals, specify the | ||
| 43 | GPIO controller as the interrupt parent and define GPIO number + | ||
| 44 | trigger mode using the interrupts property, which is defined like | ||
| 45 | this: | ||
| 46 | |||
| 47 | interrupts = <number trigger>, where: | ||
| 48 | - number: GPIO pin (0..31) | ||
| 49 | - trigger: trigger mode: | ||
| 50 | 2 = trigger on falling edge | ||
| 51 | 3 = trigger on both edges | ||
| 52 | |||
| 53 | Example of device using this is: | ||
| 54 | 68 | ||
| 55 | funkyfpga@0 { | 69 | funkyfpga@0 { |
| 56 | compatible = "funky-fpga"; | 70 | compatible = "funky-fpga"; |
| 57 | ... | 71 | ... |
| 58 | interrupts = <4 3>; | ||
| 59 | interrupt-parent = <&gpio1>; | 72 | interrupt-parent = <&gpio1>; |
| 73 | interrupts = <4 3>; | ||
| 60 | }; | 74 | }; |
diff --git a/Documentation/devicetree/bindings/i2c/i2c-omap.txt b/Documentation/devicetree/bindings/i2c/i2c-omap.txt index 56564aa4b444..7e49839d4124 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-omap.txt +++ b/Documentation/devicetree/bindings/i2c/i2c-omap.txt | |||
| @@ -1,7 +1,8 @@ | |||
| 1 | I2C for OMAP platforms | 1 | I2C for OMAP platforms |
| 2 | 2 | ||
| 3 | Required properties : | 3 | Required properties : |
| 4 | - compatible : Must be "ti,omap3-i2c" or "ti,omap4-i2c" | 4 | - compatible : Must be "ti,omap2420-i2c", "ti,omap2430-i2c", "ti,omap3-i2c" |
| 5 | or "ti,omap4-i2c" | ||
| 5 | - ti,hwmods : Must be "i2c<n>", n being the instance number (1-based) | 6 | - ti,hwmods : Must be "i2c<n>", n being the instance number (1-based) |
| 6 | - #address-cells = <1>; | 7 | - #address-cells = <1>; |
| 7 | - #size-cells = <0>; | 8 | - #size-cells = <0>; |
diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt index ad6a73852f08..b1cb3415e6f1 100644 --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt | |||
| @@ -15,6 +15,7 @@ adi,adt7461 +/-1C TDM Extended Temp Range I.C | |||
| 15 | adt7461 +/-1C TDM Extended Temp Range I.C | 15 | adt7461 +/-1C TDM Extended Temp Range I.C |
| 16 | at,24c08 i2c serial eeprom (24cxx) | 16 | at,24c08 i2c serial eeprom (24cxx) |
| 17 | atmel,24c02 i2c serial eeprom (24cxx) | 17 | atmel,24c02 i2c serial eeprom (24cxx) |
| 18 | atmel,at97sc3204t i2c trusted platform module (TPM) | ||
| 18 | catalyst,24c32 i2c serial eeprom | 19 | catalyst,24c32 i2c serial eeprom |
| 19 | dallas,ds1307 64 x 8, Serial, I2C Real-Time Clock | 20 | dallas,ds1307 64 x 8, Serial, I2C Real-Time Clock |
| 20 | dallas,ds1338 I2C RTC with 56-Byte NV RAM | 21 | dallas,ds1338 I2C RTC with 56-Byte NV RAM |
| @@ -35,6 +36,7 @@ fsl,mc13892 MC13892: Power Management Integrated Circuit (PMIC) for i.MX35/51 | |||
| 35 | fsl,mma8450 MMA8450Q: Xtrinsic Low-power, 3-axis Xtrinsic Accelerometer | 36 | fsl,mma8450 MMA8450Q: Xtrinsic Low-power, 3-axis Xtrinsic Accelerometer |
| 36 | fsl,mpr121 MPR121: Proximity Capacitive Touch Sensor Controller | 37 | fsl,mpr121 MPR121: Proximity Capacitive Touch Sensor Controller |
| 37 | fsl,sgtl5000 SGTL5000: Ultra Low-Power Audio Codec | 38 | fsl,sgtl5000 SGTL5000: Ultra Low-Power Audio Codec |
| 39 | gmt,g751 G751: Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface | ||
| 38 | infineon,slb9635tt Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz) | 40 | infineon,slb9635tt Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz) |
| 39 | infineon,slb9645tt Infineon SLB9645 I2C TPM (new protocol, max 400khz) | 41 | infineon,slb9645tt Infineon SLB9645 I2C TPM (new protocol, max 400khz) |
| 40 | maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator | 42 | maxim,ds1050 5 Bit Programmable, Pulse-Width Modulator |
| @@ -44,6 +46,7 @@ mc,rv3029c2 Real Time Clock Module with I2C-Bus | |||
| 44 | national,lm75 I2C TEMP SENSOR | 46 | national,lm75 I2C TEMP SENSOR |
| 45 | national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor | 47 | national,lm80 Serial Interface ACPI-Compatible Microprocessor System Hardware Monitor |
| 46 | national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface | 48 | national,lm92 ±0.33°C Accurate, 12-Bit + Sign Temperature Sensor and Thermal Window Comparator with Two-Wire Interface |
| 49 | nuvoton,npct501 i2c trusted platform module (TPM) | ||
| 47 | nxp,pca9556 Octal SMBus and I2C registered interface | 50 | nxp,pca9556 Octal SMBus and I2C registered interface |
| 48 | nxp,pca9557 8-bit I2C-bus and SMBus I/O port with reset | 51 | nxp,pca9557 8-bit I2C-bus and SMBus I/O port with reset |
| 49 | nxp,pcf8563 Real-time clock/calendar | 52 | nxp,pcf8563 Real-time clock/calendar |
| @@ -61,3 +64,4 @@ taos,tsl2550 Ambient Light Sensor with SMBUS/Two Wire Serial Interface | |||
| 61 | ti,tsc2003 I2C Touch-Screen Controller | 64 | ti,tsc2003 I2C Touch-Screen Controller |
| 62 | ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface | 65 | ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface |
| 63 | ti,tmp275 Digital Temperature Sensor | 66 | ti,tmp275 Digital Temperature Sensor |
| 67 | winbond,wpct301 i2c trusted platform module (TPM) | ||
diff --git a/Documentation/devicetree/bindings/mmc/ti-omap.txt b/Documentation/devicetree/bindings/mmc/ti-omap.txt new file mode 100644 index 000000000000..8de579969763 --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/ti-omap.txt | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | * TI MMC host controller for OMAP1 and 2420 | ||
| 2 | |||
| 3 | The MMC Host Controller on TI OMAP1 and 2420 family provides | ||
| 4 | an interface for MMC, SD, and SDIO types of memory cards. | ||
| 5 | |||
| 6 | This file documents differences between the core properties described | ||
| 7 | by mmc.txt and the properties used by the omap mmc driver. | ||
| 8 | |||
| 9 | Note that this driver will not work with omap2430 or later omaps, | ||
| 10 | please see the omap hsmmc driver for the current omaps. | ||
| 11 | |||
| 12 | Required properties: | ||
| 13 | - compatible: Must be "ti,omap2420-mmc", for OMAP2420 controllers | ||
| 14 | - ti,hwmods: For 2420, must be "msdi<n>", where n is controller | ||
| 15 | instance starting 1 | ||
| 16 | |||
| 17 | Examples: | ||
| 18 | |||
| 19 | msdi1: mmc@4809c000 { | ||
| 20 | compatible = "ti,omap2420-mmc"; | ||
| 21 | ti,hwmods = "msdi1"; | ||
| 22 | reg = <0x4809c000 0x80>; | ||
| 23 | interrupts = <83>; | ||
| 24 | dmas = <&sdma 61 &sdma 62>; | ||
| 25 | dma-names = "tx", "rx"; | ||
| 26 | }; | ||
| 27 | |||
| 28 | * TI MMC host controller for OMAP1 and 2420 | ||
| 29 | |||
| 30 | The MMC Host Controller on TI OMAP1 and 2420 family provides | ||
| 31 | an interface for MMC, SD, and SDIO types of memory cards. | ||
| 32 | |||
| 33 | This file documents differences between the core properties described | ||
| 34 | by mmc.txt and the properties used by the omap mmc driver. | ||
| 35 | |||
| 36 | Note that this driver will not work with omap2430 or later omaps, | ||
| 37 | please see the omap hsmmc driver for the current omaps. | ||
| 38 | |||
| 39 | Required properties: | ||
| 40 | - compatible: Must be "ti,omap2420-mmc", for OMAP2420 controllers | ||
| 41 | - ti,hwmods: For 2420, must be "msdi<n>", where n is controller | ||
| 42 | instance starting 1 | ||
| 43 | |||
| 44 | Examples: | ||
| 45 | |||
| 46 | msdi1: mmc@4809c000 { | ||
| 47 | compatible = "ti,omap2420-mmc"; | ||
| 48 | ti,hwmods = "msdi1"; | ||
| 49 | reg = <0x4809c000 0x80>; | ||
| 50 | interrupts = <83>; | ||
| 51 | dmas = <&sdma 61 &sdma 62>; | ||
| 52 | dma-names = "tx", "rx"; | ||
| 53 | }; | ||
| 54 | |||
diff --git a/Documentation/devicetree/bindings/net/davinci_emac.txt b/Documentation/devicetree/bindings/net/davinci_emac.txt index 48b259e29e87..bad381faf036 100644 --- a/Documentation/devicetree/bindings/net/davinci_emac.txt +++ b/Documentation/devicetree/bindings/net/davinci_emac.txt | |||
| @@ -4,7 +4,7 @@ This file provides information, what the device node | |||
| 4 | for the davinci_emac interface contains. | 4 | for the davinci_emac interface contains. |
| 5 | 5 | ||
| 6 | Required properties: | 6 | Required properties: |
| 7 | - compatible: "ti,davinci-dm6467-emac"; | 7 | - compatible: "ti,davinci-dm6467-emac" or "ti,am3517-emac" |
| 8 | - reg: Offset and length of the register set for the device | 8 | - reg: Offset and length of the register set for the device |
| 9 | - ti,davinci-ctrl-reg-offset: offset to control register | 9 | - ti,davinci-ctrl-reg-offset: offset to control register |
| 10 | - ti,davinci-ctrl-mod-reg-offset: offset to control module register | 10 | - ti,davinci-ctrl-mod-reg-offset: offset to control module register |
diff --git a/Documentation/devicetree/bindings/net/fsl-fec.txt b/Documentation/devicetree/bindings/net/fsl-fec.txt index d53639221403..845ff848d895 100644 --- a/Documentation/devicetree/bindings/net/fsl-fec.txt +++ b/Documentation/devicetree/bindings/net/fsl-fec.txt | |||
| @@ -15,6 +15,7 @@ Optional properties: | |||
| 15 | only if property "phy-reset-gpios" is available. Missing the property | 15 | only if property "phy-reset-gpios" is available. Missing the property |
| 16 | will have the duration be 1 millisecond. Numbers greater than 1000 are | 16 | will have the duration be 1 millisecond. Numbers greater than 1000 are |
| 17 | invalid and 1 millisecond will be used instead. | 17 | invalid and 1 millisecond will be used instead. |
| 18 | - phy-supply: regulator that powers the Ethernet PHY. | ||
| 18 | 19 | ||
| 19 | Example: | 20 | Example: |
| 20 | 21 | ||
| @@ -25,4 +26,5 @@ ethernet@83fec000 { | |||
| 25 | phy-mode = "mii"; | 26 | phy-mode = "mii"; |
| 26 | phy-reset-gpios = <&gpio2 14 0>; /* GPIO2_14 */ | 27 | phy-reset-gpios = <&gpio2 14 0>; /* GPIO2_14 */ |
| 27 | local-mac-address = [00 04 9F 01 1B B9]; | 28 | local-mac-address = [00 04 9F 01 1B B9]; |
| 29 | phy-supply = <®_fec_supply>; | ||
| 28 | }; | 30 | }; |
diff --git a/Documentation/devicetree/bindings/net/smsc-lan91c111.txt b/Documentation/devicetree/bindings/net/smsc-lan91c111.txt index 953049b4248a..5a41a8658daa 100644 --- a/Documentation/devicetree/bindings/net/smsc-lan91c111.txt +++ b/Documentation/devicetree/bindings/net/smsc-lan91c111.txt | |||
| @@ -8,3 +8,7 @@ Required properties: | |||
| 8 | Optional properties: | 8 | Optional properties: |
| 9 | - phy-device : phandle to Ethernet phy | 9 | - phy-device : phandle to Ethernet phy |
| 10 | - local-mac-address : Ethernet mac address to use | 10 | - local-mac-address : Ethernet mac address to use |
| 11 | - reg-io-width : Mask of sizes (in bytes) of the IO accesses that | ||
| 12 | are supported on the device. Valid value for SMSC LAN91c111 are | ||
| 13 | 1, 2 or 4. If it's omitted or invalid, the size would be 2 meaning | ||
| 14 | 16-bit access only. | ||
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt index 2a4b4bce6110..7fc1b010fa75 100644 --- a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt +++ b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt | |||
| @@ -1,33 +1,30 @@ | |||
| 1 | * Freescale 83xx DMA Controller | 1 | * Freescale DMA Controllers |
| 2 | 2 | ||
| 3 | Freescale PowerPC 83xx have on chip general purpose DMA controllers. | 3 | ** Freescale Elo DMA Controller |
| 4 | This is a little-endian 4-channel DMA controller, used in Freescale mpc83xx | ||
| 5 | series chips such as mpc8315, mpc8349, mpc8379 etc. | ||
| 4 | 6 | ||
| 5 | Required properties: | 7 | Required properties: |
| 6 | 8 | ||
| 7 | - compatible : compatible list, contains 2 entries, first is | 9 | - compatible : must include "fsl,elo-dma" |
| 8 | "fsl,CHIP-dma", where CHIP is the processor | 10 | - reg : DMA General Status Register, i.e. DGSR which contains |
| 9 | (mpc8349, mpc8360, etc.) and the second is | 11 | status for all the 4 DMA channels |
| 10 | "fsl,elo-dma" | 12 | - ranges : describes the mapping between the address space of the |
| 11 | - reg : <registers mapping for DMA general status reg> | 13 | DMA channels and the address space of the DMA controller |
| 12 | - ranges : Should be defined as specified in 1) to describe the | ||
| 13 | DMA controller channels. | ||
| 14 | - cell-index : controller index. 0 for controller @ 0x8100 | 14 | - cell-index : controller index. 0 for controller @ 0x8100 |
| 15 | - interrupts : <interrupt mapping for DMA IRQ> | 15 | - interrupts : interrupt specifier for DMA IRQ |
| 16 | - interrupt-parent : optional, if needed for interrupt mapping | 16 | - interrupt-parent : optional, if needed for interrupt mapping |
| 17 | 17 | ||
| 18 | |||
| 19 | - DMA channel nodes: | 18 | - DMA channel nodes: |
| 20 | - compatible : compatible list, contains 2 entries, first is | 19 | - compatible : must include "fsl,elo-dma-channel" |
| 21 | "fsl,CHIP-dma-channel", where CHIP is the processor | 20 | However, see note below. |
| 22 | (mpc8349, mpc8350, etc.) and the second is | 21 | - reg : DMA channel specific registers |
| 23 | "fsl,elo-dma-channel". However, see note below. | 22 | - cell-index : DMA channel index starts at 0. |
| 24 | - reg : <registers mapping for channel> | ||
| 25 | - cell-index : dma channel index starts at 0. | ||
| 26 | 23 | ||
| 27 | Optional properties: | 24 | Optional properties: |
| 28 | - interrupts : <interrupt mapping for DMA channel IRQ> | 25 | - interrupts : interrupt specifier for DMA channel IRQ |
| 29 | (on 83xx this is expected to be identical to | 26 | (on 83xx this is expected to be identical to |
| 30 | the interrupts property of the parent node) | 27 | the interrupts property of the parent node) |
| 31 | - interrupt-parent : optional, if needed for interrupt mapping | 28 | - interrupt-parent : optional, if needed for interrupt mapping |
| 32 | 29 | ||
| 33 | Example: | 30 | Example: |
| @@ -70,30 +67,27 @@ Example: | |||
| 70 | }; | 67 | }; |
| 71 | }; | 68 | }; |
| 72 | 69 | ||
| 73 | * Freescale 85xx/86xx DMA Controller | 70 | ** Freescale EloPlus DMA Controller |
| 74 | 71 | This is a 4-channel DMA controller with extended addresses and chaining, | |
| 75 | Freescale PowerPC 85xx/86xx have on chip general purpose DMA controllers. | 72 | mainly used in Freescale mpc85xx/86xx, Pxxx and BSC series chips, such as |
| 73 | mpc8540, mpc8641 p4080, bsc9131 etc. | ||
| 76 | 74 | ||
| 77 | Required properties: | 75 | Required properties: |
| 78 | 76 | ||
| 79 | - compatible : compatible list, contains 2 entries, first is | 77 | - compatible : must include "fsl,eloplus-dma" |
| 80 | "fsl,CHIP-dma", where CHIP is the processor | 78 | - reg : DMA General Status Register, i.e. DGSR which contains |
| 81 | (mpc8540, mpc8540, etc.) and the second is | 79 | status for all the 4 DMA channels |
| 82 | "fsl,eloplus-dma" | ||
| 83 | - reg : <registers mapping for DMA general status reg> | ||
| 84 | - cell-index : controller index. 0 for controller @ 0x21000, | 80 | - cell-index : controller index. 0 for controller @ 0x21000, |
| 85 | 1 for controller @ 0xc000 | 81 | 1 for controller @ 0xc000 |
| 86 | - ranges : Should be defined as specified in 1) to describe the | 82 | - ranges : describes the mapping between the address space of the |
| 87 | DMA controller channels. | 83 | DMA channels and the address space of the DMA controller |
| 88 | 84 | ||
| 89 | - DMA channel nodes: | 85 | - DMA channel nodes: |
| 90 | - compatible : compatible list, contains 2 entries, first is | 86 | - compatible : must include "fsl,eloplus-dma-channel" |
| 91 | "fsl,CHIP-dma-channel", where CHIP is the processor | 87 | However, see note below. |
| 92 | (mpc8540, mpc8560, etc.) and the second is | 88 | - cell-index : DMA channel index starts at 0. |
| 93 | "fsl,eloplus-dma-channel". However, see note below. | 89 | - reg : DMA channel specific registers |
| 94 | - cell-index : dma channel index starts at 0. | 90 | - interrupts : interrupt specifier for DMA channel IRQ |
| 95 | - reg : <registers mapping for channel> | ||
| 96 | - interrupts : <interrupt mapping for DMA channel IRQ> | ||
| 97 | - interrupt-parent : optional, if needed for interrupt mapping | 91 | - interrupt-parent : optional, if needed for interrupt mapping |
| 98 | 92 | ||
| 99 | Example: | 93 | Example: |
| @@ -134,6 +128,76 @@ Example: | |||
| 134 | }; | 128 | }; |
| 135 | }; | 129 | }; |
| 136 | 130 | ||
| 131 | ** Freescale Elo3 DMA Controller | ||
| 132 | DMA controller which has same function as EloPlus except that Elo3 has 8 | ||
| 133 | channels while EloPlus has only 4, it is used in Freescale Txxx and Bxxx | ||
| 134 | series chips, such as t1040, t4240, b4860. | ||
| 135 | |||
| 136 | Required properties: | ||
| 137 | |||
| 138 | - compatible : must include "fsl,elo3-dma" | ||
| 139 | - reg : contains two entries for DMA General Status Registers, | ||
| 140 | i.e. DGSR0 which includes status for channel 1~4, and | ||
| 141 | DGSR1 for channel 5~8 | ||
| 142 | - ranges : describes the mapping between the address space of the | ||
| 143 | DMA channels and the address space of the DMA controller | ||
| 144 | |||
| 145 | - DMA channel nodes: | ||
| 146 | - compatible : must include "fsl,eloplus-dma-channel" | ||
| 147 | - reg : DMA channel specific registers | ||
| 148 | - interrupts : interrupt specifier for DMA channel IRQ | ||
| 149 | - interrupt-parent : optional, if needed for interrupt mapping | ||
| 150 | |||
| 151 | Example: | ||
| 152 | dma@100300 { | ||
| 153 | #address-cells = <1>; | ||
| 154 | #size-cells = <1>; | ||
| 155 | compatible = "fsl,elo3-dma"; | ||
| 156 | reg = <0x100300 0x4>, | ||
| 157 | <0x100600 0x4>; | ||
| 158 | ranges = <0x0 0x100100 0x500>; | ||
| 159 | dma-channel@0 { | ||
| 160 | compatible = "fsl,eloplus-dma-channel"; | ||
| 161 | reg = <0x0 0x80>; | ||
| 162 | interrupts = <28 2 0 0>; | ||
| 163 | }; | ||
| 164 | dma-channel@80 { | ||
| 165 | compatible = "fsl,eloplus-dma-channel"; | ||
| 166 | reg = <0x80 0x80>; | ||
| 167 | interrupts = <29 2 0 0>; | ||
| 168 | }; | ||
| 169 | dma-channel@100 { | ||
| 170 | compatible = "fsl,eloplus-dma-channel"; | ||
| 171 | reg = <0x100 0x80>; | ||
| 172 | interrupts = <30 2 0 0>; | ||
| 173 | }; | ||
| 174 | dma-channel@180 { | ||
| 175 | compatible = "fsl,eloplus-dma-channel"; | ||
| 176 | reg = <0x180 0x80>; | ||
| 177 | interrupts = <31 2 0 0>; | ||
| 178 | }; | ||
| 179 | dma-channel@300 { | ||
| 180 | compatible = "fsl,eloplus-dma-channel"; | ||
| 181 | reg = <0x300 0x80>; | ||
| 182 | interrupts = <76 2 0 0>; | ||
| 183 | }; | ||
| 184 | dma-channel@380 { | ||
| 185 | compatible = "fsl,eloplus-dma-channel"; | ||
| 186 | reg = <0x380 0x80>; | ||
| 187 | interrupts = <77 2 0 0>; | ||
| 188 | }; | ||
| 189 | dma-channel@400 { | ||
| 190 | compatible = "fsl,eloplus-dma-channel"; | ||
| 191 | reg = <0x400 0x80>; | ||
| 192 | interrupts = <78 2 0 0>; | ||
| 193 | }; | ||
| 194 | dma-channel@480 { | ||
| 195 | compatible = "fsl,eloplus-dma-channel"; | ||
| 196 | reg = <0x480 0x80>; | ||
| 197 | interrupts = <79 2 0 0>; | ||
| 198 | }; | ||
| 199 | }; | ||
| 200 | |||
| 137 | Note on DMA channel compatible properties: The compatible property must say | 201 | Note on DMA channel compatible properties: The compatible property must say |
| 138 | "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel" to be used by the Elo DMA | 202 | "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel" to be used by the Elo DMA |
| 139 | driver (fsldma). Any DMA channel used by fsldma cannot be used by another | 203 | driver (fsldma). Any DMA channel used by fsldma cannot be used by another |
diff --git a/Documentation/devicetree/bindings/rng/qcom,prng.txt b/Documentation/devicetree/bindings/rng/qcom,prng.txt new file mode 100644 index 000000000000..8e5853c2879b --- /dev/null +++ b/Documentation/devicetree/bindings/rng/qcom,prng.txt | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | Qualcomm MSM pseudo random number generator. | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | |||
| 5 | - compatible : should be "qcom,prng" | ||
| 6 | - reg : specifies base physical address and size of the registers map | ||
| 7 | - clocks : phandle to clock-controller plus clock-specifier pair | ||
| 8 | - clock-names : "core" clocks all registers, FIFO and circuits in PRNG IP block | ||
| 9 | |||
| 10 | Example: | ||
| 11 | |||
| 12 | rng@f9bff000 { | ||
| 13 | compatible = "qcom,prng"; | ||
| 14 | reg = <0xf9bff000 0x200>; | ||
| 15 | clocks = <&clock GCC_PRNG_AHB_CLK>; | ||
| 16 | clock-names = "core"; | ||
| 17 | }; | ||
diff --git a/Documentation/devicetree/bindings/spi/nvidia,tegra20-spi.txt b/Documentation/devicetree/bindings/spi/nvidia,tegra20-spi.txt deleted file mode 100644 index 6b9e51896693..000000000000 --- a/Documentation/devicetree/bindings/spi/nvidia,tegra20-spi.txt +++ /dev/null | |||
| @@ -1,5 +0,0 @@ | |||
| 1 | NVIDIA Tegra 2 SPI device | ||
| 2 | |||
| 3 | Required properties: | ||
| 4 | - compatible : should be "nvidia,tegra20-spi". | ||
| 5 | - gpios : should specify GPIOs used for chipselect. | ||
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index ce95ed1c6d3e..edbb8d88c85e 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt | |||
| @@ -32,12 +32,14 @@ est ESTeem Wireless Modems | |||
| 32 | fsl Freescale Semiconductor | 32 | fsl Freescale Semiconductor |
| 33 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 33 | GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
| 34 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. | 34 | gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. |
| 35 | gmt Global Mixed-mode Technology, Inc. | ||
| 35 | hisilicon Hisilicon Limited. | 36 | hisilicon Hisilicon Limited. |
| 36 | hp Hewlett Packard | 37 | hp Hewlett Packard |
| 37 | ibm International Business Machines (IBM) | 38 | ibm International Business Machines (IBM) |
| 38 | idt Integrated Device Technologies, Inc. | 39 | idt Integrated Device Technologies, Inc. |
| 39 | img Imagination Technologies Ltd. | 40 | img Imagination Technologies Ltd. |
| 40 | intercontrol Inter Control Group | 41 | intercontrol Inter Control Group |
| 42 | lg LG Corporation | ||
| 41 | linux Linux-specific binding | 43 | linux Linux-specific binding |
| 42 | lsi LSI Corp. (LSI Logic) | 44 | lsi LSI Corp. (LSI Logic) |
| 43 | marvell Marvell Technology Group Ltd. | 45 | marvell Marvell Technology Group Ltd. |
diff --git a/Documentation/dmatest.txt b/Documentation/dmatest.txt index a2b5663eae26..dd77a81bdb80 100644 --- a/Documentation/dmatest.txt +++ b/Documentation/dmatest.txt | |||
| @@ -15,39 +15,48 @@ be built as module or inside kernel. Let's consider those cases. | |||
| 15 | 15 | ||
| 16 | Part 2 - When dmatest is built as a module... | 16 | Part 2 - When dmatest is built as a module... |
| 17 | 17 | ||
| 18 | After mounting debugfs and loading the module, the /sys/kernel/debug/dmatest | ||
| 19 | folder with nodes will be created. There are two important files located. First | ||
| 20 | is the 'run' node that controls run and stop phases of the test, and the second | ||
| 21 | one, 'results', is used to get the test case results. | ||
| 22 | |||
| 23 | Note that in this case test will not run on load automatically. | ||
| 24 | |||
| 25 | Example of usage: | 18 | Example of usage: |
| 19 | % modprobe dmatest channel=dma0chan0 timeout=2000 iterations=1 run=1 | ||
| 20 | |||
| 21 | ...or: | ||
| 22 | % modprobe dmatest | ||
| 26 | % echo dma0chan0 > /sys/module/dmatest/parameters/channel | 23 | % echo dma0chan0 > /sys/module/dmatest/parameters/channel |
| 27 | % echo 2000 > /sys/module/dmatest/parameters/timeout | 24 | % echo 2000 > /sys/module/dmatest/parameters/timeout |
| 28 | % echo 1 > /sys/module/dmatest/parameters/iterations | 25 | % echo 1 > /sys/module/dmatest/parameters/iterations |
| 29 | % echo 1 > /sys/kernel/debug/dmatest/run | 26 | % echo 1 > /sys/module/dmatest/parameters/run |
| 27 | |||
| 28 | ...or on the kernel command line: | ||
| 29 | |||
| 30 | dmatest.channel=dma0chan0 dmatest.timeout=2000 dmatest.iterations=1 dmatest.run=1 | ||
| 30 | 31 | ||
| 31 | Hint: available channel list could be extracted by running the following | 32 | Hint: available channel list could be extracted by running the following |
| 32 | command: | 33 | command: |
| 33 | % ls -1 /sys/class/dma/ | 34 | % ls -1 /sys/class/dma/ |
| 34 | 35 | ||
| 35 | After a while you will start to get messages about current status or error like | 36 | Once started a message like "dmatest: Started 1 threads using dma0chan0" is |
| 36 | in the original code. | 37 | emitted. After that only test failure messages are reported until the test |
| 38 | stops. | ||
| 37 | 39 | ||
| 38 | Note that running a new test will not stop any in progress test. | 40 | Note that running a new test will not stop any in progress test. |
| 39 | 41 | ||
| 40 | The following command should return actual state of the test. | 42 | The following command returns the state of the test. |
| 41 | % cat /sys/kernel/debug/dmatest/run | 43 | % cat /sys/module/dmatest/parameters/run |
| 42 | 44 | ||
| 43 | To wait for test done the user may perform a busy loop that checks the state. | 45 | To wait for test completion userpace can poll 'run' until it is false, or use |
| 44 | 46 | the wait parameter. Specifying 'wait=1' when loading the module causes module | |
| 45 | % while [ $(cat /sys/kernel/debug/dmatest/run) = "Y" ] | 47 | initialization to pause until a test run has completed, while reading |
| 46 | > do | 48 | /sys/module/dmatest/parameters/wait waits for any running test to complete |
| 47 | > echo -n "." | 49 | before returning. For example, the following scripts wait for 42 tests |
| 48 | > sleep 1 | 50 | to complete before exiting. Note that if 'iterations' is set to 'infinite' then |
| 49 | > done | 51 | waiting is disabled. |
| 50 | > echo | 52 | |
| 53 | Example: | ||
| 54 | % modprobe dmatest run=1 iterations=42 wait=1 | ||
| 55 | % modprobe -r dmatest | ||
| 56 | ...or: | ||
| 57 | % modprobe dmatest run=1 iterations=42 | ||
| 58 | % cat /sys/module/dmatest/parameters/wait | ||
| 59 | % modprobe -r dmatest | ||
| 51 | 60 | ||
| 52 | Part 3 - When built-in in the kernel... | 61 | Part 3 - When built-in in the kernel... |
| 53 | 62 | ||
| @@ -62,21 +71,22 @@ case. You always could check them at run-time by running | |||
| 62 | 71 | ||
| 63 | Part 4 - Gathering the test results | 72 | Part 4 - Gathering the test results |
| 64 | 73 | ||
| 65 | The module provides a storage for the test results in the memory. The gathered | 74 | Test results are printed to the kernel log buffer with the format: |
| 66 | data could be used after test is done. | ||
| 67 | 75 | ||
| 68 | The special file 'results' in the debugfs represents gathered data of the in | 76 | "dmatest: result <channel>: <test id>: '<error msg>' with src_off=<val> dst_off=<val> len=<val> (<err code>)" |
| 69 | progress test. The messages collected are printed to the kernel log as well. | ||
| 70 | 77 | ||
| 71 | Example of output: | 78 | Example of output: |
| 72 | % cat /sys/kernel/debug/dmatest/results | 79 | % dmesg | tail -n 1 |
| 73 | dma0chan0-copy0: #1: No errors with src_off=0x7bf dst_off=0x8ad len=0x3fea (0) | 80 | dmatest: result dma0chan0-copy0: #1: No errors with src_off=0x7bf dst_off=0x8ad len=0x3fea (0) |
| 74 | 81 | ||
| 75 | The message format is unified across the different types of errors. A number in | 82 | The message format is unified across the different types of errors. A number in |
| 76 | the parens represents additional information, e.g. error code, error counter, | 83 | the parens represents additional information, e.g. error code, error counter, |
| 77 | or status. | 84 | or status. A test thread also emits a summary line at completion listing the |
| 85 | number of tests executed, number that failed, and a result code. | ||
| 78 | 86 | ||
| 79 | Comparison between buffers is stored to the dedicated structure. | 87 | Example: |
| 88 | % dmesg | tail -n 1 | ||
| 89 | dmatest: dma0chan0-copy0: summary 1 test, 0 failures 1000 iops 100000 KB/s (0) | ||
| 80 | 90 | ||
| 81 | Note that the verify result is now accessible only via file 'results' in the | 91 | The details of a data miscompare error are also emitted, but do not follow the |
| 82 | debugfs. | 92 | above format. |
diff --git a/Documentation/filesystems/btrfs.txt b/Documentation/filesystems/btrfs.txt index 9dae59407437..5dd282dda55c 100644 --- a/Documentation/filesystems/btrfs.txt +++ b/Documentation/filesystems/btrfs.txt | |||
| @@ -70,6 +70,12 @@ Unless otherwise specified, all options default to off. | |||
| 70 | 70 | ||
| 71 | See comments at the top of fs/btrfs/check-integrity.c for more info. | 71 | See comments at the top of fs/btrfs/check-integrity.c for more info. |
| 72 | 72 | ||
| 73 | commit=<seconds> | ||
| 74 | Set the interval of periodic commit, 30 seconds by default. Higher | ||
| 75 | values defer data being synced to permanent storage with obvious | ||
| 76 | consequences when the system crashes. The upper bound is not forced, | ||
| 77 | but a warning is printed if it's more than 300 seconds (5 minutes). | ||
| 78 | |||
| 73 | compress | 79 | compress |
| 74 | compress=<type> | 80 | compress=<type> |
| 75 | compress-force | 81 | compress-force |
| @@ -154,7 +160,11 @@ Unless otherwise specified, all options default to off. | |||
| 154 | Currently this scans a list of several previous tree roots and tries to | 160 | Currently this scans a list of several previous tree roots and tries to |
| 155 | use the first readable. | 161 | use the first readable. |
| 156 | 162 | ||
| 157 | skip_balance | 163 | rescan_uuid_tree |
| 164 | Force check and rebuild procedure of the UUID tree. This should not | ||
| 165 | normally be needed. | ||
| 166 | |||
| 167 | skip_balance | ||
| 158 | Skip automatic resume of interrupted balance operation after mount. | 168 | Skip automatic resume of interrupted balance operation after mount. |
| 159 | May be resumed with "btrfs balance resume." | 169 | May be resumed with "btrfs balance resume." |
| 160 | 170 | ||
| @@ -234,24 +244,14 @@ available from the git repository at the following location: | |||
| 234 | 244 | ||
| 235 | These include the following tools: | 245 | These include the following tools: |
| 236 | 246 | ||
| 237 | mkfs.btrfs: create a filesystem | 247 | * mkfs.btrfs: create a filesystem |
| 238 | |||
| 239 | btrfsctl: control program to create snapshots and subvolumes: | ||
| 240 | 248 | ||
| 241 | mount /dev/sda2 /mnt | 249 | * btrfs: a single tool to manage the filesystems, refer to the manpage for more details |
| 242 | btrfsctl -s new_subvol_name /mnt | ||
| 243 | btrfsctl -s snapshot_of_default /mnt/default | ||
| 244 | btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name | ||
| 245 | btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol | ||
| 246 | ls /mnt | ||
| 247 | default snapshot_of_a_snapshot snapshot_of_new_subvol | ||
| 248 | new_subvol_name snapshot_of_default | ||
| 249 | 250 | ||
| 250 | Snapshots and subvolumes cannot be deleted right now, but you can | 251 | * 'btrfsck' or 'btrfs check': do a consistency check of the filesystem |
| 251 | rm -rf all the files and directories inside them. | ||
| 252 | 252 | ||
| 253 | btrfsck: do a limited check of the FS extent trees. | 253 | Other tools for specific tasks: |
| 254 | 254 | ||
| 255 | btrfs-debug-tree: print all of the FS metadata in text form. Example: | 255 | * btrfs-convert: in-place conversion from ext2/3/4 filesystems |
| 256 | 256 | ||
| 257 | btrfs-debug-tree /dev/sda2 >& big_output_file | 257 | * btrfs-image: dump filesystem metadata for debugging |
diff --git a/Documentation/gpio/00-INDEX b/Documentation/gpio/00-INDEX new file mode 100644 index 000000000000..1de43ae46ae6 --- /dev/null +++ b/Documentation/gpio/00-INDEX | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | 00-INDEX | ||
| 2 | - This file | ||
| 3 | gpio.txt | ||
| 4 | - Introduction to GPIOs and their kernel interfaces | ||
| 5 | consumer.txt | ||
| 6 | - How to obtain and use GPIOs in a driver | ||
| 7 | driver.txt | ||
| 8 | - How to write a GPIO driver | ||
| 9 | board.txt | ||
| 10 | - How to assign GPIOs to a consumer device and a function | ||
| 11 | sysfs.txt | ||
| 12 | - Information about the GPIO sysfs interface | ||
| 13 | gpio-legacy.txt | ||
| 14 | - Historical documentation of the deprecated GPIO integer interface | ||
diff --git a/Documentation/gpio/board.txt b/Documentation/gpio/board.txt new file mode 100644 index 000000000000..0d03506f2cc5 --- /dev/null +++ b/Documentation/gpio/board.txt | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | GPIO Mappings | ||
| 2 | ============= | ||
| 3 | |||
| 4 | This document explains how GPIOs can be assigned to given devices and functions. | ||
| 5 | Note that it only applies to the new descriptor-based interface. For a | ||
| 6 | description of the deprecated integer-based GPIO interface please refer to | ||
| 7 | gpio-legacy.txt (actually, there is no real mapping possible with the old | ||
| 8 | interface; you just fetch an integer from somewhere and request the | ||
| 9 | corresponding GPIO. | ||
| 10 | |||
| 11 | Platforms that make use of GPIOs must select ARCH_REQUIRE_GPIOLIB (if GPIO usage | ||
| 12 | is mandatory) or ARCH_WANT_OPTIONAL_GPIOLIB (if GPIO support can be omitted) in | ||
| 13 | their Kconfig. Then, how GPIOs are mapped depends on what the platform uses to | ||
| 14 | describe its hardware layout. Currently, mappings can be defined through device | ||
| 15 | tree, ACPI, and platform data. | ||
| 16 | |||
| 17 | Device Tree | ||
| 18 | ----------- | ||
| 19 | GPIOs can easily be mapped to devices and functions in the device tree. The | ||
| 20 | exact way to do it depends on the GPIO controller providing the GPIOs, see the | ||
| 21 | device tree bindings for your controller. | ||
| 22 | |||
| 23 | GPIOs mappings are defined in the consumer device's node, in a property named | ||
| 24 | <function>-gpios, where <function> is the function the driver will request | ||
| 25 | through gpiod_get(). For example: | ||
| 26 | |||
| 27 | foo_device { | ||
| 28 | compatible = "acme,foo"; | ||
| 29 | ... | ||
| 30 | led-gpios = <&gpio 15 GPIO_ACTIVE_HIGH>, /* red */ | ||
| 31 | <&gpio 16 GPIO_ACTIVE_HIGH>, /* green */ | ||
| 32 | <&gpio 17 GPIO_ACTIVE_HIGH>; /* blue */ | ||
| 33 | |||
| 34 | power-gpio = <&gpio 1 GPIO_ACTIVE_LOW>; | ||
| 35 | }; | ||
| 36 | |||
| 37 | This property will make GPIOs 15, 16 and 17 available to the driver under the | ||
| 38 | "led" function, and GPIO 1 as the "power" GPIO: | ||
| 39 | |||
| 40 | struct gpio_desc *red, *green, *blue, *power; | ||
| 41 | |||
| 42 | red = gpiod_get_index(dev, "led", 0); | ||
| 43 | green = gpiod_get_index(dev, "led", 1); | ||
| 44 | blue = gpiod_get_index(dev, "led", 2); | ||
| 45 | |||
| 46 | power = gpiod_get(dev, "power"); | ||
| 47 | |||
| 48 | The led GPIOs will be active-high, while the power GPIO will be active-low (i.e. | ||
| 49 | gpiod_is_active_low(power) will be true). | ||
| 50 | |||
| 51 | ACPI | ||
| 52 | ---- | ||
| 53 | ACPI does not support function names for GPIOs. Therefore, only the "idx" | ||
| 54 | argument of gpiod_get_index() is useful to discriminate between GPIOs assigned | ||
| 55 | to a device. The "con_id" argument can still be set for debugging purposes (it | ||
| 56 | will appear under error messages as well as debug and sysfs nodes). | ||
| 57 | |||
| 58 | Platform Data | ||
| 59 | ------------- | ||
| 60 | Finally, GPIOs can be bound to devices and functions using platform data. Board | ||
| 61 | files that desire to do so need to include the following header: | ||
| 62 | |||
| 63 | #include <linux/gpio/driver.h> | ||
| 64 | |||
| 65 | GPIOs are mapped by the means of tables of lookups, containing instances of the | ||
| 66 | gpiod_lookup structure. Two macros are defined to help declaring such mappings: | ||
| 67 | |||
| 68 | GPIO_LOOKUP(chip_label, chip_hwnum, dev_id, con_id, flags) | ||
| 69 | GPIO_LOOKUP_IDX(chip_label, chip_hwnum, dev_id, con_id, idx, flags) | ||
| 70 | |||
| 71 | where | ||
| 72 | |||
| 73 | - chip_label is the label of the gpiod_chip instance providing the GPIO | ||
| 74 | - chip_hwnum is the hardware number of the GPIO within the chip | ||
| 75 | - dev_id is the identifier of the device that will make use of this GPIO. If | ||
| 76 | NULL, the GPIO will be available to all devices. | ||
| 77 | - con_id is the name of the GPIO function from the device point of view. It | ||
| 78 | can be NULL. | ||
| 79 | - idx is the index of the GPIO within the function. | ||
| 80 | - flags is defined to specify the following properties: | ||
| 81 | * GPIOF_ACTIVE_LOW - to configure the GPIO as active-low | ||
| 82 | * GPIOF_OPEN_DRAIN - GPIO pin is open drain type. | ||
| 83 | * GPIOF_OPEN_SOURCE - GPIO pin is open source type. | ||
| 84 | |||
| 85 | In the future, these flags might be extended to support more properties. | ||
| 86 | |||
| 87 | Note that GPIO_LOOKUP() is just a shortcut to GPIO_LOOKUP_IDX() where idx = 0. | ||
| 88 | |||
| 89 | A lookup table can then be defined as follows: | ||
| 90 | |||
| 91 | struct gpiod_lookup gpios_table[] = { | ||
| 92 | GPIO_LOOKUP_IDX("gpio.0", 15, "foo.0", "led", 0, GPIO_ACTIVE_HIGH), | ||
| 93 | GPIO_LOOKUP_IDX("gpio.0", 16, "foo.0", "led", 1, GPIO_ACTIVE_HIGH), | ||
| 94 | GPIO_LOOKUP_IDX("gpio.0", 17, "foo.0", "led", 2, GPIO_ACTIVE_HIGH), | ||
| 95 | GPIO_LOOKUP("gpio.0", 1, "foo.0", "power", GPIO_ACTIVE_LOW), | ||
| 96 | }; | ||
| 97 | |||
| 98 | And the table can be added by the board code as follows: | ||
| 99 | |||
| 100 | gpiod_add_table(gpios_table, ARRAY_SIZE(gpios_table)); | ||
| 101 | |||
| 102 | The driver controlling "foo.0" will then be able to obtain its GPIOs as follows: | ||
| 103 | |||
| 104 | struct gpio_desc *red, *green, *blue, *power; | ||
| 105 | |||
| 106 | red = gpiod_get_index(dev, "led", 0); | ||
| 107 | green = gpiod_get_index(dev, "led", 1); | ||
| 108 | blue = gpiod_get_index(dev, "led", 2); | ||
| 109 | |||
| 110 | power = gpiod_get(dev, "power"); | ||
| 111 | gpiod_direction_output(power, 1); | ||
| 112 | |||
| 113 | Since the "power" GPIO is mapped as active-low, its actual signal will be 0 | ||
| 114 | after this code. Contrary to the legacy integer GPIO interface, the active-low | ||
| 115 | property is handled during mapping and is thus transparent to GPIO consumers. | ||
diff --git a/Documentation/gpio/consumer.txt b/Documentation/gpio/consumer.txt new file mode 100644 index 000000000000..07c74a3765a0 --- /dev/null +++ b/Documentation/gpio/consumer.txt | |||
| @@ -0,0 +1,197 @@ | |||
| 1 | GPIO Descriptor Consumer Interface | ||
| 2 | ================================== | ||
| 3 | |||
| 4 | This document describes the consumer interface of the GPIO framework. Note that | ||
| 5 | it describes the new descriptor-based interface. For a description of the | ||
| 6 | deprecated integer-based GPIO interface please refer to gpio-legacy.txt. | ||
| 7 | |||
| 8 | |||
| 9 | Guidelines for GPIOs consumers | ||
| 10 | ============================== | ||
| 11 | |||
| 12 | Drivers that can't work without standard GPIO calls should have Kconfig entries | ||
| 13 | that depend on GPIOLIB. The functions that allow a driver to obtain and use | ||
| 14 | GPIOs are available by including the following file: | ||
| 15 | |||
| 16 | #include <linux/gpio/consumer.h> | ||
| 17 | |||
| 18 | All the functions that work with the descriptor-based GPIO interface are | ||
| 19 | prefixed with gpiod_. The gpio_ prefix is used for the legacy interface. No | ||
| 20 | other function in the kernel should use these prefixes. | ||
| 21 | |||
| 22 | |||
| 23 | Obtaining and Disposing GPIOs | ||
| 24 | ============================= | ||
| 25 | |||
| 26 | With the descriptor-based interface, GPIOs are identified with an opaque, | ||
| 27 | non-forgeable handler that must be obtained through a call to one of the | ||
| 28 | gpiod_get() functions. Like many other kernel subsystems, gpiod_get() takes the | ||
| 29 | device that will use the GPIO and the function the requested GPIO is supposed to | ||
| 30 | fulfill: | ||
| 31 | |||
| 32 | struct gpio_desc *gpiod_get(struct device *dev, const char *con_id) | ||
| 33 | |||
| 34 | If a function is implemented by using several GPIOs together (e.g. a simple LED | ||
| 35 | device that displays digits), an additional index argument can be specified: | ||
| 36 | |||
| 37 | struct gpio_desc *gpiod_get_index(struct device *dev, | ||
| 38 | const char *con_id, unsigned int idx) | ||
| 39 | |||
| 40 | Both functions return either a valid GPIO descriptor, or an error code checkable | ||
| 41 | with IS_ERR(). They will never return a NULL pointer. | ||
| 42 | |||
| 43 | Device-managed variants of these functions are also defined: | ||
| 44 | |||
| 45 | struct gpio_desc *devm_gpiod_get(struct device *dev, const char *con_id) | ||
| 46 | |||
| 47 | struct gpio_desc *devm_gpiod_get_index(struct device *dev, | ||
| 48 | const char *con_id, | ||
| 49 | unsigned int idx) | ||
| 50 | |||
| 51 | A GPIO descriptor can be disposed of using the gpiod_put() function: | ||
| 52 | |||
| 53 | void gpiod_put(struct gpio_desc *desc) | ||
| 54 | |||
| 55 | It is strictly forbidden to use a descriptor after calling this function. The | ||
| 56 | device-managed variant is, unsurprisingly: | ||
| 57 | |||
| 58 | void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) | ||
| 59 | |||
| 60 | |||
| 61 | Using GPIOs | ||
| 62 | =========== | ||
| 63 | |||
| 64 | Setting Direction | ||
| 65 | ----------------- | ||
| 66 | The first thing a driver must do with a GPIO is setting its direction. This is | ||
| 67 | done by invoking one of the gpiod_direction_*() functions: | ||
| 68 | |||
| 69 | int gpiod_direction_input(struct gpio_desc *desc) | ||
| 70 | int gpiod_direction_output(struct gpio_desc *desc, int value) | ||
| 71 | |||
| 72 | The return value is zero for success, else a negative errno. It should be | ||
| 73 | checked, since the get/set calls don't return errors and since misconfiguration | ||
| 74 | is possible. You should normally issue these calls from a task context. However, | ||
| 75 | for spinlock-safe GPIOs it is OK to use them before tasking is enabled, as part | ||
| 76 | of early board setup. | ||
| 77 | |||
| 78 | For output GPIOs, the value provided becomes the initial output value. This | ||
| 79 | helps avoid signal glitching during system startup. | ||
| 80 | |||
| 81 | A driver can also query the current direction of a GPIO: | ||
| 82 | |||
| 83 | int gpiod_get_direction(const struct gpio_desc *desc) | ||
| 84 | |||
| 85 | This function will return either GPIOF_DIR_IN or GPIOF_DIR_OUT. | ||
| 86 | |||
| 87 | Be aware that there is no default direction for GPIOs. Therefore, **using a GPIO | ||
| 88 | without setting its direction first is illegal and will result in undefined | ||
| 89 | behavior!** | ||
| 90 | |||
| 91 | |||
| 92 | Spinlock-Safe GPIO Access | ||
| 93 | ------------------------- | ||
| 94 | Most GPIO controllers can be accessed with memory read/write instructions. Those | ||
| 95 | don't need to sleep, and can safely be done from inside hard (non-threaded) IRQ | ||
| 96 | handlers and similar contexts. | ||
| 97 | |||
| 98 | Use the following calls to access GPIOs from an atomic context: | ||
| 99 | |||
| 100 | int gpiod_get_value(const struct gpio_desc *desc); | ||
| 101 | void gpiod_set_value(struct gpio_desc *desc, int value); | ||
| 102 | |||
| 103 | The values are boolean, zero for low, nonzero for high. When reading the value | ||
| 104 | of an output pin, the value returned should be what's seen on the pin. That | ||
| 105 | won't always match the specified output value, because of issues including | ||
| 106 | open-drain signaling and output latencies. | ||
| 107 | |||
| 108 | The get/set calls do not return errors because "invalid GPIO" should have been | ||
| 109 | reported earlier from gpiod_direction_*(). However, note that not all platforms | ||
| 110 | can read the value of output pins; those that can't should always return zero. | ||
| 111 | Also, using these calls for GPIOs that can't safely be accessed without sleeping | ||
| 112 | (see below) is an error. | ||
| 113 | |||
| 114 | |||
| 115 | GPIO Access That May Sleep | ||
| 116 | -------------------------- | ||
| 117 | Some GPIO controllers must be accessed using message based buses like I2C or | ||
| 118 | SPI. Commands to read or write those GPIO values require waiting to get to the | ||
| 119 | head of a queue to transmit a command and get its response. This requires | ||
| 120 | sleeping, which can't be done from inside IRQ handlers. | ||
| 121 | |||
| 122 | Platforms that support this type of GPIO distinguish them from other GPIOs by | ||
| 123 | returning nonzero from this call: | ||
| 124 | |||
| 125 | int gpiod_cansleep(const struct gpio_desc *desc) | ||
| 126 | |||
| 127 | To access such GPIOs, a different set of accessors is defined: | ||
| 128 | |||
| 129 | int gpiod_get_value_cansleep(const struct gpio_desc *desc) | ||
| 130 | void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) | ||
| 131 | |||
| 132 | Accessing such GPIOs requires a context which may sleep, for example a threaded | ||
| 133 | IRQ handler, and those accessors must be used instead of spinlock-safe | ||
| 134 | accessors without the cansleep() name suffix. | ||
| 135 | |||
| 136 | Other than the fact that these accessors might sleep, and will work on GPIOs | ||
| 137 | that can't be accessed from hardIRQ handlers, these calls act the same as the | ||
| 138 | spinlock-safe calls. | ||
| 139 | |||
| 140 | |||
| 141 | Active-low State and Raw GPIO Values | ||
| 142 | ------------------------------------ | ||
| 143 | Device drivers like to manage the logical state of a GPIO, i.e. the value their | ||
| 144 | device will actually receive, no matter what lies between it and the GPIO line. | ||
| 145 | In some cases, it might make sense to control the actual GPIO line value. The | ||
| 146 | following set of calls ignore the active-low property of a GPIO and work on the | ||
| 147 | raw line value: | ||
| 148 | |||
| 149 | int gpiod_get_raw_value(const struct gpio_desc *desc) | ||
| 150 | void gpiod_set_raw_value(struct gpio_desc *desc, int value) | ||
| 151 | int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) | ||
| 152 | void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value) | ||
| 153 | |||
| 154 | The active-low state of a GPIO can also be queried using the following call: | ||
| 155 | |||
| 156 | int gpiod_is_active_low(const struct gpio_desc *desc) | ||
| 157 | |||
| 158 | Note that these functions should only be used with great moderation ; a driver | ||
| 159 | should not have to care about the physical line level. | ||
| 160 | |||
| 161 | GPIOs mapped to IRQs | ||
| 162 | -------------------- | ||
| 163 | GPIO lines can quite often be used as IRQs. You can get the IRQ number | ||
| 164 | corresponding to a given GPIO using the following call: | ||
| 165 | |||
| 166 | int gpiod_to_irq(const struct gpio_desc *desc) | ||
| 167 | |||
| 168 | It will return an IRQ number, or an negative errno code if the mapping can't be | ||
| 169 | done (most likely because that particular GPIO cannot be used as IRQ). It is an | ||
| 170 | unchecked error to use a GPIO that wasn't set up as an input using | ||
| 171 | gpiod_direction_input(), or to use an IRQ number that didn't originally come | ||
| 172 | from gpiod_to_irq(). gpiod_to_irq() is not allowed to sleep. | ||
| 173 | |||
| 174 | Non-error values returned from gpiod_to_irq() can be passed to request_irq() or | ||
| 175 | free_irq(). They will often be stored into IRQ resources for platform devices, | ||
| 176 | by the board-specific initialization code. Note that IRQ trigger options are | ||
| 177 | part of the IRQ interface, e.g. IRQF_TRIGGER_FALLING, as are system wakeup | ||
| 178 | capabilities. | ||
| 179 | |||
| 180 | |||
| 181 | Interacting With the Legacy GPIO Subsystem | ||
| 182 | ========================================== | ||
| 183 | Many kernel subsystems still handle GPIOs using the legacy integer-based | ||
| 184 | interface. Although it is strongly encouraged to upgrade them to the safer | ||
| 185 | descriptor-based API, the following two functions allow you to convert a GPIO | ||
| 186 | descriptor into the GPIO integer namespace and vice-versa: | ||
| 187 | |||
| 188 | int desc_to_gpio(const struct gpio_desc *desc) | ||
| 189 | struct gpio_desc *gpio_to_desc(unsigned gpio) | ||
| 190 | |||
| 191 | The GPIO number returned by desc_to_gpio() can be safely used as long as the | ||
| 192 | GPIO descriptor has not been freed. All the same, a GPIO number passed to | ||
| 193 | gpio_to_desc() must have been properly acquired, and usage of the returned GPIO | ||
| 194 | descriptor is only possible after the GPIO number has been released. | ||
| 195 | |||
| 196 | Freeing a GPIO obtained by one API with the other API is forbidden and an | ||
| 197 | unchecked error. | ||
diff --git a/Documentation/gpio/driver.txt b/Documentation/gpio/driver.txt new file mode 100644 index 000000000000..9da0bfa74781 --- /dev/null +++ b/Documentation/gpio/driver.txt | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | GPIO Descriptor Driver Interface | ||
| 2 | ================================ | ||
| 3 | |||
| 4 | This document serves as a guide for GPIO chip drivers writers. Note that it | ||
| 5 | describes the new descriptor-based interface. For a description of the | ||
| 6 | deprecated integer-based GPIO interface please refer to gpio-legacy.txt. | ||
| 7 | |||
| 8 | Each GPIO controller driver needs to include the following header, which defines | ||
| 9 | the structures used to define a GPIO driver: | ||
| 10 | |||
| 11 | #include <linux/gpio/driver.h> | ||
| 12 | |||
| 13 | |||
| 14 | Internal Representation of GPIOs | ||
| 15 | ================================ | ||
| 16 | |||
| 17 | Inside a GPIO driver, individual GPIOs are identified by their hardware number, | ||
| 18 | which is a unique number between 0 and n, n being the number of GPIOs managed by | ||
| 19 | the chip. This number is purely internal: the hardware number of a particular | ||
| 20 | GPIO descriptor is never made visible outside of the driver. | ||
| 21 | |||
| 22 | On top of this internal number, each GPIO also need to have a global number in | ||
| 23 | the integer GPIO namespace so that it can be used with the legacy GPIO | ||
| 24 | interface. Each chip must thus have a "base" number (which can be automatically | ||
| 25 | assigned), and for each GPIO the global number will be (base + hardware number). | ||
| 26 | Although the integer representation is considered deprecated, it still has many | ||
| 27 | users and thus needs to be maintained. | ||
| 28 | |||
| 29 | So for example one platform could use numbers 32-159 for GPIOs, with a | ||
| 30 | controller defining 128 GPIOs at a "base" of 32 ; while another platform uses | ||
| 31 | numbers 0..63 with one set of GPIO controllers, 64-79 with another type of GPIO | ||
| 32 | controller, and on one particular board 80-95 with an FPGA. The numbers need not | ||
| 33 | be contiguous; either of those platforms could also use numbers 2000-2063 to | ||
| 34 | identify GPIOs in a bank of I2C GPIO expanders. | ||
| 35 | |||
| 36 | |||
| 37 | Controller Drivers: gpio_chip | ||
| 38 | ============================= | ||
| 39 | |||
| 40 | In the gpiolib framework each GPIO controller is packaged as a "struct | ||
| 41 | gpio_chip" (see linux/gpio/driver.h for its complete definition) with members | ||
| 42 | common to each controller of that type: | ||
| 43 | |||
| 44 | - methods to establish GPIO direction | ||
| 45 | - methods used to access GPIO values | ||
| 46 | - method to return the IRQ number associated to a given GPIO | ||
| 47 | - flag saying whether calls to its methods may sleep | ||
| 48 | - optional debugfs dump method (showing extra state like pullup config) | ||
| 49 | - optional base number (will be automatically assigned if omitted) | ||
| 50 | - label for diagnostics and GPIOs mapping using platform data | ||
| 51 | |||
| 52 | The code implementing a gpio_chip should support multiple instances of the | ||
| 53 | controller, possibly using the driver model. That code will configure each | ||
| 54 | gpio_chip and issue gpiochip_add(). Removing a GPIO controller should be rare; | ||
| 55 | use gpiochip_remove() when it is unavoidable. | ||
| 56 | |||
| 57 | Most often a gpio_chip is part of an instance-specific structure with state not | ||
| 58 | exposed by the GPIO interfaces, such as addressing, power management, and more. | ||
| 59 | Chips such as codecs will have complex non-GPIO state. | ||
| 60 | |||
| 61 | Any debugfs dump method should normally ignore signals which haven't been | ||
| 62 | requested as GPIOs. They can use gpiochip_is_requested(), which returns either | ||
| 63 | NULL or the label associated with that GPIO when it was requested. | ||
| 64 | |||
| 65 | Locking IRQ usage | ||
| 66 | ----------------- | ||
| 67 | Input GPIOs can be used as IRQ signals. When this happens, a driver is requested | ||
| 68 | to mark the GPIO as being used as an IRQ: | ||
| 69 | |||
| 70 | int gpiod_lock_as_irq(struct gpio_desc *desc) | ||
| 71 | |||
| 72 | This will prevent the use of non-irq related GPIO APIs until the GPIO IRQ lock | ||
| 73 | is released: | ||
| 74 | |||
| 75 | void gpiod_unlock_as_irq(struct gpio_desc *desc) | ||
diff --git a/Documentation/gpio.txt b/Documentation/gpio/gpio-legacy.txt index 6f83fa965b4b..6f83fa965b4b 100644 --- a/Documentation/gpio.txt +++ b/Documentation/gpio/gpio-legacy.txt | |||
diff --git a/Documentation/gpio/gpio.txt b/Documentation/gpio/gpio.txt new file mode 100644 index 000000000000..cd9b356e88cd --- /dev/null +++ b/Documentation/gpio/gpio.txt | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | GPIO Interfaces | ||
| 2 | =============== | ||
| 3 | |||
| 4 | The documents in this directory give detailed instructions on how to access | ||
| 5 | GPIOs in drivers, and how to write a driver for a device that provides GPIOs | ||
| 6 | itself. | ||
| 7 | |||
| 8 | Due to the history of GPIO interfaces in the kernel, there are two different | ||
| 9 | ways to obtain and use GPIOs: | ||
| 10 | |||
| 11 | - The descriptor-based interface is the preferred way to manipulate GPIOs, | ||
| 12 | and is described by all the files in this directory excepted gpio-legacy.txt. | ||
| 13 | - The legacy integer-based interface which is considered deprecated (but still | ||
| 14 | usable for compatibility reasons) is documented in gpio-legacy.txt. | ||
| 15 | |||
| 16 | The remainder of this document applies to the new descriptor-based interface. | ||
| 17 | gpio-legacy.txt contains the same information applied to the legacy | ||
| 18 | integer-based interface. | ||
| 19 | |||
| 20 | |||
| 21 | What is a GPIO? | ||
| 22 | =============== | ||
| 23 | |||
| 24 | A "General Purpose Input/Output" (GPIO) is a flexible software-controlled | ||
| 25 | digital signal. They are provided from many kinds of chip, and are familiar | ||
| 26 | to Linux developers working with embedded and custom hardware. Each GPIO | ||
| 27 | represents a bit connected to a particular pin, or "ball" on Ball Grid Array | ||
| 28 | (BGA) packages. Board schematics show which external hardware connects to | ||
| 29 | which GPIOs. Drivers can be written generically, so that board setup code | ||
| 30 | passes such pin configuration data to drivers. | ||
| 31 | |||
| 32 | System-on-Chip (SOC) processors heavily rely on GPIOs. In some cases, every | ||
| 33 | non-dedicated pin can be configured as a GPIO; and most chips have at least | ||
| 34 | several dozen of them. Programmable logic devices (like FPGAs) can easily | ||
| 35 | provide GPIOs; multifunction chips like power managers, and audio codecs | ||
| 36 | often have a few such pins to help with pin scarcity on SOCs; and there are | ||
| 37 | also "GPIO Expander" chips that connect using the I2C or SPI serial buses. | ||
| 38 | Most PC southbridges have a few dozen GPIO-capable pins (with only the BIOS | ||
| 39 | firmware knowing how they're used). | ||
| 40 | |||
| 41 | The exact capabilities of GPIOs vary between systems. Common options: | ||
| 42 | |||
| 43 | - Output values are writable (high=1, low=0). Some chips also have | ||
| 44 | options about how that value is driven, so that for example only one | ||
| 45 | value might be driven, supporting "wire-OR" and similar schemes for the | ||
| 46 | other value (notably, "open drain" signaling). | ||
| 47 | |||
| 48 | - Input values are likewise readable (1, 0). Some chips support readback | ||
| 49 | of pins configured as "output", which is very useful in such "wire-OR" | ||
| 50 | cases (to support bidirectional signaling). GPIO controllers may have | ||
| 51 | input de-glitch/debounce logic, sometimes with software controls. | ||
| 52 | |||
| 53 | - Inputs can often be used as IRQ signals, often edge triggered but | ||
| 54 | sometimes level triggered. Such IRQs may be configurable as system | ||
| 55 | wakeup events, to wake the system from a low power state. | ||
| 56 | |||
| 57 | - Usually a GPIO will be configurable as either input or output, as needed | ||
| 58 | by different product boards; single direction ones exist too. | ||
| 59 | |||
| 60 | - Most GPIOs can be accessed while holding spinlocks, but those accessed | ||
| 61 | through a serial bus normally can't. Some systems support both types. | ||
| 62 | |||
| 63 | On a given board each GPIO is used for one specific purpose like monitoring | ||
| 64 | MMC/SD card insertion/removal, detecting card write-protect status, driving | ||
| 65 | a LED, configuring a transceiver, bit-banging a serial bus, poking a hardware | ||
| 66 | watchdog, sensing a switch, and so on. | ||
| 67 | |||
| 68 | |||
| 69 | Common GPIO Properties | ||
| 70 | ====================== | ||
| 71 | |||
| 72 | These properties are met through all the other documents of the GPIO interface | ||
| 73 | and it is useful to understand them, especially if you need to define GPIO | ||
| 74 | mappings. | ||
| 75 | |||
| 76 | Active-High and Active-Low | ||
| 77 | -------------------------- | ||
| 78 | It is natural to assume that a GPIO is "active" when its output signal is 1 | ||
| 79 | ("high"), and inactive when it is 0 ("low"). However in practice the signal of a | ||
| 80 | GPIO may be inverted before is reaches its destination, or a device could decide | ||
| 81 | to have different conventions about what "active" means. Such decisions should | ||
| 82 | be transparent to device drivers, therefore it is possible to define a GPIO as | ||
| 83 | being either active-high ("1" means "active", the default) or active-low ("0" | ||
| 84 | means "active") so that drivers only need to worry about the logical signal and | ||
| 85 | not about what happens at the line level. | ||
| 86 | |||
| 87 | Open Drain and Open Source | ||
| 88 | -------------------------- | ||
| 89 | Sometimes shared signals need to use "open drain" (where only the low signal | ||
| 90 | level is actually driven), or "open source" (where only the high signal level is | ||
| 91 | driven) signaling. That term applies to CMOS transistors; "open collector" is | ||
| 92 | used for TTL. A pullup or pulldown resistor causes the high or low signal level. | ||
| 93 | This is sometimes called a "wire-AND"; or more practically, from the negative | ||
| 94 | logic (low=true) perspective this is a "wire-OR". | ||
| 95 | |||
| 96 | One common example of an open drain signal is a shared active-low IRQ line. | ||
| 97 | Also, bidirectional data bus signals sometimes use open drain signals. | ||
| 98 | |||
| 99 | Some GPIO controllers directly support open drain and open source outputs; many | ||
| 100 | don't. When you need open drain signaling but your hardware doesn't directly | ||
| 101 | support it, there's a common idiom you can use to emulate it with any GPIO pin | ||
| 102 | that can be used as either an input or an output: | ||
| 103 | |||
| 104 | LOW: gpiod_direction_output(gpio, 0) ... this drives the signal and overrides | ||
| 105 | the pullup. | ||
| 106 | |||
| 107 | HIGH: gpiod_direction_input(gpio) ... this turns off the output, so the pullup | ||
| 108 | (or some other device) controls the signal. | ||
| 109 | |||
| 110 | The same logic can be applied to emulate open source signaling, by driving the | ||
| 111 | high signal and configuring the GPIO as input for low. This open drain/open | ||
| 112 | source emulation can be handled transparently by the GPIO framework. | ||
| 113 | |||
| 114 | If you are "driving" the signal high but gpiod_get_value(gpio) reports a low | ||
| 115 | value (after the appropriate rise time passes), you know some other component is | ||
| 116 | driving the shared signal low. That's not necessarily an error. As one common | ||
| 117 | example, that's how I2C clocks are stretched: a slave that needs a slower clock | ||
| 118 | delays the rising edge of SCK, and the I2C master adjusts its signaling rate | ||
| 119 | accordingly. | ||
diff --git a/Documentation/gpio/sysfs.txt b/Documentation/gpio/sysfs.txt new file mode 100644 index 000000000000..c2c3a97f8ff7 --- /dev/null +++ b/Documentation/gpio/sysfs.txt | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | GPIO Sysfs Interface for Userspace | ||
| 2 | ================================== | ||
| 3 | |||
| 4 | Platforms which use the "gpiolib" implementors framework may choose to | ||
| 5 | configure a sysfs user interface to GPIOs. This is different from the | ||
| 6 | debugfs interface, since it provides control over GPIO direction and | ||
| 7 | value instead of just showing a gpio state summary. Plus, it could be | ||
| 8 | present on production systems without debugging support. | ||
| 9 | |||
| 10 | Given appropriate hardware documentation for the system, userspace could | ||
| 11 | know for example that GPIO #23 controls the write protect line used to | ||
| 12 | protect boot loader segments in flash memory. System upgrade procedures | ||
| 13 | may need to temporarily remove that protection, first importing a GPIO, | ||
| 14 | then changing its output state, then updating the code before re-enabling | ||
| 15 | the write protection. In normal use, GPIO #23 would never be touched, | ||
| 16 | and the kernel would have no need to know about it. | ||
| 17 | |||
| 18 | Again depending on appropriate hardware documentation, on some systems | ||
| 19 | userspace GPIO can be used to determine system configuration data that | ||
| 20 | standard kernels won't know about. And for some tasks, simple userspace | ||
| 21 | GPIO drivers could be all that the system really needs. | ||
| 22 | |||
| 23 | Note that standard kernel drivers exist for common "LEDs and Buttons" | ||
| 24 | GPIO tasks: "leds-gpio" and "gpio_keys", respectively. Use those | ||
| 25 | instead of talking directly to the GPIOs; they integrate with kernel | ||
| 26 | frameworks better than your userspace code could. | ||
| 27 | |||
| 28 | |||
| 29 | Paths in Sysfs | ||
| 30 | -------------- | ||
| 31 | There are three kinds of entry in /sys/class/gpio: | ||
| 32 | |||
| 33 | - Control interfaces used to get userspace control over GPIOs; | ||
| 34 | |||
| 35 | - GPIOs themselves; and | ||
| 36 | |||
| 37 | - GPIO controllers ("gpio_chip" instances). | ||
| 38 | |||
| 39 | That's in addition to standard files including the "device" symlink. | ||
| 40 | |||
| 41 | The control interfaces are write-only: | ||
| 42 | |||
| 43 | /sys/class/gpio/ | ||
| 44 | |||
| 45 | "export" ... Userspace may ask the kernel to export control of | ||
| 46 | a GPIO to userspace by writing its number to this file. | ||
| 47 | |||
| 48 | Example: "echo 19 > export" will create a "gpio19" node | ||
| 49 | for GPIO #19, if that's not requested by kernel code. | ||
| 50 | |||
| 51 | "unexport" ... Reverses the effect of exporting to userspace. | ||
| 52 | |||
| 53 | Example: "echo 19 > unexport" will remove a "gpio19" | ||
| 54 | node exported using the "export" file. | ||
| 55 | |||
| 56 | GPIO signals have paths like /sys/class/gpio/gpio42/ (for GPIO #42) | ||
| 57 | and have the following read/write attributes: | ||
| 58 | |||
| 59 | /sys/class/gpio/gpioN/ | ||
| 60 | |||
| 61 | "direction" ... reads as either "in" or "out". This value may | ||
| 62 | normally be written. Writing as "out" defaults to | ||
| 63 | initializing the value as low. To ensure glitch free | ||
| 64 | operation, values "low" and "high" may be written to | ||
| 65 | configure the GPIO as an output with that initial value. | ||
| 66 | |||
| 67 | Note that this attribute *will not exist* if the kernel | ||
| 68 | doesn't support changing the direction of a GPIO, or | ||
| 69 | it was exported by kernel code that didn't explicitly | ||
| 70 | allow userspace to reconfigure this GPIO's direction. | ||
| 71 | |||
| 72 | "value" ... reads as either 0 (low) or 1 (high). If the GPIO | ||
| 73 | is configured as an output, this value may be written; | ||
| 74 | any nonzero value is treated as high. | ||
| 75 | |||
| 76 | If the pin can be configured as interrupt-generating interrupt | ||
| 77 | and if it has been configured to generate interrupts (see the | ||
| 78 | description of "edge"), you can poll(2) on that file and | ||
| 79 | poll(2) will return whenever the interrupt was triggered. If | ||
| 80 | you use poll(2), set the events POLLPRI and POLLERR. If you | ||
| 81 | use select(2), set the file descriptor in exceptfds. After | ||
| 82 | poll(2) returns, either lseek(2) to the beginning of the sysfs | ||
| 83 | file and read the new value or close the file and re-open it | ||
| 84 | to read the value. | ||
| 85 | |||
| 86 | "edge" ... reads as either "none", "rising", "falling", or | ||
| 87 | "both". Write these strings to select the signal edge(s) | ||
| 88 | that will make poll(2) on the "value" file return. | ||
| 89 | |||
| 90 | This file exists only if the pin can be configured as an | ||
| 91 | interrupt generating input pin. | ||
| 92 | |||
| 93 | "active_low" ... reads as either 0 (false) or 1 (true). Write | ||
| 94 | any nonzero value to invert the value attribute both | ||
| 95 | for reading and writing. Existing and subsequent | ||
| 96 | poll(2) support configuration via the edge attribute | ||
| 97 | for "rising" and "falling" edges will follow this | ||
| 98 | setting. | ||
| 99 | |||
| 100 | GPIO controllers have paths like /sys/class/gpio/gpiochip42/ (for the | ||
| 101 | controller implementing GPIOs starting at #42) and have the following | ||
| 102 | read-only attributes: | ||
| 103 | |||
| 104 | /sys/class/gpio/gpiochipN/ | ||
| 105 | |||
| 106 | "base" ... same as N, the first GPIO managed by this chip | ||
| 107 | |||
| 108 | "label" ... provided for diagnostics (not always unique) | ||
| 109 | |||
| 110 | "ngpio" ... how many GPIOs this manges (N to N + ngpio - 1) | ||
| 111 | |||
| 112 | Board documentation should in most cases cover what GPIOs are used for | ||
| 113 | what purposes. However, those numbers are not always stable; GPIOs on | ||
| 114 | a daughtercard might be different depending on the base board being used, | ||
| 115 | or other cards in the stack. In such cases, you may need to use the | ||
| 116 | gpiochip nodes (possibly in conjunction with schematics) to determine | ||
| 117 | the correct GPIO number to use for a given signal. | ||
| 118 | |||
| 119 | |||
| 120 | Exporting from Kernel code | ||
| 121 | -------------------------- | ||
| 122 | Kernel code can explicitly manage exports of GPIOs which have already been | ||
| 123 | requested using gpio_request(): | ||
| 124 | |||
| 125 | /* export the GPIO to userspace */ | ||
| 126 | int gpiod_export(struct gpio_desc *desc, bool direction_may_change); | ||
| 127 | |||
| 128 | /* reverse gpio_export() */ | ||
| 129 | void gpiod_unexport(struct gpio_desc *desc); | ||
| 130 | |||
| 131 | /* create a sysfs link to an exported GPIO node */ | ||
| 132 | int gpiod_export_link(struct device *dev, const char *name, | ||
| 133 | struct gpio_desc *desc); | ||
| 134 | |||
| 135 | /* change the polarity of a GPIO node in sysfs */ | ||
| 136 | int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value); | ||
| 137 | |||
| 138 | After a kernel driver requests a GPIO, it may only be made available in | ||
| 139 | the sysfs interface by gpiod_export(). The driver can control whether the | ||
| 140 | signal direction may change. This helps drivers prevent userspace code | ||
| 141 | from accidentally clobbering important system state. | ||
| 142 | |||
| 143 | This explicit exporting can help with debugging (by making some kinds | ||
| 144 | of experiments easier), or can provide an always-there interface that's | ||
| 145 | suitable for documenting as part of a board support package. | ||
| 146 | |||
| 147 | After the GPIO has been exported, gpiod_export_link() allows creating | ||
| 148 | symlinks from elsewhere in sysfs to the GPIO sysfs node. Drivers can | ||
| 149 | use this to provide the interface under their own device in sysfs with | ||
| 150 | a descriptive name. | ||
| 151 | |||
| 152 | Drivers can use gpiod_sysfs_set_active_low() to hide GPIO line polarity | ||
| 153 | differences between boards from user space. Polarity change can be done both | ||
| 154 | before and after gpiod_export(), and previously enabled poll(2) support for | ||
| 155 | either rising or falling edge will be reconfigured to follow this setting. | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 9ca3e74a10e1..50680a59a2ff 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -1190,15 +1190,24 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
| 1190 | owned by uid=0. | 1190 | owned by uid=0. |
| 1191 | 1191 | ||
| 1192 | ima_hash= [IMA] | 1192 | ima_hash= [IMA] |
| 1193 | Format: { "sha1" | "md5" } | 1193 | Format: { md5 | sha1 | rmd160 | sha256 | sha384 |
| 1194 | | sha512 | ... } | ||
| 1194 | default: "sha1" | 1195 | default: "sha1" |
| 1195 | 1196 | ||
| 1197 | The list of supported hash algorithms is defined | ||
| 1198 | in crypto/hash_info.h. | ||
| 1199 | |||
| 1196 | ima_tcb [IMA] | 1200 | ima_tcb [IMA] |
| 1197 | Load a policy which meets the needs of the Trusted | 1201 | Load a policy which meets the needs of the Trusted |
| 1198 | Computing Base. This means IMA will measure all | 1202 | Computing Base. This means IMA will measure all |
| 1199 | programs exec'd, files mmap'd for exec, and all files | 1203 | programs exec'd, files mmap'd for exec, and all files |
| 1200 | opened for read by uid=0. | 1204 | opened for read by uid=0. |
| 1201 | 1205 | ||
| 1206 | ima_template= [IMA] | ||
| 1207 | Select one of defined IMA measurements template formats. | ||
| 1208 | Formats: { "ima" | "ima-ng" } | ||
| 1209 | Default: "ima-ng" | ||
| 1210 | |||
| 1202 | init= [KNL] | 1211 | init= [KNL] |
| 1203 | Format: <full_path> | 1212 | Format: <full_path> |
| 1204 | Run specified binary instead of /sbin/init as init | 1213 | Run specified binary instead of /sbin/init as init |
diff --git a/Documentation/mic/mpssd/mpssd.c b/Documentation/mic/mpssd/mpssd.c index 0c980ad40b17..4d17487d5ad9 100644 --- a/Documentation/mic/mpssd/mpssd.c +++ b/Documentation/mic/mpssd/mpssd.c | |||
| @@ -313,7 +313,7 @@ static struct mic_device_desc *get_device_desc(struct mic_info *mic, int type) | |||
| 313 | int i; | 313 | int i; |
| 314 | void *dp = get_dp(mic, type); | 314 | void *dp = get_dp(mic, type); |
| 315 | 315 | ||
| 316 | for (i = mic_aligned_size(struct mic_bootparam); i < PAGE_SIZE; | 316 | for (i = sizeof(struct mic_bootparam); i < PAGE_SIZE; |
| 317 | i += mic_total_desc_size(d)) { | 317 | i += mic_total_desc_size(d)) { |
| 318 | d = dp + i; | 318 | d = dp + i; |
| 319 | 319 | ||
| @@ -445,8 +445,8 @@ init_vr(struct mic_info *mic, int fd, int type, | |||
| 445 | __func__, mic->name, vr0->va, vr0->info, vr_size, | 445 | __func__, mic->name, vr0->va, vr0->info, vr_size, |
| 446 | vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN)); | 446 | vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN)); |
| 447 | mpsslog("magic 0x%x expected 0x%x\n", | 447 | mpsslog("magic 0x%x expected 0x%x\n", |
| 448 | vr0->info->magic, MIC_MAGIC + type); | 448 | le32toh(vr0->info->magic), MIC_MAGIC + type); |
| 449 | assert(vr0->info->magic == MIC_MAGIC + type); | 449 | assert(le32toh(vr0->info->magic) == MIC_MAGIC + type); |
| 450 | if (vr1) { | 450 | if (vr1) { |
| 451 | vr1->va = (struct mic_vring *) | 451 | vr1->va = (struct mic_vring *) |
| 452 | &va[MIC_DEVICE_PAGE_END + vr_size]; | 452 | &va[MIC_DEVICE_PAGE_END + vr_size]; |
| @@ -458,8 +458,8 @@ init_vr(struct mic_info *mic, int fd, int type, | |||
| 458 | __func__, mic->name, vr1->va, vr1->info, vr_size, | 458 | __func__, mic->name, vr1->va, vr1->info, vr_size, |
| 459 | vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN)); | 459 | vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN)); |
| 460 | mpsslog("magic 0x%x expected 0x%x\n", | 460 | mpsslog("magic 0x%x expected 0x%x\n", |
| 461 | vr1->info->magic, MIC_MAGIC + type + 1); | 461 | le32toh(vr1->info->magic), MIC_MAGIC + type + 1); |
| 462 | assert(vr1->info->magic == MIC_MAGIC + type + 1); | 462 | assert(le32toh(vr1->info->magic) == MIC_MAGIC + type + 1); |
| 463 | } | 463 | } |
| 464 | done: | 464 | done: |
| 465 | return va; | 465 | return va; |
| @@ -520,7 +520,7 @@ static void * | |||
| 520 | virtio_net(void *arg) | 520 | virtio_net(void *arg) |
| 521 | { | 521 | { |
| 522 | static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)]; | 522 | static __u8 vnet_hdr[2][sizeof(struct virtio_net_hdr)]; |
| 523 | static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __aligned(64); | 523 | static __u8 vnet_buf[2][MAX_NET_PKT_SIZE] __attribute__ ((aligned(64))); |
| 524 | struct iovec vnet_iov[2][2] = { | 524 | struct iovec vnet_iov[2][2] = { |
| 525 | { { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) }, | 525 | { { .iov_base = vnet_hdr[0], .iov_len = sizeof(vnet_hdr[0]) }, |
| 526 | { .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } }, | 526 | { .iov_base = vnet_buf[0], .iov_len = sizeof(vnet_buf[0]) } }, |
| @@ -1412,6 +1412,12 @@ mic_config(void *arg) | |||
| 1412 | } | 1412 | } |
| 1413 | 1413 | ||
| 1414 | do { | 1414 | do { |
| 1415 | ret = lseek(fd, 0, SEEK_SET); | ||
| 1416 | if (ret < 0) { | ||
| 1417 | mpsslog("%s: Failed to seek to file start '%s': %s\n", | ||
| 1418 | mic->name, pathname, strerror(errno)); | ||
| 1419 | goto close_error1; | ||
| 1420 | } | ||
| 1415 | ret = read(fd, value, sizeof(value)); | 1421 | ret = read(fd, value, sizeof(value)); |
| 1416 | if (ret < 0) { | 1422 | if (ret < 0) { |
| 1417 | mpsslog("%s: Failed to read sysfs entry '%s': %s\n", | 1423 | mpsslog("%s: Failed to read sysfs entry '%s': %s\n", |
diff --git a/Documentation/networking/packet_mmap.txt b/Documentation/networking/packet_mmap.txt index c01223628a87..8e48e3b14227 100644 --- a/Documentation/networking/packet_mmap.txt +++ b/Documentation/networking/packet_mmap.txt | |||
| @@ -123,6 +123,16 @@ Transmission process is similar to capture as shown below. | |||
| 123 | [shutdown] close() --------> destruction of the transmission socket and | 123 | [shutdown] close() --------> destruction of the transmission socket and |
| 124 | deallocation of all associated resources. | 124 | deallocation of all associated resources. |
| 125 | 125 | ||
| 126 | Socket creation and destruction is also straight forward, and is done | ||
| 127 | the same way as in capturing described in the previous paragraph: | ||
| 128 | |||
| 129 | int fd = socket(PF_PACKET, mode, 0); | ||
| 130 | |||
| 131 | The protocol can optionally be 0 in case we only want to transmit | ||
| 132 | via this socket, which avoids an expensive call to packet_rcv(). | ||
| 133 | In this case, you also need to bind(2) the TX_RING with sll_protocol = 0 | ||
| 134 | set. Otherwise, htons(ETH_P_ALL) or any other protocol, for example. | ||
| 135 | |||
| 126 | Binding the socket to your network interface is mandatory (with zero copy) to | 136 | Binding the socket to your network interface is mandatory (with zero copy) to |
| 127 | know the header size of frames used in the circular buffer. | 137 | know the header size of frames used in the circular buffer. |
| 128 | 138 | ||
diff --git a/Documentation/power/runtime_pm.txt b/Documentation/power/runtime_pm.txt index 0f54333b0ff2..b6ce00b2be9a 100644 --- a/Documentation/power/runtime_pm.txt +++ b/Documentation/power/runtime_pm.txt | |||
| @@ -547,13 +547,11 @@ helper functions described in Section 4. In that case, pm_runtime_resume() | |||
| 547 | should be used. Of course, for this purpose the device's runtime PM has to be | 547 | should be used. Of course, for this purpose the device's runtime PM has to be |
| 548 | enabled earlier by calling pm_runtime_enable(). | 548 | enabled earlier by calling pm_runtime_enable(). |
| 549 | 549 | ||
| 550 | If the device bus type's or driver's ->probe() callback runs | 550 | It may be desirable to suspend the device once ->probe() has finished. |
| 551 | pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts, | 551 | Therefore the driver core uses the asyncronous pm_request_idle() to submit a |
| 552 | they will fail returning -EAGAIN, because the device's usage counter is | 552 | request to execute the subsystem-level idle callback for the device at that |
| 553 | incremented by the driver core before executing ->probe(). Still, it may be | 553 | time. A driver that makes use of the runtime autosuspend feature, may want to |
| 554 | desirable to suspend the device as soon as ->probe() has finished, so the driver | 554 | update the last busy mark before returning from ->probe(). |
| 555 | core uses pm_runtime_put_sync() to invoke the subsystem-level idle callback for | ||
| 556 | the device at that time. | ||
| 557 | 555 | ||
| 558 | Moreover, the driver core prevents runtime PM callbacks from racing with the bus | 556 | Moreover, the driver core prevents runtime PM callbacks from racing with the bus |
| 559 | notifier callback in __device_release_driver(), which is necessary, because the | 557 | notifier callback in __device_release_driver(), which is necessary, because the |
| @@ -656,7 +654,7 @@ out the following operations: | |||
| 656 | __pm_runtime_disable() with 'false' as the second argument for every device | 654 | __pm_runtime_disable() with 'false' as the second argument for every device |
| 657 | right before executing the subsystem-level .suspend_late() callback for it. | 655 | right before executing the subsystem-level .suspend_late() callback for it. |
| 658 | 656 | ||
| 659 | * During system resume it calls pm_runtime_enable() and pm_runtime_put_sync() | 657 | * During system resume it calls pm_runtime_enable() and pm_runtime_put() |
| 660 | for every device right after executing the subsystem-level .resume_early() | 658 | for every device right after executing the subsystem-level .resume_early() |
| 661 | callback and right after executing the subsystem-level .resume() callback | 659 | callback and right after executing the subsystem-level .resume() callback |
| 662 | for it, respectively. | 660 | for it, respectively. |
diff --git a/Documentation/security/00-INDEX b/Documentation/security/00-INDEX index 414235c1fcfc..45c82fd3e9d3 100644 --- a/Documentation/security/00-INDEX +++ b/Documentation/security/00-INDEX | |||
| @@ -22,3 +22,5 @@ keys.txt | |||
| 22 | - description of the kernel key retention service. | 22 | - description of the kernel key retention service. |
| 23 | tomoyo.txt | 23 | tomoyo.txt |
| 24 | - documentation on the TOMOYO Linux Security Module. | 24 | - documentation on the TOMOYO Linux Security Module. |
| 25 | IMA-templates.txt | ||
| 26 | - documentation on the template management mechanism for IMA. | ||
diff --git a/Documentation/security/IMA-templates.txt b/Documentation/security/IMA-templates.txt new file mode 100644 index 000000000000..a777e5f1df5b --- /dev/null +++ b/Documentation/security/IMA-templates.txt | |||
| @@ -0,0 +1,87 @@ | |||
| 1 | IMA Template Management Mechanism | ||
| 2 | |||
| 3 | |||
| 4 | ==== INTRODUCTION ==== | ||
| 5 | |||
| 6 | The original 'ima' template is fixed length, containing the filedata hash | ||
| 7 | and pathname. The filedata hash is limited to 20 bytes (md5/sha1). | ||
| 8 | The pathname is a null terminated string, limited to 255 characters. | ||
| 9 | To overcome these limitations and to add additional file metadata, it is | ||
| 10 | necessary to extend the current version of IMA by defining additional | ||
| 11 | templates. For example, information that could be possibly reported are | ||
| 12 | the inode UID/GID or the LSM labels either of the inode and of the process | ||
| 13 | that is accessing it. | ||
| 14 | |||
| 15 | However, the main problem to introduce this feature is that, each time | ||
| 16 | a new template is defined, the functions that generate and display | ||
| 17 | the measurements list would include the code for handling a new format | ||
| 18 | and, thus, would significantly grow over the time. | ||
| 19 | |||
| 20 | The proposed solution solves this problem by separating the template | ||
| 21 | management from the remaining IMA code. The core of this solution is the | ||
| 22 | definition of two new data structures: a template descriptor, to determine | ||
| 23 | which information should be included in the measurement list; a template | ||
| 24 | field, to generate and display data of a given type. | ||
| 25 | |||
| 26 | Managing templates with these structures is very simple. To support | ||
| 27 | a new data type, developers define the field identifier and implement | ||
| 28 | two functions, init() and show(), respectively to generate and display | ||
| 29 | measurement entries. Defining a new template descriptor requires | ||
| 30 | specifying the template format, a string of field identifiers separated | ||
| 31 | by the '|' character. While in the current implementation it is possible | ||
| 32 | to define new template descriptors only by adding their definition in the | ||
| 33 | template specific code (ima_template.c), in a future version it will be | ||
| 34 | possible to register a new template on a running kernel by supplying to IMA | ||
| 35 | the desired format string. In this version, IMA initializes at boot time | ||
| 36 | all defined template descriptors by translating the format into an array | ||
| 37 | of template fields structures taken from the set of the supported ones. | ||
| 38 | |||
| 39 | After the initialization step, IMA will call ima_alloc_init_template() | ||
| 40 | (new function defined within the patches for the new template management | ||
| 41 | mechanism) to generate a new measurement entry by using the template | ||
| 42 | descriptor chosen through the kernel configuration or through the newly | ||
| 43 | introduced 'ima_template=' kernel command line parameter. It is during this | ||
| 44 | phase that the advantages of the new architecture are clearly shown: | ||
| 45 | the latter function will not contain specific code to handle a given template | ||
| 46 | but, instead, it simply calls the init() method of the template fields | ||
| 47 | associated to the chosen template descriptor and store the result (pointer | ||
| 48 | to allocated data and data length) in the measurement entry structure. | ||
| 49 | |||
| 50 | The same mechanism is employed to display measurements entries. | ||
| 51 | The functions ima[_ascii]_measurements_show() retrieve, for each entry, | ||
| 52 | the template descriptor used to produce that entry and call the show() | ||
| 53 | method for each item of the array of template fields structures. | ||
| 54 | |||
| 55 | |||
| 56 | |||
| 57 | ==== SUPPORTED TEMPLATE FIELDS AND DESCRIPTORS ==== | ||
| 58 | |||
| 59 | In the following, there is the list of supported template fields | ||
| 60 | ('<identifier>': description), that can be used to define new template | ||
| 61 | descriptors by adding their identifier to the format string | ||
| 62 | (support for more data types will be added later): | ||
| 63 | |||
| 64 | - 'd': the digest of the event (i.e. the digest of a measured file), | ||
| 65 | calculated with the SHA1 or MD5 hash algorithm; | ||
| 66 | - 'n': the name of the event (i.e. the file name), with size up to 255 bytes; | ||
| 67 | - 'd-ng': the digest of the event, calculated with an arbitrary hash | ||
| 68 | algorithm (field format: [<hash algo>:]digest, where the digest | ||
| 69 | prefix is shown only if the hash algorithm is not SHA1 or MD5); | ||
| 70 | - 'n-ng': the name of the event, without size limitations. | ||
| 71 | |||
| 72 | |||
| 73 | Below, there is the list of defined template descriptors: | ||
| 74 | - "ima": its format is 'd|n'; | ||
| 75 | - "ima-ng" (default): its format is 'd-ng|n-ng'. | ||
| 76 | |||
| 77 | |||
| 78 | |||
| 79 | ==== USE ==== | ||
| 80 | |||
| 81 | To specify the template descriptor to be used to generate measurement entries, | ||
| 82 | currently the following methods are supported: | ||
| 83 | |||
| 84 | - select a template descriptor among those supported in the kernel | ||
| 85 | configuration ('ima-ng' is the default choice); | ||
| 86 | - specify a template descriptor name from the kernel command line through | ||
| 87 | the 'ima_template=' parameter. | ||
diff --git a/Documentation/security/keys.txt b/Documentation/security/keys.txt index 7b4145d00452..a4c33f1a7c6d 100644 --- a/Documentation/security/keys.txt +++ b/Documentation/security/keys.txt | |||
| @@ -865,15 +865,14 @@ encountered: | |||
| 865 | calling processes has a searchable link to the key from one of its | 865 | calling processes has a searchable link to the key from one of its |
| 866 | keyrings. There are three functions for dealing with these: | 866 | keyrings. There are three functions for dealing with these: |
| 867 | 867 | ||
| 868 | key_ref_t make_key_ref(const struct key *key, | 868 | key_ref_t make_key_ref(const struct key *key, bool possession); |
| 869 | unsigned long possession); | ||
| 870 | 869 | ||
| 871 | struct key *key_ref_to_ptr(const key_ref_t key_ref); | 870 | struct key *key_ref_to_ptr(const key_ref_t key_ref); |
| 872 | 871 | ||
| 873 | unsigned long is_key_possessed(const key_ref_t key_ref); | 872 | bool is_key_possessed(const key_ref_t key_ref); |
| 874 | 873 | ||
| 875 | The first function constructs a key reference from a key pointer and | 874 | The first function constructs a key reference from a key pointer and |
| 876 | possession information (which must be 0 or 1 and not any other value). | 875 | possession information (which must be true or false). |
| 877 | 876 | ||
| 878 | The second function retrieves the key pointer from a reference and the | 877 | The second function retrieves the key pointer from a reference and the |
| 879 | third retrieves the possession flag. | 878 | third retrieves the possession flag. |
| @@ -961,14 +960,17 @@ payload contents" for more information. | |||
| 961 | the argument will not be parsed. | 960 | the argument will not be parsed. |
| 962 | 961 | ||
| 963 | 962 | ||
| 964 | (*) Extra references can be made to a key by calling the following function: | 963 | (*) Extra references can be made to a key by calling one of the following |
| 964 | functions: | ||
| 965 | 965 | ||
| 966 | struct key *__key_get(struct key *key); | ||
| 966 | struct key *key_get(struct key *key); | 967 | struct key *key_get(struct key *key); |
| 967 | 968 | ||
| 968 | These need to be disposed of by calling key_put() when they've been | 969 | Keys so references will need to be disposed of by calling key_put() when |
| 969 | finished with. The key pointer passed in will be returned. If the pointer | 970 | they've been finished with. The key pointer passed in will be returned. |
| 970 | is NULL or CONFIG_KEYS is not set then the key will not be dereferenced and | 971 | |
| 971 | no increment will take place. | 972 | In the case of key_get(), if the pointer is NULL or CONFIG_KEYS is not set |
| 973 | then the key will not be dereferenced and no increment will take place. | ||
| 972 | 974 | ||
| 973 | 975 | ||
| 974 | (*) A key's serial number can be obtained by calling: | 976 | (*) A key's serial number can be obtained by calling: |
diff --git a/Documentation/target/tcm_mod_builder.py b/Documentation/target/tcm_mod_builder.py index 54d29c1320ed..230ce71f4d75 100755 --- a/Documentation/target/tcm_mod_builder.py +++ b/Documentation/target/tcm_mod_builder.py | |||
| @@ -440,15 +440,15 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): | |||
| 440 | buf += " /*\n" | 440 | buf += " /*\n" |
| 441 | buf += " * Setup default attribute lists for various fabric->tf_cit_tmpl\n" | 441 | buf += " * Setup default attribute lists for various fabric->tf_cit_tmpl\n" |
| 442 | buf += " */\n" | 442 | buf += " */\n" |
| 443 | buf += " TF_CIT_TMPL(fabric)->tfc_wwn_cit.ct_attrs = " + fabric_mod_name + "_wwn_attrs;\n" | 443 | buf += " fabric->tf_cit_tmpl.tfc_wwn_cit.ct_attrs = " + fabric_mod_name + "_wwn_attrs;\n" |
| 444 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_base_cit.ct_attrs = NULL;\n" | 444 | buf += " fabric->tf_cit_tmpl.tfc_tpg_base_cit.ct_attrs = NULL;\n" |
| 445 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_attrib_cit.ct_attrs = NULL;\n" | 445 | buf += " fabric->tf_cit_tmpl.tfc_tpg_attrib_cit.ct_attrs = NULL;\n" |
| 446 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_param_cit.ct_attrs = NULL;\n" | 446 | buf += " fabric->tf_cit_tmpl.tfc_tpg_param_cit.ct_attrs = NULL;\n" |
| 447 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_np_base_cit.ct_attrs = NULL;\n" | 447 | buf += " fabric->tf_cit_tmpl.tfc_tpg_np_base_cit.ct_attrs = NULL;\n" |
| 448 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_nacl_base_cit.ct_attrs = NULL;\n" | 448 | buf += " fabric->tf_cit_tmpl.tfc_tpg_nacl_base_cit.ct_attrs = NULL;\n" |
| 449 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_nacl_attrib_cit.ct_attrs = NULL;\n" | 449 | buf += " fabric->tf_cit_tmpl.tfc_tpg_nacl_attrib_cit.ct_attrs = NULL;\n" |
| 450 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_nacl_auth_cit.ct_attrs = NULL;\n" | 450 | buf += " fabric->tf_cit_tmpl.tfc_tpg_nacl_auth_cit.ct_attrs = NULL;\n" |
| 451 | buf += " TF_CIT_TMPL(fabric)->tfc_tpg_nacl_param_cit.ct_attrs = NULL;\n" | 451 | buf += " fabric->tf_cit_tmpl.tfc_tpg_nacl_param_cit.ct_attrs = NULL;\n" |
| 452 | buf += " /*\n" | 452 | buf += " /*\n" |
| 453 | buf += " * Register the fabric for use within TCM\n" | 453 | buf += " * Register the fabric for use within TCM\n" |
| 454 | buf += " */\n" | 454 | buf += " */\n" |
diff --git a/Documentation/vm/split_page_table_lock b/Documentation/vm/split_page_table_lock index 7521d367f21d..6dea4fd5c961 100644 --- a/Documentation/vm/split_page_table_lock +++ b/Documentation/vm/split_page_table_lock | |||
| @@ -63,9 +63,9 @@ levels. | |||
| 63 | PMD split lock enabling requires pgtable_pmd_page_ctor() call on PMD table | 63 | PMD split lock enabling requires pgtable_pmd_page_ctor() call on PMD table |
| 64 | allocation and pgtable_pmd_page_dtor() on freeing. | 64 | allocation and pgtable_pmd_page_dtor() on freeing. |
| 65 | 65 | ||
| 66 | Allocation usually happens in pmd_alloc_one(), freeing in pmd_free(), but | 66 | Allocation usually happens in pmd_alloc_one(), freeing in pmd_free() and |
| 67 | make sure you cover all PMD table allocation / freeing paths: i.e X86_PAE | 67 | pmd_free_tlb(), but make sure you cover all PMD table allocation / freeing |
| 68 | preallocate few PMDs on pgd_alloc(). | 68 | paths: i.e X86_PAE preallocate few PMDs on pgd_alloc(). |
| 69 | 69 | ||
| 70 | With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK. | 70 | With everything in place you can set CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK. |
| 71 | 71 | ||
